| src/components/custom/OperationLogModal.vue | ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史 | |
| src/views/assetManagement/vehicleModel/index.vue | ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史 | |
| src/views/businessOperations/operationWorkbench/list.vue | ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史 | |
| src/views/businessOperations/siteInfo/index.vue | ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史 | |
| src/views/operations/cruiseCheckIn/index.vue | ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史 | |
| src/views/operations/cruiseCheckInRule/index.vue | ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史 | |
| src/views/testDemo/geofenceManagement/index.vue | ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史 | |
| src/views/transaction/directServiceManagement/index.vue | ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史 | |
| src/views/transaction/passwordFreeStrategy/index.vue | ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史 | |
| src/views/userContent/active/activityManagement/index.vue | ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史 |
src/components/custom/OperationLogModal.vue
@@ -87,25 +87,33 @@ }) const routeBusinessTypeMap: Array<{ path: string, type: number }> = [ { path: '/testDemo/geofenceManagement', type: 11 }, { path: '/testDemo/testPlanList', type: 12 }, { path: '/system/accountPermission/accountManagement', type: 13 }, { path: '/system/accountPermission/permissionGroup', type: 14 }, { path: '/system/accountPermission/roleManagement', type: 15 }, { path: '/system/appVersion/appVersionManage', type: 16 }, { path: '/userContent/active/activityManagement', type: 18 }, { path: '/userContent/active/coupon', type: 19 }, { path: '/userContent/banner', type: 20 }, { path: '/businessOperations/openCity', type: 21 }, { path: '/businessOperations/geofenceManagement', type: 22 }, { path: '/businessOperations/siteInfo', type: 23 }, { path: '/businessOperations/cruise/parade-plan', type: 24 }, { path: '/assetManagement/vehicleManagement/inventoryVehicle', type: 25 }, { path: '/assetManagement/vehicleManagement/operatingVehicle', type: 26 }, { path: '/assetManagement/fleetManagement', type: 27 }, { path: '/assetManagement/vehicleModel', type: 28 }, { path: '/transaction/pricingManagement', type: 29 }, { path: '/transaction/navigationAndRoutePlanning', type: 30 }, { path: '/transaction/directServiceManagement', type: 31 }, { path: '/transaction/passwordFreeStrategy', type: 32 }, { path: '/operations/personnel/personnelManagement', type: 33 }, { path: '/operations/attendance/address', type: 34 }, { path: '/operations/cruiseCheckInManagement/cruiseCheckIn', type: 34 }, { path: '/operations/attendance/shift', type: 35 }, { path: '/operations/taskOrder/taskOrderCenter', type: 37 }, { path: '/operations/cruiseCheckInManagement/cruiseCheckInRule', type: 38 }, { path: '/service/review/personnel', type: 39 }, { path: '/service/review/policyApplication', type: 40 }, { path: '/service/ticket/feedbackType', type: 41 }, src/views/assetManagement/vehicleModel/index.vue
@@ -5,6 +5,7 @@ import { useBoolean } from '@/hooks' import SearchPanel from '@/components/custom/SearchPanel.vue' import Pagination from '@/components/common/Pagination.vue' import OperationLogModal from '@/components/custom/OperationLogModal.vue' import { deleteVehicleModelById, queryVehicleModelList } from '@/service/api/vehicleConvoy' import AddOrEditModal from './components/AddOrEditModal.vue' import dayjs from 'dayjs' @@ -12,6 +13,7 @@ const { bool: loading, setTrue: startLoading, setFalse: endLoading } = useBoolean(false) const dialog = useDialog() const addOrEditModalRef = ref() const showOperationLogModal = ref(false) const initialModel = { name: '', @@ -32,6 +34,10 @@ function handleSearch() { pagination.page = 1 getList() } function handleOpenOperationLog() { showOperationLogModal.value = true } const filterItems = computed(() => [ @@ -206,11 +212,14 @@ <n-card class="flex-1 robotaxi-table-card"> <template #header> <n-flex justify="flex-end"> <n-flex justify="space-between"> <NButton @click="handleOpenOperationLog"> 操作日志 </NButton> <NButton v-permission="202642940" type="primary" secondary v-permission="202642940" @click="handleAdd" > 新增车型 @@ -250,6 +259,7 @@ </div> <AddOrEditModal ref="addOrEditModalRef" @refresh="getList" /> <OperationLogModal v-model:show="showOperationLogModal" /> </div> </template> src/views/businessOperations/operationWorkbench/list.vue
@@ -5,22 +5,24 @@ import { onBeforeRouteLeave, useRoute, useRouter } from 'vue-router' import dayjs from 'dayjs' import SearchPanel from '@/components/custom/SearchPanel.vue' import OperationLogModal from '@/components/custom/OperationLogModal.vue' import { useBoolean, usePermission } from '@/hooks' import { copyFence, fetchEnabledOpenCityList, getFenceList } from '@/service/api/operations' import { deletePoint, enableDisablePoint, exportPointExcel, fetchFenceAndStationAreaList, fetchPointPageList } from '@/service/api/point' import { deleteStation, fetchStationListByElectronicId, fetchStationPageList, updateStationStatus } from '@/service/api/station' import { useWorkbenchStore } from '@/store' import { downloadFile } from '@/utils' const { hasPermission } = usePermission() import sortDefault from '@/assets/geofence/sort1.png' import sortAsc from '@/assets/geofence/sort2.png' import sortDesc from '@/assets/geofence/sort3.png' import moreIcon from '@/assets/element-img/more.png' const { hasPermission } = usePermission() type WorkbenchTab = 'fence' | 'point' | 'station' type CityOptionItem = { label: string, value: string } type PointAreaOption = { interface CityOptionItem { label: string, value: string } interface PointAreaOption { label: string value: string type: number @@ -175,6 +177,7 @@ const fenceStationLoadingMap = ref<Record<string, boolean>>({}) const fenceStrategyExpandedMap = ref<Record<string, boolean>>({}) const initialized = ref(false) const showOperationLogModal = ref(false) const isPointStatusSelectOpen = ref(false) const isPointAreaSelectOpen = ref(false) const isFenceStatusListOpen = ref(false) @@ -451,7 +454,7 @@ function normalizeOpenCityOptions(list: any[]): CityOptionItem[] { return list .map((item) => ({ .map(item => ({ label: String(item.cityName || item.name || item.label || ''), value: String(item.cityCode || item.adcode || item.value || ''), })) @@ -864,7 +867,7 @@ } function handlePointToDetail(row: any, type: 'detail' | 'edit') { if(type==='detail' && !hasPermission('202642925')) if (type === 'detail' && !hasPermission('202642925')) return const context = buildWorkbenchMapContext('point', type, row) workbenchStore.setListContext({ @@ -883,7 +886,7 @@ } function handleStationToMap(row: any, type: 'detail' | 'edit') { if(type==='detail' && !hasPermission('202642931')) if (type === 'detail' && !hasPermission('202642931')) return const context = buildWorkbenchMapContext('station', type, row) workbenchStore.setListContext({ @@ -924,12 +927,12 @@ const statusText = getPointStatusText(row.operationStatus, row.verificationStatus) if (statusText === '已停用') { const stopReason = String(row?.hoverStatusDes || '' ).trim() const stopReason = String(row?.hoverStatusDes || '').trim() return stopReason || '' } if (statusText === '测试不通过') { const failReason = String( row?.remarks|| '',).trim() const failReason = String(row?.remarks || '').trim() return failReason || '' } @@ -1087,16 +1090,19 @@ // const loadingChildList = fenceStationLoadingMap.value[rowKey] // if (loadingChildList) // return <div class="fence-expand-placeholder">加载中...</div> // return <div class="fence-expand-placeholder">加载中...</div> if (stationList.length === 0) return <div class="flex-center py-12px"> <img src="/src/assets/element-img/no-data.png" style="width: 123px; height: 125px" alt="no-data" /> </div> if (stationList.length === 0) { return ( <div class="flex-center py-12px"> <img src="/src/assets/element-img/no-data.png" style="width: 123px; height: 125px" alt="no-data" /> </div> ) } return ( <div class="fence-expand-panel"> @@ -1109,14 +1115,16 @@ rowKey={(item: any) => item.id ?? item.stationId ?? item.stationNumber} scrollX={1000} > {{empty: <div class="flex-center"> {{ empty: ( <div class="flex-center"> <img src="/src/assets/element-img/no-data.png" style="width: 123px; height: 125px" alt="no-data" /> </div>}} </n-data-table> </div> ) }} </n-data-table> </div> ) } @@ -1300,7 +1308,7 @@ ].map(escapeCsvCell).join(',') }) return ['\uFEFF' + headers.map(escapeCsvCell).join(','), ...records].join('\n') return [`\uFEFF${headers.map(escapeCsvCell).join(',')}`, ...records].join('\n') } function handleStationBatchExport() { @@ -1440,7 +1448,7 @@ v-model:value={fenceModel.value.cityCode} options={cityOptions.value} placeholder="请选择" onUpdate:value={(value) => setCurrentTabCity(String(value || DEFAULT_CITY_CODE))} onUpdate:value={value => setCurrentTabCity(String(value || DEFAULT_CITY_CODE))} onUpdate:show={(val: boolean) => isFenceCityOpen.value = val} > {{ @@ -1542,7 +1550,7 @@ v-model:value={stationModel.value.cityCode} options={cityOptions.value} placeholder="请选择" onUpdate:value={(value) => setCurrentTabCity(String(value || DEFAULT_CITY_CODE))} onUpdate:value={value => setCurrentTabCity(String(value || DEFAULT_CITY_CODE))} onUpdate:show={(val: boolean) => isStationCityOpen.value = val} > {{ @@ -1628,7 +1636,7 @@ v-model:value={pointModel.value.cityCode} options={cityOptions.value} placeholder="请选择" onUpdate:value={(value) => setCurrentTabCity(String(value || DEFAULT_CITY_CODE))} onUpdate:value={value => setCurrentTabCity(String(value || DEFAULT_CITY_CODE))} onUpdate:show={(val: boolean) => isPointCityOpen.value = val} > {{ @@ -1836,7 +1844,10 @@ <div class="strategy-cell"> {visibleRows.map((item: any) => ( <div class="strategy-row"> <span class="strategy-label">{item.label}:</span> <span class="strategy-label"> {item.label} : </span> <span class="strategy-time">{item.timeText}</span> </div> ))} @@ -2156,7 +2167,7 @@ ellipsis: true, resizable: true, render(row) { return row.pointOnOffName ||'上下车均可'|| '-' return row.pointOnOffName || '上下车均可' || '-' }, }, { @@ -2257,6 +2268,17 @@ }) const cardClassName = computed(() => activeTab.value === 'point' ? 'point-management-list' : '') const currentOperationLogBusinessType = computed(() => { if (activeTab.value === 'fence') return 22 if (activeTab.value === 'station') return 57 return 45 }) function handleOpenOperationLog() { showOperationLogModal.value = true } watch( () => [activeTab.value, cityValue.value], @@ -2385,6 +2407,9 @@ <template #header> <n-flex justify="space-between" align="center"> <n-flex align="center"> <NButton @click="handleOpenOperationLog"> 操作日志 </NButton> <template v-if="activeTab === 'point'"> <span v-if="checkedRowKeys.length > 0" class="selected-text"> 已选择{{ checkedRowKeys.length }}条记录 @@ -2412,7 +2437,9 @@ </n-flex> <n-flex align="center"> <NButton v-permission="202642919" @click="handleBackToMap"> 查看地图视图 </NButton> <NButton v-permission="202642919" @click="handleBackToMap"> 查看地图视图 </NButton> <NButton v-if="activeTab === 'fence'" v-permission="202642920" @@ -2424,9 +2451,9 @@ </NButton> <NButton v-else-if="activeTab === 'point'" v-permission="202642923" type="primary" secondary v-permission="202642923" @click="handleCreate" > 新建点位 @@ -2435,14 +2462,13 @@ v-else-if="activeTab === 'station'" trigger="hover" :disabled="!stationCreateDisabledReason" > <template #trigger> <span> <NButton v-permission="202642929" type="primary" secondary v-permission="202642929" :disabled="!!stationCreateDisabledReason" @click="handleCreate" > @@ -2457,7 +2483,7 @@ </template> <div class="flex-1 flex flex-col h-full"> <n-data-table <NDataTable class="flex-1" :columns="columns" :data="listData" @@ -2483,10 +2509,10 @@ src="/src/assets/element-img/no-data.png" style="width: 123px; height: 125px" alt="no-data" /> > </div> </template> </n-data-table> </NDataTable> <Pagination :count="pagination.itemCount" :page="pagination.page" @@ -2496,6 +2522,11 @@ /> </div> </n-card> <OperationLogModal v-model:show="showOperationLogModal" :business-type="currentOperationLogBusinessType" /> </div> </template> src/views/businessOperations/siteInfo/index.vue
@@ -3,6 +3,7 @@ import { useBoolean } from '@/hooks' import { NButton, NDatePicker, NInput, NSelect, NSpace } from 'naive-ui' import SearchPanel from '@/components/custom/SearchPanel.vue' import OperationLogModal from '@/components/custom/OperationLogModal.vue' import { deletePointSituationReport, exportPointSituationReport, fetchPointSituationReportList } from '@/service/api/operations' import { downloadFile } from '@/utils/common' import { computed, onMounted, reactive, ref } from 'vue' @@ -207,7 +208,8 @@ </NButton> <NButton v-permission="202642938" text type="primary" text type="primary" onClick={() => handleDelete(row)} > 删除 @@ -291,6 +293,7 @@ const listData = ref<any>([]) const checkedRowKeys = ref<Array<string | number>>([]) const showOperationLogModal = ref(false) const pagination = reactive({ page: 1, @@ -318,6 +321,10 @@ function handleResetSearch() { model.value = { ...initialModel } handleSearch() } function handleOpenOperationLog() { showOperationLogModal.value = true } async function getList() { @@ -429,6 +436,9 @@ <template #header> <n-flex justify="space-between" align="center"> <n-flex align="center"> <NButton @click="handleOpenOperationLog"> 操作日志 </NButton> <span v-if="checkedRowKeys.length > 0" style="color: rgba(23, 31, 38, 0.6);font-weight: 400;">已选择{{ checkedRowKeys.length }}条记录</span> <NButton v-permission="202642936" :disabled="checkedRowKeys.length === 0" @click="handleBatchExport"> 批量导出 @@ -466,6 +476,8 @@ /> </div> </n-card> <OperationLogModal v-model:show="showOperationLogModal" /> </div> </template> src/views/operations/cruiseCheckIn/index.vue
@@ -4,6 +4,7 @@ import { NButton, NSwitch, NTag } from 'naive-ui' import { addCheckLocation, deleteCheckLocation, editCheckLocation, getCheckLocationList, updateCheckLocationStatus } from '@/service/api/attendance' import SearchPanel from '@/components/custom/SearchPanel.vue' import OperationLogModal from '@/components/custom/OperationLogModal.vue' import AddressFormModal from '@/views/operations/attendance/address/components/AddressFormModal.vue' import dayjs from 'dayjs' @@ -12,6 +13,7 @@ const modalRef = ref() const showFormModal = ref(false) const showOperationLogModal = ref(false) const formMode = ref<'add' | 'edit'>('add') const pageParams = ref({ @@ -31,6 +33,10 @@ function handleSearch() { pageParams.value.pageNum = 1 getList() } function handleOpenOperationLog() { showOperationLogModal.value = true } async function handleSwitchChange(row: any) { @@ -133,7 +139,7 @@ 删除 </span> <NSwitch v-permission="2026429691" v-permission="2026429691" value={row.status} checked-value={1} unchecked-value={0} @@ -266,7 +272,10 @@ <n-card class="flex-1 robotaxi-table-card"> <template #header> <n-flex justify="flex-end"> <n-flex justify="space-between"> <NButton @click="handleOpenOperationLog"> 操作日志 </NButton> <NButton v-permission="202642967" type="primary" secondary @click="handleAdd"> 新增巡游打卡地 </NButton> @@ -291,6 +300,7 @@ <AddressFormModal ref="modalRef" v-model:show="showFormModal" title="巡游打卡地" :mode="formMode" :type="2" @confirm="handleConfirmForm" /> </n-card> <OperationLogModal v-model:show="showOperationLogModal" /> </div> </template> src/views/operations/cruiseCheckInRule/index.vue
@@ -4,6 +4,7 @@ import { useBoolean } from '@/hooks' import { NButton } from 'naive-ui' import SearchPanel from '@/components/custom/SearchPanel.vue' import OperationLogModal from '@/components/custom/OperationLogModal.vue' import DetailModal from './components/DetailModal.vue' import { deleteCruiseCheckInRule, fetchCruiseCheckInRuleList } from '@/service/api/maintenance' @@ -14,6 +15,7 @@ const router = useRouter() const showDetailModal = ref(false) const showOperationLogModal = ref(false) const detailModalRef = ref() const pageParams = ref({ @@ -35,6 +37,10 @@ function handleSearch() { pageParams.value.pageNum = 1 getList() } function handleOpenOperationLog() { showOperationLogModal.value = true } const tableScrollX = computed(() => Math.min(1600, 70 + 200 + 150 + 150 + 150 + 150 + 120)) @@ -224,7 +230,10 @@ <n-card class="flex-1 robotaxi-table-card"> <template #header> <n-flex justify="flex-end"> <n-flex justify="space-between"> <NButton @click="handleOpenOperationLog"> 操作日志 </NButton> <NButton v-permission="202642961" type="primary" secondary @click="handleAdd"> 添加巡游打卡规则 </NButton> @@ -252,6 +261,7 @@ ref="detailModalRef" v-model:show="showDetailModal" /> <OperationLogModal v-model:show="showOperationLogModal" /> </div> </template> src/views/testDemo/geofenceManagement/index.vue
@@ -4,11 +4,13 @@ import { copyFence, getFenceList } from '@/service/api/copyText' import { NButton, NSpace, NTag, NTooltip } from 'naive-ui' import SearchPanel from '@/components/custom/SearchPanel.vue' import OperationLogModal from '@/components/custom/OperationLogModal.vue' import { useRouter } from 'vue-router' import sortDefault from '@/assets/geofence/sort1.png' import sortAsc from '@/assets/geofence/sort2.png' import sortDesc from '@/assets/geofence/sort3.png' import dayjs from 'dayjs' const { hasPermission } = usePermission() const router = useRouter() @@ -36,6 +38,7 @@ pageNum: 1, pageSize: 10, }) const showOperationLogModal = ref(false) function handleResetSearch() { model.value = { ...initialModel } @@ -45,6 +48,10 @@ function handleSearch() { pageParams.value.pageNum = 1 getList() } function handleOpenOperationLog() { showOperationLogModal.value = true } const columns = computed<DataTableColumns<any>>(() => [ @@ -496,10 +503,15 @@ <n-card class="flex-1 robotaxi-table-card"> <template #header> <n-flex v-permission="202642975" justify="flex-end"> <NButton type="primary" secondary @click="handleToDetail({}, 'add')"> 新建围栏 <n-flex justify="space-between"> <NButton @click="handleOpenOperationLog"> 操作日志 </NButton> <div v-permission="202642975"> <NButton type="primary" secondary @click="handleToDetail({}, 'add')"> 新建围栏 </NButton> </div> </n-flex> </template> <div class="flex-1 flex flex-col h-full"> @@ -517,6 +529,8 @@ <Pagination class="robotaxi-pagination mt-12px" :count="count" :page="pageParams.pageNum" :page-size="pageParams.pageSize" @change="changePage" /> </div> </n-card> <OperationLogModal v-model:show="showOperationLogModal" /> </div> </template> src/views/transaction/directServiceManagement/index.vue
@@ -9,11 +9,13 @@ import dayjs from 'dayjs' import { useRouter } from 'vue-router' import Pagination from '@/components/common/Pagination.vue' import OperationLogModal from '@/components/custom/OperationLogModal.vue' const { bool: loading, setTrue: startLoading, setFalse: endLoading } = useBoolean(false) const message = useMessage() const router = useRouter() const dialog = useDialog() const showOperationLogModal = ref(false) const initialModel = { cityCode: null, @@ -33,6 +35,10 @@ function handleSearch() { pageParams.value.pageNum = 1 getList() } function handleOpenOperationLog() { showOperationLogModal.value = true } const count = ref(0) @@ -343,7 +349,10 @@ <n-card class="flex-1 robotaxi-table-card"> <template #header> <n-flex justify="flex-end"> <n-flex justify="space-between"> <NButton @click="handleOpenOperationLog"> 操作日志 </NButton> <NButton v-permission="202642944" secondary @@ -385,6 +394,7 @@ /> </div> </n-card> <OperationLogModal v-model:show="showOperationLogModal" /> </div> </template> src/views/transaction/passwordFreeStrategy/index.vue
@@ -8,10 +8,12 @@ import SearchPanel from '@/components/custom/SearchPanel.vue' import Pagination from '@/components/common/Pagination.vue' import dayjs from 'dayjs' import OperationLogModal from '@/components/custom/OperationLogModal.vue' const { bool: loading, setTrue: startLoading, setFalse: endLoading } = useBoolean(false) const router = useRouter() const dialog = useDialog() const showOperationLogModal = ref(false) const initialModel = { createTimeRange: null as [number, number] | null, @@ -32,6 +34,10 @@ function handleSearch() { pageParams.value.page = 1 getList() } function handleOpenOperationLog() { showOperationLogModal.value = true } const count = ref(0) @@ -268,10 +274,13 @@ <n-card class="flex-1 robotaxi-table-card"> <template #header> <n-flex justify="flex-end"> <n-flex justify="space-between"> <NButton @click="handleOpenOperationLog"> 操作日志 </NButton> <NButton secondary v-permission="202642951" secondary type="primary" @click="handleAdd" > @@ -309,5 +318,6 @@ /> </div> </n-card> <OperationLogModal v-model:show="showOperationLogModal" /> </div> </template> src/views/userContent/active/activityManagement/index.vue
@@ -6,6 +6,7 @@ import { fetchCouponActivityList, updateCouponActivityStatus } from '@/service/api/coupon' import SearchPanel from '@/components/custom/SearchPanel.vue' import Pagination from '@/components/common/Pagination.vue' import OperationLogModal from '@/components/custom/OperationLogModal.vue' const router = useRouter() const message = useMessage() @@ -45,6 +46,11 @@ const total = ref(0) const currentPage = ref(1) const pageSize = ref(10) const showOperationLogModal = ref(false) function handleOpenOperationLog() { showOperationLogModal.value = true } function handleSearch() { currentPage.value = 1 @@ -350,7 +356,10 @@ <n-card class="flex-1 robotaxi-table-card"> <template #header> <n-flex justify="flex-end"> <n-flex justify="space-between"> <NButton @click="handleOpenOperationLog"> 操作日志 </NButton> <NButton v-permission="202642910" type="primary" secondary @click="handleAdd"> 添加活动 </NButton> @@ -381,6 +390,8 @@ /> </div> </n-card> <OperationLogModal v-model:show="showOperationLogModal" /> </div> </template>