| .trae/skills/通用规范/SKILL.md | ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史 | |
| src/views/businessOperations/cruise/parade-plan/add.vue | ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史 | |
| src/views/businessOperations/cruise/parade-plan/detail.vue | ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史 | |
| src/views/businessOperations/cruise/parade-plan/index.vue | ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史 | |
| src/views/businessOperations/cruise/patrol-points/components/SelectPointModal.vue | ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史 | |
| src/views/businessOperations/geofenceManagement/detail.vue | ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史 | |
| src/views/businessOperations/geofenceManagement/index.vue | ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史 | |
| src/views/businessOperations/openCity/components/TableModal.vue | ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史 | |
| src/views/businessOperations/openCity/index.vue | ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史 | |
| src/views/businessOperations/pointManagement/index.vue | ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史 | |
| src/views/businessOperations/pointManagement/list.vue | ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史 |
.trae/skills/通用规范/SKILL.md
@@ -4,4 +4,4 @@ --- 1,如果有页面有table,那么需要给table设置空状态的插槽,参考src\views\businessOperations\geofenceManagement\index.vue 页面的插槽 2,如果有图片,需要设置图片加载失败的默认图片@/assets/element-img/error-img.png。需要注意,图片可能有img和组件的nimage 2,如果有图片,并且图片的路径是变量而不是固定路径或固定地址,需要设置图片加载失败的默认图片@/assets/element-img/error-img.png。需要注意,图片可能有img和组件的nimage src/views/businessOperations/cruise/parade-plan/add.vue
@@ -261,7 +261,7 @@ style="border-bottom: 1px solid rgba(23, 31, 38, 0.1); cursor: move" draggable="true" @dragstart="handleDragStart(index)" @dragover="handleDragOver" @drop="handleDrop(index)"> <div class="w-16 flex"> <img src="/src/assets/point/union.png" alt="拖动" style="width: 15px; height: 15px" /> <img src="/src/assets/point/union.png" alt="拖动" style="width: 15px; height: 15px" @error="(e: any) => { e.target.src = '/src/assets/element-img/error-img.png' }" /> </div> <div class="flex-1 text-sm pr-4"> {{ point.name }} src/views/businessOperations/cruise/parade-plan/detail.vue
@@ -582,7 +582,7 @@ @drop="handleDrop(point.id)" > <div class="w-16 flex"> <img src="/src/assets/point/union.png" alt="拖动" style="width: 15px; height: 15px"> <img @error="(e) => { e.target.src = '/src/assets/element-img/error-img.png' }" src="/src/assets/point/union.png" alt="拖动" style="width: 15px; height: 15px"> </div> <div class="flex-1 text-sm pr-4"> {{ point.name }} @@ -766,7 +766,13 @@ v-model:checked-row-keys="selectedRecords" class="flex-1" :columns="recordColumns" :data="records" :loading="recordLoading" :row-key="(row: CruiseOrderRow) => String(row.id)" :scroll-x="1290" flex-height /> > <template #empty> <div class="flex-center"> <img src="/src/assets/element-img/no-data.png" style="width:123px;height:125px" @error="(e: any) => { e.target.src = '/src/assets/element-img/error-img.png' }"> </div> </template> </n-data-table> <Pagination :count="recordTotal" :page="recordCurrentPage" :page-size="recordPageSize" class="robotaxi-pagination mt-12px" @change="handleRecordPaginationChange" src/views/businessOperations/cruise/parade-plan/index.vue
@@ -234,7 +234,13 @@ :scroll-x="tableScrollX" :header-height="18" :row-height="18" /> > <template #empty> <div class="flex-center"> <img src="/src/assets/element-img/no-data.png" style="width:123px;height:125px" @error="(e: any) => { e.target.src = '/src/assets/element-img/error-img.png' }"> </div> </template> </n-data-table> <Pagination :count="count" :page="pageParams.pageNum" src/views/businessOperations/cruise/patrol-points/components/SelectPointModal.vue
@@ -215,7 +215,13 @@ :data="listData" :loading="loading" :row-key="(row: Point) => row.id" /> > <template #empty> <div class="flex-center"> <img src="/src/assets/element-img/no-data.png" style="width:123px;height:125px" @error="(e: any) => { e.target.src = '/src/assets/element-img/error-img.png' }"> </div> </template> </n-data-table> <Pagination style="margin-top: 12px;" :count="pagination.itemCount" src/views/businessOperations/geofenceManagement/detail.vue
@@ -1707,7 +1707,7 @@ // 创建信息窗口显示区域名称 infoWindow = new AMap.InfoWindow({ isCustom: true, content: `<div class="map-info"><div class="map-info-name">${item.areaName}</div><img class="map-info-icon" src="${LABEL_ICON}" alt="图标"></div>`, content: `<div class="map-info"><div class="map-info-name">${item.areaName}</div><img onerror="this.src='/src/assets/element-img/error-img.png'" class="map-info-icon" src="${LABEL_ICON}" alt="图标"></div>`, autoMove: false, }) @@ -1901,7 +1901,7 @@ marker.on('mouseover', () => { marker.setLabel({ offset: new AMap.Pixel(0, -5), // 设置文本标注偏移量 content: `<div class="map-info"><div class="map-info-name">${point.name}</div><img class="map-info-icon" src="${LABEL_ICON}" alt="图标"></div>`, // 设置文本标注内容 content: `<div class="map-info"><div class="map-info-name">${point.name}</div><img onerror="this.src='/src/assets/element-img/error-img.png'" class="map-info-icon" src="${LABEL_ICON}" alt="图标"></div>`, // 设置文本标注内容 direction: 'top', // 设置文本标注方位 }) }) @@ -2110,8 +2110,7 @@ 停用 </template> </n-switch> <img src="../../../assets/geofence/close2.png" class="w-24px h-24px ml-auto cursor-pointer" <img src="../../../assets/geofence/close2.png" class="w-24px h-24px ml-auto cursor-pointer" @click="onClose" > </div> @@ -2376,12 +2375,10 @@ v-else v-model:value="item.name" clearable @keydown.enter="item.edit = false" @blur="item.edit = false" /> <img v-if="!item.edit && !isEdit" src="../../../assets/geofence/edit.png" class="icon" <img v-if="!item.edit && !isEdit" src="../../../assets/geofence/edit.png" class="icon" @click="item.edit = true" > <img v-if="!isEdit" src="../../../assets/geofence/close.png" class="icon" <img v-if="!isEdit" src="../../../assets/geofence/close.png" class="icon" @click="removeStrategyGroup(item)" > </div> @@ -2419,8 +2416,7 @@ v-model:formatted-value="sub.endTime" format="HH:mm" value-format="HH:mm" placeholder="请选择" clearable :disabled="isEdit" :actions="['now']" :status="sub.endTime ? 'success' : 'error'" @update:value="() => { closeTimePicker(); item.errorMsg = '' }" /> <img v-if="!isEdit" src="../../../assets/geofence/del.png" <img v-if="!isEdit" src="../../../assets/geofence/del.png" class="w-[16px] h-[16px] cursor-pointer" @click="removeTimePeriod(item, sub)" > </div> @@ -2463,20 +2459,18 @@ </div> </div> <div class="flex items-center gap-8px"> <img v-if="!sub.edit" src="../../../assets/geofence/edit1.png" <img v-if="!sub.edit" src="../../../assets/geofence/edit1.png" class="w-[16px] h-[16px] cursor-pointer" @click.stop="handleEdit(sub)" > <img v-else-if="sub.edit" src="../../../assets/geofence/editActive.png" class="w-[16px] h-[16px] cursor-pointer"> <img src="../../../assets/geofence/del.png" class="w-[16px] h-[16px] cursor-pointer" <img v-else-if="sub.edit" src="../../../assets/geofence/editActive.png" class="w-[16px] h-[16px] cursor-pointer"> <img src="../../../assets/geofence/del.png" class="w-[16px] h-[16px] cursor-pointer" @click.stop="removeDisallowedArea(sub)" > <n-switch v-model:value="sub.areaStatus" :checked-value="1" :unchecked-value="2" @click.stop /> </div> </div> <div class="addBtn" @click="addDisallowedArea"> <img src="../../../assets/geofence/add.png" class="icon"> <img src="../../../assets/geofence/add.png" class="icon"> <span>添加禁行区</span> </div> </div> @@ -2512,13 +2506,13 @@ <!-- 图层 --> <div class="layer-btn" :class="{ shifted: drawerVisible }" @click="toggleLayer"> <img v-if="!layerOptions.isActive" src="../../../assets/point/coverage.png" class="operate-icon"> <img v-else src="../../../assets//point/active-coverage.png" class="operate-icon"> <img v-if="!layerOptions.isActive" src="../../../assets/point/coverage.png" class="operate-icon"> <img v-else src="../../../assets//point/active-coverage.png" class="operate-icon"> <div class="operate-text" :style="{ color: layerOptions.isActive ? '#0068FF' : '#171F26' }"> 图层 </div> <img v-if="!layerOptions.isActive" src="../../../assets/point/more.png" class="operate-icon"> <img v-else src="../../../assets/point/foldUp.png" class="operate-icon"> <img v-if="!layerOptions.isActive" src="../../../assets/point/more.png" class="operate-icon"> <img v-else src="../../../assets/point/foldUp.png" class="operate-icon"> </div> <!-- 图层弹窗 --> @@ -2538,11 +2532,11 @@ </template> <div class="flex items-center gap-8px text-12px"> <span class="flex items-center gap-2px"> <img src="../../../assets/geofence/successMarker.png" class="w-24px h-24px"> <img src="../../../assets/geofence/successMarker.png" class="w-24px h-24px"> 可用点位 </span> <span class="flex items-center gap-2px text-12px"> <img src="../../../assets/geofence/errorMarker.png" class="w-24px h-24px"> <img src="../../../assets/geofence/errorMarker.png" class="w-24px h-24px"> 不可用点位 </span> </div> @@ -2553,9 +2547,9 @@ <!-- 定位和放大缩小 --> <div class="operate-bottom" :class="{ shifted: drawerVisible }"> <div class="operate-card"> <img src="../../../assets/point/location.svg" class="location-icon location" @click="centerMap"> <img src="../../../assets/point/add.svg" class="location-icon add" @click="addPoint"> <img src="../../../assets/point/reduce.svg" class="location-icon" @click="reducePoint"> <img src="../../../assets/point/location.svg" class="location-icon location" @click="centerMap"> <img src="../../../assets/point/add.svg" class="location-icon add" @click="addPoint"> <img src="../../../assets/point/reduce.svg" class="location-icon" @click="reducePoint"> </div> </div> @@ -2596,11 +2590,10 @@ v-else v-model:value="item.name" clearable :autofocus="item.edit" style="width: 80%;" @keydown.enter="item.edit = false" @blur="item.edit = false" @click.stop /> <img v-if="!item.edit" src="../../../assets/geofence/edit.png" class="icon" <img v-if="!item.edit" src="../../../assets/geofence/edit.png" class="icon" @click.stop="item.edit = true" > <img src="../../../assets/geofence/close.png" class="icon" @click="removeDisallowedAreaGroup(item)"> <img src="../../../assets/geofence/close.png" class="icon" @click="removeDisallowedAreaGroup(item)"> </div> <div class="flex flex-col gap-8px"> <div class="flex items-center flex-wrap gap-8px"> @@ -2649,8 +2642,7 @@ :is-hour-disabled="(hour: number) => isDisallowedTimeDisabled(hour, undefined, item, 'end')" :is-minute-disabled="(minute: number, hour: any) => isDisallowedTimeDisabled(hour, minute, item, 'end')" /> <img src="../../../assets/geofence/del.png" <img src="../../../assets/geofence/del.png" class="w-[16px] h-[16px] cursor-pointer" @click="removeDisallowedAreaGroupTimePeriod(item, sub)" > </div> @@ -2658,7 +2650,7 @@ {{ item.errorMsg }} </div> <div class="addTime" @click="addDisallowedAreaGroupTimePeriod(item)"> <img src="../../../assets/geofence/add2.png" class="icon"> <img src="../../../assets/geofence/add2.png" class="icon"> <span>添加时段</span> </div> </div> @@ -2666,7 +2658,7 @@ </div> </div> <div class="addBtn" @click="addDisallowedAreaGroup"> <img src="../../../assets/geofence/add.png" class="icon"> <img src="../../../assets/geofence/add.png" class="icon"> <span>添加运营策略组</span> </div> </div> src/views/businessOperations/geofenceManagement/index.vue
@@ -154,6 +154,7 @@ return h('img', { src, class: 'w-20px h-20px', onError: (e: any) => { e.target.src = '/src/assets/element-img/error-img.png' } }) }, }, @@ -181,6 +182,7 @@ return h('img', { src, class: 'w-20px h-20px', onError: (e: any) => { e.target.src = '/src/assets/element-img/error-img.png' } }) }, }, @@ -313,6 +315,7 @@ class={`arrow-icon ${isElectronicAreaIdOpen.value ? 'arrow-icon--open' : ''}`} style={{ width: '16px', height: '16px' }} alt="arrow" onError={(e: any) => { e.target.src = '/src/assets/element-img/error-img.png' }} /> ), }} @@ -483,7 +486,7 @@ > <template #empty> <div class="flex-center"> <img src="/src/assets/element-img/no-data.png" style="width:123px;height:125px"> <img src="/src/assets/element-img/no-data.png" style="width:123px;height:125px" @error="(e: any) => { e.target.src = '/src/assets/element-img/error-img.png' }"> </div> </template> </n-data-table> src/views/businessOperations/openCity/components/TableModal.vue
@@ -213,7 +213,7 @@ <img src="https://huishou-1323682843.cos.ap-nanjing.myqcloud.com/images/e120f81c-9f15-4e1a-9938-22252898edf9.png" class="arrow-icon" :class="{ 'arrow-icon--open': isRoleSelectOpen }" style="width: 16px;height: 16px;" alt="arrow"> alt="arrow" @error="(e: any) => { e.target.src = '/src/assets/element-img/error-img.png' }"> </template> </n-cascader> </n-form-item> src/views/businessOperations/openCity/index.vue
@@ -185,6 +185,7 @@ class={`arrow-icon ${isRoleSelectOpen.value ? 'arrow-icon--open' : ''}`} style={{ width: '16px', height: '16px' }} alt="arrow" onError={(e: any) => { e.target.src = '/src/assets/element-img/error-img.png' }} /> ), }} @@ -285,7 +286,13 @@ <n-data-table class="flex-1" :columns="columns" :data="listData" :loading="loading" flex-height :bordered="false" :scroll-x="1020" :header-height="18" :row-height="18" /> > <template #empty> <div class="flex-center"> <img src="/src/assets/element-img/no-data.png" style="width:123px;height:125px" @error="(e: any) => { e.target.src = '/src/assets/element-img/error-img.png' }"> </div> </template> </n-data-table> <Pagination :count="count" :page="pageNum" :page-size="pageSize" class="robotaxi-pagination mt-12px" @change="changePage" src/views/businessOperations/pointManagement/index.vue
@@ -3024,7 +3024,7 @@ <!-- 打点或者已打点标识 --> <div class="point-info-right" style="flex-shrink: 0"> <div v-if="point.source === 'api'" class="api-point"> <img <img @error="(e) => { e.target.src = '/src/assets/element-img/error-img.png' }" src="/src/assets/point/pointed.png" class="pointed-image" > @@ -3222,7 +3222,7 @@ <div class="operate-bottom"> <div class="operate-card"> <!-- 定位 --> <img <img @error="(e) => { e.target.src = '/src/assets/element-img/error-img.png' }" src="../../../assets/point/location.svg" class="location-icon location" @click="handleResetMapCenter" @@ -3364,7 +3364,7 @@ :key="item.id" class="img-item" > <img <img @error="(e) => { e.target.src = '/src/assets/element-img/error-img.png' }" :src="item.url" class="point-img-item" @click="handlePreviewImage(item.url)" @@ -3695,7 +3695,7 @@ :key="item.id" class="img-item" > <img <img @error="(e) => { e.target.src = '/src/assets/element-img/error-img.png' }" :src="item.url" class="point-img-item" @click="handlePreviewImage(item.url)" @@ -3851,7 +3851,7 @@ @click="closePreview" > <div class="preview-content"> <img :src="previewImage" class="preview-image" @click.stop> <img :src="previewImage" class="preview-image" @click.stop @error="(e: any) => { e.target.src = '/src/assets/element-img/error-img.png' }"> <div class="preview-close" @click="closePreview"> <svg viewBox="0 0 1024 1024" xmlns="http://www.w3.org/2000/svg"> <path src/views/businessOperations/pointManagement/list.vue
@@ -584,7 +584,13 @@ :scroll-x="tableScrollX" :row-key="(row) => row.id" @update:checked-row-keys="handleCheck" /> > <template #empty> <div class="flex-center"> <img src="/src/assets/element-img/no-data.png" style="width:123px;height:125px" @error="(e: any) => { e.target.src = '/src/assets/element-img/error-img.png' }"> </div> </template> </n-data-table> <Pagination :count="pagination.itemCount" :page="pagination.page"