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.
Files changed (79) hide show
  1. package/api/feishu.ts +20 -20
  2. package/api/index.ts +4 -4
  3. package/api/login.ts +51 -51
  4. package/api/tree.ts +28 -28
  5. package/components/action-popup/action-popup.vue +116 -116
  6. package/components/add-address-list/add-address-list.vue +187 -187
  7. package/components/add-address-page/config.ts +297 -297
  8. package/components/audio-play/audio-play.vue +220 -220
  9. package/components/batch-upload-file/batch-upload-file.vue +75 -75
  10. package/components/card-botom-buttons/card-botom-buttons.vue +279 -279
  11. package/components/demo-card/demo-card.vue +44 -44
  12. package/components/fold-card/fold-card.vue +2 -2
  13. package/components/global-loading/GlobalLoading.md +366 -366
  14. package/components/global-loading/global-loading.vue +55 -55
  15. package/components/global-message/GlobalMessage.md +570 -570
  16. package/components/global-toast/GlobalToast.md +261 -261
  17. package/components/global-toast/global-toast.vue +56 -56
  18. package/components/label-value/open-value-more.vue +56 -56
  19. package/components/loading/loading.vue +5 -5
  20. package/components/login-form-box/login-form-box.vue +65 -65
  21. package/components/phone-login-form/phone-login-form.vue +204 -204
  22. package/components/privacy-popup/privacy-popup.vue +191 -191
  23. package/components/scan-input/scan-input.vue +406 -406
  24. package/components/select-col-picker/select-col-picker.vue +168 -168
  25. package/components/tab-search/tab-search.vue +73 -73
  26. package/components/tree-select/components/TreeNode.vue +200 -200
  27. package/components/tree-select/components/index.vue +471 -471
  28. package/components/tree-select/components/tree-select.vue +56 -56
  29. package/components/tree-select/index.vue +93 -93
  30. package/components/user-choose/user-choose.vue +169 -151
  31. package/components/video-play/video-play.vue +56 -56
  32. package/components/wui-auto-update-component/wui-auto-update-component.vue +132 -132
  33. package/components/wui-default/wui-default.vue +49 -49
  34. package/components/wui-details-page/wui-details-page.vue +147 -147
  35. package/components/wui-edit-page/wui-edit-page-copy.vue +757 -757
  36. package/components/wui-edit-page/wui-edit-page.vue +793 -793
  37. package/components/wui-login/wui-login.vue +43 -43
  38. package/components/wui-login1/wui-login.vue +41 -41
  39. package/components/wui-menus/wui-menus-top.vue +137 -137
  40. package/components/wui-menus/wui-menus-top1.vue +8 -8
  41. package/components/wui-menus1/components/banner-carousel.vue +320 -320
  42. package/components/wui-menus1/components/quick-panel.vue +55 -55
  43. package/components/wui-menus1/components/search-bar.vue +49 -49
  44. package/components/wui-menus1/components/section-menus.vue +208 -208
  45. package/components/wui-menus1/wui-menus-top.vue +718 -718
  46. package/components/wui-menus1/wui-menus-top1.vue +398 -398
  47. package/components/wui-notify-info/notify-handle.vue +53 -53
  48. package/components/wui-scan-binding-sensor/wui-scan-binding-sensor.vue +75 -75
  49. package/components/wui-search-history-babbar/components/SearchBar.vue +70 -70
  50. package/components/wui-select-popup/wui-select-popup.vue +1 -0
  51. package/components/wui-tree-page/wui-tree-page.vue +297 -297
  52. package/components/wui-update-component/wui-update-component.vue +221 -221
  53. package/composables/types/theme.ts +65 -65
  54. package/composables/types/user.ts +5 -5
  55. package/composables/useColorGenerator.ts +221 -221
  56. package/composables/useEnumes.ts +43 -43
  57. package/composables/useEventBus.ts +37 -37
  58. package/composables/useGlobalLoading.ts +47 -47
  59. package/composables/useGlobalMessage.ts +53 -53
  60. package/composables/useGlobalToast.ts +63 -63
  61. package/composables/useLocale.ts +54 -54
  62. package/composables/useManualTheme.ts +179 -179
  63. package/composables/useSectionMenus.ts +120 -120
  64. package/composables/useTabbar.ts +50 -50
  65. package/composables/useTheme.ts +74 -74
  66. package/composables/useUser.ts +24 -24
  67. package/index.d.ts +90 -90
  68. package/package.json +24 -24
  69. package/store/manualThemeStore.ts +143 -143
  70. package/store/persist.ts +41 -41
  71. package/store/themeStore.ts +74 -74
  72. package/store/userStore.ts +22 -22
  73. package/styles/dark-mode.scss +498 -498
  74. package/type.ts +154 -154
  75. package/utils/control-tree.ts +353 -353
  76. package/utils/eventBus.ts +36 -36
  77. package/utils/idata-scan.ts +99 -99
  78. package/utils/index.ts +979 -979
  79. 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>