فهرست منبع

```
feat(router): 添加设备管理和终端管理路由配置

- 新增device模块路由,包含设备管理和终端管理子路由
- 配置相应的路由映射关系

feat(device): 实现设备管理和终端管理功能模块

- 新增充电站信息分页列表API接口
- 新增充电桩信息分页列表API接口
- 实现设备管理页面,包含搜索表单和表格展示
- 实现终端管理页面,包含搜索表单和表格展示
- 定义设备相关API数据类型

chore(env): 更新测试环境API基础URL配置

- 修改测试环境中的VITE_SERVICE_BASE_URL配置
- 切换到本地开发服务器地址
```

zhangtao 11 ساعت پیش
والد
کامیت
cc12b726b8

+ 3 - 3
.env.test

@@ -3,9 +3,9 @@
 # VITE_SERVICE_BASE_URL=https://b8dbdde.r39.cpolar.top #王
 # VITE_SERVICE_BASE_URL=http://89561bkaq794.vicp.fun:53846 #张
 # VITE_SERVICE_BASE_URL=https://33cb5a99.r9.vip.cpolar.cn#田
-# VITE_SERVICE_BASE_URL=https://2f3c6d21.r24.cpolar.top #邓
-VITE_SERVICE_BASE_URL=http://d7b0f86.r36.cpolar.top #付
-# VITE_SERVICE_BASE_URL=https://mock.apifox.cn/m1/3109515-0-default
+VITE_SERVICE_BASE_URL=http://192.168.0.19:8080 #邓
+# VITE_SERVICE_BASE_URL=http://d7b0f86.r36.cpolar.top #付
+# VITE_SERVICE_BASE_URL=https://smqjh.api.zswlgz.com
 # VITE_SERVICE_BASE_URL=http://47.109.84.152:8081 #测试本地服务器
 # VITE_SERVICE_BASE_URL=/plt #测试打包服务器
 

+ 4 - 1
src/locales/langs/en-us.ts

@@ -266,7 +266,10 @@ const local: App.I18n.Schema = {
     'xsb-manage_store-info': '',
     'order-manage': '',
     'order-manage_normal-order': '',
-    'order-manage_order-detail': ''
+    'order-manage_order-detail': '',
+    device: '',
+    device_manage: '',
+    'device_terminal-manage': ''
   },
   page: {
     login: {

+ 4 - 1
src/locales/langs/zh-cn.ts

@@ -263,7 +263,10 @@ const local: App.I18n.Schema = {
     'xsb-manage_store-info': '',
     'order-manage': '',
     'order-manage_normal-order': '',
-    'order-manage_order-detail': ''
+    'order-manage_order-detail': '',
+    device: '',
+    device_manage: '',
+    'device_terminal-manage': ''
   },
   page: {
     login: {

+ 2 - 0
src/router/elegant/imports.ts

@@ -20,6 +20,8 @@ export const views: Record<LastLevelRouteKey, RouteComponent | (() => Promise<Ro
   500: () => import("@/views/_builtin/500/index.vue"),
   "iframe-page": () => import("@/views/_builtin/iframe-page/[url].vue"),
   login: () => import("@/views/_builtin/login/index.vue"),
+  device_manage: () => import("@/views/device/manage/index.vue"),
+  "device_terminal-manage": () => import("@/views/device/terminal-manage/index.vue"),
   "goods-center_store-goods": () => import("@/views/goods-center/store-goods/index.vue"),
   "goods-center_type-admin": () => import("@/views/goods-center/type-admin/index.vue"),
   "government_government-list": () => import("@/views/government/government-list/index.vue"),

+ 29 - 0
src/router/elegant/routes.ts

@@ -39,6 +39,35 @@ export const generatedRoutes: GeneratedRoute[] = [
       hideInMenu: true
     }
   },
+  {
+    name: 'device',
+    path: '/device',
+    component: 'layout.base',
+    meta: {
+      title: 'device',
+      i18nKey: 'route.device'
+    },
+    children: [
+      {
+        name: 'device_manage',
+        path: '/device/manage',
+        component: 'view.device_manage',
+        meta: {
+          title: 'device_manage',
+          i18nKey: 'route.device_manage'
+        }
+      },
+      {
+        name: 'device_terminal-manage',
+        path: '/device/terminal-manage',
+        component: 'view.device_terminal-manage',
+        meta: {
+          title: 'device_terminal-manage',
+          i18nKey: 'route.device_terminal-manage'
+        }
+      }
+    ]
+  },
   {
     name: 'goods-center',
     path: '/goods-center',

+ 3 - 0
src/router/elegant/transform.ts

@@ -181,6 +181,9 @@ const routeMap: RouteMap = {
   "403": "/403",
   "404": "/404",
   "500": "/500",
+  "device": "/device",
+  "device_manage": "/device/manage",
+  "device_terminal-manage": "/device/terminal-manage",
   "goods-center": "/goods-center",
   "goods-center_store-goods": "/goods-center/store-goods",
   "goods-center_type-admin": "/goods-center/type-admin",

+ 14 - 0
src/service/api/device/manage/index.ts

@@ -0,0 +1,14 @@
+import { request } from '@/service/request';
+
+/**
+ * 充电站信息分页列表
+ * @param params
+ * @returns
+ */
+export function fetchGetStationsList(params: any) {
+  return request<Api.device.manage[]>({
+    url: '/smqjh-system/api/v1/third-party-charging/stations/page',
+    method: 'POST',
+    data: params
+  });
+}

+ 14 - 0
src/service/api/device/terminal-manage/index.ts

@@ -0,0 +1,14 @@
+import { request } from '@/service/request';
+
+/**
+ * 充电桩信息分页列表
+ * @param params
+ * @returns
+ */
+export function fetchGetDeviceList(params: any) {
+  return request({
+    url: '/smqjh-system/api/v1/third-party-charging/equipments/page',
+    method: 'POST',
+    data: params
+  });
+}

+ 34 - 0
src/typings/api.d.ts

@@ -1726,4 +1726,38 @@ declare namespace Api {
       [property: string]: any;
     }
   }
+  namespace device {
+    interface manage {
+      id: number;
+      equipmentId: string;
+      equipmentName: string;
+      stationName: string;
+      connectorType: number;
+      power: number;
+      parkNo: string;
+      nationalStandard: number;
+      connectorId: string;
+      connectorName: string;
+      voltageUpperLimits: number;
+      voltageLowerLimits: number;
+      current: number;
+      equipmentType: number;
+      connectorTips: string;
+      updateTime: string;
+      stationStatus: number;
+      stationType: number;
+    }
+    interface ThirdPartyEquipmentInfoPageVO {
+      /** 设备编码 */
+      equipmentId?: string;
+      /** 所属充电站ID */
+      stationId?: string;
+      /** 生产商名称 */
+      manufacturerName?: string;
+      /** 总功率(kW) */
+      power?: number;
+      /** 设备名称 */
+      equipmentName?: string;
+    }
+  }
 }

+ 6 - 0
src/typings/elegant-router.d.ts

@@ -35,6 +35,9 @@ declare module "@elegant-router/types" {
     "403": "/403";
     "404": "/404";
     "500": "/500";
+    "device": "/device";
+    "device_manage": "/device/manage";
+    "device_terminal-manage": "/device/terminal-manage";
     "goods-center": "/goods-center";
     "goods-center_store-goods": "/goods-center/store-goods";
     "goods-center_type-admin": "/goods-center/type-admin";
@@ -114,6 +117,7 @@ declare module "@elegant-router/types" {
     | "403"
     | "404"
     | "500"
+    | "device"
     | "goods-center"
     | "government"
     | "home"
@@ -147,6 +151,8 @@ declare module "@elegant-router/types" {
     | "500"
     | "iframe-page"
     | "login"
+    | "device_manage"
+    | "device_terminal-manage"
     | "goods-center_store-goods"
     | "goods-center_type-admin"
     | "government_government-list"

+ 140 - 0
src/views/device/manage/index.vue

@@ -0,0 +1,140 @@
+<script setup lang="tsx">
+import { fetchGetStationsList } from '@/service/api/device/manage';
+import { useTable } from '@/components/zt/Table/hooks/useTable';
+
+const outColumns: NaiveUI.TableColumn<Api.device.manage>[] = [
+  {
+    key: 'stationId',
+    title: '充电站ID',
+    align: 'center'
+  },
+  {
+    key: 'equipmentOwnerId',
+    title: '设备所属方',
+    align: 'center'
+  },
+  {
+    key: 'stationName',
+    title: '充电站名称',
+    align: 'center'
+  },
+  {
+    key: 'address',
+    title: '详细地址',
+    align: 'center'
+  },
+  {
+    key: 'serviceTel',
+    title: '服务电话',
+    align: 'center'
+  },
+  {
+    key: 'stationType',
+    title: '站点类型',
+    align: 'center',
+    render: row => {
+      return (
+        <div>
+          {row.stationType === 1 && <n-tag type="primary">公共</n-tag>}
+          {row.stationType === 50 && <n-tag type="danger">个人</n-tag>}
+          {row.stationType === 100 && <n-tag type="info">公交(专用)</n-tag>}
+          {row.stationType === 101 && <n-tag type="primary">环卫(专用)</n-tag>}
+          {row.stationType === 102 && <n-tag type="success">物流(专用)</n-tag>}
+          {row.stationType === 103 && <n-tag type="warning">物流(专用)</n-tag>}
+          {row.stationType === 255 && <n-tag type="info">物流(专用)</n-tag>}
+        </div>
+      );
+    }
+  },
+  {
+    key: 'stationStatus',
+    title: '站点状态',
+    align: 'center',
+    render(rowData) {
+      return (
+        <div>
+          {rowData.stationStatus === 0 && <n-tag type={'warning'}>未知</n-tag>}
+          {rowData.stationStatus === 1 && <n-tag type={'danger'}>建设中</n-tag>}
+          {rowData.stationStatus === 5 && <n-tag type={'info'}>关闭下线</n-tag>}
+          {rowData.stationStatus === 6 && <n-tag type={'primary'}>维护中</n-tag>}
+          {rowData.stationStatus === 50 && <n-tag type={'success'}>正常使用</n-tag>}
+        </div>
+      );
+    }
+  },
+  {
+    key: 'totalUserCount',
+    title: '更新时间',
+    align: 'center'
+  }
+];
+
+const [registerTable] = useTable({
+  searchFormConfig: {
+    schemas: [
+      {
+        field: 'stationId',
+        label: '充电站ID',
+        component: 'NInput'
+      },
+      {
+        field: 'stationName',
+        label: '充电站名称',
+        component: 'NInput'
+      },
+      {
+        field: 'stationStatus',
+        label: '站点状态',
+        component: 'NSelect',
+        componentProps: {
+          options: [
+            {
+              label: '未知',
+              value: 0
+            },
+            {
+              label: '建设中',
+              value: 1
+            },
+            {
+              label: '关闭下线',
+              value: 5
+            },
+            {
+              label: '维护中',
+              value: 6
+            },
+            {
+              label: '正常使用',
+              value: 50
+            }
+          ]
+        }
+      }
+    ],
+    inline: false,
+    size: 'small',
+    labelPlacement: 'left',
+    isFull: false
+  },
+  tableConfig: {
+    keyField: 'id',
+    title: '充电站管理',
+    showAddButton: false
+  }
+});
+</script>
+
+<template>
+  <LayoutTable>
+    <ZTable
+      :show-table-action="false"
+      :columns="outColumns"
+      :immediate="true"
+      :api="fetchGetStationsList"
+      @register="registerTable"
+    ></ZTable>
+  </LayoutTable>
+</template>
+
+<style scoped></style>

+ 97 - 0
src/views/device/terminal-manage/index.vue

@@ -0,0 +1,97 @@
+<script setup lang="tsx">
+import { fetchGetDeviceList } from '@/service/api/device/terminal-manage';
+import { useTable } from '@/components/zt/Table/hooks/useTable';
+
+const outColumns: NaiveUI.TableColumn<Api.device.manage>[] = [
+  {
+    key: 'connectorId',
+    title: '接口ID',
+    align: 'center'
+  },
+  {
+    key: 'connectorName',
+    title: '接口名称',
+    align: 'center'
+  },
+  {
+    key: 'stationName',
+    title: '所属充电站',
+    align: 'center'
+  },
+  {
+    key: 'power',
+    title: '总功率(kW)',
+    align: 'center'
+  },
+  {
+    key: 'equipmentId',
+    title: '设备编码',
+    align: 'center'
+  },
+  {
+    key: 'equipmentName',
+    title: '设备名称',
+    align: 'center'
+  },
+  {
+    key: 'parkNo',
+    title: '车位号',
+    align: 'center'
+  },
+  {
+    key: 'nationalStandard',
+    title: '国家标准',
+    align: 'center'
+  },
+  {
+    key: 'connectorTips',
+    title: '充电提示语',
+    align: 'center'
+  }
+];
+
+const [registerTable] = useTable({
+  searchFormConfig: {
+    schemas: [
+      {
+        field: 'stationName',
+        label: '所属站点',
+        component: 'NInput'
+      },
+      {
+        field: 'equipmentId',
+        label: '设备编码',
+        component: 'NInput'
+      },
+      {
+        field: 'equipmentName',
+        label: '设备名称',
+        component: 'NInput'
+      }
+    ],
+    inline: false,
+    size: 'small',
+    labelPlacement: 'left',
+    isFull: false
+  },
+  tableConfig: {
+    keyField: 'id',
+    title: '充电终端管理',
+    showAddButton: false
+  }
+});
+</script>
+
+<template>
+  <LayoutTable>
+    <ZTable
+      :show-table-action="false"
+      :columns="outColumns"
+      :immediate="true"
+      :api="fetchGetDeviceList"
+      @register="registerTable"
+    ></ZTable>
+  </LayoutTable>
+</template>
+
+<style scoped></style>