index.taro.vue 2.1 KB
Newer Older
S
suzigang 已提交
1
<template>
J
jerry 已提交
2 3
  <picker
    :mode="mode"
J
jerry 已提交
4
    :range="range"
J
jerry 已提交
5 6 7 8
    @change="onChange"
    @columnChange="onColumnChange"
    :value="value"
  >
J
jerry 已提交
9 10
    <slot></slot>
  </picker>
S
suzigang 已提交
11 12
</template>

J
jerry 已提交
13
<script lang="ts">
J
jerry 已提交
14
import { onUpdated, ref, watch } from 'vue';
J
jerry 已提交
15 16 17
const { create } = createComponent('picker');
import { commonProps } from '../../../../../../packages/__VUE/picker/commonProps';
import { createComponent } from './../../../../../../packages/utils/create';
S
suzigang 已提交
18 19
export default create({
  props: {
J
jerry 已提交
20 21 22 23
    mode: {
      type: String,
      default: 'selector'
    },
S
suzigang 已提交
24 25
    ...commonProps
  },
J
jerry 已提交
26
  emits: ['confirm'],
S
suzigang 已提交
27
  setup(props, { emit }) {
J
jerry 已提交
28
    let value = ref<any>([]);
J
jerry 已提交
29 30 31 32 33
    let range = ref<any>([]);

    onUpdated(() => {
      console.log('updated', props.listData);
    });
J
jerry 已提交
34

J
jerry 已提交
35
    const onChange = (e: any) => {
J
jerry 已提交
36
      let ret;
J
jerry 已提交
37

J
jerry 已提交
38 39 40
      if (props.mode === 'selector') {
        ret = props.listData[e.detail.value];
      } else if (props.mode === 'multiSelector') {
J
jerry 已提交
41 42 43
        ret = range.value
          ?.map((item: any, idx: number) => item[e.detail.value[idx]])
          .filter((res: any) => res);
J
jerry 已提交
44
      }
J
jerry 已提交
45 46 47
      console.log(e.detail.value, ret);

      emit('confirm', e.detail.value, ret);
J
jerry 已提交
48 49
    };

J
jerry 已提交
50 51 52 53 54
    watch(
      props.listData,
      (val: any) => {
        console.log('change');

J
jerry 已提交
55
        try {
J
jerry 已提交
56 57 58 59 60 61 62 63 64 65 66
          if (val.length) {
            value.value = [];
            range.value = [];
            if (props.mode === 'selector') {
              range.value = props.listData;
            } else if (props.mode === 'multiSelector') {
              val.forEach((item: any) => {
                value.value.push(item.defaultIndex);
                range.value.push(item.values);
              });
            }
J
jerry 已提交
67 68 69 70
          }
        } catch (error) {
          console.log('listData参数格式错误', error);
        }
J
jerry 已提交
71 72 73
      },
      { immediate: true, deep: true }
    );
J
jerry 已提交
74

J
jerry 已提交
75
    const onColumnChange = (e: any) => {
J
jerry 已提交
76
      console.log('修改的列为', e.detail.column, ',值为', e.detail.value);
S
suzigang 已提交
77 78 79
    };

    return {
J
jerry 已提交
80
      confirm,
J
jerry 已提交
81 82
      onChange,
      value,
J
jerry 已提交
83
      range,
J
jerry 已提交
84
      onColumnChange
S
suzigang 已提交
85 86 87 88
    };
  }
});
</script>
J
jerry 已提交
89 90

<style lang="scss" scoped></style>