| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107 |
- <template>
- <div class="date-cell">
- <van-cell v-if="disabled" :required="required" :title="title" :label="label"/>
- <van-cell v-else :required="required" :title="title" :label="label" is-link @click="clickItem"/>
- <Select-picker
- :options="dataList"
- v-bind="$attrs"
- :showPicker="showPicker"
- :title="title"
- :value-key="prop.label"
- :value="selected"
- @confirm="pickerConfirm"
- @cancel="cancelPicker">
- </Select-picker>
- </div>
- </template>
- <script>
- import SelectPicker from './SelectPicker.vue'
- export default {
- components:{
- SelectPicker
- },
- props:{
- //禁用
- disabled:{
- type: [Boolean,String],
- default: false,
- },
- //双向绑定的数据
- value:{
- type:Array,
- default: ()=>[],
- },
- required:{
- type: [Boolean,String],
- default: false,
- },
- //标题
- title:{
- type: String,
- default: null,
- },
- //父组件给的列表数据
- dataList:{
- type: Array,
- default: ()=>[],
- },
- //自定义字段
- prop:{
- type: Object,
- default: ()=>(
- {
- label:'label',
- value:'value'
- }
- ) ,
- }
- },
- data(){
- return{
- showPicker:false,
- label:'',
- }
- },
- computed:{
- columns(){
- return this.dataList;
- },
- selected(){
- let val;
- this.columns.forEach(v=> {
- if (v[this.prop.value] === this.value) {
- val.push(v[this.prop.label]);
- this.label = val.toString();
- }
- });
- return val;
- },
- },
- methods:{
- cancelPicker(){
- this.showPicker = false;
- },
- pickerConfirm(val){
- console.log(val,'234')
- this.label = val.map(v=>v[this.prop.label]).toString();
- this.showPicker = false;
- let arr = val.map(v=>v[this.prop.value]);
- this.$emit('change',arr)
- },
- clickItem(){
- this.showPicker = true;
- },
- },
- model:{
- prop: 'value',
- event: 'change',
- }
- }
- </script>
- <style lang="scss" scoped>
- .van-cell__label{
- margin: 0;
- }
- </style>
|