shijiplus-web-plugin 0.1.28 → 0.1.30
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 +1 -1
- package/src/components/begin-end-date-picker/begin-end-date-picker.vue +597 -0
- package/src/components/begin-end-date-picker/index.js +2 -0
- package/src/components/plus-comp/plus-table/export-mixin.js +3 -2
- package/src/directive/module/authAccess.js +62 -9
- package/src/index.js +2 -0
package/package.json
CHANGED
|
@@ -0,0 +1,597 @@
|
|
|
1
|
+
<template>
|
|
2
|
+
<div id="datepicker">
|
|
3
|
+
<Row style="width: 100%">
|
|
4
|
+
<i-col :span="modal == 'all' ? 11 : 24">
|
|
5
|
+
<DatePicker
|
|
6
|
+
ref="beginpickerRef"
|
|
7
|
+
:clearable="clearable"
|
|
8
|
+
:editable="editableDis"
|
|
9
|
+
:placement="mPlacement.begin"
|
|
10
|
+
:disabled="beginDisabled"
|
|
11
|
+
v-model="beginCopy"
|
|
12
|
+
:options="beginDateOptions"
|
|
13
|
+
:time-picker-options="beginTimePickerOptions"
|
|
14
|
+
:format="beginFormat"
|
|
15
|
+
:type="type"
|
|
16
|
+
:steps="timeSteps"
|
|
17
|
+
:transfer="transfer"
|
|
18
|
+
@on-change="beginChange"
|
|
19
|
+
:placeholder="startplaceholder"
|
|
20
|
+
></DatePicker>
|
|
21
|
+
</i-col>
|
|
22
|
+
<template v-if="modal == 'all'">
|
|
23
|
+
<i-col style="text-align: center" span="2">-</i-col>
|
|
24
|
+
<i-col span="11" id="endpicker">
|
|
25
|
+
<DatePicker
|
|
26
|
+
ref="endpickerRef"
|
|
27
|
+
:clearable="clearable"
|
|
28
|
+
:editable="editableDis"
|
|
29
|
+
:placement="mPlacement.end"
|
|
30
|
+
:disabled="endDisabled"
|
|
31
|
+
v-model="endCopy"
|
|
32
|
+
:options="endDateOptions"
|
|
33
|
+
:time-picker-options="endTimePickerOptions"
|
|
34
|
+
:format="endFormat"
|
|
35
|
+
:type="type"
|
|
36
|
+
:steps="timeSteps"
|
|
37
|
+
:transfer="transfer"
|
|
38
|
+
@on-change="endChange"
|
|
39
|
+
:placeholder="endplaceholder"
|
|
40
|
+
></DatePicker>
|
|
41
|
+
</i-col>
|
|
42
|
+
</template>
|
|
43
|
+
</Row>
|
|
44
|
+
</div>
|
|
45
|
+
</template>
|
|
46
|
+
<script>
|
|
47
|
+
// Vue.js组件,用于显示起始和结束日期的选择器
|
|
48
|
+
export default {
|
|
49
|
+
name: 'BeginEndDatePicker',
|
|
50
|
+
props: {
|
|
51
|
+
// 控制是否只显示开始时间
|
|
52
|
+
modal: {
|
|
53
|
+
type: String,
|
|
54
|
+
default: 'all'
|
|
55
|
+
},
|
|
56
|
+
format: {
|
|
57
|
+
// 日期格式化方式,可以是字符串或对象
|
|
58
|
+
type: [String, Object],
|
|
59
|
+
default: 'yyyy-MM-dd'
|
|
60
|
+
},
|
|
61
|
+
type: {
|
|
62
|
+
// 选择器类型
|
|
63
|
+
default: 'date'
|
|
64
|
+
},
|
|
65
|
+
transfer: {
|
|
66
|
+
// 是否将弹出框放置于body元素下
|
|
67
|
+
default: false
|
|
68
|
+
},
|
|
69
|
+
startplaceholder: {
|
|
70
|
+
// 开始日期的占位符
|
|
71
|
+
default: '开始时间'
|
|
72
|
+
},
|
|
73
|
+
editableDis: {
|
|
74
|
+
// 是否禁用日期的编辑
|
|
75
|
+
default: false
|
|
76
|
+
},
|
|
77
|
+
endplaceholder: {
|
|
78
|
+
// 结束日期的占位符
|
|
79
|
+
default: '结束时间'
|
|
80
|
+
},
|
|
81
|
+
min: {
|
|
82
|
+
// 允许的最小日期,可以是对象或字符串
|
|
83
|
+
default() {
|
|
84
|
+
return {
|
|
85
|
+
minStart: null
|
|
86
|
+
}
|
|
87
|
+
}
|
|
88
|
+
},
|
|
89
|
+
max: {
|
|
90
|
+
// 允许的最大日期,可以是日期对象或字符串
|
|
91
|
+
type: [Date, Object],
|
|
92
|
+
default() {
|
|
93
|
+
return null
|
|
94
|
+
}
|
|
95
|
+
},
|
|
96
|
+
begin: {
|
|
97
|
+
// 开始日期的值
|
|
98
|
+
default: ''
|
|
99
|
+
},
|
|
100
|
+
end: {
|
|
101
|
+
// 结束日期的值
|
|
102
|
+
default: ''
|
|
103
|
+
},
|
|
104
|
+
disabled: {
|
|
105
|
+
// 是否禁用选择器,可以是布尔值或对象
|
|
106
|
+
type: [Boolean, Object]
|
|
107
|
+
},
|
|
108
|
+
clearable: {
|
|
109
|
+
// 是否可清除日期
|
|
110
|
+
default: true
|
|
111
|
+
},
|
|
112
|
+
// 时间步长
|
|
113
|
+
timeSteps: {
|
|
114
|
+
// 用于设置小时、分钟和秒的步长
|
|
115
|
+
default() {
|
|
116
|
+
return [1, 1, 1]
|
|
117
|
+
}
|
|
118
|
+
},
|
|
119
|
+
disabledMinutes: {
|
|
120
|
+
type: Boolean,
|
|
121
|
+
default: false
|
|
122
|
+
},
|
|
123
|
+
// 距离开始时间的结束时间步长
|
|
124
|
+
// {
|
|
125
|
+
// years: 0,
|
|
126
|
+
// months: 0,
|
|
127
|
+
// days: 0,
|
|
128
|
+
// hours: 0,
|
|
129
|
+
// minutes: 0,
|
|
130
|
+
// seconds: 0
|
|
131
|
+
// }
|
|
132
|
+
maxEndStep: {
|
|
133
|
+
default() {
|
|
134
|
+
return null
|
|
135
|
+
}
|
|
136
|
+
}
|
|
137
|
+
},
|
|
138
|
+
watch: {
|
|
139
|
+
format: {
|
|
140
|
+
// 监听format属性变化
|
|
141
|
+
handler(val) {
|
|
142
|
+
if (typeof val === 'string') {
|
|
143
|
+
this.beginFormat = val
|
|
144
|
+
this.endFormat = val
|
|
145
|
+
} else {
|
|
146
|
+
this.beginFormat = val.begin
|
|
147
|
+
this.endFormat = val.end
|
|
148
|
+
}
|
|
149
|
+
},
|
|
150
|
+
deep: true,
|
|
151
|
+
immediate: true
|
|
152
|
+
},
|
|
153
|
+
begin: {
|
|
154
|
+
// 监听begin属性变化
|
|
155
|
+
handler(val) {
|
|
156
|
+
if (val) {
|
|
157
|
+
if (val instanceof Date) {
|
|
158
|
+
this.beginChange(this.$formatDate(val, this.beginFormat))
|
|
159
|
+
} else if (typeof val == 'string') {
|
|
160
|
+
this.beginCopy = val
|
|
161
|
+
}
|
|
162
|
+
} else {
|
|
163
|
+
this.beginCopy = ''
|
|
164
|
+
}
|
|
165
|
+
},
|
|
166
|
+
deep: true,
|
|
167
|
+
immediate: true
|
|
168
|
+
},
|
|
169
|
+
end: {
|
|
170
|
+
// 监听end属性变化
|
|
171
|
+
handler(val) {
|
|
172
|
+
if (val) {
|
|
173
|
+
if (val instanceof Date) {
|
|
174
|
+
this.endChange(this.$formatDate(val, this.endFormat))
|
|
175
|
+
} else if (typeof val == 'string') {
|
|
176
|
+
this.endCopy = val
|
|
177
|
+
}
|
|
178
|
+
} else {
|
|
179
|
+
this.endCopy = ''
|
|
180
|
+
}
|
|
181
|
+
},
|
|
182
|
+
deep: true,
|
|
183
|
+
immediate: true
|
|
184
|
+
},
|
|
185
|
+
clearable: {
|
|
186
|
+
// 监听clearable属性变化
|
|
187
|
+
handler(val) {
|
|
188
|
+
if (val == false) {
|
|
189
|
+
this.$nextTick(() => {
|
|
190
|
+
this.$refs.beginpickerRef.$children[1].$children[0].$children[6].$children[1].$el.style.display =
|
|
191
|
+
'none'
|
|
192
|
+
this.$refs.endpickerRef.$children[1].$children[0].$children[6].$children[1].$el.style.display =
|
|
193
|
+
'none'
|
|
194
|
+
})
|
|
195
|
+
}
|
|
196
|
+
},
|
|
197
|
+
deep: true,
|
|
198
|
+
immediate: true
|
|
199
|
+
},
|
|
200
|
+
disabled: {
|
|
201
|
+
// 监听disabled属性变化
|
|
202
|
+
handler(val) {
|
|
203
|
+
if (val) {
|
|
204
|
+
if (typeof val === 'boolean') {
|
|
205
|
+
this.beginDisabled = val
|
|
206
|
+
this.endDisabled = val
|
|
207
|
+
} else {
|
|
208
|
+
this.beginDisabled = val.begin
|
|
209
|
+
this.endDisabled = val.end
|
|
210
|
+
}
|
|
211
|
+
} else {
|
|
212
|
+
this.beginDisabled = false
|
|
213
|
+
this.endDisabled = false
|
|
214
|
+
}
|
|
215
|
+
},
|
|
216
|
+
deep: true,
|
|
217
|
+
immediate: true
|
|
218
|
+
},
|
|
219
|
+
max: {
|
|
220
|
+
// 监听max属性变化
|
|
221
|
+
handler(val) {
|
|
222
|
+
if (val) {
|
|
223
|
+
if (val instanceof Date) {
|
|
224
|
+
this.beginMaxDate = val
|
|
225
|
+
this.endMaxDate = val
|
|
226
|
+
} else if (typeof val == 'string') {
|
|
227
|
+
this.beginMaxDate = this.$getDateFromString(val, this.beginFormat)
|
|
228
|
+
this.endMaxDate = this.$getDateFromString(val, this.endFormat)
|
|
229
|
+
} else {
|
|
230
|
+
this.beginMaxDate = this.$getDateFromString(
|
|
231
|
+
val.begin,
|
|
232
|
+
this.beginFormat
|
|
233
|
+
)
|
|
234
|
+
this.endMaxDate = this.$getDateFromString(val.end, this.endFormat)
|
|
235
|
+
}
|
|
236
|
+
}
|
|
237
|
+
},
|
|
238
|
+
deep: true,
|
|
239
|
+
immediate: true
|
|
240
|
+
},
|
|
241
|
+
placement: {
|
|
242
|
+
handler(val) {
|
|
243
|
+
if (val) {
|
|
244
|
+
if (val instanceof String) {
|
|
245
|
+
this.mPlacement = {
|
|
246
|
+
begin: val,
|
|
247
|
+
end: val
|
|
248
|
+
}
|
|
249
|
+
} else {
|
|
250
|
+
this.mPlacement = val
|
|
251
|
+
}
|
|
252
|
+
}
|
|
253
|
+
},
|
|
254
|
+
deep: true,
|
|
255
|
+
immediate: true
|
|
256
|
+
},
|
|
257
|
+
timeSteps: {
|
|
258
|
+
handler(val) {
|
|
259
|
+
if (val) {
|
|
260
|
+
if (val instanceof Array) {
|
|
261
|
+
if (val.length < 3) {
|
|
262
|
+
throw new Error(
|
|
263
|
+
'from begin-end-date-picker: timeSteps prop is [' +
|
|
264
|
+
val +
|
|
265
|
+
'] need [h,m,s]'
|
|
266
|
+
)
|
|
267
|
+
}
|
|
268
|
+
} else {
|
|
269
|
+
throw new Error(
|
|
270
|
+
'from begin-end-date-picker: timeSteps prop need Array type'
|
|
271
|
+
)
|
|
272
|
+
}
|
|
273
|
+
}
|
|
274
|
+
},
|
|
275
|
+
deep: true,
|
|
276
|
+
immediate: true
|
|
277
|
+
}
|
|
278
|
+
},
|
|
279
|
+
data() {
|
|
280
|
+
return {
|
|
281
|
+
mPlacement: {
|
|
282
|
+
begin: 'bottom-end',
|
|
283
|
+
end: 'bottom-end'
|
|
284
|
+
},
|
|
285
|
+
// 内部的开始时间
|
|
286
|
+
beginCopy: '',
|
|
287
|
+
// 内部的结束时间
|
|
288
|
+
endCopy: '',
|
|
289
|
+
// 内部的开始时间是否可用
|
|
290
|
+
beginDisabled: false,
|
|
291
|
+
// 内部的结束时间是否可用
|
|
292
|
+
endDisabled: false,
|
|
293
|
+
// 内部的结束时间格式
|
|
294
|
+
beginFormat: '',
|
|
295
|
+
// 内部的结束时间格式
|
|
296
|
+
endFormat: '',
|
|
297
|
+
// 开始时间最大值
|
|
298
|
+
beginMaxDate: null,
|
|
299
|
+
// 结束时间最大值
|
|
300
|
+
endMaxDate: null
|
|
301
|
+
}
|
|
302
|
+
},
|
|
303
|
+
computed: {
|
|
304
|
+
/**
|
|
305
|
+
设置开始时间的时间选择器的选项
|
|
306
|
+
@returns {Object} 返回包含禁用小时、禁用分钟和时间步长的对象
|
|
307
|
+
*/
|
|
308
|
+
beginTimePickerOptions() {
|
|
309
|
+
let disabledHours = []
|
|
310
|
+
let disabledMinutes = []
|
|
311
|
+
if (this.min && this.min.minStart) {
|
|
312
|
+
// 获取最小开始时间的日期对象
|
|
313
|
+
let minStartDate = this.$getDateFromString(
|
|
314
|
+
this.min.minStart,
|
|
315
|
+
this.beginFormat
|
|
316
|
+
)
|
|
317
|
+
let hours = minStartDate.getHours()
|
|
318
|
+
// 将小于最小开始时间的小时加入禁用小时数组
|
|
319
|
+
for (var h = 0; h < hours; h++) {
|
|
320
|
+
disabledHours.push(h)
|
|
321
|
+
}
|
|
322
|
+
if (this.beginCopy) {
|
|
323
|
+
// 获取开始时间的日期对象
|
|
324
|
+
let beginDate = this.$getDateFromString(
|
|
325
|
+
this.beginCopy,
|
|
326
|
+
this.beginFormat
|
|
327
|
+
)
|
|
328
|
+
if (hours >= beginDate.getHours()) {
|
|
329
|
+
// 如果开始时间小时等于最小开始时间小时,则将小于最小开始时间分钟的分钟加入禁用分钟数组
|
|
330
|
+
let minutes = minStartDate.getMinutes()
|
|
331
|
+
for (let m = 0; m < minutes; m++) {
|
|
332
|
+
disabledMinutes.push(m)
|
|
333
|
+
}
|
|
334
|
+
}
|
|
335
|
+
// 如果开始时间大于最小开始时间,则重置禁用小时和禁用分钟数组
|
|
336
|
+
if (beginDate > minStartDate) {
|
|
337
|
+
if (
|
|
338
|
+
beginDate.getDate() > minStartDate.getDate() ||
|
|
339
|
+
beginDate.getMonth() > minStartDate.getMonth() ||
|
|
340
|
+
beginDate.getFullYear() > minStartDate.getFullYear()
|
|
341
|
+
) {
|
|
342
|
+
disabledHours = []
|
|
343
|
+
disabledMinutes = []
|
|
344
|
+
} else if (
|
|
345
|
+
beginDate.getDate() == minStartDate.getDate() ||
|
|
346
|
+
beginDate.getMonth() == minStartDate.getMonth() ||
|
|
347
|
+
beginDate.getFullYear() == minStartDate.getFullYear()
|
|
348
|
+
) {
|
|
349
|
+
disabledHours.push(beginDate.getHours())
|
|
350
|
+
if (beginDate.getHours() > minStartDate.getHours()) {
|
|
351
|
+
disabledMinutes = []
|
|
352
|
+
}
|
|
353
|
+
}
|
|
354
|
+
}
|
|
355
|
+
}
|
|
356
|
+
}
|
|
357
|
+
if (this.disabledMinutes) {
|
|
358
|
+
disabledMinutes = []
|
|
359
|
+
for (let m = 0; m < 60; m++) {
|
|
360
|
+
disabledMinutes.push(m)
|
|
361
|
+
}
|
|
362
|
+
}
|
|
363
|
+
return {
|
|
364
|
+
disabledHours,
|
|
365
|
+
disabledMinutes,
|
|
366
|
+
steps: this.timeSteps
|
|
367
|
+
}
|
|
368
|
+
},
|
|
369
|
+
// 同设置开始时间的时间选择器的选项
|
|
370
|
+
endTimePickerOptions() {
|
|
371
|
+
let disabledHours = []
|
|
372
|
+
let disabledMinutes = []
|
|
373
|
+
// var minDate = this.getEndMinDate()
|
|
374
|
+
let endMaxDate = this.getEndMaxDate()
|
|
375
|
+
if (endMaxDate) {
|
|
376
|
+
let maxHours = endMaxDate.getHours()
|
|
377
|
+
if (this.endCopy) {
|
|
378
|
+
let endDate = this.$getDateFromString(this.endCopy, this.endFormat)
|
|
379
|
+
if (maxHours <= endDate.getHours()) {
|
|
380
|
+
let maxMinutes = endMaxDate.getMinutes()
|
|
381
|
+
for (let m = 59; m > maxMinutes; m--) {
|
|
382
|
+
disabledMinutes.push(m)
|
|
383
|
+
}
|
|
384
|
+
}
|
|
385
|
+
if (endDate > endMaxDate) {
|
|
386
|
+
disabledHours = []
|
|
387
|
+
disabledMinutes = []
|
|
388
|
+
}
|
|
389
|
+
} else {
|
|
390
|
+
for (let h = 23; h >= 0; h--) {
|
|
391
|
+
disabledHours.push(h)
|
|
392
|
+
}
|
|
393
|
+
for (let m = 59; m >= 0; m--) {
|
|
394
|
+
disabledMinutes.push(m)
|
|
395
|
+
}
|
|
396
|
+
}
|
|
397
|
+
}
|
|
398
|
+
|
|
399
|
+
if (this.disabledMinutes) {
|
|
400
|
+
disabledMinutes = []
|
|
401
|
+
for (let m = 0; m < 60; m++) {
|
|
402
|
+
disabledMinutes.push(m)
|
|
403
|
+
}
|
|
404
|
+
}
|
|
405
|
+
return {
|
|
406
|
+
disabledHours,
|
|
407
|
+
disabledMinutes,
|
|
408
|
+
steps: this.timeSteps
|
|
409
|
+
}
|
|
410
|
+
},
|
|
411
|
+
// 开始时间选项
|
|
412
|
+
beginDateOptions() {
|
|
413
|
+
return {
|
|
414
|
+
// 禁用日期函数,返回值为true表示禁用该日期,false表示启用该日期
|
|
415
|
+
disabledDate: (date) => {
|
|
416
|
+
var gEqualMin = true // 日期是否大于等于最小日期
|
|
417
|
+
var lEqualMax = true // 日期是否小于等于最大日期
|
|
418
|
+
if (this.min && this.min.minStart) {
|
|
419
|
+
// 如果存在最小日期,则获取最小日期并判断当前日期是否大于等于最小日期
|
|
420
|
+
let startDate = this.$getDateFromString(
|
|
421
|
+
this.min.minStart,
|
|
422
|
+
this.beginFormat
|
|
423
|
+
)
|
|
424
|
+
gEqualMin = date >= startDate
|
|
425
|
+
// 如果日期包含小时,则需要判断年月日是否相等
|
|
426
|
+
if (!gEqualMin && this.beginFormat.indexOf('HH') > -1) {
|
|
427
|
+
gEqualMin =
|
|
428
|
+
this.$formatDate(startDate, 'yyyy-MM-dd') ===
|
|
429
|
+
this.$formatDate(date, 'yyyy-MM-dd')
|
|
430
|
+
}
|
|
431
|
+
}
|
|
432
|
+
if (this.beginMaxDate) {
|
|
433
|
+
// 如果存在最大日期,则判断当前日期是否小于等于最大日期
|
|
434
|
+
lEqualMax = date <= this.beginMaxDate
|
|
435
|
+
}
|
|
436
|
+
// 返回日期是否在最小日期和最大日期之间
|
|
437
|
+
return !(gEqualMin && lEqualMax)
|
|
438
|
+
}
|
|
439
|
+
}
|
|
440
|
+
},
|
|
441
|
+
// 结束时间选项
|
|
442
|
+
endDateOptions() {
|
|
443
|
+
return {
|
|
444
|
+
disabledDate: (date) => {
|
|
445
|
+
var gEqualMin = true
|
|
446
|
+
var minDate = this.getEndMinDate()
|
|
447
|
+
gEqualMin = date >= minDate
|
|
448
|
+
if (!gEqualMin && this.beginFormat.indexOf('HH') > -1) {
|
|
449
|
+
gEqualMin =
|
|
450
|
+
this.$formatDate(minDate, 'yyyy-MM-dd') ===
|
|
451
|
+
this.$formatDate(date, 'yyyy-MM-dd')
|
|
452
|
+
}
|
|
453
|
+
var lEqualMax = true
|
|
454
|
+
const endMaxDate = this.getEndMaxDate()
|
|
455
|
+
if (endMaxDate) {
|
|
456
|
+
lEqualMax = date <= endMaxDate
|
|
457
|
+
}
|
|
458
|
+
return !(gEqualMin && lEqualMax)
|
|
459
|
+
}
|
|
460
|
+
}
|
|
461
|
+
}
|
|
462
|
+
},
|
|
463
|
+
methods: {
|
|
464
|
+
// 获取结束日期的最大值
|
|
465
|
+
getEndMaxDate() {
|
|
466
|
+
var maxDate = null
|
|
467
|
+
if (this.maxEndStep) {
|
|
468
|
+
// 如果没有设置结束日期的最大值,但设置了最大时间间隔,则根据开始日期及最大时间间隔计算结束日期的最大值
|
|
469
|
+
if (this.beginCopy) {
|
|
470
|
+
maxDate = this.beginCopy
|
|
471
|
+
maxDate = this.$addYears(maxDate, this.maxEndStep.years)
|
|
472
|
+
maxDate = this.$addMonths(maxDate, this.maxEndStep.months)
|
|
473
|
+
maxDate = this.$addDays(maxDate, this.maxEndStep.days)
|
|
474
|
+
maxDate = this.$addHours(maxDate, this.maxEndStep.hours)
|
|
475
|
+
maxDate = this.$addMinutes(maxDate, this.maxEndStep.minutes)
|
|
476
|
+
maxDate = this.$addSeconds(maxDate, this.maxEndStep.seconds)
|
|
477
|
+
}
|
|
478
|
+
}
|
|
479
|
+
if (this.endMaxDate) {
|
|
480
|
+
if (maxDate == null || maxDate > this.endMaxDate) {
|
|
481
|
+
// 如果已经设置了结束日期的最大值,则直接使用该值
|
|
482
|
+
maxDate = this.$getDateFromString(this.endMaxDate, this.endFormat)
|
|
483
|
+
}
|
|
484
|
+
}
|
|
485
|
+
return maxDate
|
|
486
|
+
},
|
|
487
|
+
// 获取结束日期的最小值
|
|
488
|
+
getEndMinDate() {
|
|
489
|
+
var minDate = null
|
|
490
|
+
if (this.beginCopy) {
|
|
491
|
+
minDate = this.$getDateFromString(this.beginCopy, this.beginFormat)
|
|
492
|
+
} else if (this.min && this.min.minEnd) {
|
|
493
|
+
minDate = this.$getDateFromString(this.min.minEnd, this.beginFormat)
|
|
494
|
+
}
|
|
495
|
+
return minDate
|
|
496
|
+
},
|
|
497
|
+
beginChange(value) {
|
|
498
|
+
// 如果选择的时间早于最小可选时间,强制设为最小可选时间
|
|
499
|
+
if (value) {
|
|
500
|
+
if (this.min && this.min.minStart) {
|
|
501
|
+
let selDate = this.$getDateFromString(value, this.beginFormat)
|
|
502
|
+
if (selDate <= this.min.minStart) {
|
|
503
|
+
// 根据步长重新设置时间
|
|
504
|
+
let copyMinStart = this.calcTimeByTimeStep(this.min.minStart)
|
|
505
|
+
value = this.$formatDate(copyMinStart, this.beginFormat)
|
|
506
|
+
this.beginCopy = value
|
|
507
|
+
}
|
|
508
|
+
}
|
|
509
|
+
// 触发begin-change事件
|
|
510
|
+
this.$emit('begin-change', value)
|
|
511
|
+
} else {
|
|
512
|
+
// 清空开始时间
|
|
513
|
+
this.beginCopy = ''
|
|
514
|
+
this.$emit('begin-change', null)
|
|
515
|
+
}
|
|
516
|
+
// 这么复杂是因为要保证转出来的时间一致
|
|
517
|
+
// 如果开始时间晚于结束时间,强制清空结束时间
|
|
518
|
+
if (this.endCopy) {
|
|
519
|
+
const beginDate = this.$getDateFromString(value, this.beginFormat)
|
|
520
|
+
const oldEndDate = this.$getDateFromString(
|
|
521
|
+
this.endCopy,
|
|
522
|
+
this.beginFormat
|
|
523
|
+
)
|
|
524
|
+
if (beginDate > oldEndDate) {
|
|
525
|
+
this.endChange(null)
|
|
526
|
+
} else {
|
|
527
|
+
const endMaxDate = this.getEndMaxDate()
|
|
528
|
+
if (endMaxDate && endMaxDate < oldEndDate) {
|
|
529
|
+
this.endChange(null)
|
|
530
|
+
}
|
|
531
|
+
}
|
|
532
|
+
}
|
|
533
|
+
},
|
|
534
|
+
endChange(value) {
|
|
535
|
+
if (!value) {
|
|
536
|
+
this.endCopy = ''
|
|
537
|
+
this.$emit('end-change', null)
|
|
538
|
+
return
|
|
539
|
+
}
|
|
540
|
+
let minDate = this.getEndMinDate()
|
|
541
|
+
if (minDate) {
|
|
542
|
+
let selDate = this.$getDateFromString(value, this.endFormat)
|
|
543
|
+
if (selDate <= minDate) {
|
|
544
|
+
value = this.$formatDate(minDate, this.endFormat)
|
|
545
|
+
this.endCopy = value
|
|
546
|
+
}
|
|
547
|
+
}
|
|
548
|
+
this.$emit('end-change', value)
|
|
549
|
+
},
|
|
550
|
+
calcTimeByTimeStep(oldTime) {
|
|
551
|
+
let newTime = new Date(oldTime)
|
|
552
|
+
let oldH = oldTime.getHours()
|
|
553
|
+
let oldMi = oldTime.getMinutes()
|
|
554
|
+
let oldSec = oldTime.getSeconds()
|
|
555
|
+
let hStep = this.timeSteps[0]
|
|
556
|
+
let mStep = this.timeSteps[1]
|
|
557
|
+
let sStep = this.timeSteps[2]
|
|
558
|
+
// 检验下次可选时间
|
|
559
|
+
if (oldSec + sStep > 59) {
|
|
560
|
+
oldMi += 1
|
|
561
|
+
oldSec = 0
|
|
562
|
+
}
|
|
563
|
+
if (oldMi + mStep > 59) {
|
|
564
|
+
oldH += 1
|
|
565
|
+
oldMi = 0
|
|
566
|
+
oldSec = 0
|
|
567
|
+
} else {
|
|
568
|
+
oldMi += mStep
|
|
569
|
+
}
|
|
570
|
+
// 根据步长重新设置时间
|
|
571
|
+
let hValueByStep = Math.floor(oldH / hStep) * hStep
|
|
572
|
+
let mValueByStep = Math.floor(oldMi / mStep) * mStep
|
|
573
|
+
let sValueByStep = Math.floor(oldSec / sStep) * sStep
|
|
574
|
+
newTime.setHours(hValueByStep)
|
|
575
|
+
newTime.setMinutes(mValueByStep)
|
|
576
|
+
newTime.setSeconds(sValueByStep)
|
|
577
|
+
return newTime
|
|
578
|
+
}
|
|
579
|
+
}
|
|
580
|
+
}
|
|
581
|
+
</script>
|
|
582
|
+
<style lang="less">
|
|
583
|
+
#datepicker {
|
|
584
|
+
.ivu-row::after {
|
|
585
|
+
clear: none;
|
|
586
|
+
}
|
|
587
|
+
.ivu-date-picker {
|
|
588
|
+
width: 100%;
|
|
589
|
+
}
|
|
590
|
+
// #endpicker {
|
|
591
|
+
// .ivu-select-dropdown {
|
|
592
|
+
// right: -5px;
|
|
593
|
+
// left: 0px !important;
|
|
594
|
+
// }
|
|
595
|
+
// }
|
|
596
|
+
}
|
|
597
|
+
</style>
|
|
@@ -97,9 +97,10 @@ export default {
|
|
|
97
97
|
const startDate = new Date(searchForm.startDate || searchForm.startTime || "")
|
|
98
98
|
const endDate = new Date(searchForm.endDate || searchForm.startTime || "")
|
|
99
99
|
const oneMonthInMs = 31 * 24 * 60 * 60 * 1000 // 1 个月的毫秒数
|
|
100
|
-
|
|
100
|
+
|
|
101
|
+
if (!startDate || isNaN(startDate.getTime()) || !endDate || isNaN(endDate.getTime())) {
|
|
101
102
|
setTimeout(() => {
|
|
102
|
-
this.$Message.error('
|
|
103
|
+
this.$Message.error('请选择有效的导出开始和结束时间', 3)
|
|
103
104
|
}, 0)
|
|
104
105
|
return
|
|
105
106
|
}
|
|
@@ -1,3 +1,20 @@
|
|
|
1
|
+
|
|
2
|
+
function removeElement(el, vnode) {
|
|
3
|
+
if (el.parentNode) {
|
|
4
|
+
el.parentNode.removeChild(el)
|
|
5
|
+
// el.parentNode.style.display = 'none'
|
|
6
|
+
if (vnode.componentInstance && vnode.componentInstance.$options.name == 'TabPane') {
|
|
7
|
+
console.log('------------', vnode.componentInstance)
|
|
8
|
+
for (let i = 0; i < vnode.componentInstance.TabsInstance.$children.length; i++) {
|
|
9
|
+
if (vnode.componentInstance.TabsInstance.$children[i].currentName == vnode.componentInstance.currentName) {
|
|
10
|
+
vnode.componentInstance.TabsInstance.$children.splice(i, 1)
|
|
11
|
+
break
|
|
12
|
+
}
|
|
13
|
+
}
|
|
14
|
+
vnode.componentInstance.updateNav()
|
|
15
|
+
}
|
|
16
|
+
}
|
|
17
|
+
}
|
|
1
18
|
export default {
|
|
2
19
|
inserted(el, binding, vnode, oldVnode) {
|
|
3
20
|
// console.log('plugin-access', vnode.context.$store)
|
|
@@ -10,17 +27,53 @@ export default {
|
|
|
10
27
|
if (binding.value === undefined) {
|
|
11
28
|
throw new Error('v-access必须有值')
|
|
12
29
|
}
|
|
13
|
-
if (
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
30
|
+
if (typeof binding.value === 'object') {
|
|
31
|
+
if (!binding.value.code) {
|
|
32
|
+
throw new Error('v-access code必须有值')
|
|
33
|
+
}
|
|
34
|
+
if (vnode.context.$store.state.user.access.indexOf(binding.value.code) === -1) {
|
|
35
|
+
if (binding.value.isHide) {
|
|
36
|
+
removeElement(el, vnode)
|
|
37
|
+
} else {
|
|
38
|
+
el.parentNode.addEventListener('click', function (e) {
|
|
39
|
+
if (e.target == el) {
|
|
40
|
+
vnode.context.$Message.error('无操作权限,请联系管理员~')
|
|
41
|
+
e.stopPropagation()
|
|
42
|
+
e.preventDefault()
|
|
43
|
+
}
|
|
44
|
+
}, true)
|
|
45
|
+
}
|
|
46
|
+
// el.parentNode.addEventListener('mousedown', function (e) {
|
|
47
|
+
// if (e.target == el) {
|
|
48
|
+
// console.log('mousedown,没有权限')
|
|
49
|
+
// e.stopPropagation()
|
|
50
|
+
// e.preventDefault()
|
|
51
|
+
// }
|
|
52
|
+
// }, true)
|
|
53
|
+
// el.parentNode.addEventListener('touchstart', function (e) {
|
|
54
|
+
// if (e.target == el) {
|
|
55
|
+
// console.log('touchstart,没有权限')
|
|
56
|
+
// e.stopPropagation()
|
|
57
|
+
// e.preventDefault()
|
|
58
|
+
// }
|
|
59
|
+
// }, true)
|
|
60
|
+
console.log('没有权限', el)
|
|
61
|
+
}
|
|
62
|
+
}
|
|
63
|
+
|
|
64
|
+
if (typeof binding.value === 'string') {
|
|
65
|
+
if (vnode.context.$store.state.user.access.indexOf(binding.value) === -1) {
|
|
66
|
+
el.parentNode.removeChild(el)
|
|
67
|
+
if (vnode.componentInstance && vnode.componentInstance.$options.name == 'TabPane') {
|
|
68
|
+
console.log('------------', vnode.componentInstance)
|
|
69
|
+
for (let i = 0; i < vnode.componentInstance.TabsInstance.$children.length; i++) {
|
|
70
|
+
if (vnode.componentInstance.TabsInstance.$children[i].currentName == vnode.componentInstance.currentName) {
|
|
71
|
+
vnode.componentInstance.TabsInstance.$children.splice(i, 1)
|
|
72
|
+
break
|
|
73
|
+
}
|
|
21
74
|
}
|
|
75
|
+
vnode.componentInstance.updateNav()
|
|
22
76
|
}
|
|
23
|
-
vnode.componentInstance.updateNav()
|
|
24
77
|
}
|
|
25
78
|
}
|
|
26
79
|
}
|
package/src/index.js
CHANGED
|
@@ -4,6 +4,7 @@ import i18n from './locale'
|
|
|
4
4
|
import ExtentionPlugin from './extentionPlugin'
|
|
5
5
|
import importDirective from './directive'
|
|
6
6
|
import PlusComp from './components/plus-comp'
|
|
7
|
+
import BeginEndDatePicker from './components/begin-end-date-picker'
|
|
7
8
|
|
|
8
9
|
console.log('--------web-tool---index.js----------')
|
|
9
10
|
|
|
@@ -17,6 +18,7 @@ export default {
|
|
|
17
18
|
PlusComp,
|
|
18
19
|
install(vue, opts = {}) {
|
|
19
20
|
vue.use(PlusComp)
|
|
21
|
+
vue.component('BeginEndDatePicker', BeginEndDatePicker)
|
|
20
22
|
/**
|
|
21
23
|
* 注册指令
|
|
22
24
|
*/
|