wui-components-v2 1.1.69 → 1.1.71

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 (117) hide show
  1. package/api/core/index.ts +74 -74
  2. package/api/feishu.ts +20 -20
  3. package/api/index.ts +4 -4
  4. package/api/login.ts +51 -51
  5. package/api/menu.ts +45 -45
  6. package/api/page.ts +114 -114
  7. package/api/sys.ts +12 -12
  8. package/api/tree.ts +28 -28
  9. package/components/action-popup/action-popup.vue +116 -116
  10. package/components/add-address-list/add-address-list.vue +187 -187
  11. package/components/add-address-page/add-address-page.vue +77 -77
  12. package/components/add-address-page/config.ts +297 -297
  13. package/components/audio-play/audio-play.vue +220 -220
  14. package/components/batch-upload-file/batch-upload-file.vue +75 -75
  15. package/components/card-botom-buttons/card-botom-buttons.vue +279 -279
  16. package/components/custom-date-picker/custom-date-picker.vue +106 -106
  17. package/components/custom-select-picker/custom-select-picker.vue +95 -95
  18. package/components/demo-block/demo-block.vue +63 -63
  19. package/components/demo-card/demo-card.vue +44 -44
  20. package/components/detail-popup/detail-popup.vue +99 -99
  21. package/components/evaluation-page/evaluation-page.vue +196 -196
  22. package/components/fold-card/fold-card.vue +171 -171
  23. package/components/form-control/form-control.vue +661 -661
  24. package/components/global-loading/GlobalLoading.md +366 -366
  25. package/components/global-loading/global-loading.vue +55 -55
  26. package/components/global-message/GlobalMessage.md +570 -570
  27. package/components/global-message/global-message.vue +68 -68
  28. package/components/global-toast/GlobalToast.md +261 -261
  29. package/components/global-toast/global-toast.vue +56 -56
  30. package/components/label-value/label-value.vue +144 -144
  31. package/components/label-value/open-value-more.vue +56 -56
  32. package/components/list-top-buttons/list-top-buttons.vue +19 -19
  33. package/components/loading/loading.vue +5 -5
  34. package/components/login-form/login-form.vue +126 -126
  35. package/components/login-form-box/login-form-box.vue +65 -65
  36. package/components/mulselect-picker/mulselect-picker.vue +86 -86
  37. package/components/phone-login-form/phone-login-form.vue +204 -204
  38. package/components/privacy-popup/privacy-popup.vue +191 -191
  39. package/components/product-card/product-card.vue +201 -201
  40. package/components/scan-input/scan-input.vue +406 -406
  41. package/components/search/search.vue +128 -128
  42. package/components/select-col-picker/select-col-picker.vue +168 -168
  43. package/components/tab-search/tab-search.vue +73 -73
  44. package/components/tree-select/components/TreeNode.vue +200 -200
  45. package/components/tree-select/components/index.vue +471 -471
  46. package/components/tree-select/components/tree-select.vue +56 -56
  47. package/components/tree-select/index.vue +93 -93
  48. package/components/user-choose/user-choose.vue +169 -151
  49. package/components/video-play/video-play.vue +56 -56
  50. package/components/wui-auto-update-component/wui-auto-update-component.vue +132 -132
  51. package/components/wui-default/wui-default.vue +49 -49
  52. package/components/wui-details-page/wui-details-page.vue +147 -147
  53. package/components/wui-edit-page/wui-edit-page-copy.vue +757 -757
  54. package/components/wui-edit-page/wui-edit-page.vue +793 -793
  55. package/components/wui-enume-select-control/wui-enume-select-control.vue +92 -92
  56. package/components/wui-list/wui-list.vue +235 -235
  57. package/components/wui-login/wui-login.vue +43 -43
  58. package/components/wui-login1/wui-login.vue +41 -41
  59. package/components/wui-menus/wui-menus-top.vue +137 -137
  60. package/components/wui-menus/wui-menus-top1.vue +8 -8
  61. package/components/wui-menus/wui-menus.vue +247 -247
  62. package/components/wui-menus1/components/banner-carousel.vue +320 -320
  63. package/components/wui-menus1/components/navbar.vue +43 -43
  64. package/components/wui-menus1/components/quick-panel.vue +55 -55
  65. package/components/wui-menus1/components/search-bar.vue +49 -49
  66. package/components/wui-menus1/components/section-menus.vue +208 -208
  67. package/components/wui-menus1/wui-menus-top.vue +718 -718
  68. package/components/wui-menus1/wui-menus-top1.vue +398 -398
  69. package/components/wui-menus1/wui-menus.vue +564 -564
  70. package/components/wui-notify-info/notify-handle.vue +53 -53
  71. package/components/wui-notify-info/wui-notify-info.vue +280 -280
  72. package/components/wui-scan-binding-sensor/wui-scan-binding-sensor.vue +75 -75
  73. package/components/wui-search-history-babbar/components/SearchBar.vue +70 -70
  74. package/components/wui-search-history-babbar/wui-search-history-babbar.vue +204 -204
  75. package/components/wui-select-list/wui-select-list.vue +310 -310
  76. package/components/wui-select-popup/wui-select-popup.vue +613 -612
  77. package/components/wui-system-settings/wui-system-settings.vue +144 -144
  78. package/components/wui-tabbar/wui-tabbar.vue +106 -106
  79. package/components/wui-tree-page/components/tree-item.vue +238 -238
  80. package/components/wui-tree-page/wui-tree-page.vue +297 -297
  81. package/components/wui-update-component/wui-update-component.vue +221 -221
  82. package/components/wui-user/wui-user.vue +202 -202
  83. package/composables/types/theme.ts +65 -65
  84. package/composables/types/user.ts +5 -5
  85. package/composables/useColorGenerator.ts +221 -221
  86. package/composables/useCompanyFieldFilter.ts +91 -91
  87. package/composables/useEnumes.ts +43 -43
  88. package/composables/useEventBus.ts +37 -37
  89. package/composables/useGlobalLoading.ts +47 -47
  90. package/composables/useGlobalMessage.ts +53 -53
  91. package/composables/useGlobalToast.ts +63 -63
  92. package/composables/useLocale.ts +54 -54
  93. package/composables/useManualTheme.ts +179 -179
  94. package/composables/useMenus.ts +193 -193
  95. package/composables/useSectionMenus.ts +120 -120
  96. package/composables/useTabbar.ts +50 -50
  97. package/composables/useTheme.ts +74 -74
  98. package/composables/useUser.ts +24 -24
  99. package/index.d.ts +90 -90
  100. package/index.ts +83 -83
  101. package/package.json +24 -24
  102. package/static/iconfont/iconfont.css +63 -63
  103. package/store/language.ts +151 -151
  104. package/store/manualThemeStore.ts +143 -143
  105. package/store/persist.ts +41 -41
  106. package/store/themeStore.ts +74 -74
  107. package/store/userStore.ts +22 -22
  108. package/styles/dark-mode.css +523 -523
  109. package/styles/dark-mode.min.css +1 -1
  110. package/styles/dark-mode.scss +498 -498
  111. package/type.ts +154 -154
  112. package/utils/control-tree.ts +353 -353
  113. package/utils/control-type-supportor.ts +148 -148
  114. package/utils/eventBus.ts +36 -36
  115. package/utils/idata-scan.ts +99 -99
  116. package/utils/index.ts +979 -979
  117. package/utils/rsaEncrypt.ts +10 -10
@@ -1,221 +1,221 @@
1
- import { computed, ref } from 'vue'
2
- import {
3
- generateHarmoniousColors,
4
- generateIconColors,
5
- generateRandomColorFromHex,
6
- getColorVariant,
7
- hexToRgb,
8
- rgbToHex,
9
- } from '../utils/index'
10
- import { useManualTheme } from './useManualTheme'
11
- // 定义颜色对象的类型
12
- interface ColorObject {
13
- hex: string
14
- rgb: { r: number, g: number, b: number }
15
- hsl: { h: number, s: number, l: number }
16
- }
17
-
18
- /**
19
- * Vue 3 Composition API: 颜色生成器
20
- * @param {string} baseHex - 基础十六进制颜色,如 #2164F3
21
- * @param {object} options - 配置选项
22
- * @returns {object} 颜色相关的方法和响应式数据
23
- */
24
- export function useColorGenerator(options = {}) {
25
- // 默认配置
26
- const defaultOptions = {
27
- hueRange: 60,
28
- saturationRange: 0,
29
- lightnessRange: 0,
30
- count: 8,
31
- autoRegenerate: true,
32
- }
33
-
34
- const config = { ...defaultOptions, ...options }
35
- const {
36
- currentThemeColor,
37
- } = useManualTheme()
38
- // 响应式数据
39
- const baseColor = computed(() => currentThemeColor.value.primary)
40
- const hueRange = ref(config.hueRange)
41
- const saturationRange = ref(config.saturationRange)
42
- const lightnessRange = ref(config.lightnessRange)
43
- const colors = ref<ColorObject[]>([])
44
- const currentRandomColor = ref<ColorObject | null>(null)
45
- const colorVariants = ref<Record<string, string>>({})
46
-
47
- /**
48
- * 生成基础颜色的RGB对象
49
- */
50
- const baseRgb = computed(() => hexToRgb(baseColor.value))
51
-
52
- /**
53
- * 生成单个随机颜色
54
- */
55
- const generateRandomColor = () => {
56
- currentRandomColor.value = generateRandomColorFromHex(baseColor.value, {
57
- hueRange: hueRange.value,
58
- saturationRange: saturationRange.value,
59
- lightnessRange: lightnessRange.value,
60
- })
61
-
62
- return currentRandomColor.value
63
- }
64
-
65
- /**
66
- * 生成一组协调的颜色
67
- */
68
- const generateColors = (count = config.count) => {
69
- colors.value = generateHarmoniousColors(baseColor.value, count, {
70
- hueRange: hueRange.value,
71
- saturationRange: saturationRange.value,
72
- lightnessRange: lightnessRange.value,
73
- colorType: '',
74
- })
75
-
76
- return colors.value
77
- }
78
-
79
- /**
80
- * 生成图标颜色(使用智能算法)
81
- */
82
- const generateSmartIconColors = (count = config.count) => {
83
- colors.value = generateIconColors(baseColor.value, count)
84
- return colors.value
85
- }
86
-
87
- /**
88
- * 生成颜色变体
89
- */
90
- const generateColorVariants = () => {
91
- const variants = ['lighter', 'light', 'dark', 'darker', 'muted']
92
- colorVariants.value = {}
93
-
94
- variants.forEach((variant) => {
95
- colorVariants.value[variant] = getColorVariant(baseColor.value, variant)
96
- })
97
-
98
- return colorVariants.value
99
- }
100
-
101
- /**
102
- * 更新基础颜色
103
- */
104
- // const updateBaseColor = (newHex: string) => {
105
- // baseColor.value = newHex;
106
- // if (config.autoRegenerate) {
107
- // generateRandomColor();
108
- // generateColors();
109
- // }
110
- // };
111
-
112
- /**
113
- * 更新配置
114
- */
115
- const updateConfig = (newConfig: { hueRange: number | undefined, saturationRange: number | undefined, lightnessRange: number | undefined }) => {
116
- if (newConfig.hueRange !== undefined) {
117
- hueRange.value = newConfig.hueRange
118
- }
119
- if (newConfig.saturationRange !== undefined) {
120
- saturationRange.value = newConfig.saturationRange
121
- }
122
- if (newConfig.lightnessRange !== undefined) {
123
- lightnessRange.value = newConfig.lightnessRange
124
- }
125
-
126
- if (config.autoRegenerate) {
127
- generateRandomColor()
128
- generateColors()
129
- }
130
- }
131
-
132
- /**
133
- * 获取CSS变量对象,方便在CSS中使用
134
- */
135
- const cssVariables = computed(() => {
136
- const vars: Record<string, string> = {
137
- '--primary': baseColor.value,
138
- '--primary-rgb': `${baseRgb.value.r}, ${baseRgb.value.g}, ${baseRgb.value.b}`,
139
- }
140
-
141
- // 添加颜色变体
142
- Object.entries(colorVariants.value).forEach(([key, value]) => {
143
- vars[`--primary-${key}`] = value as string
144
- })
145
-
146
- // 添加生成的颜色
147
- colors.value.forEach((color, index) => {
148
- vars[`--color-${index + 1}`] = color.hex
149
- vars[`--color-${index + 1}-rgb`] = `${color.rgb.r}, ${color.rgb.g}, ${color.rgb.b}`
150
- })
151
-
152
- return vars
153
- })
154
-
155
- /**
156
- * 应用到DOM元素的样式
157
- */
158
- const applyStyleToElement = (element: { style: { color: any, setProperty: (arg0: string, arg1: any) => void } }, colorObj: { hex: any }) => {
159
- if (element && colorObj) {
160
- element.style.color = colorObj.hex
161
- element.style.setProperty('--current-color', colorObj.hex)
162
- }
163
- }
164
-
165
- // 初始化
166
- generateRandomColor()
167
- generateColors()
168
- generateColorVariants()
169
-
170
- return {
171
- // 响应式数据
172
- baseColor,
173
- baseRgb,
174
- hueRange,
175
- saturationRange,
176
- lightnessRange,
177
- colors,
178
- currentRandomColor,
179
- colorVariants,
180
- cssVariables,
181
-
182
- // 计算属性
183
- currentHex: computed(() =>
184
- currentRandomColor.value?.hex || baseColor.value,
185
- ),
186
-
187
- // 方法
188
- generateRandomColor,
189
- generateColors,
190
- generateSmartIconColors,
191
- generateColorVariants,
192
- // updateBaseColor,
193
- updateConfig,
194
- applyStyleToElement,
195
-
196
- // 工具方法
197
- hexToRgb,
198
- rgbToHex,
199
- }
200
- }
201
-
202
- /**
203
- * 快速使用的简易版本
204
- * @param {string} baseHex - 基础颜色
205
- * @returns {object} 简化的颜色生成器
206
- */
207
- export function useQuickColorGenerator() {
208
- const generator = useColorGenerator({
209
- count: 5,
210
- autoRegenerate: false,
211
- })
212
-
213
- // 立即生成一次
214
- generator.generateSmartIconColors()
215
-
216
- return {
217
- colors: generator.colors,
218
- getRandomColor: generator.generateRandomColor,
219
- refreshColors: () => generator.generateSmartIconColors(5),
220
- }
221
- }
1
+ import { computed, ref } from 'vue'
2
+ import {
3
+ generateHarmoniousColors,
4
+ generateIconColors,
5
+ generateRandomColorFromHex,
6
+ getColorVariant,
7
+ hexToRgb,
8
+ rgbToHex,
9
+ } from '../utils/index'
10
+ import { useManualTheme } from './useManualTheme'
11
+ // 定义颜色对象的类型
12
+ interface ColorObject {
13
+ hex: string
14
+ rgb: { r: number, g: number, b: number }
15
+ hsl: { h: number, s: number, l: number }
16
+ }
17
+
18
+ /**
19
+ * Vue 3 Composition API: 颜色生成器
20
+ * @param {string} baseHex - 基础十六进制颜色,如 #2164F3
21
+ * @param {object} options - 配置选项
22
+ * @returns {object} 颜色相关的方法和响应式数据
23
+ */
24
+ export function useColorGenerator(options = {}) {
25
+ // 默认配置
26
+ const defaultOptions = {
27
+ hueRange: 60,
28
+ saturationRange: 0,
29
+ lightnessRange: 0,
30
+ count: 8,
31
+ autoRegenerate: true,
32
+ }
33
+
34
+ const config = { ...defaultOptions, ...options }
35
+ const {
36
+ currentThemeColor,
37
+ } = useManualTheme()
38
+ // 响应式数据
39
+ const baseColor = computed(() => currentThemeColor.value.primary)
40
+ const hueRange = ref(config.hueRange)
41
+ const saturationRange = ref(config.saturationRange)
42
+ const lightnessRange = ref(config.lightnessRange)
43
+ const colors = ref<ColorObject[]>([])
44
+ const currentRandomColor = ref<ColorObject | null>(null)
45
+ const colorVariants = ref<Record<string, string>>({})
46
+
47
+ /**
48
+ * 生成基础颜色的RGB对象
49
+ */
50
+ const baseRgb = computed(() => hexToRgb(baseColor.value))
51
+
52
+ /**
53
+ * 生成单个随机颜色
54
+ */
55
+ const generateRandomColor = () => {
56
+ currentRandomColor.value = generateRandomColorFromHex(baseColor.value, {
57
+ hueRange: hueRange.value,
58
+ saturationRange: saturationRange.value,
59
+ lightnessRange: lightnessRange.value,
60
+ })
61
+
62
+ return currentRandomColor.value
63
+ }
64
+
65
+ /**
66
+ * 生成一组协调的颜色
67
+ */
68
+ const generateColors = (count = config.count) => {
69
+ colors.value = generateHarmoniousColors(baseColor.value, count, {
70
+ hueRange: hueRange.value,
71
+ saturationRange: saturationRange.value,
72
+ lightnessRange: lightnessRange.value,
73
+ colorType: '',
74
+ })
75
+
76
+ return colors.value
77
+ }
78
+
79
+ /**
80
+ * 生成图标颜色(使用智能算法)
81
+ */
82
+ const generateSmartIconColors = (count = config.count) => {
83
+ colors.value = generateIconColors(baseColor.value, count)
84
+ return colors.value
85
+ }
86
+
87
+ /**
88
+ * 生成颜色变体
89
+ */
90
+ const generateColorVariants = () => {
91
+ const variants = ['lighter', 'light', 'dark', 'darker', 'muted']
92
+ colorVariants.value = {}
93
+
94
+ variants.forEach((variant) => {
95
+ colorVariants.value[variant] = getColorVariant(baseColor.value, variant)
96
+ })
97
+
98
+ return colorVariants.value
99
+ }
100
+
101
+ /**
102
+ * 更新基础颜色
103
+ */
104
+ // const updateBaseColor = (newHex: string) => {
105
+ // baseColor.value = newHex;
106
+ // if (config.autoRegenerate) {
107
+ // generateRandomColor();
108
+ // generateColors();
109
+ // }
110
+ // };
111
+
112
+ /**
113
+ * 更新配置
114
+ */
115
+ const updateConfig = (newConfig: { hueRange: number | undefined, saturationRange: number | undefined, lightnessRange: number | undefined }) => {
116
+ if (newConfig.hueRange !== undefined) {
117
+ hueRange.value = newConfig.hueRange
118
+ }
119
+ if (newConfig.saturationRange !== undefined) {
120
+ saturationRange.value = newConfig.saturationRange
121
+ }
122
+ if (newConfig.lightnessRange !== undefined) {
123
+ lightnessRange.value = newConfig.lightnessRange
124
+ }
125
+
126
+ if (config.autoRegenerate) {
127
+ generateRandomColor()
128
+ generateColors()
129
+ }
130
+ }
131
+
132
+ /**
133
+ * 获取CSS变量对象,方便在CSS中使用
134
+ */
135
+ const cssVariables = computed(() => {
136
+ const vars: Record<string, string> = {
137
+ '--primary': baseColor.value,
138
+ '--primary-rgb': `${baseRgb.value.r}, ${baseRgb.value.g}, ${baseRgb.value.b}`,
139
+ }
140
+
141
+ // 添加颜色变体
142
+ Object.entries(colorVariants.value).forEach(([key, value]) => {
143
+ vars[`--primary-${key}`] = value as string
144
+ })
145
+
146
+ // 添加生成的颜色
147
+ colors.value.forEach((color, index) => {
148
+ vars[`--color-${index + 1}`] = color.hex
149
+ vars[`--color-${index + 1}-rgb`] = `${color.rgb.r}, ${color.rgb.g}, ${color.rgb.b}`
150
+ })
151
+
152
+ return vars
153
+ })
154
+
155
+ /**
156
+ * 应用到DOM元素的样式
157
+ */
158
+ const applyStyleToElement = (element: { style: { color: any, setProperty: (arg0: string, arg1: any) => void } }, colorObj: { hex: any }) => {
159
+ if (element && colorObj) {
160
+ element.style.color = colorObj.hex
161
+ element.style.setProperty('--current-color', colorObj.hex)
162
+ }
163
+ }
164
+
165
+ // 初始化
166
+ generateRandomColor()
167
+ generateColors()
168
+ generateColorVariants()
169
+
170
+ return {
171
+ // 响应式数据
172
+ baseColor,
173
+ baseRgb,
174
+ hueRange,
175
+ saturationRange,
176
+ lightnessRange,
177
+ colors,
178
+ currentRandomColor,
179
+ colorVariants,
180
+ cssVariables,
181
+
182
+ // 计算属性
183
+ currentHex: computed(() =>
184
+ currentRandomColor.value?.hex || baseColor.value,
185
+ ),
186
+
187
+ // 方法
188
+ generateRandomColor,
189
+ generateColors,
190
+ generateSmartIconColors,
191
+ generateColorVariants,
192
+ // updateBaseColor,
193
+ updateConfig,
194
+ applyStyleToElement,
195
+
196
+ // 工具方法
197
+ hexToRgb,
198
+ rgbToHex,
199
+ }
200
+ }
201
+
202
+ /**
203
+ * 快速使用的简易版本
204
+ * @param {string} baseHex - 基础颜色
205
+ * @returns {object} 简化的颜色生成器
206
+ */
207
+ export function useQuickColorGenerator() {
208
+ const generator = useColorGenerator({
209
+ count: 5,
210
+ autoRegenerate: false,
211
+ })
212
+
213
+ // 立即生成一次
214
+ generator.generateSmartIconColors()
215
+
216
+ return {
217
+ colors: generator.colors,
218
+ getRandomColor: generator.generateRandomColor,
219
+ refreshColors: () => generator.generateSmartIconColors(5),
220
+ }
221
+ }
@@ -1,91 +1,91 @@
1
- import { computed, ref, watch } from 'vue'
2
- import type { Ref } from 'vue'
3
- import type { Groups } from '../type'
4
-
5
- const COMPANY_FIELD_SOURCE_ID = '' // 公司字段 sourceId
6
-
7
- export function useCompanyFieldFilter(
8
- fieldGroup: () => Groups | undefined,
9
- model: Ref<any>,
10
- enabled: boolean = true,
11
- companyFieldSourceId: string = COMPANY_FIELD_SOURCE_ID,
12
- ) {
13
- const deliveryCompanySourceId = ref<string>('')
14
- const selectedCompany = ref<string>('')
15
-
16
- if (enabled) {
17
- watch(
18
- () => fieldGroup()?.fields,
19
- (newFields) => {
20
- const companyField: any = newFields?.find((item: any) => item.sourceId === companyFieldSourceId) || {}
21
- deliveryCompanySourceId.value = companyField.sourceId || ''
22
- },
23
- { deep: true, immediate: true },
24
- )
25
-
26
- // 直接监听 model 中对应字段的值变化
27
- // 使用计算属性做中间层,确保 deliveryCompanySourceId 变化时重新建立依赖
28
- const companyFieldValue = computed(() => {
29
- const sourceId = deliveryCompanySourceId.value
30
- if (!sourceId) return undefined
31
- return model.value[sourceId]
32
- })
33
-
34
- watch(
35
- companyFieldValue,
36
- (newValue) => {
37
- selectedCompany.value = newValue ? String(newValue).substring(0, 2) : ''
38
- },
39
- { immediate: true },
40
- )
41
- }
42
-
43
- const formatFieldsItem=(company:string,item:any)=>{
44
- const transDefaultValue = item.usableRuleCriterias?.[0]?.transDefaultValue||''
45
- const isHidden=item?.unusableMode==='hidden'
46
- const values = transDefaultValue.split(',').map(v => v.trim())
47
- if(!company){
48
- return {
49
- ...item,
50
- hidden:isHidden,
51
- }
52
- }else{
53
-
54
- return {
55
- ...item,
56
- hidden: values.some(v => v.includes(company))?false:item.hidden,
57
- }
58
-
59
- }
60
- }
61
- const filteredFields = computed(() => {
62
- const company = selectedCompany.value
63
- const allFields = fieldGroup()?.fields
64
- if (!allFields)
65
- return []
66
- const formattedFields = allFields.filter((item: any) => {
67
- // 如果没有选中公司,所有字段都显示
68
- if (!company) {
69
- return true
70
- }
71
- // 检查 usableRuleCriterias 是否存在且有值
72
- if (!item.usableRuleCriterias || item.usableRuleCriterias.length === 0) {
73
- return true
74
- }
75
- // 获取 transDefaultValue 并检查是否包含选中的公司
76
- const transDefaultValue = item.usableRuleCriterias?.[0]?.transDefaultValue
77
- if (typeof transDefaultValue === 'string') {
78
- const values = transDefaultValue.split(',').map(v => v.trim())
79
- // console.log('transDefaultValue', company, 'values', values,values.includes(company))
80
- return values.some(v => v.includes(company) )
81
- }
82
- return true
83
- })
84
- return formattedFields.map((item: any) => formatFieldsItem(company, item))
85
- })
86
- watch(filteredFields, (val) => {
87
- // console.log('filteredFields变化了', val, 'selectedCompany:', selectedCompany.value)
88
- }, { immediate: true })
89
-
90
- return { filteredFields, selectedCompany }
91
- }
1
+ import { computed, ref, watch } from 'vue'
2
+ import type { Ref } from 'vue'
3
+ import type { Groups } from '../type'
4
+
5
+ const COMPANY_FIELD_SOURCE_ID = '' // 公司字段 sourceId
6
+
7
+ export function useCompanyFieldFilter(
8
+ fieldGroup: () => Groups | undefined,
9
+ model: Ref<any>,
10
+ enabled: boolean = true,
11
+ companyFieldSourceId: string = COMPANY_FIELD_SOURCE_ID,
12
+ ) {
13
+ const deliveryCompanySourceId = ref<string>('')
14
+ const selectedCompany = ref<string>('')
15
+
16
+ if (enabled) {
17
+ watch(
18
+ () => fieldGroup()?.fields,
19
+ (newFields) => {
20
+ const companyField: any = newFields?.find((item: any) => item.sourceId === companyFieldSourceId) || {}
21
+ deliveryCompanySourceId.value = companyField.sourceId || ''
22
+ },
23
+ { deep: true, immediate: true },
24
+ )
25
+
26
+ // 直接监听 model 中对应字段的值变化
27
+ // 使用计算属性做中间层,确保 deliveryCompanySourceId 变化时重新建立依赖
28
+ const companyFieldValue = computed(() => {
29
+ const sourceId = deliveryCompanySourceId.value
30
+ if (!sourceId) return undefined
31
+ return model.value[sourceId]
32
+ })
33
+
34
+ watch(
35
+ companyFieldValue,
36
+ (newValue) => {
37
+ selectedCompany.value = newValue ? String(newValue).substring(0, 2) : ''
38
+ },
39
+ { immediate: true },
40
+ )
41
+ }
42
+
43
+ const formatFieldsItem=(company:string,item:any)=>{
44
+ const transDefaultValue = item.usableRuleCriterias?.[0]?.transDefaultValue||''
45
+ const isHidden=item?.unusableMode==='hidden'
46
+ const values = transDefaultValue.split(',').map(v => v.trim())
47
+ if(!company){
48
+ return {
49
+ ...item,
50
+ hidden:isHidden,
51
+ }
52
+ }else{
53
+
54
+ return {
55
+ ...item,
56
+ hidden: values.some(v => v.includes(company))?false:item.hidden,
57
+ }
58
+
59
+ }
60
+ }
61
+ const filteredFields = computed(() => {
62
+ const company = selectedCompany.value
63
+ const allFields = fieldGroup()?.fields
64
+ if (!allFields)
65
+ return []
66
+ const formattedFields = allFields.filter((item: any) => {
67
+ // 如果没有选中公司,所有字段都显示
68
+ if (!company) {
69
+ return true
70
+ }
71
+ // 检查 usableRuleCriterias 是否存在且有值
72
+ if (!item.usableRuleCriterias || item.usableRuleCriterias.length === 0) {
73
+ return true
74
+ }
75
+ // 获取 transDefaultValue 并检查是否包含选中的公司
76
+ const transDefaultValue = item.usableRuleCriterias?.[0]?.transDefaultValue
77
+ if (typeof transDefaultValue === 'string') {
78
+ const values = transDefaultValue.split(',').map(v => v.trim())
79
+ // console.log('transDefaultValue', company, 'values', values,values.includes(company))
80
+ return values.some(v => v.includes(company) )
81
+ }
82
+ return true
83
+ })
84
+ return formattedFields.map((item: any) => formatFieldsItem(company, item))
85
+ })
86
+ watch(filteredFields, (val) => {
87
+ // console.log('filteredFields变化了', val, 'selectedCompany:', selectedCompany.value)
88
+ }, { immediate: true })
89
+
90
+ return { filteredFields, selectedCompany }
91
+ }