From 02349238af964e19a46da93e20466a48d755a453 Mon Sep 17 00:00:00 2001
From: riku <risaku@163.com>
Date: 星期一, 02 九月 2024 17:38:04 +0800
Subject: [PATCH] 正在实现设备管理模块
---
src/components/map/MapScene.vue | 1
/dev/null | 12 ---
src/api/deviceApi.js | 21 +++++
src/views/LoginPage.vue | 6 +
src/components/device/DeviceManage.vue | 102 +++++++++++++++++++++++++
src/constant/device-type.js | 2
src/api/missionApi.js | 2
src/components.d.ts | 2
src/components/device/DeviceCreate.vue | 0
src/stores/device.js | 42 ++++++++++
10 files changed, 174 insertions(+), 16 deletions(-)
diff --git a/src/api/deviceApi.js b/src/api/deviceApi.js
new file mode 100644
index 0000000..b2a8390
--- /dev/null
+++ b/src/api/deviceApi.js
@@ -0,0 +1,21 @@
+import { $http } from './index';
+
+/**
+ * 璧拌埅璁惧鐩稿叧鎺ュ彛API
+ */
+export default {
+ fethchDevice({ type, page, pageSize }) {
+ let params = `page=${page}&perPage=${pageSize}`;
+ params += type ? `&type=${type}` : '';
+ return $http.get(`air/device/type?${params}`).then((res) => res.data);
+ },
+
+ putNewDevice(device) {
+ return $http.post(`air/device/create`, device).then((res) => res.data);
+ },
+
+ deleteDevice(deviceCode) {
+ let params = `deviceCode=${deviceCode}`;
+ return $http.post(`air/device/delete?${params}`).then((res) => res.data);
+ }
+};
diff --git a/src/api/missionApi.js b/src/api/missionApi.js
index 764199a..d33ebf0 100644
--- a/src/api/missionApi.js
+++ b/src/api/missionApi.js
@@ -2,7 +2,7 @@
import { Base64 } from 'js-base64';
/**
- *
+ * 璧拌埅浠诲姟鐩稿叧鎺ュ彛API
*/
export default {
fethchMission({ type, page, pageSize }) {
diff --git a/src/components.d.ts b/src/components.d.ts
index 216f2b2..890072c 100644
--- a/src/components.d.ts
+++ b/src/components.d.ts
@@ -16,6 +16,8 @@
CoreMenu: typeof import('./components/core/CoreMenu.vue')['default']
DataSummary: typeof import('./components/monitor/DataSummary.vue')['default']
DataTable: typeof import('./components/monitor/DataTable.vue')['default']
+ DeviceCreate: typeof import('./components/device/DeviceCreate.vue')['default']
+ DeviceManage: typeof import('./components/device/DeviceManage.vue')['default']
ElButton: typeof import('element-plus/es')['ElButton']
ElCascader: typeof import('element-plus/es')['ElCascader']
ElCheckbox: typeof import('element-plus/es')['ElCheckbox']
diff --git a/src/components/device/DeviceCreate.vue b/src/components/device/DeviceCreate.vue
new file mode 100644
index 0000000..e69de29
--- /dev/null
+++ b/src/components/device/DeviceCreate.vue
diff --git a/src/components/device/DeviceManage.vue b/src/components/device/DeviceManage.vue
new file mode 100644
index 0000000..b892027
--- /dev/null
+++ b/src/components/device/DeviceManage.vue
@@ -0,0 +1,102 @@
+<template>
+ <el-button
+ type="primary"
+ icon="Memo"
+ class="el-button-custom p-events-auto"
+ @click="dialogVisible = !dialogVisible"
+ >
+ 璁惧绠$悊
+ </el-button>
+ <CardDialog v-model="dialogVisible" title="璧拌埅璁惧绠$悊">
+ <el-row class="mission-table">
+ <el-col :span="20">
+ <el-table
+ :data="deviceStore.deviceList"
+ table-layout="fixed"
+ size="small"
+ :show-overflow-tooltip="true"
+ border
+ height="64vh"
+ row-class-name="t-row"
+ cell-class-name="t-cell"
+ header-row-class-name="t-header-row"
+ header-cell-class-name="t-header-cell"
+ >
+ <el-table-column
+ type="index"
+ label="搴忓彿"
+ align="center"
+ width="50"
+ />
+ <el-table-column prop="deviceType" label="璁惧绫诲瀷" align="center" />
+ <el-table-column prop="deviceCode" label="璁惧缂栧彿" align="center" />
+ <el-table-column
+ prop="createTime"
+ label="鍒涘缓鏃堕棿"
+ align="center"
+ :formatter="timeFormatter"
+ />
+ <el-table-column label="绠$悊" width="140" align="center">
+ <template #default="{ row }">
+ <el-button
+ type="primary"
+ size="small"
+ class="el-button-custom"
+ @click="deleteDevice(row)"
+ >鍒犻櫎</el-button
+ >
+ </template>
+ </el-table-column>
+ </el-table>
+ </el-col>
+ <el-col :span="4" class="flex-col">
+ <div>
+ <!-- todo 璁惧鍒涘缓 -->
+ </div>
+ </el-col>
+ </el-row>
+ </CardDialog>
+ <MessageBox
+ v-model="msgBoxVisible"
+ :on-confirm="onConfirm"
+ title="鍒犻櫎璧拌埅浠诲姟"
+ msg="纭鏄惁鍒犻櫎璇ヨ蛋鑸换鍔�"
+ confirmText="鍒犻櫎"
+ ></MessageBox>
+</template>
+<script>
+import moment from 'moment';
+import deviceApi from '@/api/deviceApi';
+import { mapStores } from 'pinia';
+import { useDeviceStore } from '@/stores/device';
+import { useFetchData } from '@/composables/fetchData';
+
+export default {
+ setup() {
+ const { loading, fetchData } = useFetchData();
+ return { loading, fetchData };
+ },
+ props: {},
+ data() {
+ return {
+ dialogVisible: false,
+ msgBoxVisible: false,
+ onConfirm: undefined
+ };
+ },
+ computed: {
+ ...mapStores(useDeviceStore)
+ },
+ methods: {
+ deleteDevice(row) {
+ this.onConfirm = () => {
+ this.deviceStore.deleteDevice(row.deviceCode);
+ };
+ this.msgBoxVisible = true;
+ },
+ timeFormatter(row, col, cellValue, index) {
+ return moment(cellValue).format('YYYY-MM-DD HH:mm:ss');
+ }
+ }
+};
+</script>
diff --git a/src/components/map/MapScene.vue b/src/components/map/MapScene.vue
index c3cb97a..163b5a3 100644
--- a/src/components/map/MapScene.vue
+++ b/src/components/map/MapScene.vue
@@ -7,6 +7,7 @@
class="el-button-custom p-events-auto"
>
鍦烘櫙鏍囨敞
+ <el-icon class="el-icon--right"><arrow-down /></el-icon>
</el-button>
</template>
<OptionLocation v-model="districtCode"></OptionLocation>
diff --git a/src/constant/device-type.js b/src/constant/device-type.js
index dde0588..6291f18 100644
--- a/src/constant/device-type.js
+++ b/src/constant/device-type.js
@@ -51,7 +51,7 @@
return v.value == t;
});
return [1, 2, 3].map((v) => {
- const label = `${typeStr}璁惧${v}鍙穈;
+ const label = `${typeStr.label}璁惧${v}鍙穈;
const value = `${t}000000000${v}`;
return {
label: label,
diff --git a/src/stores/counter.js b/src/stores/counter.js
deleted file mode 100644
index b6757ba..0000000
--- a/src/stores/counter.js
+++ /dev/null
@@ -1,12 +0,0 @@
-import { ref, computed } from 'vue'
-import { defineStore } from 'pinia'
-
-export const useCounterStore = defineStore('counter', () => {
- const count = ref(0)
- const doubleCount = computed(() => count.value * 2)
- function increment() {
- count.value++
- }
-
- return { count, doubleCount, increment }
-})
diff --git a/src/stores/device.js b/src/stores/device.js
new file mode 100644
index 0000000..c75f474
--- /dev/null
+++ b/src/stores/device.js
@@ -0,0 +1,42 @@
+import { ref } from 'vue';
+import { defineStore } from 'pinia';
+import deviceApi from '@/api/deviceApi';
+import { useFetchData } from '@/composables/fetchData';
+
+// 璧拌埅浠诲姟
+export const useDeviceStore = defineStore('device', () => {
+ const deviceList = ref([]);
+ const { loading, fetchData } = useFetchData();
+
+ function fetchDevice(type) {
+ return fetchData((page, pageSize) => {
+ return deviceApi
+ .fethchDevice({ type: type, page, pageSize })
+ .then((res) => {
+ deviceList.value = res.data;
+ return res;
+ });
+ });
+ }
+
+ function deleteDevice(deviceCode) {
+ return fetchData(() => {
+ return deviceApi.deleteDevice(deviceCode).then((res) => {
+ let index = -1;
+ for (let i = 0; i < deviceList.value.length; i++) {
+ const e = deviceList.value[i];
+ if (e.deviceCode == deviceCode) {
+ index = i;
+ break;
+ }
+ }
+ if (index != -1) {
+ deviceList.value.splice(index, 1);
+ }
+ return res;
+ });
+ });
+ }
+
+ return { deviceList, loading, fetchDevice, deleteDevice };
+});
diff --git a/src/views/LoginPage.vue b/src/views/LoginPage.vue
index e02c33d..fa815f7 100644
--- a/src/views/LoginPage.vue
+++ b/src/views/LoginPage.vue
@@ -73,8 +73,10 @@
this.$refs.formRef.validate((valid) => {
if (valid) {
if (
- this.formObj.userName == 'jingan' &&
- this.formObj.password == 'jingan123'
+ (this.formObj.userName == 'jingan' &&
+ this.formObj.password == 'jingan123') ||
+ (this.formObj.userName == 'feiyu' &&
+ this.formObj.password == 'fyhb123')
) {
this.$router.replace('/index/hmode');
} else {
--
Gitblit v1.9.3