| | |
| | | const searchModel = ref({ |
| | | nickName: '', |
| | | phoneNumber: '', |
| | | roleId: undefined as number | undefined, |
| | | roleId: null as number | null, |
| | | }) |
| | | |
| | | // 角色下拉选项 |
| | |
| | | |
| | | // 重置 |
| | | function handleReset() { |
| | | searchModel.value = { |
| | | nickName: '', |
| | | phoneNumber: '', |
| | | roleId: undefined, |
| | | } |
| | | searchModel.value.nickName = '' |
| | | searchModel.value.phoneNumber = '' |
| | | searchModel.value.roleId = null |
| | | currentPage.value = 1 |
| | | getStaffList() |
| | | } |
| | |
| | | // 监听弹窗打开 |
| | | watch(visible, (val) => { |
| | | if (val) { |
| | | handleReset() |
| | | checkedRowKeys.value = [...props.selectedIds] |
| | | getStaffList() |
| | | getRoleList() |
| | | } else { |
| | | // 关闭时清空,防止下次打开受影响(虽然 watch 里会重新赋值,但保持干净是个好习惯) |
| | |
| | | // 监听弹窗打开 |
| | | watch(visible, (val) => { |
| | | if (val) { |
| | | handleReset() |
| | | checkedRowKeys.value = props.existingVehicles.map(v => v.id) |
| | | // 清空并初始化 allLoadedData |
| | | allLoadedData.value.clear() |
| | |
| | | </div> |
| | | |
| | | <!-- 模式 --> |
| | | <div class="detail-row"> |
| | | <!-- <div class="detail-row"> |
| | | <span class="detail-label">当前模式:</span> |
| | | <span class="detail-value">{{ detailData.acceptOrTest === 2 ? '测试' : '接单' }}</span> |
| | | </div> |
| | | </div> --> |
| | | |
| | | <!-- 维修时间 --> |
| | | <div class="detail-row"> |
| | | <span class="detail-label">维修时间:</span> |
| | | <span class="detail-label">维修停运时间:</span> |
| | | <span class="detail-value">{{ detailData.repairStartTime || '-' }} — {{ detailData.repairEndTime || '-' }}</span> |
| | | </div> |
| | | |
| | |
| | | 清洁状况 |
| | | </div> |
| | | <div class="section-grid"> |
| | | <div class="grid-item"> |
| | | <!-- <div class="grid-item"> |
| | | <span class="item-label">车身标识及清洁:</span> |
| | | <NSpace v-if="detailData.bodyCleanImages && detailData.bodyCleanImages.length"> |
| | | <NImage |
| | |
| | | /> |
| | | </NSpace> |
| | | <span v-else>-</span> |
| | | </div> |
| | | </div> --> |
| | | <div class="grid-item"> |
| | | <span class="item-label">舱内清洁消毒:</span> |
| | | <NSpace v-if="detailData.interiorCleanImages && detailData.interiorCleanImages.length"> |
| | |
| | | </div> |
| | | </div> |
| | | |
| | | <!-- 遗失物品 |
| | | <!-- 遗失物品 --> |
| | | <div class="section"> |
| | | <div class="section-title"> |
| | | 遗失物品 |
| | |
| | | </div> |
| | | </div> |
| | | </div> |
| | | </div> --> |
| | | </div> |
| | | |
| | | <!-- 备注 --> |
| | | <!-- 操作信息 --> |
| | | <div class="section no-border"> |
| | | <div class="section-title"> |
| | | 备注 |
| | | 操作信息 |
| | | </div> |
| | | <div class="text-content"> |
| | | {{ detailData.remarks || '-' }} |
| | | <div class="section-grid"> |
| | | <div class="grid-item"> |
| | | <span class="item-label">操作人:</span> |
| | | <span class="item-value">{{ detailData.operator || '-' }}</span> |
| | | </div> |
| | | <div class="grid-item"> |
| | | <span class="item-label">操作时间:</span> |
| | | <span class="item-value">{{ detailData.operationTime || '-' }}</span> |
| | | </div> |
| | | </div> |
| | | </div> |
| | | </div> |
| | |
| | | { title: '整备时间', key: 'operationTime', align: 'left' as const, width: 180 }, |
| | | { title: '胎压', key: 'tirePressure', align: 'left' as const, width: 260, render: (row: any) => renderTireCell(row) }, |
| | | { title: '灯光', key: 'light', align: 'left' as const, width: 160, render: (row: any) => renderLightCell(row) }, |
| | | { title: '车身标识及清洁', key: 'bodyEmblem', align: 'left' as const, width: 160, render: (row: any) => renderImageCell(row.bodyEmblem) }, |
| | | // { title: '车身标识及清洁', key: 'bodyEmblem', align: 'left' as const, width: 160, render: (row: any) => renderImageCell(row.bodyEmblem) }, |
| | | { title: '舱内清洁消毒', key: 'cabinCleaning', align: 'left' as const, width: 160, render: (row: any) => renderImageCell(row.cabinCleaning) }, |
| | | // { title: '遗失物品上报', key: 'lostItems', align: 'left' as const, width: 160, render: (row: any) => renderImageCell(row.lostItems) }, |
| | | { title: '操作人', key: 'operationsUserName', align: 'left' as const, width: 140 }, |
| | |
| | | turnSignalImages: collectImageUrls(row.turnSignal), |
| | | brakeLightImages: collectImageUrls(row.brakeLight), |
| | | fogLightImages: collectImageUrls(row.fogLight), |
| | | bodyCleanImages: collectImageUrls(row.bodyEmblem), |
| | | // bodyCleanImages: collectImageUrls(row.bodyEmblem), |
| | | interiorCleanImages: collectImageUrls(row.cabinCleaning), |
| | | lostItemImages: collectImageUrls(row.lostItems), |
| | | vehicleLocation: row.vehicleLocation || '-', |
| | | lostItemRemark: row.lostItemsRemark || row.lostRemark || row.lostDescribe || '', |
| | | remarks: row.remarks || row.remark || '', |
| | | operator: row.operationsUserName || '-', |
| | | operationTime: row.operationTime || '-', |
| | | } |
| | | showPreparationDetail.value = true |
| | | } |
| | |
| | | flex: 1; |
| | | display: flex; |
| | | flex-direction: column; |
| | | overflow: auto; |
| | | |
| | | .point-name { |
| | | font-family: PingFang SC; |
| | |
| | | // { required: true, message: '请输入经度', trigger: 'blur' } |
| | | // ], |
| | | faqDisplayCount: [ |
| | | { required: true, type: 'number', message: '请输入常见问题首页展示数', trigger: 'blur' } |
| | | { required: true, type: 'integer',min: 0, message: '请输入正整数', trigger: 'blur' } |
| | | ], |
| | | nearPointDistance: [ |
| | | { required: true, type: 'number', message: '请输入小程序附近热门站点推荐距离', trigger: 'blur' } |
| | | { required: true, type: 'integer', min: 0, message: '请输入正整数', trigger: 'blur' } |
| | | ] |
| | | } |
| | | |
| | |
| | | else { |
| | | params = { |
| | | ...model.value, |
| | | ...pageParams.value, |
| | | } |
| | | } |
| | | const response = await exportInvitationExcel(params) |
| | |
| | | :data="listData" |
| | | :loading="loading" |
| | | :row-key="(row: any) => row.id" |
| | | @checked-row-keys="handleCheck" |
| | | @update:checked-row-keys="handleCheck" |
| | | flex-height |
| | | :bordered="false" |
| | | :header-height="18" |
| | | :row-height="18" |
| | | /> |
| | | <Pagination :count="count" :page-size="pageParams.pageSize" :page="pageParams.pageNum" class="robotaxi-pagination mt-12px" @change="changePage" /> |
| | | </div> |
| | |
| | | |
| | | // 导出 |
| | | async function handleExport() { |
| | | const response = await exportWhitelist(model.value) |
| | | const params = selectedRowKeys.value.length > 0 ? { ids: selectedRowKeys.value } : model.value |
| | | const response = await exportWhitelist(params) |
| | | if (response instanceof Blob) { |
| | | downloadFile(response, `白名单列表_${new Date().getTime()}.xlsx`) |
| | | message.success('导出成功') |
| | |
| | | </NButton> |
| | | </div> |
| | | </div> |
| | | <n-data-table class="flex-1" :columns="columns" :data="whitelistData" :loading="loading" :row-key="(row: any) => row.id" |
| | | @checked-row-keys="handleCheck" flex-height :bordered="false"/> |
| | | <n-data-table class="flex-1" :columns="columns" :data="whitelistData" :loading="loading" :row-key="(row: any) => row.id" v-model:checked-row-keys="selectedRowKeys" |
| | | @update:checked-row-keys="handleCheck" flex-height :bordered="false"/> |
| | | <div class="mt-4 flex justify-end"> |
| | | <Pagination :key="paginationKey" :count="totalCount" :page="model.pageNum" :page-size="model.pageSize" @change="changePage" /> |
| | | </div> |