123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424 |
- <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>
|