From 5e9b36b0ad6513a19c841129eae1ed189b7fe72d Mon Sep 17 00:00:00 2001 From: K <1175047471@qq.com> Date: Thu, 29 Feb 2024 18:05:00 +0800 Subject: [PATCH] =?UTF-8?q?feat:=20=E8=AE=BE=E5=A4=87=E7=AE=A1=E7=90=86=20?= =?UTF-8?q?-=20=E8=AE=BE=E5=A4=87=E9=A1=B5=E9=9D=A2?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/api/device-manage/device/index.ts | 29 +++++ src/api/device-manage/device/types.ts | 15 +++ .../device-manage/device/DeviceFormModal.vue | 55 ++++++++ src/views/device-manage/device/data.ts | 123 ++++++++++++++++++ src/views/device-manage/device/detail.vue | 5 + src/views/device-manage/device/index.vue | 85 ++++++++++++ 6 files changed, 312 insertions(+) create mode 100644 src/api/device-manage/device/index.ts create mode 100644 src/api/device-manage/device/types.ts create mode 100644 src/views/device-manage/device/DeviceFormModal.vue create mode 100644 src/views/device-manage/device/data.ts create mode 100644 src/views/device-manage/device/detail.vue create mode 100644 src/views/device-manage/device/index.vue diff --git a/src/api/device-manage/device/index.ts b/src/api/device-manage/device/index.ts new file mode 100644 index 00000000..604e8783 --- /dev/null +++ b/src/api/device-manage/device/index.ts @@ -0,0 +1,29 @@ +import type { Device, GetDeviceListParams } from './types' +import { defHttp } from '@/utils/http/axios' + +export function getDeviceList(params: GetDeviceListParams) { + return defHttp.get>({ + url: '/device/page', + params, + }) +} + +export function createDevice(data: Partial) { + return defHttp.post({ + url: '/device/save', + data, + }) +} + +export function updateDevice(data: Partial) { + return defHttp.post({ + url: '/device/update', + data, + }) +} + +export function deleteDevice(id: string) { + return defHttp.post({ + url: `/device/remove?id=${id}`, + }) +} diff --git a/src/api/device-manage/device/types.ts b/src/api/device-manage/device/types.ts new file mode 100644 index 00000000..6cf9333c --- /dev/null +++ b/src/api/device-manage/device/types.ts @@ -0,0 +1,15 @@ +export interface GetDeviceListParams extends PageParam { + productId?: string + deviceSn?: string + deviceName?: string + isOnline?: BooleanFlag +} + +export interface Device { + id: string + productId: string + deviceSn: string + deviceName: string + deviceDesc: string + isOnline: BooleanFlag +} diff --git a/src/views/device-manage/device/DeviceFormModal.vue b/src/views/device-manage/device/DeviceFormModal.vue new file mode 100644 index 00000000..8840ff7f --- /dev/null +++ b/src/views/device-manage/device/DeviceFormModal.vue @@ -0,0 +1,55 @@ + + + diff --git a/src/views/device-manage/device/data.ts b/src/views/device-manage/device/data.ts new file mode 100644 index 00000000..bd49e40e --- /dev/null +++ b/src/views/device-manage/device/data.ts @@ -0,0 +1,123 @@ +import { Tag } from 'ant-design-vue' +import type { Ref } from 'vue' +import { h } from 'vue' +import type { BasicColumn, FormSchema } from '@/components/Table' +import { getAllProducts } from '@/api/product' +import { getAllTenants } from '@/api/system/tenant' + +export const columns: BasicColumn[] = [ + { + title: '所属产品', + dataIndex: 'productName', + }, + { + title: '设备名称', + dataIndex: 'deviceName', + }, + { + title: '设备序列号', + dataIndex: 'deviceSn', + }, + { + title: '设备描述', + dataIndex: 'deviceDesc', + }, + { + title: '是否在线', + dataIndex: 'isOnline', + customRender({ value }) { + return h(Tag, { + color: value ? 'green' : 'default', + }, () => value ? '在线' : '离线') + }, + }, +] + +export const searchFormSchemas: FormSchema[] = [ + { + label: '所属租户', + field: 'tenantId', + component: 'ApiSelect', + componentProps: { + api: getAllTenants, + valueField: 'tenantId', + labelField: 'tenantName', + }, + colProps: { span: 6 }, + }, + { + label: '所属产品', + field: 'productId', + component: 'ApiSelect', + componentProps: { + api: getAllProducts, + valueField: 'id', + labelField: 'productName', + }, + colProps: { span: 6 }, + }, + { + label: '设备序列号', + field: 'deviceSn', + component: 'Input', + colProps: { span: 6 }, + }, + { + label: '设备名称', + field: 'deviceName', + component: 'Input', + colProps: { span: 6 }, + }, + { + label: '是否在线', + field: 'isOnline', + component: 'Select', + componentProps: { + options: [ + { label: '在线', value: 1 }, + { label: '离线', value: 0 }, + ], + }, + colProps: { span: 6 }, + }, +] + +export function getFormSchema(isUpdate: Ref): FormSchema[] { + return [ + { + field: 'id', + show: false, + component: 'Input', + }, + { + label: '设备名称', + field: 'deviceName', + component: 'Input', + required: true, + }, + { + label: '设备序列号', + field: 'deviceSn', + component: 'Input', + required: true, + ifShow: () => !isUpdate.value, + }, + { + label: '所属产品', + field: 'productId', + component: 'ApiSelect', + required: true, + ifShow: () => !isUpdate.value, + componentProps: { + api: getAllProducts, + valueField: 'id', + labelField: 'productName', + }, + }, + { + label: '设备描述', + field: 'deviceDesc', + component: 'InputTextArea', + }, + ] +} diff --git a/src/views/device-manage/device/detail.vue b/src/views/device-manage/device/detail.vue new file mode 100644 index 00000000..72480a97 --- /dev/null +++ b/src/views/device-manage/device/detail.vue @@ -0,0 +1,5 @@ + diff --git a/src/views/device-manage/device/index.vue b/src/views/device-manage/device/index.vue new file mode 100644 index 00000000..04f97396 --- /dev/null +++ b/src/views/device-manage/device/index.vue @@ -0,0 +1,85 @@ + + +