Procházet zdrojové kódy

人工导入的数据以及信用报告模板的推进

nahida před 1 rokem
rodič
revize
2619069f4b

+ 48 - 0
src/api/basicData/xcrCompanyInfo.js

@@ -0,0 +1,48 @@
+import request from '@/utils/request'
+
+// 查询企业基本信息(天眼查)列表
+export function listInfo(query) {
+  return request({
+    url: '/basicData/xcrCompanyInfo/findByPage',
+    method: 'get',
+    params: query
+  })
+}
+
+// 查询企业基本信息(天眼查)详细
+export function getInfo(xhCodeId) {
+  return request({
+    url: '/basicData/xcrCompanyInfo/' + xhCodeId,
+    method: 'get'
+  })
+}
+
+// 新增企业基本信息(天眼查)
+export function addInfo(data) {
+  return request({
+    url: '/basicData/xcrCompanyInfo',
+    method: 'post',
+    data: data
+  })
+}
+
+// 修改企业基本信息(天眼查)
+export function updateInfo(data) {
+  return request({
+    url: '/basicData/xcrCompanyInfo',
+    method: 'put',
+    data: data
+  })
+}
+
+// 删除企业基本信息(天眼查)
+export function delInfo(xhCodeId) {
+  return request({
+    url: '/basicData/xcrCompanyInfo/deleteAll',
+    method: 'delete'
+  })
+}
+// 批量删除行政许可
+export function delInfoBatch(ids) {
+  return request.post('/basicData/xcrCompanyInfo/delete',ids)
+}

+ 48 - 0
src/api/basicData/xcrFoodInspection.js

@@ -0,0 +1,48 @@
+import request from '@/utils/request'
+
+// 查询食品及食用农产品监督抽检情况汇总列表
+export function listInspection(query) {
+  return request({
+    url: '/basicData/xcrFoodInspection/findByPage',
+    method: 'get',
+    params: query
+  })
+}
+
+// 查询食品及食用农产品监督抽检情况汇总详细
+export function getInspection(xhCodeId) {
+  return request({
+    url: '/basicData/xcrFoodInspection/' + xhCodeId,
+    method: 'get'
+  })
+}
+
+// 新增食品及食用农产品监督抽检情况汇总
+export function addInspection(data) {
+  return request({
+    url: '/basicData/xcrFoodInspection',
+    method: 'post',
+    data: data
+  })
+}
+
+// 修改食品及食用农产品监督抽检情况汇总
+export function updateInspection(data) {
+  return request({
+    url: '/basicData/xcrFoodInspection',
+    method: 'put',
+    data: data
+  })
+}
+
+// 删除食品及食用农产品监督抽检情况汇总
+export function delInspection(xhCodeId) {
+  return request({
+    url: '/basicData/xcrFoodInspection/deleteAll',
+    method: 'delete'
+  })
+}
+// 批量删除行政许可
+export function delInspectionBatch(ids) {
+  return request.post('/basicData/xcrFoodInspection/delete',ids)
+}

+ 48 - 0
src/api/basicData/xcrFoodInspectionDetails.js

@@ -0,0 +1,48 @@
+import request from '@/utils/request'
+
+// 查询流通抽样检验工作汇总列表
+export function listDetails(query) {
+  return request({
+    url: '/basicData/xcrFoodInspectionDetails/findByPage',
+    method: 'get',
+    params: query
+  })
+}
+
+// 查询流通抽样检验工作汇总详细
+export function getDetails(xhCodeId) {
+  return request({
+    url: '/basicData/xcrFoodInspectionDetails/' + xhCodeId,
+    method: 'get'
+  })
+}
+
+// 新增流通抽样检验工作汇总
+export function addDetails(data) {
+  return request({
+    url: '/basicData/xcrFoodInspectionDetails',
+    method: 'post',
+    data: data
+  })
+}
+
+// 修改流通抽样检验工作汇总
+export function updateDetails(data) {
+  return request({
+    url: '/basicData/xcrFoodInspectionDetails',
+    method: 'put',
+    data: data
+  })
+}
+
+// 删除流通抽样检验工作汇总
+export function delDetails(xhCodeId) {
+  return request({
+    url: '/basicData/xcrFoodInspectionDetails/deleteAll',
+    method: 'delete'
+  })
+}
+// 批量删除行政许可
+export function delDetailsBatch(ids) {
+  return request.post('/basicData/xcrFoodInspectionDetails/delete',ids)
+}

+ 48 - 0
src/api/basicData/xcrFoodSamplingInspection.js

@@ -0,0 +1,48 @@
+import request from '@/utils/request'
+
+// 查询流通、餐饮抽样检验工作汇总列表
+export function listInspection(query) {
+  return request({
+    url: '/basicData/xcrFoodSamplingInspection/findByPage',
+    method: 'get',
+    params: query
+  })
+}
+
+// 查询流通、餐饮抽样检验工作汇总详细
+export function getInspection(xhCodeId) {
+  return request({
+    url: '/basicData/xcrFoodSamplingInspection/' + xhCodeId,
+    method: 'get'
+  })
+}
+
+// 新增流通、餐饮抽样检验工作汇总
+export function addInspection(data) {
+  return request({
+    url: '/basicData/xcrFoodSamplingInspection',
+    method: 'post',
+    data: data
+  })
+}
+
+// 修改流通、餐饮抽样检验工作汇总
+export function updateInspection(data) {
+  return request({
+    url: '/basicData/xcrFoodSamplingInspection',
+    method: 'put',
+    data: data
+  })
+}
+
+// 删除流通、餐饮抽样检验工作汇总
+export function delInspection(xhCodeId) {
+  return request({
+    url: '/basicData/xcrFoodSamplingInspection/deleteAll',
+    method: 'delete'
+  })
+}
+// 批量删除行政许可
+export function delInspectionBatch(ids) {
+  return request.post('/basicData/xcrFoodSamplingInspection/delete',ids)
+}

+ 48 - 0
src/api/basicData/xcrPatent.js

@@ -0,0 +1,48 @@
+import request from '@/utils/request'
+
+// 查询专利列表
+export function listPatent(query) {
+  return request({
+    url: '/basicData/xcrPatent/findByPage',
+    method: 'get',
+    params: query
+  })
+}
+
+// 查询专利详细
+export function getPatent(xhCodeId) {
+  return request({
+    url: '/basicData/xcrPatent/' + xhCodeId,
+    method: 'get'
+  })
+}
+
+// 新增专利
+export function addPatent(data) {
+  return request({
+    url: '/basicData/xcrPatent',
+    method: 'post',
+    data: data
+  })
+}
+
+// 修改专利
+export function updatePatent(data) {
+  return request({
+    url: '/basicData/xcrPatent',
+    method: 'put',
+    data: data
+  })
+}
+
+// 删除专利
+export function delPatent(xhCodeId) {
+  return request({
+    url: '/basicData/xcrPatent/deleteAll',
+    method: 'delete'
+  })
+}
+// 批量删除行政许可
+export function delPatentBatch(ids) {
+  return request.post('/basicData/xcrPatent/delete',ids)
+}

+ 48 - 0
src/api/basicData/xcrPublicCreditEvaluation.js

@@ -0,0 +1,48 @@
+import request from '@/utils/request'
+
+// 查询公共信用综合评价结果列表
+export function listEvaluation(query) {
+  return request({
+    url: '/basicData/xcrPublicCreditEvaluation/findByPage',
+    method: 'get',
+    params: query
+  })
+}
+
+// 查询公共信用综合评价结果详细
+export function getEvaluation(xhCodeId) {
+  return request({
+    url: '/basicData/xcrPublicCreditEvaluation/' + xhCodeId,
+    method: 'get'
+  })
+}
+
+// 新增公共信用综合评价结果
+export function addEvaluation(data) {
+  return request({
+    url: '/basicData/xcrPublicCreditEvaluation',
+    method: 'post',
+    data: data
+  })
+}
+
+// 修改公共信用综合评价结果
+export function updateEvaluation(data) {
+  return request({
+    url: '/basicData/xcrPublicCreditEvaluation',
+    method: 'put',
+    data: data
+  })
+}
+
+// 删除公共信用综合评价结果
+export function delEvaluation(xhCodeId) {
+  return request({
+    url: '/basicData/xcrPublicCreditEvaluation/deleteAll',
+    method: 'delete'
+  })
+}
+// 批量删除行政许可
+export function delEvaluationBatch(ids) {
+  return request.post('/basicData/xcrPublicCreditEvaluation/delete',ids)
+}

+ 48 - 0
src/api/basicData/xcrQualificationCertificate.js

@@ -0,0 +1,48 @@
+import request from '@/utils/request'
+
+// 查询资质证书信息列表
+export function listCertificate(query) {
+  return request({
+    url: '/basicData/xcrQualificationCertificate/findByPage',
+    method: 'get',
+    params: query
+  })
+}
+
+// 查询资质证书信息详细
+export function getCertificate(xhCodeId) {
+  return request({
+    url: '/basicData/xcrQualificationCertificate/' + xhCodeId,
+    method: 'get'
+  })
+}
+
+// 新增资质证书信息
+export function addCertificate(data) {
+  return request({
+    url: '/basicData/xcrQualificationCertificate',
+    method: 'post',
+    data: data
+  })
+}
+
+// 修改资质证书信息
+export function updateCertificate(data) {
+  return request({
+    url: '/basicData/xcrQualificationCertificate',
+    method: 'put',
+    data: data
+  })
+}
+
+// 删除资质证书信息
+export function delCertificate(xhCodeId) {
+  return request({
+    url: '/basicData/xcrQualificationCertificate/deleteAll',
+    method: 'delete'
+  })
+}
+// 批量删除行政许可
+export function delCertificateBatch(ids) {
+  return request.post('/basicData/xcrQualificationCertificate/delete',ids)
+}

+ 48 - 0
src/api/basicData/xcrSoftWorks.js

@@ -0,0 +1,48 @@
+import request from '@/utils/request'
+
+// 查询软件著作权列表
+export function listWorks(query) {
+  return request({
+    url: '/basicData/xcrSoftWorks/findByPage',
+    method: 'get',
+    params: query
+  })
+}
+
+// 查询软件著作权详细
+export function getWorks(xhCodeId) {
+  return request({
+    url: '/basicData/xcrSoftWorks/' + xhCodeId,
+    method: 'get'
+  })
+}
+
+// 新增软件著作权
+export function addWorks(data) {
+  return request({
+    url: '/basicData/xcrSoftWorks',
+    method: 'post',
+    data: data
+  })
+}
+
+// 修改软件著作权
+export function updateWorks(data) {
+  return request({
+    url: '/basicData/xcrSoftWorks',
+    method: 'put',
+    data: data
+  })
+}
+
+// 删除软件著作权
+export function delWorks(xhCodeId) {
+  return request({
+    url: '/basicData/xcrSoftWorks/deleteAll',
+    method: 'delete'
+  })
+}
+// 批量删除行政许可
+export function delWorksBatch(ids) {
+  return request.post('/basicData/xcrSoftWorks/delete',ids)
+}

+ 48 - 0
src/api/basicData/xcrTrademark.js

@@ -0,0 +1,48 @@
+import request from '@/utils/request'
+
+// 查询商标列表
+export function listTrademark(query) {
+  return request({
+    url: '/basicData/xcrTrademark/findByPage',
+    method: 'get',
+    params: query
+  })
+}
+
+// 查询商标详细
+export function getTrademark(xhCodeId) {
+  return request({
+    url: '/basicData/xcrTrademark/' + xhCodeId,
+    method: 'get'
+  })
+}
+
+// 新增商标
+export function addTrademark(data) {
+  return request({
+    url: '/basicData/xcrTrademark',
+    method: 'post',
+    data: data
+  })
+}
+
+// 修改商标
+export function updateTrademark(data) {
+  return request({
+    url: '/basicData/xcrTrademark',
+    method: 'put',
+    data: data
+  })
+}
+
+// 删除商标
+export function delTrademark(xhCodeId) {
+  return request({
+    url: '/basicData/xcrTrademark/deleteAll',
+    method: 'delete'
+  })
+}
+// 批量删除行政许可
+export function delTrademarkBatch(ids) {
+  return request.post('/basicData/xcrTrademark/delete',ids)
+}

+ 375 - 101
src/components/CreditReport/index.vue

@@ -1,11 +1,12 @@
 <script setup>
 import html2canvas from 'html2canvas';
 import {jsPDF} from 'jspdf';
-import {ElLoading} from "element-plus";
+import {ElLoading, ElMessage} from "element-plus";
 import request from "@/utils/request.js";
 
 const props = defineProps({
   creditCode: String,
+  closeDialog: Function,
 });
 
 const printContent = async () => {
@@ -14,91 +15,164 @@ const printContent = async () => {
     text: '处理中',
     background: 'rgba(0, 0, 0, 0.7)',
   })
-  //每当加上下一个元素后如果内容超过了1188px则填充空白的div直到满足1188px
-  const e = document.querySelectorAll(".page .page-content");
-  let t = 0;
-  for (let j = 0; j < e.length; j++) {
-    t += e[j].scrollHeight;
-    if (j <= 1) continue;
-    if (t > 1188) {
-      const d = document.createElement("div");
-      d.classList.add("s");
-      d.style.height = 1188 - (t - e[j].scrollHeight) + 'px';
-      e[j - 1].appendChild(d);
-      t = e[j].scrollHeight;
-    }
-  }
-  const elements = document.querySelectorAll('.page');
-  const pdf = new jsPDF('p', 'mm', 'a4');
 
-  const pdfWidth = pdf.internal.pageSize.getWidth();
-  const pdfHeight = pdf.internal.pageSize.getHeight();
-  console.log(pdfHeight);
-  for (let i = 0; i < elements.length; i++) {
-    const element = elements[i];
-    // 使用 html2canvas 将 HTML 元素截图
-    const canvas = await html2canvas(element, {
-      scale: 2, // 提高截图质量
-    });
-    // 将 canvas 转换为图片数据 URL
-    const imgData = canvas.toDataURL('image/png');
-    // 计算图片在 PDF 中的位置
-    const imgProps = pdf.getImageProperties(imgData);
-    const pageHeight = (imgProps.height * pdfWidth) / imgProps.width;
-    // 添加图片到 PDF
-    if (i > 0) {
-      pdf.addPage();
+  try {
+    const e = document.querySelectorAll(".page .page-content");
+    let t = 0;
+    for (let i = 0; i < e.length; i++) {
+      t += e[i].scrollHeight;
+      if (t > 1188) {
+        if (e[i].lastElementChild.children.length <= 3) {
+          const d = document.createElement("div");
+          d.style.height = 1188 - (t - e[i].scrollHeight) + 'px';
+          // d.style.backgroundColor = "#ff0000"
+          e[i - 1].appendChild(d);
+          t = e[i].scrollHeight;
+          while(t>1188){
+            let n = 1;
+            let tempT = 0;
+            tempT = t;
+            for (let j = e[i].lastElementChild.children.length - 1; j >= 0; j--) {
+              const child = e[i].lastElementChild.children[j];
+              const height = child.scrollHeight; // 获取子元素的高度
+              tempT = tempT - height;
+              if(tempT>1188){
+                n++
+              }else {
+                break;
+              }
+            }
+            const c = e[i].querySelector(".table-title").cloneNode(true);
+            c.setAttribute("style", "margin-top:30px")
+            const q = document.createElement("div");
+            q.setAttribute('class', "w-80% mx-a border-black border-solid border-1px")
+            try {
+              for (let k = 0; k < n; k++) {
+                const l = e[i].lastElementChild.lastElementChild;
+                q.appendChild(e[i].lastElementChild?.removeChild(l));
+              }
+            } catch (e) {
+
+            }
+            const children = Array.from(q.children);
+            q.innerHTML = '';
+            children.reverse().forEach(child => q.appendChild(child));
+            e[i].append(c)
+            e[i].append(q)
+            t = c.scrollHeight + 30 + q.scrollHeight;
+          }
+          continue;
+        }
+        while(t>1188){
+          let n = 1;
+          let tempT = 0;
+          tempT = t;
+          for (let j = e[i].lastElementChild.children.length - 1; j >= 0; j--) {
+            const child = e[i].lastElementChild.children[j];
+            const height = child.scrollHeight; // 获取子元素的高度
+            tempT = tempT - height;
+            if(tempT>1188){
+              n++
+            }else {
+              break;
+            }
+          }
+          const c = e[i].querySelector(".table-title").cloneNode(true);
+          c.setAttribute("style", "margin-top:30px")
+          const q = document.createElement("div");
+          q.setAttribute('class', "w-80% mx-a border-black border-solid border-1px")
+          try {
+            for (let k = 0; k < n; k++) {
+              const l = e[i].lastElementChild.lastElementChild;
+              q.appendChild(e[i].lastElementChild?.removeChild(l));
+            }
+          } catch (e) {
+
+          }
+          const children = Array.from(q.children);
+          q.innerHTML = '';
+          children.reverse().forEach(child => q.appendChild(child));
+          e[i].append(c)
+          e[i].append(q)
+          t = c.scrollHeight + 30 + q.scrollHeight;
+        }
+      }
     }
-    pdf.addImage(imgData, 'PNG', 0, 0, pdfWidth, pageHeight);
-    if (canvas.height / 2 > 1188) {
-      //如果高度超过一页,则分页
-      //将canvas对象分为(element.scrollHeight / 1188)份
-      //每份高度1188
-      //再转成图片 顺序添加进pdf中 每份一页
-      for (let j = 1; j <= element.scrollHeight / 1188; j++) {
-        //截取图片
-        const canvas2 = await html2canvas(element, {
-          scale: 2, // 提高截图质量
-        });
-        //将截取的图片转成图片数据 URL
-        const imgData2 = canvas2.toDataURL('image/png');
-        //添加图片到 PDF
+
+    const elements = document.querySelectorAll('.page');
+    const pdf = new jsPDF('p', 'mm', 'a4');
+    const pdfWidth = pdf.internal.pageSize.getWidth();
+    for (let i = 0; i < elements.length; i++) {
+      const element = elements[i];
+      // 使用 html2canvas 将 HTML 元素截图
+      const canvas = await html2canvas(element, {
+        scale: 2, // 提高截图质量
+      });
+      // 将 canvas 转换为图片数据 URL
+      const imgData = canvas.toDataURL('image/png');
+      // 计算图片在 PDF 中的位置
+      const imgProps = pdf.getImageProperties(imgData);
+      const pageHeight = (imgProps.height * pdfWidth) / imgProps.width;
+      // 添加图片到 PDF
+      if (i > 0) {
         pdf.addPage();
-        pdf.addImage(imgData2, 'PNG', 0, -297 * j, pdfWidth, pageHeight);
+      }
+      pdf.addImage(imgData, 'PNG', 0, 0, pdfWidth, pageHeight);
+      if (canvas.height / 2 > 1188) {
+        //如果高度超过一页,则分页
+        //将canvas对象分为(element.scrollHeight / 1188)份
+        //每份高度1188
+        //再转成图片 顺序添加进pdf中 每份一页
+        for (let j = 1; j <= element.scrollHeight / 1188; j++) {
+          //截取图片
+          const canvas2 = await html2canvas(element, {
+            scale: 2, // 提高截图质量
+          });
+          //将截取的图片转成图片数据 URL
+          const imgData2 = canvas2.toDataURL('image/png');
+          //添加图片到 PDF
+          pdf.addPage();
+          pdf.addImage(imgData2, 'PNG', 0, -297 * j, pdfWidth, pageHeight);
+        }
       }
     }
+    // 保存 PDF
+    pdf.save('report.pdf');
+    ElMessage.success("导出成功");
+  } catch (e) {
+    ElMessage.error("当前导出出现问题,请联系管理员或者重试");
+  } finally {
+    loading.close();
+    props.closeDialog();
   }
-
-// 保存 PDF
-  pdf.save('report.pdf');
-  const allS = document.querySelectorAll('.s');
-  // 删除所有s元素
-  allS.forEach((e) => e.remove());
-  loading.close();
 }
 const basicData = ref({
-  a:[],
-  b:{
-    addr:null,
-    site:null,
-    weixin:null
-  },
-  c:{
-    enterpriseName:null,
-    uniCode:null,
-    addr:null,
-    registeredCapital:null,
-    paidInCapital:null,
-    legalRepresentative:null,
-    companyType:null,
-    establishedTime:null,
-    businessTerm:null,
-    sector:null,
-    industryCode:null,
-    compantStatus:null,
-    registrationAuthority:null,
-    businessScope:null
-  }
+  a: [],
+  b: {
+    addr: null,
+    site: null,
+    weixin: null
+  },
+  c: {
+    enterpriseName: null,
+    uniCode: null,
+    addr: null,
+    registeredCapital: null,
+    paidInCapital: null,
+    legalRepresentative: null,
+    companyType: null,
+    establishedTime: null,
+    businessTerm: null,
+    sector: null,
+    industryCode: null,
+    compantStatus: null,
+    registrationAuthority: null,
+    businessScope: null
+  },
+  d: [],
+  e: [],
+  f: [],
+  g: []
 });
 const CD1 = [
   {
@@ -122,16 +196,104 @@ const CD1 = [
     width: '150'
   }
 ]
-const getReport = async ()=>{
-  const res = await request.get('/report/queryByUniCode',{
-    params:{
-      uniCode:props.creditCode
+const CD2 = [
+  {
+    label: '股东名称',
+    prop: 'shareholderName',
+    width: '150'
+  },
+  {
+    label: '股份比例',
+    prop: 'ownershipInterest',
+    width: '50'
+  },
+  {
+    label: '认缴出资额',
+    prop: 'subscribedCapital',
+    width: '100'
+  },
+  {
+    label: '认缴出资日期',
+    prop: 'subscribedCapitalDate',
+    width: '150'
+  }
+]
+const CD3 = [
+  {
+    label: '序号',
+    prop: 'index',
+    width: '150'
+  },
+  {
+    label: '变更项目',
+    prop: 'changeProject',
+    width: '50'
+  },
+  {
+    label: '变更前内容',
+    prop: 'beforeChangeContent',
+    width: '100'
+  },
+  {
+    label: '变更后内容',
+    prop: 'afterChangeContent',
+    width: '150'
+  },
+  {
+    label: '变更日期',
+    prop: 'changeDate',
+    width: '150'
+  }
+]
+const CD4 = [
+  {
+    label: '序号',
+    prop: 'index',
+    width: '150'
+  },
+  {
+    label: '分支机构名称',
+    prop: 'branchName',
+    width: '50'
+  },
+  {
+    label: '负责人',
+    prop: 'head',
+    width: '100'
+  },
+  {
+    label: '登记状态',
+    prop: 'regStatus',
+    width: '150'
+  }
+]
+const CD5 = [
+  {
+    label: '序号',
+    prop: 'index',
+    width: '150'
+  },
+  {
+    label: '被投资企业名称',
+    prop: 'investedEnterprise',
+    width: '50'
+  },
+  {
+    label: '被投资企业代码',
+    prop: 'investedUniCode',
+    width: '100'
+  }
+]
+const getReport = async () => {
+  const res = await request.get('/report/queryByUniCode', {
+    params: {
+      uniCode: props.creditCode
     }
   });
+  // res.data.g = [...res.data.g,...res.data.g,...res.data.g]
   basicData.value = res.data;
-  console.log(basicData.value);
 }
-const init = ()=>{
+const init = () => {
   getReport()
 }
 init()
@@ -161,13 +323,14 @@ init()
       </div>
     </el-col>
     <el-col :span="24" class="page w-840px text-black p-20px tracking-widest font-songti">
-      <div class="page-content pt-30px">
+      <div class="page-content">
         <div class="text-center text-30px font-800">一、企业基本信息</div>
         <div class="w-80% mx-a line-height-50px text-24px text-black">1、联系信息</div>
         <div class="w-80% mx-a line-height-24px text-16px">1.1&nbsp;实际经营地址:<span
-            class="underline">{{basicData.b.addr}}</span></div>
+            class="underline">{{ basicData.b.addr }}</span></div>
         <div class="w-80% mx-a line-height-24px text-16px">1.2&nbsp;企业网址:<span
-            class="underline">{{basicData.b.site}}</span>&nbsp;微信公众号:<span class="underline">{{basicData.b.weixin}}</span></div>
+            class="underline">{{ basicData.b.site }}</span>&nbsp;微信公众号:<span
+            class="underline">{{ basicData.b.weixin }}</span></div>
         <div class="w-80% mx-a line-height-24px text-16px">1.3&nbsp;主要人物联系信息</div>
         <div class="w-80% mx-a grid grid-cols-4 border-black border-solid border-1px">
           <div v-for="(item, index) in CD1" :key="index"
@@ -193,33 +356,144 @@ init()
         <div class="w-80% mx-a line-height-50px text-24px text-black">2、工商注册信息</div>
         <div class="w-80% mx-a grid grid-cols-4 border-black border-solid border-1px">
           <div class="line-height-25px border-black border-solid border-1px text-center bg-gray">企业名称</div>
-          <div class="line-height-25px border-black border-solid border-1px text-center">{{basicData.c.enterpriseName}}</div>
+          <div class="line-height-25px border-black border-solid border-1px text-center">
+            {{ basicData.c.enterpriseName }}
+          </div>
           <div class="line-height-25px border-black border-solid border-1px text-center bg-gray">统一社会信用代码</div>
-          <div class="line-height-25px border-black border-solid border-1px text-center">{{basicData.c.uniCode}}</div>
+          <div class="line-height-25px border-black border-solid border-1px text-center">{{ basicData.c.uniCode }}</div>
           <div class="line-height-25px border-black border-solid border-1px text-center bg-gray">住所</div>
-          <div class="line-height-25px border-black border-solid border-1px text-center col-span-3">{{basicData.c.addr}}</div>
+          <div class="line-height-25px border-black border-solid border-1px text-center col-span-3">
+            {{ basicData.c.addr }}
+          </div>
           <div class="line-height-25px border-black border-solid border-1px text-center bg-gray">注册资本</div>
-          <div class="line-height-25px border-black border-solid border-1px text-center">{{basicData.c.registeredCapital}}</div>
+          <div class="line-height-25px border-black border-solid border-1px text-center">
+            {{ basicData.c.registeredCapital }}
+          </div>
           <div class="line-height-25px border-black border-solid border-1px text-center bg-gray">实收资本</div>
-          <div class="line-height-25px border-black border-solid border-1px text-center">{{basicData.c.paidInCapital}}</div>
+          <div class="line-height-25px border-black border-solid border-1px text-center">
+            {{ basicData.c.paidInCapital }}
+          </div>
           <div class="line-height-25px border-black border-solid border-1px text-center bg-gray">法定代表人姓名</div>
-          <div class="line-height-25px border-black border-solid border-1px text-center">{{basicData.c.legalRepresentative}}</div>
+          <div class="line-height-25px border-black border-solid border-1px text-center">
+            {{ basicData.c.legalRepresentative }}
+          </div>
           <div class="line-height-25px border-black border-solid border-1px text-center bg-gray">公司类型</div>
-          <div class="line-height-25px border-black border-solid border-1px text-center">{{basicData.c.companyType}}</div>
+          <div class="line-height-25px border-black border-solid border-1px text-center">{{ basicData.c.companyType }}
+          </div>
           <div class="line-height-25px border-black border-solid border-1px text-center bg-gray">成立日期</div>
-          <div class="line-height-25px border-black border-solid border-1px text-center">{{basicData.c.establishedTime}}</div>
+          <div class="line-height-25px border-black border-solid border-1px text-center">
+            {{ basicData.c.establishedTime }}
+          </div>
           <div class="line-height-25px border-black border-solid border-1px text-center bg-gray">营业期限</div>
-          <div class="line-height-25px border-black border-solid border-1px text-center">{{basicData.c.businessTerm}}</div>
+          <div class="line-height-25px border-black border-solid border-1px text-center">
+            {{ basicData.c.businessTerm }}
+          </div>
           <div class="line-height-25px border-black border-solid border-1px text-center bg-gray">所属行业</div>
-          <div class="line-height-25px border-black border-solid border-1px text-center">{{basicData.c.sector}}</div>
+          <div class="line-height-25px border-black border-solid border-1px text-center">{{ basicData.c.sector }}</div>
           <div class="line-height-25px border-black border-solid border-1px text-center bg-gray">行业代码</div>
-          <div class="line-height-25px border-black border-solid border-1px text-center">{{basicData.c.industryCode}}</div>
+          <div class="line-height-25px border-black border-solid border-1px text-center">
+            {{ basicData.c.industryCode }}
+          </div>
           <div class="line-height-25px border-black border-solid border-1px text-center bg-gray">企业状态</div>
-          <div class="line-height-25px border-black border-solid border-1px text-center">{{basicData.c.compantStatus}}</div>
+          <div class="line-height-25px border-black border-solid border-1px text-center">
+            {{ basicData.c.compantStatus }}
+          </div>
           <div class="line-height-25px border-black border-solid border-1px text-center bg-gray">登记机关</div>
-          <div class="line-height-25px border-black border-solid border-1px text-center">{{basicData.c.registrationAuthority}}</div>
+          <div class="line-height-25px border-black border-solid border-1px text-center">
+            {{ basicData.c.registrationAuthority }}
+          </div>
           <div class="line-height-25px border-black border-solid border-1px text-center bg-gray">经营范围</div>
-          <div class="line-height-25px border-black border-solid border-1px text-center col-span-3">{{basicData.c.businessScope}}</div>
+          <div class="line-height-25px border-black border-solid border-1px text-center col-span-3">
+            {{ basicData.c.businessScope }}
+          </div>
+        </div>
+      </div>
+      <div class="page-content pt-30px">
+        <div class="w-80% mx-a line-height-50px text-24px text-black">3、股东信息</div>
+        <div class="table-title w-80% mx-a grid grid-cols-[35%_15%_25%_25%] border-black border-solid border-1px">
+          <div v-for="(item, index) in CD2" :key="index"
+               class="flex-1 border-black border-solid border-1px text-center bg-gray h-25px"><span
+              class="line-height-25px">{{ item.label }}</span>
+          </div>
+        </div>
+        <div class="w-80% mx-a border-black border-solid border-1px">
+          <div v-for="(item, index) in basicData.d" :key="index"
+               class="grid grid-cols-[35%_15%_25%_25%]  text-center">
+            <div class="border-black border-b-solid border-l-solid border-r-solid border-0.1px"><span
+                class="line-height-25px">{{ item.shareholderName }}</span></div>
+            <div class="border-black border-b-solid border-l-solid border-r-solid border-0.1px"><span
+                class="line-height-25px">{{ item.ownershipInterest }}</span></div>
+            <div class="border-black border-b-solid border-l-solid border-r-solid border-0.1px"><span
+                class="line-height-25px">{{ item.subscribedCapital }}</span></div>
+            <div class="border-black border-b-solid border-l-solid border-r-solid border-0.1px"><span
+                class="line-height-25px">{{ item.subscribedCapitalDate }}</span></div>
+          </div>
+        </div>
+      </div>
+      <div class="page-content pt-30px">
+        <div class="w-80% mx-a line-height-50px text-24px text-black">4、工商变更信息</div>
+        <div class="table-title w-80% mx-a grid grid-cols-[6%_23.5%_23.5%_26.5%_20.5%] border-black border-solid border-1px">
+          <div v-for="(item, index) in CD3" :key="index"
+               class="flex-1 border-black border-solid border-1px text-center bg-gray h-25px"><span
+              class="line-height-25px">{{ item.label }}</span>
+          </div>
+        </div>
+        <div class="w-80% mx-a border-black border-solid border-1px">
+          <div v-for="(item, index) in basicData.e" :key="index"
+               class="grid grid-cols-[6%_23.5%_23.5%_26.5%_20.5%]  text-center">
+            <div class="border-black border-b-solid border-l-solid border-r-solid border-0.1px"><span
+                class="line-height-25px ">{{ index+1 }}</span></div>
+            <div class="border-black border-b-solid border-l-solid border-r-solid border-0.1px"><span
+                class="line-height-25px">{{ item.changeProject }}</span></div>
+            <div class="border-black border-b-solid border-l-solid border-r-solid border-0.1px"><span
+                class="line-height-25px">{{ item.beforeChangeContent }}</span></div>
+            <div class="border-black border-b-solid border-l-solid border-r-solid border-0.1px"><span
+                class="line-height-25px">{{ item.afterChangeContent }}</span></div>
+            <div class="border-black border-b-solid border-l-solid border-r-solid border-0.1px"><span
+                class="line-height-25px">{{ item.changeDate }}</span></div>
+          </div>
+        </div>
+      </div>
+      <div class="page-content pt-30px">
+        <div class="w-80% mx-a line-height-50px text-24px text-black">5、分支机构</div>
+        <div class="table-title w-80% mx-a grid grid-cols-[6%_44%_25%_25%] border-black border-solid border-1px">
+          <div v-for="(item, index) in CD4" :key="index"
+               class="flex-1 border-black border-solid border-1px text-center bg-gray h-25px"><span
+              class="line-height-25px">{{ item.label }}</span>
+          </div>
+        </div>
+        <div class="w-80% mx-a border-black border-solid border-1px">
+          <div v-for="(item, index) in basicData.f" :key="index"
+               class="grid grid-cols-[6%_44%_25%_25%]  text-center">
+            <div class="border-black border-b-solid border-l-solid border-r-solid border-0.1px"><span
+                class="line-height-25px ">{{ index+1 }}</span></div>
+            <div class="border-black border-b-solid border-l-solid border-r-solid border-0.1px"><span
+                class="line-height-25px">{{ item.branchName }}</span></div>
+            <div class="border-black border-b-solid border-l-solid border-r-solid border-0.1px"><span
+                class="line-height-25px">{{ item.head }}</span></div>
+            <div class="border-black border-b-solid border-l-solid border-r-solid border-0.1px"><span
+                class="line-height-25px">{{ item.regStatus }}</span></div>
+          </div>
+        </div>
+      </div>
+      <div class="page-content pt-30px">
+        <div class="w-80% mx-a line-height-50px text-24px text-black">6、对外投资</div>
+        <div class="table-title w-80% mx-a grid grid-cols-[36%_30%_34%] border-black border-solid border-1px">
+          <div v-for="(item, index) in CD5" :key="index"
+               class="flex-1 border-black border-solid border-1px text-center bg-gray h-25px"><span
+              class="line-height-25px">{{ item.label }}</span>
+          </div>
+        </div>
+        <div class="w-80% mx-a border-black border-solid border-1px">
+          <div v-for="(item, index) in basicData.g" :key="index"
+               class="grid grid-cols-[36%_30%_34%]  text-center">
+            <div class="border-black border-b-solid border-l-solid border-r-solid border-0.1px"><span
+                class="line-height-25px ">{{ index+1 }}</span></div>
+            <div class="border-black border-b-solid border-l-solid border-r-solid border-0.1px"><span
+                class="line-height-25px">{{ item.investedEnterprise }}</span></div>
+            <div class="border-black border-b-solid border-l-solid border-r-solid border-0.1px"><span
+                class="line-height-25px">{{ item.investedUniCode }}</span></div>
+          </div>
         </div>
       </div>
     </el-col>

+ 375 - 0
src/views/basicData/xcrCompanyInfo/index.vue

@@ -0,0 +1,375 @@
+<template>
+  <div class="app-container">
+    <el-form :model="queryParams" ref="queryRef" :inline="true" v-show="showSearch" label-width="68px">
+                  <el-form-item label="统一社会信用代码" prop="uniCode" label-width="200">
+                    <el-input
+                        v-model="queryParams.uniCode"
+                        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-button
+            type="warning"
+            plain
+            icon="Download"
+            @click="handleExport"
+            :disabled="!xcrCompanyInfoList.length"
+            v-hasPermi="['basicData:xcrCompanyInfo:export']"
+        >导出
+        </el-button>
+      </el-col>
+      <el-col :span="1.5">
+        <el-button
+            type="info"
+            plain
+            icon="Upload"
+            @click="handleImport"
+            v-hasPermi="['basicData:xcrCompanyInfo:import']"
+        >导入
+        </el-button>
+      </el-col>
+      <el-col :span="1.5">
+        <el-button
+            type="danger"
+            plain
+            icon="Delete"
+            @click="batchDelete"
+            v-hasPermi="['basicData:xcrCompanyInfo:delete']"
+            :disabled="ids.length === 0"
+        >批量删除
+        </el-button>
+      </el-col>
+      <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:info:delete']"
+            >清除全表
+            </el-button>
+          </template>
+        </el-popconfirm>
+      </el-col>
+      <el-col :span="1.5">
+        <el-button type="success" plain icon="Download" @click="downloadTemplate">
+          下载导入模板
+        </el-button>
+      </el-col>
+    </el-row>
+
+    <el-table v-loading="loading" :data="xcrCompanyInfoList" 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="companyName" :show-overflow-tooltip='true' width="150"/>
+                  <el-table-column label="登记状态" align="center" prop="registrationStatus" :show-overflow-tooltip='true' width="150"/>
+                  <el-table-column label="法定代表人" align="center" prop="legalRepresentative" :show-overflow-tooltip='true' width="150"/>
+                  <el-table-column label="企业规模" align="center" prop="enterpriseScale" :show-overflow-tooltip='true' width="150"/>
+                  <el-table-column label="注册资本" align="center" prop="registeredCapital" :show-overflow-tooltip='true' width="150"/>
+                  <el-table-column label="实缴资本" align="center" prop="actualPaidCapital" :show-overflow-tooltip='true' width="150"/>
+              <el-table-column label="成立日期" align="center" prop="establishmentDate" width="180">
+                <template #default="scope">
+                  <span>{{ parseTime(scope.row.establishmentDate, '{y}-{m}-{d}') }}</span>
+                </template>
+              </el-table-column>
+              <el-table-column label="核准日期" align="center" prop="approvalDate" width="180">
+                <template #default="scope">
+                  <span>{{ parseTime(scope.row.approvalDate, '{y}-{m}-{d}') }}</span>
+                </template>
+              </el-table-column>
+                  <el-table-column label="营业期限" align="center" prop="businessTerm" :show-overflow-tooltip='true' width="150"/>
+                  <el-table-column label="所属省份" align="center" prop="province" :show-overflow-tooltip='true' width="150"/>
+                  <el-table-column label="所属城市" align="center" prop="city" :show-overflow-tooltip='true' width="150"/>
+                  <el-table-column label="所属区县" align="center" prop="district" :show-overflow-tooltip='true' width="150"/>
+                  <el-table-column label="公司类型" align="center" prop="companyType" :show-overflow-tooltip='true' width="150"/>
+                  <el-table-column label="国标行业门类" align="center" prop="nationalIndustryCategory" :show-overflow-tooltip='true' width="150"/>
+                  <el-table-column label="国标行业大类" align="center" prop="nationalIndustryMajorClass" :show-overflow-tooltip='true' width="150"/>
+                  <el-table-column label="国标行业中类" align="center" prop="nationalIndustryMiddleClass" :show-overflow-tooltip='true' width="150"/>
+                  <el-table-column label="曾用名,可以有多个,使用文本类型" align="center" prop="formerNames" :show-overflow-tooltip='true' width="150"/>
+                  <el-table-column label="英文名" align="center" prop="englishName" :show-overflow-tooltip='true' width="150"/>
+                  <el-table-column label="统一社会信用代码" align="center" prop="unifiedSocialCreditCode" :show-overflow-tooltip='true' width="150"/>
+                  <el-table-column label="纳税人识别号" align="center" prop="taxpayerIdentificationNumber" :show-overflow-tooltip='true' width="150"/>
+                  <el-table-column label="注册号" align="center" prop="registrationNumber" :show-overflow-tooltip='true' width="150"/>
+                  <el-table-column label="组织机构代码" align="center" prop="organizationCode" :show-overflow-tooltip='true' width="150"/>
+                  <el-table-column label="参保人数" align="center" prop="insuredPersonnelCount" :show-overflow-tooltip='true' width="150"/>
+                  <el-table-column label="参保人数所属年报年份" align="center" prop="insuredPersonnelYear" :show-overflow-tooltip='true' width="150"/>
+                  <el-table-column label="有效手机号" align="center" prop="validPhone" :show-overflow-tooltip='true' width="150"/>
+                  <el-table-column label="更多电话,可以有多个,使用文本类型" align="center" prop="additionalPhones" :show-overflow-tooltip='true' width="150"/>
+                  <el-table-column label="注册地址" align="center" prop="registeredAddress" :show-overflow-tooltip='true' width="150"/>
+                  <el-table-column label="最新年报地址" align="center" prop="latestAnnualReportAddress" :show-overflow-tooltip='true' width="150"/>
+                  <el-table-column label="通信地址" align="center" prop="mailingAddress" :show-overflow-tooltip='true' width="150"/>
+                  <el-table-column label="网址" align="center" prop="websiteUrl" :show-overflow-tooltip='true' width="150"/>
+                  <el-table-column label="邮箱" align="center" prop="email" :show-overflow-tooltip='true' width="150"/>
+                  <el-table-column label="其他邮箱,可以有多个,使用文本类型" align="center" prop="otherEmails" :show-overflow-tooltip='true' width="150"/>
+                  <el-table-column label="经营范围" align="center" prop="businessScope" :show-overflow-tooltip='true' width="150"/>
+                  <el-table-column label="天眼评分" align="center" prop="tianyanScore" :show-overflow-tooltip='true' width="150"/>
+    </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="Info">
+  import {
+    listInfo,
+    getInfo,
+    delInfo,
+    delInfoBatch
+  } from "@/api/basicData/xcrCompanyInfo";
+  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 xcrCompanyInfoList = 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/xcrCompanyInfo/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,
+                        registrationStatus: null,
+                        legalRepresentative: null,
+                        enterpriseScale: null,
+                        registeredCapital: null,
+                        actualPaidCapital: null,
+                        establishmentDate: null,
+                        approvalDate: null,
+                        businessTerm: null,
+                        province: null,
+                        city: null,
+                        district: null,
+                        companyType: null,
+                        nationalIndustryCategory: null,
+                        nationalIndustryMajorClass: null,
+                        nationalIndustryMiddleClass: null,
+                        formerNames: null,
+                        englishName: null,
+                        unifiedSocialCreditCode: null,
+                        taxpayerIdentificationNumber: null,
+                        registrationNumber: null,
+                        organizationCode: null,
+                        insuredPersonnelCount: null,
+                        insuredPersonnelYear: null,
+                        validPhone: null,
+                        additionalPhones: null,
+                        registeredAddress: null,
+                        latestAnnualReportAddress: null,
+                        mailingAddress: null,
+                        websiteUrl: null,
+                        email: null,
+                        otherEmails: null,
+                        businessScope: null,
+                        tianyanScore: null,
+                        uniCode: ''
+    },
+    rules: {
+    }
+  });
+
+  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);
+    listInfo(toServerObj).then(response => {
+            xcrCompanyInfoList.value = response.records;
+      total.value = response.total;
+      loading.value = false;
+    });
+  }
+
+
+  // 表单重置
+  function reset() {
+    form.value = {
+                        xhCodeId: null,
+                        companyName: null,
+                registrationStatus: "0",
+                        legalRepresentative: null,
+                        enterpriseScale: null,
+                        registeredCapital: null,
+                        actualPaidCapital: null,
+                        establishmentDate: null,
+                        approvalDate: null,
+                        businessTerm: null,
+                        province: null,
+                        city: null,
+                        district: null,
+                        companyType: null,
+                        nationalIndustryCategory: null,
+                        nationalIndustryMajorClass: null,
+                        nationalIndustryMiddleClass: null,
+                        formerNames: null,
+                        englishName: null,
+                        unifiedSocialCreditCode: null,
+                        taxpayerIdentificationNumber: null,
+                        registrationNumber: null,
+                        organizationCode: null,
+                        insuredPersonnelCount: null,
+                        insuredPersonnelYear: null,
+                        validPhone: null,
+                        additionalPhones: null,
+                        registeredAddress: null,
+                        latestAnnualReportAddress: null,
+                        mailingAddress: null,
+                        websiteUrl: null,
+                        email: null,
+                        otherEmails: null,
+                        businessScope: null,
+                        tianyanScore: null,
+                        uniCode: ''
+    };
+    proxy.resetForm("xcrCompanyInfoRef");
+  }
+
+  /** 搜索按钮操作 */
+  function handleQuery() {
+    queryParams.value.pageNum = 1;
+    getList();
+  }
+
+  /** 重置按钮操作 */
+  function resetQuery() {
+    proxy.resetForm("queryRef");
+    handleQuery();
+  }
+
+  // 多选框选中数据
+  function handleSelectionChange(selection) {
+    ids.value = selection.map(item => item.xhCodeId);
+    single.value = selection.length != 1;
+    multiple.value = !selection.length;
+  }
+
+
+  /** 删除按钮操作 */
+  async function handleDelete(row) {
+    const res = await delInfo();
+    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 delInfoBatch(toRaw(idsToS));
+    }).then(() => {
+      getList();
+      proxy.$modal.msgSuccess("删除成功");
+    }).catch(() => {});
+  }
+
+  /** 导出按钮操作 */
+  function handleExport() {
+    proxy.download('basicData/xcrCompanyInfo/export', {
+      ...queryParams.value
+    }, `企业基本信息(天眼查)_${new Date().getTime()}.xlsx`)
+  }
+  const downloadTemplate = ()=>{
+    proxy.download('basicData/xcrCompanyInfo/getUploadTemplate',{}, `企业基本信息(天眼查)模板.xlsx`)
+  }
+  getList();
+</script>

+ 296 - 0
src/views/basicData/xcrFoodInspection/index.vue

@@ -0,0 +1,296 @@
+<template>
+  <div class="app-container">
+    <el-form :model="queryParams" ref="queryRef" :inline="true" v-show="showSearch" label-width="68px">
+                  <el-form-item label="统一社会信用代码" prop="uniCode" label-width="200">
+                    <el-input
+                        v-model="queryParams.uniCode"
+                        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-button
+            type="warning"
+            plain
+            icon="Download"
+            @click="handleExport"
+            :disabled="!xcrFoodInspectionList.length"
+            v-hasPermi="['basicData:xcrFoodInspection:export']"
+        >导出
+        </el-button>
+      </el-col>
+      <el-col :span="1.5">
+        <el-button
+            type="info"
+            plain
+            icon="Upload"
+            @click="handleImport"
+            v-hasPermi="['basicData:xcrFoodInspection:import']"
+        >导入
+        </el-button>
+      </el-col>
+      <el-col :span="1.5">
+        <el-button
+            type="danger"
+            plain
+            icon="Delete"
+            @click="batchDelete"
+            v-hasPermi="['basicData:xcrFoodInspection:delete']"
+            :disabled="ids.length === 0"
+        >批量删除
+        </el-button>
+      </el-col>
+      <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:inspection:delete']"
+            >清除全表
+            </el-button>
+          </template>
+        </el-popconfirm>
+      </el-col>
+      <el-col :span="1.5">
+        <el-button type="success" plain icon="Download" @click="downloadTemplate">
+          下载导入模板
+        </el-button>
+      </el-col>
+    </el-row>
+
+    <el-table v-loading="loading" :data="xcrFoodInspectionList" 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="samplingDate" width="180">
+                <template #default="scope">
+                  <span>{{ parseTime(scope.row.samplingDate, '{y}-{m}-{d}') }}</span>
+                </template>
+              </el-table-column>
+                  <el-table-column label="产品名称" align="center" prop="productName" :show-overflow-tooltip='true' width="150"/>
+                  <el-table-column label="食品大类" align="center" prop="foodCategoryMajor" :show-overflow-tooltip='true' width="150"/>
+                  <el-table-column label="食品细类" align="center" prop="foodCategoryMinor" :show-overflow-tooltip='true' width="150"/>
+                  <el-table-column label="被抽样单位" align="center" prop="sampledCompanyName" :show-overflow-tooltip='true' width="150"/>
+                  <el-table-column label="被抽样单位地址" align="center" prop="sampledCompanyAddress" :show-overflow-tooltip='true' width="150"/>
+                  <el-table-column label="检测项目" align="center" prop="inspectionItems" :show-overflow-tooltip='true' width="150"/>
+                  <el-table-column label="检测结果" align="center" prop="inspectionResult" :show-overflow-tooltip='true' width="150"/>
+                  <el-table-column label="任务源" align="center" prop="taskSource" :show-overflow-tooltip='true' width="150"/>
+    </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="Inspection">
+  import {
+    listInspection,
+    getInspection,
+    delInspection,
+    delInspectionBatch
+  } from "@/api/basicData/xcrFoodInspection";
+  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 xcrFoodInspectionList = 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/xcrFoodInspection/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,
+                        samplingDate: null,
+                        productName: null,
+                        foodCategoryMajor: null,
+                        foodCategoryMinor: null,
+                        sampledCompanyName: null,
+                        sampledCompanyAddress: null,
+                        inspectionItems: null,
+                        inspectionResult: null,
+                        taskSource: null,
+                        uniCode: ''
+    },
+    rules: {
+    }
+  });
+
+  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);
+    listInspection(toServerObj).then(response => {
+            xcrFoodInspectionList.value = response.records;
+      total.value = response.total;
+      loading.value = false;
+    });
+  }
+
+
+  // 表单重置
+  function reset() {
+    form.value = {
+                        xhCodeId: null,
+                        samplingDate: null,
+                        productName: null,
+                        foodCategoryMajor: null,
+                        foodCategoryMinor: null,
+                        sampledCompanyName: null,
+                        sampledCompanyAddress: null,
+                        inspectionItems: null,
+                        inspectionResult: null,
+                        taskSource: null,
+                        uniCode: ''
+    };
+    proxy.resetForm("xcrFoodInspectionRef");
+  }
+
+  /** 搜索按钮操作 */
+  function handleQuery() {
+    queryParams.value.pageNum = 1;
+    getList();
+  }
+
+  /** 重置按钮操作 */
+  function resetQuery() {
+    proxy.resetForm("queryRef");
+    handleQuery();
+  }
+
+  // 多选框选中数据
+  function handleSelectionChange(selection) {
+    ids.value = selection.map(item => item.xhCodeId);
+    single.value = selection.length != 1;
+    multiple.value = !selection.length;
+  }
+
+
+  /** 删除按钮操作 */
+  async function handleDelete(row) {
+    const res = await delInspection();
+    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 delInspectionBatch(toRaw(idsToS));
+    }).then(() => {
+      getList();
+      proxy.$modal.msgSuccess("删除成功");
+    }).catch(() => {});
+  }
+
+  /** 导出按钮操作 */
+  function handleExport() {
+    proxy.download('basicData/xcrFoodInspection/export', {
+      ...queryParams.value
+    }, `食品及食用农产品监督抽检情况汇总_${new Date().getTime()}.xlsx`)
+  }
+  const downloadTemplate = ()=>{
+    proxy.download('basicData/xcrFoodInspection/getUploadTemplate',{}, `食品及食用农产品监督抽检情况汇总模板.xlsx`)
+  }
+  getList();
+</script>

+ 357 - 0
src/views/basicData/xcrFoodInspectionDetails/index.vue

@@ -0,0 +1,357 @@
+<template>
+  <div class="app-container">
+    <el-form :model="queryParams" ref="queryRef" :inline="true" v-show="showSearch" label-width="68px">
+                  <el-form-item label="统一社会信用代码" prop="uniCode" label-width="200">
+                    <el-input
+                        v-model="queryParams.uniCode"
+                        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-button
+            type="warning"
+            plain
+            icon="Download"
+            @click="handleExport"
+            :disabled="!xcrFoodInspectionDetailsList.length"
+            v-hasPermi="['basicData:xcrFoodInspectionDetails:export']"
+        >导出
+        </el-button>
+      </el-col>
+      <el-col :span="1.5">
+        <el-button
+            type="info"
+            plain
+            icon="Upload"
+            @click="handleImport"
+            v-hasPermi="['basicData:xcrFoodInspectionDetails:import']"
+        >导入
+        </el-button>
+      </el-col>
+      <el-col :span="1.5">
+        <el-button
+            type="danger"
+            plain
+            icon="Delete"
+            @click="batchDelete"
+            v-hasPermi="['basicData:xcrFoodInspectionDetails:delete']"
+            :disabled="ids.length === 0"
+        >批量删除
+        </el-button>
+      </el-col>
+      <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:details:delete']"
+            >清除全表
+            </el-button>
+          </template>
+        </el-popconfirm>
+      </el-col>
+      <el-col :span="1.5">
+        <el-button type="success" plain icon="Download" @click="downloadTemplate">
+          下载导入模板
+        </el-button>
+      </el-col>
+    </el-row>
+
+    <el-table v-loading="loading" :data="xcrFoodInspectionDetailsList" 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="inspectionField" :show-overflow-tooltip='true' width="150"/>
+                  <el-table-column label="抽样单位" align="center" prop="samplingUnit" :show-overflow-tooltip='true' width="150"/>
+                  <el-table-column label="被抽样单位所在地市" align="center" prop="cityOfSampledCompany" :show-overflow-tooltip='true' width="150"/>
+                  <el-table-column label="食品大类" align="center" prop="foodCategoryMajor" :show-overflow-tooltip='true' width="150"/>
+                  <el-table-column label="食品亚类" align="center" prop="foodCategorySubmajor" :show-overflow-tooltip='true' width="150"/>
+                  <el-table-column label="食品次亚类" align="center" prop="foodCategorySubminor" :show-overflow-tooltip='true' width="150"/>
+                  <el-table-column label="食品细类" align="center" prop="foodCategoryMinor" :show-overflow-tooltip='true' width="150"/>
+                  <el-table-column label="报告书编号" align="center" prop="reportNumber" :show-overflow-tooltip='true' width="150"/>
+                  <el-table-column label="抽样单号" align="center" prop="sampleNumber" :show-overflow-tooltip='true' width="150"/>
+                  <el-table-column label="产品名称" align="center" prop="productName" :show-overflow-tooltip='true' width="150"/>
+                  <el-table-column label="规格型号" align="center" prop="specificationModel" :show-overflow-tooltip='true' width="150"/>
+                  <el-table-column label="商标" align="center" prop="trademark" :show-overflow-tooltip='true' width="150"/>
+              <el-table-column label="生产日期" align="center" prop="productionDate" width="180">
+                <template #default="scope">
+                  <span>{{ parseTime(scope.row.productionDate, '{y}-{m}-{d}') }}</span>
+                </template>
+              </el-table-column>
+              <el-table-column label="抽样日期" align="center" prop="samplingDate" width="180">
+                <template #default="scope">
+                  <span>{{ parseTime(scope.row.samplingDate, '{y}-{m}-{d}') }}</span>
+                </template>
+              </el-table-column>
+                  <el-table-column label="受检单位" align="center" prop="inspectedCompanyName" :show-overflow-tooltip='true' width="150"/>
+                  <el-table-column label="受检单位地址" align="center" prop="inspectedCompanyAddress" :show-overflow-tooltip='true' width="150"/>
+                  <el-table-column label="受检单位联系人" align="center" prop="inspectedCompanyContactPerson" :show-overflow-tooltip='true' width="150"/>
+                  <el-table-column label="受检单位电话" align="center" prop="inspectedCompanyPhone" :show-overflow-tooltip='true' width="150"/>
+                  <el-table-column label="生产单位" align="center" prop="manufacturingCompanyName" :show-overflow-tooltip='true' width="150"/>
+                  <el-table-column label="生产单位地址" align="center" prop="manufacturingCompanyAddress" :show-overflow-tooltip='true' width="150"/>
+                  <el-table-column label="检验项目" align="center" prop="inspectionItems" :show-overflow-tooltip='true' width="150"/>
+                  <el-table-column label="检验结果" align="center" prop="inspectionResult" :show-overflow-tooltip='true' width="150"/>
+                  <el-table-column label="不合格项目" align="center" prop="nonconformityItems" :show-overflow-tooltip='true' width="150"/>
+                  <el-table-column label="标准要求" align="center" prop="standardRequirements" :show-overflow-tooltip='true' width="150"/>
+                  <el-table-column label="实测值" align="center" prop="measuredValue" :show-overflow-tooltip='true' width="150"/>
+                  <el-table-column label="项目单位" align="center" prop="projectUnits" :show-overflow-tooltip='true' width="150"/>
+                  <el-table-column label="任务性质" align="center" prop="taskNature" :show-overflow-tooltip='true' width="150"/>
+                  <el-table-column label="备注" align="center" prop="remarks" :show-overflow-tooltip='true' width="150"/>
+    </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="Details">
+  import {
+    listDetails,
+    getDetails,
+    delDetails,
+    delDetailsBatch
+  } from "@/api/basicData/xcrFoodInspectionDetails";
+  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 xcrFoodInspectionDetailsList = 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/xcrFoodInspectionDetails/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,
+                        inspectionField: null,
+                        samplingUnit: null,
+                        cityOfSampledCompany: null,
+                        foodCategoryMajor: null,
+                        foodCategorySubmajor: null,
+                        foodCategorySubminor: null,
+                        foodCategoryMinor: null,
+                        reportNumber: null,
+                        sampleNumber: null,
+                        productName: null,
+                        specificationModel: null,
+                        trademark: null,
+                        productionDate: null,
+                        samplingDate: null,
+                        inspectedCompanyName: null,
+                        inspectedCompanyAddress: null,
+                        inspectedCompanyContactPerson: null,
+                        inspectedCompanyPhone: null,
+                        manufacturingCompanyName: null,
+                        manufacturingCompanyAddress: null,
+                        inspectionItems: null,
+                        inspectionResult: null,
+                        nonconformityItems: null,
+                        standardRequirements: null,
+                        measuredValue: null,
+                        projectUnits: null,
+                        taskNature: null,
+                        remarks: null,
+                        uniCode: ''
+    },
+    rules: {
+    }
+  });
+
+  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);
+    listDetails(toServerObj).then(response => {
+            xcrFoodInspectionDetailsList.value = response.records;
+      total.value = response.total;
+      loading.value = false;
+    });
+  }
+
+
+  // 表单重置
+  function reset() {
+    form.value = {
+                        xhCodeId: null,
+                        inspectionField: null,
+                        samplingUnit: null,
+                        cityOfSampledCompany: null,
+                        foodCategoryMajor: null,
+                        foodCategorySubmajor: null,
+                        foodCategorySubminor: null,
+                        foodCategoryMinor: null,
+                        reportNumber: null,
+                        sampleNumber: null,
+                        productName: null,
+                        specificationModel: null,
+                        trademark: null,
+                        productionDate: null,
+                        samplingDate: null,
+                        inspectedCompanyName: null,
+                        inspectedCompanyAddress: null,
+                        inspectedCompanyContactPerson: null,
+                        inspectedCompanyPhone: null,
+                        manufacturingCompanyName: null,
+                        manufacturingCompanyAddress: null,
+                        inspectionItems: null,
+                        inspectionResult: null,
+                        nonconformityItems: null,
+                        standardRequirements: null,
+                        measuredValue: null,
+                        projectUnits: null,
+                        taskNature: null,
+                        remarks: null,
+                        uniCode: ''
+    };
+    proxy.resetForm("xcrFoodInspectionDetailsRef");
+  }
+
+  /** 搜索按钮操作 */
+  function handleQuery() {
+    queryParams.value.pageNum = 1;
+    getList();
+  }
+
+  /** 重置按钮操作 */
+  function resetQuery() {
+    proxy.resetForm("queryRef");
+    handleQuery();
+  }
+
+  // 多选框选中数据
+  function handleSelectionChange(selection) {
+    ids.value = selection.map(item => item.xhCodeId);
+    single.value = selection.length != 1;
+    multiple.value = !selection.length;
+  }
+
+
+  /** 删除按钮操作 */
+  async function handleDelete(row) {
+    const res = await delDetails();
+    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 delDetailsBatch(toRaw(idsToS));
+    }).then(() => {
+      getList();
+      proxy.$modal.msgSuccess("删除成功");
+    }).catch(() => {});
+  }
+
+  /** 导出按钮操作 */
+  function handleExport() {
+    proxy.download('basicData/xcrFoodInspectionDetails/export', {
+      ...queryParams.value
+    }, `流通抽样检验工作汇总_${new Date().getTime()}.xlsx`)
+  }
+  const downloadTemplate = ()=>{
+    proxy.download('basicData/xcrFoodInspectionDetails/getUploadTemplate',{}, `流通抽样检验工作汇总模板.xlsx`)
+  }
+  getList();
+</script>

+ 321 - 0
src/views/basicData/xcrFoodSamplingInspection/index.vue

@@ -0,0 +1,321 @@
+<template>
+  <div class="app-container">
+    <el-form :model="queryParams" ref="queryRef" :inline="true" v-show="showSearch" label-width="68px">
+                  <el-form-item label="统一社会信用代码" prop="uniCode" label-width="200">
+                    <el-input
+                        v-model="queryParams.uniCode"
+                        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-button
+            type="warning"
+            plain
+            icon="Download"
+            @click="handleExport"
+            :disabled="!xcrFoodSamplingInspectionList.length"
+            v-hasPermi="['basicData:xcrFoodSamplingInspection:export']"
+        >导出
+        </el-button>
+      </el-col>
+      <el-col :span="1.5">
+        <el-button
+            type="info"
+            plain
+            icon="Upload"
+            @click="handleImport"
+            v-hasPermi="['basicData:xcrFoodSamplingInspection:import']"
+        >导入
+        </el-button>
+      </el-col>
+      <el-col :span="1.5">
+        <el-button
+            type="danger"
+            plain
+            icon="Delete"
+            @click="batchDelete"
+            v-hasPermi="['basicData:xcrFoodSamplingInspection:delete']"
+            :disabled="ids.length === 0"
+        >批量删除
+        </el-button>
+      </el-col>
+      <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:inspection:delete']"
+            >清除全表
+            </el-button>
+          </template>
+        </el-popconfirm>
+      </el-col>
+      <el-col :span="1.5">
+        <el-button type="success" plain icon="Download" @click="downloadTemplate">
+          下载导入模板
+        </el-button>
+      </el-col>
+    </el-row>
+
+    <el-table v-loading="loading" :data="xcrFoodSamplingInspectionList" 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="samplingDate" width="180">
+                <template #default="scope">
+                  <span>{{ parseTime(scope.row.samplingDate, '{y}-{m}-{d}') }}</span>
+                </template>
+              </el-table-column>
+                  <el-table-column label="产品名称" align="center" prop="productName" :show-overflow-tooltip='true' width="150"/>
+                  <el-table-column label="食品大类" align="center" prop="foodCategoryMajor" :show-overflow-tooltip='true' width="150"/>
+                  <el-table-column label="被抽样单位" align="center" prop="sampledCompanyName" :show-overflow-tooltip='true' width="150"/>
+                  <el-table-column label="被抽样单位地址" align="center" prop="sampledCompanyAddress" :show-overflow-tooltip='true' width="150"/>
+                  <el-table-column label="抽检环节" align="center" prop="inspectionStage" :show-overflow-tooltip='true' width="150"/>
+                  <el-table-column label="业态类型" align="center" prop="businessType" :show-overflow-tooltip='true' width="150"/>
+                  <el-table-column label="检测项目" align="center" prop="inspectionItems" :show-overflow-tooltip='true' width="150"/>
+                  <el-table-column label="检测结果" align="center" prop="inspectionResult" :show-overflow-tooltip='true' width="150"/>
+                  <el-table-column label="不合格项目" align="center" prop="nonconformityItems" :show-overflow-tooltip='true' width="150"/>
+                  <el-table-column label="备注" align="center" prop="remarks" :show-overflow-tooltip='true' width="150"/>
+                  <el-table-column label="商标" align="center" prop="trademark" :show-overflow-tooltip='true' width="150"/>
+                  <el-table-column label="执行标准" align="center" prop="standardExecuted" :show-overflow-tooltip='true' width="150"/>
+                  <el-table-column label="规格型号" align="center" prop="modelSpecification" :show-overflow-tooltip='true' width="150"/>
+              <el-table-column label="生产加工购进日期" align="center" prop="productionPurchaseDate" width="180">
+                <template #default="scope">
+                  <span>{{ parseTime(scope.row.productionPurchaseDate, '{y}-{m}-{d}') }}</span>
+                </template>
+              </el-table-column>
+                  <el-table-column label="检测依据" align="center" prop="testingBasis" :show-overflow-tooltip='true' width="150"/>
+    </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="Inspection">
+  import {
+    listInspection,
+    getInspection,
+    delInspection,
+    delInspectionBatch
+  } from "@/api/basicData/xcrFoodSamplingInspection";
+  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 xcrFoodSamplingInspectionList = 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/xcrFoodSamplingInspection/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,
+                        samplingDate: null,
+                        productName: null,
+                        foodCategoryMajor: null,
+                        sampledCompanyName: null,
+                        sampledCompanyAddress: null,
+                        inspectionStage: null,
+                        businessType: null,
+                        inspectionItems: null,
+                        inspectionResult: null,
+                        nonconformityItems: null,
+                        remarks: null,
+                        trademark: null,
+                        standardExecuted: null,
+                        modelSpecification: null,
+                        productionPurchaseDate: null,
+                        testingBasis: null,
+                        uniCode: ''
+    },
+    rules: {
+    }
+  });
+
+  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);
+    listInspection(toServerObj).then(response => {
+            xcrFoodSamplingInspectionList.value = response.records;
+      total.value = response.total;
+      loading.value = false;
+    });
+  }
+
+
+  // 表单重置
+  function reset() {
+    form.value = {
+                        xhCodeId: null,
+                        samplingDate: null,
+                        productName: null,
+                        foodCategoryMajor: null,
+                        sampledCompanyName: null,
+                        sampledCompanyAddress: null,
+                        inspectionStage: null,
+                        businessType: null,
+                        inspectionItems: null,
+                        inspectionResult: null,
+                        nonconformityItems: null,
+                        remarks: null,
+                        trademark: null,
+                        standardExecuted: null,
+                        modelSpecification: null,
+                        productionPurchaseDate: null,
+                        testingBasis: null,
+                        uniCode: ''
+    };
+    proxy.resetForm("xcrFoodSamplingInspectionRef");
+  }
+
+  /** 搜索按钮操作 */
+  function handleQuery() {
+    queryParams.value.pageNum = 1;
+    getList();
+  }
+
+  /** 重置按钮操作 */
+  function resetQuery() {
+    proxy.resetForm("queryRef");
+    handleQuery();
+  }
+
+  // 多选框选中数据
+  function handleSelectionChange(selection) {
+    ids.value = selection.map(item => item.xhCodeId);
+    single.value = selection.length != 1;
+    multiple.value = !selection.length;
+  }
+
+
+  /** 删除按钮操作 */
+  async function handleDelete(row) {
+    const res = await delInspection();
+    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 delInspectionBatch(toRaw(idsToS));
+    }).then(() => {
+      getList();
+      proxy.$modal.msgSuccess("删除成功");
+    }).catch(() => {});
+  }
+
+  /** 导出按钮操作 */
+  function handleExport() {
+    proxy.download('basicData/xcrFoodSamplingInspection/export', {
+      ...queryParams.value
+    }, `流通、餐饮抽样检验工作汇总_${new Date().getTime()}.xlsx`)
+  }
+  const downloadTemplate = ()=>{
+    proxy.download('basicData/xcrFoodSamplingInspection/getUploadTemplate',{}, `流通、餐饮抽样检验工作汇总模板.xlsx`)
+  }
+  getList();
+</script>

+ 287 - 0
src/views/basicData/xcrPatent/index.vue

@@ -0,0 +1,287 @@
+<template>
+  <div class="app-container">
+    <el-form :model="queryParams" ref="queryRef" :inline="true" v-show="showSearch" label-width="68px">
+                  <el-form-item label="统一社会信用代码" prop="uniCode" label-width="200">
+                    <el-input
+                        v-model="queryParams.uniCode"
+                        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-button
+            type="warning"
+            plain
+            icon="Download"
+            @click="handleExport"
+            :disabled="!xcrPatentList.length"
+            v-hasPermi="['basicData:xcrPatent:export']"
+        >导出
+        </el-button>
+      </el-col>
+      <el-col :span="1.5">
+        <el-button
+            type="info"
+            plain
+            icon="Upload"
+            @click="handleImport"
+            v-hasPermi="['basicData:xcrPatent:import']"
+        >导入
+        </el-button>
+      </el-col>
+      <el-col :span="1.5">
+        <el-button
+            type="danger"
+            plain
+            icon="Delete"
+            @click="batchDelete"
+            v-hasPermi="['basicData:xcrPatent:delete']"
+            :disabled="ids.length === 0"
+        >批量删除
+        </el-button>
+      </el-col>
+      <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:patent:delete']"
+            >清除全表
+            </el-button>
+          </template>
+        </el-popconfirm>
+      </el-col>
+      <el-col :span="1.5">
+        <el-button type="success" plain icon="Download" @click="downloadTemplate">
+          下载导入模板
+        </el-button>
+      </el-col>
+    </el-row>
+
+    <el-table v-loading="loading" :data="xcrPatentList" 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="entName" :show-overflow-tooltip='true' width="150"/>
+                  <el-table-column label="专利名称" align="center" prop="patentName" :show-overflow-tooltip='true' width="150"/>
+                  <el-table-column label="专利类型" align="center" prop="patentType" :show-overflow-tooltip='true' width="150"/>
+                  <el-table-column label="专利状态" align="center" prop="patentStatus" :show-overflow-tooltip='true' width="150"/>
+              <el-table-column label="公开" align="center" prop="publicDate" width="180">
+                <template #default="scope">
+                  <span>{{ parseTime(scope.row.publicDate, '{y}-{m}-{d}') }}</span>
+                </template>
+              </el-table-column>
+                  <el-table-column label="发明" align="center" prop="inventor" :show-overflow-tooltip='true' width="150"/>
+    </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="Patent">
+  import {
+    listPatent,
+    getPatent,
+    delPatent,
+    delPatentBatch
+  } from "@/api/basicData/xcrPatent";
+  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 xcrPatentList = 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/xcrPatent/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,
+                        entName: null,
+                        uniCode: '',
+                        patentName: null,
+                        patentType: null,
+                        patentStatus: null,
+                        publicDate: null,
+                        inventor: null
+    },
+    rules: {
+    }
+  });
+
+  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);
+    listPatent(toServerObj).then(response => {
+            xcrPatentList.value = response.records;
+      total.value = response.total;
+      loading.value = false;
+    });
+  }
+
+
+  // 表单重置
+  function reset() {
+    form.value = {
+                        xhCodeId: null,
+                        entName: null,
+                        uniCode: '',
+                        patentName: null,
+                        patentType: null,
+                patentStatus: "0",
+                        publicDate: null,
+                        inventor: null
+    };
+    proxy.resetForm("xcrPatentRef");
+  }
+
+  /** 搜索按钮操作 */
+  function handleQuery() {
+    queryParams.value.pageNum = 1;
+    getList();
+  }
+
+  /** 重置按钮操作 */
+  function resetQuery() {
+    proxy.resetForm("queryRef");
+    handleQuery();
+  }
+
+  // 多选框选中数据
+  function handleSelectionChange(selection) {
+    ids.value = selection.map(item => item.xhCodeId);
+    single.value = selection.length != 1;
+    multiple.value = !selection.length;
+  }
+
+
+  /** 删除按钮操作 */
+  async function handleDelete(row) {
+    const res = await delPatent();
+    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 delPatentBatch(toRaw(idsToS));
+    }).then(() => {
+      getList();
+      proxy.$modal.msgSuccess("删除成功");
+    }).catch(() => {});
+  }
+
+  /** 导出按钮操作 */
+  function handleExport() {
+    proxy.download('basicData/xcrPatent/export', {
+      ...queryParams.value
+    }, `专利_${new Date().getTime()}.xlsx`)
+  }
+  const downloadTemplate = ()=>{
+    proxy.download('basicData/xcrPatent/getUploadTemplate',{}, `专利模板.xlsx`)
+  }
+  getList();
+</script>

+ 274 - 0
src/views/basicData/xcrPublicCreditEvaluation/index.vue

@@ -0,0 +1,274 @@
+<template>
+  <div class="app-container">
+    <el-form :model="queryParams" ref="queryRef" :inline="true" v-show="showSearch" label-width="68px">
+                  <el-form-item label="统一社会信用代码" prop="uniCode" label-width="200">
+                    <el-input
+                        v-model="queryParams.uniCode"
+                        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-button
+            type="warning"
+            plain
+            icon="Download"
+            @click="handleExport"
+            :disabled="!xcrPublicCreditEvaluationList.length"
+            v-hasPermi="['basicData:xcrPublicCreditEvaluation:export']"
+        >导出
+        </el-button>
+      </el-col>
+      <el-col :span="1.5">
+        <el-button
+            type="info"
+            plain
+            icon="Upload"
+            @click="handleImport"
+            v-hasPermi="['basicData:xcrPublicCreditEvaluation:import']"
+        >导入
+        </el-button>
+      </el-col>
+      <el-col :span="1.5">
+        <el-button
+            type="danger"
+            plain
+            icon="Delete"
+            @click="batchDelete"
+            v-hasPermi="['basicData:xcrPublicCreditEvaluation:delete']"
+            :disabled="ids.length === 0"
+        >批量删除
+        </el-button>
+      </el-col>
+      <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:evaluation:delete']"
+            >清除全表
+            </el-button>
+          </template>
+        </el-popconfirm>
+      </el-col>
+      <el-col :span="1.5">
+        <el-button type="success" plain icon="Download" @click="downloadTemplate">
+          下载导入模板
+        </el-button>
+      </el-col>
+    </el-row>
+
+    <el-table v-loading="loading" :data="xcrPublicCreditEvaluationList" 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="entName" :show-overflow-tooltip='true' width="150"/>
+                  <el-table-column label="评价得分" align="center" prop="evaluationScore" :show-overflow-tooltip='true' width="150"/>
+                  <el-table-column label="评价等级" align="center" prop="evaluationLevel" :show-overflow-tooltip='true' width="150"/>
+    </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="Evaluation">
+  import {
+    listEvaluation,
+    getEvaluation,
+    delEvaluation,
+    delEvaluationBatch
+  } from "@/api/basicData/xcrPublicCreditEvaluation";
+  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 xcrPublicCreditEvaluationList = 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/xcrPublicCreditEvaluation/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,
+                        uniCode: '',
+                        entName: null,
+                        evaluationScore: null,
+                        evaluationLevel: null
+    },
+    rules: {
+    }
+  });
+
+  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);
+    listEvaluation(toServerObj).then(response => {
+            xcrPublicCreditEvaluationList.value = response.records;
+      total.value = response.total;
+      loading.value = false;
+    });
+  }
+
+
+  // 表单重置
+  function reset() {
+    form.value = {
+                        xhCodeId: null,
+                        uniCode: '',
+                        entName: null,
+                        evaluationScore: null,
+                        evaluationLevel: null
+    };
+    proxy.resetForm("xcrPublicCreditEvaluationRef");
+  }
+
+  /** 搜索按钮操作 */
+  function handleQuery() {
+    queryParams.value.pageNum = 1;
+    getList();
+  }
+
+  /** 重置按钮操作 */
+  function resetQuery() {
+    proxy.resetForm("queryRef");
+    handleQuery();
+  }
+
+  // 多选框选中数据
+  function handleSelectionChange(selection) {
+    ids.value = selection.map(item => item.xhCodeId);
+    single.value = selection.length != 1;
+    multiple.value = !selection.length;
+  }
+
+
+  /** 删除按钮操作 */
+  async function handleDelete(row) {
+    const res = await delEvaluation();
+    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 delEvaluationBatch(toRaw(idsToS));
+    }).then(() => {
+      getList();
+      proxy.$modal.msgSuccess("删除成功");
+    }).catch(() => {});
+  }
+
+  /** 导出按钮操作 */
+  function handleExport() {
+    proxy.download('basicData/xcrPublicCreditEvaluation/export', {
+      ...queryParams.value
+    }, `公共信用综合评价结果_${new Date().getTime()}.xlsx`)
+  }
+  const downloadTemplate = ()=>{
+    proxy.download('basicData/xcrPublicCreditEvaluation/getUploadTemplate',{}, `公共信用综合评价结果模板.xlsx`)
+  }
+  getList();
+</script>

+ 291 - 0
src/views/basicData/xcrQualificationCertificate/index.vue

@@ -0,0 +1,291 @@
+<template>
+  <div class="app-container">
+    <el-form :model="queryParams" ref="queryRef" :inline="true" v-show="showSearch" label-width="68px">
+                  <el-form-item label="统一社会信用代码" prop="uniCode" label-width="200">
+                    <el-input
+                        v-model="queryParams.uniCode"
+                        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-button
+            type="warning"
+            plain
+            icon="Download"
+            @click="handleExport"
+            :disabled="!xcrQualificationCertificateList.length"
+            v-hasPermi="['basicData:xcrQualificationCertificate:export']"
+        >导出
+        </el-button>
+      </el-col>
+      <el-col :span="1.5">
+        <el-button
+            type="info"
+            plain
+            icon="Upload"
+            @click="handleImport"
+            v-hasPermi="['basicData:xcrQualificationCertificate:import']"
+        >导入
+        </el-button>
+      </el-col>
+      <el-col :span="1.5">
+        <el-button
+            type="danger"
+            plain
+            icon="Delete"
+            @click="batchDelete"
+            v-hasPermi="['basicData:xcrQualificationCertificate:delete']"
+            :disabled="ids.length === 0"
+        >批量删除
+        </el-button>
+      </el-col>
+      <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:certificate:delete']"
+            >清除全表
+            </el-button>
+          </template>
+        </el-popconfirm>
+      </el-col>
+      <el-col :span="1.5">
+        <el-button type="success" plain icon="Download" @click="downloadTemplate">
+          下载导入模板
+        </el-button>
+      </el-col>
+    </el-row>
+
+    <el-table v-loading="loading" :data="xcrQualificationCertificateList" 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="entName" :show-overflow-tooltip='true' width="150"/>
+              <el-table-column label="发证日期" align="center" prop="certificateIssuanceDate" width="180">
+                <template #default="scope">
+                  <span>{{ parseTime(scope.row.certificateIssuanceDate, '{y}-{m}-{d}') }}</span>
+                </template>
+              </el-table-column>
+                  <el-table-column label="证书类型" align="center" prop="certificateType" :show-overflow-tooltip='true' width="150"/>
+                  <el-table-column label="产品名称及单元(主)" align="center" prop="productName" :show-overflow-tooltip='true' width="150"/>
+                  <el-table-column label="证书编号" align="center" prop="certificateNo" :show-overflow-tooltip='true' width="150"/>
+              <el-table-column label="截止日期" align="center" prop="deadlineDate" width="180">
+                <template #default="scope">
+                  <span>{{ parseTime(scope.row.deadlineDate, '{y}-{m}-{d}') }}</span>
+                </template>
+              </el-table-column>
+    </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="Certificate">
+  import {
+    listCertificate,
+    getCertificate,
+    delCertificate,
+    delCertificateBatch
+  } from "@/api/basicData/xcrQualificationCertificate";
+  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 xcrQualificationCertificateList = 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/xcrQualificationCertificate/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,
+                        entName: null,
+                        uniCode: '',
+                        certificateIssuanceDate: null,
+                        certificateType: null,
+                        productName: null,
+                        certificateNo: null,
+                        deadlineDate: null
+    },
+    rules: {
+    }
+  });
+
+  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);
+    listCertificate(toServerObj).then(response => {
+            xcrQualificationCertificateList.value = response.records;
+      total.value = response.total;
+      loading.value = false;
+    });
+  }
+
+
+  // 表单重置
+  function reset() {
+    form.value = {
+                        xhCodeId: null,
+                        entName: null,
+                        uniCode: '',
+                        certificateIssuanceDate: null,
+                        certificateType: null,
+                        productName: null,
+                        certificateNo: null,
+                        deadlineDate: null
+    };
+    proxy.resetForm("xcrQualificationCertificateRef");
+  }
+
+  /** 搜索按钮操作 */
+  function handleQuery() {
+    queryParams.value.pageNum = 1;
+    getList();
+  }
+
+  /** 重置按钮操作 */
+  function resetQuery() {
+    proxy.resetForm("queryRef");
+    handleQuery();
+  }
+
+  // 多选框选中数据
+  function handleSelectionChange(selection) {
+    ids.value = selection.map(item => item.xhCodeId);
+    single.value = selection.length != 1;
+    multiple.value = !selection.length;
+  }
+
+
+  /** 删除按钮操作 */
+  async function handleDelete(row) {
+    const res = await delCertificate();
+    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 delCertificateBatch(toRaw(idsToS));
+    }).then(() => {
+      getList();
+      proxy.$modal.msgSuccess("删除成功");
+    }).catch(() => {});
+  }
+
+  /** 导出按钮操作 */
+  function handleExport() {
+    proxy.download('basicData/xcrQualificationCertificate/export', {
+      ...queryParams.value
+    }, `资质证书信息_${new Date().getTime()}.xlsx`)
+  }
+  const downloadTemplate = ()=>{
+    proxy.download('basicData/xcrQualificationCertificate/getUploadTemplate',{}, `资质证书信息模板.xlsx`)
+  }
+  getList();
+</script>

+ 291 - 0
src/views/basicData/xcrSoftWorks/index.vue

@@ -0,0 +1,291 @@
+<template>
+  <div class="app-container">
+    <el-form :model="queryParams" ref="queryRef" :inline="true" v-show="showSearch" label-width="68px">
+                  <el-form-item label="统一社会信用代码" prop="uniCode" label-width="200">
+                    <el-input
+                        v-model="queryParams.uniCode"
+                        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-button
+            type="warning"
+            plain
+            icon="Download"
+            @click="handleExport"
+            :disabled="!xcrSoftWorksList.length"
+            v-hasPermi="['basicData:xcrSoftWorks:export']"
+        >导出
+        </el-button>
+      </el-col>
+      <el-col :span="1.5">
+        <el-button
+            type="info"
+            plain
+            icon="Upload"
+            @click="handleImport"
+            v-hasPermi="['basicData:xcrSoftWorks:import']"
+        >导入
+        </el-button>
+      </el-col>
+      <el-col :span="1.5">
+        <el-button
+            type="danger"
+            plain
+            icon="Delete"
+            @click="batchDelete"
+            v-hasPermi="['basicData:xcrSoftWorks:delete']"
+            :disabled="ids.length === 0"
+        >批量删除
+        </el-button>
+      </el-col>
+      <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:works:delete']"
+            >清除全表
+            </el-button>
+          </template>
+        </el-popconfirm>
+      </el-col>
+      <el-col :span="1.5">
+        <el-button type="success" plain icon="Download" @click="downloadTemplate">
+          下载导入模板
+        </el-button>
+      </el-col>
+    </el-row>
+
+    <el-table v-loading="loading" :data="xcrSoftWorksList" 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="entName" :show-overflow-tooltip='true' width="150"/>
+                  <el-table-column label="软件名称" align="center" prop="softwareName" :show-overflow-tooltip='true' width="150"/>
+                  <el-table-column label="登记号" align="center" prop="registrationNo" :show-overflow-tooltip='true' width="150"/>
+                  <el-table-column label="版本号" align="center" prop="versionNo" :show-overflow-tooltip='true' width="150"/>
+              <el-table-column label="首次发表日期" align="center" prop="firstPublicationDate" width="180">
+                <template #default="scope">
+                  <span>{{ parseTime(scope.row.firstPublicationDate, '{y}-{m}-{d}') }}</span>
+                </template>
+              </el-table-column>
+              <el-table-column label="登记批准日期" align="center" prop="registrationApprovalDate" width="180">
+                <template #default="scope">
+                  <span>{{ parseTime(scope.row.registrationApprovalDate, '{y}-{m}-{d}') }}</span>
+                </template>
+              </el-table-column>
+    </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="Works">
+  import {
+    listWorks,
+    getWorks,
+    delWorks,
+    delWorksBatch
+  } from "@/api/basicData/xcrSoftWorks";
+  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 xcrSoftWorksList = 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/xcrSoftWorks/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,
+                        entName: null,
+                        uniCode: '',
+                        softwareName: null,
+                        registrationNo: null,
+                        versionNo: null,
+                        firstPublicationDate: null,
+                        registrationApprovalDate: null
+    },
+    rules: {
+    }
+  });
+
+  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);
+    listWorks(toServerObj).then(response => {
+            xcrSoftWorksList.value = response.records;
+      total.value = response.total;
+      loading.value = false;
+    });
+  }
+
+
+  // 表单重置
+  function reset() {
+    form.value = {
+                        xhCodeId: null,
+                        entName: null,
+                        uniCode: '',
+                        softwareName: null,
+                        registrationNo: null,
+                        versionNo: null,
+                        firstPublicationDate: null,
+                        registrationApprovalDate: null
+    };
+    proxy.resetForm("xcrSoftWorksRef");
+  }
+
+  /** 搜索按钮操作 */
+  function handleQuery() {
+    queryParams.value.pageNum = 1;
+    getList();
+  }
+
+  /** 重置按钮操作 */
+  function resetQuery() {
+    proxy.resetForm("queryRef");
+    handleQuery();
+  }
+
+  // 多选框选中数据
+  function handleSelectionChange(selection) {
+    ids.value = selection.map(item => item.xhCodeId);
+    single.value = selection.length != 1;
+    multiple.value = !selection.length;
+  }
+
+
+  /** 删除按钮操作 */
+  async function handleDelete(row) {
+    const res = await delWorks();
+    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 delWorksBatch(toRaw(idsToS));
+    }).then(() => {
+      getList();
+      proxy.$modal.msgSuccess("删除成功");
+    }).catch(() => {});
+  }
+
+  /** 导出按钮操作 */
+  function handleExport() {
+    proxy.download('basicData/xcrSoftWorks/export', {
+      ...queryParams.value
+    }, `软件著作权_${new Date().getTime()}.xlsx`)
+  }
+  const downloadTemplate = ()=>{
+    proxy.download('basicData/xcrSoftWorks/getUploadTemplate',{}, `软件著作权模板.xlsx`)
+  }
+  getList();
+</script>

+ 287 - 0
src/views/basicData/xcrTrademark/index.vue

@@ -0,0 +1,287 @@
+<template>
+  <div class="app-container">
+    <el-form :model="queryParams" ref="queryRef" :inline="true" v-show="showSearch" label-width="68px">
+                  <el-form-item label="统一社会信用代码" prop="uniCode" label-width="200">
+                    <el-input
+                        v-model="queryParams.uniCode"
+                        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-button
+            type="warning"
+            plain
+            icon="Download"
+            @click="handleExport"
+            :disabled="!xcrTrademarkList.length"
+            v-hasPermi="['basicData:xcrTrademark:export']"
+        >导出
+        </el-button>
+      </el-col>
+      <el-col :span="1.5">
+        <el-button
+            type="info"
+            plain
+            icon="Upload"
+            @click="handleImport"
+            v-hasPermi="['basicData:xcrTrademark:import']"
+        >导入
+        </el-button>
+      </el-col>
+      <el-col :span="1.5">
+        <el-button
+            type="danger"
+            plain
+            icon="Delete"
+            @click="batchDelete"
+            v-hasPermi="['basicData:xcrTrademark:delete']"
+            :disabled="ids.length === 0"
+        >批量删除
+        </el-button>
+      </el-col>
+      <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:trademark:delete']"
+            >清除全表
+            </el-button>
+          </template>
+        </el-popconfirm>
+      </el-col>
+      <el-col :span="1.5">
+        <el-button type="success" plain icon="Download" @click="downloadTemplate">
+          下载导入模板
+        </el-button>
+      </el-col>
+    </el-row>
+
+    <el-table v-loading="loading" :data="xcrTrademarkList" 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="entName" :show-overflow-tooltip='true' width="150"/>
+                  <el-table-column label="商标名称" align="center" prop="brandName" :show-overflow-tooltip='true' width="150"/>
+                  <el-table-column label="注册号" align="center" prop="registrationNo" :show-overflow-tooltip='true' width="150"/>
+                  <el-table-column label="国际分类" align="center" prop="internationalClassification" :show-overflow-tooltip='true' width="150"/>
+                  <el-table-column label="商标状态" align="center" prop="trademarkStatus" :show-overflow-tooltip='true' width="150"/>
+              <el-table-column label="注册公告日期" align="center" prop="registrationDate" width="180">
+                <template #default="scope">
+                  <span>{{ parseTime(scope.row.registrationDate, '{y}-{m}-{d}') }}</span>
+                </template>
+              </el-table-column>
+    </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="Trademark">
+  import {
+    listTrademark,
+    getTrademark,
+    delTrademark,
+    delTrademarkBatch
+  } from "@/api/basicData/xcrTrademark";
+  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 xcrTrademarkList = 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/xcrTrademark/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,
+                        entName: null,
+                        uniCode: '',
+                        brandName: null,
+                        registrationNo: null,
+                        internationalClassification: null,
+                        trademarkStatus: null,
+                        registrationDate: null
+    },
+    rules: {
+    }
+  });
+
+  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);
+    listTrademark(toServerObj).then(response => {
+            xcrTrademarkList.value = response.records;
+      total.value = response.total;
+      loading.value = false;
+    });
+  }
+
+
+  // 表单重置
+  function reset() {
+    form.value = {
+                        xhCodeId: null,
+                        entName: null,
+                        uniCode: '',
+                        brandName: null,
+                        registrationNo: null,
+                        internationalClassification: null,
+                trademarkStatus: "0",
+                        registrationDate: null
+    };
+    proxy.resetForm("xcrTrademarkRef");
+  }
+
+  /** 搜索按钮操作 */
+  function handleQuery() {
+    queryParams.value.pageNum = 1;
+    getList();
+  }
+
+  /** 重置按钮操作 */
+  function resetQuery() {
+    proxy.resetForm("queryRef");
+    handleQuery();
+  }
+
+  // 多选框选中数据
+  function handleSelectionChange(selection) {
+    ids.value = selection.map(item => item.xhCodeId);
+    single.value = selection.length != 1;
+    multiple.value = !selection.length;
+  }
+
+
+  /** 删除按钮操作 */
+  async function handleDelete(row) {
+    const res = await delTrademark();
+    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 delTrademarkBatch(toRaw(idsToS));
+    }).then(() => {
+      getList();
+      proxy.$modal.msgSuccess("删除成功");
+    }).catch(() => {});
+  }
+
+  /** 导出按钮操作 */
+  function handleExport() {
+    proxy.download('basicData/xcrTrademark/export', {
+      ...queryParams.value
+    }, `商标_${new Date().getTime()}.xlsx`)
+  }
+  const downloadTemplate = ()=>{
+    proxy.download('basicData/xcrTrademark/getUploadTemplate',{}, `商标模板.xlsx`)
+  }
+  getList();
+</script>

+ 1 - 1
src/views/login.vue

@@ -1,7 +1,7 @@
 <template>
   <div class="login">
     <el-form ref="loginRef" :model="loginForm" :rules="loginRules" class="login-form">
-      <h3 class="title">若依后台管理系统</h3>
+      <h3 class="title">新晃信用分级分类管理系统</h3>
       <el-form-item prop="username">
         <el-input
           v-model="loginForm.username"

+ 10 - 2
src/views/test/index.vue

@@ -1,6 +1,13 @@
 <script setup>
 import CreditReport from '@/components/CreditReport/index.vue'
+import request, {download} from "@/utils/request.js";
 const dialogVisible = ref(false);
+const closeDialog = ()=>{
+  dialogVisible.value = false;
+}
+const testReport = async ()=>{
+  await download('/report/downloadReport',{uniCode:'91431227MA4L6U5508'},"信用报告.docx")
+}
 
 </script>
 
@@ -9,14 +16,15 @@ const dialogVisible = ref(false);
     <el-row>
       <el-col :span="24">
         <el-button type="primary" @click="dialogVisible = true" >下载性与暴力报告</el-button>
+        <el-button type="primary" @click="testReport">从后端生成性与暴力报告</el-button>
       </el-col>
     </el-row>
-    <el-dialog v-model="dialogVisible" width="860px">
+    <el-dialog v-model="dialogVisible" width="860px" destroy-on-close>
       <template #header>
         <span class="dialog-title">下载与暴力报告11</span>
       </template>
       <template #default>
-        <CreditReport :credit-code="'91431227MA4LY5GC2Y'" />
+        <CreditReport :credit-code="'91431227MA4L6U5508'" :closeDialog="closeDialog" />
       </template>
       <template #footer>
       <span class="dialog-footer">