af-mobile-client-vue3 1.0.94 → 1.0.96
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/.env +6 -6
- package/.env.development +4 -4
- package/.env.envoiceShow +6 -6
- package/.env.production +6 -6
- package/.husky/commit-msg +1 -1
- package/.husky/pre-commit +1 -1
- package/.vscode/settings.json +61 -61
- package/build/vite/index.ts +91 -91
- package/eslint.config.js +9 -1
- package/mock/modules/user.mock.ts +152 -152
- package/package.json +1 -1
- package/public/favicon.svg +4 -4
- package/public/safari-pinned-tab.svg +32 -32
- package/scripts/verifyCommit.js +19 -19
- package/src/App.vue +43 -43
- package/src/api/user/index.ts +40 -40
- package/src/bootstrap.ts +18 -18
- package/src/components/core/App/MicroAppView.vue +3 -3
- package/src/components/core/NavBar/index.vue +12 -12
- package/src/components/core/SvgIcon/index.vue +1 -1
- package/src/components/core/Tabbar/index.vue +38 -38
- package/src/components/core/Uploader/index.vue +1 -1
- package/src/components/core/XGridDropOption/index.vue +151 -151
- package/src/components/core/XMultiSelect/index.vue +183 -183
- package/src/components/data/XCellDetail/index.vue +106 -106
- package/src/components/data/XCellList/XCellList.md +28 -28
- package/src/components/data/XCellList/index.vue +50 -11
- package/src/components/data/XCellListFilter/QrScanner/index.vue +1 -1
- package/src/components/data/XCellListFilter/VpnRecognition/index.vue +3 -3
- package/src/components/data/XCellListFilter/index.vue +160 -62
- package/src/components/data/XForm/index.vue +2 -2
- package/src/components/data/XFormGroup/index.vue +3 -3
- package/src/components/data/XFormItem/index.vue +25 -26
- package/src/components/data/XOlMap/demo.vue +209 -0
- package/src/components/data/XOlMap/index.vue +644 -0
- package/src/components/data/XReportForm/XReportFormJsonRender.vue +220 -220
- package/src/components/data/XReportForm/index.vue +1079 -1079
- package/src/components/data/XReportGrid/XAddReport/XAddReport.vue +4 -7
- package/src/components/data/XReportGrid/XAddReport/index.md +3 -7
- package/src/components/data/XReportGrid/XAddReport/index.ts +2 -2
- package/src/components/data/XReportGrid/XReport.vue +25 -38
- package/src/components/data/XReportGrid/XReportDesign.vue +46 -46
- package/src/components/data/XReportGrid/XReportDrawer/XReportDrawer.vue +3 -3
- package/src/components/data/XReportGrid/XReportDrawer/index.ts +2 -2
- package/src/components/data/XReportGrid/XReportJsonRender.vue +20 -7
- package/src/components/data/XReportGrid/XReportTrGroup.vue +4 -4
- package/src/components/data/XReportGrid/index.md +4 -6
- package/src/components/data/XSignature/index.vue +285 -285
- package/src/components/data/XTag/index.vue +10 -10
- package/src/components/layout/NormalDataLayout/index.vue +70 -70
- package/src/components/layout/TabBarLayout/index.vue +40 -40
- package/src/components.d.ts +53 -53
- package/src/env.d.ts +16 -16
- package/src/font-style/font.css +3 -3
- package/src/hooks/useCommon.ts +9 -9
- package/src/layout/GridView/index.vue +1 -1
- package/src/layout/PageLayout.vue +5 -5
- package/src/layout/SingleLayout.vue +3 -3
- package/src/locales/en-US.json +25 -25
- package/src/locales/zh-CN.json +25 -25
- package/src/plugins/AppData.ts +38 -38
- package/src/plugins/index.ts +1 -1
- package/src/router/guards.ts +59 -59
- package/src/router/index.ts +61 -60
- package/src/router/invoiceRoutes.ts +33 -33
- package/src/router/routes.ts +20 -14
- package/src/services/api/common.ts +109 -109
- package/src/services/api/manage.ts +8 -8
- package/src/services/restTools.ts +52 -52
- package/src/services/v3Api.ts +46 -35
- package/src/stores/modules/cachedView.ts +1 -1
- package/src/stores/modules/setting.ts +52 -52
- package/src/stores/modules/user.ts +5 -5
- package/src/stores/mutation-type.ts +7 -7
- package/src/styles/app.less +6 -1
- package/src/utils/Storage.ts +1 -1
- package/src/utils/authority-utils.ts +84 -84
- package/src/utils/crypto.ts +39 -39
- package/src/utils/http/index.ts +6 -6
- package/src/utils/i18n.ts +41 -41
- package/src/utils/indexedDB.ts +180 -180
- package/src/utils/mobileUtil.ts +26 -26
- package/src/utils/routerUtil.ts +271 -271
- package/src/utils/runEvalFunction.ts +13 -13
- package/src/utils/validate.ts +1 -1
- package/src/utils/wechatUtil.ts +9 -9
- package/src/views/chat/index.vue +1 -1
- package/src/views/common/LoadError.vue +64 -64
- package/src/views/common/NotFound.vue +68 -68
- package/src/views/component/EvaluateRecordView/index.vue +40 -40
- package/src/views/component/XCellDetailView/index.vue +217 -216
- package/src/views/component/XCellListView/index.vue +1 -1
- package/src/views/component/XFormAppraiseView/index.vue +4 -4
- package/src/views/component/XFormGroupView/index.vue +1 -1
- package/src/views/component/XFormView/index.vue +6 -7
- package/src/views/component/XReportFormIframeView/index.vue +47 -47
- package/src/views/component/XReportFormView/index.vue +13 -13
- package/src/views/component/XReportGridView/index.vue +2 -3
- package/src/views/component/XSignatureView/index.vue +50 -50
- package/src/views/component/index.vue +4 -4
- package/src/views/component/menu.vue +117 -117
- package/src/views/component/notice.vue +46 -46
- package/src/views/component/topNav.vue +36 -36
- package/src/views/invoiceShow/index.vue +61 -62
- package/src/views/user/login/ForgetPasswordForm.vue +94 -93
- package/src/views/user/login/LoginForm.vue +8 -7
- package/src/views/user/login/LoginTitle.vue +68 -68
- package/src/views/user/login/index.vue +22 -22
- package/src/views/user/my/index.vue +230 -230
- package/src/vue-router.d.ts +9 -9
- package/tsconfig.json +43 -43
- package/uno.config.ts +1 -1
- package/vite.config.ts +123 -123
|
@@ -1,8 +1,21 @@
|
|
|
1
1
|
<script setup lang="ts">
|
|
2
|
+
import type { Numeric } from 'vant/es/utils'
|
|
3
|
+
import Uploader from '@af-mobile-client-vue3/components/core/Uploader/index.vue'
|
|
4
|
+
import XGridDropOption from '@af-mobile-client-vue3/components/core/XGridDropOption/index.vue'
|
|
5
|
+
import XMultiSelect from '@af-mobile-client-vue3/components/core/XMultiSelect/index.vue'
|
|
6
|
+
import XSelect from '@af-mobile-client-vue3/components/core/XSelect/index.vue'
|
|
7
|
+
import { runLogic } from '@af-mobile-client-vue3/services/api/common'
|
|
8
|
+
import { searchToListOption, searchToOption } from '@af-mobile-client-vue3/services/v3Api'
|
|
9
|
+
import { useUserStore } from '@af-mobile-client-vue3/stores/modules/user'
|
|
10
|
+
import { getDict } from '@af-mobile-client-vue3/utils/dictUtil'
|
|
11
|
+
import { executeStrFunctionByContext } from '@af-mobile-client-vue3/utils/runEvalFunction'
|
|
12
|
+
import { areaList } from '@vant/area-data'
|
|
13
|
+
import { debounce } from 'lodash-es'
|
|
2
14
|
import {
|
|
3
15
|
Area as VanArea,
|
|
4
16
|
Calendar as VanCalendar,
|
|
5
17
|
Checkbox as VanCheckbox,
|
|
18
|
+
CheckboxGroup as vanCheckboxGroup,
|
|
6
19
|
DatePicker as VanDatePicker,
|
|
7
20
|
Field as VanField,
|
|
8
21
|
Picker as VanPicker,
|
|
@@ -15,21 +28,8 @@ import {
|
|
|
15
28
|
Stepper as VanStepper,
|
|
16
29
|
Switch as VanSwitch,
|
|
17
30
|
TimePicker as VanTimePicker,
|
|
18
|
-
CheckboxGroup as vanCheckboxGroup,
|
|
19
31
|
} from 'vant'
|
|
20
32
|
import { computed, defineEmits, defineProps, getCurrentInstance, onBeforeMount, ref, watch } from 'vue'
|
|
21
|
-
import { areaList } from '@vant/area-data'
|
|
22
|
-
import { runLogic } from '@af-mobile-client-vue3/services/api/common'
|
|
23
|
-
import Uploader from '@af-mobile-client-vue3/components/core/Uploader/index.vue'
|
|
24
|
-
import XSelect from '@af-mobile-client-vue3/components/core/XSelect/index.vue'
|
|
25
|
-
import XMultiSelect from '@af-mobile-client-vue3/components/core/XMultiSelect/index.vue'
|
|
26
|
-
import XGridDropOption from '@af-mobile-client-vue3/components/core/XGridDropOption/index.vue'
|
|
27
|
-
import type { Numeric } from 'vant/es/utils'
|
|
28
|
-
import { getDict } from '@af-mobile-client-vue3/utils/dictUtil'
|
|
29
|
-
import { executeStrFunctionByContext } from '@af-mobile-client-vue3/utils/runEvalFunction'
|
|
30
|
-
import { useUserStore } from '@af-mobile-client-vue3/stores/modules/user'
|
|
31
|
-
import { debounce } from 'lodash-es'
|
|
32
|
-
import { searchToListOption, searchToOption } from '@af-mobile-client-vue3/services/v3Api'
|
|
33
33
|
|
|
34
34
|
const props = defineProps({
|
|
35
35
|
attr: {
|
|
@@ -87,8 +87,8 @@ const props = defineProps({
|
|
|
87
87
|
|
|
88
88
|
const emits = defineEmits(['update:modelValue'])
|
|
89
89
|
// 判断并初始化防抖函数
|
|
90
|
-
let debouncedUserLinkFunc:
|
|
91
|
-
let debouncedDepLinkFunc:
|
|
90
|
+
let debouncedUserLinkFunc: (() => void) | null = null
|
|
91
|
+
let debouncedDepLinkFunc: (() => void) | null = null
|
|
92
92
|
|
|
93
93
|
const { attr, form, mode, serviceName, getDataParams, columnsField } = props
|
|
94
94
|
const calendarShow = ref(false)
|
|
@@ -237,7 +237,7 @@ function formTypeCheck(attr, value) {
|
|
|
237
237
|
}
|
|
238
238
|
break
|
|
239
239
|
case 'number':
|
|
240
|
-
if (!/^[+-]?(
|
|
240
|
+
if (!/^[+-]?(?:\d+(?:\.\d*)?|\.\d+)$/.test(value)) {
|
|
241
241
|
errorMessage.value = `${attr.name}必须为数字`
|
|
242
242
|
return
|
|
243
243
|
}
|
|
@@ -263,13 +263,13 @@ function formTypeCheck(attr, value) {
|
|
|
263
263
|
}
|
|
264
264
|
break
|
|
265
265
|
case 'email':
|
|
266
|
-
if (!/^[
|
|
266
|
+
if (!/^[\w.%+-]+@[a-z0-9.-]+\.[a-z]{2,}$/i.test(value)) {
|
|
267
267
|
errorMessage.value = `请输入正确的邮箱地址`
|
|
268
268
|
return
|
|
269
269
|
}
|
|
270
270
|
break
|
|
271
271
|
case 'idNumber':
|
|
272
|
-
if (!/^(
|
|
272
|
+
if (!/^(?:\d{15}|\d{17}[0-9X])$/.test(value)) {
|
|
273
273
|
errorMessage.value = `请输入正确的身份证号码`
|
|
274
274
|
return
|
|
275
275
|
}
|
|
@@ -281,13 +281,13 @@ function formTypeCheck(attr, value) {
|
|
|
281
281
|
}
|
|
282
282
|
break
|
|
283
283
|
case 'landlineNumber':
|
|
284
|
-
if (!/^
|
|
284
|
+
if (!/^0\d{2,3}[-\s]?\d{7,8}$/.test(value)) {
|
|
285
285
|
errorMessage.value = `请输入正确的座机号码`
|
|
286
286
|
return
|
|
287
287
|
}
|
|
288
288
|
break
|
|
289
289
|
case 'greaterThanZero':
|
|
290
|
-
if (!/^(?:[1-9]\d*(?:\.\d*)?|\.\d+)(?:[
|
|
290
|
+
if (!/^(?:[1-9]\d*(?:\.\d*)?|\.\d+)(?:e[+-]?\d+)?$/i.test(value)) {
|
|
291
291
|
errorMessage.value = `请输入一个大于0的数字`
|
|
292
292
|
return
|
|
293
293
|
}
|
|
@@ -312,7 +312,7 @@ function formTypeCheck(attr, value) {
|
|
|
312
312
|
const status = ref(true)
|
|
313
313
|
// 提取函数体部分
|
|
314
314
|
// eslint-disable-next-line no-case-declarations
|
|
315
|
-
const funcBodyMatch = funcStr.match(/function\s*\(.*?\)\s
|
|
315
|
+
const funcBodyMatch = funcStr.match(/function\s*\(.*?\)\s*\{([\s\S]*)\}/)
|
|
316
316
|
if (!funcBodyMatch)
|
|
317
317
|
throw new Error('自定义校验函数不合法')
|
|
318
318
|
// eslint-disable-next-line no-case-declarations
|
|
@@ -624,7 +624,7 @@ function onPickerCancel() {
|
|
|
624
624
|
name="checkboxGroup"
|
|
625
625
|
:label="labelData"
|
|
626
626
|
:label-align="labelAlign"
|
|
627
|
-
|
|
627
|
+
:input-align="attr.inputAlign ? attr.inputAlign : 'left'"
|
|
628
628
|
:rules="[{ required: attr.rule.required === 'true', message: `请选择${attr.name}` }]"
|
|
629
629
|
>
|
|
630
630
|
<template #input>
|
|
@@ -713,7 +713,7 @@ function onPickerCancel() {
|
|
|
713
713
|
:rules="[{ required: attr.rule.required === 'true', message: '请选择' }]"
|
|
714
714
|
>
|
|
715
715
|
<template #input>
|
|
716
|
-
<VanStepper
|
|
716
|
+
<VanStepper v-model="(localValue as string)" :disabled="readonly" />
|
|
717
717
|
</template>
|
|
718
718
|
</VanField>
|
|
719
719
|
|
|
@@ -727,7 +727,7 @@ function onPickerCancel() {
|
|
|
727
727
|
:rules="[{ required: attr.rule.required === 'true', message: '请选择' }]"
|
|
728
728
|
>
|
|
729
729
|
<template #input>
|
|
730
|
-
<VanRate :size="25" :readonly="readonly" void-color="#eee" void-icon="star" color="#ffd21e"
|
|
730
|
+
<VanRate v-model="(localValue as number)" :size="25" :readonly="readonly" void-color="#eee" void-icon="star" color="#ffd21e" />
|
|
731
731
|
</template>
|
|
732
732
|
</VanField>
|
|
733
733
|
|
|
@@ -741,7 +741,7 @@ function onPickerCancel() {
|
|
|
741
741
|
:rules="[{ required: attr.rule.required === 'true', message: '请选择' }]"
|
|
742
742
|
>
|
|
743
743
|
<template #input>
|
|
744
|
-
<VanSlider
|
|
744
|
+
<VanSlider v-model="(localValue as number)" :readonly="readonly" />
|
|
745
745
|
</template>
|
|
746
746
|
</VanField>
|
|
747
747
|
|
|
@@ -969,7 +969,6 @@ function onPickerCancel() {
|
|
|
969
969
|
:maxlength="attr.maxlength ? attr.maxlength : 200"
|
|
970
970
|
:placeholder="attr.placeholder ? attr.placeholder : `请输入${attr.name}`"
|
|
971
971
|
show-word-limit
|
|
972
|
-
label-align="top"
|
|
973
972
|
:rules="[{ required: attr.rule.required === 'true', message: `请填写${attr.name}` }]"
|
|
974
973
|
/>
|
|
975
974
|
|
|
@@ -0,0 +1,209 @@
|
|
|
1
|
+
<script setup lang="ts">
|
|
2
|
+
import { onMounted, ref } from 'vue'
|
|
3
|
+
import XOlMap from './index.vue'
|
|
4
|
+
import 'vant/lib/index.css'
|
|
5
|
+
|
|
6
|
+
const mapRef = ref()
|
|
7
|
+
|
|
8
|
+
onMounted(() => {
|
|
9
|
+
// 初始化地图
|
|
10
|
+
mapRef.value.init({
|
|
11
|
+
center: [108.948024, 34.263161], // 西安坐标
|
|
12
|
+
zoom: 12,
|
|
13
|
+
maxZoom: 18,
|
|
14
|
+
minZoom: 4,
|
|
15
|
+
tianDiTuKey: 'c16876b28898637c0a1a68b3fa410504',
|
|
16
|
+
})
|
|
17
|
+
})
|
|
18
|
+
|
|
19
|
+
// 地图控制函数
|
|
20
|
+
function handleSetCenter(): void {
|
|
21
|
+
// 切换到北京
|
|
22
|
+
mapRef.value.setCenter([116.404, 39.915])
|
|
23
|
+
}
|
|
24
|
+
|
|
25
|
+
function handleSetZoom(): void {
|
|
26
|
+
// 设置缩放级别为14
|
|
27
|
+
mapRef.value.setZoom(14)
|
|
28
|
+
}
|
|
29
|
+
|
|
30
|
+
function handleGetZoom(): void {
|
|
31
|
+
// 获取当前缩放级别
|
|
32
|
+
const zoom = mapRef.value.getZoom()
|
|
33
|
+
// eslint-disable-next-line no-alert
|
|
34
|
+
alert(`当前缩放级别:${zoom}`)
|
|
35
|
+
}
|
|
36
|
+
|
|
37
|
+
function handleSetCenterAndZoom(): void {
|
|
38
|
+
// 切换到杭州并设置缩放级别
|
|
39
|
+
mapRef.value.setCenterAndZoom([120.153576, 30.287459], 15)
|
|
40
|
+
}
|
|
41
|
+
|
|
42
|
+
// 添加点位示例,创建两种类型
|
|
43
|
+
function handleAddPoints(): void {
|
|
44
|
+
mapRef.value.addVectorPoints({
|
|
45
|
+
icon: 'https://a.amap.com/jsapi_demos/static/demo-center/icons/poi-marker-red.png',
|
|
46
|
+
iconAnchor: [0.5, 1],
|
|
47
|
+
data: [
|
|
48
|
+
{
|
|
49
|
+
longitude: 108.988024,
|
|
50
|
+
latitude: 34.283161,
|
|
51
|
+
title: '示例点2',
|
|
52
|
+
extData: { type: 'poi' },
|
|
53
|
+
},
|
|
54
|
+
],
|
|
55
|
+
onClick: (point) => {
|
|
56
|
+
// eslint-disable-next-line no-alert
|
|
57
|
+
alert(`点击了: ${point.title}`)
|
|
58
|
+
},
|
|
59
|
+
})
|
|
60
|
+
mapRef.value.addVectorPoints({
|
|
61
|
+
icon: 'https://a.amap.com/jsapi_demos/static/demo-center/icons/poi-marker-red.png',
|
|
62
|
+
iconAnchor: [0.5, 1],
|
|
63
|
+
data: [
|
|
64
|
+
{
|
|
65
|
+
longitude: 108.948024,
|
|
66
|
+
latitude: 34.263161,
|
|
67
|
+
title: '西安市',
|
|
68
|
+
extData: { type: 'city' },
|
|
69
|
+
},
|
|
70
|
+
],
|
|
71
|
+
onClick: (point) => {
|
|
72
|
+
// eslint-disable-next-line no-alert
|
|
73
|
+
alert(`点击了: ${point.title}`)
|
|
74
|
+
},
|
|
75
|
+
})
|
|
76
|
+
}
|
|
77
|
+
|
|
78
|
+
// 添加海量点示例
|
|
79
|
+
function handleAddMassPoints(): void {
|
|
80
|
+
// 生成10000个随机点
|
|
81
|
+
const data = Array.from({ length: 10000 }, (_, index) => {
|
|
82
|
+
// 在西安市区范围内随机生成点
|
|
83
|
+
const offset = 0.1 // 控制点的分布范围
|
|
84
|
+
return {
|
|
85
|
+
longitude: 108.948024 + (Math.random() - 0.5) * offset,
|
|
86
|
+
latitude: 34.263161 + (Math.random() - 0.5) * offset,
|
|
87
|
+
title: `点位${index + 1}`,
|
|
88
|
+
extData: { type: 'mass' },
|
|
89
|
+
}
|
|
90
|
+
})
|
|
91
|
+
|
|
92
|
+
mapRef.value.addWebGLPoints({
|
|
93
|
+
icon: 'https://a.amap.com/jsapi_demos/static/demo-center/icons/poi-marker-red.png',
|
|
94
|
+
iconSize: [6, 6],
|
|
95
|
+
data,
|
|
96
|
+
performance: {
|
|
97
|
+
enableChunk: true,
|
|
98
|
+
chunkSize: 1000,
|
|
99
|
+
},
|
|
100
|
+
})
|
|
101
|
+
}
|
|
102
|
+
</script>
|
|
103
|
+
|
|
104
|
+
<template>
|
|
105
|
+
<div class="demo-container">
|
|
106
|
+
<div class="map-container">
|
|
107
|
+
<XOlMap ref="mapRef" />
|
|
108
|
+
</div>
|
|
109
|
+
<div class="control-panel">
|
|
110
|
+
<div class="control-group">
|
|
111
|
+
<div class="group-title">
|
|
112
|
+
地图控制
|
|
113
|
+
</div>
|
|
114
|
+
<van-button type="primary" size="small" @click="handleSetCenter">
|
|
115
|
+
切换到北京
|
|
116
|
+
</van-button>
|
|
117
|
+
<van-button type="primary" size="small" @click="handleSetZoom">
|
|
118
|
+
设置缩放级别14
|
|
119
|
+
</van-button>
|
|
120
|
+
<van-button type="primary" size="small" @click="handleGetZoom">
|
|
121
|
+
获取当前缩放级别
|
|
122
|
+
</van-button>
|
|
123
|
+
<van-button type="primary" size="small" @click="handleSetCenterAndZoom">
|
|
124
|
+
切换到杭州(级别15)
|
|
125
|
+
</van-button>
|
|
126
|
+
</div>
|
|
127
|
+
|
|
128
|
+
<div class="control-group">
|
|
129
|
+
<div class="group-title">
|
|
130
|
+
点位示例
|
|
131
|
+
</div>
|
|
132
|
+
<van-button type="success" size="small" @click="handleAddPoints">
|
|
133
|
+
添加普通点位
|
|
134
|
+
</van-button>
|
|
135
|
+
<van-button type="warning" size="small" @click="handleAddMassPoints">
|
|
136
|
+
添加海量点(1万)
|
|
137
|
+
</van-button>
|
|
138
|
+
</div>
|
|
139
|
+
</div>
|
|
140
|
+
</div>
|
|
141
|
+
</template>
|
|
142
|
+
|
|
143
|
+
<style scoped lang="less">
|
|
144
|
+
.demo-container {
|
|
145
|
+
width: 100%;
|
|
146
|
+
height: 100%;
|
|
147
|
+
position: relative;
|
|
148
|
+
}
|
|
149
|
+
|
|
150
|
+
.map-container {
|
|
151
|
+
width: 100%;
|
|
152
|
+
height: 100%;
|
|
153
|
+
}
|
|
154
|
+
|
|
155
|
+
.control-panel {
|
|
156
|
+
position: absolute;
|
|
157
|
+
left: 10px;
|
|
158
|
+
top: 10px;
|
|
159
|
+
z-index: 1000;
|
|
160
|
+
background: white;
|
|
161
|
+
padding: 10px;
|
|
162
|
+
border-radius: 4px;
|
|
163
|
+
box-shadow: 0 2px 8px rgba(0, 0, 0, 0.15);
|
|
164
|
+
display: flex;
|
|
165
|
+
flex-direction: column;
|
|
166
|
+
gap: 16px;
|
|
167
|
+
|
|
168
|
+
.control-group {
|
|
169
|
+
display: flex;
|
|
170
|
+
flex-direction: column;
|
|
171
|
+
gap: 8px;
|
|
172
|
+
|
|
173
|
+
.group-title {
|
|
174
|
+
font-size: 14px;
|
|
175
|
+
font-weight: 500;
|
|
176
|
+
color: #333;
|
|
177
|
+
padding-left: 4px;
|
|
178
|
+
border-left: 3px solid #1989fa;
|
|
179
|
+
}
|
|
180
|
+
}
|
|
181
|
+
|
|
182
|
+
:deep(.van-button) {
|
|
183
|
+
width: 140px;
|
|
184
|
+
}
|
|
185
|
+
}
|
|
186
|
+
|
|
187
|
+
// 移动端适配
|
|
188
|
+
@media screen and (max-width: 768px) {
|
|
189
|
+
.control-panel {
|
|
190
|
+
left: 8px;
|
|
191
|
+
top: 8px;
|
|
192
|
+
padding: 8px;
|
|
193
|
+
gap: 12px;
|
|
194
|
+
|
|
195
|
+
.control-group {
|
|
196
|
+
gap: 6px;
|
|
197
|
+
|
|
198
|
+
.group-title {
|
|
199
|
+
font-size: 12px;
|
|
200
|
+
}
|
|
201
|
+
}
|
|
202
|
+
|
|
203
|
+
:deep(.van-button) {
|
|
204
|
+
width: 120px;
|
|
205
|
+
font-size: 12px;
|
|
206
|
+
}
|
|
207
|
+
}
|
|
208
|
+
}
|
|
209
|
+
</style>
|