李富豪 1 рік тому
батько
коміт
80cb3b63c1

+ 20 - 0
Web/src/api/custom/index.ts

@@ -2,6 +2,18 @@ import request from '/@/api/http/request';
 import { getWorkspaceId } from '/@/utils/index';
 
 // Api参数类型
+export type CreateDeviceFeedbackApiParams = {
+    logsInfo: string,
+    happenTime: number,
+    contactNumber?: string,
+    contactEmail?: string,
+    ossIds?: string,
+    list?: {
+        list: any[],
+        module: string,
+    }[],
+};
+
 export type SignLoginApiParams = {
     username: string,
     client_id: string,
@@ -77,6 +89,7 @@ export type FetchPilotPasswordApiParams = {
 
 // Api函数类型
 export type FetchDeviceLogListApi = (sn: string, params: { domain_list: number }) => Promise<any>;
+export type CreateDeviceFeedbackApi = (sn: string, data: CreateDeviceFeedbackApiParams) => Promise<any>;
 export type SignLoginApi = (data: SignLoginApiParams) => Promise<any>;
 export type FetchDeviceModelApi = (params?: { flg: boolean }) => Promise<any>;
 export type FetchDeviceStatusApi = (params: { snList: string }) => Promise<any>;
@@ -108,6 +121,12 @@ const fetchDeviceLogListApi: FetchDeviceLogListApi = async (sn, params) => {
     return res.data;
 };
 
+// 创建设备异常反馈
+const createDeviceFeedbackApi: CreateDeviceFeedbackApi = async (sn, data) => {
+    const res = await request.post(`/manage/api/v1/workspaces/${getWorkspaceId()}/devices/${sn}/createLogs`, data);
+    return res.data;
+};
+
 // 密钥登录
 const signLoginApi: SignLoginApi = async (data) => {
     const res = await request.post('/manage/api/v1/signLogin', data);
@@ -243,6 +262,7 @@ const fetchPilotPasswordApi: FetchPilotPasswordApi = async (params) => {
 
 export const apis = {
     fetchDeviceLogList: fetchDeviceLogListApi,
+    createDeviceFeedback: createDeviceFeedbackApi,
     signLogin: signLoginApi,
     fetchDeviceModel: fetchDeviceModelApi,
     fetchDeviceStatus: fetchDeviceStatusApi,

+ 5 - 5
Web/src/components/devices/deviceList/components/FeedbackCreateModal.vue

@@ -79,14 +79,14 @@
 <script lang="ts" setup>
 import { ref, reactive, onMounted } from 'vue';
 import { message } from 'ant-design-vue';
-import { apis, getUploadPath } from '/@/api/custom';
+import { getUploadPath, apis, CreateDeviceFeedbackApiParams } from '/@/api/custom';
 import { getHeaders } from '/@/api/http/request';
 import moment from 'moment';
 
 interface Props {
     sn: string,
     visible: boolean,
-    onClickSubmit: () => Promise<any>
+    onClickSubmit: (sn: string, data: CreateDeviceFeedbackApiParams) => Promise<any>,
     onClickClose: () => void,
 };
 
@@ -265,10 +265,10 @@ const handleClickSubmit = () => {
         const data = {
             ...values,
             happenTime: moment(values.happenTime).valueOf(),
-            ossIds: formModel.fileList.map(item => item.uid).join(','),
-            list: list,
+            ossIds: formModel.fileList.length ? formModel.fileList.map(item => item.uid).join(',') : undefined,
+            list: list.length ? list : undefined,
         }
-        console.log(data, 'data');
+        await props.onClickSubmit(props.sn, data);
     }).catch((error: any) => {
         console.error(error);
     });

+ 10 - 2
Web/src/components/devices/deviceList/components/FeedbackDrawer.vue

@@ -62,10 +62,11 @@
 
 <script lang="ts" setup>
 import { ref, reactive, onMounted } from 'vue';
+import { message } from 'ant-design-vue';
 import { SearchOutlined, ReloadOutlined, FileSearchOutlined } from '@ant-design/icons-vue';
 import FeedbackCreateModal from '../components/FeedbackCreateModal.vue';
 import FeedbackDetailModal from '../components/FeedbackDetailModal.vue';
-import { apis } from '/@/api/custom';
+import { apis, CreateDeviceFeedbackApiParams } from '/@/api/custom';
 import { Device } from '/@/types/device';
 
 interface Props {
@@ -227,8 +228,15 @@ const handleClickReset = async () => {
     await fetchList();
 }
 
-const createModalOnClickSubmit = async () => {
+const createModalOnClickSubmit = async (sn: string, data: CreateDeviceFeedbackApiParams) => {
     state.createModalVisible = false;
+    try {
+        await apis.createDeviceFeedback(sn, data);
+        await fetchList();
+        message.success('提交成功');
+    } catch (error) {
+        console.error(error);
+    }
 }
 
 // 点击详情