af-mobile-client-vue3 1.0.95 → 1.0.97

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 (113) hide show
  1. package/.env +6 -6
  2. package/.env.development +4 -4
  3. package/.env.envoiceShow +6 -6
  4. package/.env.production +6 -6
  5. package/.husky/commit-msg +1 -1
  6. package/.husky/pre-commit +1 -1
  7. package/.vscode/settings.json +61 -61
  8. package/build/vite/index.ts +91 -91
  9. package/eslint.config.js +9 -1
  10. package/mock/modules/user.mock.ts +152 -152
  11. package/package.json +2 -1
  12. package/public/favicon.svg +4 -4
  13. package/public/safari-pinned-tab.svg +32 -32
  14. package/scripts/verifyCommit.js +19 -19
  15. package/src/App.vue +43 -43
  16. package/src/api/user/index.ts +40 -40
  17. package/src/bootstrap.ts +18 -18
  18. package/src/components/core/App/MicroAppView.vue +3 -3
  19. package/src/components/core/NavBar/index.vue +12 -12
  20. package/src/components/core/SvgIcon/index.vue +1 -1
  21. package/src/components/core/Tabbar/index.vue +38 -38
  22. package/src/components/core/Uploader/index.vue +1 -1
  23. package/src/components/core/XGridDropOption/index.vue +151 -151
  24. package/src/components/core/XMultiSelect/index.vue +183 -183
  25. package/src/components/data/XCellDetail/index.vue +106 -106
  26. package/src/components/data/XCellList/XCellList.md +28 -28
  27. package/src/components/data/XCellList/index.vue +50 -11
  28. package/src/components/data/XCellListFilter/QrScanner/index.vue +1 -1
  29. package/src/components/data/XCellListFilter/VpnRecognition/index.vue +3 -3
  30. package/src/components/data/XCellListFilter/index.vue +160 -62
  31. package/src/components/data/XForm/index.vue +2 -2
  32. package/src/components/data/XFormGroup/index.vue +3 -3
  33. package/src/components/data/XFormItem/index.vue +25 -26
  34. package/src/components/data/XOlMap/demo.vue +209 -0
  35. package/src/components/data/XOlMap/index.vue +644 -0
  36. package/src/components/data/XReportForm/XReportFormJsonRender.vue +220 -220
  37. package/src/components/data/XReportForm/index.vue +1079 -1079
  38. package/src/components/data/XReportGrid/XAddReport/XAddReport.vue +4 -7
  39. package/src/components/data/XReportGrid/XAddReport/index.md +3 -7
  40. package/src/components/data/XReportGrid/XAddReport/index.ts +2 -2
  41. package/src/components/data/XReportGrid/XReport.vue +25 -38
  42. package/src/components/data/XReportGrid/XReportDesign.vue +46 -46
  43. package/src/components/data/XReportGrid/XReportDrawer/XReportDrawer.vue +3 -3
  44. package/src/components/data/XReportGrid/XReportDrawer/index.ts +2 -2
  45. package/src/components/data/XReportGrid/XReportJsonRender.vue +20 -7
  46. package/src/components/data/XReportGrid/XReportTrGroup.vue +4 -4
  47. package/src/components/data/XReportGrid/index.md +4 -6
  48. package/src/components/data/XSignature/index.vue +285 -285
  49. package/src/components/data/XTag/index.vue +10 -10
  50. package/src/components/layout/NormalDataLayout/index.vue +70 -70
  51. package/src/components/layout/TabBarLayout/index.vue +40 -40
  52. package/src/components.d.ts +53 -53
  53. package/src/env.d.ts +16 -16
  54. package/src/font-style/font.css +3 -3
  55. package/src/hooks/useCommon.ts +9 -9
  56. package/src/layout/GridView/index.vue +1 -1
  57. package/src/layout/PageLayout.vue +4 -4
  58. package/src/layout/SingleLayout.vue +2 -2
  59. package/src/locales/en-US.json +25 -25
  60. package/src/locales/zh-CN.json +25 -25
  61. package/src/plugins/AppData.ts +38 -38
  62. package/src/plugins/index.ts +1 -1
  63. package/src/router/guards.ts +59 -59
  64. package/src/router/index.ts +61 -60
  65. package/src/router/invoiceRoutes.ts +33 -33
  66. package/src/router/routes.ts +20 -14
  67. package/src/services/api/common.ts +109 -109
  68. package/src/services/api/manage.ts +8 -8
  69. package/src/services/restTools.ts +52 -52
  70. package/src/services/v3Api.ts +46 -35
  71. package/src/stores/modules/cachedView.ts +1 -1
  72. package/src/stores/modules/setting.ts +52 -52
  73. package/src/stores/modules/user.ts +5 -5
  74. package/src/stores/mutation-type.ts +7 -7
  75. package/src/styles/app.less +6 -1
  76. package/src/utils/Storage.ts +1 -1
  77. package/src/utils/authority-utils.ts +84 -84
  78. package/src/utils/crypto.ts +39 -39
  79. package/src/utils/http/index.ts +6 -6
  80. package/src/utils/i18n.ts +41 -41
  81. package/src/utils/indexedDB.ts +180 -180
  82. package/src/utils/mobileUtil.ts +26 -26
  83. package/src/utils/routerUtil.ts +271 -271
  84. package/src/utils/runEvalFunction.ts +13 -13
  85. package/src/utils/validate.ts +1 -1
  86. package/src/utils/wechatUtil.ts +9 -9
  87. package/src/views/chat/index.vue +1 -1
  88. package/src/views/common/LoadError.vue +64 -64
  89. package/src/views/common/NotFound.vue +68 -68
  90. package/src/views/component/EvaluateRecordView/index.vue +40 -40
  91. package/src/views/component/XCellDetailView/index.vue +217 -216
  92. package/src/views/component/XCellListView/index.vue +1 -1
  93. package/src/views/component/XFormAppraiseView/index.vue +4 -4
  94. package/src/views/component/XFormGroupView/index.vue +1 -1
  95. package/src/views/component/XFormView/index.vue +6 -7
  96. package/src/views/component/XReportFormIframeView/index.vue +47 -47
  97. package/src/views/component/XReportFormView/index.vue +13 -13
  98. package/src/views/component/XReportGridView/index.vue +2 -3
  99. package/src/views/component/XSignatureView/index.vue +50 -50
  100. package/src/views/component/index.vue +4 -4
  101. package/src/views/component/menu.vue +117 -117
  102. package/src/views/component/notice.vue +46 -46
  103. package/src/views/component/topNav.vue +36 -36
  104. package/src/views/invoiceShow/index.vue +61 -62
  105. package/src/views/user/login/ForgetPasswordForm.vue +94 -93
  106. package/src/views/user/login/LoginForm.vue +8 -7
  107. package/src/views/user/login/LoginTitle.vue +68 -68
  108. package/src/views/user/login/index.vue +22 -22
  109. package/src/views/user/my/index.vue +230 -230
  110. package/src/vue-router.d.ts +9 -9
  111. package/tsconfig.json +43 -43
  112. package/uno.config.ts +1 -1
  113. package/vite.config.ts +123 -123
@@ -2,21 +2,19 @@
2
2
 
3
3
  动态报表控件,根据JSON配置生成一个完整的报表
4
4
 
5
-
6
5
  ## 何时使用
7
6
 
8
7
  当需要一个动态生成的报表时
9
8
 
10
-
11
9
  引用方式:
12
10
 
13
11
  ```javascript
14
12
  import XReport from '@vue2-client/base-client/components/XReport/XReport'
15
13
 
16
14
  export default {
17
- components: {
18
- XReport
19
- }
15
+ components: {
16
+ XReport
17
+ }
20
18
  }
21
19
  ```
22
20
 
@@ -34,7 +32,7 @@ export default {
34
32
  ## 例子1
35
33
  ----
36
34
  ```vue
37
- <XReport :config-name="'test_tableConfig'" :activated-slot-name="'test_tableConfig_slot'"/>
35
+ <XReport :config-name="'test_tableConfig'" :activated-slot-name="'test_tableConfig_slot'" />
38
36
  ```
39
37
  ## 注意事项
40
38
 
@@ -1,285 +1,285 @@
1
- <script setup lang="ts">
2
- import { computed, nextTick, onBeforeUnmount, onMounted, ref } from 'vue'
3
- import {
4
- Button as VanButton,
5
- Icon as VanIcon,
6
- Popup as VanPopup,
7
- Signature as VanSignature,
8
- showToast,
9
- } from 'vant'
10
-
11
- interface Props {
12
- /** 签名图片的 base64 字符串 */
13
- modelValue?: string
14
- /** 签名笔画的宽度,默认为 3 */
15
- lineWidth?: number
16
- /** 签名笔画的颜色,默认为黑色 '#000' */
17
- strokeStyle?: string
18
- /** 签名画布的背景颜色,默认为白色 '#fff' */
19
- backgroundColor?: string
20
- /** 未签名时按钮显示的文字,默认为 '签名' */
21
- buttonText?: string
22
- /** 自定义 CSS 类名 */
23
- customClass?: string
24
- /** 是否隐藏底部按钮组,默认为 false */
25
- hideButtons?: boolean
26
- /** 按钮尺寸,可选值为 'small' | 'normal' | 'large',默认为 'normal' */
27
- buttonSize?: 'small' | 'normal' | 'large'
28
- /** 确认按钮文字,默认为 '确认' */
29
- confirmButtonText?: string
30
- /** 清除按钮文字,默认为 '清除' */
31
- clearButtonText?: string
32
- /** 是否显示签名预览图,默认为 true */
33
- showPreview?: boolean
34
- /** 签名完成后是否显示重新签名按钮,默认为 false */
35
- showButtonAfterSigned?: boolean
36
- }
37
-
38
- withDefaults(defineProps<Props>(), {
39
- modelValue: '',
40
- lineWidth: 3,
41
- strokeStyle: '#000',
42
- backgroundColor: '#fff',
43
- buttonText: '签名',
44
- customClass: '',
45
- hideButtons: false,
46
- buttonSize: 'normal',
47
- confirmButtonText: '确认',
48
- clearButtonText: '清除',
49
- showPreview: true,
50
- showButtonAfterSigned: false,
51
- })
52
-
53
- const emit = defineEmits<{
54
- 'update:modelValue': [value: string]
55
- 'save': [image: string]
56
- 'clear': []
57
- }>()
58
-
59
- interface SignatureResult {
60
- image: string
61
- }
62
-
63
- const showSignature = ref(false)
64
-
65
- function onSubmit({ image }: SignatureResult) {
66
- if (!image) {
67
- showToast('获取签名失败')
68
- return
69
- }
70
- emit('update:modelValue', image)
71
- emit('save', image)
72
- showSignature.value = false
73
- }
74
-
75
- function onClear() {
76
- emit('update:modelValue', '')
77
- emit('clear')
78
- showSignature.value = false
79
- }
80
-
81
- const signatureRef = ref()
82
-
83
- function handleSubmit() {
84
- try {
85
- signatureRef.value?.submit()
86
- }
87
- catch (error) {
88
- showToast('签名提交失败')
89
- console.error('Signature submit error:', error)
90
- }
91
- }
92
-
93
- const popupStyle = computed(() => ({
94
- width: '100%',
95
- height: window.innerHeight > window.innerWidth ? 'auto' : '100%',
96
- }))
97
-
98
- function handleOrientationChange() {
99
- if (showSignature.value) {
100
- nextTick(() => {
101
- signatureRef.value?.resize()
102
- })
103
- }
104
- }
105
-
106
- onMounted(() => {
107
- window.addEventListener('orientationchange', handleOrientationChange)
108
- })
109
-
110
- onBeforeUnmount(() => {
111
- window.removeEventListener('orientationchange', handleOrientationChange)
112
- })
113
- </script>
114
-
115
- <template>
116
- <div class="x-signature" role="application" aria-label="签名面板">
117
- <div class="signature-content">
118
- <div v-if="modelValue && showPreview" class="signature-preview" @click="showSignature = true">
119
- <img :src="modelValue" alt="签名预览">
120
- </div>
121
- <VanButton
122
- v-if="!modelValue || showButtonAfterSigned"
123
- type="primary"
124
- size="small"
125
- aria-label="打开签名面板"
126
- @click="showSignature = true"
127
- >
128
- {{ modelValue ? '重新签名' : buttonText }}
129
- </VanButton>
130
- </div>
131
-
132
- <VanPopup v-model:show="showSignature" class="signature-popup" :style="popupStyle">
133
- <div class="signature-wrapper">
134
- <VanSignature
135
- ref="signatureRef"
136
- :line-width="lineWidth"
137
- :stroke-style="strokeStyle"
138
- :background-color="backgroundColor"
139
- @submit="onSubmit"
140
- @clear="onClear"
141
- />
142
- <!-- 自定义浮动按钮,仅在横屏时显示 -->
143
- <div class="custom-buttons">
144
- <VanButton round size="small" aria-label="清除签名" @click="onClear">
145
- <VanIcon name="delete" />
146
- </VanButton>
147
- <VanButton round type="primary" size="small" @click="handleSubmit">
148
- <VanIcon name="success" />
149
- </VanButton>
150
- </div>
151
- </div>
152
- </VanPopup>
153
- </div>
154
- </template>
155
-
156
- <style scoped lang="less">
157
- .x-signature {
158
- width: 100%;
159
-
160
- .signature-content {
161
- display: flex;
162
- align-items: center;
163
- gap: 12px;
164
- }
165
-
166
- .signature-preview {
167
- flex: 1;
168
- border: 1px solid #eee;
169
- border-radius: 4px;
170
- padding: 8px;
171
- display: flex;
172
- align-items: center;
173
-
174
- img {
175
- max-width: 100%;
176
- max-height: 36px;
177
- height: auto;
178
- display: block;
179
- }
180
- }
181
-
182
- .van-button {
183
- flex-shrink: 0;
184
- }
185
-
186
- :deep(.van-popup) {
187
- max-width: none !important;
188
- width: 100% !important;
189
- top: 20% !important;
190
- transform: none !important;
191
- transition: all 0.3s ease-in-out;
192
- }
193
-
194
- .signature-wrapper {
195
- width: 100%;
196
- height: 100%;
197
- position: relative;
198
-
199
- :deep(.van-signature) {
200
- width: 100% !important;
201
- height: 100% !important;
202
- max-width: none !important;
203
- }
204
-
205
- // 默认隐藏自定义按钮
206
- .custom-buttons {
207
- display: none;
208
- }
209
- }
210
-
211
- // 横屏模式样式
212
- @media screen and (orientation: landscape) {
213
- :deep(.van-popup) {
214
- top: 0 !important;
215
- right: 0 !important;
216
- bottom: 0 !important;
217
- left: 0 !important;
218
- width: 100% !important;
219
- height: 100% !important;
220
- display: flex;
221
- flex-direction: column;
222
- }
223
-
224
- .signature-wrapper {
225
- flex: 1;
226
- display: flex;
227
- justify-content: center;
228
- align-items: center;
229
- padding: env(safe-area-inset-top) env(safe-area-inset-right)
230
- env(safe-area-inset-bottom) env(safe-area-inset-left);
231
-
232
- :deep(.van-signature) {
233
- // 隐藏原有的底部按钮
234
- .van-signature__footer {
235
- display: none;
236
- }
237
- }
238
-
239
- :deep(.van-signature__content) {
240
- height: 95% !important;
241
- }
242
-
243
- // 显示自定义浮动按钮
244
- .custom-buttons {
245
- position: absolute;
246
- right: 32px;
247
- bottom: 32px;
248
- display: flex;
249
- gap: 16px;
250
-
251
- .van-button {
252
- width: 48px !important;
253
- height: 48px !important;
254
- border-radius: 50% !important;
255
- padding: 0 !important;
256
- display: flex;
257
- align-items: center;
258
- justify-content: center;
259
- box-shadow: 0 2px 8px rgba(0, 0, 0, 0.15);
260
- transition: transform 0.2s ease;
261
-
262
- &--default {
263
- background: #fff;
264
- }
265
-
266
- &:active {
267
- transform: scale(0.95);
268
- }
269
- }
270
- }
271
- }
272
- }
273
-
274
- // 优化按钮触摸反馈
275
- .custom-buttons {
276
- .van-button {
277
- transition: transform 0.2s ease;
278
-
279
- &:active {
280
- transform: scale(0.95);
281
- }
282
- }
283
- }
284
- }
285
- </style>
1
+ <script setup lang="ts">
2
+ import {
3
+ showToast,
4
+ Button as VanButton,
5
+ Icon as VanIcon,
6
+ Popup as VanPopup,
7
+ Signature as VanSignature,
8
+ } from 'vant'
9
+ import { computed, nextTick, onBeforeUnmount, onMounted, ref } from 'vue'
10
+
11
+ interface Props {
12
+ /** 签名图片的 base64 字符串 */
13
+ modelValue?: string
14
+ /** 签名笔画的宽度,默认为 3 */
15
+ lineWidth?: number
16
+ /** 签名笔画的颜色,默认为黑色 '#000' */
17
+ strokeStyle?: string
18
+ /** 签名画布的背景颜色,默认为白色 '#fff' */
19
+ backgroundColor?: string
20
+ /** 未签名时按钮显示的文字,默认为 '签名' */
21
+ buttonText?: string
22
+ /** 自定义 CSS 类名 */
23
+ customClass?: string
24
+ /** 是否隐藏底部按钮组,默认为 false */
25
+ hideButtons?: boolean
26
+ /** 按钮尺寸,可选值为 'small' | 'normal' | 'large',默认为 'normal' */
27
+ buttonSize?: 'small' | 'normal' | 'large'
28
+ /** 确认按钮文字,默认为 '确认' */
29
+ confirmButtonText?: string
30
+ /** 清除按钮文字,默认为 '清除' */
31
+ clearButtonText?: string
32
+ /** 是否显示签名预览图,默认为 true */
33
+ showPreview?: boolean
34
+ /** 签名完成后是否显示重新签名按钮,默认为 false */
35
+ showButtonAfterSigned?: boolean
36
+ }
37
+
38
+ withDefaults(defineProps<Props>(), {
39
+ modelValue: '',
40
+ lineWidth: 3,
41
+ strokeStyle: '#000',
42
+ backgroundColor: '#fff',
43
+ buttonText: '签名',
44
+ customClass: '',
45
+ hideButtons: false,
46
+ buttonSize: 'normal',
47
+ confirmButtonText: '确认',
48
+ clearButtonText: '清除',
49
+ showPreview: true,
50
+ showButtonAfterSigned: false,
51
+ })
52
+
53
+ const emit = defineEmits<{
54
+ 'update:modelValue': [value: string]
55
+ 'save': [image: string]
56
+ 'clear': []
57
+ }>()
58
+
59
+ interface SignatureResult {
60
+ image: string
61
+ }
62
+
63
+ const showSignature = ref(false)
64
+
65
+ function onSubmit({ image }: SignatureResult) {
66
+ if (!image) {
67
+ showToast('获取签名失败')
68
+ return
69
+ }
70
+ emit('update:modelValue', image)
71
+ emit('save', image)
72
+ showSignature.value = false
73
+ }
74
+
75
+ function onClear() {
76
+ emit('update:modelValue', '')
77
+ emit('clear')
78
+ showSignature.value = false
79
+ }
80
+
81
+ const signatureRef = ref()
82
+
83
+ function handleSubmit() {
84
+ try {
85
+ signatureRef.value?.submit()
86
+ }
87
+ catch (error) {
88
+ showToast('签名提交失败')
89
+ console.error('Signature submit error:', error)
90
+ }
91
+ }
92
+
93
+ const popupStyle = computed(() => ({
94
+ width: '100%',
95
+ height: window.innerHeight > window.innerWidth ? 'auto' : '100%',
96
+ }))
97
+
98
+ function handleOrientationChange() {
99
+ if (showSignature.value) {
100
+ nextTick(() => {
101
+ signatureRef.value?.resize()
102
+ })
103
+ }
104
+ }
105
+
106
+ onMounted(() => {
107
+ window.addEventListener('orientationchange', handleOrientationChange)
108
+ })
109
+
110
+ onBeforeUnmount(() => {
111
+ window.removeEventListener('orientationchange', handleOrientationChange)
112
+ })
113
+ </script>
114
+
115
+ <template>
116
+ <div class="x-signature" role="application" aria-label="签名面板">
117
+ <div class="signature-content">
118
+ <div v-if="modelValue && showPreview" class="signature-preview" @click="showSignature = true">
119
+ <img :src="modelValue" alt="签名预览">
120
+ </div>
121
+ <VanButton
122
+ v-if="!modelValue || showButtonAfterSigned"
123
+ type="primary"
124
+ size="small"
125
+ aria-label="打开签名面板"
126
+ @click="showSignature = true"
127
+ >
128
+ {{ modelValue ? '重新签名' : buttonText }}
129
+ </VanButton>
130
+ </div>
131
+
132
+ <VanPopup v-model:show="showSignature" class="signature-popup" :style="popupStyle">
133
+ <div class="signature-wrapper">
134
+ <VanSignature
135
+ ref="signatureRef"
136
+ :line-width="lineWidth"
137
+ :stroke-style="strokeStyle"
138
+ :background-color="backgroundColor"
139
+ @submit="onSubmit"
140
+ @clear="onClear"
141
+ />
142
+ <!-- 自定义浮动按钮,仅在横屏时显示 -->
143
+ <div class="custom-buttons">
144
+ <VanButton round size="small" aria-label="清除签名" @click="onClear">
145
+ <VanIcon name="delete" />
146
+ </VanButton>
147
+ <VanButton round type="primary" size="small" @click="handleSubmit">
148
+ <VanIcon name="success" />
149
+ </VanButton>
150
+ </div>
151
+ </div>
152
+ </VanPopup>
153
+ </div>
154
+ </template>
155
+
156
+ <style scoped lang="less">
157
+ .x-signature {
158
+ width: 100%;
159
+
160
+ .signature-content {
161
+ display: flex;
162
+ align-items: center;
163
+ gap: 12px;
164
+ }
165
+
166
+ .signature-preview {
167
+ flex: 1;
168
+ border: 1px solid #eee;
169
+ border-radius: 4px;
170
+ padding: 8px;
171
+ display: flex;
172
+ align-items: center;
173
+
174
+ img {
175
+ max-width: 100%;
176
+ max-height: 36px;
177
+ height: auto;
178
+ display: block;
179
+ }
180
+ }
181
+
182
+ .van-button {
183
+ flex-shrink: 0;
184
+ }
185
+
186
+ :deep(.van-popup) {
187
+ max-width: none !important;
188
+ width: 100% !important;
189
+ top: 20% !important;
190
+ transform: none !important;
191
+ transition: all 0.3s ease-in-out;
192
+ }
193
+
194
+ .signature-wrapper {
195
+ width: 100%;
196
+ height: 100%;
197
+ position: relative;
198
+
199
+ :deep(.van-signature) {
200
+ width: 100% !important;
201
+ height: 100% !important;
202
+ max-width: none !important;
203
+ }
204
+
205
+ // 默认隐藏自定义按钮
206
+ .custom-buttons {
207
+ display: none;
208
+ }
209
+ }
210
+
211
+ // 横屏模式样式
212
+ @media screen and (orientation: landscape) {
213
+ :deep(.van-popup) {
214
+ top: 0 !important;
215
+ right: 0 !important;
216
+ bottom: 0 !important;
217
+ left: 0 !important;
218
+ width: 100% !important;
219
+ height: 100% !important;
220
+ display: flex;
221
+ flex-direction: column;
222
+ }
223
+
224
+ .signature-wrapper {
225
+ flex: 1;
226
+ display: flex;
227
+ justify-content: center;
228
+ align-items: center;
229
+ padding: env(safe-area-inset-top) env(safe-area-inset-right)
230
+ env(safe-area-inset-bottom) env(safe-area-inset-left);
231
+
232
+ :deep(.van-signature) {
233
+ // 隐藏原有的底部按钮
234
+ .van-signature__footer {
235
+ display: none;
236
+ }
237
+ }
238
+
239
+ :deep(.van-signature__content) {
240
+ height: 95% !important;
241
+ }
242
+
243
+ // 显示自定义浮动按钮
244
+ .custom-buttons {
245
+ position: absolute;
246
+ right: 32px;
247
+ bottom: 32px;
248
+ display: flex;
249
+ gap: 16px;
250
+
251
+ .van-button {
252
+ width: 48px !important;
253
+ height: 48px !important;
254
+ border-radius: 50% !important;
255
+ padding: 0 !important;
256
+ display: flex;
257
+ align-items: center;
258
+ justify-content: center;
259
+ box-shadow: 0 2px 8px rgba(0, 0, 0, 0.15);
260
+ transition: transform 0.2s ease;
261
+
262
+ &--default {
263
+ background: #fff;
264
+ }
265
+
266
+ &:active {
267
+ transform: scale(0.95);
268
+ }
269
+ }
270
+ }
271
+ }
272
+ }
273
+
274
+ // 优化按钮触摸反馈
275
+ .custom-buttons {
276
+ .van-button {
277
+ transition: transform 0.2s ease;
278
+
279
+ &:active {
280
+ transform: scale(0.95);
281
+ }
282
+ }
283
+ }
284
+ }
285
+ </style>
@@ -1,10 +1,10 @@
1
- <script setup lang="ts">
2
- </script>
3
-
4
- <template>
5
- <VanTag />
6
- </template>
7
-
8
- <style scoped lang="less">
9
-
10
- </style>
1
+ <script setup lang="ts">
2
+ </script>
3
+
4
+ <template>
5
+ <VanTag />
6
+ </template>
7
+
8
+ <style scoped lang="less">
9
+
10
+ </style>