wui-components-v2 1.1.70 → 1.1.72
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/form-control/form-control.vue +9 -1
- 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-list/wui-select-list.vue +1 -9
- 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/useCompanyFieldFilter.ts +26 -24
- 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
package/api/feishu.ts
CHANGED
|
@@ -1,20 +1,20 @@
|
|
|
1
|
-
import req from './core/index'
|
|
2
|
-
|
|
3
|
-
export type FeishuHcTokenResponse = {
|
|
4
|
-
token?: string
|
|
5
|
-
message?: string
|
|
6
|
-
}
|
|
7
|
-
|
|
8
|
-
export function feishuHcToken(code: string): Promise<FeishuHcTokenResponse> {
|
|
9
|
-
// 将前端拿到的免登 code 交给业务后端:
|
|
10
|
-
// 1) 后端用 app_id/app_secret 调用飞书接口把 code 换成 user_access_token + user_id/open_id
|
|
11
|
-
// 2) 后端用 user_id/open_id 在你系统内创建/更新用户,并签发你系统自己的 TOKEN(本项目存到 TOKEN)
|
|
12
|
-
return req({
|
|
13
|
-
url: '/v3/auth/feishu/hctoken',
|
|
14
|
-
method: 'POST',
|
|
15
|
-
data: {
|
|
16
|
-
code,
|
|
17
|
-
},
|
|
18
|
-
})
|
|
19
|
-
}
|
|
20
|
-
|
|
1
|
+
import req from './core/index'
|
|
2
|
+
|
|
3
|
+
export type FeishuHcTokenResponse = {
|
|
4
|
+
token?: string
|
|
5
|
+
message?: string
|
|
6
|
+
}
|
|
7
|
+
|
|
8
|
+
export function feishuHcToken(code: string): Promise<FeishuHcTokenResponse> {
|
|
9
|
+
// 将前端拿到的免登 code 交给业务后端:
|
|
10
|
+
// 1) 后端用 app_id/app_secret 调用飞书接口把 code 换成 user_access_token + user_id/open_id
|
|
11
|
+
// 2) 后端用 user_id/open_id 在你系统内创建/更新用户,并签发你系统自己的 TOKEN(本项目存到 TOKEN)
|
|
12
|
+
return req({
|
|
13
|
+
url: '/v3/auth/feishu/hctoken',
|
|
14
|
+
method: 'POST',
|
|
15
|
+
data: {
|
|
16
|
+
code,
|
|
17
|
+
},
|
|
18
|
+
})
|
|
19
|
+
}
|
|
20
|
+
|
package/api/index.ts
CHANGED
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
// 导入请求核心实例
|
|
2
|
-
import req from './core/index'
|
|
3
|
-
|
|
4
|
-
export { req }
|
|
1
|
+
// 导入请求核心实例
|
|
2
|
+
import req from './core/index'
|
|
3
|
+
|
|
4
|
+
export { req }
|
package/api/login.ts
CHANGED
|
@@ -1,51 +1,51 @@
|
|
|
1
|
-
// 导入核心alova实例
|
|
2
|
-
import dayjs from 'dayjs/esm/index'
|
|
3
|
-
import timezone from 'dayjs/esm/plugin/timezone'
|
|
4
|
-
import utc from 'dayjs/esm/plugin/utc'
|
|
5
|
-
import rsaEncrypt from '../utils/rsaEncrypt'
|
|
6
|
-
import req from './core/index'
|
|
7
|
-
// 获取公钥
|
|
8
|
-
export function pubKey(): Promise<any> {
|
|
9
|
-
return req({
|
|
10
|
-
url: `/v3/auth/ras-pubkey`,
|
|
11
|
-
})
|
|
12
|
-
}
|
|
13
|
-
|
|
14
|
-
// 登录
|
|
15
|
-
export async function login(username: string, password: string, kaptchaToken: string = '', kaptchaText: string = ''): Promise<any> {
|
|
16
|
-
dayjs.extend(utc)
|
|
17
|
-
dayjs.extend(timezone)
|
|
18
|
-
const datetime = dayjs(new Date())
|
|
19
|
-
.tz('Europe/London')
|
|
20
|
-
.format('YYYY-MM-DD HH:mm:ss')
|
|
21
|
-
const json = {
|
|
22
|
-
username,
|
|
23
|
-
password,
|
|
24
|
-
datetime,
|
|
25
|
-
}
|
|
26
|
-
const res = await pubKey()
|
|
27
|
-
const pubkeystr = res.rasPubkey
|
|
28
|
-
const userInfo = rsaEncrypt(JSON.stringify(json), pubkeystr)
|
|
29
|
-
return req({
|
|
30
|
-
url: `/v3/auth/hctoken`,
|
|
31
|
-
data: {
|
|
32
|
-
userInfo,
|
|
33
|
-
kaptchaToken,
|
|
34
|
-
kaptchaText,
|
|
35
|
-
},
|
|
36
|
-
})
|
|
37
|
-
}
|
|
38
|
-
// 获取验证码
|
|
39
|
-
export function getKaptchaToken(): Promise<any> {
|
|
40
|
-
return req({
|
|
41
|
-
url: `/v3/auth/kaptcha`,
|
|
42
|
-
method: 'POST',
|
|
43
|
-
})
|
|
44
|
-
}
|
|
45
|
-
|
|
46
|
-
// 获取登录用户权限配置信息
|
|
47
|
-
export function getUserConfig(): Promise<any> {
|
|
48
|
-
return req({
|
|
49
|
-
url: `/v3/current-user`,
|
|
50
|
-
})
|
|
51
|
-
}
|
|
1
|
+
// 导入核心alova实例
|
|
2
|
+
import dayjs from 'dayjs/esm/index'
|
|
3
|
+
import timezone from 'dayjs/esm/plugin/timezone'
|
|
4
|
+
import utc from 'dayjs/esm/plugin/utc'
|
|
5
|
+
import rsaEncrypt from '../utils/rsaEncrypt'
|
|
6
|
+
import req from './core/index'
|
|
7
|
+
// 获取公钥
|
|
8
|
+
export function pubKey(): Promise<any> {
|
|
9
|
+
return req({
|
|
10
|
+
url: `/v3/auth/ras-pubkey`,
|
|
11
|
+
})
|
|
12
|
+
}
|
|
13
|
+
|
|
14
|
+
// 登录
|
|
15
|
+
export async function login(username: string, password: string, kaptchaToken: string = '', kaptchaText: string = ''): Promise<any> {
|
|
16
|
+
dayjs.extend(utc)
|
|
17
|
+
dayjs.extend(timezone)
|
|
18
|
+
const datetime = dayjs(new Date())
|
|
19
|
+
.tz('Europe/London')
|
|
20
|
+
.format('YYYY-MM-DD HH:mm:ss')
|
|
21
|
+
const json = {
|
|
22
|
+
username,
|
|
23
|
+
password,
|
|
24
|
+
datetime,
|
|
25
|
+
}
|
|
26
|
+
const res = await pubKey()
|
|
27
|
+
const pubkeystr = res.rasPubkey
|
|
28
|
+
const userInfo = rsaEncrypt(JSON.stringify(json), pubkeystr)
|
|
29
|
+
return req({
|
|
30
|
+
url: `/v3/auth/hctoken`,
|
|
31
|
+
data: {
|
|
32
|
+
userInfo,
|
|
33
|
+
kaptchaToken,
|
|
34
|
+
kaptchaText,
|
|
35
|
+
},
|
|
36
|
+
})
|
|
37
|
+
}
|
|
38
|
+
// 获取验证码
|
|
39
|
+
export function getKaptchaToken(): Promise<any> {
|
|
40
|
+
return req({
|
|
41
|
+
url: `/v3/auth/kaptcha`,
|
|
42
|
+
method: 'POST',
|
|
43
|
+
})
|
|
44
|
+
}
|
|
45
|
+
|
|
46
|
+
// 获取登录用户权限配置信息
|
|
47
|
+
export function getUserConfig(): Promise<any> {
|
|
48
|
+
return req({
|
|
49
|
+
url: `/v3/current-user`,
|
|
50
|
+
})
|
|
51
|
+
}
|
package/api/tree.ts
CHANGED
|
@@ -1,28 +1,28 @@
|
|
|
1
|
-
import req from './core/index'
|
|
2
|
-
// 树列表页面详细配置
|
|
3
|
-
export function treeConfigApi(sourceId: string) {
|
|
4
|
-
return req({
|
|
5
|
-
url: `/v3/ttmpl/config?sourceId=${sourceId}`,
|
|
6
|
-
})
|
|
7
|
-
}
|
|
8
|
-
|
|
9
|
-
// 树数据
|
|
10
|
-
export function treeDataApi(sourceId: string) {
|
|
11
|
-
return req({
|
|
12
|
-
url: `/v3/ttmpl/root-data?sourceId=${sourceId}`,
|
|
13
|
-
})
|
|
14
|
-
}
|
|
15
|
-
// 树节点数据
|
|
16
|
-
export function treeNodeDataApi(sourceId: string, mainCode?: string) {
|
|
17
|
-
return req({
|
|
18
|
-
url: `/v3/ltmpl/top-data?sourceId=${sourceId}&mainCode=${mainCode}`,
|
|
19
|
-
})
|
|
20
|
-
}
|
|
21
|
-
|
|
22
|
-
// 删除树节点
|
|
23
|
-
export function treeNodeDeleteApi(sourceId: string, codes: string) {
|
|
24
|
-
return req({
|
|
25
|
-
url: `/v3/ltmpl/data?sourceId=${sourceId}&codes=${codes}`,
|
|
26
|
-
method: 'DELETE',
|
|
27
|
-
})
|
|
28
|
-
}
|
|
1
|
+
import req from './core/index'
|
|
2
|
+
// 树列表页面详细配置
|
|
3
|
+
export function treeConfigApi(sourceId: string) {
|
|
4
|
+
return req({
|
|
5
|
+
url: `/v3/ttmpl/config?sourceId=${sourceId}`,
|
|
6
|
+
})
|
|
7
|
+
}
|
|
8
|
+
|
|
9
|
+
// 树数据
|
|
10
|
+
export function treeDataApi(sourceId: string) {
|
|
11
|
+
return req({
|
|
12
|
+
url: `/v3/ttmpl/root-data?sourceId=${sourceId}`,
|
|
13
|
+
})
|
|
14
|
+
}
|
|
15
|
+
// 树节点数据
|
|
16
|
+
export function treeNodeDataApi(sourceId: string, mainCode?: string) {
|
|
17
|
+
return req({
|
|
18
|
+
url: `/v3/ltmpl/top-data?sourceId=${sourceId}&mainCode=${mainCode}`,
|
|
19
|
+
})
|
|
20
|
+
}
|
|
21
|
+
|
|
22
|
+
// 删除树节点
|
|
23
|
+
export function treeNodeDeleteApi(sourceId: string, codes: string) {
|
|
24
|
+
return req({
|
|
25
|
+
url: `/v3/ltmpl/data?sourceId=${sourceId}&codes=${codes}`,
|
|
26
|
+
method: 'DELETE',
|
|
27
|
+
})
|
|
28
|
+
}
|
|
@@ -1,116 +1,116 @@
|
|
|
1
|
-
<script setup lang="ts">
|
|
2
|
-
import { computed, defineEmits, defineOptions, defineProps, ref } from 'vue'
|
|
3
|
-
import type { Enums, Groups } from '../../type'
|
|
4
|
-
import formControl from '../form-control/form-control.vue'
|
|
5
|
-
import { actionDataSave } from '../../api/page'
|
|
6
|
-
import { useGlobalToast } from '../../composables/useGlobalToast'
|
|
7
|
-
|
|
8
|
-
defineOptions({
|
|
9
|
-
name: 'ActionPopup',
|
|
10
|
-
})
|
|
11
|
-
const props = defineProps<{
|
|
12
|
-
fieldGroup?: Groups
|
|
13
|
-
show: boolean
|
|
14
|
-
code: string
|
|
15
|
-
zpaging: any
|
|
16
|
-
enumColumn?: Enums
|
|
17
|
-
/** 提交成功后跳转的自定义页面路径,不传则默认刷新 */
|
|
18
|
-
successUrl?: string
|
|
19
|
-
}>()
|
|
20
|
-
const emits = defineEmits(['update:show'])
|
|
21
|
-
const btnLoading = ref(false)
|
|
22
|
-
const toast = useGlobalToast()
|
|
23
|
-
const formControlRef = ref()
|
|
24
|
-
// 显示开关
|
|
25
|
-
const show = computed({
|
|
26
|
-
get() {
|
|
27
|
-
return props.show
|
|
28
|
-
},
|
|
29
|
-
set(value: boolean) {
|
|
30
|
-
emits('update:show', value)
|
|
31
|
-
},
|
|
32
|
-
})
|
|
33
|
-
|
|
34
|
-
// 格式化文件数据为后端期望的 JSON 字符串
|
|
35
|
-
function formatFileData(data: Record<string, any>) {
|
|
36
|
-
const result = { ...data }
|
|
37
|
-
for (const key in result) {
|
|
38
|
-
if (result[key]?.response) {
|
|
39
|
-
const fileObj = result[key]
|
|
40
|
-
const res = typeof fileObj.response === 'string' ? JSON.parse(fileObj.response) : fileObj.response
|
|
41
|
-
result[key] = JSON.stringify({
|
|
42
|
-
valid: fileObj.disabled ? 'old' : 'new',
|
|
43
|
-
fileKey: res.fileKey,
|
|
44
|
-
fileName: fileObj.name,
|
|
45
|
-
})
|
|
46
|
-
}
|
|
47
|
-
}
|
|
48
|
-
return result
|
|
49
|
-
}
|
|
50
|
-
|
|
51
|
-
// 提交数据
|
|
52
|
-
async function action() {
|
|
53
|
-
btnLoading.value = true
|
|
54
|
-
if (!props.fieldGroup?.id) {
|
|
55
|
-
return toast.warning({ msg: '无sourceId' })
|
|
56
|
-
}
|
|
57
|
-
try {
|
|
58
|
-
const data = await formControlRef.value.submit()
|
|
59
|
-
await actionDataSave(props.fieldGroup?.id || '', props.code, formatFileData(data))
|
|
60
|
-
btnLoading.value = false
|
|
61
|
-
show.value = false
|
|
62
|
-
toast.success({ msg: '操作成功!' })
|
|
63
|
-
// 如果传了 successUrl,跳转到自定义页面;否则默认刷新
|
|
64
|
-
if (props.successUrl) {
|
|
65
|
-
uni.navigateTo({ url: props.successUrl })
|
|
66
|
-
} else {
|
|
67
|
-
props.zpaging.reload()
|
|
68
|
-
}
|
|
69
|
-
} catch (error: any) {
|
|
70
|
-
btnLoading.value = false
|
|
71
|
-
toast.error(error)
|
|
72
|
-
}
|
|
73
|
-
}
|
|
74
|
-
</script>
|
|
75
|
-
|
|
76
|
-
<template>
|
|
77
|
-
<wd-popup
|
|
78
|
-
v-model="show"
|
|
79
|
-
position="bottom"
|
|
80
|
-
closable
|
|
81
|
-
:z-index="999999"
|
|
82
|
-
@close="
|
|
83
|
-
() => {
|
|
84
|
-
show = false
|
|
85
|
-
}
|
|
86
|
-
"
|
|
87
|
-
>
|
|
88
|
-
<view class="h-50vh w-100vw bg-white dark:bg-[var(--wot-dark-background)]">
|
|
89
|
-
<view class="h-44px bg-white dark:bg-[var(--wot-dark-background)]" />
|
|
90
|
-
<view class="w-[calc(100%-44px)] overflow-auto bg-white dark:bg-[var(--wot-dark-background)]">
|
|
91
|
-
<formControl
|
|
92
|
-
v-if="props.fieldGroup"
|
|
93
|
-
ref="formControlRef"
|
|
94
|
-
:field-group="props.fieldGroup"
|
|
95
|
-
:enum-column="enumColumn"
|
|
96
|
-
/>
|
|
97
|
-
<view class="h-44px bg-white dark:bg-[var(--wot-dark-background)]" />
|
|
98
|
-
<view
|
|
99
|
-
class="fixed bottom-0 left-0 right-0 box-border w-100% flex p-2 bg-white dark:bg-[var(--wot-dark-background)]"
|
|
100
|
-
>
|
|
101
|
-
<wd-button
|
|
102
|
-
:loading="btnLoading"
|
|
103
|
-
custom-class="flex-1"
|
|
104
|
-
@click="
|
|
105
|
-
() => {
|
|
106
|
-
action()
|
|
107
|
-
}
|
|
108
|
-
"
|
|
109
|
-
>
|
|
110
|
-
提交
|
|
111
|
-
</wd-button>
|
|
112
|
-
</view>
|
|
113
|
-
</view>
|
|
114
|
-
</view>
|
|
115
|
-
</wd-popup>
|
|
116
|
-
</template>
|
|
1
|
+
<script setup lang="ts">
|
|
2
|
+
import { computed, defineEmits, defineOptions, defineProps, ref } from 'vue'
|
|
3
|
+
import type { Enums, Groups } from '../../type'
|
|
4
|
+
import formControl from '../form-control/form-control.vue'
|
|
5
|
+
import { actionDataSave } from '../../api/page'
|
|
6
|
+
import { useGlobalToast } from '../../composables/useGlobalToast'
|
|
7
|
+
|
|
8
|
+
defineOptions({
|
|
9
|
+
name: 'ActionPopup',
|
|
10
|
+
})
|
|
11
|
+
const props = defineProps<{
|
|
12
|
+
fieldGroup?: Groups
|
|
13
|
+
show: boolean
|
|
14
|
+
code: string
|
|
15
|
+
zpaging: any
|
|
16
|
+
enumColumn?: Enums
|
|
17
|
+
/** 提交成功后跳转的自定义页面路径,不传则默认刷新 */
|
|
18
|
+
successUrl?: string
|
|
19
|
+
}>()
|
|
20
|
+
const emits = defineEmits(['update:show'])
|
|
21
|
+
const btnLoading = ref(false)
|
|
22
|
+
const toast = useGlobalToast()
|
|
23
|
+
const formControlRef = ref()
|
|
24
|
+
// 显示开关
|
|
25
|
+
const show = computed({
|
|
26
|
+
get() {
|
|
27
|
+
return props.show
|
|
28
|
+
},
|
|
29
|
+
set(value: boolean) {
|
|
30
|
+
emits('update:show', value)
|
|
31
|
+
},
|
|
32
|
+
})
|
|
33
|
+
|
|
34
|
+
// 格式化文件数据为后端期望的 JSON 字符串
|
|
35
|
+
function formatFileData(data: Record<string, any>) {
|
|
36
|
+
const result = { ...data }
|
|
37
|
+
for (const key in result) {
|
|
38
|
+
if (result[key]?.response) {
|
|
39
|
+
const fileObj = result[key]
|
|
40
|
+
const res = typeof fileObj.response === 'string' ? JSON.parse(fileObj.response) : fileObj.response
|
|
41
|
+
result[key] = JSON.stringify({
|
|
42
|
+
valid: fileObj.disabled ? 'old' : 'new',
|
|
43
|
+
fileKey: res.fileKey,
|
|
44
|
+
fileName: fileObj.name,
|
|
45
|
+
})
|
|
46
|
+
}
|
|
47
|
+
}
|
|
48
|
+
return result
|
|
49
|
+
}
|
|
50
|
+
|
|
51
|
+
// 提交数据
|
|
52
|
+
async function action() {
|
|
53
|
+
btnLoading.value = true
|
|
54
|
+
if (!props.fieldGroup?.id) {
|
|
55
|
+
return toast.warning({ msg: '无sourceId' })
|
|
56
|
+
}
|
|
57
|
+
try {
|
|
58
|
+
const data = await formControlRef.value.submit()
|
|
59
|
+
await actionDataSave(props.fieldGroup?.id || '', props.code, formatFileData(data))
|
|
60
|
+
btnLoading.value = false
|
|
61
|
+
show.value = false
|
|
62
|
+
toast.success({ msg: '操作成功!' })
|
|
63
|
+
// 如果传了 successUrl,跳转到自定义页面;否则默认刷新
|
|
64
|
+
if (props.successUrl) {
|
|
65
|
+
uni.navigateTo({ url: props.successUrl })
|
|
66
|
+
} else {
|
|
67
|
+
props.zpaging.reload()
|
|
68
|
+
}
|
|
69
|
+
} catch (error: any) {
|
|
70
|
+
btnLoading.value = false
|
|
71
|
+
toast.error(error)
|
|
72
|
+
}
|
|
73
|
+
}
|
|
74
|
+
</script>
|
|
75
|
+
|
|
76
|
+
<template>
|
|
77
|
+
<wd-popup
|
|
78
|
+
v-model="show"
|
|
79
|
+
position="bottom"
|
|
80
|
+
closable
|
|
81
|
+
:z-index="999999"
|
|
82
|
+
@close="
|
|
83
|
+
() => {
|
|
84
|
+
show = false
|
|
85
|
+
}
|
|
86
|
+
"
|
|
87
|
+
>
|
|
88
|
+
<view class="h-50vh w-100vw bg-white dark:bg-[var(--wot-dark-background)]">
|
|
89
|
+
<view class="h-44px bg-white dark:bg-[var(--wot-dark-background)]" />
|
|
90
|
+
<view class="w-[calc(100%-44px)] overflow-auto bg-white dark:bg-[var(--wot-dark-background)]">
|
|
91
|
+
<formControl
|
|
92
|
+
v-if="props.fieldGroup"
|
|
93
|
+
ref="formControlRef"
|
|
94
|
+
:field-group="props.fieldGroup"
|
|
95
|
+
:enum-column="enumColumn"
|
|
96
|
+
/>
|
|
97
|
+
<view class="h-44px bg-white dark:bg-[var(--wot-dark-background)]" />
|
|
98
|
+
<view
|
|
99
|
+
class="fixed bottom-0 left-0 right-0 box-border w-100% flex p-2 bg-white dark:bg-[var(--wot-dark-background)]"
|
|
100
|
+
>
|
|
101
|
+
<wd-button
|
|
102
|
+
:loading="btnLoading"
|
|
103
|
+
custom-class="flex-1"
|
|
104
|
+
@click="
|
|
105
|
+
() => {
|
|
106
|
+
action()
|
|
107
|
+
}
|
|
108
|
+
"
|
|
109
|
+
>
|
|
110
|
+
提交
|
|
111
|
+
</wd-button>
|
|
112
|
+
</view>
|
|
113
|
+
</view>
|
|
114
|
+
</view>
|
|
115
|
+
</wd-popup>
|
|
116
|
+
</template>
|