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.
- package/api/core/index.ts +74 -74
- package/api/feishu.ts +20 -20
- package/api/index.ts +4 -4
- package/api/login.ts +51 -51
- package/api/menu.ts +45 -45
- package/api/page.ts +114 -114
- package/api/sys.ts +12 -12
- package/api/tree.ts +28 -28
- package/components/action-popup/action-popup.vue +116 -116
- package/components/add-address-list/add-address-list.vue +187 -187
- package/components/add-address-page/add-address-page.vue +77 -77
- package/components/add-address-page/config.ts +297 -297
- package/components/audio-play/audio-play.vue +220 -220
- package/components/batch-upload-file/batch-upload-file.vue +75 -75
- package/components/card-botom-buttons/card-botom-buttons.vue +279 -279
- package/components/custom-date-picker/custom-date-picker.vue +106 -106
- package/components/custom-select-picker/custom-select-picker.vue +95 -95
- package/components/demo-block/demo-block.vue +63 -63
- package/components/demo-card/demo-card.vue +44 -44
- package/components/detail-popup/detail-popup.vue +99 -99
- package/components/evaluation-page/evaluation-page.vue +196 -196
- package/components/fold-card/fold-card.vue +171 -171
- package/components/form-control/form-control.vue +661 -661
- package/components/global-loading/GlobalLoading.md +366 -366
- package/components/global-loading/global-loading.vue +55 -55
- package/components/global-message/GlobalMessage.md +570 -570
- package/components/global-message/global-message.vue +68 -68
- package/components/global-toast/GlobalToast.md +261 -261
- package/components/global-toast/global-toast.vue +56 -56
- package/components/label-value/label-value.vue +144 -144
- package/components/label-value/open-value-more.vue +56 -56
- package/components/list-top-buttons/list-top-buttons.vue +19 -19
- package/components/loading/loading.vue +5 -5
- package/components/login-form/login-form.vue +126 -126
- package/components/login-form-box/login-form-box.vue +65 -65
- package/components/mulselect-picker/mulselect-picker.vue +86 -86
- package/components/phone-login-form/phone-login-form.vue +204 -204
- package/components/privacy-popup/privacy-popup.vue +191 -191
- package/components/product-card/product-card.vue +201 -201
- package/components/scan-input/scan-input.vue +406 -406
- package/components/search/search.vue +128 -128
- package/components/select-col-picker/select-col-picker.vue +168 -168
- package/components/tab-search/tab-search.vue +73 -73
- package/components/tree-select/components/TreeNode.vue +200 -200
- package/components/tree-select/components/index.vue +471 -471
- package/components/tree-select/components/tree-select.vue +56 -56
- package/components/tree-select/index.vue +93 -93
- package/components/user-choose/user-choose.vue +169 -151
- package/components/video-play/video-play.vue +56 -56
- package/components/wui-auto-update-component/wui-auto-update-component.vue +132 -132
- package/components/wui-default/wui-default.vue +49 -49
- package/components/wui-details-page/wui-details-page.vue +147 -147
- package/components/wui-edit-page/wui-edit-page-copy.vue +757 -757
- package/components/wui-edit-page/wui-edit-page.vue +793 -793
- package/components/wui-enume-select-control/wui-enume-select-control.vue +92 -92
- package/components/wui-list/wui-list.vue +235 -235
- package/components/wui-login/wui-login.vue +43 -43
- package/components/wui-login1/wui-login.vue +41 -41
- package/components/wui-menus/wui-menus-top.vue +137 -137
- package/components/wui-menus/wui-menus-top1.vue +8 -8
- package/components/wui-menus/wui-menus.vue +247 -247
- package/components/wui-menus1/components/banner-carousel.vue +320 -320
- package/components/wui-menus1/components/navbar.vue +43 -43
- package/components/wui-menus1/components/quick-panel.vue +55 -55
- package/components/wui-menus1/components/search-bar.vue +49 -49
- package/components/wui-menus1/components/section-menus.vue +208 -208
- package/components/wui-menus1/wui-menus-top.vue +718 -718
- package/components/wui-menus1/wui-menus-top1.vue +398 -398
- package/components/wui-menus1/wui-menus.vue +564 -564
- package/components/wui-notify-info/notify-handle.vue +53 -53
- package/components/wui-notify-info/wui-notify-info.vue +280 -280
- package/components/wui-scan-binding-sensor/wui-scan-binding-sensor.vue +75 -75
- package/components/wui-search-history-babbar/components/SearchBar.vue +70 -70
- package/components/wui-search-history-babbar/wui-search-history-babbar.vue +204 -204
- package/components/wui-select-list/wui-select-list.vue +310 -310
- package/components/wui-select-popup/wui-select-popup.vue +613 -612
- package/components/wui-system-settings/wui-system-settings.vue +144 -144
- package/components/wui-tabbar/wui-tabbar.vue +106 -106
- package/components/wui-tree-page/components/tree-item.vue +238 -238
- package/components/wui-tree-page/wui-tree-page.vue +297 -297
- package/components/wui-update-component/wui-update-component.vue +221 -221
- package/components/wui-user/wui-user.vue +202 -202
- package/composables/types/theme.ts +65 -65
- package/composables/types/user.ts +5 -5
- package/composables/useColorGenerator.ts +221 -221
- package/composables/useCompanyFieldFilter.ts +91 -91
- package/composables/useEnumes.ts +43 -43
- package/composables/useEventBus.ts +37 -37
- package/composables/useGlobalLoading.ts +47 -47
- package/composables/useGlobalMessage.ts +53 -53
- package/composables/useGlobalToast.ts +63 -63
- package/composables/useLocale.ts +54 -54
- package/composables/useManualTheme.ts +179 -179
- package/composables/useMenus.ts +193 -193
- package/composables/useSectionMenus.ts +120 -120
- package/composables/useTabbar.ts +50 -50
- package/composables/useTheme.ts +74 -74
- package/composables/useUser.ts +24 -24
- package/index.d.ts +90 -90
- package/index.ts +83 -83
- package/package.json +24 -24
- package/static/iconfont/iconfont.css +63 -63
- package/store/language.ts +151 -151
- package/store/manualThemeStore.ts +143 -143
- package/store/persist.ts +41 -41
- package/store/themeStore.ts +74 -74
- package/store/userStore.ts +22 -22
- package/styles/dark-mode.css +523 -523
- package/styles/dark-mode.min.css +1 -1
- package/styles/dark-mode.scss +498 -498
- package/type.ts +154 -154
- package/utils/control-tree.ts +353 -353
- package/utils/control-type-supportor.ts +148 -148
- package/utils/eventBus.ts +36 -36
- package/utils/idata-scan.ts +99 -99
- package/utils/index.ts +979 -979
- 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
|
+
}
|