sh-view 2.1.0 → 2.3.0

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 (128) hide show
  1. package/package.json +9 -13
  2. package/packages/components/global-components/sh-alert/index.vue +175 -173
  3. package/packages/components/global-components/sh-badge/index.vue +57 -43
  4. package/packages/components/global-components/sh-card/index.vue +24 -16
  5. package/packages/components/global-components/sh-code-editor/index.vue +250 -260
  6. package/packages/components/global-components/sh-col/index.vue +44 -36
  7. package/packages/components/global-components/sh-corner/index.vue +230 -228
  8. package/packages/components/global-components/sh-count-to/index.vue +60 -51
  9. package/packages/components/global-components/sh-drawer/index.vue +209 -182
  10. package/packages/components/global-components/sh-drawer/scrollbar.js +44 -42
  11. package/packages/components/global-components/sh-empty/index.vue +0 -1
  12. package/packages/components/global-components/sh-form/form.vue +110 -0
  13. package/packages/components/global-components/sh-form/js/props.js +76 -63
  14. package/packages/components/global-components/sh-form/js/useForm.js +236 -0
  15. package/packages/components/global-components/sh-form/query.vue +70 -0
  16. package/packages/components/global-components/sh-header/index.vue +35 -50
  17. package/packages/components/global-components/sh-icon/css/index.scss +44 -0
  18. package/packages/components/global-components/sh-icon/index.vue +24 -11
  19. package/packages/components/global-components/sh-image/index.vue +47 -38
  20. package/packages/components/global-components/sh-list/index.vue +42 -37
  21. package/packages/components/global-components/sh-loading/index.vue +12 -8
  22. package/packages/components/global-components/sh-modal/index.vue +49 -40
  23. package/packages/components/global-components/sh-noticebar/index.vue +68 -54
  24. package/packages/components/global-components/sh-poptip/index.vue +247 -130
  25. package/packages/components/global-components/sh-progress/index.vue +71 -69
  26. package/packages/components/global-components/sh-pull-refresh/index.vue +156 -157
  27. package/packages/components/global-components/sh-result/index.vue +37 -28
  28. package/packages/components/global-components/sh-row/index.vue +21 -18
  29. package/packages/components/global-components/sh-split/index.vue +115 -109
  30. package/packages/components/global-components/sh-table/components/importModal.vue +95 -86
  31. package/packages/components/global-components/sh-table/components/sh-column.vue +62 -0
  32. package/packages/components/global-components/sh-table/{index.vue → grid.vue} +34 -145
  33. package/packages/components/global-components/sh-table/js/tableMethods.js +175 -0
  34. package/packages/components/global-components/sh-table/js/useTable.js +592 -0
  35. package/packages/components/global-components/sh-table/table.vue +266 -0
  36. package/packages/components/global-components/sh-tabs/index.vue +118 -93
  37. package/packages/components/global-components/sh-tag/index.vue +52 -51
  38. package/packages/components/global-components/sh-toolbar/index.vue +53 -47
  39. package/packages/components/global-components/sh-tree/components/table-tree.vue +152 -139
  40. package/packages/components/global-components/sh-tree/index.vue +218 -195
  41. package/packages/components/global-components/sh-tree/mixin/treeProps.js +118 -120
  42. package/packages/components/global-components/sh-upload/index.vue +308 -51
  43. package/packages/components/global-components/sh-water-fall/index.vue +4 -11
  44. package/packages/components/index.js +5 -3
  45. package/packages/components/other-components/sh-cron-modal/components/cron-content.vue +140 -129
  46. package/packages/components/other-components/sh-cron-modal/css/index.scss +0 -5
  47. package/packages/components/other-components/sh-cron-modal/index.vue +81 -67
  48. package/packages/components/other-components/sh-cron-modal/mixin/cron-emits.js +1 -0
  49. package/packages/components/other-components/sh-cron-modal/mixin/cron-hooks.js +179 -0
  50. package/packages/components/other-components/sh-cron-modal/mixin/cron-props.js +9 -0
  51. package/packages/components/other-components/sh-cron-modal/tabs/cron-day-box.vue +101 -92
  52. package/packages/components/other-components/sh-cron-modal/tabs/cron-hour-box.vue +68 -56
  53. package/packages/components/other-components/sh-cron-modal/tabs/cron-minute-box.vue +68 -56
  54. package/packages/components/other-components/sh-cron-modal/tabs/cron-month-box.vue +68 -56
  55. package/packages/components/other-components/sh-cron-modal/tabs/cron-second-box.vue +68 -56
  56. package/packages/components/other-components/sh-cron-modal/tabs/cron-week-box.vue +126 -115
  57. package/packages/components/other-components/sh-cron-modal/tabs/cron-year-box.vue +59 -46
  58. package/packages/components/other-components/sh-menu/index.vue +73 -60
  59. package/packages/components/other-components/sh-menu/menu-group-content.vue +71 -59
  60. package/packages/components/other-components/sh-menu/menu-item-content.vue +40 -30
  61. package/packages/components/other-components/sh-menu-card/index.vue +70 -64
  62. package/packages/components/other-components/sh-menu-card/menu-box.vue +50 -44
  63. package/packages/components/other-components/sh-preview/components/sh-excel.vue +182 -0
  64. package/packages/components/other-components/sh-preview/components/sh-word.vue +73 -0
  65. package/packages/components/other-components/sh-preview/index.vue +86 -85
  66. package/packages/components/other-components/sh-preview/js/data-hook.js +37 -0
  67. package/packages/components/other-components/sh-preview/js/data-props.js +11 -0
  68. package/packages/components/other-components/sh-system-tip/index.vue +28 -24
  69. package/packages/css/index.js +4 -4
  70. package/packages/directive/module/prevent-click.js +1 -1
  71. package/packages/directive/module/resize.js +11 -154
  72. package/packages/index.js +39 -39
  73. package/packages/mixin/index.js +86 -87
  74. package/packages/vxeTable/render/cell/vxe-render-checkbox.vue +14 -5
  75. package/packages/vxeTable/render/cell/vxe-render-checkgroup.vue +43 -36
  76. package/packages/vxeTable/render/cell/vxe-render-code.vue +14 -5
  77. package/packages/vxeTable/render/cell/vxe-render-goption.vue +34 -24
  78. package/packages/vxeTable/render/cell/vxe-render-href.vue +21 -11
  79. package/packages/vxeTable/render/cell/vxe-render-img.vue +16 -10
  80. package/packages/vxeTable/render/cell/vxe-render-input.vue +83 -79
  81. package/packages/vxeTable/render/cell/vxe-render-money.vue +14 -6
  82. package/packages/vxeTable/render/cell/vxe-render-progress.vue +28 -19
  83. package/packages/vxeTable/render/cell/vxe-render-radio.vue +14 -5
  84. package/packages/vxeTable/render/cell/vxe-render-radiogroup.vue +43 -36
  85. package/packages/vxeTable/render/cell/vxe-render-select.vue +44 -36
  86. package/packages/vxeTable/render/cell/vxe-render-switch.vue +14 -5
  87. package/packages/vxeTable/render/cell/vxe-render-table.vue +51 -78
  88. package/packages/vxeTable/render/cell/vxe-render-textarea.vue +14 -5
  89. package/packages/vxeTable/render/cell/vxe-render-time.vue +23 -13
  90. package/packages/vxeTable/render/cell/vxe-render-tree.vue +23 -27
  91. package/packages/vxeTable/render/cell/vxe-render-upload.vue +11 -7
  92. package/packages/vxeTable/render/filters/vxe-filter-input.vue +25 -43
  93. package/packages/vxeTable/render/footer/vxe-footer-input.vue +23 -13
  94. package/packages/vxeTable/render/footer/vxe-footer-money.vue +30 -20
  95. package/packages/vxeTable/render/globalRenders.jsx +1 -1
  96. package/packages/vxeTable/render/header/vxe-header-money.vue +31 -21
  97. package/packages/vxeTable/render/mixin/cell-hooks.js +162 -0
  98. package/packages/vxeTable/render/mixin/cell-props.js +23 -0
  99. package/packages/vxeTable/render/mixin/filter-hooks.js +28 -0
  100. package/packages/components/global-components/sh-form/components/form-item.vue +0 -25
  101. package/packages/components/global-components/sh-form/css/index.scss +0 -55
  102. package/packages/components/global-components/sh-form/index.vue +0 -114
  103. package/packages/components/global-components/sh-form/js/methods.js +0 -146
  104. package/packages/components/global-components/sh-form/mixin/defaultData.js +0 -32
  105. package/packages/components/global-components/sh-icon/css/default/index.scss +0 -27
  106. package/packages/components/global-components/sh-icon/css/font/index.scss +0 -16
  107. package/packages/components/global-components/sh-icon/icon-default.vue +0 -32
  108. package/packages/components/global-components/sh-icon/icon-font.vue +0 -32
  109. package/packages/components/global-components/sh-poptip/popper.js +0 -115
  110. package/packages/components/global-components/sh-query/index.vue +0 -317
  111. package/packages/components/global-components/sh-table/js/methods.js +0 -549
  112. package/packages/components/global-components/sh-table/mixin/defaultData.js +0 -94
  113. package/packages/components/global-components/sh-upload/js/mixin.js +0 -257
  114. package/packages/components/other-components/sh-cron-modal/mixin/cron-box.js +0 -169
  115. package/packages/vxeTable/render/mixin/cell-mixin.js +0 -195
  116. /package/packages/components/global-components/sh-icon/css/default/{fonts/ionicons.svg → ionicons.svg} +0 -0
  117. /package/packages/components/global-components/sh-icon/css/default/{fonts/ionicons.ttf → ionicons.ttf} +0 -0
  118. /package/packages/components/global-components/sh-icon/css/default/{fonts/ionicons.woff → ionicons.woff} +0 -0
  119. /package/packages/components/global-components/sh-icon/css/default/{fonts/ionicons.woff2 → ionicons.woff2} +0 -0
  120. /package/packages/components/global-components/sh-icon/css/font/{fonts/iconfont.js → iconfont.js} +0 -0
  121. /package/packages/components/global-components/sh-icon/css/font/{fonts/iconfont.json → iconfont.json} +0 -0
  122. /package/packages/components/global-components/sh-icon/css/font/{fonts/iconfont.ttf → iconfont.ttf} +0 -0
  123. /package/packages/components/global-components/sh-icon/css/font/{fonts/iconfont.woff → iconfont.woff} +0 -0
  124. /package/packages/components/global-components/sh-icon/css/font/{fonts/iconfont.woff2 → iconfont.woff2} +0 -0
  125. /package/packages/{assets/css → css}/animated.scss +0 -0
  126. /package/packages/{assets/css → css}/loader.scss +0 -0
  127. /package/packages/{assets/css → css}/main.scss +0 -0
  128. /package/packages/{assets/css → css}/theme.scss +0 -0
@@ -1,56 +1,68 @@
1
- <template>
2
- <div class="sh-cron-config-list">
3
- <vxe-radio-group v-model="type">
4
- <div class="item">
5
- <vxe-radio :label="TypeEnum.every" v-bind="beforeRadioAttrs">每秒</vxe-radio>
6
- </div>
7
- <div class="item">
8
- <vxe-radio :label="TypeEnum.range" v-bind="beforeRadioAttrs">区间</vxe-radio>
9
- <span> 从 </span>
10
- <vxe-input v-model="valueRange.start" v-bind="typeRangeAttrs" />
11
- <span> 秒 至 </span>
12
- <vxe-input v-model="valueRange.end" v-bind="typeRangeAttrs" />
13
- <span> 秒 </span>
14
- </div>
15
- <div class="item">
16
- <vxe-radio :label="TypeEnum.loop" v-bind="beforeRadioAttrs">循环</vxe-radio>
17
- <span> 从 </span>
18
- <vxe-input v-model="valueLoop.start" v-bind="typeLoopAttrs" />
19
- <span> 秒开始,间隔 </span>
20
- <vxe-input v-model="valueLoop.interval" v-bind="typeLoopAttrs" />
21
- <span> 秒 </span>
22
- </div>
23
- <div class="item">
24
- <vxe-radio :label="TypeEnum.specify" v-bind="beforeRadioAttrs">指定</vxe-radio>
25
- <div class="list">
26
- <vxe-checkbox-group v-model="valueList">
27
- <template v-for="i in specifyRange" :key="i">
28
- <vxe-checkbox :label="i" v-bind="typeSpecifyAttrs">{{ i }}</vxe-checkbox>
29
- </template>
30
- </vxe-checkbox-group>
31
- </div>
32
- </div>
33
- </vxe-radio-group>
34
- </div>
35
- </template>
36
-
37
- <script>
38
- import cronMixin from '../mixin/cron-box'
39
-
40
- export default {
41
- name: 'CronSecondBox',
42
- mixins: [cronMixin],
43
- data() {
44
- return {
45
- defaultValue: '*',
46
- minValue: 0,
47
- maxValue: 59,
48
- valueRange: { start: 0, end: 59 },
49
- valueLoop: { start: 0, interval: 1 }
50
- }
51
- },
52
- methods: {}
53
- }
54
- </script>
55
-
56
- <style scoped></style>
1
+ <template>
2
+ <div class="sh-cron-config-list">
3
+ <vxe-radio-group v-model="type">
4
+ <div class="item">
5
+ <vxe-radio :label="TypeEnum.every" v-bind="beforeRadioAttrs">每秒</vxe-radio>
6
+ </div>
7
+ <div class="item">
8
+ <vxe-radio :label="TypeEnum.range" v-bind="beforeRadioAttrs">区间</vxe-radio>
9
+ <span> 从 </span>
10
+ <vxe-input v-model="valueRange.start" v-bind="typeRangeAttrs" />
11
+ <span> 秒 至 </span>
12
+ <vxe-input v-model="valueRange.end" v-bind="typeRangeAttrs" />
13
+ <span> 秒 </span>
14
+ </div>
15
+ <div class="item">
16
+ <vxe-radio :label="TypeEnum.loop" v-bind="beforeRadioAttrs">循环</vxe-radio>
17
+ <span> 从 </span>
18
+ <vxe-input v-model="valueLoop.start" v-bind="typeLoopAttrs" />
19
+ <span> 秒开始,间隔 </span>
20
+ <vxe-input v-model="valueLoop.interval" v-bind="typeLoopAttrs" />
21
+ <span> 秒 </span>
22
+ </div>
23
+ <div class="item">
24
+ <vxe-radio :label="TypeEnum.specify" v-bind="beforeRadioAttrs">指定</vxe-radio>
25
+ <div class="list">
26
+ <vxe-checkbox-group v-model="valueList">
27
+ <template v-for="i in specifyRange" :key="i">
28
+ <vxe-checkbox :label="i" v-bind="typeSpecifyAttrs">{{ i }}</vxe-checkbox>
29
+ </template>
30
+ </vxe-checkbox-group>
31
+ </div>
32
+ </div>
33
+ </vxe-radio-group>
34
+ </div>
35
+ </template>
36
+
37
+ <script>
38
+ import { defineComponent, computed, getCurrentInstance, watch } from 'vue'
39
+ import cronProps from '../mixin/cron-props'
40
+ import cronHooks from '../mixin/cron-hooks'
41
+ import cronEmits from '../mixin/cron-emits'
42
+ export default defineComponent({
43
+ name: 'CronSecondBox',
44
+ props: {
45
+ ...cronProps
46
+ },
47
+ emits: cronEmits,
48
+ setup(props, context) {
49
+ const { proxy } = getCurrentInstance()
50
+ const { $vUtils } = proxy
51
+ const { emit, slots } = context
52
+
53
+ const useCron = cronHooks(props, context, proxy, {
54
+ defaultValue: '*',
55
+ minValue: 0,
56
+ maxValue: 59,
57
+ valueRange: { start: 0, end: 59 },
58
+ valueLoop: { start: 0, interval: 1 }
59
+ })
60
+
61
+ return {
62
+ ...useCron
63
+ }
64
+ }
65
+ })
66
+ </script>
67
+
68
+ <style scoped></style>
@@ -1,115 +1,126 @@
1
- <template>
2
- <div class="sh-cron-config-list">
3
- <vxe-radio-group v-model="type">
4
- <div class="item">
5
- <vxe-radio :label="TypeEnum.unset" v-bind="beforeRadioAttrs">不设置</vxe-radio>
6
- <span class="tip-info">日和周只能设置其中之一</span>
7
- </div>
8
- <div class="item">
9
- <vxe-radio :label="TypeEnum.range" v-bind="beforeRadioAttrs">区间</vxe-radio>
10
- <span> 从 </span>
11
- <vxe-select v-model="valueRange.start" :options="weekOptions" v-bind="typeRangeSelectAttrs" />
12
- <span> 至 </span>
13
- <vxe-select v-model="valueRange.end" :options="weekOptions" v-bind="typeRangeSelectAttrs" />
14
- </div>
15
- <div class="item">
16
- <vxe-radio :label="TypeEnum.loop" v-bind="beforeRadioAttrs">循环</vxe-radio>
17
- <span> 从 </span>
18
- <vxe-select v-model="valueLoop.start" :options="weekOptions" v-bind="typeLoopSelectAttrs" />
19
- <span> 至 </span>
20
- <vxe-input v-model="valueLoop.interval" v-bind="typeLoopAttrs" />
21
- </div>
22
- <div class="item">
23
- <vxe-radio :label="TypeEnum.specify" v-bind="beforeRadioAttrs">指定</vxe-radio>
24
- <div class="list">
25
- <vxe-checkbox-group v-model="valueList">
26
- <template v-for="i in specifyRange" :key="i">
27
- <vxe-checkbox :label="i" v-bind="typeSpecifyAttrs">{{ i }}</vxe-checkbox>
28
- </template>
29
- </vxe-checkbox-group>
30
- </div>
31
- </div>
32
- </vxe-radio-group>
33
- </div>
34
- </template>
35
-
36
- <script>
37
- import cronMixin from '../mixin/cron-box'
38
-
39
- const WEEK_MAP_EN = {
40
- 1: 'SUN',
41
- 2: 'MON',
42
- 3: 'TUE',
43
- 4: 'WED',
44
- 5: 'THU',
45
- 6: 'FRI',
46
- 7: 'SAT'
47
- }
48
-
49
- const WEEK_MAP_CN = {
50
- 1: '周日',
51
- 2: '周一',
52
- 3: '周二',
53
- 4: '周三',
54
- 5: '周四',
55
- 6: '周五',
56
- 7: '周六'
57
- }
58
-
59
- export default {
60
- name: 'CronWeekBox',
61
- mixins: [cronMixin],
62
- props: {
63
- day: {
64
- type: String,
65
- default: '*'
66
- }
67
- },
68
- data() {
69
- return {
70
- defaultValue: '*',
71
- valueWork: 1,
72
- minValue: 1,
73
- maxValue: 7,
74
- valueRange: { start: 1, end: 7 },
75
- valueLoop: { start: 2, interval: 1 }
76
- }
77
- },
78
- computed: {
79
- disabledChoice() {
80
- return (this.day && this.day !== '?') || this.disabled
81
- },
82
- weekOptions() {
83
- let options = []
84
- for (let weekKey of Object.keys(WEEK_MAP_CN)) {
85
- let weekName = WEEK_MAP_CN[weekKey]
86
- options.push({
87
- value: Number.parseInt(weekKey),
88
- label: weekName
89
- })
90
- }
91
- return options
92
- },
93
- typeRangeSelectAttrs() {
94
- return {
95
- class: ['cron-item-input'],
96
- disabled: this.typeRangeAttrs.disabled
97
- }
98
- },
99
- typeLoopSelectAttrs() {
100
- return {
101
- class: ['cron-item-input'],
102
- disabled: this.typeLoopAttrs.disabled
103
- }
104
- }
105
- },
106
- watch: {
107
- week() {
108
- this.updateValue(this.disabledChoice ? '?' : this.computeValue)
109
- }
110
- },
111
- methods: {}
112
- }
113
- </script>
114
-
115
- <style scoped></style>
1
+ <template>
2
+ <div class="sh-cron-config-list">
3
+ <vxe-radio-group v-model="type">
4
+ <div class="item">
5
+ <vxe-radio :label="TypeEnum.unset" v-bind="beforeRadioAttrs">不设置</vxe-radio>
6
+ <span class="tip-info">日和周只能设置其中之一</span>
7
+ </div>
8
+ <div class="item">
9
+ <vxe-radio :label="TypeEnum.range" v-bind="beforeRadioAttrs">区间</vxe-radio>
10
+ <span> 从 </span>
11
+ <vxe-select v-model="valueRange.start" :options="weekOptions" v-bind="typeRangeSelectAttrs" />
12
+ <span> 至 </span>
13
+ <vxe-select v-model="valueRange.end" :options="weekOptions" v-bind="typeRangeSelectAttrs" />
14
+ </div>
15
+ <div class="item">
16
+ <vxe-radio :label="TypeEnum.loop" v-bind="beforeRadioAttrs">循环</vxe-radio>
17
+ <span> 从 </span>
18
+ <vxe-select v-model="valueLoop.start" :options="weekOptions" v-bind="typeLoopSelectAttrs" />
19
+ <span> 至 </span>
20
+ <vxe-input v-model="valueLoop.interval" v-bind="typeLoopAttrs" />
21
+ </div>
22
+ <div class="item">
23
+ <vxe-radio :label="TypeEnum.specify" v-bind="beforeRadioAttrs">指定</vxe-radio>
24
+ <div class="list">
25
+ <vxe-checkbox-group v-model="valueList">
26
+ <template v-for="i in specifyRange" :key="i">
27
+ <vxe-checkbox :label="i" v-bind="typeSpecifyAttrs">{{ i }}</vxe-checkbox>
28
+ </template>
29
+ </vxe-checkbox-group>
30
+ </div>
31
+ </div>
32
+ </vxe-radio-group>
33
+ </div>
34
+ </template>
35
+
36
+ <script>
37
+ import { defineComponent, computed, getCurrentInstance, watch } from 'vue'
38
+ import cronProps from '../mixin/cron-props'
39
+ emits: cronEmits,
40
+ import cronHooks from '../mixin/cron-hooks'
41
+ import cronEmits from '../mixin/cron-emits'
42
+ const WEEK_MAP_EN = {
43
+ 1: 'SUN',
44
+ 2: 'MON',
45
+ 3: 'TUE',
46
+ 4: 'WED',
47
+ 5: 'THU',
48
+ 6: 'FRI',
49
+ 7: 'SAT'
50
+ }
51
+ const WEEK_MAP_CN = {
52
+ 1: '周日',
53
+ 2: '周一',
54
+ 3: '周二',
55
+ 4: '周三',
56
+ 5: '周四',
57
+ 6: '周五',
58
+ 7: '周六'
59
+ }
60
+ export default defineComponent({
61
+ name: 'CronWeekBox',
62
+ props: {
63
+ ...cronProps,
64
+ day: {
65
+ type: String,
66
+ default: '*'
67
+ }
68
+ },
69
+ setup(props, context) {
70
+ const { proxy } = getCurrentInstance()
71
+ const { $vUtils } = proxy
72
+ const { emit, slots } = context
73
+
74
+ const useCron = cronHooks(props, context, proxy, {
75
+ defaultValue: '*',
76
+ minValue: 1,
77
+ maxValue: 7,
78
+ valueRange: { start: 1, end: 7 },
79
+ valueLoop: { start: 2, interval: 1 }
80
+ })
81
+
82
+ const disabledChoice = computed(() => {
83
+ return (props.day && props.day !== '?') || props.disabled
84
+ })
85
+ const weekOptions = computed(() => {
86
+ let options = []
87
+ for (let weekKey of Object.keys(WEEK_MAP_CN)) {
88
+ let weekName = WEEK_MAP_CN[weekKey]
89
+ options.push({
90
+ value: Number.parseInt(weekKey),
91
+ label: weekName
92
+ })
93
+ }
94
+ return options
95
+ })
96
+ const typeRangeSelectAttrs = computed(() => {
97
+ return {
98
+ class: ['cron-item-input'],
99
+ disabled: useCron.typeRangeAttrs.value.disabled
100
+ }
101
+ })
102
+ const typeLoopSelectAttrs = computed(() => {
103
+ return {
104
+ class: ['cron-item-input'],
105
+ disabled: useCron.typeLoopAttrs.value.disabled
106
+ }
107
+ })
108
+
109
+ watch(
110
+ () => props.day,
111
+ () => {
112
+ useCron.updateValue(disabledChoice.value ? '?' : useCron.computeValue.value)
113
+ }
114
+ )
115
+
116
+ return {
117
+ ...useCron,
118
+ weekOptions,
119
+ typeRangeSelectAttrs,
120
+ typeLoopSelectAttrs
121
+ }
122
+ }
123
+ })
124
+ </script>
125
+
126
+ <style scoped></style>
@@ -1,46 +1,59 @@
1
- <template>
2
- <div class="sh-cron-config-list">
3
- <vxe-radio-group v-model="type">
4
- <div class="item">
5
- <vxe-radio :label="TypeEnum.every" v-bind="beforeRadioAttrs">每年</vxe-radio>
6
- </div>
7
- <div class="item">
8
- <vxe-radio :label="TypeEnum.range" v-bind="beforeRadioAttrs">区间</vxe-radio>
9
- <span> 从 </span>
10
- <vxe-input v-model="valueRange.start" v-bind="typeRangeAttrs" />
11
- <span> 年 至 </span>
12
- <vxe-input v-model="valueRange.end" v-bind="typeRangeAttrs" />
13
- <span> 年 </span>
14
- </div>
15
- <div class="item">
16
- <vxe-radio :label="TypeEnum.loop" v-bind="beforeRadioAttrs">循环</vxe-radio>
17
- <span> 年 </span>
18
- <vxe-input v-model="valueLoop.start" v-bind="typeLoopAttrs" />
19
- <span> 分开始,间隔 </span>
20
- <vxe-input v-model="valueLoop.interval" v-bind="typeLoopAttrs" />
21
- <span> 年 </span>
22
- </div>
23
- </vxe-radio-group>
24
- </div>
25
- </template>
26
-
27
- <script>
28
- import cronMixin from '../mixin/cron-box'
29
-
30
- const nowYear = new Date().getFullYear()
31
- export default {
32
- name: 'CronYearBox',
33
- mixins: [cronMixin],
34
- data() {
35
- return {
36
- defaultValue: '*',
37
- minValue: 0,
38
- valueRange: { start: nowYear, end: nowYear + 100 },
39
- valueLoop: { start: nowYear, interval: 1 }
40
- }
41
- },
42
- methods: {}
43
- }
44
- </script>
45
-
46
- <style scoped></style>
1
+ <template>
2
+ <div class="sh-cron-config-list">
3
+ <vxe-radio-group v-model="type">
4
+ <div class="item">
5
+ <vxe-radio :label="TypeEnum.every" v-bind="beforeRadioAttrs">每年</vxe-radio>
6
+ </div>
7
+ <div class="item">
8
+ <vxe-radio :label="TypeEnum.range" v-bind="beforeRadioAttrs">区间</vxe-radio>
9
+ <span> 从 </span>
10
+ <vxe-input v-model="valueRange.start" v-bind="typeRangeAttrs" />
11
+ <span> 年 至 </span>
12
+ <vxe-input v-model="valueRange.end" v-bind="typeRangeAttrs" />
13
+ <span> 年 </span>
14
+ </div>
15
+ <div class="item">
16
+ <vxe-radio :label="TypeEnum.loop" v-bind="beforeRadioAttrs">循环</vxe-radio>
17
+ <span> 年 </span>
18
+ <vxe-input v-model="valueLoop.start" v-bind="typeLoopAttrs" />
19
+ <span> 分开始,间隔 </span>
20
+ <vxe-input v-model="valueLoop.interval" v-bind="typeLoopAttrs" />
21
+ <span> 年 </span>
22
+ </div>
23
+ </vxe-radio-group>
24
+ </div>
25
+ </template>
26
+
27
+ <script>
28
+ import { defineComponent, computed, getCurrentInstance, watch } from 'vue'
29
+ import cronProps from '../mixin/cron-props'
30
+ import cronHooks from '../mixin/cron-hooks'
31
+ import cronEmits from '../mixin/cron-emits'
32
+ export default defineComponent({
33
+ name: 'CronYearBox',
34
+ props: {
35
+ ...cronProps
36
+ },
37
+ emits: cronEmits,
38
+ setup(props, context) {
39
+ const { proxy } = getCurrentInstance()
40
+ const { $vUtils } = proxy
41
+ const { emit, slots } = context
42
+
43
+ const nowYear = new Date().getFullYear()
44
+
45
+ const useCron = cronHooks(props, context, proxy, {
46
+ defaultValue: '*',
47
+ minValue: 0,
48
+ valueRange: { start: nowYear, end: nowYear + 100 },
49
+ valueLoop: { start: nowYear, interval: 1 }
50
+ })
51
+
52
+ return {
53
+ ...useCron
54
+ }
55
+ }
56
+ })
57
+ </script>
58
+
59
+ <style scoped></style>
@@ -9,17 +9,13 @@
9
9
  </template>
10
10
 
11
11
  <script>
12
+ import { defineComponent, computed, provide, ref, getCurrentInstance, watch, onMounted } from 'vue'
12
13
  import menuGroupContent from './menu-group-content.vue'
13
- export default {
14
+ export default defineComponent({
14
15
  name: 'ShMenu',
15
16
  components: {
16
17
  menuGroupContent
17
18
  },
18
- provide() {
19
- return {
20
- MenuInstance: this
21
- }
22
- },
23
19
  props: {
24
20
  modelValue: {
25
21
  type: String
@@ -60,72 +56,89 @@ export default {
60
56
  }
61
57
  },
62
58
  emits: ['update:modelValue', 'change', 'expand'],
63
- data() {
64
- return {
65
- activeName: this.modelValue,
66
- activeNames: [],
67
- openedNames: []
68
- }
69
- },
70
- computed: {
71
- classes() {
59
+ setup(props, context) {
60
+ const { proxy } = getCurrentInstance()
61
+ const { $vUtils } = proxy
62
+ const { emit, slots } = context
63
+
64
+ const activeName = ref(props.modelValue)
65
+ const activeNames = ref([])
66
+ const openedNames = ref([])
67
+
68
+ const classes = computed(() => {
72
69
  return {
73
- theme: this.theme,
74
- fix: this.fix,
75
- collapsed: this.collapsed,
76
- [`${this.mode}`]: this.mode
70
+ theme: props.theme,
71
+ fix: props.fix,
72
+ collapsed: props.collapsed,
73
+ [`${props.mode}`]: props.mode
77
74
  }
78
- }
79
- },
80
- watch: {
81
- modelValue(to, from) {
82
- this.resetMenu()
83
- }
84
- },
85
- mounted() {
86
- this.resetMenu()
87
- },
88
- methods: {
75
+ })
76
+
89
77
  // 重新渲染菜单
90
- resetMenu() {
91
- this.activeName = this.modelValue
92
- this.resetExpand(this.activeName, true)
93
- },
94
- resetExpand(menuName, mount) {
95
- let activeNames = []
96
- let parentTree = this.$vUtils.searchTree(this.options, item => item.name === menuName)
97
- this.$vUtils.eachTree(parentTree, item => {
98
- activeNames.push(item.name)
78
+ const resetMenu = () => {
79
+ activeName.value = props.modelValue
80
+ resetExpand(activeName.value, true)
81
+ }
82
+ const resetExpand = (menuName, mount) => {
83
+ let setActiveNames = []
84
+ let parentTree = $vUtils.searchTree(props.options, item => item.name === menuName)
85
+ $vUtils.eachTree(parentTree, item => {
86
+ setActiveNames.push(item.name)
99
87
  })
100
88
  if (mount) {
101
- this.activeNames = activeNames
102
- if (this.collapsed || this.mode !== 'vertical') return
89
+ activeNames.value = setActiveNames
90
+ if (props.collapsed || props.mode !== 'vertical') return
103
91
  }
104
92
  // 过滤掉所有子节点
105
- let menuIndex = activeNames.findIndex(item => item === menuName)
106
- let parentNames = activeNames.filter((item, itemIndex) => menuIndex >= itemIndex)
107
- if (!this.accordion) parentNames = Array.from(new Set(this.openedNames.concat(parentNames)))
108
- this.openedNames = parentNames
109
- },
110
- onMenuSelect(menu) {
111
- this.$emit('update:modelValue', menu.name)
112
- this.$emit('change', menu)
113
- this.handleOut()
114
- },
115
- onMenuExpand(expand, menu) {
116
- this.$emit('expand', expand, menu)
93
+ let menuIndex = setActiveNames.findIndex(item => item === menuName)
94
+ let parentNames = setActiveNames.filter((item, itemIndex) => menuIndex >= itemIndex)
95
+ if (!props.accordion) parentNames = Array.from(new Set(openedNames.value.concat(parentNames)))
96
+ openedNames.value = parentNames
97
+ }
98
+ const onMenuSelect = menu => {
99
+ emit('update:modelValue', menu.name)
100
+ emit('change', menu)
101
+ handleOut()
102
+ }
103
+ const onMenuExpand = (expand, menu) => {
104
+ emit('expand', expand, menu)
117
105
  if (!expand) {
118
- this.openedNames = this.openedNames.filter(name => name !== menu.name)
106
+ openedNames.value = openedNames.value.filter(name => name !== menu.name)
119
107
  return
120
108
  }
121
- this.resetExpand(menu.name)
122
- },
123
- handleOut() {
124
- if (!this.collapsed && this.mode === 'vertical') return
125
- this.openedNames = []
109
+ resetExpand(menu.name)
110
+ }
111
+ const handleOut = () => {
112
+ if (!props.collapsed && props.mode === 'vertical') return
113
+ openedNames.value = []
114
+ }
115
+
116
+ provide('MenuInstance', {
117
+ ...props,
118
+ activeName,
119
+ activeNames,
120
+ openedNames,
121
+ onMenuSelect,
122
+ onMenuExpand
123
+ })
124
+
125
+ watch(
126
+ () => props.modelValue,
127
+ () => {
128
+ resetMenu()
129
+ }
130
+ )
131
+
132
+ onMounted(() => {
133
+ resetMenu()
134
+ })
135
+
136
+ return {
137
+ classes,
138
+ handleOut
126
139
  }
127
140
  }
128
- }
141
+ })
129
142
  </script>
130
143
 
131
144
  <style lang="scss">