wui-components-v2 1.1.69 → 1.1.70

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 (45) hide show
  1. package/api/core/index.ts +74 -74
  2. package/api/menu.ts +45 -45
  3. package/api/page.ts +114 -114
  4. package/api/sys.ts +12 -12
  5. package/components/add-address-page/add-address-page.vue +77 -77
  6. package/components/custom-date-picker/custom-date-picker.vue +106 -106
  7. package/components/custom-select-picker/custom-select-picker.vue +95 -95
  8. package/components/demo-block/demo-block.vue +63 -63
  9. package/components/detail-popup/detail-popup.vue +99 -99
  10. package/components/evaluation-page/evaluation-page.vue +196 -196
  11. package/components/fold-card/fold-card.vue +171 -171
  12. package/components/form-control/form-control.vue +661 -661
  13. package/components/global-message/global-message.vue +68 -68
  14. package/components/label-value/label-value.vue +144 -144
  15. package/components/list-top-buttons/list-top-buttons.vue +19 -19
  16. package/components/login-form/login-form.vue +126 -126
  17. package/components/mulselect-picker/mulselect-picker.vue +86 -86
  18. package/components/product-card/product-card.vue +201 -201
  19. package/components/search/search.vue +128 -128
  20. package/components/user-choose/user-choose.vue +1 -1
  21. package/components/wui-enume-select-control/wui-enume-select-control.vue +92 -92
  22. package/components/wui-list/wui-list.vue +235 -235
  23. package/components/wui-menus/wui-menus.vue +247 -247
  24. package/components/wui-menus1/components/navbar.vue +43 -43
  25. package/components/wui-menus1/wui-menus.vue +564 -564
  26. package/components/wui-notify-info/wui-notify-info.vue +280 -280
  27. package/components/wui-search-history-babbar/wui-search-history-babbar.vue +204 -204
  28. package/components/wui-select-list/wui-select-list.vue +310 -310
  29. package/components/wui-select-popup/wui-select-popup.vue +612 -612
  30. package/components/wui-system-settings/wui-system-settings.vue +144 -144
  31. package/components/wui-tabbar/wui-tabbar.vue +106 -106
  32. package/components/wui-tree-page/components/tree-item.vue +238 -238
  33. package/components/wui-user/wui-user.vue +202 -202
  34. package/composables/useCompanyFieldFilter.ts +91 -91
  35. package/composables/useEnumes.ts +2 -2
  36. package/composables/useMenus.ts +193 -193
  37. package/index.ts +83 -83
  38. package/package.json +1 -1
  39. package/static/iconfont/iconfont.css +63 -63
  40. package/store/language.ts +151 -151
  41. package/styles/dark-mode.css +523 -523
  42. package/styles/dark-mode.min.css +1 -1
  43. package/type.ts +2 -2
  44. package/utils/control-tree.ts +2 -2
  45. package/utils/control-type-supportor.ts +148 -148
@@ -1,238 +1,238 @@
1
- <script setup lang="ts">
2
- import { computed, defineEmits, defineOptions, defineProps } from 'vue'
3
- import { desaturateColor } from '../../../utils'
4
- import { useManualTheme } from '../../../composables/useManualTheme'
5
-
6
- defineOptions({
7
- name: 'TreeItem',
8
- })
9
- const props = defineProps({
10
- node: {
11
- type: Object,
12
- required: true,
13
- },
14
- level: {
15
- type: Number,
16
- default: 0,
17
- },
18
- searchKeyword: {
19
- type: String,
20
- default: '',
21
- },
22
- leafRatmplId: {
23
- type: String,
24
- default: '',
25
- },
26
- })
27
- const emit = defineEmits(['addBranch', 'addLeaf', 'remove', 'update', 'toggleExpand'])
28
- const { currentThemeColor } = useManualTheme()
29
- interface TreeNode {
30
- id: string
31
- label: string
32
- expanded: boolean
33
- type: 'branch' | 'leaf' | 'root'
34
- loading: boolean
35
- children?: TreeNode[]
36
- [key: string]: any // 允许其他自定义属性
37
- }
38
- // const router = useRouter()
39
-
40
- const hasChildren = computed(() => {
41
- return props.node.children && props.node.children.length > 0
42
- })
43
-
44
- // 计算是否需要高亮
45
- const isHighlight = computed(() => {
46
- if (!props.searchKeyword) return false
47
- return props.node.label.toLowerCase().includes(props.searchKeyword.toLowerCase())
48
- })
49
-
50
- // 展开/收起
51
- function toggleExpand(node?: TreeNode) {
52
- emit('toggleExpand', node || props.node)
53
- }
54
-
55
- // 添加分支节点事件
56
- function onAddBranch() {
57
- emit('addBranch', props.node)
58
- }
59
- // 添加叶子节点事件
60
- function onAddLeaf() {
61
- emit('addLeaf', props.node)
62
- }
63
-
64
- // 删除节点事件
65
- function onRemove() {
66
- emit('remove', props.node)
67
- }
68
-
69
- // 编辑节点事件
70
- function handleEdit() {
71
- emit('update', props.node)
72
- }
73
-
74
- // 事件透传(递归组件必须将子组件的事件向上传递)
75
- function emitAddBranch(e: TreeNode) {
76
- emit('addBranch', e)
77
- }
78
- function emitAddLeaf(e: TreeNode) {
79
- emit('addLeaf', e)
80
- }
81
- function emitRemove(e: TreeNode) {
82
- emit('remove', e)
83
- }
84
- function emitUpdate(e: TreeNode) {
85
- emit('update', e)
86
- }
87
- </script>
88
-
89
- <template>
90
- <view class="tree-node">
91
- <!-- 节点内容行 -->
92
- <view class="node-content bg-white dark:bg-[#1B1B1E]" :style="{ paddingLeft: `${level * 30}rpx` }">
93
- <!-- 展开/收起图标 -->
94
- <view
95
- class="icon-area"
96
- @click.stop="
97
- () => {
98
- toggleExpand()
99
- }
100
- "
101
- >
102
- <text v-if="node.type !== 'leaf'" class="arrow" :class="{ rotated: node.expanded }">
103
- <wd-loading v-if="node.loading" size="16" />
104
- <wd-icon v-else name="arrow-right" size="18px" />
105
- </text>
106
- <text v-else class="dot dark:text-white">•</text>
107
- </view>
108
-
109
- <!-- 节点名称 (支持搜索高亮) -->
110
- <view
111
- class="label-area text-gray-800 dark:text-white"
112
- @click.stop="
113
- () => {
114
- toggleExpand()
115
- }
116
- "
117
- >
118
- <text :class="{ highlight: isHighlight }">
119
- {{ node.label }}
120
- </text>
121
- </view>
122
-
123
- <!-- 操作按钮区域 -->
124
- <view class="action-area">
125
- <view
126
- v-if="(node.type === 'branch' || node.type === 'root') && leafRatmplId"
127
- class="btn"
128
- :style="{ backgroundColor: desaturateColor(currentThemeColor.primary) }"
129
- @click.stop="onAddLeaf"
130
- >
131
- <text :style="{ color: currentThemeColor.primary }">+</text>
132
- </view>
133
- <view
134
- v-if="node.type === 'branch' || node.type === 'root'"
135
- class="btn"
136
- :style="{ backgroundColor: desaturateColor(currentThemeColor.primary) }"
137
- @click.stop="onAddBranch"
138
- >
139
- <text class="i-carbon:decision-tree text-3" :style="{ color: currentThemeColor.primary }" />
140
- </view>
141
- <wd-icon
142
- class="btn"
143
- name="edit"
144
- size="28rpx"
145
- :style="{ backgroundColor: desaturateColor(currentThemeColor.primary), color: currentThemeColor.primary }"
146
- @click.stop="handleEdit"
147
- />
148
- <text class="btn del" @click.stop="onRemove">-</text>
149
- </view>
150
- </view>
151
-
152
- <!-- 递归渲染子节点 -->
153
- <view v-if="hasChildren && node.expanded" class="children-container">
154
- <tree-item
155
- v-for="child in node.children"
156
- :key="child.id"
157
- :node="child"
158
- :level="level + 1"
159
- :leaf-ratmpl-id="props.leafRatmplId"
160
- :search-keyword="searchKeyword"
161
- @add-leaf="emitAddLeaf"
162
- @add-branch="emitAddBranch"
163
- @remove="emitRemove"
164
- @update="emitUpdate"
165
- @toggle-expand="toggleExpand"
166
- />
167
- </view>
168
- </view>
169
- </template>
170
-
171
- <style scoped>
172
- .tree-node {
173
- width: 100%;
174
- }
175
-
176
- .node-content {
177
- display: flex;
178
- align-items: center;
179
- height: 88rpx;
180
- border-bottom: 1rpx solid #f0f0f0;
181
- padding-right: 20rpx;
182
- }
183
-
184
- .icon-area {
185
- width: 50rpx;
186
- height: 100%;
187
- display: flex;
188
- align-items: center;
189
- justify-content: center;
190
- color: #999;
191
- }
192
-
193
- .arrow {
194
- font-size: 24rpx;
195
- transition: transform 0.2s;
196
- }
197
-
198
- .arrow.rotated {
199
- transform: rotate(90deg);
200
- }
201
-
202
- .dot {
203
- font-size: 60rpx;
204
- color: #ddd;
205
- }
206
-
207
- .label-area {
208
- flex: 1;
209
- font-size: 30rpx;
210
- overflow: hidden;
211
- text-overflow: ellipsis;
212
- white-space: nowrap;
213
- }
214
-
215
- .highlight {
216
- color: #007aff;
217
- font-weight: bold;
218
- }
219
-
220
- .action-area {
221
- display: flex;
222
- gap: 20rpx;
223
- }
224
-
225
- .btn {
226
- width: 44rpx;
227
- height: 44rpx;
228
- line-height: 40rpx;
229
- text-align: center;
230
- border-radius: 8rpx;
231
- font-size: 32rpx;
232
- }
233
-
234
- .del {
235
- background-color: #ffebee;
236
- color: #f44336;
237
- }
238
- </style>
1
+ <script setup lang="ts">
2
+ import { computed, defineEmits, defineOptions, defineProps } from 'vue'
3
+ import { desaturateColor } from '../../../utils'
4
+ import { useManualTheme } from '../../../composables/useManualTheme'
5
+
6
+ defineOptions({
7
+ name: 'TreeItem',
8
+ })
9
+ const props = defineProps({
10
+ node: {
11
+ type: Object,
12
+ required: true,
13
+ },
14
+ level: {
15
+ type: Number,
16
+ default: 0,
17
+ },
18
+ searchKeyword: {
19
+ type: String,
20
+ default: '',
21
+ },
22
+ leafRatmplId: {
23
+ type: String,
24
+ default: '',
25
+ },
26
+ })
27
+ const emit = defineEmits(['addBranch', 'addLeaf', 'remove', 'update', 'toggleExpand'])
28
+ const { currentThemeColor } = useManualTheme()
29
+ interface TreeNode {
30
+ id: string
31
+ label: string
32
+ expanded: boolean
33
+ type: 'branch' | 'leaf' | 'root'
34
+ loading: boolean
35
+ children?: TreeNode[]
36
+ [key: string]: any // 允许其他自定义属性
37
+ }
38
+ // const router = useRouter()
39
+
40
+ const hasChildren = computed(() => {
41
+ return props.node.children && props.node.children.length > 0
42
+ })
43
+
44
+ // 计算是否需要高亮
45
+ const isHighlight = computed(() => {
46
+ if (!props.searchKeyword) return false
47
+ return props.node.label.toLowerCase().includes(props.searchKeyword.toLowerCase())
48
+ })
49
+
50
+ // 展开/收起
51
+ function toggleExpand(node?: TreeNode) {
52
+ emit('toggleExpand', node || props.node)
53
+ }
54
+
55
+ // 添加分支节点事件
56
+ function onAddBranch() {
57
+ emit('addBranch', props.node)
58
+ }
59
+ // 添加叶子节点事件
60
+ function onAddLeaf() {
61
+ emit('addLeaf', props.node)
62
+ }
63
+
64
+ // 删除节点事件
65
+ function onRemove() {
66
+ emit('remove', props.node)
67
+ }
68
+
69
+ // 编辑节点事件
70
+ function handleEdit() {
71
+ emit('update', props.node)
72
+ }
73
+
74
+ // 事件透传(递归组件必须将子组件的事件向上传递)
75
+ function emitAddBranch(e: TreeNode) {
76
+ emit('addBranch', e)
77
+ }
78
+ function emitAddLeaf(e: TreeNode) {
79
+ emit('addLeaf', e)
80
+ }
81
+ function emitRemove(e: TreeNode) {
82
+ emit('remove', e)
83
+ }
84
+ function emitUpdate(e: TreeNode) {
85
+ emit('update', e)
86
+ }
87
+ </script>
88
+
89
+ <template>
90
+ <view class="tree-node">
91
+ <!-- 节点内容行 -->
92
+ <view class="node-content bg-white dark:bg-[#1B1B1E]" :style="{ paddingLeft: `${level * 30}rpx` }">
93
+ <!-- 展开/收起图标 -->
94
+ <view
95
+ class="icon-area"
96
+ @click.stop="
97
+ () => {
98
+ toggleExpand()
99
+ }
100
+ "
101
+ >
102
+ <text v-if="node.type !== 'leaf'" class="arrow" :class="{ rotated: node.expanded }">
103
+ <wd-loading v-if="node.loading" size="16" />
104
+ <wd-icon v-else name="arrow-right" size="18px" />
105
+ </text>
106
+ <text v-else class="dot dark:text-white">•</text>
107
+ </view>
108
+
109
+ <!-- 节点名称 (支持搜索高亮) -->
110
+ <view
111
+ class="label-area text-gray-800 dark:text-white"
112
+ @click.stop="
113
+ () => {
114
+ toggleExpand()
115
+ }
116
+ "
117
+ >
118
+ <text :class="{ highlight: isHighlight }">
119
+ {{ node.label }}
120
+ </text>
121
+ </view>
122
+
123
+ <!-- 操作按钮区域 -->
124
+ <view class="action-area">
125
+ <view
126
+ v-if="(node.type === 'branch' || node.type === 'root') && leafRatmplId"
127
+ class="btn"
128
+ :style="{ backgroundColor: desaturateColor(currentThemeColor.primary) }"
129
+ @click.stop="onAddLeaf"
130
+ >
131
+ <text :style="{ color: currentThemeColor.primary }">+</text>
132
+ </view>
133
+ <view
134
+ v-if="node.type === 'branch' || node.type === 'root'"
135
+ class="btn"
136
+ :style="{ backgroundColor: desaturateColor(currentThemeColor.primary) }"
137
+ @click.stop="onAddBranch"
138
+ >
139
+ <text class="i-carbon:decision-tree text-3" :style="{ color: currentThemeColor.primary }" />
140
+ </view>
141
+ <wd-icon
142
+ class="btn"
143
+ name="edit"
144
+ size="28rpx"
145
+ :style="{ backgroundColor: desaturateColor(currentThemeColor.primary), color: currentThemeColor.primary }"
146
+ @click.stop="handleEdit"
147
+ />
148
+ <text class="btn del" @click.stop="onRemove">-</text>
149
+ </view>
150
+ </view>
151
+
152
+ <!-- 递归渲染子节点 -->
153
+ <view v-if="hasChildren && node.expanded" class="children-container">
154
+ <tree-item
155
+ v-for="child in node.children"
156
+ :key="child.id"
157
+ :node="child"
158
+ :level="level + 1"
159
+ :leaf-ratmpl-id="props.leafRatmplId"
160
+ :search-keyword="searchKeyword"
161
+ @add-leaf="emitAddLeaf"
162
+ @add-branch="emitAddBranch"
163
+ @remove="emitRemove"
164
+ @update="emitUpdate"
165
+ @toggle-expand="toggleExpand"
166
+ />
167
+ </view>
168
+ </view>
169
+ </template>
170
+
171
+ <style scoped>
172
+ .tree-node {
173
+ width: 100%;
174
+ }
175
+
176
+ .node-content {
177
+ display: flex;
178
+ align-items: center;
179
+ height: 88rpx;
180
+ border-bottom: 1rpx solid #f0f0f0;
181
+ padding-right: 20rpx;
182
+ }
183
+
184
+ .icon-area {
185
+ width: 50rpx;
186
+ height: 100%;
187
+ display: flex;
188
+ align-items: center;
189
+ justify-content: center;
190
+ color: #999;
191
+ }
192
+
193
+ .arrow {
194
+ font-size: 24rpx;
195
+ transition: transform 0.2s;
196
+ }
197
+
198
+ .arrow.rotated {
199
+ transform: rotate(90deg);
200
+ }
201
+
202
+ .dot {
203
+ font-size: 60rpx;
204
+ color: #ddd;
205
+ }
206
+
207
+ .label-area {
208
+ flex: 1;
209
+ font-size: 30rpx;
210
+ overflow: hidden;
211
+ text-overflow: ellipsis;
212
+ white-space: nowrap;
213
+ }
214
+
215
+ .highlight {
216
+ color: #007aff;
217
+ font-weight: bold;
218
+ }
219
+
220
+ .action-area {
221
+ display: flex;
222
+ gap: 20rpx;
223
+ }
224
+
225
+ .btn {
226
+ width: 44rpx;
227
+ height: 44rpx;
228
+ line-height: 40rpx;
229
+ text-align: center;
230
+ border-radius: 8rpx;
231
+ font-size: 32rpx;
232
+ }
233
+
234
+ .del {
235
+ background-color: #ffebee;
236
+ color: #f44336;
237
+ }
238
+ </style>