@kyfe/fms-vue2-components 0.0.2 → 0.0.4
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/assets/css/fms-ks-clamp-text.css +1 -0
- package/dist/assets/css/fms-ks-components.css +1 -0
- package/dist/assets/css/fms-ks-popover.css +1 -0
- package/dist/assets/css/fms-ks-search-tips-new.css +1 -0
- package/dist/assets/css/fms-ks-search-tips.css +1 -0
- package/dist/assets/css/fms-ks-select-box.css +1 -0
- package/dist/assets/css/fms-ks-select.css +1 -0
- package/dist/date-picker-bottom.17e75dc0.js +45 -0
- package/dist/date-picker-dropdown.1d8e9f00.js +34 -0
- package/dist/date-picker-right.b939e886.js +23 -0
- package/dist/date-picker-top.c38046f7.js +23 -0
- package/dist/date-range-select.647edaf6.js +69 -0
- package/dist/date-select.96eb3a9d.js +60 -0
- package/dist/date-week-month.169b98bc.js +57 -0
- package/dist/datetime-popup/index.js +411 -0
- package/dist/filter.c93f4ddb.js +45 -0
- package/dist/fms-copy-box/index.js +1 -1
- package/dist/fms-ks-block-title/index.js +38 -0
- package/dist/fms-ks-block-title/style.css +1 -0
- package/dist/fms-ks-clamp-text/index.js +9 -0
- package/dist/fms-ks-clamp-text.24eb5e8d.js +53 -0
- package/dist/fms-ks-components/index.js +9 -0
- package/dist/fms-ks-components.a5d9329b.js +4392 -0
- package/dist/fms-ks-decrypt/index.js +2 -2
- package/dist/fms-ks-decrypt.2f88e659.js +312 -0
- package/dist/fms-ks-file-upload/index.js +32 -31
- package/dist/fms-ks-file-upload/style.css +1 -1
- package/dist/fms-ks-form-grid/index.js +101 -0
- package/dist/fms-ks-form-grid/style.css +1 -0
- package/dist/fms-ks-more-lines/index.js +31 -0
- package/dist/fms-ks-more-lines/style.css +1 -0
- package/dist/fms-ks-page-popup/index.js +68 -0
- package/dist/fms-ks-page-popup/style.css +1 -0
- package/dist/fms-ks-picker/index.js +9 -0
- package/dist/fms-ks-picker.766b55f9.js +61 -0
- package/dist/fms-ks-popover/index.js +9 -0
- package/dist/fms-ks-popover.55ab4b82.js +95 -0
- package/dist/fms-ks-search-tips/index.js +9 -0
- package/dist/fms-ks-search-tips-new/index.js +9 -0
- package/dist/fms-ks-search-tips-new.7d08f710.js +125 -0
- package/dist/fms-ks-search-tips.d36859c3.js +142 -0
- package/dist/fms-ks-select/index.js +9 -0
- package/dist/fms-ks-select-box/index.js +9 -0
- package/dist/fms-ks-select-box.a00f0f08.js +43 -0
- package/dist/fms-ks-select.59416fd8.js +157 -0
- package/dist/fms-ks-warn-drawer/index.js +37 -0
- package/dist/fms-ks-warn-drawer/style.css +1 -0
- package/dist/fms-scroll-list/index.js +3 -1
- package/dist/index.js +30 -30
- package/dist/mixin.f4bc60f0.js +59 -0
- package/dist/month-range-select.374653da.js +97 -0
- package/dist/month-select.30ae7335.js +71 -0
- package/dist/oa-datetime-picker-new/style.css +1 -0
- package/dist/quarter-select.b6256880.js +73 -0
- package/dist/utils.159fba19.js +64 -0
- package/dist/week-select.27efca5c.js +70 -0
- package/package.json +31 -31
- package/src/assets/images/attachment/icon_default.svg +23 -0
- package/src/assets/images/attachment/icon_default_new.png +0 -0
- package/src/assets/images/attachment/icon_excel.svg +20 -0
- package/src/assets/images/attachment/icon_excel_new.png +0 -0
- package/src/assets/images/attachment/icon_file.png +0 -0
- package/src/assets/images/attachment/icon_pdf_new.png +0 -0
- package/src/assets/images/attachment/icon_ppt.svg +20 -0
- package/src/assets/images/attachment/icon_ppt_new.png +0 -0
- package/src/assets/images/attachment/icon_preview_file.png +0 -0
- package/src/assets/images/attachment/icon_txt.png +0 -0
- package/src/assets/images/attachment/icon_word.svg +19 -0
- package/src/assets/images/attachment/icon_word_new.png +0 -0
- package/src/assets/images/attachment/icon_xmind.png +0 -0
- package/src/assets/images/icon-arrow.png +0 -0
- package/src/assets/images/icon-forewarning.svg +1 -0
- package/src/components/date-picker/index.vue +205 -0
- package/src/components/datetime-picker-general/index.vue +161 -0
- package/src/components/datetime-popup/date-picker.js +217 -0
- package/src/components/datetime-popup/index.js +37 -0
- package/src/components/datetime-popup/index.vue +111 -0
- package/src/components/datetime-popup/mixin.js +125 -0
- package/src/components/datetime-popup/time-picker.js +102 -0
- package/src/components/datetime-popup/utils.js +124 -0
- package/src/components/datetime-popup//347/244/272/344/276/213/345/233/276.png +0 -0
- package/src/components/decrypt/README.md +0 -0
- package/src/components/decrypt/index.vue +73 -0
- package/src/components/fms-ks-block-title/fms-ks-block-title.vue +75 -0
- package/src/components/fms-ks-block-title/index.js +7 -0
- package/src/components/fms-ks-block-title//346/240/207/351/242/230.md +0 -0
- package/src/components/fms-ks-clamp-text/fms-ks-clamp-text.vue +66 -0
- package/src/components/fms-ks-clamp-text/images/icon-clamp.png +0 -0
- package/src/components/fms-ks-clamp-text/index.js +7 -0
- package/src/components/fms-ks-clamp-text//346/226/207/346/234/254/346/224/266/350/265/267/345/261/225/345/274/200.md +0 -0
- package/src/components/fms-ks-components/fms-ks-components.vue +699 -0
- package/src/components/fms-ks-components/index.js +7 -0
- package/src/components/fms-ks-components/money-directive.js +73 -0
- package/src/components/fms-ks-components//350/241/250/345/215/225/351/205/215/347/275/256/347/273/204/344/273/266/350/257/264/346/230/216.md +10 -0
- package/src/components/fms-ks-file-upload/fms-ks-file-upload.vue +8 -1
- package/src/components/fms-ks-form-grid/fields-conversion.js +107 -0
- package/src/components/fms-ks-form-grid/fms-ks-form-grid.vue +127 -0
- package/src/components/fms-ks-form-grid/index.js +7 -0
- package/src/components/fms-ks-more-lines/fms-ks-more-lines.vue +108 -0
- package/src/components/fms-ks-more-lines/index.js +7 -0
- package/src/components/fms-ks-more-lines//346/233/264/345/244/232.md +0 -0
- package/src/components/fms-ks-page-popup/fms-ks-page-popup.vue +153 -0
- package/src/components/fms-ks-page-popup/index.js +7 -0
- package/src/components/fms-ks-page-popup//345/274/271/345/207/272/345/261/202.md +0 -0
- package/src/components/fms-ks-picker/fms-ks-picker.vue +67 -0
- package/src/components/fms-ks-picker/index.js +7 -0
- package/src/components/fms-ks-picker//351/200/211/346/213/251/345/274/271/345/207/272/345/261/202.md +0 -0
- package/src/components/fms-ks-popover/click-outside.js +68 -0
- package/src/components/fms-ks-popover/fms-ks-popover.vue +89 -0
- package/src/components/fms-ks-popover/index.js +7 -0
- package/src/components/fms-ks-popover//345/274/271/345/207/272/345/261/202.md +0 -0
- package/src/components/fms-ks-search-tips/fms-ks-search-tips.vue +296 -0
- package/src/components/fms-ks-search-tips/index.js +7 -0
- package/src/components/fms-ks-search-tips//350/277/234/347/250/213/346/220/234/347/264/242.md +118 -0
- package/src/components/fms-ks-search-tips-new/fms-ks-search-tips-new.vue +242 -0
- package/src/components/fms-ks-search-tips-new/index.js +7 -0
- package/src/components/fms-ks-search-tips-new/style.less +137 -0
- package/src/components/fms-ks-search-tips-new//350/277/234/347/250/213/346/220/234/347/264/242-/346/226/260.md +118 -0
- package/src/components/fms-ks-select/fms-ks-select.vue +421 -0
- package/src/components/fms-ks-select/index.js +7 -0
- package/src/components/fms-ks-select//351/200/211/346/213/251/346/241/206.md +0 -0
- package/src/components/fms-ks-select-box/fms-ks-select-box.vue +84 -0
- package/src/components/fms-ks-select-box/index.js +7 -0
- package/src/components/fms-ks-select-box//344/270/215/351/234/200/350/246/201popup/347/232/204select.md +0 -0
- package/src/components/fms-ks-warn-drawer/fms-ks-warn-drawer.vue +111 -0
- package/src/components/fms-ks-warn-drawer/index.js +7 -0
- package/src/components/fms-ks-warn-drawer//351/242/204/350/255/246/346/217/220/347/244/272.md +0 -0
- package/src/components/ks-decrypt/README.md +140 -0
- package/src/components/ks-decrypt/index.vue +155 -0
- package/src/components/ks-popover/index.vue +483 -0
- package/src/components/ks-popover/mixin.js +28 -0
- package/src/components/ks-popover/utils.js +60 -0
- package/src/components/oa-datetime-picker/index.vue +169 -0
- package/src/components/oa-datetime-picker-new/components/date-picker/README.md +21 -0
- package/src/components/oa-datetime-picker-new/components/date-picker/date-picker-bottom.vue +121 -0
- package/src/components/oa-datetime-picker-new/components/date-picker/date-picker-dropdown.vue +78 -0
- package/src/components/oa-datetime-picker-new/components/date-picker/date-picker-right.vue +86 -0
- package/src/components/oa-datetime-picker-new/components/date-picker/date-picker-top.vue +82 -0
- package/src/components/oa-datetime-picker-new/components/date-picker/date-picker.js +12 -0
- package/src/components/oa-datetime-picker-new/components/date-picker/date-range-select.vue +106 -0
- package/src/components/oa-datetime-picker-new/components/date-picker/date-select.vue +66 -0
- package/src/components/oa-datetime-picker-new/components/date-picker/date-week-month.vue +131 -0
- package/src/components/oa-datetime-picker-new/components/date-picker/index.js +39 -0
- package/src/components/oa-datetime-picker-new/components/date-picker/mixin.js +85 -0
- package/src/components/oa-datetime-picker-new/components/date-picker/month-range-select.vue +127 -0
- package/src/components/oa-datetime-picker-new/components/date-picker/month-select.vue +87 -0
- package/src/components/oa-datetime-picker-new/components/date-picker/quarter-select.vue +95 -0
- package/src/components/oa-datetime-picker-new/components/date-picker/style.less +117 -0
- package/src/components/oa-datetime-picker-new/components/date-picker/utils.js +109 -0
- package/src/components/oa-datetime-picker-new/components/date-picker/week-select.vue +100 -0
- package/src/components/oa-datetime-picker-new/index.vue +212 -0
- package/src/index.js +8 -2
- package/vite.config.js +12 -1
- package/dist/fms-ks-decrypt.bcc12f44.js +0 -335
|
@@ -0,0 +1,217 @@
|
|
|
1
|
+
import { isDate, getMonthEndDay, padZero, transform } from './utils'
|
|
2
|
+
import { sharedProps, TimePickerMixin } from './mixin'
|
|
3
|
+
import dayjs from 'dayjs'
|
|
4
|
+
|
|
5
|
+
const currentYear = dayjs().year()
|
|
6
|
+
const currentMonth = dayjs().month() + 1
|
|
7
|
+
|
|
8
|
+
export default {
|
|
9
|
+
mixins: [TimePickerMixin],
|
|
10
|
+
props: {
|
|
11
|
+
...sharedProps,
|
|
12
|
+
type: {
|
|
13
|
+
type: String,
|
|
14
|
+
default: 'datetime'
|
|
15
|
+
},
|
|
16
|
+
minDate: {
|
|
17
|
+
type: Date,
|
|
18
|
+
default: () => new Date(currentYear - 10, 0, 1)
|
|
19
|
+
},
|
|
20
|
+
maxDate: {
|
|
21
|
+
type: Date,
|
|
22
|
+
default: () => new Date(currentYear + 10, 11, 31)
|
|
23
|
+
}
|
|
24
|
+
},
|
|
25
|
+
watch: {
|
|
26
|
+
filter: 'updateInnerValue',
|
|
27
|
+
minDate: 'updateInnerValue',
|
|
28
|
+
maxDate: 'updateInnerValue',
|
|
29
|
+
value (val) {
|
|
30
|
+
val = this.formatValue(val)
|
|
31
|
+
if (val.valueOf() !== this.innerValue.valueOf()) {
|
|
32
|
+
this.innerValue = val
|
|
33
|
+
}
|
|
34
|
+
}
|
|
35
|
+
},
|
|
36
|
+
|
|
37
|
+
computed: {
|
|
38
|
+
ranges () {
|
|
39
|
+
const {
|
|
40
|
+
maxYear,
|
|
41
|
+
maxDate,
|
|
42
|
+
maxMonth,
|
|
43
|
+
maxHour,
|
|
44
|
+
maxMinute
|
|
45
|
+
} = this.getBoundary('max', this.innerValue)
|
|
46
|
+
|
|
47
|
+
const {
|
|
48
|
+
minYear,
|
|
49
|
+
minDate,
|
|
50
|
+
minMonth,
|
|
51
|
+
minHour,
|
|
52
|
+
minMinute
|
|
53
|
+
} = this.getBoundary('min', this.innerValue)
|
|
54
|
+
|
|
55
|
+
let dataRange = [`${minYear}-${padZero(minMonth)}-${padZero(minDate)}`, `${maxYear}-${padZero(maxMonth)}-${padZero(maxDate)}`]
|
|
56
|
+
|
|
57
|
+
let result = [
|
|
58
|
+
{
|
|
59
|
+
type: 'year',
|
|
60
|
+
range: [minYear, maxYear]
|
|
61
|
+
},
|
|
62
|
+
{
|
|
63
|
+
type: 'month',
|
|
64
|
+
range: [minMonth, maxMonth]
|
|
65
|
+
},
|
|
66
|
+
{
|
|
67
|
+
type: 'day',
|
|
68
|
+
range: [minDate, maxDate]
|
|
69
|
+
},
|
|
70
|
+
{
|
|
71
|
+
type: 'hour',
|
|
72
|
+
range: [minHour, maxHour]
|
|
73
|
+
},
|
|
74
|
+
{
|
|
75
|
+
type: 'minute',
|
|
76
|
+
range: [minMinute, maxMinute]
|
|
77
|
+
}
|
|
78
|
+
]
|
|
79
|
+
if (this.type === 'datetime') {
|
|
80
|
+
result = [{ type: 'week', range: [...dataRange] }, ...result.splice(3, 2)]
|
|
81
|
+
} else if (this.type === 'date') {
|
|
82
|
+
result.splice(3, 2)
|
|
83
|
+
} else if (this.type === 'year-month') {
|
|
84
|
+
result.splice(2, 3)
|
|
85
|
+
}
|
|
86
|
+
console.log('ranges', result)
|
|
87
|
+
return result
|
|
88
|
+
}
|
|
89
|
+
},
|
|
90
|
+
methods: {
|
|
91
|
+
formatValue (value) {
|
|
92
|
+
if (!isDate(value)) {
|
|
93
|
+
value = this.minDate
|
|
94
|
+
}
|
|
95
|
+
let minDate = this.minDate.getTime()
|
|
96
|
+
let maxDate = this.maxDate.getTime()
|
|
97
|
+
|
|
98
|
+
value = Math.max(value, minDate)
|
|
99
|
+
value = Math.min(value, maxDate)
|
|
100
|
+
return dayjs(value).toDate()
|
|
101
|
+
},
|
|
102
|
+
getBoundary (type, value) {
|
|
103
|
+
let boundary = this[`${type}Date`]
|
|
104
|
+
if (this.type === 'datetime') {
|
|
105
|
+
let lastMonth = boundary ? boundary.getTime() : new Date(currentYear, currentMonth - 2, 1).getTime()
|
|
106
|
+
let nextMonth = boundary ? boundary.getTime() : new Date(currentYear, currentMonth, 31).getTime()
|
|
107
|
+
boundary = type === 'max' ? dayjs(nextMonth).toDate() : dayjs(lastMonth).toDate()
|
|
108
|
+
}
|
|
109
|
+
const year = boundary.getFullYear()
|
|
110
|
+
let month = 1
|
|
111
|
+
let date = 1
|
|
112
|
+
let hour = 0
|
|
113
|
+
let minute = 0
|
|
114
|
+
|
|
115
|
+
if (type === 'max') {
|
|
116
|
+
month = 12
|
|
117
|
+
date = getMonthEndDay(value.getFullYear(), value.getMonth() + 1)
|
|
118
|
+
hour = 23
|
|
119
|
+
minute = 59
|
|
120
|
+
}
|
|
121
|
+
|
|
122
|
+
if (value.getFullYear() === year) {
|
|
123
|
+
month = boundary.getMonth() + 1
|
|
124
|
+
if (value.getMonth() + 1 === month) {
|
|
125
|
+
date = boundary.getDate()
|
|
126
|
+
if (value.getDate() === date) {
|
|
127
|
+
hour = boundary.getHours()
|
|
128
|
+
if (value.getHours() === hour) {
|
|
129
|
+
minute = boundary.getMinutes()
|
|
130
|
+
}
|
|
131
|
+
}
|
|
132
|
+
}
|
|
133
|
+
}
|
|
134
|
+
return {
|
|
135
|
+
[`${type}Year`]: year,
|
|
136
|
+
[`${type}Month`]: month,
|
|
137
|
+
[`${type}Date`]: date,
|
|
138
|
+
[`${type}Hour`]: hour,
|
|
139
|
+
[`${type}Minute`]: minute
|
|
140
|
+
}
|
|
141
|
+
},
|
|
142
|
+
updateInnerValue () {
|
|
143
|
+
const indexes = this.getPicker().getIndexes()
|
|
144
|
+
|
|
145
|
+
const getValue = index => {
|
|
146
|
+
const { originValues } = this.originColumns[index]
|
|
147
|
+
return originValues[indexes[index]]
|
|
148
|
+
}
|
|
149
|
+
|
|
150
|
+
const year = getValue(0)
|
|
151
|
+
const month = getValue(1)
|
|
152
|
+
const maxDate = getMonthEndDay(year, month)
|
|
153
|
+
|
|
154
|
+
let value
|
|
155
|
+
let date
|
|
156
|
+
let yearMonthDay = getValue(0)
|
|
157
|
+
console.log('updateInnerValue', indexes, yearMonthDay)
|
|
158
|
+
if (this.type === 'year-month') {
|
|
159
|
+
date = 1
|
|
160
|
+
} else {
|
|
161
|
+
date = getValue(2)
|
|
162
|
+
}
|
|
163
|
+
|
|
164
|
+
date = date > maxDate ? maxDate : date;
|
|
165
|
+
let hour = 0
|
|
166
|
+
let minute = 0
|
|
167
|
+
|
|
168
|
+
if (this.type === 'datetime') {
|
|
169
|
+
hour = getValue(1)
|
|
170
|
+
minute = getValue(2)
|
|
171
|
+
value = new Date(`${yearMonthDay} ${hour}:${minute}:00`.replace(/-/g, '/'))
|
|
172
|
+
} else {
|
|
173
|
+
value = new Date(year, month - 1, date, hour, minute)
|
|
174
|
+
}
|
|
175
|
+
this.innerValue = this.formatValue(value)
|
|
176
|
+
},
|
|
177
|
+
onChange(picker) {
|
|
178
|
+
this.updateInnerValue()
|
|
179
|
+
|
|
180
|
+
this.$nextTick(() => {
|
|
181
|
+
this.$nextTick(() => {
|
|
182
|
+
this.$emit('change', picker)
|
|
183
|
+
})
|
|
184
|
+
})
|
|
185
|
+
},
|
|
186
|
+
updateColumnValue () {
|
|
187
|
+
const value = this.innerValue
|
|
188
|
+
const { formatter } = this
|
|
189
|
+
|
|
190
|
+
|
|
191
|
+
let values = [
|
|
192
|
+
formatter('year', `${value.getFullYear()}`),
|
|
193
|
+
formatter('month', padZero(value.getMonth() + 1)),
|
|
194
|
+
formatter('day', padZero(value.getDate()))
|
|
195
|
+
]
|
|
196
|
+
|
|
197
|
+
|
|
198
|
+
if (this.type === 'datetime') {
|
|
199
|
+
values = [
|
|
200
|
+
formatter('yearMonthDay', transform(`${padZero(value.getFullYear())}-${padZero(value.getMonth() + 1)}-${padZero(value.getDate())}`)),
|
|
201
|
+
formatter('hour', padZero(value.getHours())),
|
|
202
|
+
formatter('minute', padZero(value.getMinutes()))
|
|
203
|
+
]
|
|
204
|
+
console.log('updateColumnValue', values)
|
|
205
|
+
}
|
|
206
|
+
|
|
207
|
+
if (this.type === 'year-month') {
|
|
208
|
+
values = values.slice(0, 2)
|
|
209
|
+
}
|
|
210
|
+
|
|
211
|
+
this.$nextTick(() => {
|
|
212
|
+
this.getPicker() && this.getPicker().setValues && this.getPicker().setValues(values)
|
|
213
|
+
})
|
|
214
|
+
},
|
|
215
|
+
|
|
216
|
+
}
|
|
217
|
+
}
|
|
@@ -0,0 +1,37 @@
|
|
|
1
|
+
import TimePicker from './time-picker.js'
|
|
2
|
+
import DatePicker from './date-picker.js'
|
|
3
|
+
export default {
|
|
4
|
+
props: {
|
|
5
|
+
...TimePicker.props,
|
|
6
|
+
...DatePicker.props,
|
|
7
|
+
},
|
|
8
|
+
|
|
9
|
+
methods: {
|
|
10
|
+
getPicker () {
|
|
11
|
+
return this.$refs.root.getPicker()
|
|
12
|
+
},
|
|
13
|
+
getInnerValue () {
|
|
14
|
+
return this.$refs.root.innerValue
|
|
15
|
+
}
|
|
16
|
+
},
|
|
17
|
+
|
|
18
|
+
render (h) {
|
|
19
|
+
return this.type === 'time' ? (
|
|
20
|
+
<TimePicker
|
|
21
|
+
ref="root"
|
|
22
|
+
{...{
|
|
23
|
+
props: this.$props,
|
|
24
|
+
on: this.$listeners
|
|
25
|
+
}}
|
|
26
|
+
/>
|
|
27
|
+
) : (
|
|
28
|
+
<DatePicker
|
|
29
|
+
ref="root"
|
|
30
|
+
{...{
|
|
31
|
+
props: this.$props,
|
|
32
|
+
on: this.$listeners
|
|
33
|
+
}}
|
|
34
|
+
/>
|
|
35
|
+
)
|
|
36
|
+
}
|
|
37
|
+
}
|
|
@@ -0,0 +1,111 @@
|
|
|
1
|
+
<template>
|
|
2
|
+
<div class="ksui-datatime">
|
|
3
|
+
<van-popup :value="value" position="bottom" @input="onInput">
|
|
4
|
+
<div class="ksui-datatime-header">
|
|
5
|
+
<span>{{ currentDate | date }}</span>
|
|
6
|
+
<div class="icon-box" @click="onClose">
|
|
7
|
+
<van-icon name="cross" />
|
|
8
|
+
</div>
|
|
9
|
+
</div>
|
|
10
|
+
<datetime-picker
|
|
11
|
+
ref="datetimePicker"
|
|
12
|
+
v-model="currentDate"
|
|
13
|
+
v-bind="$attrs"
|
|
14
|
+
:showToolbar="false"
|
|
15
|
+
@change="onChange">
|
|
16
|
+
</datetime-picker>
|
|
17
|
+
<div class="ksui-datatime-footer">
|
|
18
|
+
<van-button
|
|
19
|
+
type="primary"
|
|
20
|
+
@click="onConfirm"
|
|
21
|
+
size="large">确定</van-button>
|
|
22
|
+
</div>
|
|
23
|
+
</van-popup>
|
|
24
|
+
</div>
|
|
25
|
+
</template>
|
|
26
|
+
|
|
27
|
+
<script>
|
|
28
|
+
import DatetimePicker from './index.js'
|
|
29
|
+
|
|
30
|
+
export default {
|
|
31
|
+
components: {
|
|
32
|
+
DatetimePicker
|
|
33
|
+
},
|
|
34
|
+
props: {
|
|
35
|
+
value: {
|
|
36
|
+
type: Boolean,
|
|
37
|
+
default: () => false
|
|
38
|
+
},
|
|
39
|
+
defaultValue: {
|
|
40
|
+
type: [Date, String, Number],
|
|
41
|
+
default: new Date()
|
|
42
|
+
}
|
|
43
|
+
},
|
|
44
|
+
data () {
|
|
45
|
+
return {
|
|
46
|
+
currentDate: this.defaultValue
|
|
47
|
+
}
|
|
48
|
+
},
|
|
49
|
+
created () {
|
|
50
|
+
console.log('currentDate', this.currentDate)
|
|
51
|
+
},
|
|
52
|
+
methods: {
|
|
53
|
+
onInput () {
|
|
54
|
+
this.$emit('input', false)
|
|
55
|
+
},
|
|
56
|
+
onClose () {
|
|
57
|
+
this.$emit('input', false)
|
|
58
|
+
},
|
|
59
|
+
onConfirm () {
|
|
60
|
+
let innerValue = this.$refs.datetimePicker.getInnerValue()
|
|
61
|
+
this.$emit('input', false)
|
|
62
|
+
this.$emit('confirm', innerValue)
|
|
63
|
+
},
|
|
64
|
+
onChange () {
|
|
65
|
+
let picker = this.$refs.datetimePicker.getPicker()
|
|
66
|
+
this.$emit('change', picker)
|
|
67
|
+
}
|
|
68
|
+
}
|
|
69
|
+
}
|
|
70
|
+
</script>
|
|
71
|
+
|
|
72
|
+
<style lang="less">
|
|
73
|
+
.ksui-datatime {
|
|
74
|
+
&-header {
|
|
75
|
+
height: 54px;
|
|
76
|
+
font-weight: 500;
|
|
77
|
+
display: flex;
|
|
78
|
+
flex-shrink: 0;
|
|
79
|
+
padding: 0 16px 0 20px;
|
|
80
|
+
font-size: 18px;
|
|
81
|
+
justify-content: space-between;
|
|
82
|
+
align-items: center;
|
|
83
|
+
border-bottom: 1px solid #EDEDED;
|
|
84
|
+
}
|
|
85
|
+
&-footer {
|
|
86
|
+
padding: 16px;
|
|
87
|
+
position: relative;
|
|
88
|
+
// &::after {
|
|
89
|
+
// position: absolute;
|
|
90
|
+
// box-sizing: border-box;
|
|
91
|
+
// content: ' ';
|
|
92
|
+
// pointer-events: none;
|
|
93
|
+
// right: 0;
|
|
94
|
+
// top: 0;
|
|
95
|
+
// left: 0;
|
|
96
|
+
// border-top: 1px solid #EDEDED;
|
|
97
|
+
// transform: scaleY(0.5);
|
|
98
|
+
// }
|
|
99
|
+
}
|
|
100
|
+
.van-picker {
|
|
101
|
+
padding: 0 20px;
|
|
102
|
+
}
|
|
103
|
+
.van-picker__frame {
|
|
104
|
+
background: rgba(121,114,254,0.10);
|
|
105
|
+
border-radius: 8px;
|
|
106
|
+
}
|
|
107
|
+
.van-hairline-unset--top-bottom:after {
|
|
108
|
+
border: 0;
|
|
109
|
+
}
|
|
110
|
+
}
|
|
111
|
+
</style>
|
|
@@ -0,0 +1,125 @@
|
|
|
1
|
+
import { times, padZero, getAllDate, setConent } from './utils'
|
|
2
|
+
|
|
3
|
+
export const pickerProps = {
|
|
4
|
+
title: String,
|
|
5
|
+
loading: Boolean,
|
|
6
|
+
readonly: Boolean,
|
|
7
|
+
allowHtml: Boolean,
|
|
8
|
+
showToolbar: {
|
|
9
|
+
type: Boolean,
|
|
10
|
+
default: true,
|
|
11
|
+
},
|
|
12
|
+
cancelButtonText: String,
|
|
13
|
+
confirmButtonText: String,
|
|
14
|
+
itemHeight: {
|
|
15
|
+
type: [Number, String],
|
|
16
|
+
default: 44,
|
|
17
|
+
},
|
|
18
|
+
visibleItemCount: {
|
|
19
|
+
type: [Number, String],
|
|
20
|
+
default: 6,
|
|
21
|
+
},
|
|
22
|
+
swipeDuration: {
|
|
23
|
+
type: [Number, String],
|
|
24
|
+
default: 1000,
|
|
25
|
+
}
|
|
26
|
+
}
|
|
27
|
+
|
|
28
|
+
export const sharedProps = {
|
|
29
|
+
...pickerProps,
|
|
30
|
+
value: null,
|
|
31
|
+
filter: Function,
|
|
32
|
+
showToolbar: {
|
|
33
|
+
type: Boolean,
|
|
34
|
+
default: true,
|
|
35
|
+
},
|
|
36
|
+
formatter: {
|
|
37
|
+
type: Function,
|
|
38
|
+
default: (type, value) => value,
|
|
39
|
+
},
|
|
40
|
+
}
|
|
41
|
+
|
|
42
|
+
export const TimePickerMixin = {
|
|
43
|
+
data () {
|
|
44
|
+
return {
|
|
45
|
+
innerValue: this.formatValue(this.value)
|
|
46
|
+
}
|
|
47
|
+
},
|
|
48
|
+
computed: {
|
|
49
|
+
originColumns () {
|
|
50
|
+
return this.ranges.map(({ type, range }) => {
|
|
51
|
+
let values = []
|
|
52
|
+
if (type === 'week') {
|
|
53
|
+
values = getAllDate(range[0], range[1])
|
|
54
|
+
} else {
|
|
55
|
+
values = times(range[1] - range[0] + 1, (index) =>
|
|
56
|
+
padZero(range[0] + index)
|
|
57
|
+
)
|
|
58
|
+
}
|
|
59
|
+
|
|
60
|
+
if (this.filter) {
|
|
61
|
+
values = this.filter(type, values)
|
|
62
|
+
}
|
|
63
|
+
let obj = {
|
|
64
|
+
type,
|
|
65
|
+
values: type === 'week' ? setConent(values) : values,
|
|
66
|
+
originValues: values
|
|
67
|
+
}
|
|
68
|
+
// 给年月日 周 时分的选择器添加一个class名
|
|
69
|
+
if (type === 'week') {
|
|
70
|
+
obj.className = 'flow-fms-datetime-week'
|
|
71
|
+
}
|
|
72
|
+
return obj
|
|
73
|
+
})
|
|
74
|
+
},
|
|
75
|
+
columns () {
|
|
76
|
+
return this.originColumns.map(column => ({ values: column.values.map(value => this.formatter(column.type, value)), className: column.className }))
|
|
77
|
+
}
|
|
78
|
+
},
|
|
79
|
+
watch: {
|
|
80
|
+
columns: 'updateColumnValue',
|
|
81
|
+
innerValue (val) {
|
|
82
|
+
this.$emit('input', val)
|
|
83
|
+
}
|
|
84
|
+
},
|
|
85
|
+
|
|
86
|
+
mounted() {
|
|
87
|
+
this.updateColumnValue()
|
|
88
|
+
|
|
89
|
+
this.$nextTick(() => {
|
|
90
|
+
this.updateInnerValue()
|
|
91
|
+
})
|
|
92
|
+
},
|
|
93
|
+
|
|
94
|
+
methods: {
|
|
95
|
+
getPicker () {
|
|
96
|
+
return this.$refs.picker
|
|
97
|
+
},
|
|
98
|
+
onConfirm () {
|
|
99
|
+
this.$emit('confirm', this.innerValue)
|
|
100
|
+
},
|
|
101
|
+
onCancel () {
|
|
102
|
+
this.$emit('cancel')
|
|
103
|
+
}
|
|
104
|
+
},
|
|
105
|
+
|
|
106
|
+
render (h) {
|
|
107
|
+
const props = {};
|
|
108
|
+
Object.keys(pickerProps).forEach(key => {
|
|
109
|
+
props[key] = this[key]
|
|
110
|
+
})
|
|
111
|
+
|
|
112
|
+
console.log('columns', this.columns)
|
|
113
|
+
|
|
114
|
+
return (
|
|
115
|
+
<van-picker
|
|
116
|
+
ref="picker"
|
|
117
|
+
columns={this.columns}
|
|
118
|
+
onChange={this.onChange}
|
|
119
|
+
onConfirm={this.onConfirm}
|
|
120
|
+
onCancel={this.onCancel}
|
|
121
|
+
{...{ props }}
|
|
122
|
+
/>
|
|
123
|
+
)
|
|
124
|
+
}
|
|
125
|
+
}
|
|
@@ -0,0 +1,102 @@
|
|
|
1
|
+
import { sharedProps, TimePickerMixin } from './mixin'
|
|
2
|
+
import { range, padZero } from './utils'
|
|
3
|
+
|
|
4
|
+
export default {
|
|
5
|
+
mixins: [TimePickerMixin],
|
|
6
|
+
props: {
|
|
7
|
+
...sharedProps,
|
|
8
|
+
minHour: {
|
|
9
|
+
type: [Number, String],
|
|
10
|
+
default: 0
|
|
11
|
+
},
|
|
12
|
+
maxHour: {
|
|
13
|
+
type: [Number, String],
|
|
14
|
+
default: 23
|
|
15
|
+
},
|
|
16
|
+
minMinute: {
|
|
17
|
+
type: [Number, String],
|
|
18
|
+
default: 0
|
|
19
|
+
},
|
|
20
|
+
maxMinute: {
|
|
21
|
+
type: [Number, String],
|
|
22
|
+
default: 59
|
|
23
|
+
}
|
|
24
|
+
},
|
|
25
|
+
|
|
26
|
+
computed: {
|
|
27
|
+
ranges () {
|
|
28
|
+
return [
|
|
29
|
+
{
|
|
30
|
+
type: 'hour',
|
|
31
|
+
range: [+this.minHour, +this.maxHour]
|
|
32
|
+
},
|
|
33
|
+
{
|
|
34
|
+
type: 'minute',
|
|
35
|
+
range: [+this.minMinute, +this.maxMinute]
|
|
36
|
+
},
|
|
37
|
+
];
|
|
38
|
+
},
|
|
39
|
+
},
|
|
40
|
+
|
|
41
|
+
watch: {
|
|
42
|
+
filter: 'updateInnerValue',
|
|
43
|
+
minHour: 'updateInnerValue',
|
|
44
|
+
maxHour: 'updateInnerValue',
|
|
45
|
+
minMinute: 'updateInnerValue',
|
|
46
|
+
maxMinute: 'updateInnerValue',
|
|
47
|
+
|
|
48
|
+
value(val) {
|
|
49
|
+
val = this.formatValue(val)
|
|
50
|
+
|
|
51
|
+
if (val !== this.innerValue) {
|
|
52
|
+
this.innerValue = val
|
|
53
|
+
this.updateColumnValue()
|
|
54
|
+
}
|
|
55
|
+
}
|
|
56
|
+
},
|
|
57
|
+
|
|
58
|
+
methods: {
|
|
59
|
+
formatValue(value) {
|
|
60
|
+
if (!value) {
|
|
61
|
+
value = `${padZero(this.minHour)}:${padZero(this.minMinute)}`
|
|
62
|
+
}
|
|
63
|
+
|
|
64
|
+
let [hour, minute] = value.split(':')
|
|
65
|
+
hour = padZero(range(hour, this.minHour, this.maxHour))
|
|
66
|
+
minute = padZero(range(minute, this.minMinute, this.maxMinute))
|
|
67
|
+
|
|
68
|
+
return `${hour}:${minute}`
|
|
69
|
+
},
|
|
70
|
+
|
|
71
|
+
updateInnerValue() {
|
|
72
|
+
const [hourIndex, minuteIndex] = this.getPicker().getIndexes()
|
|
73
|
+
const [hourColumn, minuteColumn] = this.originColumns
|
|
74
|
+
|
|
75
|
+
const hour = hourColumn.values[hourIndex] || hourColumn.values[0]
|
|
76
|
+
const minute = minuteColumn.values[minuteIndex] || minuteColumn.values[0]
|
|
77
|
+
|
|
78
|
+
this.innerValue = this.formatValue(`${hour}:${minute}`)
|
|
79
|
+
this.updateColumnValue()
|
|
80
|
+
},
|
|
81
|
+
|
|
82
|
+
onChange(picker) {
|
|
83
|
+
this.updateInnerValue()
|
|
84
|
+
|
|
85
|
+
this.$nextTick(() => {
|
|
86
|
+
this.$nextTick(() => {
|
|
87
|
+
this.$emit('change', picker)
|
|
88
|
+
})
|
|
89
|
+
})
|
|
90
|
+
},
|
|
91
|
+
|
|
92
|
+
updateColumnValue() {
|
|
93
|
+
const { formatter } = this
|
|
94
|
+
const pair = this.innerValue.split(':')
|
|
95
|
+
const values = [formatter('hour', pair[0]), formatter('minute', pair[1])]
|
|
96
|
+
|
|
97
|
+
this.$nextTick(() => {
|
|
98
|
+
this.getPicker() && this.getPicker().setValues && this.getPicker().setValues(values)
|
|
99
|
+
})
|
|
100
|
+
}
|
|
101
|
+
}
|
|
102
|
+
}
|
|
@@ -0,0 +1,124 @@
|
|
|
1
|
+
import dayjs from 'dayjs'
|
|
2
|
+
|
|
3
|
+
export function isDate (val) {
|
|
4
|
+
return Object.prototype.toString.call(val) === '[object Date]' && !Number.isNaN(val.getTime())
|
|
5
|
+
}
|
|
6
|
+
|
|
7
|
+
export function getMonthEndDay (year, month) {
|
|
8
|
+
return 32 - new Date(year, month - 1, 32).getDate()
|
|
9
|
+
}
|
|
10
|
+
|
|
11
|
+
export function padZero (num, targetLength = 2) {
|
|
12
|
+
let str = num + ''
|
|
13
|
+
|
|
14
|
+
while (str.length < targetLength) {
|
|
15
|
+
str = '0' + str
|
|
16
|
+
}
|
|
17
|
+
|
|
18
|
+
return str;
|
|
19
|
+
}
|
|
20
|
+
|
|
21
|
+
export function times (n, iteratee) {
|
|
22
|
+
let index = -1
|
|
23
|
+
const result = Array(n)
|
|
24
|
+
|
|
25
|
+
while (++index < n) {
|
|
26
|
+
result[index] = iteratee(index)
|
|
27
|
+
}
|
|
28
|
+
|
|
29
|
+
return result
|
|
30
|
+
}
|
|
31
|
+
|
|
32
|
+
export function getAllDate (min, max) {
|
|
33
|
+
min = min.replace(/-/g, '/')
|
|
34
|
+
max = max.replace(/-/g, '/')
|
|
35
|
+
let minDate = dayjs(min).toDate()
|
|
36
|
+
let maxDate = dayjs(max).toDate()
|
|
37
|
+
let result = [min]
|
|
38
|
+
while (maxDate.getTime() - minDate.getTime() > 0) {
|
|
39
|
+
minDate.setDate(minDate.getDate() + 1)
|
|
40
|
+
let temp = dayjs(minDate).toDate()
|
|
41
|
+
let cur = `${padZero(temp.getFullYear())}-${padZero(temp.getMonth() + 1)}-${padZero(temp.getDate())}`
|
|
42
|
+
// let obj = dateMap.find(v => v.date === cur)
|
|
43
|
+
// obj ? cur = obj.day : cur
|
|
44
|
+
result.push(cur)
|
|
45
|
+
}
|
|
46
|
+
return result
|
|
47
|
+
}
|
|
48
|
+
|
|
49
|
+
export const getCurrentWeek = (date) => {
|
|
50
|
+
let week = dayjs(date).day()
|
|
51
|
+
switch(week) {
|
|
52
|
+
case 1:
|
|
53
|
+
week = '周一'
|
|
54
|
+
break
|
|
55
|
+
case 2:
|
|
56
|
+
week = '周二'
|
|
57
|
+
break
|
|
58
|
+
case 3:
|
|
59
|
+
week = '周三'
|
|
60
|
+
break
|
|
61
|
+
case 4:
|
|
62
|
+
week = '周四'
|
|
63
|
+
break
|
|
64
|
+
case 5:
|
|
65
|
+
week = '周五'
|
|
66
|
+
break
|
|
67
|
+
case 6:
|
|
68
|
+
week = '周六'
|
|
69
|
+
break
|
|
70
|
+
case 0:
|
|
71
|
+
week = '周日'
|
|
72
|
+
break
|
|
73
|
+
}
|
|
74
|
+
return week
|
|
75
|
+
}
|
|
76
|
+
|
|
77
|
+
export const dateMap = (() => {
|
|
78
|
+
const oneday = 1000 * 60 * 60 * 24 // 代表一天的毫秒数
|
|
79
|
+
const getTime = (times = 0) => {
|
|
80
|
+
let date = dayjs(dayjs().valueOf() + oneday * times).toDate()
|
|
81
|
+
return `${date.getFullYear()}-${padZero(date.getMonth() + 1)}-${padZero(date.getDate())}`
|
|
82
|
+
}
|
|
83
|
+
|
|
84
|
+
return [
|
|
85
|
+
{
|
|
86
|
+
day: '前天',
|
|
87
|
+
date: getTime(-2)
|
|
88
|
+
},
|
|
89
|
+
{
|
|
90
|
+
day: '昨天',
|
|
91
|
+
date: getTime(-1)
|
|
92
|
+
},
|
|
93
|
+
{
|
|
94
|
+
day: '今天',
|
|
95
|
+
date: getTime()
|
|
96
|
+
},
|
|
97
|
+
{
|
|
98
|
+
day: '明天',
|
|
99
|
+
date: getTime(1)
|
|
100
|
+
},
|
|
101
|
+
{
|
|
102
|
+
day: '后天',
|
|
103
|
+
date: getTime(2)
|
|
104
|
+
}
|
|
105
|
+
]
|
|
106
|
+
})()
|
|
107
|
+
|
|
108
|
+
export const transform = (value) => {
|
|
109
|
+
let _value = value
|
|
110
|
+
let obj = dateMap.find(v => v.date === _value)
|
|
111
|
+
return obj ? `${obj.day} ${getCurrentWeek(_value)}` : `${_value} ${getCurrentWeek(_value)}`
|
|
112
|
+
}
|
|
113
|
+
|
|
114
|
+
export const setConent = (value) => {
|
|
115
|
+
return value.map(str => {
|
|
116
|
+
let obj = dateMap.find(item => item.date === str)
|
|
117
|
+
let _value = obj ? obj.day : str
|
|
118
|
+
return /[0-9]+/.test(_value) ? `${_value} ${getCurrentWeek(_value)}` : `${_value} ${getCurrentWeek(dateMap.find(item => item.day === _value).date)}`
|
|
119
|
+
})
|
|
120
|
+
}
|
|
121
|
+
|
|
122
|
+
export function range (num, min, max) {
|
|
123
|
+
return Math.min(Math.max(num, min), max)
|
|
124
|
+
}
|
|
File without changes
|