@94ai/nf-double-half-year 3.1.13

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.
@@ -0,0 +1,549 @@
1
+ "use strict";
2
+ Object.defineProperties(exports, { __esModule: { value: true }, [Symbol.toStringTag]: { value: "Module" } });
3
+ const vueDemi = require("vue-demi");
4
+ const commonUtils = require("@94ai/common-utils");
5
+ const vue2RuntimeHelpers = require("@94ai/vue2-runtime-helpers");
6
+ const halfYearOptions = [
7
+ {
8
+ label: "上半年",
9
+ value: 1,
10
+ months: [1, 2, 3, 4, 5, 6]
11
+ },
12
+ {
13
+ label: "下半年",
14
+ value: 2,
15
+ months: [7, 8, 9, 10, 11, 12]
16
+ }
17
+ ];
18
+ function getHarfYearOptionMonths(value) {
19
+ for (let item of halfYearOptions) {
20
+ if (item.value == value) {
21
+ return item.months;
22
+ }
23
+ }
24
+ return [];
25
+ }
26
+ const __sfc_main$1 = vueDemi.defineComponent({
27
+ name: "nf-half-year-picker-item"
28
+ });
29
+ __sfc_main$1.props = {
30
+ year: {
31
+ key: "year",
32
+ required: false,
33
+ type: Number,
34
+ default: (/* @__PURE__ */ new Date()).getFullYear()
35
+ },
36
+ halfYear: {
37
+ key: "halfYear",
38
+ required: false,
39
+ type: Array,
40
+ default: () => {
41
+ return [];
42
+ }
43
+ },
44
+ showLeft: {
45
+ key: "showLeft",
46
+ required: false,
47
+ type: Boolean,
48
+ default: true
49
+ },
50
+ showRight: {
51
+ key: "showRight",
52
+ required: false,
53
+ type: Boolean,
54
+ default: true
55
+ }
56
+ };
57
+ __sfc_main$1.setup = (__props, __ctx) => {
58
+ const props = __props;
59
+ const emits = __ctx.emit;
60
+ const now = /* @__PURE__ */ new Date();
61
+ const now_year = vueDemi.ref(now.getFullYear());
62
+ const now_half_year = `${now_year.value}-${commonUtils.getHalfYear(now)}`;
63
+ const options = vueDemi.computed(() => {
64
+ return halfYearOptions.map((item) => {
65
+ return {
66
+ label: item.label,
67
+ value: `${props.year}-${item.value}`,
68
+ year: props.year,
69
+ halfYear: item.value
70
+ };
71
+ });
72
+ });
73
+ const handleItemClick = (item) => {
74
+ emits("on-half-year-click", item);
75
+ };
76
+ const handlePrevYear = () => {
77
+ const year = props.year - 1;
78
+ emits("update:year", year);
79
+ emits("on-year-change", year);
80
+ };
81
+ const handleNextYear = () => {
82
+ const year = props.year + 1;
83
+ emits("update:year", year);
84
+ emits("on-year-change", year);
85
+ };
86
+ return {
87
+ now_half_year,
88
+ options,
89
+ handleItemClick,
90
+ handlePrevYear,
91
+ handleNextYear
92
+ };
93
+ };
94
+ var _sfc_render$1 = function render() {
95
+ var _vm = this, _c = _vm._self._c;
96
+ _vm._self._setupProxy;
97
+ return _c("div", {
98
+ staticClass: "nf-double-half-year nf-half-year-picker-item"
99
+ }, [_c("div", {
100
+ staticClass: "nf-half-year-picker__header"
101
+ }, [_vm.showLeft ? _c("i", {
102
+ staticClass: "el-icon-d-arrow-left",
103
+ on: {
104
+ "click": _vm.handlePrevYear
105
+ }
106
+ }) : _c("span", {
107
+ staticClass: "empty-arrow"
108
+ }), _c("div", {
109
+ staticClass: "nf-half-year-picker__title"
110
+ }, [_vm._v(_vm._s(_vm.year))]), _vm.showRight ? _c("i", {
111
+ staticClass: "el-icon-d-arrow-right",
112
+ on: {
113
+ "click": _vm.handleNextYear
114
+ }
115
+ }) : _c("span", {
116
+ staticClass: "empty-arrow"
117
+ })]), _c("div", {
118
+ staticClass: "nf-half-year-picker__options"
119
+ }, [_vm._l(_vm.options, function(item) {
120
+ return [_c("div", {
121
+ key: item.value,
122
+ staticClass: "nf-half-year-picker__item",
123
+ class: {
124
+ "nf-half-year-picker__item__today": item.value == _vm.now_half_year,
125
+ "nf-half-year-picker__item--active": _vm.halfYear.includes(item.value)
126
+ },
127
+ attrs: {
128
+ "data-value": item.value
129
+ },
130
+ on: {
131
+ "click": function($event) {
132
+ return _vm.handleItemClick(item);
133
+ }
134
+ }
135
+ }, [_c("div", {
136
+ staticClass: "nf-half-year-picker__item__label"
137
+ }, [_vm._v(_vm._s(item.label))])])];
138
+ })], 2)]);
139
+ };
140
+ var _sfc_staticRenderFns$1 = [];
141
+ var __component__$1 = /* @__PURE__ */ vue2RuntimeHelpers.normalizeComponent(__sfc_main$1, _sfc_render$1, _sfc_staticRenderFns$1, false, null, null, null, null);
142
+ const HalfYearPickerItem = __component__$1.exports;
143
+ const __sfc_main = vueDemi.defineComponent({
144
+ name: "NfDoubleHalfYear"
145
+ });
146
+ __sfc_main.props = {
147
+ value: {
148
+ key: "value",
149
+ required: false,
150
+ type: Array,
151
+ default: void 0
152
+ },
153
+ size: {
154
+ key: "size",
155
+ required: false,
156
+ type: String
157
+ },
158
+ rangeSeparator: {
159
+ key: "rangeSeparator",
160
+ required: false,
161
+ type: String,
162
+ default: "-"
163
+ },
164
+ readonly: {
165
+ key: "readonly",
166
+ required: false,
167
+ type: Boolean,
168
+ default: false
169
+ },
170
+ clearable: {
171
+ key: "clearable",
172
+ required: false,
173
+ type: Boolean,
174
+ default: true
175
+ },
176
+ startPlaceholder: {
177
+ key: "startPlaceholder",
178
+ required: false,
179
+ type: String,
180
+ default: "开始半年"
181
+ },
182
+ endPlaceholder: {
183
+ key: "endPlaceholder",
184
+ required: false,
185
+ type: String,
186
+ default: "结束半年"
187
+ },
188
+ format: {
189
+ key: "format",
190
+ required: false,
191
+ type: Function,
192
+ default: (data) => data
193
+ },
194
+ disabled: {
195
+ key: "disabled",
196
+ required: false,
197
+ type: Boolean,
198
+ default: false
199
+ },
200
+ prefixIcon: {
201
+ key: "prefixIcon",
202
+ required: false,
203
+ type: String,
204
+ default: "el-icon-date"
205
+ },
206
+ clearIcon: {
207
+ key: "clearIcon",
208
+ required: false,
209
+ type: String,
210
+ default: "el-icon-circle-close"
211
+ },
212
+ transition: {
213
+ key: "transition",
214
+ required: false,
215
+ type: String,
216
+ default: "el-zoom-in-top"
217
+ },
218
+ placement: {
219
+ key: "placement",
220
+ required: false,
221
+ type: String,
222
+ default: "bottom-start"
223
+ },
224
+ popperClass: {
225
+ key: "popperClass",
226
+ required: false,
227
+ type: String,
228
+ default: ""
229
+ },
230
+ trigger: {
231
+ key: "trigger",
232
+ required: false,
233
+ type: String,
234
+ default: "click"
235
+ },
236
+ offset: {
237
+ key: "offset",
238
+ required: false,
239
+ type: Number,
240
+ default: 0
241
+ },
242
+ visibleArrow: {
243
+ key: "visibleArrow",
244
+ required: false,
245
+ type: Boolean,
246
+ default: true
247
+ },
248
+ popperOptions: {
249
+ key: "popperOptions",
250
+ required: false,
251
+ type: Object,
252
+ default: () => ({
253
+ boundariesElement: "body",
254
+ gpuAcceleration: false
255
+ })
256
+ },
257
+ openDelay: {
258
+ key: "openDelay",
259
+ required: false,
260
+ type: Number,
261
+ default: void 0
262
+ },
263
+ closeDelay: {
264
+ key: "closeDelay",
265
+ required: false,
266
+ type: Number,
267
+ default: 200
268
+ },
269
+ tabindex: {
270
+ key: "tabindex",
271
+ required: false,
272
+ type: Number,
273
+ default: 0
274
+ },
275
+ appendToBody: {
276
+ key: "appendToBody",
277
+ required: false,
278
+ type: Boolean,
279
+ default: true
280
+ }
281
+ };
282
+ __sfc_main.setup = (__props, __ctx) => {
283
+ const props = __props;
284
+ const emits = __ctx.emit;
285
+ const now = /* @__PURE__ */ new Date();
286
+ const nfDoubleQuatterPopoverVisible = vueDemi.ref(false);
287
+ const startYear = vueDemi.ref(now.getFullYear());
288
+ const startHalfYear = vueDemi.ref([]);
289
+ const endYear = vueDemi.ref(now.getFullYear() + 1);
290
+ const endHalfYear = vueDemi.ref([]);
291
+ const halfYear = vueDemi.ref([]);
292
+ const nfDoubleHalfYearElDatePicker = vueDemi.ref();
293
+ const formatValue = vueDemi.computed(() => {
294
+ if (props.value) {
295
+ const startDate = new Date(props.value[0]);
296
+ const endDate = new Date(props.value[1]);
297
+ const startHalfyear = commonUtils.getHalfYear(startDate);
298
+ const endHalfyear = commonUtils.getHalfYear(endDate);
299
+ const res = [`${startDate.getFullYear()}-${startHalfyear === 2 ? "下半年" : "上半年"}`, `${endDate.getFullYear()}-${endHalfyear === 2 ? "下半年" : "上半年"}`];
300
+ if (props.format) {
301
+ return props.format(res);
302
+ }
303
+ return res;
304
+ }
305
+ return null;
306
+ });
307
+ const showValue = vueDemi.computed(() => {
308
+ if (props.value) {
309
+ const startDate = new Date(props.value[0]);
310
+ const endDate = new Date(props.value[1]);
311
+ return [`${startDate.getFullYear()}-${commonUtils.getHalfYear(startDate)}`, `${endDate.getFullYear()}-${commonUtils.getHalfYear(endDate)}`];
312
+ }
313
+ return null;
314
+ });
315
+ vueDemi.watch(() => {
316
+ return formatValue.value;
317
+ }, () => {
318
+ vueDemi.nextTick(() => {
319
+ if (nfDoubleHalfYearElDatePicker.value && formatValue.value) {
320
+ nfDoubleHalfYearElDatePicker.value.userInput = formatValue.value;
321
+ }
322
+ });
323
+ }, {
324
+ deep: true,
325
+ immediate: true
326
+ });
327
+ vueDemi.watch(() => {
328
+ var _a;
329
+ return (_a = nfDoubleHalfYearElDatePicker.value) == null ? void 0 : _a.userInput;
330
+ }, (current) => {
331
+ if (!current && formatValue.value && nfDoubleHalfYearElDatePicker.value) {
332
+ vueDemi.nextTick(() => {
333
+ nfDoubleHalfYearElDatePicker.value.userInput = formatValue.value;
334
+ });
335
+ }
336
+ });
337
+ const handleOpenPicker = (instance) => {
338
+ let startDate = /* @__PURE__ */ new Date();
339
+ let endDate = commonUtils.getNextYear(startDate);
340
+ if (props.value) {
341
+ startDate = new Date(props.value[0]);
342
+ endDate = new Date(props.value[1]);
343
+ startHalfYear.value = [`${startDate.getFullYear()}-${commonUtils.getHalfYear(startDate)}`];
344
+ endHalfYear.value = [`${endDate.getFullYear()}-${commonUtils.getHalfYear(endDate)}`];
345
+ }
346
+ startYear.value = startDate.getFullYear();
347
+ endYear.value = endDate.getFullYear();
348
+ if (startYear.value >= endYear.value) {
349
+ endYear.value = startYear.value + 1;
350
+ }
351
+ halfYear.value.splice(0, halfYear.value.length);
352
+ emits("focus", instance);
353
+ };
354
+ const handleStartYearChange = (year) => {
355
+ endYear.value = year + 1;
356
+ };
357
+ const handleStartQuarterClick = (halfYearItem) => {
358
+ if (halfYear.value.length == 0) {
359
+ startHalfYear.value.splice(0, startHalfYear.value.length);
360
+ endHalfYear.value.splice(0, endHalfYear.value.length);
361
+ }
362
+ const index = startHalfYear.value.indexOf(halfYearItem.value);
363
+ if (index > -1) {
364
+ startHalfYear.value.splice(index, 1);
365
+ } else {
366
+ startHalfYear.value.push(halfYearItem.value);
367
+ }
368
+ halfYear.value.push(halfYearItem);
369
+ handleCheckQuarterRange();
370
+ };
371
+ const handleEndQuarterClick = (halfYearItem) => {
372
+ if (halfYear.value.length == 0) {
373
+ startHalfYear.value.splice(0, startHalfYear.value.length);
374
+ endHalfYear.value.splice(0, endHalfYear.value.length);
375
+ }
376
+ const index = endHalfYear.value.indexOf(halfYearItem.value);
377
+ if (index > -1) {
378
+ endHalfYear.value.splice(index, 1);
379
+ } else {
380
+ endHalfYear.value.push(halfYearItem.value);
381
+ }
382
+ halfYear.value.push(halfYearItem);
383
+ handleCheckQuarterRange();
384
+ };
385
+ const handleCheckQuarterRange = () => {
386
+ if (halfYear.value.length == 2) {
387
+ halfYear.value.sort((a, b) => {
388
+ if (a.year == b.year) {
389
+ return a.halfYear - b.halfYear;
390
+ } else {
391
+ return a.year - b.year;
392
+ }
393
+ });
394
+ const result = [];
395
+ for (let item of halfYear.value) {
396
+ const months = getHarfYearOptionMonths(item.halfYear);
397
+ if (months.length) {
398
+ result.push({
399
+ ...item,
400
+ startDate: commonUtils.formatDate(commonUtils.startOf(new Date(item.year, months[0] - 1), "month"), "YYYY-MM-DD"),
401
+ endDate: commonUtils.formatDate(commonUtils.endOf(new Date(item.year, months[months.length - 1] - 1), "month"), "YYYY-MM-DD")
402
+ });
403
+ }
404
+ }
405
+ emits("update:value", [result[0].startDate, result[1].endDate]);
406
+ emits("input", [result[0].startDate, result[1].endDate]);
407
+ emits("change", result);
408
+ nfDoubleQuatterPopoverVisible.value = false;
409
+ }
410
+ };
411
+ const handleEndYearChange = () => {
412
+ startYear.value = endYear.value - 1;
413
+ };
414
+ const handleChange = (val) => {
415
+ if (!val) {
416
+ startHalfYear.value.splice(0, startHalfYear.value.length);
417
+ endHalfYear.value.splice(0, endHalfYear.value.length);
418
+ emits("update:value", null);
419
+ emits("input", null);
420
+ }
421
+ };
422
+ return {
423
+ nfDoubleQuatterPopoverVisible,
424
+ startYear,
425
+ startHalfYear,
426
+ endYear,
427
+ endHalfYear,
428
+ nfDoubleHalfYearElDatePicker,
429
+ showValue,
430
+ handleOpenPicker,
431
+ handleStartYearChange,
432
+ handleStartQuarterClick,
433
+ handleEndQuarterClick,
434
+ handleEndYearChange,
435
+ handleChange
436
+ };
437
+ };
438
+ __sfc_main.components = Object.assign({
439
+ HalfYearPickerItem
440
+ }, __sfc_main.components);
441
+ var _sfc_render = function render2() {
442
+ var _vm = this, _c = _vm._self._c;
443
+ _vm._self._setupProxy;
444
+ return _c("el-popover", {
445
+ staticClass: "nf-double-half-year nf-half-year-range-picker",
446
+ attrs: {
447
+ "placement": _vm.placement,
448
+ "transition": _vm.transition,
449
+ "disabled": _vm.disabled,
450
+ "offset": _vm.offset,
451
+ "popper-class": (_vm.popperClass || "") + " nf-double-half-year nf-half-year-range-picker",
452
+ "trigger": _vm.trigger,
453
+ "visible-arrow": _vm.visibleArrow,
454
+ "popper-options": _vm.popperOptions,
455
+ "open-delay": _vm.openDelay,
456
+ "close-delay": _vm.closeDelay,
457
+ "tabindex": _vm.tabindex,
458
+ "append-to-body": _vm.appendToBody
459
+ },
460
+ on: {
461
+ "show": function($event) {
462
+ return _vm.$emit("show");
463
+ },
464
+ "after-enter": function($event) {
465
+ return _vm.$emit("after-enter");
466
+ },
467
+ "hide": function($event) {
468
+ return _vm.$emit("hide");
469
+ },
470
+ "after-leave": function($event) {
471
+ return _vm.$emit("after-leave");
472
+ }
473
+ },
474
+ model: {
475
+ value: _vm.nfDoubleQuatterPopoverVisible,
476
+ callback: function($$v) {
477
+ _vm.nfDoubleQuatterPopoverVisible = $$v;
478
+ },
479
+ expression: "nfDoubleQuatterPopoverVisible"
480
+ }
481
+ }, [_c("el-date-picker", {
482
+ ref: "nfDoubleHalfYearElDatePicker",
483
+ attrs: {
484
+ "slot": "reference",
485
+ "popper-class": "nf-double-half-year nf-half-year-range-picker-el-date-picker",
486
+ "type": "monthrange",
487
+ "value": _vm.showValue,
488
+ "validate-event": false,
489
+ "disabled": _vm.disabled,
490
+ "readonly": _vm.readonly,
491
+ "range-separator": _vm.rangeSeparator,
492
+ "clear-icon": _vm.clearIcon,
493
+ "prefix-icon": _vm.prefixIcon,
494
+ "clearable": _vm.clearable,
495
+ "size": _vm.size,
496
+ "start-placeholder": _vm.startPlaceholder,
497
+ "end-placeholder": _vm.endPlaceholder
498
+ },
499
+ on: {
500
+ "focus": _vm.handleOpenPicker,
501
+ "change": _vm.handleChange,
502
+ "blur": function($event) {
503
+ return _vm.$emit("blur", $event);
504
+ }
505
+ },
506
+ slot: "reference"
507
+ }), _c("div", {
508
+ staticClass: "nf-half-year-range-picker__content"
509
+ }, [_c("half-year-picker-item", {
510
+ attrs: {
511
+ "year": _vm.startYear,
512
+ "half-year": _vm.startHalfYear,
513
+ "showRight": false
514
+ },
515
+ on: {
516
+ "update:year": function($event) {
517
+ _vm.startYear = $event;
518
+ },
519
+ "on-half-year-click": _vm.handleStartQuarterClick,
520
+ "on-year-change": _vm.handleStartYearChange
521
+ }
522
+ }), _c("half-year-picker-item", {
523
+ attrs: {
524
+ "year": _vm.endYear,
525
+ "showLeft": false,
526
+ "half-year": _vm.endHalfYear
527
+ },
528
+ on: {
529
+ "update:year": function($event) {
530
+ _vm.endYear = $event;
531
+ },
532
+ "update:halfYear": function($event) {
533
+ _vm.endHalfYear = $event;
534
+ },
535
+ "update:half-year": function($event) {
536
+ _vm.endHalfYear = $event;
537
+ },
538
+ "on-half-year-click": _vm.handleEndQuarterClick,
539
+ "on-year-change": _vm.handleEndYearChange
540
+ }
541
+ })], 1)], 1);
542
+ };
543
+ var _sfc_staticRenderFns = [];
544
+ var __component__ = /* @__PURE__ */ vue2RuntimeHelpers.normalizeComponent(__sfc_main, _sfc_render, _sfc_staticRenderFns, false, null, null, null, null);
545
+ const NfDoubleHalfYear = __component__.exports;
546
+ NfDoubleHalfYear.install = (app) => {
547
+ app.component("nf-double-half-year", NfDoubleHalfYear);
548
+ };
549
+ exports.default = NfDoubleHalfYear;