<template> <!-- littlegreen - 企业效益监测评估 - 差对接查询接口 --> <div :class="className" :style="{ width: width, padding: '20px' }"> <div class="select-container"> <el-form style=" display: grid; grid-template-columns: 1fr 1.3fr 1fr; align-items: center; grid-gap: 20px; " label-width="100px" > <el-form-item label="行业代码" style="margin-bottom: 0"> <el-select v-model="form.code" style="width: 100%" filterable @change="codeChange" > <el-option v-for="item in selectedIndustryArray" :key="item.key" :label="item.value" :value="item.key" > </el-option> </el-select> </el-form-item> <el-form-item label="企业" style="margin-bottom: 0"> <el-select v-model="form.enterpriseName" style="width: 100%" filterable clearable > <el-option v-for="item in selectedEnterpriseArray" :key="item.key" :label="item.value" :value="item.value" > </el-option> </el-select> </el-form-item> <el-form-item label="企业分类"> <el-select v-model="form.typeNum" style="width: 100%" clearable> <el-option v-for="item in enterTypeList" :key="item.number" :value="item.number" :label="keyToChineseEtype(item.number)" > </el-option> </el-select> </el-form-item> <el-form-item label="年度" style="margin-bottom: 0"> <el-select v-model="form.year" style="width: 100%"> <el-option v-for="item in selectedYearArray" :key="item.key" :label="item.value" :value="item.key" > </el-option> </el-select> </el-form-item> <el-form-item label="季度" style="margin-bottom: 0"> <el-select v-model="form.season" style="width: 100%" clearable> <el-option v-for="item in selectedSeasonArray" :key="item.key" :label="item.value" :value="item.key" > </el-option> </el-select> </el-form-item> <el-form-item label="分析方式" style="margin-bottom: 0"> <el-select v-model="form.mode" style="width: 100%"> <el-option v-for="item in selectedAnalyseArray" :key="item.key" :label="item.value" :value="item.key" > </el-option> </el-select> </el-form-item> <el-form-item style="margin-bottom: 0"> <el-button type="primary" icon="el-icon-search" size="mini" @click="submit" >搜索</el-button ><el-button icon="el-icon-refresh" size="mini" @click="resetForm" >重置</el-button > </el-form-item> </el-form> </div> <el-table :data="tableData" border style="width: 100%; margin-top: 30px"> <el-table-column prop="enterpriseName" label="企业名称" width="200" sortable align="center" ></el-table-column> <el-table-column prop="code" label="所属行业" width="100" align="center" ></el-table-column> <el-table-column align="center" prop="year" label="年度" width="100" ></el-table-column> <el-table-column prop="season" label="季度" width="100" align="center" sortable ></el-table-column> <el-table-column v-if="mode == 'trendAnalysis'" prop="trendAnalysis" label="趋势分析情况" width="300" ></el-table-column> <el-table-column v-if="mode == 'avgAnalysis'" prop="avgAnalysis" label="平均水平分析情况" width="350" ></el-table-column> <el-table-column prop="operationalEvaluate" label="企业运营评估结果参考" ></el-table-column> </el-table> <!-- <el-pagination @current-change="handlePageChange" :current-page="currentPage" :page-size="pageSize" :total="totalItems" hide-on-single-page background layout="total, prev, pager, next, jumper" style="float: right; margin-top: 20px; margin-bottom: 20px" > </el-pagination> --> <pagination v-show="total > 0" :total="total" :page.sync="form.pageNum" :limit.sync="form.pageSize" @pagination="getList" /> <!-- <div ref="chart" :style="{ height: height, width: width }"></div> --> </div> </template> <script> import { listAllEnterprise } from "@/api/enterprise/enterprise"; import { listAllIndustry } from "@/api/industry/industry"; import { getIndexData } from "@/api/home"; import { benefitList } from "@/api/benefit"; import { listEtypeAll } from "@/api/etype/etype"; export default { props: { className: { type: String, default: "chart", }, width: { type: String, default: "100%", }, height: { type: String, default: "400px", }, }, data() { return { selectedEnterpriseArray: [], EnterpriseArray: [], selectedYearArray: [], selectedIndustryArray: [], mode: "trendAnalysis", currentPage: 1, pageSize: 5, total: 0, form: { pageNum: 1, pageSize: 10, enterpriseName: null, year: null, code: null, season: "1", mode: "trendAnalysis", }, selectedAnalyseArray: [ { key: "trendAnalysis", value: "趋势分析", }, { key: "avgAnalysis", value: "平均水平分析", }, ], selectedSeasonArray: [ { key: "1", value: "1季度", }, { key: "2", value: "2季度", }, { key: "3", value: "3季度", }, { key: "4", value: "4季度", }, ], tableData: [], enterTypeList: [] }; }, computed: { // totalItems() { // return this.tableData.length; // }, // paginatedData() { // const start = (this.currentPage - 1) * this.pageSize; // return this.tableData.slice(start, start + this.pageSize); // }, }, mounted() { this.init(); }, methods: { keyToChineseEtype(num) { const item = this.enterTypeList.find((element) => element.number === num); return item ? item.name : null; }, handlePageChange(newPage) { this.currentPage = newPage; }, sortByCode(arr) { return arr.sort((a, b) => { const numA = Number(a.code); const numB = Number(b.code); // 检查是否为有效数字 const isANum = !isNaN(numA); const isBNum = !isNaN(numB); if (isANum && isBNum) { return numA - numB; // 都是数字,按数字升序排序 } else if (isANum) { return -1; // a 是数字,放在前面 } else if (isBNum) { return 1; // b 是数字,放在前面 } else { return 0; // 都不是数字,保持原顺序 } }); }, async init() { const that = this; // 获取所有的行业 const loading = this.$loading({ lock: true, text: "Loading", spinner: "el-icon-loading", background: "rgba(0, 0, 0, 0.7)", }); await listAllIndustry() .then((res) => { if (res && res?.rows) { let arr = this.sortByCode(res.rows); that.selectedIndustryArray = arr.map((item) => { return { key: item.code, value: item.code + item.industryName, }; }); } }) .catch((error) => { console.error("Error fetching data:", error); }); // 获取所有的企业 await listAllEnterprise() .then((res) => { if (res && res?.rows) { that.EnterpriseArray = res.rows.map((item) => { return { key: item.id, value: item.enterpriseName, code: item.code, }; }); } }) .catch((error) => { console.error("Error fetching data:", error); }); // 获取有的年份 await getIndexData({ year: 0, }) .then((res) => { if (res && res?.rows) { that.selectedYearArray = res.rows[0].years.map((v) => { return { key: v, value: v, }; }); } }) .catch((error) => { console.error("Error fetching data:", error); }); await listEtypeAll().then((res) => { this.enterTypeList = res; }) // 第一次的时候初始化from loading.close(); this.resetForm(); }, submit() { this.form.pageNum = 1; this.getList(); }, getList() { const load = this.$loading({ lock: true, text: "Loading", spinner: "el-icon-loading", background: "rgba(0, 0, 0, 0.7)", }); benefitList(this.form) .then((res) => { load.close(); if (res && res?.rows) { this.mode = this.form.mode; this.tableData = res.rows; this.total = res.total; } }) .catch((error) => { load.close(); console.error("Error fetching data:", error); }); }, resetForm() { // 过滤对应行业的的企业出来 this.selectedEnterpriseArray = this.EnterpriseArray.filter( (item) => item.code == this.selectedIndustryArray[0].key ); // 重置form表单 this.form = { pageNum: 1, pageSize: 10, year: this.selectedYearArray[0].key, enterpriseName: null, code: this.selectedIndustryArray[0].key, season: null, mode: this.selectedAnalyseArray[0].key, }; this.submit(); }, codeChange(e) { // 当选择的行业变化时,过滤对应行业的的企业出来 this.selectedEnterpriseArray = this.EnterpriseArray.filter( (item) => item.code == e ); this.form.enterpriseName = null; }, }, }; </script> <style scoped> .select-container { margin: 10px 5px; font-size: 16px; } .select-container select { padding: 10px 20px; margin-right: 10px; border: 1px solid #121315; border-radius: 4px; background-color: white; color: #121315; font-size: 16px; cursor: pointer; outline: none; } .select-container select:hover { border-color: #1a7cc8; } .select-container select:focus { border-color: #121315; box-shadow: 0 0 0 2px rgba(64, 159, 255, 0.2); } </style>