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.
- package/api/core/index.ts +74 -74
- package/api/menu.ts +45 -45
- package/api/page.ts +114 -114
- package/api/sys.ts +12 -12
- package/components/add-address-page/add-address-page.vue +77 -77
- 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/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-message/global-message.vue +68 -68
- package/components/label-value/label-value.vue +144 -144
- package/components/list-top-buttons/list-top-buttons.vue +19 -19
- package/components/login-form/login-form.vue +126 -126
- package/components/mulselect-picker/mulselect-picker.vue +86 -86
- package/components/product-card/product-card.vue +201 -201
- package/components/search/search.vue +128 -128
- package/components/user-choose/user-choose.vue +1 -1
- 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-menus/wui-menus.vue +247 -247
- package/components/wui-menus1/components/navbar.vue +43 -43
- package/components/wui-menus1/wui-menus.vue +564 -564
- package/components/wui-notify-info/wui-notify-info.vue +280 -280
- 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 +612 -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-user/wui-user.vue +202 -202
- package/composables/useCompanyFieldFilter.ts +91 -91
- package/composables/useEnumes.ts +2 -2
- package/composables/useMenus.ts +193 -193
- package/index.ts +83 -83
- package/package.json +1 -1
- package/static/iconfont/iconfont.css +63 -63
- package/store/language.ts +151 -151
- package/styles/dark-mode.css +523 -523
- package/styles/dark-mode.min.css +1 -1
- package/type.ts +2 -2
- package/utils/control-tree.ts +2 -2
- 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
|
+
}
|
package/composables/useEnumes.ts
CHANGED
|
@@ -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
|
|
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
|
-
|
|
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
|
}
|