Merge branch 'main' of http://120.76.84.145:10101/gitblit/r/H5/xp-robotaxi-web
| | |
| | | keepAlive: false, |
| | | pid: 201, |
| | | hide: true, // 不在菜单中显示 |
| | | fullScreen: true, |
| | | fullScreen: true, |
| | | activeMenu: '/system/accountPermission/roleManagement', |
| | | }, |
| | | { |
| | |
| | | menuType: 'page', |
| | | componentPath: '/businessOperations/geofenceManagement/detail.vue', |
| | | id: 405, |
| | | keepAlive: true, |
| | | keepAlive: false, |
| | | pid: 4, |
| | | hide: true, // 不在菜单中显示 |
| | | activeMenu: '/businessOperations/geofenceManagement', |
| | |
| | | } |
| | | |
| | | export function fetchCaptcha() { |
| | | return request.Get<Service.ResponseResult<any>>('/code') |
| | | return request.Get<Service.ResponseResult<any>>('/account/base/v1/captcha') |
| | | } |
| | | |
| | | export function fetchLoginEncrypted(data: login) { |
| | |
| | | ], |
| | | vehicleColor: [ |
| | | { required: true, message: '请输入车辆颜色', trigger: ['blur', 'input'] }, |
| | | { len: 2, message: '车辆颜色长度为2位', trigger: ['blur', 'input'] }, |
| | | { len: 3, message: '车辆颜色长度为3位', trigger: ['blur', 'input'] }, |
| | | { pattern: /^[\u4E00-\u9FA5a-z]+$/i, message: '车辆颜色仅支持中文和英文', trigger: ['blur', 'input'] }, |
| | | ], |
| | | vehiclePhotos: [ |
| | |
| | | <!-- 车辆信息 --> |
| | | <n-card :bordered="false" class="section-card"> |
| | | <div class="section-header"> |
| | | <div class="section-title">车辆信息</div> |
| | | <div class="section-title"> |
| | | 车辆信息 |
| | | </div> |
| | | </div> |
| | | <n-form |
| | | ref="vehicleFormRef" |
| | |
| | | <n-form-item path="vehiclePhotos" :show-label="false"> |
| | | <div class="photo-section"> |
| | | <div class="photo-label"> |
| | | <span style="color: #ff4d4f; margin-right: 4px">*</span |
| | | >车辆照片 |
| | | <span style="color: #ff4d4f; margin-right: 4px">*</span>车辆照片 |
| | | </div> |
| | | <div class="photo-upload-area"> |
| | | <n-upload |
| | |
| | | <img |
| | | src="/src/assets/element-img/upload.png" |
| | | style="width: 56px; height: 56px" |
| | | /> |
| | | > |
| | | </n-upload> |
| | | </div> |
| | | </div> |
| | |
| | | margin-right: 6px; |
| | | margin-top: 3px; |
| | | " |
| | | /> |
| | | > |
| | | <div class="photo-tip"> |
| | | <span>支持jpg/png,</span> |
| | | <span>大小≤5MB,最多</span> |
| | |
| | | v-model:value="formModel.vehicleColor" |
| | | placeholder="请输入" |
| | | clearable |
| | | maxlength="2" |
| | | maxlength="3" |
| | | /> |
| | | </n-form-item> |
| | | </n-gi> |
| | |
| | | }" |
| | | style="width: 16px; height: 16px" |
| | | alt="arrow" |
| | | /> |
| | | > |
| | | </template> |
| | | <template #empty> |
| | | <div class="flex-center"> |
| | |
| | | src="/src/assets/element-img/no-data.png" |
| | | style="width: 50%" |
| | | alt="no-data" |
| | | /> |
| | | > |
| | | </div> |
| | | </template> |
| | | </n-select> |
| | |
| | | <!-- 完善信息 --> |
| | | <n-card :bordered="false" class="section-card"> |
| | | <div class="section-header"> |
| | | <div class="section-title">完善信息</div> |
| | | <div class="section-title"> |
| | | 完善信息 |
| | | </div> |
| | | </div> |
| | | <n-form |
| | | ref="completeInfoFormRef" |
| | |
| | | :src="getFileIcon(file.name)" |
| | | alt="file-icon" |
| | | style="width: 24px; height: 24px" |
| | | /> |
| | | > |
| | | <span class="file-name">{{ file.name }}</span> |
| | | <span class="file-close" @click="removeFile(index, 'inspectionFiles')">×</span> |
| | | </div> |
| | |
| | | <line x1="12" y1="3" x2="12" y2="15" /> |
| | | </svg> |
| | | </template> |
| | | <span style="font-size: 13px;color: #171F26;">点击上传</span> |
| | | <span style="font-size: 13px;color: #171F26;">点击上传</span> |
| | | </n-button> |
| | | <span class="file-upload-hint">仅支持PDF,大小≤5MB,最多上传5个</span> |
| | | </div> |
| | |
| | | :src="getFileIcon(file.name)" |
| | | alt="file-icon" |
| | | style="width: 24px; height: 24px" |
| | | /> |
| | | > |
| | | <span class="file-name">{{ file.name }}</span> |
| | | <span class="file-close" @click="removeFile(index, 'insuranceFiles')">×</span> |
| | | </div> |
| | |
| | | <line x1="12" y1="3" x2="12" y2="15" /> |
| | | </svg> |
| | | </template> |
| | | <span style="font-size: 13px;color: #171F26;">点击上传</span> |
| | | <span style="font-size: 13px;color: #171F26;">点击上传</span> |
| | | </n-button> |
| | | <span class="file-upload-hint">仅支持PDF,大小≤5MB,最多上传5个</span> |
| | | </div> |
| | |
| | | :src="getFileIcon(file.name)" |
| | | alt="file-icon" |
| | | style="width: 24px; height: 24px" |
| | | /> |
| | | > |
| | | <span class="file-name">{{ file.name }}</span> |
| | | <span class="file-close" @click="removeFile(index, 'onlineCarLicenseFiles')">×</span> |
| | | </div> |
| | |
| | | |
| | | <!-- 底部固定按钮 --> |
| | | <div class="form-actions"> |
| | | <n-button class="action-btn" @click="handleBack"> 取消 </n-button> |
| | | <n-button class="action-btn" @click="handleBack"> |
| | | 取消 |
| | | </n-button> |
| | | <n-button |
| | | type="primary" |
| | | class="action-btn" |
| | |
| | | :deep(.n-upload-file-list .n-upload-file:first-child) { |
| | | margin-top: 0; |
| | | } |
| | | |
| | | |
| | | /* 底部固定按钮 */ |
| | | .form-actions { |
| | |
| | | const { VITE_MAP_KEY } = import.meta.env |
| | | |
| | | // 定义地图图标在线链接 |
| | | const MARK_ICON_RED = 'https://huishou-1323682843.cos.ap-nanjing.myqcloud.com/images/36c926b7-1e6d-4310-86c2-a71b69dc49b7.png' |
| | | const MARK_ICON_GREEN = 'https://huishou-1323682843.cos.ap-nanjing.myqcloud.com/images/8f048a0f-3c36-4b6e-ae14-77d85bc919bf.png' |
| | | const MARK_ICON_RED = 'https://huishou-1323682843.cos.ap-nanjing.myqcloud.com/images/d8c0a834-069f-4e11-8130-1257d73ef449.png' |
| | | const MARK_ICON_GREEN = 'https://huishou-1323682843.cos.ap-nanjing.myqcloud.com/images/ab2e2d89-ea82-4081-9729-ab212460c375.png' |
| | | const LABEL_ICON = 'https://huishou-1323682843.cos.ap-nanjing.myqcloud.com/images/b6ca5f3e-913b-49a5-a46e-7482b0d05d1a.png' |
| | | |
| | | const MAX_VERTICES = 16 // 最大顶点数限制 |
| | | const MAX_AREA = 81 // 最大区域面积限制(单位:平方公里) |
| | | const INITIAL_ZOOM = 14 |
| | | // let centerPoint = [104.066301, 30.572961] |
| | | let centerPoint = [113.264499, 23.130061] |
| | | |
| | |
| | | }) |
| | | } |
| | | |
| | | function clampNumber(value: number, min: number, max: number) { |
| | | return Math.max(min, Math.min(max, value)) |
| | | } |
| | | |
| | | function getMarkerScale() { |
| | | if (!map.value) { |
| | | return 1 |
| | | } |
| | | const zoom = typeof map.value.getZoom === 'function' ? map.value.getZoom() : INITIAL_ZOOM |
| | | const scale = 1 + (zoom - INITIAL_ZOOM) * 0.12 |
| | | return clampNumber(scale, 0.8, 1.8) |
| | | } |
| | | |
| | | function getScaledSize(width: number, height: number) { |
| | | const scale = getMarkerScale() |
| | | return new AMap.Size(Math.round(width * scale), Math.round(height * scale)) |
| | | } |
| | | |
| | | function getScaledOffset(x: number, y: number) { |
| | | const scale = getMarkerScale() |
| | | return new AMap.Pixel(Math.round(x * scale), Math.round(y * scale)) |
| | | } |
| | | |
| | | function getPointIconUrl(status: string) { |
| | | const redStatus = ['待测试', '测试中', '测试不通过', '待生效', '已停用', '已失效'] |
| | | const greenStatus = ['可运营', '启用中'] |
| | |
| | | return |
| | | } |
| | | const icon = new AMap.Icon({ |
| | | size: new AMap.Size(46, 46), |
| | | size: getScaledSize(24, 24), |
| | | image: getPointIconUrl(point.status), |
| | | imageSize: new AMap.Size(46, 46), |
| | | imageSize: getScaledSize(24, 24), |
| | | }) |
| | | const marker = new AMap.Marker({ |
| | | position: [point.lon, point.lat], |
| | |
| | | // title: point.name, |
| | | map: showPoints ? map : null, |
| | | extData: point, |
| | | offset: new AMap.Pixel(-23, -23), |
| | | offset: getScaledOffset(-20, -20), |
| | | }) |
| | | |
| | | // 添加鼠标移入事件 |
| | |
| | | > |
| | | </template> |
| | | <template #empty> |
| | | <div class="flex-center"> |
| | | <img |
| | | src="/src/assets/element-img/no-data.png" |
| | | style="width: 50%" |
| | | alt="no-data" |
| | | /> |
| | | </div> |
| | | </template> |
| | | <div class="flex-center"> |
| | | <img |
| | | src="/src/assets/element-img/no-data.png" |
| | | style="width: 50%" |
| | | alt="no-data" |
| | | > |
| | | </div> |
| | | </template> |
| | | </n-select> |
| | | </n-form-item> |
| | | <n-form-item label="描述" path="areaDescription"> |
| | |
| | | > |
| | | </template> |
| | | <template #empty> |
| | | <div class="flex-center"> |
| | | <img |
| | | src="/src/assets/element-img/no-data.png" |
| | | style="width: 50%" |
| | | alt="no-data" |
| | | /> |
| | | </div> |
| | | </template> |
| | | <div class="flex-center"> |
| | | <img |
| | | src="/src/assets/element-img/no-data.png" |
| | | style="width: 50%" |
| | | alt="no-data" |
| | | > |
| | | </div> |
| | | </template> |
| | | </n-select> |
| | | </div> |
| | | </n-form-item> |
| | |
| | | src="/src/assets/element-img/no-data.png" |
| | | style="width: 50%" |
| | | alt="no-data" |
| | | /> |
| | | > |
| | | </div> |
| | | </template> |
| | | </n-select> |
| | |
| | | src="/src/assets/element-img/no-data.png" |
| | | style="width: 50%" |
| | | alt="no-data" |
| | | /> |
| | | > |
| | | </div> |
| | | </template> |
| | | </n-select> |
| | |
| | | import { uploadSingleFile } from '@/utils/upload' |
| | | |
| | | // 定义地图图标在线链接 |
| | | const MARK_ICON_RED = 'https://huishou-1323682843.cos.ap-nanjing.myqcloud.com/images/025ade6a-635b-4ec7-9581-2f60eb319862.png' |
| | | // const MARK_ICON_RED = 'https://huishou-1323682843.cos.ap-nanjing.myqcloud.com/images/025ade6a-635b-4ec7-9581-2f60eb319862.png' |
| | | const MARK_ICON_RED = 'https://huishou-1323682843.cos.ap-nanjing.myqcloud.com/images/d8c0a834-069f-4e11-8130-1257d73ef449.png' |
| | | const MARK_ICON_GREEN = 'https://huishou-1323682843.cos.ap-nanjing.myqcloud.com/images/ab2e2d89-ea82-4081-9729-ab212460c375.png' |
| | | const MARK_ICON_BLUE = 'https://huishou-1323682843.cos.ap-nanjing.myqcloud.com/images/73a51310-2871-4c4a-a763-8e1a59a31f50.png' |
| | | |
| | |
| | | address: currentPoint.value.address, |
| | | }] |
| | | : [] |
| | | |
| | | |
| | | // 获取当前点位的城市信息,用于限制搜索范围 |
| | | if (typeof AMap !== 'undefined') { |
| | | const geocoder = new AMap.Geocoder({ city: '全国' }) |
| | |
| | | AMap.plugin('AMap.AutoComplete', () => { |
| | | const city = tempMarkerForm.value.city || '全国' |
| | | const autoOptions = { |
| | | city: city, |
| | | city, |
| | | citylimit: !!tempMarkerForm.value.city, // 如果有城市信息,则严格限制在当前城市搜索 |
| | | pageSize: 50, // 设置返回结果数量为50 |
| | | } |
| | |
| | | <!-- 打点或者已打点标识 --> |
| | | <div class="point-info-right" style="flex-shrink: 0"> |
| | | <div v-if="point.source === 'api'" class="api-point"> |
| | | <img @error="(e) => { e.target.src = 'https://huishou-1323682843.cos.ap-nanjing.myqcloud.com/images/9bed493b-a6aa-4ef6-ac10-7f67f5c6adc5.png' }" |
| | | <img |
| | | src="/src/assets/point/pointed.png" |
| | | class="pointed-image" |
| | | @error="(e) => { e.target.src = 'https://huishou-1323682843.cos.ap-nanjing.myqcloud.com/images/9bed493b-a6aa-4ef6-ac10-7f67f5c6adc5.png' }" |
| | | > |
| | | <div class="api-point-text"> |
| | | 已打点 |
| | |
| | | |
| | | <!-- 底部新增按钮 --> |
| | | <div |
| | | v-permission="4061" |
| | | v-show="filterExpanded && !isAddingPoint && showLeftContent" |
| | | v-permission="4061" |
| | | class="footer-more" |
| | | @click="toPointList" |
| | | > |
| | |
| | | @blur="handleAddressSelectBlur" |
| | | @update:show="handleAddressDropdownVisibleChange" |
| | | > |
| | | <template #arrow> |
| | | <img |
| | | src="https://huishou-1323682843.cos.ap-nanjing.myqcloud.com/images/e120f81c-9f15-4e1a-9938-22252898edf9.png" |
| | | class="arrow-icon" |
| | | :class="{ 'role-select-arrow--open': isAddressDropdownVisible }" |
| | | style="width: 16px;height: 16px;" |
| | | alt="arrow" |
| | | > |
| | | </template> |
| | | <template #empty> |
| | | <div class="flex-center"> |
| | | <img |
| | | src="/src/assets/element-img/no-data.png" |
| | | style="width: 50%" |
| | | alt="no-data" |
| | | /> |
| | | </div> |
| | | </template> |
| | | <template #arrow> |
| | | <img |
| | | src="https://huishou-1323682843.cos.ap-nanjing.myqcloud.com/images/e120f81c-9f15-4e1a-9938-22252898edf9.png" |
| | | class="arrow-icon" |
| | | :class="{ 'role-select-arrow--open': isAddressDropdownVisible }" |
| | | style="width: 16px;height: 16px;" |
| | | alt="arrow" |
| | | > |
| | | </template> |
| | | <template #empty> |
| | | <div class="flex-center"> |
| | | <img |
| | | src="/src/assets/element-img/no-data.png" |
| | | style="width: 50%" |
| | | alt="no-data" |
| | | > |
| | | </div> |
| | | </template> |
| | | </n-select> |
| | | </div> |
| | | <div class="popup-form-row"> |
| | |
| | | <div class="operate-bottom"> |
| | | <div class="operate-card"> |
| | | <!-- 定位 --> |
| | | <img @error="(e) => { e.target.src = 'https://huishou-1323682843.cos.ap-nanjing.myqcloud.com/images/9bed493b-a6aa-4ef6-ac10-7f67f5c6adc5.png' }" |
| | | <img |
| | | src="../../../assets/point/location.svg" |
| | | class="location-icon location" |
| | | @error="(e) => { e.target.src = 'https://huishou-1323682843.cos.ap-nanjing.myqcloud.com/images/9bed493b-a6aa-4ef6-ac10-7f67f5c6adc5.png' }" |
| | | @click="handleResetMapCenter" |
| | | > |
| | | <!-- 放大 --> |
| | |
| | | :key="item.id" |
| | | class="img-item" |
| | | > |
| | | <img @error="(e) => { e.target.src = 'https://huishou-1323682843.cos.ap-nanjing.myqcloud.com/images/9bed493b-a6aa-4ef6-ac10-7f67f5c6adc5.png' }" |
| | | <img |
| | | :src="item.url || 'https://huishou-1323682843.cos.ap-nanjing.myqcloud.com/images/9bed493b-a6aa-4ef6-ac10-7f67f5c6adc5.png'" |
| | | class="point-img-item" |
| | | @error="(e) => { e.target.src = 'https://huishou-1323682843.cos.ap-nanjing.myqcloud.com/images/9bed493b-a6aa-4ef6-ac10-7f67f5c6adc5.png' }" |
| | | @click="handlePreviewImage(item.url)" |
| | | > |
| | | <img |
| | |
| | | :key="item.id" |
| | | class="img-item" |
| | | > |
| | | <img @error="(e) => { e.target.src = 'https://huishou-1323682843.cos.ap-nanjing.myqcloud.com/images/9bed493b-a6aa-4ef6-ac10-7f67f5c6adc5.png' }" |
| | | :src="item.url ||'https://huishou-1323682843.cos.ap-nanjing.myqcloud.com/images/9bed493b-a6aa-4ef6-ac10-7f67f5c6adc5.png'" |
| | | <img |
| | | :src="item.url || 'https://huishou-1323682843.cos.ap-nanjing.myqcloud.com/images/9bed493b-a6aa-4ef6-ac10-7f67f5c6adc5.png'" |
| | | class="point-img-item" |
| | | @error="(e) => { e.target.src = 'https://huishou-1323682843.cos.ap-nanjing.myqcloud.com/images/9bed493b-a6aa-4ef6-ac10-7f67f5c6adc5.png' }" |
| | | @click="handlePreviewImage(item.url)" |
| | | > |
| | | </div> |