WebApp【公共组件库】@前端(For Git Submodule)
Tevin
2023-08-17 bbf650c05d393447f8ff4afb7e6e21f109281c7b
页面筛选组件,增加单行文本输入子组件
2 files added
4 files modified
93 ■■■■■ changed files
forms/input/CInput.vue 4 ●●●● patch | view | raw | blame | history
plugins/filter/CFilter.vue 9 ●●●●● patch | view | raw | blame | history
plugins/filter/CFilterInput.vue 51 ●●●●● patch | view | raw | blame | history
plugins/filter/CFilterSwitchRadio.vue 2 ●●● patch | view | raw | blame | history
plugins/filter/cFilter.scss 2 ●●● patch | view | raw | blame | history
plugins/filter/cFilterInput.scss 25 ●●●●● patch | view | raw | blame | history
forms/input/CInput.vue
@@ -17,7 +17,7 @@
            :error="itemRes.error"
            :cursorSpacing="0"
            :value="value"
            :onChange="evt => hanldeChange(evt)"
            :onChange="evt => handleChange(evt)"
        >
            <slot v-if="!unit" />
            <text
@@ -61,7 +61,7 @@
        },
    },
    methods: {
        hanldeChange(evt) {
        handleChange(evt) {
            // 去除首尾空格,小程序中还可以粘贴换行符进来
            const changeValue = ((evt || '') + '')
                .replace(/^\s+|\s+$/g, '')
plugins/filter/CFilter.vue
@@ -74,6 +74,13 @@
                        :value="filterRes[item.name]"
                        :onChange="evt=>handleItemChange(item.name, evt)"
                    />
                    <CFilterInput
                        v-if="item.type==='input'"
                        type="item"
                        :label="item.label"
                        :value="filterRes[item.name]"
                        :onChange="evt=>handleItemChange(item.name, evt)"
                    />
                </view>
            </scroll-view>
            <view class="c-filter-drawer-btn">
@@ -100,6 +107,7 @@
import CFilterSelect from './CFilterSelect';
import CFilterDateRange from './CFilterDateRange';
import CFilterSwitchRadio from './CFilterSwitchRadio';
import CFilterInput from './CFilterInput';
import './cFilter.scss';
export default {
@@ -110,6 +118,7 @@
        CFilterSelect,
        CFilterDateRange,
        CFilterSwitchRadio,
        CFilterInput,
        CDrawer,
    },
    props: {
plugins/filter/CFilterInput.vue
New file
@@ -0,0 +1,51 @@
/**
 * CFilterInput - 筛选项目,单选
 * @author Tevin
 */
<template>
    <view
        class="c-filter-input"
        :class="'type-'+type"
    >
        <view class="label">{{label}}</view>
        <AtInput
            type="text"
            :placeholder="'请输入' + label"
            :value="value"
            :onChange="evt => handleChange(evt)"
        />
    </view>
</template>
<script>
import Taro from '@tarojs/taro';
import { AtInput } from 'taro-ui-vue';
import './cFilterInput.scss';
export default {
    name: 'CFilterInput',
    components: {
        AtInput,
    },
    props: {
        type: String,
        label: String,
        value: String,
        onChange: Function,
    },
    data() {
        return {};
    },
    methods: {
        handleChange(value) {
            if (value) {
                this.onChange(value);
            } else {
                this.onChange(undefined);
            }
        },
    },
    mounted() {},
};
</script>
plugins/filter/CFilterSwitchRadio.vue
@@ -32,7 +32,7 @@
import './cFilterSwitchRadio.scss';
export default {
    name: 'CFilterRadio',
    name: 'CFilterSwitchRadio',
    components: {
        CSwitchRadio,
    },
plugins/filter/cFilter.scss
@@ -44,7 +44,7 @@
                width: 12px;
                height: 12px;
                content: " ";
                background-color: #36a0e7;
                background-color: $colorDanger;
                border-radius: 50%;
            }
        }
plugins/filter/cFilterInput.scss
New file
@@ -0,0 +1,25 @@
/**
 * CFilterInput
 * @author Tevin
 */
@import "../../common/sassMixin";
.c-filter-input {
    .label {
        line-height: 40px;
    }
    .at-input {
        height: 90px;
        padding: 0;
        margin: 0;
        background-color: transparent;
        &::after {
            display: none;
        }
        input {
            height: 90px;
            line-height: 90px;
        }
    }
}