Forráskód Böngészése

feat(qyjydtfx): 新增税收对比分析功能

- 在 ssfzzqy 目录下新增季度和年度税收对比分析页面
- 实现了获取年度和季度税收数据的功能
- 添加了税收对比图表,支持年度和季度数据展示
- 优化了图表展示效果,增加了数据缩放功能
nahida 1 éve
szülő
commit
49c9eaf1bc

+ 173 - 164
src/views/basicData/xcrPayTaxes/index.vue

@@ -69,17 +69,26 @@
 
     <el-table v-loading="loading" :data="xcrPayTaxesList" height="650" @selection-change="handleSelectionChange">
       <el-table-column type="selection" width="55" align="center"/>
-        <el-table-column label="统一社会信用代码" align="center" prop="uniCode" width="200"/>
-                  <el-table-column label="社会信用代码" align="center" prop="socialCreditCode" :show-overflow-tooltip='true' width="150"/>
-                  <el-table-column label="纳税人名称" align="center" prop="taxpayerName" :show-overflow-tooltip='true' width="150"/>
-                  <el-table-column label="第一季" align="center" prop="q1" :show-overflow-tooltip='true' width="150"/>
-                  <el-table-column label="第二季" align="center" prop="q2" :show-overflow-tooltip='true' width="150"/>
-                  <el-table-column label="第三季" align="center" prop="q3" :show-overflow-tooltip='true' width="150"/>
-                  <el-table-column label="第四季" align="center" prop="q4" :show-overflow-tooltip='true' width="150"/>
-                  <el-table-column label="年度" align="center" prop="annualTotal" :show-overflow-tooltip='true' width="150"/>
-                  <el-table-column label="当前是否欠缴税费" align="center" prop="isCurrentArrears" :show-overflow-tooltip='true' width="150"/>
-                  <el-table-column label="欠缴税费金额" align="center" prop="arrearsAmount" :show-overflow-tooltip='true' width="150"/>
-                  <el-table-column label="是否非正常户" align="center" prop="isAbnormalAccount" :show-overflow-tooltip='true' width="150"/>
+      <el-table-column label="统一社会信用代码" align="center" prop="uniCode" width="200"/>
+      <el-table-column label="社会信用代码" align="center" prop="socialCreditCode" :show-overflow-tooltip='true'
+                       width="150"/>
+      <el-table-column label="纳税人名称" align="center" prop="taxpayerName" :show-overflow-tooltip='true' width="150"/>
+      <el-table-column label="第一季" align="center" prop="q1" :show-overflow-tooltip='true' width="150"/>
+      <el-table-column label="第二季" align="center" prop="q2" :show-overflow-tooltip='true' width="150"/>
+      <el-table-column label="第三季" align="center" prop="q3" :show-overflow-tooltip='true' width="150"/>
+      <el-table-column label="第四季" align="center" prop="q4" :show-overflow-tooltip='true' width="150"/>
+      <el-table-column label="年度统计总和" align="center" :show-overflow-tooltip='true' width="150">
+        <template #default="{row}">
+          {{ (row.q1+ row.q2+ row.q3+ row.q4).toFixed(2) }}
+        </template>
+      </el-table-column>
+      <el-table-column label="年度" align="center" prop="annualTotal" :show-overflow-tooltip='true' width="150"/>
+      <el-table-column label="当前是否欠缴税费" align="center" prop="isCurrentArrears" :show-overflow-tooltip='true'
+                       width="150"/>
+      <el-table-column label="欠缴税费金额" align="center" prop="arrearsAmount" :show-overflow-tooltip='true'
+                       width="150"/>
+      <el-table-column label="是否非正常户" align="center" prop="isAbnormalAccount" :show-overflow-tooltip='true'
+                       width="150"/>
     </el-table>
 
     <div style="position: fixed;bottom: 20px;right: 10px;">
@@ -117,177 +126,177 @@
 </template>
 
 <script setup name="Taxes">
-  import {
-    listTaxes,
-    getTaxes,
-    delTaxes,
-    delTaxesBatch
-  } from "@/api/basicData/xcrPayTaxes";
-  import {reactive, ref, toRaw} from "vue";
-  import {getToken} from "@/utils/auth";
-  import {ElMessage} from "element-plus";
-  import {likeQueryMethod} from "@/utils/likeQueryMethod";
+import {delTaxes, delTaxesBatch, listTaxes} from "@/api/basicData/xcrPayTaxes";
+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 {proxy} = getCurrentInstance();
 
-  const xcrPayTaxesList = 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 xcrPayTaxesList = 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 + '/basicData/xcrPayTaxes/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()
-    }
+const upload = reactive({
+  // 是否显示弹出层(用户导入)
+  open: false,
+  // 弹出层标题(用户导入)
+  title: '',
+  // 是否禁用上传
+  isUploading: false,
+  // 设置上传的请求头部
+  headers: {Authorization: getToken()},
+  // 上传的地址
+  url: import.meta.env.VITE_APP_BASE_API + '/basicData/xcrPayTaxes/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 submitFileForm() {
+  proxy.$refs['uploadRef']?.submit();
+  upload.open = false;
+}
+
+function handleImport() {
+  upload.open = true
+}
 
-  function handleImport() {
-    upload.open = true
+const data = reactive({
+  form: {},
+  queryParams: {
+    pageNum: 1,
+    pageSize: 20,
+    socialCreditCode: null,
+    taxpayerName: null,
+    q1: null,
+    q2: null,
+    q3: null,
+    q4: null,
+    annualTotal: null,
+    isCurrentArrears: null,
+    arrearsAmount: null,
+    isAbnormalAccount: null
+  },
+  rules: {
+    socialCreditCode: [
+      {
+        required: true, message: "社会信用代码不能为空", trigger: "blur"
+      }
+    ],
+    taxpayerName: [
+      {
+        required: true, message: "纳税人名称不能为空", trigger: "blur"
+      }
+    ],
   }
+});
 
-  const data = reactive({
-    form: {},
-    queryParams: {
-      pageNum: 1,
-      pageSize: 20,
-                        socialCreditCode: null,
-                        taxpayerName: null,
-                        q1: null,
-                        q2: null,
-                        q3: null,
-                        q4: null,
-                        annualTotal: null,
-                        isCurrentArrears: null,
-                        arrearsAmount: null,
-                        isAbnormalAccount: null
-    },
-    rules: {
-                    socialCreditCode: [
-                {
-                  required: true, message: "社会信用代码不能为空", trigger: "blur" }
-              ],
-                    taxpayerName: [
-                {
-                  required: true, message: "纳税人名称不能为空", trigger: "blur" }
-              ],
-    }
+const {queryParams, form, rules} = toRefs(data);
+
+/** 查询纳税信息列表 */
+function getList() {
+  loading.value = true;
+  let toServerObj = likeQueryMethod('uni_code', queryParams.value.uniCode, queryParams.value.pageNum, queryParams.value.pageSize);
+  listTaxes(toServerObj).then(response => {
+    xcrPayTaxesList.value = response.records;
+    total.value = response.total;
+    loading.value = false;
   });
+}
 
-  const {queryParams, form, rules} = toRefs(data);
 
-  /** 查询纳税信息列表 */
-  function getList() {
-    loading.value = true;
-                                                                                              let toServerObj = likeQueryMethod('uni_code', queryParams.value.uniCode, queryParams.value.pageNum, queryParams.value.pageSize);
-    listTaxes(toServerObj).then(response => {
-            xcrPayTaxesList.value = response.records;
-      total.value = response.total;
-      loading.value = false;
-    });
-  }
+// 表单重置
+function reset() {
+  form.value = {
+    id: null,
+    socialCreditCode: null,
+    taxpayerName: null,
+    q1: null,
+    q2: null,
+    q3: null,
+    q4: null,
+    annualTotal: null,
+    isCurrentArrears: null,
+    arrearsAmount: null,
+    isAbnormalAccount: null
+  };
+  proxy.resetForm("xcrPayTaxesRef");
+}
 
+/** 搜索按钮操作 */
+function handleQuery() {
+  queryParams.value.pageNum = 1;
+  getList();
+}
 
-  // 表单重置
-  function reset() {
-    form.value = {
-                        id: null,
-                        socialCreditCode: null,
-                        taxpayerName: null,
-                        q1: null,
-                        q2: null,
-                        q3: null,
-                        q4: null,
-                        annualTotal: null,
-                        isCurrentArrears: null,
-                        arrearsAmount: null,
-                        isAbnormalAccount: null
-    };
-    proxy.resetForm("xcrPayTaxesRef");
-  }
+/** 重置按钮操作 */
+function resetQuery() {
+  proxy.resetForm("queryRef");
+  handleQuery();
+}
 
-  /** 搜索按钮操作 */
-  function handleQuery() {
-    queryParams.value.pageNum = 1;
-    getList();
-  }
+// 多选框选中数据
+function handleSelectionChange(selection) {
+  ids.value = selection.map(item => item.id);
+  single.value = selection.length != 1;
+  multiple.value = !selection.length;
+}
 
-  /** 重置按钮操作 */
-  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 delTaxes();
+  if (res.code == 200) {
+    ElMessage({
+      type: 'success',
+      message: '删除成功'
+    })
+    getList();
   }
+}
 
+/** 批量删除*/
+const batchDelete = (row) => {
+  const idsToS = row.xhCodeId || ids.value;
+  (proxy.$modal).confirm('是否确认删除这' + idsToS.length + '条的数据项?').then(function () {
+    return delTaxesBatch(toRaw(idsToS));
+  }).then(() => {
+    getList();
+    proxy.$modal.msgSuccess("删除成功");
+  }).catch(() => {
+  });
+}
 
-  /** 删除按钮操作 */
-  async function handleDelete(row) {
-    const res = await delTaxes();
-    if(res.code == 200){
-      ElMessage({
-        type:'success',
-        message:'删除成功'
-      })
-      getList();
-    }
-  }
-  /** 批量删除*/
-  const batchDelete = (row)=>{
-    const idsToS = row.xhCodeId || ids.value;
-    (proxy.$modal).confirm('是否确认删除这' + idsToS.length+'条的数据项?').then(function() {
-      return delTaxesBatch(toRaw(idsToS));
-    }).then(() => {
-      getList();
-      proxy.$modal.msgSuccess("删除成功");
-    }).catch(() => {});
-  }
+/** 导出按钮操作 */
+function handleExport() {
+  proxy.download('basicData/xcrPayTaxes/export', {
+    ...queryParams.value
+  }, `纳税信息_${new Date().getTime()}.xlsx`)
+}
 
-  /** 导出按钮操作 */
-  function handleExport() {
-    proxy.download('basicData/xcrPayTaxes/export', {
-      ...queryParams.value
-    }, `纳税信息_${new Date().getTime()}.xlsx`)
-  }
-  const downloadTemplate = ()=>{
-    proxy.download('basicData/xcrPayTaxes/getUploadTemplate',{}, `纳税信息模板.xlsx`)
-  }
-  getList();
+const downloadTemplate = () => {
+  proxy.download('basicData/xcrPayTaxes/getUploadTemplate', {}, `纳税信息模板.xlsx`)
+}
+getList();
 </script>

+ 38 - 9
src/views/qyjydtfx/dkfx/index.vue

@@ -16,6 +16,8 @@ let bankLoanChart = null;
 const companyNum = ref(0);
 const totalLoanAmount = ref(0);
 const bankLoanPercentageData = ref([]);
+const effectiveYear = ref([]);
+const currentYearTotalAndCount = ref({});
 
 const fetchData = async () => {
   // if (!year.value || !month.value) {
@@ -202,9 +204,32 @@ const updateBankLoanChart = () => {
 
   bankLoanChart.setOption(option);
 };
+const getEffectiveYear = async ()=>{
+  const res = await request("/basicData/xcrSummaryLoanDetails/effective-year-lists");
+  if(res.code !== 200){
+    ElMessage.error("获取当前有效的年份失败")
+  }
+  effectiveYear.value = res.data;
+}
+
+const getCurrentYearTotalAndCount = async ()=>{
+  if(year.value){
+    const res = await request("/basicData/xcrSummaryLoanDetails/annual-statistics",{
+      params:{
+        year:new Date().getFullYear().toString()
+      }
+    });
+    if(res.code !== 200){
+      ElMessage.error("获取当前年度贷款企业数量和贷款总额失败")
+    }
+    currentYearTotalAndCount.value = res.data;
+  }
+}
 
 onMounted(() => {
   fetchData();
+  getEffectiveYear();
+  getCurrentYearTotalAndCount();
 });
 
 watch([year, month], () => {
@@ -246,10 +271,10 @@ onUnmounted(() => {
           <div class="text-2xl font-bold">
             <el-descriptions :column="1" border>
               <el-descriptions-item label="贷款企业数量" label-class-name="w-150px">
-                {{ 22 }}
+                {{ currentYearTotalAndCount.companyNum }}
               </el-descriptions-item>
               <el-descriptions-item label="贷款总额">
-                {{ 12312 }}
+                {{ currentYearTotalAndCount.totalLoanAmount }}
               </el-descriptions-item>
             </el-descriptions>
           </div>
@@ -259,7 +284,10 @@ onUnmounted(() => {
 
     <el-form :inline="true" @submit.prevent="fetchData" class="mb-4">
       <el-form-item label="年份" required>
-        <el-input v-model="year" placeholder="年份" :rules="[{ required: true, message: '年份为必填项' }]"></el-input>
+<!--        <el-input v-model="year" placeholder="年份" :rules="[{ required: true, message: '年份为必填项' }]"></el-input>-->
+        <el-select v-model="year" placeholder="请选择年份" :rules="[{ required: true, message: '年份为必填项' }]" class="w-200px" default-first-option>
+          <el-option v-for="year in effectiveYear" :key="year" :label="year" :value="year"></el-option>
+        </el-select>
       </el-form-item>
       <el-form-item label="月份">
         <el-select clearable v-model="month" class="w-100px" placeholder="月份" :rules="[{ required: true, message: '月份为必填项' }]">
@@ -303,13 +331,14 @@ onUnmounted(() => {
     </div>
 
     <el-table :data="loanData" style="width: 100%" stripe border class="mb-4">
-      <el-table-column prop="disbursementDate" label="放款日期" width="120"></el-table-column>
-      <el-table-column prop="enterpriseName" label="企业名称" width="180"></el-table-column>
-      <el-table-column prop="limitTime" label="还款时间" width="120"></el-table-column>
-      <el-table-column prop="loanAmount" label="贷款金额(万元)" width="120"></el-table-column>
-      <el-table-column prop="nowOfYear" label="当前年份" width="100"></el-table-column>
-      <el-table-column prop="repaidPrincipal" label="已还本金(万元)" width="120"></el-table-column>
+      <el-table-column prop="enterpriseName" label="企业名称"></el-table-column>
       <el-table-column prop="uniCode" label="统一社会信用代码"></el-table-column>
+      <el-table-column prop="disbursementDate" label="发放日期"></el-table-column>
+      <el-table-column prop="limitTime" label="还款时间"></el-table-column>
+      <el-table-column prop="loanAmount" label="贷款金额(万元)"></el-table-column>
+<!--      <el-table-column prop="nowOfYear" label="当前年份"></el-table-column>-->
+      <el-table-column prop="repaidPrincipal" label="已还本金(万元)"></el-table-column>
+      <el-table-column prop="limitTime" label="统计时间"></el-table-column>
     </el-table>
   </div>
 </template>

+ 16 - 11
src/views/qyjydtfx/ssfx/index.vue

@@ -46,10 +46,9 @@ const updateChart = (data, type) => {
   }
 
   // 处理数据
-  const taxpayerNames = data.map(item => item.taxpayerName);
-  const lastYearTaxes = data.map(item => item[type === 'year' ? 'lastYearTaxesTotal' : 'lastYearOfQuarterTaxesTotal']);
-  const thisYearTaxes = data.map(item => item[type === 'year' ? 'thisYearTaxesTotal' : 'thisYearOfQuarterTaxesTotal']);
-
+  const taxpayerNames = data.map(item => item.taxpayerName).reverse();
+  const lastYearTaxes = data.map(item => item[type === 'year' ? 'lastYearTaxesTotal' : 'lastYearOfQuarterTaxesTotal']).reverse();
+  const thisYearTaxes = data.map(item => item[type === 'year' ? 'thisYearTaxesTotal' : 'thisYearOfQuarterTaxesTotal']).reverse();
   // 设置图表配置
   const option = {
     title: {
@@ -62,11 +61,17 @@ const updateChart = (data, type) => {
       data: [getLastYear() + '年税收', getCurrentYear() + '年税收']
     },
     xAxis: {
-      type: 'value'
+      type: 'value',
     },
     yAxis: {
       type: 'category',
-      data: taxpayerNames
+      data: taxpayerNames,
+      axisLabel: {
+        fontSize: 12,
+        formatter: function (value) {
+          return value.length > 10 ? value.substring(0, 10) + '...' : value;
+        }
+      }
     },
     series: [
       {
@@ -84,7 +89,7 @@ const updateChart = (data, type) => {
       type: 'inside', // 这里设置为 slider 类型,表示使用滑动条形式的 dataZoom 组件
       yAxisIndex: 0, // 表示这个 dataZoom 组件控制第一个 y 轴
       start: 100, // 数据窗口范围的起始百分比, 表示从10%的位置开始显示
-      end: 99, // 数据窗口范围的结束百分比, 表示到60%的位置结束
+      end: 97, // 数据窗口范围的结束百分比, 表示到60%的位置结束
       moveOnMouseWheel: true, // 启用滚轮滚动
       moveOnMouseMove: false,
       zoomOnMouseWheel: false,
@@ -92,7 +97,7 @@ const updateChart = (data, type) => {
       type: 'slider', // 这里设置为 slider 类型,表示使用滑动条形式的 dataZoom 组件
       yAxisIndex: 0, // 表示这个 dataZoom 组件控制第一个 y 轴
       start: 100, // 数据窗口范围的起始百分比, 表示从10%的位置开始显示
-      end: 99, // 数据窗口范围的结束百分比, 表示到60%的位置结束
+      end: 97, // 数据窗口范围的结束百分比, 表示到60%的位置结束
       moveOnMouseWheel: true, // 启用滚轮滚动
       moveOnMouseMove: false,
       zoomOnMouseWheel: false,
@@ -132,16 +137,16 @@ const handleTabChange = (tab) => {
   <div>
     <el-tabs @tab-change="handleTabChange">
       <el-tab-pane label="季度税收对比">
-        <el-select v-model="selectedQuarter" placeholder="请选择季度">
+        <el-select v-model="selectedQuarter" placeholder="请选择季度" class="mb-10px">
           <el-option label="第一季度" value="1"></el-option>
           <el-option label="第二季度" value="2"></el-option>
           <el-option label="第三季度" value="3"></el-option>
           <el-option label="第四季度" value="4"></el-option>
         </el-select>
-        <div id="quarterChart" style="width: 90vw; height: 90vh;"></div>
+        <div id="quarterChart" style="width: 90vw; height: 85vh;" ></div>
       </el-tab-pane>
       <el-tab-pane label="年度税收对比">
-        <div id="yearChart" style="width: 90vw; height: 90vh;"></div>
+        <div id="yearChart" style="width: 90vw; height: 85vh;"></div>
       </el-tab-pane>
     </el-tabs>
   </div>

+ 149 - 6
src/views/qyjydtfx/ssfzzqy/index.vue

@@ -1,11 +1,154 @@
 <script setup>
+import request from "@/utils/request.js";
+// 引入ECharts
+import * as echarts from 'echarts';
+import {onMounted, ref, watch} from 'vue';
 
-</script>
+const getData = async () => {
+  const res = await request.get('/basicData/xcrPayTaxes/of-year-negative-incr-list');
+  // 处理数据并更新图表
+  updateChart(res.data.ofYearDetail, 'year');
+}
 
-<template>
-<div>性与暴力</div>
-</template>
+const getCurrentYear = () => {
+  return new Date().getFullYear();
+}
+
+const getLastYear = () => {
+  return new Date().getFullYear() - 1;
+}
+
+const selectedQuarter = ref('1'); // 默认选择第一个季度
+
+const getQuarterData = async () => {
+  console.log(selectedQuarter.value);
+  const res = await request.get('/basicData/xcrPayTaxes/of-quarter-negative-incr-list', {
+    params: {
+      quarter: selectedQuarter.value // 使用选中的季度
+    }
+  });
+  console.log(res);
+  // 处理数据并更新图表
+  updateChart(res.data.ofQuarterDetail, 'quarter');
+}
+
+let yearChartInstance = null;
+let quarterChartInstance = null;
+
+const updateChart = (data, type) => {
+  if (type === 'year') {
+    if (!yearChartInstance) {
+      yearChartInstance = echarts.init(document.getElementById('yearChart'));
+    }
+  } else if (type === 'quarter') {
+    if (!quarterChartInstance) {
+      quarterChartInstance = echarts.init(document.getElementById('quarterChart'));
+    }
+  }
 
-<style scoped lang="scss">
+  // 处理数据
+  const taxpayerNames = data.map(item => item.taxpayerName).reverse();
+  const lastYearTaxes = data.map(item => item[type === 'year' ? 'lastYearTaxesTotal' : 'lastYearOfQuarterTaxesTotal']).reverse();
+  const thisYearTaxes = data.map(item => item[type === 'year' ? 'thisYearTaxesTotal' : 'thisYearOfQuarterTaxesTotal']).reverse();
+  // 设置图表配置
+  const option = {
+    title: {
+      text: type === 'year' ? '年度税收对比' : '季度税收对比'
+    },
+    tooltip: {
+      trigger: 'axis'
+    },
+    legend: {
+      data: [getLastYear() + '年税收', getCurrentYear() + '年税收']
+    },
+    xAxis: {
+      type: 'value',
+    },
+    yAxis: {
+      type: 'category',
+      data: taxpayerNames,
+      axisLabel: {
+        fontSize: 12,
+        formatter: function (value) {
+          return value.length > 10 ? value.substring(0, 10) + '...' : value;
+        }
+      }
+    },
+    series: [
+      {
+        name: getLastYear() + '年税收',
+        type: 'bar',
+        data: lastYearTaxes,
+      },
+      {
+        name: getCurrentYear() + '年税收',
+        type: 'bar',
+        data: thisYearTaxes,
+      }
+    ],
+    dataZoom: [{ // 这是一个 dataZoom 组件,可以控制 x 轴或 y 轴的区域缩放
+      type: 'inside', // 这里设置为 slider 类型,表示使用滑动条形式的 dataZoom 组件
+      yAxisIndex: 0, // 表示这个 dataZoom 组件控制第一个 y 轴
+      start: 100, // 数据窗口范围的起始百分比, 表示从10%的位置开始显示
+      end: 97, // 数据窗口范围的结束百分比, 表示到60%的位置结束
+      moveOnMouseWheel: true, // 启用滚轮滚动
+      moveOnMouseMove: false,
+      zoomOnMouseWheel: false,
+    },{ // 这是一个 dataZoom 组件,可以控制 x 轴或 y 轴的区域缩放
+      type: 'slider', // 这里设置为 slider 类型,表示使用滑动条形式的 dataZoom 组件
+      yAxisIndex: 0, // 表示这个 dataZoom 组件控制第一个 y 轴
+      start: 100, // 数据窗口范围的起始百分比, 表示从10%的位置开始显示
+      end: 97, // 数据窗口范围的结束百分比, 表示到60%的位置结束
+      moveOnMouseWheel: true, // 启用滚轮滚动
+      moveOnMouseMove: false,
+      zoomOnMouseWheel: false,
+    }]
+  };
 
-</style>
+  // 更新图表数据
+  if (type === 'year') {
+    yearChartInstance.setOption(option);
+  } else if (type === 'quarter') {
+    quarterChartInstance.setOption(option);
+  }
+}
+
+const activeTab = ref('year'); // 添加一个变量来记录当前激活的tab
+
+onMounted(() => {
+  getData();
+  getQuarterData();
+})
+
+watch(selectedQuarter, () => {
+  getQuarterData(); // 当季度选择改变时,重新获取数据
+})
+
+// 添加tab-change事件监听
+const handleTabChange = (tab) => {
+  if (tab.props.label === '年度税收对比') {
+    getData();
+  } else if (tab.props.label === '季度税收对比') {
+    getQuarterData();
+  }
+}
+</script>
+
+<template>
+  <div>
+    <el-tabs @tab-change="handleTabChange">
+      <el-tab-pane label="季度税收对比">
+        <el-select v-model="selectedQuarter" placeholder="请选择季度" class="mb-10px">
+          <el-option label="第一季度" value="1"></el-option>
+          <el-option label="第二季度" value="2"></el-option>
+          <el-option label="第三季度" value="3"></el-option>
+          <el-option label="第四季度" value="4"></el-option>
+        </el-select>
+        <div id="quarterChart" style="width: 90vw; height: 85vh;" ></div>
+      </el-tab-pane>
+      <el-tab-pane label="年度税收对比">
+        <div id="yearChart" style="width: 90vw; height: 85vh;"></div>
+      </el-tab-pane>
+    </el-tabs>
+  </div>
+</template>

+ 3 - 3
src/views/xyjsxx/qysbxx/index.vue

@@ -123,12 +123,12 @@ onMounted(() => {
         @selection-change="handleSelectionChange"
     >
       <el-table-column type="selection" width="55"/>
-      <el-table-column prop="complainantIdNumber" label="投诉人身份证号" width="180"/>
+      <el-table-column prop="enterpriseName" label="企业名称" width="180"/>
+      <el-table-column prop="unifiedSocialCreditCode" label="统一社会信用代码" width="180"/>
+      <el-table-column prop="complainantIdNumber" label="上报人身份证号" width="180"/>
       <el-table-column prop="contactInformation" label="联系方式" width="180"/>
       <el-table-column prop="contacts" label="联系人" width="180"/>
       <el-table-column prop="createTime" label="创建时间" width="180"/>
-      <el-table-column prop="enterpriseName" label="企业名称" width="180"/>
-      <el-table-column prop="unifiedSocialCreditCode" label="统一社会信用代码" width="180"/>
       <el-table-column label="文件" width="180">
         <template #default="scope">
           <el-button v-show="scope.row.files.length > 0" type="primary" @click="showFileList(scope.row.files)">查看</el-button>

+ 16 - 3
src/views/xyjsxx/zwxxfb/index.vue

@@ -19,6 +19,7 @@ import {
 import { newsMap } from "./newsMap.js";
 import MyEdit from "@/views/xyjsxx/zwxxfb/components/MyEdit.vue";
 import {Plus} from "@element-plus/icons-vue";
+import {parseTime} from "../../../utils/ruoyi.js";
 
 const tableData = ref([]);
 const currentPage = ref(1);
@@ -269,14 +270,26 @@ onMounted(() => {
           {{ newsMap.get(row.specialColumn) }}
         </template>
       </el-table-column>
-      <el-table-column prop="date" label="发布时间" width="180" :show-overflow-tooltip="true"/>
+      <el-table-column prop="date" label="发布时间" width="180" :show-overflow-tooltip="true">
+        <template #default="{ row }">
+          {{ parseTime(row.date) }}
+        </template>
+      </el-table-column>
       <el-table-column prop="content" label="内容" :show-overflow-tooltip="true"/>
       <el-table-column prop="dataSource" label="数据来源" :show-overflow-tooltip="true"/>
       <el-table-column prop="introduce" label="介绍" :show-overflow-tooltip="true"/>
       <el-table-column prop="createBy" label="创建者" width="180" :show-overflow-tooltip="true"/>
-      <el-table-column prop="createTime" label="创建时间" width="180" :show-overflow-tooltip="true"/>
+      <el-table-column prop="createTime" label="创建时间" width="180" :show-overflow-tooltip="true">
+        <template #default="{ row }">
+          {{ parseTime(row.createTime) }}
+        </template>
+      </el-table-column>
       <el-table-column prop="updateBy" label="更新者" width="180" :show-overflow-tooltip="true"/>
-      <el-table-column prop="updateTime" label="更新时间" width="180" :show-overflow-tooltip="true"/>
+      <el-table-column prop="updateTime" label="更新时间" width="180" :show-overflow-tooltip="true">
+        <template #default="{ row }">
+          {{ parseTime(row.updateTime) }}
+        </template>
+      </el-table-column>
       <el-table-column label="预览">
         <template #default="{ row }">
           <el-button type="primary" size="small" @click="handlePreview(row.content)">预览</el-button>