|
|
@@ -0,0 +1,166 @@
|
|
|
+<template>
|
|
|
+ <a-modal :width="800" title="设备异常反馈" :maskClosable="false" :closable="false" okText="提交" v-model:visible="visible"
|
|
|
+ @ok="handleClickSubmit" @cancel="onClickClose">
|
|
|
+ <a-form ref="formRef" :model="formModel" :colon="false" :label-col="labelCol" :wrapper-col="wrapperCol">
|
|
|
+ <a-form-item label='异常描述' name="describe"
|
|
|
+ :rules="[{ required: true, message: '异常描述不能为空', whitespace: true }]">
|
|
|
+ <a-input style="width: 100%;" v-model:value="formModel.describe" placeholder="请输入异常描述" />
|
|
|
+ </a-form-item>
|
|
|
+ <a-form-item label='发生时间' name="date" :rules="[{ required: true, message: '发生时间不能为空' }]">
|
|
|
+ <a-date-picker style="width: 100%;" showTime valueFormat="YYYY-MM-DD HH:mm:ss"
|
|
|
+ v-model:value="formModel.date" />
|
|
|
+ </a-form-item>
|
|
|
+ <a-form-item label='联系电话' name="phone">
|
|
|
+ <a-input style="width: 100%;" v-model:value="formModel.phone" placeholder="请输入联系电话" />
|
|
|
+ </a-form-item>
|
|
|
+ <a-form-item label='联系邮箱' name="email">
|
|
|
+ <a-input style="width: 100%;" v-model:value="formModel.email" placeholder="请输入发生时间" />
|
|
|
+ </a-form-item>
|
|
|
+ <a-form-item label='附件' name="file">
|
|
|
+ <div style="display: flex;align-items: center;">
|
|
|
+ <a-button>上传附件</a-button>
|
|
|
+ <div style="font-size: 12px;color: rgba(0,0,0,.45);margin-left: 10px;">
|
|
|
+ 支持上传:图片、文档、视频、RAR 及 ZIP 等文件(至多上传 3 个文件)
|
|
|
+ </div>
|
|
|
+ </div>
|
|
|
+ </a-form-item>
|
|
|
+ <a-form-item label='上传日志' name="linkageSelect">
|
|
|
+ <div style="display: flex;align-items: center;">
|
|
|
+ <div style="margin-right: 10px;">
|
|
|
+ 联动选择
|
|
|
+ </div>
|
|
|
+ <a-switch v-model:checked="formModel.linkageSelect" />
|
|
|
+ </div>
|
|
|
+ </a-form-item>
|
|
|
+ </a-form>
|
|
|
+ <div class="log-list">
|
|
|
+ <div class="log-list-item">
|
|
|
+ <a-table :columns="airportLogColumns" :scroll="{ x: '100%', y: 600 }"
|
|
|
+ :data-source="state.airportLogList" :loading="state.listLoading"
|
|
|
+ :row-selection="airportTableLogState.rowSelection" rowKey="boot_index" :pagination="false">
|
|
|
+ <template #log_time="{ record }">
|
|
|
+ <!-- <div>{{ getLogTime(record) }}</div> -->
|
|
|
+ </template>
|
|
|
+ <template #size="{ record }">
|
|
|
+ <!-- <div>{{ getLogSize(record.size) }}</div> -->
|
|
|
+ </template>
|
|
|
+ </a-table>
|
|
|
+ </div>
|
|
|
+ <div class="log-list-item">
|
|
|
+ <a-table :columns="droneLogColumns" :scroll="{ x: '100%', y: 600 }" :data-source="state.droneLogList"
|
|
|
+ :loading="state.listLoading" :row-selection="droneTableLogState.rowSelection" rowKey="boot_index"
|
|
|
+ :pagination="false">
|
|
|
+ <template #log_time="{ record }">
|
|
|
+ <!-- <div>{{ getLogTime(record) }}</div> -->
|
|
|
+ </template>
|
|
|
+ <template #size="{ record }">
|
|
|
+ <!-- <div>{{ getLogSize(record.size) }}</div> -->
|
|
|
+ </template>
|
|
|
+ </a-table>
|
|
|
+ </div>
|
|
|
+ </div>
|
|
|
+ </a-modal>
|
|
|
+</template>
|
|
|
+
|
|
|
+<script lang="ts" setup>
|
|
|
+import { ref, reactive, onMounted } from 'vue';
|
|
|
+import { apis } from '/@/api/custom';
|
|
|
+
|
|
|
+interface Props {
|
|
|
+ visible: boolean,
|
|
|
+ onClickSubmit: () => Promise<any>
|
|
|
+ onClickClose: () => void,
|
|
|
+};
|
|
|
+
|
|
|
+const props = withDefaults(defineProps<Props>(), {
|
|
|
+
|
|
|
+});
|
|
|
+
|
|
|
+const formRef = ref();
|
|
|
+
|
|
|
+const formModel = reactive({
|
|
|
+ describe: undefined,
|
|
|
+ date: undefined,
|
|
|
+ phone: undefined,
|
|
|
+ email: undefined,
|
|
|
+ file: undefined,
|
|
|
+ linkageSelect: undefined
|
|
|
+})
|
|
|
+
|
|
|
+const labelCol = { span: 4 };
|
|
|
+
|
|
|
+const wrapperCol = { span: 18 };
|
|
|
+
|
|
|
+interface State {
|
|
|
+ listLoading: boolean,
|
|
|
+ airportLogList: any[]
|
|
|
+ droneLogList: any[],
|
|
|
+};
|
|
|
+
|
|
|
+const state: State = reactive({
|
|
|
+ listLoading: false,
|
|
|
+ airportLogList: [],
|
|
|
+ droneLogList: [],
|
|
|
+});
|
|
|
+
|
|
|
+onMounted(async () => {
|
|
|
+ // await fetchList();
|
|
|
+})
|
|
|
+
|
|
|
+// 表格
|
|
|
+const airportLogColumns = [
|
|
|
+ { title: '机场日志', dataIndex: 'time', width: 100, slots: { customRender: 'log_time' } },
|
|
|
+ { title: '文件大小', dataIndex: 'size', width: 25, slots: { customRender: 'size' } },
|
|
|
+]
|
|
|
+
|
|
|
+const droneLogColumns = [
|
|
|
+ { title: '飞行器日志', dataIndex: 'time', width: 100, slots: { customRender: 'log_time' } },
|
|
|
+ { title: '文件大小', dataIndex: 'size', width: 25, slots: { customRender: 'size' } },
|
|
|
+]
|
|
|
+
|
|
|
+const airportTableLogState = reactive({
|
|
|
+ logList: {} as DeviceLogFileInfo,
|
|
|
+ tableLoading: false,
|
|
|
+ selectRow: [],
|
|
|
+ rowSelection: {
|
|
|
+ columnWidth: 15,
|
|
|
+ selectedRowKeys: [] as number[],
|
|
|
+ onChange: (selectedRowKeys: number[], selectedRows: []) => {
|
|
|
+ airportTableLogState.rowSelection.selectedRowKeys = selectedRowKeys
|
|
|
+ airportTableLogState.selectRow = selectedRows
|
|
|
+ console.log(`selectedRowKeys: ${selectedRowKeys}`, 'selectedRows: ', selectedRows)
|
|
|
+ },
|
|
|
+ }
|
|
|
+})
|
|
|
+
|
|
|
+const droneTableLogState = reactive({
|
|
|
+ logList: {} as DeviceLogFileInfo,
|
|
|
+ tableLoading: false,
|
|
|
+ selectRow: [],
|
|
|
+ rowSelection: {
|
|
|
+ columnWidth: 15,
|
|
|
+ selectedRowKeys: [] as number[],
|
|
|
+ onChange: (selectedRowKeys: number[], selectedRows: []) => {
|
|
|
+ droneTableLogState.rowSelection.selectedRowKeys = selectedRowKeys
|
|
|
+ droneTableLogState.selectRow = selectedRows
|
|
|
+ console.log(`selectedRowKeys: ${selectedRowKeys}`, 'selectedRows: ', selectedRows)
|
|
|
+ },
|
|
|
+ }
|
|
|
+})
|
|
|
+
|
|
|
+// 点击提交
|
|
|
+const handleClickSubmit = () => {
|
|
|
+
|
|
|
+}
|
|
|
+</script>
|
|
|
+
|
|
|
+<style lang="scss" scoped>
|
|
|
+.log-list {
|
|
|
+ display: flex;
|
|
|
+ justify-content: space-between;
|
|
|
+
|
|
|
+ &-item {
|
|
|
+ width: 48%;
|
|
|
+ }
|
|
|
+}
|
|
|
+</style>
|