wui-components-v2 1.1.68 → 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 (47) 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/action-popup/action-popup.vue +46 -17
  6. package/components/add-address-page/add-address-page.vue +77 -77
  7. package/components/custom-date-picker/custom-date-picker.vue +106 -106
  8. package/components/custom-select-picker/custom-select-picker.vue +95 -95
  9. package/components/demo-block/demo-block.vue +63 -63
  10. package/components/detail-popup/detail-popup.vue +99 -99
  11. package/components/evaluation-page/evaluation-page.vue +196 -192
  12. package/components/fold-card/fold-card.vue +171 -171
  13. package/components/form-control/form-control.vue +661 -661
  14. package/components/global-message/global-message.vue +68 -68
  15. package/components/label-value/label-value.vue +144 -144
  16. package/components/list-top-buttons/list-top-buttons.vue +19 -19
  17. package/components/login-form/login-form.vue +126 -126
  18. package/components/mulselect-picker/mulselect-picker.vue +86 -86
  19. package/components/product-card/product-card.vue +201 -201
  20. package/components/search/search.vue +128 -128
  21. package/components/user-choose/user-choose.vue +1 -1
  22. package/components/wui-enume-select-control/wui-enume-select-control.vue +92 -92
  23. package/components/wui-list/wui-list.vue +235 -235
  24. package/components/wui-menus/wui-menus.vue +247 -247
  25. package/components/wui-menus1/components/navbar.vue +43 -43
  26. package/components/wui-menus1/wui-menus.vue +564 -564
  27. package/components/wui-notify-info/wui-notify-info.vue +280 -280
  28. package/components/wui-search-history-babbar/wui-search-history-babbar.vue +204 -204
  29. package/components/wui-select-list/wui-select-list.vue +310 -310
  30. package/components/wui-select-popup/wui-select-popup.vue +612 -612
  31. package/components/wui-system-settings/wui-system-settings.vue +144 -144
  32. package/components/wui-tabbar/wui-tabbar.vue +106 -106
  33. package/components/wui-tree-page/components/tree-item.vue +238 -238
  34. package/components/wui-user/wui-user.vue +202 -197
  35. package/composables/useCompanyFieldFilter.ts +91 -91
  36. package/composables/useEnumes.ts +2 -2
  37. package/composables/useMenus.ts +193 -193
  38. package/index.ts +83 -83
  39. package/package.json +1 -1
  40. package/static/iconfont/iconfont.css +63 -63
  41. package/store/language.ts +151 -151
  42. package/styles/dark-mode.css +523 -485
  43. package/styles/dark-mode.min.css +1 -1
  44. package/styles/dark-mode.scss +28 -0
  45. package/type.ts +2 -2
  46. package/utils/control-tree.ts +2 -2
  47. 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>