|
@@ -1,23 +1,23 @@
|
|
|
<template>
|
|
|
<div class="app-container p-2">
|
|
|
<el-row :gutter="20">
|
|
|
- <el-col :lg="30" :xs="24" style="">
|
|
|
+ <el-col :lg="30" :xs="24">
|
|
|
<el-row :span="24" :gutter="10">
|
|
|
- <el-col :span="18" label="任务名称">
|
|
|
- <h2 v-if="detailData.title" key="business" style="font-weight: bolder">{{ detailData.title }}</h2>
|
|
|
+ <el-col :span="18">
|
|
|
+ <h2 v-if="detailData.title" style="font-weight: bolder">{{ detailData.title }}</h2>
|
|
|
<p class="report-period">【填报周期】:{{ detailData.start }} 至 {{ detailData.end }}</p>
|
|
|
</el-col>
|
|
|
<el-col :span="1.5">
|
|
|
- <el-button type="primary" @click="handleReport()"> 上报 </el-button>
|
|
|
+ <el-button type="primary" @click="handleReport">上报</el-button>
|
|
|
</el-col>
|
|
|
<el-col :span="1.5">
|
|
|
- <el-button type="primary" @click="exportToExcel()"> 导出表格 </el-button>
|
|
|
+ <el-button type="primary" @click="exportToExcel">导出表格</el-button>
|
|
|
</el-col>
|
|
|
<el-col :span="1.5">
|
|
|
- <el-button type="primary" @click="handleSave()"> 保存 </el-button>
|
|
|
+ <el-button type="primary" @click="handleSave">保存</el-button>
|
|
|
</el-col>
|
|
|
<el-col :span="1.5">
|
|
|
- <el-button type="danger" @click="handleReturn()"> 返回 </el-button>
|
|
|
+ <el-button type="danger" @click="handleReturn">返回</el-button>
|
|
|
</el-col>
|
|
|
</el-row>
|
|
|
</el-col>
|
|
@@ -26,10 +26,10 @@
|
|
|
<el-button type="primary" @click="handleAdd">批量导入</el-button>
|
|
|
</el-col>
|
|
|
<el-col :span="1.5">
|
|
|
- <el-button type="primary" @click="handleDownloadEmptyTable"> 下载空表格 </el-button>
|
|
|
+ <el-button type="primary" @click="handleDownloadEmptyTable">下载空表格</el-button>
|
|
|
</el-col>
|
|
|
<el-col :span="1.5">
|
|
|
- <el-button type="primary" @click="handleAddRow"> 新增一行 </el-button>
|
|
|
+ <el-button type="primary" @click="handleAddRow">新增一行</el-button>
|
|
|
</el-col>
|
|
|
</el-row>
|
|
|
<el-col :lg="30" :xs="24">
|
|
@@ -62,67 +62,67 @@
|
|
|
import { ref, onMounted } from 'vue';
|
|
|
import { ElTable, ElButton, ElCol, ElRow, ElTableColumn } from 'element-plus';
|
|
|
import * as XLSX from 'xlsx';
|
|
|
+import { writeView, submitFill } from '@/api/dataFilling/datafilling';
|
|
|
+import { defineProps, defineEmits } from 'vue';
|
|
|
+
|
|
|
+const props = defineProps({
|
|
|
+ eventId: String
|
|
|
+});
|
|
|
+
|
|
|
const emits = defineEmits(['close']);
|
|
|
+
|
|
|
const detailData = ref({
|
|
|
title: '测试表单',
|
|
|
start: '2024-10-15 17:02:22',
|
|
|
end: '2024-10-15 18:00:00'
|
|
|
});
|
|
|
|
|
|
-const editableHeaders = ref(['时间', '地点', '损坏程度', '救援人员', '物资']);
|
|
|
-const tableData = ref([]);
|
|
|
+const editableHeaders = ref<string[]>([]);
|
|
|
+const tableData = ref<any[]>([]);
|
|
|
|
|
|
-// 初始化表格数据
|
|
|
-onMounted(() => {
|
|
|
- loadFromLocalStorage();
|
|
|
- addDefaultRow();
|
|
|
-});
|
|
|
+// 获取表头数据
|
|
|
+const fetchHeaders = async () => {
|
|
|
+ try {
|
|
|
+ const response = await writeView({ report_id: props.eventId });
|
|
|
+ if (response.code === 200) {
|
|
|
+ const headers = response.fields.map((field) => field.field_comment);
|
|
|
+ editableHeaders.value = headers;
|
|
|
+ } else {
|
|
|
+ console.error('获取表头失败:', response.msg);
|
|
|
+ }
|
|
|
+ } catch (error) {
|
|
|
+ console.error('请求错误:', error);
|
|
|
+ }
|
|
|
+};
|
|
|
|
|
|
-// 加载数据
|
|
|
-function loadFromLocalStorage() {
|
|
|
+// 初始化表格数据
|
|
|
+const loadFromLocalStorage = () => {
|
|
|
const storedData = localStorage.getItem('tableData');
|
|
|
if (storedData) {
|
|
|
tableData.value = JSON.parse(storedData);
|
|
|
} else {
|
|
|
- tableData.value = [
|
|
|
- {
|
|
|
- 时间: '2024-01-01',
|
|
|
- 地点: '某地',
|
|
|
- 损坏程度: '轻度',
|
|
|
- 救援人员: '张三, 李四',
|
|
|
- 物资: '食品, 水'
|
|
|
- },
|
|
|
- {
|
|
|
- 时间: '2024-01-02',
|
|
|
- 地点: '某地',
|
|
|
- 损坏程度: '中度',
|
|
|
- 救援人员: '王五, 赵六',
|
|
|
- 物资: '帐篷, 医疗用品'
|
|
|
- }
|
|
|
- ];
|
|
|
+ tableData.value = [];
|
|
|
}
|
|
|
-}
|
|
|
+};
|
|
|
+
|
|
|
+const addDefaultRow = () => {
|
|
|
+ const newRow = {};
|
|
|
+ editableHeaders.value.forEach((header) => {
|
|
|
+ newRow[header] = '';
|
|
|
+ });
|
|
|
+ tableData.value.push(newRow);
|
|
|
+};
|
|
|
|
|
|
-function saveEdit(rowIndex, header, value) {
|
|
|
+const saveEdit = (rowIndex, header, value) => {
|
|
|
tableData.value[rowIndex][header] = value;
|
|
|
-}
|
|
|
+};
|
|
|
|
|
|
-function saveHeader(header, newValue) {
|
|
|
+const saveHeader = (header, newValue) => {
|
|
|
const index = editableHeaders.value.indexOf(header);
|
|
|
if (index !== -1) {
|
|
|
editableHeaders.value.splice(index, 1, newValue);
|
|
|
}
|
|
|
-}
|
|
|
-
|
|
|
-function addDefaultRow() {
|
|
|
- tableData.value.push({
|
|
|
- 时间: '',
|
|
|
- 地点: '',
|
|
|
- 损坏程度: '',
|
|
|
- 救援人员: '',
|
|
|
- 物资: ''
|
|
|
- });
|
|
|
-}
|
|
|
+};
|
|
|
|
|
|
const exportToExcel = () => {
|
|
|
const worksheet = XLSX.utils.json_to_sheet(tableData.value);
|
|
@@ -141,16 +141,47 @@ const exportToExcel = () => {
|
|
|
const handleAdd = () => console.log('批量导入');
|
|
|
const handleDownloadEmptyTable = () => console.log('下载空表格');
|
|
|
const handleAddRow = () => addDefaultRow();
|
|
|
-const handleReport = () => console.log('上报');
|
|
|
-
|
|
|
const handleSave = () => {
|
|
|
- // 保存本地状态
|
|
|
localStorage.setItem('tableData', JSON.stringify(tableData.value));
|
|
|
alert('数据已保存');
|
|
|
};
|
|
|
const handleReturn = () => {
|
|
|
emits('close');
|
|
|
};
|
|
|
+const handleReport = async () => {
|
|
|
+ try {
|
|
|
+ const mappedData = tableData.value.map((row) => {
|
|
|
+ const mappedRow: any = {};
|
|
|
+ editableHeaders.value.forEach((header) => {
|
|
|
+ if (row[header.field_name] !== undefined) {
|
|
|
+ mappedRow[header.field_name] = row[header.field_name];
|
|
|
+ }
|
|
|
+ });
|
|
|
+ return mappedRow;
|
|
|
+ });
|
|
|
+
|
|
|
+ const data = {
|
|
|
+ report_id: props.eventId,
|
|
|
+ data: mappedData
|
|
|
+ };
|
|
|
+
|
|
|
+ const response = await submitFill(data);
|
|
|
+ if (response.code === 200) {
|
|
|
+ alert('数据上报成功');
|
|
|
+ } else {
|
|
|
+ alert('数据上报失败: ' + response.msg);
|
|
|
+ }
|
|
|
+ } catch (error) {
|
|
|
+ console.error('上报数据时发生错误:', error);
|
|
|
+ alert('数据上报失败,请稍后再试');
|
|
|
+ }
|
|
|
+};
|
|
|
+// 组件挂载时调用
|
|
|
+onMounted(() => {
|
|
|
+ loadFromLocalStorage();
|
|
|
+ fetchHeaders();
|
|
|
+ addDefaultRow();
|
|
|
+});
|
|
|
</script>
|
|
|
|
|
|
<style scoped>
|