af-mobile-client-vue3 1.1.33 → 1.1.35
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/package.json +1 -1
- package/src/components/core/ImageUploader/index.vue +160 -160
- package/src/components/data/XCellList/index.vue +121 -71
- package/src/components/data/XCellListFilter/index.vue +1 -1
- package/src/components/data/XOlMap/utils/wgs84ToGcj02.js +154 -154
- package/src/components/data/XReportGrid/XReportDemo.vue +33 -33
- package/src/components/data/XReportGrid/print.js +184 -184
- package/src/views/component/XCellListView/index.vue +412 -92
- package/src/views/component/XFormGroupView/index.vue +37 -0
- package/src/views/component/XFormView/index.vue +120 -27
- package/src/views/component/XOlMapView/XLocationPicker/index.vue +118 -118
- package/tsconfig.json +43 -43
- package/src/views/component/XFormView/oldindex.vue +0 -133
package/package.json
CHANGED
|
@@ -1,160 +1,160 @@
|
|
|
1
|
-
<script setup lang="ts">
|
|
2
|
-
import { deleteFile } from '@af-mobile-client-vue3/services/api/common'
|
|
3
|
-
import { mobileUtil } from '@af-mobile-client-vue3/utils/mobileUtil'
|
|
4
|
-
import {
|
|
5
|
-
Button as vanButton,
|
|
6
|
-
Uploader as vanUploader,
|
|
7
|
-
} from 'vant'
|
|
8
|
-
import { ref, watch } from 'vue'
|
|
9
|
-
|
|
10
|
-
const props = defineProps({
|
|
11
|
-
imageList: Array<any>,
|
|
12
|
-
outerIndex: { default: undefined },
|
|
13
|
-
authority: { default: 'user' },
|
|
14
|
-
uploadMode: { default: 'server' },
|
|
15
|
-
attr: { type: Object as () => { addOrEdit?: string }, default: () => ({}) },
|
|
16
|
-
})
|
|
17
|
-
const emit = defineEmits(['updateFileList'])
|
|
18
|
-
|
|
19
|
-
const imageList = ref<Array<any>>(props.imageList ?? [])
|
|
20
|
-
|
|
21
|
-
// 同步 props.imageList 到内部 imageList,保证每次变化都响应
|
|
22
|
-
watch(() => props.imageList, (newVal) => {
|
|
23
|
-
imageList.value = Array.isArray(newVal) ? [...newVal] : []
|
|
24
|
-
}, { immediate: true })
|
|
25
|
-
|
|
26
|
-
// 触发拍照
|
|
27
|
-
function triggerCamera() {
|
|
28
|
-
console.log('>>>> uploader 上传111')
|
|
29
|
-
mobileUtil.execute({
|
|
30
|
-
funcName: 'takePicture',
|
|
31
|
-
param: {},
|
|
32
|
-
callbackFunc: (result: any) => {
|
|
33
|
-
if (result.status === 'success') {
|
|
34
|
-
handlePhotoUpload(result.data)
|
|
35
|
-
}
|
|
36
|
-
},
|
|
37
|
-
})
|
|
38
|
-
}
|
|
39
|
-
|
|
40
|
-
// 处理拍照后的上传
|
|
41
|
-
function handlePhotoUpload(photoData: any) {
|
|
42
|
-
const formData = new FormData()
|
|
43
|
-
formData.append('resUploadMode', props.uploadMode)
|
|
44
|
-
formData.append('pathKey', 'Default')
|
|
45
|
-
formData.append('formType', 'image')
|
|
46
|
-
formData.append('useType', 'Default')
|
|
47
|
-
formData.append('resUploadStock', '1')
|
|
48
|
-
formData.append('filename', photoData.name)
|
|
49
|
-
formData.append('filesize', (photoData.size / 1024 / 1024).toFixed(4))
|
|
50
|
-
formData.append('f_operator', 'server')
|
|
51
|
-
formData.append('imgPath', photoData.filePath)
|
|
52
|
-
formData.append('urlPath', `/api/${import.meta.env.VITE_APP_SYSTEM_NAME}/resource/upload`)
|
|
53
|
-
|
|
54
|
-
// 添加临时预览
|
|
55
|
-
const tempFile = {
|
|
56
|
-
uid: Date.now() + Math.random().toString(36).substr(2, 5),
|
|
57
|
-
name: photoData.name,
|
|
58
|
-
status: 'uploading',
|
|
59
|
-
message: '上传中...',
|
|
60
|
-
url: `data:image/png;base64,${photoData.content}`,
|
|
61
|
-
}
|
|
62
|
-
|
|
63
|
-
if (!imageList.value) {
|
|
64
|
-
imageList.value = [tempFile]
|
|
65
|
-
}
|
|
66
|
-
else {
|
|
67
|
-
imageList.value.push(tempFile)
|
|
68
|
-
}
|
|
69
|
-
|
|
70
|
-
const param = {
|
|
71
|
-
resUploadMode: props.uploadMode,
|
|
72
|
-
pathKey: 'Default',
|
|
73
|
-
formType: 'image',
|
|
74
|
-
useType: 'Default',
|
|
75
|
-
resUploadStock: '1',
|
|
76
|
-
filename: photoData.name,
|
|
77
|
-
filesize: photoData.size,
|
|
78
|
-
f_operator: 'server',
|
|
79
|
-
imgPath: photoData.filePath,
|
|
80
|
-
urlPath: `/api/${import.meta.env.VITE_APP_SYSTEM_NAME}/resource/upload`,
|
|
81
|
-
}
|
|
82
|
-
// 上传到服务器
|
|
83
|
-
mobileUtil.execute({
|
|
84
|
-
funcName: 'uploadResource',
|
|
85
|
-
param,
|
|
86
|
-
callbackFunc: (result: any) => {
|
|
87
|
-
if (result.status === 'success') {
|
|
88
|
-
const index = imageList.value.findIndex(item => item.uid === tempFile.uid)
|
|
89
|
-
if (index !== -1) {
|
|
90
|
-
imageList.value[index].uid = result.data.id
|
|
91
|
-
imageList.value[index].id = result.data.id
|
|
92
|
-
delete imageList.value[index].message
|
|
93
|
-
imageList.value[index].status = 'done'
|
|
94
|
-
imageList.value[index].url = result.data.f_downloadpath
|
|
95
|
-
}
|
|
96
|
-
}
|
|
97
|
-
else {
|
|
98
|
-
const index = imageList.value.findIndex(item => item.uid === tempFile.uid)
|
|
99
|
-
if (index !== -1) {
|
|
100
|
-
imageList.value[index].status = 'failed'
|
|
101
|
-
imageList.value[index].message = '上传失败'
|
|
102
|
-
}
|
|
103
|
-
}
|
|
104
|
-
|
|
105
|
-
if (props.outerIndex !== undefined)
|
|
106
|
-
emit('updateFileList', imageList.value.filter(item => item.status === 'done'), props.outerIndex)
|
|
107
|
-
else
|
|
108
|
-
emit('updateFileList', imageList.value.filter(item => item.status === 'done'))
|
|
109
|
-
},
|
|
110
|
-
})
|
|
111
|
-
}
|
|
112
|
-
|
|
113
|
-
// 删除图片
|
|
114
|
-
function deleteFileFunction(file: any) {
|
|
115
|
-
if (file.id) {
|
|
116
|
-
deleteFile({ ids: [file.id], f_state: '删除' }).then((res: any) => {
|
|
117
|
-
if (res.msg !== undefined) {
|
|
118
|
-
const targetIndex = imageList.value.findIndex(item => item.id === file.id)
|
|
119
|
-
if (targetIndex !== -1) {
|
|
120
|
-
imageList.value.splice(targetIndex, 1)
|
|
121
|
-
if (props.outerIndex !== undefined)
|
|
122
|
-
emit('updateFileList', imageList.value.filter(item => item.status === 'done'), props.outerIndex)
|
|
123
|
-
else
|
|
124
|
-
emit('updateFileList', imageList.value.filter(item => item.status === 'done'))
|
|
125
|
-
}
|
|
126
|
-
}
|
|
127
|
-
})
|
|
128
|
-
}
|
|
129
|
-
}
|
|
130
|
-
</script>
|
|
131
|
-
|
|
132
|
-
<template>
|
|
133
|
-
<div class="uploader-container">
|
|
134
|
-
<van-button
|
|
135
|
-
v-if="props.attr?.addOrEdit !== 'readonly'"
|
|
136
|
-
icon="photograph"
|
|
137
|
-
type="primary"
|
|
138
|
-
@click="triggerCamera"
|
|
139
|
-
>
|
|
140
|
-
拍照
|
|
141
|
-
</van-button>
|
|
142
|
-
|
|
143
|
-
<van-uploader
|
|
144
|
-
v-model="imageList"
|
|
145
|
-
:show-upload="false"
|
|
146
|
-
:deletable="props.attr?.addOrEdit !== 'readonly' && props.authority === 'admin'"
|
|
147
|
-
:multiple="props.authority === 'admin'"
|
|
148
|
-
:preview-image="true"
|
|
149
|
-
:before-delete="props.attr?.addOrEdit !== 'readonly' && props.authority === 'admin' ? deleteFileFunction : undefined"
|
|
150
|
-
/>
|
|
151
|
-
</div>
|
|
152
|
-
</template>
|
|
153
|
-
|
|
154
|
-
<style scoped lang="less">
|
|
155
|
-
.uploader-container {
|
|
156
|
-
display: flex;
|
|
157
|
-
flex-direction: column;
|
|
158
|
-
gap: 16px;
|
|
159
|
-
}
|
|
160
|
-
</style>
|
|
1
|
+
<script setup lang="ts">
|
|
2
|
+
import { deleteFile } from '@af-mobile-client-vue3/services/api/common'
|
|
3
|
+
import { mobileUtil } from '@af-mobile-client-vue3/utils/mobileUtil'
|
|
4
|
+
import {
|
|
5
|
+
Button as vanButton,
|
|
6
|
+
Uploader as vanUploader,
|
|
7
|
+
} from 'vant'
|
|
8
|
+
import { ref, watch } from 'vue'
|
|
9
|
+
|
|
10
|
+
const props = defineProps({
|
|
11
|
+
imageList: Array<any>,
|
|
12
|
+
outerIndex: { default: undefined },
|
|
13
|
+
authority: { default: 'user' },
|
|
14
|
+
uploadMode: { default: 'server' },
|
|
15
|
+
attr: { type: Object as () => { addOrEdit?: string }, default: () => ({}) },
|
|
16
|
+
})
|
|
17
|
+
const emit = defineEmits(['updateFileList'])
|
|
18
|
+
|
|
19
|
+
const imageList = ref<Array<any>>(props.imageList ?? [])
|
|
20
|
+
|
|
21
|
+
// 同步 props.imageList 到内部 imageList,保证每次变化都响应
|
|
22
|
+
watch(() => props.imageList, (newVal) => {
|
|
23
|
+
imageList.value = Array.isArray(newVal) ? [...newVal] : []
|
|
24
|
+
}, { immediate: true })
|
|
25
|
+
|
|
26
|
+
// 触发拍照
|
|
27
|
+
function triggerCamera() {
|
|
28
|
+
console.log('>>>> uploader 上传111')
|
|
29
|
+
mobileUtil.execute({
|
|
30
|
+
funcName: 'takePicture',
|
|
31
|
+
param: {},
|
|
32
|
+
callbackFunc: (result: any) => {
|
|
33
|
+
if (result.status === 'success') {
|
|
34
|
+
handlePhotoUpload(result.data)
|
|
35
|
+
}
|
|
36
|
+
},
|
|
37
|
+
})
|
|
38
|
+
}
|
|
39
|
+
|
|
40
|
+
// 处理拍照后的上传
|
|
41
|
+
function handlePhotoUpload(photoData: any) {
|
|
42
|
+
const formData = new FormData()
|
|
43
|
+
formData.append('resUploadMode', props.uploadMode)
|
|
44
|
+
formData.append('pathKey', 'Default')
|
|
45
|
+
formData.append('formType', 'image')
|
|
46
|
+
formData.append('useType', 'Default')
|
|
47
|
+
formData.append('resUploadStock', '1')
|
|
48
|
+
formData.append('filename', photoData.name)
|
|
49
|
+
formData.append('filesize', (photoData.size / 1024 / 1024).toFixed(4))
|
|
50
|
+
formData.append('f_operator', 'server')
|
|
51
|
+
formData.append('imgPath', photoData.filePath)
|
|
52
|
+
formData.append('urlPath', `/api/${import.meta.env.VITE_APP_SYSTEM_NAME}/resource/upload`)
|
|
53
|
+
|
|
54
|
+
// 添加临时预览
|
|
55
|
+
const tempFile = {
|
|
56
|
+
uid: Date.now() + Math.random().toString(36).substr(2, 5),
|
|
57
|
+
name: photoData.name,
|
|
58
|
+
status: 'uploading',
|
|
59
|
+
message: '上传中...',
|
|
60
|
+
url: `data:image/png;base64,${photoData.content}`,
|
|
61
|
+
}
|
|
62
|
+
|
|
63
|
+
if (!imageList.value) {
|
|
64
|
+
imageList.value = [tempFile]
|
|
65
|
+
}
|
|
66
|
+
else {
|
|
67
|
+
imageList.value.push(tempFile)
|
|
68
|
+
}
|
|
69
|
+
|
|
70
|
+
const param = {
|
|
71
|
+
resUploadMode: props.uploadMode,
|
|
72
|
+
pathKey: 'Default',
|
|
73
|
+
formType: 'image',
|
|
74
|
+
useType: 'Default',
|
|
75
|
+
resUploadStock: '1',
|
|
76
|
+
filename: photoData.name,
|
|
77
|
+
filesize: photoData.size,
|
|
78
|
+
f_operator: 'server',
|
|
79
|
+
imgPath: photoData.filePath,
|
|
80
|
+
urlPath: `/api/${import.meta.env.VITE_APP_SYSTEM_NAME}/resource/upload`,
|
|
81
|
+
}
|
|
82
|
+
// 上传到服务器
|
|
83
|
+
mobileUtil.execute({
|
|
84
|
+
funcName: 'uploadResource',
|
|
85
|
+
param,
|
|
86
|
+
callbackFunc: (result: any) => {
|
|
87
|
+
if (result.status === 'success') {
|
|
88
|
+
const index = imageList.value.findIndex(item => item.uid === tempFile.uid)
|
|
89
|
+
if (index !== -1) {
|
|
90
|
+
imageList.value[index].uid = result.data.id
|
|
91
|
+
imageList.value[index].id = result.data.id
|
|
92
|
+
delete imageList.value[index].message
|
|
93
|
+
imageList.value[index].status = 'done'
|
|
94
|
+
imageList.value[index].url = result.data.f_downloadpath
|
|
95
|
+
}
|
|
96
|
+
}
|
|
97
|
+
else {
|
|
98
|
+
const index = imageList.value.findIndex(item => item.uid === tempFile.uid)
|
|
99
|
+
if (index !== -1) {
|
|
100
|
+
imageList.value[index].status = 'failed'
|
|
101
|
+
imageList.value[index].message = '上传失败'
|
|
102
|
+
}
|
|
103
|
+
}
|
|
104
|
+
|
|
105
|
+
if (props.outerIndex !== undefined)
|
|
106
|
+
emit('updateFileList', imageList.value.filter(item => item.status === 'done'), props.outerIndex)
|
|
107
|
+
else
|
|
108
|
+
emit('updateFileList', imageList.value.filter(item => item.status === 'done'))
|
|
109
|
+
},
|
|
110
|
+
})
|
|
111
|
+
}
|
|
112
|
+
|
|
113
|
+
// 删除图片
|
|
114
|
+
function deleteFileFunction(file: any) {
|
|
115
|
+
if (file.id) {
|
|
116
|
+
deleteFile({ ids: [file.id], f_state: '删除' }).then((res: any) => {
|
|
117
|
+
if (res.msg !== undefined) {
|
|
118
|
+
const targetIndex = imageList.value.findIndex(item => item.id === file.id)
|
|
119
|
+
if (targetIndex !== -1) {
|
|
120
|
+
imageList.value.splice(targetIndex, 1)
|
|
121
|
+
if (props.outerIndex !== undefined)
|
|
122
|
+
emit('updateFileList', imageList.value.filter(item => item.status === 'done'), props.outerIndex)
|
|
123
|
+
else
|
|
124
|
+
emit('updateFileList', imageList.value.filter(item => item.status === 'done'))
|
|
125
|
+
}
|
|
126
|
+
}
|
|
127
|
+
})
|
|
128
|
+
}
|
|
129
|
+
}
|
|
130
|
+
</script>
|
|
131
|
+
|
|
132
|
+
<template>
|
|
133
|
+
<div class="uploader-container">
|
|
134
|
+
<van-button
|
|
135
|
+
v-if="props.attr?.addOrEdit !== 'readonly'"
|
|
136
|
+
icon="photograph"
|
|
137
|
+
type="primary"
|
|
138
|
+
@click="triggerCamera"
|
|
139
|
+
>
|
|
140
|
+
拍照
|
|
141
|
+
</van-button>
|
|
142
|
+
|
|
143
|
+
<van-uploader
|
|
144
|
+
v-model="imageList"
|
|
145
|
+
:show-upload="false"
|
|
146
|
+
:deletable="props.attr?.addOrEdit !== 'readonly' && props.authority === 'admin'"
|
|
147
|
+
:multiple="props.authority === 'admin'"
|
|
148
|
+
:preview-image="true"
|
|
149
|
+
:before-delete="props.attr?.addOrEdit !== 'readonly' && props.authority === 'admin' ? deleteFileFunction : undefined"
|
|
150
|
+
/>
|
|
151
|
+
</div>
|
|
152
|
+
</template>
|
|
153
|
+
|
|
154
|
+
<style scoped lang="less">
|
|
155
|
+
.uploader-container {
|
|
156
|
+
display: flex;
|
|
157
|
+
flex-direction: column;
|
|
158
|
+
gap: 16px;
|
|
159
|
+
}
|
|
160
|
+
</style>
|
|
@@ -481,21 +481,17 @@ function evaluateCustomFunction(funcString: string | undefined, record: any, ind
|
|
|
481
481
|
}
|
|
482
482
|
}
|
|
483
483
|
|
|
484
|
-
|
|
484
|
+
/**
|
|
485
|
+
* 函数描述: 传入自定义条件进行查询(传入字段必须在琉璃中配置生成查询项才会生效)
|
|
486
|
+
* @param {string} params - 查询条件map 例: { os_id:1 }
|
|
487
|
+
* // 小提示:此处传入的条件会覆盖掉fixQueryForm(固定查询条件参数)
|
|
488
|
+
*/
|
|
485
489
|
function updateConditionAndRefresh(params: any) {
|
|
486
|
-
// 更新 conditionParams
|
|
487
|
-
if (!conditionParams.value) {
|
|
488
|
-
conditionParams.value = {}
|
|
489
|
-
}
|
|
490
490
|
if (params) {
|
|
491
491
|
// 遍历参数,更新对应的表单值
|
|
492
492
|
Object.entries(params).forEach(([key, value]) => {
|
|
493
493
|
// 找到对应的表单项
|
|
494
|
-
|
|
495
|
-
if (formItem) {
|
|
496
|
-
// 更新表单项的值
|
|
497
|
-
conditionParams.value[key] = value
|
|
498
|
-
}
|
|
494
|
+
conditionParams.value[key] = value
|
|
499
495
|
})
|
|
500
496
|
}
|
|
501
497
|
|
|
@@ -562,7 +558,7 @@ defineExpose({
|
|
|
562
558
|
v-model:loading="loading"
|
|
563
559
|
class="list_main"
|
|
564
560
|
:finished="finished"
|
|
565
|
-
finished-text="
|
|
561
|
+
finished-text="已加载全部内容"
|
|
566
562
|
:immediate-check="isInitQuery"
|
|
567
563
|
@load="onLoad"
|
|
568
564
|
>
|
|
@@ -647,7 +643,12 @@ defineExpose({
|
|
|
647
643
|
</div>
|
|
648
644
|
</VanCol>
|
|
649
645
|
</VanRow>
|
|
650
|
-
<VanRow
|
|
646
|
+
<VanRow
|
|
647
|
+
v-if="footColumns && footColumns.length > 0"
|
|
648
|
+
gutter="20"
|
|
649
|
+
class="card_item_footer"
|
|
650
|
+
@click="emit('toDetail', item)"
|
|
651
|
+
>
|
|
651
652
|
<VanCol v-for="column of footColumns" :key="`foot_${column.dataIndex}`" :span="12">
|
|
652
653
|
<p>
|
|
653
654
|
<span :style="handleFunctionStyle(column.styleFunctionForTitle, item)">
|
|
@@ -664,6 +665,7 @@ defineExpose({
|
|
|
664
665
|
<VanRow v-if="allActions.length > 0" gutter="20" class="card_item_bottom">
|
|
665
666
|
<VanCol span="4">
|
|
666
667
|
<VanPopover
|
|
668
|
+
v-if="otherActions && otherActions.length !== 0 && otherActions.some(action => evaluateCustomFunction(action.customFunction, item, index))"
|
|
667
669
|
v-model:show="showPopover[index]"
|
|
668
670
|
placement="bottom-start"
|
|
669
671
|
:actions="otherActions.filter(action => evaluateCustomFunction(action.customFunction, item, index))"
|
|
@@ -671,7 +673,6 @@ defineExpose({
|
|
|
671
673
|
>
|
|
672
674
|
<template #reference>
|
|
673
675
|
<div
|
|
674
|
-
v-show="otherActions && otherActions.length !== 0 && otherActions.some(action => evaluateCustomFunction(action.customFunction, item, index))"
|
|
675
676
|
class="more-button"
|
|
676
677
|
>
|
|
677
678
|
<span>⋯</span>
|
|
@@ -733,6 +734,14 @@ defineExpose({
|
|
|
733
734
|
border-radius: var(--van-radius-lg);
|
|
734
735
|
margin: 0 0 var(--van-padding-xs) 0;
|
|
735
736
|
padding: var(--van-padding-sm);
|
|
737
|
+
box-shadow: 0 2px 8px rgba(0, 0, 0, 0.03);
|
|
738
|
+
transition: all 0.3s ease;
|
|
739
|
+
border: 1px solid rgba(0, 0, 0, 0.04);
|
|
740
|
+
|
|
741
|
+
&:active {
|
|
742
|
+
transform: scale(0.98);
|
|
743
|
+
box-shadow: 0 1px 4px rgba(0, 0, 0, 0.02);
|
|
744
|
+
}
|
|
736
745
|
|
|
737
746
|
.card_item_header {
|
|
738
747
|
margin-bottom: var(--van-padding-base);
|
|
@@ -740,7 +749,7 @@ defineExpose({
|
|
|
740
749
|
.title-row {
|
|
741
750
|
display: flex;
|
|
742
751
|
align-items: center;
|
|
743
|
-
margin-bottom:
|
|
752
|
+
margin-bottom: 2px;
|
|
744
753
|
width: 100%;
|
|
745
754
|
|
|
746
755
|
.main-title {
|
|
@@ -748,6 +757,8 @@ defineExpose({
|
|
|
748
757
|
align-items: center;
|
|
749
758
|
.card_item_title {
|
|
750
759
|
font-size: var(--van-font-size-lg);
|
|
760
|
+
font-weight: 500;
|
|
761
|
+
color: var(--van-text-color);
|
|
751
762
|
margin: 0;
|
|
752
763
|
}
|
|
753
764
|
}
|
|
@@ -755,7 +766,7 @@ defineExpose({
|
|
|
755
766
|
.sub-title {
|
|
756
767
|
display: inline-flex;
|
|
757
768
|
align-items: center;
|
|
758
|
-
margin-left:
|
|
769
|
+
margin-left: 8px;
|
|
759
770
|
.card_item_subtitle {
|
|
760
771
|
font-size: var(--van-font-size-xs);
|
|
761
772
|
color: var(--van-text-color-2);
|
|
@@ -768,21 +779,23 @@ defineExpose({
|
|
|
768
779
|
align-items: center;
|
|
769
780
|
margin-left: auto;
|
|
770
781
|
.action-button {
|
|
771
|
-
margin-left:
|
|
772
|
-
width:
|
|
773
|
-
height:
|
|
782
|
+
margin-left: 6px;
|
|
783
|
+
width: 32px;
|
|
784
|
+
height: 32px;
|
|
774
785
|
padding: 0;
|
|
775
786
|
border: none;
|
|
776
787
|
color: var(--van-primary-color);
|
|
777
|
-
background-color: rgba(25, 137, 250, 0.
|
|
778
|
-
border-radius:
|
|
779
|
-
font-size:
|
|
788
|
+
background-color: rgba(25, 137, 250, 0.1);
|
|
789
|
+
border-radius: 6px;
|
|
790
|
+
font-size: 18px;
|
|
780
791
|
display: flex;
|
|
781
792
|
align-items: center;
|
|
782
793
|
justify-content: center;
|
|
794
|
+
transition: all 0.2s ease;
|
|
783
795
|
&:active {
|
|
784
796
|
opacity: 0.7;
|
|
785
|
-
background-color: rgba(25, 137, 250, 0.
|
|
797
|
+
background-color: rgba(25, 137, 250, 0.2);
|
|
798
|
+
transform: scale(0.95);
|
|
786
799
|
}
|
|
787
800
|
}
|
|
788
801
|
}
|
|
@@ -801,13 +814,13 @@ defineExpose({
|
|
|
801
814
|
padding: 0 !important;
|
|
802
815
|
align-items: center;
|
|
803
816
|
width: 100%;
|
|
804
|
-
margin: 0 -
|
|
817
|
+
margin: 0 -4px;
|
|
805
818
|
|
|
806
819
|
.tag-col {
|
|
807
820
|
display: flex;
|
|
808
821
|
align-items: center;
|
|
809
|
-
padding: 0
|
|
810
|
-
min-height:
|
|
822
|
+
padding: 0 4px;
|
|
823
|
+
min-height: 28px;
|
|
811
824
|
}
|
|
812
825
|
|
|
813
826
|
.tag-item {
|
|
@@ -816,12 +829,14 @@ defineExpose({
|
|
|
816
829
|
font-size: var(--van-font-size-xs);
|
|
817
830
|
display: flex;
|
|
818
831
|
align-items: center;
|
|
819
|
-
margin:
|
|
832
|
+
margin: 2px 0;
|
|
820
833
|
justify-content: center;
|
|
821
834
|
:deep(.van-tag) {
|
|
822
835
|
width: fit-content;
|
|
823
836
|
display: inline-flex;
|
|
824
837
|
align-items: center;
|
|
838
|
+
padding: 2px 8px;
|
|
839
|
+
border-radius: 4px;
|
|
825
840
|
}
|
|
826
841
|
.tag-content {
|
|
827
842
|
display: flex;
|
|
@@ -842,19 +857,38 @@ defineExpose({
|
|
|
842
857
|
}
|
|
843
858
|
|
|
844
859
|
.card_item_details {
|
|
845
|
-
margin-bottom: var(--van-padding-base);
|
|
846
860
|
font-size: var(--van-font-size-sm);
|
|
847
|
-
color:
|
|
861
|
+
color: var(--van-text-color-2);
|
|
862
|
+
padding: 8px 0;
|
|
848
863
|
|
|
849
864
|
.van-col {
|
|
850
|
-
margin-bottom:
|
|
865
|
+
margin-bottom: 4px;
|
|
866
|
+
p {
|
|
867
|
+
display: flex;
|
|
868
|
+
align-items: center;
|
|
869
|
+
gap: 4px;
|
|
870
|
+
|
|
871
|
+
span {
|
|
872
|
+
flex: 1;
|
|
873
|
+
min-width: 0;
|
|
874
|
+
overflow: hidden;
|
|
875
|
+
text-overflow: ellipsis;
|
|
876
|
+
white-space: nowrap;
|
|
877
|
+
}
|
|
878
|
+
|
|
879
|
+
:deep(.van-badge) {
|
|
880
|
+
flex-shrink: 0;
|
|
881
|
+
}
|
|
882
|
+
}
|
|
851
883
|
}
|
|
852
884
|
}
|
|
853
885
|
|
|
854
886
|
.card_item_footer {
|
|
855
887
|
font-size: var(--van-font-size-sm);
|
|
856
888
|
color: var(--van-text-color-2);
|
|
857
|
-
margin-bottom:
|
|
889
|
+
margin-bottom: 12px;
|
|
890
|
+
padding: 8px 0;
|
|
891
|
+
border-top: 1px solid rgba(0, 0, 0, 0.04);
|
|
858
892
|
|
|
859
893
|
.van-col:last-child {
|
|
860
894
|
text-align: right;
|
|
@@ -864,6 +898,45 @@ defineExpose({
|
|
|
864
898
|
text-align: left;
|
|
865
899
|
}
|
|
866
900
|
}
|
|
901
|
+
|
|
902
|
+
.card_item_bottom {
|
|
903
|
+
margin-top: 4px;
|
|
904
|
+
|
|
905
|
+
.more-button {
|
|
906
|
+
width: 28px;
|
|
907
|
+
height: 28px;
|
|
908
|
+
display: flex;
|
|
909
|
+
align-items: center;
|
|
910
|
+
justify-content: center;
|
|
911
|
+
color: var(--van-text-color-2);
|
|
912
|
+
cursor: pointer;
|
|
913
|
+
font-size: 18px;
|
|
914
|
+
background-color: var(--van-background);
|
|
915
|
+
border-radius: 6px;
|
|
916
|
+
transition: all 0.2s ease;
|
|
917
|
+
border: 1px solid rgba(0, 0, 0, 0.06);
|
|
918
|
+
span {
|
|
919
|
+
line-height: 1;
|
|
920
|
+
margin-top: -2px;
|
|
921
|
+
}
|
|
922
|
+
&:active {
|
|
923
|
+
opacity: 0.7;
|
|
924
|
+
background-color: var(--van-background-2);
|
|
925
|
+
transform: scale(0.95);
|
|
926
|
+
}
|
|
927
|
+
}
|
|
928
|
+
|
|
929
|
+
.action-btn {
|
|
930
|
+
min-width: 76px;
|
|
931
|
+
height: 32px;
|
|
932
|
+
border-radius: 16px;
|
|
933
|
+
font-size: 14px;
|
|
934
|
+
transition: all 0.2s ease;
|
|
935
|
+
&:active {
|
|
936
|
+
transform: scale(0.95);
|
|
937
|
+
}
|
|
938
|
+
}
|
|
939
|
+
}
|
|
867
940
|
}
|
|
868
941
|
}
|
|
869
942
|
|
|
@@ -872,25 +945,30 @@ defineExpose({
|
|
|
872
945
|
align-items: center;
|
|
873
946
|
padding: 8px 12px;
|
|
874
947
|
background-color: #fff;
|
|
875
|
-
gap:
|
|
948
|
+
gap: 8px;
|
|
949
|
+
box-shadow: 0 1px 4px rgba(0, 0, 0, 0.02);
|
|
950
|
+
position: sticky;
|
|
951
|
+
top: 0;
|
|
952
|
+
z-index: 10;
|
|
876
953
|
:deep(.van-search) {
|
|
877
954
|
width: 100%;
|
|
878
955
|
padding: var(--van-search-padding);
|
|
879
956
|
background-color: transparent;
|
|
880
957
|
}
|
|
881
958
|
:deep(.van-search__content) {
|
|
882
|
-
border-radius:
|
|
883
|
-
background-color:
|
|
884
|
-
padding: 4px
|
|
959
|
+
border-radius: 8px;
|
|
960
|
+
background-color: var(--van-background);
|
|
961
|
+
padding: 4px 12px;
|
|
962
|
+
border: 1px solid rgba(0, 0, 0, 0.01);
|
|
885
963
|
}
|
|
886
964
|
:deep(.van-field__left-icon) {
|
|
887
|
-
color:
|
|
965
|
+
color: var(--van-text-color-2);
|
|
888
966
|
}
|
|
889
967
|
:deep(.van-cell) {
|
|
890
968
|
background-color: transparent;
|
|
891
969
|
}
|
|
892
970
|
:deep(.van-field__control::placeholder) {
|
|
893
|
-
color:
|
|
971
|
+
color: var(--van-text-color-2);
|
|
894
972
|
font-size: 14px;
|
|
895
973
|
}
|
|
896
974
|
.van-col {
|
|
@@ -909,48 +987,20 @@ defineExpose({
|
|
|
909
987
|
display: flex;
|
|
910
988
|
align-items: center;
|
|
911
989
|
justify-content: center;
|
|
912
|
-
width:
|
|
913
|
-
height:
|
|
914
|
-
border-radius:
|
|
915
|
-
background-color:
|
|
990
|
+
width: 36px;
|
|
991
|
+
height: 36px;
|
|
992
|
+
border-radius: 8px;
|
|
993
|
+
background-color: var(--van-background);
|
|
916
994
|
cursor: pointer;
|
|
917
995
|
position: relative;
|
|
918
996
|
z-index: 1;
|
|
997
|
+
border: 1px solid rgba(0, 0, 0, 0.06);
|
|
998
|
+
transition: all 0.2s ease;
|
|
919
999
|
&:active {
|
|
920
1000
|
opacity: 0.7;
|
|
1001
|
+
transform: scale(0.95);
|
|
921
1002
|
}
|
|
922
1003
|
}
|
|
923
1004
|
}
|
|
924
|
-
|
|
925
|
-
.custom-button {
|
|
926
|
-
border: none !important;
|
|
927
|
-
box-shadow: none !important;
|
|
928
|
-
}
|
|
929
|
-
|
|
930
|
-
.more-button {
|
|
931
|
-
width: 24px;
|
|
932
|
-
height: 24px;
|
|
933
|
-
display: flex;
|
|
934
|
-
align-items: center;
|
|
935
|
-
justify-content: center;
|
|
936
|
-
color: #666;
|
|
937
|
-
cursor: pointer;
|
|
938
|
-
font-size: 20px;
|
|
939
|
-
background-color: #f7f8fa;
|
|
940
|
-
border-radius: 4px;
|
|
941
|
-
span {
|
|
942
|
-
line-height: 1;
|
|
943
|
-
margin-top: -2px;
|
|
944
|
-
}
|
|
945
|
-
&:active {
|
|
946
|
-
opacity: 0.7;
|
|
947
|
-
background-color: #ebedf0;
|
|
948
|
-
}
|
|
949
|
-
}
|
|
950
|
-
.action-btn {
|
|
951
|
-
min-width: 80px;
|
|
952
|
-
border-radius: 20px;
|
|
953
|
-
font-size: 14px;
|
|
954
|
-
}
|
|
955
1005
|
}
|
|
956
1006
|
</style>
|