Commit 9e3463aee1c4a4b1e906c28153a3f4669cfede26

Authored by xp.Huang
2 parents 9efe030f 9905fa23

Merge branch 'sqy_dev' into 'main'

'feat:地图搜索完善,fix:OEM调整,实时数据支持模糊查询,动态修改标题'

See merge request huang/yun-teng-iot-front!116
@@ -11,7 +11,6 @@ @@ -11,7 +11,6 @@
11 import { AppProvider } from '/@/components/Application'; 11 import { AppProvider } from '/@/components/Application';
12 import { useTitle } from '/@/hooks/web/useTitle'; 12 import { useTitle } from '/@/hooks/web/useTitle';
13 import { useLocale } from '/@/locales/useLocale'; 13 import { useLocale } from '/@/locales/useLocale';
14 -  
15 // support Multi-language 14 // support Multi-language
16 const { getAntdLocale } = useLocale(); 15 const { getAntdLocale } = useLocale();
17 16
1 -<!--  
2 - * @Author: Vben  
3 - * @Description: logo component  
4 --->  
5 -  
6 <template> 1 <template>
7 - <div class="application" :class="getAppLogoClass"> 2 + <div class="anticon" :class="getAppLogoClass" @click="goHome">
8 <img v-if="getLogo" :src="getLogo" /> 3 <img v-if="getLogo" :src="getLogo" />
9 <img v-else src="/src/assets/images/logo.png" /> 4 <img v-else src="/src/assets/images/logo.png" />
10 - <span  
11 - class="ml-2 md:opacity-100"  
12 - :class="getTitleClass"  
13 - v-show="showTitle"  
14 - style="white-space: nowrap; font-size: small; color: #f3f4fb"  
15 - > 5 + <div class="ml-2 truncate md:opacity-100" :class="getTitleClass" v-show="showTitle">
16 {{ getTitle }} 6 {{ getTitle }}
17 - </span> 7 + </div>
18 </div> 8 </div>
19 </template> 9 </template>
20 <script lang="ts" setup> 10 <script lang="ts" setup>
@@ -96,6 +86,7 @@ @@ -96,6 +86,7 @@
96 font-size: 16px; 86 font-size: 16px;
97 font-weight: 700; 87 font-weight: 700;
98 transition: all 0.5s; 88 transition: all 0.5s;
  89 + line-height: normal;
99 } 90 }
100 } 91 }
101 </style> 92 </style>
@@ -3,7 +3,7 @@ import { useI18n } from '/@/hooks/web/useI18n'; @@ -3,7 +3,7 @@ import { useI18n } from '/@/hooks/web/useI18n';
3 import { useTitle as usePageTitle } from '@vueuse/core'; 3 import { useTitle as usePageTitle } from '@vueuse/core';
4 import { useGlobSetting } from '/@/hooks/setting'; 4 import { useGlobSetting } from '/@/hooks/setting';
5 import { useRouter } from 'vue-router'; 5 import { useRouter } from 'vue-router';
6 - 6 +import { createLocalStorage } from '/@/utils/cache/index';
7 import { REDIRECT_NAME } from '/@/router/constant'; 7 import { REDIRECT_NAME } from '/@/router/constant';
8 8
9 export function useTitle() { 9 export function useTitle() {
@@ -12,7 +12,7 @@ export function useTitle() { @@ -12,7 +12,7 @@ export function useTitle() {
12 const { currentRoute } = useRouter(); 12 const { currentRoute } = useRouter();
13 13
14 const pageTitle = usePageTitle(); 14 const pageTitle = usePageTitle();
15 - 15 + const storage = createLocalStorage();
16 watch( 16 watch(
17 () => currentRoute.value.path, 17 () => currentRoute.value.path,
18 () => { 18 () => {
@@ -22,7 +22,9 @@ export function useTitle() { @@ -22,7 +22,9 @@ export function useTitle() {
22 } 22 }
23 23
24 const tTitle = t(route?.meta?.title as string); 24 const tTitle = t(route?.meta?.title as string);
25 - pageTitle.value = tTitle ? ` ${tTitle} - ${title} ` : `${title}`; 25 + pageTitle.value = tTitle
  26 + ? ` ${tTitle} - ${storage.get('platInfo').name ?? title} `
  27 + : `${title}`;
26 }, 28 },
27 { immediate: true } 29 { immediate: true }
28 ); 30 );
@@ -42,7 +42,7 @@ export const emailRule: Rule[] = [ @@ -42,7 +42,7 @@ export const emailRule: Rule[] = [
42 { 42 {
43 validator: (_, value: string) => { 43 validator: (_, value: string) => {
44 const reg = /^[a-zA-Z0-9_.-]+@[a-zA-Z0-9-]+(\.[a-zA-Z0-9-]+)*\.[a-zA-Z0-9]{2,6}$/; 44 const reg = /^[a-zA-Z0-9_.-]+@[a-zA-Z0-9-]+(\.[a-zA-Z0-9-]+)*\.[a-zA-Z0-9]{2,6}$/;
45 - if (value === '') { 45 + if (!value) {
46 return Promise.resolve(); 46 return Promise.resolve();
47 } else if (!reg.test(value)) { 47 } else if (!reg.test(value)) {
48 return Promise.reject('电子邮箱格式不正确'); 48 return Promise.reject('电子邮箱格式不正确');
@@ -43,7 +43,12 @@ @@ -43,7 +43,12 @@
43 </Card> 43 </Card>
44 <Card title="联系我们" :bordered="false" v-bind="$attrs" :headStyle="{ padding: 0 }"> 44 <Card title="联系我们" :bordered="false" v-bind="$attrs" :headStyle="{ padding: 0 }">
45 <template #cover> 45 <template #cover>
46 - <img :src="getQrCode" alt="" style="width: 150px; height: 150px; margin: 50px auto" /> 46 + <img
  47 + :src="getQrCode"
  48 + v-if="getQrCode"
  49 + style="width: 150px; height: 150px; margin: 50px auto"
  50 + />
  51 + <Empty v-else :image="Empty.PRESENTED_IMAGE_SIMPLE" />
47 </template> 52 </template>
48 <CardMeta> 53 <CardMeta>
49 <template #description> 54 <template #description>
@@ -161,6 +166,7 @@ @@ -161,6 +166,7 @@
161 Progress, 166 Progress,
162 Skeleton, 167 Skeleton,
163 Tooltip, 168 Tooltip,
  169 + Empty,
164 } from 'ant-design-vue'; 170 } from 'ant-design-vue';
165 import { useUserStore } from '/@/store/modules/user'; 171 import { useUserStore } from '/@/store/modules/user';
166 import { getEnterPriseDetail } from '/@/api/oem'; 172 import { getEnterPriseDetail } from '/@/api/oem';
@@ -186,6 +192,7 @@ @@ -186,6 +192,7 @@
186 Progress, 192 Progress,
187 Skeleton, 193 Skeleton,
188 Tooltip, 194 Tooltip,
  195 + Empty,
189 }, 196 },
190 props: { 197 props: {
191 role: { 198 role: {
@@ -288,6 +295,7 @@ @@ -288,6 +295,7 @@
288 go, 295 go,
289 registerTable, 296 registerTable,
290 isAdmin, 297 isAdmin,
  298 + Empty,
291 }; 299 };
292 }, 300 },
293 }); 301 });
@@ -5,7 +5,6 @@ @@ -5,7 +5,6 @@
5 import { ref, Ref, withDefaults, onMounted, watch } from 'vue'; 5 import { ref, Ref, withDefaults, onMounted, watch } from 'vue';
6 import { useECharts } from '/@/hooks/web/useECharts'; 6 import { useECharts } from '/@/hooks/web/useECharts';
7 import { getTrendData } from '/@/api/dashboard/index'; 7 import { getTrendData } from '/@/api/dashboard/index';
8 -  
9 interface Props { 8 interface Props {
10 width?: string; 9 width?: string;
11 height?: string; 10 height?: string;
1 <template> 1 <template>
2 <div> 2 <div>
3 <div ref="chartRef" :style="{ height, width }" v-show="alarmList.length"></div> 3 <div ref="chartRef" :style="{ height, width }" v-show="alarmList.length"></div>
4 - <div v-show="!alarmList.length"><Empty /></div> 4 + <div v-show="!alarmList.length"><Empty :image="Empty.PRESENTED_IMAGE_SIMPLE" /></div>
5 </div> 5 </div>
6 </template> 6 </template>
7 <script lang="ts" setup> 7 <script lang="ts" setup>
1 <template> 1 <template>
2 <div> 2 <div>
3 <div ref="chartRef" :style="{ height, width }" v-show="dataPointList.length"></div> 3 <div ref="chartRef" :style="{ height, width }" v-show="dataPointList.length"></div>
4 - <div v-show="!dataPointList.length"><Empty /></div> 4 + <div v-show="!dataPointList.length"><Empty :image="Empty.PRESENTED_IMAGE_SIMPLE" /></div>
5 </div> 5 </div>
6 </template> 6 </template>
7 <script lang="ts" setup> 7 <script lang="ts" setup>
@@ -127,6 +127,9 @@ @@ -127,6 +127,9 @@
127 } 127 }
128 // 验证成功 --调-- 新增或者编辑接口 128 // 验证成功 --调-- 新增或者编辑接口
129 const msg = computed(() => (unref(stepState).id ? '更新设备成功' : '新增设备成功')); 129 const msg = computed(() => (unref(stepState).id ? '更新设备成功' : '新增设备成功'));
  130 + // 此处需要删除地图的属性,否则会报堆栈溢出的错误 Uncaught RangeError: Maximum call stack size exceeded
  131 + Reflect.deleteProperty(DeviceStep1Ref.value.positionState, 'map');
  132 + Reflect.deleteProperty(DeviceStep1Ref.value.positionState, 'marker');
130 if (unref(stepState).id) { 133 if (unref(stepState).id) {
131 const editData = { 134 const editData = {
132 ...unref(stepState), 135 ...unref(stepState),
@@ -135,6 +138,7 @@ @@ -135,6 +138,7 @@
135 ...DeviceStep1Ref.value?.positionState, 138 ...DeviceStep1Ref.value?.positionState,
136 }, 139 },
137 }; 140 };
  141 +
138 await createOrEditDevice(editData); 142 await createOrEditDevice(editData);
139 } else { 143 } else {
140 const createData = { 144 const createData = {
@@ -44,10 +44,10 @@ @@ -44,10 +44,10 @@
44 centered 44 centered
45 > 45 >
46 <div> 46 <div>
47 - <a-form :label-col="labelCol" :colon="false">  
48 - <a-row :gutter="20" class="mt-4">  
49 - <a-col :span="20">  
50 - <a-form-item label="搜索位置"> 47 + <Form :label-col="labelCol" :colon="false">
  48 + <Row :gutter="20" class="mt-4">
  49 + <Col :span="20">
  50 + <FormItem label="搜索位置">
51 <AutoComplete 51 <AutoComplete
52 v-model:value="positionState.address" 52 v-model:value="positionState.address"
53 :options="dataSource" 53 :options="dataSource"
@@ -57,22 +57,22 @@ @@ -57,22 +57,22 @@
57 @select="handleSelect" 57 @select="handleSelect"
58 backfill 58 backfill
59 /> 59 />
60 - </a-form-item>  
61 - </a-col>  
62 - </a-row>  
63 - <a-row :gutter="20" class="">  
64 - <a-col :span="10">  
65 - <a-form-item label="经度"> 60 + </FormItem>
  61 + </Col>
  62 + </Row>
  63 + <Row :gutter="20" class="">
  64 + <Col :span="10">
  65 + <FormItem label="经度">
66 <Input v-model:value="positionState.longitude" disabled /> 66 <Input v-model:value="positionState.longitude" disabled />
67 - </a-form-item>  
68 - </a-col>  
69 - <a-col :span="10">  
70 - <a-form-item label="纬度"> 67 + </FormItem>
  68 + </Col>
  69 + <Col :span="10">
  70 + <FormItem label="纬度">
71 <Input v-model:value="positionState.latitude" disabled /> 71 <Input v-model:value="positionState.latitude" disabled />
72 - </a-form-item>  
73 - </a-col>  
74 - </a-row>  
75 - </a-form> 72 + </FormItem>
  73 + </Col>
  74 + </Row>
  75 + </Form>
76 <div ref="wrapRef" style="height: 300px; width: 90%" class="ml-6"></div> 76 <div ref="wrapRef" style="height: 300px; width: 90%" class="ml-6"></div>
77 </div> 77 </div>
78 </Modal> 78 </Modal>
@@ -88,6 +88,7 @@ @@ -88,6 +88,7 @@
88 import { upload } from '/@/api/oss/ossFileUploader'; 88 import { upload } from '/@/api/oss/ossFileUploader';
89 import { FileItem } from '/@/components/Upload/src/typing'; 89 import { FileItem } from '/@/components/Upload/src/typing';
90 import { BAI_DU_MAP_URL } from '/@/utils/fnUtils'; 90 import { BAI_DU_MAP_URL } from '/@/utils/fnUtils';
  91 +
91 import icon from '/@/assets/images/wz.png'; 92 import icon from '/@/assets/images/wz.png';
92 import { useDebounceFn } from '@vueuse/core'; 93 import { useDebounceFn } from '@vueuse/core';
93 export default defineComponent({ 94 export default defineComponent({
@@ -95,15 +96,14 @@ @@ -95,15 +96,14 @@
95 BasicForm, 96 BasicForm,
96 Input, 97 Input,
97 AutoComplete, 98 AutoComplete,
98 - [Input.Group.name]: Input.Group,  
99 Upload, 99 Upload,
100 EnvironmentTwoTone, 100 EnvironmentTwoTone,
101 PlusOutlined, 101 PlusOutlined,
102 Modal, 102 Modal,
103 - [Form.name]: Form,  
104 - [Form.Item.name]: Form.Item,  
105 - [Row.name]: Row,  
106 - [Col.name]: Col, 103 + Form,
  104 + FormItem: Form.Item,
  105 + Row,
  106 + Col,
107 }, 107 },
108 props: { 108 props: {
109 deviceInfo: { 109 deviceInfo: {
@@ -209,6 +209,7 @@ @@ -209,6 +209,7 @@
209 const wrapRef = ref<HTMLDivElement | null>(null); 209 const wrapRef = ref<HTMLDivElement | null>(null);
210 const { toPromise } = useScript({ src: BAI_DU_MAP_URL }); 210 const { toPromise } = useScript({ src: BAI_DU_MAP_URL });
211 211
  212 + // 初始化地图
212 async function initMap(longitude, latitude) { 213 async function initMap(longitude, latitude) {
213 await toPromise(); 214 await toPromise();
214 await nextTick(); 215 await nextTick();
@@ -243,7 +244,6 @@ @@ -243,7 +244,6 @@
243 }); 244 });
244 } 245 }
245 const dataSource = ref<any[]>([]); 246 const dataSource = ref<any[]>([]);
246 -  
247 const onSearch = (searchText: string) => { 247 const onSearch = (searchText: string) => {
248 if (!searchText) { 248 if (!searchText) {
249 dataSource.value = []; 249 dataSource.value = [];
@@ -256,7 +256,6 @@ @@ -256,7 +256,6 @@
256 const searchArr = []; 256 const searchArr = [];
257 for (let i = 0; i < res.getCurrentNumPois(); i++) { 257 for (let i = 0; i < res.getCurrentNumPois(); i++) {
258 const item = res.getPoi(i); 258 const item = res.getPoi(i);
259 - console.log(item);  
260 searchArr.push({ 259 searchArr.push({
261 label: item.address + item.title, 260 label: item.address + item.title,
262 value: item.address + item.title, 261 value: item.address + item.title,
@@ -268,13 +267,12 @@ @@ -268,13 +267,12 @@
268 }, 267 },
269 }); //调用search方法,根据检索词searchText发起检索 268 }); //调用search方法,根据检索词searchText发起检索
270 local.search(searchText); 269 local.search(searchText);
271 - console.log(dataSource);  
272 }; 270 };
273 // 防抖函数包装一下,防止频繁执行 271 // 防抖函数包装一下,防止频繁执行
274 const debounceSearch = useDebounceFn(onSearch, 500); 272 const debounceSearch = useDebounceFn(onSearch, 500);
275 function handleSelect(value, option) { 273 function handleSelect(value, option) {
276 dataSource.value = []; 274 dataSource.value = [];
277 - console.log(option); 275 +
278 positionState.address = option.value; //记录详细地址,含建筑物名 276 positionState.address = option.value; //记录详细地址,含建筑物名
279 const { lat, lng } = option.point; 277 const { lat, lng } = option.point;
280 positionState.latitude = lat; //记录当前选中地址坐标 278 positionState.latitude = lat; //记录当前选中地址坐标
@@ -299,11 +297,9 @@ @@ -299,11 +297,9 @@
299 // 取消选择位置 297 // 取消选择位置
300 const handleCancel = () => { 298 const handleCancel = () => {
301 dataSource.value = []; 299 dataSource.value = [];
302 -  
303 for (let key in positionState) { 300 for (let key in positionState) {
304 positionState[key] = ''; 301 positionState[key] = '';
305 } 302 }
306 - console.log(positionState);  
307 }; 303 };
308 // 父组件调用更新字段值的方法 304 // 父组件调用更新字段值的方法
309 function parentSetFieldsValue(data) { 305 function parentSetFieldsValue(data) {
@@ -77,17 +77,17 @@ @@ -77,17 +77,17 @@
77 setTableData(state.recordList); 77 setTableData(state.recordList);
78 return; 78 return;
79 } 79 }
80 - const newRecordList = state.recordList.find((item) => {  
81 - if (item.key === key) return item;  
82 - console.log('--------------------------', item);  
83 - if (item.value === key) return item;  
84 - });  
85 - console.log(newRecordList);  
86 - if (!newRecordList) {  
87 - setTableData([]);  
88 - } else {  
89 - setTableData([newRecordList]); 80 + let newRecordList = [];
  81 + let len = state.recordList.length;
  82 + for (let i = 0; i < len; i++) {
  83 + if (
  84 + state.recordList[i].key.indexOf(key) >= 0 ||
  85 + state.recordList[i].value.indexOf(key) >= 0
  86 + ) {
  87 + newRecordList.push(state.recordList[i]);
  88 + }
90 } 89 }
  90 + setTableData(newRecordList);
91 }, 91 },
92 resetFunc() { 92 resetFunc() {
93 setTableData(state.recordList); 93 setTableData(state.recordList);
@@ -28,7 +28,7 @@ export const schemas: FormSchema[] = [ @@ -28,7 +28,7 @@ export const schemas: FormSchema[] = [
28 { 28 {
29 field: 'logo', 29 field: 'logo',
30 component: 'Upload', 30 component: 'Upload',
31 - label: '平台Logo', 31 + label: 'APP Logo',
32 colProps: { 32 colProps: {
33 span: 24, 33 span: 24,
34 }, 34 },
@@ -102,7 +102,6 @@ export const schemas: FormSchema[] = [ @@ -102,7 +102,6 @@ export const schemas: FormSchema[] = [
102 maxLength: 500, 102 maxLength: 500,
103 placeholder: '请输入公司简介', 103 placeholder: '请输入公司简介',
104 autoSize: { minRows: 8, maxRows: 12 }, 104 autoSize: { minRows: 8, maxRows: 12 },
105 - showCount: true,  
106 }, 105 },
107 dynamicRules: () => { 106 dynamicRules: () => {
108 return [ 107 return [
@@ -15,13 +15,13 @@ @@ -15,13 +15,13 @@
15 <img v-if="logoPic" :src="logoPic" /> 15 <img v-if="logoPic" :src="logoPic" />
16 <div v-else> 16 <div v-else>
17 <div style="margin-top: 30px"> 17 <div style="margin-top: 30px">
18 - <PlusOutlined style="font-size: 30px" /> 18 + <PlusOutlined style="font-size: 50px" />
19 </div> 19 </div>
20 <div 20 <div
21 class="ant-upload-text flex" 21 class="ant-upload-text flex"
22 - style="width: 180px; height: 130px; align-items: center" 22 + style="width: 180px; height: 100px; align-items: center; font-size: 9px"
23 > 23 >
24 - 支持.PNG、.JPG、.SVG格式,建议尺寸32px × 32px,大小不超过500KB。</div 24 + 支持.PNG、.JPG格式,建议尺寸为32*32px,大小不超过500KB</div
25 > 25 >
26 </div> 26 </div>
27 </Upload> 27 </Upload>
@@ -38,13 +38,13 @@ @@ -38,13 +38,13 @@
38 <img v-if="bgPic" :src="bgPic" alt="avatar" /> 38 <img v-if="bgPic" :src="bgPic" alt="avatar" />
39 <div v-else> 39 <div v-else>
40 <div style="margin-top: 30px"> 40 <div style="margin-top: 30px">
41 - <PlusOutlined style="font-size: 30px" /> 41 + <PlusOutlined style="font-size: 50px" />
42 </div> 42 </div>
43 <div 43 <div
44 class="ant-upload-text flex" 44 class="ant-upload-text flex"
45 - style="width: 280px; height: 130px; align-items: center" 45 + style="width: 280px; height: 100px; align-items: center; font-size: 9px"
46 > 46 >
47 - 支持.PNG、.JPG、.SVG格式,建议尺寸为1250px × 730px(及以上),大小不超过5M。</div 47 + 支持.PNG、.JPG格式,建议尺寸为1080*1620px,大小不超过5M</div
48 > 48 >
49 </div> 49 </div>
50 </Upload> 50 </Upload>
@@ -64,8 +64,14 @@ @@ -64,8 +64,14 @@
64 :before-upload="beforeUploadHomeSwiper" 64 :before-upload="beforeUploadHomeSwiper"
65 > 65 >
66 <div v-if="fileList.length < 5"> 66 <div v-if="fileList.length < 5">
67 - <plus-outlined />  
68 - <div class="ant-upload-text">Upload</div> 67 + <div style="margin-top: 30px">
  68 + <PlusOutlined style="font-size: 50px" />
  69 + </div>
  70 + <div
  71 + class="ant-upload-text flex"
  72 + style="width: 150px; height: 70px; align-items: center; font-size: 9px"
  73 + >支持.PNG、.JPG格式,建议尺寸为800*600px,大小不超过3M</div
  74 + >
69 </div> 75 </div>
70 </Upload> 76 </Upload>
71 <Modal :visible="previewVisible" :footer="null" @cancel="handleCancel"> 77 <Modal :visible="previewVisible" :footer="null" @cancel="handleCancel">
@@ -252,7 +258,7 @@ @@ -252,7 +258,7 @@
252 258
253 onMounted(async () => { 259 onMounted(async () => {
254 const res = await getAppDesign(); 260 const res = await getAppDesign();
255 - const rotation = res.rotation.split(','); 261 + const rotation = res.rotation ? res.rotation.split(',') : [];
256 const arr: any[] = []; 262 const arr: any[] = [];
257 for (let item of rotation) { 263 for (let item of rotation) {
258 arr.push({ 264 arr.push({
@@ -265,7 +271,7 @@ @@ -265,7 +271,7 @@
265 setFieldsValue(res); 271 setFieldsValue(res);
266 logoPic.value = res.logo; 272 logoPic.value = res.logo;
267 bgPic.value = res.background; 273 bgPic.value = res.background;
268 - if (arr[0].url === '') return; 274 + if (arr[0]?.url === '') return;
269 fileList.value = arr; 275 fileList.value = arr;
270 }); 276 });
271 return { 277 return {
@@ -14,13 +14,13 @@ @@ -14,13 +14,13 @@
14 <img v-if="logoPic" :src="logoPic" /> 14 <img v-if="logoPic" :src="logoPic" />
15 <div v-else> 15 <div v-else>
16 <div style="margin-top: 30px"> 16 <div style="margin-top: 30px">
17 - <PlusOutlined style="font-size: 30px" /> 17 + <PlusOutlined style="font-size: 50px" />
18 </div> 18 </div>
19 <div 19 <div
20 class="ant-upload-text flex" 20 class="ant-upload-text flex"
21 - style="width: 180px; height: 130px; align-items: center" 21 + style="width: 180px; height: 100px; align-items: center; font-size: 9px"
22 > 22 >
23 - 支持.PNG、.JPG、.SVG格式,建议尺寸32px × 32px,大小不超过500KB。</div 23 + 支持.PNG、.JPG格式,建议尺寸为32*32px,大小不超过500KB</div
24 > 24 >
25 </div> 25 </div>
26 </Upload> 26 </Upload>
@@ -39,7 +39,15 @@ @@ -39,7 +39,15 @@
39 <div style="background-color: #ccc; margin-top: 20px">重新上传</div> 39 <div style="background-color: #ccc; margin-top: 20px">重新上传</div>
40 </div> 40 </div>
41 <div v-else> 41 <div v-else>
42 - <PlusOutlined style="font-size: 30px" /> 42 + <div style="margin-top: 20px">
  43 + <PlusOutlined style="font-size: 30px" />
  44 + </div>
  45 + <div
  46 + class="ant-upload-text flex"
  47 + style="width: 130px; height: 70px; align-items: center; font-size: 9px"
  48 + >
  49 + 支持.ICON格式,建议尺寸为16*16px</div
  50 + >
43 </div> 51 </div>
44 </Upload> 52 </Upload>
45 </template> 53 </template>
@@ -55,13 +63,13 @@ @@ -55,13 +63,13 @@
55 <img v-if="bgPic" :src="bgPic" alt="avatar" /> 63 <img v-if="bgPic" :src="bgPic" alt="avatar" />
56 <div v-else> 64 <div v-else>
57 <div style="margin-top: 30px"> 65 <div style="margin-top: 30px">
58 - <PlusOutlined style="font-size: 30px" /> 66 + <PlusOutlined style="font-size: 50px" />
59 </div> 67 </div>
60 <div 68 <div
61 class="ant-upload-text flex" 69 class="ant-upload-text flex"
62 - style="width: 280px; height: 130px; align-items: center" 70 + style="width: 280px; height: 130px; align-items: center; font-size: 9px"
63 > 71 >
64 - 支持.PNG、.JPG、.SVG格式,建议尺寸为1250px × 730px(及以上),大小不超过5M。</div 72 + 支持.PNG、.JPG格式,建议尺寸为1920*1080px以上,大小不超过5M</div
65 > 73 >
66 </div> 74 </div>
67 </Upload> 75 </Upload>
@@ -97,6 +105,8 @@ @@ -97,6 +105,8 @@
97 import { PlusOutlined } from '@ant-design/icons-vue'; 105 import { PlusOutlined } from '@ant-design/icons-vue';
98 import { useUserStore } from '/@/store/modules/user'; 106 import { useUserStore } from '/@/store/modules/user';
99 import { createLocalStorage } from '/@/utils/cache/index'; 107 import { createLocalStorage } from '/@/utils/cache/index';
  108 + import { useTitle } from '@vueuse/core';
  109 + import { useGlobSetting } from '/@/hooks/setting';
100 export default defineComponent({ 110 export default defineComponent({
101 components: { 111 components: {
102 BasicForm, 112 BasicForm,
@@ -221,6 +231,8 @@ @@ -221,6 +231,8 @@
221 userStore.setPlatInfo(newFieldValue); 231 userStore.setPlatInfo(newFieldValue);
222 // 保存本地缓存 232 // 保存本地缓存
223 storage.set('platInfo', newFieldValue); 233 storage.set('platInfo', newFieldValue);
  234 + const { title } = useGlobSetting();
  235 + useTitle(`OEM定制 - ${newFieldValue.name === '' ? title : newFieldValue.name}`);
224 } 236 }
225 237
226 onMounted(async () => { 238 onMounted(async () => {
@@ -14,13 +14,13 @@ @@ -14,13 +14,13 @@
14 <img v-if="qrcodePic" :src="qrcodePic" alt="avatar" /> 14 <img v-if="qrcodePic" :src="qrcodePic" alt="avatar" />
15 <div v-else> 15 <div v-else>
16 <div style="margin-top: 30px"> 16 <div style="margin-top: 30px">
17 - <PlusOutlined style="font-size: 30px" /> 17 + <PlusOutlined style="font-size: 50px" />
18 </div> 18 </div>
19 <div 19 <div
20 class="ant-upload-text flex" 20 class="ant-upload-text flex"
21 - style="width: 280px; height: 130px; align-items: center" 21 + style="width: 180px; height: 100px; align-items: center; font-size: 9px"
22 > 22 >
23 - 支持.PNG、.JPG、.SVG格式,建议尺寸为300px × 300px(及以上),大小不超过2M。</div 23 + 支持.PNG、.JPG格式,建议尺寸为300*300px,大小不超过2M</div
24 > 24 >
25 </div> 25 </div>
26 </Upload> 26 </Upload>
@@ -9,7 +9,7 @@ @@ -9,7 +9,7 @@
9 </Card> 9 </Card>
10 10
11 <div style="width: 100%"> 11 <div style="width: 100%">
12 - <div class="title">{{ activeKey }}</div> 12 + <Card class="card" :title="activeKey" :bordered="false" :bodyStyle="{ display: 'none' }" />
13 <EnterpriseInfo v-if="activeKey === '企业信息'" /> 13 <EnterpriseInfo v-if="activeKey === '企业信息'" />
14 <CVIDraw v-else-if="activeKey === '平台定制'" /> 14 <CVIDraw v-else-if="activeKey === '平台定制'" />
15 <AppDraw v-else /> 15 <AppDraw v-else />
@@ -23,6 +23,7 @@ @@ -23,6 +23,7 @@
23 import EnterpriseInfo from './cpns/EnterpriseInfo.vue'; 23 import EnterpriseInfo from './cpns/EnterpriseInfo.vue';
24 import CVIDraw from './cpns/CVIDraw.vue'; 24 import CVIDraw from './cpns/CVIDraw.vue';
25 import AppDraw from './cpns/AppDraw.vue'; 25 import AppDraw from './cpns/AppDraw.vue';
  26 +
26 const activeKey = ref('企业信息'); 27 const activeKey = ref('企业信息');
27 </script> 28 </script>
28 29
@@ -30,18 +31,16 @@ @@ -30,18 +31,16 @@
30 .title { 31 .title {
31 width: 97.4%; 32 width: 97.4%;
32 height: 50px; 33 height: 50px;
33 - margin: 20px; 34 + margin: 1rem;
34 line-height: 50px; 35 line-height: 50px;
35 font-size: 18px; 36 font-size: 18px;
36 -  
37 - background-color: #fff;  
38 padding-left: 10px; 37 padding-left: 10px;
  38 + background-color: #fff;
39 } 39 }
40 .tab-card { 40 .tab-card {
41 - margin: 20px 0 20px 20px; 41 + margin: 1rem 0 1rem 1rem;
42 } 42 }
43 .card { 43 .card {
44 - margin: 20px;  
45 - border-radius: 8px; 44 + margin: 1rem;
46 } 45 }
47 </style> 46 </style>