@kyfe/fms-vue2-components 0.0.3 → 0.0.5

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.
Files changed (154) hide show
  1. package/dist/assets/css/fms-ks-clamp-text.css +1 -0
  2. package/dist/assets/css/fms-ks-components.css +1 -0
  3. package/dist/assets/css/fms-ks-popover.css +1 -0
  4. package/dist/assets/css/fms-ks-search-tips-new.css +1 -0
  5. package/dist/assets/css/fms-ks-search-tips.css +1 -0
  6. package/dist/assets/css/fms-ks-select-box.css +1 -0
  7. package/dist/assets/css/fms-ks-select.css +1 -0
  8. package/dist/date-picker-bottom.17e75dc0.js +45 -0
  9. package/dist/date-picker-dropdown.1d8e9f00.js +34 -0
  10. package/dist/date-picker-right.b939e886.js +23 -0
  11. package/dist/date-picker-top.c38046f7.js +23 -0
  12. package/dist/date-range-select.647edaf6.js +69 -0
  13. package/dist/date-select.96eb3a9d.js +60 -0
  14. package/dist/date-week-month.169b98bc.js +57 -0
  15. package/dist/datetime-popup/index.js +411 -0
  16. package/dist/filter.c93f4ddb.js +45 -0
  17. package/dist/fms-copy-box/index.js +1 -1
  18. package/dist/fms-ks-block-title/index.js +38 -0
  19. package/dist/fms-ks-block-title/style.css +1 -0
  20. package/dist/fms-ks-clamp-text/index.js +9 -0
  21. package/dist/fms-ks-clamp-text.24eb5e8d.js +53 -0
  22. package/dist/fms-ks-components/index.js +9 -0
  23. package/dist/fms-ks-components.a5d9329b.js +4392 -0
  24. package/dist/fms-ks-decrypt/index.js +2 -2
  25. package/dist/fms-ks-decrypt.2f88e659.js +312 -0
  26. package/dist/fms-ks-file-upload/index.js +32 -31
  27. package/dist/fms-ks-file-upload/style.css +1 -1
  28. package/dist/fms-ks-form-grid/index.js +101 -0
  29. package/dist/fms-ks-form-grid/style.css +1 -0
  30. package/dist/fms-ks-more-lines/index.js +31 -0
  31. package/dist/fms-ks-more-lines/style.css +1 -0
  32. package/dist/fms-ks-page-popup/index.js +68 -0
  33. package/dist/fms-ks-page-popup/style.css +1 -0
  34. package/dist/fms-ks-picker/index.js +9 -0
  35. package/dist/fms-ks-picker.766b55f9.js +61 -0
  36. package/dist/fms-ks-popover/index.js +9 -0
  37. package/dist/fms-ks-popover.55ab4b82.js +95 -0
  38. package/dist/fms-ks-search-tips/index.js +9 -0
  39. package/dist/fms-ks-search-tips-new/index.js +9 -0
  40. package/dist/fms-ks-search-tips-new.7d08f710.js +125 -0
  41. package/dist/fms-ks-search-tips.d36859c3.js +142 -0
  42. package/dist/fms-ks-select/index.js +9 -0
  43. package/dist/fms-ks-select-box/index.js +9 -0
  44. package/dist/fms-ks-select-box.a00f0f08.js +43 -0
  45. package/dist/fms-ks-select.59416fd8.js +157 -0
  46. package/dist/fms-ks-warn-drawer/index.js +37 -0
  47. package/dist/fms-ks-warn-drawer/style.css +1 -0
  48. package/dist/fms-scroll-list/index.js +3 -1
  49. package/dist/index.js +30 -30
  50. package/dist/mixin.f4bc60f0.js +59 -0
  51. package/dist/month-range-select.374653da.js +97 -0
  52. package/dist/month-select.30ae7335.js +71 -0
  53. package/dist/oa-datetime-picker-new/style.css +1 -0
  54. package/dist/quarter-select.b6256880.js +73 -0
  55. package/dist/utils.159fba19.js +64 -0
  56. package/dist/week-select.27efca5c.js +70 -0
  57. package/package.json +31 -31
  58. package/src/assets/images/attachment/icon_default.svg +23 -0
  59. package/src/assets/images/attachment/icon_default_new.png +0 -0
  60. package/src/assets/images/attachment/icon_excel.svg +20 -0
  61. package/src/assets/images/attachment/icon_excel_new.png +0 -0
  62. package/src/assets/images/attachment/icon_file.png +0 -0
  63. package/src/assets/images/attachment/icon_pdf_new.png +0 -0
  64. package/src/assets/images/attachment/icon_ppt.svg +20 -0
  65. package/src/assets/images/attachment/icon_ppt_new.png +0 -0
  66. package/src/assets/images/attachment/icon_preview_file.png +0 -0
  67. package/src/assets/images/attachment/icon_txt.png +0 -0
  68. package/src/assets/images/attachment/icon_word.svg +19 -0
  69. package/src/assets/images/attachment/icon_word_new.png +0 -0
  70. package/src/assets/images/attachment/icon_xmind.png +0 -0
  71. package/src/assets/images/icon-arrow.png +0 -0
  72. package/src/assets/images/icon-forewarning.svg +1 -0
  73. package/src/components/date-picker/index.vue +205 -0
  74. package/src/components/datetime-picker-general/index.vue +161 -0
  75. package/src/components/datetime-popup/date-picker.js +217 -0
  76. package/src/components/datetime-popup/index.js +37 -0
  77. package/src/components/datetime-popup/index.vue +111 -0
  78. package/src/components/datetime-popup/mixin.js +125 -0
  79. package/src/components/datetime-popup/time-picker.js +102 -0
  80. package/src/components/datetime-popup/utils.js +124 -0
  81. package/src/components/datetime-popup//347/244/272/344/276/213/345/233/276.png +0 -0
  82. package/src/components/decrypt/README.md +0 -0
  83. package/src/components/decrypt/index.vue +73 -0
  84. package/src/components/fms-ks-block-title/fms-ks-block-title.vue +75 -0
  85. package/src/components/fms-ks-block-title/index.js +7 -0
  86. package/src/components/fms-ks-block-title//346/240/207/351/242/230.md +0 -0
  87. package/src/components/fms-ks-clamp-text/fms-ks-clamp-text.vue +66 -0
  88. package/src/components/fms-ks-clamp-text/images/icon-clamp.png +0 -0
  89. package/src/components/fms-ks-clamp-text/index.js +7 -0
  90. 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
  91. package/src/components/fms-ks-components/fms-ks-components.vue +699 -0
  92. package/src/components/fms-ks-components/index.js +7 -0
  93. package/src/components/fms-ks-components/money-directive.js +73 -0
  94. 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
  95. package/src/components/fms-ks-file-upload/fms-ks-file-upload.vue +8 -1
  96. package/src/components/fms-ks-form-grid/fields-conversion.js +107 -0
  97. package/src/components/fms-ks-form-grid/fms-ks-form-grid.vue +127 -0
  98. package/src/components/fms-ks-form-grid/index.js +7 -0
  99. package/src/components/fms-ks-more-lines/fms-ks-more-lines.vue +108 -0
  100. package/src/components/fms-ks-more-lines/index.js +7 -0
  101. package/src/components/fms-ks-more-lines//346/233/264/345/244/232.md +0 -0
  102. package/src/components/fms-ks-page-popup/fms-ks-page-popup.vue +153 -0
  103. package/src/components/fms-ks-page-popup/index.js +7 -0
  104. package/src/components/fms-ks-page-popup//345/274/271/345/207/272/345/261/202.md +0 -0
  105. package/src/components/fms-ks-picker/fms-ks-picker.vue +67 -0
  106. package/src/components/fms-ks-picker/index.js +7 -0
  107. package/src/components/fms-ks-picker//351/200/211/346/213/251/345/274/271/345/207/272/345/261/202.md +0 -0
  108. package/src/components/fms-ks-popover/click-outside.js +68 -0
  109. package/src/components/fms-ks-popover/fms-ks-popover.vue +89 -0
  110. package/src/components/fms-ks-popover/index.js +7 -0
  111. package/src/components/fms-ks-popover//345/274/271/345/207/272/345/261/202.md +0 -0
  112. package/src/components/fms-ks-search-tips/fms-ks-search-tips.vue +296 -0
  113. package/src/components/fms-ks-search-tips/index.js +7 -0
  114. package/src/components/fms-ks-search-tips//350/277/234/347/250/213/346/220/234/347/264/242.md +118 -0
  115. package/src/components/fms-ks-search-tips-new/fms-ks-search-tips-new.vue +242 -0
  116. package/src/components/fms-ks-search-tips-new/index.js +7 -0
  117. package/src/components/fms-ks-search-tips-new/style.less +137 -0
  118. 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
  119. package/src/components/fms-ks-select/fms-ks-select.vue +421 -0
  120. package/src/components/fms-ks-select/index.js +7 -0
  121. package/src/components/fms-ks-select//351/200/211/346/213/251/346/241/206.md +0 -0
  122. package/src/components/fms-ks-select-box/fms-ks-select-box.vue +84 -0
  123. package/src/components/fms-ks-select-box/index.js +7 -0
  124. package/src/components/fms-ks-select-box//344/270/215/351/234/200/350/246/201popup/347/232/204select.md +0 -0
  125. package/src/components/fms-ks-warn-drawer/fms-ks-warn-drawer.vue +111 -0
  126. package/src/components/fms-ks-warn-drawer/index.js +7 -0
  127. package/src/components/fms-ks-warn-drawer//351/242/204/350/255/246/346/217/220/347/244/272.md +0 -0
  128. package/src/components/ks-decrypt/README.md +140 -0
  129. package/src/components/ks-decrypt/index.vue +155 -0
  130. package/src/components/ks-popover/index.vue +483 -0
  131. package/src/components/ks-popover/mixin.js +28 -0
  132. package/src/components/ks-popover/utils.js +60 -0
  133. package/src/components/oa-datetime-picker/index.vue +169 -0
  134. package/src/components/oa-datetime-picker-new/components/date-picker/README.md +21 -0
  135. package/src/components/oa-datetime-picker-new/components/date-picker/date-picker-bottom.vue +121 -0
  136. package/src/components/oa-datetime-picker-new/components/date-picker/date-picker-dropdown.vue +78 -0
  137. package/src/components/oa-datetime-picker-new/components/date-picker/date-picker-right.vue +86 -0
  138. package/src/components/oa-datetime-picker-new/components/date-picker/date-picker-top.vue +82 -0
  139. package/src/components/oa-datetime-picker-new/components/date-picker/date-picker.js +12 -0
  140. package/src/components/oa-datetime-picker-new/components/date-picker/date-range-select.vue +106 -0
  141. package/src/components/oa-datetime-picker-new/components/date-picker/date-select.vue +66 -0
  142. package/src/components/oa-datetime-picker-new/components/date-picker/date-week-month.vue +131 -0
  143. package/src/components/oa-datetime-picker-new/components/date-picker/index.js +39 -0
  144. package/src/components/oa-datetime-picker-new/components/date-picker/mixin.js +85 -0
  145. package/src/components/oa-datetime-picker-new/components/date-picker/month-range-select.vue +127 -0
  146. package/src/components/oa-datetime-picker-new/components/date-picker/month-select.vue +87 -0
  147. package/src/components/oa-datetime-picker-new/components/date-picker/quarter-select.vue +95 -0
  148. package/src/components/oa-datetime-picker-new/components/date-picker/style.less +117 -0
  149. package/src/components/oa-datetime-picker-new/components/date-picker/utils.js +109 -0
  150. package/src/components/oa-datetime-picker-new/components/date-picker/week-select.vue +100 -0
  151. package/src/components/oa-datetime-picker-new/index.vue +212 -0
  152. package/src/index.js +8 -2
  153. package/vite.config.js +12 -1
  154. 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