From 26fa338589e7e9e7f138723610fe78d77d26d5d4 Mon Sep 17 00:00:00 2001 From: luojiayi <1712054227@qq.com> Date: Thu, 3 Apr 2025 18:21:17 +0800 Subject: [PATCH] =?UTF-8?q?2025=E5=B9=B404=E6=9C=8803=E6=97=A518:21:15?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .env.development | 1 + .env.production | 3 + components.d.ts | 1 + package.json | 1 + src/api/index.d.ts | 152 ++++++ src/api/index.ts | 145 +++++- src/components/header.vue | 10 +- src/components/table-custom.vue | 34 +- src/main.ts | 5 +- src/store/common.ts | 13 +- src/store/permiss.ts | 103 ++-- src/types/form-option.ts | 31 +- src/utils/hooks.ts | 21 + src/utils/request.ts | 54 ++- src/views/login.vue | 61 ++- .../synthesizeManage/deviceInfo/index.vue | 113 +++-- .../deviceManage/deviceControl.vue | 80 ++++ .../synthesizeManage/deviceManage/index.vue | 195 ++++---- .../synthesizeManage/userManage/index.vue | 200 +++++--- yarn.lock | 448 +++++++++++++++++- 20 files changed, 1331 insertions(+), 340 deletions(-) create mode 100644 .env.development create mode 100644 .env.production create mode 100644 src/api/index.d.ts create mode 100644 src/utils/hooks.ts create mode 100644 src/views/synthesizeManage/deviceManage/deviceControl.vue diff --git a/.env.development b/.env.development new file mode 100644 index 0000000..af7909a --- /dev/null +++ b/.env.development @@ -0,0 +1 @@ +VITE_APP_URL = 'http://192.168.3.116:8001' diff --git a/.env.production b/.env.production new file mode 100644 index 0000000..faabcd6 --- /dev/null +++ b/.env.production @@ -0,0 +1,3 @@ +VITE_APP_URL = 'http://192.168.3.116:8001/' + + diff --git a/components.d.ts b/components.d.ts index f2778c5..6bb038e 100644 --- a/components.d.ts +++ b/components.d.ts @@ -45,6 +45,7 @@ declare module '@vue/runtime-core' { ElTable: typeof import('element-plus/es')['ElTable'] ElTableColumn: typeof import('element-plus/es')['ElTableColumn'] ElTag: typeof import('element-plus/es')['ElTag'] + ElTooltip: typeof import('element-plus/es')['ElTooltip'] ElUpload: typeof import('element-plus/es')['ElUpload'] Header: typeof import('./src/components/header.vue')['default'] RouterLink: typeof import('vue-router')['RouterLink'] diff --git a/package.json b/package.json index 32e64db..4b62b65 100644 --- a/package.json +++ b/package.json @@ -22,6 +22,7 @@ "md-editor-v3": "^2.11.2", "nprogress": "^0.2.0", "pinia": "^2.1.7", + "pinia-plugin-persistedstate": "^4.2.0", "vue": "^3.4.5", "vue-cropper": "1.1.1", "vue-echarts": "^6.6.9", diff --git a/src/api/index.d.ts b/src/api/index.d.ts new file mode 100644 index 0000000..44a4ea7 --- /dev/null +++ b/src/api/index.d.ts @@ -0,0 +1,152 @@ +export interface Ipaging { + page: number; + size: number; +} +export interface IpagingRes { + size: number + current: number + total: number + pages: number + records: T[] +} + +export namespace TLogin { + export interface Ireq { + username: string; + password: string; + } + + export interface IRes { + orgId: string + orgName: string + roleId: number + token: string + username: string + warnMusic: number + } + +} + +export namespace TAccount { + export interface IAdd { + username: string; + password: string; + phone: string; + name: string; + orgId: number; + roleId: number; + status: number; + } + export interface IListReq extends Ipaging { + orgId?: number; + } + export interface Idel { + id: number; + } + export interface IResetPwd { + id: number; + password: string; + } + export interface IListRes { + id: number + orgId: number + roleId: number + flag: boolean + name: string + username: string + password: string + phone: string + orgName: string + updateUser: string + updateTime: string + creatUser: string + createTime: string + } + +} +export namespace TDevice { + + export interface IListReq extends Ipaging { + orgId?: number; + } + export interface IListRes { + id: number + deviceId: number + accountId: number + orgId: number + status: number + deviceSwitch: number + mode: number + monitorMode: number + battery: number + name: string + username: string + password: string + phone: string + orgName: string + deviceVersion: string + updateUser: string + updateTime: string + creatUser: string + createTime: string + } + + export interface ISetMonitor { + deviceId: number; + mode?: number; + cmd?: string; + } + + export interface IRecordReq extends Ipaging { + deviceId?: number; + } + export interface IRecordRes { + id: number + deviceId: number + accountId: number + orgId: number + status: number + deviceSwitch: number + mode: number + monitorMode: number + battery: number + name: string + username: string + password: string + phone: string + orgName: string + deviceVersion: string + updateUser: string + updateTime: string + creatUser: string + createTime: string + } + export interface IUseRecordRes { + id: number + accountId: number + userNumber: string + adminName: string + adminType: string + deviceId: string + phone: string + orgId: number + orgName: string + status: number + updateUser: string + updateTime: string + creatUser: string + createTime: string + } + export interface IWarningRecordRes { + id: number + userNumber: string + deviceId: string + warnType: number + status: number + updateUser: string + updateTime: string + creatUser: string + createTime: string + } + +} \ No newline at end of file diff --git a/src/api/index.ts b/src/api/index.ts index 2814587..522e6f0 100644 --- a/src/api/index.ts +++ b/src/api/index.ts @@ -1,22 +1,141 @@ import request from '../utils/request'; +import { TLogin, TAccount, IpagingRes, TDevice } from "./index.d"; -export const fetchData = () => { - return request({ - url: './mock/table.json', - method: 'get' - }); +export const fetchLogin = (p: TLogin.Ireq): Promise => { + return request({ + url: '/v1/web/login', + method: 'post', + data: p + }); }; + +export const fetchData = () => { + return request({ + url: './mock/table.json', + method: 'get' + }); +}; + + export const fetchUserData = () => { - return request({ - url: './mock/user.json', - method: 'get' - }); + return request({ + url: './mock/user.json', + method: 'get' + }); }; export const fetchRoleData = () => { - return request({ - url: './mock/role.json', - method: 'get' - }); + return request({ + url: './mock/role.json', + method: 'get' + }); +}; + + +// ------------------------------------------------------------------------------------------------------------------- + +// 添加用户 +export const accountAdd = (p: TAccount.IAdd): Promise => { + return request({ + url: '/v1/web/account/add', + method: 'post', + data: p + }); +}; +// 删除用户 +export const accountDeletet = (p: TAccount.Idel): Promise => { + return request({ + url: '/v1/web/account/delete', + method: 'post', + data: p + }); +}; +// 修改用户 +export const accountModify = (p: TAccount.IAdd): Promise => { + return request({ + url: '/v1/web/account/modify', + method: 'post', + data: p + }); +}; +// 获取用户列表 +export const accountList = (p: TAccount.IListReq): Promise> => { + return request({ + url: '/v1/web/account/list', + method: 'get', + params: p + }); +}; +// 重置密码 +export const passwordReset = (p: TAccount.IResetPwd): Promise => { + return request({ + url: '/v1/web/account/password/reset', + method: 'post', + data: p + }); +}; + + +// 获取设备列表 +export const deviceList = (p: TDevice.IListReq): Promise> => { + return request({ + url: '/v1/web/device/list', + method: 'get', + params: p + }); +}; + +// 设置监测模式 +export const setMonitor = (p: TDevice.ISetMonitor): Promise => { + return request({ + url: '/v1/web/device/set/monitor', + method: 'post', + data: p + }); +}; + +// 设置模式 +export const setMode = (p: TDevice.ISetMonitor): Promise => { + return request({ + url: '/v1/web/device/set/mode', + method: 'post', + data: p + }); +}; + +// 获取定位 +export const deviceGetLocation = (p: TDevice.ISetMonitor): Promise => { + return request({ + url: '/v1/web/device/getLocation', + method: 'post', + data: p + }); +}; + +// 设备控制 +export const deviceControl = (p: TDevice.ISetMonitor): Promise => { + return request({ + url: '/v1/web/device/control', + method: 'post', + data: p + }); +}; + +// 设备使用记录 +export const deviceUseRecord = (p: TDevice.IRecordReq): Promise> => { + return request({ + url: '/v1/web/device/use/record', + method: 'get', + params: p + }); +}; + +// 预警记录 +export const warningRecord = (p: TDevice.IRecordReq): Promise> => { + return request({ + url: '/v1/web/device/warning/record', + method: 'get', + params: p + }); }; diff --git a/src/components/header.vue b/src/components/header.vue index b143c34..6e6d181 100644 --- a/src/components/header.vue +++ b/src/components/header.vue @@ -7,7 +7,7 @@ {{ item }}{{ index != tab.list.length - 1 ? " / " : "" }} -
{{ format(comm.time) }}
+
{{ format(time) }}
@@ -33,7 +33,7 @@ - {{ username }} + {{ user.username }} @@ -61,11 +61,11 @@ import { format } from "@/utils"; const tab = useTabsStore(); const username: string | null = localStorage.getItem("vuems_name"); + const message: number = 2; const sidebar = useSidebarStore(); -const comm = useCommonStore(); - +const { user, time, clearStore } = useCommonStore(); // onMounted(() => { // if (document.body.clientWidth < 1500) { // sidebar.handleCollapse(); @@ -76,7 +76,7 @@ const comm = useCommonStore(); const router = useRouter(); const handleCommand = (command: string) => { if (command == "loginout") { - localStorage.removeItem("vuems_name"); + clearStore(); router.push("/login"); } else if (command == "user") { router.push("/ucenter"); diff --git a/src/components/table-custom.vue b/src/components/table-custom.vue index 2ef546c..e80630f 100644 --- a/src/components/table-custom.vue +++ b/src/components/table-custom.vue @@ -13,27 +13,27 @@ - - - - - - - - - - - - diff --git a/src/views/synthesizeManage/deviceInfo/index.vue b/src/views/synthesizeManage/deviceInfo/index.vue index 714bd1e..721ee98 100644 --- a/src/views/synthesizeManage/deviceInfo/index.vue +++ b/src/views/synthesizeManage/deviceInfo/index.vue @@ -6,22 +6,22 @@ -
手铐序号:手铐-10
-
绑定管理员:欧尼蒋
-
现在状态:禁用
+
手铐序号:{{ query.id }}
+
绑定管理员:{{ query.name }}
+
设备状态:{{ statusEnum[query.status as string] }}
-
IMEI号:860116079430636
-
关联人信息:警察123456
-
当前电量:87%
+
IMEI号:{{ query.deviceId }}
+
绑定管理者账号:{{ query.username }}
+
当前电量:{{ query.battery }}%
-
首次绑定时间:2025/03/26 18:33:32
-
隶属组织:xxx公安局
-
联系电话:10000000000
+
首次绑定时间:{{ query.createTime }}
+
隶属组织:{{ query.orgName }}
+
联系电话:{{ query.phone }}
-
固件版本:V 3.14
+
固件版本:{{ query.deviceVersion }}
@@ -29,9 +29,9 @@ - -