lxp
2025-03-10 c1136d8429f660335535afe8ad7c828c16eb7199
Merge branch 'dev' of http://114.132.189.42:9002/r/center-lims-before-ruoyi into dev
已添加20个文件
已重命名1个文件
已修改38个文件
9616 ■■■■ 文件已修改
src/api/cnas/resourceDemand/externalService/serviceAndSupplyPro/serviceAndSupplyPro.js 142 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/api/cnas/resourceDemand/externalService/supplierManage/supplierManage.js 121 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/api/cnas/resourceDemand/facilitiesEnvironment/facilitiesAndEnvironment.js 254 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/api/cnas/resourceDemand/facilitiesEnvironment/internalWastes.js 56 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/api/cnas/resourceDemand/foreignRegister/foreignRegister.js 65 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/api/cnas/resourceDemand/standardMaterialAccept/standardMaterialAccept.js 74 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/api/cnas/systemManagement/correctiveAction.js 4 ●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/assets/styles/index.scss 8 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/layout/components/Navbar.vue 140 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/plugins/download.js 25 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/router/index.js 32 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/store/modules/user.js 1 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/utils/bigEval.js 114 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/views/CNAS/externalService/supplierManage/component/CardPanel.vue 75 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/views/CNAS/externalService/supplierManage/component/ConsumableOverview.vue 125 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/views/CNAS/externalService/supplierManage/component/Contents.vue 211 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/views/CNAS/externalService/supplierManage/component/Edit.vue 217 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/views/CNAS/externalService/supplierManage/component/QualifiedSuppliers.vue 172 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/views/CNAS/externalService/supplierManage/index.vue 149 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/views/CNAS/process/complaint/index.vue 2 ●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/views/CNAS/process/ensureResults/ensureResultsValidity/components/ViewRecord.vue 10 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/views/CNAS/process/method/methodVerification/components/ViewTestRecord.vue 9 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/views/CNAS/process/method/methodVerification/components/calibrationsFileDia.vue 9 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/views/CNAS/process/method/methodVerification/components/viewWorkPermitDia.vue 9 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/views/CNAS/process/reportResults/index.vue 3 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/views/CNAS/process/sampleDisposal/sampleDisposal.vue 3 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/views/CNAS/process/sampleDisposal/sampleRegistration.vue 3 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/views/CNAS/process/uncertainty/index.vue 3 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/views/CNAS/resourceDemand/facilitiesEnvironment/component/Personnel-management-dia.vue 212 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/views/CNAS/resourceDemand/facilitiesEnvironment/component/Personnel-management.vue 217 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/views/CNAS/resourceDemand/facilitiesEnvironment/component/facilities-environmental-conditions.vue 51 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/views/CNAS/resourceDemand/facilitiesEnvironment/component/facilities-environmental-conditions/illuminance-recording.vue 359 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/views/CNAS/resourceDemand/facilitiesEnvironment/component/facilities-environmental-conditions/lightning-protection-detection.vue 231 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/views/CNAS/resourceDemand/facilitiesEnvironment/component/facilities-environmental-conditions/power-supply-stability.vue 360 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/views/CNAS/resourceDemand/facilitiesEnvironment/component/facilities-environmental-conditions/temperature-humidity-record.vue 428 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/views/CNAS/resourceDemand/facilitiesEnvironment/component/three-wastes-dialog.vue 189 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/views/CNAS/resourceDemand/facilitiesEnvironment/component/three-wastes-treatment.vue 206 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/views/CNAS/resourceDemand/facilitiesEnvironment/index.vue 51 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/views/CNAS/resourceDemand/standardMaterialAccept/component/AddRecord.vue 39 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/views/CNAS/resourceDemand/standardMaterialAccept/index.vue 17 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/views/CNAS/systemManagement/correctiveAction/components/ViewTestRecord.vue 9 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/views/CNAS/systemManagement/correctiveAction/components/correctiveInfo.vue 21 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/views/CNAS/systemManagement/customerManagement/customerSatisfaction.vue 9 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/views/CNAS/systemManagement/documentControl/components/ControlledFileApplication.vue 4 ●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/views/CNAS/systemManagement/documentControl/components/FileChangeRequest.vue 4 ●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/views/CNAS/systemManagement/documentControl/components/FileList.vue 6 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/views/CNAS/systemManagement/documentRecords/approvalRecord.vue 4 ●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/views/CNAS/systemManagement/documentRecords/cancellationRecord.vue 4 ●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/views/CNAS/systemManagement/documentRecords/distributionCollectionRecord.vue 4 ●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/views/CNAS/systemManagement/documentRecords/outDocumenRecordt.vue 3 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/views/CNAS/systemManagement/documentRecords/regularReviewsRecord.vue 7 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/views/CNAS/systemManagement/documentRecords/revisionRecord.vue 4 ●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/views/CNAS/systemManagement/internalAuditManagement/components/ViewTestRecord.vue 9 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/views/CNAS/systemManagement/managementReview/components/managementReviewPlan.vue 4 ●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/views/business/inspectionOrder/add.vue 3964 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/views/business/inspectionOrder/fiberoptic-config-readonly.vue 补丁 | 查看 | 原始文档 | blame | 历史
src/views/business/inspectionOrder/index.vue 824 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/views/index.vue 337 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/views/structural/capabilityAndLaboratory/laboratory/index.vue 3 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/api/cnas/resourceDemand/externalService/serviceAndSupplyPro/serviceAndSupplyPro.js
@@ -1,20 +1,20 @@
import request from '@/utils/request'
import request from "@/utils/request";
// æœåŠ¡å’Œä¾›åº”å“é‡‡è´­
export function procurementSuppliesList(query) {
  return request({
    url: '/procurementSuppliesList/procurementSuppliesList',
    method: 'get',
    params: query
  })
    url: "/procurementSuppliesList/procurementSuppliesList",
    method: "get",
    params: query,
  });
}
export function deleteProcurementSuppliesList(query) {
  return request({
    url: '/procurementSuppliesList/deleteProcurementSuppliesList',
    method: 'delete',
    params: query
  })
    url: "/procurementSuppliesList/deleteProcurementSuppliesList",
    method: "delete",
    params: query,
  });
}
export function exportProcurementSuppliesList(query) {
@@ -28,122 +28,122 @@
export function addProcurementSuppliesList(query) {
  return request({
    url: '/procurementSuppliesList/addProcurementSuppliesList',
    method: 'post',
    url: "/procurementSuppliesList/addProcurementSuppliesList",
    method: "post",
    data: query,
  })
  });
}
export function selectEnumByCategory(query) {
  return request({
    url: '/enum/selectEnumByCategory',
    method: 'post',
    url: "/enum/selectEnumByCategory",
    method: "post",
    data: query,
  })
  });
}
export function updateProcurementSuppliesList(query) {
  return request({
    url: '/procurementSuppliesList/updateProcurementSuppliesList',
    method: 'post',
    url: "/procurementSuppliesList/updateProcurementSuppliesList",
    method: "post",
    data: query,
  })
  });
}
// æœåŠ¡å’Œä¾›åº”å“é‡‡è´­
export function selectSupplierManagementAll(query) {
  return request({
    url: '/supplierManagement/selectSupplierManagementAll',
    method: 'get',
    params: query
  })
    url: "/supplierManagement/selectSupplierManagementAll",
    method: "get",
    params: query,
  });
}
export function addProcurementSuppliesExpends(query) {
  return request({
    url: '/procurementSuppliesExpends/addProcurementSuppliesExpends',
    method: 'post',
    url: "/procurementSuppliesExpends/addProcurementSuppliesExpends",
    method: "post",
    data: query,
  })
  });
}
export function deleteProcurementSuppliesExpends(query) {
  return request({
    url: '/procurementSuppliesExpends/deleteProcurementSuppliesExpends',
    method: 'delete',
    params: query
  })
    url: "/procurementSuppliesExpends/deleteProcurementSuppliesExpends",
    method: "delete",
    params: query,
  });
}
export function procurementSuppliesExpendlist(query) {
  return request({
    url: '/procurementSuppliesExpends/procurementSuppliesExpendlist/',
    method: 'get',
    params: query
  })
    url: "/procurementSuppliesExpends/procurementSuppliesExpendlist",
    method: "get",
    params: query,
  });
}
export function exportProcurementSuppliesStoreExcel(query) {
  return request({
    url: '/procurementSuppliesStore/exportExcel',
    url: "/procurementSuppliesStore/exportExcel",
    method: "get",
    responseType: "blob",
    params: query,
  })
  });
}
// æ–°å¢žèŠ‚ç‚¹
export function addSuppliersDirectoryContents(query) {
  return request({
    url: '/suppliersDirectoryContents/addSuppliersDirectoryContents',
    method: 'post',
    url: "/suppliersDirectoryContents/addSuppliersDirectoryContents",
    method: "post",
    data: query,
  })
  });
}
// ç¼–辑节点
export function updateSuppliersDirectoryContents(query) {
  return request({
    url: '/suppliersDirectoryContents/updateSuppliersDirectoryContents',
    method: 'post',
    url: "/suppliersDirectoryContents/updateSuppliersDirectoryContents",
    method: "post",
    data: query,
  })
  });
}
// åˆ é™¤èŠ‚ç‚¹
export function deleteSuppliersDirectoryContentsById(query) {
  return request({
    url: '/suppliersDirectoryContents/deleteSuppliersDirectoryContentsById',
    method: 'delete',
    params: query
  })
    url: "/suppliersDirectoryContents/deleteSuppliersDirectoryContentsById",
    method: "delete",
    params: query,
  });
}
// é‡‡è´­ç‰©èµ„目录删除
export function deleteProcurementSuppliesContentById(query) {
  return request({
    url: '/procurementSuppliesContents/deleteProcurementSuppliesContentById',
    method: 'delete',
    params: query
  })
    url: "/procurementSuppliesContents/deleteProcurementSuppliesContentById",
    method: "delete",
    params: query,
  });
}
// æŸ¥è¯¢æ‰€æœ‰èŠ‚ç‚¹
export function getSuppliersDirectoryContentsNodeNames(query) {
  return request({
    url: '/suppliersDirectoryContents/getSuppliersDirectoryContentsNodeNames',
    method: 'get',
    params: query
  })
    url: "/suppliersDirectoryContents/getSuppliersDirectoryContentsNodeNames",
    method: "get",
    params: query,
  });
}
// é‡‡è´­ç‰©èµ„目录获取节点名称
export function getProcurementSuppliesContentsNodeNames(query) {
  return request({
    url: '/procurementSuppliesContents/getNodeNames',
    method: 'get',
    params: query
  })
    url: "/procurementSuppliesContents/getNodeNames",
    method: "get",
    params: query,
  });
}
//获取用户列表
@@ -176,19 +176,19 @@
// è€—材入库修改
export function updateStore(query) {
  return request({
    url: '/procurementSuppliesStore/updateStore',
    method: 'post',
    url: "/procurementSuppliesStore/updateStore",
    method: "post",
    data: query,
  })
  });
}
// è€—材入库新增
export function addStore(query) {
  return request({
    url: '/procurementSuppliesStore/addStore',
    method: 'post',
    url: "/procurementSuppliesStore/addStore",
    method: "post",
    data: query,
  })
  });
}
// æ ¹æ®id查询耗材入库
@@ -212,19 +212,17 @@
// è€—材入库删除
export function deleteStore(query) {
  return request({
    url: '/procurementSuppliesStore/deleteStore',
    method: 'delete',
    params: query
  })
    url: "/procurementSuppliesStore/deleteStore",
    method: "delete",
    params: query,
  });
}
// é‡‡è´­ç‰©èµ„目录新增
export function addProcurementSuppliesContents(query) {
  return request({
    url: '/procurementSuppliesContents/addProcurementSuppliesContents',
    method: 'post',
    url: "/procurementSuppliesContents/addProcurementSuppliesContents",
    method: "post",
    data: query,
  })
  });
}
src/api/cnas/resourceDemand/externalService/supplierManage/supplierManage.js
@@ -1,52 +1,109 @@
import request from '@/utils/request'
import request from "@/utils/request";
// åˆ†é¡µæŸ¥è¯¢
// ä¾›åº”æ ‘
export function suppliersDirectoryContentsListing(query) {
  return request({
    url: "/suppliersDirectoryContents/suppliersDirectoryContentsListing",
    method: "get",
    params: query,
  });
}
// ä¾›åº”商目录详情
export function selectSuppliersDirectoryContentsById(query) {
  return request({
    url: "/suppliersDirectoryContents/selectSuppliersDirectoryContentsById",
    method: "get",
    params: query,
  });
}
// æ–°å¢žèŠ‚ç‚¹
export function addSuppliersDirectoryContents(data) {
  return request({
    url: "/suppliersDirectoryContents/addSuppliersDirectoryContents",
    method: "post",
    data: data,
  });
}
// ç¼–辑节点
export function updateSuppliersDirectoryContents(data) {
  return request({
    url: "/suppliersDirectoryContents/updateSuppliersDirectoryContents",
    method: "post",
    data: data,
  });
}
//删除节点
export function deleteSuppliersDirectoryContentsById(query) {
  return request({
    url: "/suppliersDirectoryContents/deleteSuppliersDirectoryContentsById",
    method: "delete",
    params: query,
  });
}
// æŸ¥è¯¢æ‰€æœ‰èŠ‚ç‚¹
export function getSuppliersDirectoryContentsNodeNames(query) {
  return request({
    url: "/suppliersDirectoryContents/getSuppliersDirectoryContentsNodeNames",
    method: "get",
    params: query,
  });
}
// åˆ†é¡µæŸ¥è¯¢åˆæ ¼ä¾›æ–¹å
export function selectQualifiedSupplierManagementPage(query) {
  return request({
    url: '/supplierManagement/selectQualifiedSupplierManagementPage',
    method: 'get',
    params: query
  })
    url: "/supplierManagement/selectQualifiedSupplierManagementPage",
    method: "get",
    params: query,
  });
}
// ç¼–辑供应商
export function updateSupplierManagement(query) {
//删除供应商
export function delSupplierManagement(query) {
  return request({
    url: '/supplierManagement/updateSupplierManagement',
    method: 'post',
    data: query
  })
}
// æ–°å¢žä¾›åº”商
export function addSupplierManagement(query) {
  return request({
    url: '/supplierManagement/addSupplierManagement',
    method: 'post',
    data: query
  })
    url: "/supplierManagement/delSupplierManagement/" + query,
    method: "delete",
    // params: query,
  });
}
// å¯¼å‡ºä¾›åº”商
export function exportSupplierManagement(query) {
  return request({
    url: "/supplierManagement/exportSupplierManagement",
    url: "/supplierManagement/exportSupplierManagement/" + query,
    method: "get",
    responseType: "blob",
    params: query,
  });
}
// åˆ é™¤ä¾›åº”商
export function delSupplierManagement(query) {
// æ–°å¢žä¾›åº”商
export function addSupplierManagement(data) {
  return request({
    url: '/supplierManagement/delSupplierManagement',
    method: 'delete',
    params: query
  })
    url: "/supplierManagement/addSupplierManagement",
    method: "post",
    data: data,
  });
}
// ç¼–辑供应商
export function updateSupplierManagement(data) {
  return request({
    url: "/supplierManagement/updateSupplierManagement",
    method: "post",
    data: data,
  });
}
// åˆ†é¡µæŸ¥è¯¢ä¾›æ–¹åå½•
export function selectSupplierManagementByParentId(query) {
  return request({
    url: "/supplierManagement/selectSupplierManagementByParentId/" + query,
    method: "get",
    // params: query,
  });
}
src/api/cnas/resourceDemand/facilitiesEnvironment/facilitiesAndEnvironment.js
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,254 @@
import request from '@/utils/request'
// è®¾æ–½å’ŒçŽ¯å¢ƒæ¡ä»¶è¦æ±‚-电源稳定性查询
export function getLaboratoryFacilityPowerStablePage(query) {
  return request({
    url: '/fePowerStable/getLaboratoryFacilityPowerStablePage',
    method: 'get',
    params: query
  })
}
// é€šè¿‡è®¾å¤‡åˆ†ç±»èŽ·å–è®¾å¤‡åˆ—è¡¨
export function deviceScopeSearch(query) {
  return request({
    url: '/deviceScope/search',
    method: 'get',
    params: query
  })
}
// è®¾å¤‡æ ‘å½¢
export function treeDevice(query) {
  return request({
    url: '/deviceScope/treeDevice',
    method: 'get',
    params: query
  })
}
//获取用户列表
export function selectUserCondition(query) {
  return request({
    url: "/system/newUser/selectUserCondition",
    method: "get",
    params: query,
  });
}
// è®¾æ–½å’ŒçŽ¯å¢ƒæ¡ä»¶è¦æ±‚-电源稳定性新增/修改
export function addLaboratoryFacilityPowerStable(query) {
  return request({
    url: '/fePowerStable/addLaboratoryFacilityPowerStable',
    method: 'post',
    data: query
  })
}
// è®¾æ–½å’ŒçŽ¯å¢ƒæ¡ä»¶-设施和环境条件要求-电源稳定性-测定量 åˆ é™¤
export function deleteFeMeasuredQuantity(query) {
  return request({
    url: '/fePowerStable/deleteFeMeasuredQuantity',
    method: 'delete',
    params: query
  })
}
// è®¾æ–½å’ŒçŽ¯å¢ƒæ¡ä»¶è¦æ±‚-电源稳定性删除
export function deleteLaboratoryFacilityPowerStable(query) {
  return request({
    url: '/fePowerStable/deleteLaboratoryFacilityPowerStable',
    method: 'delete',
    params: query
  })
}
// ç”µæºç¨³å®šæ€§-测定量 æ ¹æ®ç”µæºç¨³å®šæ€§æŸ¥è¯¢
export function getFeMeasuredQuantityService(query) {
  return request({
    url: "/fePowerStable/getFeMeasuredQuantityService",
    method: "get",
    params: query,
  });
}
// ç”µæºç¨³å®šæ€§-测定量 å¯¼å‡º
export function exportFePowerStable(query) {
  return request({
    url: "/fePowerStable/exportFePowerStable",
    method: "get",
    responseType: "blob",
    params: query,
  });
}
// è®¾æ–½å’ŒçŽ¯å¢ƒæ¡ä»¶è¦æ±‚-防雷检测查询
export function getLightningProtectionDetection(query) {
  return request({
    url: '/feLightningProtection/getLightningProtectionDetection',
    method: 'get',
    params: query
  })
}
// è®¾æ–½å’ŒçŽ¯å¢ƒæ¡ä»¶è¦æ±‚-防雷检测新增/修改
export function addLightningProtectionDetection(query) {
  return request({
    url: '/feLightningProtection/addLightningProtectionDetection',
    method: 'post',
    data: query,
    headers: {
      'Content-Type': 'multipart/form-data' // å¿…须设置为 multipart
    }
  })
}
// è®¾æ–½å’ŒçŽ¯å¢ƒæ¡ä»¶è¦æ±‚-防雷检测删除
export function deleteLightningProtectionDetection(query) {
  return request({
    url: '/feLightningProtection/deleteLightningProtectionDetection',
    method: 'delete',
    params: query
  })
}
// è®¾æ–½å’ŒçŽ¯å¢ƒæ¡ä»¶è¦æ±‚-防雷检测导出
export function exportOfLightningProtectionDetection(query) {
  return request({
    url: "/feLightningProtection/exportOfLightningProtectionDetection",
    method: "get",
    responseType: "blob",
    params: query,
  });
}
// è®¾æ–½å’ŒçŽ¯å¢ƒæ¡ä»¶è¦æ±‚-照度记录表-检测区域 æŸ¥è¯¢
export function getFeLightningProtection(query) {
  return request({
    url: '/feIllumination/getFeLightningProtection',
    method: 'get',
    params: query
  })
}
// è®¾æ–½å’ŒçŽ¯å¢ƒæ¡ä»¶è¦æ±‚-照度记录表-检测区域 æ–°å¢ž/修改
export function addFeLightningProtection(query) {
  return request({
    url: '/feIllumination/addFeLightningProtection',
    method: 'post',
    data: query,
  })
}
// è®¾æ–½å’ŒçŽ¯å¢ƒæ¡ä»¶è¦æ±‚-照度记录表-检测区域 åˆ é™¤
export function deleteFeLightningProtection(query) {
  return request({
    url: '/feIllumination/deleteFeLightningProtection',
    method: 'delete',
    params: query
  })
}
// ç…§åº¦è®°å½•表-检测区域 æ ¹æ®ç…§åº¦è®°å½•查询
export function getFeIlluminationDetectionArea(query) {
  return request({
    url: '/feIllumination/getFeIlluminationDetectionArea',
    method: 'get',
    params: query
  })
}
// ç…§åº¦è®°å½•表-检测区域 åˆ é™¤
export function deleteFeIlluminationDetectionArea(query) {
  return request({
    url: '/feIllumination/deleteFeIlluminationDetectionArea',
    method: 'delete',
    params: query
  })
}
// ç…§åº¦è®°å½•表-检测区域 å¯¼å‡º
export function exportFeIllumination(query) {
  return request({
    url: "/feIllumination/exportFeIllumination",
    method: "get",
    responseType: "blob",
    params: query,
  });
}
// è¯•验区域-查询"
export function getFeTempHumDate(query) {
  return request({
    url: '/feTempHumDate/getFeTempHumDate',
    method: 'get',
    params: query
  })
}
// è¯•验区域-新增/修改
export function addFeTempHumDate(query) {
  return request({
    url: '/feTempHumDate/addFeTempHumDate',
    method: 'post',
    data: query,
  })
}
// è®¾æ–½å’ŒçŽ¯å¢ƒæ¡ä»¶è¦æ±‚-温湿度记录查询
export function getFeTempHumRecordPage(query) {
  return request({
    url: '/feTempHumDate/getFeTempHumRecordPage',
    method: 'get',
    params: query
  })
}
// è®¾æ–½å’ŒçŽ¯å¢ƒæ¡ä»¶è¦æ±‚-温湿度记录新增/修改
export function addFeTempHumRecord(query) {
  return request({
    url: '/feTempHumDate/addFeTempHumRecord',
    method: 'post',
    data: query,
  })
}
// è®¾æ–½å’ŒçŽ¯å¢ƒæ¡ä»¶è¦æ±‚-温湿度记录删除
export function deleteFeTempHumRecord(query) {
  return request({
    url: '/feTempHumDate/deleteFeTempHumRecord',
    method: 'delete',
    params: query
  })
}
// è¯•验区域-删除
export function deleteFeTempHumDate(query) {
  return request({
    url: '/feTempHumDate/deleteFeTempHumDate',
    method: 'delete',
    params: query
  })
}
// // è®¾æ–½å’ŒçŽ¯å¢ƒæ¡ä»¶è¦æ±‚-温湿度记录 å¯¼å‡º
export function exportTemperatureAndHumidityRecords(query) {
  return request({
    url: "/feTempHumDate/exportTemperatureAndHumidityRecords",
    method: "get",
    responseType: "blob",
    params: query,
  });
}
// æ¸©æ¹¿åº¦ç¡®è®¤
export function affirmFeTempHumDate(query) {
  return request({
    url: '/feTempHumDate/affirmFeTempHumDate',
    method: 'post',
    data: query,
  })
}
src/api/cnas/resourceDemand/facilitiesEnvironment/internalWastes.js
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,56 @@
import request from '@/utils/request'
// å®‰å…¨å†…务三废处理分页查询
export function pageInternalWastes(query) {
  return request({
    url: '/internalWastes/pageInternalWastes',
    method: 'get',
    params: query
  })
}
// å®‰å…¨å†…务三废处理查看详情
export function getInternalWastesOne(query) {
  return request({
    url: '/internalWastes/getInternalWastesOne',
    method: 'get',
    params: query
  })
}
// å®‰å…¨å†…务三废处理新增
export function addInternalWastes(query) {
  return request({
    url: '/internalWastes/addInternalWastes',
    method: 'post',
    data: query
  })
}
// å®‰å…¨å†…务三废处理分页修改
export function updateInternalWastes(query) {
  return request({
    url: '/internalWastes/updateInternalWastes',
    method: 'post',
    data: query
  })
}
// å¯¼å‡ºä¸‰åºŸå¤„理
export function exportInternalWastes(query) {
  return request({
    url: "/internalWastes/exportInternalWastes",
    method: "get",
    responseType: "blob",
    params: query,
  });
}
//安全内务三废处理删除
export function removeStandardSubstance(query) {
  return request({
    url: '/internalWastes/delInternalWastes',
    method: 'delete',
    params: query
  })
}
src/api/cnas/resourceDemand/foreignRegister/foreignRegister.js
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,65 @@
import request from '@/utils/request'
// å¤–来人员分页查询
export function pageForeignRegister(query) {
  return request({
    url: '/foreignRegister/pageForeignRegister',
    method: 'get',
    params: query
  })
}
// å¤–来人员查看详情
export function getForeignRegisterOne(query) {
  return request({
    url: '/foreignRegister/getForeignRegisterOne',
    method: 'get',
    params: query
  })
}
// èŽ·å–ç”¨æˆ·åˆ—è¡¨
export function selectUserCondition(query) {
  return request({
    url: "/system/newUser/selectUserCondition",
    method: "get",
    params: query,
  });
}
// å¤–来人员新增
export function addForeignRegister(query) {
  return request({
    url: '/foreignRegister/addForeignRegister',
    method: 'post',
    data: query
  })
}
// å¤–来人员修改
export function updateForeignRegister(query) {
  return request({
    url: '/foreignRegister/updateForeignRegister',
    method: 'post',
    data: query
  })
}
//外来人员删除
export function delForeignRegister(query) {
  return request({
    url: '/foreignRegister/delForeignRegister',
    method: 'delete',
    params: query
  })
}
// å¯¼å‡ºå¤–来人员
export function exportForeignRegister(query) {
  return request({
    url: "/foreignRegister/exportForeignRegister",
    method: "get",
    responseType: "blob",
    params: query,
  });
}
src/api/cnas/resourceDemand/standardMaterialAccept/standardMaterialAccept.js
@@ -1,35 +1,35 @@
import request from '@/utils/request'
import request from "@/utils/request";
export function getPageAcceptance(query) {
  return request({
    url: '/feStandardSubstanceAcceptance/getPageAcceptance',
    method: 'get',
    params: query
  })
    url: "/feStandardSubstanceAcceptance/getPageAcceptance",
    method: "get",
    params: query,
  });
}
export function updateAcceptanc(query) {
  return request({
    url: '/feStandardSubstanceAcceptance/updateAcceptanc',
    method: 'post',
    data: query
  })
    url: "/feStandardSubstanceAcceptance/updateAcceptanc",
    method: "post",
    data: query,
  });
}
// æ–°å¢žéªŒæ”¶
export function addAcceptance(query) {
  return request({
    url: '/feStandardSubstanceAcceptance/addAcceptance',
    method: 'post',
    data: query
  })
    url: "/feStandardSubstanceAcceptance/addAcceptance",
    method: "post",
    data: query,
  });
}
// ä¿®æ”¹éªŒæ”¶
export function updateAcceptance(query) {
  return request({
    url: '/feStandardSubstanceAcceptance/updateAcceptance',
    method: 'post',
    data: query
  })
    url: "/feStandardSubstanceAcceptance/updateAcceptance",
    method: "post",
    data: query,
  });
}
/**
@@ -37,32 +37,36 @@
 */
export function getStandardSubstanceAll(query) {
  return request({
    url: '/feStandardSubstance/getStandardSubstanceAll',
    method: 'get',
    params: query
  })
    url: "/feStandardSubstance/getStandardSubstanceAll",
    method: "get",
    params: query,
  });
}
// æ ‡å‡†ç‰©è´¨éªŒæ”¶æŸ¥çœ‹è¯¦æƒ…
export function getAcceptanceDetails(query) {
  return request({
    url: '/feStandardSubstanceAcceptance/getAcceptanceDetails',
    method: 'get',
    params: query
  })
    url: "/feStandardSubstanceAcceptance/getAcceptanceDetails",
    method: "get",
    params: query,
  });
}
// æ ‡å‡†ç‰©è´¨éªŒæ”¶å¯¼å‡º
export function exportFeStandardSubstanceAcceptance(query) {
  return request({
    url: '/feStandardSubstanceAcceptance/exportFeStandardSubstanceAcceptance',
    method: 'get',
    url: "/feStandardSubstanceAcceptance/exportFeStandardSubstanceAcceptance",
    method: "get",
    params: query,
    responseType: "blob"
  })
    responseType: "blob",
  });
}
/**
 * @desc åˆ é™¤
 */
export function deleteAcceptance(query) {
  return request({
    url: "/feStandardSubstanceAcceptance/deleteAcceptance/" + query,
    method: "delete",
    // params: query,
  });
}
src/api/cnas/systemManagement/correctiveAction.js
@@ -15,9 +15,7 @@
  return request({
    url: "/qualitySupervise/exportSuperviseDetaillCorrect",
    method: "get",
    headers: {
      responseType: "blob",
    },
    responseType: "blob",
    params: query,
  });
}
src/assets/styles/index.scss
@@ -196,3 +196,11 @@
.required-span {
  color: red;
}
.bg-1 {
  width: 100%;
  height: calc(100% - 50px);
  overflow-y: auto;
  padding: 20px 10px 10px;
  background: rgb(245, 247, 251);
}
src/layout/components/Navbar.vue
@@ -1,7 +1,7 @@
<template>
  <div class="navbar">
<!--    <breadcrumb id="breadcrumb-container" class="breadcrumb-container" v-if="!topNav"/>-->
<!--    <top-nav id="topmenu-container" class="topmenu-container" v-if="topNav"/>-->
    <!--    <breadcrumb id="breadcrumb-container" class="breadcrumb-container" v-if="!topNav"/>-->
    <!--    <top-nav id="topmenu-container" class="topmenu-container" v-if="topNav"/>-->
    <div class="logo">
      <img src="@/assets/logo/ZTTlogo.png" />
    </div>
@@ -10,56 +10,61 @@
    </div>
    <div class="right-menu">
      <div class="avatar-wrapper">
        <img :src="avatar" class="user-avatar">
        <span class="userName">Admin</span>
        <img class="logoout" src="@/assets/images/logoout.png" @click="logout" title="退出账号" />
        <img :src="avatar" class="user-avatar" />
        <span class="userName">{{ nickName }}</span>
        <img
          class="logoout"
          src="@/assets/images/logoout.png"
          @click="logout"
          title="退出账号"
        />
      </div>
<!--      <template v-if="device!=='mobile'">-->
<!--        <search id="header-search" class="right-menu-item" />-->
      <!--      <template v-if="device!=='mobile'">-->
      <!--        <search id="header-search" class="right-menu-item" />-->
<!--        <el-tooltip content="源码地址" effect="dark" placement="bottom">-->
<!--          <ruo-yi-git id="ruoyi-git" class="right-menu-item hover-effect" />-->
<!--        </el-tooltip>-->
      <!--        <el-tooltip content="源码地址" effect="dark" placement="bottom">-->
      <!--          <ruo-yi-git id="ruoyi-git" class="right-menu-item hover-effect" />-->
      <!--        </el-tooltip>-->
<!--        <el-tooltip content="文档地址" effect="dark" placement="bottom">-->
<!--          <ruo-yi-doc id="ruoyi-doc" class="right-menu-item hover-effect" />-->
<!--        </el-tooltip>-->
      <!--        <el-tooltip content="文档地址" effect="dark" placement="bottom">-->
      <!--          <ruo-yi-doc id="ruoyi-doc" class="right-menu-item hover-effect" />-->
      <!--        </el-tooltip>-->
<!--        <screenfull id="screenfull" class="right-menu-item hover-effect" />-->
      <!--        <screenfull id="screenfull" class="right-menu-item hover-effect" />-->
<!--        <el-tooltip content="布局大小" effect="dark" placement="bottom">-->
<!--          <size-select id="size-select" class="right-menu-item hover-effect" />-->
<!--        </el-tooltip>-->
      <!--        <el-tooltip content="布局大小" effect="dark" placement="bottom">-->
      <!--          <size-select id="size-select" class="right-menu-item hover-effect" />-->
      <!--        </el-tooltip>-->
<!--      </template>-->
      <!--      </template>-->
<!--      <div class="avatar-container">-->
<!--        <el-dropdown-menu slot="dropdown">-->
<!--          <router-link to="/user/profile">-->
<!--            <el-dropdown-item>个人中心</el-dropdown-item>-->
<!--          </router-link>-->
<!--          <el-dropdown-item @click.native="setting = true">-->
<!--            <span>布局设置</span>-->
<!--          </el-dropdown-item>-->
<!--          <el-dropdown-item divided @click.native="logout">-->
<!--            <span>退出登录</span>-->
<!--          </el-dropdown-item>-->
<!--        </el-dropdown-menu>-->
<!--      </div>-->
      <!--      <div class="avatar-container">-->
      <!--        <el-dropdown-menu slot="dropdown">-->
      <!--          <router-link to="/user/profile">-->
      <!--            <el-dropdown-item>个人中心</el-dropdown-item>-->
      <!--          </router-link>-->
      <!--          <el-dropdown-item @click.native="setting = true">-->
      <!--            <span>布局设置</span>-->
      <!--          </el-dropdown-item>-->
      <!--          <el-dropdown-item divided @click.native="logout">-->
      <!--            <span>退出登录</span>-->
      <!--          </el-dropdown-item>-->
      <!--        </el-dropdown-menu>-->
      <!--      </div>-->
    </div>
  </div>
</template>
<script>
import { mapGetters } from 'vuex'
import Breadcrumb from '@/components/Breadcrumb'
import TopNav from '@/components/TopNav'
import Hamburger from '@/components/Hamburger'
import Screenfull from '@/components/Screenfull'
import SizeSelect from '@/components/SizeSelect'
import Search from '@/components/HeaderSearch'
import RuoYiGit from '@/components/RuoYi/Git'
import RuoYiDoc from '@/components/RuoYi/Doc'
import { mapGetters } from "vuex";
import Breadcrumb from "@/components/Breadcrumb";
import TopNav from "@/components/TopNav";
import Hamburger from "@/components/Hamburger";
import Screenfull from "@/components/Screenfull";
import SizeSelect from "@/components/SizeSelect";
import Search from "@/components/HeaderSearch";
import RuoYiGit from "@/components/RuoYi/Git";
import RuoYiDoc from "@/components/RuoYi/Doc";
export default {
  components: {
@@ -70,44 +75,43 @@
    SizeSelect,
    Search,
    RuoYiGit,
    RuoYiDoc
    RuoYiDoc,
  },
  computed: {
    ...mapGetters([
      'avatar',
      'device'
    ]),
    ...mapGetters(["avatar", "device", "nickName"]),
    setting: {
      get() {
        return this.$store.state.settings.showSettings
        return this.$store.state.settings.showSettings;
      },
      set(val) {
        this.$store.dispatch('settings/changeSetting', {
          key: 'showSettings',
          value: val
        })
      }
        this.$store.dispatch("settings/changeSetting", {
          key: "showSettings",
          value: val,
        });
      },
    },
    topNav: {
      get() {
        return this.$store.state.settings.topNav
      }
    }
        return this.$store.state.settings.topNav;
      },
    },
  },
  methods: {
    async logout() {
      this.$confirm('确定注销并退出系统吗?', '提示', {
        confirmButtonText: '确定',
        cancelButtonText: '取消',
        type: 'warning'
      }).then(() => {
        this.$store.dispatch('LogOut').then(() => {
          location.href = '/index';
      this.$confirm("确定注销并退出系统吗?", "提示", {
        confirmButtonText: "确定",
        cancelButtonText: "取消",
        type: "warning",
      })
        .then(() => {
          this.$store.dispatch("LogOut").then(() => {
            location.href = "/index";
          });
        })
      }).catch(() => {});
    }
  }
}
        .catch(() => {});
    },
  },
};
</script>
<style lang="scss" scoped>
@@ -116,7 +120,7 @@
  overflow: hidden;
  //position: relative;
  background: #fff;
  box-shadow: 0 1px 4px rgba(0,21,41,.08);
  box-shadow: 0 1px 4px rgba(0, 21, 41, 0.08);
  position: fixed; /* å°†å¤´éƒ¨å›ºå®š */
  top: 0; /* åœ¨é¡¶éƒ¨å›ºå®š */
  width: 100%; /* å®½åº¦100%,覆盖整个视口 */
@@ -199,10 +203,10 @@
      &.hover-effect {
        cursor: pointer;
        transition: background .3s;
        transition: background 0.3s;
        &:hover {
          background: rgba(0, 0, 0, .025)
          background: rgba(0, 0, 0, 0.025);
        }
      }
    }
src/plugins/download.js
@@ -80,11 +80,30 @@
        downloadLoadingInstance.close();
      });
  },
  saveAs(text, name, opts) {
  async saveAs(text, name, opts) {
    if (typeof text === "string") {
      // è·¯å¾„下载
      saveAs(text, name, opts);
      Message.success("数据导出成功");
      try {
        let state = /\.(jpg|jpeg|png|gif)$/i.test(text); // åˆ¤æ–­æ˜¯å¦ä¸ºå›¾ç‰‡
        let url1 = "";
        if (state) {
          url1 = Vue.prototype.javaApi + "/img/" + text;
        } else {
          url1 = Vue.prototype.javaApi + "/word/" + text;
        }
        // ä½¿ç”¨ fetch èŽ·å–æ–‡ä»¶
        const response = await fetch(url1);
        if (!response.ok) {
          throw new Error("文件下载失败: " + response.statusText);
        }
        // å°†æ–‡ä»¶è½¬æ¢ä¸º Blob
        const blob = await response.blob();
        // ä½¿ç”¨ saveAs ä¿å­˜æ–‡ä»¶
        saveAs(blob, filename);
        Message.success("数据导出成功");
      } catch (error) {
        Message.error(error);
      }
    } else {
      // æµä¸‹è½½
      blobToText(text)
src/router/index.js
@@ -92,22 +92,22 @@
// åŠ¨æ€è·¯ç”±ï¼ŒåŸºäºŽç”¨æˆ·æƒé™åŠ¨æ€åŽ»åŠ è½½
export const dynamicRoutes = [
  // {
  //   // åŽŸææ–™ä¸‹å•
  //   path: '/materialOrder',
  //   component: Layout,
  //   hidden: true,
  //   permissions: ['business:order'],
  //   children: [
  //     {
  //       // é“œææ–™ä¸‹å•
  //       path: 'customsInspection',
  //       component: () => import('@/views/business/materialOrder/customsInspection'),
  //       name: 'customsInspection',
  //       meta: { title: '铜材料下单', activeMenu: '/business/materialOrder' }
  //     }
  //   ]
  // },
  {
    // ä¸‹å•页面
    path: '/inspectionOrder',
    component: Layout,
    hidden: true,
    permissions: ['business:order'],
    children: [
      {
        // é“œææ–™ä¸‹å•
        path: 'addOrder',
        component: () => import('@/views/business/inspectionOrder/add'),
        name: 'addOrder',
        meta: { title: '新增委托单', activeMenu: '/business/inspectionOrder' }
      }
    ]
  },
  {
    // ç”¨æˆ·ç®¡ç†
    path: "/system/user-auth",
src/store/modules/user.js
@@ -67,6 +67,7 @@
      return new Promise((resolve, reject) => {
        getInfo()
          .then((res) => {
            console.log("store-->",res);
            const user = res.user;
            let avatar = user.avatar || "";
            if (!isHttp(avatar)) {
src/utils/bigEval.js
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,114 @@
import Big from "big.js";
/**
 * å®‰å…¨è®¡ç®—器(支持 + - * / å’Œæ‹¬å·ï¼‰
 * @param {string} expr æ•°å­¦è¡¨è¾¾å¼ï¼Œå¦‚ "(0.1 + 0.2) * 3"
 * @returns {string} è®¡ç®—结果字符串
 */
export function bigEval(expr) {
  // æ­¥éª¤1:词法分析
  const tokens = tokenize(expr);
  // æ­¥éª¤2:转换为逆波兰表达式(后缀表达式)
  const rpn = shuntingYard(tokens);
  // æ­¥éª¤3:执行计算
  return evaluateRPN(rpn);
}
// è¯æ³•分析器
function tokenize(expr) {
  const tokens = [];
  let numBuffer = "";
  let prevToken = null;
  const flushNumber = () => {
    if (numBuffer) {
      if (numBuffer.startsWith(".")) numBuffer = "0" + numBuffer;
      tokens.push({ type: "number", value: numBuffer });
      numBuffer = "";
    }
  };
  for (let i = 0; i < expr.length; i++) {
    const c = expr[i];
    if (/\d|\./.test(c)) {
      numBuffer += c;
    } else if ("+-*/()".includes(c)) {
      flushNumber();
      // // å¤„理负号(当'-'前无数字或前有运算符时为负号)
      // if (c === "-" && (!prevToken ||
      //     (prevToken.type === "operator" && prevToken.value !== ")"))) {
      //   numBuffer += c;
      //   console.log("进入--》",c,tokens,prevToken);
      // } else {
      // }
      tokens.push({ type: "operator", value: c });
      prevToken = tokens[tokens.length - 1];
    } else if (c !== " ") {
      throw new Error(`非法字符: ${c}`);
    }
  }
  flushNumber();
  return tokens;
}
// è°ƒåº¦åœºç®—法生成逆波兰表达式
function shuntingYard(tokens) {
  const output = [];
  const stack = [];
  const precedence = { "+": 1, "-": 1, "*": 2, "/": 2 };
  for (const token of tokens) {
    if (token.type === "number") {
      output.push(token.value);
    } else if (token.value === "(") {
      stack.push(token.value);
    } else if (token.value === ")") {
      while (stack.length && stack[stack.length - 1] !== "(") {
        output.push(stack.pop());
      }
      stack.pop(); // å¼¹å‡ºå·¦æ‹¬å·
    } else {
      while (
        stack.length &&
        stack[stack.length - 1] !== "(" &&
        precedence[stack[stack.length - 1]] >= precedence[token.value]
      ) {
        output.push(stack.pop());
      }
      stack.push(token.value);
    }
  }
  while (stack.length) output.push(stack.pop());
  return output;
}
// æ‰§è¡Œé€†æ³¢å…°è¡¨è¾¾å¼è®¡ç®—
function evaluateRPN(rpn) {
  const stack = [];
  for (const token of rpn) {
    if (/\d|\./.test(token)) {
      stack.push(new Big(token));
    } else {
      const b = stack.pop();
      const a = stack.pop();
      switch (token) {
        case "+": stack.push(a.plus(b)); break;
        case "-": stack.push(a.minus(b)); break;
        case "*": stack.push(a.times(b)); break;
        case "/":
          if (b.eq(0)) throw new Error("除数不能为零");
          stack.push(a.div(b));
          break;
        default: throw new Error(`未知运算符: ${token}`);
      }
    }
  }
  return stack.pop().toString();
}
src/views/CNAS/externalService/supplierManage/component/CardPanel.vue
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,75 @@
<template>
  <div class="card-container" @click="handleCard">
    <div class="card-panel" :class="[isActive == index ? 'isActive' : '']">
      <el-image style="width: 80%; height: 70px" :src="javaApi + '/img/' + data.logo" fit="scale-down" />
    </div>
    <div class="title">
      {{ data.supplierName }}
    </div>
  </div>
</template>
<script>
export default {
  props: {
    data: {
      type: Object,
      default: () => { },
    },
    index: {
      type: Number,
      default: -1,
    },
    isActive: {
      type: Number,
      default: -1,
    },
  },
  data() {
    return {};
  },
  methods: {
    handleCard() {
      this.$emit("handleCard", this.data, this.index);
    },
  },
};
</script>
<style scoped>
.card-container {
  margin: 10px 10px 10px 0;
  text-align: center;
}
.card-panel {
  display: flex;
  align-items: center;
  justify-content: center;
  width: 90%;
  height: 90px;
  box-shadow: 0px 0px 20px 0px #0000001a;
  cursor: pointer;
  border-radius: 5px;
  border: 1px solid transparent;
}
.card-panel:hover {
  border: 1px solid #409eff;
  //background: #1D56C50D;
}
.isActive {
  border: 1px solid #409eff;
  //background: #1D56C50D;
}
.title {
  margin-top: 15px;
  margin-left: 10px;
  width: 80%;
  height: 30px;
  font-size: 13px;
  white-space: normal;
  word-break: break-all;
  overflow-wrap: break-word;
}
</style>
src/views/CNAS/externalService/supplierManage/component/ConsumableOverview.vue
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,125 @@
<template>
  <div>
    <el-row class="card-box">
      <el-col :span="4" v-for="(item, index) in cardList" :key="index">
        <CardPanel :isActive="isActive" :data="item" :index="index" @handleCard="handleCard" />
      </el-col>
    </el-row>
    <TableCard title="供应商信息" :showForm="false" style="margin-top: 5px">
      <template v-slot:table>
        <limsTable style="margin-top: 18px; padding: 0 15px" :height="'150px'" :column="columns"
          :table-data="tableData">
          <div slot="action" slot-scope="scope">
            <el-button type="text" @click="showDialog(scope)">查看</el-button>
          </div>
        </limsTable>
      </template>
    </TableCard>
    <Edit ref="editRef" @submit="getTableData" />
  </div>
</template>
<script>
import CardPanel from "./CardPanel.vue";
import TableCard from "@/components/TableCard/index.vue";
import limsTable from "@/components/Table/lims-table.vue";
import Edit from "./Edit.vue";
import {
  selectSupplierManagementByParentId,
} from "@/api/cnas/resourceDemand/externalService/supplierManage/supplierManage.js";
export default {
  components: { CardPanel, TableCard, limsTable, Edit },
  props: {
    contentsId: {
      type: Number,
      default: 0,
    },
  },
  data() {
    return {
      columns: [
        {
          label: "供应商编号",
          prop: "supplierRef",
        },
        {
          label: "供应商名称",
          prop: "supplierName",
        },
        {
          label: "地址",
          prop: "adress",
        },
        {
          label: "联系人",
          prop: "contacts",
        },
        {
          label: "联系电话",
          prop: "phone",
        },
        {
          label: "传真",
          prop: "fax",
        },
        {
          label: "网址",
          prop: "website",
        },
        {
          label: "邮箱",
          prop: "email",
        },
        {
          label: "上次更新时间",
          prop: "updateTime",
        },
        {
          fixed: "right",
          dataType: "slot",
          slot: "action",
          label: "操作",
        },
      ],
      cardList: [],
      tableData: [],
      isActive: -1,
    };
  },
  watch: {
    contentsId(newVal) {
      if (newVal !== 0) {
        this.getTableData();
      }
    },
  },
  mounted() {
    this.getTableData(this.contentsId);
  },
  methods: {
    // èŽ·å–è¡¨æ ¼æ•°æ®
    async getTableData() {
      const { code, data } = await selectSupplierManagementByParentId(this.contentsId);
      if (code == 200) {
        this.cardList = data;
      }
    },
    handleCard(data, index) {
      this.isActive = index;
      this.tableData = [data];
    },
    showDialog(row) {
      this.$refs.editRef.openDialog(row);
    },
  },
};
</script>
<style scoped>
.card-box {
  width: 100%;
  padding-left: 5px;
  padding-right: 5px;
  height: 45vh;
  overflow-y: auto;
}
</style>
src/views/CNAS/externalService/supplierManage/component/Contents.vue
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,211 @@
<template>
  <div class="parent-class">
    <div style="display: flex; justify-content: flex-end; margin-right: 20px">
      <el-button type="primary" @click="addContents" size="small" icon="el-icon-plus">添加子节点</el-button>
      <el-button type="danger" @click="deletetContents" size="small" icon="el-icon-delete">删除子节点</el-button>
      <el-button type="warning" @click="updateContents" size="small" icon="el-icon-edit">更新子节点</el-button>
    </div>
    <el-form label-width="100px">
      <el-form-item label="节点名称">
        <el-input v-model="form.nodeName" style="width: 200px" size="small"></el-input>
      </el-form-item>
      <el-form-item label="代号">
        <el-input v-model="form.code" style="width: 200px" size="small"></el-input>
      </el-form-item>
    </el-form>
    <!-- æ–°å¢žå¼¹æ¡† -->
    <el-dialog title="添加节点" :visible.sync="dialogVisible" width="40%">
      <el-form label-width="100px" :model="addForm" ref="addForm" :rules="rules">
        <el-form-item label="父节点名称">
          <el-cascader v-model="addForm.parentId" :options="treeData"
            :props="{ checkStrictly: true, value: 'id', label: 'nodeName' }" clearable></el-cascader>
        </el-form-item>
        <el-form-item label="节点名称" prop="nodeName">
          <el-input v-model="addForm.nodeName" style="width: 200px" size="small"></el-input>
        </el-form-item>
        <el-form-item label="代号">
          <el-input v-model="addForm.code" style="width: 200px" size="small"></el-input>
        </el-form-item>
      </el-form>
      <span slot="footer" class="dialog-footer">
        <el-button @click="dialogVisible = false">取 æ¶ˆ</el-button>
        <el-button type="primary" @click="submitForm">ç¡® å®š</el-button>
      </span>
    </el-dialog>
  </div>
</template>
<script>
import {
  selectSuppliersDirectoryContentsById,
  addSuppliersDirectoryContents,
  updateSuppliersDirectoryContents,
  deleteSuppliersDirectoryContentsById,
  getSuppliersDirectoryContentsNodeNames,
} from "@/api/cnas/resourceDemand/externalService/supplierManage/supplierManage.js";
import { selectUserCondition } from "@/api/system/user";
export default {
  props: {
    id: {
      type: Number,
      default: 0,
    },
    treeData: {
      type: Array,
      default: () => [],
    },
    from: {
      type: String,
      default: ""
    }
  },
  data() {
    return {
      nodeNames: [],
      users: [],
      dialogVisible: false,
      form: {
        nodeName: "",
        code: "",
      },
      addForm: {
        nodeName: "",
        code: "",
        parentId: null,
      },
      rules: {
        nodeName: [
          { required: true, message: "请输入节点名称", trigger: "blur" },
        ],
      },
    };
  },
  mounted() {
    if (this.id !== 0) {
      this.getContentsDetail();
    }
    this.getNodeNames();
    this.getUserList();
  },
  watch: {
    id(newVal, oldVal) {
      if (newVal !== 0) {
        console.log(newVal, oldVal);
        this.getContentsDetail();
      }
    },
  },
  methods: {
    // èŽ·å–ç›®å½•è¯¦æƒ…
    getContentsDetail() {
      selectSuppliersDirectoryContentsById({ id: this.id }).then((res) => {
        if (res.data == null) {
          this.form = {
            nodeName: "",
            code: "",
          };
          return;
        }
        this.form = res.data;
      });
    },
    // æ–°å»º
    addContents() {
      this.dialogVisible = true;
      this.resetForm();
    },
    resetForm() {
      this.addForm = {
        nodeName: "",
        code: "",
        parentId: null,
      };
    },
    submitForm() {
      let flag = true;
      this.$refs.addForm.validate((valid) => {
        if (!valid) {
          flag = false;
          return false;
        }
      });
      if (this.addForm.parentId) {
        this.addForm.parentId =
          this.addForm.parentId[this.addForm.parentId.length - 1];
      }
      if (!flag) {
        return;
      }
      addSuppliersDirectoryContents(this.addForm).then((res) => {
        if (res.code === 200) {
          this.$message.success("添加成功");
          this.dialogVisible = false;
          this.$emit("contentsUpdate", res.data);
          this.getContentsDetail();
        }
      });
    },
    // æ›´æ–°
    updateContents() {
      Object.keys(this.form).forEach((key) => {
        if (key == "children") {
          delete this.form[key];
        }
      });
      updateSuppliersDirectoryContents(this.form).then((res) => {
        if (res.code === 200) {
          this.$message.success("更新成功");
          this.$emit("contentsUpdate", this.id);
          this.dialogVisible = false;
          this.getContentsDetail();
        }
      });
    },
    // åˆ é™¤
    deletetContents() {
      if (
        this.form.id == null ||
        this.form.id == "" ||
        this.form.id == undefined
      ) {
        this.$message.error("请选择要删除的节点");
        return;
      }
      this.$confirm("此操作将删除该节点, æ˜¯å¦ç»§ç»­?", "提示", {
        confirmButtonText: "确定",
        cancelButtonText: "取消",
        type: "warning",
      }).then(() => {
        deleteSuppliersDirectoryContentsById({ id: this.form.id }).then((res) => {
          if (res.code == 200) {
            this.$message.success("删除成功");
            this.$emit("contentsUpdate", this.form.parentId, true);
            this.getContentsDetail();
          }
        });
      });
    },
    // èŽ·å–æ‰€æœ‰ç›®å½•èŠ‚ç‚¹
    getNodeNames() {
      getSuppliersDirectoryContentsNodeNames().then((res) => {
        this.nodeNames = res.data;
      });
    },
    // èŽ·å–æ‰€æœ‰ç”¨æˆ·
    getUserList() {
      selectUserCondition().then((res) => {
        this.users = res.data;
      });
    },
  },
  created() { },
};
</script>
<style scoped>
.parent-class {
  margin-top: 20px;
}
</style>
src/views/CNAS/externalService/supplierManage/component/Edit.vue
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,217 @@
<template>
  <el-dialog title="供应商详情" width="40%" :visible.sync="dialogVisible">
    <el-form :model="model" label-width="auto">
      <el-row>
        <el-col :span="12">
          <el-form-item label="供应商">
            <el-input v-model="model.supplierName" placeholder="请输入" />
          </el-form-item>
        </el-col>
        <el-col :span="12">
          <el-form-item label="编号">
            <el-input v-model="model.supplierRef" placeholder="请输入" />
          </el-form-item>
        </el-col>
      </el-row>
      <el-row>
        <el-col :span="24">
          <el-form-item label="供应商物品服务名称">
            <el-input v-model="model.supplierItemServiceName" placeholder="请输入" />
          </el-form-item>
        </el-col>
      </el-row>
      <el-row>
        <el-col :span="12">
          <el-form-item label="邮编">
            <el-input v-model="model.postalCode" placeholder="请输入" />
          </el-form-item>
        </el-col>
        <el-col :span="12">
          <el-form-item label="地址">
            <el-input v-model="model.adress" placeholder="请输入" />
          </el-form-item>
        </el-col>
      </el-row>
      <el-row>
        <el-col :span="24">
          <el-form-item label="logo">
            <div class="rows">
              <el-input placeholder="请输入" v-model="model.logo" style="width: 100%" />
              <el-upload ref="upload" style="float: left; margin: 0 12px 0 20px" :action="action"
                :show-file-list="false" :on-success="onSuccess">
                <el-button class="uploadFile" slot="trigger" type="primary">浏览</el-button>
              </el-upload>
            </div>
          </el-form-item>
        </el-col>
      </el-row>
      <el-row>
        <el-col :span="12">
          <el-form-item label="联系人">
            <el-input v-model="model.contacts" placeholder="请输入" />
          </el-form-item>
        </el-col>
        <el-col :span="12">
          <el-form-item label="联系电话">
            <el-input v-model="model.phone" placeholder="请输入" />
          </el-form-item>
        </el-col>
      </el-row>
      <el-row>
        <el-col :span="12">
          <el-form-item label="户名">
            <el-input v-model="model.householdName" placeholder="请输入" />
          </el-form-item>
        </el-col>
        <el-col :span="12">
          <el-form-item label="传真">
            <el-input v-model="model.fax" placeholder="请输入" />
          </el-form-item>
        </el-col>
      </el-row>
      <el-row>
        <el-col :span="12">
          <el-form-item label="开户行">
            <el-input v-model="model.openingName" placeholder="请输入" />
          </el-form-item>
        </el-col>
        <el-col :span="12">
          <el-form-item label="网址">
            <el-input v-model="model.website" placeholder="请输入" />
          </el-form-item>
        </el-col>
      </el-row>
      <el-row>
        <el-col :span="12">
          <el-form-item label="账号">
            <el-input v-model="model.accountName" placeholder="请输入" />
          </el-form-item>
        </el-col>
        <el-col :span="12">
          <el-form-item label="Email">
            <el-input v-model="model.email" placeholder="请输入" />
          </el-form-item>
        </el-col>
      </el-row>
    </el-form>
    <span slot="footer">
      <el-button @click="dialogVisible = false">取 æ¶ˆ</el-button>
      <el-button type="primary" @click="submit">保 å­˜</el-button>
    </span>
  </el-dialog>
</template>
<script>
import {
  addSupplierManagement,
  updateSupplierManagement,
} from "@/api/cnas/resourceDemand/externalService/supplierManage/supplierManage.js";
export default {
  props: {
    contentsId: {
      type: Number,
      default: 0,
    },
  },
  data() {
    return {
      dialogVisible: false,
      model: {
        parentId: null,
        supplierManagementId: undefined,
        supplierName: undefined, // ä¾›åº”商
        supplierRef: undefined, // ç¼–号
        supplierItemServiceName: undefined, // ä¾›åº”商物品服务名称
        postalCode: undefined, // é‚®ç¼–
        adress: undefined, // åœ°å€
        logo: undefined, // logo
        contacts: undefined, // è”系人
        phone: undefined, // è”系电话
        householdName: undefined, // æˆ·å
        fax: undefined, // ä¼ çœŸ
        openingName: undefined, // å¼€æˆ·è¡Œ
        website: undefined, // ç½‘址
        accountName: undefined, // è´¦å·
        email: undefined, // Email
      },
    };
  },
  computed: {
    action() {
      return `${this.javaApi}/personBasicInfo/saveCNASFile`;
    },
  },
  methods: {
    openDialog(form) {
      console.log("12--", this.contentsId);
      if (form) {
        this.model.supplierManagementId = form.row.supplierManagementId;
        this.model.supplierName = form.row.supplierName;
        this.model.supplierRef = form.row.supplierRef;
        this.model.supplierItemServiceName = form.row.supplierItemServiceName;
        this.model.postalCode = form.row.postalCode;
        this.model.adress = form.row.adress;
        this.model.logo = form.row.logo;
        this.model.contacts = form.row.contacts;
        this.model.phone = form.row.phone;
        this.model.householdName = form.row.householdName;
        this.model.fax = form.row.fax;
        this.model.openingName = form.row.openingName;
        this.model.website = form.row.website;
        this.model.accountName = form.row.accountName;
        this.model.email = form.row.email;
        this.model.parentId = form.row.parentId;
      } else {
        this.model = {
          parentId: this.contentsId,
          supplierManagementId: undefined,
          supplierName: undefined, // ä¾›åº”商
          supplierRef: undefined, // ç¼–号
          supplierItemServiceName: undefined, // ä¾›åº”商物品服务名称
          postalCode: undefined, // é‚®ç¼–
          adress: undefined, // åœ°å€
          logo: undefined, // logo
          contacts: undefined, // è”系人
          phone: undefined, // è”系电话
          householdName: undefined, // æˆ·å
          fax: undefined, // ä¼ çœŸ
          openingName: undefined, // å¼€æˆ·è¡Œ
          website: undefined, // ç½‘址
          accountName: undefined, // è´¦å·
          email: undefined, // Email
        };
      }
      // this.model.parentId = this.contentsId;
      this.dialogVisible = true;
    },
    async submit() {
      if (this.model.supplierManagementId) {
        const { code } = await updateSupplierManagement(this.model);
        if (code == 200) {
          this.$message.success("修改成功");
          this.$emit("submit");
          this.dialogVisible = false;
        }
      } else {
        const { code } = await addSupplierManagement(this.model);
        if (code == 200) {
          this.$message.success("新增成功");
          this.$emit("submit");
          this.dialogVisible = false;
        }
      }
    },
    async onSuccess(response) {
      this.$set(this.model, "logo", response.data);
    },
  },
};
</script>
<style scoped>
.rows {
  width: 100%;
  display: flex;
  justify-content: space-between;
}
</style>
src/views/CNAS/externalService/supplierManage/component/QualifiedSuppliers.vue
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,172 @@
<template>
  <div>
    <TableCard :showTitle="false">
      <template slot="form">
        <div class="action-box">
          <div></div>
          <div class="flex">
            <el-button :disabled="contentsId == 0" icon="el-icon-plus" type="primary" @click="showDialog()">
              æ–°å»º
            </el-button>
            <el-button icon="el-icon-upload2" @click="exportExcel">
              å¯¼å‡ºExcel
            </el-button>
          </div>
        </div>
      </template>
      <template v-slot:table>
        <limsTable :column="columns" :height="'calc(100vh - 300px)'" :isSelection="true" :table-data="tableData"
          style="margin-top: 18px; padding: 0 15px;" :page="page" @pagination="pagination">
          <div slot="action" slot-scope="scope">
            <el-button type="text" @click="showDialog(scope)">编辑</el-button>
            <el-button type="text" @click="delRow(scope)">
              <span style="color: #F56C6C">删除</span>
            </el-button>
          </div>
        </limsTable>
      </template>
    </TableCard>
    <Edit ref="editRef" :contentsId="contentsId" @submit="getTableData" />
  </div>
</template>
<script>
import TableCard from '@/components/TableCard/index.vue';
import limsTable from "@/components/Table/lims-table.vue";
import Edit from "./Edit.vue"
import {
  selectQualifiedSupplierManagementPage,
  delSupplierManagement,
  exportSupplierManagement,
} from "@/api/cnas/resourceDemand/externalService/supplierManage/supplierManage.js";
export default {
  components: {
    TableCard, limsTable, Edit
  },
  props: {
    contentsId: {
      type: Number,
      default: 0
    }
  },
  data() {
    return {
      columns: [
        {
          label: "供应商编号",
          prop: "supplierRef"
        },
        {
          label: "供应商",
          prop: "supplierName"
        },
        {
          label: "供应物品(服务)名称",
          prop: "supplierItemServiceName"
        },
        {
          label: "地址",
          prop: "adress"
        },
        {
          label: "联系电话",
          prop: "phone"
        },
        {
          fixed: "right",
          dataType: "slot",
          slot: "action",
          label: "操作"
        }
      ],
      tableData: [],
      page: {
        current: 1,
        size: 20,
        total: 0
      },
    }
  },
  mounted() {
    this.getTableData()
  },
  watch: {
    contentsId(newVal) {
      if (newVal !== 0) {
        this.getTableData();
      }
    },
  },
  methods: {
    // èŽ·å–è¡¨æ ¼æ•°æ®
    async getTableData() {
      const { code, data } = await selectQualifiedSupplierManagementPage({
        ...this.page,
        parentId: this.contentsId
      })
      if (code == 200) {
        this.tableData = data.records;
        this.page.total = data.total;
        this.page.current = data.current;
        this.page.size = data.size;
      }
    },
    showDialog(scope) {
      this.$refs.editRef.openDialog(scope)
    },
    pagination({ page, limit }) {
      this.page.current = page;
      this.page.size = limit;
      this.getTableData();
    },
    // åˆ é™¤æ•°æ®
    delRow(scope) {
      this.$confirm('此操作将永久删除该文件, æ˜¯å¦ç»§ç»­?', '提示', {
        confirmButtonText: '确定',
        cancelButtonText: '取消',
        type: 'warning'
      }).then(async () => {
        const { code } = await delSupplierManagement(scope.row.supplierManagementId)
        if (code == 200) {
          this.$message.success('删除成功')
          this.getTableData()
        } else {
          this.$message.error('删除失败')
        }
      }).catch(() => {
        this.$message({
          type: 'info',
          message: '已取消删除'
        });
      })
    },
    async exportExcel() {
      const res = await exportSupplierManagement(this.contentsId)
      const blob = new Blob([res], { type: 'application/octet-stream' });
      this.$download.saveAs(blob, '合格供应商.xlsx')
    }
  }
}
</script>
<style scoped>
.flex {
  display: flex;
}
.action-box {
  width: 100%;
  padding-top: 10px;
  display: flex;
  align-items: center;
  justify-content: space-between;
}
.pagination {
  padding-top: 15px;
  padding-right: 10px;
  display: flex;
  justify-content: space-between
}
</style>
src/views/CNAS/externalService/supplierManage/index.vue
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,149 @@
<template>
  <div class="purchase-page">
    <div class="purchase-left">
      <el-input v-model="form.nodeName" placeholder="请输入节点名称" suffix-icon="el-icon-search" size="small" clearable
        @keyup.enter.native="searchFilter(treeData)" @blur="searchFilter(treeData)" @clear="searchFilter(treeData)">
      </el-input>
      <el-tree ref="tree" highlight-current :data="treeData" :props="defaultProps" @node-click="handleNodeClick"
        :default-expanded-keys="expandedKeys" node-key="id">
      </el-tree>
    </div>
    <div class="purchase-right">
      <el-tabs v-model="activeName" @tab-click="handleClick" style="height: 100%">
        <el-tab-pane label="总览" name="1" style="height: 100%">
          <ConsumableOverview v-if="activeName == '1'" ref="consumableOverviewRef" :contentsId="contentsId"
            style="height: 100%"></ConsumableOverview>
        </el-tab-pane>
        <el-tab-pane label="合格供方名录" name="2">
          <QualifiedSuppliers v-if="activeName == '2'" :contentsId="contentsId"></QualifiedSuppliers>
        </el-tab-pane>
        <el-tab-pane label="目录维护" name="3">
          <Contents v-if="activeName == '3'" :id="contentsId" :treeData="treeData" @contentsUpdate="contentsUpdate"
            from="供应树"></Contents>
        </el-tab-pane>
      </el-tabs>
    </div>
  </div>
</template>
<script>
import Contents from "./component/Contents.vue";
import ConsumableOverview from "./component/ConsumableOverview.vue";
import QualifiedSuppliers from "./component/QualifiedSuppliers.vue";
import { suppliersDirectoryContentsListing } from "@/api/cnas/resourceDemand/externalService/supplierManage/supplierManage.js";
export default {
  components: {
    ConsumableOverview,
    QualifiedSuppliers,
    Contents,
  },
  data() {
    return {
      contentsId: 0,
      activeName: "1",
      form: {
        nodeName: "",
      },
      treeData: [],
      expandedKeys: [],
      defaultProps: {
        children: "children",
        label: "nodeName",
      },
    };
  },
  mounted() {
    this.getTreeData();
  },
  methods: {
    searchFilter() {
      this.treeData = JSON.parse(JSON.stringify(this.treeData));
      this.expandedKeys = [];
      if (this.form.nodeName == "") {
        return;
      }
      const findNodesWithFiber = (nodes) => {
        nodes.forEach((node) => {
          if (node.nodeName && node.nodeName.includes(this.form.nodeName)) {
            this.expandedKeys.push(node.id);
          }
          if (node.children && node.children.length > 0) {
            findNodesWithFiber(node.children);
          }
        });
      };
      findNodesWithFiber(this.treeData);
    },
    // ç›®å½•维护更新
    contentsUpdate(val, flag = false) {
      if (val) {
        this.getTreeData();
        this.expandedKeys = [];
        if (flag) {
          const findNodesWithFiber = (nodes) => {
            nodes.forEach((item) => {
              if (item.parentId == val) {
                this.expandedKeys.push(item.id);
              }
              if (item.children && item.children.length > 0) {
                findNodesWithFiber(item.children);
              }
            });
          };
          findNodesWithFiber(this.treeData);
          this.expandedKeys = this.expandedKeys.filter((item) => item !== val);
        } else {
          this.expandedKeys.push(val);
        }
      } else {
        this.getTreeData();
      }
    },
    // æŸ¥è¯¢æ‰€æœ‰ç›®å½•
    getTreeData() {
      suppliersDirectoryContentsListing().then((res) => {
        this.treeData = res.data;
      });
    },
    // ç‚¹å‡»æ ‘节点
    handleNodeClick(data) {
      this.contentsId = data.id;
      // this.$refs.consumableOverviewRef.getTableData(data.id)
    },
    handleClick(tab, event) { },
  },
};
</script>
<style scoped>
.purchase-left {
  width: 250px;
  height: 100%;
  background: #fff;
  margin-right: 10px;
  border-radius: 16px;
  box-sizing: border-box;
  padding: 10px 16px;
  flex-shrink: 0;
}
.purchase-right {
  background: #fff;
  width: calc(100% - 15em);
  height: 100%;
  border-radius: 16px;
  box-sizing: border-box;
  padding: 10px 16px;
}
.purchase-page {
  display: flex;
  padding-top: 10px;
  padding-bottom: 10px;
  box-sizing: border-box;
  width: 100%;
}
>>>.el-tabs__content {
  height: calc(100% - 40px);
}
</style>
src/views/CNAS/process/complaint/index.vue
@@ -456,7 +456,7 @@
    },
    // æŸ¥çœ‹æŠ•诉
    handleLook(row) {
      addProcessComplain({ id: row.id }).then((res) => {
      getProcessComplain({ id: row.id }).then((res) => {
        this.currentInfo = res.data
        this.currentInfo0 = this.HaveJson(res.data)
        this.title = '查看投诉'
src/views/CNAS/process/ensureResults/ensureResultsValidity/components/ViewRecord.vue
@@ -107,15 +107,7 @@
    },
    // ä¸‹è½½
    upload(row) {
      let url = '';
      if (row.type == 1) {
        url = this.javaApi + '/img/' + row.fileUrl
        this.$download.saveAs(url, row.fileName)
      } else {
        url = this.javaApi + '/word/' + row.fileUrlrow.fileName;
        link.click();
        this.$download.saveAs(url, row.fileName)
      }
      this.$download.saveAs(row.fileUrl, row.fileName)
    },
    // åˆ é™¤
    delete(row) {
src/views/CNAS/process/method/methodVerification/components/ViewTestRecord.vue
@@ -106,14 +106,7 @@
    },
    // ä¸‹è½½
    upload(row) {
      let url = '';
      if (row.type == 1) {
        url = this.javaApi + '/img/' + row.fileUrl
        this.$download.saveAs(url, row.fileName)
      } else {
        url = this.javaApi + '/word/' + row.fileUrl
        this.$download.saveAs(url, row.fileName)
      }
      this.$download.saveAs(row.fileUrl, row.fileName)
    },
    // åˆ é™¤
    delete(row) {
src/views/CNAS/process/method/methodVerification/components/calibrationsFileDia.vue
@@ -93,14 +93,7 @@
    },
    // ä¸‹è½½
    upload(row) {
      let url = '';
      if (row.type == 1) {
        url = this.javaApi + '/img/' + row.fileUrl
        this.$download.saveAs(url, row.fileName)
      } else {
        url = this.javaApi + '/word/' + row.fileUrl
        this.$download.saveAs(url, row.fileName)
      }
      this.$download.saveAs(row.fileUrl, row.fileName)
    },
  }
};
src/views/CNAS/process/method/methodVerification/components/viewWorkPermitDia.vue
@@ -89,14 +89,7 @@
    },
    // ä¸‹è½½
    upload(row) {
      let url = '';
      if (row.type == 1) {
        url = this.javaApi + '/img/' + row.fileUrl
        this.$download.saveAs(url, row.fileName)
      } else {
        url = this.javaApi + '/word/' + row.fileUrl
        this.$download.saveAs(url, row.fileName)
      }
      this.$download.saveAs(row.fileUrl, row.fileName)
    },
  },
};
src/views/CNAS/process/reportResults/index.vue
@@ -223,8 +223,7 @@
      exportProcessReport({ ids: this.mutilSelect.map(m => m.id) }).then(res => {
        this.outLoading = false
        if (res.code === 201) return
        const url = this.javaApi + '/word/' + res.data;
        this.$download.saveAs(url, "报告结果");
        this.$download.saveAs(res.data, "报告结果")
      })
    },
    openAdd() {
src/views/CNAS/process/sampleDisposal/sampleDisposal.vue
@@ -506,8 +506,7 @@
    // å¯¼å‡ºè¯¦æƒ…
    handleDown0(row) {
      // åŽç«¯ä¸‹è½½
      let url = this.javaApi + '/word/' + row.url
      this.$download.saveAs(url, row.month + ' æ ·å“å¤„理申请表');
      this.$download.saveAs(row.url, row.month + ' æ ·å“å¤„理申请表')
    },
    handleDelete(row) {
      this.$confirm("是否删除该条数据?", "提示", {
src/views/CNAS/process/sampleDisposal/sampleRegistration.vue
@@ -535,8 +535,7 @@
    // å¯¼å‡ºè¯¦æƒ…
    handleDown0(row) {
      // åŽç«¯ä¸‹è½½
      let url = this.javaApi + '/word/' + row.url
      this.$download.saveAs(url, row.month + ' æ ·å“æŽ¥æ”¶è¡¨')
      this.$download.saveAs(row.url, row.month + ' æ ·å“æŽ¥æ”¶è¡¨')
    },
    // åˆ é™¤
    handleDelete(row) {
src/views/CNAS/process/uncertainty/index.vue
@@ -183,8 +183,7 @@
      })
    },
    handleDown(row) {
      let url = this.javaApi + '/word/' + row.reportUrl
      this.$download.saveAs(url, row.reportName);
      this.$download.saveAs(row.reportUrl, row.reportName)
    },
    beforeUpload(file) {
      if (file.size > 1024 * 1024 * 10) {
src/views/CNAS/resourceDemand/facilitiesEnvironment/component/Personnel-management-dia.vue
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,212 @@
<template>
  <div>
    <el-dialog v-loading="diaLoading" :close-on-click-modal="false"
               :close-on-press-escape="false"
               :visible.sync="formDia"
               title="外来人员管理信息"
               width="80%" @close="closeThreeWastesDia">
      <el-form ref="form" :model="form" :rules="rules" label-width="auto">
        <el-col :span="12">
          <el-form-item label="日期" prop="registerDate">
            <el-date-picker v-model="form.registerDate"
                            clearable
                            format="yyyy-MM-dd"
                            placeholder="选择日期"
                            size="small"
                            type="date"
                            value-format="yyyy-MM-dd">
            </el-date-picker>
          </el-form-item>
        </el-col>
        <el-col :span="12">
          <el-form-item label="进入区域" prop="area">
            <el-input v-model="form.area" clearable size="small"></el-input>
          </el-form-item>
        </el-col>
        <el-col :span="12">
          <el-form-item label="进入人员" prop="personnel">
            <el-input v-model="form.personnel" clearable size="small"></el-input>
          </el-form-item>
        </el-col>
        <el-col :span="12">
          <el-form-item label="进入原因" prop="reason">
            <el-input v-model="form.reason" clearable size="small"></el-input>
          </el-form-item>
        </el-col>
        <el-col :span="12">
          <el-form-item label="陪同人员" prop="accompanyingId">
            <el-select v-model="form.accompanyingId" clearable filterable
                       placeholder="请选择陪同人员" size="small">
              <el-option v-for="(item,i) in personList" :key="i" :label="item.label" :value="item.value">
              </el-option>
            </el-select>
          </el-form-item>
        </el-col>
        <el-col :span="12">
          <el-form-item label="批准人签名" prop="approveId">
            <el-select v-model="form.approveId" clearable filterable
                       placeholder="请选择批准人" size="small">
              <el-option v-for="(item,i) in personList" :key="i" :label="item.label" :value="item.value">
              </el-option>
            </el-select>
          </el-form-item>
        </el-col>
        <el-col :span="12">
          <el-form-item label="保密及其它情况" prop="confidentiality">
            <el-input v-model="form.confidentiality" clearable size="small"></el-input>
          </el-form-item>
        </el-col>
        <el-col :span="12">
          <el-form-item label="备注" prop="remark">
            <el-input v-model="form.remark" clearable size="small"></el-input>
          </el-form-item>
        </el-col>
      </el-form>
      <span slot="footer" class="dialog-footer">
        <el-button @click="closeThreeWastesDia">取 æ¶ˆ</el-button>
        <el-button :loading="loading" type="primary" @click="handleEdit">提 äº¤</el-button>
      </span>
    </el-dialog>
  </div>
</template>
<script>
import {
  getForeignRegisterOne,
  selectUserCondition,
  addForeignRegister,
  updateForeignRegister
} from '@/api/cnas/resourceDemand/foreignRegister/foreignRegister'
export default {
  name: 'Personnel-management-dia',
  // import å¼•入的组件需要注入到对象中才能使用
  components: {},
  data() {
    // è¿™é‡Œå­˜æ”¾æ•°æ®
    return {
      formDia: false,
      diaLoading: false,
      loading: false,
      form: {
        registerDate: '',
        area: '',
        personnel: '',
        reason: '',
        accompanyingId: '',
        accompanyingName: '',
        approveId: '',
        approveName: '',
        confidentiality: '',
        remark: '',
      },
      rules: {
        registerDate: [{required: true, message: '请选择日期',trigger: 'change'}],
        area: [{required: true, message: '请填写进入区域',trigger: 'blur'}],
        personnel: [{required: true, message: '请填写进入人员',trigger: 'blur'}],
        reason: [{required: true, message: '请填写进入原因',trigger: 'blur'}],
        accompanyingId: [{required: true, message: '请选择陪同人员',trigger: 'change'}],
        approveId: [{required: true, message: '请选择批准人',trigger: 'change'}],
        confidentiality: [{required: true, message: '请填写保密及其他情况',trigger: 'blur'}],
        remark: [{required: false, message: '请填写备注',trigger: 'blur'}],
      },
      operationType: '',
      personList: []
    };
  },
  mounted() {
  },
  // æ–¹æ³•集合
  methods: {
    // æ‰“开弹框
    openDia (type, row) {
      this.getAuthorizedPerson()
      this.formDia = true
      this.operationType = type
      if (type !== 'add') {
        this.searchInfo(row)
      } else {
        this.form.accompanyingId = JSON.parse(localStorage.getItem("user")).userId
      }
    },
    // æŸ¥è¯¢è¯¦æƒ…
    searchInfo (row) {
      this.diaLoading = true
      getForeignRegisterOne({registerId : row.registerId}).then(res =>{
        this.diaLoading = false
        if (res.code === 200){
          this.form = res.data
        }
      }).catch(err => {
        console.log(err)
        this.diaLoading = false
      })
    },
    // æäº¤å¼¹æ¡†æ•°æ®
    handleEdit () {
      this.$refs['form'].validate((valid) => {
        if (valid) {
          this.loading = true
          const internalImplementDto = this.HaveJson(this.form)
          const index = this.personList.findIndex(item => item.value === internalImplementDto.accompanyingId)
          if (index > -1) {
            internalImplementDto.accompanyingName = this.personList[index].label
          }
          const index1 = this.personList.findIndex(item => item.value === internalImplementDto.approveId)
          if (index1 > -1) {
            internalImplementDto.approveName = this.personList[index].label
          }
          if (this.operationType === 'add') {
            addForeignRegister(internalImplementDto).then(res => {
              this.loading = false
              if (res.code === 200){
                this.$message.success('操作成功')
                this.closeThreeWastesDia()
              }
            }).catch(err => {
              console.log('err---', err);
              this.loading = false
            })
          } else if (this.operationType === 'edit') {
            updateForeignRegister(internalImplementDto).then(res => {
              this.loading = false
              if (res.code === 200){
                this.$message.success('操作成功')
                this.closeThreeWastesDia()
              }
            }).catch(err => {
              console.log('err---', err);
              this.loading = false
            })
          }
        } else {
          console.log('error submit!!');
          return false;
        }
      });
    },
    closeThreeWastesDia () {
      this.$refs.form.resetFields();
      this.formDia = false
      this.$emit('closeThreeWastesDia')
    },
    getAuthorizedPerson() {
      selectUserCondition().then(res => {
        let data = []
        res.data.forEach(a => {
          data.push({
            label: a.name,
            value: a.id
          })
        })
        this.personList = data
      })
    },
  }
};
</script>
<style scoped>
</style>
src/views/CNAS/resourceDemand/facilitiesEnvironment/component/Personnel-management.vue
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,217 @@
<template>
  <div class="capacity-scope">
    <div class="search">
      <div>
        <el-form :model="searchForm" ref="searchForm" size="small" :inline="true">
          <el-form-item label="日期" prop="registerDate">
            <el-date-picker v-model="searchForm.registerDate" clearable format="yyyy-MM-dd" placeholder="选择日期"
              size="small" style="width: 100%" type="date" value-format="yyyy-MM-dd">
            </el-date-picker>
          </el-form-item>
          <el-form-item>
            <el-button type="primary" icon="el-icon-search" size="mini" @click="searchList">查 è¯¢</el-button>
            <el-button icon="el-icon-refresh" size="mini" @click="resetSearchForm">重 ç½®</el-button>
          </el-form-item>
        </el-form>
      </div>
      <div>
        <el-button size="medium" @click="handleDown">导 å‡º</el-button>
        <el-button size="medium" type="primary" @click="openFormDia('add')">新 å¢ž</el-button>
      </div>
    </div>
    <div class="table">
      <lims-table :tableData="tableData" :column="tableColumn" :height="'calc(100vh - 280px)'" @pagination="pagination"
        :page="page" :tableLoading="tableLoading"></lims-table>
    </div>
    <personnel-management-dia v-if="threeWastesDia" ref="threeWastesDia"
      @closeThreeWastesDia="closeThreeWastesDia"></personnel-management-dia>
  </div>
</template>
<script>
import PersonnelManagementDia from '../component/Personnel-management-dia.vue';
import limsTable from '@/components/Table/lims-table.vue'
import {
  pageForeignRegister,
  delForeignRegister,
  exportForeignRegister
} from '@/api/cnas/resourceDemand/foreignRegister/foreignRegister'
export default {
  name: 'Personnel-management',
  // import å¼•入的组件需要注入到对象中才能使用
  components: { limsTable, PersonnelManagementDia },
  data() {
    // è¿™é‡Œå­˜æ”¾æ•°æ®
    return {
      searchForm: {
        registerDate: '',
      },
      tableColumn: [
        {
          label: '日期',
          prop: 'registerDate',
          minWidth: '100'
        },
        {
          label: '进入区域',
          prop: 'area',
          minWidth: '100'
        },
        {
          label: '进入人员',
          prop: 'personnel',
          minWidth: '100'
        },
        {
          label: '进入原因',
          prop: 'reason',
          minWidth: '100'
        },
        {
          label: '陪同人员',
          prop: 'accompanyingName',
          minWidth: '100'
        },
        {
          label: '批准人签名',
          prop: 'approveName',
          minWidth: '100'
        },
        {
          label: '保密及其他情况',
          prop: 'confidentiality',
          minWidth: '100'
        },
        {
          label: '备注',
          prop: 'remark',
          minWidth: '100'
        },
        {
          dataType: 'action',
          fixed: 'right',
          minWidth: '220',
          label: '操作',
          operation: [
            {
              name: '编辑',
              type: 'text',
              clickFun: (row) => {
                this.openFormDia('edit', row);
              },
            },
            {
              name: '删除',
              type: 'text',
              color: '#f56c6c',
              clickFun: (row) => {
                this.delPlan(row)
              },
            }
          ]
        }
      ],
      tableData: [],
      tableLoading: false,
      page: {
        total: 0,
        size: 10,
        current: 1
      },
      total: 0,
      threeWastesDia: false
    };
  },
  mounted() {
    this.searchList()
  },
  // æ–¹æ³•集合
  methods: {
    // æŸ¥è¯¢åˆ—表
    searchList() {
      this.tableLoading = true
      pageForeignRegister({
        ...this.page,
        ...this.searchForm
      }).then(res => {
        this.tableLoading = false
        if (res.code === 200) {
          this.tableData = res.data.records
          this.page.total = res.data.total
        }
      }).catch(err => {
        console.log('err---', err);
        this.tableLoading = false
      })
    },
    // åˆ é™¤
    delPlan(row) {
      this.$confirm('此操作将永久删除该数据, æ˜¯å¦ç»§ç»­?', '提示', {
        confirmButtonText: '确定',
        cancelButtonText: '取消',
        type: 'warning'
      }).then(() => {
        this.tableLoading = true
        delForeignRegister({ registerId: row.registerId }).then(res => {
          this.tableLoading = false
          if (res.code === 200) {
            this.$message.success('删除成功')
            this.searchList()
          }
        }).catch(err => {
          this.tableLoading = false
          console.log('err---', err);
        })
      }).catch(() => {
        this.$message({
          type: 'info',
          message: '已取消删除'
        });
      });
    },
    // æ–°å¢žï¼Œç¼–辑,批准弹框
    openFormDia(type, row) {
      this.threeWastesDia = true
      this.$nextTick(() => {
        this.$refs.threeWastesDia.openDia(type, row)
      })
    },
    // å¯¼å‡º
    handleDown() {
      exportForeignRegister(this.searchForm).then(res => {
        const blob = new Blob([res], { type: 'application/msword' });
        this.$download.saveAs(blob, '外来人员登记.docx')
      })
    },
    closeThreeWastesDia() {
      this.threeWastesDia = false
      this.searchList()
    },
    // é‡ç½®æŸ¥è¯¢æ¡ä»¶
    resetSearchForm() {
      this.searchForm.registerDate = '';
      this.searchList()
    },
    // åˆ†é¡µåˆ‡æ¢
    pagination(page) {
      this.page.size = page.limit
      this.searchList();
    },
  }
};
</script>
<style scoped>
.search {
  height: 46px;
  display: flex;
  justify-content: space-between;
}
.capacity-scope {
  padding: 20px;
}
</style>
src/views/CNAS/resourceDemand/facilitiesEnvironment/component/facilities-environmental-conditions.vue
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,51 @@
<template>
  <el-row>
    <el-col :span="2">
      <el-menu style="height: 100vh;" @select="clickSelect" :default-active="activeName">
        <el-menu-item index="电源稳定性">
          <span slot="title">电源稳定性</span>
        </el-menu-item>
        <el-menu-item index="防雷检测">
          <span slot="title">防雷检测</span>
        </el-menu-item>
        <el-menu-item index="照度记录">
          <span slot="title">照度记录</span>
        </el-menu-item>
        <el-menu-item index="温湿度记录">
          <span slot="title">温湿度记录</span>
        </el-menu-item>
      </el-menu>
    </el-col>
    <el-col :span="22" style="padding: 10px">
      <power-supply-stability v-if="activeName === '电源稳定性'"/>
      <lightning-protection-detection v-if="activeName === '防雷检测'" />
      <illuminance-recording v-if="activeName === '照度记录'"/>
      <temperature-humidity-record v-if="activeName === '温湿度记录'"/>
    </el-col>
  </el-row>
</template>
<script>
// ç”µæºç¨³å®šæ€§
import PowerSupplyStability from "./facilities-environmental-conditions/power-supply-stability.vue";
// é˜²é›·æ£€æµ‹
import LightningProtectionDetection from "./facilities-environmental-conditions/lightning-protection-detection.vue";
// ç…§åº¦è®°å½•
import IlluminanceRecording from "./facilities-environmental-conditions/illuminance-recording.vue";
// æ¸©æ¹¿åº¦è®°å½•
import TemperatureHumidityRecord from "./facilities-environmental-conditions/temperature-humidity-record.vue";
export default {
  components: {TemperatureHumidityRecord, IlluminanceRecording, LightningProtectionDetection, PowerSupplyStability},
  data() {
    return {
      activeName: "电源稳定性"
    }
  },
  methods: {
    clickSelect(index) {
      this.activeName = index;
    }
  }
}
</script>
src/views/CNAS/resourceDemand/facilitiesEnvironment/component/facilities-environmental-conditions/illuminance-recording.vue
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,359 @@
<template>
  <div>
    <div class="header">
      <div>照度记录</div>
      <div>
        <el-button size="small" type="primary" @click="clickAdd">新 å¢ž</el-button>
      </div>
    </div>
    <el-table :data="tableData" height="calc(100vh - 19em)" style="width: 100%">
      <el-table-column label="序号" type="index" width="120">
        <template v-slot="scope">
          <span>{{ (search.current - 1) * search.size + scope.$index + 1 }}</span>
        </template>
      </el-table-column>
      <el-table-column label="结论" min-width="180" prop="conclusion"></el-table-column>
      <el-table-column label="测试日期" min-width="180" prop="testDate" width="testDate"></el-table-column>
      <el-table-column label="检测者" min-width="180" prop="testerUser"></el-table-column>
      <el-table-column label="核查人" min-width="180" prop="checkerUser"></el-table-column>
      <el-table-column label="设备名称" min-width="180" prop="deviceName"></el-table-column>
      <el-table-column label="设备编号" min-width="180" prop="managementNumber"></el-table-column>
      <el-table-column label="校准日期" min-width="180" prop="lastCalibrationDate"></el-table-column>
      <el-table-column label="下次校准日期" min-width="180" prop="nextCalibrationDate"></el-table-column>
      <el-table-column label="创建时间" min-width="180" prop="createTime"></el-table-column>
      <el-table-column fixed="right" label="操作" min-width="140">
        <template v-slot="scope">
          <el-button size="small" type="text" @click="downLoadPost(scope.row)">导出</el-button>
          <el-button size="small" type="text" @click="edit(scope.row)">编辑</el-button>
          <el-button size="small" type="text" @click="deleteRowFun(scope.row)">删除</el-button>
        </template>
      </el-table-column>
    </el-table>
    <el-pagination :current-page="1" :page-size="search.size" :page-sizes="[10, 20, 30, 50, 100]" :total="search.total"
      layout="->,total, sizes, prev, pager, next, jumper" @size-change="handleSizeChange"
      @current-change="handleCurrentChange">
    </el-pagination>
    <el-dialog :visible.sync="dialogVisible" title="新增" width="50%" @open="openDialog">
      <div style="height: 50vh; overflow-y: auto">
        <el-form ref="form" :model="form" label-width="120px">
          <el-row>
            <el-col :span="12">
              <el-form-item :rules="[{ required: true, message: '请输入测试地点', trigger: 'change' }]" label="测试日期"
                prop="testDate">
                <el-date-picker v-model="form.testDate" format="yyyy-MM-dd" placeholder="选择日期" size="small"
                  style="width: 100%" type="date" value-format="yyyy-MM-dd">
                </el-date-picker>
              </el-form-item>
            </el-col>
            <el-col :span="12">
              <el-form-item :rules="[{ required: true, message: '请输入设备名称', trigger: 'change' }]" label="设备名称"
                prop="deviceId">
                <el-select v-model="form.deviceId" class="table_input" clearable filterable placeholder="设备名称"
                  size="small" @change="getCalibrationDateFun">
                  <el-option v-for="item in equipOptions" :key="item.id" :label="item.deviceName" :value="item.id">
                    {{ item.deviceName + item.managementNumber }}
                  </el-option>
                </el-select>
              </el-form-item>
            </el-col>
            <el-col :span="12">
              <el-form-item label="设备编号">
                <el-input v-model="form.managementNumber" disabled size="small"></el-input>
              </el-form-item>
            </el-col>
            <el-col :span="12">
              <el-form-item label="最近校准日期">
                <el-input v-model="form.lastCalibrationDate" disabled size="small"></el-input>
              </el-form-item>
            </el-col>
            <el-col :span="12">
              <el-form-item label="下次校准日期">
                <el-input v-model="form.nextCalibrationDate" disabled size="small"></el-input>
              </el-form-item>
            </el-col>
            <el-col :span="12">
              <el-form-item label="检测者" prop="recipientUser">
                <el-select v-model="form.testerId" clearable filterable placeholder="请选择" size="small"
                  style="width: 100%;">
                  <el-option v-for="item in responsibleOptions" :key="item.id" :label="item.name" :value="item.id">
                  </el-option>
                </el-select>
              </el-form-item>
            </el-col>
            <el-col :span="12">
              <el-form-item label="核查人" prop="recipientUser">
                <el-select v-model="form.checkerId" clearable filterable placeholder="请选择" size="small"
                  style="width: 100%;">
                  <el-option v-for="item in responsibleOptions" :key="item.id" :label="item.name" :value="item.id">
                  </el-option>
                </el-select>
              </el-form-item>
            </el-col>
            <el-col :span="24">
              <el-form-item label="结论">
                <el-input v-model="form.conclusion" :rows="2" placeholder="请输入内容" type="textarea">
                </el-input>
              </el-form-item>
            </el-col>
          </el-row>
          <div>
            <div style="display: flex; justify-content: flex-end; margin-bottom: 0.5em">
              <el-button size="small" type="primary" @click="feMeasuredQuantityListAdd">新增</el-button>
            </div>
            <div>
              <el-table :data="form.illuminationDetectionAreaList" height="40vh" style="width: 100%; margin: auto">
                <el-table-column label="序号" type="index" width="80"></el-table-column>
                <el-table-column align="center" label="检测区域名称" min-width="180" prop="detectionAreaLabel">
                  <template #default="{ row }">
                    <el-input v-model="row.detectionAreaLabel" :rows="1" type="textarea"></el-input>
                  </template>
                </el-table-column>
                <el-table-column align="center" label="检测值" min-width="300" prop="name">
                  <template>
                    <el-table-column align="center" label="第一次" min-width="100" prop="valueOne">
                      <template #default="{ row }">
                        <el-input v-model="row.valueOne" :rows="1" @blur="getAverage(row)"></el-input>
                      </template>
                    </el-table-column>
                    <el-table-column align="center" label="第二次" min-width="100" prop="valueTwo">
                      <template #default="{ row }">
                        <el-input v-model="row.valueTwo" :rows="1" @blur="getAverage(row)"></el-input>
                      </template>
                    </el-table-column>
                    <el-table-column align="center" label="第三次" min-width="100" prop="valueThree">
                      <template #default="{ row }">
                        <el-input v-model="row.valueThree" :rows="1" @blur="getAverage(row)"></el-input>
                      </template>
                    </el-table-column>
                    <el-table-column align="center" label="平均值" min-width="100" prop="average">
                      <template #default="{ row }">
                        <el-input v-model="row.average" :rows="1"></el-input>
                      </template>
                    </el-table-column>
                  </template>
                </el-table-column>
                <el-table-column align="center" label="备注" min-width="180" prop="detectionAreaLabel">
                  <template #default="{ row }">
                    <el-input v-model="row.remark" :rows="1" type="textarea"></el-input>
                  </template>
                </el-table-column>
                <el-table-column fixed="right" label="操作" width="100">
                  <template slot-scope="scope">
                    <el-button size="small" type="text" @click="feMeasuredQuantityListDelete(scope.row, scope.$index)">
                      åˆ é™¤
                    </el-button>
                  </template>
                </el-table-column>
              </el-table>
            </div>
          </div>
        </el-form>
      </div>
      <span slot="footer" class="dialog-footer">
        <el-button @click="dialogVisible = false">取 æ¶ˆ</el-button>
        <el-button type="primary" :loading="submitLoading" @click="addPowerSupplyStability">ç¡® å®š</el-button>
      </span>
    </el-dialog>
  </div>
</template>
<script>
import {
  getFeLightningProtection,
  deviceScopeSearch,
  selectUserCondition,
  treeDevice,
  addFeLightningProtection,
  deleteFeLightningProtection,
  getFeIlluminationDetectionArea,
  deleteFeIlluminationDetectionArea,
  exportFeIllumination
} from '@/api/cnas/resourceDemand/facilitiesEnvironment/facilitiesAndEnvironment'
export default {
  data() {
    return {
      search: {
        size: 10,
        current: 1,
        total: 0
      },
      tableData: [],
      dialogVisible: false,
      submitLoading: false,
      form: {
        testDate: '',
        deviceId: '',
        managementNumber: '',
        lastCalibrationDate: '',
        nextCalibrationDate: '',
        testerId: '',
        checkerId: '',
        conclusion: '',
        illuminationDetectionAreaList: []
      },
      cascaderList: [],
      responsibleOptions: [],
      equipOptions: [],
    }
  },
  mounted() {
    this.initData()
  },
  watch: {
    dialogVisible(newVal) {
      if (!newVal) {
        this.form = {
          deviceId: null,
          illuminationDetectionAreaList: []
        }
      }
    }
  },
  methods: {
    getAverage(row) {
      if (row.valueOne && row.valueTwo && row.valueThree) {
        if (!isNaN(row.valueOne) && !isNaN(row.valueTwo) && !isNaN(row.valueThree)) {
          const avg = Number(row.valueOne) + Number(row.valueTwo) + Number(row.valueThree)
          console.log(avg)
          row.average = Math.round(avg / 3);
        } else {
          this.$message.warning("必须为数字!")
        }
      }
    },
    edit(row) {
      getFeIlluminationDetectionArea({ intensityIlluminationId: row.intensityIlluminationId }).then(res => {
        this.form = { ...row }
        this.form.illuminationDetectionAreaList = res.data;
        this.dialogVisible = true
      });
    },
    initData() {
      getFeLightningProtection({ ...this.search }).then(res => {
        if (res.code === 200) {
          this.tableData = res.data.records;
          this.search.total = res.data.total;
        }
      });
    },
    handleSizeChange(val) {
      this.search.size = val;
      this.initData();
    },
    handleCurrentChange(val) {
      this.search.current = val;
      this.initData();
    },
    deleteRowFun(row) {
      this.$confirm('此操作将永久删除该数据, æ˜¯å¦ç»§ç»­?', '提示', {
        confirmButtonText: '确定',
        cancelButtonText: '取消',
        type: 'warning'
      }).then(() => {
        deleteFeLightningProtection({ intensityIlluminationId: row.intensityIlluminationId }).then(res => {
          this.$message.success('删除成功!')
          this.initData()
        })
      })
    },
    feMeasuredQuantityListDelete(row, index) {
      if (row.detectionAreaId) {
        deleteFeIlluminationDetectionArea({ detectionAreaId: row.detectionAreaId }).then(res => {
          if (res.code === 200) {
            this.form.illuminationDetectionAreaList.splice(index, 1)
            this.$message.success('删除成功!')
          }
        })
      } else {
        this.form.illuminationDetectionAreaList.splice(index, 1)
        this.$message.success('删除成功!')
      }
    },
    openDialog() {
      treeDevice().then(res => {
        this.cascaderList = res.data;
      });
      this.$nextTick(() => {
        this.$refs['form'].clearValidate()
      })
      this.getUserList()
    },
    clickAdd() {
      this.dialogVisible = true
      this.getEquipOptions()
    },
    // èŽ·å–æ‰€æœ‰è®¾å¤‡
    getEquipOptions() {
      this.equipOptions = []
      deviceScopeSearch({ status: '0' }).then(res => {
        if (res.code === 200 && res.data) {
          this.equipOptions = res.data
        }
      }).catch(error => {
        console.error(error)
      })
    },
    feMeasuredQuantityListAdd() {
      const obj = {
        detectionAreaLabel: null,
        valueOne: null,
        valueTwo: null,
        valueThree: null,
        average: null,
        remark: null,
      }
      this.form.illuminationDetectionAreaList.push(obj)
    },
    addPowerSupplyStability() {
      this.submitLoading = true
      this.$refs.form.validate((valid) => {
        if (valid) {
          addFeLightningProtection(this.form).then(res => {
            this.submitLoading = false
            if (res.code === 200) {
              this.initData()
              this.dialogVisible = false
            }
          }).catch(error => {
            this.submitLoading = false
          })
        }
      });
    },
    // èŽ·å–è´Ÿè´£äººä¿¡æ¯æŽ¥å£
    getUserList() {
      selectUserCondition().then(res => {
        if (res.code == 200) {
          this.responsibleOptions = res.data
        }
      })
    },
    getCalibrationDateFun(val) {
      const index = this.equipOptions.findIndex(item => item.id === val)
      if (index > -1) {
        this.form.managementNumber = this.equipOptions[index].managementNumber
        this.form.lastCalibrationDate = this.equipOptions[index].lastCalibrationDate
        this.form.nextCalibrationDate = this.equipOptions[index].nextCalibrationDate
      }
    },
    // å¯¼å‡º
    downLoadPost(row) {
      exportFeIllumination({ intensityIlluminationId: row.intensityIlluminationId }).then(res => {
        this.outLoading = false
        const blob = new Blob([res], { type: 'application/msword' });
        this.$download.saveAs(blob, '照度记录.docx')
      })
    },
  }
}
</script>
<style scoped>
.header {
  height: 3em;
  width: 100%;
  display: flex;
  justify-content: space-between;
}
</style>
src/views/CNAS/resourceDemand/facilitiesEnvironment/component/facilities-environmental-conditions/lightning-protection-detection.vue
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,231 @@
<template>
  <div>
    <div class="header">
      <div>防雷检测</div>
      <div>
        <el-button size="small" type="primary" @click="clickAdd">导 å…¥</el-button>
        <el-button size="small" type="primary" @click="downLoadPost">导 å‡º</el-button>
      </div>
    </div>
    <el-table :data="tableData" height="calc(100vh - 19em)" style="width: 100%">
      <el-table-column label="序号" type="index" width="120">
        <template v-slot="scope">
          <span>{{ (search.current - 1) * search.size + scope.$index + 1 }}</span>
        </template>
      </el-table-column>
      <el-table-column label="原文件名" min-width="180" prop="fileName">
      </el-table-column>
      <el-table-column label="检测日期" min-width="180" prop="detectionDate">
      </el-table-column>
      <el-table-column label="有效期" min-width="180" prop="termValidity">
      </el-table-column>
      <el-table-column label="检测单位" min-width="180" prop="detectionUnit">
      </el-table-column>
      <el-table-column fixed="right" label="操作" min-width="100">
        <template v-slot="scope">
          <el-button size="small" type="text" @click="edit(scope.row)">编辑</el-button>
          <el-button size="small" type="text" @click="deleteRowFun(scope.row)">删除</el-button>
          <el-button size="small" type="text" @click="download(scope.row)">下载</el-button>
        </template>
      </el-table-column>
    </el-table>
    <el-pagination :current-page="1" :page-size="search.size" :page-sizes="[10, 20, 30, 50, 100]" :total="search.total"
      layout="->,total, sizes, prev, pager, next, jumper" @size-change="handleSizeChange"
      @current-change="handleCurrentChange">
    </el-pagination>
    <el-dialog :visible.sync="dialogVisible" title="新 å¢ž" width="50%">
      <div style="height: 50vh;">
        <el-form ref="form" :model="form" label-width="80px">
          <el-row>
            <el-col :span="12">
              <el-form-item :rules="[{ required: true, message: '请输入测试地点', trigger: 'blur' }]" label="检测日期"
                prop="detectionDate">
                <el-date-picker v-model="form.detectionDate" format="yyyy-MM-dd" placeholder="选择日期" size="small"
                  style="width: 100%" type="date" value-format="yyyy-MM-dd">
                </el-date-picker>
              </el-form-item>
            </el-col>
            <el-col :span="12">
              <el-form-item :rules="[{ required: true, message: '请输入测试地点', trigger: 'blur' }]" label="有效期"
                prop="termValidity">
                <el-date-picker v-model="form.termValidity" format="yyyy-MM-dd" placeholder="选择日期" size="small"
                  style="width: 100%" type="date" value-format="yyyy-MM-dd">
                </el-date-picker>
              </el-form-item>
            </el-col>
            <el-col :span="24">
              <el-form-item :rules="[{ required: true, message: '请输入测试地点', trigger: 'blur' }]" label="检测单位"
                prop="detectionUnit">
                <el-input v-model="form.detectionUnit" size="small"></el-input>
              </el-form-item>
            </el-col>
            <el-col :span="12">
              <el-form-item label="检测单位">
                <el-upload :file-list="form.fileList" :http-request="httpRequest" :limit="1" :on-exceed="handleExceed"
                  :on-remove="handleRemove" action="#" class="upload-demo" drag multiple>
                  <i class="el-icon-upload"></i>
                  <div class="el-upload__text">将文件拖到此处,或<em>点击上传</em></div>
                </el-upload>
              </el-form-item>
            </el-col>
          </el-row>
        </el-form>
      </div>
      <span slot="footer" class="dialog-footer">
        <el-button @click="dialogVisible = false">取 æ¶ˆ</el-button>
        <el-button type="primary" @click="addImport">ç¡® å®š</el-button>
      </span>
    </el-dialog>
  </div>
</template>
<script>
import {
  getLightningProtectionDetection,
  addLightningProtectionDetection,
  deleteLightningProtectionDetection,
  exportOfLightningProtectionDetection
} from '@/api/cnas/resourceDemand/facilitiesEnvironment/facilitiesAndEnvironment'
import axios from 'axios';
export default {
  data() {
    return {
      search: {
        size: 10,
        current: 1,
        total: 0
      },
      tableData: [],
      dialogVisible: false,
      form: {
        fileList: [],
        fileData: []
      },
    }
  },
  mounted() {
    this.initData()
  },
  watch: {
    dialogVisible(newVal) {
      if (!newVal) {
        this.form = {
          fileList: [],
          fileData: []
        }
      }
    }
  },
  methods: {
    // å¯¼å‡º
    downLoadPost() {
      exportOfLightningProtectionDetection().then(res => {
        this.outLoading = false
        const blob = new Blob([res], { type: 'application/msword' });
        //将Blob å¯¹è±¡è½¬æ¢æˆå­—符串
        this.$download.saveAs(blob, '防雷检测导出.xlsx')
      })
    },
    initData() {
      getLightningProtectionDetection({ ...this.search }).then(res => {
        if (res.code === 200) {
          this.tableData = res.data.records;
          this.search.total = res.data.total;
        }
      });
    },
    handleSizeChange(val) {
      this.search.size = val;
      this.initData();
    },
    handleCurrentChange(val) {
      this.search.current = val;
      this.initData();
    },
    clickAdd() {
      this.dialogVisible = true
    },
    // æ–‡ä»¶æ•°é‡è¿‡å¤šæ—¶æé†’
    handleExceed() {
      this.$message({ type: 'error', message: '最多支持1个附件上传' })
    },
    // è¦†ç›–默认的上传行为,可以自定义上传的实现,将上传的文件依次添加到fileList数组中,支持多个文件
    httpRequest(option) {
      this.form.fileData.push(option)
    },
    addImport() {
      console.log(this.form)
      this.$refs.form.validate((valid) => {
        if (valid) {
          let params = new FormData()
          if (this.form.lightningProtectionId) {
            params.append("lightningProtectionId", this.form.lightningProtectionId)
          }
          params.append("termValidity", this.form.termValidity)
          params.append("detectionUnit", this.form.detectionUnit)
          params.append("detectionDate", this.form.detectionDate)
          if (this.form.fileData.length > 0) {
            params.append("file", this.form.fileData[0].file)
          }
          addLightningProtectionDetection(params).then(res => {
            if (res.code === 200) {
              this.dialogVisible = false
              this.initData()
            }
          });
        }
      });
    },
    edit(row) {
      this.dialogVisible = true
      this.form = { ...row }
      this.form.fileList = []
      this.form.fileData = []
      this.form.fileList.push({ name: row.systemFileName, url: "123434" })
      console.log(this.form)
    },
    deleteRowFun(row) {
      this.$confirm('此操作将永久删除该数据, æ˜¯å¦ç»§ç»­?', '提示', {
        confirmButtonText: '确定',
        cancelButtonText: '取消',
        type: 'warning'
      }).then(() => {
        deleteLightningProtectionDetection({ lightningProtectionId: row.lightningProtectionId }).then(res => {
          this.$message.success('删除成功!')
          this.initData()
        })
      })
    },
    handleRemove(file) {
      this.$axios.delete(this.$api.personnel.deleteCNASFile + "?fileName=" + file.name).then(res => {
        if (res.code === 201) return;
        this.$message.success('删除成功!')
        let index = this.form.fileList.indexOf(fileName)
        if (index != -1) {
          this.successFileList.splice(index, 1)
        }
      })
    },
    download(row) {
      if (!row.systemFileName) {
        this.$message.warning('暂无文件')
        return
      }
      this.$download.downloadFileFromUrl(row.systemFileName, row.fileName)
    }
  }
}
</script>
<style scoped>
.header {
  height: 3em;
  width: 100%;
  display: flex;
  justify-content: space-between;
}
</style>
src/views/CNAS/resourceDemand/facilitiesEnvironment/component/facilities-environmental-conditions/power-supply-stability.vue
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,360 @@
<template>
  <div>
    <div class="header">
      <div>电源稳定性</div>
      <div>
        <el-button size="small" type="primary" @click="openAddDia">新 å¢ž</el-button>
      </div>
    </div>
    <el-table :data="tableData" height="calc(100vh - 19em)" style="width: 100%">
      <el-table-column label="序号" type="index" width="120">
        <template v-slot="scope">
          <span>{{ (search.current - 1) * search.size + scope.$index + 1 }}</span>
        </template>
      </el-table-column>
      <el-table-column label="测试地点" min-width="180" prop="testLocation"></el-table-column>
      <el-table-column label="测试日期" min-width="180" prop="testDate" width="testDate"></el-table-column>
      <el-table-column label="结论" min-width="180" prop="conclusion"></el-table-column>
      <el-table-column label="检测者" min-width="180" prop="testerUser"></el-table-column>
      <el-table-column label="核查人" min-width="180" prop="checkerUser"></el-table-column>
      <el-table-column label="设备名称" min-width="180" prop="deviceName"></el-table-column>
      <el-table-column label="设备编号" min-width="180" prop="managementNumber"></el-table-column>
      <el-table-column label="校准日期" min-width="180" prop="lastCalibrationDate"></el-table-column>
      <el-table-column label="下次校准日期" min-width="180" prop="nextCalibrationDate"></el-table-column>
      <el-table-column label="创建时间" min-width="180" prop="createTime"></el-table-column>
      <el-table-column fixed="right" label="操作" min-width="140">
        <template v-slot="scope">
          <el-button size="small" type="text" @click="downLoadPost(scope.row)">导出</el-button>
          <el-button size="small" type="text" @click="edit(scope.row)">编辑</el-button>
          <el-button size="small" type="text" @click="deleteRowFun(scope.row)">删除</el-button>
        </template>
      </el-table-column>
    </el-table>
    <el-pagination :current-page="1" :page-size="search.size" :page-sizes="[10, 20, 30, 50, 100]" :total="search.total"
      layout="->,total, sizes, prev, pager, next, jumper" @size-change="handleSizeChange"
      @current-change="handleCurrentChange">
    </el-pagination>
    <el-dialog :visible.sync="dialogVisible" title="新增" width="50%" @open="openDialog">
      <div style="height: 50vh; overflow-y: auto">
        <el-form ref="form" :model="form" label-width="120px">
          <el-row>
            <el-col :span="12">
              <el-form-item :rules="[{ required: true, message: '请输入测试地点', trigger: 'blur' }]" label="测试地点"
                prop="testLocation">
                <el-input v-model="form.testLocation" size="small"></el-input>
              </el-form-item>
            </el-col>
            <el-col :span="12">
              <el-form-item :rules="[{ required: true, message: '请输入测试日期', trigger: 'change' }]" label="测试日期"
                prop="testDate">
                <el-date-picker v-model="form.testDate" format="yyyy-MM-dd" placeholder="选择日期" size="small"
                  style="width: 100%" type="date" value-format="yyyy-MM-dd">
                </el-date-picker>
              </el-form-item>
            </el-col>
            <el-col :span="12">
              <el-form-item :rules="[{ required: true, message: '请输入设备名称', trigger: 'change' }]" label="设备名称"
                prop="deviceId">
                <el-select v-model="form.deviceId" class="table_input" clearable filterable placeholder="设备名称"
                  size="small" @change="getCalibrationDateFun">
                  <el-option v-for="item in equipOptions" :key="item.id" :label="item.deviceName" :value="item.id">
                    {{ item.deviceName + item.managementNumber }}
                  </el-option>
                </el-select>
              </el-form-item>
            </el-col>
            <el-col :span="12">
              <el-form-item label="设备编号">
                <el-input v-model="form.managementNumber" disabled size="small"></el-input>
              </el-form-item>
            </el-col>
            <el-col :span="12">
              <el-form-item label="最近校准日期">
                <el-input v-model="form.lastCalibrationDate" disabled size="small"></el-input>
              </el-form-item>
            </el-col>
            <el-col :span="12">
              <el-form-item label="下次校准日期">
                <el-input v-model="form.nextCalibrationDate" disabled size="small"></el-input>
              </el-form-item>
            </el-col>
            <el-col :span="12">
              <el-form-item label="检测者" prop="recipientUser">
                <el-select v-model="form.testerId" clearable filterable placeholder="请选择" size="small"
                  style="width: 100%;">
                  <el-option v-for="item in responsibleOptions" :key="item.id" :label="item.name" :value="item.id">
                  </el-option>
                </el-select>
              </el-form-item>
            </el-col>
            <el-col :span="12">
              <el-form-item label="核查人" prop="recipientUser">
                <el-select v-model="form.checkerId" clearable filterable placeholder="请选择" size="small"
                  style="width: 100%;">
                  <el-option v-for="item in responsibleOptions" :key="item.id" :label="item.name" :value="item.id">
                  </el-option>
                </el-select>
              </el-form-item>
            </el-col>
            <el-col :span="24">
              <el-form-item label="结论">
                <el-input v-model="form.conclusion" :rows="2" placeholder="请输入内容" type="textarea">
                </el-input>
              </el-form-item>
            </el-col>
          </el-row>
          <div>
            <div style="display: flex; justify-content: flex-end; margin-bottom: 0.5em">
              <el-button size="small" type="primary" @click="feMeasuredQuantityListAdd">新增</el-button>
            </div>
            <div>
              <el-table :data="form.feMeasuredQuantityList" height="40vh" style="width: 100%; margin: auto">
                <el-table-column label="序号" type="index" width="80"></el-table-column>
                <el-table-column align="center" label="测定量名称" min-width="180" prop="measuredQuantityLabel">
                  <template #default="{ row }">
                    <el-input v-model="row.measuredQuantityLabel" :rows="1" type="textarea"></el-input>
                  </template>
                </el-table-column>
                <el-table-column align="center" label="值" min-width="300" prop="name">
                  <template>
                    <el-table-column align="center" label="A" min-width="100" prop="valueA">
                      <template #default="{ row }">
                        <el-input v-model="row.valueA" :rows="1"></el-input>
                      </template>
                    </el-table-column>
                    <el-table-column align="center" label="B" min-width="100" prop="valueB">
                      <template #default="{ row }">
                        <el-input v-model="row.valueB" :rows="1"></el-input>
                      </template>
                    </el-table-column>
                    <el-table-column align="center" label="C" min-width="100" prop="valueC">
                      <template #default="{ row }">
                        <el-input v-model="row.valueC" :rows="1"></el-input>
                      </template>
                    </el-table-column>
                  </template>
                </el-table-column>
                <el-table-column fixed="right" label="操作" width="100">
                  <template slot-scope="scope">
                    <el-button size="small" type="text" @click="feMeasuredQuantityListDelete(scope.row, scope.$index)">
                      åˆ é™¤
                    </el-button>
                  </template>
                </el-table-column>
              </el-table>
            </div>
          </div>
        </el-form>
      </div>
      <span slot="footer" class="dialog-footer">
        <el-button @click="dialogVisible = false">取 æ¶ˆ</el-button>
        <el-button type="primary" :loading="submitLoading" @click="addPowerSupplyStability">ç¡® å®š</el-button>
      </span>
    </el-dialog>
  </div>
</template>
<script>
import {
  getLaboratoryFacilityPowerStablePage,
  deviceScopeSearch,
  treeDevice,
  selectUserCondition,
  addLaboratoryFacilityPowerStable,
  deleteFeMeasuredQuantity,
  getFeMeasuredQuantityService,
  deleteLaboratoryFacilityPowerStable,
  exportFePowerStable
} from '@/api/cnas/resourceDemand/facilitiesEnvironment/facilitiesAndEnvironment'
export default {
  data() {
    return {
      search: {
        size: 10,
        current: 1,
        total: 0
      },
      tableData: [],
      dialogVisible: false,
      submitLoading: false,
      form: {
        testLocation: '',
        testDate: '',
        deviceId: '',
        managementNumber: '',
        lastCalibrationDate: '',
        nextCalibrationDate: '',
        testerId: '',
        checkerId: '',
        conclusion: '',
        feMeasuredQuantityList: []
      },
      equipOptions: [],
      cascaderList: [],
      responsibleOptions: []
    }
  },
  mounted() {
    this.initData()
  },
  watch: {
    dialogVisible(newVal) {
      if (!newVal) {
        this.form = {
          deviceId: null,
          feMeasuredQuantityList: []
        }
      }
    }
  },
  methods: {
    // åˆå§‹åŒ–调用
    initData() {
      getLaboratoryFacilityPowerStablePage({
        ...this.search
      }).then(res => {
        if (res.code === 200) {
          this.tableData = res.data.records;
          this.search.total = res.data.total;
        }
      })
    },
    handleSizeChange(val) {
      this.search.size = val;
      this.initData();
    },
    handleCurrentChange(val) {
      this.search.current = val;
      this.initData();
    },
    // ç”µæºç¨³å®šæ€§ è¡¨æ ¼ä¸­çš„行删除按钮
    deleteRowFun(row) {
      this.$confirm('此操作将永久删除该数据, æ˜¯å¦ç»§ç»­?', '提示', {
        confirmButtonText: '确定',
        cancelButtonText: '取消',
        type: 'warning'
      }).then(() => {
        deleteLaboratoryFacilityPowerStable({ powerStableId: row.powerStableId }).then(res => {
          this.$message.success('删除成功!')
          this.initData()
        })
      })
    },
    openAddDia() {
      this.dialogVisible = true
      this.getEquipOptions()
    },
    // èŽ·å–æ‰€æœ‰è®¾å¤‡
    getEquipOptions() {
      this.equipOptions = []
      deviceScopeSearch({ status: '0' }).then(res => {
        if (res.code === 200 && res.data) {
          this.equipOptions = res.data
        }
      }).catch(error => {
        console.error(error)
      })
    },
    // ç”µæºç¨³å®šæ€§-打开弹框调用设备接口,查询使用的设备
    openDialog() {
      treeDevice().then(res => {
        this.cascaderList = res.data;
      })
      this.$nextTick(() => {
        this.$refs['form'].clearValidate()
      })
      this.getUserList()
    },
    //
    getCalibrationDateFun(val) {
      const index = this.equipOptions.findIndex(item => item.id === val)
      if (index > -1) {
        this.form.managementNumber = this.equipOptions[index].managementNumber
        this.form.lastCalibrationDate = this.equipOptions[index].lastCalibrationDate
        this.form.nextCalibrationDate = this.equipOptions[index].nextCalibrationDate
      }
    },
    // ç”µæºç¨³å®šæ€§-测定量弹框中表格的删除行
    feMeasuredQuantityListDelete(row, index) {
      if (row.measuredQuantityId) {
        deleteFeMeasuredQuantity({ measuredQuantityId: row.measuredQuantityId }).then(res => {
          if (res.code === 201) return
          this.form.feMeasuredQuantityList.splice(index, 1)
          this.$message.success('删除成功!')
        })
      } else {
        this.form.feMeasuredQuantityList.splice(index, 1)
        this.$message.success('删除成功!')
      }
    },
    // ç”µæºç¨³å®šæ€§-测定量表格新增行
    feMeasuredQuantityListAdd() {
      const obj = {
        measuredQuantityLabel: null,
        valueA: null,
        valueB: null,
        valueC: null,
      }
      this.form.feMeasuredQuantityList.push(obj)
    },
    // ç”µæºç¨³å®šæ€§ æ–°å¢ž
    addPowerSupplyStability() {
      this.submitLoading = true
      this.$refs.form.validate((valid) => {
        if (valid) {
          addLaboratoryFacilityPowerStable(this.form).then(res => {
            this.submitLoading = false
            if (res.code === 200) {
              this.initData()
              this.dialogVisible = false
            }
          }).catch(error => {
            this.submitLoading = false
          })
        }
      });
    },
    // å¯¼å‡º
    downLoadPost(row) {
      exportFePowerStable({ powerStableId: row.powerStableId }).then(res => {
        this.outLoading = false
        const blob = new Blob([res], { type: 'application/msword' });
        this.$download.saveAs(blob, '电源稳定性.docx')
      })
    },
    // ç”µæºç¨³å®šæ€§ ç‚¹å‡»è¡Œç¼–辑触发
    edit(row) {
      getFeMeasuredQuantityService({ powerStableId: row.powerStableId }).then((res => {
        this.form = { ...row }
        this.form.feMeasuredQuantityList = res.data;
        this.dialogVisible = true
      }))
    },
    // èŽ·å–è´Ÿè´£äººä¿¡æ¯æŽ¥å£
    getUserList() {
      selectUserCondition().then(res => {
        if (res.code == 200) {
          let data = []
          res.data.forEach(a => {
            data.push({
              id: a.id,
              name: a.name
            })
          })
          this.responsibleOptions = data
        }
      })
    },
  }
}
</script>
<style scoped>
.header {
  height: 3em;
  width: 100%;
  display: flex;
  justify-content: space-between;
}
</style>
src/views/CNAS/resourceDemand/facilitiesEnvironment/component/facilities-environmental-conditions/temperature-humidity-record.vue
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,428 @@
<template>
  <div>
    <el-row :gutter="20">
      <el-col :span="12">
        <div class="header">
          <div>试验区域</div>
          <div>
            åç§°ï¼š
            <el-input v-model="search.testAreaName" clearable size="small" style="width: 120px"></el-input>
            <el-button size="small" type="primary" @click="initData">查询</el-button>
            <el-button size="small" type="primary" @click="clickAdd">新 å¢ž</el-button>
          </div>
        </div>
        <el-table :data="tableData" height="calc(100vh - 19em)" highlight-current-row style="width: 100%"
          @row-click="clickRow">
          <el-table-column label="序号" type="index" width="60" align="center"></el-table-column>
          <el-table-column label="月度时间" min-width="180" prop="monthDate"></el-table-column>
          <el-table-column label="试验区域名称" min-width="180" prop="testAreaName"></el-table-column>
          <el-table-column label="确认状态" min-width="180" prop="isAffirm">
            <template slot-scope="scope">
              <el-tag type="danger" v-if="scope.row.isAffirm == 0">未确认</el-tag>
              <el-tag type="success" v-if="scope.row.isAffirm == 1">已确认</el-tag>
            </template>
          </el-table-column>
          <el-table-column label="增补信息" min-width="180" prop="subjoin"></el-table-column>
          <el-table-column fixed="right" label="操作" min-width="180" align="center">
            <template v-slot="scope">
              <el-button size="small" type="text" @click="downLoadPost(scope.row)">导出</el-button>
              <el-button size="small" type="text" @click="edit(scope.row)">编辑</el-button>
              <el-button :disabled="scope.row.isAffirm === '1'" size="small" type="text"
                @click="openApprovalDialog(scope.row)">确认</el-button>
              <el-button size="small" type="text" @click="deleteRowFun(scope.row)">删除</el-button>
            </template>
          </el-table-column>
        </el-table>
        <el-pagination :current-page="1" :page-size="search.size" :page-sizes="[10, 20, 30, 50, 100]"
          :total="search.total" layout="->,total, sizes, prev, pager, next, jumper" @size-change="handleSizeChange"
          @current-change="handleCurrentChange">
        </el-pagination>
      </el-col>
      <el-col :span="12">
        <div class="header">
          <div>温湿度记录:{{ saveRow.monthDate }}</div>
          <div>
            <el-button v-if="saveRow.monthDate" size="small" type="primary" @click="dialogVisible1 = true">新
              å¢ž</el-button>
          </div>
        </div>
        <el-table :data="tableData1" height="calc(100vh - 18em)" style="width: 100%">
          <el-table-column label="序号" type="index" width="60" align="center"></el-table-column>
          <el-table-column label="日期" min-width="100" prop="recordDate"></el-table-column>
          <el-table-column align="center" label="上午" min-width="200">
            <template>
              <el-table-column label="时间" min-width="110" prop="morningTestTime"
                show-overflow-tooltip></el-table-column>
              <el-table-column label="温度" min-width="80" prop="morningTemp" show-overflow-tooltip></el-table-column>
              <el-table-column label="湿度" min-width="80" prop="morningHum" show-overflow-tooltip></el-table-column>
            </template>
          </el-table-column>
          <el-table-column label="记录员" min-width="100" prop="morningRecorderUser"></el-table-column>
          <el-table-column align="center" label="下午" min-width="200">
            <template>
              <el-table-column label="时间" min-width="110" prop="afternoonTime" show-overflow-tooltip></el-table-column>
              <el-table-column label="温度" min-width="80" prop="afternoonTemp" show-overflow-tooltip></el-table-column>
              <el-table-column label="湿度" min-width="80" prop="afternoonHum" show-overflow-tooltip></el-table-column>
            </template>
          </el-table-column>
          <el-table-column label="记录员" min-width="100" prop="afternoonRecorderUser"></el-table-column>
          <el-table-column label="备注" min-width="100" prop="note" show-overflow-tooltip></el-table-column>
          <el-table-column fixed="right" label="操作" min-width="100">
            <template v-slot="scope">
              <el-button size="small" type="text" @click="edit1(scope.row)">编辑</el-button>
              <el-button size="small" type="text" @click="deleteRowFun1(scope.row)">删除</el-button>
            </template>
          </el-table-column>
        </el-table>
        <el-pagination :current-page="1" :page-size="search1.size" :page-sizes="[10, 20, 30, 50, 100]"
          :total="search1.total" layout="->,total, sizes, prev, pager, next, jumper" @size-change="handleSizeChange1"
          @current-change="handleCurrentChange1">
        </el-pagination>
      </el-col>
    </el-row>
    <el-dialog :visible.sync="dialogVisible" title="提示" width="50%">
      <div style="height: 20vh;">
        <el-form ref="form" :model="form" label-width="80px">
          <el-row>
            <el-col :span="24">
              <el-form-item :rules="[{ required: true, message: '请输入月度时间', trigger: 'blur' }]" label="月度时间"
                prop="monthDate">
                <el-date-picker v-model="form.monthDate" format="yyyy-MM" placeholder="选择月份" size="small"
                  style="width: 100%" type="month" value-format="yyyy-MM">
                </el-date-picker>
              </el-form-item>
            </el-col>
            <el-col :span="24">
              <el-form-item :rules="[{ required: true, message: '请输入试验区域', trigger: 'blur' }]" label="试验区域"
                prop="testAreaName">
                <el-input v-model="form.testAreaName"></el-input>
              </el-form-item>
            </el-col>
          </el-row>
        </el-form>
      </div>
      <span slot="footer" class="dialog-footer">
        <el-button @click="dialogVisible = false">取 æ¶ˆ</el-button>
        <el-button type="primary" :loading="submitLoading" @click="addPowerSupplyStability">ç¡® å®š</el-button>
      </span>
    </el-dialog>
    <el-dialog :visible.sync="dialogVisible1" title="提示" width="50%" @open="openDialog">
      <div style="height: 40vh;">
        <el-form ref="form1" :model="form1" label-width="120px">
          <el-row>
            <el-col :span="24">
              <el-form-item label="日期">
                <el-date-picker v-model="form1.recordDate" format="yyyy-MM-dd" placeholder="请选择日期" size="small"
                  style="width: 50%" type="date" value-format="yyyy-MM-dd">
                </el-date-picker>
              </el-form-item>
            </el-col>
            <el-col :span="12">
              <el-form-item label="上午时间">
                <el-time-picker v-model="form1.morningTestTime" size="small" value-format="HH:mm:ss" format="HH:mm:ss"
                  style="width: 100%" placeholder="请选择时间">
                </el-time-picker>
              </el-form-item>
            </el-col>
            <el-col :span="12">
              <el-form-item label="上午温度">
                <el-input v-model="form1.morningTemp" size="small"></el-input>
              </el-form-item>
            </el-col>
            <el-col :span="12">
              <el-form-item label="上午湿度">
                <el-input v-model="form1.morningHum" size="small"></el-input>
              </el-form-item>
            </el-col>
            <el-col :span="12">
              <el-form-item label="上午记录员">
                <el-select v-model="form1.morningRecorderId" clearable filterable placeholder="请选择" size="small"
                  style="width: 100%;">
                  <el-option v-for="item in responsibleOptions" :key="item.id" :label="item.name" :value="item.id">
                  </el-option>
                </el-select>
              </el-form-item>
            </el-col>
            <el-col :span="12">
              <el-form-item label="下午时间">
                <el-time-picker v-model="form1.afternoonTime" size="small" value-format="HH:mm:ss" format="HH:mm:ss"
                  style="width: 100%" placeholder="请选择时间">
                </el-time-picker>
              </el-form-item>
            </el-col>
            <el-col :span="12">
              <el-form-item label="下午温度">
                <el-input v-model="form1.afternoonTemp" size="small"></el-input>
              </el-form-item>
            </el-col>
            <el-col :span="12">
              <el-form-item label="下午湿度">
                <el-input v-model="form1.afternoonHum" size="small"></el-input>
              </el-form-item>
            </el-col>
            <el-col :span="12">
              <el-form-item label="下午记录员">
                <el-select v-model="form1.afternoonRecorderId" clearable filterable placeholder="请选择" size="small"
                  style="width: 100%;">
                  <el-option v-for="item in responsibleOptions" :key="item.id" :label="item.name" :value="item.id">
                  </el-option>
                </el-select>
              </el-form-item>
            </el-col>
            <el-col :span="24">
              <el-form-item label="备注">
                <el-input v-model="form1.note" :rows="2" placeholder="请输入内容" type="textarea">
                </el-input>
              </el-form-item>
            </el-col>
          </el-row>
        </el-form>
      </div>
      <span slot="footer" class="dialog-footer">
        <el-button @click="dialogVisible1 = false">取 æ¶ˆ</el-button>
        <el-button type="primary" :loading="submitLoading" @click="addPowerSupplyStability1">ç¡® å®š</el-button>
      </span>
    </el-dialog>
    <el-dialog :visible.sync="approvalDialog" title="确认" width="30%" @close="subjoin = ''">
      <span>
        å¢žè¡¥ä¿¡æ¯ï¼š
        <el-input v-model="subjoin" type="textarea"></el-input>
      </span>
      <span slot="footer" class="dialog-footer">
        <el-button :loading="approvalLoading" @click="subjoin = '', approvalDialog = false">不确认</el-button>
        <el-button :loading="approvalLoading" type="primary" @click="handleApproval">ç¡® è®¤</el-button>
      </span>
    </el-dialog>
  </div>
</template>
<script>
import {
  getFeTempHumDate,
  addFeTempHumDate,
  getFeTempHumRecordPage,
  addFeTempHumRecord,
  selectUserCondition,
  deleteFeTempHumRecord,
  deleteFeTempHumDate,
  exportTemperatureAndHumidityRecords,
  affirmFeTempHumDate
} from '@/api/cnas/resourceDemand/facilitiesEnvironment/facilitiesAndEnvironment'
export default {
  data() {
    return {
      search: {
        size: 20,
        current: 1,
        total: 0,
        testAreaName: ''
      },
      search1: {
        size: 20,
        current: 1,
        total: 0
      },
      tableData: [],
      tableData1: [],
      dialogVisible: false,
      submitLoading: false,
      dialogVisible1: false,
      form: {},
      form1: {},
      saveRow: {},
      responsibleOptions: [],
      approvalDialog: false,
      approvalLoading: false,
      subjoin: '',
      approvalRow: {},
    }
  },
  mounted() {
    this.initData()
  },
  watch: {
    dialogVisible(newVal) {
      if (!newVal) {
        this.form = {
        }
      }
    },
    dialogVisible1(newVal) {
      if (!newVal) {
        this.form1 = {
        }
      }
    }
  },
  methods: {
    openApprovalDialog(row) {
      this.approvalDialog = true
      this.approvalRow = row
    },
    handleApproval() {
      this.approvalLoading = true
      const params = {
        dateId: this.approvalRow.dateId,
        subjoin: this.subjoin,
      }
      affirmFeTempHumDate(params).then(res => {
        this.approvalLoading = false
        if (res.code === 200) {
          this.$message.success('确认成功!')
          this.approvalDialog = false
          this.initData()
        }
      }).catch(err => {
        this.approvalDialog = false
      })
    },
    openDialog() {
      selectUserCondition().then(res => {
        if (res.code == 200) {
          this.responsibleOptions = res.data
        }
      })
    },
    addPowerSupplyStability() {
      this.$refs.form.validate((valid) => {
        if (valid) {
          this.submitLoading = true
          addFeTempHumDate(this.form).then(res => {
            if (res.code === 200) {
              this.$message.success('新增成功!')
              this.submitLoading = false
              this.initData()
              this.dialogVisible = false
            }
          }).catch(err => {
            this.submitLoading = false
          })
        }
      });
    },
    addPowerSupplyStability1() {
      if (!this.saveRow) {
        this.$message.warning("请选择试验区域!")
        return
      }
      this.$refs.form1.validate((valid) => {
        this.submitLoading = true
        if (valid) {
          this.form1.dateId = this.saveRow.dateId
          addFeTempHumRecord(this.form1).then(res => {
            if (res.code === 200) {
              this.$message.success('新增成功!')
              this.submitLoading = false
              this.initData1(this.saveRow.dateId)
              this.dialogVisible1 = false
            }
          }).catch(err => {
            this.submitLoading = false
          })
        }
      });
    },
    clickRow(row) {
      this.saveRow = row
      this.initData1(row.dateId)
    },
    edit(row) {
      this.form = { ...row }
      this.dialogVisible = true
    },
    deleteRowFun(row) {
      this.$confirm('此操作将永久删除该数据, æ˜¯å¦ç»§ç»­?', '提示', {
        confirmButtonText: '确定',
        cancelButtonText: '取消',
        type: 'warning'
      }).then(() => {
        deleteFeTempHumDate({ dateId: row.dateId }).then(res => {
          this.$message.success('删除成功!')
          this.initData()
        })
      })
    },
    edit1(row) {
      this.form1 = { ...row }
      this.dialogVisible1 = true
    },
    // å¯¼å‡º
    downLoadPost(row) {
      exportTemperatureAndHumidityRecords({ dateId: row.dateId }).then(res => {
        this.outLoading = false
        const blob = new Blob([res], { type: 'application/msword' });
        this.$download.saveAs(blob, '温湿度记录.docx')
      })
    },
    deleteRowFun1(row) {
      this.$confirm('此操作将永久删除该数据, æ˜¯å¦ç»§ç»­?', '提示', {
        confirmButtonText: '确定',
        cancelButtonText: '取消',
        type: 'warning'
      }).then(() => {
        deleteFeTempHumRecord({ tempHumId: row.tempHumId }).then(res => {
          this.$message.success('删除成功!')
          this.initData1(this.saveRow.dateId)
        })
      })
    },
    initData() {
      getFeTempHumDate({
        ...this.search,
        ...this.search
      }).then(res => {
        if (res.code === 200) {
          this.tableData = res.data.records;
          this.search.total = res.data.total;
          if (res.data.records.length === 0) {
            this.tableData1 = []
            this.saveRow.monthDate = ''
          }
        }
      })
    },
    initData1(dateId) {
      let form = { dateId: dateId }
      getFeTempHumRecordPage({
        ...this.search1,
        ...form
      }).then(res => {
        if (res.code === 200) {
          this.tableData1 = res.data.records;
          this.search1.total = res.data.total;
        }
      });
    },
    handleSizeChange(val) {
      this.search.size = val;
      this.initData();
    },
    handleCurrentChange(val) {
      this.search.current = val;
      this.initData();
    },
    handleSizeChange1(val) {
      this.search1.size = val;
      this.initData1();
    },
    handleCurrentChange1(val) {
      this.search1.current = val;
      this.initData1();
    },
    clickAdd() {
      this.dialogVisible = true
    }
  }
}
</script>
<style scoped>
.header {
  height: 3em;
  width: 100%;
  display: flex;
  justify-content: space-between;
}
</style>
src/views/CNAS/resourceDemand/facilitiesEnvironment/component/three-wastes-dialog.vue
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,189 @@
<template>
  <div>
    <el-dialog v-loading="diaLoading" :close-on-click-modal="false"
               :close-on-press-escape="false"
               :visible.sync="formDia"
               title="三废处理信息"
               width="80%" @close="closeThreeWastesDia">
      <el-form ref="form" :model="form" :rules="rules" label-width="auto">
        <el-col :span="24">
          <el-form-item label="备注" prop="purposes">
            <el-input v-model="form.remark" clearable size="small"></el-input>
          </el-form-item>
        </el-col>
      </el-form>
      <div style="text-align: right;margin-bottom: 10px">
        <el-button size="small" type="primary" @click="addRow">添加</el-button>
        <el-button size="small" type="danger" @click="clearTable">清空</el-button>
      </div>
      <el-table :data="wastesDetailList" border height="300" style="width: 100%">
        <el-table-column align="center" label="序号" type="index" width="60" />
        <el-table-column header-align="center" label="接收人" prop="acceptor">
          <template slot-scope="{row}">
            <el-input v-model="row.acceptor" size="small"/>
          </template>
        </el-table-column>
        <el-table-column header-align="center" label="接收单位" prop="receivingUnit">
          <template slot-scope="{row}">
            <el-input v-model="row.receivingUnit" size="small"/>
          </template>
        </el-table-column>
        <el-table-column header-align="center" label="名称" prop="designation">
          <template slot-scope="{row}">
            <el-input v-model="row.designation" size="small"/>
          </template>
        </el-table-column>
        <el-table-column header-align="center" label="移交人" prop="transferPeople" width="180">
          <template slot-scope="{row}">
            <el-input v-model="row.transferPeople" size="small"/>
          </template>
        </el-table-column>
        <el-table-column header-align="center" label="体积" prop="volume" width="180">
          <template slot-scope="{row}">
            <el-input v-model="row.volume" size="small"/>
          </template>
        </el-table-column>
        <el-table-column header-align="center" label="送处理日期" prop="deliveryDate" width="180">
          <template slot-scope="{row}">
            <!-- <el-input v-model="row.deliveryDate" size="small"/> -->
            <el-date-picker
                value-format="yyyy-MM-dd"
                style="width: 100%"
                format="yyyy-MM-dd"
                size="small"
                v-model="row.deliveryDate"
                type="date"
                placeholder="选择日期">
              </el-date-picker>
          </template>
        </el-table-column>
      </el-table>
      <span slot="footer" class="dialog-footer">
        <el-button @click="closeThreeWastesDia">取 æ¶ˆ</el-button>
        <el-button :loading="loading" type="primary" @click="handleEdit">提 äº¤</el-button>
      </span>
    </el-dialog>
  </div>
</template>
<script>
import {
  getInternalWastesOne,
  addInternalWastes,
  updateInternalWastes
} from '@/api/cnas/resourceDemand/facilitiesEnvironment/internalWastes'
export default {
  name: 'three-wastes-dialog',
  // import å¼•入的组件需要注入到对象中才能使用
  components: {},
  data() {
    // è¿™é‡Œå­˜æ”¾æ•°æ®
    return {
      formDia: false,
      diaLoading: false,
      loading: false,
      form: {
        remark: '',
        wastesId: '',
      },
      rules: {
        remark: [{required: false, message: '请填写备注',trigger: 'blur'}],
      },
      wastesDetailList: [],
      operationType: '',
    };
  },
  mounted() {
  },
  // æ–¹æ³•集合
  methods: {
    // æ‰“开弹框
    openDia (type, row) {
      this.formDia = true
      this.operationType = type
      if (type !== 'add') {
        this.searchInfo(row)
      }
    },
    // æŸ¥è¯¢è¯¦æƒ…
    searchInfo (row) {
      this.diaLoading = true
      getInternalWastesOne({wastesId: row.wastesId}).then(res => {
        this.diaLoading = false
        if (res.code === 200){
          this.form = res.data
          this.wastesDetailList = this.form.wastesDetailList
        }
      }).catch(err => {
        console.log(err)
        this.diaLoading = false
      })
    },
    // æäº¤å¼¹æ¡†æ•°æ®
    handleEdit () {
      this.$refs['form'].validate((valid) => {
        if (valid) {
          if (this.wastesDetailList.length === 0) {
            this.$message.warning('请添加表格数据')
            return
          }
          this.loading = true
          const internalImplementDto = this.HaveJson(this.form)
          internalImplementDto.wastesDetailList = this.HaveJson(this.wastesDetailList)
          if (this.operationType === 'add') {
            addInternalWastes(internalImplementDto).then(res => {
              this.loading = false
              if (res.code === 200){
                this.$message.success('操作成功')
                this.closeThreeWastesDia()
              }
            }).catch(err => {
              console.log('err---', err);
              this.loading = false
            })
          } else if (this.operationType === 'edit') {
            updateInternalWastes(internalImplementDto).then(res => {
              this.loading = false
              if (res.code === 200){
                this.$message.success('操作成功')
                this.closeThreeWastesDia()
              }
            }).catch(err => {
              console.log('err---', err);
              this.loading = false
            })
          }
        } else {
          console.log('error submit!!');
          return false;
        }
      });
    },
    // å¢žåŠ è¡¨æ ¼è¡Œæ•°æ®
    addRow () {
      this.wastesDetailList.push({
        acceptor: '',
        receivingUnit: '',
        designation: '',
        transferPeople: '',
        volume: '',
        deliveryDate: '',
      })
    },
    // æ¸…空表格数据
    clearTable () {
      this.wastesDetailList = []
    },
    closeThreeWastesDia () {
      this.$refs.form.resetFields();
      this.formDia = false
      this.$emit('closeThreeWastesDia')
    },
  }
};
</script>
<style scoped>
</style>
src/views/CNAS/resourceDemand/facilitiesEnvironment/component/three-wastes-treatment.vue
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,206 @@
<template>
  <div class="capacity-scope">
    <div class="search">
      <div>
        <el-form :model="searchForm" ref="searchForm" size="small" :inline="true">
          <el-form-item label="备注" prop="remark">
            <el-input size="small" placeholder="请输入" clearable v-model="searchForm.remark">
            </el-input>
          </el-form-item>
          <el-form-item>
            <el-button type="primary" icon="el-icon-search" size="mini" @click="searchList">查 è¯¢</el-button>
            <el-button icon="el-icon-refresh" size="mini" @click="resetSearchForm">重 ç½®</el-button>
          </el-form-item>
        </el-form>
      </div>
      <div>
        <el-button size="medium" type="primary" @click="openFormDia('add')">新 å¢ž</el-button>
      </div>
    </div>
    <div class="table">
      <lims-table :tableData="tableData" :column="tableColumn" :height="'calc(100vh - 280px)'" @pagination="pagination"
        :page="page" :tableLoading="tableLoading"></lims-table>
    </div>
    <three-wastes-dialog v-if="threeWastesDia" ref="threeWastesDia"
      @closeThreeWastesDia="closeThreeWastesDia"></three-wastes-dialog>
  </div>
</template>
<script>
import ThreeWastesDialog from './three-wastes-dialog.vue';
import limsTable from '@/components/Table/lims-table.vue'
import {
  pageInternalWastes,
  removeStandardSubstance,
  exportInternalWastes
} from '@/api/cnas/resourceDemand/facilitiesEnvironment/internalWastes'
export default {
  name: 'a6-three-wastes-treatment',
  // import å¼•入的组件需要注入到对象中才能使用
  components: {
    ThreeWastesDialog,
    limsTable
  },
  data() {
    // è¿™é‡Œå­˜æ”¾æ•°æ®
    return {
      searchForm: {
        remark: '',
      },
      tableColumn: [
        {
          label: '创建时间',
          prop: 'createTime',
          minWidth: '100'
        },
        {
          label: '创建人',
          prop: 'createUserName',
          minWidth: '100'
        },
        {
          label: '备注',
          prop: 'remark',
          minWidth: '100'
        },
        {
          label: '修改时间',
          prop: 'updateTime',
          minWidth: '100'
        },
        {
          label: '修改人',
          prop: 'updateUserName',
          minWidth: '100'
        },
        {
          dataType: 'action',
          fixed: 'right',
          minWidth: '220',
          label: '操作',
          operation: [
            {
              name: '导出',
              type: 'text',
              clickFun: (row) => {
                this.handleDown(row)
              }
            },
            {
              name: '编辑',
              type: 'text',
              clickFun: (row) => {
                this.openFormDia('edit', row);
              },
            },
            {
              name: '删除',
              type: 'text',
              color: '#f56c6c',
              clickFun: (row) => {
                this.delPlan(row)
              },
            }
          ]
        }
      ],
      tableData: [],
      tableLoading: false,
      page: {
        total: 0,
        size: 10,
        current: 1
      },
      total: 0,
      threeWastesDia: false
    };
  },
  mounted() {
    this.searchList()
  },
  // æ–¹æ³•集合
  methods: {
    // æŸ¥è¯¢åˆ—表
    searchList() {
      this.tableLoading = true
      pageInternalWastes({ ...this.page, ...this.searchForm }).then(res => {
        this.tableLoading = false
        if (res.code === 200) {
          this.tableData = res.data.records
          this.page.total = res.data.total
        }
      }).catch(err => {
        console.log('err---', err);
        this.tableLoading = false
      })
    },
    // åˆ é™¤
    delPlan(row) {
      this.$confirm('此操作将永久删除该数据, æ˜¯å¦ç»§ç»­?', '提示', {
        confirmButtonText: '确定',
        cancelButtonText: '取消',
        type: 'warning'
      }).then(() => {
        this.tableLoading = true
        removeStandardSubstance({ wastesId: row.wastesId }).then(res => {
          this.tableLoading = false
          if (res.code === 200) {
            this.$message.success('删除成功')
            this.searchList()
          }
        }).catch(err => {
          this.tableLoading = false
          console.log('err---', err);
        })
      }).catch(() => {
        this.$message({
          type: 'info',
          message: '已取消删除'
        });
      });
    },
    // æ–°å¢žï¼Œç¼–辑,批准弹框
    openFormDia(type, row) {
      this.threeWastesDia = true
      this.$nextTick(() => {
        this.$refs.threeWastesDia.openDia(type, row)
      })
    },
    // å¯¼å‡º
    handleDown(row) {
      exportInternalWastes({ wastesId: row.wastesId }).then(res => {
        this.outLoading = false
        const blob = new Blob([res], { type: 'application/msword' });
        this.$download.saveAs(blob, '三废处理导出.docx')
      })
    },
    closeThreeWastesDia() {
      this.threeWastesDia = false
      this.searchList()
    },
    // é‡ç½®æŸ¥è¯¢æ¡ä»¶
    resetSearchForm() {
      this.searchForm.remark = '';
      this.searchList()
    },
    // åˆ†é¡µåˆ‡æ¢
    pagination(page) {
      this.page.size = page.limit
      this.searchList();
    },
  }
};
</script>
<style scoped>
.search {
  height: 46px;
  display: flex;
  justify-content: space-between;
}
.capacity-scope {
  padding: 20px;
}
</style>
src/views/CNAS/resourceDemand/facilitiesEnvironment/index.vue
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,51 @@
<template>
  <div class="main">
    <el-tabs v-model="activeName" :lazy="true" type="border-card">
      <el-tab-pane label="设施和环境条件要求" name="设施和环境条件要求">
        <FacilitiesEnvironmentalConditions v-if="activeName === '设施和环境条件要求'" />
      </el-tab-pane>
      <el-tab-pane label="三废处理" name="三废处理">
        <a6-three-wastes-treatment v-if="activeName === '三废处理'"></a6-three-wastes-treatment>
      </el-tab-pane>
      <el-tab-pane label="进出人员管理" name="进出人员管理">
        <personnel-management v-if="activeName === '进出人员管理'"></personnel-management>
      </el-tab-pane>
    </el-tabs>
  </div>
</template>
<script>
import FacilitiesEnvironmentalConditions from "../facilitiesEnvironment/component/facilities-environmental-conditions.vue";
//   // å¤–来人员管理
//   import ExternalPersonnelManagement from "../facilitiesEnvironment/component/Personnel-management.vue";
import A6ThreeWastesTreatment from '../facilitiesEnvironment/component/three-wastes-treatment.vue';
import PersonnelManagement from '../facilitiesEnvironment/component/Personnel-management.vue';
export default {
  components: {
    //   PersonnelManagement,
    A6ThreeWastesTreatment,
    PersonnelManagement,
    FacilitiesEnvironmentalConditions
  },
  data() {
    return {
      activeName: '设施和环境条件要求',
    }
  }
}
</script>
<style scoped>
.main {
  padding: 15px 0;
  width: 100%;
  border-radius: 15px;
}
>>>.el-tabs--border-card>.el-tabs__content {
  height: calc(100vh - 10em) !important;
  padding: 0;
}
</style>
src/views/CNAS/resourceDemand/standardMaterialAccept/component/AddRecord.vue
@@ -10,14 +10,8 @@
        <el-form-item label="相关附件" prop="file">
          <div class="table-between">
            <el-input v-model="acceptance.file" style="width: 80%;" disabled></el-input>
            <el-upload
              ref="upload"
              style="float: right;"
              :headers="uploadHeader"
              :action="action"
              :show-file-list="false"
              :on-success="onSuccess"
            >
            <el-upload ref="upload" style="float: right;" :headers="uploadHeader" :action="action"
              :show-file-list="false" :on-success="onSuccess">
              <el-button type="primary">
                é™„件上传
              </el-button>
@@ -46,28 +40,17 @@
        </el-form-item>
      </el-col>
      <el-col :span="12">
        <el-form-item label="清单" prop="substanceId"
                      :rule="[{ required: true, message: '请选择清单', trigger: 'change' }]">
        <el-form-item label="清单" prop="substanceId" :rule="[{ required: true, message: '请选择清单', trigger: 'change' }]">
          <el-select v-model="acceptance.substanceId" placeholder="请选择" style="width: 100%">
            <el-option
              v-for="item in options"
              :key="item.value"
              :label="item.name"
              :value="item.id">
            <el-option v-for="item in options" :key="item.value" :label="item.name" :value="item.id">
            </el-option>
          </el-select>
        </el-form-item>
      </el-col>
      <el-col :span="12">
        <el-form-item label="到货日期" prop="arriveDate">
          <el-date-picker
            v-model="acceptance.arriveDate"
            align="right"
            type="date"
            placeholder="选择日期"
            style="width: 100%"
            value-format="yyyy-MM-dd"
          >
          <el-date-picker v-model="acceptance.arriveDate" align="right" type="date" placeholder="选择日期"
            style="width: 100%" value-format="yyyy-MM-dd">
          </el-date-picker>
        </el-form-item>
      </el-col>
@@ -169,7 +152,7 @@
  },
  methods: {
    openDialog(id) {
      if(id) {
      if (id) {
        this.getDetail(id)
      } else {
        this.clearForm()
@@ -178,7 +161,7 @@
    },
    getDetail(id) {
      this.loading = true
      getAcceptanceDetails({id: id}).then(res => {
      getAcceptanceDetails({ id: id }).then(res => {
        this.acceptance = res.data.acceptance
        this.list = res.data.list
        this.loading = false
@@ -224,8 +207,8 @@
      }
      this.acceptance.list = this.HaveJson(this.list)
      this.submitLoading = true
      if(this.acceptance.id) {
        updateAcceptance({acceptance: this.acceptance, list: this.list}).then(res => {
      if (this.acceptance.id) {
        updateAcceptance({ acceptance: this.acceptance, list: this.list }).then(res => {
          this.$message.success('编辑成功')
          this.submitLoading = false
          this.closeDialog()
@@ -234,7 +217,7 @@
          this.submitLoading = false
        })
      } else {
        addAcceptance({acceptance: this.acceptance, list: this.list}).then(res => {
        addAcceptance({ acceptance: this.acceptance, list: this.list }).then(res => {
          this.$message.success('新增成功')
          this.closeDialog()
          this.$emit('submit')
src/views/CNAS/resourceDemand/standardMaterialAccept/index.vue
@@ -22,6 +22,7 @@
        :page="page" :tableLoading="tableLoading">
        <template slot="action" slot-scope="{ row }">
          <el-button type="text" @click="edit(row)">编辑</el-button>
          <el-button type="text" style="color: red;" @click="del(row)">删除</el-button>
        </template>
      </lims-table>
    </div>
@@ -33,7 +34,7 @@
import limsTable from '@/components/Table/lims-table.vue'
import AddRecord from './component/AddRecord.vue';
import {
  getPageAcceptance, getAcceptanceDetails, exportFeStandardSubstanceAcceptance, updateAcceptance, addAcceptance
  getPageAcceptance, deleteAcceptance, exportFeStandardSubstanceAcceptance
} from '@/api/cnas/resourceDemand/standardMaterialAccept/standardMaterialAccept'
export default {
  components: {
@@ -149,6 +150,20 @@
      this.page.size = page.limit
      this.getTableData()
    },
    del(row) {
      this.$confirm('是否确定删除', '提示', {
        confirmButtonText: '确定',
        cancelButtonText: '取消',
        type: 'warning'
      }).then(() => {
        deleteAcceptance(row.id).then(res => {
          if (res.code == 200) {
            this.$message.success("删除成功")
            this.getTableData();
          }
        })
      })
    },
  }
}
</script>
src/views/CNAS/systemManagement/correctiveAction/components/ViewTestRecord.vue
@@ -111,14 +111,7 @@
    },
    // ä¸‹è½½
    upload(row) {
      let url = '';
      if (row.type == 1) {
        url = this.javaApi + '/img/' + row.fileUrl
        this.$download.saveAs(url, row.fileName);
      } else {
        url = this.javaApi + '/word/' + row.fileUrl
        this.$download.saveAs(url, row.fileName);
      }
      this.$download.saveAs(row.fileUrl, row.fileUrl)
    },
    // åˆ é™¤
    delete(row) {
src/views/CNAS/systemManagement/correctiveAction/components/correctiveInfo.vue
@@ -6,19 +6,6 @@
        <table border="1" cellspacing="10" class="tables">
          <tr>
            <td class="td-title">
              <p>培训计划:</p>
            </td>
            <td class="td-info" colspan="3">
              <el-select v-model="form.personTrainingDetailedId" clearable filterable style="width: 100%" disabled
                placeholder="请选择" size="small">
                <el-option v-for="item in yearTrainingDetailed" :key="item.id" :label="item.trainingObjectives"
                  :value="item.id">
                </el-option>
              </el-select>
            </td>
          </tr>
          <tr>
            <td class="td-title">
              <p>不合格或偏离事实的描述:</p>
            </td>
            <td class="td-info" colspan="3">
@@ -154,7 +141,6 @@
<script>
import {
  getSuperviseDetailCorrect,
  getThisYearTrainingDetailed,
} from '@/api/cnas/systemManagement/correctiveAction.js'
export default {
  name: 'correctiveInfo',
@@ -164,7 +150,6 @@
    // è¿™é‡Œå­˜æ”¾æ•°æ®
    return {
      formDia: false,
      yearTrainingDetailed: [],
      form: {
        superviseDetailsId: '',
        raiseResult: '',
@@ -197,7 +182,6 @@
      this.formDia = true
      this.searchInfo(row)
      this.form.superviseDetailsId = row.superviseDetailsId
      this.getYearTrainingDetailed() // èŽ·å–åŸ¹è®­è®¡åˆ’
    },
    // æŸ¥è¯¢ç›‘控计划详情实施信息
    searchInfo(row) {
@@ -207,11 +191,6 @@
        this.form = res.data
      }).catch(err => {
        console.log('err---', err);
      })
    },
    getYearTrainingDetailed() {
      getThisYearTrainingDetailed().then(res => {
        this.yearTrainingDetailed = res.data
      })
    },
    // å…³é—­å¼¹æ¡†
src/views/CNAS/systemManagement/customerManagement/customerSatisfaction.vue
@@ -307,14 +307,7 @@
    },
    // ä¸‹è½½å®¢æˆ·ç¦å»º
    upload(row) {
      let url = '';
      if (row.type == 1) {
        url = this.javaApi + '/img/' + row.fileUrl
        this.$download.saveAs(url, row.fileName);
      } else {
        url = this.javaApi + '/word/' + row.fileUrl
        this.$download.saveAs(url, row.fileName);
      }
      this.$download.saveAs(row.fileUrl, row.fileName)
    },
    // åˆ é™¤å®¢æˆ·åˆ†æžé™„ä»¶
    delFile(row) {
src/views/CNAS/systemManagement/documentControl/components/ControlledFileApplication.vue
@@ -460,9 +460,7 @@
      })
    },
    handleDown(row) {
      if (!row.url) return this.$message.warning('文件未上传')
      let url = this.javaApi + '/word/' + row.url
      this.$download.saveAs(url, row.url);
      this.$download.saveAs(row.url, row.url)
    },
    async uploadPDF(pdfBlob) {
      const formData = new FormData();
src/views/CNAS/systemManagement/documentControl/components/FileChangeRequest.vue
@@ -567,9 +567,7 @@
    },
    // ä¸‹è½½é™„ä»¶
    handleDown(row) {
      if (!row.alterAfterUrl) return this.$message.warning('文件未上传')
      let url = this.javaApi + '/word/' + row.alterAfterUrl
      this.$download.saveAs(url, row.alterAfterUrl)
      this.$download.saveAs(row.alterAfterUrl, row.alterAfterUrl)
    },
    // æ‰“开审核弹框
    handleCheck(row) {
src/views/CNAS/systemManagement/documentControl/components/FileList.vue
@@ -251,9 +251,7 @@
    },
    // ä¸‹è½½æ–‡ä»¶
    handleDown(row) {
      if (!row.url) return this.$message.warning('文件未上传')
      let url = this.javaApi + '/word/' + row.url
      this.$download.saveAs(url, row.url);
      this.$download.saveAs(row.url, row.url)
    },
    // æŸ¥çœ‹æ–‡ä»¶
    handleLook(row) {
@@ -317,7 +315,7 @@
      if (response.code == 200) {
        this.$message.success('上传成功');
        this.refreshTable()
      }else {
      } else {
        this.$message.error(response.msg);
      }
    },
src/views/CNAS/systemManagement/documentRecords/approvalRecord.vue
@@ -283,9 +283,7 @@
      // queryParams
      exportOutManageRecordCheck(this.queryParams).then(res => {
        this.outLoading = false
        if (res.code == 201) return this.$message.error('导出失败')
        let url = this.javaApi + '/word/' + res.data
        this.$download.saveAs(url, '文件审批记录')
        this.$download.saveAs(row.data, '文件审批记录')
      })
    },
    getAuthorizedPerson() {
src/views/CNAS/systemManagement/documentRecords/cancellationRecord.vue
@@ -243,9 +243,7 @@
      this.outLoading = true
      exportOutManageRecordCancel(this.queryParams).then(res => {
        this.outLoading = false
        if (res.code == 201) return this.$message.error('导出失败')
        let url = this.javaApi + '/word/' + res.data
        this.$download.saveAs(url, "作废文件销毁记录");
        this.$download.saveAs(row.data, '作废文件销毁记录')
      })
    },
    getList() {
src/views/CNAS/systemManagement/documentRecords/distributionCollectionRecord.vue
@@ -300,9 +300,7 @@
      this.outLoading = true
      exportOutManageRecordIssueRecycle(this.queryParams).then(res => {
        this.outLoading = false
        if (res.code == 201) return this.$message.error('导出失败')
        let url = this.javaApi + '/word/' + res.data
        this.$download.saveAs(url, '文件发放与回收记录')
        this.$download.saveAs(row.data, '文件发放与回收记录')
      })
    },
    getList() {
src/views/CNAS/systemManagement/documentRecords/outDocumenRecordt.vue
@@ -393,8 +393,7 @@
      }).catch(err => { });
    },
    handleDown0(row) {
      let url = this.javaApi + '/word/' + row.url
      this.$download.saveAs(url, '外来文件确认记录')
      this.$download.saveAs(row.url, '外来文件确认记录')
    },
    // æäº¤
    handleSubmit(row) {
src/views/CNAS/systemManagement/documentRecords/regularReviewsRecord.vue
@@ -345,9 +345,7 @@
      this.outLoading = true
      exportOutManageRecordIntervals(this.queryParams).then(res => {
        this.outLoading = false
        if (res.code == 201) return this.$message.error('导出失败')
        let url = this.javaApi + 'word/' + res.message
        this.$download.saveAs(url, "文件定期审查记录");
        this.$download.saveAs(row.data, '文件定期审查记录')
      })
    },
    getList() {
@@ -543,8 +541,7 @@
      }
    },
    handleDown0(row) {
      let url = this.javaApi + '/word/' + row.url
      this.$download.saveAs(url, "所有文件定期检查记录");
      this.$download.saveAs(row.url, '所有文件定期检查记录')
    },
    // æäº¤
    handleSubmit(row) {
src/views/CNAS/systemManagement/documentRecords/revisionRecord.vue
@@ -550,9 +550,7 @@
      this.outLoading = true
      exportOutManageRecordAudit(this.queryParams).then(res => {
        this.outLoading = false
        if (res.code == 201) return this.$message.error('导出失败')
        let url = this.javaApi + '/word/' + res.data
        this.$download.saveAs(url, "文件修订表");
        this.$download.saveAs(row.data, '文件修订表')
      })
    },
    getList() {
src/views/CNAS/systemManagement/internalAuditManagement/components/ViewTestRecord.vue
@@ -116,14 +116,7 @@
    },
    // ä¸‹è½½
    upload(row) {
      let url = '';
      if (row.type == 1) {
        url = this.javaApi + '/img/' + row.fileUrl
        this.$download.saveAs(url, row.fileName)
      } else {
        url = this.javaApi + '/word/' + row.fileUrl
        this.$download.saveAs(url, row.fileName)
      }
      this.$download.saveAs(row.fileUrl, row.fileName)
    },
    // åˆ é™¤
    delete(row) {
src/views/CNAS/systemManagement/managementReview/components/managementReviewPlan.vue
@@ -281,9 +281,7 @@
      this.lookDialogVisible = true
    },
    handleDown0(url, name) {
      if (!url) return this.$message.warning('文件未上传')
      let url0 = this.javaApi + '/word/' + url
      this.$download.saveAs(url0, name);
      this.$download.saveAs(url, name)
    }
  }
};
src/views/business/inspectionOrder/add.vue
ÎļþÌ«´ó
src/views/business/inspectionOrder/fiberoptic-config-readonly.vue
src/views/business/inspectionOrder/index.vue
@@ -1,39 +1,26 @@
<template>
  <div>
  <div class="bg-1">
    <div style="margin: 5px 15px">
      <el-row class="title">
        <el-col :span="12" style="text-align: left">检验下单</el-col>
        <el-col :span="12" style="text-align: right">
          <el-button
            size="medium"
            type="primary"
            @click="dialogVisible1 = true"
            :loading="exportCheckedLoading"
            >导出检验结果</el-button
          >
          <el-button size="medium" type="primary" @click="print"
            >标签打印</el-button
          >
          <el-button size="medium" type="primary" @click="dialogVisible1 = true"
            :loading="exportCheckedLoading">导出检验结果</el-button>
          <el-button size="medium" type="primary" @click="print">标签打印</el-button>
          <el-button size="medium" type="primary" @click="playOrder(1)"
            >下单</el-button
          >
            v-hasPermi="['business:order:add']">下单</el-button>
        </el-col>
      </el-row>
    </div>
    <basic-container>
      <div class="search" :style="`height: ${more ? 130 : 80}px;`">
      <div class="search" :style="`height: ${more ? 100 : 50}px;`">
        <el-row :gutter="10" style="width: 100%">
          <el-col :span="20" style="display: flex; flex-wrap: wrap">
            <div class="search_thing" style="width: 20%">
              <div class="search_label">委托编号:</div>
              <div class="search_input">
                <el-input
                  size="small"
                  placeholder="请输入"
                  clearable
                  v-model="queryParams.entrustCode"
                  @keyup.enter.native="refreshTable()"
                ></el-input>
                <el-input size="small" placeholder="请输入" clearable v-model="queryParams.entrustCode"
                  @keyup.enter.native="refreshTable()"></el-input>
              </div>
            </div>
            <div class="search_thing" style="width: 20%">
@@ -41,237 +28,130 @@
                å¤–部委托编号:
              </div>
              <div class="search_input">
                <el-input
                  size="small"
                  placeholder="请输入"
                  clearable
                  v-model="queryParams.outEntrustCode"
                  @keyup.enter.native="refreshTable()"
                ></el-input>
                <el-input size="small" placeholder="请输入" clearable v-model="queryParams.outEntrustCode"
                  @keyup.enter.native="refreshTable()"></el-input>
              </div>
            </div>
            <div class="search_thing" style="width: 20%">
              <div class="search_label">样品名称:</div>
              <div class="search_input">
                <el-input
                  size="small"
                  placeholder="请输入"
                  clearable
                  v-model="queryParams.sampleName"
                  @keyup.enter.native="refreshTable()"
                ></el-input>
                <el-input size="small" placeholder="请输入" clearable v-model="queryParams.sampleName"
                  @keyup.enter.native="refreshTable()"></el-input>
              </div>
            </div>
            <div class="search_thing" style="width: 20%">
              <div class="search_label">样品型号:</div>
              <div class="search_input">
                <el-input
                  size="small"
                  placeholder="请输入"
                  clearable
                  v-model="queryParams.sampleModel"
                  @keyup.enter.native="refreshTable()"
                ></el-input>
                <el-input size="small" placeholder="请输入" clearable v-model="queryParams.sampleModel"
                  @keyup.enter.native="refreshTable()"></el-input>
              </div>
            </div>
            <div class="search_thing" style="width: 20%">
              <div class="search_label">样品编号:</div>
              <div class="search_input">
                <el-input
                  size="small"
                  placeholder="请输入"
                  clearable
                  v-model="queryParams.sampleCode"
                  @keyup.enter.native="refreshTable()"
                ></el-input>
                <el-input size="small" placeholder="请输入" clearable v-model="queryParams.sampleCode"
                  @keyup.enter.native="refreshTable()"></el-input>
              </div>
            </div>
            <div class="search_thing" style="width: 40%" v-if="more">
              <div class="search_label">下单时间:</div>
              <div class="search_input">
                <el-date-picker
                  style="width: 100%"
                  v-model="queryParams.startAndEndTime"
                  type="daterange"
                  size="small"
                  range-separator="至"
                  start-placeholder="开始日期"
                  end-placeholder="结束日期"
                  value-format="yyyy-MM-dd"
                  clearable
                  placeholder="选择日期"
                >
                <el-date-picker style="width: 100%" v-model="queryParams.startAndEndTime" type="daterange" size="small"
                  range-separator="至" start-placeholder="开始日期" end-placeholder="结束日期" value-format="yyyy-MM-dd"
                  clearable placeholder="选择日期">
                </el-date-picker>
              </div>
            </div>
            <div class="search_thing" style="width: 20%" v-if="more">
              <div class="search_label">下单人:</div>
              <div class="search_input">
                <el-input
                  size="small"
                  placeholder="请输入"
                  clearable
                  v-model="queryParams.name"
                  @keyup.enter.native="refreshTable()"
                ></el-input>
                <el-input size="small" placeholder="请输入" clearable v-model="queryParams.name"
                  @keyup.enter.native="refreshTable()"></el-input>
              </div>
            </div>
            <div class="search_thing" style="width: 20%" v-if="more">
              <div class="search_label">工程名称:</div>
              <div class="search_input">
                <el-input
                  size="small"
                  placeholder="请输入"
                  clearable
                  v-model="queryParams.engineering"
                  @keyup.enter.native="refreshTable()"
                ></el-input>
                <el-input size="small" placeholder="请输入" clearable v-model="queryParams.engineering"
                  @keyup.enter.native="refreshTable()"></el-input>
              </div>
            </div>
            <div class="search_thing" style="width: 20%" v-if="more">
              <div class="search_label">生产单位:</div>
              <div class="search_input">
                <el-input
                  size="small"
                  placeholder="请输入"
                  clearable
                  v-model="queryParams.production"
                  @keyup.enter.native="refreshTable()"
                ></el-input>
                <el-input size="small" placeholder="请输入" clearable v-model="queryParams.production"
                  @keyup.enter.native="refreshTable()"></el-input>
              </div>
            </div>
          </el-col>
          <el-col :span="4">
            <div class="search_thing">
              <el-button
                type="text"
                :icon="!more ? 'el-icon-arrow-down' : 'el-icon-arrow-up'"
                style="color: #3a7bfa"
                @click="more = !more"
                >{{ !more ? "更多" : "收起" }}</el-button
              >
              <el-button type="text" :icon="!more ? 'el-icon-arrow-down' : 'el-icon-arrow-up'" style="color: #3a7bfa"
                @click="more = !more">{{ !more ? "更多" : "收起" }}</el-button>
              <el-button size="small" @click="refresh()">重 ç½®</el-button>
              <el-button size="small" type="primary" @click="refreshTable()"
                >查 è¯¢</el-button
              >
              <el-button size="small" type="primary" @click="refreshTable()">查 è¯¢</el-button>
            </div>
          </el-col>
        </el-row>
      </div>
    </basic-container>
    <basic-container>
      <div style="width: 100%; height: 100%" v-show="active == 0">
      <div v-show="active == 0">
        <div class="table">
          <ul class="tab">
            <li
              v-for="(m, i) in tabList"
              :key="i + 'afgh'"
              :class="{ active: i == tabIndex }"
              @click="handleTab(m, i)"
            >
            <li v-for="(m, i) in tabList" :key="i + 'afgh'" :class="{ active: i == tabIndex }" @click="handleTab(m, i)">
              {{ m.label }}
            </li>
          </ul>
          <lims-table
            :tableData="tableData"
            :height="tableHeight + ''"
            @pagination="pagination"
            :column="column"
            :page="page"
            :tableLoading="tableLoading"
          ></lims-table>
          <lims-table :tableData="tableData" :height="tableHeight + ''" @pagination="pagination" :column="column"
            :page="page" :tableLoading="tableLoading"></lims-table>
        </div>
        <!-- å®¡æ ¸ -->
        <el-dialog
          title="下单审核"
          :visible.sync="verifyDialogVisible"
          width="30%"
          :before-close="handleClose"
        >
        <el-dialog title="下单审核" :visible.sync="verifyDialogVisible" width="30%" :before-close="handleClose">
          <p style="font-size: 16px; color: #333333" v-if="!isPass">
            å§”托编号<span style="color: #34bd66">ZTMS2023071001</span
            >的信息是否通过
            å§”托编号<span style="color: #34bd66">ZTMS2023071001</span>的信息是否通过
          </p>
          <el-form
            :label-position="labelPosition"
            :model="formData"
            label-width="150px"
            ref="ruleForm"
            v-else
          >
          <el-form :label-position="labelPosition" :model="formData" label-width="150px" ref="ruleForm" v-else>
            <el-form-item label="请输入样品库位号:">
              <el-input
                v-model="formData.specificationModel"
                size="small"
                style="width: 60%"
              ></el-input>
              <el-input v-model="formData.specificationModel" size="small" style="width: 60%"></el-input>
            </el-form-item>
          </el-form>
          <span slot="footer" class="dialog-footer">
            <el-row v-if="!isPass">
              <el-button @click="handleClose">退 å›ž</el-button>
              <el-button type="primary" @click="submitForm" :loading="upLoad"
                >通 è¿‡</el-button
              >
              <el-button type="primary" @click="submitForm" :loading="upLoad">通 è¿‡</el-button>
            </el-row>
            <el-row v-else>
              <el-button @click="handleClose">返 å›ž</el-button>
              <el-button type="primary" @click="submitForm" :loading="upLoad"
                >ç¡® å®š</el-button
              >
              <el-button type="primary" @click="submitForm" :loading="upLoad">ç¡® å®š</el-button>
            </el-row>
          </span>
        </el-dialog>
        <!-- æ’¤é”€ -->
        <el-dialog
          title="下单撤销"
          :visible.sync="quashDialogVisible"
          width="30%"
          :before-close="handleClose"
        >
        <el-dialog title="下单撤销" :visible.sync="quashDialogVisible" width="30%" :before-close="handleClose">
          <p style="font-size: 16px; color: #333333" v-if="!isQuash">
            å§”托编号<span style="color: #34bd66">{{
              this.insOrderRow.entrustCode
            }}</span
            >的信息是否撤销
            }}</span>的信息是否撤销
          </p>
          <el-form
            :label-position="labelPosition"
            :model="formData"
            label-width="150px"
            ref="ruleForm"
            v-else
          >
          <el-form :label-position="labelPosition" :model="formData" label-width="150px" ref="ruleForm" v-else>
            <el-form-item label="请输入撤销原因:">
              <el-input
                v-model="formData.specificationModel"
                size="small"
                style="width: 60%"
              ></el-input>
              <el-input v-model="formData.specificationModel" size="small" style="width: 60%"></el-input>
            </el-form-item>
          </el-form>
          <span slot="footer" class="dialog-footer">
            <el-row v-if="!isQuash">
              <el-button @click="handleClose">取 æ¶ˆ</el-button>
              <el-button type="primary" @click="submitForm" :loading="upLoad"
                >ç¡® å®š</el-button
              >
              <el-button type="primary" @click="submitForm" :loading="upLoad">ç¡® å®š</el-button>
            </el-row>
            <el-row v-else>
              <el-button @click="handleClose">返 å›ž</el-button>
              <el-button type="primary" @click="submitForm" :loading="upLoad"
                >ç¡® å®š</el-button
              >
              <el-button type="primary" @click="submitForm" :loading="upLoad">ç¡® å®š</el-button>
            </el-row>
          </span>
        </el-dialog>
        <!-- ä¸‹å‘ -->
        <el-dialog
          title="检验分配"
          :visible.sync="issuedDialogVisible"
          width="400px"
          :before-close="handleClose"
        >
        <el-dialog title="检验分配" :visible.sync="issuedDialogVisible" width="400px" :before-close="handleClose">
          <div class="body" style="max-height: 60vh">
            <el-row>
              <el-col class="search_thing" style="width: 95%">
@@ -279,73 +159,34 @@
                  <span class="required-span">* </span>约定时间:
                </div>
                <div class="search_input">
                  <el-date-picker
                    size="small"
                    v-model="distributeData.appointed"
                    type="date"
                    placeholder="选择日期"
                    value-format="yyyy-MM-dd"
                    style="width: 100%"
                    format="yyyy-MM-dd"
                  >
                  <el-date-picker size="small" v-model="distributeData.appointed" type="date" placeholder="选择日期"
                    value-format="yyyy-MM-dd" style="width: 100%" format="yyyy-MM-dd">
                  </el-date-picker>
                </div>
              </el-col>
              <el-col class="search_thing" style="width: 95%">
                <div class="search_label">
                  <span class="required-span" v-show="distributeData.type == 2"
                    >* </span
                  >指派人员:
                  <span class="required-span" v-show="distributeData.type == 2">* </span>指派人员:
                </div>
                <div class="search_input">
                  <el-select
                    v-model="distributeData.userId"
                    placeholder="请选择"
                    size="small"
                    style="width: 100%"
                    clearable
                    filterable
                    @change="changeUser"
                  >
                    <el-option-group
                      v-for="(item, index) in Object.keys(personList)"
                      :key="index"
                      :label="item"
                    >
                      <el-option
                        v-for="op in personList[item]"
                        :key="op.id"
                        :label="op.name"
                        :value="op.id"
                      >
                  <el-select v-model="distributeData.userId" placeholder="请选择" size="small" style="width: 100%"
                    clearable filterable @change="changeUser">
                    <el-option-group v-for="(item, index) in Object.keys(personList)" :key="index" :label="item">
                      <el-option v-for="op in personList[item]" :key="op.id" :label="op.name" :value="op.id">
                      </el-option>
                    </el-option-group>
                  </el-select>
                </div>
              </el-col>
              <el-col
                class="search_thing"
                style="width: 95%"
                v-if="distributeData.userId"
              >
              <el-col class="search_thing" style="width: 95%" v-if="distributeData.userId">
                <div class="search_label">
                  <span class="required-span">* </span>试验室:
                </div>
                <div class="search_input">
                  <el-select
                    v-model="distributeData.sonLaboratory"
                    placeholder="请选择11"
                    size="small"
                    style="width: 100%"
                    clearable
                    filterable
                  >
                    <el-option
                      v-for="(item, i) in sonLaboratoryList"
                      :key="i + 'oooo'"
                      :label="item.label"
                      :value="item.value"
                    >
                  <el-select v-model="distributeData.sonLaboratory" placeholder="请选择11" size="small" style="width: 100%"
                    clearable filterable>
                    <el-option v-for="(item, i) in sonLaboratoryList" :key="i + 'oooo'" :label="item.label"
                      :value="item.value">
                    </el-option>
                  </el-select>
                </div>
@@ -355,34 +196,18 @@
          <span slot="footer" class="dialog-footer">
            <el-row>
              <el-button @click="handleClose2">取 æ¶ˆ</el-button>
              <el-button type="primary" @click="submitForm2" :loading="upLoad"
                >ç¡® å®š</el-button
              >
              <el-button type="primary" @click="submitForm2" :loading="upLoad">ç¡® å®š</el-button>
            </el-row>
          </span>
        </el-dialog>
        <el-dialog
          title="数据查看"
          :visible.sync="dataDialogVisible"
          width="100%"
          fullscreen
        >
        <el-dialog title="数据查看" :visible.sync="dataDialogVisible" width="100%" fullscreen>
          <div style="height: 80vh; overflow-y: auto" v-if="dataDialogVisible">
            <ValueTable
              ref="ValueTableDataLook"
              :rowKey="'insProductId'"
              :url="$api.insOrder.selectSampleAndProductByOrderId"
              :componentData="componentDataDataLook"
            />
            <ValueTable ref="ValueTableDataLook" :rowKey="'insProductId'"
              :url="$api.insOrder.selectSampleAndProductByOrderId" :componentData="componentDataDataLook" />
          </div>
        </el-dialog>
        <el-dialog
          top="5vh"
          :title="deleteTilte"
          :visible.sync="deleteDialogVisible"
          :before-close="handleCloseDelete"
          width="80%"
        >
        <el-dialog top="5vh" :title="deleteTilte" :visible.sync="deleteDialogVisible" :before-close="handleCloseDelete"
          width="80%">
          <div class="table-container" v-if="deleteDialogVisible">
            <!-- <ValueTable
            ref="ValueTableDataDelete"
@@ -396,57 +221,23 @@
            :componentData="componentDataDelete"
            :isColumnWidth="true"
          /> -->
            <el-table
              height="500px"
              ref="revokeTable"
              @select="handleSelectionChange"
              @select-all="handleSelectionAll"
              :data="treeTableData"
              style="width: 100%"
              row-key="id"
              border
              lazy
              :load="load"
              :tree-props="{ children: 'children', hasChildren: 'hasChildren' }"
            >
              <el-table-column
                v-if="deleteTilte == '撤销'"
                type="selection"
                width="55"
              ></el-table-column>
              <el-table-column
                prop="sampleCode"
                label="样品编号"
                show-overflow-tooltip
              >
            <el-table height="500px" ref="revokeTable" @select="handleSelectionChange" @select-all="handleSelectionAll"
              :data="treeTableData" style="width: 100%" row-key="id" border lazy :load="load"
              :tree-props="{ children: 'children', hasChildren: 'hasChildren' }">
              <el-table-column v-if="deleteTilte == '撤销'" type="selection" width="55"></el-table-column>
              <el-table-column prop="sampleCode" label="样品编号" show-overflow-tooltip>
              </el-table-column>
              <el-table-column
                prop="inspectionItem"
                label="检验项"
                show-overflow-tooltip
              >
              <el-table-column prop="inspectionItem" label="检验项" show-overflow-tooltip>
              </el-table-column>
              <el-table-column
                prop="inspectionItemSubclass"
                label="检验子项"
                show-overflow-tooltip
              >
              <el-table-column prop="inspectionItemSubclass" label="检验子项" show-overflow-tooltip>
              </el-table-column>
              <el-table-column
                prop="sampleType"
                label="样品分类"
                show-overflow-tooltip
              >
              <el-table-column prop="sampleType" label="样品分类" show-overflow-tooltip>
              </el-table-column>
              <el-table-column prop="sample" label="样品" show-overflow-tooltip>
              </el-table-column>
              <el-table-column prop="model" label="型号" show-overflow-tooltip>
              </el-table-column>
              <el-table-column
                prop="sonLaboratory"
                label="试验室"
                show-overflow-tooltip
              >
              <el-table-column prop="sonLaboratory" label="试验室" show-overflow-tooltip>
              </el-table-column>
              <el-table-column prop="tell" label="要求值" show-overflow-tooltip>
              </el-table-column>
@@ -457,118 +248,46 @@
              <el-button @click="handleNo">{{
                deleteTilte == "撤销" ? "取 æ¶ˆ" : "不通过"
              }}</el-button>
              <el-button
                type="primary"
                @click="submitDelete"
                :loading="printLoading"
                >{{ deleteTilte == "撤销" ? "ç¡® å®š" : "通 è¿‡" }}</el-button
              >
              <el-button type="primary" @click="submitDelete" :loading="printLoading">{{ deleteTilte == "撤销" ? "ç¡® å®š" :
                "通 è¿‡" }}</el-button>
            </el-row>
          </span>
        </el-dialog>
        <!-- æ•°æ®æŸ¥çœ‹è¯¦æƒ… -->
        <el-dialog
          title="查看详情"
          :visible.sync="dialogVisible"
          width="70%"
          :before-close="handleClose3"
        >
          <el-table
            v-if="type == '单根垂直燃烧' || type == '松套管'"
            :data="viewDetailsList"
            height="400px"
            border
            style="width: 100%"
          >
            <el-table-column
              type="index"
              label="序号"
              width="80px"
            ></el-table-column>
            <el-table-column
              prop="entrustCode"
              label="委托单号"
            ></el-table-column>
            <el-table-column
              prop="sampleCode"
              label="样品编号"
            ></el-table-column>
        <el-dialog title="查看详情" :visible.sync="dialogVisible" width="70%" :before-close="handleClose3">
          <el-table v-if="type == '单根垂直燃烧' || type == '松套管'" :data="viewDetailsList" height="400px" border
            style="width: 100%">
            <el-table-column type="index" label="序号" width="80px"></el-table-column>
            <el-table-column prop="entrustCode" label="委托单号"></el-table-column>
            <el-table-column prop="sampleCode" label="样品编号"></el-table-column>
            <el-table-column prop="color" label="套管"></el-table-column>
            <!-- <el-table-column prop="inspectionItem" label="检验项"></el-table-column> -->
            <el-table-column prop="insValue" label="检验结果"></el-table-column>
          </el-table>
          <el-table
            v-if="type == '抗拉强度'"
            :data="viewDetailsList"
            height="400px"
            border
            style="width: 100%"
          >
            <el-table-column
              type="index"
              label="序号"
              width="80px"
            ></el-table-column>
            <el-table-column
              prop="inspectionItem"
              label="检验项"
            ></el-table-column>
            <el-table-column
              prop="inspectionItemSubclass"
              label="检验子项"
            ></el-table-column>
          <el-table v-if="type == '抗拉强度'" :data="viewDetailsList" height="400px" border style="width: 100%">
            <el-table-column type="index" label="序号" width="80px"></el-table-column>
            <el-table-column prop="inspectionItem" label="检验项"></el-table-column>
            <el-table-column prop="inspectionItemSubclass" label="检验子项"></el-table-column>
            <el-table-column prop="width" label="宽度"></el-table-column>
            <el-table-column prop="thickness" label="厚度"></el-table-column>
            <el-table-column prop="testValue" label="检验值"></el-table-column>
          </el-table>
          <el-table
            v-if="type == '断裂伸长率'"
            :data="viewDetailsList"
            height="400px"
            border
            style="width: 100%"
          >
            <el-table-column
              type="index"
              label="序号"
              width="80px"
            ></el-table-column>
            <el-table-column
              prop="inspectionItem"
              label="检验项"
            ></el-table-column>
            <el-table-column
              prop="inspectionItemSubclass"
              label="检验子项"
            ></el-table-column>
            <el-table-column
              v-for="(v, i) in tableHeader"
              :key="i"
              :prop="`testValue${i}`"
              :label="`检验值${i + 1}`"
            ></el-table-column>
          <el-table v-if="type == '断裂伸长率'" :data="viewDetailsList" height="400px" border style="width: 100%">
            <el-table-column type="index" label="序号" width="80px"></el-table-column>
            <el-table-column prop="inspectionItem" label="检验项"></el-table-column>
            <el-table-column prop="inspectionItemSubclass" label="检验子项"></el-table-column>
            <el-table-column v-for="(v, i) in tableHeader" :key="i" :prop="`testValue${i}`"
              :label="`检验值${i + 1}`"></el-table-column>
          </el-table>
        </el-dialog>
        <!-- å¯¼å‡ºå·²æ£€æ•°æ® -->
        <el-dialog
          title="选择日期"
          :visible.sync="dialogVisible1"
          width="30%"
          :before-close="handleClose4"
        >
        <el-dialog title="选择日期" :visible.sync="dialogVisible1" width="30%" :before-close="handleClose4">
          <span>下单日期:&nbsp;</span>
          <el-date-picker
            v-model="exportCheckedDate"
            type="daterange"
            size="small"
            value-format="yyyy-MM-dd"
            range-separator="至"
            start-placeholder="开始日期"
            end-placeholder="结束日期"
          >
          <el-date-picker v-model="exportCheckedDate" type="daterange" size="small" value-format="yyyy-MM-dd"
            range-separator="至" start-placeholder="开始日期" end-placeholder="结束日期">
          </el-date-picker>
          <span slot="footer" class="dialog-footer">
            <el-button @click="handleClose4">取 æ¶ˆ</el-button>
@@ -577,47 +296,17 @@
        </el-dialog>
      </div>
      <div style="width: 100%; height: 100%" v-if="active > 0">
        <Add
          :active="active"
          :currentId="currentId"
          v-if="active < 4"
          :examine="examine"
        />
        <Add :active="active" :currentId="currentId" v-if="active < 4" :examine="examine" />
      </div>
      <el-dialog
        title="标签打印"
        :visible.sync="printDialogVisible"
        width="40%"
        top="5vh"
      >
        <div
          style="width: 100%; height: 400px; overflow-y: auto"
          v-loading="loadPint"
        >
      <el-dialog title="标签打印" :visible.sync="printDialogVisible" width="40%" top="5vh">
        <div style="width: 100%; height: 400px; overflow-y: auto" v-loading="loadPint">
          <div class="dia_body">
            <el-checkbox
              style="margin: 10px 5px"
              :indeterminate="isIndeterminate"
              v-model="checkAll"
              @change="handleCheckAllChange"
              >全选</el-checkbox
            >
            <el-checkbox-group
              @change="changePrintCode()"
              v-model="checkIndexList"
            >
              <el-card
                class="box-card"
                v-for="(item, i) in qrData"
                :key="i + 'wwwww'"
                style="margin-bottom: 15px; font-size: 16px !important"
              >
                <el-checkbox
                  :label="i"
                  :key="i"
                  style="position: relative; top: -20px; left: 5px"
                  ><br
                /></el-checkbox>
            <el-checkbox style="margin: 10px 5px" :indeterminate="isIndeterminate" v-model="checkAll"
              @change="handleCheckAllChange">全选</el-checkbox>
            <el-checkbox-group @change="changePrintCode()" v-model="checkIndexList">
              <el-card class="box-card" v-for="(item, i) in qrData" :key="i + 'wwwww'"
                style="margin-bottom: 15px; font-size: 16px !important">
                <el-checkbox :label="i" :key="i" style="position: relative; top: -20px; left: 5px"><br /></el-checkbox>
                <div>
                  <el-row style="font-size: 14px; padding-left: 20px">
                    <el-col style="font-weight: bold">{{ item.pName }}</el-col>
@@ -625,89 +314,48 @@
                  <div style="display: flex">
                    <div>
                      <el-col :span="8" :offset="4">
                        <vueQr
                          :text="
                            'https://zttx-lims.ztt.cn:8021/lims/qr/qrScan?code=' +
                            item.id +
                            '&type=sample'
                          "
                          :size="140"
                          :margin="2"
                        ></vueQr>
                        <vueQr :text="'https://zttx-lims.ztt.cn:8021/lims/qr/qrScan?code=' +
                          item.id +
                          '&type=sample'
                          " :size="140" :margin="2"></vueQr>
                      </el-col>
                    </div>
                    <div style="margin-left: 50px; width: 100%">
                      <el-row>
                        <el-col
                          style="
                        <el-col style="
                            font-weight: bold;
                            text-align: left;
                            font-size: 14px;
                          "
                          ><span>样品编号:&nbsp; </span
                          >{{ item.sampleCode }}</el-col
                        >
                          "><span>样品编号:&nbsp; </span>{{ item.sampleCode }}</el-col>
                      </el-row>
                      <el-row style="margin-top: 1px; font-size: 14px">
                        <el-col style="font-weight: bold; text-align: left"
                          ><span>委托单号:&nbsp; </span>{{ item.code }}</el-col
                        >
                        <el-col style="font-weight: bold; text-align: left"><span>委托单号:&nbsp; </span>{{ item.code
                          }}</el-col>
                      </el-row>
                      <el-row style="margin-top: 1px; font-size: 14px">
                        <el-col style="font-weight: bold; text-align: left"
                          ><span>规格型号:&nbsp; </span>{{ item.model }}</el-col
                        >
                        <el-col style="font-weight: bold; text-align: left"><span>规格型号:&nbsp; </span>{{ item.model
                          }}</el-col>
                      </el-row>
                      <el-row style="margin-top: 1px; font-size: 14px">
                        <el-col style="font-weight: bold; text-align: left"
                          ><span>样品名称:&nbsp; </span
                          >{{ item.sample }}</el-col
                        >
                        <el-col style="font-weight: bold; text-align: left"><span>样品名称:&nbsp; </span>{{ item.sample
                          }}</el-col>
                      </el-row>
                      <el-row
                        style="margin-top: 1px; font-size: 14px"
                        class="ellipsis-multiline"
                      >
                        <el-col style="font-weight: bold; text-align: left"
                          ><span>检测项目:&nbsp; </span>{{ item.item }}</el-col
                        >
                      <el-row style="margin-top: 1px; font-size: 14px" class="ellipsis-multiline">
                        <el-col style="font-weight: bold; text-align: left"><span>检测项目:&nbsp; </span>{{ item.item
                          }}</el-col>
                      </el-row>
                      <el-row style="margin-top: 2px; font-size: 14px">
                        <el-col
                          style="
                        <el-col style="
                            font-weight: bold;
                            display: flex;
                            align-items: center;
                          "
                          ><span>样品状态:&nbsp; </span
                          ><el-radio-group
                            :value="item.insState"
                            style="margin-top: 7px; margin-left: 4px"
                            disabled
                          >
                            <el-radio
                              :label="0"
                              style="font-weight: bold; margin-right: 7px"
                              >待检</el-radio
                            >
                            <el-radio
                              :label="1"
                              style="font-weight: bold; margin-right: 7px"
                              >在检</el-radio
                            >
                            <el-radio
                              :label="2"
                              style="font-weight: bold; margin-right: 7px"
                              >已检</el-radio
                            > </el-radio-group
                          ><el-radio
                            :label="1"
                            style="font-weight: bold; margin-top: 7px"
                            v-model="item.isLeave"
                            disabled
                            >留样</el-radio
                          ></el-col
                        >
                          "><span>样品状态:&nbsp; </span><el-radio-group :value="item.insState"
                            style="margin-top: 7px; margin-left: 4px" disabled>
                            <el-radio :label="0" style="font-weight: bold; margin-right: 7px">待检</el-radio>
                            <el-radio :label="1" style="font-weight: bold; margin-right: 7px">在检</el-radio>
                            <el-radio :label="2" style="font-weight: bold; margin-right: 7px">已检</el-radio>
                          </el-radio-group><el-radio :label="1" style="font-weight: bold; margin-top: 7px"
                            v-model="item.isLeave" disabled>留样</el-radio></el-col>
                      </el-row>
                    </div>
                  </div>
@@ -719,61 +367,40 @@
        <span slot="footer" class="dialog-footer">
          <el-row>
            <el-button @click="printDialogVisible = false">取 æ¶ˆ</el-button>
            <el-button
              type="primary"
              @click="submitPrint"
              :loading="printLoading"
              >打 å°</el-button
            >
            <el-button type="primary" @click="submitPrint" :loading="printLoading">打 å°</el-button>
          </el-row>
        </span>
      </el-dialog>
      <div
        class="el-dialog__body"
        style="
      <div class="el-dialog__body" style="
          overflow-y: auto;
          margin-top: 0;
          position: fixed;
          top: 999px;
          z-index: 99999;
          display: none;
        "
      >
        ">
        <div id="printMOrder" class="printMOrder" ref="printMOrder">
          <el-card
            class="box-card"
            v-for="(item, i) in checkDataList"
            :key="i + 'uuuuu'"
            style="
          <el-card class="box-card" v-for="(item, i) in checkDataList" :key="i + 'uuuuu'" style="
              font-size: 0.2cm !important;
              page-break-after: always;
              color: #000;
              box-shadow: none;
              margin: 0 !important;
              padding: 0 !important;
            "
          >
            ">
            <div style="display: flex">
              <div>
                <el-col :span="10" :offset="2">
                  <vueQr
                    :text="
                      'https://zttx-lims.ztt.cn:8021/lims/qr/qrScan?code=' +
                      item.id +
                      '&type=sample'
                    "
                    :size="60"
                    :margin="2"
                  ></vueQr>
                  <vueQr :text="'https://zttx-lims.ztt.cn:8021/lims/qr/qrScan?code=' +
                    item.id +
                    '&type=sample'
                    " :size="60" :margin="2"></vueQr>
                </el-col>
              </div>
              <div style="margin-left: 0.32cm; line-height: 0.22cm">
                <el-row>
                  <el-col
                    style="font-size: 0.2cm; width: 4cm"
                    class="single-line-ellipsis"
                    ><span>样品编号:&nbsp; </span>{{ item.sampleCode }}</el-col
                  >
                  <el-col style="font-size: 0.2cm; width: 4cm" class="single-line-ellipsis"><span>样品编号:&nbsp; </span>{{
                    item.sampleCode }}</el-col>
                </el-row>
                <el-row style="font-size: 0.2cm">
                  <el-col><span>委托单号:&nbsp; </span>{{ item.code }}</el-col>
@@ -782,29 +409,19 @@
                  <el-col><span>规格型号:&nbsp; </span>{{ item.model }}</el-col>
                </el-row>
                <el-row style="font-size: 0.2cm">
                  <el-col
                    ><span>样品名称:&nbsp; </span>{{ item.sample }}</el-col
                  >
                  <el-col><span>样品名称:&nbsp; </span>{{ item.sample }}</el-col>
                </el-row>
                <el-row style="font-size: 0.2cm; width: 4cm">
                  <el-col class="ellipsis-multiline"
                    ><span>检测项目:&nbsp; </span>{{ item.item }}</el-col
                  >
                  <el-col class="ellipsis-multiline"><span>检测项目:&nbsp; </span>{{ item.item }}</el-col>
                </el-row>
                <el-row style="margin-top: 0.01cm; font-size: 0.2cm">
                  <el-col style="display: flex; align-items: center"
                    ><span>样品状态:&nbsp; </span>
                    <span style="white-space: nowrap"
                      ><span v-if="item.insState == 0">√</span
                      ><span class="scor" v-if="item.insState != 0"></span>待检
                      <span v-if="item.insState == 1">√</span
                      ><span class="scor" v-if="item.insState != 1"></span>在检
                      <span v-if="item.insState == 2">√</span
                      ><span class="scor" v-if="item.insState != 2"></span>已检
                      <span v-if="item.isLeave == 1">√</span
                      ><span class="scor" v-if="item.isLeave != 1"></span
                      >留样</span
                    >
                  <el-col style="display: flex; align-items: center"><span>样品状态:&nbsp; </span>
                    <span style="white-space: nowrap"><span v-if="item.insState == 0">√</span><span class="scor"
                        v-if="item.insState != 0"></span>待检
                      <span v-if="item.insState == 1">√</span><span class="scor" v-if="item.insState != 1"></span>在检
                      <span v-if="item.insState == 2">√</span><span class="scor" v-if="item.insState != 2"></span>已检
                      <span v-if="item.isLeave == 1">√</span><span class="scor"
                        v-if="item.isLeave != 1"></span>留样</span>
                  </el-col>
                </el-row>
              </div>
@@ -828,11 +445,15 @@
import vueQr from "vue-qr";
import getLodop from "@/utils/lodop";
import Add from "./add.vue";
import { mapGetters } from "vuex";
export default {
  components: {
    limsTable,
    Add,
    vueQr,
  },
  computed: {
    ...mapGetters(["permissions"]),
  },
  data() {
    return {
@@ -986,32 +607,32 @@
            {
              name: "数据查看",
              type: "text",
              clickFun: (row) => {},
              clickFun: (row) => { },
            },
            {
              name: "报告下载",
              type: "text",
              clickFun: (row) => {},
              clickFun: (row) => { },
            },
            {
              name: "审核",
              type: "text",
              clickFun: (row) => {},
              clickFun: (row) => { },
            },
            {
              name: "撤销",
              type: "text",
              clickFun: (row) => {},
              clickFun: (row) => { },
            },
            {
              name: "撤销审核",
              type: "text",
              clickFun: (row) => {},
              clickFun: (row) => { },
            },
            {
              name: "分配",
              type: "text",
              clickFun: (row) => {},
              clickFun: (row) => { },
            },
          ],
        },
@@ -1369,16 +990,21 @@
  beforeDestroy() {
    window.removeEventListener("resize", this.getTableHeight);
  },
  watch: {
    more() {
      this.getTableHeight();
    },
  },
  methods: {
    //获取表格高度
    getTableHeight() {
      const otherHeight = 400; // å…¶ä½™é«˜åº¦
      const tableH = 50; // è·ç¦»é¡µé¢ä¸‹æ–¹çš„高度
      const tableHeightDetil = window.innerHeight - tableH;
      const otherHeight = this.more ? 430 : 380; // å…¶ä½™é«˜åº¦
      const tableBottom = 50; // è·ç¦»é¡µé¢ä¸‹æ–¹çš„高度
      const tableHeightDetil = window.innerHeight - tableBottom;
      if (tableHeightDetil <= 300) {
        this.tableHeight = 200;
      } else {
        this.tableHeight = window.innerHeight - tableH - otherHeight;
        this.tableHeight = window.innerHeight - tableBottom - otherHeight;
      }
    },
    getDictList() {
@@ -1649,9 +1275,8 @@
        this.personList = res.data;
      });
    },
    refreshTable(e) {
      this.$refs["ValueTable"].selectList(e);
      this.queryCount = 0;
    refreshTable() {
      this.getList();
    },
    getTableData(newData) {
      if (newData && newData.length == 1) {
@@ -2010,8 +1635,8 @@
          this.$axios
            .get(
              this.$api.insOrder.selectTemperatureByProductId +
                "?productId=" +
                tree.id
              "?productId=" +
              tree.id
            )
            .then((res) => {
              this.loadRecursion(this.treeTableData, tree.id, res.data);
@@ -2025,10 +1650,10 @@
          this.$axios
            .get(
              this.$api.insOrder.selectTemperatureNumberByProductId +
                "?parentId=" +
                tree.parentId +
                "&inspectionItem=" +
                tree.inspectionItemTwo
              "?parentId=" +
              tree.parentId +
              "&inspectionItem=" +
              tree.inspectionItemTwo
            )
            .then((res) => {
              this.loadRecursion(this.treeTableData, tree.id, res.data);
@@ -2040,10 +1665,10 @@
          this.$axios
            .get(
              this.$api.insOrder.selectProductsBySampleId +
                "?sampleId=" +
                tree.id +
                "&orderId=" +
                this.orderId
              "?sampleId=" +
              tree.id +
              "&orderId=" +
              this.orderId
            )
            .then((res) => {
              this.treeTableData.forEach((m, index) => {
@@ -2075,8 +1700,8 @@
          this.$axios
            .get(
              this.$api.insOrder.revokeReviewTemperatureByProductId +
                "?productId=" +
                tree.id
              "?productId=" +
              tree.id
            )
            .then((res) => {
              resolve(res.data);
@@ -2088,10 +1713,10 @@
          this.$axios
            .get(
              this.$api.insOrder.revokeReviewConsistentByProductId +
                "?parentId=" +
                tree.parentId +
                "&inspectionItem=" +
                tree.inspectionItemTwo
              "?parentId=" +
              tree.parentId +
              "&inspectionItem=" +
              tree.inspectionItemTwo
            )
            .then((res) => {
              resolve(res.data);
@@ -2101,10 +1726,10 @@
          this.$axios
            .get(
              this.$api.insOrder.revokeReviewProduct +
                "?sampleId=" +
                tree.id +
                "&orderId=" +
                this.orderId
              "?sampleId=" +
              tree.id +
              "&orderId=" +
              this.orderId
            )
            .then((res) => {
              resolve(res.data);
@@ -2204,7 +1829,7 @@
              this.deleteDialogVisible = false;
              this.printLoading = false;
              this.revokeData = [];
              this.refreshTable("page");
              this.refreshTable();
              this.$message.success("撤销成功");
            }
          });
@@ -2252,7 +1877,7 @@
            if (res.code === 200) {
              this.printLoading = false;
              this.deleteDialogVisible = false;
              this.refreshTable("page");
              this.refreshTable();
              this.$message.success("更新成功");
            }
          });
@@ -2307,7 +1932,7 @@
            if (res.code === 200) {
              this.printLoading = false;
              this.deleteDialogVisible = false;
              this.refreshTable("page");
              this.refreshTable();
              this.$message.success("更新成功");
            }
          });
@@ -2391,7 +2016,7 @@
          this.$message.success("修改成功");
          this.upLoad = false;
          this.issuedDialogVisible = false;
          this.refreshTable("page");
          this.refreshTable();
        })
        .catch((e) => {
          this.$message.error("修改失败");
@@ -2409,7 +2034,7 @@
            if (res.code === 200) {
              this.upLoad = false;
              this.quashDialogVisible = false;
              this.refreshTable("page");
              this.refreshTable();
              this.$message.success("更新成功");
            }
          });
@@ -2420,7 +2045,7 @@
            if (res.code === 200) {
              this.upLoad = false;
              this.quashDialogVisible = false;
              this.refreshTable("page");
              this.refreshTable();
              this.$message.success("更新成功");
            }
          });
@@ -2437,9 +2062,13 @@
    },
    // ä¸‹å•
    playOrder(num) {
      this.$router.push({
        name: "addOrder",
        params: {},
      });
      this.active = num;
      this.examine = 0;
      this.refreshTable("page");
      // this.refreshTable();
    },
    handleTab(m, i) {
      this.tabIndex = i;
@@ -2489,9 +2118,6 @@
          this.componentData.tagField.orderType.select = res.data;
        });
    },
    getStyle() {
      return "height: calc(100% - " + (this.more ? "94" : "44") + "px)";
    },
    changeUser() {
      if (this.sonLaboratoryList.length > 0) {
        this.distributeData.sonLaboratory = this.sonLaboratoryList[0].value;
@@ -2509,7 +2135,7 @@
.search {
  background-color: #fff;
  height: 80px;
  height: 50px;
  display: flex;
  align-items: center;
  overflow: hidden;
@@ -2543,7 +2169,7 @@
.tab {
  list-style-type: none;
  display: flex;
  margin-bottom: 12px;
  /* margin-bottom: 12px; */
  padding-inline-start: 0px;
}
@@ -2572,10 +2198,12 @@
.el-form-item {
  margin-bottom: 16px;
}
.box-card >>> .el-radio__inner {
.box-card>>>.el-radio__inner {
  border-radius: 2px !important;
}
.box-card >>> .el-radio__input.is-checked .el-radio__inner::after {
.box-card>>>.el-radio__input.is-checked .el-radio__inner::after {
  content: "";
  width: 8px;
  height: 3px;
@@ -2591,13 +2219,16 @@
  border-radius: 0px;
  background: none;
}
>>> .el-radio__label {
>>>.el-radio__label {
  color: #000 !important;
}
.el-dialog__body >>> .el-radio__label {
.el-dialog__body>>>.el-radio__label {
  font-size: 8px;
}
.el-dialog__body >>> .el-radio__input.is-checked .el-radio__inner::after {
.el-dialog__body>>>.el-radio__input.is-checked .el-radio__inner::after {
  content: "";
  width: 4px;
  height: 3px;
@@ -2613,31 +2244,40 @@
  border-radius: 0px;
  background: none;
}
>>> .el-radio__input.is-disabled.is-checked .el-radio__inner {
>>>.el-radio__input.is-disabled.is-checked .el-radio__inner {
  background: #3a7bfa;
}
.el-dialog__body >>> .el-radio__input.is-disabled.is-checked .el-radio__inner {
.el-dialog__body>>>.el-radio__input.is-disabled.is-checked .el-radio__inner {
  background: transparent;
}
.el-dialog__body >>> .el-radio__inner {
.el-dialog__body>>>.el-radio__inner {
  width: 8px !important;
  height: 8px !important;
}
.el-dialog__body >>> .el-radio__label {
.el-dialog__body>>>.el-radio__label {
  padding-left: 2px !important;
}
.el-dialog__body >>> .el-card__body {
.el-dialog__body>>>.el-card__body {
  padding: 0 !important;
}
.el-dialog__body >>> .el-card {
.el-dialog__body>>>.el-card {
  border: none;
}
.el-dialog__body >>> .el-radio__input.is-disabled .el-radio__inner {
.el-dialog__body>>>.el-radio__input.is-disabled .el-radio__inner {
  border-color: #000 !important;
}
.el-dialog__body >>> .el-radio__input.is-disabled.is-checked .el-radio__inner {
.el-dialog__body>>>.el-radio__input.is-disabled.is-checked .el-radio__inner {
  border: none !important;
}
.scor {
  width: 0.01cm;
  height: 0.01cm;
@@ -2645,6 +2285,7 @@
  border: 1px solid #000;
  display: inline-block;
}
.ellipsis-multiline {
  display: -webkit-box;
  -webkit-line-clamp: 2;
@@ -2652,14 +2293,19 @@
  overflow: hidden;
  text-overflow: ellipsis;
  word-wrap: break-word;
  max-height: 3em; /* é«˜åº¦ä¸ºå­—体大小的两倍 */
  line-height: 1.5em; /* è¡Œé«˜ */
  height: 3em; /* é«˜åº¦ä¸ºè¡Œé«˜çš„两倍 */
  max-height: 3em;
  /* é«˜åº¦ä¸ºå­—体大小的两倍 */
  line-height: 1.5em;
  /* è¡Œé«˜ */
  height: 3em;
  /* é«˜åº¦ä¸ºè¡Œé«˜çš„两倍 */
}
.table-container {
  height: 70vh;
  overflow-y: auto;
}
.table-container.el-table {
  overflow: hidden;
  text-overflow: ellipsis;
src/views/index.vue
@@ -1,33 +1,40 @@
<template>
  <div class="index">
  <div class="bg-1">
    <el-row :gutter="25">
      <el-col :lg="14" :md="14" :sm="24" :xl="14" :xs="24">
        <div class="left-1">
          <div class="say">
            <div style="display: flex;align-items: center;flex-wrap: wrap;">
              <div class="say-1">{{user.name}} æ‚¨å¥½ï¼ç¥æ‚¨å¼€å¿ƒæ¯ä¸€å¤©</div>
              <div class="say-2">当前时间: {{now}}</div>
              <div class="say-1">{{ user.name }} æ‚¨å¥½ï¼ç¥æ‚¨å¼€å¿ƒæ¯ä¸€å¤©</div>
              <div class="say-2">当前时间: {{ now }}</div>
            </div>
          </div>
        </div>
        <div v-loading="workLoading" class="left-2 card" style="overflow: hidden;">
          <div v-for="(item,index) in workDay" :key="index" class="left-2-item">
          <div v-for="(item, index) in workDay" :key="index" class="left-2-item">
            <div class="left-item-title">
              <span style="font-size: 18px;">{{ item }}</span>
              <span style="font-size: 14px;color: #999999;">{{ weekdays[index] }}</span>
            </div>
            <div class="left-item-body">
              <div v-for="(m,i) in workList[index]" :key="i" :class="{color0:m.type==0,color1:m.type==1,color2:m.type==2}" class="body-item">
              <div v-for="(m, i) in workList[index]" :key="i"
                :class="{ color0: m.type == 0, color1: m.type == 1, color2: m.type == 2 }" class="body-item">
                <div>
                  <span style="font-size: 12px;margin-bottom: 17px;">{{ m.text }}</span>
                  <div style="display: flex">
                    <span class="body-item-name">{{ m.name }}</span>
                    <span v-if="m.insState == 0" class="body-item-insState" style="background-color: #909399;font-size: 12px;">待检验</span>
                    <span v-if="m.insState == 1" class="body-item-insState" style="background-color: #E6A23C;font-size: 12px;">检验中</span>
                    <span v-if="m.insState == 2" class="body-item-insState" style="background-color: #67C23A;font-size: 12px;">已检验</span>
                    <span v-if="m.insState == 3" class="body-item-insState" style="background-color: #E6A23C;font-size: 12px;">待复核</span>
                    <span v-if="m.insState == 4" class="body-item-insState" style="background-color: #F56C6C;font-size: 9px;">复核未通过</span>
                    <span v-if="m.insState == 5" class="body-item-insState" style="background-color: #67C23A;font-size: 10px;">复核通过</span>
                    <span v-if="m.insState == 0" class="body-item-insState"
                      style="background-color: #909399;font-size: 12px;">待检验</span>
                    <span v-if="m.insState == 1" class="body-item-insState"
                      style="background-color: #E6A23C;font-size: 12px;">检验中</span>
                    <span v-if="m.insState == 2" class="body-item-insState"
                      style="background-color: #67C23A;font-size: 12px;">已检验</span>
                    <span v-if="m.insState == 3" class="body-item-insState"
                      style="background-color: #E6A23C;font-size: 12px;">待复核</span>
                    <span v-if="m.insState == 4" class="body-item-insState"
                      style="background-color: #F56C6C;font-size: 9px;">复核未通过</span>
                    <span v-if="m.insState == 5" class="body-item-insState"
                      style="background-color: #67C23A;font-size: 10px;">复核通过</span>
                  </div>
                </div>
              </div>
@@ -42,7 +49,7 @@
              <img alt="" src="@/assets/index_image/index-0.svg">
            </div>
            <div class="mun">
              <p style="font-size: 20px;">{{getNumberFourTypes.totalNumberOfMessages}}</p>
              <p style="font-size: 20px;">{{ getNumberFourTypes.totalNumberOfMessages }}</p>
              <p style="font-size: 14px;margin-bottom: 10px;">我的待办</p>
            </div>
          </div>
@@ -78,52 +85,55 @@
          <div class="right-2-title">
            <span style="color: #333333;font-size: 16px;">我的日程</span>
            <span style="cursor: pointer;font-size: 12px;
color: #3A7BFA;" @click="dialogVisible=true">添加我的日程</span>
color: #3A7BFA;" @click="dialogVisible = true">添加我的日程</span>
          </div>
          <div class="right-2-body">
            <div class="calendar" style="width: 49%;">
              <div class="control">
                <el-button class="prevm" icon="el-icon-arrow-left" @click="prevMonth(calendarValue)"></el-button>
                <span>{{ calendarValue.getFullYear()+'å¹´'+(calendarValue.getMonth() + 1)+'月' }}</span>
                <span>{{ calendarValue.getFullYear() + 'å¹´' + (calendarValue.getMonth() + 1) + '月' }}</span>
                <el-button class="nextm" icon="el-icon-arrow-right" @click="nextMonth(calendarValue)"></el-button>
              </div>
              <el-calendar v-model="calendarValue">
                <template
                  slot="dateCell"
                  slot-scope="{date, data}">
                        <span>
                            {{ data.day.split('-').slice(2)+'' }}
                        </span>
                <template slot="dateCell" slot-scope="{date, data}">
                  <span>
                    {{ data.day.split('-').slice(2) + '' }}
                  </span>
                  <!-- <el-badge v-if="data.isSelected" is-dot class="item">
                  </el-badge> -->
                </template>
              </el-calendar>
            </div>
            <div v-loading="scheduleLoading" class="right-2-list" style="width: 49%;height: 286px;">
              <div v-for="(m,i) in listScheduleByMe" :key="i" class="list2-item">
              <div v-for="(m, i) in listScheduleByMe" :key="i" class="list2-item">
                <span>{{ m.scheduleTimes }}</span>
                <el-tooltip :content="m.text" effect="dark" placement="top" style="margin-left: 10px;">
                  <p class="ellipsis-multiline" >{{ m.text }}</p>
                  <p class="ellipsis-multiline">{{ m.text }}</p>
                </el-tooltip>
              </div>
              <span v-if="listScheduleByMe.length==0" style="color:rgb(144, 147, 153);font-size: 14px;text-align: center;margin: 120px 0;display: inline-block;width: 100%;">暂无数据</span>
              <span v-if="listScheduleByMe.length == 0"
                style="color:rgb(144, 147, 153);font-size: 14px;text-align: center;margin: 120px 0;display: inline-block;width: 100%;">暂无数据</span>
            </div>
          </div>
        </div>
        <div class="right-3 card" style="overflow: hidden;">
          <div class="right-3-tab">
            <!--            <div :class="{active:currentIndex==4}" class="tab-item" style="cursor: pointer;" @click="currentIndex=4">预警提醒</div>-->
            <div :class="{active:currentIndex==5}" class="tab-item" style="cursor: pointer;" @click="currentIndexChange">CNAS通知通告</div>
            <div :class="{ active: currentIndex == 5 }" class="tab-item" style="cursor: pointer;"
              @click="currentIndexChange">
              CNAS通知通告</div>
          </div>
          <div v-loading="listLoading" class="right-3-list">
            <scroll-pagination v-if="list.length>0||listLoading" :finishLoding="finishLoding" :list="list" @load="getList">
              <div v-for="(m,i) in list" :key="i" class="list3-item">
            <scroll-pagination v-if="list.length > 0 || listLoading" :finishLoding="finishLoding" :list="list"
              @load="getList">
              <div v-for="(m, i) in list" :key="i" class="list3-item">
                <div class="list3-item-title">
                  <!--                <img alt="" src="../../../static/img/index-tip.svg">-->
                  <p style="color: #FF7756">{{ m.theme }}</p>
                </div>
                <div class="list3-item-info">
                  <p class="ellipsis-multiline" style="width: 73%;-webkit-line-clamp: 1;cursor: pointer;" @click="goNoticeDetail(m)">
                  <p class="ellipsis-multiline" style="width: 73%;-webkit-line-clamp: 1;cursor: pointer;"
                    @click="goNoticeDetail(m)">
                    <!-- ç¼–号<span style="color:#3A7BFA;"> SB20240101-001 </span>的设备将于2023-09-09 11:11:11过期 -->
                    {{ m.content }}
                  </p>
@@ -131,7 +141,9 @@
                </div>
              </div>
            </scroll-pagination>
            <div v-if="list.length<1&&!listLoading" style="color:#909399;font-size:14px;text-align: center;margin-top:80px" >暂无数据</div>
            <div v-if="list.length < 1 && !listLoading"
              style="color:#909399;font-size:14px;text-align: center;margin-top:80px">暂无数据
            </div>
          </div>
        </div>
      </el-col>
@@ -142,11 +154,7 @@
          <el-col :span="22" class="search_thing">
            <div class="search_label"><span style="color: red;margin-right: 4px;">*</span>时间:</div>
            <div class="search_input">
              <el-date-picker
                v-model="query.time"
                format="yyyy-MM-dd HH:mm:ss"
                placeholder="选择日期时间"
                size="small"
              <el-date-picker v-model="query.time" format="yyyy-MM-dd HH:mm:ss" placeholder="选择日期时间" size="small"
                style="width: 100%;" type="datetime" value-format="yyyy-MM-dd HH:mm:ss">
              </el-date-picker>
            </div>
@@ -154,24 +162,23 @@
          <el-col :span="22" class="search_thing">
            <div class="search_label"><span style="color: red;margin-right: 4px;">*</span>内容:</div>
            <div class="search_input">
              <el-input v-model="query.text" :rows="2"
                        placeholder="请输入内容" size="small" type="textarea"></el-input>
              <el-input v-model="query.text" :rows="2" placeholder="请输入内容" size="small" type="textarea"></el-input>
            </div>
          </el-col>
        </el-row>
      </div>
      <span slot="footer" class="dialog-footer">
                <el-row>
                    <el-button @click="handleCancel">取 æ¶ˆ</el-button>
                    <el-button :loading="loading" type="primary" @click="submit">ç¡® å®š</el-button>
                </el-row>
            </span>
        <el-row>
          <el-button @click="handleCancel">取 æ¶ˆ</el-button>
          <el-button :loading="loading" type="primary" @click="submit">ç¡® å®š</el-button>
        </el-row>
      </span>
    </el-dialog>
  </div>
</template>
<script>
import {getYearAndMonthAndDays} from '@/utils/date.js'
import { getYearAndMonthAndDays } from '@/utils/date.js'
import ScrollPagination from '@/components/index/scroll-paging.vue'
export default {
  components: {
@@ -182,35 +189,35 @@
      user: {},
      now: null,
      calendarValue: new Date(),
      currentIndex:5,
      dialogVisible:false,
      query:{
        time:'',
        text:''
      currentIndex: 5,
      dialogVisible: false,
      query: {
        time: '',
        text: ''
      },
      loading:false,
      workLoading:false,
      workList:[],
      workDay:[],
      weekdays:[],
      listScheduleByMe:[],
      scheduleLoading:false,
      list:[],
      currentPage:1,
      loading: false,
      workLoading: false,
      workList: [],
      workDay: [],
      weekdays: [],
      listScheduleByMe: [],
      scheduleLoading: false,
      list: [],
      currentPage: 1,
      pageSize: 8, // ä¸€é¡µ7条
      total: null,
      listLoading: true, // ç»„ä»¶loading的展示,默认为true
      finishLoding: false, // åŠ è½½å®Œæˆï¼Œæ˜¾ç¤ºå·²ç»æ²¡æœ‰æ›´å¤šäº†
      timer:null,
      keyMap:{},
      timer: null,
      keyMap: {},
      getNumberFourTypes: {},
    }
  },
  watch:{
    calendarValue(val){
  watch: {
    calendarValue(val) {
      this.getScheduleByMe()
    },
    currentIndex(){
    currentIndex() {
      this.keyMap = {}
      this.currentPage = 1;
      this.list = [];
@@ -230,7 +237,7 @@
    this.list = [];
    this.getList();
    this.getScheduleByMe()
    this.timer&&clearInterval(this.timer)
    this.timer && clearInterval(this.timer)
    this.timer = setInterval(() => {
      this.init();
      this.currentPage = 1;
@@ -238,16 +245,16 @@
      this.list = [];
      this.getList();
      this.getScheduleByMe()
    },1000*60*10)
    }, 1000 * 60 * 10)
    this.getNumberFourTypesFun()
  },
  methods: {
    changeState (val) {
    changeState(val) {
      if (val == 0) {
        return '待检验'
      }
    },
    currentIndexChange () {
    currentIndexChange() {
      this.keyMap = {}
      this.currentPage = 1;
      this.list = [];
@@ -258,35 +265,35 @@
        this.getNumberFourTypes = res.data
      })
    },
    getList(){
    getList() {
      const key = `_${this.currentPage}`
      const value = this.keyMap[key]
      // å¦‚æžœvalue存在,表示缓存有值,那么阻止请求
      if(value) {
      if (value) {
        return
      }
      // value不存在,表示第一次请求,设置占位
      this.keyMap[key] = 'temp'
      if(this.currentPage==1){
      if (this.currentPage == 1) {
        this.listLoading = true
      }
      if(this.list.length==0){
      if (this.list.length == 0) {
        this.finishLoding = false;
      }
      this.$axios.get(this.$api.informationNotification.page+'?size='+this.pageSize+'&current='+this.currentPage+'&messageType='+this.currentIndex).then(res => {
        if(res.code === 201){
      this.$axios.get(this.$api.informationNotification.page + '?size=' + this.pageSize + '&current=' + this.currentPage + '&messageType=' + this.currentIndex).then(res => {
        if (res.code === 201) {
          return
        }
        let list = res.data.records;
        this.total = res.data.total;
        if(list.length==0){
        if (list.length == 0) {
          this.finishLoding = true;
        }else{
          if(list.length<this.pageSize){
        } else {
          if (list.length < this.pageSize) {
            this.finishLoding = true;
          }
          this.list = this.list.concat(list)
          if(this.total==this.list.length){
          if (this.total == this.list.length) {
            this.finishLoding = true;
          }
          this.currentPage++;
@@ -376,19 +383,19 @@
      // å°†å¾—到的年月日格式转换为标准时间,与饿了么时间格式相同才能联动
      this.calendarValue = new Date(prevtime);
    },
    handleCancel(){
    handleCancel() {
      this.dialogVisible = false;
      this.query = {
        time:'',
        text:''
        time: '',
        text: ''
      }
    },
    submit(){
      if(!this.query.time){
    submit() {
      if (!this.query.time) {
        this.$message.error('时间未填写')
        return
      }
      if(!this.query.text){
      if (!this.query.text) {
        this.$message.error('内容未填写')
        return
      }
@@ -404,16 +411,16 @@
        this.getScheduleByMe()
      })
    },
    init(){
    init() {
      this.workLoading = true;
      this.$axios.get(this.$api.report.calendarWorkByWeek).then(res => {
        if (res.code == 201) return
        this.workLoading = false;
        this.workList = [];
        for(let i=0;i<7;i++){
        for (let i = 0; i < 7; i++) {
          this.workList.push(res.data[`work${i}`])
        }
        this.workDay = res.data.weekDays.map(m=>{
        this.workDay = res.data.weekDays.map(m => {
          let arr = m.split('-')
          return arr[2]
        })
@@ -428,8 +435,8 @@
        weekdays.push(day);
      }
      weekdays.reverse()
      weekdays = weekdays.map(m=>{
        let day =''
      weekdays = weekdays.map(m => {
        let day = ''
        switch (m) {
          case 0:
            day = '星期天'
@@ -457,56 +464,48 @@
      })
      return weekdays;
    },
    getScheduleByMe(){
    getScheduleByMe() {
      this.scheduleLoading = true;
      this.$axios.post(this.$api.report.ScheduleByMe, {
        date:getYearAndMonthAndDays(this.calendarValue)
        date: getYearAndMonthAndDays(this.calendarValue)
      }).then(res => {
        this.loading = false;
        this.scheduleLoading = false;
        if (res.code == 201) {
          return
        }
        this.listScheduleByMe = res.data.map(m=>{
          if(m.scheduleTime){
        this.listScheduleByMe = res.data.map(m => {
          if (m.scheduleTime) {
            let time = m.scheduleTime.split(' ')[1].split(':')
            m.scheduleTimes = time[0] + ':' + time[1]
          }else{
          } else {
            m.scheduleTimes = ''
          }
          return m
        })
      })
    },
    goNoticeDetail(row){
      this.$axios.put(this.$api.informationNotification.triggerModificationStatusToRead+'/'+row.id).then(res => {
    goNoticeDetail(row) {
      this.$axios.put(this.$api.informationNotification.triggerModificationStatusToRead + '/' + row.id).then(res => {
        row.num = Math.random(100);
        this.$bus.$emit("change", JSON.stringify(row));
        this.$parent.addTab({
          v: "消息详情",
          i: "el-icon-s-tools",
          u: "notice-detail",
          k:35,
          k: 35,
          p: "abcd"
        },29);
        }, 29);
      })
    },
  },
  deactivated(){
    this.timer&&clearInterval(this.timer)
  deactivated() {
    this.timer && clearInterval(this.timer)
  }
}
</script>
<style scoped lang="scss">
.index {
  width: 100%;
  height: calc(100% - 50px);
  overflow-y: auto;
  padding: 20px 10px 10px;
  background: rgb(245, 247, 251);
}
.left-1 {
  background-image: url("~@/assets/index_image/index-img1.png");
  background-size: 100% 100%;
@@ -545,14 +544,14 @@
  border-radius: 3px;
}
.card{
.card {
  background: #FFFFFF;
  border-radius: 16px;
  width: 100%;
  box-sizing: border-box;
}
.right-1{
.right-1 {
  padding: 10px 10px 4px;
  display: flex;
  align-items: center;
@@ -560,64 +559,72 @@
  margin-bottom: 16px;
}
.right-1-item{
.right-1-item {
  width: 25%;
  display: flex;
  align-items: center;
  justify-content: center;
}
.right-1-item .mun{
.right-1-item .mun {
  margin-left: 6px;
  color: #0166E2;
}
.right-2{
.right-2 {
  padding: 13px 14px 8px;
  margin-bottom: 16px;
}
.right-2-title{
.right-2-title {
  display: flex;
  align-items: center;
  justify-content: space-between;
}
.right-2-body{
.right-2-body {
  width: 100%;
  margin-top: 20px;
  display: flex;
  align-items: flex-start;
  justify-content: space-between;
}
>>>.el-calendar__header {
  display: none;
}
>>>.el-calendar__body{
>>>.el-calendar__body {
  padding: 0;
}
>>>.el-calendar-table:not(.is-range) td.next {
  /*隐藏下个月的日期*/
  display: none;
}
>>>.el-calendar-day{
>>>.el-calendar-day {
  height: 40px;
}
>>>.el-calendar-table td{
>>>.el-calendar-table td {
  border: 0;
  font-size: 14px;
}
>>>.el-calendar-table tr td:first-child{
>>>.el-calendar-table tr td:first-child {
  border-left: 0;
}
.control{
.control {
  display: flex;
  align-items: center;
  justify-content: space-between;
  box-sizing: border-box;
  padding: 0px 0 10px;
}
.control .el-button{
.control .el-button {
  width: 32px;
  height: 32px;
  border-radius: 8px;
@@ -627,17 +634,20 @@
  color: #0166E2;
  font-size: 20px;
}
.list2-item{
.list2-item {
  line-height: 22px;
  display: flex;
  margin-bottom: 12px;
  font-size: 14px;
}
.right-3-tab{
.right-3-tab {
  display: flex;
  align-items: center;
}
.tab-item{
.tab-item {
  width: 50%;
  box-sizing: border-box;
  text-align: center;
@@ -646,56 +656,68 @@
  background: #F5F7FB;
  color: #333333;
}
.tab-item.active{
.tab-item.active {
  background: #fff;
  color: #FF3838;
  padding-left: 16px;
  text-align: left;
}
.right-3-list{
.right-3-list {
  padding: 0 12px 8px;
  box-sizing: border-box;
  height: 390px;
  overflow-y: auto;
}
.list3-item{
.list3-item {
  padding: 6px 4px;
  margin: 8px 0;
}
.list3-item:hover{
  background: rgba(58, 123, 250,0.05);
.list3-item:hover {
  background: rgba(58, 123, 250, 0.05);
}
.list3-item-title{
.list3-item-title {
  display: flex;
  align-items: flex-start;
  margin-bottom: 10px;
}
.list3-item-info{
.list3-item-info {
  display: flex;
  align-items: center;
  justify-content: space-between;
  color: #666666;
  font-size: 14px;
}
.left-2{
.left-2 {
  display: grid;
  grid-template-columns: repeat(7, 1fr);
  height: 777px;
}
.left-2-item{
.left-2-item {
  border-right: 1px solid #F1F1F1;
  overflow: hidden !important;
}
.left-2-item:nth-last-child(1){
.left-2-item:nth-last-child(1) {
  border-right: 0;
}
.left-2-item:hover{
  background: rgba(58,123,250,0.05);
.left-2-item:hover {
  background: rgba(58, 123, 250, 0.05);
}
.left-2-item:hover .left-item-title span{
.left-2-item:hover .left-item-title span {
  color: #3A7BFA !important;
}
.left-item-title{
.left-item-title {
  border-bottom: 1px solid #F1F1F1;
  display: flex;
  flex-direction: column;
@@ -703,35 +725,42 @@
  justify-content: center;
  padding: 20px 0;
}
.left-item-body{
.left-item-body {
  box-sizing: border-box;
  padding: 5px;
  height: 693px;
  overflow-y: auto;
}
.body-item{
.body-item {
  background: #70A090;
  border-radius: 16px;
  overflow: hidden;
  margin-bottom: 8px;
}
.body-item.color0{
.body-item.color0 {
  background: #70A090;
}
.body-item.color1{
.body-item.color1 {
  background: #EBD476;
}
.body-item.color2{
.body-item.color2 {
  background: #FF3838;
}
.body-item>div{
.body-item>div {
  height: calc(100% - 16px);
  margin-top: 16px;
  background: rgba(255, 255, 255,0.9);
  background: rgba(255, 255, 255, 0.9);
  padding: 8px 8px 16px;
  display: flex;
  flex-direction: column;
}
.search_thing {
  height: 50px;
  margin-bottom: 26px;
@@ -743,7 +772,8 @@
  text-align: left;
  margin-bottom: 10px;
}
>>>.el-calendar-day span{
>>>.el-calendar-day span {
  display: inline-block;
  width: 30px;
  height: 30px;
@@ -751,26 +781,33 @@
  text-align: center;
  border-radius: 4px;
}
>>>.is-selected{
>>>.is-selected {
  background: transparent !important;
}
>>>.is-selected .el-calendar-day{
>>>.is-selected .el-calendar-day {
  background: transparent !important;
}
>>>.is-selected .el-calendar-day span{
>>>.is-selected .el-calendar-day span {
  background: #3A7BFA !important;
  color: #fff !important;
}
>>>.el-calendar-day:hover{
>>>.el-calendar-day:hover {
  background: transparent;
}
>>>.el-calendar-day span:hover{
>>>.el-calendar-day span:hover {
  background: #3A7BFA !important;
  color: #fff !important;
}
.body-item-name {
  display: inline-block;
  height: 22px;width: 60px;
  height: 22px;
  width: 60px;
  border-radius: 10px;
  line-height: 22px;
  text-align: center;
@@ -778,10 +815,12 @@
  color: #fff;
  font-size: 14px
}
.body-item-insState {
  margin-left: 2px;
  display: inline-block;
  height: 22px;width: 60px;
  height: 22px;
  width: 60px;
  border-radius: 10px;
  line-height: 22px;
  text-align: center;
src/views/structural/capabilityAndLaboratory/laboratory/index.vue
@@ -328,8 +328,7 @@
    },
    // èµ„质明细附件下载
    handleDownLoad(row) {
      const url = process.env.VUE_APP_BASE_API + "/img/" + row.fileUrl;
      this.$download.saveAs(url, row.fileUrl);
      this.$download.saveAs(row.fileUrl, row.fileUrl)
    },
    openAdd() {
      this.qualificationsConnectVisible = true;