Преглед на файлове

fixed:数据统计总览功能

nahida преди 1 година
родител
ревизия
f35b6e9990

+ 1 - 1
.env.development

@@ -7,5 +7,5 @@ VITE_APP_ENV = 'development'
 # 桃江管理系统/开发环境
 VITE_APP_BASE_API = '/dev-api'
 
-VITE_APP_BASE_URL = 'http://192.168.110.235:20002'
+VITE_APP_BASE_URL = 'http://192.168.110.13:20002'
 

+ 2 - 1
package.json

@@ -35,7 +35,8 @@
     "vue-router": "4.0.12",
     "vuex": "4.0.2",
     "vxe-table": "^4.2.2",
-    "xe-utils": "^3.5.4"
+    "xe-utils": "^3.5.4",
+    "xlsx": "^0.18.5"
   },
   "devDependencies": {
     "@vitejs/plugin-vue": "1.9.4",

Файловите разлики са ограничени, защото са твърде много
+ 3199 - 448
pnpm-lock.yaml


+ 49 - 0
src/api/basicData/logistics.js

@@ -0,0 +1,49 @@
+import request from '@/utils/request'
+
+// 查询企业物流信息列表
+export function listLogistics(query) {
+    return request({
+        url: '/crmEnterpriseLogistics/findByPage',
+        method: 'get',
+        params: query
+    })
+}
+
+// 查询企业物流信息详细
+export function getLogistics(id) {
+    return request({
+        url: '/crmEnterpriseLogistics/' + id,
+        method: 'get'
+    })
+}
+
+// 新增企业物流信息
+export function addLogistics(data) {
+    return request({
+        url: '/crmEnterpriseLogistics',
+        method: 'post',
+        data: data
+    })
+}
+
+// 修改企业物流信息
+export function updateLogistics(data) {
+    return request({
+        url: '/crmEnterpriseLogistics',
+        method: 'put',
+        data: data
+    })
+}
+
+// 删除企业物流信息
+export function delLogistics(id) {
+    return request({
+        url: '/crmEnterpriseLogistics/deleteAll',
+        method: 'delete'
+    })
+}
+// 批量删除行政许可
+export function delLogisticsBatch(ids) {
+    console.log(ids);
+    return request.post('/crmEnterpriseLogistics/delete',ids)
+}

+ 49 - 0
src/api/basicData/mortgage4.js

@@ -0,0 +1,49 @@
+import request from '@/utils/request'
+
+// 查询土地抵押信息列表
+export function listMortgage(query) {
+    return request({
+        url: '/crmLandMortgage/findByPage',
+        method: 'get',
+        params: query
+    })
+}
+
+// 查询土地抵押信息详细
+export function getMortgage(id) {
+    return request({
+        url: '/crmLandMortgage/' + id,
+        method: 'get'
+    })
+}
+
+// 新增土地抵押信息
+export function addMortgage(data) {
+    return request({
+        url: '/crmLandMortgage',
+        method: 'post',
+        data: data
+    })
+}
+
+// 修改土地抵押信息
+export function updateMortgage(data) {
+    return request({
+        url: '/crmLandMortgage',
+        method: 'put',
+        data: data
+    })
+}
+
+// 删除土地抵押信息
+export function delMortgage(id) {
+    return request({
+        url: '/crmLandMortgage/deleteAll',
+        method: 'delete'
+    })
+}
+// 批量删除行政许可
+export function delMortgageBatch(ids) {
+    console.log(ids);
+    return request.post('/crmLandMortgage/delete',ids)
+}

+ 49 - 0
src/api/basicData/property.js

@@ -0,0 +1,49 @@
+import request from '@/utils/request'
+
+// 查询房屋抵押信息列表
+export function listProperty(query) {
+    return request({
+        url: '/crmMortgageProperty/findByPage',
+        method: 'get',
+        params: query
+    })
+}
+
+// 查询房屋抵押信息详细
+export function getProperty(id) {
+    return request({
+        url: '/crmMortgageProperty/' + id,
+        method: 'get'
+    })
+}
+
+// 新增房屋抵押信息
+export function addProperty(data) {
+    return request({
+        url: '/crmMortgageProperty',
+        method: 'post',
+        data: data
+    })
+}
+
+// 修改房屋抵押信息
+export function updateProperty(data) {
+    return request({
+        url: '/crmMortgageProperty',
+        method: 'put',
+        data: data
+    })
+}
+
+// 删除房屋抵押信息
+export function delProperty(id) {
+    return request({
+        url: '/crmMortgageProperty/deleteAll',
+        method: 'delete'
+    })
+}
+// 批量删除行政许可
+export function delPropertyBatch(ids) {
+    console.log(ids);
+    return request.post('/crmMortgageProperty/delete',ids)
+}

+ 49 - 0
src/api/basicData/revenue.js

@@ -0,0 +1,49 @@
+import request from '@/utils/request'
+
+// 查询服务企业营收情况列表
+export function listRevenue(query) {
+    return request({
+        url: '/crmServiceEnterpriseRevenue/findByPage',
+        method: 'get',
+        params: query
+    })
+}
+
+// 查询服务企业营收情况详细
+export function getRevenue(id) {
+    return request({
+        url: '/crmServiceEnterpriseRevenue/' + id,
+        method: 'get'
+    })
+}
+
+// 新增服务企业营收情况
+export function addRevenue(data) {
+    return request({
+        url: '/crmServiceEnterpriseRevenue',
+        method: 'post',
+        data: data
+    })
+}
+
+// 修改服务企业营收情况
+export function updateRevenue(data) {
+    return request({
+        url: '/crmServiceEnterpriseRevenue',
+        method: 'put',
+        data: data
+    })
+}
+
+// 删除服务企业营收情况
+export function delRevenue(id) {
+    return request({
+        url: '/crmServiceEnterpriseRevenue/deleteAll',
+        method: 'delete'
+    })
+}
+// 批量删除行政许可
+export function delRevenueBatch(ids) {
+    console.log(ids);
+    return request.post('/crmServiceEnterpriseRevenue/delete',ids)
+}

+ 12 - 0
src/api/basicData/sjtjzl.js

@@ -0,0 +1,12 @@
+import request from "@/utils/request";
+
+export const getCheckList = (list,pageNum,pageSize,conditionJson)=>{
+    return request.get('/crmOverviewData/checkByList',{
+        params:{
+            listJSON:JSON.stringify(list),
+            pageNum,
+            pageSize,
+            conditionJson
+        }
+    })
+}

+ 49 - 0
src/api/basicData/statistics.js

@@ -0,0 +1,49 @@
+import request from '@/utils/request'
+
+// 查询企业人才信息统计列表
+export function listStatistics(query) {
+    return request({
+        url: '/crmEnterpriseTalentStatistics/findByPage',
+        method: 'get',
+        params: query
+    })
+}
+
+// 查询企业人才信息统计详细
+export function getStatistics(id) {
+    return request({
+        url: '/crmEnterpriseTalentStatistics/' + id,
+        method: 'get'
+    })
+}
+
+// 新增企业人才信息统计
+export function addStatistics(data) {
+    return request({
+        url: '/crmEnterpriseTalentStatistics',
+        method: 'post',
+        data: data
+    })
+}
+
+// 修改企业人才信息统计
+export function updateStatistics(data) {
+    return request({
+        url: '/crmEnterpriseTalentStatistics',
+        method: 'put',
+        data: data
+    })
+}
+
+// 删除企业人才信息统计
+export function delStatistics(id) {
+    return request({
+        url: '/crmEnterpriseTalentStatistics/deleteAll',
+        method: 'delete'
+    })
+}
+// 批量删除行政许可
+export function delStatisticsBatch(ids) {
+    console.log(ids);
+    return request.post('/crmEnterpriseTalentStatistics/delete',ids)
+}

BIN
src/assets/images/login-bg.png


+ 58 - 0
src/views/BusDynamics/sjtjzl/colMap.js

@@ -0,0 +1,58 @@
+
+const currentYear = new Date().getFullYear()
+const lastYear = currentYear - 1
+export const colMap = new Map();
+colMap.set("uniCode","统一社会信用代码");
+colMap.set("enterpriseName","企业名称");
+colMap.set("a","行政处罚");
+colMap.set("b1",currentYear+"企业产值(第一季度)");
+colMap.set("b2",currentYear+"企业产值(第二季度)");
+colMap.set("b3",currentYear+"企业产值(第三季度)");
+colMap.set("b4",currentYear+"企业产值(第四季度)");
+colMap.set("b6",lastYear+"企业产值(第一季度)");
+colMap.set("b7",lastYear+"企业产值(第二季度)");
+colMap.set("b8",lastYear+"企业产值(第三季度)");
+colMap.set("b9",lastYear+"企业产值(第四季度)");
+colMap.set("c1",currentYear+"企业税收(第一季度)");
+colMap.set("c2",currentYear+"企业税收(第二季度)");
+colMap.set("c3",currentYear+"企业税收(第三季度)");
+colMap.set("c4",currentYear+"企业税收(第四季度)");
+colMap.set("c6",lastYear+"企业税收(第一季度)");
+colMap.set("c7",lastYear+"企业税收(第二季度)");
+colMap.set("c8",lastYear+"企业税收(第三季度)");
+colMap.set("c9",lastYear+"企业税收(第四季度)");
+colMap.set("dd","变更记录条数");
+colMap.set("de","行政许可条数");
+colMap.set("df","行政确认条数");
+colMap.set("dg","上市企业");
+colMap.set("dh","专精特精企业");
+colMap.set("di","科研企业");
+colMap.set("dj","科技型中小企业");
+colMap.set("dk","高新技术企业");
+colMap.set("dl","软件著作权数");
+colMap.set("dm","专利数");
+colMap.set("dn","红名单企业");
+colMap.set("dp","纳税信用等级");
+colMap.set("dq","非正常纳税企业");
+colMap.set("dr","社保缴纳人数");
+colMap.set("dr1","社保单位月均缴费");
+colMap.set("ds","环保信用等级");
+colMap.set("dt","国家公共信用评价等级");
+colMap.set("du","评级机构评级信息数");
+colMap.set("dv","企业征信机构评分(天眼查)");
+colMap.set("dw1",currentYear+"企业用水(第一季度)");
+colMap.set("dw2",currentYear+"企业用水(第二季度)");
+colMap.set("dw3",currentYear+"企业用水(第三季度)");
+colMap.set("dw4",currentYear+"企业用水(第四季度)");
+colMap.set("dw6",lastYear+"企业用水(第一季度)");
+colMap.set("dw7",lastYear+"企业用水(第二季度)");
+colMap.set("dw8",lastYear+"企业用水(第三季度)");
+colMap.set("dw9",lastYear+"企业用水(第四季度)");
+colMap.set("dx1",currentYear+"企业用电(第一季度)");
+colMap.set("dx2",currentYear+"企业用电(第二季度)");
+colMap.set("dx3",currentYear+"企业用电(第三季度)");
+colMap.set("dx4",currentYear+"企业用电(第四季度)");
+colMap.set("dx6",lastYear+"企业用电(第一季度)");
+colMap.set("dx7",lastYear+"企业用电(第二季度)");
+colMap.set("dx8",lastYear+"企业用电(第三季度)");
+colMap.set("dx9",lastYear+"企业用电(第四季度)");

+ 736 - 0
src/views/BusDynamics/sjtjzl/index.vue

@@ -0,0 +1,736 @@
+<template>
+  <div>
+    <el-form :model="searchForm" ref="queryRef" @submit="getData">
+      <el-row :gutter="10">
+        <el-col :lg="8" :sm="6">
+          <el-form-item label="企业名称搜索">
+            <el-input v-model="searchForm.enterpriseName" placeholder="请输入企业名称" clearable/>
+          </el-form-item>
+        </el-col>
+        <el-col :lg="8" :sm="6">
+          <el-form-item>
+            <el-button type="primary" @click="getData">搜索</el-button>
+            <el-button>重置</el-button>
+          </el-form-item>
+        </el-col>
+      </el-row>
+    </el-form>
+    <el-button plain @click="dialogFormVisible = true" type="primary">
+      选择查看的数据
+    </el-button>
+    <el-button plain @click="exportToExcel" type="warning">导出当前页为 Excel</el-button>
+    <el-table v-show="isShow" id="content-to-pdf" :data="tableData" max-height="650" style="width: 100%;" border show-summary
+              :summary-method="getSummaries">
+      <el-table-column prop="enterpriseName" label="企业名称" width="300" fixed/>
+
+      <template v-for="(col, index) in needShow" :key="index">
+        <el-table-column v-if="col.includes('a')" sortable :prop="col" :label="colMap.get(col)" width="180"/>
+      </template>
+
+      <template v-if="needShow.filter(key => key.includes('b')).length >= 2">
+        <el-table-column label="企业产值" header-align="center">
+          <template v-for="(col, index) in needShow" :key="index">
+            <el-table-column v-if="col.includes('b')" sortable :prop="col" :label="colMap.get(col)" width="180"/>
+          </template>
+        </el-table-column>
+      </template>
+      <template v-if="needShow.filter(key => key.includes('b')).length < 2">
+        <template v-for="(col, index) in needShow" :key="index">
+          <el-table-column v-if="col.includes('b')" sortable :prop="col" :label="colMap.get(col)" width="180"/>
+        </template>
+      </template>
+      <template v-if="needShow.filter(key => key.includes('b')).length >= 2">
+        <el-table-column label="当前显示产值合计" width="180" prop="b5">
+          <template #default="{row}">
+            {{
+              needShow.filter(key => key.includes('b')).reduce((acc, cur) => Number(acc) + Number(row[cur]), 0).toFixed(2)
+            }}
+          </template>
+        </el-table-column>
+      </template>
+
+      <template v-if="needShow.filter(key => key.includes('c')).length >= 2">
+        <el-table-column label="企业税收" header-align="center">
+          <template v-for="(col, index) in needShow" :key="index">
+            <el-table-column v-if="col.includes('c')" sortable :prop="col" :label="colMap.get(col)" width="180"/>
+          </template>
+        </el-table-column>
+      </template>
+      <template v-if="needShow.filter(key => key.includes('c')).length < 2">
+        <template v-for="(col, index) in needShow" :key="index">
+          <el-table-column v-if="col.includes('c')" sortable :prop="col" :label="colMap.get(col)" width="180"/>
+        </template>
+      </template>
+      <template v-if="needShow.filter(key => key.includes('c')).length >= 2">
+        <el-table-column label="当前显示税收合计" width="180" prop="c5">
+          <template #default="{row}">
+            {{
+              needShow.filter(key => key.includes('c')).reduce((acc, cur) => Number(acc) + Number(row[cur]), 0).toFixed(2)
+            }}
+          </template>
+        </el-table-column>
+      </template>
+
+      <template v-for="(col, index) in needShow" :key="index">
+        <el-table-column v-if="col == 'dd'" sortable :prop="col" :label="colMap.get(col)" width="180"/>
+      </template>
+
+      <template v-for="(col, index) in needShow" :key="index">
+        <el-table-column v-if="col == 'de'" sortable :prop="col" :label="colMap.get(col)" width="180"/>
+      </template>
+
+      <template v-for="(col, index) in needShow" :key="index">
+        <el-table-column v-if="col == 'df'" sortable :prop="col" :label="colMap.get(col)" width="180"/>
+      </template>
+
+      <template v-for="(col, index) in needShow" :key="index">
+        <el-table-column v-if="col == 'dg'" sortable :prop="col" :label="colMap.get(col)" width="180">
+          <template #default="{row}">
+            {{ row[col] == 0 ? '否' : '是' }}
+          </template>
+        </el-table-column>
+      </template>
+
+      <template v-for="(col, index) in needShow" :key="index">
+        <el-table-column v-if="col.includes('dh')" sortable :prop="col" :label="colMap.get(col)" width="180">
+          <template #default="{row}">
+            {{ row[col] == 0 ? '否' : '是' }}
+          </template>
+        </el-table-column>
+      </template>
+
+      <template v-for="(col, index) in needShow" :key="index">
+        <el-table-column v-if="col == 'di'" sortable :prop="col" :label="colMap.get(col)" width="180">
+          <template #default="{row}">
+            {{ row[col] == 0 ? '否' : '是' }}
+          </template>
+        </el-table-column>
+      </template>
+
+      <template v-for="(col, index) in needShow" :key="index">
+        <el-table-column v-if="col == 'dj'" sortable :prop="col" :label="colMap.get(col)" width="180">
+          <template #default="{row}">
+            {{ row[col] == 0 ? '否' : '是' }}
+          </template>
+        </el-table-column>
+      </template>
+
+      <template v-for="(col, index) in needShow" :key="index">
+        <el-table-column v-if="col == 'dk'" sortable :prop="col" :label="colMap.get(col)" width="180">
+          <template #default="{row}">
+            {{ row[col] == 0 ? '否' : '是' }}
+          </template>
+        </el-table-column>
+      </template>
+
+      <template v-for="(col, index) in needShow" :key="index">
+        <el-table-column v-if="col == 'dl'" sortable :prop="col" :label="colMap.get(col)" width="180"/>
+      </template>
+
+      <template v-for="(col, index) in needShow" :key="index">
+        <el-table-column v-if="col == 'dm'" sortable :prop="col" :label="colMap.get(col)" width="180"/>
+      </template>
+
+      <template v-for="(col, index) in needShow" :key="index">
+        <el-table-column v-if="col == 'dn'" sortable :prop="col" :label="colMap.get(col)" width="180">
+          <template #default="{row}">
+            {{ row[col] == 0 ? '否' : '是' }}
+          </template>
+        </el-table-column>
+      </template>
+
+      <template v-for="(col, index) in needShow" :key="index">
+        <el-table-column v-if="col == 'dp'" sortable :prop="col" :label="colMap.get(col)" width="180"/>
+      </template>
+
+      <template v-for="(col, index) in needShow" :key="index">
+        <el-table-column v-if="col == 'dq'" sortable :prop="col" :label="colMap.get(col)" width="180"/>
+      </template>
+
+      <template v-for="(col, index) in needShow" :key="index">
+        <el-table-column v-if="col.includes('dr')" sortable :prop="col" :label="colMap.get(col)" width="180"/>
+      </template>
+
+      <template v-for="(col, index) in needShow" :key="index">
+        <el-table-column v-if="col == 'ds'" :prop="col" :label="colMap.get(col)" width="180"/>
+      </template>
+
+      <template v-for="(col, index) in needShow" :key="index">
+        <el-table-column v-if="col == 'dt'" :prop="col" :label="colMap.get(col)" width="180"/>
+      </template>
+
+      <template v-for="(col, index) in needShow" :key="index">
+        <el-table-column v-if="col == 'du'" sortable :prop="col" :label="colMap.get(col)" width="180"/>
+      </template>
+
+      <template v-for="(col, index) in needShow" :key="index">
+        <el-table-column v-if="col == 'dv'" sortable :prop="col" :label="colMap.get(col)" width="180"/>
+      </template>
+
+      <template v-if="needShow.filter(key => key.includes('dw')).length >= 2">
+        <el-table-column label="企业用水" header-align="center">
+          <template v-for="(col, index) in needShow" :key="index">
+            <el-table-column v-if="col.includes('dw')" sortable :prop="col" :label="colMap.get(col)" width="180"/>
+          </template>
+        </el-table-column>
+      </template>
+      <template v-if="needShow.filter(key => key.includes('dw')).length < 2">
+        <template v-for="(col, index) in needShow" :key="index">
+          <el-table-column v-if="col.includes('dw')" sortable :prop="col" :label="colMap.get(col)" width="180"/>
+        </template>
+      </template>
+      <template v-if="needShow.filter(key => key.includes('dw')).length >= 2">
+        <el-table-column label="当前显示合计" width="180" prop="dw5">
+          <template #default="{row}">
+            {{
+              needShow.filter(key => key.includes('dw')).reduce((acc, cur) => Number(acc) + Number(row[cur]), 0).toFixed(2)
+            }}
+          </template>
+        </el-table-column>
+      </template>
+
+      <template v-if="needShow.filter(key => key.includes('dx')).length >= 2">
+        <el-table-column label="企业用水" header-align="center">
+          <template v-for="(col, index) in needShow" :key="index">
+            <el-table-column v-if="col.includes('dx')" sortable :prop="col" :label="colMap.get(col)" width="180"/>
+          </template>
+        </el-table-column>
+      </template>
+      <template v-if="needShow.filter(key => key.includes('dx')).length < 2">
+        <template v-for="(col, index) in needShow" :key="index">
+          <el-table-column v-if="col.includes('dx')" sortable :prop="col" :label="colMap.get(col)" width="180"/>
+        </template>
+      </template>
+      <template v-if="needShow.filter(key => key.includes('dx')).length >= 2">
+        <el-table-column label="当前显示合计" width="180" prop="dx5">
+          <template #default="{row}">
+            {{
+              needShow.filter(key => key.includes('dx')).reduce((acc, cur) => Number(acc) + Number(row[cur]), 0).toFixed(2)
+            }}
+          </template>
+        </el-table-column>
+      </template>
+    </el-table>
+    <div style="padding-top: 30px">
+      <el-pagination
+          v-model:current-page="pageNum"
+          v-model:page-size="pageSize"
+          :background="true"
+          :page-sizes="[10, 20, 100, 200]"
+          layout="total, sizes, prev, pager, next, jumper"
+          :total="total"
+          @size-change="getData"
+          @current-change="getData"
+      />
+    </div>
+    <el-dialog v-model="dialogFormVisible" title="请选择需要查看的列" @close="handleClose">
+      <el-form :model="form">
+        <el-row :gutter="10">
+          <el-col :lg="6" :sm="8">
+            <el-form-item label="">
+              <el-checkbox v-model="form.a" label="行政处罚" size="large"/>
+            </el-form-item>
+          </el-col>
+          <el-col :lg="6" :sm="8">
+            <el-form-item>
+              <el-checkbox v-model="form.b1" :label="currentYear+'企业产值(第一季度)'" size="large"/>
+            </el-form-item>
+          </el-col>
+          <el-col :lg="6" :sm="8">
+            <el-form-item>
+              <el-checkbox v-model="form.b2" :label="currentYear+'企业产值(第二季度)'" size="large"/>
+            </el-form-item>
+          </el-col>
+          <el-col :lg="6" :sm="8">
+            <el-form-item>
+              <el-checkbox v-model="form.b3" :label="currentYear+'企业产值(第三季度)'" size="large"/>
+            </el-form-item>
+          </el-col>
+          <el-col :lg="6" :sm="8">
+            <el-form-item>
+              <el-checkbox v-model="form.b4" :label="currentYear+'企业产值(第四季度)'" size="large"/>
+            </el-form-item>
+          </el-col>
+          <el-col :lg="6" :sm="8">
+            <el-form-item>
+              <el-checkbox v-model="form.b6" :label="lastYear+'企业产值(第一季度)'" size="large"/>
+            </el-form-item>
+          </el-col>
+          <el-col :lg="6" :sm="8">
+            <el-form-item>
+              <el-checkbox v-model="form.b7" :label="lastYear+'企业产值(第二季度)'" size="large"/>
+            </el-form-item>
+          </el-col>
+          <el-col :lg="6" :sm="8">
+            <el-form-item>
+              <el-checkbox v-model="form.b8" :label="lastYear+'企业产值(第三季度)'" size="large"/>
+            </el-form-item>
+          </el-col>
+          <el-col :lg="6" :sm="8">
+            <el-form-item>
+              <el-checkbox v-model="form.b9" :label="lastYear+'企业产值(第四季度)'" size="large"/>
+            </el-form-item>
+          </el-col>
+          <el-col :lg="6" :sm="8">
+            <el-form-item>
+              <el-checkbox v-model="form.c1" :label="currentYear+'企业税收(第一季度)'" size="large"/>
+            </el-form-item>
+          </el-col>
+          <el-col :lg="6" :sm="8">
+            <el-form-item>
+              <el-checkbox v-model="form.c2" :label="currentYear+'企业税收(第二季度)'" size="large"/>
+            </el-form-item>
+          </el-col>
+          <el-col :lg="6" :sm="8">
+            <el-form-item>
+              <el-checkbox v-model="form.c3" :label="currentYear+'企业税收(第三季度)'" size="large"/>
+            </el-form-item>
+          </el-col>
+          <el-col :lg="6" :sm="8">
+            <el-form-item>
+              <el-checkbox v-model="form.c4" :label="currentYear+'企业税收(第四季度)'" size="large"/>
+            </el-form-item>
+          </el-col>
+          <el-col :lg="6" :sm="8">
+            <el-form-item>
+              <el-checkbox v-model="form.c6" :label="lastYear+'企业税收(第一季度)'" size="large"/>
+            </el-form-item>
+          </el-col>
+          <el-col :lg="6" :sm="8">
+            <el-form-item>
+              <el-checkbox v-model="form.c7" :label="lastYear+'企业税收(第二季度)'" size="large"/>
+            </el-form-item>
+          </el-col>
+          <el-col :lg="6" :sm="8">
+            <el-form-item>
+              <el-checkbox v-model="form.c8" :label="lastYear+'企业税收(第三季度)'" size="large"/>
+            </el-form-item>
+          </el-col>
+          <el-col :lg="6" :sm="8">
+            <el-form-item>
+              <el-checkbox v-model="form.c9" :label="lastYear+'企业税收(第四季度)'" size="large"/>
+            </el-form-item>
+          </el-col>
+          <el-col :lg="6" :sm="8">
+            <el-form-item>
+              <el-checkbox v-model="form.dd" label="变更记录条数" size="large"/>
+            </el-form-item>
+          </el-col>
+          <el-col :lg="6" :sm="8">
+            <el-form-item>
+              <el-checkbox v-model="form.de" label="行政许可条数" size="large"/>
+            </el-form-item>
+          </el-col>
+          <el-col :lg="6" :sm="8">
+            <el-form-item>
+              <el-checkbox v-model="form.df" label="行政确认条数" size="large"/>
+            </el-form-item>
+          </el-col>
+          <el-col :lg="6" :sm="8">
+            <el-form-item>
+              <el-checkbox v-model="form.dg" label="上市企业" size="large"/>
+            </el-form-item>
+          </el-col>
+          <el-col :lg="6" :sm="8">
+            <el-form-item>
+              <el-checkbox v-model="form.dh" label="专精特精企业" size="large"/>
+            </el-form-item>
+          </el-col>
+          <el-col :lg="6" :sm="8">
+            <el-form-item>
+              <el-checkbox v-model="form.di" label="科研企业" size="large"/>
+            </el-form-item>
+          </el-col>
+          <el-col :lg="6" :sm="8">
+            <el-form-item>
+              <el-checkbox v-model="form.dj" label="科技型中小企业" size="large"/>
+            </el-form-item>
+          </el-col>
+          <el-col :lg="6" :sm="8">
+            <el-form-item>
+              <el-checkbox v-model="form.dk" label="高新技术企业" size="large"/>
+            </el-form-item>
+          </el-col>
+          <el-col :lg="6" :sm="8">
+            <el-form-item>
+              <el-checkbox v-model="form.dl" label="软件著作权" size="large"/>
+            </el-form-item>
+          </el-col>
+          <el-col :lg="6" :sm="8">
+            <el-form-item>
+              <el-checkbox v-model="form.dm" label="专利信息" size="large"/>
+            </el-form-item>
+          </el-col>
+          <el-col :lg="6" :sm="8">
+            <el-form-item>
+              <el-checkbox v-model="form.dn" label="红名单企业" size="large"/>
+            </el-form-item>
+          </el-col>
+          <el-col :lg="6" :sm="8">
+            <el-form-item>
+              <el-checkbox v-model="form.dp" label="纳税信用等级" size="large"/>
+            </el-form-item>
+          </el-col>
+          <el-col :lg="6" :sm="8">
+            <el-form-item>
+              <el-checkbox v-model="form.dq" label="非正常纳税信息" size="large"/>
+            </el-form-item>
+          </el-col>
+          <el-col :lg="6" :sm="8">
+            <el-form-item>
+              <el-checkbox v-model="form.dr" label="社保缴纳人数信息" size="large"/>
+            </el-form-item>
+          </el-col>
+          <el-col :lg="6" :sm="8">
+            <el-form-item>
+              <el-checkbox v-model="form.dr1" label="社保缴纳金额信息" size="large"/>
+            </el-form-item>
+          </el-col>
+          <el-col :lg="6" :sm="8">
+            <el-form-item>
+              <el-checkbox v-model="form.ds" label="环保信用等级" size="large"/>
+            </el-form-item>
+          </el-col>
+          <el-col :lg="6" :sm="8">
+            <el-form-item>
+              <el-checkbox v-model="form.dt" label="国家公共信用评价" size="large"/>
+            </el-form-item>
+          </el-col>
+          <el-col :lg="6" :sm="8">
+            <el-form-item>
+              <el-checkbox v-model="form.du" label="评级机构评级信息" size="large"/>
+            </el-form-item>
+          </el-col>
+          <el-col :lg="6" :sm="8">
+            <el-form-item>
+              <el-checkbox v-model="form.dv" label="企业征信机构评分(天眼查)" size="large"/>
+            </el-form-item>
+          </el-col>
+          <el-col :lg="6" :sm="8">
+            <el-form-item>
+              <el-checkbox v-model="form.dw1" :label="currentYear+'用水明细(第一季度)'" size="large"/>
+            </el-form-item>
+          </el-col>
+          <el-col :lg="6" :sm="8">
+            <el-form-item>
+              <el-checkbox v-model="form.dw2" :label="currentYear+'用水明细(第二季度)'" size="large"/>
+            </el-form-item>
+          </el-col>
+          <el-col :lg="6" :sm="8">
+            <el-form-item>
+              <el-checkbox v-model="form.dw3" :label="currentYear+'用水明细(第三季度)'" size="large"/>
+            </el-form-item>
+          </el-col>
+          <el-col :lg="6" :sm="8">
+            <el-form-item>
+              <el-checkbox v-model="form.dw4" :label="currentYear+'用水明细(第四季度)'" size="large"/>
+            </el-form-item>
+          </el-col>
+          <el-col :lg="6" :sm="8">
+            <el-form-item>
+              <el-checkbox v-model="form.dw6" :label="lastYear+'用水明细(第一季度)'" size="large"/>
+            </el-form-item>
+          </el-col>
+          <el-col :lg="6" :sm="8">
+            <el-form-item>
+              <el-checkbox v-model="form.dw7" :label="lastYear+'用水明细(第二季度)'" size="large"/>
+            </el-form-item>
+          </el-col>
+          <el-col :lg="6" :sm="8">
+            <el-form-item>
+              <el-checkbox v-model="form.dw8" :label="lastYear+'用水明细(第三季度)'" size="large"/>
+            </el-form-item>
+          </el-col>
+          <el-col :lg="6" :sm="8">
+            <el-form-item>
+              <el-checkbox v-model="form.dw9" :label="lastYear+'用水明细(第四季度)'" size="large"/>
+            </el-form-item>
+          </el-col>
+          <el-col :lg="6" :sm="8">
+            <el-form-item>
+              <el-checkbox v-model="form.dx1" :label="currentYear+'用电明细(第一季度)'" size="large"/>
+            </el-form-item>
+          </el-col>
+          <el-col :lg="6" :sm="8">
+            <el-form-item>
+              <el-checkbox v-model="form.dx2" :label="currentYear+'用电明细(第二季度)'" size="large"/>
+            </el-form-item>
+          </el-col>
+          <el-col :lg="6" :sm="8">
+            <el-form-item>
+              <el-checkbox v-model="form.dx3" :label="currentYear+'用电明细(第三季度)'" size="large"/>
+            </el-form-item>
+          </el-col>
+          <el-col :lg="6" :sm="8">
+            <el-form-item>
+              <el-checkbox v-model="form.dx4" :label="currentYear+'用电明细(第四季度)'" size="large"/>
+            </el-form-item>
+          </el-col>
+          <el-col :lg="6" :sm="8">
+            <el-form-item>
+              <el-checkbox v-model="form.dx6" :label="lastYear+'用电明细(第一季度)'" size="large"/>
+            </el-form-item>
+          </el-col>
+          <el-col :lg="6" :sm="8">
+            <el-form-item>
+              <el-checkbox v-model="form.dx7" :label="lastYear+'用电明细(第二季度)'" size="large"/>
+            </el-form-item>
+          </el-col>
+          <el-col :lg="6" :sm="8">
+            <el-form-item>
+              <el-checkbox v-model="form.dx8" :label="lastYear+'用电明细(第三季度)'" size="large"/>
+            </el-form-item>
+          </el-col>
+          <el-col :lg="6" :sm="8">
+            <el-form-item>
+              <el-checkbox v-model="form.dx9" :label="lastYear+'用电明细(第四季度)'" size="large"/>
+            </el-form-item>
+          </el-col>
+        </el-row>
+      </el-form>
+    </el-dialog>
+  </div>
+</template>
+
+<script lang="ts" setup>
+import {computed, ref, watch} from "vue";
+import {getCheckList} from "@/api/basicData/sjtjzl"
+import {getInfo} from "@/api/login"
+import {ElMessage} from "element-plus";
+import {colMap} from "./colMap";
+import * as XLSX from 'xlsx';
+const isShow = ref(true)
+
+const initCheck = {
+  a: true,
+  b1: false,
+  b2: false,
+  b3: false,
+  b4: false,
+  b6: false,
+  b7: false,
+  b8: false,
+  b9: false,
+  c1: false,
+  c2: false,
+  c3: false,
+  c4: false,
+  c6: false,
+  c7: false,
+  c8: false,
+  c9: false,
+  dd: false,
+  de: false,
+  df: false,
+  dg: false,
+  dh: false,
+  di: false,
+  dj: false,
+  dk: false,
+  dl: false,
+  dm: false,
+  dn: false,
+  dp: false,
+  dq: false,
+  dr:false,
+  dr1:false,
+  ds:false,
+  dt:false,
+  du:false,
+  dv:false,
+  dw1:false,
+  dw2:false,
+  dw3:false,
+  dw4:false,
+  dw6:false,
+  dw7:false,
+  dw8:false,
+  dw9:false,
+  dx1:false,
+  dx2:false,
+  dx3:false,
+  dx4:false,
+  dx6:false,
+  dx7:false,
+  dx8:false,
+  dx9:false
+};
+const currentYear = ref(new Date().getFullYear());
+const lastYear = ref(currentYear.value - 1)
+const dialogFormVisible = ref(false)
+const tableData = ref([])
+const userName = ref("")
+const pageNum = ref(1)
+const pageSize = ref(20)
+const total = ref(0)
+const form = ref(JSON.parse(localStorage.getItem("sjtjzlKey")) || initCheck)
+const searchForm = ref({
+  enterpriseName: ""
+})
+const handleClose = ()=>{
+  isShow.value = false
+  setTimeout(()=>{isShow.value = true},0)
+}
+const exportToExcel = () => {
+  const staticArr = ["enterpriseName", "uniCode"];
+  const headers1 = staticArr.concat(needShow.value).map(key => colMap.get(key));
+  const headers = staticArr.concat(needShow.value);
+  const needTransformKeys = ['dg','dh','di','dj','dk','dn'];
+  const wsData = [headers1, ...tableData.value.map(item => {
+    return headers.map(key => {
+      if(needTransformKeys.includes(key)){
+        return item[key]==0 ? '否' : '是';
+      }
+      return  item[key]
+    })
+  })];
+
+
+  const ws = XLSX.utils.aoa_to_sheet(wsData);
+
+  ws['!cols'] = headers1.map(() => ({wch: 20}));
+
+  const wb = XLSX.utils.book_new();
+  XLSX.utils.book_append_sheet(wb, ws, '企业数据总览报告');
+
+  XLSX.writeFile(wb, '企业数据总览报告.xlsx');
+};
+const needShow = computed(() => {
+  return Object.keys(form.value).filter(key => form.value[key]);
+});
+const getData = async () => {
+  let conditionJsonWhole = [];
+  if (searchForm.value.enterpriseName != '') {
+    conditionJsonWhole.push({
+      column: "enterprise_name",
+      type: 'like',
+      value: searchForm.value.enterpriseName
+    });
+  }
+  let s = encodeURIComponent(JSON.stringify(conditionJsonWhole));
+  const res = await getCheckList(needShow.value, pageNum.value, pageSize.value, s);
+  if (res.code != 200) {
+    ElMessage.error("出现了问题,请联系管理员处理")
+  }
+  tableData.value = res.data;
+  tableData.value = tableData.value.map(item => {
+    let b5 = 0;
+    let c5 = 0;
+    let dw5 = 0;
+    let dx5 = 0;
+    for (const k in item) {
+      if(k.includes('b')){
+        b5 += Number(item[k]);
+      }
+      if(k.includes('c')){
+        c5 += Number(item[k]);
+      }
+      if(k.includes('dw')){
+        dw5 += Number(item[k]);
+      }
+      if(k.includes('dx')){
+        dx5 += Number(item[k]);
+      }
+      // if (k=='b1'||k=='b2'||k=='b3'||k=='b4') {
+      //   if (item[k] != null) {
+      //     b5 += Number(item[k]);
+      //   }
+      // }
+      // if (k=='b6'||k=='b7'||k=='b8'||k=='b9') {
+      //   if (item[k] != null) {
+      //     b5 += Number(item[k]);
+      //   }
+      // }
+      // if (k=='c1'||k=='c2'||k=='c3'||k=='c4') {
+      //   if (item[k] != null) {
+      //     c5 += Number(item[k]);
+      //   }
+      // }
+      // if (k=='c6'||k=='c7'||k=='c8'||k=='c9') {
+      //   if (item[k] != null) {
+      //     c5 += Number(item[k]);
+      //   }
+      // }
+      // console.log(b5);
+    }
+    return {
+      ...item,
+      b5,
+      c5,
+      dw5,
+      dx5
+    }
+  })
+  total.value = res?.total;
+}
+const getSummaries = (param) => {
+  const {columns, data} = param;
+  const sums = [];
+  columns.forEach((column, index) => {
+    // console.log(column.property);
+    if (index === 0) {
+      sums[index] = "当前页总计";
+      return;
+    }
+    const values = data.map(item => Number(item[column.property]));
+    // console.log(values);
+    if (!values.every(value => isNaN(value))) {
+      sums[index] = values.reduce((prev, curr) => {
+        const value = Number(curr);
+        if (!isNaN(value)) {
+          return prev + curr;
+        } else {
+          return prev;
+        }
+      }, 0);
+      let until;
+      if (column.property == "a") {
+        until = "条";
+        sums[index] += until;
+      } else if (column.property == "b1" || column.property == "b2" || column.property == "b3" || column.property == "b4" ||  column.property == "b5" ||  column.property == "b6" || column.property == "b7" || column.property == "b8" || column.property == "b9") {
+        sums[index] = sums[index].toFixed(2);
+        until = "千元";
+        sums[index] += until;
+      } else if (column.property == "dr1" || column.property == "c1" || column.property == "c2" || column.property == "c3" || column.property == "c4" || column.property == "c5" || column.property == "c6" || column.property == "c7" || column.property == "c8" || column.property == "c9") {
+        sums[index] = sums[index].toFixed(2);
+        until = "元";
+        sums[index] += until;
+      } else if (column.property == "dd" || column.property == "de" || column.property == "df") {
+        until = "条";
+        sums[index] += until;
+      } else if (column.property == "dg" || column.property == "dh" || column.property == "di" || column.property == "dj" || column.property == "dk" || column.property == "dn") {
+        until = "家";
+        sums[index] += until;
+      } else if (column.property == "dl" || column.property == "dm" || column.property == "dr" || column.property== "du") {
+        until = "个"
+        sums[index] += until;
+      } else if (column.property == "dw1" || column.property == "dw2" || column.property == "dw3" || column.property == "dw4" || column.property == "dw5" || column.property == "dw6" || column.property == "dw7" || column.property == "dw8" || column.property == "dw9") {
+        until = "吨"
+        sums[index] += until;
+      }else if (column.property == "dx1" || column.property == "dx2" || column.property == "dx3" || column.property == "dx4" || column.property == "dx5" || column.property == "dx6" || column.property == "dx7" || column.property == "dx8" || column.property == "dx9") {
+        until = "度"
+        sums[index] += until;
+      } else if (column.property == "dv"){
+        sums[index] = " ";
+      }
+    } else {
+      sums[index] = " ";
+    }
+  });
+  return sums;
+};
+watch(() => needShow.value, () => {
+  init()
+})
+const init = () => {
+  getInfo().then(res => {
+    if (res.code != 200) {
+      ElMessage.error("出现了问题,请联系管理员处理")
+    }
+    userName.value = res.user.userName;
+  });
+  localStorage.setItem("sjtjzlKey", JSON.stringify(form.value ? form.value : initCheck))
+  getData()
+}
+init();
+</script>

+ 295 - 0
src/views/basicData/OpeCapability/ysxxb/index.vue

@@ -0,0 +1,295 @@
+<template>
+  <div class="app-container">
+    <el-form :model="queryParams" ref="queryRef" :inline="true" v-show="showSearch" label-width="68px">
+      <el-form-item label="企业名称" prop="companyName" label-width="200">
+        <el-input
+            v-model="queryParams.companyName"
+            placeholder="请输入企业名称"
+            clearable
+            @keyup.enter="handleQuery"
+        />
+      </el-form-item>
+      <el-form-item label="统一社会信用代码" prop="unifiedSocialCreditCode" label-width="200">
+        <el-input
+            v-model="queryParams.unifiedSocialCreditCode"
+            placeholder="请输入统一社会信用代码"
+            clearable
+            @keyup.enter="handleQuery"
+        />
+      </el-form-item>
+      <el-form-item>
+        <el-button type="primary" icon="Search" @click="handleQuery">搜索</el-button>
+        <el-button icon="Refresh" @click="resetQuery">重置</el-button>
+      </el-form-item>
+    </el-form>
+
+    <el-row :gutter="10" class="mb8">
+      <el-col :span="1.5">
+        <el-popconfirm
+            title="你确定清除所有数据?"
+            confirm-button-text="是的"
+            cancel-button-text="不是"
+            :icon="InfoFilled"
+            icon-color="#626AEF"
+            @confirm="handleDelete"
+        >
+          <template #reference>
+            <el-button
+                type="danger"
+                plain
+                icon="Delete"
+                v-hasPermi="['basicData:OpeCapability:ysxxb:remove']"
+            >清除全表
+            </el-button>
+          </template>
+        </el-popconfirm>
+      </el-col>
+      <el-col :span="1.5">
+        <el-button
+            type="danger"
+            plain
+            icon="Delete"
+            @click="batchDelete"
+            v-hasPermi="['basicData:OpeCapability:ysxxb:remove']"
+            :disabled="ids.length === 0"
+        >批量删除
+        </el-button>
+      </el-col>
+      <el-col :span="1.5">
+        <el-button
+            type="warning"
+            plain
+            icon="Download"
+            @click="handleExport"
+            :disabled="!revenueList.length"
+            v-hasPermi="['basicData:OpeCapability:ysxxb:export']"
+        >导出
+        </el-button>
+      </el-col>
+      <el-col :span="1.5">
+        <el-button type="info" plain icon="Upload" @click="handleImport"
+                   v-hasPermi="['basicData:OpeCapability:ysxxb:import']">导入
+        </el-button>
+      </el-col>
+      <el-col :span="1.5">
+        <el-button type="success" plain icon="Download" @click="downloadTemplate" v-hasPermi="['basicData:OpeCapability:ysxxb:download']">
+          下载导入模板
+        </el-button>
+      </el-col>
+    </el-row>
+
+    <el-table v-loading="loading" :data="revenueList" height="650" @selection-change="handleSelectionChange">
+      <el-table-column type="selection" width="55" align="center"/>
+      <el-table-column label="企业名称" align="center" prop="companyName" :show-overflow-tooltip='true'/>
+      <el-table-column label="统一社会信用代码" align="center" prop="unifiedSocialCreditCode" width="200"/>
+      <el-table-column label="第一季度营收" align="center" prop="q1Revenue" :show-overflow-tooltip='true'/>
+      <el-table-column label="第二季度营收" align="center" prop="q2Revenue" :show-overflow-tooltip='true'/>
+      <el-table-column label="第三季度营收" align="center" prop="q3Revenue" :show-overflow-tooltip='true'/>
+      <el-table-column label="第四季度营收" align="center" prop="q4Revenue" :show-overflow-tooltip='true'/>
+      <el-table-column label="年度合计" align="center" prop="annualTotal" :show-overflow-tooltip='true'/>
+      <el-table-column label="营收年份" align="center" prop="revenueYear" :show-overflow-tooltip='true'/>
+      <el-table-column label="备注" align="center" prop="remarks" :show-overflow-tooltip='true'/>
+    </el-table>
+
+    <div style="position: fixed;bottom: 20px;right: 10px;">
+      <pagination
+          v-show="total>0"
+          :total="total"
+          v-model:page="queryParams.pageNum"
+          v-model:limit="queryParams.pageSize"
+          @pagination="getList"
+      />
+    </div>
+
+    <el-dialog :title="upload.title" v-model="upload.open" width="400px" append-to-body>
+      <el-upload ref="uploadRef" :limit="1" accept=".xlsx, .xls" :headers="upload.headers"
+                 :action="upload.url + '?updateSupport=' + upload.updateSupport" :disabled="upload.isUploading"
+                 :on-progress="handleFileUploadProgress" :on-success="handleFileSuccess" :auto-upload="false" drag>
+        <el-icon class="el-icon--upload">
+          <upload-filled/>
+        </el-icon>
+        <div class="el-upload__text">将文件拖到此处,或<em>点击上传</em></div>
+        <template #tip>
+          <div class="el-upload__tip text-center">
+            <span>仅允许导入xls、xlsx格式文件。</span>
+          </div>
+        </template>
+      </el-upload>
+      <template #footer>
+        <div class="dialog-footer">
+          <el-button type="primary" @click="submitFileForm">确 定</el-button>
+          <el-button @click="upload.open = false">取 消</el-button>
+        </div>
+      </template>
+    </el-dialog>
+
+    <!-- 添加或修改服务企业营收情况对话框 -->
+  </div>
+</template>
+
+<script setup name="Revenue">
+import {
+  listRevenue,
+  getRevenue,
+  delRevenue,
+  delRevenueBatch
+} from "@/api/basicData/revenue";
+import {reactive, ref, toRaw} from "vue";
+import {getToken} from "@/utils/auth";
+import {ElMessage} from "element-plus";
+import {likeQueryMethod} from "@/utils/likeQueryMethod";
+
+const {proxy} = getCurrentInstance();
+
+const revenueList = ref([]);
+const open = ref(false);
+const loading = ref(true);
+const showSearch = ref(true);
+const ids = ref([]);
+const single = ref(true);
+const multiple = ref(true);
+const total = ref(0);
+const title = ref("");
+
+const upload = reactive({
+  // 是否显示弹出层(用户导入)
+  open: false,
+  // 弹出层标题(用户导入)
+  title: '',
+  // 是否禁用上传
+  isUploading: false,
+  // 设置上传的请求头部
+  headers: {Authorization: getToken()},
+  // 上传的地址
+  url: import.meta.env.VITE_APP_BASE_API + '/crmServiceEnterpriseRevenue/importData'
+})
+const handleFileSuccess = (e) => {
+  if (e.code == 200) {
+    ElMessage({
+      type: "success",
+      message: e.msg
+    })
+    getList()
+    proxy.$refs['uploadRef']?.clearFiles()
+  } else {
+    ElMessage({
+      type: "error",
+      message: e.msg
+    })
+    proxy.$refs['uploadRef']?.clearFiles()
+  }
+}
+
+function submitFileForm() {
+  proxy.$refs['uploadRef']?.submit();
+  upload.open = false;
+}
+
+function handleImport() {
+  upload.open = true
+}
+
+const data = reactive({
+  form: {},
+  queryParams: {
+    pageNum: 1,
+    pageSize: 20,
+    companyName: null,
+    unifiedSocialCreditCode: '',
+    q1Revenue: null,
+    q2Revenue: null,
+    q3Revenue: null,
+    q4Revenue: null,
+    annualTotal: null,
+    revenueYear: null,
+    remarks: null
+  },
+  rules: {
+  }
+});
+
+const {queryParams, form, rules} = toRefs(data);
+
+/** 查询服务企业营收情况列表 */
+function getList() {
+  loading.value = true;
+  let toServerObj = likeQueryMethod('unified_social_credit_code', queryParams.value.unifiedSocialCreditCode, queryParams.value.pageNum, queryParams.value.pageSize,"company_name",queryParams.value.companyName);
+  listRevenue(toServerObj).then(response => {
+    revenueList.value = response.records;
+    total.value = response.total;
+    loading.value = false;
+  });
+}
+
+
+// 表单重置
+function reset() {
+  form.value = {
+    id: null,
+    companyName: null,
+    unifiedSocialCreditCode: '',
+    q1Revenue: null,
+    q2Revenue: null,
+    q3Revenue: null,
+    q4Revenue: null,
+    annualTotal: null,
+    revenueYear: null,
+    remarks: null
+  };
+  proxy.resetForm("revenueRef");
+}
+
+/** 搜索按钮操作 */
+function handleQuery() {
+  queryParams.value.pageNum = 1;
+  getList();
+}
+
+/** 重置按钮操作 */
+function resetQuery() {
+  proxy.resetForm("queryRef");
+  handleQuery();
+}
+
+// 多选框选中数据
+function handleSelectionChange(selection) {
+  ids.value = selection.map(item => item.id);
+  single.value = selection.length != 1;
+  multiple.value = !selection.length;
+}
+
+
+/** 删除按钮操作 */
+async function handleDelete(row) {
+  const res = await delRevenue();
+  if(res.code == 200){
+    ElMessage({
+      type:'success',
+      message:'删除成功'
+    })
+    getList();
+  }
+}
+/** 批量删除*/
+const batchDelete = (row)=>{
+  const idsToS = row.id || ids.value;
+  (proxy.$modal).confirm('是否确认删除这' + idsToS.length+'条的数据项?').then(function() {
+    return delRevenueBatch(toRaw(idsToS));
+  }).then(() => {
+    getList();
+    proxy.$modal.msgSuccess("删除成功");
+  }).catch(() => {});
+}
+
+/** 导出按钮操作 */
+function handleExport() {
+  proxy.download('crmServiceEnterpriseRevenue/exportData', {
+    ...queryParams.value
+  }, `服务企业营收情况_${new Date().getTime()}.xlsx`)
+}
+const downloadTemplate = ()=>{
+  proxy.download('crmServiceEnterpriseRevenue/getUploadTemplate',{}, `服务企业营收情况模板.xlsx`)
+}
+
+getList();
+</script>

+ 304 - 0
src/views/basicData/yqqtxx/fwdyxxb/index.vue

@@ -0,0 +1,304 @@
+<template>
+  <div class="app-container">
+    <el-form :model="queryParams" ref="queryRef" :inline="true" v-show="showSearch" label-width="68px">
+      <el-form-item label="企业名称" prop="companyName" label-width="200">
+        <el-input
+            v-model="queryParams.companyName"
+            placeholder="请输入企业名称"
+            clearable
+            @keyup.enter="handleQuery"
+        />
+      </el-form-item>
+      <el-form-item label="统一社会信用代码" prop="unifiedSocialCreditCode" label-width="200">
+        <el-input
+            v-model="queryParams.unifiedSocialCreditCode"
+            placeholder="请输入统一社会信用代码"
+            clearable
+            @keyup.enter="handleQuery"
+        />
+      </el-form-item>
+      <el-form-item>
+        <el-button type="primary" icon="Search" @click="handleQuery">搜索</el-button>
+        <el-button icon="Refresh" @click="resetQuery">重置</el-button>
+      </el-form-item>
+    </el-form>
+
+    <el-row :gutter="10" class="mb8">
+      <el-col :span="1.5">
+        <el-popconfirm
+            title="你确定清除所有数据?"
+            confirm-button-text="是的"
+            cancel-button-text="不是"
+            :icon="InfoFilled"
+            icon-color="#626AEF"
+            @confirm="handleDelete"
+        >
+          <template #reference>
+            <el-button
+                type="danger"
+                plain
+                icon="Delete"
+                v-hasPermi="['basicData:yqqtxx:fwdyxxb:remove']"
+            >清除全表
+            </el-button>
+          </template>
+        </el-popconfirm>
+      </el-col>
+      <el-col :span="1.5">
+        <el-button
+            type="danger"
+            plain
+            icon="Delete"
+            @click="batchDelete"
+            v-hasPermi="['basicData:yqqtxx:fwdyxxb:remove']"
+            :disabled="ids.length === 0"
+        >批量删除
+        </el-button>
+      </el-col>
+      <el-col :span="1.5">
+        <el-button
+            type="warning"
+            plain
+            icon="Download"
+            @click="handleExport"
+            :disabled="!propertyList.length"
+            v-hasPermi="['basicData:yqqtxx:fwdyxxb:export']"
+        >导出
+        </el-button>
+      </el-col>
+      <el-col :span="1.5">
+        <el-button type="info" plain icon="Upload" @click="handleImport"
+                   v-hasPermi="['basicData:yqqtxx:fwdyxxb:import']">导入
+        </el-button>
+      </el-col>
+      <el-col :span="1.5">
+        <el-button type="success" plain icon="Download" @click="downloadTemplate" v-hasPermi="['basicData:yqqtxx:fwdyxxb:download']">
+          下载导入模板
+        </el-button>
+      </el-col>
+    </el-row>
+
+    <el-table v-loading="loading" :data="propertyList" height="650" @selection-change="handleSelectionChange">
+      <el-table-column type="selection" width="55" align="center"/>
+      <el-table-column label="企业名称" align="center" prop="companyName" :show-overflow-tooltip='true'/>
+      <el-table-column label="统一社会信用代码" align="center" prop="unifiedSocialCreditCode" width="200"/>
+      <el-table-column label="房间号" align="center" prop="roomNumber" :show-overflow-tooltip='true'/>
+      <el-table-column label="不动产单元号" align="center" prop="realEstateUnitNumber" :show-overflow-tooltip='true'/>
+      <el-table-column label="权证号码" align="center" prop="titleCertificateNumber" :show-overflow-tooltip='true'/>
+      <el-table-column label="抵押权人" align="center" prop="mortgagee" :show-overflow-tooltip='true'/>
+      <el-table-column label="抵押面积" align="center" prop="mortgageArea" :show-overflow-tooltip='true'/>
+      <el-table-column label="债权数额" align="center" prop="claimAmount" :show-overflow-tooltip='true'/>
+      <el-table-column label="登记证明号" align="center" prop="registrationCertificateNumber" :show-overflow-tooltip='true'/>
+      <el-table-column label="抵押方式" align="center" prop="mortgageMethod" :show-overflow-tooltip='true'/>
+      <el-table-column label="抵押权人证件号码" align="center" prop="mortgageeIdNumber" :show-overflow-tooltip='true'/>
+      <el-table-column label="是否注销" align="center" prop="isCancelled" :show-overflow-tooltip='true'/>
+    </el-table>
+
+    <div style="position: fixed;bottom: 20px;right: 10px;">
+      <pagination
+          v-show="total>0"
+          :total="total"
+          v-model:page="queryParams.pageNum"
+          v-model:limit="queryParams.pageSize"
+          @pagination="getList"
+      />
+    </div>
+
+    <el-dialog :title="upload.title" v-model="upload.open" width="400px" append-to-body>
+      <el-upload ref="uploadRef" :limit="1" accept=".xlsx, .xls" :headers="upload.headers"
+                 :action="upload.url + '?updateSupport=' + upload.updateSupport" :disabled="upload.isUploading"
+                 :on-progress="handleFileUploadProgress" :on-success="handleFileSuccess" :auto-upload="false" drag>
+        <el-icon class="el-icon--upload">
+          <upload-filled/>
+        </el-icon>
+        <div class="el-upload__text">将文件拖到此处,或<em>点击上传</em></div>
+        <template #tip>
+          <div class="el-upload__tip text-center">
+            <span>仅允许导入xls、xlsx格式文件。</span>
+          </div>
+        </template>
+      </el-upload>
+      <template #footer>
+        <div class="dialog-footer">
+          <el-button type="primary" @click="submitFileForm">确 定</el-button>
+          <el-button @click="upload.open = false">取 消</el-button>
+        </div>
+      </template>
+    </el-dialog>
+
+    <!-- 添加或修改房屋抵押信息对话框 -->
+  </div>
+</template>
+
+<script setup name="Property">
+import {
+  listProperty,
+  getProperty,
+  delProperty,
+  delPropertyBatch
+} from "@/api/basicData/property";
+import {reactive, ref, toRaw} from "vue";
+import {getToken} from "@/utils/auth";
+import {ElMessage} from "element-plus";
+import {likeQueryMethod} from "@/utils/likeQueryMethod";
+
+const {proxy} = getCurrentInstance();
+
+const propertyList = ref([]);
+const open = ref(false);
+const loading = ref(true);
+const showSearch = ref(true);
+const ids = ref([]);
+const single = ref(true);
+const multiple = ref(true);
+const total = ref(0);
+const title = ref("");
+
+const upload = reactive({
+  // 是否显示弹出层(用户导入)
+  open: false,
+  // 弹出层标题(用户导入)
+  title: '',
+  // 是否禁用上传
+  isUploading: false,
+  // 设置上传的请求头部
+  headers: {Authorization: getToken()},
+  // 上传的地址
+  url: import.meta.env.VITE_APP_BASE_API + '/crmMortgageProperty/importData'
+})
+const handleFileSuccess = (e) => {
+  if (e.code == 200) {
+    ElMessage({
+      type: "success",
+      message: e.msg
+    })
+    getList()
+    proxy.$refs['uploadRef']?.clearFiles()
+  } else {
+    ElMessage({
+      type: "error",
+      message: e.msg
+    })
+    proxy.$refs['uploadRef']?.clearFiles()
+  }
+}
+
+function submitFileForm() {
+  proxy.$refs['uploadRef']?.submit();
+  upload.open = false;
+}
+
+function handleImport() {
+  upload.open = true
+}
+
+const data = reactive({
+  form: {},
+  queryParams: {
+    pageNum: 1,
+    pageSize: 20,
+    companyName: null,
+    unifiedSocialCreditCode: '',
+    roomNumber: null,
+    realEstateUnitNumber: null,
+    titleCertificateNumber: null,
+    mortgagee: null,
+    mortgageArea: null,
+    claimAmount: null,
+    registrationCertificateNumber: null,
+    mortgageMethod: null,
+    mortgageeIdNumber: null,
+    isCancelled: null
+  },
+  rules: {
+  }
+});
+
+const {queryParams, form, rules} = toRefs(data);
+
+/** 查询房屋抵押信息列表 */
+function getList() {
+  loading.value = true;
+  let toServerObj = likeQueryMethod('unified_social_credit_code', queryParams.value.unifiedSocialCreditCode, queryParams.value.pageNum, queryParams.value.pageSize,"company_name",queryParams.value.companyName);
+  listProperty(toServerObj).then(response => {
+    propertyList.value = response.records;
+    total.value = response.total;
+    loading.value = false;
+  });
+}
+
+
+// 表单重置
+function reset() {
+  form.value = {
+    id: null,
+    companyName: null,
+    unifiedSocialCreditCode: '',
+    roomNumber: null,
+    realEstateUnitNumber: null,
+    titleCertificateNumber: null,
+    mortgagee: null,
+    mortgageArea: null,
+    claimAmount: null,
+    registrationCertificateNumber: null,
+    mortgageMethod: null,
+    mortgageeIdNumber: null,
+    isCancelled: null
+  };
+  proxy.resetForm("propertyRef");
+}
+
+/** 搜索按钮操作 */
+function handleQuery() {
+  queryParams.value.pageNum = 1;
+  getList();
+}
+
+/** 重置按钮操作 */
+function resetQuery() {
+  proxy.resetForm("queryRef");
+  handleQuery();
+}
+
+// 多选框选中数据
+function handleSelectionChange(selection) {
+  ids.value = selection.map(item => item.id);
+  single.value = selection.length != 1;
+  multiple.value = !selection.length;
+}
+
+
+/** 删除按钮操作 */
+async function handleDelete(row) {
+  const res = await delProperty();
+  if(res.code == 200){
+    ElMessage({
+      type:'success',
+      message:'删除成功'
+    })
+    getList();
+  }
+}
+/** 批量删除*/
+const batchDelete = (row)=>{
+  const idsToS = row.id || ids.value;
+  (proxy.$modal).confirm('是否确认删除这' + idsToS.length+'条的数据项?').then(function() {
+    return delPropertyBatch(toRaw(idsToS));
+  }).then(() => {
+    getList();
+    proxy.$modal.msgSuccess("删除成功");
+  }).catch(() => {});
+}
+
+/** 导出按钮操作 */
+function handleExport() {
+  proxy.download('crmMortgageProperty/exportData', {
+    ...queryParams.value
+  }, `房屋抵押信息_${new Date().getTime()}.xlsx`)
+}
+const downloadTemplate = ()=>{
+  proxy.download('crmMortgageProperty/getUploadTemplate',{}, `房屋抵押信息模板.xlsx`)
+}
+
+getList();
+</script>

+ 295 - 0
src/views/basicData/yqqtxx/rcxxtjb/index.vue

@@ -0,0 +1,295 @@
+<template>
+  <div class="app-container">
+    <el-form :model="queryParams" ref="queryRef" :inline="true" v-show="showSearch" label-width="68px">
+      <el-form-item label="企业名称" prop="companyName" label-width="200">
+        <el-input
+            v-model="queryParams.companyName"
+            placeholder="请输入企业名称"
+            clearable
+            @keyup.enter="handleQuery"
+        />
+      </el-form-item>
+      <el-form-item label="统一社会信用代码" prop="unifiedSocialCreditCode" label-width="200">
+        <el-input
+            v-model="queryParams.unifiedSocialCreditCode"
+            placeholder="请输入统一社会信用代码"
+            clearable
+            @keyup.enter="handleQuery"
+        />
+      </el-form-item>
+      <el-form-item>
+        <el-button type="primary" icon="Search" @click="handleQuery">搜索</el-button>
+        <el-button icon="Refresh" @click="resetQuery">重置</el-button>
+      </el-form-item>
+    </el-form>
+
+    <el-row :gutter="10" class="mb8">
+      <el-col :span="1.5">
+        <el-popconfirm
+            title="你确定清除所有数据?"
+            confirm-button-text="是的"
+            cancel-button-text="不是"
+            :icon="InfoFilled"
+            icon-color="#626AEF"
+            @confirm="handleDelete"
+        >
+          <template #reference>
+            <el-button
+                type="danger"
+                plain
+                icon="Delete"
+                v-hasPermi="['basicData:yqqtxx:rcxxtjb:remove']"
+            >清除全表
+            </el-button>
+          </template>
+        </el-popconfirm>
+      </el-col>
+      <el-col :span="1.5">
+        <el-button
+            type="danger"
+            plain
+            icon="Delete"
+            @click="batchDelete"
+            v-hasPermi="['basicData:yqqtxx:rcxxtjb:remove']"
+            :disabled="ids.length === 0"
+        >批量删除
+        </el-button>
+      </el-col>
+      <el-col :span="1.5">
+        <el-button
+            type="warning"
+            plain
+            icon="Download"
+            @click="handleExport"
+            :disabled="!statisticsList.length"
+            v-hasPermi="['basicData:yqqtxx:rcxxtjb:export']"
+        >导出
+        </el-button>
+      </el-col>
+      <el-col :span="1.5">
+        <el-button type="info" plain icon="Upload" @click="handleImport"
+                   v-hasPermi="['basicData:yqqtxx:rcxxtjb:import']">导入
+        </el-button>
+      </el-col>
+      <el-col :span="1.5">
+        <el-button type="success" plain icon="Download" @click="downloadTemplate" v-hasPermi="['basicData:yqqtxx:rcxxtjb:download']">
+          下载导入模板
+        </el-button>
+      </el-col>
+    </el-row>
+
+    <el-table v-loading="loading" :data="statisticsList" height="650" @selection-change="handleSelectionChange">
+      <el-table-column type="selection" width="55" align="center"/>
+      <el-table-column label="企业名称" align="center" prop="companyName" :show-overflow-tooltip='true'/>
+      <el-table-column label="统一社会信用代码" align="center" prop="unifiedSocialCreditCode" width="200"/>
+      <el-table-column label="引进人才" align="center" prop="talentIntroducedCount" :show-overflow-tooltip='true'/>
+      <el-table-column label="研究生学历" align="center" prop="postgraduateDegreeCount" :show-overflow-tooltip='true'/>
+      <el-table-column label="本科学历" align="center" prop="bachelorDegreeCount" :show-overflow-tooltip='true'/>
+      <el-table-column label="大专学历" align="center" prop="collegeDegreeCount" :show-overflow-tooltip='true'/>
+      <el-table-column label="高级职称" align="center" prop="seniorTitleCount" :show-overflow-tooltip='true'/>
+      <el-table-column label="中级职称" align="center" prop="intermediateTitleCount" :show-overflow-tooltip='true'/>
+      <el-table-column label="初级职称" align="center" prop="juniorTitleCount" :show-overflow-tooltip='true'/>
+    </el-table>
+
+    <div style="position: fixed;bottom: 20px;right: 10px;">
+      <pagination
+          v-show="total>0"
+          :total="total"
+          v-model:page="queryParams.pageNum"
+          v-model:limit="queryParams.pageSize"
+          @pagination="getList"
+      />
+    </div>
+
+    <el-dialog :title="upload.title" v-model="upload.open" width="400px" append-to-body>
+      <el-upload ref="uploadRef" :limit="1" accept=".xlsx, .xls" :headers="upload.headers"
+                 :action="upload.url + '?updateSupport=' + upload.updateSupport" :disabled="upload.isUploading"
+                 :on-progress="handleFileUploadProgress" :on-success="handleFileSuccess" :auto-upload="false" drag>
+        <el-icon class="el-icon--upload">
+          <upload-filled/>
+        </el-icon>
+        <div class="el-upload__text">将文件拖到此处,或<em>点击上传</em></div>
+        <template #tip>
+          <div class="el-upload__tip text-center">
+            <span>仅允许导入xls、xlsx格式文件。</span>
+          </div>
+        </template>
+      </el-upload>
+      <template #footer>
+        <div class="dialog-footer">
+          <el-button type="primary" @click="submitFileForm">确 定</el-button>
+          <el-button @click="upload.open = false">取 消</el-button>
+        </div>
+      </template>
+    </el-dialog>
+
+    <!-- 添加或修改企业人才信息统计对话框 -->
+  </div>
+</template>
+
+<script setup name="Statistics">
+import {
+  listStatistics,
+  getStatistics,
+  delStatistics,
+  delStatisticsBatch
+} from "@/api/basicData/statistics";
+import {reactive, ref, toRaw} from "vue";
+import {getToken} from "@/utils/auth";
+import {ElMessage} from "element-plus";
+import {likeQueryMethod} from "@/utils/likeQueryMethod";
+
+const {proxy} = getCurrentInstance();
+
+const statisticsList = ref([]);
+const open = ref(false);
+const loading = ref(true);
+const showSearch = ref(true);
+const ids = ref([]);
+const single = ref(true);
+const multiple = ref(true);
+const total = ref(0);
+const title = ref("");
+
+const upload = reactive({
+  // 是否显示弹出层(用户导入)
+  open: false,
+  // 弹出层标题(用户导入)
+  title: '',
+  // 是否禁用上传
+  isUploading: false,
+  // 设置上传的请求头部
+  headers: {Authorization: getToken()},
+  // 上传的地址
+  url: import.meta.env.VITE_APP_BASE_API + '/crmEnterpriseTalentStatistics/importData'
+})
+const handleFileSuccess = (e) => {
+  if (e.code == 200) {
+    ElMessage({
+      type: "success",
+      message: e.msg
+    })
+    getList()
+    proxy.$refs['uploadRef']?.clearFiles()
+  } else {
+    ElMessage({
+      type: "error",
+      message: e.msg
+    })
+    proxy.$refs['uploadRef']?.clearFiles()
+  }
+}
+
+function submitFileForm() {
+  proxy.$refs['uploadRef']?.submit();
+  upload.open = false;
+}
+
+function handleImport() {
+  upload.open = true
+}
+
+const data = reactive({
+  form: {},
+  queryParams: {
+    pageNum: 1,
+    pageSize: 20,
+    companyName: null,
+    unifiedSocialCreditCode: '',
+    talentIntroducedCount: null,
+    postgraduateDegreeCount: null,
+    bachelorDegreeCount: null,
+    collegeDegreeCount: null,
+    seniorTitleCount: null,
+    intermediateTitleCount: null,
+    juniorTitleCount: null
+  },
+  rules: {
+  }
+});
+
+const {queryParams, form, rules} = toRefs(data);
+
+/** 查询企业人才信息统计列表 */
+function getList() {
+  loading.value = true;
+  let toServerObj = likeQueryMethod('unified_social_credit_code', queryParams.value.unifiedSocialCreditCode, queryParams.value.pageNum, queryParams.value.pageSize,"company_name",queryParams.value.companyName);
+  listStatistics(toServerObj).then(response => {
+    statisticsList.value = response.records;
+    total.value = response.total;
+    loading.value = false;
+  });
+}
+
+
+// 表单重置
+function reset() {
+  form.value = {
+    id: null,
+    companyName: null,
+    unifiedSocialCreditCode: '',
+    talentIntroducedCount: null,
+    postgraduateDegreeCount: null,
+    bachelorDegreeCount: null,
+    collegeDegreeCount: null,
+    seniorTitleCount: null,
+    intermediateTitleCount: null,
+    juniorTitleCount: null
+  };
+  proxy.resetForm("statisticsRef");
+}
+
+/** 搜索按钮操作 */
+function handleQuery() {
+  queryParams.value.pageNum = 1;
+  getList();
+}
+
+/** 重置按钮操作 */
+function resetQuery() {
+  proxy.resetForm("queryRef");
+  handleQuery();
+}
+
+// 多选框选中数据
+function handleSelectionChange(selection) {
+  ids.value = selection.map(item => item.id);
+  single.value = selection.length != 1;
+  multiple.value = !selection.length;
+}
+
+
+/** 删除按钮操作 */
+async function handleDelete(row) {
+  const res = await delStatistics();
+  if(res.code == 200){
+    ElMessage({
+      type:'success',
+      message:'删除成功'
+    })
+    getList();
+  }
+}
+/** 批量删除*/
+const batchDelete = (row)=>{
+  const idsToS = row.id || ids.value;
+  (proxy.$modal).confirm('是否确认删除这' + idsToS.length+'条的数据项?').then(function() {
+    return delStatisticsBatch(toRaw(idsToS));
+  }).then(() => {
+    getList();
+    proxy.$modal.msgSuccess("删除成功");
+  }).catch(() => {});
+}
+
+/** 导出按钮操作 */
+function handleExport() {
+  proxy.download('crmEnterpriseTalentStatistics/exportData', {
+    ...queryParams.value
+  }, `企业人才信息统计_${new Date().getTime()}.xlsx`)
+}
+const downloadTemplate = ()=>{
+  proxy.download('crmEnterpriseTalentStatistics/getUploadTemplate',{}, `企业人才信息统计模板.xlsx`)
+}
+
+getList();
+</script>

+ 338 - 0
src/views/basicData/yqqtxx/tddyxxb/index.vue

@@ -0,0 +1,338 @@
+<template>
+  <div class="app-container">
+    <el-form :model="queryParams" ref="queryRef" :inline="true" v-show="showSearch" label-width="68px">
+      <el-form-item label="企业名称" prop="companyName" label-width="200">
+        <el-input
+            v-model="queryParams.companyName"
+            placeholder="请输入企业名称"
+            clearable
+            @keyup.enter="handleQuery"
+        />
+      </el-form-item>
+      <el-form-item label="统一社会信用代码" prop="unifiedSocialCreditCode" label-width="200">
+        <el-input
+            v-model="queryParams.unifiedSocialCreditCode"
+            placeholder="请输入统一社会信用代码"
+            clearable
+            @keyup.enter="handleQuery"
+        />
+      </el-form-item>
+      <el-form-item>
+        <el-button type="primary" icon="Search" @click="handleQuery">搜索</el-button>
+        <el-button icon="Refresh" @click="resetQuery">重置</el-button>
+      </el-form-item>
+    </el-form>
+
+    <el-row :gutter="10" class="mb8">
+      <el-col :span="1.5">
+        <el-popconfirm
+            title="你确定清除所有数据?"
+            confirm-button-text="是的"
+            cancel-button-text="不是"
+            :icon="InfoFilled"
+            icon-color="#626AEF"
+            @confirm="handleDelete"
+        >
+          <template #reference>
+            <el-button
+                type="danger"
+                plain
+                icon="Delete"
+                v-hasPermi="['basicData:yqqtxx:tddyxxb:remove']"
+            >清除全表
+            </el-button>
+          </template>
+        </el-popconfirm>
+      </el-col>
+      <el-col :span="1.5">
+        <el-button
+            type="danger"
+            plain
+            icon="Delete"
+            @click="batchDelete"
+            v-hasPermi="['basicData:yqqtxx:tddyxxb:remove']"
+            :disabled="ids.length === 0"
+        >批量删除
+        </el-button>
+      </el-col>
+      <el-col :span="1.5">
+        <el-button
+            type="warning"
+            plain
+            icon="Download"
+            @click="handleExport"
+            :disabled="!mortgageList.length"
+            v-hasPermi="['basicData:yqqtxx:tddyxxb:export']"
+        >导出
+        </el-button>
+      </el-col>
+      <el-col :span="1.5">
+        <el-button type="info" plain icon="Upload" @click="handleImport"
+                   v-hasPermi="['basicData:yqqtxx:tddyxxb:import']">导入
+        </el-button>
+      </el-col>
+      <el-col :span="1.5">
+        <el-button type="success" plain icon="Download" @click="downloadTemplate" v-hasPermi="['basicData:yqqtxx:tddyxxb:download']">
+          下载导入模板
+        </el-button>
+      </el-col>
+    </el-row>
+
+    <el-table v-loading="loading" :data="mortgageList" height="650" @selection-change="handleSelectionChange">
+      <el-table-column type="selection" width="55" align="center"/>
+      <el-table-column label="企业名称" align="center" prop="companyName" :show-overflow-tooltip='true'/>
+      <el-table-column label="统一社会信用代码" align="center" prop="unifiedSocialCreditCode" width="200"/>
+      <el-table-column label="土地证号" align="center" prop="landCertificateNumber" :show-overflow-tooltip='true'/>
+      <el-table-column label="抵押权人" align="center" prop="mortgagee" :show-overflow-tooltip='true'/>
+      <el-table-column label="抵押面积" align="center" prop="mortgageArea" :show-overflow-tooltip='true'/>
+      <el-table-column label="债权数额" align="center" prop="claimAmount" :show-overflow-tooltip='true'/>
+      <el-table-column label="登记证明号" align="center" prop="registrationCertificateNumber" :show-overflow-tooltip='true'/>
+      <el-table-column label="抵押方式" align="center" prop="mortgageMethod" :show-overflow-tooltip='true'/>
+      <el-table-column label="证件号码" align="center" prop="idNumber" :show-overflow-tooltip='true'/>
+      <el-table-column label="是否注销" align="center" prop="isCancelled" :show-overflow-tooltip='true'/>
+    </el-table>
+
+    <div style="position: fixed;bottom: 20px;right: 10px;">
+      <pagination
+          v-show="total>0"
+          :total="total"
+          v-model:page="queryParams.pageNum"
+          v-model:limit="queryParams.pageSize"
+          @pagination="getList"
+      />
+    </div>
+
+    <el-dialog :title="upload.title" v-model="upload.open" width="400px" append-to-body>
+      <el-upload ref="uploadRef" :limit="1" accept=".xlsx, .xls" :headers="upload.headers"
+                 :action="upload.url + '?updateSupport=' + upload.updateSupport" :disabled="upload.isUploading"
+                 :on-progress="handleFileUploadProgress" :on-success="handleFileSuccess" :auto-upload="false" drag>
+        <el-icon class="el-icon--upload">
+          <upload-filled/>
+        </el-icon>
+        <div class="el-upload__text">将文件拖到此处,或<em>点击上传</em></div>
+        <template #tip>
+          <div class="el-upload__tip text-center">
+            <span>仅允许导入xls、xlsx格式文件。</span>
+          </div>
+        </template>
+      </el-upload>
+      <template #footer>
+        <div class="dialog-footer">
+          <el-button type="primary" @click="submitFileForm">确 定</el-button>
+          <el-button @click="upload.open = false">取 消</el-button>
+        </div>
+      </template>
+    </el-dialog>
+
+    <!-- 添加或修改土地抵押信息对话框 -->
+  </div>
+</template>
+
+<script setup name="Mortgage">
+import {
+  listMortgage,
+  getMortgage,
+  delMortgage,
+  delMortgageBatch
+} from "@/api/basicData/mortgage4";
+import {reactive, ref, toRaw} from "vue";
+import {getToken} from "@/utils/auth";
+import {ElMessage} from "element-plus";
+import {likeQueryMethod} from "@/utils/likeQueryMethod";
+
+const {proxy} = getCurrentInstance();
+
+const mortgageList = ref([]);
+const open = ref(false);
+const loading = ref(true);
+const showSearch = ref(true);
+const ids = ref([]);
+const single = ref(true);
+const multiple = ref(true);
+const total = ref(0);
+const title = ref("");
+
+const upload = reactive({
+  // 是否显示弹出层(用户导入)
+  open: false,
+  // 弹出层标题(用户导入)
+  title: '',
+  // 是否禁用上传
+  isUploading: false,
+  // 设置上传的请求头部
+  headers: {Authorization: getToken()},
+  // 上传的地址
+  url: import.meta.env.VITE_APP_BASE_API + '/crmLandMortgage/importData'
+})
+const handleFileSuccess = (e) => {
+  if (e.code == 200) {
+    ElMessage({
+      type: "success",
+      message: e.msg
+    })
+    getList()
+    proxy.$refs['uploadRef']?.clearFiles()
+  } else {
+    ElMessage({
+      type: "error",
+      message: e.msg
+    })
+    proxy.$refs['uploadRef']?.clearFiles()
+  }
+}
+
+function submitFileForm() {
+  proxy.$refs['uploadRef']?.submit();
+  upload.open = false;
+}
+
+function handleImport() {
+  upload.open = true
+}
+
+const data = reactive({
+  form: {},
+  queryParams: {
+    pageNum: 1,
+    pageSize: 20,
+    companyName: null,
+    unifiedSocialCreditCode: '',
+    landCertificateNumber: null,
+    mortgagee: null,
+    mortgageArea: null,
+    claimAmount: null,
+    registrationCertificateNumber: null,
+    mortgageMethod: null,
+    idNumber: null,
+    isCancelled: null
+  },
+  rules: {
+    companyName: [
+      {
+        required: true, message: "企业名称不能为空", trigger: "blur" }
+    ],
+    unifiedSocialCreditCode: [
+      {
+        required: true, message: "统一社会信用代码不能为空", trigger: "blur" }
+    ],
+    landCertificateNumber: [
+      {
+        required: true, message: "土地证号不能为空", trigger: "blur" }
+    ],
+    mortgagee: [
+      {
+        required: true, message: "抵押权人不能为空", trigger: "blur" }
+    ],
+    mortgageArea: [
+      {
+        required: true, message: "抵押面积不能为空", trigger: "blur" }
+    ],
+    claimAmount: [
+      {
+        required: true, message: "债权数额不能为空", trigger: "blur" }
+    ],
+    registrationCertificateNumber: [
+      {
+        required: true, message: "登记证明号不能为空", trigger: "blur" }
+    ],
+    mortgageMethod: [
+      {
+        required: true, message: "抵押方式不能为空", trigger: "blur" }
+    ],
+    idNumber: [
+      {
+        required: true, message: "证件号码不能为空", trigger: "blur" }
+    ],
+    isCancelled: [
+      {
+        required: true, message: "是否注销不能为空", trigger: "blur" }
+    ]
+  }
+});
+
+const {queryParams, form, rules} = toRefs(data);
+
+/** 查询土地抵押信息列表 */
+function getList() {
+  loading.value = true;
+  let toServerObj = likeQueryMethod('unified_social_credit_code', queryParams.value.unifiedSocialCreditCode, queryParams.value.pageNum, queryParams.value.pageSize,'company_name',queryParams.value.companyName);
+  listMortgage(toServerObj).then(response => {
+    mortgageList.value = response.records;
+    total.value = response.total;
+    loading.value = false;
+  });
+}
+
+
+// 表单重置
+function reset() {
+  form.value = {
+    id: null,
+    companyName: null,
+    unifiedSocialCreditCode: '',
+    landCertificateNumber: null,
+    mortgagee: null,
+    mortgageArea: null,
+    claimAmount: null,
+    registrationCertificateNumber: null,
+    mortgageMethod: null,
+    idNumber: null,
+    isCancelled: null
+  };
+  proxy.resetForm("mortgageRef");
+}
+
+/** 搜索按钮操作 */
+function handleQuery() {
+  queryParams.value.pageNum = 1;
+  getList();
+}
+
+/** 重置按钮操作 */
+function resetQuery() {
+  proxy.resetForm("queryRef");
+  handleQuery();
+}
+
+// 多选框选中数据
+function handleSelectionChange(selection) {
+  ids.value = selection.map(item => item.id);
+  single.value = selection.length != 1;
+  multiple.value = !selection.length;
+}
+
+
+/** 删除按钮操作 */
+async function handleDelete(row) {
+  const res = await delMortgage();
+  if(res.code == 200){
+    ElMessage({
+      type:'success',
+      message:'删除成功'
+    })
+    getList();
+  }
+}
+/** 批量删除*/
+const batchDelete = (row)=>{
+  const idsToS = row.id || ids.value;
+  (proxy.$modal).confirm('是否确认删除这' + idsToS.length+'条的数据项?').then(function() {
+    return delMortgageBatch(toRaw(idsToS));
+  }).then(() => {
+    getList();
+    proxy.$modal.msgSuccess("删除成功");
+  }).catch(() => {});
+}
+
+/** 导出按钮操作 */
+function handleExport() {
+  proxy.download('crmLandMortgage/exportData', {
+    ...queryParams.value
+  }, `土地抵押信息_${new Date().getTime()}.xlsx`)
+}
+const downloadTemplate = ()=>{
+  proxy.download('crmLandMortgage/getUploadTemplate',{}, `土地抵押信息模板.xlsx`)
+}
+
+getList();
+</script>

+ 292 - 0
src/views/basicData/yqqtxx/wlxx/index.vue

@@ -0,0 +1,292 @@
+<template>
+  <div class="app-container">
+    <el-form :model="queryParams" ref="queryRef" :inline="true" v-show="showSearch" label-width="68px">
+      <el-form-item label="企业名称" prop="companyName" label-width="200">
+        <el-input
+            v-model="queryParams.companyName"
+            placeholder="请输入企业名称"
+            clearable
+            @keyup.enter="handleQuery"
+        />
+      </el-form-item>
+      <el-form-item label="统一社会信用代码" prop="unifiedSocialCreditCode" label-width="200">
+        <el-input
+            v-model="queryParams.unifiedSocialCreditCode"
+            placeholder="请输入统一社会信用代码"
+            clearable
+            @keyup.enter="handleQuery"
+        />
+      </el-form-item>
+      <el-form-item>
+        <el-button type="primary" icon="Search" @click="handleQuery">搜索</el-button>
+        <el-button icon="Refresh" @click="resetQuery">重置</el-button>
+      </el-form-item>
+    </el-form>
+
+    <el-row :gutter="10" class="mb8">
+      <el-col :span="1.5">
+        <el-popconfirm
+            title="你确定清除所有数据?"
+            confirm-button-text="是的"
+            cancel-button-text="不是"
+            :icon="InfoFilled"
+            icon-color="#626AEF"
+            @confirm="handleDelete"
+        >
+          <template #reference>
+            <el-button
+                type="danger"
+                plain
+                icon="Delete"
+                v-hasPermi="['basicData:yqqtxx:wlxx:remove']"
+            >清除全表
+            </el-button>
+          </template>
+        </el-popconfirm>
+      </el-col>
+      <el-col :span="1.5">
+        <el-button
+            type="danger"
+            plain
+            icon="Delete"
+            @click="batchDelete"
+            v-hasPermi="['basicData:yqqtxx:wlxx:remove']"
+            :disabled="ids.length === 0"
+        >批量删除
+        </el-button>
+      </el-col>
+      <el-col :span="1.5">
+        <el-button
+            type="warning"
+            plain
+            icon="Download"
+            @click="handleExport"
+            :disabled="!logisticsList.length"
+            v-hasPermi="['basicData:yqqtxx:wlxx:export']"
+        >导出
+        </el-button>
+      </el-col>
+      <el-col :span="1.5">
+        <el-button type="info" plain icon="Upload" @click="handleImport"
+                   v-hasPermi="['basicData:yqqtxx:wlxx:import']">导入
+        </el-button>
+      </el-col>
+      <el-col :span="1.5">
+        <el-button type="success" plain icon="Download" @click="downloadTemplate" v-hasPermi="['basicData:yqqtxx:wlxx:download']">
+          下载导入模板
+        </el-button>
+      </el-col>
+    </el-row>
+
+    <el-table v-loading="loading" :data="logisticsList" height="650" @selection-change="handleSelectionChange">
+      <el-table-column type="selection" width="55" align="center"/>
+      <el-table-column label="企业名称" align="center" prop="companyName" :show-overflow-tooltip='true'/>
+      <el-table-column label="统一社会信用代码" align="center" prop="unifiedSocialCreditCode" width="200"/>
+      <el-table-column label="货物名称" align="center" prop="cargoName" :show-overflow-tooltip='true'/>
+      <el-table-column label="起运地" align="center" prop="origin" :show-overflow-tooltip='true'/>
+      <el-table-column label="目的地" align="center" prop="destination" :show-overflow-tooltip='true'/>
+      <el-table-column label="运输方式" align="center" prop="transportMode" :show-overflow-tooltip='true'/>
+      <el-table-column label="年物流费用" align="center" prop="annualLogisticsCost" :show-overflow-tooltip='true'/>
+      <el-table-column label="合作公司" align="center" prop="partnerCompany" :show-overflow-tooltip='true'/>
+    </el-table>
+
+    <div style="position: fixed;bottom: 20px;right: 10px;">
+      <pagination
+          v-show="total>0"
+          :total="total"
+          v-model:page="queryParams.pageNum"
+          v-model:limit="queryParams.pageSize"
+          @pagination="getList"
+      />
+    </div>
+
+    <el-dialog :title="upload.title" v-model="upload.open" width="400px" append-to-body>
+      <el-upload ref="uploadRef" :limit="1" accept=".xlsx, .xls" :headers="upload.headers"
+                 :action="upload.url + '?updateSupport=' + upload.updateSupport" :disabled="upload.isUploading"
+                 :on-progress="handleFileUploadProgress" :on-success="handleFileSuccess" :auto-upload="false" drag>
+        <el-icon class="el-icon--upload">
+          <upload-filled/>
+        </el-icon>
+        <div class="el-upload__text">将文件拖到此处,或<em>点击上传</em></div>
+        <template #tip>
+          <div class="el-upload__tip text-center">
+            <span>仅允许导入xls、xlsx格式文件。</span>
+          </div>
+        </template>
+      </el-upload>
+      <template #footer>
+        <div class="dialog-footer">
+          <el-button type="primary" @click="submitFileForm">确 定</el-button>
+          <el-button @click="upload.open = false">取 消</el-button>
+        </div>
+      </template>
+    </el-dialog>
+
+    <!-- 添加或修改企业物流信息对话框 -->
+  </div>
+</template>
+
+<script setup name="Logistics">
+import {
+  listLogistics,
+  getLogistics,
+  delLogistics,
+  delLogisticsBatch
+} from "@/api/basicData/logistics";
+import {reactive, ref, toRaw} from "vue";
+import {getToken} from "@/utils/auth";
+import {ElMessage} from "element-plus";
+import {likeQueryMethod} from "@/utils/likeQueryMethod";
+
+const {proxy} = getCurrentInstance();
+
+const logisticsList = ref([]);
+const open = ref(false);
+const loading = ref(true);
+const showSearch = ref(true);
+const ids = ref([]);
+const single = ref(true);
+const multiple = ref(true);
+const total = ref(0);
+const title = ref("");
+
+const upload = reactive({
+  // 是否显示弹出层(用户导入)
+  open: false,
+  // 弹出层标题(用户导入)
+  title: '',
+  // 是否禁用上传
+  isUploading: false,
+  // 设置上传的请求头部
+  headers: {Authorization: getToken()},
+  // 上传的地址
+  url: import.meta.env.VITE_APP_BASE_API + '/crmEnterpriseLogistics/importData'
+})
+const handleFileSuccess = (e) => {
+  if (e.code == 200) {
+    ElMessage({
+      type: "success",
+      message: e.msg
+    })
+    getList()
+    proxy.$refs['uploadRef']?.clearFiles()
+  } else {
+    ElMessage({
+      type: "error",
+      message: e.msg
+    })
+    proxy.$refs['uploadRef']?.clearFiles()
+  }
+}
+
+function submitFileForm() {
+  proxy.$refs['uploadRef']?.submit();
+  upload.open = false;
+}
+
+function handleImport() {
+  upload.open = true
+}
+
+const data = reactive({
+  form: {},
+  queryParams: {
+    pageNum: 1,
+    pageSize: 20,
+    companyName: null,
+    unifiedSocialCreditCode: '',
+    cargoName: null,
+    origin: null,
+    destination: null,
+    transportMode: null,
+    annualLogisticsCost: null,
+    partnerCompany: null
+  },
+  rules: {
+  }
+});
+
+const {queryParams, form, rules} = toRefs(data);
+
+/** 查询企业物流信息列表 */
+function getList() {
+  loading.value = true;
+  let toServerObj = likeQueryMethod('unified_social_credit_code', queryParams.value.unifiedSocialCreditCode, queryParams.value.pageNum, queryParams.value.pageSize,'company_name',queryParams.value.companyName);
+  listLogistics(toServerObj).then(response => {
+    logisticsList.value = response.records;
+    total.value = response.total;
+    loading.value = false;
+  });
+}
+
+
+// 表单重置
+function reset() {
+  form.value = {
+    id: null,
+    companyName: null,
+    unifiedSocialCreditCode: '',
+    cargoName: null,
+    origin: null,
+    destination: null,
+    transportMode: null,
+    annualLogisticsCost: null,
+    partnerCompany: null
+  };
+  proxy.resetForm("logisticsRef");
+}
+
+/** 搜索按钮操作 */
+function handleQuery() {
+  queryParams.value.pageNum = 1;
+  getList();
+}
+
+/** 重置按钮操作 */
+function resetQuery() {
+  proxy.resetForm("queryRef");
+  handleQuery();
+}
+
+// 多选框选中数据
+function handleSelectionChange(selection) {
+  ids.value = selection.map(item => item.id);
+  single.value = selection.length != 1;
+  multiple.value = !selection.length;
+}
+
+
+/** 删除按钮操作 */
+async function handleDelete(row) {
+  const res = await delLogistics();
+  if(res.code == 200){
+    ElMessage({
+      type:'success',
+      message:'删除成功'
+    })
+    getList();
+  }
+}
+/** 批量删除*/
+const batchDelete = (row)=>{
+  const idsToS = row.id || ids.value;
+  (proxy.$modal).confirm('是否确认删除这' + idsToS.length+'条的数据项?').then(function() {
+    return delLogisticsBatch(toRaw(idsToS));
+  }).then(() => {
+    getList();
+    proxy.$modal.msgSuccess("删除成功");
+  }).catch(() => {});
+}
+
+/** 导出按钮操作 */
+function handleExport() {
+  proxy.download('crmEnterpriseLogistics/exportData', {
+    ...queryParams.value
+  }, `企业物流信息_${new Date().getTime()}.xlsx`)
+}
+const downloadTemplate = ()=>{
+  proxy.download('crmEnterpriseLogistics/getUploadTemplate',{}, `企业物流信息模板.xlsx`)
+}
+
+getList();
+</script>

+ 47 - 20
src/views/login.vue

@@ -160,41 +160,68 @@
 </script>
 
 <style lang="scss" scoped>
+::v-deep .el-input__inner{
+  background-color: rgba(255,255,255,0.3);
+  border: none;
+}
+::v-deep .el-checkbox{
+  color: #FFFFFF;
+}
+::v-deep .is-checked{
+  color: #FFFFFF;
+}
+::v-deep .el-checkbox__label{
+  color: #FFFFFF !important;
+}
+::v-deep input::placeholder {
+  color: #ffffff;
+}
+::v-deep .el-input__inner{
+  color: #ffffff;
+}
 	.login {
 		display: flex;
 		justify-content: center;
 		align-items: center;
 		height: 100%;
-		background-image: url('../assets/images/login-bg.jpg');
-		background-size: cover;
+		background-image: url('../assets/images/login-bg.png');
+		background-size: auto 100%;
 	}
 
 	.title {
 		margin: 0px auto 30px auto;
 		text-align: center;
-		color: #707070;
+		color: #ffffff;
 	}
 
-	.login-form {
-		border-radius: 6px;
-		background: #ffffff;
-		width: 400px;
-		padding: 25px 25px 5px 25px;
+  .login-form {
+    border-radius: 6px;
+    background: rgba(255, 255, 255, 0.0);
+    width: 400px;
+    padding: 25px 25px 5px 25px;
+    transition: box-shadow 0.3s ease, backdrop-filter 0.3s ease, background 0.3s ease; /* 添加过渡动画 */
 
-		.el-input {
-			height: 40px;
+    .el-input {
+      height: 40px;
 
-			input {
-				height: 40px;
-			}
-		}
+      input {
+        height: 40px;
+      }
+    }
 
-		.input-icon {
-			height: 39px;
-			width: 14px;
-			margin-left: 0px;
-		}
-	}
+    .input-icon {
+      height: 39px;
+      width: 14px;
+      margin-left: 0px;
+    }
+
+    /* 添加鼠标悬停效果 */
+    //&:hover {
+    //  box-shadow: 0 4px 8px rgba(0, 0, 0, 0.2); /* 阴影效果 */
+    //  backdrop-filter: blur(5px); /* 背景模糊效果 */
+    //  background: rgba(255, 255, 255, 0.7); /* 增加背景透明度以配合模糊效果 */
+    //}
+  }
 
 	.login-tip {
 		font-size: 13px;

+ 2 - 2
src/views/visualization/index.vue

@@ -646,7 +646,7 @@ const business = [{
 
 /** 查询社保 */
 function obtaingetSocialSecurity() {
-  getSocialSecurity(queryParams.value).then((res) => {
+  getSocialSecurity().then((res) => {
     res.data = res.data.filter(q=>q.remarks.includes(currentYear.value));
     business[1].value = res.data.length;
     business[1].ratio = (res.data.length / companyNumber.value * 100).toFixed(2) + '%';
@@ -656,7 +656,7 @@ function obtaingetSocialSecurity() {
     let a;
     if(res){
       a = res.filter(q=>{
-        return  q.annualAmount == currentYear.value-1
+        return  q.annualAmount == currentYear.value
       })
       if(a.length>0){
         result = a.length/companyNumber.value*100;

+ 2 - 2
vite.config.js

@@ -5,8 +5,8 @@ import createVitePlugins from './vite/plugins'
 // https://vitejs.dev/config/
 let dev = {
   // shaoyang: `http://42.48.99.5:20002`
-  shaoyang: `http://192.168.110.235:20002`
-  // shaoyang: `http://192.168.110.13:20002`
+  // shaoyang: `http://192.168.110.235:20002`
+  shaoyang: `http://192.168.110.13:20002`
 }
 export default defineConfig(({ mode, command }) => {
   const env = loadEnv(mode, process.cwd())

Някои файлове не бяха показани, защото твърде много файлове са промени