| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213 |
- <!-- 救灾物资数量价值表 -->
- <template>
- <basic-container>
- <el-form class="whole_form">
- <el-row :gutter="20">
- <el-col :span="6">
- <el-form-item label="省份">
- <el-select v-model="searchList.provinceDeptIdList" clearable multiple @change="getSupplies">
- <el-option v-for="item in cityList" :key="item.deptId" :label="item.name" :value="item.deptId" />
- </el-select>
- </el-form-item>
- </el-col>
- <el-col :span="6">
- <el-form-item label="储备仓库">
- <el-select
- v-model="searchList.deptIdList"
- clearable
- multiple
- :disabled="searchList.provinceDeptIdList.length === 0"
- :placeholder="searchList.provinceDeptIdList.length === 0 ? '请先选择省份' : '请选择储备仓库'"
- >
- <el-option v-for="item in warehouseList" :key="item.deptId" :label="item.name" :value="item.deptId" />
- </el-select>
- </el-form-item>
- </el-col>
- <el-col :span="6">
- <el-form-item label="物资类别">
- <el-select v-model="searchList.dmUpcode1List" clearable multiple>
- <el-option v-for="item in suppliesList" :key="item.id" :label="item.name" :value="item.code" />
- </el-select>
- </el-form-item>
- </el-col>
- <el-col :span="6">
- <el-form-item label="物资名称">
- <el-input v-model="searchList.dmUpname2" clearable />
- </el-form-item>
- </el-col>
- </el-row>
- <el-row class="btn_center">
- <el-button type="primary" @click="getList">搜索</el-button>
- <el-button @click="clearSearch">清空</el-button>
- </el-row>
- </el-form>
- <el-table :data="tableData" stripe border :span-method="arraySpanMethod">
- <el-table-column type="index" label="序号" header-align="center" align="center" />
- <el-table-column prop="upidName" label="省份" header-align="center" align="center" />
- <el-table-column prop="username" label="储备仓库" header-align="center" align="center" />
- <template v-for="item in headerName" :key="item">
- <el-table-column :label="item.dmUpname" header-align="center" align="center">
- <template v-for="iten in item.children" :key="iten">
- <el-table-column :label="iten.dmUpname" header-align="center" align="center">
- <el-table-column :prop="iten.dmUpcode" :label="iten.units" header-align="center" align="center" />
- </el-table-column>
- </template>
- </el-table-column>
- </template>
- <el-table-column prop="tolNum" label="数量总计(件)" header-align="center" align="center" />
- <el-table-column prop="tolMoney" label="总价值(万元)" header-align="center" align="center" />
- </el-table>
- </basic-container>
- </template>
- <script setup lang="ts">
- import { ref } from "vue";
- import { handleTree } from "@/utils/util";
- import {
- getDroughtResistantHeader,
- getDroughtResistantList,
- getCityList,
- getSysTreeDict
- } from "@/api/dataStatistics/index";
- const headerName: any = ref([]);
- const headerProps: any = ref([]);
- const tableData: any = ref([]);
- const searchList: any = ref({});
- const mergeObj: any = ref({});
- const cityList: any = ref([]);
- const warehouseList: any = ref([]);
- const suppliesList: any = ref([]);
- // 获取省份列表
- getCityList({ deptType: 2 }).then((res: any) => {
- if (res.code === 0) {
- cityList.value = res.data;
- }
- });
- // 根据省份列表获取储备仓库
- const getSupplies = (value: string[]) => {
- getCityList({ parentIdList: value }).then((res: any) => {
- if (res.code === 0) {
- warehouseList.value = res.data;
- }
- });
- };
- // 获取物资类别
- getSysTreeDict({ type: 1, difference: 2, parentCodeList: ["300"] }).then((res: any) => {
- if (res.code === 0) {
- suppliesList.value = res.data;
- }
- });
- // 获取表头数据
- getDroughtResistantHeader({ matype1: ["300"] }).then((res: any) => {
- if (res.code === 0) {
- res.data
- .map((item: any) => {
- const parent = {
- dmUpcode: item.matypecode2,
- dmUpname: item.matypename2
- };
- const own = {
- dmUpcode: item.matypecode3,
- dmUpname: item.matypename3,
- units: item.matypename4
- };
- return [parent, own];
- })
- .forEach((item: any) => {
- headerName.value.push(...item);
- });
- headerName.value = handleTree(headerName.value, "dmUpcode");
- headerProps.value = res.data.map((item: any) => item.matypecode3);
- headerProps.value.unshift("upidName", "username");
- }
- getList();
- });
- // getSpanArr方法
- const getSpanArr = (data: any) => {
- headerProps.value.forEach((key: any) => {
- let count = 0; // 用来记录需要合并行的起始位置
- mergeObj.value[key] = []; // 记录每一列的合并信息
- data.forEach((item: any, index: number) => {
- // index == 0表示数据为第一行,直接 push 一个 1
- if (index === 0) {
- mergeObj.value[key].push(1);
- } else {
- // 判断当前行是否与上一行其值相等 如果相等 在 count 记录的位置其值 +1 表示当前行需要合并 并push 一个 0 作为占位
- if (item[key] === data[index - 1][key]) {
- mergeObj.value[key][count] += 1;
- mergeObj.value[key].push(0);
- } else {
- // 如果当前行和上一行其值不相等
- count = index; // 记录当前位置
- mergeObj.value[key].push(1); // 重新push 一个 1
- }
- }
- });
- });
- };
- // 获取表格数据
- const getList = () => {
- const data = {
- ...searchList.value,
- dmUpcode0List: ["300"]
- };
- getDroughtResistantList(data).then((res: any) => {
- if (res.code === 0) {
- tableData.value = res.data
- .map((item: any) => {
- const retVal: any = ref({
- ...item.map
- });
- retVal.value.upidName = item.upidName;
- retVal.value.username = item.username;
- retVal.value.tolMoney = item.tolMoney;
- retVal.value.tolNum = item.tolNum;
- return retVal.value;
- })
- .filter((item: any) => {
- headerProps.value.filter((ite: any) => {
- if (!item[ite]) {
- item[ite] = 0;
- }
- });
- return item;
- });
- getSpanArr(tableData.value);
- }
- });
- };
- const clearSearch = () => {
- searchList.value = {
- provinceDeptIdList: [],
- deptIdList: [],
- dmUpcode1List: [],
- dmUpname2: ""
- };
- getList();
- };
- const arraySpanMethod = ({ row, column, rowIndex, columnIndex }: any) => {
- // 判断列的属性
- if (headerProps.value.indexOf(column.property) !== -1) {
- // 判断其值是不是为0
- if (mergeObj.value[column.property][rowIndex]) {
- return [mergeObj.value[column.property][rowIndex], 1];
- } else {
- // 如果为0则为需要合并的行
- return [0, 0];
- }
- }
- };
- </script>
|