zengh
2022-09-14 8ea19a6bb34daab1410f6186992a4c1e90299c92
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
<template>
    <picker mode="multiSelector" :range="range" :value="value" @change="change" @columnchange="columnchange">
        <slot></slot>
    </picker>
</template>
 
<script>
    import * as utils from "./e-picker.js";
    let defaultValue;
    export default {
        data() {
            return {
                range: [],
                value: []
            };
        },
        props: {
            mode: {
                type: String,
                default: "date"
            },
            showValue: String,
            startYear: {
                type: [Number, String],
                default: 1949
            },
            endYear: {
                type: [String, Number],
                default: new Date().getFullYear()
            }
        },
        watch: {
            showValue(v) {
                this.init()
            }
        },
        created() {
            this.init();
        },
        methods: {
            init() {
                this.range = [];
                this.value = [];
                let l;
                defaultValue = utils.getLocalTime(this.mode)
                if (this.showValue) {
                    defaultValue = this.showValue
                }
                utils.checkShowValue(this.mode, defaultValue);
                this.mode == "dateTime" ? (l = 6) : (l = 3);
                for (let i = 0; i < l; i++) {
                    this.range.push([]);
                    this.value.push(0);
                    this.setColumns(i);
                }
            },
            setColumns(index) {
                const m = this.mode;
                if (m != "time") {
                    const showYear = defaultValue.substring(0, 4),
                        showMonth = defaultValue.substring(5, 7),
                        showDay = defaultValue.substring(8, 10);
                    switch (index) {
                        case 0:
                            const s = +this.startYear,
                                e = +this.endYear;
                            for (let i = s; i < e + 1; i++) {
                                this.range[index].push(i + "年");
                            }
                            this.value[index] = this.range[index].indexOf(showYear + "年");
                            break;
                        case 1:
                            this.range[index] = utils.getArr(1);
                            this.value[index] = this.range[index].indexOf(showMonth + "月");
                            break;
                        case 2:
                            this.range[index] = utils.getDayArr(+showYear, +showMonth);
                            this.value[index] = this.range[index].indexOf(showDay + "日");
                            break;
                        case 3:
                            const show_h = defaultValue.substring(11, 13);
                            this.range[index] = utils.getArr(3);
                            this.value[index] = this.range[index].indexOf(show_h + "时");
                            break;
                        case 4:
                            const show_m = defaultValue.substring(14, 16);
                            this.range[index] = utils.getArr(4);
                            this.value[index] = this.range[index].indexOf(show_m + "分");
                            break;
                        case 5:
                            const show_s = defaultValue.substring(17, 19);
                            this.range[index] = utils.getArr(5);
                            this.value[index] = this.range[index].indexOf(show_s + "秒");
                            break;
                    }
                } else {
                    switch (index) {
                        case 0:
                            const show_h = defaultValue.substring(0, 2);
                            this.range[index] = utils.getArr(3);
                            this.value[index] = this.range[index].indexOf(show_h + "时");
                            break;
                        case 1:
                            const show_m = defaultValue.substring(3, 5);
                            this.range[index] = utils.getArr(4);
                            this.value[index] = this.range[index].indexOf(show_m + "分");
                            break;
                        case 2:
                            const show_s = defaultValue.substring(6, 8);
                            this.range[index] = utils.getArr(5);
                            this.value[index] = this.range[index].indexOf(show_s + "秒");
                            break;
                    }
                }
                this.$forceUpdate()
            },
            columnchange(e) {
                if (this.mode == "time") return;
                const column = e.detail.column,
                    value = e.detail.value;
                if (column == 1 || !column) {
                    this.value[column] = value;
                }
                const y = parseInt(this.range[0][this.value[0]]),
                    m = parseInt(this.range[1][this.value[1]]);
                this.range[2] = utils.getDayArr(y, m);
                this.$forceUpdate()
            },
            change(e) {
                const value = e.detail.value;
                const timeArr = value.map((v, i) => {
                    return this.range[i][v];
                });
                this.$emit("change", utils.getDateTimeValue(timeArr, this.mode));
            }
        }
    };
</script>