董国庆
2026-03-05 072b9fc0589aa52642e6326ba7e6771f95d49895
权限优化加 在库车辆加导入模版。
6个文件已修改
71 ■■■■■ 已修改文件
src/service/api/vehicle.ts 10 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/store/auth.ts 15 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/store/router/helper.ts 4 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/store/router/index.ts 9 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/views/assetManagement/vehicleManagement/inventoryVehicle/index.vue 22 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/views/service/ticket/feedbackType/index.vue 11 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/service/api/vehicle.ts
@@ -99,6 +99,16 @@
}
/**
 * 下载导入模板
 * @returns
 */
export function getVehicleImportTemplate() {
  const method = request.Post<Service.ResponseResult<any>>('/vehicleConvoy/api/v1/vehicle/importTemplate', { responseType: 'blob' })
  method.meta = { ...method.meta, isBlob: true }
  return method
}
/**
 * 删除车辆
 * @param id 
 * @returns 
src/store/auth.ts
@@ -38,14 +38,13 @@
      // 重置当前存储库
      this.$reset()
      // 重定向到登录页
      if (route.meta.requiresAuth) {
        router.push({
          name: 'login',
          query: {
            redirect: route.fullPath,
          },
        })
      }
      const redirect = route.meta.requiresAuth && route.name !== 'not-found' ? route.fullPath : undefined
      router.push({
        name: 'login',
        query: {
          redirect,
        },
      })
    },
    clearAuthStorage() {
      local.remove('accessToken')
src/store/router/helper.ts
@@ -33,6 +33,8 @@
  // Route permission filtering
  resultRouter = resultRouter.filter(i => {
    if (i.meta?.requiresAuth === false)
      return true
    if (i.id) {
      return hasPermission(i.id)
    }
@@ -125,6 +127,8 @@
  // Route permission filtering
  resultRouter = resultRouter.filter(i => {
    if (i.meta?.requiresAuth === false)
      return true
    // 优先检查路由 ID 是否在权限列表中
    if (i.id) {
      return hasPermission(i.id)
src/store/router/index.ts
@@ -41,15 +41,20 @@
      if (import.meta.env.VITE_ROUTE_LOAD_MODE === 'dynamic') {
        try {
          // Get user's route
          const authStore = useAuthStore()
          const result = await fetchUserRoutes({
            id: 1,
            id: authStore.userInfo?.id || 1,
          })
          if (!result.isSuccess || !result.data) {
            throw new Error('Failed to fetch user routes')
          }
          return result.data
          const publicRoutes = staticRoutes.filter(route => route.requiresAuth === false)
          const userRoutes = result.data
          const mergedRoutes = [...publicRoutes.filter(p => !userRoutes.some(u => u.name === p.name)), ...userRoutes]
          return mergedRoutes
        }
        catch (error) {
          console.error('Failed to initialize route info:', error)
src/views/assetManagement/vehicleManagement/inventoryVehicle/index.vue
@@ -5,7 +5,7 @@
import dayjs from 'dayjs'
import { useBoolean } from '@/hooks'
import { downloadFile } from '@/utils'
import { batchOperation, batchSetElectronic, deleteVehicle, exportVehicleExcel, getVehiclePageList, importVehicleExcel } from '@/service/api/vehicle'
import { batchOperation, batchSetElectronic, deleteVehicle, exportVehicleExcel, getVehicleImportTemplate, getVehiclePageList, importVehicleExcel } from '@/service/api/vehicle'
import { fetchElectronicFenceAreaList } from '@/service/api/point'
import SearchPanel from '@/components/custom/SearchPanel.vue'
import CompleteVehicleInfoModal from './components/CompleteVehicleInfoModal.vue'
@@ -367,6 +367,23 @@
  }
}
// 下载模板
async function handleDownloadTemplate() {
  try {
    const response = await getVehicleImportTemplate()
    if (response instanceof Blob) {
      downloadFile(response, `车辆导入模板_${new Date().getTime()}.xlsx`)
      window.$message.success('下载成功')
    }
    else {
      window.$message.error('下载失败:接口未返回正确的文件模板')
    }
  }
  catch (error) {
    console.error('下载模板失败:', error)
  }
}
function handleImport() {
  fileInputRef.value?.click()
}
@@ -537,6 +554,9 @@
              </NButton>
            </NSpace>
            <NSpace>
              <NButton v-permission="50114" @click="handleDownloadTemplate">
                下载导入模板
              </NButton>
              <NButton v-permission="50114" @click="handleImport">
                导入
              </NButton>
src/views/service/ticket/feedbackType/index.vue
@@ -10,6 +10,12 @@
  deleteFeedbackType,
} from "@/service/api/serviceCenter";
interface FeedbackTypeItem {
  id: number;
  feedbackType: string;
  createTime?: string;
}
const { bool: loading, setTrue: startLoading, setFalse: endLoading } =
  useBoolean(false);
@@ -148,7 +154,10 @@
async function getFeedbackTypeList() {
  startLoading();
  try {
    const res = await fetchFeedbackTypeList();
    const res = await fetchFeedbackTypeList({
      pageNum: 1,
      pageSize: 9999,
    });
    if (res.code === 200 && res.data) {
      const list = Array.isArray(res.data)
        ? res.data