t20-common-lib 0.10.0 → 0.10.1

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/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "t20-common-lib",
3
- "version": "0.10.0",
3
+ "version": "0.10.1",
4
4
  "description": "T20",
5
5
  "private": false,
6
6
  "main": "dist/index.js",
@@ -61,4 +61,4 @@
61
61
  "last 2 versions",
62
62
  "not dead"
63
63
  ]
64
- }
64
+ }
@@ -0,0 +1,8 @@
1
+ import DatePickerPor from './src/main';
2
+
3
+ /* istanbul ignore next */
4
+ DatePickerPor.install = function(Vue) {
5
+ Vue.component(DatePickerPor.name, DatePickerPor);
6
+ };
7
+
8
+ export default DatePickerPor;
@@ -0,0 +1,306 @@
1
+ <template>
2
+ <el-date-picker
3
+ ref="date-picker"
4
+ v-model="valueC"
5
+ class="n20-date-editor"
6
+ :class="{
7
+ 'has-value': clearable && valueC,
8
+ [this.$attrs && this.$attrs['rule-form']]: !valueC
9
+ }"
10
+ :popper-class="
11
+ !clearable && type === 'datetimerange'
12
+ ? 'clearable-datetimerange' + ' ' + $attrs['popper-class']
13
+ : $attrs['popper-class']
14
+ "
15
+ :type="type"
16
+ :value-format="valueFormat"
17
+ :placeholder="$l('选择日期')"
18
+ :start-placeholder="$l('开始日期')"
19
+ :end-placeholder="$l('结束日期')"
20
+ :picker-options="pickerOptionsAs"
21
+ :clearable="clearable"
22
+ v-bind="$attrs"
23
+ v-on="listeners"
24
+ />
25
+ </template>
26
+
27
+ <script>
28
+ import dayjs from 'dayjs'
29
+
30
+ const getShortcutDefinitions = () => ({
31
+ 'today': {
32
+ text: this.$l('今天'),
33
+ onClick(picker) {
34
+ const start = new Date()
35
+ const end = new Date()
36
+ picker.$emit('pick', [start, end])
37
+ }
38
+ },
39
+ 'recent-week': {
40
+ text: this.$l('最近一周'),
41
+ onClick(picker) {
42
+ const end = new Date()
43
+ const start = new Date()
44
+ start.setTime(start.getTime() - 3600 * 1000 * 24 * 7)
45
+ picker.$emit('pick', [start, end])
46
+ }
47
+ },
48
+ 'recent-month': {
49
+ text: this.$l('最近一月'),
50
+ onClick(picker) {
51
+ const start = new Date()
52
+ const end = new Date()
53
+ start.setMonth(start.getMonth() - 1)
54
+ start.setHours(0, 0, 0)
55
+ end.setHours(23, 59, 59)
56
+ picker.$emit('pick', [start, end])
57
+ }
58
+ },
59
+ 'recent-3-months': {
60
+ text: this.$l('最近三月'),
61
+ onClick(picker) {
62
+ const start = new Date()
63
+ const end = new Date()
64
+ start.setMonth(start.getMonth() - 3)
65
+ start.setHours(0, 0, 0)
66
+ end.setHours(23, 59, 59)
67
+ picker.$emit('pick', [start, end])
68
+ }
69
+ },
70
+ 'recent-6-months': {
71
+ text: this.$l('最近六月'),
72
+ onClick(picker) {
73
+ const start = new Date()
74
+ const end = new Date()
75
+ start.setMonth(start.getMonth() - 6)
76
+ start.setHours(0, 0, 0)
77
+ end.setHours(23, 59, 59)
78
+ picker.$emit('pick', [start, end])
79
+ }
80
+ },
81
+ 'recent-year': {
82
+ text: this.$l('最近一年'),
83
+ onClick(picker) {
84
+ const start = new Date()
85
+ const end = new Date()
86
+ start.setFullYear(start.getFullYear() - 1)
87
+ start.setHours(0, 0, 0)
88
+ end.setHours(23, 59, 59)
89
+ picker.$emit('pick', [start, end])
90
+ }
91
+ },
92
+ 'recent-3-years': {
93
+ text: this.$l('最近三年'),
94
+ onClick(picker) {
95
+ const start = new Date()
96
+ const end = new Date()
97
+ start.setFullYear(start.getFullYear() - 3)
98
+ start.setHours(0, 0, 0)
99
+ end.setHours(23, 59, 59)
100
+ picker.$emit('pick', [start, end])
101
+ }
102
+ },
103
+ 'start-from-today': {
104
+ text: this.$l('今天开始'),
105
+ onClick(picker) {
106
+ const start = dayjs().format('YYYY-MM-DD')
107
+ const end = dayjs().add(99, 'year').format('YYYY-MM-DD')
108
+ picker.$emit('pick', [start, end])
109
+ }
110
+ },
111
+ 'end-today': {
112
+ text: this.$l('今天截止'),
113
+ onClick(picker) {
114
+ const end = dayjs().format('YYYY-MM-DD')
115
+ const start = dayjs().subtract(100, 'year').format('YYYY-MM-DD')
116
+ picker.$emit('pick', [start, end])
117
+ }
118
+ },
119
+ 'current-month': {
120
+ text: this.$l('当月'),
121
+ onClick(picker) {
122
+ const start = dayjs().startOf('month').toDate()
123
+ const end = dayjs().endOf('month').toDate()
124
+ picker.$emit('pick', [start, end])
125
+ }
126
+ },
127
+ 'current-year': {
128
+ text: this.$l('当年'),
129
+ onClick(picker) {
130
+ const start = dayjs().startOf('year').toDate()
131
+ const end = dayjs().endOf('year').toDate()
132
+ picker.$emit('pick', [start, end])
133
+ }
134
+ }
135
+ })
136
+
137
+ const defaultShortcuts1Keys = [
138
+ 'today',
139
+ 'recent-week',
140
+ 'recent-month',
141
+ 'recent-3-months',
142
+ 'recent-6-months',
143
+ 'recent-year',
144
+ 'recent-3-years'
145
+ ]
146
+
147
+ const defaultShortcuts2Keys = [
148
+ 'recent-month',
149
+ 'recent-3-months',
150
+ 'recent-6-months',
151
+ 'recent-year',
152
+ 'recent-3-years'
153
+ ]
154
+
155
+ let disabledDate_1 = (t) => {
156
+ let now = new Date()
157
+ now.setHours(0, 0, -1)
158
+ return t < now
159
+ }
160
+ let disabledDate_2 = (t) => {
161
+ let now = new Date()
162
+ now.setHours(23, 59, 59)
163
+ return t > now
164
+ }
165
+
166
+ export default {
167
+ name: 'DatePickerPor',
168
+ props: {
169
+ type: {
170
+ type: String,
171
+ default: 'daterange'
172
+ },
173
+ value: {
174
+ type: [String, Number, Date],
175
+ default: undefined
176
+ },
177
+ startDate: {
178
+ type: [String, Number, Date],
179
+ default: null
180
+ },
181
+ endDate: {
182
+ type: [String, Number, Date],
183
+ default: null
184
+ },
185
+ valueFormat: {
186
+ type: String,
187
+ default: 'yyyy-MM-dd'
188
+ },
189
+ minNow: {
190
+ type: Boolean,
191
+ default: false
192
+ },
193
+ maxNow: {
194
+ type: Boolean,
195
+ default: false
196
+ },
197
+ shortcuts: {
198
+ type: Boolean,
199
+ default: true
200
+ },
201
+ startStop: {
202
+ type: Boolean,
203
+ default: false
204
+ },
205
+ clearable: {
206
+ type: Boolean,
207
+ default: true
208
+ },
209
+ pickerOptions: {
210
+ type: Object,
211
+ default: () => ({})
212
+ },
213
+ shortcutConfig: {
214
+ type: Array,
215
+ default: null
216
+ }
217
+ },
218
+ data() {
219
+ let shortcuts = undefined
220
+ const allShortcuts = getShortcutDefinitions()
221
+
222
+ let config = this.shortcutConfig
223
+ if (!config) {
224
+ if (this.shortcuts && ['daterange', 'datetimerange'].includes(this.type)) {
225
+ config = this.startStop ? defaultShortcuts2Keys : defaultShortcuts1Keys
226
+ }
227
+ }
228
+
229
+ if (config) {
230
+ shortcuts = config.map(item => {
231
+ if (typeof item === 'string') {
232
+ return allShortcuts[item]
233
+ }
234
+ return item
235
+ }).filter(Boolean)
236
+ }
237
+
238
+ this.pickerOptionsAs = Object.assign(
239
+ {
240
+ disabledDate: this.minNow ? disabledDate_1 : this.maxNow ? disabledDate_2 : undefined,
241
+ shortcuts
242
+ },
243
+ this.pickerOptions
244
+ )
245
+
246
+ this.listeners = Object.assign({}, this.$listeners, {
247
+ input: () => {},
248
+ change: () => {}
249
+ })
250
+ return {}
251
+ },
252
+ computed: {
253
+ valueC: {
254
+ get() {
255
+ if (['daterange', 'monthrange', 'datetimerange'].includes(this.type)) {
256
+ if (this.startDate && this.endDate) {
257
+ return [this.startDate, this.endDate]
258
+ } else {
259
+ return null
260
+ }
261
+ } else {
262
+ return this.value
263
+ }
264
+ },
265
+ set(val) {
266
+ if (['daterange', 'monthrange', 'datetimerange'].includes(this.type)) {
267
+ if (val && val[0]) {
268
+ if (this.type === 'monthrange' && ['yyyy-MM-dd', 'yyyy-MM-dd HH:mm:ss'].includes(this.valueFormat)) {
269
+ let end = new Date(val[1])
270
+ end.setMonth(end.getMonth() + 1)
271
+ end.setDate(0)
272
+ let Y = end.getFullYear()
273
+ let M = end.getMonth() + 1
274
+ let D = end.getDate()
275
+ let str = `${Y}-${M > 9 ? M : '0' + M}-${D > 9 ? D : '0' + D}`
276
+ if (this.valueFormat === 'yyyy-MM-dd HH:mm:ss') str = str + ' 23:59:59'
277
+ this.$emit('update:start-date', val[0])
278
+ this.$emit('update:end-date', str)
279
+ this.$emit('start', val[0])
280
+ this.$emit('end', str)
281
+ this.$emit('change', [val[0], str])
282
+ } else {
283
+ this.$emit('update:start-date', val[0])
284
+ this.$emit('update:end-date', val[1])
285
+ this.$emit('start', val[0])
286
+ this.$emit('end', val[1])
287
+ this.$emit('change', val)
288
+ }
289
+ } else {
290
+ this.$emit('update:start-date', null)
291
+ this.$emit('update:end-date', null)
292
+ this.$emit('start', null)
293
+ this.$emit('end', null)
294
+ this.$emit('change', val)
295
+ }
296
+ } else {
297
+ this.$emit('input', val)
298
+ this.$emit('change', val)
299
+ }
300
+ }
301
+ }
302
+ },
303
+ methods: {
304
+ }
305
+ }
306
+ </script>
package/src/index.js CHANGED
@@ -15,6 +15,7 @@ import MultiCurrencyStatistics from '../packages/multi-currency-statistics/index
15
15
  import BranchBankSelect from '../packages/branch-bank-select/index.js'
16
16
  import TabPage from '../packages/tab-page/index.js'
17
17
  import InputNumber from '../packages/input-number/index.js'
18
+ import DatePickerPor from '../packages/date-picker-por/index.js'
18
19
 
19
20
  // 存储组件列表
20
21
  const components = [
@@ -28,7 +29,8 @@ const components = [
28
29
  MultiCurrencyStatistics,
29
30
  BranchBankSelect,
30
31
  TabPage,
31
- InputNumber
32
+ InputNumber,
33
+ DatePickerPor
32
34
  ]
33
35
 
34
36
  // 定义 install 方法,接收 Vue 作为参数
@@ -68,6 +70,7 @@ export {
68
70
  MultiCurrencyStatistics,
69
71
  BranchBankSelect,
70
72
  InputNumber,
73
+ DatePickerPor,
71
74
  // 工具方法
72
75
  repairEl,
73
76
  getColumnWidth,