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,202 +1,202 @@
1
- <script setup lang="ts">
2
- import { computed, ref } from 'vue'
3
- import { useDialog } from '@wot-ui/ui'
4
- import { useUser } from '../../composables/useUser'
5
- import { generateGradientColor } from '../../utils'
6
- import { useManualTheme } from '../../composables/useManualTheme'
7
- import scan from '../scan-input/scan-input.vue'
8
- import { getUserConfig } from '../../api/login'
9
- import { useGlobalToast } from '../../composables/useGlobalToast'
10
-
11
- defineOptions({
12
- name: 'WuiUser',
13
- })
14
- const props = defineProps({
15
- loginPath: {
16
- type: String,
17
- default: '/pages/login/index',
18
- },
19
- showLogout: {
20
- type: Boolean,
21
- default: true,
22
- },
23
- })
24
-
25
- const { currentThemeColor, isDark } = useManualTheme()
26
-
27
- // Cell 暗黑样式 - 通过 custom-style 直接注入组件内联样式
28
- const cellStyle = computed(() => ({
29
- backgroundColor: isDark.value ? '#161616' : '#fff',
30
- borderBottom: isDark.value ? '1px solid rgba(255,255,255,0.04)' : 'none',
31
- }))
32
-
33
- // CellGroup 暗黑样式
34
- const cellGroupStyle = computed(() => ({
35
- backgroundColor: isDark.value ? '#111111' : 'transparent',
36
- borderRadius: isDark.value ? '10px' : '0',
37
- }))
38
- const user = useUser().getUserInfo()
39
- const dialog = useDialog()
40
- const toast = useGlobalToast()
41
- const userInfo = ref({
42
- name: user.name,
43
- nickName: user.nickName,
44
- })
45
-
46
- // 退出登录
47
- function quit() {
48
- dialog
49
- .confirm({
50
- title: '退出登录',
51
- })
52
- .then(() => {
53
- uni.removeStorageSync('TOKEN')
54
- uni.reLaunch({
55
- url: props.loginPath,
56
- })
57
- })
58
- .catch(() => {
59
- console.log('点击了取消按钮')
60
- })
61
- }
62
-
63
- // 系统设置
64
- function setting() {
65
- uni.navigateTo({
66
- url: '/pages/system-settings/index',
67
- })
68
- }
69
- async function clearCache() {
70
- const res = await getUserConfig()
71
- if (res.status == 'success') {
72
- toast.success({ msg: '清除成功!' })
73
- uni.setStorageSync('userInfo', res.user)
74
- }
75
- }
76
- </script>
77
-
78
- <template>
79
- <view class="user">
80
- <view class="top-box">
81
- <!-- 用户头部信息 -->
82
- <view
83
- class="user-header"
84
- :style="{
85
- background: isDark
86
- ? 'linear-gradient(135deg, #1a1a2e 0%, #16213e 100%)'
87
- : generateGradientColor(currentThemeColor.primary, 135, 1, 0.7),
88
- boxShadow: isDark
89
- ? '0 2px 12px rgba(0,0,0,0.4), inset 0 1px 0 rgba(255,255,255,0.05)'
90
- : '0 4px 12px rgba(74, 108, 247, 0.25)',
91
- border: isDark ? '1px solid rgba(255,255,255,0.06)' : 'none',
92
- borderRadius: '10px',
93
- }"
94
- >
95
- <view class="user-info">
96
- <image
97
- class="avatar"
98
- src="./user-avatar-fill.png"
99
- :style="{ borderColor: isDark ? 'rgba(255,255,255,0.2)' : 'rgba(255,255,255,0.3)' }"
100
- />
101
- <view class="user-text">
102
- <view class="user-name">{{ userInfo.name }}</view>
103
- <view class="user-nickname">昵称:{{ userInfo.nickName }}</view>
104
- </view>
105
- </view>
106
- </view>
107
- </view>
108
-
109
- <view class="mx-[15px] rounded-2">
110
- <wd-cell-group :custom-style="cellGroupStyle">
111
- <wd-cell
112
- title="系统设置"
113
- icon="setting"
114
- :is-link="true"
115
- :clickable="true"
116
- :custom-style="cellStyle"
117
- @click="setting"
118
- />
119
- <wd-cell title="清空缓存" :is-link="true" :clickable="true" :custom-style="cellStyle" @click="clearCache" />
120
- <wd-cell
121
- v-if="showLogout"
122
- title="退出登录"
123
- icon="logout"
124
- :is-link="true"
125
- :clickable="true"
126
- :custom-style="cellStyle"
127
- @click="quit"
128
- />
129
- </wd-cell-group>
130
- </view>
131
- <wd-dialog />
132
- </view>
133
- </template>
134
-
135
- <style scoped lang="scss">
136
- .user {
137
- .top-box {
138
- padding: 15px;
139
-
140
- .user-header {
141
- color: white;
142
- padding: 30px 20px;
143
- position: relative;
144
- overflow: hidden;
145
- }
146
-
147
- .user-header::before {
148
- content: '';
149
- position: absolute;
150
- top: -50px;
151
- right: -50px;
152
- width: 150px;
153
- height: 150px;
154
- background: rgba(255, 255, 255, 0.1);
155
- border-radius: 50%;
156
- }
157
-
158
- .user-header::after {
159
- content: '';
160
- position: absolute;
161
- bottom: -80px;
162
- left: -30px;
163
- width: 200px;
164
- height: 200px;
165
- background: rgba(255, 255, 255, 0.05);
166
- border-radius: 50%;
167
- }
168
-
169
- .user-info {
170
- display: flex;
171
- align-items: center;
172
- position: relative;
173
- z-index: 1;
174
- }
175
-
176
- .avatar {
177
- width: 120rpx;
178
- height: 120rpx;
179
- border-radius: 50%;
180
- margin-right: 15px;
181
- object-fit: cover;
182
- }
183
-
184
- .user-text {
185
- flex: 1;
186
- }
187
-
188
- .user-name {
189
- font-size: 20px;
190
- font-weight: 600;
191
- margin-bottom: 5px;
192
- }
193
-
194
- .user-nickname {
195
- font-size: 14px;
196
- opacity: 0.9;
197
- display: flex;
198
- align-items: center;
199
- }
200
- }
201
- }
202
- </style>
1
+ <script setup lang="ts">
2
+ import { computed, ref } from 'vue'
3
+ import { useDialog } from '@wot-ui/ui'
4
+ import { useUser } from '../../composables/useUser'
5
+ import { generateGradientColor } from '../../utils'
6
+ import { useManualTheme } from '../../composables/useManualTheme'
7
+ import scan from '../scan-input/scan-input.vue'
8
+ import { getUserConfig } from '../../api/login'
9
+ import { useGlobalToast } from '../../composables/useGlobalToast'
10
+
11
+ defineOptions({
12
+ name: 'WuiUser',
13
+ })
14
+ const props = defineProps({
15
+ loginPath: {
16
+ type: String,
17
+ default: '/pages/login/index',
18
+ },
19
+ showLogout: {
20
+ type: Boolean,
21
+ default: true,
22
+ },
23
+ })
24
+
25
+ const { currentThemeColor, isDark } = useManualTheme()
26
+
27
+ // Cell 暗黑样式 - 通过 custom-style 直接注入组件内联样式
28
+ const cellStyle = computed(() => ({
29
+ backgroundColor: isDark.value ? '#161616' : '#fff',
30
+ borderBottom: isDark.value ? '1px solid rgba(255,255,255,0.04)' : 'none',
31
+ }))
32
+
33
+ // CellGroup 暗黑样式
34
+ const cellGroupStyle = computed(() => ({
35
+ backgroundColor: isDark.value ? '#111111' : 'transparent',
36
+ borderRadius: isDark.value ? '10px' : '0',
37
+ }))
38
+ const user = useUser().getUserInfo()
39
+ const dialog = useDialog()
40
+ const toast = useGlobalToast()
41
+ const userInfo = ref({
42
+ name: user.name,
43
+ nickName: user.nickName,
44
+ })
45
+
46
+ // 退出登录
47
+ function quit() {
48
+ dialog
49
+ .confirm({
50
+ title: '退出登录',
51
+ })
52
+ .then(() => {
53
+ uni.removeStorageSync('TOKEN')
54
+ uni.reLaunch({
55
+ url: props.loginPath,
56
+ })
57
+ })
58
+ .catch(() => {
59
+ console.log('点击了取消按钮')
60
+ })
61
+ }
62
+
63
+ // 系统设置
64
+ function setting() {
65
+ uni.navigateTo({
66
+ url: '/pages/system-settings/index',
67
+ })
68
+ }
69
+ async function clearCache() {
70
+ const res = await getUserConfig()
71
+ if (res.status == 'success') {
72
+ toast.success({ msg: '清除成功!' })
73
+ uni.setStorageSync('userInfo', res.user)
74
+ }
75
+ }
76
+ </script>
77
+
78
+ <template>
79
+ <view class="user">
80
+ <view class="top-box">
81
+ <!-- 用户头部信息 -->
82
+ <view
83
+ class="user-header"
84
+ :style="{
85
+ background: isDark
86
+ ? 'linear-gradient(135deg, #1a1a2e 0%, #16213e 100%)'
87
+ : generateGradientColor(currentThemeColor.primary, 135, 1, 0.7),
88
+ boxShadow: isDark
89
+ ? '0 2px 12px rgba(0,0,0,0.4), inset 0 1px 0 rgba(255,255,255,0.05)'
90
+ : '0 4px 12px rgba(74, 108, 247, 0.25)',
91
+ border: isDark ? '1px solid rgba(255,255,255,0.06)' : 'none',
92
+ borderRadius: '10px',
93
+ }"
94
+ >
95
+ <view class="user-info">
96
+ <image
97
+ class="avatar"
98
+ src="./user-avatar-fill.png"
99
+ :style="{ borderColor: isDark ? 'rgba(255,255,255,0.2)' : 'rgba(255,255,255,0.3)' }"
100
+ />
101
+ <view class="user-text">
102
+ <view class="user-name">{{ userInfo.name }}</view>
103
+ <view class="user-nickname">昵称:{{ userInfo.nickName }}</view>
104
+ </view>
105
+ </view>
106
+ </view>
107
+ </view>
108
+
109
+ <view class="mx-[15px] rounded-2">
110
+ <wd-cell-group :custom-style="cellGroupStyle">
111
+ <wd-cell
112
+ title="系统设置"
113
+ icon="setting"
114
+ :is-link="true"
115
+ :clickable="true"
116
+ :custom-style="cellStyle"
117
+ @click="setting"
118
+ />
119
+ <wd-cell title="清空缓存" :is-link="true" :clickable="true" :custom-style="cellStyle" @click="clearCache" />
120
+ <wd-cell
121
+ v-if="showLogout"
122
+ title="退出登录"
123
+ icon="logout"
124
+ :is-link="true"
125
+ :clickable="true"
126
+ :custom-style="cellStyle"
127
+ @click="quit"
128
+ />
129
+ </wd-cell-group>
130
+ </view>
131
+ <wd-dialog />
132
+ </view>
133
+ </template>
134
+
135
+ <style scoped lang="scss">
136
+ .user {
137
+ .top-box {
138
+ padding: 15px;
139
+
140
+ .user-header {
141
+ color: white;
142
+ padding: 30px 20px;
143
+ position: relative;
144
+ overflow: hidden;
145
+ }
146
+
147
+ .user-header::before {
148
+ content: '';
149
+ position: absolute;
150
+ top: -50px;
151
+ right: -50px;
152
+ width: 150px;
153
+ height: 150px;
154
+ background: rgba(255, 255, 255, 0.1);
155
+ border-radius: 50%;
156
+ }
157
+
158
+ .user-header::after {
159
+ content: '';
160
+ position: absolute;
161
+ bottom: -80px;
162
+ left: -30px;
163
+ width: 200px;
164
+ height: 200px;
165
+ background: rgba(255, 255, 255, 0.05);
166
+ border-radius: 50%;
167
+ }
168
+
169
+ .user-info {
170
+ display: flex;
171
+ align-items: center;
172
+ position: relative;
173
+ z-index: 1;
174
+ }
175
+
176
+ .avatar {
177
+ width: 120rpx;
178
+ height: 120rpx;
179
+ border-radius: 50%;
180
+ margin-right: 15px;
181
+ object-fit: cover;
182
+ }
183
+
184
+ .user-text {
185
+ flex: 1;
186
+ }
187
+
188
+ .user-name {
189
+ font-size: 20px;
190
+ font-weight: 600;
191
+ margin-bottom: 5px;
192
+ }
193
+
194
+ .user-nickname {
195
+ font-size: 14px;
196
+ opacity: 0.9;
197
+ display: flex;
198
+ align-items: center;
199
+ }
200
+ }
201
+ }
202
+ </style>
@@ -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
+ }
@@ -9,7 +9,7 @@ export function useEnums({ config }: { config: any }) {
9
9
  async function getEnums() {
10
10
  try {
11
11
  const params: string[] = []
12
- const criterias = config.value?.criterias ?? []
12
+ const criteria = config.value?.criteria ?? []
13
13
  const columns = config.value.columns ?? []
14
14
  const writes = config.value.rowActions?.reduce((acc: any, cur: any) => {
15
15
  return [...acc, ...cur.writes]
@@ -19,7 +19,7 @@ export function useEnums({ config }: { config: any }) {
19
19
  params.push(`mstrucIds=${item.mstrucId}`)
20
20
  }
21
21
  })
22
- criterias.forEach((item: any) => {
22
+ criteria.forEach((item: any) => {
23
23
  if (ControlTypeSupportor.getControlType(item) === 'select' || ControlTypeSupportor.getControlType(item) === 'multiselect') {
24
24
  params.push(`mstrucIds=${item.mstrucId}`)
25
25
  }