wui-components-v2 1.1.70 → 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/feishu.ts +20 -20
- package/api/index.ts +4 -4
- package/api/login.ts +51 -51
- 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/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/demo-card/demo-card.vue +44 -44
- package/components/fold-card/fold-card.vue +2 -2
- 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-toast/GlobalToast.md +261 -261
- package/components/global-toast/global-toast.vue +56 -56
- package/components/label-value/open-value-more.vue +56 -56
- package/components/loading/loading.vue +5 -5
- package/components/login-form-box/login-form-box.vue +65 -65
- package/components/phone-login-form/phone-login-form.vue +204 -204
- package/components/privacy-popup/privacy-popup.vue +191 -191
- package/components/scan-input/scan-input.vue +406 -406
- 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-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-menus1/components/banner-carousel.vue +320 -320
- 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-notify-info/notify-handle.vue +53 -53
- 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-select-popup/wui-select-popup.vue +1 -0
- package/components/wui-tree-page/wui-tree-page.vue +297 -297
- package/components/wui-update-component/wui-update-component.vue +221 -221
- package/composables/types/theme.ts +65 -65
- package/composables/types/user.ts +5 -5
- package/composables/useColorGenerator.ts +221 -221
- 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/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/package.json +24 -24
- 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.scss +498 -498
- package/type.ts +154 -154
- package/utils/control-tree.ts +353 -353
- 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,168 +1,168 @@
|
|
|
1
|
-
<script setup lang="ts">
|
|
2
|
-
import { computed, defineEmits, defineOptions, defineProps, reactive, ref } from 'vue'
|
|
3
|
-
import { onLoad } from '@dcloudio/uni-app'
|
|
4
|
-
import { treeConfigApi, treeDataApi, treeNodeDataApi } from '../../api/tree'
|
|
5
|
-
import { pageConfig } from '../../api/page'
|
|
6
|
-
|
|
7
|
-
defineOptions({
|
|
8
|
-
name: 'SelectColPicker',
|
|
9
|
-
})
|
|
10
|
-
const props = defineProps<Props>()
|
|
11
|
-
|
|
12
|
-
const emits = defineEmits<{
|
|
13
|
-
(e: 'update:modelValue', value: string[]): void
|
|
14
|
-
}>()
|
|
15
|
-
|
|
16
|
-
// 定义 props 类型
|
|
17
|
-
interface Props {
|
|
18
|
-
sourceId: string
|
|
19
|
-
label?: string
|
|
20
|
-
labelWidth: string
|
|
21
|
-
prop: string
|
|
22
|
-
readonly: boolean
|
|
23
|
-
clearable: boolean
|
|
24
|
-
placeholder: string
|
|
25
|
-
modelValue: Array<string>
|
|
26
|
-
}
|
|
27
|
-
|
|
28
|
-
const dataValue = computed(() => {
|
|
29
|
-
return props.modelValue
|
|
30
|
-
})
|
|
31
|
-
const sourceId = ref('')
|
|
32
|
-
const columns = ref<any[]>([])
|
|
33
|
-
const treeConfigs = reactive({
|
|
34
|
-
branchRatmplId: '',
|
|
35
|
-
branchTitle: '',
|
|
36
|
-
id: '',
|
|
37
|
-
rootGtmplId: '',
|
|
38
|
-
primaryColumnId1: '',
|
|
39
|
-
primaryColumnId2: '',
|
|
40
|
-
leafRatmplId: '',
|
|
41
|
-
})
|
|
42
|
-
|
|
43
|
-
// 获取配置1
|
|
44
|
-
async function treeConfig1() {
|
|
45
|
-
try {
|
|
46
|
-
const res = await treeConfigApi(sourceId.value)
|
|
47
|
-
console.log(res)
|
|
48
|
-
treeConfigs.branchRatmplId = res.ttmplConfig.branchRatmplId
|
|
49
|
-
treeConfigs.branchTitle = res.ttmplConfig.branchTitle
|
|
50
|
-
treeConfigs.id = res.ttmplConfig.id
|
|
51
|
-
treeConfigs.rootGtmplId = res.ttmplConfig.rootGtmplId
|
|
52
|
-
treeConfigs.leafRatmplId = res.ttmplConfig.leafRatmplId
|
|
53
|
-
treeConfig2(treeConfigs.branchRatmplId, treeConfigs.leafRatmplId)
|
|
54
|
-
}
|
|
55
|
-
catch (error) {
|
|
56
|
-
console.log('error:', error)
|
|
57
|
-
// TODO handle the exception
|
|
58
|
-
}
|
|
59
|
-
}
|
|
60
|
-
|
|
61
|
-
onLoad((option: any) => {
|
|
62
|
-
sourceId.value = props.sourceId || option.sourceId
|
|
63
|
-
treeConfig1()
|
|
64
|
-
})
|
|
65
|
-
|
|
66
|
-
// 获取配置2
|
|
67
|
-
async function treeConfig2(branchRatmplId: string, leafRatmplId: string) {
|
|
68
|
-
try {
|
|
69
|
-
const res1 = await pageConfig(branchRatmplId)
|
|
70
|
-
const res2 = await pageConfig(leafRatmplId)
|
|
71
|
-
treeConfigs.primaryColumnId1 = res1.ltmplConfig.primaryColumn.sourceId
|
|
72
|
-
treeConfigs.primaryColumnId2 = res2.ltmplConfig.primaryColumn.sourceId
|
|
73
|
-
getTreeData()
|
|
74
|
-
}
|
|
75
|
-
catch (error) {
|
|
76
|
-
console.log('error:', error)
|
|
77
|
-
// TODO handle the exception
|
|
78
|
-
}
|
|
79
|
-
}
|
|
80
|
-
|
|
81
|
-
// 获取数据
|
|
82
|
-
async function getTreeData() {
|
|
83
|
-
try {
|
|
84
|
-
const res = await treeDataApi(treeConfigs.id)
|
|
85
|
-
console.log('res.entities:', res)
|
|
86
|
-
columns.value = [res.entities.map((item: any) => {
|
|
87
|
-
return {
|
|
88
|
-
value: item.code,
|
|
89
|
-
label: item.fieldMap[treeConfigs.primaryColumnId1],
|
|
90
|
-
}
|
|
91
|
-
})]
|
|
92
|
-
}
|
|
93
|
-
catch (error) {
|
|
94
|
-
console.log('error:', error)
|
|
95
|
-
// TODO handle the exception
|
|
96
|
-
}
|
|
97
|
-
}
|
|
98
|
-
|
|
99
|
-
async function columnChange({ selectedItem, resolve, finish }: any) {
|
|
100
|
-
try {
|
|
101
|
-
const res2 = treeNodeDataApi(treeConfigs.leafRatmplId, selectedItem.value)
|
|
102
|
-
const res1 = treeNodeDataApi(treeConfigs.branchRatmplId, selectedItem.value)
|
|
103
|
-
const res3 = await Promise.all([res1, res2])
|
|
104
|
-
console.log('res3:', res3)
|
|
105
|
-
if (res3[0].entities.length || res3[1].entities.length) {
|
|
106
|
-
resolve(
|
|
107
|
-
[
|
|
108
|
-
...res3[0].entities.map((item: any) => {
|
|
109
|
-
return {
|
|
110
|
-
value: item.code,
|
|
111
|
-
label: item.fieldMap[treeConfigs.primaryColumnId1],
|
|
112
|
-
}
|
|
113
|
-
}),
|
|
114
|
-
...res3[1].entities.map((item: any) => {
|
|
115
|
-
return {
|
|
116
|
-
value: item.code,
|
|
117
|
-
label: item.fieldMap[treeConfigs.primaryColumnId2],
|
|
118
|
-
}
|
|
119
|
-
}),
|
|
120
|
-
],
|
|
121
|
-
)
|
|
122
|
-
}
|
|
123
|
-
else {
|
|
124
|
-
finish()
|
|
125
|
-
}
|
|
126
|
-
}
|
|
127
|
-
catch (error) {
|
|
128
|
-
console.log('error:', error)
|
|
129
|
-
finish(false)
|
|
130
|
-
// TODO handle the exception
|
|
131
|
-
}
|
|
132
|
-
}
|
|
133
|
-
|
|
134
|
-
function handleConfirm(selectedItems: any) {
|
|
135
|
-
console.log(selectedItems)
|
|
136
|
-
emits('update:modelValue', [selectedItems[selectedItems.length - 1]])
|
|
137
|
-
}
|
|
138
|
-
// 格式化方法
|
|
139
|
-
function displayFormat(selectedItems: Record<string, any>[]) {
|
|
140
|
-
return selectedItems[selectedItems.length - 1]?.label
|
|
141
|
-
}
|
|
142
|
-
</script>
|
|
143
|
-
|
|
144
|
-
<template>
|
|
145
|
-
<view>
|
|
146
|
-
<wd-col-picker
|
|
147
|
-
:use-default-slot="true"
|
|
148
|
-
:model-value="dataValue"
|
|
149
|
-
:columns="columns"
|
|
150
|
-
:column-change="columnChange"
|
|
151
|
-
:display-format="displayFormat"
|
|
152
|
-
:style="{ pointerEvents: props.readonly ? '' : 'none' }"
|
|
153
|
-
@confirm="handleConfirm"
|
|
154
|
-
>
|
|
155
|
-
<wd-input
|
|
156
|
-
|
|
157
|
-
type="text"
|
|
158
|
-
model-value=""
|
|
159
|
-
:prop="props.prop"
|
|
160
|
-
:placeholder="props.placeholder"
|
|
161
|
-
:label-width="props.labelWidth"
|
|
162
|
-
:label="props.label"
|
|
163
|
-
:readonly="true"
|
|
164
|
-
:clearable="false"
|
|
165
|
-
/>
|
|
166
|
-
</wd-col-picker>
|
|
167
|
-
</view>
|
|
168
|
-
</template>
|
|
1
|
+
<script setup lang="ts">
|
|
2
|
+
import { computed, defineEmits, defineOptions, defineProps, reactive, ref } from 'vue'
|
|
3
|
+
import { onLoad } from '@dcloudio/uni-app'
|
|
4
|
+
import { treeConfigApi, treeDataApi, treeNodeDataApi } from '../../api/tree'
|
|
5
|
+
import { pageConfig } from '../../api/page'
|
|
6
|
+
|
|
7
|
+
defineOptions({
|
|
8
|
+
name: 'SelectColPicker',
|
|
9
|
+
})
|
|
10
|
+
const props = defineProps<Props>()
|
|
11
|
+
|
|
12
|
+
const emits = defineEmits<{
|
|
13
|
+
(e: 'update:modelValue', value: string[]): void
|
|
14
|
+
}>()
|
|
15
|
+
|
|
16
|
+
// 定义 props 类型
|
|
17
|
+
interface Props {
|
|
18
|
+
sourceId: string
|
|
19
|
+
label?: string
|
|
20
|
+
labelWidth: string
|
|
21
|
+
prop: string
|
|
22
|
+
readonly: boolean
|
|
23
|
+
clearable: boolean
|
|
24
|
+
placeholder: string
|
|
25
|
+
modelValue: Array<string>
|
|
26
|
+
}
|
|
27
|
+
|
|
28
|
+
const dataValue = computed(() => {
|
|
29
|
+
return props.modelValue
|
|
30
|
+
})
|
|
31
|
+
const sourceId = ref('')
|
|
32
|
+
const columns = ref<any[]>([])
|
|
33
|
+
const treeConfigs = reactive({
|
|
34
|
+
branchRatmplId: '',
|
|
35
|
+
branchTitle: '',
|
|
36
|
+
id: '',
|
|
37
|
+
rootGtmplId: '',
|
|
38
|
+
primaryColumnId1: '',
|
|
39
|
+
primaryColumnId2: '',
|
|
40
|
+
leafRatmplId: '',
|
|
41
|
+
})
|
|
42
|
+
|
|
43
|
+
// 获取配置1
|
|
44
|
+
async function treeConfig1() {
|
|
45
|
+
try {
|
|
46
|
+
const res = await treeConfigApi(sourceId.value)
|
|
47
|
+
console.log(res)
|
|
48
|
+
treeConfigs.branchRatmplId = res.ttmplConfig.branchRatmplId
|
|
49
|
+
treeConfigs.branchTitle = res.ttmplConfig.branchTitle
|
|
50
|
+
treeConfigs.id = res.ttmplConfig.id
|
|
51
|
+
treeConfigs.rootGtmplId = res.ttmplConfig.rootGtmplId
|
|
52
|
+
treeConfigs.leafRatmplId = res.ttmplConfig.leafRatmplId
|
|
53
|
+
treeConfig2(treeConfigs.branchRatmplId, treeConfigs.leafRatmplId)
|
|
54
|
+
}
|
|
55
|
+
catch (error) {
|
|
56
|
+
console.log('error:', error)
|
|
57
|
+
// TODO handle the exception
|
|
58
|
+
}
|
|
59
|
+
}
|
|
60
|
+
|
|
61
|
+
onLoad((option: any) => {
|
|
62
|
+
sourceId.value = props.sourceId || option.sourceId
|
|
63
|
+
treeConfig1()
|
|
64
|
+
})
|
|
65
|
+
|
|
66
|
+
// 获取配置2
|
|
67
|
+
async function treeConfig2(branchRatmplId: string, leafRatmplId: string) {
|
|
68
|
+
try {
|
|
69
|
+
const res1 = await pageConfig(branchRatmplId)
|
|
70
|
+
const res2 = await pageConfig(leafRatmplId)
|
|
71
|
+
treeConfigs.primaryColumnId1 = res1.ltmplConfig.primaryColumn.sourceId
|
|
72
|
+
treeConfigs.primaryColumnId2 = res2.ltmplConfig.primaryColumn.sourceId
|
|
73
|
+
getTreeData()
|
|
74
|
+
}
|
|
75
|
+
catch (error) {
|
|
76
|
+
console.log('error:', error)
|
|
77
|
+
// TODO handle the exception
|
|
78
|
+
}
|
|
79
|
+
}
|
|
80
|
+
|
|
81
|
+
// 获取数据
|
|
82
|
+
async function getTreeData() {
|
|
83
|
+
try {
|
|
84
|
+
const res = await treeDataApi(treeConfigs.id)
|
|
85
|
+
console.log('res.entities:', res)
|
|
86
|
+
columns.value = [res.entities.map((item: any) => {
|
|
87
|
+
return {
|
|
88
|
+
value: item.code,
|
|
89
|
+
label: item.fieldMap[treeConfigs.primaryColumnId1],
|
|
90
|
+
}
|
|
91
|
+
})]
|
|
92
|
+
}
|
|
93
|
+
catch (error) {
|
|
94
|
+
console.log('error:', error)
|
|
95
|
+
// TODO handle the exception
|
|
96
|
+
}
|
|
97
|
+
}
|
|
98
|
+
|
|
99
|
+
async function columnChange({ selectedItem, resolve, finish }: any) {
|
|
100
|
+
try {
|
|
101
|
+
const res2 = treeNodeDataApi(treeConfigs.leafRatmplId, selectedItem.value)
|
|
102
|
+
const res1 = treeNodeDataApi(treeConfigs.branchRatmplId, selectedItem.value)
|
|
103
|
+
const res3 = await Promise.all([res1, res2])
|
|
104
|
+
console.log('res3:', res3)
|
|
105
|
+
if (res3[0].entities.length || res3[1].entities.length) {
|
|
106
|
+
resolve(
|
|
107
|
+
[
|
|
108
|
+
...res3[0].entities.map((item: any) => {
|
|
109
|
+
return {
|
|
110
|
+
value: item.code,
|
|
111
|
+
label: item.fieldMap[treeConfigs.primaryColumnId1],
|
|
112
|
+
}
|
|
113
|
+
}),
|
|
114
|
+
...res3[1].entities.map((item: any) => {
|
|
115
|
+
return {
|
|
116
|
+
value: item.code,
|
|
117
|
+
label: item.fieldMap[treeConfigs.primaryColumnId2],
|
|
118
|
+
}
|
|
119
|
+
}),
|
|
120
|
+
],
|
|
121
|
+
)
|
|
122
|
+
}
|
|
123
|
+
else {
|
|
124
|
+
finish()
|
|
125
|
+
}
|
|
126
|
+
}
|
|
127
|
+
catch (error) {
|
|
128
|
+
console.log('error:', error)
|
|
129
|
+
finish(false)
|
|
130
|
+
// TODO handle the exception
|
|
131
|
+
}
|
|
132
|
+
}
|
|
133
|
+
|
|
134
|
+
function handleConfirm(selectedItems: any) {
|
|
135
|
+
console.log(selectedItems)
|
|
136
|
+
emits('update:modelValue', [selectedItems[selectedItems.length - 1]])
|
|
137
|
+
}
|
|
138
|
+
// 格式化方法
|
|
139
|
+
function displayFormat(selectedItems: Record<string, any>[]) {
|
|
140
|
+
return selectedItems[selectedItems.length - 1]?.label
|
|
141
|
+
}
|
|
142
|
+
</script>
|
|
143
|
+
|
|
144
|
+
<template>
|
|
145
|
+
<view>
|
|
146
|
+
<wd-col-picker
|
|
147
|
+
:use-default-slot="true"
|
|
148
|
+
:model-value="dataValue"
|
|
149
|
+
:columns="columns"
|
|
150
|
+
:column-change="columnChange"
|
|
151
|
+
:display-format="displayFormat"
|
|
152
|
+
:style="{ pointerEvents: props.readonly ? '' : 'none' }"
|
|
153
|
+
@confirm="handleConfirm"
|
|
154
|
+
>
|
|
155
|
+
<wd-input
|
|
156
|
+
|
|
157
|
+
type="text"
|
|
158
|
+
model-value=""
|
|
159
|
+
:prop="props.prop"
|
|
160
|
+
:placeholder="props.placeholder"
|
|
161
|
+
:label-width="props.labelWidth"
|
|
162
|
+
:label="props.label"
|
|
163
|
+
:readonly="true"
|
|
164
|
+
:clearable="false"
|
|
165
|
+
/>
|
|
166
|
+
</wd-col-picker>
|
|
167
|
+
</view>
|
|
168
|
+
</template>
|
|
@@ -1,73 +1,73 @@
|
|
|
1
|
-
<script setup lang="ts">
|
|
2
|
-
import { computed, defineEmits, defineOptions, defineProps, ref } from 'vue'
|
|
3
|
-
import type { EnumItem, Enums, Split2TabCriterias } from '../../type'
|
|
4
|
-
|
|
5
|
-
defineOptions({
|
|
6
|
-
name: 'TabSearch',
|
|
7
|
-
})
|
|
8
|
-
|
|
9
|
-
const props = defineProps<{
|
|
10
|
-
split2TabCriterias: Split2TabCriterias[]
|
|
11
|
-
enums: Enums
|
|
12
|
-
}>()
|
|
13
|
-
|
|
14
|
-
const emit = defineEmits(['click'])
|
|
15
|
-
|
|
16
|
-
interface TabData {
|
|
17
|
-
name: string
|
|
18
|
-
value: string
|
|
19
|
-
sourceId: string
|
|
20
|
-
}
|
|
21
|
-
// 提取枚举值
|
|
22
|
-
function enumColumn() {
|
|
23
|
-
if (!props.split2TabCriterias)
|
|
24
|
-
return []
|
|
25
|
-
return props.split2TabCriterias.reduce<TabData[]>((acc, cur) => {
|
|
26
|
-
const data = props.enums[cur.mstrucId]?.map((item: EnumItem) => {
|
|
27
|
-
return { name: item.title, value: item.title, sourceId: cur.sourceId }
|
|
28
|
-
}) || []
|
|
29
|
-
acc = [...acc, ...data] // 更新累加器
|
|
30
|
-
return acc // 显式返回累加器
|
|
31
|
-
}, [])
|
|
32
|
-
}
|
|
33
|
-
// 提取特殊值
|
|
34
|
-
function specialColumn() {
|
|
35
|
-
if (!props.split2TabCriterias)
|
|
36
|
-
return []
|
|
37
|
-
const data = []
|
|
38
|
-
for (let i = 0; i < props.split2TabCriterias.length; i++) {
|
|
39
|
-
const element = props.split2TabCriterias[i]
|
|
40
|
-
if (element.extControlType === 'single-checkbox') {
|
|
41
|
-
data.push({ name: element.title, value: '1', sourceId: element.sourceId })
|
|
42
|
-
}
|
|
43
|
-
}
|
|
44
|
-
return data
|
|
45
|
-
}
|
|
46
|
-
const tabs = computed(() => {
|
|
47
|
-
const data1 = enumColumn()
|
|
48
|
-
const data2 = specialColumn()
|
|
49
|
-
return [{ name: '全部', value: '', sourceId: '' }, ...data1, ...data2]
|
|
50
|
-
})
|
|
51
|
-
|
|
52
|
-
const tab = ref<string>('')
|
|
53
|
-
|
|
54
|
-
// click事件:点击标题
|
|
55
|
-
function click(event: { index: number, name: string }) {
|
|
56
|
-
const data = tabs.value.find(item => item.value === event.name)
|
|
57
|
-
console.log(data, event)
|
|
58
|
-
if (event.name) {
|
|
59
|
-
emit('click', `c_${data?.sourceId}=${event.name}`)
|
|
60
|
-
}
|
|
61
|
-
else {
|
|
62
|
-
emit('click', '')
|
|
63
|
-
}
|
|
64
|
-
}
|
|
65
|
-
</script>
|
|
66
|
-
|
|
67
|
-
<template>
|
|
68
|
-
<wd-tabs v-model="tab" animated slidable="always" @click="click">
|
|
69
|
-
<block v-for="item in tabs" :key="item.sourceId">
|
|
70
|
-
<wd-tab :title="item.name" :name="item.value" />
|
|
71
|
-
</block>
|
|
72
|
-
</wd-tabs>
|
|
73
|
-
</template>
|
|
1
|
+
<script setup lang="ts">
|
|
2
|
+
import { computed, defineEmits, defineOptions, defineProps, ref } from 'vue'
|
|
3
|
+
import type { EnumItem, Enums, Split2TabCriterias } from '../../type'
|
|
4
|
+
|
|
5
|
+
defineOptions({
|
|
6
|
+
name: 'TabSearch',
|
|
7
|
+
})
|
|
8
|
+
|
|
9
|
+
const props = defineProps<{
|
|
10
|
+
split2TabCriterias: Split2TabCriterias[]
|
|
11
|
+
enums: Enums
|
|
12
|
+
}>()
|
|
13
|
+
|
|
14
|
+
const emit = defineEmits(['click'])
|
|
15
|
+
|
|
16
|
+
interface TabData {
|
|
17
|
+
name: string
|
|
18
|
+
value: string
|
|
19
|
+
sourceId: string
|
|
20
|
+
}
|
|
21
|
+
// 提取枚举值
|
|
22
|
+
function enumColumn() {
|
|
23
|
+
if (!props.split2TabCriterias)
|
|
24
|
+
return []
|
|
25
|
+
return props.split2TabCriterias.reduce<TabData[]>((acc, cur) => {
|
|
26
|
+
const data = props.enums[cur.mstrucId]?.map((item: EnumItem) => {
|
|
27
|
+
return { name: item.title, value: item.title, sourceId: cur.sourceId }
|
|
28
|
+
}) || []
|
|
29
|
+
acc = [...acc, ...data] // 更新累加器
|
|
30
|
+
return acc // 显式返回累加器
|
|
31
|
+
}, [])
|
|
32
|
+
}
|
|
33
|
+
// 提取特殊值
|
|
34
|
+
function specialColumn() {
|
|
35
|
+
if (!props.split2TabCriterias)
|
|
36
|
+
return []
|
|
37
|
+
const data = []
|
|
38
|
+
for (let i = 0; i < props.split2TabCriterias.length; i++) {
|
|
39
|
+
const element = props.split2TabCriterias[i]
|
|
40
|
+
if (element.extControlType === 'single-checkbox') {
|
|
41
|
+
data.push({ name: element.title, value: '1', sourceId: element.sourceId })
|
|
42
|
+
}
|
|
43
|
+
}
|
|
44
|
+
return data
|
|
45
|
+
}
|
|
46
|
+
const tabs = computed(() => {
|
|
47
|
+
const data1 = enumColumn()
|
|
48
|
+
const data2 = specialColumn()
|
|
49
|
+
return [{ name: '全部', value: '', sourceId: '' }, ...data1, ...data2]
|
|
50
|
+
})
|
|
51
|
+
|
|
52
|
+
const tab = ref<string>('')
|
|
53
|
+
|
|
54
|
+
// click事件:点击标题
|
|
55
|
+
function click(event: { index: number, name: string }) {
|
|
56
|
+
const data = tabs.value.find(item => item.value === event.name)
|
|
57
|
+
console.log(data, event)
|
|
58
|
+
if (event.name) {
|
|
59
|
+
emit('click', `c_${data?.sourceId}=${event.name}`)
|
|
60
|
+
}
|
|
61
|
+
else {
|
|
62
|
+
emit('click', '')
|
|
63
|
+
}
|
|
64
|
+
}
|
|
65
|
+
</script>
|
|
66
|
+
|
|
67
|
+
<template>
|
|
68
|
+
<wd-tabs v-model="tab" animated slidable="always" @click="click">
|
|
69
|
+
<block v-for="item in tabs" :key="item.sourceId">
|
|
70
|
+
<wd-tab :title="item.name" :name="item.value" />
|
|
71
|
+
</block>
|
|
72
|
+
</wd-tabs>
|
|
73
|
+
</template>
|