adtec-core-package 0.2.2 → 0.2.4

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 (156) hide show
  1. package/.editorconfig +6 -6
  2. package/.prettierrc.json +7 -7
  3. package/.vscode/extensions.json +8 -8
  4. package/README.md +39 -39
  5. package/env.d.ts +1 -1
  6. package/eslint.config.js +56 -56
  7. package/index.html +13 -13
  8. package/package.json +56 -56
  9. package/src/App.vue +9 -9
  10. package/src/assets/base.css +86 -86
  11. package/src/assets/logo.svg +1 -1
  12. package/src/assets/main.css +35 -35
  13. package/src/assets/style/transition.scss +49 -49
  14. package/src/components/OperationAuth/operationAuth.vue +26 -26
  15. package/src/components/Search/ElIconSearch.vue +239 -239
  16. package/src/components/Search/ElSearch.vue +132 -132
  17. package/src/components/icon/ElIconBtn.vue +182 -182
  18. package/src/components/icon/ElIcons.vue +38 -38
  19. package/src/components/upload/ElUploads.vue +279 -279
  20. package/src/css/elementUI/affix.scss +7 -7
  21. package/src/css/elementUI/alert.scss +115 -115
  22. package/src/css/elementUI/anchor-link.scss +41 -41
  23. package/src/css/elementUI/anchor.scss +88 -88
  24. package/src/css/elementUI/aside.scss +8 -8
  25. package/src/css/elementUI/avatar.scss +55 -55
  26. package/src/css/elementUI/backtop.scss +29 -29
  27. package/src/css/elementUI/badge.scss +58 -58
  28. package/src/css/elementUI/base.scss +3 -3
  29. package/src/css/elementUI/breadcrumb.scss +62 -62
  30. package/src/css/elementUI/button-group.scss +80 -80
  31. package/src/css/elementUI/button.scss +304 -304
  32. package/src/css/elementUI/calendar.scss +80 -80
  33. package/src/css/elementUI/card.scss +45 -45
  34. package/src/css/elementUI/carousel-item.scss +58 -58
  35. package/src/css/elementUI/carousel.scss +188 -188
  36. package/src/css/elementUI/cascader-panel.scss +138 -138
  37. package/src/css/elementUI/cascader.scss +230 -230
  38. package/src/css/elementUI/check-tag.scss +60 -60
  39. package/src/css/elementUI/checkbox-button.scss +140 -140
  40. package/src/css/elementUI/checkbox-group.scss +7 -7
  41. package/src/css/elementUI/checkbox.scss +298 -298
  42. package/src/css/elementUI/col.scss +48 -48
  43. package/src/css/elementUI/collapse.scss +70 -70
  44. package/src/css/elementUI/color/index.scss +20 -20
  45. package/src/css/elementUI/color-picker.scss +392 -392
  46. package/src/css/elementUI/common/popup.scss +47 -47
  47. package/src/css/elementUI/common/transition.scss +122 -122
  48. package/src/css/elementUI/container.scss +14 -14
  49. package/src/css/elementUI/dark/css-vars.scss +39 -39
  50. package/src/css/elementUI/dark/var.scss +222 -222
  51. package/src/css/elementUI/date-picker/date-picker.scss +110 -110
  52. package/src/css/elementUI/date-picker/date-range-picker.scss +113 -113
  53. package/src/css/elementUI/date-picker/date-table.scss +158 -158
  54. package/src/css/elementUI/date-picker/month-table.scss +112 -112
  55. package/src/css/elementUI/date-picker/picker-panel.scss +131 -131
  56. package/src/css/elementUI/date-picker/time-picker.scss +90 -90
  57. package/src/css/elementUI/date-picker/time-range-picker.scss +33 -33
  58. package/src/css/elementUI/date-picker/time-spinner.scss +111 -111
  59. package/src/css/elementUI/date-picker/year-table.scss +108 -108
  60. package/src/css/elementUI/date-picker.scss +9 -9
  61. package/src/css/elementUI/descriptions-item.scss +73 -73
  62. package/src/css/elementUI/descriptions.scss +152 -152
  63. package/src/css/elementUI/dialog.scss +199 -199
  64. package/src/css/elementUI/display.scss +12 -12
  65. package/src/css/elementUI/divider.scss +48 -48
  66. package/src/css/elementUI/dropdown.scss +208 -208
  67. package/src/css/elementUI/empty.scss +49 -49
  68. package/src/css/elementUI/footer.scss +12 -12
  69. package/src/css/elementUI/form.scss +243 -243
  70. package/src/css/elementUI/header.scss +12 -12
  71. package/src/css/elementUI/icon.scss +45 -45
  72. package/src/css/elementUI/image-viewer.scss +139 -139
  73. package/src/css/elementUI/image.scss +49 -49
  74. package/src/css/elementUI/index.scss +110 -110
  75. package/src/css/elementUI/input-number.scss +178 -178
  76. package/src/css/elementUI/input.scss +478 -478
  77. package/src/css/elementUI/link.scss +90 -90
  78. package/src/css/elementUI/loading.scss +104 -104
  79. package/src/css/elementUI/main.scss +14 -14
  80. package/src/css/elementUI/mention.scss +88 -88
  81. package/src/css/elementUI/menu.scss +339 -339
  82. package/src/css/elementUI/message-box.scss +213 -213
  83. package/src/css/elementUI/message.scss +98 -98
  84. package/src/css/elementUI/mixins/_button.scss +165 -165
  85. package/src/css/elementUI/mixins/_col.scss +33 -33
  86. package/src/css/elementUI/mixins/_var.scss +67 -67
  87. package/src/css/elementUI/mixins/config.scss +5 -5
  88. package/src/css/elementUI/mixins/function.scss +88 -88
  89. package/src/css/elementUI/mixins/mixins.scss +237 -237
  90. package/src/css/elementUI/mixins/utils.scss +39 -39
  91. package/src/css/elementUI/notification.scss +104 -104
  92. package/src/css/elementUI/option-group.scss +33 -33
  93. package/src/css/elementUI/option.scss +71 -71
  94. package/src/css/elementUI/overlay.scss +17 -17
  95. package/src/css/elementUI/page-header.scss +60 -60
  96. package/src/css/elementUI/pagination.scss +238 -238
  97. package/src/css/elementUI/popconfirm.scss +16 -16
  98. package/src/css/elementUI/popover.scss +61 -61
  99. package/src/css/elementUI/popper.scss +106 -106
  100. package/src/css/elementUI/progress.scss +179 -179
  101. package/src/css/elementUI/radio-button.scss +169 -169
  102. package/src/css/elementUI/radio-group.scss +9 -9
  103. package/src/css/elementUI/radio.scss +215 -215
  104. package/src/css/elementUI/rate.scss +108 -108
  105. package/src/css/elementUI/reset.scss +98 -98
  106. package/src/css/elementUI/result.scss +57 -57
  107. package/src/css/elementUI/row.scss +35 -35
  108. package/src/css/elementUI/scrollbar.scss +97 -97
  109. package/src/css/elementUI/segmented.scss +183 -183
  110. package/src/css/elementUI/select-dropdown-v2.scss +1 -1
  111. package/src/css/elementUI/select-dropdown.scss +57 -57
  112. package/src/css/elementUI/select-v2.scss +4 -4
  113. package/src/css/elementUI/select.scss +253 -253
  114. package/src/css/elementUI/skeleton-item.scss +83 -83
  115. package/src/css/elementUI/skeleton.scss +44 -44
  116. package/src/css/elementUI/slider.scss +212 -212
  117. package/src/css/elementUI/space.scss +20 -20
  118. package/src/css/elementUI/spinner.scss +43 -43
  119. package/src/css/elementUI/statistic.scss +35 -35
  120. package/src/css/elementUI/step.scss +316 -316
  121. package/src/css/elementUI/steps.scss +21 -21
  122. package/src/css/elementUI/switch.scss +300 -300
  123. package/src/css/elementUI/table-column.scss +98 -98
  124. package/src/css/elementUI/table-v2.scss +236 -236
  125. package/src/css/elementUI/tag.scss +181 -181
  126. package/src/css/elementUI/text.scss +51 -51
  127. package/src/css/elementUI/time-picker.scss +5 -5
  128. package/src/css/elementUI/time-select.scss +37 -37
  129. package/src/css/elementUI/timeline-item.scss +84 -84
  130. package/src/css/elementUI/timeline.scss +46 -46
  131. package/src/css/elementUI/tooltip-v2.scss +95 -95
  132. package/src/css/elementUI/tour.scss +187 -187
  133. package/src/css/elementUI/transfer.scss +203 -203
  134. package/src/css/elementUI/tree-select.scss +41 -41
  135. package/src/css/elementUI/tree.scss +134 -134
  136. package/src/css/elementUI/upload.scss +654 -654
  137. package/src/css/elementUI/var.scss +87 -87
  138. package/src/css/elementUI/virtual-list.scss +40 -40
  139. package/src/interface/enum/FlexEnum.ts +85 -85
  140. package/src/main.ts +14 -14
  141. package/src/mixin/globalMixin.ts +31 -33
  142. package/src/router/index.ts +23 -23
  143. package/src/utils/encrypt.ts +10 -10
  144. package/src/utils/request.ts +55 -55
  145. package/tsconfig.app.json +12 -12
  146. package/tsconfig.json +11 -11
  147. package/tsconfig.node.json +18 -18
  148. package/vite.config.ts +38 -38
  149. package/src/api/BasicApi.ts +0 -17
  150. package/src/api/SysUserApi.ts +0 -35
  151. package/src/components/business/userSelect.vue +0 -412
  152. package/src/hooks/useDictHooks.ts +0 -81
  153. package/src/interface/IMdmDept.ts +0 -82
  154. package/src/interface/IOrgDeptInfo.ts +0 -12
  155. package/src/interface/ISysUserInfo.ts +0 -70
  156. /package/src/components/autoToolTip/{ElAutoToolTip.vue → index.vue} +0 -0
@@ -1,132 +1,132 @@
1
- <template>
2
- <el-flex
3
- @keypress="keypress"
4
- :height="height"
5
- style="background: #ffffff; /*border-radius: 4px;*/ padding: 15px 10px 15px 15px;"
6
- >
7
- <el-flex style="overflow: hidden">
8
- <div ref="ref_content" style="width: 100%; overflow: hidden" :style="{ height: height }">
9
- <div ref="ref_div">
10
- <slot></slot>
11
- </div>
12
- </div>
13
- </el-flex>
14
-
15
- <el-flex
16
- width="240px"
17
- justify="flex-end"
18
- align="flex-start"
19
- style="padding-top: 30px"
20
- >
21
- <el-button @click="reset">重置</el-button>
22
- <el-button type="primary" @click="search" :class="getRouteName + '_search'">查询</el-button>
23
- <el-button type="text" @click="retract" v-show="is_retract">
24
- <el-icon
25
- ><ArrowDown v-show="retractval === '展开'" /><ArrowUp
26
- v-show="retractval === '收起'" /></el-icon
27
- >{{ retractval }}</el-button
28
- >
29
- </el-flex>
30
- </el-flex>
31
- </template>
32
- <script setup lang="ts">
33
- import { computed, inject, nextTick, onMounted, ref, watch } from 'vue'
34
- import { useWindowSize } from '@vueuse/core'
35
- import { useRouter } from 'vue-router'
36
- import ElFlex from '../ElFlex/ElFlex.vue'
37
- import { ArrowDown, ArrowUp } from '@element-plus/icons-vue'
38
-
39
- const router = useRouter()
40
- const getRouteName = computed(() => {
41
- return router.currentRoute.value.name as string
42
- })
43
- const ref_content = ref()
44
- const retractval = ref('展开')
45
- const height = ref('95px')
46
- const is_retract = ref(false)
47
- const ref_div = ref()
48
- const windowContent = useWindowSize()
49
- const collapsed = inject<boolean>('collapsed')
50
- // eslint-disable-next-line @typescript-eslint/ban-ts-comment
51
- //@ts-expect-error
52
- watch(collapsed, () => {
53
- calculation()
54
- })
55
- watch(windowContent.width, () => {
56
- calculation()
57
- })
58
- const calculation = () => {
59
- setTimeout(() => {
60
- if (!(ref_div.value.offsetHeight > 95)) {
61
- if (ref_div.value.offsetHeight !== 0) {
62
- is_retract.value = false
63
- height.value = ref_div.value.offsetHeight + 15 + 'px'
64
- retractval.value = '收起'
65
- } else {
66
- calculation()
67
- }
68
- } else {
69
- is_retract.value = true
70
- height.value = '95px'
71
- retractval.value = '展开'
72
- }
73
- }, 100)
74
- }
75
- watch(windowContent.height, () => {
76
- calculation()
77
- })
78
- const retract = () => {
79
- if (height.value === '95px') {
80
- height.value = ref_content.value.children[0].scrollHeight + 15 + 'px'
81
- retractval.value = '收起'
82
- } else {
83
- height.value = '95px'
84
- retractval.value = '展开'
85
- }
86
- }
87
- const reset = () => {
88
- emit('reset')
89
- }
90
- const search = () => {
91
- emit('search')
92
- }
93
- const keypress = () => {
94
- // if (e.key === 'Enter') {
95
- // emit('search')
96
- // }
97
- }
98
- const emit = defineEmits<{
99
- (event: 'reset'): void
100
- (event: 'search'): void
101
- }>()
102
- onMounted(() => {
103
- nextTick(() => {
104
- if (!(ref_content.value.children[0].scrollHeight > 95)) {
105
- is_retract.value = false
106
- height.value = ref_content.value.children[0].scrollHeight + 15 + 'px'
107
- retractval.value = '收起'
108
- } else {
109
- is_retract.value = true
110
- height.value = '95px'
111
- retractval.value = '展开'
112
- }
113
- })
114
- })
115
-
116
- // onKeyStroke(['d', 'D', 'ArrowRight'], () => {
117
- // translateX.value += 10
118
- // }, { dedupe: true })
119
- </script>
120
- <style scoped lang="scss">
121
- .elementSelect {
122
- border: 2px dashed #1a67f8 !important;
123
- }
124
-
125
- .demo-form-inline .el-input {
126
- --el-input-width: 220px;
127
- }
128
-
129
- .demo-form-inline .el-select {
130
- --el-select-width: 220px;
131
- }
132
- </style>
1
+ <template>
2
+ <el-flex
3
+ @keypress="keypress"
4
+ :height="height"
5
+ style="background: #ffffff; /*border-radius: 4px;*/ padding: 15px 10px 15px 15px;"
6
+ >
7
+ <el-flex style="overflow: hidden">
8
+ <div ref="ref_content" style="width: 100%; overflow: hidden" :style="{ height: height }">
9
+ <div ref="ref_div">
10
+ <slot></slot>
11
+ </div>
12
+ </div>
13
+ </el-flex>
14
+
15
+ <el-flex
16
+ width="240px"
17
+ justify="flex-end"
18
+ align="flex-start"
19
+ style="padding-top: 30px"
20
+ >
21
+ <el-button @click="reset">重置</el-button>
22
+ <el-button type="primary" @click="search" :class="getRouteName + '_search'">查询</el-button>
23
+ <el-button type="text" @click="retract" v-show="is_retract">
24
+ <el-icon
25
+ ><ArrowDown v-show="retractval === '展开'" /><ArrowUp
26
+ v-show="retractval === '收起'" /></el-icon
27
+ >{{ retractval }}</el-button
28
+ >
29
+ </el-flex>
30
+ </el-flex>
31
+ </template>
32
+ <script setup lang="ts">
33
+ import { computed, inject, nextTick, onMounted, ref, watch } from 'vue'
34
+ import { useWindowSize } from '@vueuse/core'
35
+ import { useRouter } from 'vue-router'
36
+ import ElFlex from '../ElFlex/ElFlex.vue'
37
+ import { ArrowDown, ArrowUp } from '@element-plus/icons-vue'
38
+
39
+ const router = useRouter()
40
+ const getRouteName = computed(() => {
41
+ return router.currentRoute.value.name as string
42
+ })
43
+ const ref_content = ref()
44
+ const retractval = ref('展开')
45
+ const height = ref('95px')
46
+ const is_retract = ref(false)
47
+ const ref_div = ref()
48
+ const windowContent = useWindowSize()
49
+ const collapsed = inject<boolean>('collapsed')
50
+ // eslint-disable-next-line @typescript-eslint/ban-ts-comment
51
+ //@ts-expect-error
52
+ watch(collapsed, () => {
53
+ calculation()
54
+ })
55
+ watch(windowContent.width, () => {
56
+ calculation()
57
+ })
58
+ const calculation = () => {
59
+ setTimeout(() => {
60
+ if (!(ref_div.value.offsetHeight > 95)) {
61
+ if (ref_div.value.offsetHeight !== 0) {
62
+ is_retract.value = false
63
+ height.value = ref_div.value.offsetHeight + 15 + 'px'
64
+ retractval.value = '收起'
65
+ } else {
66
+ calculation()
67
+ }
68
+ } else {
69
+ is_retract.value = true
70
+ height.value = '95px'
71
+ retractval.value = '展开'
72
+ }
73
+ }, 100)
74
+ }
75
+ watch(windowContent.height, () => {
76
+ calculation()
77
+ })
78
+ const retract = () => {
79
+ if (height.value === '95px') {
80
+ height.value = ref_content.value.children[0].scrollHeight + 15 + 'px'
81
+ retractval.value = '收起'
82
+ } else {
83
+ height.value = '95px'
84
+ retractval.value = '展开'
85
+ }
86
+ }
87
+ const reset = () => {
88
+ emit('reset')
89
+ }
90
+ const search = () => {
91
+ emit('search')
92
+ }
93
+ const keypress = () => {
94
+ // if (e.key === 'Enter') {
95
+ // emit('search')
96
+ // }
97
+ }
98
+ const emit = defineEmits<{
99
+ (event: 'reset'): void
100
+ (event: 'search'): void
101
+ }>()
102
+ onMounted(() => {
103
+ nextTick(() => {
104
+ if (!(ref_content.value.children[0].scrollHeight > 95)) {
105
+ is_retract.value = false
106
+ height.value = ref_content.value.children[0].scrollHeight + 15 + 'px'
107
+ retractval.value = '收起'
108
+ } else {
109
+ is_retract.value = true
110
+ height.value = '95px'
111
+ retractval.value = '展开'
112
+ }
113
+ })
114
+ })
115
+
116
+ // onKeyStroke(['d', 'D', 'ArrowRight'], () => {
117
+ // translateX.value += 10
118
+ // }, { dedupe: true })
119
+ </script>
120
+ <style scoped lang="scss">
121
+ .elementSelect {
122
+ border: 2px dashed #1a67f8 !important;
123
+ }
124
+
125
+ .demo-form-inline .el-input {
126
+ --el-input-width: 220px;
127
+ }
128
+
129
+ .demo-form-inline .el-select {
130
+ --el-select-width: 220px;
131
+ }
132
+ </style>
@@ -1,182 +1,182 @@
1
- <!--创建人 丁盼-->
2
- <!--说明: ElIconBtn-->
3
- <!--创建时间: 2024/11/24 下午3:12-->
4
- <!--修改时间: 2024/11/24 下午3:12-->
5
- <template>
6
- <el-button v-if="elementType === 'button'" style="padding: 8px 10px; margin-left: 4px">
7
- <el-icon
8
- ref="ref_icons"
9
- @mouseenter="visible = true"
10
- @mouseleave="visible = false"
11
- class="icon-btn"
12
- style="margin: 0"
13
- :class="getClass"
14
- >
15
- <svg v-if="selcomp" class="icon" aria-hidden="true">
16
- <use :href="'#' + iconName"></use>
17
- </svg>
18
- <component v-else :is="iconName"></component>
19
- <el-tooltip
20
- v-model:visible="visible"
21
- v-if="tip"
22
- :content="tip"
23
- placement="top"
24
- effect="light"
25
- trigger="click"
26
- virtual-triggering
27
- :virtual-ref="ref_icons"
28
- />
29
- </el-icon>
30
- </el-button>
31
- <el-icon
32
- v-else
33
- ref="ref_icons"
34
- @mouseenter="visible = true"
35
- @mouseleave="visible = false"
36
- class="icon-btn"
37
- :class="getClass"
38
- >
39
- <svg v-if="selcomp" class="icon" aria-hidden="true">
40
- <use :href="'#' + iconName"></use>
41
- </svg>
42
- <component v-else :is="iconName"></component>
43
- <el-tooltip
44
- v-model:visible="visible"
45
- v-if="tip"
46
- :content="tip"
47
- placement="top"
48
- effect="light"
49
- trigger="click"
50
- virtual-triggering
51
- :virtual-ref="ref_icons"
52
- />
53
- </el-icon>
54
- </template>
55
- <script setup lang="ts">
56
- import { useVModel } from '@vueuse/core'
57
- import { computed, ref } from 'vue'
58
- const visible = ref(false)
59
- const ref_icons = ref()
60
- const selcomp = computed(() => {
61
- if (iconName.value?.includes('adtec')) {
62
- return true
63
- } else {
64
- return false
65
- }
66
- })
67
- /**
68
- * 获取样式
69
- */
70
- const getClass = computed(() => {
71
- let className = 'icon-btn--'
72
- // + props.type
73
- if (props.type !== 'default') {
74
- className += props.type
75
- } else {
76
- if (iconName.value === 'adtec-plus') {
77
- className += 'primary'
78
- } else if (iconName.value === 'adtec-refresh') {
79
- className += 'default'
80
- } else if (iconName.value === 'adtec-delete') {
81
- className += 'danger'
82
- } else if (iconName.value === 'adtec-edit') {
83
- className += 'warning'
84
- }
85
- }
86
-
87
- if (props.disabled) {
88
- className += ' icon-btn--disabled'
89
- }
90
- className += ' icon-btn--size-' + props.size
91
- return className
92
- })
93
- // 定义Props类型
94
- const props = defineProps({
95
- /**
96
- * @type string
97
- * @default ''
98
- * @description 提示文字
99
- */
100
- tip: {
101
- type: String,
102
- default: '',
103
- },
104
- /**
105
- * @type {'adtec-plus'|'adtec-refresh'|'adtec-delete'|'adtec-edit'}
106
- * @default 'default'
107
- * @description 图标
108
- */
109
- modelValue: {
110
- type: String,
111
- default: '',
112
- },
113
- /**
114
- * @type {'small'|'default'|'large'}
115
- * @default 'default'
116
- * @description 图标大小
117
- */
118
- size: {
119
- type: String,
120
- default: 'default',
121
- // 注意:在`<script setup>`中,直接使用函数进行验证,JSDoc辅助IDE提示
122
- validator: (value: string) => ['large', 'default', 'small'].includes(value),
123
- },
124
- /**
125
- * @type {"default" | "success" | "warning" | "info" | "primary" | "danger"}
126
- * @default 'default'
127
- * @description 图标类型
128
- */
129
- type: {
130
- type: String,
131
- default: 'default',
132
- validator: (value: string) =>
133
- ['default', 'success', 'warning', 'info', 'primary', 'danger'].includes(value),
134
- },
135
- /**
136
- * @type {"icon" | "button"}
137
- * @default 'icon'
138
- * @description 元素类型
139
- */
140
- elementType: {
141
- type: String,
142
- default: 'icon',
143
- },
144
- disabled: {
145
- type: Boolean,
146
- default: false,
147
- },
148
- })
149
- const emit = defineEmits(['update:modelValue'])
150
- const iconName = useVModel(props, 'modelValue', emit)
151
- </script>
152
- <style scoped lang="scss">
153
- .icon-btn {
154
- cursor: pointer;
155
- margin: 0px 0px 0px 8px;
156
- //margin-left: 5px;
157
- --el-button-hover-bg-color: var(--el-color-primary-light-3);
158
- &:hover {
159
- color: var(--el-button-hover-bg-color);
160
- }
161
- &--disabled {
162
- color: var(--el-color-disabled-text-color);
163
- cursor: not-allowed !important;
164
- }
165
- &--size-large {
166
- font-size: var(--el-font-size-large);
167
- }
168
- &--size-default {
169
- font-size: var(--el-font-size-base);
170
- }
171
- &--size-small {
172
- font-size: var(--el-font-size-small);
173
- }
174
- @each $type in (primary, success, warning, danger, info) {
175
- &--#{$type} {
176
- --el-button-hover-bg-color: var(--el-color-#{$type}-light-3);
177
- --el-button-disabled-bg-color: var(--el-color-#{$type}-light-5);
178
- color: var(--el-color-#{$type});
179
- }
180
- }
181
- }
182
- </style>
1
+ <!--创建人 丁盼-->
2
+ <!--说明: ElIconBtn-->
3
+ <!--创建时间: 2024/11/24 下午3:12-->
4
+ <!--修改时间: 2024/11/24 下午3:12-->
5
+ <template>
6
+ <el-button v-if="elementType === 'button'" style="padding: 8px 10px; margin-left: 4px">
7
+ <el-icon
8
+ ref="ref_icons"
9
+ @mouseenter="visible = true"
10
+ @mouseleave="visible = false"
11
+ class="icon-btn"
12
+ style="margin: 0"
13
+ :class="getClass"
14
+ >
15
+ <svg v-if="selcomp" class="icon" aria-hidden="true">
16
+ <use :href="'#' + iconName"></use>
17
+ </svg>
18
+ <component v-else :is="iconName"></component>
19
+ <el-tooltip
20
+ v-model:visible="visible"
21
+ v-if="tip"
22
+ :content="tip"
23
+ placement="top"
24
+ effect="light"
25
+ trigger="click"
26
+ virtual-triggering
27
+ :virtual-ref="ref_icons"
28
+ />
29
+ </el-icon>
30
+ </el-button>
31
+ <el-icon
32
+ v-else
33
+ ref="ref_icons"
34
+ @mouseenter="visible = true"
35
+ @mouseleave="visible = false"
36
+ class="icon-btn"
37
+ :class="getClass"
38
+ >
39
+ <svg v-if="selcomp" class="icon" aria-hidden="true">
40
+ <use :href="'#' + iconName"></use>
41
+ </svg>
42
+ <component v-else :is="iconName"></component>
43
+ <el-tooltip
44
+ v-model:visible="visible"
45
+ v-if="tip"
46
+ :content="tip"
47
+ placement="top"
48
+ effect="light"
49
+ trigger="click"
50
+ virtual-triggering
51
+ :virtual-ref="ref_icons"
52
+ />
53
+ </el-icon>
54
+ </template>
55
+ <script setup lang="ts">
56
+ import { useVModel } from '@vueuse/core'
57
+ import { computed, ref } from 'vue'
58
+ const visible = ref(false)
59
+ const ref_icons = ref()
60
+ const selcomp = computed(() => {
61
+ if (iconName.value?.includes('adtec')) {
62
+ return true
63
+ } else {
64
+ return false
65
+ }
66
+ })
67
+ /**
68
+ * 获取样式
69
+ */
70
+ const getClass = computed(() => {
71
+ let className = 'icon-btn--'
72
+ // + props.type
73
+ if (props.type !== 'default') {
74
+ className += props.type
75
+ } else {
76
+ if (iconName.value === 'adtec-plus') {
77
+ className += 'primary'
78
+ } else if (iconName.value === 'adtec-refresh') {
79
+ className += 'default'
80
+ } else if (iconName.value === 'adtec-delete') {
81
+ className += 'danger'
82
+ } else if (iconName.value === 'adtec-edit') {
83
+ className += 'warning'
84
+ }
85
+ }
86
+
87
+ if (props.disabled) {
88
+ className += ' icon-btn--disabled'
89
+ }
90
+ className += ' icon-btn--size-' + props.size
91
+ return className
92
+ })
93
+ // 定义Props类型
94
+ const props = defineProps({
95
+ /**
96
+ * @type string
97
+ * @default ''
98
+ * @description 提示文字
99
+ */
100
+ tip: {
101
+ type: String,
102
+ default: '',
103
+ },
104
+ /**
105
+ * @type {'adtec-plus'|'adtec-refresh'|'adtec-delete'|'adtec-edit'}
106
+ * @default 'default'
107
+ * @description 图标
108
+ */
109
+ modelValue: {
110
+ type: String,
111
+ default: '',
112
+ },
113
+ /**
114
+ * @type {'small'|'default'|'large'}
115
+ * @default 'default'
116
+ * @description 图标大小
117
+ */
118
+ size: {
119
+ type: String,
120
+ default: 'default',
121
+ // 注意:在`<script setup>`中,直接使用函数进行验证,JSDoc辅助IDE提示
122
+ validator: (value: string) => ['large', 'default', 'small'].includes(value),
123
+ },
124
+ /**
125
+ * @type {"default" | "success" | "warning" | "info" | "primary" | "danger"}
126
+ * @default 'default'
127
+ * @description 图标类型
128
+ */
129
+ type: {
130
+ type: String,
131
+ default: 'default',
132
+ validator: (value: string) =>
133
+ ['default', 'success', 'warning', 'info', 'primary', 'danger'].includes(value),
134
+ },
135
+ /**
136
+ * @type {"icon" | "button"}
137
+ * @default 'icon'
138
+ * @description 元素类型
139
+ */
140
+ elementType: {
141
+ type: String,
142
+ default: 'icon',
143
+ },
144
+ disabled: {
145
+ type: Boolean,
146
+ default: false,
147
+ },
148
+ })
149
+ const emit = defineEmits(['update:modelValue'])
150
+ const iconName = useVModel(props, 'modelValue', emit)
151
+ </script>
152
+ <style scoped lang="scss">
153
+ .icon-btn {
154
+ cursor: pointer;
155
+ margin: 0px 0px 0px 8px;
156
+ //margin-left: 5px;
157
+ --el-button-hover-bg-color: var(--el-color-primary-light-3);
158
+ &:hover {
159
+ color: var(--el-button-hover-bg-color);
160
+ }
161
+ &--disabled {
162
+ color: var(--el-color-disabled-text-color);
163
+ cursor: not-allowed !important;
164
+ }
165
+ &--size-large {
166
+ font-size: var(--el-font-size-large);
167
+ }
168
+ &--size-default {
169
+ font-size: var(--el-font-size-base);
170
+ }
171
+ &--size-small {
172
+ font-size: var(--el-font-size-small);
173
+ }
174
+ @each $type in (primary, success, warning, danger, info) {
175
+ &--#{$type} {
176
+ --el-button-hover-bg-color: var(--el-color-#{$type}-light-3);
177
+ --el-button-disabled-bg-color: var(--el-color-#{$type}-light-5);
178
+ color: var(--el-color-#{$type});
179
+ }
180
+ }
181
+ }
182
+ </style>