|
@@ -12,71 +12,71 @@
|
|
</div>
|
|
</div>
|
|
<div v-for="(item, index) in fixedTableData" :key="index" class="tr">
|
|
<div v-for="(item, index) in fixedTableData" :key="index" class="tr">
|
|
<div class="td">
|
|
<div class="td">
|
|
- <div class="address-box">
|
|
|
|
- <div class="address-text" :title="item.address">{{ item.address }}</div>
|
|
|
|
|
|
+ <div class="area_name-box">
|
|
|
|
+ <div class="area_name-text" :title="item.area_name">{{ item.area_name }}</div>
|
|
</div>
|
|
</div>
|
|
</div>
|
|
</div>
|
|
<div class="td">
|
|
<div class="td">
|
|
- <div class="address-box">
|
|
|
|
- <el-input-number v-if="isEditing" v-model="item.numone" class="custom-input" :min="0" />
|
|
|
|
- <div v-else class="address-text">{{ item.numone }}</div>
|
|
|
|
|
|
+ <div class="area_name-box">
|
|
|
|
+ <el-input-number v-if="isEditing" v-model="item.injuries" class="custom-input" :min="0" />
|
|
|
|
+ <div v-else class="area_name-text">{{ item.injuries }}</div>
|
|
</div>
|
|
</div>
|
|
</div>
|
|
</div>
|
|
<div class="td">
|
|
<div class="td">
|
|
- <div class="address-box">
|
|
|
|
- <el-input-number v-if="isEditing" v-model="item.numtwo" class="custom-input" :min="0" />
|
|
|
|
- <div v-else class="address-text">{{ item.numtwo }}</div>
|
|
|
|
|
|
+ <div class="area_name-box">
|
|
|
|
+ <el-input-number v-if="isEditing" v-model="item.missing" class="custom-input" :min="0" />
|
|
|
|
+ <div v-else class="area_name-text">{{ item.missing }}</div>
|
|
</div>
|
|
</div>
|
|
</div>
|
|
</div>
|
|
<div class="td">
|
|
<div class="td">
|
|
- <div class="address-box">
|
|
|
|
- <el-input-number v-if="isEditing" v-model="item.numthree" class="custom-input" :min="0" />
|
|
|
|
- <div v-else class="address-text">{{ item.numthree }}</div>
|
|
|
|
|
|
+ <div class="area_name-box">
|
|
|
|
+ <el-input-number v-if="isEditing" v-model="item.deaths" class="custom-input" :min="0" />
|
|
|
|
+ <div v-else class="area_name-text">{{ item.deaths }}</div>
|
|
</div>
|
|
</div>
|
|
</div>
|
|
</div>
|
|
<div class="td">
|
|
<div class="td">
|
|
- <div class="address-box">
|
|
|
|
- <el-input-number v-if="isEditing" v-model="item.numfour" class="custom-input" :min="0" />
|
|
|
|
- <div v-else class="address-text">{{ item.numfour }}</div>
|
|
|
|
|
|
+ <div class="area_name-box">
|
|
|
|
+ <el-input-number v-if="isEditing" v-model="item.transfer" class="custom-input" :min="0" />
|
|
|
|
+ <div v-else class="area_name-text">{{ item.transfer }}</div>
|
|
</div>
|
|
</div>
|
|
</div>
|
|
</div>
|
|
<div class="td">
|
|
<div class="td">
|
|
- <div class="address-box">
|
|
|
|
- <el-input-number v-if="isEditing" v-model="item.numfive" class="custom-input" :min="0" />
|
|
|
|
- <div v-else class="address-text">{{ item.numfive }}</div>
|
|
|
|
|
|
+ <div class="area_name-box">
|
|
|
|
+ <el-input-number v-if="isEditing" v-model="item.economic_loss" class="custom-input" :min="0" />
|
|
|
|
+ <div v-else class="area_name-text">{{ item.economic_loss }}</div>
|
|
</div>
|
|
</div>
|
|
</div>
|
|
</div>
|
|
</div>
|
|
</div>
|
|
<!-- 合计行 -->
|
|
<!-- 合计行 -->
|
|
<div class="tr total-row">
|
|
<div class="tr total-row">
|
|
<div class="td">
|
|
<div class="td">
|
|
- <div class="address-box">
|
|
|
|
- <div class="address-text">合计</div>
|
|
|
|
|
|
+ <div class="area_name-box">
|
|
|
|
+ <div class="area_name-text">合计</div>
|
|
</div>
|
|
</div>
|
|
</div>
|
|
</div>
|
|
<div class="td">
|
|
<div class="td">
|
|
- <div class="address-box">
|
|
|
|
- <div class="address-text">{{ total.numone }}</div>
|
|
|
|
|
|
+ <div class="area_name-box">
|
|
|
|
+ <div class="area_name-text">{{ total.injuries }}</div>
|
|
</div>
|
|
</div>
|
|
</div>
|
|
</div>
|
|
<div class="td">
|
|
<div class="td">
|
|
- <div class="address-box">
|
|
|
|
- <div class="address-text">{{ total.numtwo }}</div>
|
|
|
|
|
|
+ <div class="area_name-box">
|
|
|
|
+ <div class="area_name-text">{{ total.missing }}</div>
|
|
</div>
|
|
</div>
|
|
</div>
|
|
</div>
|
|
<div class="td">
|
|
<div class="td">
|
|
- <div class="address-box">
|
|
|
|
- <div class="address-text">{{ total.numthree }}</div>
|
|
|
|
|
|
+ <div class="area_name-box">
|
|
|
|
+ <div class="area_name-text">{{ total.deaths }}</div>
|
|
</div>
|
|
</div>
|
|
</div>
|
|
</div>
|
|
<div class="td">
|
|
<div class="td">
|
|
- <div class="address-box">
|
|
|
|
- <div class="address-text">{{ total.numfour }}</div>
|
|
|
|
|
|
+ <div class="area_name-box">
|
|
|
|
+ <div class="area_name-text">{{ total.transfer }}</div>
|
|
</div>
|
|
</div>
|
|
</div>
|
|
</div>
|
|
<div class="td">
|
|
<div class="td">
|
|
- <div class="address-box">
|
|
|
|
- <div class="address-text">{{ total.numfive }}</div>
|
|
|
|
|
|
+ <div class="area_name-box">
|
|
|
|
+ <div class="area_name-text">{{ total.economic_loss }}</div>
|
|
</div>
|
|
</div>
|
|
</div>
|
|
</div>
|
|
</div>
|
|
</div>
|
|
@@ -105,7 +105,8 @@
|
|
<script setup lang="ts">
|
|
<script setup lang="ts">
|
|
import { computed, ref } from 'vue';
|
|
import { computed, ref } from 'vue';
|
|
import BigNumber from 'bignumber.js';
|
|
import BigNumber from 'bignumber.js';
|
|
-
|
|
|
|
|
|
+import { getEventCasualties, uploadCasualties } from '@/api/duty/eventing';
|
|
|
|
+const { proxy } = getCurrentInstance() as ComponentInternalInstance;
|
|
// 固定的行政区域列表
|
|
// 固定的行政区域列表
|
|
const fixedRegions = ['茂名市', '茂南区', '电白区', '化州市', '高州市', '信宜市'];
|
|
const fixedRegions = ['茂名市', '茂南区', '电白区', '化州市', '高州市', '信宜市'];
|
|
|
|
|
|
@@ -124,17 +125,17 @@ const fixedTableData = ref([]);
|
|
const mergeDataWithFixedRegions = () => {
|
|
const mergeDataWithFixedRegions = () => {
|
|
fixedTableData.value = fixedRegions.map((region) => {
|
|
fixedTableData.value = fixedRegions.map((region) => {
|
|
// 查找是否有该区域的数据
|
|
// 查找是否有该区域的数据
|
|
- const foundData = tableData.value.find((item) => item.address === region);
|
|
|
|
|
|
+ const foundData = tableData.value.find((item) => item.area_name === region);
|
|
|
|
|
|
// 如果有数据则使用,否则使用默认值0
|
|
// 如果有数据则使用,否则使用默认值0
|
|
return (
|
|
return (
|
|
foundData || {
|
|
foundData || {
|
|
- address: region,
|
|
|
|
- numone: 0,
|
|
|
|
- numtwo: 0,
|
|
|
|
- numthree: 0,
|
|
|
|
- numfour: 0,
|
|
|
|
- numfive: 0
|
|
|
|
|
|
+ area_name: region,
|
|
|
|
+ injuries: 0,
|
|
|
|
+ missing: 0,
|
|
|
|
+ deaths: 0,
|
|
|
|
+ transfer: 0,
|
|
|
|
+ economic_loss: 0
|
|
}
|
|
}
|
|
);
|
|
);
|
|
});
|
|
});
|
|
@@ -144,31 +145,31 @@ const mergeDataWithFixedRegions = () => {
|
|
const total = computed(() => {
|
|
const total = computed(() => {
|
|
// 初始化 BigNumber 对象
|
|
// 初始化 BigNumber 对象
|
|
const init = {
|
|
const init = {
|
|
- numone: new BigNumber(0),
|
|
|
|
- numtwo: new BigNumber(0),
|
|
|
|
- numthree: new BigNumber(0),
|
|
|
|
- numfour: new BigNumber(0),
|
|
|
|
- numfive: new BigNumber(0)
|
|
|
|
|
|
+ injuries: new BigNumber(0),
|
|
|
|
+ missing: new BigNumber(0),
|
|
|
|
+ deaths: new BigNumber(0),
|
|
|
|
+ transfer: new BigNumber(0),
|
|
|
|
+ economic_loss: new BigNumber(0)
|
|
};
|
|
};
|
|
|
|
|
|
// 使用 reduce 累加
|
|
// 使用 reduce 累加
|
|
const sums = fixedTableData.value.reduce((acc, item) => {
|
|
const sums = fixedTableData.value.reduce((acc, item) => {
|
|
return {
|
|
return {
|
|
- numone: acc.numone.plus(new BigNumber(item.numone || 0)),
|
|
|
|
- numtwo: acc.numtwo.plus(new BigNumber(item.numtwo || 0)),
|
|
|
|
- numthree: acc.numthree.plus(new BigNumber(item.numthree || 0)),
|
|
|
|
- numfour: acc.numfour.plus(new BigNumber(item.numfour || 0)),
|
|
|
|
- numfive: acc.numfive.plus(new BigNumber(item.numfive || 0))
|
|
|
|
|
|
+ injuries: acc.injuries.plus(new BigNumber(item.injuries || 0)),
|
|
|
|
+ missing: acc.missing.plus(new BigNumber(item.missing || 0)),
|
|
|
|
+ deaths: acc.deaths.plus(new BigNumber(item.deaths || 0)),
|
|
|
|
+ transfer: acc.transfer.plus(new BigNumber(item.transfer || 0)),
|
|
|
|
+ economic_loss: acc.economic_loss.plus(new BigNumber(item.economic_loss || 0))
|
|
};
|
|
};
|
|
}, init);
|
|
}, init);
|
|
|
|
|
|
// 返回格式化后的结果
|
|
// 返回格式化后的结果
|
|
return {
|
|
return {
|
|
- numone: sums.numone.toFormat(0),
|
|
|
|
- numtwo: sums.numtwo.toFormat(0),
|
|
|
|
- numthree: sums.numthree.toFormat(0),
|
|
|
|
- numfour: sums.numfour.toFormat(0),
|
|
|
|
- numfive: sums.numfive.toFormat(2)
|
|
|
|
|
|
+ injuries: sums.injuries.toFormat(0),
|
|
|
|
+ missing: sums.missing.toFormat(0),
|
|
|
|
+ deaths: sums.deaths.toFormat(0),
|
|
|
|
+ transfer: sums.transfer.toFormat(0),
|
|
|
|
+ economic_loss: sums.economic_loss.toFormat(2)
|
|
};
|
|
};
|
|
});
|
|
});
|
|
// 切换编辑状态
|
|
// 切换编辑状态
|
|
@@ -181,9 +182,12 @@ const toggleEdit = () => {
|
|
const saveEdit = () => {
|
|
const saveEdit = () => {
|
|
isEditing.value = false;
|
|
isEditing.value = false;
|
|
// 保存数据到tableData
|
|
// 保存数据到tableData
|
|
- tableData.value = fixedTableData.value.filter(
|
|
|
|
- (item) => item.numone !== 0 || item.numtwo !== 0 || item.numthree !== 0 || item.numfour !== 0 || item.numfive !== 0
|
|
|
|
- );
|
|
|
|
|
|
+ // tableData.value = fixedTableData.value.filter(
|
|
|
|
+ // (item) => item.injuries !== 0 || item.missing !== 0 || item.deaths !== 0 || item.transfer !== 0 || item.economic_loss !== 0
|
|
|
|
+ // );
|
|
|
|
+ uploadCasualties({'event_id': props.eventId, 'eventCasualties': fixedTableData.value}).then((res)=>{
|
|
|
|
+ proxy?.$modal.msgSuccess(res.msg);
|
|
|
|
+ })
|
|
};
|
|
};
|
|
|
|
|
|
const cancelEdit = () => {
|
|
const cancelEdit = () => {
|
|
@@ -196,19 +200,26 @@ const emit = defineEmits(['update:show']);
|
|
const closeDialog = () => {
|
|
const closeDialog = () => {
|
|
emit('update:show', false);
|
|
emit('update:show', false);
|
|
};
|
|
};
|
|
-
|
|
|
|
|
|
+const props = defineProps<{
|
|
|
|
+ eventId?: string;
|
|
|
|
+}>();
|
|
onMounted(() => {
|
|
onMounted(() => {
|
|
- tableData.value = [
|
|
|
|
- {
|
|
|
|
- address: '',
|
|
|
|
- numone: 0,
|
|
|
|
- numtwo: 0,
|
|
|
|
- numthree: 0,
|
|
|
|
- numfour: 0,
|
|
|
|
- numfive: 0
|
|
|
|
- }
|
|
|
|
- ];
|
|
|
|
- mergeDataWithFixedRegions();
|
|
|
|
|
|
+ // tableData.value = [
|
|
|
|
+ // {
|
|
|
|
+ // area_name: '',
|
|
|
|
+ // injuries: 0,
|
|
|
|
+ // missing: 0,
|
|
|
|
+ // deaths: 0,
|
|
|
|
+ // transfer: 0,
|
|
|
|
+ // economic_loss: 0
|
|
|
|
+ // }
|
|
|
|
+ // ];
|
|
|
|
+ // mergeDataWithFixedRegions();
|
|
|
|
+
|
|
|
|
+ getEventCasualties({ event_id: props.eventId }).then((res) => {
|
|
|
|
+ tableData.value = res.data;
|
|
|
|
+ mergeDataWithFixedRegions();
|
|
|
|
+ });
|
|
});
|
|
});
|
|
</script>
|
|
</script>
|
|
|
|
|
|
@@ -226,8 +237,8 @@ onMounted(() => {
|
|
flex: 1;
|
|
flex: 1;
|
|
padding: 3px;
|
|
padding: 3px;
|
|
|
|
|
|
- .address-box {
|
|
|
|
- .address-text {
|
|
|
|
|
|
+ .area_name-box {
|
|
|
|
+ .area_name-text {
|
|
white-space: nowrap;
|
|
white-space: nowrap;
|
|
overflow: hidden;
|
|
overflow: hidden;
|
|
text-overflow: ellipsis;
|
|
text-overflow: ellipsis;
|