zss
2025-03-04 b64d6db597d332c699f84e4928f6d3e5551851f1
Merge remote-tracking branch 'origin/dev' into dev
已修改96个文件
已添加12个文件
7181 ■■■■■ 文件已修改
src/api/cnas/process/method/methodVerification.js 66 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/api/cnas/resourceDemand/device.js 392 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/api/index/report.js 26 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/api/statisticalCharts/dataAnalysis.js 73 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/api/system/customer.js 2 ●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/api/system/user.js 168 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/assets/images/bg1.png 补丁 | 查看 | 原始文档 | blame | 历史
src/assets/images/bg2.png 补丁 | 查看 | 原始文档 | blame | 历史
src/components/Preview/filePreview.vue 2 ●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/components/Table/lims-table.vue 15 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/components/echarts/DataComparison.vue 507 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/components/echarts/echart.vue 119 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/components/echarts/echarts.vue 238 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/layout/components/Navbar.vue 13 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main.js 2 ●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/plugins/download.js 117 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/router/index.js 2 ●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/views/CNAS/externalService/serviceAndSupplyPro/component/ConsumableList.vue 25 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/views/CNAS/externalService/serviceAndSupplyPro/component/Store.vue 23 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/views/CNAS/externalService/supplierManage/index.vue 1 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/views/CNAS/personnel/personnelInfo/tabs/job-responsibilities.vue 44 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/views/CNAS/personnel/personnelInfo/tabs/personnel-information.vue 104 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/views/CNAS/personnel/personnelInfo/tabs/personnel-list.vue 38 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/views/CNAS/personnel/personnelInfo/tabs/personnelTraining.vue 61 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/views/CNAS/personnel/personnelInfo/tabs/reward-punishment-record.vue 47 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/views/CNAS/process/demand/index.vue 162 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/views/CNAS/process/ensureResults/ensureResultsValidity/index.vue 66 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/views/CNAS/process/ensureResults/qualityControlPlan/index.vue 56 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/views/CNAS/process/method/methodVerification/component/formDIa.vue 457 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/views/CNAS/process/method/methodVerification/index.vue 198 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/views/CNAS/process/method/standardMethodsChange/index.vue 5 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/views/CNAS/process/method/standardNoveltyRetrieval/index.vue 35 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/views/CNAS/process/nonconformingWork/nonconformingDistribution/index.vue 1 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/views/CNAS/process/nonconformingWork/nonconformingItem/index.vue 1 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/views/CNAS/process/reportResults/index.vue 1 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/views/CNAS/resourceDemand/device/component/accidentForm.vue 23 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/views/CNAS/resourceDemand/device/component/borrow.vue 261 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/views/CNAS/resourceDemand/device/component/calibration.vue 59 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/views/CNAS/resourceDemand/device/component/check.vue 15 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/views/CNAS/resourceDemand/device/component/equipmentAcceptance.vue 12 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/views/CNAS/resourceDemand/device/component/equipmentAccident.vue 50 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/views/CNAS/resourceDemand/device/component/equipmentFailure.vue 52 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/views/CNAS/resourceDemand/device/component/equipmentScrap.vue 70 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/views/CNAS/resourceDemand/device/component/equipmentVerificationPlan.vue 1 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/views/CNAS/resourceDemand/device/component/failureForm.vue 28 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/views/CNAS/resourceDemand/device/component/fault.vue 16 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/views/CNAS/resourceDemand/device/component/files.vue 1 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/views/CNAS/resourceDemand/device/component/inspectionForm.vue 46 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/views/CNAS/resourceDemand/device/component/inspectionOfEquipment.vue 50 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/views/CNAS/resourceDemand/device/component/maintenance.vue 50 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/views/CNAS/resourceDemand/device/component/operationInstruction.vue 70 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/views/CNAS/resourceDemand/device/component/record.vue 9 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/views/CNAS/resourceDemand/device/component/scrapApplicationForm.vue 28 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/views/CNAS/resourceDemand/device/component/state.vue 101 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/views/CNAS/resourceDemand/device/index.vue 18 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/views/CNAS/resourceDemand/facilitiesEnvironment/component/Personnel-management.vue 14 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/views/CNAS/resourceDemand/facilitiesEnvironment/component/facilities-environmental-conditions/illuminance-recording.vue 75 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/views/CNAS/resourceDemand/facilitiesEnvironment/component/facilities-environmental-conditions/power-supply-stability.vue 69 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/views/CNAS/resourceDemand/facilitiesEnvironment/component/facilities-environmental-conditions/temperature-humidity-record.vue 93 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/views/CNAS/resourceDemand/facilitiesEnvironment/component/three-wastes-treatment.vue 4 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/views/CNAS/resourceDemand/standardMaterial/index.vue 1 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/views/CNAS/resourceDemand/standardMaterialAccept/index.vue 1 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/views/CNAS/systemManagement/correctiveAction/index.vue 1 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/views/CNAS/systemManagement/customerSatisfaction/index.vue 8 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/views/CNAS/systemManagement/documentControl/components/FileList.vue 2 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/views/CNAS/systemManagement/documentControl/components/FileObsoletionRequest.vue 1 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/views/CNAS/systemManagement/documentRecords/approvalRecord.vue 1 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/views/CNAS/systemManagement/documentRecords/cancellationRecord.vue 1 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/views/CNAS/systemManagement/documentRecords/distributionCollectionRecord.vue 1 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/views/CNAS/systemManagement/documentRecords/regularReviewsRecord.vue 1 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/views/CNAS/systemManagement/documentRecords/revisionRecord.vue 1 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/views/CNAS/systemManagement/internalAuditManagement/components/auditInspection.vue 1 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/views/CNAS/systemManagement/internalAuditManagement/components/auditMeetingSign.vue 1 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/views/CNAS/systemManagement/internalAuditManagement/components/auditReport.vue 1 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/views/CNAS/systemManagement/internalAuditManagement/components/correctiveAction.vue 1 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/views/CNAS/systemManagement/internalAuditManagement/components/implementationPlan.vue 1 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/views/CNAS/systemManagement/internalAuditManagement/components/yearPlan.vue 1 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/views/CNAS/systemManagement/managementReview/components/managementReviewPlan.vue 4 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/views/CNAS/systemManagement/measuresDealRisks/components/hazardIdentificationRiskAssessment.vue 1 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/views/CNAS/systemManagement/measuresDealRisks/components/listRiskAnalysisControlPlans.vue 1 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/views/business/finishedProductSampling/index.vue 8 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/views/business/inspectionTask/components/EditInspectionItem.vue 15 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/views/business/inspectionTask/index.vue 28 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/views/business/inspectionTask/inspection.vue 17 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/views/business/materialOrder/copperOrder.vue 13 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/views/business/materialOrder/customsInspection.vue 11 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/views/business/materialOrder/index.vue 39 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/views/business/productOrder/components/add.vue 66 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/views/business/productOrder/components/auxiliaryWireCore.vue 12 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/views/business/productOrder/index.vue 119 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/views/business/productSamplingInfo/index.vue 43 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/views/business/rawMaterialInspection/index.vue 97 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/views/business/reportPreparation/index.vue 94 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/views/business/unpass/components/unPassDialog.vue 21 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/views/index.vue 539 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/views/monitor/logininfor/index.vue 90 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/views/monitor/operlog/index.vue 68 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/views/performance/manHour/workTimeConfig.vue 4 ●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/views/performance/manHour/workTimeManagement.vue 368 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/views/standard/standardLibrary/index.vue 50 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/views/statisticalCharts/itemInspectionAnalysis/index.vue 535 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/views/statisticalCharts/qualificationRateStatistics/index.vue 448 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/views/structural/capabilityAndLaboratory/capability/index.vue 53 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/views/structural/premises/index.vue 5 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/views/system/dept/index.vue 98 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/views/system/dict/index.vue 18 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/views/system/role/index.vue 2 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/views/system/user/index.vue 7 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/api/cnas/process/method/methodVerification.js
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,66 @@
// å®žéªŒå®¤çš„æ£€æµ‹èƒ½åŠ›æ¡£æ¡ˆç›¸å…³æŽ¥å£
import request from "@/utils/request";
// æ ‡å‡†æ–¹æ³•更新验证列表
export function pagesMethodVerify(query) {
  return request({
    url: "/processMethodVerify/pagesMethodVerify",
    method: "get",
    params: query,
  });
}
// åˆ é™¤æ ‡å‡†æ–¹æ³•更新验证
export function delMethodVerify(query) {
  return request({
    url: '/processMethodVerify/delMethodVerify',
    method: 'delete',
    params: query
  })
}
// å¯¼å‡ºæ ‡å‡†æ–¹æ³•更新验证
export function exportMethodVerify(query) {
  return request({
    url: '/processMethodVerify/exportMethodVerify',
    method: "get",
    responseType: "blob",
    params: query,
  })
}
//查询标准方法验证详情
export function getMethodVerifyOne(query) {
  return request({
    url: "/processMethodVerify/getMethodVerifyOne",
    method: "get",
    params: query,
  });
}
// ä¿®æ”¹æ ‡å‡†æ–¹æ³•验证
export function updateMethodVerify(data) {
  return request({
    url: "/processMethodVerify/updateMethodVerify",
    method: "post",
    data: data,
  });
}
// æ–°å¢žæ ‡å‡†æ–¹æ³•验证
export function addMethodVerify(data) {
  return request({
    url: "/processMethodVerify/addMethodVerify",
    method: "post",
    data: data,
  });
}
// éªŒè¯ç¡®è®¤
export function methodVerifyAffirm(query) {
  return request({
    url: '/processMethodVerify/methodVerifyAffirm',
    method: 'get',
    params: query
  })
}
src/api/cnas/resourceDemand/device.js
@@ -647,6 +647,15 @@
    params: query,
  });
}
//使用记录 å¯¼å‡º
export function exportUseRecord(query) {
  return request({
    url: "/deviceRecord/exportUseRecord",
    method: "get",
    responseType: "blob",
    params: query,
  });
}
//新增设备档案
export function addDocument(data) {
@@ -704,9 +713,9 @@
}
//设备验收(装备)导出
export function exportUseRecord(query) {
export function exportDeviceAcceptance(query) {
  return request({
    url: "/deviceRecord/exportUseRecord",
    url: "/deviceAcceptance/exportDeviceAcceptance",
    method: "get",
    responseType: "blob",
    params: query,
@@ -758,12 +767,12 @@
  });
}
//设备操作日志和记录
export function deviceLog(query) {
//设备校准 æ–°å¢ž æ›´æ–°
export function saveOrUpdateDeviceMetric(data) {
  return request({
    url: "/api/deviceLog/" + query,
    method: "get",
    // params: query,
    url: "/deviceMetrics/saveOrUpdateDeviceMetric",
    method: "post",
    data: data,
  });
}
@@ -852,11 +861,83 @@
}
//设备维护删除
export function deviceMaintainDelete(query) {
export function deleteDeviceMaintenance(query) {
  return request({
    url: "/deviceMaintain/delete/" + query,
    url: "/deviceMaintain/deleteDeviceMaintenance",
    method: "delete",
    // params: query,
    params: query,
  });
}
// æ–°å¢žè®¾å¤‡ç»´æŠ¤ä¿å…»
export function addDeviceMaintenance(data) {
  return request({
    url: "/deviceMaintain/addDeviceMaintenance",
    method: "post",
    data: data,
  });
}
//设备维护表 æŸ¥è¯¢
export function getDeviceMaintenancePage(query) {
  return request({
    url: "/deviceMaintain/getDeviceMaintenancePage",
    method: "get",
    params: query,
  });
}
// å€Ÿç”¨-保存
export function saveDeviceBorrow(data) {
  return request({
    url: "/deviceBorrow/saveDeviceBorrow",
    method: "post",
    data: data,
  });
}
//借用-查看
export function getDeviceBorrow(query) {
  return request({
    url: "/deviceBorrow/getDeviceBorrow",
    method: "get",
    params: query,
  });
}
//借用-导出
export function deviceBorrowExport(query) {
  return request({
    url: "/deviceBorrow/deviceBorrowExport",
    method: "get",
    responseType: "blob",
    params: query,
  });
}
//借用-删除
export function deleteDeviceBorrow(query) {
  return request({
    url: "/deviceBorrow/deleteDeviceBorrow",
    method: "delete",
    params: query,
  });
}
//借用-列表
export function deviceBorrowPage(query) {
  return request({
    url: "/deviceBorrow/deviceBorrowPage",
    method: "get",
    params: query,
  });
}
// è®¾å¤‡å¯ç”¨/停用 ä¿å­˜ï¼Œæäº¤ï¼Œé©³å›žï¼Œé€šè¿‡æŽ¥å£
export function saveDeviceState(data) {
  return request({
    url: "/deviceState/saveDeviceState",
    method: "post",
    data: data,
  });
}
@@ -869,11 +950,296 @@
  });
}
// å€Ÿç”¨-保存
export function saveDeviceBorrow(data) {
//设备停启用单条导出
export function exportDeviceStatus(query) {
  return request({
    url: "/deviceBorrow/saveDeviceBorrow",
    url: "/deviceState/exportDeviceStatus",
    method: "get",
    responseType: "blob",
    params: query,
  });
}
//设备启用/停用 åˆ é™¤
export function deleteDeviceState(query) {
  return request({
    url: "/deviceState/deleteDeviceState",
    method: "delete",
    params: query,
  });
}
//设备状态导出
export function deviceStateExport(query) {
  return request({
    url: "/deviceState/deviceStateExport",
    method: "get",
    responseType: "blob",
    params: query,
  });
}
//设备启用/停用 åˆ†é¡µ
export function getDeviceStatePage(query) {
  return request({
    url: "/deviceState/getDeviceStatePage",
    method: "get",
    params: query,
  });
}
//设备报废申请列表
export function pageDeviceScrapped(query) {
  return request({
    url: "/deviceScrapped/pageDeviceScrapped",
    method: "get",
    params: query,
  });
}
// å¯¼å‡º
export function exportDeviceScrapped(query) {
  return request({
    url: "/deviceScrapped/exportDeviceScrapped",
    method: "get",
    responseType: "blob",
    params: query,
  });
}
//删除设备报废申请
export function delDeviceScrapped(query) {
  return request({
    url: "/deviceScrapped/delDeviceScrapped",
    method: "delete",
    params: query,
  });
}
//查询设备报废申请
export function getDeviceScrapped(query) {
  return request({
    url: "/deviceScrapped/getDeviceScrapped",
    method: "get",
    params: query,
  });
}
// æ–°å¢žè®¾å¤‡æŠ¥åºŸç”³è¯·
export function addDeviceScrapped(data) {
  return request({
    url: "/deviceScrapped/addDeviceScrapped",
    method: "post",
    data: data,
  });
}
//设备故障维修列表
export function pageDeviceBreakdownMaintenance(query) {
  return request({
    url: "/deviceBreakdownMaintenance/pageDeviceBreakdownMaintenance",
    method: "get",
    params: query,
  });
}
// è®¾å¤‡æ•…障与维修-导出
export function exportDeviceBreakdownMaintenance(query) {
  return request({
    url: "/deviceBreakdownMaintenance/exportDeviceBreakdownMaintenance",
    method: "get",
    responseType: "blob",
    params: query,
  });
}
//删除设备故障维修
export function delDeviceBreakdownMaintenance(query) {
  return request({
    url: "/deviceBreakdownMaintenance/delDeviceBreakdownMaintenance",
    method: "delete",
    params: query,
  });
}
//查询设备故障维修
export function getDeviceBreakdownMaintenance(query) {
  return request({
    url: "/deviceBreakdownMaintenance/getDeviceBreakdownMaintenance",
    method: "get",
    params: query,
  });
}
// æ–°å¢žè®¾å¤‡æ•…障维修
export function addDeviceBreakdownMaintenance(data) {
  return request({
    url: "/deviceBreakdownMaintenance/addDeviceBreakdownMaintenance",
    method: "post",
    data: data,
  });
}
//分页查询设备点检记录
export function getDeviceInspectionRecordByPage(query) {
  return request({
    url: "/deviceInspectionRecord/getDeviceInspectionRecordByPage",
    method: "get",
    params: query,
  });
}
// å¯¼å‡ºè®¾å¤‡ç‚¹æ£€è®°å½•
export function exportDeviceInspectionRecord(query) {
  return request({
    url: "/deviceInspectionRecord/exportDeviceInspectionRecord",
    method: "get",
    responseType: "blob",
    params: query,
  });
}
//删除设备点检记录
export function deleteDeviceInspectionRecord(query) {
  return request({
    url: "/deviceInspectionRecord/deleteDeviceInspectionRecord",
    method: "delete",
    params: query,
  });
}
//设备点检记录详情
export function getDeviceInspectionRecord(query) {
  return request({
    url: "/deviceInspectionRecord/getDeviceInspectionRecord",
    method: "get",
    params: query,
  });
}
// æ–°å¢žè®¾å¤‡ç‚¹æ£€è®°å½•
export function addDeviceInspectionRecord(data) {
  return request({
    url: "/deviceInspectionRecord/addDeviceInspectionRecord",
    method: "post",
    data: data,
  });
}
// ä¿®æ”¹è®¾å¤‡ç‚¹æ£€è®°å½•
export function updateDeviceInspectionRecord(data) {
  return request({
    url: "/deviceInspectionRecord/updateDeviceInspectionRecord",
    method: "post",
    data: data,
  });
}
// å¤æ ¸è®¾å¤‡ç‚¹æ£€è®°å½•
export function reviewDeviceInspectionRecord(data) {
  return request({
    url: "/deviceInspectionRecord/reviewDeviceInspectionRecord",
    method: "post",
    data: data,
  });
}
//设备事故报告列表
export function pageDeviceAccidentReport(query) {
  return request({
    url: "/deviceAccidentReport/pageDeviceAccidentReport",
    method: "get",
    params: query,
  });
}
// å¯¼å‡ºè®¾å¤‡äº‹æ•…
export function exportDeviceAccidentReport(query) {
  return request({
    url: "/deviceAccidentReport/exportDeviceAccidentReport",
    method: "get",
    responseType: "blob",
    params: query,
  });
}
//删除设备事故报告
export function delDeviceAccidentReport(query) {
  return request({
    url: "/deviceAccidentReport/delDeviceAccidentReport",
    method: "delete",
    params: query,
  });
}
//查询设备事故报告
export function getDeviceAccidentReport(query) {
  return request({
    url: "/deviceAccidentReport/getDeviceAccidentReport",
    method: "get",
    params: query,
  });
}
// æ–°å¢žè®¾å¤‡äº‹æ•…报告
export function addDeviceAccidentReport(data) {
  return request({
    url: "/deviceAccidentReport/addDeviceAccidentReport",
    method: "post",
    data: data,
  });
}
//作业指导书 å®¡æ‰¹
export function approvalOfHomeworkInstructionManual(data) {
  return request({
    url: "/deviceInstruction/approvalOfHomeworkInstructionManual",
    method: "post",
    data: data,
  });
}
//作业指导书 åˆ é™¤
export function homeworkGuidebook(query) {
  return request({
    url: "/deviceInstruction/homeworkGuidebook",
    method: "delete",
    params: query,
  });
}
//作业指导书 ç¼–辑查询
export function homeworkGuidebookEditor(query) {
  return request({
    url: "/deviceInstruction/homeworkGuidebookEditor",
    method: "get",
    params: query,
  });
}
//作业指导书新增
export function newHomeworkGuidebookAdded(data) {
  return request({
    url: "/deviceInstruction/newHomeworkGuidebookAdded",
    method: "post",
    data: data,
  });
}
//作业指导书受控文件删除
export function deleteHomeworkGuidebook(query) {
  return request({
    url: "/deviceInstruction/deleteHomeworkGuidebook",
    method: "delete",
    params: query,
  });
}
//作业指导书 æŸ¥è¯¢
export function pageByPageQueryOfHomeworkInstructions(query) {
  return request({
    url: "/deviceInstruction/pageByPageQueryOfHomeworkInstructions",
    method: "get",
    params: query,
  });
}
src/api/index/report.js
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,26 @@
// é¦–页相关接口
import request from '@/utils/request'
//首页-->日历任务图
export function calendarWorkByWeek() {
  return request({
    url: '/report/calendarWorkByWeek',
    method: 'get'
  })
}
//首页-->首页工时统计
export function manHourByStation(query) {
  return request({
    url: '/report/manHourByStation',
    method: 'get',
    params: query
  })
}
//首页-->首页工时统计
export function manHourByPerson() {
  return request({
    url: '/report/manHourByPerson',
    method: 'get',
    params: query
  })
}
src/api/statisticalCharts/dataAnalysis.js
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,73 @@
// ç»Ÿè®¡å›¾è¡¨
import request from "@/utils/request";
//合格率统计
export function getRawPassRateByBarChart(query) {
  return request({
    url: "/dataAnalysis/getRawPassRateByBarChart",
    method: "get",
    params: query,
  });
}
//原材料统计
export function getRawPassRateByCake(query) {
  return request({
    url: "/dataAnalysis/getRawPassRateByCake",
    method: "get",
    params: query,
  });
}
//本月检验类型数量
export function getOrderTypeCookie() {
  return request({
    url: "/dataAnalysis/getOrderTypeCookie",
    method: "get",
  });
}
//本月检验类型数量
export function getRawUpMonth() {
  return request({
    url: "/dataAnalysis/getRawUpMonth",
    method: "get",
  });
}
//查询原材料项检分析
export function getRawProductAnalysis(query) {
  return request({
    url: "/dataAnalysis/getRawProductAnalysis",
    method: "post",
    data: query,
  });
}
//查询原材料项检分析合格率
export function getRawProductAnalysisRawPass(query) {
  return request({
    url: "/dataAnalysis/getRawProductAnalysisRawPass",
    method: "post",
    data: query,
  });
}
//查询原材料项检分析列表
export function getRawProductAnalysisAllList(query) {
  return request({
    url: "/dataAnalysis/getRawProductAnalysisAllList",
    method: "post",
    data: query,
  });
}
//查询检验项
export function getRawItemNames(query) {
  return request({
    url: "/dataAnalysis/getRawItemNames",
    method: "get",
    params: query,
  });
}
//查询原材料项检和厂家数据对比
export function getRawSupplierCompare(query) {
  return request({
    url: "/dataAnalysis/getRawSupplierCompare",
    method: "post",
    data: query,
  });
}
src/api/system/customer.js
@@ -28,7 +28,7 @@
export function delCustomById(query) {
  return request({
    url: '/system/custom/delCustomById',
    method: 'post',
    method: 'delete',
    params: query
  })
}
src/api/system/user.js
@@ -1,191 +1,191 @@
import request from '@/utils/request'
import request from "@/utils/request";
import { parseStrEmpty } from "@/utils/ruoyi";
// æŸ¥è¯¢ç”¨æˆ·åˆ—表
export function listUser(query) {
  return request({
    url: '/system/user/list',
    method: 'get',
    params: query
  })
    url: "/system/user/list",
    method: "get",
    params: query,
  });
}
// æŸ¥è¯¢ç”¨æˆ·è¯¦ç»†
export function getUser(userId) {
  return request({
    url: '/system/user/' + parseStrEmpty(userId),
    method: 'get'
  })
    url: "/system/user/" + parseStrEmpty(userId),
    method: "get",
  });
}
// æ–°å¢žç”¨æˆ·
export function addUser(data) {
  return request({
    url: '/system/user',
    method: 'post',
    data: data
  })
    url: "/system/user",
    method: "post",
    data: data,
  });
}
// ä¿®æ”¹ç”¨æˆ·
export function updateUser(data) {
  return request({
    url: '/system/user',
    method: 'put',
    data: data
  })
    url: "/system/user",
    method: "put",
    data: data,
  });
}
// åˆ é™¤ç”¨æˆ·
export function delUser(userId) {
  return request({
    url: '/system/user/' + userId,
    method: 'delete'
  })
    url: "/system/user/" + userId,
    method: "delete",
  });
}
// ç”¨æˆ·å¯†ç é‡ç½®
export function resetUserPwd(userId, password) {
  const data = {
    userId,
    password
  }
    password,
  };
  return request({
    url: '/system/user/resetPwd',
    method: 'put',
    data: data
  })
    url: "/system/user/resetPwd",
    method: "put",
    data: data,
  });
}
// ç”¨æˆ·çŠ¶æ€ä¿®æ”¹
export function changeUserStatus(userId, status) {
  const data = {
    userId,
    status
  }
    status,
  };
  return request({
    url: '/system/user/changeStatus',
    method: 'put',
    data: data
  })
    url: "/system/user/changeStatus",
    method: "put",
    data: data,
  });
}
// æŸ¥è¯¢ç”¨æˆ·ä¸ªäººä¿¡æ¯
export function getUserProfile() {
  return request({
    url: '/system/user/profile',
    method: 'get'
  })
    url: "/system/user/profile",
    method: "get",
  });
}
// ä¿®æ”¹ç”¨æˆ·ä¸ªäººä¿¡æ¯
export function updateUserProfile(data) {
  return request({
    url: '/system/user/profile',
    method: 'put',
    data: data
  })
    url: "/system/user/profile",
    method: "put",
    data: data,
  });
}
// ç”¨æˆ·å¯†ç é‡ç½®
export function updateUserPwd(oldPassword, newPassword) {
  const data = {
    oldPassword,
    newPassword
  }
    newPassword,
  };
  return request({
    url: '/system/user/profile/updatePwd',
    method: 'put',
    data: data
  })
    url: "/system/user/profile/updatePwd",
    method: "put",
    data: data,
  });
}
// ç”¨æˆ·å¤´åƒä¸Šä¼ 
export function uploadAvatar(data) {
  return request({
    url: '/system/user/profile/avatar',
    method: 'post',
    headers: { 'Content-Type': 'application/x-www-form-urlencoded' },
    data: data
  })
    url: "/system/user/profile/avatar",
    method: "post",
    headers: { "Content-Type": "application/x-www-form-urlencoded" },
    data: data,
  });
}
// æŸ¥è¯¢æŽˆæƒè§’色
export function getAuthRole(userId) {
  return request({
    url: '/system/user/authRole/' + userId,
    method: 'get'
  })
    url: "/system/user/authRole/" + userId,
    method: "get",
  });
}
// ä¿å­˜æŽˆæƒè§’色
export function updateAuthRole(data) {
  return request({
    url: '/system/user/authRole',
    method: 'put',
    params: data
  })
    url: "/system/user/authRole",
    method: "put",
    params: data,
  });
}
// æŸ¥è¯¢éƒ¨é—¨ä¸‹æ‹‰æ ‘结构
export function deptTreeSelect() {
  return request({
    url: '/system/user/deptTree',
    method: 'get'
  })
    url: "/system/user/deptTree",
    method: "get",
  });
}
// èŽ·å–äººäº‹ç³»ç»Ÿç»„ç»‡
export function selectCompaniesList() {
  return request({
    url: '/companies/selectCompaniesList',
    method: 'get'
  })
    url: "/companies/selectCompaniesList",
    method: "get",
  });
}
// èŽ·å–äººäº‹ç³»ç»Ÿç»„ç»‡ä¸‹çš„äººå‘˜
export function selectSimpleList(data) {
  return request({
    url: '/companies/selectSimpleList',
    method: 'post',
    params: data
  })
    url: "/companies/selectSimpleList",
    method: "post",
    params: data,
  });
}
// èŽ·å–äººäº‹ç³»ç»Ÿç»„ç»‡ä¸‹çš„äººå‘˜
export function addPersonUser(data) {
  return request({
    url: '/companies/addPersonUser',
    method: 'post',
    params: data
  })
    url: "/companies/addPersonUser",
    method: "post",
    params: data,
  });
}
// èŽ·å–è§’è‰²
export function selectRoleList() {
  return request({
    url: '/role/selectRoleList',
    method: 'get',
  })
    url: "/role/selectRoleList",
    method: "get",
  });
}
// èŽ·å–å•ä½
export function selectCustomEnum() {
  return request({
    url: '/system/custom/selectCustomEnum',
    method: 'get',
  })
    url: "/system/custom/selectCustomEnum",
    method: "get",
  });
}
// æäº¤æ·»åŠ æž¶æž„ä¿¡æ¯
export function addDepartment(params) {
export function addDepartment(data) {
  return request({
    url: '/department/addDepartment',
    method: 'post',
    params: params
  })
    url: "/department/addDepartment",
    method: "post",
    data: data,
  });
}
// èŽ·å–å½“å‰ç™»å½•äººå‘˜éƒ¨é—¨
export function selectUserDepartmentLimsName(query) {
  return request({
    url: '/system/newUser/selectUserDepartmentLimsName',
    method: 'get'
  })
    url: "/system/newUser/selectUserDepartmentLimsName",
    method: "get",
  });
}
// èŽ·å–ç”¨æˆ·åˆ—è¡¨
export function selectUserCondition(query) {
src/assets/images/bg1.png
src/assets/images/bg2.png
src/components/Preview/filePreview.vue
@@ -5,7 +5,7 @@
    </div>
    <div v-if="isPdf">
      <object :data="fileUrl" type="application/pdf" width="100%" height="750px">
        <p>您的浏览器不支持 PDF é¢„览。<a :href="fileUrl" style="color: #3a7bfa;">下载 PDF æ–‡ä»¶</a></p>
        <p>您的浏览器不支持 PDF é¢„览。<a :href="fileUrl" style="color: #3a7bfa;" target="_blank">下载 PDF æ–‡ä»¶</a></p>
      </object>
    </div>
    <div v-if="isDoc">
src/components/Table/lims-table.vue
@@ -13,8 +13,7 @@
        :filter-method="item.filterHandler" :filter-multiple="item.filterMultiple" :filtered-value="item.filteredValue"
        :filters="item.filters" :fixed="item.fixed" :label="item.label" :min-width="item.minWidth" :prop="item.prop"
        :show-overflow-tooltip="item.dataType === 'action' || item.dataType === 'slot' ? false : true"
        :sortable="item.sortable ? true : false" :type="item.type" :width="item.dataType === 'action' ? getWidth(item.operation) : item.width
          " align="center">
        :sortable="item.sortable ? true : false" :type="item.type" :width="item.dataType === 'action' ? getWidth(item.operation) : item.width" align="center">
        <!-- <div class="123" v-if="item.type == ''"> -->
        <template v-if="item.hasOwnProperty('colunmTemplate')" :slot="item.colunmTemplate" slot-scope="scope">
          <slot v-if="item.theadSlot" :index="index" :name="item.theadSlot" :row="scope.row" />
@@ -31,7 +30,8 @@
          </div>
          <!-- å›¾ç‰‡ -->
          <div v-else-if="item.dataType == 'image'">
            <img :src="javaApi + '/img/' + item.prop" alt="" style="width: 40px; height: 40px; margin-top: 10px" />
            <img :src="javaApi + '/img/' + scope.row[item.prop]" alt=""
              style="width: 40px; height: 40px; margin-top: 10px" />
          </div>
          <!-- tag -->
@@ -261,12 +261,19 @@
  },
  mounted() {
    this.calculateSpanInfo();
    this.$nextTick(() => {
      this.$refs.multipleTable.doLayout();
    });
  },
  methods: {
    getWidth(row) {
      let count = 0;
      row.forEach((a) => {
        if (a.showHide!==undefined && a.showHide()) {
        count += a.name.length;
        } else if(!a.showHide) {
          count += a.name.length;
        }
      });
      return count * 15 + 70 + "px";
    },
@@ -439,7 +446,7 @@
}
>>>.el-table__body-wrapper::-webkit-scrollbar {
  height: 14px;
  height: 10px;
  /* è®¾ç½®æ»šåŠ¨æ¡å®½åº¦ */
}
</style>
src/components/echarts/DataComparison.vue
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,507 @@
<template>
  <div>
    <div>
      <el-row class="title">
        <el-col :span="6" style="padding-left: 20px;text-align: left;">数据分析</el-col>
        <el-col :span="18" style="text-align: right;">
          <el-button size="medium" @click="$emit('goBack')">返回</el-button>
        </el-col>
      </el-row>
    </div>
    <div class="container">
      <div>
        <div style="padding: 0 0 10px 10px">填写厂家数据</div>
        <el-form ref="supplierForm" :model="supplierForm" :rules="rules" class="demo-ruleForm" label-width="40px">
          <el-row :gutter="20">
            <el-col :span="3">
              <el-form-item label="1:" prop="one">
                <el-input v-model="supplierForm.one" size="small"></el-input>
              </el-form-item>
            </el-col>
            <el-col :span="3">
              <el-form-item label="2:" prop="two">
                <el-input v-model="supplierForm.two" size="small"></el-input>
              </el-form-item>
            </el-col>
            <el-col :span="3">
              <el-form-item label="3:" prop="three">
                <el-input v-model="supplierForm.three" size="small"></el-input>
              </el-form-item>
            </el-col>
            <el-col :span="3">
              <el-form-item label="4:" prop="four">
                <el-input v-model="supplierForm.four" size="small"></el-input>
              </el-form-item>
            </el-col>
            <el-col :span="3">
              <el-form-item label="5:" prop="five">
                <el-input v-model="supplierForm.five" size="small"></el-input>
              </el-form-item>
            </el-col>
            <el-col :span="4">
              <el-form-item>
                <el-button size="small" type="primary" @click="submitForm()">数据分析</el-button>
                <el-button size="small" @click="resetForm()">重置</el-button>
              </el-form-item>
            </el-col>
          </el-row>
        </el-form>
      </div>
      <table :border='true' class="table">
        <tr>
          <th class="thTitle">          </th>
          <th class="thTitle">1</th>
          <th class="thTitle">2</th>
          <th class="thTitle">3</th>
          <th class="thTitle">4</th>
          <th class="thTitle">5</th>
          <th class="thTitle">平均值</th>
          <th class="thTitle">标准偏差</th>
          <th class="thTitle">相对偏差</th>
          <th class="thTitle">平均标准偏差</th>
        </tr>
        <tr>
          <td class="thBack">厂家检测数据</td>
          <td v-for="(item,index) in supplierData" :key="index" class="tdData">{{item}}</td>
        </tr>
        <tr>
          <td class="thBack">检测中心数据</td>
          <td v-for="(item,index) in localData" :key="index" class="tdData">{{item}}</td>
        </tr>
        <tr>
          <td class="thBack">绝对偏差</td>
          <td v-for="(item,index) in absoluteDeviation" :key="index" class="tdData">{{item}}</td>
        </tr>
        <tr>
          <td class="thBack">平均值</td>
          <td v-for="(item,index) in average" :key="index" class="tdData">{{item}}</td>
        </tr>
        <tr>
          <td class="thBack2">厂家</td>
        </tr>
        <tr>
          <td class="thBack">UCL</td>
          <td v-for="(item,index) in supplierULC" :key="index" class="tdData">{{item}}</td>
          <td v-for="(item,index) in empty" :key="'a' + index" class="tdData"></td>
        </tr>
        <tr>
          <td class="thBack">LCL</td>
          <td v-for="(item,index) in supplierLCL" :key="index" class="tdData">{{item}}</td>
          <td v-for="(item,index) in empty" :key="'b' + index" class="tdData"></td>
        </tr>
        <tr>
          <td class="thBack">平均值</td>
          <td v-for="(item,index) in supplierAverage" :key="index" class="tdData">{{item}}</td>
          <td v-for="(item,index) in empty" :key="'c' + index" class="tdData"></td>
        </tr>
        <tr>
          <td class="thBack">极差</td>
          <td v-for="(item,index) in supplierRange" :key="index" class="tdData">{{item}}</td>
          <td v-for="(item,index) in empty" :key="'d' + index" class="tdData"></td>
        </tr>
        <tr>
          <td class="thBack2">检测中心</td>
        </tr>
        <tr>
          <td class="thBack">UCL</td>
          <td v-for="(item,index) in localULC" :key="index" class="tdData">{{item}}</td>
          <td v-for="(item,index) in empty" :key="'e' + index" class="tdData"></td>
        </tr>
        <tr>
          <td class="thBack">LCL</td>
          <td v-for="(item,index) in localLCL" :key="index" class="tdData">{{item}}</td>
          <td v-for="(item,index) in empty" :key="'f' + index" class="tdData"></td>
        </tr>
        <tr>
          <td class="thBack">平均值</td>
          <td v-for="(item,index) in localAverage" :key="index" class="tdData">{{item}}</td>
          <td v-for="(item,index) in empty" :key="'g' + index" class="tdData"></td>
        </tr>
        <tr>
          <td class="thBack">极差</td>
          <td v-for="(item,index) in localRange" :key="index" class="tdData">{{item}}</td>
          <td v-for="(item,index) in empty" :key="'h' + index" class="tdData"></td>
        </tr>
      </table>
      <el-row>
        <el-col :span="12">
          <div class="inspection-card">
            <div class="echartsTitle">检测数据对比</div>
            <Echarts ref="chart"
                     :grid="grid"
                     :legend="legend"
                     :lineColors="lineColors"
                     :series="echartsSeries"
                     :tooltip="tooltip"
                     :xAxis="xAxis"
                     :yAxis="yAxis"
                     style="height: 40vh;"></Echarts>
          </div>
        </el-col>
        <el-col :span="12">
          <div class="inspection-card">
            <div class="echartsTitle">测量数据标准差对比</div>
            <Echarts ref="chart"
                     :barColors="barColors"
                     :chartStyle="chartStyle"
                     :grid="grid"
                     :legend="legend1"
                     :series="echartsSeries1"
                     :tooltip="tooltip"
                     :xAxis="xAxis1"
                     :yAxis="yAxis1"
                     style="height: 40vh;"></Echarts>
          </div>
        </el-col>
      </el-row>
      <el-row>
        <el-col :span="12">
          <div class="inspection-card">
            <div class="echartsTitle">偏差分析</div>
            <Echarts ref="chart"
                     :grid="grid"
                     :legend="legend2"
                     :lineColors="lineColors"
                     :series="echartsSeries2"
                     :tooltip="tooltip"
                     :xAxis="xAxis"
                     :yAxis="yAxis2"
                     style="height: 40vh;"></Echarts>
          </div>
        </el-col>
        <el-col :span="12">
          <div class="inspection-card">
            <div class="echartsTitle">检测中心数据</div>
            <Echarts ref="chart"
                     :grid="grid"
                     :legend="legend"
                     :lineColors="lineColors"
                     :series="echartsSeries3"
                     :tooltip="tooltip"
                     :xAxis="xAxis"
                     :yAxis="yAxis"
                     style="height: 40vh;"></Echarts>
          </div>
        </el-col>
      </el-row>
    </div>
  </div>
</template>
<script>
import Echarts from "./echarts.vue";
export default {
  name: "DataComparison",
  // import å¼•入的组件需要注入到对象中才能使用
  components: {Echarts},
  props: {
    comparisonData : {
      type: Object,
      default: () => {}
    },
    selectRow : {
      type: Object,
      default: () => {}
    }
  },
  data() {
    // è¿™é‡Œå­˜æ”¾æ•°æ®
    return {
      supplierForm: {
        one: '',
        two: '',
        three: '',
        four: '',
        five: '',
      },
      rules: {
        one: [{ required: true, message: '必填', trigger: 'blur' }],
        two: [{ required: true, message: '必填', trigger: 'blur' }],
        three: [{ required: true, message: '必填', trigger: 'blur' }],
        four: [{ required: true, message: '必填', trigger: 'blur' }],
        five: [{ required: true, message: '必填', trigger: 'blur' }],
      },
      comparisonData1: {},
      supplierData: [], // åŽ‚å®¶æ•°æ®
      localData: [], // æ£€æµ‹ä¸­å¿ƒæ£€æµ‹æ•°æ®
      absoluteDeviation: [], // ç»å¯¹åå·®
      average: [], // å¹³å‡å€¼
      supplierULC: [], // åނ家UCL
      supplierLCL: [], // åނ家LCL
      supplierAverage: [], // åŽ‚å®¶å¹³å‡å€¼
      supplierRange: [], // åŽ‚å®¶æžå·®
      localULC: [], // æ£€æµ‹ä¸­å¿ƒUCL
      localLCL: [], // æ£€æµ‹ä¸­å¿ƒLCL
      localAverage: [], // æ£€æµ‹ä¸­å¿ƒå¹³å‡å€¼
      localRange: [], // æ£€æµ‹ä¸­å¿ƒæžå·®
      manufacturerData: [],
      manufacturer: [
        {value: '1.1'},
        {value: '2.2'},
        {value: '3.3'},
        {value: '4.4'},
        {value: '5.5'},
      ],
      testCenter: [
        {value: '1.2'},
        {value: '2.33'},
        {value: '3.64'},
        {value: '4.3'},
        {value: '5.9'},
      ],
      empty: [
        {data: '1'},
        {data: '2'},
        {data: '3'},
        {data: '4'},
      ],
      lineColors: ['#ed7d31', '#409EFF'],
      barColors: ['#ed7d31', '#409EFF', '#a5a5a5'],
      chartStyle: {
        width: '100%',
        height: '96%' // è®¾ç½®å›¾è¡¨å®¹å™¨çš„高度
      },
      grid: {
        left: '3%',
        right: '4%',
        bottom: '3%',
        containLabel: true
      },
      legend: {
        data: ['厂家检测数据','检测中心检测数据']
      },
      tooltip: {
        trigger: 'axis',
        axisPointer: {
          type: 'shadow'
        }
      },
      xAxis: [{
        type: 'category',
        data: ['1', '2', '3', '4', '5']
      }],
      yAxis: [{
        type: 'value'
      }],
      echartsSeries: [
        {
          name: '厂家检测数据',
          type: 'line',
          label: {
            show: true,
            position: 'top',
          },
          data: []
        },
        {
          name: '检测中心检测数据',
          type: 'line',
          label: {
            show: true,
            position: 'top',
          },
          data: []
        }
      ],
      xAxis1: [{
        type: 'category',
        data: ['厂家', '检测中心']
      }],
      legend1: {
        data: ['UCL','LCL', '平均值']
      },
      yAxis1: [
        {
          type: 'value',
        },
      ],
      echartsSeries1: [
        {
          name: 'UCL',
          type: 'bar',
          label: {
            show: true,
            position: 'top'
          },
          data: []
        },
        {
          name: 'LCL',
          type: 'bar',
          label: {
            show: true,
            position: 'top'
          },
          data: []
        },
        {
          name: '平均值',
          type: 'bar',
          label: {
            show: true,
            position: 'top'
          },
          data: []
        },
      ],
      legend2: {
        data: ['平均值','绝对偏差']
      },
      yAxis2: [{
        type: 'value',
        min: 0,
        max: 1,
      }],
      echartsSeries2: [
        {
          name: '平均值',
          type: 'line',
          label: {
            show: true,
            position: 'top',
            formatter: (params) => Math.round(params.value * 1000) / 10 + '%'
          },
          data: [],
        },
        {
          name: '绝对偏差',
          type: 'line',
          label: {
            show: true,
            position: 'top',
            formatter: (params) => Math.round(params.value * 1000) / 10 + '%'
          },
          data: [],
        }
      ],
      echartsSeries3: [
        {
          name: '检测中心检测数据',
          type: 'line',
          data: []
        }
      ],
    }
  },
  mounted() {
    this.getInfo()
  },
  // æ–¹æ³•集合
  methods: {
    getInfo () {
      this.localData = this.comparisonData.localData === null ? ['', '', '', '', '','','', '', ''] : this.comparisonData.localData
      this.localData = this.localData.map((number, index) => index === 7 ? `${Math.round(number * 100)}%` : number)
      this.echartsSeries3[0].data = this.localData.slice(0, 5)
      this.localULC = this.comparisonData.localULC
      this.localLCL = this.comparisonData.localLCL
      this.localAverage = this.comparisonData.localAverage
      this.localRange = this.comparisonData.localRange
    },
    getInfo1 () {
      this.echartsSeries1[0].data = []
      this.supplierData = this.comparisonData1.supplierData === null ? ['', '', '', '', '','','', '', ''] : this.comparisonData1.supplierData
      this.localData = this.comparisonData1.localData === null ? ['', '', '', '', '','','', '', ''] : this.comparisonData1.localData
      this.localData = this.localData.map((number, index) => index === 7 ? `${Math.round(number * 100)}%` : number)
      this.echartsSeries3[0].data = this.localData.slice(0, 5)
      this.echartsSeries[0].data = this.supplierData
      this.echartsSeries[1].data = this.localData
      this.absoluteDeviation = this.comparisonData1.absoluteDeviation === null ? ['', '', '', '', '','','', '', ''] : this.comparisonData1.absoluteDeviation
      this.echartsSeries2[1].data = this.absoluteDeviation
      this.absoluteDeviation = this.absoluteDeviation.map(number => `${Math.round(number * 100)}%`) // ç»å¯¹åå·®ç™¾åˆ†æ¯”转换
      this.average = this.comparisonData1.average === null ? ['', '', '', '', '','','', '', ''] : this.comparisonData1.average
      this.echartsSeries2[0].data = this.average
      this.average = this.average.map(number => `${Math.round(number * 100)}%`) // å¹³å‡å€¼ç™¾åˆ†æ¯”转换
      this.supplierULC = this.comparisonData1.supplierULC === null ? ['', '', '', '', ''] : this.comparisonData1.supplierULC
      this.echartsSeries1[0].data.push(this.supplierULC[0]) // æµ‹é‡æ•°æ®æ ‡å‡†å·®å¯¹æ¯”柱状图数据
      this.supplierLCL = this.comparisonData1.supplierLCL === null ? ['', '', '', '', ''] : this.comparisonData1.supplierLCL
      this.echartsSeries1[1].data.push(this.supplierLCL[0]) // æµ‹é‡æ•°æ®æ ‡å‡†å·®å¯¹æ¯”柱状图数据
      this.supplierAverage = this.comparisonData1.supplierAverage === null ? ['', '', '', '', ''] : this.comparisonData1.supplierAverage
      this.echartsSeries1[2].data.push(this.supplierAverage[0]) // æµ‹é‡æ•°æ®æ ‡å‡†å·®å¯¹æ¯”柱状图数据
      this.supplierRange = this.comparisonData1.supplierRange === null ? ['', '', '', '', ''] : this.comparisonData1.supplierRange
      this.localULC = this.comparisonData1.localULC
      this.echartsSeries1[0].data.push(this.localULC[0]) // æµ‹é‡æ•°æ®æ ‡å‡†å·®å¯¹æ¯”柱状图数据
      this.localLCL = this.comparisonData1.localLCL
      this.echartsSeries1[1].data.push(this.localLCL[0]) // æµ‹é‡æ•°æ®æ ‡å‡†å·®å¯¹æ¯”柱状图数据
      this.localAverage = this.comparisonData1.localAverage
      this.echartsSeries1[2].data.push(this.localAverage[0]) // æµ‹é‡æ•°æ®æ ‡å‡†å·®å¯¹æ¯”柱状图数据
      this.localRange = this.comparisonData1.localRange
    },
    submitForm () {
      this.$refs['supplierForm'].validate((valid) => {
        if (valid) {
          const params = {
            orderIds: this.selectRow.orderIds,
            itemNames: this.selectRow.itemNames,
            supplierDataList: Object.values(this.supplierForm)
          }
          this.$axios.post(this.$api.dataAnalysis.getRawSupplierCompare, params, {
            headers: {
              'Content-Type': 'application/json'
            },
            noQs: true
          }).then(res => {
            if (res.code === 201) {
              return
            }
            this.comparisonData1 = res.data
            this.getInfo1()
          })
        } else {
          console.log('error submit!!');
          return false;
        }
      });
    },
    resetForm () {
      this.$refs['supplierForm'].resetFields();
    },
  },
}
</script>
<style scoped>
.title {
  height: 60px;
  line-height: 60px;
}
.container {
  width: calc(100% - 20px);
  height: calc(100vh - 170px);
  background-color: #fff;
  padding: 10px;
  overflow-y: auto;
}
.table {
  width: 100%;
}
.thTitle {
  background-color: #e0eaf5;
  padding: 6px 2px;
}
.thBack {
  text-align: center;
  background-color: #e0eaf5;
  padding: 2px;
}
.thBack2 {
  text-align: center;
  background-color: #e4f2da;
  padding: 2px;
}
.tdData {
  padding: 4px;
  text-align: center;
  font-size: 13px;
  width: 10%;
}
.inspection-card{
  width: 100%;
  background: #FFFFFF;
  margin-top: 10px;
}
.echartsTitle {
  text-align: center;
  padding-bottom: 10px;
}
</style>
src/components/echarts/echart.vue
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,119 @@
<template>
  <div>
      <div class="echart_size" :id="id" :style="`height:${config.height};width:${config.width}`"></div>
  </div>
</template>
<script>
import * as echarts from 'echarts'
import ResizeListener from 'element-resize-detector';
import {iuCharts} from '@/utils/echarts'
export default {
  props: {
      id: {
          type: String,
          default: ''
      },
      config:{
        type: Object,
        default: () => {}
      },
      datas: {
          type: Object,
          default: () => {}
      }
  },
  data() {
      return {
        chart:null,
      }
  },
  watch: {
    /* å¦‚果图表数据是后台获取的,监听父组件中的数据变化,重新触发Echarts */
    datas: {
      deep: true,
      // immediate: true,
      handler(val) {
        this.$nextTick(() => {
          this.init();
        })
      },
    },
  },
  created() {
      this.$nextTick(() => {
          this.init()
      })
  },
  mounted() {
      window.addEventListener('resize', this.windowResizeListener);
      this.chartEleResizeListener();
  },
  beforeDestroy() {
    if (!this.chart) {
      return;
    }
    this.chart.dispose();
    this.chart = null;
  },
  methods: {
      init() {
        // å®žä¾‹åŒ–对象
        this.chart = echarts.init(document.getElementById(this.id))
        this.chart.showLoading({
          text: 'loading',
          color: '#3A7BFA',
          textColor: '#000',
          maskColor: 'rgba(255, 255, 255, 0.2)',
          zlevel: 0,
        });
        if (this.config.isLoading) {
          this.chart.hideLoading();
          switch (this.config.type){
            case 'bar':
            iuCharts.drawBar(this.chart,this.datas)
              break;
            case 'line':
            iuCharts.drawLine(this.chart,this.datas)
              break;
            case 'pie':
            iuCharts.drawPie(this.chart,this.datas)
              break;
            case 'gauge':
            iuCharts.drawGauge(this.chart,this.datas)
              break;
            case 'pie0':
              iuCharts.drawPie0(this.chart,this.datas)
            default:
              break;
          }
          setTimeout(()=>{
            this.chart.resize()
          },200)
        }
      },
      /* å¯¹chart元素尺寸进行监听,当发生变化时同步更新echart视图 */
      chartEleResizeListener() {
          const chartInstance = ResizeListener({
              strategy: 'scroll',
              callOnAdd: true
          });
          chartInstance.listenTo(this.$el, () => {
              if (!this.chart) return;
              this.chart.resize();
          });
      },
      /* å½“窗口缩放时,echart动态调整自身大小 */
      windowResizeListener() {
          if (!this.chart) return;
          this.chart.resize();
      }
  }
}
</script>
<style scoped>
.echart_size{
  width: 100%;
  height: 100%;
}
</style>
src/components/echarts/echarts.vue
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,238 @@
<template>
  <div>
    <div id="id" ref="chart" :style="chartStyle"></div>
  </div>
</template>
<script>
import * as echarts from 'echarts'
import ResizeListener from 'element-resize-detector';
export default {
  name: 'EChart',
  props: {
    options: {
      type: Object,
      default: () => ({})
    },
    chartStyle: {
      type: Object,
      default: () => ({
        height: '80%',
        width: '100%'
      })
    },
    dataset: {
      type: Object,
      default: () => {}
    },
    xAxis: {
      type: Array,
      default: () => []
    },
    yAxis: {
      type: Array,
      default: () => []
    },
    series: {
      type: Array,
      default: () => []
    },
    grid: {
      type: Object,
      default: () => ({})
    },
    legend: {
      type: Object,
      default: () => ({})
    },
    tooltip: {
      type: Object,
      default: () => ({})
    },
    lineColors: {
      type: Array,
      default: () => ['#00BAFF', '#3DE7C9', '#CCEDF0', '#FFB71C', '#FF5A5A']
    },
    barColors: {
      type: Array,
      default: () => ['#ff8800', '#3DE7C9', '#CCEDF0', '#FFB71C', '#FF5A5A']
    },
    loadingOption: {
      type: Object,
      default: () => ({
        text: '数据加载中...',
        color: '#00BAFF',
        textColor: '#000',
        maskColor: 'rgba(255, 255, 255, 0.8)',
        zlevel: 0
      })
    }
  },
  data() {
    return {
      chartInstance: null,
    }
  },
  watch: {
    options: {
      deep: true,
        // immediate: true,
        handler(val) {
        this.$nextTick(() => {
          this.renderChart()
        })
      },
    },
    series: {
      deep: true,
      // immediate: true,
      handler(val) {
        this.$nextTick(() => {
          this.renderChart()
        })
      },
    },
    dataset: {
      deep: true,
      // immediate: true,
      handler(val) {
        this.$nextTick(() => {
          this.renderChart()
        })
      },
    },
    xAxis: {
      deep: true,
      // immediate: true,
      handler(val) {
        this.$nextTick(() => {
          this.renderChart()
        })
      },
    },
    yAxis: {
      deep: true,
      // immediate: true,
      handler(val) {
        this.$nextTick(() => {
          this.renderChart()
        })
      },
    },
    grid: {
      deep: true,
      // immediate: true,
      handler(val) {
        this.$nextTick(() => {
          this.renderChart()
        })
      },
    },
    legend: {
      deep: true,
      // immediate: true,
      handler(val) {
        this.$nextTick(() => {
          this.renderChart()
        })
      },
    },
    tooltip: {
      deep: true,
      // immediate: true,
      handler(val) {
        this.$nextTick(() => {
          this.renderChart()
        })
      },
    },
    lineColors: {
      deep: true,
      // immediate: true,
      handler(val) {
        this.$nextTick(() => {
          this.renderChart()
        })
      },
    },
    barColors: {
      deep: true,
      // immediate: true,
      handler(val) {
        this.$nextTick(() => {
          this.renderChart()
        })
      },
    },
  },
  mounted() {
    this.chartInstance = echarts.init(this.$refs.chart)
    this.renderChart()
    window.addEventListener('resize', this.windowResizeListener);
  },
  beforeDestroy() {
    this.dispose()
  },
  methods: {
    /* å½“窗口缩放时,echart动态调整自身大小 */
    windowResizeListener() {
      if (!this.chartInstance) return;
      this.dispose()
      this.chartInstance = echarts.init(this.$refs.chart)
      this.renderChart()
      this.chartInstance.resize();
    },
    renderChart() {
      const option = {
        backgroundColor: this.options.backgroundColor || '#fff',
        xAxis: this.xAxis,
        yAxis: this.yAxis,
        dataset: this.dataset,
        series: this.series,
        grid: this.grid,
        legend: this.legend,
        tooltip: this.tooltip
      }
      // æ ¹æ®ä¼ å…¥çš„æ•°æ®å’Œé…ç½®å‚数生成图表
      this.generateChart(option)
    },
    generateChart(option) {
      // é…ç½®æŠ˜çº¿å›¾å’ŒæŸ±çŠ¶å›¾çš„æ ·å¼
      if (option.series && option.series.length > 0) {
        option.series.forEach((s, index) => {
          if (s.type === 'line') {
            s.itemStyle = {
              color: this.lineColors[index] || this.lineColors[0]
            }
            s.lineStyle = {
              color: this.lineColors[index] || this.lineColors[0]
            }
          } else if (s.type === 'bar') {
            s.itemStyle = {
              color: this.barColors[index] || this.barColors[0]
            }
          }
        })
      }
      this.chartInstance.clear()
      // æ¸²æŸ“图表
      this.chartInstance.setOption(option)
    },
    dispose() {
      if (this.chartInstance) {
        window.removeEventListener('resize', this.chartInstance.resize);//销毁图表监听事件
        this.chartInstance.dispose()
        this.chartInstance = null
      }
    }
  },
}
</script>
<style scoped>
/* åœ¨è¿™é‡Œå¯ä»¥å†™æ ·å¼ï¼Œæ¯”如设置图表容器的宽度和高度 */
</style>
src/layout/components/Navbar.vue
@@ -12,6 +12,16 @@
      <div class="avatar-wrapper">
        <img :src="avatar" class="user-avatar" />
        <span class="userName">{{ nickName }}</span>
        <el-dropdown class="avatar-container right-menu-item hover-effect" trigger="click">
          <div class="avatar-wrapper">
            <i class="el-icon-caret-bottom" />
          </div>
          <el-dropdown-menu slot="dropdown">
            <router-link to="/user/profile">
              <el-dropdown-item>个人中心</el-dropdown-item>
            </router-link>
          </el-dropdown-menu>
        </el-dropdown>
        <img
          class="logoout"
          src="@/assets/images/logoout.png"
@@ -211,9 +221,6 @@
      }
    }
    .avatar-container {
      margin-right: 30px;
    }
  }
}
</style>
src/main.js
@@ -68,7 +68,7 @@
};
Vue.prototype.javaApi = process.env.VUE_APP_BASE_API
  ? process.env.VUE_APP_BASE_API
  : "http://192.168.0.170:8002";
  : "http://192.168.1.36:8002";
Vue.prototype.checkPermi = checkPermi;
Vue.prototype.uploadHeader = {
  Authorization: "Bearer " + getToken(),
src/plugins/download.js
@@ -1,79 +1,126 @@
import axios from 'axios'
import {Loading, Message} from 'element-ui'
import { saveAs } from 'file-saver'
import { getToken } from '@/utils/auth'
import errorCode from '@/utils/errorCode'
import axios from "axios";
import { Loading, Message } from "element-ui";
import { saveAs } from "file-saver";
import { getToken } from "@/utils/auth";
import errorCode from "@/utils/errorCode";
import { blobValidate } from "@/utils/ruoyi";
const baseURL = process.env.VUE_APP_BASE_API
const baseURL = process.env.VUE_APP_BASE_API;
let downloadLoadingInstance;
export default {
  name(name, isDelete = true) {
    var url = baseURL + "/common/download?fileName=" + encodeURIComponent(name) + "&delete=" + isDelete
    var url =
      baseURL +
      "/common/download?fileName=" +
      encodeURIComponent(name) +
      "&delete=" +
      isDelete;
    axios({
      method: 'get',
      method: "get",
      url: url,
      responseType: 'blob',
      headers: { 'Authorization': 'Bearer ' + getToken() }
      responseType: "blob",
      headers: { Authorization: "Bearer " + getToken() },
    }).then((res) => {
      const isBlob = blobValidate(res.data);
      if (isBlob) {
        const blob = new Blob([res.data])
        this.saveAs(blob, decodeURIComponent(res.headers['download-filename']))
        const blob = new Blob([res.data]);
        this.saveAs(blob, decodeURIComponent(res.headers["download-filename"]));
      } else {
        this.printErrMsg(res.data);
      }
    })
    });
  },
  resource(resource) {
    var url = baseURL + "/common/download/resource?resource=" + encodeURIComponent(resource);
    var url =
      baseURL +
      "/common/download/resource?resource=" +
      encodeURIComponent(resource);
    axios({
      method: 'get',
      method: "get",
      url: url,
      responseType: 'blob',
      headers: { 'Authorization': 'Bearer ' + getToken() }
      responseType: "blob",
      headers: { Authorization: "Bearer " + getToken() },
    }).then((res) => {
      const isBlob = blobValidate(res.data);
      if (isBlob) {
        const blob = new Blob([res.data])
        this.saveAs(blob, decodeURIComponent(res.headers['download-filename']))
        const blob = new Blob([res.data]);
        this.saveAs(blob, decodeURIComponent(res.headers["download-filename"]));
      } else {
        this.printErrMsg(res.data);
      }
    })
    });
  },
  zip(url, name) {
    var url = baseURL + url
    downloadLoadingInstance = Loading.service({ text: "正在下载数据,请稍候", spinner: "el-icon-loading", background: "rgba(0, 0, 0, 0.7)", })
    var url = baseURL + url;
    downloadLoadingInstance = Loading.service({
      text: "正在下载数据,请稍候",
      spinner: "el-icon-loading",
      background: "rgba(0, 0, 0, 0.7)",
    });
    axios({
      method: 'get',
      method: "get",
      url: url,
      responseType: 'blob',
      headers: { 'Authorization': 'Bearer ' + getToken() }
    }).then((res) => {
      responseType: "blob",
      headers: { Authorization: "Bearer " + getToken() },
    })
      .then((res) => {
      const isBlob = blobValidate(res.data);
      if (isBlob) {
        const blob = new Blob([res.data], { type: 'application/zip' })
        this.saveAs(blob, name)
          const blob = new Blob([res.data], { type: "application/zip" });
          this.saveAs(blob, name);
      } else {
        this.printErrMsg(res.data);
      }
      downloadLoadingInstance.close();
    }).catch((r) => {
      console.error(r)
      Message.error('下载文件出现错误,请联系管理员!')
      downloadLoadingInstance.close();
    })
      .catch((r) => {
        console.error(r);
        Message.error("下载文件出现错误,请联系管理员!");
        downloadLoadingInstance.close();
      });
  },
  saveAs(text, name, opts) {
    if (typeof text === "string") {
      // è·¯å¾„下载
    saveAs(text, name, opts);
      Message.success("数据导出成功");
    } else {
      // æµä¸‹è½½
      blobToText(text)
        .then((result) => {
          Message.error(result.msg);
        })
        .catch(() => {
          saveAs(text, name, opts);
          Message.success("数据导出成功");
        });
    }
  },
  async printErrMsg(data) {
    const resText = await data.text();
    const rspObj = JSON.parse(resText);
    const errMsg = errorCode[rspObj.code] || rspObj.msg || errorCode['default']
    const errMsg = errorCode[rspObj.code] || rspObj.msg || errorCode["default"];
    Message.error(errMsg);
  }
}
  },
};
// å°†blob转成文本
function blobToText(blob) {
  return new Promise((resolve, reject) => {
    const fileReader = new FileReader();
    fileReader.readAsText(blob);
    fileReader.onload = function () {
      try {
        const result = JSON.parse(this.result);
        if (result && result["code"] !== 200) {
          resolve(result);
        } else {
          reject();
        }
      } catch (e) {
        reject();
      }
    };
  });
}
src/router/index.js
@@ -149,7 +149,7 @@
        path: "inspection",
        component: () => import("@/views/business/inspectionTask/inspection"),
        name: "inspection",
        meta: { title: "检验单详情", activeMenu: "/business/inspectionTask" },
        meta: { title: "检验单详情", activeMenu: "/business/inspectionTask", keepAlive: false },
      },
    ],
  },
src/views/CNAS/externalService/serviceAndSupplyPro/component/ConsumableList.vue
@@ -15,17 +15,9 @@
        </div>
      </template>
      <template v-slot:table>
        <limsTable
          :column="columns"
          :currentChange="rowClick"
          :height="'25vh'"
          :highlightCurrentRow="true"
          :isSelection="false"
          :rowStyle="tableRowStyle"
          :table-data="tableData"
          rowKey="id"
          style="margin-top: 18px; padding: 0 15px;"
        >
        <limsTable :column="columns" :currentChange="rowClick" :height="'25vh'" :highlightCurrentRow="true"
          :isSelection="false" :rowStyle="tableRowStyle" :table-data="tableData" rowKey="id"
          style="margin-top: 18px; padding: 0 15px;">
          <template v-slot:consumablesTypeSlot="{row}">
            {{ findType(row.consumablesType) }}
          </template>
@@ -36,14 +28,8 @@
        </limsTable>
        <div class="pagination">
          <div></div>
          <el-pagination
            :page-size="pagination.pageSize"
            :page-sizes="[10, 20, 30, 40]"
            :total="pagination.total"
            layout="total, sizes, prev, pager, next, jumper"
            @current-change="handleCurrent"
            @size-change="handleSize"
          >
          <el-pagination :page-size="pagination.pageSize" :page-sizes="[10, 20, 30, 40]" :total="pagination.total"
            layout="total, sizes, prev, pager, next, jumper" @current-change="handleCurrent" @size-change="handleSize">
          </el-pagination>
        </div>
      </template>
@@ -188,7 +174,6 @@
      exportProcurementSuppliesList({parentId:this.contentsId}).then(res => {
        const blob = new Blob([res], {type: 'application/octet-stream'});
        this.$download.saveAs(blob, '耗材列表.xlsx')
        this.$message.success('导出成功')
      })
    },
    handleCurrent() {
src/views/CNAS/externalService/serviceAndSupplyPro/component/Store.vue
@@ -13,20 +13,13 @@
      </el-button>
    </div>
    <div class="table">
      <limsTable
        :column="tableColumn"
        :height="'calc(100vh - 20em)'"
        :table-data="storageTableData"
        :table-loading="tableLoading"
        style="padding: 0 10px;margin-bottom: 16px"
        :page="page"
        @pagination="pagination">
      <limsTable :column="tableColumn" :height="'calc(100vh - 20em)'" :table-data="storageTableData"
        :table-loading="tableLoading" style="padding: 0 10px;margin-bottom: 16px" :page="page" @pagination="pagination">
      </limsTable>
    </div>
    <!-- ç¼–辑-新增弹框 -->
    <el-dialog :before-close="handleClose" :close-on-click-modal="false"
               :close-on-press-escape="false" :title="title"
    <el-dialog :before-close="handleClose" :close-on-click-modal="false" :close-on-press-escape="false" :title="title"
               :visible.sync="dialogVisible" width="70%">
      <!-- å…¥åº“单 -->
      <div>
@@ -51,9 +44,7 @@
          </el-col>
          <el-col :span="12">
            <el-form-item label="入库日期">
              <el-date-picker v-model="form.storageTime" format="yyyy-MM-dd"
                              placeholder="选择日期"
                              size="small"
              <el-date-picker v-model="form.storageTime" 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>
@@ -106,8 +97,7 @@
              </el-input>
            </div>
          </div>
          <el-button size="mini" type="primary"
            @click="addTableData">添加
          <el-button size="mini" type="primary" @click="addTableData">添加
          </el-button>
        </div>
        <el-table :data="consumables" style="margin-top: 10px">
@@ -377,7 +367,6 @@
      exportProcurementSuppliesStoreExcel({parentId:this.contentsId}).then(res => {
        const blob = new Blob([res], {type: 'application/octet-stream'});
        this.$download.saveAs(blob, '耗材入库.xlsx')
        this.$message.success('导出成功')
      })
    },
    handleClose() {
@@ -457,10 +446,12 @@
.el-dialog {
  margin: 6vh auto 50px !important;
}
.el-dialog__body {
  max-height: 42em;
  overflow-y: auto;
}
.input-form {
  display: flex;
  margin: 10px 0;
src/views/CNAS/externalService/supplierManage/index.vue
@@ -173,7 +173,6 @@
      exportSupplierManagement({deviceId:this.clickNodeVal.value}).then(res => {
        const blob = new Blob([res], { type: 'application/octet-stream' });
        this.$download.saveAs(blob, '合格供应商.xlsx')
        this.$message.success('导出成功')
      })
    }
  },
src/views/CNAS/personnel/personnelInfo/tabs/job-responsibilities.vue
@@ -36,21 +36,18 @@
                       @click="handleViewClick(scope.row, 'edit')">编辑
            </el-button>
            <el-button size="small" type="text" @click="downLoadPost(scope.row)">导出</el-button>
            <el-button v-if="isDepartment" size="small" style="color: #f56c6c" type="text" @click="deletePost(scope.row)">删除</el-button>
            <el-button v-if="isDepartment" size="small" style="color: #f56c6c" type="text"
              @click="deletePost(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"
                     background
                     style="margin-top: 10px"
                     @size-change="handleSizeChange"
                     @current-change="handleCurrentChange">
        :total="search.total" layout="->,total, sizes, prev, pager, next, jumper" background style="margin-top: 10px"
        @size-change="handleSizeChange" @current-change="handleCurrentChange">
      </el-pagination>
    </div>
    <!-- æ–°å¢žå²—位职责 -->
    <el-dialog :close-on-click-modal="false" :close-on-press-escape="false" :visible.sync="dialogVisible"
               title="新增岗位职责"
    <el-dialog :close-on-click-modal="false" :close-on-press-escape="false" :visible.sync="dialogVisible" title="新增岗位职责"
               width="50%" @close="resetForm">
      <el-steps :active="currentStep" align-center finish-status="success">
        <el-step v-for="(v, i) in steps" :key="i" :title="v" style="cursor:pointer"
@@ -70,24 +67,19 @@
              <el-col :span="24">
                <el-form-item label="工作目标:" prop="jobObjective">
                  <el-input v-model="form.jobObjective" :disabled="currentStep !== 0 || operationType === 'view'"
                            size="small"
                            type="textarea"></el-input>
                    size="small" type="textarea"></el-input>
                </el-form-item>
              </el-col>
              <el-col :span="24">
                <el-form-item label="岗位职责:" prop="jobResponsibilities">
                  <el-input v-model="form.jobResponsibilities" :disabled="currentStep !== 0 || operationType === 'view'"
                            size="small"
                            type="textarea"></el-input>
                    size="small" type="textarea"></el-input>
                </el-form-item>
              </el-col>
              <el-col v-if="currentStep === 0 || operationType === 'view'" :span="12">
                <el-form-item
                  :rules="[{ required: currentStep === 0, message: '请选择任职人', trigger: 'change' }]"
                  label="任职人:"
                  prop="incumbentId">
                  <el-select v-model="form.incumbentId" :disabled="operationType === 'view'" clearable
                             filterable
                <el-form-item :rules="[{ required: currentStep === 0, message: '请选择任职人', trigger: 'change' }]"
                  label="任职人:" prop="incumbentId">
                  <el-select v-model="form.incumbentId" :disabled="operationType === 'view'" 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>
@@ -95,13 +87,10 @@
                </el-form-item>
              </el-col>
              <el-col v-if="currentStep === 1 || operationType === 'view'" :span="12">
                <el-form-item
                  :rules="[{ required: currentStep === 1, message: '请选择主管', trigger: 'blur' }]"
                  label="主管:"
                <el-form-item :rules="[{ required: currentStep === 1, message: '请选择主管', trigger: 'blur' }]" label="主管:"
                  prop="supervisorId">
                  <el-select v-model="form.supervisorId" :disabled="currentStep !== 1 || operationType === 'view'"
                             clearable filterable
                             placeholder="请选择主管" size="small" style="width: 100%;">
                    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>
@@ -122,8 +111,9 @@
      <span slot="footer" class="dialog-footer">
        <el-button v-if="currentStep !== 0 && currentStep !== 3" @click="submitForm('3reject')">驳回</el-button>
        <el-button v-if="currentStep === 0" @click="submitForm('2save')">保存</el-button>
        <el-button v-if="currentStep !== 3" type="primary"
                   @click="submitForm('1submit')">{{ currentStep === 0 ? '提交' : '通过' }}</el-button>
        <el-button v-if="currentStep !== 3" type="primary" @click="submitForm('1submit')">{{ currentStep === 0 ? '提交' :
          '通过'
          }}</el-button>
      </span>
    </el-dialog>
  </div>
@@ -333,7 +323,6 @@
      exportPersonJobResponsibilities({id:row.id}).then(res => {
        const blob = new Blob([res],{ type: 'application/octet-stream' });
        this.$download.saveAs(blob, row.incumbentName+'-岗位职责'+'.docx');
        this.$message.success('导出成功')
      })
    },
    // åˆ é™¤å²—位职责
@@ -391,5 +380,4 @@
  },
};
</script>
<style scoped>
</style>
<style scoped></style>
src/views/CNAS/personnel/personnelInfo/tabs/personnel-information.vue
@@ -61,7 +61,9 @@
              </el-col>
              <el-col :span="8">
                <el-form-item label="所属部门">
                  <el-cascader v-model="form.departLimsId" :options="department" :props="{ label: 'name', value: 'id',checkStrictly: true }"  filterable style="width: 100%;"></el-cascader>
                  <el-cascader v-model="form.departLimsId" :options="department"
                    :props="{ label: 'name', value: 'id', checkStrictly: true }" filterable
                    style="width: 100%;"></el-cascader>
                </el-form-item>
              </el-col>
            </el-row>
@@ -123,8 +125,7 @@
              <el-col :span="8">
                <el-form-item label="出生日期">
                  <el-date-picker v-model="form.dateBirth" format="yyyy-MM-dd" placeholder="选择日期" size="small"
                                  @change="getAge"
                                  style="width: 99%;" type="date" value-format="yyyy-MM-dd HH:mm:ss">
                    @change="getAge" style="width: 99%;" type="date" value-format="yyyy-MM-dd HH:mm:ss">
                  </el-date-picker>
                </el-form-item>
              </el-col>
@@ -147,8 +148,8 @@
              </el-col>
              <el-col :span="8">
                <el-form-item label="年龄">
                  <el-input-number v-model="form.age" :max="130" :min="1"
                                   controls-position="right" size="small" style="width: 99%;"></el-input-number>
                  <el-input-number v-model="form.age" :max="130" :min="1" controls-position="right" size="small"
                    style="width: 99%;"></el-input-number>
                </el-form-item>
              </el-col>
              <el-col :span="8">
@@ -163,9 +164,8 @@
            <el-row>
              <el-col :span="8">
                <el-form-item label="证件有效期">
                  <el-date-picker v-model="form.validityPeriod" format="yyyy-MM-dd" placeholder="选择日期"
                                  size="small" style="width: 99%;" type="date"
                                  value-format="yyyy-MM-dd HH:mm:ss">
                  <el-date-picker v-model="form.validityPeriod" format="yyyy-MM-dd" placeholder="选择日期" size="small"
                    style="width: 99%;" type="date" value-format="yyyy-MM-dd HH:mm:ss">
                  </el-date-picker>
                </el-form-item>
              </el-col>
@@ -188,9 +188,8 @@
              </el-col>
              <el-col :span="8">
                <el-form-item label="入党/团时间">
                  <el-date-picker v-model="form.dumplingTime" format="yyyy-MM-dd" placeholder="选择日期"
                                  size="small" style="width: 99%;" type="date"
                                  value-format="yyyy-MM-dd HH:mm:ss">
                  <el-date-picker v-model="form.dumplingTime" format="yyyy-MM-dd" placeholder="选择日期" size="small"
                    style="width: 99%;" type="date" value-format="yyyy-MM-dd HH:mm:ss">
                  </el-date-picker>
                </el-form-item>
              </el-col>
@@ -225,9 +224,8 @@
              </el-col>
              <el-col :span="8">
                <el-form-item label="毕业时间1">
                  <el-date-picker v-model="form.graduationTime1" format="yyyy-MM-dd" placeholder="选择日期"
                                  size="small" style="width: 99%;" type="date"
                                  value-format="yyyy-MM-dd HH:mm:ss">
                  <el-date-picker v-model="form.graduationTime1" format="yyyy-MM-dd" placeholder="选择日期" size="small"
                    style="width: 99%;" type="date" value-format="yyyy-MM-dd HH:mm:ss">
                  </el-date-picker>
                </el-form-item>
              </el-col>
@@ -245,9 +243,8 @@
              </el-col>
              <el-col :span="8">
                <el-form-item label="毕业时间2">
                  <el-date-picker v-model="form.graduationTime2" format="yyyy-MM-dd" placeholder="选择日期"
                                  size="small" style="width: 99%;" type="date"
                                  value-format="yyyy-MM-dd HH:mm:ss">
                  <el-date-picker v-model="form.graduationTime2" format="yyyy-MM-dd" placeholder="选择日期" size="small"
                    style="width: 99%;" type="date" value-format="yyyy-MM-dd HH:mm:ss">
                  </el-date-picker>
                </el-form-item>
              </el-col>
@@ -255,9 +252,8 @@
            <el-row>
              <el-col :span="8">
                <el-form-item label="登记时间">
                  <el-date-picker v-model="form.lastUpdateTime" format="yyyy-MM-dd" placeholder="选择日期"
                                  size="small" style="width: 99%;" type="date"
                                  value-format="yyyy-MM-dd HH:mm:ss">
                  <el-date-picker v-model="form.lastUpdateTime" format="yyyy-MM-dd" placeholder="选择日期" size="small"
                    style="width: 99%;" type="date" value-format="yyyy-MM-dd HH:mm:ss">
                  </el-date-picker>
                </el-form-item>
              </el-col>
@@ -277,15 +273,13 @@
                </el-form-item>
              </el-col>
              <el-col :span="6">
                <el-upload ref="upload" :action="action"
                           :headers="uploadHeader"
                <el-upload ref="upload" :action="action" :headers="uploadHeader"
                           :on-success="(response, file, fileList) => onSuccess(response, file, fileList, 'pictureUrl')"
                           :show-file-list="false"
                           style="float: left; margin: 0 10px 0 10px;">
                  :show-file-list="false" style="float: left; margin: 0 10px 0 10px;">
                  <el-button slot="trigger" class="uploadFile" size="mini" type="primary">上传</el-button>
                </el-upload>
                <el-button v-if="form.pictureUrl" class="uploadFile" size="mini"
                           type="primary" @click="downloadFile(form.pictureUrl)">下载</el-button>
                <el-button v-if="form.pictureUrl" class="uploadFile" size="mini" type="primary"
                  @click="downloadFile(form.pictureUrl)">下载</el-button>
              </el-col>
            </el-row>
            <el-row>
@@ -298,15 +292,13 @@
                </el-form-item>
              </el-col>
              <el-col :span="6">
                <el-upload ref="upload" :action="action"
                           :headers="uploadHeader"
                <el-upload ref="upload" :action="action" :headers="uploadHeader"
                           :on-success="(response, file, fileList) => onSuccess(response, file, fileList, 'signatureUrl')"
                           :show-file-list="false"
                           style="float: left; margin: 0 10px 0 10px;">
                  :show-file-list="false" style="float: left; margin: 0 10px 0 10px;">
                  <el-button slot="trigger" class="uploadFile" size="small" type="primary">上传</el-button>
                </el-upload>
                <el-button v-if="form.signatureUrl" class="uploadFile" size="small"
                           type="primary" @click="downloadFile(form.signatureUrl)">下载</el-button>
                <el-button v-if="form.signatureUrl" class="uploadFile" size="small" type="primary"
                  @click="downloadFile(form.signatureUrl)">下载</el-button>
              </el-col>
            </el-row>
            <el-row>
@@ -315,38 +307,37 @@
                </el-form-item>
              </el-col>
              <el-col :span="4">
                <el-button size="mini" style="float: right;margin-right: 25px" type="primary" @click="annexAdd(0)">新增</el-button>
                <el-button size="mini" style="float: right;margin-right: 25px" type="primary"
                  @click="annexAdd(0)">新增</el-button>
              </el-col>
            </el-row>
            <lims-table :tableData="annexList" :column="columnData2" style="width: 96%;margin-left: 34px"
                        height="200" :tableLoading="tableLoading2"></lims-table>
            <lims-table :tableData="annexList" :column="columnData2" style="width: 96%;margin-left: 34px" height="200"
              :tableLoading="tableLoading2"></lims-table>
            <el-row style="margin-top: 10px">
              <el-col :span="20">
                <el-form-item label="附件资料" >
                </el-form-item>
              </el-col>
              <el-col :span="4">
                <el-upload ref='upload'
                           :action="fileAction"
                           :auto-upload="true" :data="{userId: clickNodeVal.userId}"
                           :before-upload="fileBeforeUpload"
                           :headers="uploadHeader" :on-error="onError"
                           :on-success="handleSuccessUp"
                           :show-file-list="false"
                           accept='.jpg,.jpeg,.png,.gif,.doc,.docx,.xls,.xlsx,.ppt,.pptx,.pdf,.zip,.rar' style="width: 80px !important;">
                <el-upload ref='upload' :action="fileAction" :auto-upload="true" :data="{ userId: clickNodeVal.userId }"
                  :before-upload="fileBeforeUpload" :headers="uploadHeader" :on-error="onError"
                  :on-success="handleSuccessUp" :show-file-list="false"
                  accept='.jpg,.jpeg,.png,.gif,.doc,.docx,.xls,.xlsx,.ppt,.pptx,.pdf,.zip,.rar'
                  style="width: 80px !important;">
                  <el-button size="small" type="primary">附件上传</el-button>
                </el-upload>
              </el-col>
            </el-row>
            <lims-table :tableData="tableData" :column="columnData" style="width: 96%;float: right;"
                        height="200" :tableLoading="tableLoading"></lims-table>
            <lims-table :tableData="tableData" :column="columnData" style="width: 96%;float: right;" height="200"
              :tableLoading="tableLoading"></lims-table>
            <el-row style="margin-top: 10px">
              <el-col :span="20">
                <el-form-item label="工作经历" >
                </el-form-item>
              </el-col>
              <el-col :span="4">
                <el-button size="mini" style="float: right;margin-right: 25px" type="primary" @click="annexAdd1('add')">新增</el-button>
                <el-button size="mini" style="float: right;margin-right: 25px" type="primary"
                  @click="annexAdd1('add')">新增</el-button>
              </el-col>
            </el-row>
            <el-table :data="tableData1" border height="200" style="width: 96%;float: right;" v-loading="tableLoading1">
@@ -357,7 +348,8 @@
              <el-table-column align="center" label="操作">
                <template slot-scope="scope">
                  <el-button type="text" size="mini" @click="annexAdd1('edit',scope.row)">编辑</el-button>
                  <el-button type="text" size="mini" @click="deleteAnnex1(scope.row)" style="color: #f56c6c">删除</el-button>
                  <el-button type="text" size="mini" @click="deleteAnnex1(scope.row)"
                    style="color: #f56c6c">删除</el-button>
                </template>
              </el-table-column>
            </el-table>
@@ -374,8 +366,7 @@
          </el-col>
          <el-col :span="20" style="text-align: left;">
            <el-checkbox-group v-model="checkList">
              <el-checkbox v-for="v in dict.type.personnl_type" :key="v.value"
                           :label="v.value"></el-checkbox>
              <el-checkbox v-for="v in dict.type.personnl_type" :key="v.value" :label="v.value"></el-checkbox>
            </el-checkbox-group>
          </el-col>
        </el-row>
@@ -387,7 +378,8 @@
    </el-dialog>
    <!-- æ–°å¢žé™„件资料 -->
    <el-dialog :before-close="handleClose" :title="title" :visible.sync="dialogVisible1" width="40%" @open="getComparisonList">
    <el-dialog :before-close="handleClose" :title="title" :visible.sync="dialogVisible1" width="40%"
      @open="getComparisonList">
      <el-form ref="annex" :model="annex" :rules="rules" label-width="100px">
        <el-row>
          <el-col :span="16">
@@ -438,10 +430,7 @@
        <el-row style="margin-top: 15px">
          <el-col :span="16">
            <el-form-item label="文件">
              <el-upload
                :action="action"
                :before-upload="beforeAvatarUpload"
                :headers="uploadHeader"
              <el-upload :action="action" :before-upload="beforeAvatarUpload" :headers="uploadHeader"
                :on-success="(response,file,fileList) => onSuccess(response, file, fileList, 'fileName')"
                :show-file-list="false">
                <span v-if="annex.fileName">{{annex.fileName}}</span>
@@ -463,7 +452,8 @@
        <el-row>
          <el-col :span="16">
            <el-form-item label="工作经历" prop="idNumber">
              <el-input type="textarea" v-model="annex2.workExperience" clearable size="small" style="width: 100%;"></el-input>
              <el-input type="textarea" v-model="annex2.workExperience" clearable size="small"
                style="width: 100%;"></el-input>
            </el-form-item>
          </el-col>
        </el-row>
@@ -700,7 +690,6 @@
      exportPersonBasicInfoById({id: this.clickNodeVal.userId}).then(res => {
        const blob = new Blob([res],{ type: 'application/msword' });
        this.$download.saveAs(blob, '人员档案.docx');
        this.$message.success('导出成功')
      })
    },
    // ä¸Šä¼ éªŒè¯
@@ -1080,6 +1069,7 @@
  height: 12px;
  /* è®¾ç½®æ»šåŠ¨æ¡å®½åº¦ */
}
>>>.el-form-item {
    margin-bottom: 3px;
}
@@ -1099,6 +1089,7 @@
    margin-top: 2px;
    float: left;
}
  .avatar-uploader-icon {
    font-size: 28px;
    color: #0f8bf1;
@@ -1107,6 +1098,7 @@
    text-align: center;
    border: 1px solid #d9d9d9;
  }
  .avatar {
    width: 178px;
    height: 178px;
src/views/CNAS/personnel/personnelInfo/tabs/personnel-list.vue
@@ -11,11 +11,7 @@
        </el-form-item>
      </el-form>
      <div>
        <el-button
          :loading="outLoading"
          size="small"
          type="primary"
          @click="handleDown">导出</el-button>
        <el-button :loading="outLoading" size="small" type="primary" @click="handleDown">导出</el-button>
        <el-button size="small" type="primary" @click="openSelectUserDia">新建</el-button>
      </div>
    </div>
@@ -40,18 +36,10 @@
          </template>
        </el-table-column>
      </el-table>
      <el-pagination
        :current-page="1"
        :current-page.sync="page.current"
        :page-size="page.size"
        :page-sizes="[10, 20, 30, 50, 100]"
        :total="page.total"
        background
        layout="->,total, sizes, prev, pager, next, jumper"
        style="margin-top: 10px"
        @size-change="handleSizeChange"
        @current-change="handleCurrentChange"
      >
      <el-pagination :current-page="1" :current-page.sync="page.current" :page-size="page.size"
        :page-sizes="[10, 20, 30, 50, 100]" :total="page.total" background
        layout="->,total, sizes, prev, pager, next, jumper" style="margin-top: 10px" @size-change="handleSizeChange"
        @current-change="handleCurrentChange">
      </el-pagination>
    </div>
    <el-dialog :visible.sync="selectUserDia" title="选择用户" width="70%">
@@ -59,22 +47,15 @@
        <div class="search_thing">
          <div class="search_label">用户名:</div>
          <div class="search_input">
            <el-input
              v-model="addUserTableInfo.name"
              clearable
              placeholder="请输入"
              size="small"
              @change="selectUserList"
            ></el-input>
            <el-input v-model="addUserTableInfo.name" clearable placeholder="请输入" size="small"
              @change="selectUserList"></el-input>
          </div>
          <el-button size="small" style="margin-left: 10px" type="primary" @click="selectUserList">查询</el-button>
        </div>
      </div>
      <div v-if="selectUserDia" class="body" style="height: 60vh;">
        <lims-table :tableData="tableData1" :column="column1"
                    :isSelection="true" :handleSelectionChange="selectMethod"
                    :height="'calc(100vh - 290px)'"
                    :tableLoading="tableLoading1"></lims-table>
        <lims-table :tableData="tableData1" :column="column1" :isSelection="true" :handleSelectionChange="selectMethod"
          :height="'calc(100vh - 290px)'" :tableLoading="tableLoading1"></lims-table>
      </div>
      <span slot="footer" class="dialog-footer">
        <el-button @click="selectUserDia = false">取 æ¶ˆ</el-button>
@@ -292,7 +273,6 @@
        this.outLoading = false;
        const blob = new Blob([res], {type: 'application/octet-stream'});
        this.$download.saveAs(blob, '人员信息.xlsx')
        this.$message.success('导出成功')
      })
    },
  },
src/views/CNAS/personnel/personnelInfo/tabs/personnelTraining.vue
@@ -18,10 +18,8 @@
          <el-button size="small" type="primary" @click="uploadDia = true, getUserList()">导入</el-button>
        </div>
      </div>
      <lims-table :tableData="yearPlanTableData" :column="yearPlanColumn"
                  :currentChange="currentChange"
                  @pagination="pagination" height="40vh"
                  :page="page" :tableLoading="yearLoading"></lims-table>
      <lims-table :tableData="yearPlanTableData" :column="yearPlanColumn" :currentChange="currentChange"
        @pagination="pagination" height="40vh" :page="page" :tableLoading="yearLoading"></lims-table>
    </div>
    <div v-if="!editPlanShow" class="table">
      <div>
@@ -31,37 +29,32 @@
        <div style="display: flex;justify-content: space-between;">
          <el-form :model="inDetailForm" ref="inDetailForm" size="small" :inline="true">
            <el-form-item label="培训讲师">
              <el-input v-model="inDetailForm.trainingLecturerName" class="search" clearable placeholder="请输入" size="small"></el-input>
              <el-input v-model="inDetailForm.trainingLecturerName" class="search" clearable placeholder="请输入"
                size="small"></el-input>
            </el-form-item>
            <el-form-item label="培训日期">
              <el-date-picker v-model="inDetailForm.trainingDate" clearable
                              format="yyyy-MM-dd" placeholder="选择日期" size="small"
                              type="date" value-format="yyyy-MM-dd"></el-date-picker>
              <el-date-picker v-model="inDetailForm.trainingDate" clearable format="yyyy-MM-dd" placeholder="选择日期"
                size="small" type="date" value-format="yyyy-MM-dd"></el-date-picker>
            </el-form-item>
            <el-form-item>
              <el-button size="small" type="primary" @click="searchTable">查 è¯¢</el-button>
            </el-form-item>
          </el-form>
          <div>
            <el-button v-if="isDepartment && currentChangeRow && isOperation" size="small" @click="batchDelete">批量删除</el-button>
            <el-button v-if="isDepartment && currentChangeRow && isOperation" size="small" type="primary" @click="addTrainingPlan('add')">新增</el-button>
            <el-button v-if="isDepartment && currentChangeRow && isOperation" size="small"
              @click="batchDelete">批量删除</el-button>
            <el-button v-if="isDepartment && currentChangeRow && isOperation" size="small" type="primary"
              @click="addTrainingPlan('add')">新增</el-button>
          </div>
        </div>
        <lims-table :tableData="inDetailPlanTableData" :column="inDetailPlanColumn"
                    :height="isDepartment ? '40vh' : '62vh' "
                    :isSelection="true" :handleSelectionChange="handleSelectionChange"
                    @pagination="pagination1"
                    :page="inDetailPagination" :tableLoading="yearDetailLoading"></lims-table>
          :height="isDepartment ? '40vh' : '62vh'" :isSelection="true" :handleSelectionChange="handleSelectionChange"
          @pagination="pagination1" :page="inDetailPagination" :tableLoading="yearDetailLoading"></lims-table>
      </div>
    </div>
    <Add ref="addPlan" :currentChangeRow="currentChangeRow" @search="getInDetailPlan(currentRowId, departId)"></Add>
    <Edit
      v-if="editPlanShow"
      ref="editPlan"
      :currentRow="currentRow"
      @del="getInDetailPlan(currentRowId, departId)"
      @goBack="goBack"
    ></Edit>
    <Edit v-if="editPlanShow" ref="editPlan" :currentRow="currentRow" @del="getInDetailPlan(currentRowId, departId)"
      @goBack="goBack"></Edit>
    <el-dialog :visible.sync="reviewDialog" title="审核" width="30%" @close="auditRemarks = ''">
      <span>
        å®¡æ ¸å¤‡æ³¨ï¼š
@@ -69,8 +62,7 @@
      </span>
      <span style="margin-top: 10px;display: inline-block">
        æ‰¹å‡†äººï¼š
        <el-select v-model="approverId" clearable
                   filterable size="small" style="width: 70%;">
        <el-select v-model="approverId" clearable filterable size="small" style="width: 70%;">
          <el-option v-for="item in responsibleOptions" :key="item.id" :label="item.name" :value="item.id">
          </el-option>
        </el-select>
@@ -93,29 +85,22 @@
    <el-dialog :visible.sync="uploadDia" title="数据导入" width="500px">
      <div style="display: flex;align-items: center;">
        <div style="width: 70px">年份:</div>
        <el-date-picker
          v-model="planYear"
          type="year"
          value-format="yyyy"
          clearable
          size="small"
          format="yyyy"
        <el-date-picker v-model="planYear" type="year" value-format="yyyy" clearable size="small" format="yyyy"
          placeholder="选择年">
        </el-date-picker>
      </div>
      <div style="display: flex;align-items: center;margin: 10px 0">
        <div style="width: 70px">审核人:</div>
        <el-select v-model="reviewerId" clearable
                   filterable size="small" style="width: 50%;">
        <el-select v-model="reviewerId" clearable filterable size="small" style="width: 50%;">
          <el-option v-for="item in responsibleOptions" :key="item.id" :label="item.name" :value="item.id">
          </el-option>
        </el-select>
      </div>
      <div style="margin: 0 auto;">
        <el-upload ref="upload" :action="javaApi + '/personTraining/personTrainingImport' + '?planYear=' + planYear + '&reviewerId=' + reviewerId"
                   :auto-upload="false" :before-upload="beforeUpload" :file-list="fileList" :headers="uploadHeader"
                   :limit="1" :on-error="onError" :on-success="onSuccess" accept=".xlsx" drag
                   name="file">
        <el-upload ref="upload"
          :action="javaApi + '/personTraining/personTrainingImport' + '?planYear=' + planYear + '&reviewerId=' + reviewerId"
          :auto-upload="false" :before-upload="beforeUpload" :file-list="fileList" :headers="uploadHeader" :limit="1"
          :on-error="onError" :on-success="onSuccess" accept=".xlsx" drag name="file">
          <i class="el-icon-upload"></i>
          <div class="el-upload__text">将文件拖到此处,或<em>点击上传</em></div>
        </el-upload>
@@ -636,7 +621,6 @@
        this.outLoading = false
        const blob = new Blob([res],{ type: 'application/msword' });
        this.$download.saveAs(blob, row.fileName + '.docx')
        this.$message.success('导出成功')
      })
    },
    // å¹´åº¦è®¡åˆ’-导入
@@ -696,7 +680,6 @@
        this.outLoading = false
        const blob = new Blob([res],{ type: 'application/msword' });
        this.$download.saveAs(blob, '人员培训与考核记录.docx')
        this.$message.success('导出成功')
      })
    },
    // å¹´åº¦è®¡åˆ’明细表-多选
@@ -776,10 +759,12 @@
  overflow: auto;
  justify-content: space-between;
}
.search {
  width: 150px;
  margin: 0 16px;
}
.title {
  position: relative;
  font-size: 16px;
src/views/CNAS/personnel/personnelInfo/tabs/reward-punishment-record.vue
@@ -5,23 +5,13 @@
      <div style="display: flex;justify-content: space-between;">
        <el-form :model="search" ref="page" size="small" :inline="true">
          <el-form-item label="姓名">
            <el-input v-model="search.userName" clearable placeholder="请输入关键字" size="small" style="width: 20vh;"></el-input>
            <el-input v-model="search.userName" clearable placeholder="请输入关键字" size="small"
              style="width: 20vh;"></el-input>
          </el-form-item>
          <el-form-item label="奖惩日期">
            <el-date-picker
              v-model="search.searchTimeList"
              :picker-options="pickerOptions"
              align="right"
              clearable
              end-placeholder="结束日期"
              format="yyyy-MM-dd"
              range-separator="至"
              size="small"
              start-placeholder="开始日期"
              style="width: 100%"
              type="daterange"
              unlink-panels
              value-format="yyyy-MM-dd 00:00:00">
            <el-date-picker v-model="search.searchTimeList" :picker-options="pickerOptions" align="right" clearable
              end-placeholder="结束日期" format="yyyy-MM-dd" range-separator="至" size="small" start-placeholder="开始日期"
              style="width: 100%" type="daterange" unlink-panels value-format="yyyy-MM-dd 00:00:00">
            </el-date-picker>
          </el-form-item>
          <el-form-item>
@@ -64,20 +54,12 @@
          </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"
                     background
                     style="margin-top: 10px"
                     @size-change="handleSizeChange"
                     @current-change="handleCurrentChange">
      <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" background style="margin-top: 10px"
        @size-change="handleSizeChange" @current-change="handleCurrentChange">
      </el-pagination>
    </div>
    <el-dialog
      :visible.sync="dialogVisible"
      title="奖惩记录"
      width="50%"
      @open="getUserList">
    <el-dialog :visible.sync="dialogVisible" title="奖惩记录" width="50%" @open="getUserList">
      <div style="height: 40vh">
        <el-form ref="form" :model="form" :rules="rules" label-width="120px">
          <el-col :span="12">
@@ -106,14 +88,8 @@
          </el-col>
          <el-col :span="12">
            <el-form-item label="奖惩时间" prop="rewardPunishTime">
              <el-date-picker
                v-model="form.rewardPunishTime"
                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 v-model="form.rewardPunishTime" 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>
            </el-form-item>
          </el-col>
@@ -272,7 +248,6 @@
          type: 'application/force-download'
        })
        this.$download.saveAs(blob, '奖惩记录.xlsx')
        this.$message.success('导出成功')
      })
    },
    // èŽ·å–è´Ÿè´£äººä¿¡æ¯æŽ¥å£
src/views/CNAS/process/demand/index.vue
@@ -57,28 +57,26 @@
            <el-button size="mini" type="text" @click="handleLook(scope.row)">查看</el-button>
            <el-button size="mini" style="color:#F56C6C" type="text" @click="deleteOrder(scope.row)">删除</el-button>
            <el-button size="mini" type="text" @click="openDownloadDia(scope.row)">下载</el-button>
            <el-upload ref='upload'
                       :action="action"
                       :data="{inspectionOrderId: scope.row.inspectionOrderId}" :headers="uploadHeader"
                       :on-error="onError" :on-success="handleSuccessUp" :show-file-list="false" accept='image/jpg,image/jpeg,image/png,application/pdf,.doc,.docx,.xlsx'
                       name="file" style="background: transparent;display: inline;margin-left: 4px">
            <el-upload ref='upload' :action="action" :data="{ inspectionOrderId: scope.row.inspectionOrderId }"
              :headers="uploadHeader" :on-error="onError" :on-success="handleSuccessUp" :show-file-list="false"
              accept='image/jpg,image/jpeg,image/png,application/pdf,.doc,.docx,.xlsx' name="file"
              style="background: transparent;display: inline;margin-left: 4px">
              <span style="color: #409EFF">上传</span>
            </el-upload>
          </template>
        </el-table-column>
      </el-table>
      <el-pagination :current-page="1" :page-size="pages.size" :page-sizes="[10, 20, 30, 50, 100]"
                     :total="total1" layout="->,total, sizes, prev, pager, next"
                     style="margin-top: 10px" background
                     @size-change="handleSizeChange1" @current-change="handleCurrentChange1">
      <el-pagination :current-page="1" :page-size="pages.size" :page-sizes="[10, 20, 30, 50, 100]" :total="total1"
        layout="->,total, sizes, prev, pager, next" style="margin-top: 10px" background @size-change="handleSizeChange1"
        @current-change="handleCurrentChange1">
      </el-pagination>
    </div>
    <el-dialog
      :close-on-click-modal="false" :close-on-press-escape="false"
      :visible.sync="orderRowsVisible" title="新增检验任务单" width="1000px">
    <el-dialog :close-on-click-modal="false" :close-on-press-escape="false" :visible.sync="orderRowsVisible"
      title="新增检验任务单" width="1000px">
      <div style="display: flex; align-items: center;margin-bottom: 10px">
        <span style="width: 80px">委托编号:</span>
        <el-input v-model="entity.entrustCode" clearable size="small" style="width: 300px;margin-right: 10px"></el-input>
        <el-input v-model="entity.entrustCode" clearable size="small"
          style="width: 300px;margin-right: 10px"></el-input>
        <el-button size="small" type="primary" @click="searchTableData">查询</el-button>
        <el-button size="small" @click="refreshTableData">重 ç½®</el-button>
      </div>
@@ -92,15 +90,12 @@
          </template>
        </el-table-column>
      </el-table>
      <el-pagination :current-page="1" :page-size="tableSearch.size" :page-sizes="[10, 20, 30, 50, 100]"
                     :total="total" layout="->,total, sizes, prev, pager, next"
                     style="margin-top: 10px" background
                     @size-change="handleSizeChange" @current-change="handleCurrentChange">
      <el-pagination :current-page="1" :page-size="tableSearch.size" :page-sizes="[10, 20, 30, 50, 100]" :total="total"
        layout="->,total, sizes, prev, pager, next" style="margin-top: 10px" background @size-change="handleSizeChange"
        @current-change="handleCurrentChange">
      </el-pagination>
    </el-dialog>
    <el-dialog
      :class="{downPdf:title=='下载'}" :close-on-click-modal="false"
      :close-on-press-escape="false"
    <el-dialog :class="{ downPdf: title == '下载' }" :close-on-click-modal="false" :close-on-press-escape="false"
      :modal="title!='下载'" :title="title" :visible.sync="detailDialogVisible" top="20px" width="1200px">
      <div style="max-height: 75vh;overflow-y: auto;">
        <div id="dialogBody">
@@ -132,27 +127,23 @@
            <span style="width: 100px">委托编号:</span>
            <el-input v-model="currentInfo.entrustCode" clearable size="small"></el-input>
          </p>
          <p v-if="operationType === 'view'"  style="margin-top: 16px;margin-left: 600px;">委托编号:{{ currentInfo.entrustCode }}</p>
          <p v-if="operationType === 'view'" style="margin-top: 16px;margin-left: 600px;">委托编号:{{
            currentInfo.entrustCode }}
          </p>
          <table border="1" cellpadding="10" class="tables">
            <tr>
              <td colspan="2">
                <p>试样名称</p>
              </td>
              <td v-if="operationType !== 'view'"><el-input v-model="currentInfo.sampleName" clearable size="small"></el-input></td>
              <td v-if="operationType !== 'view'"><el-input v-model="currentInfo.sampleName" clearable
                  size="small"></el-input></td>
              <td v-if="operationType === 'view'">{{ currentInfo.sampleName }}</td>
              <td>
                <p>委托时间</p>
              </td>
              <td v-if="operationType !== 'view'">
                <el-date-picker
                  v-model="currentInfo.commissionDate"
                  clearable
                  format="yyyy-MM-dd"
                  placeholder="选择日期"
                  size="small"
                  style="width: 100%"
                  type="date"
                  value-format="yyyy-MM-dd">
                <el-date-picker v-model="currentInfo.commissionDate" clearable format="yyyy-MM-dd" placeholder="选择日期"
                  size="small" style="width: 100%" type="date" value-format="yyyy-MM-dd">
                </el-date-picker>
              </td>
              <td v-if="operationType === 'view'">{{ currentInfo.commissionDate }}</td>
@@ -161,37 +152,46 @@
              <td colspan="2">
                <p>型 å·</p>
              </td>
              <td v-if="operationType !== 'view'"><el-input v-model="currentInfo.modelNo" clearable size="small"></el-input></td>
              <td v-if="operationType !== 'view'"><el-input v-model="currentInfo.modelNo" clearable
                  size="small"></el-input>
              </td>
              <td v-if="operationType === 'view'">{{ currentInfo.modelNo }}</td>
              <td>
                <p>委托单位</p>
              </td>
              <td v-if="operationType !== 'view'"><el-input v-model="currentInfo.commissionUnit" clearable size="small"></el-input></td>
              <td v-if="operationType !== 'view'"><el-input v-model="currentInfo.commissionUnit" clearable
                  size="small"></el-input></td>
              <td v-if="operationType === 'view'">{{ currentInfo.commissionUnit }}</td>
            </tr>
            <tr>
              <td colspan="2">
                <p>生产单位</p>
              </td>
              <td v-if="operationType !== 'view'"><el-input v-model="currentInfo.production" clearable size="small"></el-input></td>
              <td v-if="operationType !== 'view'"><el-input v-model="currentInfo.production" clearable
                  size="small"></el-input></td>
              <td v-if="operationType === 'view'">{{ currentInfo.production }}</td>
              <td>
                <p>委托人</p>
              </td>
              <td v-if="operationType !== 'view'"><el-input v-model="currentInfo.commissionUser" clearable size="small"></el-input></td>
              <td v-if="operationType !== 'view'"><el-input v-model="currentInfo.commissionUser" clearable
                  size="small"></el-input></td>
              <td v-if="operationType === 'view'">{{ currentInfo.commissionUser }}</td>
            </tr>
            <tr>
              <td colspan="2">
                <p>样品数量</p>
              </td>
              <td v-if="operationType !== 'view'"><el-input v-model="currentInfo.quantity" clearable size="small"></el-input></td>
              <td v-if="operationType !== 'view'"><el-input v-model="currentInfo.quantity" clearable
                  size="small"></el-input></td>
              <td v-if="operationType === 'view'">{{ currentInfo.quantity }}</td>
              <td>
                <p>样品状态</p>
              </td>
              <td v-if="operationType !== 'view'"><el-input v-model="currentInfo.sampleStatus" clearable size="small"></el-input></td>
              <td v-if="operationType === 'view'">{{ insStateList.find(m=>m.value==currentInfo.sampleStatus)?insStateList.find(m=>m.value==currentInfo.sampleStatus).label:'/' }}</td>
              <td v-if="operationType !== 'view'"><el-input v-model="currentInfo.sampleStatus" clearable
                  size="small"></el-input></td>
              <td v-if="operationType === 'view'">{{
                insStateList.find(m => m.value == currentInfo.sampleStatus) ? insStateList.find(m => m.value == currentInfo.sampleStatus).label:'/'
                }}</td>
            </tr>
            <tr>
              <td colspan="2">
@@ -226,15 +226,8 @@
                <p>约定完成时间(报告日期)</p>
              </td>
              <td v-if="operationType !== 'view'">
                <el-date-picker
                  v-model="currentInfo.appointed"
                  clearable
                  format="yyyy-MM-dd"
                  placeholder="选择日期"
                  size="small"
                  style="width: 100%"
                  type="date"
                  value-format="yyyy-MM-dd">
                <el-date-picker v-model="currentInfo.appointed" clearable format="yyyy-MM-dd" placeholder="选择日期"
                  size="small" style="width: 100%" type="date" value-format="yyyy-MM-dd">
                </el-date-picker>
              </td>
              <td v-if="operationType === 'view'">{{ currentInfo.appointed }}</td>
@@ -252,7 +245,8 @@
                <span v-else>其他</span>
              </td>
            </tr>
            <el-button size="small" type="primary" @click="addOrderDetailList" v-if="operationType !== 'view'">添加</el-button>
            <el-button size="small" type="primary" @click="addOrderDetailList"
              v-if="operationType !== 'view'">添加</el-button>
            <tr>
              <td>
                <p>序号</p>
@@ -272,13 +266,19 @@
            </tr>
            <tr v-for="(item,index) in currentInfo.orderDetailList" :key="index" >
              <td>{{ index+1 }}</td>
              <td v-if="operationType !== 'view'"><el-input v-model="item.sampleNumber" clearable size="small"></el-input></td>
              <td v-if="operationType !== 'view'"><el-input v-model="item.sampleNumber" clearable
                  size="small"></el-input>
              </td>
              <td v-if="operationType === 'view'">{{ item.sampleNumber }}</td>
              <td v-if="operationType !== 'view'"><el-input v-model="item.testItem" clearable size="small"></el-input></td>
              <td v-if="operationType !== 'view'"><el-input v-model="item.testItem" clearable size="small"></el-input>
              </td>
              <td v-if="operationType === 'view'">{{ item.testItem }}</td>
              <td v-if="operationType !== 'view'"><el-input v-model="item.testStandard" clearable size="small"></el-input></td>
              <td v-if="operationType !== 'view'"><el-input v-model="item.testStandard" clearable
                  size="small"></el-input>
              </td>
              <td v-if="operationType === 'view'">{{ item.testStandard }}</td>
              <td v-if="operationType !== 'view'"><el-input v-model="item.remark" clearable size="small"></el-input></td>
              <td v-if="operationType !== 'view'"><el-input v-model="item.remark" clearable size="small"></el-input>
              </td>
              <td v-if="operationType === 'view'">{{ item.remark }}</td>
            </tr>
            <tr>
@@ -290,7 +290,8 @@
                  <el-radio :label="0">不考虑不确定度</el-radio>
                  <el-radio :label="1">考虑不确定度</el-radio>
                </el-radio-group>
                <span v-if="currentInfo.criterionRule === 1"><el-input v-model="currentInfo.criterionRuleRemark" clearable size="small" style="width: 60px"></el-input>%</span>
                <span v-if="currentInfo.criterionRule === 1"><el-input v-model="currentInfo.criterionRuleRemark"
                    clearable size="small" style="width: 60px"></el-input>%</span>
              </td>
              <td v-if="operationType === 'view'" colspan="3">
                <span v-if="currentInfo.criterionRule===0">不考虑不确定度</span>
@@ -302,7 +303,8 @@
              <td colspan="2">
                <p>委托人签名</p>
              </td>
              <td v-if="operationType !== 'view'"><el-input v-model="currentInfo.commissionUser" clearable size="small"></el-input></td>
              <td v-if="operationType !== 'view'"><el-input v-model="currentInfo.commissionUser" clearable
                  size="small"></el-input></td>
              <td v-if="operationType === 'view'">
                {{currentInfo.commissionUser}}
              </td>
@@ -310,15 +312,8 @@
                <p>委托日期</p>
              </td>
              <td v-if="operationType !== 'view'">
                <el-date-picker
                  v-model="currentInfo.commissionDate"
                  clearable
                  format="yyyy-MM-dd"
                  placeholder="选择日期"
                  size="small"
                  style="width: 100%"
                  type="date"
                  value-format="yyyy-MM-dd">
                <el-date-picker v-model="currentInfo.commissionDate" clearable format="yyyy-MM-dd" placeholder="选择日期"
                  size="small" style="width: 100%" type="date" value-format="yyyy-MM-dd">
                </el-date-picker>
              </td>
              <td v-if="operationType === 'view'">{{ currentInfo.commissionDate }}</td>
@@ -327,28 +322,23 @@
              <td colspan="2">
                <p>委托人联系电话</p>
              </td>
              <td v-if="operationType !== 'view'" colspan="3"><el-input v-model="currentInfo.commissionPhone" clearable size="small"></el-input></td>
              <td v-if="operationType !== 'view'" colspan="3"><el-input v-model="currentInfo.commissionPhone" clearable
                  size="small"></el-input></td>
              <td v-if="operationType === 'view'" colspan="3">{{ currentInfo.commissionPhone }}</td>
            </tr>
            <tr>
              <td colspan="2">
                <p>综合室签名</p>
              </td>
              <td v-if="operationType !== 'view'"><el-input v-model="currentInfo.generalOfficeUser" clearable size="small"></el-input></td>
              <td v-if="operationType !== 'view'"><el-input v-model="currentInfo.generalOfficeUser" clearable
                  size="small"></el-input></td>
              <td v-if="operationType === 'view'">{{currentInfo.generalOfficeUser}}</td>
              <td>
                <p>接收日期</p>
              </td>
              <td v-if="operationType !== 'view'">
                <el-date-picker
                  v-model="currentInfo.receiptData"
                  clearable
                  format="yyyy-MM-dd"
                  placeholder="选择日期"
                  size="small"
                  style="width: 100%"
                  type="date"
                  value-format="yyyy-MM-dd">
                <el-date-picker v-model="currentInfo.receiptData" clearable format="yyyy-MM-dd" placeholder="选择日期"
                  size="small" style="width: 100%" type="date" value-format="yyyy-MM-dd">
                </el-date-picker>
              </td>
              <td v-if="operationType === 'view'">{{ currentInfo.receiptData }}</td>
@@ -357,21 +347,15 @@
              <td colspan="2">
                <p>领样员签名</p>
              </td>
              <td v-if="operationType !== 'view'"><el-input v-model="currentInfo.sampleTakerUser" clearable size="small"></el-input></td>
              <td v-if="operationType !== 'view'"><el-input v-model="currentInfo.sampleTakerUser" clearable
                  size="small"></el-input></td>
              <td v-if="operationType === 'view'">{{ currentInfo.sampleTakerUser }}</td>
              <td>
                <p>领样日期</p>
              </td>
              <td v-if="operationType !== 'view'">
                <el-date-picker
                  v-model="currentInfo.sampleData"
                  clearable
                  format="yyyy-MM-dd"
                  placeholder="选择日期"
                  size="small"
                  style="width: 100%"
                  type="date"
                  value-format="yyyy-MM-dd">
                <el-date-picker v-model="currentInfo.sampleData" clearable format="yyyy-MM-dd" placeholder="选择日期"
                  size="small" style="width: 100%" type="date" value-format="yyyy-MM-dd">
                </el-date-picker>
              </td>
              <td v-if="operationType === 'view'">{{ currentInfo.sampleData }}</td>
@@ -400,8 +384,10 @@
      </div>
      <span v-if="operationType !== 'view'" slot="footer" class="dialog-footer">
        <el-button @click="detailDialogVisible = false">取 æ¶ˆ</el-button>
        <el-button v-if="operationType === 'add'" :loading="buttonLoading" type="primary" @click="handleAdd">ç¡® å®š</el-button>
        <el-button v-if="operationType === 'edit'" :loading="buttonLoading" type="primary" @click="handleEdit">ç¡® å®š</el-button>
        <el-button v-if="operationType === 'add'" :loading="buttonLoading" type="primary" @click="handleAdd">ç¡®
          å®š</el-button>
        <el-button v-if="operationType === 'edit'" :loading="buttonLoading" type="primary" @click="handleEdit">ç¡®
          å®š</el-button>
      </span>
    </el-dialog>
    <el-dialog :visible.sync="downloadDialog" title="下载" width="600px">
@@ -689,7 +675,6 @@
        this.outLoading = false;
        const blob = new Blob([res], { type: 'application/octet-stream' });
        this.$download.saveAs(blob, '检验委托单.docx')
        this.$message.success('导出成功');
      }).catch(err => {
        this.outLoading = false;
@@ -733,5 +718,4 @@
}
</script>
<style scoped>
</style>
<style scoped></style>
src/views/CNAS/process/ensureResults/ensureResultsValidity/index.vue
@@ -5,8 +5,7 @@
      <div style="display: flex;justify-content: space-between;">
        <el-form :model="yearForm" ref="yearForm" size="small" :inline="true">
          <el-form-item label="计划名称" prop="monitorName">
            <el-input size="small" placeholder="请输入" clearable
                      v-model="yearForm.monitorName"
            <el-input size="small" placeholder="请输入" clearable v-model="yearForm.monitorName"
                      @keyup.enter.native="getYearPlanList"></el-input>
          </el-form-item>
          <el-form-item>
@@ -19,8 +18,7 @@
        </div>
      </div>
      <lims-table :tableData="yearTableData" :column="yearColumnData" :page="yearPage" :tableLoading="yearLoading"
                  height="40vh" @pagination="pagination" :rowClick="rowClick"
                  key="yearTableData"></lims-table>
        height="40vh" @pagination="pagination" :rowClick="rowClick" key="yearTableData"></lims-table>
    </div>
    <div style="margin-top: 20px">
      <div style="display: flex;justify-content: space-between;">
@@ -40,14 +38,16 @@
          <el-button size="small" type="primary" @click="showDialog('add')">新增</el-button>
        </div>
      </div>
      <lims-table :tableData="yearDetailTableData" :column="yearDetailColumnData" :page="yearDetailPage" :tableLoading="yearDetailLoading"
                  height="40vh" @pagination="pagination1"
      <lims-table :tableData="yearDetailTableData" :column="yearDetailColumnData" :page="yearDetailPage"
        :tableLoading="yearDetailLoading" height="40vh" @pagination="pagination1"
                  key="yearDetailTableData"></lims-table>
    </div>
    <!--新增修改弹框-->
    <detail-form-dialog v-if="formDia" ref="formDia" :qualityMonitorId="qualityMonitorId" @closeDia="closeDia"></detail-form-dialog>
    <detail-form-dialog v-if="formDia" ref="formDia" :qualityMonitorId="qualityMonitorId"
      @closeDia="closeDia"></detail-form-dialog>
    <!--实施流程弹框-->
    <carry-out-dialog v-if="carryOutDia" ref="carryOutDia" :qualityMonitorId="qualityMonitorId" @closeDia="closeCarryOutDia"></carry-out-dialog>
    <carry-out-dialog v-if="carryOutDia" ref="carryOutDia" :qualityMonitorId="qualityMonitorId"
      @closeDia="closeCarryOutDia"></carry-out-dialog>
    <!--评价流程弹框-->
    <evaluate-dialog v-if="evaluateDialog" ref="evaluateDialog" @closeEvaDia="closeEvaDia"></evaluate-dialog>
    <el-dialog :visible.sync="examineDialog" title="审核" width="30%" @close="closeExamineDia">
@@ -57,8 +57,7 @@
      </span>
      <span style="margin-top: 10px;display: inline-block">
        æ‰¹å‡†äººï¼š
        <el-select v-model="examineInfo.ratifyUserId" clearable
                   filterable size="small" style="width: 70%;">
        <el-select v-model="examineInfo.ratifyUserId" clearable filterable size="small" style="width: 70%;">
          <el-option v-for="item in responsibleOptions" :key="item.id" :label="item.name" :value="item.id">
          </el-option>
        </el-select>
@@ -79,10 +78,7 @@
      </span>
    </el-dialog>
    <!--预览报告-->
    <el-dialog
      :visible.sync="lookDialogVisible"
      fullscreen
      title="查看附件" top="5vh" width="800px">
    <el-dialog :visible.sync="lookDialogVisible" fullscreen title="查看附件" top="5vh" width="800px">
      <filePreview v-if="lookDialogVisible" :currentFile="{}"
                   :fileUrl="javaApi+'/word/' + currentInfo.finishReportUrl" style="height: 70vh;overflow-y: auto;"/>
      <div>
@@ -101,42 +97,36 @@
    </el-dialog>
    <el-dialog :visible.sync="downloadDialog" title="导出" width="600px">
      <span>
        <el-button plain type="primary" :disabled="!download.qualityMonitorDetailsId" @click="controlDown">实施计划导出</el-button>
        <el-button plain type="primary" :disabled="!download.qualityMonitorDetailsId" @click="processingDown">评价导出</el-button>
        <el-button plain type="primary" :disabled="!download.qualityMonitorDetailsId"
          @click="controlDown">实施计划导出</el-button>
        <el-button plain type="primary" :disabled="!download.qualityMonitorDetailsId"
          @click="processingDown">评价导出</el-button>
      </span>
      <span slot="footer" class="dialog-footer">
        <el-button @click="downloadDialog = false">取 æ¶ˆ</el-button>
      </span>
    </el-dialog>
    <!--导入计划-->
    <el-dialog :visible.sync="uploadDia" title="数据导入" width="500px" :close-on-click-modal="false" :close-on-press-escape="false">
    <el-dialog :visible.sync="uploadDia" title="数据导入" width="500px" :close-on-click-modal="false"
      :close-on-press-escape="false">
      <div style="display: flex; align-items: center;">
        <span style="width: 60px">年份:</span>
        <el-date-picker
          v-model="planYear"
          type="year"
          value-format="yyyy"
          clearable
          size="small"
          format="yyyy"
        <el-date-picker v-model="planYear" type="year" value-format="yyyy" clearable size="small" format="yyyy"
          placeholder="选择年">
        </el-date-picker>
      </div>
      <div style="display: flex;align-items: center;margin: 10px 0">
        <div style="width: 60px">审核人:</div>
        <el-select v-model="examineUserId" clearable
                   filterable size="small" style="width: 50%;">
        <el-select v-model="examineUserId" clearable filterable size="small" style="width: 50%;">
          <el-option v-for="item in responsibleOptions" :key="item.id" :label="item.name" :value="item.id">
          </el-option>
        </el-select>
      </div>
      <div style="margin: 0 auto;">
        <el-upload ref="upload" :action="action" :auto-upload="false" :file-list="fileList"
                   :headers="uploadHeader" :limit="1"
                   accept='.jpg,.jpeg,.png,.gif,.doc,.docx,.xls,.xlsx,.ppt,.pptx,.pdf,.zip,.rar'
        <el-upload ref="upload" :action="action" :auto-upload="false" :file-list="fileList" :headers="uploadHeader"
          :limit="1" accept='.jpg,.jpeg,.png,.gif,.doc,.docx,.xls,.xlsx,.ppt,.pptx,.pdf,.zip,.rar'
                   :on-change="beforeUpload" :on-error="onError" :on-success="handleSuccessUp" drag
                   :data="{planYear: planYear, examineUserId: examineUserId}"
                   name="file">
          :data="{ planYear: planYear, examineUserId: examineUserId }" name="file">
          <i class="el-icon-upload"></i>
          <div class="el-upload__text">将文件拖到此处,或<em>点击上传</em></div>
        </el-upload>
@@ -153,10 +143,9 @@
        <el-input v-model="ratifyRemark" :disabled="this.ratifyStatus === 1" type="textarea"></el-input>
      </div>
      <div style="margin: 0 auto;">
        <el-upload ref="upload1" :action="action1" :auto-upload="false" :data="{qualityMonitorDetailsId: qualityMonitorDetailsId}" :file-list="fileList1" :headers="uploadHeader"
                   :limit="1"
                   :on-change="beforeUpload1" :on-error="onError1" :on-success="onSuccess1" accept='.doc,.docx'
                   drag
        <el-upload ref="upload1" :action="action1" :auto-upload="false"
          :data="{ qualityMonitorDetailsId: qualityMonitorDetailsId }" :file-list="fileList1" :headers="uploadHeader"
          :limit="1" :on-change="beforeUpload1" :on-error="onError1" :on-success="onSuccess1" accept='.doc,.docx' drag
                   name="file">
          <i class="el-icon-upload"></i>
          <div class="el-upload__text">将文件拖到此处,或<em>点击上传</em></div>
@@ -629,7 +618,6 @@
        this.outLoading = false
        const blob = new Blob([res],{ type: 'application/msword' });
        this.$download.saveAs(blob, row.monitorName + '.docx')
        this.$message.success('导出成功')
      })
    },
    // åˆ é™¤è¿›åº¦è®¡åˆ’表
@@ -777,7 +765,6 @@
        this.outLoading = false
        const blob = new Blob([res], { type: 'application/msword' });
        this.$download.saveAs(blob, '质量监控实施计划.docx')
        this.$message.success('导出成功')
      })
    },
    // å¤„理单导出
@@ -786,7 +773,6 @@
        this.outLoading = false
        const blob = new Blob([res], { type: 'application/msword' });
        this.$download.saveAs(blob, '质量监控评价.docx')
        this.$message.success('导出成功')
      })
    },
    delYearPlanDetail (row) {
@@ -829,6 +815,4 @@
};
</script>
<style scoped>
</style>
<style scoped></style>
src/views/CNAS/process/ensureResults/qualityControlPlan/index.vue
@@ -5,8 +5,7 @@
      <div style="display: flex;justify-content: space-between;">
        <el-form :model="yearForm" ref="yearForm" size="small" :inline="true">
          <el-form-item label="计划名称" prop="superviseName">
            <el-input size="small" placeholder="请输入" clearable
                      v-model="yearForm.superviseName"
            <el-input size="small" placeholder="请输入" clearable v-model="yearForm.superviseName"
                      @keyup.enter.native="getYearPlanList"></el-input>
          </el-form-item>
          <el-form-item>
@@ -19,8 +18,7 @@
        </div>
      </div>
      <lims-table :tableData="yearTableData" :column="yearColumnData" :page="yearPage" :tableLoading="yearLoading"
                  height="40vh" @pagination="pagination" :rowClick="rowClick"
                  key="yearTableData"></lims-table>
        height="40vh" @pagination="pagination" :rowClick="rowClick" key="yearTableData"></lims-table>
    </div>
    <div style="margin-top: 20px">
      <div style="display: flex;justify-content: space-between;">
@@ -46,18 +44,22 @@
          <el-button size="small" type="primary" @click="showDialog('add')">新增</el-button>
        </div>
      </div>
      <lims-table :tableData="yearDetailTableData" :column="yearDetailColumnData" :page="yearDetailPage" :tableLoading="yearDetailLoading"
                  height="40vh" @pagination="pagination1"
      <lims-table :tableData="yearDetailTableData" :column="yearDetailColumnData" :page="yearDetailPage"
        :tableLoading="yearDetailLoading" height="40vh" @pagination="pagination1"
                  key="yearDetailTableData"></lims-table>
    </div>
    <!--新增修改弹框-->
    <detail-form-dialog v-if="formDia" ref="formDia" :superviseId="superviseId" @closeDia="closeDia"></detail-form-dialog>
    <detail-form-dialog v-if="formDia" ref="formDia" :superviseId="superviseId"
      @closeDia="closeDia"></detail-form-dialog>
    <!--记录流程弹框-->
    <records-dialog v-if="recordsDia" ref="recordsDia" :superviseId="superviseId" @closeRecordsDia="closeRecordsDia"></records-dialog>
    <records-dialog v-if="recordsDia" ref="recordsDia" :superviseId="superviseId"
      @closeRecordsDia="closeRecordsDia"></records-dialog>
    <!--不符合处理流程弹框-->
    <processing-sheet v-if="processingDia" ref="processingDia" :superviseId="superviseId" @closeProcessingDia="closeProcessingDia"></processing-sheet>
    <processing-sheet v-if="processingDia" ref="processingDia" :superviseId="superviseId"
      @closeProcessingDia="closeProcessingDia"></processing-sheet>
    <!--纠正处理流程弹框-->
    <rectify-dialog-new v-if="rectifyDia" ref="rectifyDia" :superviseId="superviseId" @closeProcessingDia="closeRectifyDia"></rectify-dialog-new>
    <rectify-dialog-new v-if="rectifyDia" ref="rectifyDia" :superviseId="superviseId"
      @closeProcessingDia="closeRectifyDia"></rectify-dialog-new>
    <el-dialog :visible.sync="ratifyDialog" title="批准" width="30%" @close="closeRatifyDia">
      <span>
        æ‰¹å‡†å¤‡æ³¨ï¼š
@@ -68,10 +70,7 @@
        <el-button :loading="ratifyLoading" type="primary" @click="handleRatify(1)">批 å‡†</el-button>
      </span>
    </el-dialog>
    <el-dialog
      :visible.sync="downloadDialog"
      title="导出"
      width="600px">
    <el-dialog :visible.sync="downloadDialog" title="导出" width="600px">
          <span>
            <el-button plain type="primary" @click="controlDown">记录单导出</el-button>
            <el-button plain type="primary" @click="processingDown">处理单导出</el-button>
@@ -82,37 +81,29 @@
          </span>
    </el-dialog>
    <!--导入计划-->
    <el-dialog :visible.sync="uploadDia" title="数据导入" width="500px"
               :close-on-click-modal="false" :close-on-press-escape="false">
    <el-dialog :visible.sync="uploadDia" title="数据导入" width="500px" :close-on-click-modal="false"
      :close-on-press-escape="false">
      <div style="display: flex; align-items: center;">
        <span style="width: 80px">年份:</span>
        <el-date-picker
          v-model="superviseYear"
          type="year"
          value-format="yyyy"
          clearable
          size="small"
          format="yyyy"
        <el-date-picker v-model="superviseYear" type="year" value-format="yyyy" clearable size="small" format="yyyy"
          placeholder="选择年">
        </el-date-picker>
        <span  style="width: 110px">监督员:</span>
        <el-select v-model="recordUserIds" placeholder="请选择" size="small"
                   @change="splitList"
                   :multiple-limit="2" filterable multiple style="width: 100%">
        <el-select v-model="recordUserIds" placeholder="请选择" size="small" @change="splitList" :multiple-limit="2"
          filterable multiple style="width: 100%">
          <el-option v-for="item in userList" :key="item.id" :label="item.name" :value="item.id"></el-option>
        </el-select>
      </div>
      <div style="display: flex;align-items: center;margin: 10px 0">
        <div style="width: 60px">批准人:</div>
        <el-select v-model="ratifyUserId" clearable
                   filterable size="small" style="width: 50%;">
        <el-select v-model="ratifyUserId" clearable filterable size="small" style="width: 50%;">
          <el-option v-for="item in userList" :key="item.id" :label="item.name" :value="item.id">
          </el-option>
        </el-select>
      </div>
      <div style="margin: 0 auto;">
        <el-upload ref="upload1" :action="action" :auto-upload="false" :file-list="fileList" :headers="uploadHeader" :limit="1"
                   accept='.jpg,.jpeg,.png,.gif,.doc,.docx,.xls,.xlsx,.ppt,.pptx,.pdf,.zip,.rar'
        <el-upload ref="upload1" :action="action" :auto-upload="false" :file-list="fileList" :headers="uploadHeader"
          :limit="1" accept='.jpg,.jpeg,.png,.gif,.doc,.docx,.xls,.xlsx,.ppt,.pptx,.pdf,.zip,.rar'
                   :on-change="beforeUpload" :on-error="onError" :on-success="handleSuccessUp" drag
                   :data="{recordUserIds: recordUserIds1, superviseYear: superviseYear, ratifyUserId: ratifyUserId}"
                   name="file">
@@ -516,7 +507,6 @@
          this.outLoading = false
          const blob = new Blob([res],{ type: 'application/msword' });
          this.$download.saveAs(blob, row.superviseName + '.docx')
          this.$message.success('导出成功')
        } catch (error) {
          console.error('创建Blob对象时出错:', error);
        }
@@ -631,7 +621,6 @@
      exportSuperviseDetailRecord({superviseDetailsId: this.download.superviseDetailsId}).then(res => {
        const blob = new Blob([res], { type: 'application/msword' });
        this.$download.saveAs(blob, '记录导出.docx')
        this.$message.success('导出成功')
      }).catch(err => {
        console.log('err---', err);
      })
@@ -641,7 +630,6 @@
      superviseDetailAccordingExport({superviseDetailsId: this.download.superviseDetailsId}).then(res => {
        const blob = new Blob([res], { type: 'application/msword' });
        this.$download.saveAs(blob, '不符合项导出.docx')
        this.$message.success('导出成功')
      }).catch(err => {
        console.log('err---', err);
      })
@@ -651,7 +639,6 @@
      exportSuperviseDetaillCorrect({superviseDetailsCorrectId: this.download.superviseDetailsCorrectId}).then(res => {
        const blob = new Blob([res], { type: 'application/msword' });
        this.$download.saveAs(blob, '监督纠正措施.docx')
        this.$message.success('导出成功')
      })
    },
    // åˆ é™¤å¹´åº¦è¯¦æƒ…列表
@@ -687,6 +674,7 @@
.table-card {
  background-color: #ffffff;
}
.flex_column {
  display: flex;
  height: 80vh;
src/views/CNAS/process/method/methodVerification/component/formDIa.vue
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,457 @@
<template>
  <div>
    <el-dialog :close-on-click-modal="false" :close-on-press-escape="false"
               :title="operationType === 'edit' ? '编辑' : '新增'"
               :visible.sync="formDia"
               width="90%" @close="closeDia">
      <div v-if="operationType === 'edit'" style="text-align: right">
        <el-button :disabled="form.confirmDate" size="medium" type="primary" @click="validation">验证确认</el-button>
      </div>
      <table border="1" cellspacing="10" class="tables">
        <tr>
          <td>
            <p>标准方法</p>
          </td>
          <td>
            <p>验证原因</p>
          </td>
          <td>
            <p>主要技术变化</p>
          </td>
          <td>
            <p>涉及方面</p>
          </td>
          <td>
            <p>标准要求</p>
          </td>
          <td>
            <p>准备情况</p>
          </td>
          <td>
            <p>是否满足</p>
          </td>
          <td>
            <p>备注</p>
          </td>
        </tr>
        <tr>
          <td rowspan="9">
            <el-input v-model="form.methodName" :rows="6"
                      placeholder="请输入内容"
                      size="small"
                      type="textarea">
            </el-input>
          </td>
          <td rowspan="9">
            <el-input v-model="form.verifyReason" :rows="6"
                      placeholder="请输入内容"
                      size="small"
                      type="textarea">
            </el-input>
          </td>
          <td rowspan="9">
            <el-input v-model="form.technologyChange" :rows="6"
                      placeholder="请输入内容"
                      size="small"
                      type="textarea">
            </el-input>
          </td>
        </tr>
        <tr>
          <td>人:</td>
          <td>
            <el-input v-model="form.personRequirements" size="small" type="textarea"></el-input>
          </td>
          <td>
            <el-input v-model="form.personReadiness" size="small" type="textarea"></el-input>
          </td>
          <td>
            <el-radio-group v-model="form.personIsSatisfied" v-removeAriaHidden>
              <el-radio :label="0">否</el-radio>
              <el-radio :label="1">是</el-radio>
            </el-radio-group>
          </td>
          <td>
            <el-link type="primary" @click="viewWorkPermit">查看上岗证</el-link>
          </td>
        </tr>
        <tr>
          <td>机:</td>
          <td>
            <el-input v-model="form.machineRequirements" size="small" type="textarea"></el-input>
          </td>
          <td>
            <el-input v-model="form.machineReadiness" size="small" type="textarea"></el-input>
          </td>
          <td>
            <el-radio-group v-model="form.machineIsSatisfied" v-removeAriaHidden>
              <el-radio :label="0">否</el-radio>
              <el-radio :label="1">是</el-radio>
            </el-radio-group>
          </td>
          <td>
            <el-link type="primary" @click="viewDevice">查看设备</el-link>
          </td>
        </tr>
        <tr>
          <td>料:</td>
          <td>
            <el-input v-model="form.materialRequirements" size="small" type="textarea"></el-input>
          </td>
          <td>
            <el-input v-model="form.materialReadiness" size="small" type="textarea"></el-input>
          </td>
          <td>
            <el-radio-group v-model="form.materialIsSatisfied" v-removeAriaHidden>
              <el-radio :label="0">否</el-radio>
              <el-radio :label="1">是</el-radio>
            </el-radio-group>
          </td>
          <td>
            <el-input v-model="form.materialRemark" size="small"></el-input>
          </td>
        </tr>
        <tr>
          <td>法:</td>
          <td>
            <el-input v-model="form.methodRequirements" size="small" type="textarea"></el-input>
          </td>
          <td>
            <el-input v-model="form.methodReadiness" size="small" type="textarea"></el-input>
          </td>
          <td>
            <el-radio-group v-model="form.methodIsSatisfied" v-removeAriaHidden>
              <el-radio :label="0">否</el-radio>
              <el-radio :label="1">是</el-radio>
            </el-radio-group>
          </td>
          <td>
            <el-link type="primary" @click="viewTestRecord">查看检测记录</el-link>
          </td>
        </tr>
        <tr>
          <td>环:</td>
          <td>
            <el-input v-model="form.environmentRequirements" size="small" type="textarea"></el-input>
          </td>
          <td>
            <el-input v-model="form.environmentReadiness" size="small" type="textarea"></el-input>
          </td>
          <td>
            <el-radio-group v-model="form.environmentIsSatisfied" v-removeAriaHidden>
              <el-radio :label="0">否</el-radio>
              <el-radio :label="1">是</el-radio>
            </el-radio-group>
          </td>
          <td>
            <el-input v-model="form.traceabilityRemark" size="small"></el-input>
          </td>
        </tr>
        <tr>
          <td>测量溯源性:</td>
          <td>
            <el-input v-model="form.traceabilityRequirements" size="small" type="textarea"></el-input>
          </td>
          <td>
            <el-input v-model="form.traceabilityReadiness" size="small" type="textarea"></el-input>
          </td>
          <td>
            <el-radio-group v-model="form.traceabilityIsSatisfied" v-removeAriaHidden>
              <el-radio :label="0">否</el-radio>
              <el-radio :label="1">是</el-radio>
            </el-radio-group>
          </td>
          <td>
            <el-link type="primary" @click="viewCalibrationsFileDia">查看校准证书</el-link>
          </td>
        </tr>
        <tr>
          <td>样品管理需求:</td>
          <td>
            <el-input v-model="form.managementRequirements" size="small" type="textarea"></el-input>
          </td>
          <td>
            <el-input v-model="form.managementReadiness" size="small" type="textarea"></el-input>
          </td>
          <td>
            <el-radio-group v-model="form.managementIsSatisfied" v-removeAriaHidden>
              <el-radio :label="0">否</el-radio>
              <el-radio :label="1">是</el-radio>
            </el-radio-group>
          </td>
          <td>
            <el-input v-model="form.managementRemark" size="small"></el-input>
          </td>
        </tr>
        <tr>
          <td>其他:</td>
          <td>
            <el-input v-model="form.otherRequirements" size="small" type="textarea"></el-input>
          </td>
          <td>
            <el-input v-model="form.otherReadiness" size="small" type="textarea"></el-input>
          </td>
          <td>
            <el-radio-group v-model="form.otherIsSatisfied" v-removeAriaHidden>
              <el-radio :label="0">否</el-radio>
              <el-radio :label="1">是</el-radio>
            </el-radio-group>
          </td>
          <td>
            <el-input v-model="form.otherRemark" size="small"></el-input>
          </td>
        </tr>
        <tr>
          <td colspan="3">
            <p>是否引用此标准开展检测:</p>
          </td>
          <td colspan="3">可以引用此标准开展检测</td>
          <td>
            <p>确认时间:</p>
          </td>
          <td>{{form.confirmDate}}</td>
        </tr>
        <tr>
          <td colspan="3">
            <p>参加确认人签名:</p>
          </td>
          <td colspan="5">
            <el-select v-model="form.confirmUser" multiple placeholder="请选择" size="small" style="width: 100%" :multiple-limit="5">
              <el-option v-for="item in userList" :key="item.id" :label="item.name" :value="item.id"></el-option>
            </el-select>
          </td>
        </tr>
      </table>
      <span slot="footer" class="dialog-footer">
        <el-button @click="closeDia">取 æ¶ˆ</el-button>
        <el-button :loading="editLoad" type="primary" @click="handleEdit">提 äº¤</el-button>
      </span>
    </el-dialog>
    <ViewDeviceDialog v-if="viewDeviceDialog" ref="viewDeviceDialog" @closDeviceDia="closDeviceDia" @handleDeviceInfo="handleDeviceInfo"></ViewDeviceDialog>
    <ViewTestRecord v-if="viewTestRecordDialog" ref="viewTestRecordDialog"></ViewTestRecord>
    <ViewWorkPermitDia v-if="viewWorkPermitDia" ref="viewWorkPermitDia"></ViewWorkPermitDia>
    <calibrations-file-dia v-if="calibrationsFileDia" ref="calibrationsFileDia"></calibrations-file-dia>
  </div>
</template>
<script>
import { dateFormat } from '@/utils/date'
import ViewDeviceDialog from '../../standardMethodsChange/component/ViewDeviceDialog.vue';
import ViewTestRecord from '../../standardMethodsChange/component/ViewTestRecord.vue';
import ViewWorkPermitDia from '../../standardMethodsChange/component/viewWorkPermitDia.vue';
import CalibrationsFileDia from '../../standardMethodsChange/component/calibrationsFileDia.vue';
import {
  addMethodVerify,
  getMethodVerifyOne,
  methodVerifyAffirm,
  updateMethodVerify
} from '@/api/cnas/process/method/methodVerification'
import { selectUserCondition } from '@/api/cnas/process/method/standardMethodsChange'
export default {
  name: 'formDIa',
  // import å¼•入的组件需要注入到对象中才能使用
  components: { CalibrationsFileDia, ViewWorkPermitDia, ViewTestRecord, ViewDeviceDialog },
  props: {
    operationType: {
      type: String,
      default: () => ''
    }
  },
  data() {
    // è¿™é‡Œå­˜æ”¾æ•°æ®
    return {
      formDia: false,
      form: {
        methodName: '',
        verifyReason: '',
        technologyChange: '',
        personRequirements: '',
        personReadiness: '',
        personIsSatisfied: '',
        personRemark: '',
        machineRequirements: '',
        machineReadiness: '',
        machineIsSatisfied: '',
        materialRequirements: '',
        materialReadiness: '',
        materialIsSatisfied: '',
        materialRemark: '',
        methodRequirements: '',
        methodReadiness: '',
        methodIsSatisfied: '',
        environmentRequirements: '',
        environmentReadiness: '',
        environmentIsSatisfied: '',
        traceabilityRequirements: '',
        traceabilityReadiness: '',
        traceabilityIsSatisfied: '',
        traceabilityRemark: '',
        managementRequirements: '',
        managementReadiness: '',
        managementIsSatisfied: '',
        managementRemark: '',
        otherRequirements: '',
        otherReadiness: '',
        otherIsSatisfied: '',
        otherRemark: '',
        machineAttachmentList: []
      },
      editLoad: false,
      info: {
        methodVerifyId: ''
      },
      userList: [],
      viewDeviceDialog: false,
      viewTestRecordDialog: false,
      viewWorkPermitDia: false,
      calibrationsFileDia: false,
    };
  },
  // æ–¹æ³•集合
  methods: {
    openDia(row) {
      this.formDia = true
      this.info = row
      this.getUserList()
      if (this.operationType === 'edit') {
        this.searchInfo(row)
      }
    },
    // æŸ¥è¯¢è¯¦æƒ…信息
    searchInfo (row) {
      getMethodVerifyOne({methodVerifyId:row.methodVerifyId}).then(res => {
        if (res.code === 200){
          this.form = {...res.data}
          if (this.form.confirmUser) {
            this.form.confirmUser = this.form.confirmUser.split(',').map(Number)
          }
        }
      }).catch(err => {
        console.log('err---', err);
      })
    },
    // æäº¤
    handleEdit() {
      this.editLoad = true
      const processMethodSearchNews = this.HaveJson(this.form)
      processMethodSearchNews.confirmUser = processMethodSearchNews.confirmUser && processMethodSearchNews.confirmUser.join(',')
      processMethodSearchNews.operationType = 1
      if (this.operationType === 'edit') {
        this.editInfo(processMethodSearchNews)
      } else {
        this.addInfo(processMethodSearchNews)
      }
    },
    // æŸ¥çœ‹ä¸Šå²—证
    viewWorkPermit () {
      this.viewWorkPermitDia = true
      this.$nextTick(() => {
        this.$refs.viewWorkPermitDia.openDia(this.form)
      })
    },
    // æŸ¥çœ‹æ ¡å‡†è¯ä¹¦
    viewCalibrationsFileDia () {
      this.calibrationsFileDia = true
      this.$nextTick(() => {
        this.$refs.calibrationsFileDia.openDia(this.form)
      })
    },
    // æŸ¥çœ‹è®¾å¤‡
    viewDevice () {
      this.viewDeviceDialog = true
      this.$nextTick(() => {
        this.$refs.viewDeviceDialog.openDia(this.form)
      })
    },
    // å…³é—­è®¾å¤‡å¼¹æ¡†
    closDeviceDia () {
      this.viewDeviceDialog = false
    },
    // æäº¤è®¾å¤‡ä¿¡æ¯
    handleDeviceInfo (machineAttachmentList) {
      this.viewDeviceDialog = false
      this.form.machineAttachmentList = machineAttachmentList
    },
    // æŸ¥çœ‹æ£€æµ‹è®°å½•
    viewTestRecord () {
      this.viewTestRecordDialog = true
      this.$nextTick(() => {
        this.$refs.viewTestRecordDialog.openDia(this.info)
      })
    },
    // æäº¤ç¼–辑
    editInfo (processMethodSearchNews) {
      updateMethodVerify(processMethodSearchNews).then(res => {
        this.editLoad = false
        if (res.code === 200){
          this.$message.success('操作成功')
          this.closeDia()
        }
      }).catch(err => {
        console.log('err---', err);
        this.editLoad = false
      })
    },
    // æäº¤æ–°å¢ž
    addInfo (processMethodSearchNews) {
      addMethodVerify(processMethodSearchNews).then(res => {
        this.editLoad = false
        if (res.code === 200){
          this.$message.success('操作成功')
          this.closeDia()
        }
      }).catch(err => {
        console.log('err---', err);
        this.editLoad = false
      })
    },
    // éªŒè¯ç¡®è®¤
    validation (){
      methodVerifyAffirm({methodVerifyId:this.info.methodVerifyId}).then(res => {
        if (res.code === 200){
          this.form.confirmDate = dateFormat(new Date())
        }
      }).catch(err => {
        console.log('err---', err);
      })
    },
    // å…³é—­å¼¹æ¡†
    closeDia() {
      this.formDia = false
      this.$emit('closeDia');
    },
    getUserList(){
      selectUserCondition().then(res => {
        if (res.code === 200) {
          this.userList = res.data
        }
      })
    },
  }
};
</script>
<style scoped>
>>>.el-dialog {
  margin-top: 2vh !important;
}
>>>.el-dialog__body {
  max-height: 720px;
  overflow-y: auto;
}
.tables {
  table-layout: fixed;
  width: 100%;
  margin-top: 10px;
}
.tables td {
  height: 34px;
  width: 100px;
  text-align: center;
  font-size: 14px;
  word-wrap: break-word;
  white-space: normal;
  padding: 4px;
}
</style>
src/views/CNAS/process/method/methodVerification/index.vue
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,198 @@
<template>
  <div class="capacity-scope">
    <div class="search">
      <div>
        <el-form :model="searchForm" ref="searchForm" size="small" :inline="true">
          <el-form-item label="标准方法" prop="methodName">
            <el-input size="small" placeholder="请输入" clearable v-model="searchForm.methodName"></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">
      <div>
        <TableCard :showForm="false" :showTitle="false">
          <template v-slot:table>
            <limsTable :column="tableColumn" :height="'calc(100vh - 23em)'" :table-data="tableData"
              :table-loading="tableLoading" style="padding: 0 15px;margin-bottom: 16px" :page="page"
              @pagination="pagination">
            </limsTable>
          </template>
        </TableCard>
      </div>
    </div>
    <formDIa v-if="formDIa" ref="formDIa" :operationType="operationType" @closeDia="closeDia"></formDIa>
  </div>
</template>
<script>
import limsTable from '@/components/Table/lims-table.vue'
import TableCard from '@/views/CNAS/externalService/serviceAndSupplyPro/component/index.vue';
import formDIa from './component/formDIa.vue';
import { delMethodVerify, exportMethodVerify, pagesMethodVerify } from '@/api/cnas/process/method/methodVerification'
export default {
  name: 'a7-method-verification',
  // import å¼•入的组件需要注入到对象中才能使用
  components: { TableCard, limsTable, formDIa },
  data() {
    // è¿™é‡Œå­˜æ”¾æ•°æ®
    return {
      searchForm: {
        methodName: '',
        operationType: 1,
      },
      options: [
        { label: '上半年', value: '1' },
        { label: '下半年', value: '2' },
      ],
      tableColumn: [
        {
          label: '标准方法',
          prop: 'methodName',
          minWidth: '100'
        },
        {
          label: '验证原因',
          prop: 'verifyReason',
          minWidth: '100'
        },
        {
          label: '主要技术变化',
          prop: 'technologyChange',
          minWidth: '100'
        },
        {
          dataType: 'action',
          minWidth: '60',
          label: '操作',
          operation: [
            {
              name: '编辑',
              type: 'text',
              clickFun: (row) => {
                this.openFormDia('edit', row);
              },
            },
            {
              name: '导出',
              type: 'text',
              clickFun: (row) => {
                this.downLoadPost(row);
              },
            },
            {
              name: '删除',
              type: 'text',
              color: '#f56c6c',
              clickFun: (row) => {
                this.deleteRow(row);
              },
            }
          ]
        }
      ],
      tableData: [],
      tableLoading: false,
      page: {
        size: 20,
        current: 1,
      },
      total: 0,
      formDIa: false,
      operationType: '',
    };
  },
  mounted() {
    this.searchList()
  },
  // æ–¹æ³•集合
  methods: {
    // æŸ¥è¯¢åˆ—表
    searchList() {
      const entity = {
        methodName: this.searchForm.methodName,
        operationType: this.searchForm.operationType,
      }
      const page = this.page
      this.tableLoading = true
      pagesMethodVerify({ ...page, ...entity }).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
      })
    },
    // åˆ é™¤
    deleteRow(row) {
      this.$confirm('此操作将永久删除该数据, æ˜¯å¦ç»§ç»­?', '提示', {
        confirmButtonText: '确定',
        cancelButtonText: '取消',
        type: 'warning'
      }).then(() => {
        this.tableLoading = true
        delMethodVerify({ methodVerifyId: row.methodVerifyId }).then(res => {
          this.tableLoading = false
          if (res.code === 200) {
            this.$message.success('删除成功')
            this.searchList()
          }
        }).catch(err => {
          this.tableLoading = false
          console.log('err---', err);
        })
      })
    },
    // é‡ç½®æŸ¥è¯¢æ¡ä»¶
    resetSearchForm() {
      this.searchForm.methodName = '';
      this.searchList()
    },
    openFormDia(type, row) {
      this.formDIa = true
      this.operationType = type
      this.$nextTick(() => {
        this.$refs.formDIa.openDia(row)
      })
    },
    // å¯¼å‡º
    downLoadPost(row) {
      exportMethodVerify({ methodVerifyId: row.methodVerifyId }).then(res => {
        this.outLoading = false
        const blob = new Blob([res], { type: 'application/msword' });
        this.$download.saveAs(blob, '标准(方法)确认记录.docx')
      })
    },
    // å…³é—­å¼¹æ¡†
    closeDia() {
      this.formDIa = false
      this.searchList()
    },
    // åˆ†é¡µåˆ‡æ¢
    pagination(page) {
      this.page.size = page.limit
      this.searchList();
    },
  }
};
</script>
<style scoped>
.search {
  height: 46px;
  display: flex;
  justify-content: space-between;
}
</style>
src/views/CNAS/process/method/standardMethodsChange/index.vue
@@ -20,8 +20,8 @@
      <div>
        <TableCard :showForm="false" :showTitle="false">
          <template v-slot:table>
            <lims-table :tableData="tableData" :column="tableColumn" :height="'calc(100vh - 250px)'" @pagination="pagination"
                        :page="page" :tableLoading="tableLoading"></lims-table>
            <lims-table :tableData="tableData" :column="tableColumn" :height="'calc(100vh - 250px)'"
              @pagination="pagination" :page="page" :tableLoading="tableLoading"></lims-table>
          </template>
        </TableCard>
      </div>
@@ -180,7 +180,6 @@
        this.outLoading = false
        const blob = new Blob([res],{ type: 'application/msword' });
        this.$download.saveAs(blob, '标准(方法)确认记录.docx')
        this.$message.success('导出成功')
      })
    },
    // åˆ†é¡µåˆ‡æ¢
src/views/CNAS/process/method/standardNoveltyRetrieval/index.vue
@@ -14,9 +14,9 @@
      </div>
      <div>
        <el-button size="medium" type="primary" @click="openApprovalDialog1">建 æ¡£</el-button>
        <el-upload ref='upload' :action="action"
                             :before-upload="beforeUpload" :headers="headers" :on-error="onError"
                             :on-success="handleSuccessUp" :show-file-list="false" accept='.jpg,.jpeg,.png,.gif,.doc,.docx,.xls,.xlsx,.ppt,.pptx,.pdf,.zip,.rar'
        <el-upload ref='upload' :action="action" :before-upload="beforeUpload" :headers="headers" :on-error="onError"
          :on-success="handleSuccessUp" :show-file-list="false"
          accept='.jpg,.jpeg,.png,.gif,.doc,.docx,.xls,.xlsx,.ppt,.pptx,.pdf,.zip,.rar'
                             style="display: inline-block; margin-left: 10px;">
                    <el-button :loading="upLoading" size="medium" type="primary">导入</el-button>
        </el-upload>
@@ -34,13 +34,8 @@
        <div v-if="tabIndex === '0'">
          <TableCard :showForm="false" :showTitle="false">
            <template v-slot:table>
              <lims-table
                :column="tableColumn"
                :height="'calc(100vh - 26em)'"
                :table-data="tableData"
                :table-loading="tableLoading"
                :page="page"
                @pagination="pagination">
              <lims-table :column="tableColumn" :height="'calc(100vh - 26em)'" :table-data="tableData"
                :table-loading="tableLoading" :page="page" @pagination="pagination">
              </lims-table>
            </template>
          </TableCard>
@@ -48,13 +43,8 @@
        <div v-if="tabIndex === '1'">
          <TableCard :showForm="false" :showTitle="false">
            <template v-slot:table>
              <lims-table
                :column="oldTableColumn"
                :height="'calc(100vh - 20em)'"
                :table-data="oldTableData"
                :table-loading="oldTableLoading"
                :page="oldPage"
                @pagination="oldPagination">
              <lims-table :column="oldTableColumn" :height="'calc(100vh - 20em)'" :table-data="oldTableData"
                :table-loading="oldTableLoading" :page="oldPage" @pagination="oldPagination">
              </lims-table>
            </template>
          </TableCard>
@@ -86,13 +76,8 @@
      <el-dialog :visible.sync="viewRocordDia" title="详情" width="80%" @close="approvalDialog = false">
        <TableCard :showForm="false" :showTitle="false">
          <template v-slot:table>
            <limsTable
              :column="tableColumn1"
              :height="'calc(100vh - 26em)'"
              :table-data="tableData1"
              :table-loading="tableLoading1"
              style="padding: 0 15px;margin-bottom: 16px"
              :page="page1"
            <limsTable :column="tableColumn1" :height="'calc(100vh - 26em)'" :table-data="tableData1"
              :table-loading="tableLoading1" style="padding: 0 15px;margin-bottom: 16px" :page="page1"
              @pagination="pagination1">
            </limsTable>
          </template>
@@ -648,7 +633,6 @@
      exportMethodSearchNew({archivedId:row.archivedId}).then(res => {
        const blob = new Blob([res],{ type: 'application/octet-stream' });
        this.$download.saveAs(blob, '标准查新导出.xlsx')
        this.$message.success('导出成功')
      })
    },
    // å¯¼å…¥
@@ -723,6 +707,7 @@
  display: flex;
  justify-content: space-between;
}
.table-tab {
  margin-bottom: 10px;
}
src/views/CNAS/process/nonconformingWork/nonconformingDistribution/index.vue
@@ -178,7 +178,6 @@
    handleDown(row) {
      exportInconsistentDistribution({ distributionId: row.distributionId }).then(res => {
        this.outLoading = false
        this.$message.success('导出成功')
        const blob = new Blob([res], { type: 'application/msword' });
        this.$download.saveAs(blob, '不符合项的分布' + '.docx');
      })
src/views/CNAS/process/nonconformingWork/nonconformingItem/index.vue
@@ -151,7 +151,6 @@
    // å¯¼å‡º
    openDownloadDia(row) {
      superviseDetailAccordingExport({ superviseDetailsId: row.superviseDetailsId }).then(res => {
        this.$message.success('导出成功')
        const blob = new Blob([res], { type: 'application/msword' });
        this.$download.saveAs(blob, '不符合项导出' + '.docx');
      }).catch(err => {
src/views/CNAS/process/reportResults/index.vue
@@ -223,7 +223,6 @@
      exportProcessReport({ ids: this.mutilSelect.map(m => m.id) }).then(res => {
        this.outLoading = false
        if (res.code === 201) return
        this.$message.success('导出成功')
        const url = this.javaApi + '/word/' + res.data;
        this.$download.saveAs(url, "报告结果");
      })
src/views/CNAS/resourceDemand/device/component/accidentForm.vue
@@ -96,6 +96,10 @@
<script>
import { selectUserCondition } from "@/api/business/inspectionTask";
import {
  getDeviceAccidentReport,
  addDeviceAccidentReport,
} from '@/api/cnas/resourceDemand/device.js'
export default {
  name: "accident-form",
  // import å¼•入的组件需要注入到对象中才能使用
@@ -150,7 +154,7 @@
    },
    // æŸ¥è¯¢è¯¦æƒ…
    searchInfo() {
      this.$axios.get(this.$api.deviceAccidentReport.getDeviceAccidentReport + '?accidentReportId=' + this.form.accidentReportId).then(res => {
      getDeviceAccidentReport({ accidentReportId: this.form.accidentReportId }).then(res => {
        if (res.code === 200) {
          this.form = { ...res.data }
          if (res.data.isFinish === 0) {
@@ -187,13 +191,7 @@
      this.form.flowType = this.currentStep
      this.$refs.modelForm.validate((valid) => {
        if (valid) {
          this.$axios.post(this.$api.deviceAccidentReport.addDeviceAccidentReport,
            this.form, {
            headers: {
              'Content-Type': 'application/json'
            },
            noQs: true
          }).then(res => {
          addDeviceAccidentReport(this.form).then(res => {
            if (res.code == 200) {
              this.$message.success('新增成功')
              this.resetForm()
@@ -212,14 +210,7 @@
    },
    getUserList() {
      selectUserCondition().then(res => {
        let data = [];
        res.data.forEach((a) => {
          data.push({
            label: a.name,
            value: a.id,
          });
        });
        this.userList = data
        this.userList = res.data
      })
    },
  },
src/views/CNAS/resourceDemand/device/component/borrow.vue
@@ -4,7 +4,7 @@
    <div class="search">
      <div class="search_thing">
        <div class="search_label">流程编号:</div>
        <div><el-input size="small" placeholder="请输入" clearable v-model="componentData.entity.processNumber"
        <div><el-input size="small" placeholder="请输入" clearable v-model="queryParams.processNumber"
            @keyup.enter.native="refreshTable()"></el-input></div>
      </div>
      <div class="search_thing" style="padding-left: 30px;">
@@ -17,8 +17,10 @@
      </div>
    </div>
    <div class="tables" style="margin-top: 10px;">
      <ValueTable ref="ValueTable" :url="$api.deviceBorrow.deviceBorrowPage"
        :delUrl="$api.deviceBorrow.deleteDeviceBorrow" :componentData="componentData" :key="upIndex" />
      <lims-table :tableData="tableData" :column="column" :tableLoading="tableLoading" :height="'calc(100vh - 290px)'"
        :page="page" @pagination="pagination"></lims-table>
      <!-- <ValueTable ref="ValueTable" :url="$api.deviceBorrow.deviceBorrowPage"
        :delUrl="$api.deviceBorrow.deleteDeviceBorrow" :componentData="componentData" :key="upIndex" /> -->
    </div>
    <el-dialog title="仪器设备领(借)用登记" top="5vh" :visible.sync="dialogVisible" width="60%">
      <el-steps :active="currentStep" finish-status="success" align-center>
@@ -197,13 +199,18 @@
</template>
<script>
import ValueTable from '@/components/Table/value-table.vue'
import limsTable from "@/components/Table/lims-table.vue";
import { dateFormat } from '@/utils/date'
import {
  saveDeviceBorrow,
  deleteCNASFile,
  getDeviceBorrow,
  deviceBorrowExport,
  deleteDeviceBorrow,
  deviceBorrowPage,
} from '@/api/cnas/resourceDemand/device.js'
import { selectUserCondition } from "@/api/business/inspectionTask";
import { mapGetters } from "vuex";
export default {
  props: {
    clickNodeVal: {
@@ -214,72 +221,12 @@
    }
  },
  components: {
    ValueTable
    limsTable
  },
  data() {
    return {
      dialogVisible: false,
      dialogVisible0: false,
      //表头显示
      componentData: {
        entity: {
          processNumber: null,
          deviceId: null,
          orderBy: {
            field: 'id',
            order: 'asc'
          }
        },
        isIndex: true,
        showSelect: false,
        select: false,
        do: [
          {
            id: 'show',
            font: '查看',
            type: 'text',
            method: 'lookDetail'
          },
          {
            id: 'delete',
            font: '删除',
            type: 'text',
            method: 'doDiy'
          },
          {
            id: '111',
            font: '流程跟踪',
            type: 'text',
            method: 'handleLookList'
          }],
        init: false,
        tagField: {
          recipientState: {
            select: [{
              value: 0,
              type: 'success',
              label: '合格'
            }, {
              value: 1,
              type: 'warning',
              label: 'ç»´ä¿®'
            }, {
              value: 2,
              type: 'info',
              label: '停用'
            }, {
              value: 3,
              type: 'danger',
              label: '报废'
            }]
          }
        },
        selectField: {},
        requiredAdd: [],
        requiredUp: [],
      },
      upIndex: 0,
      entityCopy: null,
      currentStep: 0, // æ­¥éª¤æ¡æ˜¾ç¤ºç¬¬å‡ æ­¥
      currentStepClick: 0, // ç‚¹å‡»æ­¥éª¤æ¡å˜åŒ–
      steps: ['借出', '借用'],
@@ -307,15 +254,94 @@
        nextUser: [{ required: true, message: '请选择下环节负责人', trigger: 'change' }],
      },
      deviceLogs: [],
      outLoading: false
      outLoading: false,
      recipientStateList: [{
        value: 0,
        type: 'success',
        label: '合格'
      }, {
        value: 1,
        type: 'warning',
        label: 'ç»´ä¿®'
      }, {
        value: 2,
        type: 'info',
        label: '停用'
      }, {
        value: 3,
        type: 'danger',
        label: '报废'
      }],
      queryParams: {},
      tableData: [],
      column: [
        { label: "流程编号", prop: "processNumber" },
        { label: "设备名称", prop: "deviceName" },
        {
          label: "管理编号",
          prop: "unifyNumber"
        },
        { label: "借用人", prop: "recipientUser" },
        { label: "借用人联系方式", prop: "borrowerContactInformation", width: '140px' },
        { label: "借用日期", prop: "recipientTime" },
        {
          label: "借用时状态", prop: "recipientState", dataType: "tag",
          formatData: (params) => {
            return this.recipientStateList.find((m) => m.value == params).label;
          },
          formatType: (params) => {
            return this.recipientStateList.find((m) => m.value == params).type;
          },
        },
        { label: "借出人", prop: "submitUser" },
        { label: "借出日期", prop: "createTime" },
        {
          label: "当前状态", prop: "nowState"
        },
        { label: "当前责任人", prop: "nowUser" },
        { label: "附件", prop: "fileName" },
        {
          dataType: "action",
          fixed: "right",
          label: "操作",
          operation: [
            {
              name: "查看",
              type: "text",
              clickFun: (row) => {
                this.lookDetail(row);
              },
            },
            {
              name: "删除",
              type: "text",
              clickFun: (row) => {
                this.handleDelete(row);
              },
            },
            {
              name: "流程跟踪",
              type: "text",
              clickFun: (row) => {
                this.handleLookList(row);
              },
            },
          ],
        },
      ],
      page: {
        total: 0,
        size: 10,
        current: 0,
      },
      tableLoading: false,
    }
  },
  watch: {
    // ç›‘听点击el-tree的数据,进行数据刷新
    clickNodeVal(newVal) {
      if (newVal.value) {
        this.componentData.entity.deviceId = this.clickNodeVal.value
        this.entityCopy = this.HaveJson(this.componentData.entity)
        thisqueryParams.deviceId = this.clickNodeVal.value
        this.refreshTable()
      }
    },
@@ -329,25 +355,46 @@
    }
  },
  computed: {
    ...mapGetters(["nickName"]),
    action() {
      return this.javaApi + '/personBasicInfo/saveCNASFile'
    }
  },
  mounted() {
    this.componentData.entity.deviceId = this.clickNodeVal.value
    this.entityCopy = this.HaveJson(this.componentData.entity)
    // console.log(333,this.clickNodeVal)
    this.queryParams.deviceId = this.clickNodeVal.value
    this.getUserList()
    this.refreshTable()
  },
  methods: {
    refreshTable(e) {
      this.$refs['ValueTable'].selectList(e)
    getList() {
      this.tableLoading = true;
      let param = { ...this.queryParams, ...this.page };
      delete param.total;
      deviceBorrowPage({ ...param })
        .then((res) => {
          this.tableLoading = false;
          if (res.code === 200) {
            this.tableData = res.data.records;
            this.page.total = res.data.total;
          }
        })
        .catch((err) => {
          this.tableLoading = false;
        });
    },
    pagination({ page, limit }) {
      this.page.current = page;
      this.page.size = limit;
      this.getList();
    },
    refresh() {
      this.componentData.entity = this.HaveJson(this.entityCopy)
      this.refreshTable()
      // this.upIndex++
      this.queryParams = {};
      this.page.current = 1;
      this.getList();
    },
    refreshTable() {
      this.page.current = 1;
      this.getList();
    },
    choiceStep(index) {
      this.currentStepClick = index
@@ -362,11 +409,11 @@
          // èŽ·å–å½“å‰çŽ¯èŠ‚æ“ä½œäººä¸Žæ—¥æœŸ
          switch (this.currentStep) {
            case 0:
              this.form.submitOperationUser = user.name
              this.form.submitOperationUser = this.nickName
              this.form.submitOperationTime = dateTime
              break
            case 1:
              this.form.receiveOperationUser = user.name
              this.form.receiveOperationUser = this.nickName
              this.form.receiveOperationTime = dateTime
              break
            default:
@@ -452,7 +499,7 @@
    },
    // æŸ¥çœ‹è¯¦æƒ…
    lookDetail(row) {
      this.$axios.get(this.$api.deviceBorrow.getDeviceBorrow + '?id=' + row.id).then(res => {
      getDeviceBorrow({ id: row.id }).then(res => {
        if (res.code == 200) {
          this.form = res.data
          this.form.deviceName = this.clickNodeVal.label
@@ -493,56 +540,38 @@
    //导出
    handleDown() {
      this.outLoading = true
      this.$axios.post(this.$api.deviceBorrow.deviceBorrowExport, { deviceId: this.clickNodeVal.value }, { responseType: 'blob' }).then(res => {
      deviceBorrowExport({ deviceId: this.clickNodeVal.value }).then(res => {
        this.outLoading = false
        const blob = new Blob([res], {
          type: 'application/force-download'
        })
        const filename = decodeURI(this.clickNodeVal.label + '设备借出统计' + '.xlsx')
        //将Blob å¯¹è±¡è½¬æ¢æˆå­—符串
        let reader = new FileReader();
        reader.readAsText(blob, 'utf-8');
        reader.onload = () => {
          try {
            let result = JSON.parse(reader.result);
            if (result.message) {
              this.$message.error(result.message);
            } else {
              // åˆ›å»ºä¸€ä¸ªè¶…链接,将文件流赋进去,然后实现这个超链接的单击事件
              const elink = document.createElement('a')
              elink.download = filename
              elink.style.display = 'none'
              elink.href = URL.createObjectURL(blob)
              document.body.appendChild(elink)
              elink.click();
              URL.revokeObjectURL(elink.href) // é‡Šæ”¾URL å¯¹è±¡
              document.body.removeChild(elink)
              this.$message.success('导出成功')
            }
          } catch (err) {
            console.log(err);
            // åˆ›å»ºä¸€ä¸ªè¶…链接,将文件流赋进去,然后实现这个超链接的单击事件
            const elink = document.createElement('a')
            elink.download = filename
            elink.style.display = 'none'
            elink.href = URL.createObjectURL(blob)
            document.body.appendChild(elink)
            elink.click();
            URL.revokeObjectURL(elink.href) // é‡Šæ”¾URL å¯¹è±¡
            document.body.removeChild(elink)
            this.$message.success('导出成功')
          }
        }
        this.$download.saveAs(blob, filename)
      })
    },
    handleLookList(row) {
      this.$axios.get(this.$api.deviceBorrow.getDeviceBorrow + '?id=' + row.id).then(res => {
      getDeviceBorrow({ id: row.id }).then(res => {
        if (res.code == 200) {
          this.deviceLogs = res.data.deviceLogs
          this.dialogVisible0 = true
        }
      })
    }
    },
    handleDelete(row) {
      this.$confirm("是否删除该条数据?", "提示", {
        confirmButtonText: "确定",
        cancelButtonText: "取消",
        type: "warning",
      })
        .then(() => {
          deleteDeviceBorrow({ id: row.id }).then((res) => {
            if (res.code == 201) return;
            this.$message.success("删除成功");
            this.refresh();
          });
        })
        .catch(() => { });
    },
  },
}
</script>
src/views/CNAS/resourceDemand/device/component/calibration.vue
@@ -4,7 +4,7 @@
    <div class="btnS">
      <el-button size="small" type="primary" @click="calibrationMaintenance()">校准项目维护</el-button>
      <el-button size="small" type="primary" @click="add('add')">添加校准记录</el-button>
      <el-button size="small" type="primary" @click="handleDown">导出Excel</el-button>
      <!-- <el-button size="small" type="primary" @click="handleDown">导出Excel</el-button> -->
    </div>
    <div class="tables" style="margin-top: 10px;">
      <el-table :data="tableData" height="calc(100vh - 20em)">
@@ -240,20 +240,6 @@
            </template>
          </el-table-column>
        </el-table>
        <!-- æ“ä½œæ—¥å¿— -->
        <!--        <h4>-->
        <!--          <div style="display: flex;-->
        <!--      align-items: center;">-->
        <!--            <span class="line"></span><span>本记录状态和操作日志</span>-->
        <!--          </div>-->
        <!--        </h4>-->
        <!--        <el-table :data="tableDataOperate" style="width: 100%">-->
        <!--          <el-table-column type="index" label="序号" width="100"></el-table-column>-->
        <!--          <el-table-column prop="operator" label="操作人" width="120"></el-table-column>-->
        <!--          <el-table-column prop="operationTime" label="操作时间" width="180"></el-table-column>-->
        <!--          <el-table-column prop="operationType" label="操作类型" width="120"></el-table-column>-->
        <!--          <el-table-column prop="operationContent" label="操作内容"></el-table-column>-->
        <!--        </el-table>-->
      </div>
      <span slot="footer" class="dialog-footer">
        <el-button v-if="operationType === 'add'" @click="dialogVisible1 = false">取 æ¶ˆ</el-button>
@@ -265,10 +251,8 @@
</template>
<script>
import fileDownload from "@/utils/file";
import {
  deviceMetricRecordPage,
  deviceLog,
  showDeviceMetricsCopy,
  deleteDeviceMetricRecord,
  deviceMetricRecordExport,
@@ -276,7 +260,9 @@
  selectDeviceMetric,
  deleteDeviceMetrics,
  addOrUpdateDeviceMetricRecord,
  saveOrUpdateDeviceMetric
} from '@/api/cnas/resourceDemand/device.js'
import { mapGetters } from "vuex";
export default {
  props: {
    clickNodeVal: {
@@ -343,7 +329,6 @@
        ],
      },
      addRecordLoading: false,
      tableDataOperate: [], // æœ¬è®°å½•状态和操作日志
      upLoading: false,
      operationType: '',
      search: {
@@ -355,13 +340,13 @@
  },
  // ç”¨äºŽä¸Šä¼ æ–‡ä»¶çš„信息
  computed: {
    ...mapGetters(["nickName"]),
    action() {
      return this.javaApi + '/personBasicInfo/saveCNASFile'
    }
  },
  mounted() {
    //获取操作记录信息
    this.getOperateMsg();
    this.getTableList(this.clickNodeVal.value) // èŽ·å–è®¾å¤‡æ ¡å‡†åˆ—è¡¨æ•°æ®
  },
  methods: {
@@ -397,11 +382,6 @@
        this.search.total = res.data.total
      })
    },
    getOperateMsg() {
      deviceLog(this.clickNodeVal.value).then(res => {
        this.tableDataOperate = res.data
      })
    },
    // æ·»åŠ æ ¸æŸ¥è®°å½•
    add(type) {
      this.operationType = type
@@ -410,7 +390,7 @@
    },
    // æŸ¥çœ‹è¯¦æƒ…
    handleViewClick(type, row) {
      showDeviceMetricsCopy({ id: row.id, type: calibrate }).then(res => {
      showDeviceMetricsCopy({ id: row.id, type: 'calibrate' }).then(res => {
        this.calibrateParams = res.data
      })
      this.calibrationRecord = { ...row }
@@ -439,14 +419,10 @@
      let state = /\.(jpg|jpeg|png|gif)$/i.test(row.systemFileName)
      if (state) {
        let url = this.javaApi + '/img/' + row.systemFileName;
        fileDownload.downloadIamge(url, row.systemFileName)
        this.$download.saveAs(url, row.systemFileName)
      } else {
        const url = this.javaApi + '/word/' + row.systemFileName
        const link = document.createElement('a');
        link.href = url;
        link.download = row.systemFileName;
        link.click();
        this.$message.success('下载成功')
        this.$download.saveAs(url, row.systemFileName)
      }
    },
    //导出
@@ -454,12 +430,11 @@
      this.outLoading = true
      deviceMetricRecordExport({
        deviceId: this.clickNodeVal.value,
        type: calibrate
        type: 'calibrate'
      }).then(res => {
        this.outLoading = false
        const blob = new Blob([res], { type: 'application/octet-stream' });
        this.$download.saveAs(blob, '设备校准.xlsx')
        this.$message.success('导出成功')
      })
    },
    deleteFile() {
@@ -527,10 +502,9 @@
          this.calibrateParamsLoading = true
          this.addCalibrateLoading = true
          this.form0.deviceId = this.clickNodeVal.value;
          const user = JSON.parse(localStorage.getItem('user'))
          this.form0.createdBy = user.name;
          this.form0.createdBy = this.nickName;
          this.form0.type = 'calibrate'
          deleteDeviceMetrics(this.form0).then(res => {
          saveOrUpdateDeviceMetric(this.form0).then(res => {
            if (res.code == 200) {
              this.$message.success('保存成功')
              this.$refs['form0'].resetFields()
@@ -559,8 +533,7 @@
            }
            this.addRecordLoading = true
            this.calibrationRecord.deviceId = this.clickNodeVal.value;
            let user = JSON.parse(localStorage.getItem('user'))
            this.calibrationRecord.createUser = user.name
            this.calibrationRecord.createUser = this.nickName
            this.calibrationRecord.type = 'calibrate'
            this.calibrationRecord.deviceMetricsCopyList = this.calibrateParams
            addOrUpdateDeviceMetricRecord(this.calibrationRecord).then(res => {
@@ -636,16 +609,6 @@
      }
    }
  }
}
function downloadImage(url) {
  const link = document.createElement('a');
  link.href = url;
  link.target = "_blank"
  link.download = 'attachment.jpg'; // æ–‡ä»¶å
  document.body.appendChild(link);
  link.click();
  document.body.removeChild(link);
}
</script>
src/views/CNAS/resourceDemand/device/component/check.vue
@@ -177,7 +177,7 @@
                    @click="deleteFile"></el-button>
                </el-input>
                <el-upload v-if="operationType === 'add'" ref="upload" :action="action" :before-upload="beforeUpload"
                  :headers="headers" :limit="1" :on-error="onError" :on-success="handleSuccessUp"
                  :headers="uploadHeader" :limit="1" :on-error="onError" :on-success="handleSuccessUp"
                  :show-file-list="false" style="float: right;">
                  <el-button :loading="upLoading" size="small" style="position: relative; top: -4px;"
                    type="primary">附件上传
@@ -247,6 +247,7 @@
<script>
import ValueTable from "@/components/Table/value-table.vue";
import file from '@/utils/file';
import { mapGetters } from "vuex";
export default {
  components: {
    ValueTable
@@ -330,11 +331,7 @@
  },
  // ç”¨äºŽä¸Šä¼ æ–‡ä»¶çš„信息
  computed: {
    headers() {
      return {
        'token': sessionStorage.getItem('token')
      }
    },
    ...mapGetters(["nickName"]),
    action() {
      return this.javaApi + this.$api.personnel.saveCNASFile
    }
@@ -397,8 +394,7 @@
          this.calibrateParamsLoading = true
          this.addCalibrateLoading = true
          this.form0.deviceId = this.clickNodeVal.value;
          const user = JSON.parse(localStorage.getItem('user'))
          this.form0.createdBy = user.name;
          this.form0.createdBy = this.nickName;
          this.form0.type = 'examine'
          this.$axios.post(this.$api.deviceCheck.saveOrUpdateDeviceMetric, this.form0, {
            headers: {
@@ -441,8 +437,7 @@
            }
            this.addRecordLoading = true
            this.calibrationRecord.deviceId = this.clickNodeVal.value;
            let user = JSON.parse(localStorage.getItem('user'))
            this.calibrationRecord.createUser = user.name
            this.calibrationRecord.createUser = this.nickName
            this.calibrationRecord.deviceMetricsCopyList = this.calibrateParams
            this.calibrationRecord.type = 'examine'
            this.$axios.post(this.$api.deviceCheck.addOrUpdateDeviceMetricRecord, this.calibrationRecord, {
src/views/CNAS/resourceDemand/device/component/equipmentAcceptance.vue
@@ -63,7 +63,7 @@
  pageDeviceAcceptance,
  getDeviceAcceptanceFileList,
  delDeviceAcceptanceFileList,
  exportUseRecord,
  exportDeviceAcceptance,
  delDeviceAcceptance,
} from '@/api/cnas/resourceDemand/device.js'
export default {
@@ -200,13 +200,10 @@
      let url = '';
      if (row.type == 1) {
        url = this.javaApi + '/img/' + row.fileUrl
        file.downloadIamge(url, row.fileName)
        this.$download.saveAs(url, row.fileName)
      } else {
        url = this.javaApi + '/word/' + row.fileUrl
        const link = document.createElement('a');
        link.href = url;
        link.download = row.fileName;
        link.click();
        this.$download.saveAs(url, row.fileName)
      }
    },
    // åˆ é™¤
@@ -272,11 +269,10 @@
    // å¯¼å‡º
    handleDownOne(id) {
      this.outLoading = true
      exportUseRecord({ acceptanceId: id }).then(res => {
      exportDeviceAcceptance({ acceptanceId: id }).then(res => {
        this.outLoading = false
        const blob = new Blob([res], { type: 'application/octet-stream' });
        this.$download.saveAs(blob, '设备验收.doc')
        this.$message.success('导出成功')
      })
    },
    // åˆ é™¤
src/views/CNAS/resourceDemand/device/component/equipmentAccident.vue
@@ -40,7 +40,11 @@
<script>
import AccidentForm from "./accidentForm.vue";
import {
  pageDeviceAccidentReport,
  exportDeviceAccidentReport,
  delDeviceAccidentReport,
} from '@/api/cnas/resourceDemand/device.js'
export default {
  name: "equipment-accident",
  // import å¼•入的组件需要注入到对象中才能使用
@@ -73,19 +77,10 @@
    // æŸ¥è¯¢
    getYearTableDetailData(deviceId) {
      this.yearTableDetailDataLoading = true
      this.$axios.post(this.$api.deviceAccidentReport.pageDeviceAccidentReport, {
        page: {
      pageDeviceAccidentReport({
          current: this.pagination1.current,
          size: this.pagination1.size,
        },
        entity: {
          deviceId: deviceId,
        }
      }, {
        headers: {
          'Content-Type': 'application/json'
        },
        noQs: true
      }).then(res => {
        if (res.code == 200) {
          this.yearTableDetailData = res.data.records
@@ -119,37 +114,10 @@
    // å¯¼å‡º
    handleDownOne(id) {
      this.outLoading = true
      this.$axios.get(this.$api.deviceAccidentReport.exportDeviceAccidentReport + '?accidentReportId=' + id, {
        responseType: "blob"
      }).then(res => {
      exportDeviceAccidentReport({ accidentReportId: id }).then(res => {
        this.outLoading = false
        const blob = new Blob([res], { type: 'application/octet-stream' });
        //将Blob å¯¹è±¡è½¬æ¢æˆå­—符串
        let reader = new FileReader();
        reader.readAsText(blob, 'utf-8');
        reader.onload = () => {
          try {
            let result = JSON.parse(reader.result);
            if (result.message) {
              this.$message.error(result.message);
            } else {
              const url = URL.createObjectURL(blob);
              const link = document.createElement('a');
              link.href = url;
              link.download = '仪器设备事故报告单.doc';
              link.click();
              this.$message.success('导出成功')
            }
          } catch (err) {
            console.log(err);
            const url = URL.createObjectURL(blob);
            const link = document.createElement('a');
            link.href = url;
            link.download = '仪器设备事故报告单.doc';
            link.click();
            this.$message.success('导出成功')
          }
        }
        this.$download.saveAs(blob, '仪器设备事故报告单.doc')
      })
    },
    // åˆ é™¤
@@ -159,7 +127,7 @@
        cancelButtonText: '取消',
        type: 'warning'
      }).then(() => {
        this.$axios.get(this.$api.deviceAccidentReport.delDeviceAccidentReport + '?accidentReportId=' + id).then(res => {
        delDeviceAccidentReport({ accidentReportId: id }).then(res => {
          this.$message.success('删除成功!');
          this.getYearTableDetailData(this.clickNodeVal.value);
        });
src/views/CNAS/resourceDemand/device/component/equipmentFailure.vue
@@ -38,7 +38,11 @@
<script>
import FailureForm from "./failureForm.vue";
import {
  pageDeviceBreakdownMaintenance,
  exportDeviceBreakdownMaintenance,
  delDeviceBreakdownMaintenance,
} from '@/api/cnas/resourceDemand/device.js'
export default {
  name: "equipment-failure",
  // import å¼•入的组件需要注入到对象中才能使用
@@ -71,19 +75,10 @@
    // æŸ¥è¯¢
    getYearTableDetailData(deviceId) {
      this.yearTableDetailDataLoading = true
      this.$axios.post(this.$api.deviceBreakdownMaintenance.pageDeviceBreakdownMaintenance, {
        page: {
      pageDeviceBreakdownMaintenance({
          current: this.pagination1.current,
          size: this.pagination1.size,
        },
        entity: {
          deviceId: deviceId,
        }
      }, {
        headers: {
          'Content-Type': 'application/json'
        },
        noQs: true
      }).then(res => {
        if (res.code == 200) {
          this.yearTableDetailData = res.data.records
@@ -117,37 +112,12 @@
    // å¯¼å‡º
    handleDownOne(id) {
      this.outLoading = true
      this.$axios.get(this.$api.deviceBreakdownMaintenance.exportDeviceBreakdownMaintenance + '?maintenanceId=' + id, {
        responseType: "blob"
      exportDeviceBreakdownMaintenance({
        maintenanceId: id
      }).then(res => {
        this.outLoading = false
        const blob = new Blob([res], { type: 'application/octet-stream' });
        //将Blob å¯¹è±¡è½¬æ¢æˆå­—符串
        let reader = new FileReader();
        reader.readAsText(blob, 'utf-8');
        reader.onload = () => {
          try {
            let result = JSON.parse(reader.result);
            if (result.message) {
              this.$message.error(result.message);
            } else {
              const url = URL.createObjectURL(blob);
              const link = document.createElement('a');
              link.href = url;
              link.download = '仪器设备修理申请表.doc';
              link.click();
              this.$message.success('导出成功')
            }
          } catch (err) {
            console.log(err);
            const url = URL.createObjectURL(blob);
            const link = document.createElement('a');
            link.href = url;
            link.download = '仪器设备修理申请表.doc';
            link.click();
            this.$message.success('导出成功')
          }
        }
        this.$download.saveAs(blob, '仪器设备修理申请表.doc')
      })
    },
    // åˆ é™¤
@@ -157,7 +127,9 @@
        cancelButtonText: '取消',
        type: 'warning'
      }).then(() => {
        this.$axios.get(this.$api.deviceBreakdownMaintenance.delDeviceBreakdownMaintenance + '?maintenanceId=' + id).then(res => {
        delDeviceBreakdownMaintenance({
          maintenanceId: id
        }).then(res => {
          this.$message.success('删除成功!');
          this.getYearTableDetailData(this.clickNodeVal.value);
        });
src/views/CNAS/resourceDemand/device/component/equipmentScrap.vue
@@ -7,10 +7,10 @@
      </div>
      <div>
        <el-table ref="yearTable" v-loading="yearTableDetailDataLoading" :data="yearTableDetailData"
                  height="calc(100vh - 18em)"
                  style="width: 100% ;">
          height="calc(100vh - 18em)" style="width: 100% ;">
          <!-- è¡¨æ ¼åˆ— -->
          <el-table-column align="center" header-align="center" label="序号" prop="prop" type="index" width="70"></el-table-column>
          <el-table-column align="center" header-align="center" label="序号" prop="prop" type="index"
            width="70"></el-table-column>
<!--          <el-table-column label="仪器名称" min-width="150" prop="unitName"></el-table-column>-->
<!--          <el-table-column label="型号" min-width="100" prop="address"></el-table-column>-->
          <el-table-column label="配件" min-width="150" prop="parts"></el-table-column>
@@ -19,25 +19,32 @@
          <!-- æ“ä½œæŒ‰é’® -->
          <el-table-column align="center" fixed="right" label="操作" min-width="120">
            <template slot-scope="scope">
              <el-button :disabled="scope.row.ratifyStatus === 1" size="small" type="text" @click="handleForm(scope.row.scrappedId)">操作</el-button>
              <el-button :disabled="scope.row.ratifyStatus === 1" size="small" type="text"
                @click="handleForm(scope.row.scrappedId)">操作</el-button>
              <el-button size="small" type="text" @click="handleDownOne(scope.row.scrappedId)">导出</el-button>
              <el-button size="small" style="color: #f56c6c" type="text" @click="deleteFun(scope.row.scrappedId)">删除</el-button>
              <el-button size="small" style="color: #f56c6c" type="text"
                @click="deleteFun(scope.row.scrappedId)">删除</el-button>
            </template>
          </el-table-column>
        </el-table>
        <el-pagination :current-page="1" :page-size="pagination1.size" :page-sizes="[10, 20, 30, 50, 100]"
                       :total="pagination1.total" layout="->,total, sizes, prev, pager, next, jumper" @size-change="handleSizeChange1"
                       @current-change="handleCurrentChange1">
          :total="pagination1.total" layout="->,total, sizes, prev, pager, next, jumper"
          @size-change="handleSizeChange1" @current-change="handleCurrentChange1">
        </el-pagination>
      </div>
    </div>
    <scrap-application-form v-if="applicationForm" ref="applicationForm" @closeDialog="closeDialog"></scrap-application-form>
    <scrap-application-form v-if="applicationForm" ref="applicationForm"
      @closeDialog="closeDialog"></scrap-application-form>
  </div>
</template>
<script>
import scrapApplicationForm from "./scrapApplicationForm.vue";
import {
  pageDeviceScrapped,
  exportDeviceScrapped,
  delDeviceScrapped,
} from '@/api/cnas/resourceDemand/device.js'
export default {
  name: "equipment-scrap",
  // import å¼•入的组件需要注入到对象中才能使用
@@ -70,19 +77,10 @@
    // æŸ¥è¯¢
    getYearTableDetailData (deviceId) {
      this.yearTableDetailDataLoading = true
      this.$axios.post(this.$api.deviceScrapped.pageDeviceScrapped,{
        page: {
      pageDeviceScrapped({
          current: this.pagination1.current,
          size: this.pagination1.size,
        },
        entity: {
          deviceId: deviceId,
        }
      }, {
        headers: {
          'Content-Type': 'application/json'
        },
        noQs: true
      }).then(res => {
        if (res.code == 200) {
          this.yearTableDetailData = res.data.records
@@ -116,37 +114,10 @@
    // å¯¼å‡º
    handleDownOne(id) {
      this.outLoading = true
      this.$axios.get(this.$api.deviceScrapped.exportDeviceScrapped + '?scrappedId=' + id, {
        responseType: "blob"
      }).then(res => {
      exportDeviceScrapped({ scrappedId: id }).then(res => {
        this.outLoading = false
        const blob = new Blob([res], { type: 'application/octet-stream' });
        //将Blob å¯¹è±¡è½¬æ¢æˆå­—符串
        let reader = new FileReader();
        reader.readAsText(blob, 'utf-8');
        reader.onload = () => {
          try {
            let result = JSON.parse(reader.result);
            if (result.message) {
              this.$message.error(result.message);
            } else {
              const url = URL.createObjectURL(blob);
              const link = document.createElement('a');
              link.href = url;
              link.download = '仪器设备报废申请表.doc';
              link.click();
              this.$message.success('导出成功')
            }
          } catch (err) {
            console.log(err);
            const url = URL.createObjectURL(blob);
            const link = document.createElement('a');
            link.href = url;
            link.download = '仪器设备报废申请表.doc';
            link.click();
            this.$message.success('导出成功')
          }
        }
        this.$download.saveAs(blob, '仪器设备报废申请表.doc')
      })
    },
    // åˆ é™¤
@@ -156,7 +127,7 @@
        cancelButtonText: '取消',
        type: 'warning'
      }).then(() => {
        this.$axios.get(this.$api.deviceScrapped.delDeviceScrapped + '?scrappedId=' + id).then(res => {
        delDeviceScrapped({ scrappedId: id }).then(res => {
          this.$message.success('删除成功!');
          this.getYearTableDetailData(this.clickNodeVal.value);
        });
@@ -185,6 +156,7 @@
  justify-content: space-between;
  align-items: center;
}
.title-search {
  display: flex;
  align-items: center;
src/views/CNAS/resourceDemand/device/component/equipmentVerificationPlan.vue
@@ -581,7 +581,6 @@
      this.outLoading = true
      exportReviewExamineRecordContrast({ planDetailsId: this.downRow.planDetailsId }).then(res => {
        this.outLoading = false
        this.$message.success('导出成功')
        const blob = new Blob([res], { type: 'application/octet-stream' });
        this.$download.saveAs(blob, '仪器设备期间核查比对记录表.doc')
      })
src/views/CNAS/resourceDemand/device/component/failureForm.vue
@@ -67,6 +67,11 @@
</template>
<script>
import {
  getDeviceBreakdownMaintenance,
  addDeviceBreakdownMaintenance,
} from '@/api/cnas/resourceDemand/device.js'
import { selectUserCondition } from "@/api/business/inspectionTask";
export default {
  name: "failure-form",
  // import å¼•入的组件需要注入到对象中才能使用
@@ -115,7 +120,9 @@
    },
    // æŸ¥è¯¢è¯¦æƒ…
    searchInfo() {
      this.$axios.get(this.$api.deviceBreakdownMaintenance.getDeviceBreakdownMaintenance + '?maintenanceId=' + this.form.maintenanceId).then(res => {
      getDeviceBreakdownMaintenance({
        maintenanceId: this.form.maintenanceId
      }).then(res => {
        if (res.code === 200) {
          this.form = { ...res.data }
          if (this.form.isFinish === 0) {
@@ -144,13 +151,7 @@
      this.form.flowType = this.currentStep
      this.$refs.modelForm.validate((valid) => {
        if (valid) {
          this.$axios.post(this.$api.deviceBreakdownMaintenance.addDeviceBreakdownMaintenance,
            this.form, {
            headers: {
              'Content-Type': 'application/json'
            },
            noQs: true
          }).then(res => {
          addDeviceBreakdownMaintenance(this.form).then(res => {
            if (res.code == 200) {
              this.$message.success('新增成功')
              this.resetForm()
@@ -168,18 +169,11 @@
      this.$emit('closeDialog')
    },
    getUserList() {
      this.$axios.post(this.$api.user.selectUserList, {
        page: { current: -1, size: -1, },
        entity: { name: null }
      }, {
        headers: {
          'Content-Type': 'application/json'
        }
      }).then(res => {
      selectUserCondition().then(res => {
        if (res.code === 201) {
          return
        }
        this.userList = res.data.records
        this.userList = res.data
      })
    },
  },
src/views/CNAS/resourceDemand/device/component/fault.vue
@@ -277,7 +277,7 @@
<script>
import { dateFormat } from '@/utils/date'
import { mapGetters } from "vuex";
export default {
  props: {
    clickNodeVal: {
@@ -308,6 +308,7 @@
    }
  },
  computed: {
    ...mapGetters(["nickName"]),
    action() {
      return this.javaApi + this.$api.personnel.saveCNASFile
    }
@@ -351,29 +352,28 @@
      this.$refs.form.validate((valid) => {
        if (valid === true || saveState !== '1submit') {
          // ç»™å½“前环节设置创建人与时间
          let user = JSON.parse(localStorage.getItem('user'))
          const dateTime = dateFormat(new Date())
          // èŽ·å–å½“å‰çŽ¯èŠ‚æ“ä½œäººä¸Žæ—¥æœŸ
          switch (this.currentStep) {
            case 0:
              this.form.submitUser = user.name
              this.form.submitOperatingPersonnel = user.name
              this.form.submitUser = this.nickName
              this.form.submitOperatingPersonnel = this.nickName
              this.form.submitDate = dateTime
              break
            case 1:
              this.form.adminOperatingPersonnel = user.name
              this.form.adminOperatingPersonnel = this.nickName
              this.form.adminDate = dateTime
              break
            case 2:
              this.form.technicalOperatingPersonnel = user.name
              this.form.technicalOperatingPersonnel = this.nickName
              this.form.technicalDate = dateTime
              break
            case 3:
              this.form.maintainOperatingPersonnel = user.name
              this.form.maintainOperatingPersonnel = this.nickName
              this.form.maintainDate = dateTime
              break
            case 4:
              this.form.afterMaintenanceOperatingPersonnel = user.name
              this.form.afterMaintenanceOperatingPersonnel = this.nickName
              this.form.afterMaintenanceDate = dateTime
              break
            default:
src/views/CNAS/resourceDemand/device/component/files.vue
@@ -809,7 +809,6 @@
        this.outLoading = false
        const blob = new Blob([res], { type: 'application/octet-stream' });
        this.$download.saveAs(blob, '设备档案卡.doc')
        this.$message.success('导出成功')
      })
    },
    handleSuccessUpImg2(response) {
src/views/CNAS/resourceDemand/device/component/inspectionForm.vue
@@ -136,6 +136,13 @@
</template>
<script>
import {
  getDeviceInspectionRecord,
  addDeviceInspectionRecord,
  updateDeviceInspectionRecord,
  reviewDeviceInspectionRecord,
} from '@/api/cnas/resourceDemand/device.js'
import { selectUserCondition } from "@/api/business/inspectionTask";
export default {
  name: "inspection-form",
  // import å¼•入的组件需要注入到对象中才能使用
@@ -181,7 +188,9 @@
      }
    },
    searchInfo() {
      this.$axios.get(this.$api.deviceInspectionRecord.getDeviceInspectionRecord + '?inspectionRecordId=' + this.form.inspectionRecordId).then(res => {
      getDeviceInspectionRecord({
        inspectionRecordId: this.form.inspectionRecordId
      }).then(res => {
        if (res.code === 200) {
          this.form = { ...res.data }
          this.details = this.form.details || []
@@ -198,13 +207,7 @@
      this.form.details = this.HaveJson(this.details)
      this.submitFormLoading = true
      if (this.operationType === 'add') {
        this.$axios.post(this.$api.deviceInspectionRecord.addDeviceInspectionRecord,
          this.form, {
          headers: {
            'Content-Type': 'application/json'
          },
          noQs: true
        }).then(res => {
        addDeviceInspectionRecord(this.form).then(res => {
          if (res.code == 200) {
            this.$message.success('新增成功')
            this.resetForm()
@@ -214,13 +217,7 @@
          this.submitFormLoading = false
        })
      } else {
        this.$axios.post(this.$api.deviceInspectionRecord.updateDeviceInspectionRecord,
          this.form, {
          headers: {
            'Content-Type': 'application/json'
          },
          noQs: true
        }).then(res => {
        updateDeviceInspectionRecord(this.form).then(res => {
          if (res.code == 200) {
            this.$message.success('新增成功')
            this.resetForm()
@@ -236,13 +233,7 @@
        inspectionRecordId: this.form.inspectionRecordId,
        status: status,
      }
      this.$axios.post(this.$api.deviceInspectionRecord.reviewDeviceInspectionRecord,
        params, {
        headers: {
          'Content-Type': 'application/json'
        },
        noQs: true
      }).then(res => {
      reviewDeviceInspectionRecord(params).then(res => {
        if (res.code == 200) {
          this.$message.success('审核成功')
          this.resetForm()
@@ -257,18 +248,11 @@
      this.$emit('closeDialog')
    },
    getUserList() {
      this.$axios.post(this.$api.user.selectUserList, {
        page: { current: -1, size: -1, },
        entity: { name: null }
      }, {
        headers: {
          'Content-Type': 'application/json'
        }
      }).then(res => {
      selectUserCondition().then(res => {
        if (res.code === 201) {
          return
        }
        this.userList = res.data.records
        this.userList = res.data
      })
    },
  },
src/views/CNAS/resourceDemand/device/component/inspectionOfEquipment.vue
@@ -48,7 +48,11 @@
<script>
import InspectionForm from "./inspectionForm.vue";
import {
  getDeviceInspectionRecordByPage,
  exportDeviceInspectionRecord,
  deleteDeviceInspectionRecord,
} from '@/api/cnas/resourceDemand/device.js'
export default {
  name: "inspection-of-equipment",
  // import å¼•入的组件需要注入到对象中才能使用
@@ -81,19 +85,10 @@
    // æŸ¥è¯¢
    getYearTableDetailData(deviceId) {
      this.yearTableDetailDataLoading = true
      this.$axios.post(this.$api.deviceInspectionRecord.getDeviceInspectionRecordByPage, {
        page: {
      getDeviceInspectionRecordByPage({
          current: this.pagination1.current,
          size: this.pagination1.size,
        },
        entity: {
          deviceId: deviceId,
        }
      }, {
        headers: {
          'Content-Type': 'application/json'
        },
        noQs: true
      }).then(res => {
        if (res.code == 200) {
          this.yearTableDetailData = res.data.records
@@ -127,37 +122,12 @@
    // å¯¼å‡º
    handleDownOne(id) {
      this.outLoading = true
      this.$axios.get(this.$api.deviceInspectionRecord.exportDeviceInspectionRecord + '?inspectionRecordId=' + id, {
        responseType: "blob"
      exportDeviceInspectionRecord({
        inspectionRecordId: id
      }).then(res => {
        this.outLoading = false
        const blob = new Blob([res], { type: 'application/octet-stream' });
        //将Blob å¯¹è±¡è½¬æ¢æˆå­—符串
        let reader = new FileReader();
        reader.readAsText(blob, 'utf-8');
        reader.onload = () => {
          try {
            let result = JSON.parse(reader.result);
            if (result.message) {
              this.$message.error(result.message);
            } else {
              const url = URL.createObjectURL(blob);
              const link = document.createElement('a');
              link.href = url;
              link.download = '设备点检记录表.doc';
              link.click();
              this.$message.success('导出成功')
            }
          } catch (err) {
            console.log(err);
            const url = URL.createObjectURL(blob);
            const link = document.createElement('a');
            link.href = url;
            link.download = '设备点检记录表.doc';
            link.click();
            this.$message.success('导出成功')
          }
        }
        this.$download.saveAs(blob, '设备点检记录表.doc')
      })
    },
    // åˆ é™¤
@@ -167,7 +137,7 @@
        cancelButtonText: '取消',
        type: 'warning'
      }).then(() => {
        this.$axios.get(this.$api.deviceInspectionRecord.deleteDeviceInspectionRecord + '?inspectionRecordId=' + id).then(res => {
        deleteDeviceInspectionRecord({ inspectionRecordId: id }).then(res => {
          this.$message.success('删除成功!');
          this.getYearTableDetailData(this.clickNodeVal.value);
        });
src/views/CNAS/resourceDemand/device/component/maintenance.vue
@@ -118,8 +118,10 @@
<script>
import {
  exportMaintenanceRecord,
  deviceMaintainDelete,
  deleteDeviceMaintenance,
  selectDeviceByCode,
  addDeviceMaintenance,
  getDeviceMaintenancePage,
} from '@/api/cnas/resourceDemand/device.js'
export default {
  props: {
@@ -180,33 +182,7 @@
      exportMaintenanceRecord({ deviceId: this.clickNodeVal.value }).then(res => {
        this.outLoading = false
        const blob = new Blob([res], { type: 'application/octet-stream' });
        this.$message.success('导出成功')
        //将Blob å¯¹è±¡è½¬æ¢æˆå­—符串
        let reader = new FileReader();
        reader.readAsText(blob, 'utf-8');
        reader.onload = () => {
          try {
            let result = JSON.parse(reader.result);
            if (result.message) {
              this.$message.error(result.message);
            } else {
              const url = URL.createObjectURL(blob);
              const link = document.createElement('a');
              link.href = url;
              link.download = '设备维护保养记录.doc';
              link.click();
              this.$message.success('导出成功')
            }
          } catch (err) {
            console.log(err);
            const url = URL.createObjectURL(blob);
            const link = document.createElement('a');
            link.href = url;
            link.download = '设备维护保养记录.doc';
            link.click();
            this.$message.success('导出成功')
          }
        }
        this.$download.saveAs(blob, '设备维护保养记录.doc')
      })
    },
    //操作详情删除
@@ -216,9 +192,10 @@
        cancelButtonText: '取消',
        type: 'warning'
      }).then(() => {
        deviceMaintainDelete(row.id).then(res => {
        deleteDeviceMaintenance({ id: row.id }).then(res => {
        })
        this.MaintainParam.splice(index, 1);
        // this.MaintainParam.splice(index, 1);
        this.getAllMessage(this.clickNodeVal.value)
        this.$message({
          type: 'success',
          message: '删除成功!'
@@ -246,15 +223,15 @@
      this.$refs['form'].validate((valid) => {
        if (valid) {
          this.formData.deviceId = this.clickNodeVal.value;
          this.$axios.post(this.$api.deviceCheck.deviceMaintainAdd, this.formData).then(res => {
          addDeviceMaintenance(this.formData).then(res => {
            if (res.code == 200) {
              this.$message.success('添加成功');
              this.getAllMessage(this.clickNodeVal.value)
            }
          })
          this.MaintainParam.push(this.formData)
          this.dialogVisible = false;
          this.formData = {}; //清空表单
            }
          })
          // this.MaintainParam.push(this.formData)
        }
      })
    },
@@ -269,7 +246,10 @@
    },
    //获取表单设备维护信息
    getAllMessage(deviceId) {
      this.$axios.get(this.$api.deviceCheck.getDeviceMaintenancePage + "?deviceId=" + deviceId + "&size=" + this.search.size + "&current=" + this.search.current + "&deviceNumber=" + this.search.deviceNumber).then(res => {
      getDeviceMaintenancePage({
        deviceId,
        ...this.search
      }).then(res => {
        if (res.code == 200) {
          this.MaintainParam = res.data.records
          this.search.total = res.data.total
src/views/CNAS/resourceDemand/device/component/operationInstruction.vue
@@ -1,16 +1,9 @@
<!-- ä½œä¸šæŒ‡å¯¼ä¹¦ -->
<template>
  <div>
    <div style="width:100%;height:30px;margin:5px 0px">
      <el-row>
        <el-col :span="12" style="text-align: left;">
          <p style="line-height: 30px;">作业指导书</p>
        </el-col>
        <el-col :span="12" style="text-align: right;">
    <div style="margin: 10px 0;text-align: right">
          <el-button size="small" type="primary" @click="getList">刷新</el-button>
          <el-button size="small" type="primary" @click="dialogVisible = true">受控申请</el-button>
        </el-col>
      </el-row>
    </div>
    <el-table :data="tableData" border height="calc(100vh - 18em)">
      <el-table-column type="index" label="序号" width="120">
@@ -58,8 +51,8 @@
              </el-form-item>
              <el-form-item label="附件:" style="float: left;">
                <el-upload ref="uploadFile" :action="action" :before-remove="beforeRemove" :file-list="fileList1"
                  :headers="headers" :limit="1" :on-error="onError" :on-exceed="handleExceed" :on-remove="handleRemove1"
                  :on-success="onSuccess1" class="upload-demo" multiple>
                  :headers="uploadHeader" :limit="1" :on-error="onError" :on-exceed="handleExceed"
                  :on-remove="handleRemove1" :on-success="onSuccess1" class="upload-demo" multiple>
                  <el-button size="small" type="primary">点击上传</el-button>
                </el-upload>
              </el-form-item>
@@ -86,7 +79,7 @@
          <el-button size="small" @click="delFile">删除</el-button>
        </div>
        <el-table :data="documentTableData" border style="width: 100%;" tooltip-effect="dark" :row-key="getRowKey"
          @selection-change="handleSelectionChange" height="30em">
          @selection-change="handleSelectionChange" height="29em">
          <el-table-column type="selection" width="55%">
          </el-table-column>
          <el-table-column label="序号" prop="id" type="index" width="60"></el-table-column>
@@ -165,8 +158,8 @@
            <el-col :span="24">
              <el-form-item label="附件:" style="float: left;">
                <el-upload ref="uploadFile" :action="action" :before-remove="beforeRemove" :file-list="fileList"
                  :headers="headers" :limit="1" :on-error="onError" :on-exceed="handleExceed" :on-remove="handleRemove"
                  :on-success="onSuccess" class="upload-demo" multiple>
                  :headers="uploadHeader" :limit="1" :on-error="onError" :on-exceed="handleExceed"
                  :on-remove="handleRemove" :on-success="onSuccess" class="upload-demo" multiple>
                  <el-button size="small" type="primary">点击上传</el-button>
                </el-upload>
              </el-form-item>
@@ -184,7 +177,15 @@
<script>
import fileDownload from "@/utils/file";
import {
  approvalOfHomeworkInstructionManual,
  homeworkGuidebook,
  homeworkGuidebookEditor,
  newHomeworkGuidebookAdded,
  deleteHomeworkGuidebook,
  pageByPageQueryOfHomeworkInstructions,
  selectDeviceParameter,
} from '@/api/cnas/resourceDemand/device.js'
export default {
  props: {
    clickNodeVal: {
@@ -275,13 +276,14 @@
      });
    },
    approvalFun(id, status) {
      this.$axios.get(this.$api.deviceCheck.approvalOfHomeworkInstructionManual + "?id=" + id + "&status=" + status).then(res => {
      approvalOfHomeworkInstructionManual({ id, status }).then(res => {
        this.getList()
      })
      this.$message({
        type: 'success',
        message: '操作成功!'
      });
      })
    },
    getRowKey(row) {
      return row.index
@@ -292,7 +294,10 @@
        cancelButtonText: '取消',
        type: 'warning'
      }).then(() => {
        this.$axios.get(this.$api.deviceCheck.homeworkGuidebook + "?id=" + row.id + "&instructionId=" + row.instructionId).then(res => {
        homeworkGuidebook({
          id: row.id,
          instructionId: row.instructionId
        }).then(res => {
          this.$message.success('删除成功!')
          this.getList()
        })
@@ -319,7 +324,7 @@
    },
    instructionEditFun(row) {
      this.dialogVisible = true
      this.$axios.get(this.$api.deviceCheck.homeworkGuidebookEditor + "?instructionId=" + row.instructionId).then(res => {
      homeworkGuidebookEditor({ instructionId: row.instructionId }).then(res => {
        if (res.code == 200) {
          this.instructionForm = res.data.instruction;
          if (this.instructionForm.fileSystemName) {
@@ -345,11 +350,7 @@
      this.$refs.form1.validate((valid) => {
        if (valid) {
          this.instructionForm.feTempHumRecordList = this.documentTableData
          this.$axios.post(this.$api.deviceCheck.newHomeworkGuidebookAdded, this.instructionForm, {
            headers: {
              'Content-Type': 'application/json'
            }
          }).then(res => {
          newHomeworkGuidebookAdded(this.instructionForm).then(res => {
            if (res.code == 200) {
              this.$message.success('操作成功!')
              this.dialogVisible = false
@@ -445,7 +446,7 @@
        .filter(item => item.id !== undefined)
        .map(item => item.id).join(',');
      //有错误
      const res = await this.$axios.get(this.$api.deviceCheck.deleteHomeworkGuidebook + '?ids=' + ids);
      const res = await deleteHomeworkGuidebook({ ids });
      if (res.code === 200) {
        // åˆ é™¤è§†å›¾çš„æ•°æ®
        for (const resKey in this.selectedRow) {
@@ -483,7 +484,7 @@
      this.$message.warning(`当前限制选择 1 ä¸ªæ–‡ä»¶ï¼Œæœ¬æ¬¡é€‰æ‹©äº† ${files.length} ä¸ªæ–‡ä»¶ã€‚`);
    },
    getList() {
      this.$axios.get(this.$api.deviceCheck.pageByPageQueryOfHomeworkInstructions + "?size=" + this.search.size + "&current=" + this.search.current).then(res => {
      pageByPageQueryOfHomeworkInstructions({ ...this.search }).then(res => {
        if (res.code == 200) {
          this.tableData = res.data.records;
          this.search.total = res.data.total
@@ -491,17 +492,7 @@
      })
    },
    getAllDevice() {
      this.$axios.post(this.$api.deviceScope.selectDeviceParameter + "?laboratoryNameIsNull=" + this.laboratoryNameIsNull, {
        page: {
          current: 1,
          size: -1
        },
        entity: this.entity
      }, {
        headers: {
          'Content-Type': 'application/json'
        }
      }).then(res => {
      selectDeviceParameter({ laboratoryNameIsNull: this.laboratoryNameIsNull }).then(res => {
        if (res.code == 200) {
          this.devices = res.data.records;
          this.updateDeviceNameOptions();
@@ -527,13 +518,8 @@
    },
  },
  computed: {
    headers() {
      return {
        'token': sessionStorage.getItem('token')
      }
    },
    action() {
      return this.javaApi + this.$api.personnel.saveCNASFile
      return this.javaApi + '/personBasicInfo/saveCNASFile'
    }
  },
}
src/views/CNAS/resourceDemand/device/component/record.vue
@@ -350,14 +350,7 @@
    },
    getUserList() {
      selectUserCondition().then(res => {
        let data = [];
        res.data.forEach((a) => {
          data.push({
            label: a.name,
            value: a.id,
          });
        });
        this.userList = data
        this.userList = res.data
      })
    },
  },
src/views/CNAS/resourceDemand/device/component/scrapApplicationForm.vue
@@ -73,6 +73,11 @@
</template>
<script>
import {
  getDeviceScrapped,
  addDeviceScrapped,
} from '@/api/cnas/resourceDemand/device.js'
import { selectUserCondition } from "@/api/business/inspectionTask";
export default {
  name: "scrapApplicationForm",
  // import å¼•入的组件需要注入到对象中才能使用
@@ -122,7 +127,9 @@
    },
    // æŸ¥è¯¢è¯¦æƒ…
    searchInfo() {
      this.$axios.get(this.$api.deviceScrapped.getDeviceScrapped + '?scrappedId=' + this.form.scrappedId).then(res => {
      getDeviceScrapped({
        scrappedId: this.form.scrappedId
      }).then(res => {
        if (res.code === 200) {
          this.form = { ...res.data }
          if (this.form.isFinish === 0) {
@@ -155,13 +162,7 @@
      this.form.flowType = this.currentStep
      this.$refs.modelForm.validate((valid) => {
        if (valid) {
          this.$axios.post(this.$api.deviceScrapped.addDeviceScrapped,
            this.form, {
            headers: {
              'Content-Type': 'application/json'
            },
            noQs: true
          }).then(res => {
          addDeviceScrapped(this.form).then(res => {
            if (res.code == 200) {
              this.$message.success('新增成功')
              this.resetForm()
@@ -179,18 +180,11 @@
      this.$emit('closeDialog')
    },
    getUserList() {
      this.$axios.post(this.$api.user.selectUserList, {
        page: { current: -1, size: -1, },
        entity: { name: null }
      }, {
        headers: {
          'Content-Type': 'application/json'
        }
      }).then(res => {
      selectUserCondition().then(res => {
        if (res.code === 201) {
          return
        }
        this.userList = res.data.records
        this.userList = res.data
      })
    },
  },
src/views/CNAS/resourceDemand/device/component/state.vue
@@ -237,7 +237,17 @@
  </div>
</template>
<script>
import {
  saveDeviceState,
  selectDeviceByCode,
  exportDeviceStatus,
  deleteDeviceState,
  deviceStateExport,
  getDeviceStatePage,
} from '@/api/cnas/resourceDemand/device.js'
import { selectUserCondition } from "@/api/business/inspectionTask";
import { dateFormat } from '@/utils/date'
import { mapGetters } from "vuex";
export default {
  props: {
    clickNodeVal: {
@@ -246,6 +256,9 @@
        return {};
      }
    }
  },
  computed: {
    ...mapGetters(["nickName"]),
  },
  data() {
    return {
@@ -311,25 +324,24 @@
      this.$refs.form.validate((valid) => {
        if (valid === true || saveState !== '1submit') {
          // ç»™å½“前环节设置创建人与时间
          let user = JSON.parse(localStorage.getItem('user'))
          const dateTime = dateFormat(new Date())
          // èŽ·å–å½“å‰çŽ¯èŠ‚æ“ä½œäººä¸Žæ—¥æœŸ
          switch (this.currentStep) {
            case 0:
              this.form.createUser = user.name
              this.form.submitOperatingPersonnel = user.name
              this.form.createUser = this.nickName
              this.form.submitOperatingPersonnel = this.nickName
              this.form.submitDate = dateTime
              break
            case 1:
              this.form.departmentOperatingPersonnel = user.name
              this.form.departmentOperatingPersonnel = this.nickName
              this.form.departmentDate = dateTime
              break
            case 2:
              this.form.measuringRoomOperatingPersonnel = user.name
              this.form.measuringRoomOperatingPersonnel = this.nickName
              this.form.measuringRoomDate = dateTime
              break
            case 3:
              this.form.approvalOperatingPersonnel = user.name
              this.form.approvalOperatingPersonnel = this.nickName
              this.form.approvalDate = dateTime
              break
            default:
@@ -355,11 +367,7 @@
          // èŽ·å–å½“å‰çŠ¶æ€
          this.form.currentState = currentStepAction === 4 ? '关闭' : this.steps[currentStepAction]
          this.form.deviceId = this.clickNodeVal.value
          this.$axios.post(this.$api.deviceCheck.saveDeviceState, this.form, {
            headers: {
              'Content-Type': 'application/json'
            }
          }).then(res => {
          saveDeviceState(this.form).then(res => {
            if (res.code == 200) {
              this.$message.success('提交成功')
              this.getDeviceStatePage(this.clickNodeVal.value)
@@ -385,7 +393,7 @@
    },
    openRecordAcceptance() {
      // èŽ·å–è®¾å¤‡åŸºç¡€ä¿¡æ¯
      this.$axios.get(this.$api.deviceScope.selectDeviceByCode + '?id=' + this.clickNodeVal.value).then(res => {
      selectDeviceByCode({ id: this.clickNodeVal.value }).then(res => {
        this.form.deviceName = res.data.deviceName
        this.form.specificationModel = res.data.specificationModel
        this.form.managementNumber = res.data.managementNumber
@@ -398,7 +406,7 @@
    },
    // èŽ·å–è´Ÿè´£äººä¿¡æ¯æŽ¥å£
    getUserList() {
      this.$axios.get(this.$api.deviceScope.selectUserList).then(res => {
      selectUserCondition().then(res => {
        if (res.code == 200) {
          this.responsibleOptions = res.data
        }
@@ -418,37 +426,10 @@
    // å¯¼å‡º
    handleDownOne(row) {
      this.outLoading = true
      this.$axios.get(this.$api.deviceCheck.exportDeviceStatus + '?deviceId=' + row.deviceId + '&processNumber=' + row.processNumber, {
        responseType: "blob"
      }).then(res => {
      exportDeviceStatus({ deviceId: row.deviceId, processNumber: row.processNumber }).then(res => {
        this.outLoading = false
        const blob = new Blob([res], { type: 'application/octet-stream' });
        //将Blob å¯¹è±¡è½¬æ¢æˆå­—符串
        let reader = new FileReader();
        reader.readAsText(blob, 'utf-8');
        reader.onload = () => {
          try {
            let result = JSON.parse(reader.result);
            if (result.message) {
              this.$message.error(result.message);
            } else {
              const url = URL.createObjectURL(blob);
              const link = document.createElement('a');
              link.href = url;
              link.download = '设备停/启用.doc';
              link.click();
              this.$message.success('导出成功')
            }
          } catch (err) {
            console.log(err);
            const url = URL.createObjectURL(blob);
            const link = document.createElement('a');
            link.href = url;
            link.download = '设备停/启用.doc';
            link.click();
            this.$message.success('导出成功')
          }
        }
        this.$download.saveAs(blob, '设备停/启用.doc')
      })
    },
    // åˆ é™¤
@@ -458,7 +439,7 @@
        cancelButtonText: '取消',
        type: 'warning'
      }).then(() => {
        this.$axios.delete(this.$api.deviceCheck.deleteDeviceState + '?stateId=' + row.stateId).then(res => {
        deleteDeviceState({ stateId: row.stateId }).then(res => {
          if (res.code == 200) {
            this.$message.success('删除成功')
            this.getDeviceStatePage(this.clickNodeVal.value)
@@ -470,43 +451,17 @@
          message: '已取消删除'
        });
      });
    },
    //导出
    handleDown() {
      this.outLoading = true
      this.$axios.post(this.$api.deviceCheck.deviceStateExport, {
      deviceStateExport({
        deviceId: this.clickNodeVal.value,
        processNumber: this.search.processNumber
      }, { responseType: "blob" }).then(res => {
      }).then(res => {
        this.outLoading = false
        const blob = new Blob([res], { type: 'application/octet-stream' });
        //将Blob å¯¹è±¡è½¬æ¢æˆå­—符串
        let reader = new FileReader();
        reader.readAsText(blob, 'utf-8');
        reader.onload = () => {
          try {
            let result = JSON.parse(reader.result);
            if (result.message) {
              this.$message.error(result.message);
            } else {
              const url = URL.createObjectURL(blob);
              const link = document.createElement('a');
              link.href = url;
              link.download = '设备停用/启用.xlsx';
              link.click();
              this.$message.success('导出成功')
            }
          } catch (err) {
            console.log(err);
            const url = URL.createObjectURL(blob);
            const link = document.createElement('a');
            link.href = url;
            link.download = '设备停用/启用.xlsx';
            link.click();
            this.$message.success('导出成功')
          }
        }
        this.$download.saveAs(blob, '设备停用/启用.xlsx')
      }).finally(() => {
        this.outLoading = false
      })
@@ -521,7 +476,7 @@
      this.getDeviceStatePage(this.clickNodeVal.value);
    },
    getDeviceStatePage(deviceId) {
      this.$axios.get(this.$api.deviceCheck.getDeviceStatePage + '?deviceId=' + deviceId + "&size=" + this.search.size + "&current=" + this.search.current + "&processNumber=" + this.search.processNumber).then(res => {
      getDeviceStatePage({ deviceId, ...this.search }).then(res => {
        if (res.code == 200) {
          this.tableDatalist = res.data.records
          this.search.total = res.data.total
src/views/CNAS/resourceDemand/device/index.vue
@@ -97,29 +97,37 @@
          <!--            <check v-if="tabListActiveName == '设备核查'" :clickNodeVal="clickNodeVal"/>-->
          <!--          </el-tab-pane>-->
          <el-tab-pane label="设备维护" name="设备维护">
            <!-- å®ŒæˆæŽ¥å£ -->
            <maintenance v-if="tabListActiveName == '设备维护'" :clickNodeVal="clickNodeVal" />
          </el-tab-pane>
          <el-tab-pane label="设备借用" name="设备借用">
            <!-- å®ŒæˆæŽ¥å£ -->
            <borrow v-if="tabListActiveName == '设备借用'" :clickNodeVal="clickNodeVal" />
          </el-tab-pane>
          <!--          <el-tab-pane label="设备故障" name="设备故障">-->
          <!--            <fault v-if="tabListActiveName == '设备故障'" :clickNodeVal="clickNodeVal" />-->
          <!--          </el-tab-pane>-->
          <!-- å®ŒæˆæŽ¥å£ -->
          <el-tab-pane label="使用记录" name="使用记录">
            <record v-if="tabListActiveName == '使用记录'" :clickNodeVal="clickNodeVal" />
          </el-tab-pane>
          <!-- å®ŒæˆæŽ¥å£ -->
          <el-tab-pane label="设备停用/启用" name="设备停用/启用">
            <state v-if="tabListActiveName == '设备停用/启用'" :clickNodeVal="clickNodeVal" />
          </el-tab-pane>
          <!-- å®ŒæˆæŽ¥å£ -->
          <el-tab-pane label="设备报废" name="设备报废">
            <equipment-scrap v-if="tabListActiveName == '设备报废'" :clickNodeVal="clickNodeVal" />
          </el-tab-pane>
          <!-- å®ŒæˆæŽ¥å£ -->
          <el-tab-pane label="设备故障与维修" name="设备故障与维修">
            <equipment-failure v-if="tabListActiveName == '设备故障与维修'" :clickNodeVal="clickNodeVal" />
          </el-tab-pane>
          <!-- å®ŒæˆæŽ¥å£ -->
          <el-tab-pane label="设备点检" name="设备点检">
            <inspection-of-equipment v-if="tabListActiveName == '设备点检'" :clickNodeVal="clickNodeVal" />
          </el-tab-pane>
          <!-- å®ŒæˆæŽ¥å£ -->
          <el-tab-pane label="设备事故" name="设备事故">
            <equipment-accident v-if="tabListActiveName == '设备事故'" :clickNodeVal="clickNodeVal" />
          </el-tab-pane>
@@ -233,13 +241,13 @@
      }
    },
    nodeOpen(data, node, el) {
      $($(el.$el).find(".node_i")[0]).attr(
        "class",
        "node_i el-icon-folder-opened"
      );
      // $($(el.$el).find(".node_i")[0]).attr(
      //   "class",
      //   "node_i el-icon-folder-opened"
      // );
    },
    nodeClose(data, node, el) {
      $($(el.$el).find(".node_i")[0]).attr("class", "node_i el-icon-folder");
      // $($(el.$el).find(".node_i")[0]).attr("class", "node_i el-icon-folder");
    },
  }
};
src/views/CNAS/resourceDemand/facilitiesEnvironment/component/Personnel-management.vue
@@ -4,14 +4,8 @@
      <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 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>
@@ -29,7 +23,8 @@
      <lims-table :tableData="tableData" :column="tableColumn" :height="'calc(100vh - 250px)'" @pagination="pagination"
                  :page="page" :tableLoading="tableLoading"></lims-table>
    </div>
    <personnel-management-dia v-if="threeWastesDia" ref="threeWastesDia" @closeThreeWastesDia="closeThreeWastesDia"></personnel-management-dia>
    <personnel-management-dia v-if="threeWastesDia" ref="threeWastesDia"
      @closeThreeWastesDia="closeThreeWastesDia"></personnel-management-dia>
  </div>
</template>
@@ -189,7 +184,6 @@
      exportForeignRegister(this.searchForm).then(res => {
        const blob = new Blob([res],{ type: 'application/msword' });
        this.$download.saveAs(blob, '外来人员登记.docx')
        this.$message.success('导出成功')
      })
    },
    closeThreeWastesDia () {
src/views/CNAS/resourceDemand/facilitiesEnvironment/component/facilities-environmental-conditions/illuminance-recording.vue
@@ -6,10 +6,7 @@
        <el-button size="small" type="primary" @click="clickAdd">新 å¢ž</el-button>
      </div>
    </div>
    <el-table
      :data="tableData"
      height="calc(100vh - 18em)"
      style="width: 100%">
    <el-table :data="tableData" height="calc(100vh - 18em)" 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>
@@ -32,41 +29,26 @@
        </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"
    <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">
    <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 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="设备名称"
                <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}}
@@ -91,8 +73,8 @@
            </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-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>
@@ -100,8 +82,8 @@
            </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-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>
@@ -109,11 +91,7 @@
            </el-col>
            <el-col :span="24">
              <el-form-item label="结论">
                <el-input
                  v-model="form.conclusion"
                  :rows="2"
                  placeholder="请输入内容"
                  type="textarea">
                <el-input v-model="form.conclusion" :rows="2" placeholder="请输入内容" type="textarea">
                </el-input>
              </el-form-item>
            </el-col>
@@ -123,25 +101,14 @@
              <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 :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">
                <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">
                <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 }">
@@ -165,19 +132,12 @@
                    </el-table-column>
                  </template>
                </el-table-column>
                <el-table-column
                  align="center"
                  label="备注"
                  min-width="180"
                  prop="detectionAreaLabel">
                <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">
                <el-table-column fixed="right" label="操作" width="100">
                  <template slot-scope="scope">
                    <el-button size="small" type="text" @click="feMeasuredQuantityListDelete(scope.row, scope.$index)">
                      åˆ é™¤
@@ -383,7 +343,6 @@
        this.outLoading = false
        const blob = new Blob([res],{ type: 'application/msword' });
        this.$download.saveAs(blob, '照度记录.docx')
        this.$message.success('导出成功')
      })
    },
  }
src/views/CNAS/resourceDemand/facilitiesEnvironment/component/facilities-environmental-conditions/power-supply-stability.vue
@@ -6,10 +6,7 @@
        <el-button size="small" type="primary" @click="openAddDia">新 å¢ž</el-button>
      </div>
    </div>
    <el-table
      :data="tableData"
      height="calc(100vh - 18em)"
      style="width: 100%">
    <el-table :data="tableData" height="calc(100vh - 18em)" 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>
@@ -33,16 +30,11 @@
        </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"
    <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">
    <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>
@@ -55,25 +47,15 @@
            <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 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="设备名称"
                <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}}
@@ -98,8 +80,8 @@
            </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-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>
@@ -107,8 +89,8 @@
            </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-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>
@@ -116,11 +98,7 @@
            </el-col>
            <el-col :span="24">
              <el-form-item label="结论">
                <el-input
                  v-model="form.conclusion"
                  :rows="2"
                  placeholder="请输入内容"
                  type="textarea">
                <el-input v-model="form.conclusion" :rows="2" placeholder="请输入内容" type="textarea">
                </el-input>
              </el-form-item>
            </el-col>
@@ -130,25 +108,14 @@
              <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 :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">
                <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">
                <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 }">
@@ -167,10 +134,7 @@
                    </el-table-column>
                  </template>
                </el-table-column>
                <el-table-column
                  fixed="right"
                  label="操作"
                  width="100">
                <el-table-column fixed="right" label="操作" width="100">
                  <template slot-scope="scope">
                    <el-button size="small" type="text" @click="feMeasuredQuantityListDelete(scope.row, scope.$index)">
                      åˆ é™¤
@@ -357,7 +321,6 @@
        this.outLoading = false
        const blob = new Blob([res],{ type: 'application/msword' });
        this.$download.saveAs(blob, '电源稳定性.docx')
        this.$message.success('导出成功')
      })
    },
    // ç”µæºç¨³å®šæ€§ ç‚¹å‡»è¡Œç¼–辑触发
src/views/CNAS/resourceDemand/facilitiesEnvironment/component/facilities-environmental-conditions/temperature-humidity-record.vue
@@ -11,11 +11,7 @@
            <el-button size="small" type="primary" @click="clickAdd">新 å¢ž</el-button>
          </div>
        </div>
        <el-table
            :data="tableData"
            height="calc(100vh - 18em)"
            highlight-current-row
            style="width: 100%"
        <el-table :data="tableData" height="calc(100vh - 18em)" 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>
@@ -31,14 +27,14 @@
            <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 :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"
          :total="search.total" layout="->,total, sizes, prev, pager, next, jumper" @size-change="handleSizeChange"
                       @current-change="handleCurrentChange">
        </el-pagination>
      </el-col>
@@ -46,18 +42,17 @@
        <div class="header">
          <div>温湿度记录:{{ saveRow.monthDate }}</div>
          <div>
            <el-button v-if="saveRow.monthDate" size="small" type="primary" @click="dialogVisible1 = true">新 å¢ž</el-button>
            <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 :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="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>
@@ -80,30 +75,20 @@
          </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"
          :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%">
    <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 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>
@@ -121,36 +106,21 @@
    <el-button type="primary" :loading="submitLoading" @click="addPowerSupplyStability">ç¡® å®š</el-button>
  </span>
    </el-dialog>
    <el-dialog
        :visible.sync="dialogVisible1"
        title="提示"
        width="50%"
        @open="openDialog">
    <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 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 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>
@@ -166,8 +136,8 @@
            </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-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>
@@ -175,13 +145,8 @@
            </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 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>
@@ -197,8 +162,8 @@
            </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-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>
@@ -206,11 +171,7 @@
            </el-col>
            <el-col :span="24">
              <el-form-item label="备注">
                <el-input
                    v-model="form1.note"
                    :rows="2"
                    placeholder="请输入内容"
                    type="textarea">
                <el-input v-model="form1.note" :rows="2" placeholder="请输入内容" type="textarea">
                </el-input>
              </el-form-item>
            </el-col>
@@ -392,7 +353,6 @@
        this.outLoading = false
        const blob = new Blob([res],{ type: 'application/msword' });
        this.$download.saveAs(blob, '温湿度记录.docx')
        this.$message.success('导出成功')
      })
    },
    deleteRowFun1(row) {
@@ -410,7 +370,8 @@
    initData() {
      getFeTempHumDate({
        ...this.search,
        ...this.search}).then(res => {
        ...this.search
      }).then(res => {
        if (res.code === 200){
          this.tableData = res.data.records;
          this.search.total = res.data.total;
src/views/CNAS/resourceDemand/facilitiesEnvironment/component/three-wastes-treatment.vue
@@ -22,7 +22,8 @@
      <lims-table :tableData="tableData" :column="tableColumn" :height="'calc(100vh - 250px)'" @pagination="pagination"
                  :page="page" :tableLoading="tableLoading"></lims-table>
    </div>
    <three-wastes-dialog v-if="threeWastesDia" ref="threeWastesDia" @closeThreeWastesDia="closeThreeWastesDia"></three-wastes-dialog>
    <three-wastes-dialog v-if="threeWastesDia" ref="threeWastesDia"
      @closeThreeWastesDia="closeThreeWastesDia"></three-wastes-dialog>
  </div>
</template>
@@ -172,7 +173,6 @@
        this.outLoading = false
        const blob = new Blob([res],{ type: 'application/msword' });
        this.$download.saveAs(blob, '三废处理导出.docx')
        this.$message.success('导出成功')
      })
    },
    closeThreeWastesDia () {
src/views/CNAS/resourceDemand/standardMaterial/index.vue
@@ -184,7 +184,6 @@
        this.outLoading = false
        const blob = new Blob([res], {type: 'application/octet-stream'},false);
        this.$download.saveAs(blob, '标准物质清单.xlsx')
        this.$message.success('导出成功')
      })
    },
    // æŸ¥è¯¢åˆ—表
src/views/CNAS/resourceDemand/standardMaterialAccept/index.vue
@@ -142,7 +142,6 @@
      exportFeStandardSubstanceAcceptance().then(res => {
        const blob = new Blob([res], { type: 'application/octet-stream' });
        this.$download.saveAs(blob, '标准物质验收.xlsx');
        this.$message.success('导出成功')
      })
    },
    // åˆ†é¡µåˆ‡æ¢
src/views/CNAS/systemManagement/correctiveAction/index.vue
@@ -141,7 +141,6 @@
    handleDown(row) {
      exportSuperviseDetaillCorrect({ superviseDetailsCorrectId: row.superviseDetailsCorrectId }).then(res => {
        this.outLoading = false
        this.$message.success('导出成功')
        const blob = new Blob([res], { type: 'application/msword' });
        this.$download.saveAs(blob, '监督纠正措施' + '.docx');
      })
src/views/CNAS/systemManagement/customerSatisfaction/index.vue
@@ -144,8 +144,8 @@
      page: {
        size: 20,
        current: 1,
      },
      total: 0,
      },
      tableColumn1: [
        {
          label: '附件名称',
@@ -197,8 +197,8 @@
      page1: {
        size: 20,
        current: 1,
        total: 0,
      },
      total1: 0,
      formDialog: false,
      upLoading: false,
      currentInfo: {},
@@ -220,7 +220,7 @@
          this.tableLoading = false
          if (res.code === 201) return
          this.tableData = res.data.records
          this.total = res.data.total
          this.page.total = res.data.total
        }).catch(err => {
          console.log('err---', err);
          this.tableLoading = false
@@ -231,7 +231,7 @@
          this.tableLoading1 = false
          if (res.code === 201) return
          this.tableData1 = res.data.records
          this.total1 = res.data.total
          this.page1.total = res.data.total
        }).catch(err => {
          console.log('err---', err);
          this.tableLoading1 = false
src/views/CNAS/systemManagement/documentControl/components/FileList.vue
@@ -317,6 +317,8 @@
      if (response.code == 200) {
        this.$message.success('上传成功');
        this.refreshTable()
      }else {
        this.$message.error(response.msg);
      }
    },
    selectEnumByCategory() {
src/views/CNAS/systemManagement/documentControl/components/FileObsoletionRequest.vue
@@ -427,7 +427,6 @@
        this.outLoading = false
        const blob = new Blob([res], { type: 'application/octet-stream' });
        this.$download.saveAs(blob, '文件作废表.xlsx')
        this.$message.success('导出成功')
      })
    },
    handleDelete(row) {
src/views/CNAS/systemManagement/documentRecords/approvalRecord.vue
@@ -284,7 +284,6 @@
      exportOutManageRecordCheck(this.queryParams).then(res => {
        this.outLoading = false
        if (res.code == 201) return this.$message.error('导出失败')
        this.$message.success('导出成功')
        let url = this.javaApi + '/word/' + res.message
        this.$download.saveAs(url, '文件审批记录')
      })
src/views/CNAS/systemManagement/documentRecords/cancellationRecord.vue
@@ -244,7 +244,6 @@
      exportOutManageRecordCancel(this.queryParams).then(res => {
        this.outLoading = false
        if (res.code == 201) return this.$message.error('导出失败')
        this.$message.success('导出成功')
        let url = this.javaApi + '/word/' + res.data
        this.$download.saveAs(url, "作废文件销毁记录");
      })
src/views/CNAS/systemManagement/documentRecords/distributionCollectionRecord.vue
@@ -301,7 +301,6 @@
      exportOutManageRecordIssueRecycle(this.queryParams).then(res => {
        this.outLoading = false
        if (res.code == 201) return this.$message.error('导出失败')
        this.$message.success('导出成功')
        let url = this.javaApi + '/word/' + res.data
        this.$download.saveAs(url, '文件发放与回收记录')
      })
src/views/CNAS/systemManagement/documentRecords/regularReviewsRecord.vue
@@ -450,7 +450,6 @@
      exportOutManageRecordIntervals(this.queryParams).then(res => {
        this.outLoading = false
        if (res.code == 201) return this.$message.error('导出失败')
        this.$message.success('导出成功')
        let url = this.javaApi + 'word/' + res.message
        this.$download.saveAs(url, "文件定期审查记录");
      })
src/views/CNAS/systemManagement/documentRecords/revisionRecord.vue
@@ -550,7 +550,6 @@
      exportOutManageRecordAudit(this.queryParams).then(res => {
        this.outLoading = false
        if (res.code == 201) return this.$message.error('导出失败')
        this.$message.success('导出成功')
        let url = this.javaApi + '/word/' + res.data
        this.$download.saveAs(url, "文件修订表");
      })
src/views/CNAS/systemManagement/internalAuditManagement/components/auditInspection.vue
@@ -223,7 +223,6 @@
    handleDown(row) {
      exportInternalCheck({ checkId: row.checkId }).then(res => {
        this.outLoading = false
        this.$message.success('导出成功')
        const blob = new Blob([res], { type: 'application/msword' });
        this.$download.saveAs(blob, '内审检查' + '.docx');
      })
src/views/CNAS/systemManagement/internalAuditManagement/components/auditMeetingSign.vue
@@ -171,7 +171,6 @@
    handleDown(row) {
      exportInternalMeeting({ meetingId: row.meetingId }).then(res => {
        this.outLoading = false
        this.$message.success('导出成功')
        const blob = new Blob([res], { type: 'application/msword' });
        this.$download.saveAs(blob, '内审会议签到' + '.docx');
      })
src/views/CNAS/systemManagement/internalAuditManagement/components/auditReport.vue
@@ -281,7 +281,6 @@
    handleDown(row) {
      exportInternalReport({ reportId: row.reportId }).then(res => {
        this.outLoading = false
        this.$message.success('导出成功')
        const blob = new Blob([res], { type: 'application/msword' });
        this.$download.saveAs(blob, '内审报告' + '.docx');
      })
src/views/CNAS/systemManagement/internalAuditManagement/components/correctiveAction.vue
@@ -147,7 +147,6 @@
    handleDown(row) {
      exportInternalCorrect({ correctId: row.correctId }).then(res => {
        this.outLoading = false
        this.$message.success('导出成功')
        const blob = new Blob([res], { type: 'application/msword' });
        this.$download.saveAs(blob, '内审纠正措施' + '.docx');
      })
src/views/CNAS/systemManagement/internalAuditManagement/components/implementationPlan.vue
@@ -261,7 +261,6 @@
    handleDown(row) {
      exportInternalImplement({ implementId: row.implementId }).then(res => {
        this.outLoading = false
        this.$message.success('导出成功')
        const blob = new Blob([res], { type: 'application/msword' });
        this.$download.saveAs(blob, '内审实施计划' + '.docx');
      })
src/views/CNAS/systemManagement/internalAuditManagement/components/yearPlan.vue
@@ -274,7 +274,6 @@
    handleDown(row) {
      exportInternalPlan({ planId: row.planId }).then(res => {
        this.outLoading = false
        this.$message.success('导出成功')
        const blob = new Blob([res], { type: 'application/msword' });
        this.$download.saveAs(blob, '内审年度计划' + '.docx');
      })
src/views/CNAS/systemManagement/managementReview/components/managementReviewPlan.vue
@@ -271,10 +271,6 @@
    },
    handleDown(row) {
      exportReviewProgram({ id: row.id }).then(res => {
        if (res.code == 201) {
          this.$message.error(res.message)
          return
        }
        const blob = new Blob([res], { type: 'application/octet-stream' });
        this.$download.saveAs(blob, '评审计划.docx');
      })
src/views/CNAS/systemManagement/measuresDealRisks/components/hazardIdentificationRiskAssessment.vue
@@ -310,7 +310,6 @@
    openDownloadDia() {
      exportHazardFactorIdentification().then(res => {
        this.outLoading = false
        this.$message.success('导出成功')
        const blob = new Blob([res], { type: 'application/msword' });
        this.$download.saveAs(blob, '危险因素辨识与风险评价结果一览' + '.docx');
      })
src/views/CNAS/systemManagement/measuresDealRisks/components/listRiskAnalysisControlPlans.vue
@@ -277,7 +277,6 @@
    openDownloadDia() {
      exportSignificantRiskFactors().then(res => {
        this.outLoading = false
        this.$message.success('导出成功')
        const blob = new Blob([res], { type: 'application/msword' });
        this.$download.saveAs(blob, '重大风险因素分析及控制计划清单' + '.docx');
      })
src/views/business/finishedProductSampling/index.vue
@@ -350,8 +350,8 @@
      this.tableLoading = true
      this.stockList = []
      const newReqParam = this.getFinalParam()
      getIfsStock(newReqParam)
        .then((response) => {
      getIfsStock(newReqParam).then((response) => {
        this.tableLoading = false
          const resData = response.data
          this.queryReport.total = resData.total
          const resStockList = resData.data
@@ -370,9 +370,7 @@
              inSource: item.ATTR23,
            })
          })
          this.tableLoading = false
        })
        .catch(() => {
      }).catch(() => {
          this.tableLoading = false
        })
    },
src/views/business/inspectionTask/components/EditInspectionItem.vue
@@ -6,20 +6,15 @@
      width="80%"
      @close="editInspectionDia = false"
    >
      <TableCard :showTitle="false">
        <template v-slot:table>
          <lims-table
            :column="editColumn"
            :table-data="editTableData"
            :table-loading="editLoading"
            :page="page"
            height="600"
            style="padding: 0 15px"
        height="560"
            @pagination="pagination"
          >
          </lims-table>
        </template>
      </TableCard>
    </el-dialog>
    <el-dialog :visible.sync="editAskDia" title="修改" width="50%">
      <el-form ref="form" :model="editForm" label-width="100px">
@@ -60,7 +55,6 @@
</template>
<script>
import TableCard from "@/components/TableCard/index.vue";
import limsTable from "@/components/Table/lims-table.vue";
import {
  selectSampleAndProductByOrderId,
@@ -69,7 +63,7 @@
export default {
  name: "EditInspectionItem",
  // import å¼•入的组件需要注入到对象中才能使用
  components: { TableCard, limsTable },
  components: { limsTable },
  data() {
    // è¿™é‡Œå­˜æ”¾æ•°æ®
    return {
@@ -187,9 +181,8 @@
      })
        .then((res) => {
          this.editLoading = false;
          if (res.code === 201) return;
          this.editTableData = res.data.body.records;
          this.page.total = res.data.body.total;
          this.editTableData = res.data.records;
          this.page.total = res.data.total;
        })
        .catch(() => {
          this.editLoading = false;
src/views/business/inspectionTask/index.vue
@@ -196,7 +196,7 @@
          æ–°å¢ž
        </el-button>
      </div>
      <el-table :data="bindTableData" style="width: 100%" height="70vh">
      <el-table :data="bindTableData" style="width: 100%" height="70vh" v-loading="bindTableDataLoading">
        <el-table-column prop="inspectionItemClass" label="检验项分类" width="150">
        </el-table-column>
        <el-table-column prop="inspectionItem" label="检验项" width="150">
@@ -268,6 +268,7 @@
      InspectionKey: 1,
      bindDialogVisible: false,
      bindAddDialogVisible: false,
      bindTableDataLoading: false,
      bindTableData: [],
      bindAddTableData: [],
      chooseBindAddList: [],
@@ -522,13 +523,15 @@
            if (obj) {
              return this.insResultList.find((m) => m.value == params).label;
            } else {
              return ''
              return null
            }
          },
          formatType: (params) => {
            let obj = this.insResultList.find((m) => m.value == params)
            if (obj) {
              return this.insResultList.find((m) => m.value == params).type;
            } else {
              return null
            }
          },
        },
@@ -573,10 +576,12 @@
      this.inspectionTaskState = this.dictToValue(response.data);
    });
    this.refreshTable();
  },
  mounted() {
    this.queryParams.userId = this.userId;
  },
  activated() {
    this.refreshTable();
  },
  methods: {
    getList() {
@@ -949,10 +954,6 @@
      })
        .then((res) => {
          this.loading = false;
          if (res.code == 201) {
            this.$message.error("绑定失败");
            return;
          }
          this.$message.success("绑定成功");
          this.bindAddDialogVisible = false;
          this.getBinding(this.bindCurrentInfo);
@@ -967,15 +968,12 @@
        cancelButtonText: "取消",
        type: "warning",
      }).then(async () => {
        delProductTreeByProductId({ productId: row.id })
          .then((res) => {
            if (res.coe == 201) {
              // this.$message.error('未绑定检验项')
              return;
            }
        this.bindTableDataLoading = true
        delProductTreeByProductId({ productId: row.id }).then((res) => {
          this.bindTableDataLoading = false
            this.getBinding(this.bindCurrentInfo);
          })
          .catch((error) => {
        }).catch((error) => {
          this.bindTableDataLoading = false
            console.error(error);
          });
      });
src/views/business/inspectionTask/inspection.vue
@@ -19,7 +19,8 @@
      <el-col :span="16" style="text-align: right">
        <el-button size="small" type="primary" @click="refreshView">刷新</el-button>
        <el-button v-if="typeSource == 1" size="small" type="primary" @click="openPurchase">进货验证</el-button>
        <el-button v-if="state == 1 && typeSource == 1" size="small" type="primary" @click="openUnPassDialog('add')">不合格处理</el-button>
        <el-button v-if="state == 1 && typeSource == 1" size="small" type="primary"
          @click="openUnPassDialog('add')">不合格处理</el-button>
        <el-button size="small" type="primary" @click="sampleVisible = true;uploadSample();">样品切换</el-button>
<!--        <el-button v-if="state == 1" size="small" type="primary" @click="taskVisible = true">任务切换</el-button>-->
        <el-button v-if="state == 1" size="small" type="primary" @click="addVerifyDia = true">提交</el-button>
@@ -514,7 +515,7 @@
<script>
import excelFunction from "@/utils/excelFountion";
import limsTable from "@/components/Table/lims-table.vue";
import UnPassDialog from "../unpass/components/addUnPass.vue";
import UnPassDialog from "../unpass/components/unPassDialog.vue";
import AddUnPass from "../unpass/components/addUnPass.vue";
import InspectionWord from "./components/InspectionWord.vue";
import PurchaseVerification from "../unpass/components/PurchaseVerification.vue";
@@ -542,7 +543,7 @@
import html2canvas from "html2canvas";
import { mapGetters } from "vuex";
export default {
  name: 'inspection',
  name: 'Inspection',
  components: {
    PurchaseVerification,
    AddUnPass,
@@ -788,6 +789,16 @@
    // this.getList0() // ä»»åŠ¡åˆ‡æ¢
    this.scrollInit();
  },
  activated() {
    this.getTypeDicts(); // èŽ·å–ç´§æ€¥ç¨‹åº¦ä¸‹æ‹‰æ¡†é€‰é¡¹
    this.getInsStateDicts();
    this.getComparisonList();
    this.getAuthorizedPerson();
    // this.getPower();
    this.startWorker();
    // this.getList0() // ä»»åŠ¡åˆ‡æ¢
    this.scrollInit();
  },
  watch: {
    // ç›‘听任务id,获取任务信息
    id(val) {
src/views/business/materialOrder/copperOrder.vue
@@ -617,12 +617,19 @@
  mounted() {
    this.active = this.$route.query.active
    this.currentId = this.$route.query.currentId
  },
  activated() {
    if (this.active==1) {
      this.getInfoRow();
    }
  },
  methods: {
    getInfoRow() {
    this.getUserNowInfo()
    this.selectStandardTreeList()
    this.selectStandardMethods()
    this.getInfo() // èŽ·å–æ•°æ®
  },
  methods: {
    // æ‹†åˆ†
    handleSplitCountNum () {
      this.sample.joinName = null
@@ -1782,7 +1789,11 @@
    },
    goBack () {
      if (this.active == 1) {
      this.$router.go(-1)
      } else {
        this.closeOpenPage()
      }
    },
    closeOpenPage() {
      this.$router.go(-1)
src/views/business/materialOrder/customsInspection.vue
@@ -639,6 +639,13 @@
    this.currentId = this.$route.query.currentId
    this.isReport = this.$route.query.isReport
    this.customsInspection = this.$route.query.customsInspection
  },
  activated() {
    if (this.active==1) {
      this.getInfo();
    }
  },
  getInfo() {
    this.getUserNowList() // èŽ·å–å½“å‰ç”¨æˆ·ä¿¡æ¯
    this.selectStandardMethods() // èŽ·å–æ£€éªŒæ ‡å‡†ä¸‹æ‹‰æ¡†æ•°æ®
    this.getInfo() // èŽ·å–æ•°æ®
@@ -1832,7 +1839,11 @@
      return row[property] === value;
    },
    goBack () {
      if (this.active == 1) {
      this.$router.go(-1)
      } else {
        this.closeOpenPage()
      }
    },
    closeOpenPage() {
      this.$router.go(-1)
src/views/business/materialOrder/index.vue
@@ -59,7 +59,8 @@
        <div class="table-tab">
          <div>
            <ul class="tab">
              <li v-for="(m, i) in tabList" :key="m.value" :class="{ active: m.value === tabIndex }" @click="handleTab(m)">
              <li v-for="(m, i) in tabList" :key="m.value" :class="{ active: m.value === tabIndex }"
                @click="handleTab(m)">
                {{ m.label }}</li>
            </ul>
          </div>
@@ -72,40 +73,33 @@
        </div>
        <!--待下单-->
        <div class="table">
          <lims-table :tableData="tableData" :column="column"
                      v-if="tabIndex === 0" @pagination="pagination"
                      :rowClassName="changeRowClass"
                      :height="'calc(100vh - 290px)'" key="tableData"
                      :page="page" :tableLoading="tableLoading"></lims-table>
          <lims-table :tableData="tableData" :column="column" v-if="tabIndex === 0" @pagination="pagination"
            :rowClassName="changeRowClass" :height="'calc(100vh - 290px)'" key="tableData" :page="page"
            :tableLoading="tableLoading"></lims-table>
        </div>
        <!--检验中-->
        <div class="table">
          <lims-table :tableData="tableData1" :column="column1"
                      v-if="tabIndex === 1" :isSelection="true"
                      :rowClassName="changeRowClass"
                      :handleSelectionChange="selectMethod" @pagination="pagination1" :height="'calc(100vh - 290px)'"
                      key="tableData1" :page="page1" :tableLoading="tableLoading1"></lims-table>
          <lims-table :tableData="tableData1" :column="column1" v-if="tabIndex === 1" :isSelection="true"
            :rowClassName="changeRowClass" :handleSelectionChange="selectMethod" @pagination="pagination1"
            :height="'calc(100vh - 290px)'" key="tableData1" :page="page1" :tableLoading="tableLoading1"></lims-table>
        </div>
        <!--已检验-->
        <div class="table">
          <lims-table :tableData="tableData2" :column="column2" v-if="tabIndex === 2" :isSelection="true"
                      :rowClassName="changeRowClass"
            :handleSelectionChange="selectMethod" @pagination="pagination2" :height="'calc(100vh - 290px)'"
            key="tableData2" :page="page2" :tableLoading="tableLoading2"></lims-table>
            :rowClassName="changeRowClass" :handleSelectionChange="selectMethod" @pagination="pagination2"
            :height="'calc(100vh - 290px)'" key="tableData2" :page="page2" :tableLoading="tableLoading2"></lims-table>
        </div>
        <!--全部-->
        <div class="table">
          <lims-table :tableData="tableData3" :column="column3" v-if="tabIndex === 3" :isSelection="true"
                      :rowClassName="changeRowClass"
            :handleSelectionChange="selectMethod" @pagination="pagination3" :height="'calc(100vh - 290px)'"
            key="tableData3" :page="page3" :tableLoading="tableLoading3"></lims-table>
            :rowClassName="changeRowClass" :handleSelectionChange="selectMethod" @pagination="pagination3"
            :height="'calc(100vh - 290px)'" key="tableData3" :page="page3" :tableLoading="tableLoading3"></lims-table>
        </div>
        <!--季度检验-->
        <div class="table">
          <lims-table :tableData="tableData4" :column="column4" v-if="tabIndex === 4" :isSelection="true"
                      :rowClassName="changeRowClass"
            :handleSelectionChange="selectMethod" @pagination="pagination4" :height="'calc(100vh - 290px)'"
            key="tableData4" :page="page4" :tableLoading="tableLoading4"></lims-table>
            :rowClassName="changeRowClass" :handleSelectionChange="selectMethod" @pagination="pagination4"
            :height="'calc(100vh - 290px)'" key="tableData4" :page="page4" :tableLoading="tableLoading4"></lims-table>
        </div>
      </div>
    </div>
@@ -125,8 +119,8 @@
    </el-dialog>
    <!-- æ’¤é”€æŠ¥æ£€ -->
    <el-dialog :visible.sync="declareDialogVisible" title="报检撤销" width="30%">
      <p style="font-size:16px;color:#333333">批号<span
          style="color:#34BD66">{{ this.insOrderRow.updateBatchNo }}</span>的信息是否<span style="color: #FF4902">撤销报检</span>
      <p style="font-size:16px;color:#333333">批号<span style="color:#34BD66">{{ this.insOrderRow.updateBatchNo
          }}</span>的信息是否<span style="color: #FF4902">撤销报检</span>
      </p>
      <span slot="footer" class="dialog-footer">
        <el-row>
@@ -1083,7 +1077,6 @@
      this.outLoading = true
      rawAllExport({entity: entity}).then(res => {
        this.outLoading = false
        this.$message.success('导出成功')
        let url = this.javaApi + '/word/' + res.data
        this.$download.saveAs(url, '原材料检测信息导出.xlsx');
      })
src/views/business/productOrder/components/add.vue
@@ -50,10 +50,10 @@
            </el-select>
          </el-form-item>
          <el-form-item label="制单人:">
            <el-input v-model="addObj.custom" disabled size="small"></el-input>
            <el-input v-model="addObj.custom" disabled size="small" clearable></el-input>
          </el-form-item>
          <el-form-item label="委托单位:" prop="company">
            <el-input v-model="addObj.company" disabled placeholder="选择委托单位" size="small" style="width: 200px">
            <el-input v-model="addObj.company" disabled placeholder="选择委托单位" size="small" style="width: 208px">
              <template slot="append">
                <el-button slot="append" :disabled="active>1&&tabIndex!=4" icon="el-icon-search"
                           @click="openCompanyList"></el-button>
@@ -69,14 +69,14 @@
            </el-select>
          </el-form-item>
          <el-form-item label="样品名称:" prop="sample">
            <el-input v-model="addObj.sample" disabled size="small" style="width: 178px">
            <el-input v-model="addObj.sample" disabled size="small" style="width: 208px">
              <template slot="append"><el-button slot="append" :disabled="active>1&&tabIndex!=4" icon="el-icon-search"
                                                 @click="selectStandardTree = true"></el-button></template>
            </el-input>
          </el-form-item>
          <el-form-item label="样品数量:" prop="sampleNum">
          <el-form-item label="样品数量:" prop="sampleNum" style="margin-right: 0">
            <el-input-number v-model="addObj.sampleNum" :disabled="active>1" :max="100" :min="1" :precision="0"
                             size="small" style="width: 65%;" @change="addStandardTree"></el-input-number>
                             size="small" @change="addStandardTree"></el-input-number>
          </el-form-item>
          <el-form-item label="样品状态:" prop="sampleStatus">
            <el-select v-model="addObj.sampleStatus" :disabled="active>1&&tabIndex!=4" size="small">
@@ -87,21 +87,9 @@
            <el-input v-model="addObj.testQuantity" :disabled="active>1&&tabIndex!=4" clearable size="small"></el-input>
          </el-form-item>
          <el-form-item label="来样方式:" prop="formType">
            <el-select v-model="addObj.formType" :disabled="active>1&&tabIndex!=4" size="small">
            <el-select v-model="addObj.formType" :disabled="active>1&&tabIndex!=4" size="small" clearable>
              <el-option v-for="(a,ai) in dict.type.form_type" :key="ai" :label="a.label" :value="a.value"></el-option>
            </el-select>
          </el-form-item>
          <el-form-item label="报告发送方式:">
            <el-radio-group v-model="addObj.send" :disabled="active>1&&tabIndex!=4">
              <el-radio :label="1">自取</el-radio>
              <el-radio :label="0">其他</el-radio>
            </el-radio-group>
          </el-form-item>
          <el-form-item label="样品处理方式:">
            <el-radio-group v-model="addObj.processing" :disabled="active>1&&tabIndex!=4">
              <el-radio :label="0">委托单位取回</el-radio>
              <el-radio :label="1">实验室处理</el-radio>
            </el-radio-group>
          </el-form-item>
          <el-form-item label="生产单位:" prop="production">
            <el-input v-model="addObj.production" :disabled="active>1&&tabIndex!=4" clearable placeholder="请输入"
@@ -111,10 +99,22 @@
            <el-input v-model="addObj.productionEn" :disabled="active>1&&tabIndex!=4" clearable placeholder="请输入"
                      size="small"></el-input>
          </el-form-item>
          <el-form-item label="样品处理方式:">
            <el-radio-group v-model="addObj.processing" :disabled="active>1&&tabIndex!=4" size="mini">
              <el-radio :label="0" border style="margin-right: 0">委托单位取回</el-radio>
              <el-radio :label="1" border>实验室处理</el-radio>
            </el-radio-group>
          </el-form-item>
          <el-form-item label="是否留样:">
            <el-radio-group v-model="addObj.isLeave" :disabled="active>1&&tabIndex!=4">
              <el-radio :label="0">不留样</el-radio>
              <el-radio :label="1">留样</el-radio>
            <el-radio-group v-model="addObj.isLeave" border :disabled="active>1&&tabIndex!=4" size="mini">
              <el-radio :label="0" border style="margin-right: 0">不留样</el-radio>
              <el-radio :label="1" border>留样</el-radio>
            </el-radio-group>
          </el-form-item>
          <el-form-item label="报告发送方式:">
            <el-radio-group v-model="addObj.send" :disabled="active>1&&tabIndex!=4" size="mini">
              <el-radio :label="1" border style="margin-right: 0">自取</el-radio>
              <el-radio :label="0" border>其他</el-radio>
            </el-radio-group>
          </el-form-item>
          <el-form-item label="委托人:">
@@ -125,7 +125,7 @@
          </el-form-item>
          <el-form-item label="备注:">
            <el-input v-model="addObj.remark" :autosize="{ minRows: 2, maxRows: 2}" :disabled="active>1&&tabIndex!=4" :placeholder="active>1 ? '' : '请输入'" clearable
                      size="small" type="textarea"></el-input>
                      size="small" style="width: 100%" type="textarea"></el-input>
          </el-form-item>
          <el-form-item label="备注英文:">
            <el-input v-model="addObj.remarkEn" :autosize="{ minRows: 2, maxRows: 2}" :disabled="active>1&&tabIndex!=4" :placeholder="active>1 ? '' : '请输入'" clearable
@@ -176,10 +176,9 @@
              </el-form-item>
            </el-form>
          </div>
          <div style="display: flex;align-items: center">
          <div style="display: flex;align-items: center;margin-bottom: 10px">
            <span style="width: 150px;font-size: 14px;text-align: right;">特殊标准:</span>
            <el-input v-model="specialStandardMethod" :disabled="!isSpecial" clearable
            size="small"></el-input>
            <el-input v-model="specialStandardMethod" :disabled="!isSpecial" clearable size="small"></el-input>
            <el-button v-show="active==1" size="small" style="margin-left: 10px"
                       type="primary" @click="editSpecial">编辑</el-button>
          </div>
@@ -796,6 +795,15 @@
      this.active = this.$route.query.active
      this.tabIndex = this.$route.query.tabIndex
      this.currentId = this.$route.query.currentId
    this.getInfo()
  },
  activated() {
    if (this.active==1) {
      this.getInfo();
    }
  },
  methods: {
    getInfo() {
      this.getUserNowData()
      this.selectStandardTreeList()
      this.getAuthorizedPerson();
@@ -830,7 +838,6 @@
        this.isSpecial = false
      }
    },
    methods: {
      getPrepareUser () {
        // this.addObj.prepareUser = JSON.parse(localStorage.getItem("user")).name;
        // this.addObj.prepareUserEn = JSON.parse(localStorage.getItem("user")).nameEn
@@ -1699,6 +1706,9 @@
          this.productList = row.insProduct
          this.productList0 = JSON.parse(JSON.stringify(this.productList))
          this.$refs.sampleTable.setCurrentRow(row)
          this.$nextTick(() => {
            this.$refs.productTable.doLayout();
          });
          setTimeout(() => {
            this.productList.forEach(a => {
              if (a.state == 1) this.toggleSelection(a)
@@ -2140,7 +2150,11 @@
        this.productList0.splice(index,1)
      },
      goBack () {
        if (this.active == 1) {
        this.$router.go(-1)
        } else {
          this.closeOpenPage()
        }
      },
      closeOpenPage() {
        this.$router.go(-1)
src/views/business/productOrder/components/auxiliaryWireCore.vue
@@ -17,13 +17,11 @@
            </el-select>
          </el-form-item>
          <el-form-item label="检验标准" prop="standardMethodListId">
            <el-select v-model="auxiliaryWireCore.standardMethodListId" allow-create
                       clearable
                       default-first-option
                       filterable
                       multiple
                       size="small">
              <el-option v-for="item in quantityList" :key="item.value" :label="item.label" :value="item.value"></el-option>
            <el-select v-model="auxiliaryWireCore.standardMethodListId" disabled placeholder="请选择检验标准"
                       size="small"
                       @change="(value)=>methodChange(value)">
              <el-option v-for="item in standards" :key="item.id" :label="item.code" :value="item.id">
              </el-option>
            </el-select>
          </el-form-item>
        </el-form>
src/views/business/productOrder/index.vue
@@ -3,8 +3,7 @@
    <div class="search">
      <el-form :model="entity" ref="entity" size="small" :inline="true">
        <el-form-item label="委托编号" prop="entrustCode">
          <el-input v-model="entity.entrustCode" clearable placeholder="请输入"
                    size="small"
          <el-input v-model="entity.entrustCode" clearable placeholder="请输入" size="small"
                    @keyup.enter.native="refreshTable">
          </el-input>
        </el-form-item>
@@ -13,11 +12,12 @@
                    @keyup.enter.native="refreshTable"></el-input>
        </el-form-item>
        <el-form-item label="样品型号" prop="sampleModel">
          <el-input v-model="entity.sampleModel" clearable placeholder="请输入"
                    size="small" @keyup.enter.native="refreshTable()"></el-input>
          <el-input v-model="entity.sampleModel" clearable placeholder="请输入" size="small"
            @keyup.enter.native="refreshTable()"></el-input>
        </el-form-item>
        <el-form-item>
          <el-button :icon="!more?'el-icon-arrow-down':'el-icon-arrow-up'" style="color: #3A7BFA;" type="text" @click="more=!more">{{!more?'更多':'收起'}}</el-button>
          <el-button :icon="!more ? 'el-icon-arrow-down' : 'el-icon-arrow-up'" style="color: #3A7BFA;" type="text"
            @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-form-item>
@@ -27,13 +27,8 @@
          </el-input>
        </el-form-item>
        <el-form-item label="下单时间" prop="createTime" v-if="more">
          <el-date-picker v-model="entity.createTime" clearable
                          format="yyyy-MM-dd"
                          placeholder="选择日期"
                          size="small"
                          style="width:100%"
                          type="date"
                          value-format="yyyy-MM-dd HH:mm:ss">
          <el-date-picker v-model="entity.createTime" clearable format="yyyy-MM-dd" placeholder="选择日期" size="small"
            style="width:100%" type="date" value-format="yyyy-MM-dd HH:mm:ss">
          </el-date-picker>
        </el-form-item>
        <el-form-item label="委托人" prop="prepareUser" v-if="more">
@@ -51,21 +46,22 @@
    <div class="table-tab">
      <div>
        <ul class="tab">
          <li v-for="(m,i) in tabList" :key="i+'afgh'" :class="{active:i==tabIndex}" @click="handleTab(m,i)">{{m.label}}</li>
          <li v-for="(m, i) in tabList" :key="i + 'afgh'" :class="{ active: i == tabIndex }" @click="handleTab(m, i)">{{ m.label }}
          </li>
        </ul>
      </div>
      <div>
        <el-button v-if="tabIndex === 2 || tabIndex === 3 || tabIndex === 6" size="small" @click="downLoad">导出</el-button>
        <el-button v-if="tabIndex === 2 || tabIndex === 3 || tabIndex === 6" size="small"
          @click="downLoad">导出</el-button>
        <el-button v-if="tabIndex === 1" size="small" type="primary" @click="openAddIns">添加检验项</el-button>
        <el-button size="small" type="primary" @click="openPrint">标签打印</el-button>
        <el-button size="small" type="primary" @click="playOrder(1)">下单</el-button>
      </div>
    </div>
    <div class="table">
      <lims-table :tableData="tableData" :column="column"
                  :isSelection="true" :handleSelectionChange="selectMethod"
                  @pagination="pagination" :height="'calc(100vh - 280px)'" key="tableData"
                  :page="page" :tableLoading="tableLoading"></lims-table>
      <lims-table :tableData="tableData" :column="column" :isSelection="true" :handleSelectionChange="selectMethod"
        @pagination="pagination" :height="'calc(100vh - 280px)'" :key="upIndex" :page="page"
        :tableLoading="tableLoading"></lims-table>
    </div>
    <div>
      <!-- å®¡æ ¸ -->
@@ -123,7 +119,8 @@
            <el-col class="search_thing" style="width: 95%;">
              <div class="search_label"><span class="required-span">* </span>指派人员:</div>
              <div class="search_input">
                <el-select v-model="distributeData.userId" clearable filterable placeholder="请选择" size="small" style="width: 100%;" @change="changeUser">
                <el-select v-model="distributeData.userId" clearable filterable placeholder="请选择" size="small"
                  style="width: 100%;" @change="changeUser">
                  <el-option v-for="(item,i) in personList" :key="i+'gbnm.'" :label="item.label" :value="item.value">
                  </el-option>
                </el-select>
@@ -132,8 +129,10 @@
            <el-col class="search_thing" style="width: 95%;">
              <div class="search_label"><span class="required-span" >* </span>试验室:</div>
              <div class="search_input">
                <el-select v-model="distributeData.sonLaboratory" clearable filterable placeholder="请选择" size="small" style="width: 100%;">
                  <el-option v-for="(item,i) in sonLaboratoryList" :key="i+'oooo'" :label="item.label" :value="item.value">
                <el-select v-model="distributeData.sonLaboratory" clearable filterable placeholder="请选择" size="small"
                  style="width: 100%;">
                  <el-option v-for="(item, i) in sonLaboratoryList" :key="i + 'oooo'" :label="item.label"
                    :value="item.value">
                  </el-option>
                </el-select>
              </div>
@@ -149,29 +148,28 @@
      </el-dialog>
      <el-dialog :visible.sync="dataDialogVisible" title="数据查看" width="80%">
        <div v-if="dataDialogVisible">
          <lims-table :tableData="tableDataLook" :column="tableDataLookColumn"
                      @pagination="tableDataLookPagination" height="500px" key="tableDataLook"
                      :page="tableDataLookPage" :tableLoading="tableDataLookTableLoading"></lims-table>
          <lims-table :tableData="tableDataLook" :column="tableDataLookColumn" @pagination="tableDataLookPagination"
            height="500px" key="tableDataLook" :page="tableDataLookPage"
            :tableLoading="tableDataLookTableLoading"></lims-table>
        </div>
      </el-dialog>
      <el-dialog :visible.sync="filesDialogVisible" title="附件查看" width="80%">
        <div v-if="filesDialogVisible">
          <lims-table :tableData="tableDataFile" :column="columnFile"
                      @pagination="paginationFile" height="500px" key="tableDataFile"
                      :page="pageFile" :tableLoading="tableLoadingFile"></lims-table>
          <lims-table :tableData="tableDataFile" :column="columnFile" @pagination="paginationFile" height="500px"
            key="tableDataFile" :page="pageFile" :tableLoading="tableLoadingFile"></lims-table>
        </div>
      </el-dialog>
      <el-dialog :title="deleteTilte" :visible.sync="deleteDialogVisible" width="80%">
        <div v-if="deleteDialogVisible" style="height: 70vh;overflow-y: auto;">
          <lims-table :tableData="componentDataDelete" :column="columnDelete"
                      :isSelection="true" :handleSelectionChange="selectDelete"
                      @pagination="paginationDelete" height="500px" key="componentDataDelete"
                      :page="pageDelete" :tableLoading="tableLoadingDelete"></lims-table>
          <lims-table :tableData="componentDataDelete" :column="columnDelete" :isSelection="true"
            :handleSelectionChange="selectDelete" @pagination="paginationDelete" height="500px"
            key="componentDataDelete" :page="pageDelete" :tableLoading="tableLoadingDelete"></lims-table>
        </div>
        <span slot="footer" class="dialog-footer">
          <el-row>
            <el-button @click="handleNo">{{deleteTilte=='撤销'?'取 æ¶ˆ':'不通过'}}</el-button>
            <el-button :loading="printLoading" type="primary" @click="submitDelete">{{deleteTilte=='撤销'?'ç¡® å®š':'通 è¿‡'}}</el-button>
            <el-button :loading="printLoading" type="primary" @click="submitDelete">{{ deleteTilte == '撤销' ? 'ç¡® å®š' : '通
              è¿‡'}}</el-button>
          </el-row>
        </span>
      </el-dialog>
@@ -179,13 +177,11 @@
    <el-dialog :visible.sync="printDialogVisible" title="标签打印" top="5vh" width="40%">
      <div v-loading="loadPint" style="width:100%;height: 400px;overflow-y: auto;">
        <div class="dia_body">
          <el-checkbox
            v-model="checkAll"
            :indeterminate="isIndeterminate"
            style="margin: 10px 5px;"
          <el-checkbox v-model="checkAll" :indeterminate="isIndeterminate" style="margin: 10px 5px;"
            @change="handleCheckAllChange">全选</el-checkbox>
          <el-checkbox-group v-model="checkIndexList" @change="changePrintCode()">
            <el-card v-for="(item, i) in qrData" :key="i+'wwwww'" class="box-card" style="margin-bottom: 15px; font-size: 16px !important;">
            <el-card v-for="(item, i) in qrData" :key="i + 'wwwww'" class="box-card"
              style="margin-bottom: 15px; font-size: 16px !important;">
              <el-checkbox :key="i" :label="i" style="position: relative;top:-20px;left:5px"><br></el-checkbox>
              <div>
                <el-row style="font-size: 14px;padding-left: 20px;">
@@ -199,7 +195,8 @@
                  </div>
                  <div style="margin-left: 50px;width: 100%;">
                    <el-row>
                      <el-col  style="font-weight: bold;font-size: 14px;"><span>样品编号:&nbsp; </span>{{ item.sampleCode }}</el-col>
                      <el-col style="font-weight: bold;font-size: 14px;"><span>样品编号:&nbsp; </span>{{ item.sampleCode
                        }}</el-col>
                    </el-row>
                    <el-row style="margin-top: 1px;font-size: 14px;">
                      <el-col  style="font-weight: bold;"><span>委托单号:&nbsp; </span>{{ item.code }}</el-col>
@@ -219,7 +216,8 @@
                          <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 v-model="item.isLeave" :label="1" disabled style="font-weight: bold;margin-top: 7px;">留样</el-radio></el-col>
                        </el-radio-group><el-radio v-model="item.isLeave" :label="1" disabled
                          style="font-weight: bold;margin-top: 7px;">留样</el-radio></el-col>
                    </el-row>
                  </div>
                </div>
@@ -235,9 +233,11 @@
        </el-row>
      </span>
    </el-dialog>
    <div class="el-dialog__body" style="overflow-y: auto;margin-top: 0;position: fixed;top: 999px;z-index: 99999;display: none;">
    <div class="el-dialog__body"
      style="overflow-y: auto;margin-top: 0;position: fixed;top: 999px;z-index: 99999;display: none;">
      <div id="printMOrder" ref="printMOrder" class="printMOrder">
        <el-card v-for="(item, i) in checkDataList" :key="i+'uuuuu'" class="box-card" style="font-size: 0.20cm !important;page-break-after: always;color: #000;box-shadow: none;margin: 0 !important;padding: 0 !important;">
        <el-card v-for="(item, i) in checkDataList" :key="i + 'uuuuu'" class="box-card"
          style="font-size: 0.20cm !important;page-break-after: always;color: #000;box-shadow: none;margin: 0 !important;padding: 0 !important;">
          <div style="display: flex;">
            <div>
              <el-col :offset="2" :span="10">
@@ -246,7 +246,8 @@
            </div>
            <div style="margin-left: 0.32cm;line-height: 0.22cm;">
              <el-row>
                <el-col  class="single-line-ellipsis" style="font-size: 0.20cm;width: 4cm;"><span>样品编号:&nbsp; </span>{{ item.sampleCode }}</el-col>
                <el-col class="single-line-ellipsis" style="font-size: 0.20cm;width: 4cm;"><span>样品编号:&nbsp; </span>{{
                  item.sampleCode }}</el-col>
              </el-row>
              <el-row style="font-size: 0.20cm;">
                <el-col><span>委托单号:&nbsp; </span>{{ item.code }}</el-col>
@@ -263,7 +264,8 @@
              <el-row style="margin-top: 0.01cm;font-size: 0.20cm;">
                <el-col  style="display: flex;align-items: center;"><span>样品状态:&nbsp;
                  </span>
                  <span style="white-space: nowrap;"><span v-if="item.insState==0">√</span><span v-if="item.insState!=0" class="scor"></span>待检
                  <span style="white-space: nowrap;"><span v-if="item.insState == 0">√</span><span v-if="item.insState != 0"
                      class="scor"></span>待检
                    <span v-if="item.insState==1">√</span><span v-if="item.insState!=1" class="scor"></span>在检
                    <span v-if="item.insState==2">√</span><span v-if="item.insState!=2" class="scor"></span>已检
                    <span v-if="item.isLeave==1">√</span><span v-if="item.isLeave!=1" class="scor"></span>留样</span>
@@ -288,8 +290,7 @@
      </span>
    </el-dialog>
    <!--标签打印弹框-->
    <print-dialog v-if="printDialog" ref="printDialog"
                  :printDialog="printDialog"
    <print-dialog v-if="printDialog" ref="printDialog" :printDialog="printDialog"
                  @closePrintDialog="closePrintDialog"></print-dialog>
    <!--添加遗漏检验项弹框-->
    <add-inspection-dia v-if="addInspectionDia" ref="addInspectionDia"></add-inspection-dia>
@@ -329,6 +330,7 @@
        orderType: '',
        state: '',
      },
      upIndex: 0,
      tableData: [],
      tableLoading: false,
      column: [
@@ -753,6 +755,7 @@
      const params = {...this.entity, state: this.tabList[this.tabIndex].value}
      this.tableLoading = true
      selectInsOrderParameter(params).then(res => {
        this.upIndex++
        this.tableLoading = false
        if (res.code === 200) {
          this.tableData = res.data.records
@@ -866,7 +869,6 @@
    // å¯¼å‡ºè®°å½•
    downLoad () {
      rawAllInsOrderExport({...this.entity}).then(res => {
        this.$message.success('导出成功')
        let url = this.javaApi + '/word/' + res.data
        this.$download.saveAs(url, '委托检测信息导出.xlsx');
      }).catch(err => {
@@ -1227,6 +1229,7 @@
  justify-content: space-between;
  align-items: center;
}
.tab {
  list-style-type: none;
  display: flex;
@@ -1256,9 +1259,11 @@
  border-color: #3A7BFA;
  color: #3A7BFA;
}
.box-card >>>.el-radio__inner {
  border-radius: 2px !important;
}
.box-card >>>.el-radio__input.is-checked .el-radio__inner::after {
  content: '';
  width: 8px;
@@ -1275,12 +1280,15 @@
  border-radius: 0px;
  background: none;
}
>>>.el-radio__label{
  color: #000 !important;
}
.el-dialog__body >>>.el-radio__label{
  font-size: 8px;
}
.el-dialog__body >>>.el-radio__input.is-checked .el-radio__inner::after {
  content: '';
  width: 4px;
@@ -1297,31 +1305,40 @@
  border-radius: 0px;
  background: none;
}
>>>.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{
  background: transparent;
}
.el-dialog__body >>>.el-radio__inner{
  width: 8px !important;
  height: 8px !important;
}
.el-dialog__body >>>.el-radio__label{
  padding-left: 2px !important;
}
.el-dialog__body >>>.el-card__body{
  padding: 0 !important;
}
.el-dialog__body >>>.el-card {
  border: none;
}
.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{
  border: none !important;
}
.scor{
  width: 0.01cm;
  height: 0.01cm;
@@ -1329,6 +1346,7 @@
  border: 1px solid #000;
  display: inline-block;
}
.ellipsis-multiline {
  display: -webkit-box;
  -webkit-line-clamp: 2;
@@ -1336,8 +1354,11 @@
  overflow: hidden;
  text-overflow: ellipsis;
  word-wrap: break-word;
  max-height: 3.0em; /* é«˜åº¦ä¸ºå­—体大小的两倍 */
  line-height: 1.5em; /* è¡Œé«˜ */
  height: 3.0em; /* é«˜åº¦ä¸ºè¡Œé«˜çš„两倍 */
  max-height: 3.0em;
  /* é«˜åº¦ä¸ºå­—体大小的两倍 */
  line-height: 1.5em;
  /* è¡Œé«˜ */
  height: 3.0em;
  /* é«˜åº¦ä¸ºè¡Œé«˜çš„两倍 */
}
</style>
src/views/business/productSamplingInfo/index.vue
@@ -3,8 +3,7 @@
    <div style="display: flex;justify-content: space-between">
      <el-form :model="entity" ref="entity" size="small" :inline="true">
        <el-form-item label="编号" prop="quarterNo" v-show="tabIndex === 0">
          <el-input v-model="entity.quarterNo" clearable placeholder="请输入"
                    size="small"
          <el-input v-model="entity.quarterNo" clearable placeholder="请输入" size="small"
                    @keyup.enter.native="refreshTable">
          </el-input>
        </el-form-item>
@@ -23,21 +22,20 @@
          <li v-for="(m,i) in tabList" :key="i" :class="{active:i===tabIndex}" @click="handleTab(m,i)">{{m.label}}</li>
        </ul>
        <!--季度-->
        <lims-table :tableData="tableData" :column="column" v-if="tabIndex === 0"
                    @pagination="pagination" :height="'calc(100vh - 290px)'"
                    :page="page" :tableLoading="tableLoading"></lims-table>
        <lims-table :tableData="tableData" :column="column" v-if="tabIndex === 0" @pagination="pagination"
          :height="'calc(100vh - 290px)'" :page="page" :tableLoading="tableLoading"></lims-table>
        <!--年度-->
        <lims-table :tableData="tableData1" :column="column1" v-if="tabIndex === 1"
                    @pagination="pagination1" :height="'calc(100vh - 290px)'"
                    key="tableData1" :page="page1" :tableLoading="tableLoading1"></lims-table>
        <lims-table :tableData="tableData1" :column="column1" v-if="tabIndex === 1" @pagination="pagination1"
          :height="'calc(100vh - 290px)'" key="tableData1" :page="page1" :tableLoading="tableLoading1"></lims-table>
      </div>
    </div>
    <el-dialog :close-on-click-modal="false" :close-on-press-escape="false" :visible.sync="yearSampleDia" title="年度抽样" width="70%"
               @close="closeYearSampleDia">
    <el-dialog :close-on-click-modal="false" :close-on-press-escape="false" :visible.sync="yearSampleDia" title="年度抽样"
      width="70%" @close="closeYearSampleDia">
      <div style="display: flex;align-items: center;justify-content: space-between;margin-bottom: 10px">
        <div style="width: 30%;display: flex;align-items: center;" >
          <el-input v-if="operationType !=='view'" v-model="currentYear" size="small"/>
          <span v-if="operationType ==='view'" style="width: 160px;font-size: 18px;font-weight: 600">{{currentYear}}</span>
          <span v-if="operationType === 'view'"
            style="width: 160px;font-size: 18px;font-weight: 600">{{ currentYear }}</span>
        </div>
        <div  v-if="operationType !== 'view'">
          <el-button size="small" type="primary" @click="addQuarter">添加</el-button>
@@ -178,45 +176,52 @@
          </el-table-column>
          <el-table-column v-if="operationType !== 'view'" fixed="right" label="操作"  width="100">
            <template slot-scope="scope">
              <el-button size="small" style="color: #f56c6c" type="text" @click="deleteScope(scope.$index)">删除</el-button>
              <el-button size="small" style="color: #f56c6c" type="text"
                @click="deleteScope(scope.$index)">删除</el-button>
            </template>
          </el-table-column>
        </el-table>
      </div>
      <div style="display: flex;align-items: center;margin-top: 10px">
        <span style="width: 70px">注意事项:</span>
        <el-input v-model="yearSampleForm.tableRemark" :disabled="operationType === 'view'" size="small" style="width: 50%" type="textarea"></el-input>
        <el-input v-model="yearSampleForm.tableRemark" :disabled="operationType === 'view'" size="small"
          style="width: 50%" type="textarea"></el-input>
      </div>
      <div style="display: flex;align-items: center;margin-top: 10px">
        <span style="width: 70px">备注:</span>
        <el-input v-model="yearSampleForm.remark" :disabled="operationType === 'view'" size="small" style="width: 50%" type="textarea"></el-input>
        <el-input v-model="yearSampleForm.remark" :disabled="operationType === 'view'" size="small" style="width: 50%"
          type="textarea"></el-input>
      </div>
      <div v-if="operationType !== 'add'">
        <el-form ref="form" :model="editYearFormRow" label-width="70px">
          <el-col :span="12">
            <el-form-item label="编制人:">
              <el-select v-model="editYearFormRow.writeUser" :disabled="operationType !=='edit'" placeholder="请选择" size="small" style="width: 100%">
              <el-select v-model="editYearFormRow.writeUser" :disabled="operationType !== 'edit'" placeholder="请选择"
                size="small" style="width: 100%">
                <el-option v-for="item in userList" :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-select v-model="editYearFormRow.countersignUser" :disabled="operationType !=='edit'" multiple placeholder="请选择" size="small" style="width: 100%">
              <el-select v-model="editYearFormRow.countersignUser" :disabled="operationType !== 'edit'" multiple
                placeholder="请选择" size="small" style="width: 100%">
                <el-option v-for="item in userList" :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-select v-model="editYearFormRow.examineUser" :disabled="operationType !=='edit'" placeholder="请选择" size="small" style="width: 100%">
              <el-select v-model="editYearFormRow.examineUser" :disabled="operationType !== 'edit'" placeholder="请选择"
                size="small" style="width: 100%">
                <el-option v-for="item in userList" :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-select v-model="editYearFormRow.ratifyUser" :disabled="operationType !=='edit'" placeholder="请选择" size="small" style="width: 100%">
              <el-select v-model="editYearFormRow.ratifyUser" :disabled="operationType !== 'edit'" placeholder="请选择"
                size="small" style="width: 100%">
                <el-option v-for="item in userList" :key="item.id" :label="item.name" :value="item.id"></el-option>
              </el-select>
            </el-form-item>
@@ -458,7 +463,6 @@
        this.outLoading = false
        const blob = new Blob([res], { type: 'application/octet-stream' });
        this.$download.saveAs(blob, '季度抽样信息导出.docx')
        this.$message.success('导出成功')
      })
    },
    // å¹´åº¦ä¸‹è½½
@@ -467,7 +471,6 @@
        this.outLoading = false
        const blob = new Blob([res], { type: 'application/octet-stream' });
        this.$download.saveAs(blob, row.yearHead + '.docx')
        this.$message.success('导出成功')
      })
    },
    // åˆ é™¤å¹´åº¦æŠ½æ ·
src/views/business/rawMaterialInspection/index.vue
@@ -4,58 +4,46 @@
      <el-form :model="componentData" ref="componentData" size="small" :inline="true">
        <el-row>
          <el-form-item label="批号" prop="updateBatchNo">
            <el-input v-model="componentData.updateBatchNo" clearable placeholder="请输入"
                      size="small"
            <el-input v-model="componentData.updateBatchNo" clearable placeholder="请输入" size="small"
                      @keyup.enter.native="refreshTable"></el-input>
          </el-form-item>
          <el-form-item label="零件号" prop="partNo">
            <el-input v-model="componentData.partNo" clearable placeholder="请输入"
                      size="small"
            <el-input v-model="componentData.partNo" clearable placeholder="请输入" size="small"
                      @keyup.enter.native="refreshTable">
            </el-input>
          </el-form-item>
          <el-form-item label="零件描述" prop="partDesc">
            <el-input v-model="componentData.partDesc" clearable placeholder="请输入"
                      size="small"
            <el-input v-model="componentData.partDesc" clearable placeholder="请输入" size="small"
                      @keyup.enter.native="refreshTable">
            </el-input>
          </el-form-item>
          <el-form-item label="供应商" prop="supplierName" v-if="(tabIndex === 3 || tabIndex === 4)">
            <el-input v-model="componentData.supplierName" clearable placeholder="请输入"
                      size="small"
            <el-input v-model="componentData.supplierName" clearable placeholder="请输入" size="small"
                      @keyup.enter.native="refreshTable">
            </el-input>
          </el-form-item>
          <el-form-item>
            <el-button v-if="tabIndex === 3 || tabIndex === 4" :icon="!more?'el-icon-arrow-down':'el-icon-arrow-up'" style="color: #3A7BFA;" type="text" @click="more=!more">{{!more?'更多':'收起'}}</el-button>
            <el-button v-if="tabIndex === 3 || tabIndex === 4" :icon="!more ? 'el-icon-arrow-down' : 'el-icon-arrow-up'"
              style="color: #3A7BFA;" type="text" @click="more = !more">{{ !more ? '更多' : '收起' }}</el-button>
            <el-button size="mini" icon="el-icon-search" type="primary" @click="refreshTable()">查 è¯¢</el-button>
            <el-button size="mini" @click="refresh()" icon="el-icon-refresh">重 ç½®</el-button>
          </el-form-item>
        </el-row>
        <el-row>
          <el-form-item label="检验状态" prop="inspectStatus" v-if="(tabIndex === 3 || tabIndex === 4) && more">
            <el-select v-model="componentData.inspectStatus" clearable
                       size="small" style="width: 100%;" @change="refreshTable()">
            <el-select v-model="componentData.inspectStatus" clearable size="small" style="width: 100%;"
              @change="refreshTable()">
              <el-option v-for="(a, i) in queryStatusList" :key="i" :label="a.label" :value="a.value"></el-option>
            </el-select>
          </el-form-item>
          <el-form-item label="下发时间" prop="date" v-if="(tabIndex === 3 || tabIndex === 4) && more">
            <el-date-picker
              v-model="componentData.date"
              end-placeholder="结束日期"
              format="yyyy-MM-dd"
              placeholder="选择日期"
              range-separator="至"
              size="small"
              start-placeholder="开始日期"
              style="width: 100%;"
              type="daterange"
            <el-date-picker v-model="componentData.date" end-placeholder="结束日期" format="yyyy-MM-dd" placeholder="选择日期"
              range-separator="至" size="small" start-placeholder="开始日期" style="width: 100%;" type="daterange"
              value-format="yyyy-MM-dd">
            </el-date-picker>
          </el-form-item>
          <el-form-item label="委托编号" prop="entrustCode" v-if="(tabIndex === 3 || tabIndex === 4) && more">
            <el-input v-model="componentData.entrustCode" clearable placeholder="请输入"
                      size="small"
            <el-input v-model="componentData.entrustCode" clearable placeholder="请输入" size="small"
                      @keyup.enter.native="refreshTable">
            </el-input>
          </el-form-item>
@@ -66,28 +54,30 @@
      <div class="table-tab">
        <div>
          <ul class="tab">
            <li v-for="m in tabList" :key="m.value" :class="{active:m.value===tabIndex}" @click="handleTab(m)">{{m.label}}</li>
            <li v-for="m in tabList" :key="m.value" :class="{ active: m.value === tabIndex }" @click="handleTab(m)">
              {{ m.label }}</li>
          </ul>
        </div>
        <div>
          <el-button v-show="tabIndex === 4" :loading="outLoading" size="small" type="primary" @click="handleDown">导出</el-button>
          <el-button v-if="tabIndex === 0" :loading="btnLoading" size="small" type="primary" @click="openIFS">获取IFS订单</el-button>
          <el-button v-show="tabIndex === 4" :loading="outLoading" size="small" type="primary"
            @click="handleDown">导出</el-button>
          <el-button v-if="tabIndex === 0" :loading="btnLoading" size="small" type="primary"
            @click="openIFS">获取IFS订单</el-button>
          <el-button v-if="tabIndex === 0" size="small" type="primary" @click="declareS">报检</el-button>
          <el-button v-if="tabIndex === 0" size="small" type="primary" @click="addDeclare">新增报检信息</el-button>
        </div>
      </div>
      <!--待报检、待下单-->
      <div class="table">
        <lims-table :tableData="tableData" :column="column" v-if="tabIndex === 0 || tabIndex === 1"
                    :isSelection="true" :handleSelectionChange="selectMethod"
                    @pagination="pagination" :height="'calc(100vh - 290px)'"
                    :page="page" :tableLoading="tableLoading"></lims-table>
        <lims-table :tableData="tableData" :column="column" v-if="tabIndex === 0 || tabIndex === 1" :isSelection="true"
          :handleSelectionChange="selectMethod" @pagination="pagination" :height="'calc(100vh - 290px)'" :page="page"
          :tableLoading="tableLoading"></lims-table>
      </div>
      <!--已完成、全部-->
      <div class="table">
        <lims-table :tableData="tableData1" :column="column1" v-if="tabIndex === 3 || tabIndex === 4"
                    @pagination="pagination1" :height="'calc(100vh - 290px)'"
                    :page="page1" :tableLoading="tableLoading1"></lims-table>
          @pagination="pagination1" :height="'calc(100vh - 290px)'" :page="page1"
          :tableLoading="tableLoading1"></lims-table>
      </div>
    </div>
    <!-- æ‰¹é‡æŠ¥æ£€ -->
@@ -102,44 +92,50 @@
    </el-dialog>
    <!-- ç¡®è®¤æŠ¥æ£€ -->
    <el-dialog :close-on-click-modal="false" :title="declareType === 'add' ? '新增报检信息' : '原材料报检'"
               :visible.sync="declareDialogVisible"
               width="800px" @close="resetForm">
      <el-form ref="declareObj" :inline="true" :model="declareObj" :rules="declareObjRules"
               label-width="130px" label-position="right">
      :visible.sync="declareDialogVisible" width="800px" @close="resetForm">
      <el-form ref="declareObj" :inline="true" :model="declareObj" :rules="declareObjRules" label-width="130px"
        label-position="right">
        <el-form-item class="declareObj-form-item" label="订单号:" prop="orderNo">
          <el-input v-model="declareObj.orderNo" :disabled="declareType !== 'add'" class="addObj-info" clearable placeholder="" size="small"></el-input>
          <el-input v-model="declareObj.orderNo" :disabled="declareType !== 'add'" class="addObj-info" clearable
            placeholder="" size="small"></el-input>
        </el-form-item>
        <el-form-item class="declareObj-form-item" label="零件号:" prop="partNo">
          <el-input v-model="declareObj.partNo" :disabled="declareType !== 'add'" class="addObj-info" clearable placeholder="" size="small"></el-input>
          <el-input v-model="declareObj.partNo" :disabled="declareType !== 'add'" class="addObj-info" clearable
            placeholder="" size="small"></el-input>
        </el-form-item>
        <el-form-item class="declareObj-form-item" label="零件描述:" prop="partDesc">
          <el-input v-model="declareObj.partDesc" :disabled="declareType !== 'add'" class="addObj-info" clearable placeholder="" size="small"></el-input>
          <el-input v-model="declareObj.partDesc" :disabled="declareType !== 'add'" class="addObj-info" clearable
            placeholder="" size="small"></el-input>
        </el-form-item>
        <el-form-item class="declareObj-form-item" label="抵达的采购数量:" prop="qtyArrived">
          <el-input v-model="declareObj.qtyArrived" :disabled="declareType !== 'add'" class="addObj-info" clearable placeholder="" size="small"></el-input>
          <el-input v-model="declareObj.qtyArrived" :disabled="declareType !== 'add'" class="addObj-info" clearable
            placeholder="" size="small"></el-input>
        </el-form-item>
        <el-form-item v-if="declareType !== 'add'" class="declareObj-form-item" label="供应商编号:" prop="supplierId">
          <el-input v-model="declareObj.supplierId" :disabled="declareType !== 'add'" class="addObj-info" clearable placeholder="" size="small"></el-input>
          <el-input v-model="declareObj.supplierId" :disabled="declareType !== 'add'" class="addObj-info" clearable
            placeholder="" size="small"></el-input>
        </el-form-item>
        <el-form-item class="declareObj-form-item" label="供应商名称:" prop="supplierName">
          <el-input v-model="declareObj.supplierName" :disabled="declareType !== 'add'" class="addObj-info" clearable placeholder="" size="small"></el-input>
          <el-input v-model="declareObj.supplierName" :disabled="declareType !== 'add'" class="addObj-info" clearable
            placeholder="" size="small"></el-input>
        </el-form-item>
        <el-form-item class="declareObj-form-item" label="批号:" prop="updateBatchNo">
          <el-input v-model="declareObj.updateBatchNo" class="addObj-info" clearable size="small"></el-input>
        </el-form-item>
        <el-form-item v-if="declareType !== 'add'" class="declareObj-form-item" label="库位号:" prop="locationNo">
          <el-input v-model="declareObj.locationNo" :disabled="declareType !== 'add'" class="addObj-info" clearable size="small"></el-input>
          <el-input v-model="declareObj.locationNo" :disabled="declareType !== 'add'" class="addObj-info" clearable
            size="small"></el-input>
        </el-form-item>
        <el-form-item v-if="declareType !== 'add'" class="declareObj-form-item" label="接收时间:" prop="receiverDate">
          <el-input v-model="declareObj.receiverDate" class="addObj-info" clearable disabled size="small"></el-input>
        </el-form-item>
        <el-form-item class="declareObj-form-item" label="单位:" prop="buyUnitMeas">
          <el-input v-model="declareObj.buyUnitMeas" :disabled="declareType !== 'add'" clearable class="addObj-info" size="small"></el-input>
          <el-input v-model="declareObj.buyUnitMeas" :disabled="declareType !== 'add'" clearable class="addObj-info"
            size="small"></el-input>
        </el-form-item>
        <el-form-item class="declareObj-form-item" label="物料类型:" prop="isExpire">
          <el-select v-model="declareObj.isExpire" prop="isExpire"
                     :disabled="declareType !== 'add'"
                     clearable size="small">
          <el-select v-model="declareObj.isExpire" prop="isExpire" :disabled="declareType !== 'add'" clearable
            size="small">
            <el-option :value="1" label="过期物料"></el-option>
          </el-select>
        </el-form-item>
@@ -173,8 +169,7 @@
                </span>
    </el-dialog>
    <!--数据查看弹框-->
    <data-look-visible v-if="dataDialogVisible" ref="dataDialogVisible"
                       :dataDialogVisible="dataDialogVisible"
    <data-look-visible v-if="dataDialogVisible" ref="dataDialogVisible" :dataDialogVisible="dataDialogVisible"
                       :dataLookInfo="dataLookInfo" @closeDataLook="closeDataLook"></data-look-visible>
  </div>
</template>
@@ -310,7 +305,7 @@
      tableData1: [],
      tableLoading1: false,
      column1: [
        {label: '委托编号', prop: 'entrustCode'},
        { label: '委托编号', prop: 'entrustCode', width: '160px' },
        {
          dataType: 'tag',
          label: '检验状态',
@@ -797,7 +792,6 @@
        entity:entity
      }).then(res => {
        this.outLoading = false
        this.$message.success('导出成功')
        let url = this.javaApi + '/word/' + res.data
        this.$download.saveAs(url, "原材料检测信息导出.xlsx");
      })
@@ -827,6 +821,7 @@
  display: flex;
  justify-content: space-between;
}
.tab {
  list-style-type: none;
  display: flex;
src/views/business/reportPreparation/index.vue
@@ -3,8 +3,8 @@
    <div>
      <el-form :model="entity" ref="entity" size="small" :inline="true">
        <el-form-item label="报告编号" prop="code">
          <el-input v-model="entity.code" clearable placeholder="请输入"
                    size="small" @keyup.enter.native="refreshTable()"></el-input>
          <el-input v-model="entity.code" clearable placeholder="请输入" size="small"
            @keyup.enter.native="refreshTable()"></el-input>
        </el-form-item>
        <el-form-item label="状态" prop="queryStatus">
          <el-select v-model="entity.queryStatus" clearable size="small" @change="refreshTable()">
@@ -30,26 +30,28 @@
    </div>
    <div>
      <lims-table :tableData="valueTableData" :column="column" :page="page" :tableLoading="tableLoading"
                  :isSelection="true" :handleSelectionChange="handleChange"
                  :height="'calc(100vh - 290px)'" @pagination="pagination" key="valueTableData">
        :isSelection="true" :handleSelectionChange="handleChange" :height="'calc(100vh - 290px)'"
        @pagination="pagination" key="valueTableData">
        <div slot="action" slot-scope="scope">
          <el-button size="small" type="text" @click="viewIssued(scope.row)">查看报告</el-button>
          <el-upload ref='upload1'
                     style="display: inline;margin: 0 6px"
                     :action="fileAction1 +'?id='+ scope.row.id"
                     :auto-upload="true"
                     :before-upload="fileBeforeUpload1"
                     :headers="uploadHeader" :on-error="onError1"
                     :on-success="handleSuccessUp1"
                     :show-file-list="false"
                     accept='.doc,.docx'>
            <el-button size="small" type="text" :disabled="scope.row.state != 0 || nickName !== scope.row.writeUserName">上传</el-button>
          <el-upload ref='upload1' style="display: inline;margin: 0 6px" :action="fileAction1 + '?id=' + scope.row.id"
            :auto-upload="true" :before-upload="fileBeforeUpload1" :headers="uploadHeader" :on-error="onError1"
            :on-success="handleSuccessUp1" :show-file-list="false" accept='.doc,.docx'>
            <el-button size="small" type="text"
              :disabled="scope.row.state != 0 || nickName !== scope.row.writeUserName">上传</el-button>
          </el-upload>
          <el-button type="text" size="small" :disabled="scope.row.state != 0 || nickName !== scope.row.writeUserName" @click="handleRestore(scope.row)">还原</el-button>
          <el-button type="text" size="small" :disabled="scope.row.state != 0 || nickName !== scope.row.writeUserName" @click="sendBackTask(scope.row)">退回任务</el-button>
          <el-button type="text" size="small" :disabled="scope.row.state != 0 || nickName !== scope.row.writeUserName" @click="handle(scope.row)">提交</el-button>
          <el-button type="text" size="small" :disabled="scope.row.state == null || scope.row.state == 0 ||scope.row.isExamine == 1 || nickName !== scope.row.examineUser" @click="handleIssued(scope.row)">审核</el-button>
          <el-button type="text" size="small" :disabled="scope.row.state == null || scope.row.state == 0 || scope.row.isExamine == 0 || scope.row.isExamine == null || scope.row.isRatify == 1 || nickName !== scope.row.ratifyUser" @click="handleApprove(scope.row)">批准</el-button>
          <el-button type="text" size="small" :disabled="scope.row.state != 0 || nickName !== scope.row.writeUserName"
            @click="handleRestore(scope.row)">还原</el-button>
          <el-button type="text" size="small" :disabled="scope.row.state != 0 || nickName !== scope.row.writeUserName"
            @click="sendBackTask(scope.row)">退回任务</el-button>
          <el-button type="text" size="small" :disabled="scope.row.state != 0 || nickName !== scope.row.writeUserName"
            @click="handle(scope.row)">提交</el-button>
          <el-button type="text" size="small"
            :disabled="scope.row.state == null || scope.row.state == 0 || scope.row.isExamine == 1 || nickName !== scope.row.examineUser"
            @click="handleIssued(scope.row)">审核</el-button>
          <el-button type="text" size="small"
            :disabled="scope.row.state == null || scope.row.state == 0 || scope.row.isExamine == 0 || scope.row.isExamine == null || scope.row.isRatify == 1 || nickName !== scope.row.ratifyUser"
            @click="handleApprove(scope.row)">批准</el-button>
          <el-popover placement="bottom" trigger="hover" style="margin-left: 6px">
            <template #reference>
              <el-button link type="text" size="small">更多</el-button>
@@ -79,7 +81,8 @@
    <el-dialog :fullscreen="fullscreen" :modal-append-to-body="false" :visible.sync="issuedVisible" title="报告审核"
               width="80vw">
      <div class="full-screen">
        <i v-if="!fullscreen" class="el-icon-full-screen" style="cursor: pointer;font-size: 18px" @click="fullscreen=true;"></i>
        <i v-if="!fullscreen" class="el-icon-full-screen" style="cursor: pointer;font-size: 18px"
          @click="fullscreen = true;"></i>
        <img v-else alt="" src="@/assets/images/no-full.svg" style="cursor: pointer;" @click="fullscreen=false;" >
      </div>
      <div v-if="issuedVisible" style="height: 80vh;">
@@ -100,9 +103,11 @@
                <el-button :loading="loadingIssuedReason" type="primary" @click="handleIssuedReason">确定</el-button>
            </span>
    </el-dialog>
    <el-dialog :fullscreen="fullscreen" :modal-append-to-body="false" :visible.sync="approveVisible" title="报告批准" width="80vw">
    <el-dialog :fullscreen="fullscreen" :modal-append-to-body="false" :visible.sync="approveVisible" title="报告批准"
      width="80vw">
      <div class="full-screen">
        <i v-if="!fullscreen" class="el-icon-full-screen" style="cursor: pointer;font-size: 18px" @click="fullscreen=true;"></i>
        <i v-if="!fullscreen" class="el-icon-full-screen" style="cursor: pointer;font-size: 18px"
          @click="fullscreen = true;"></i>
        <img v-else alt="" src="@/assets/images/no-full.svg" style="cursor: pointer;" @click="fullscreen=false;" >
      </div>
      <div v-if="approveVisible" style="height: 80vh;">
@@ -123,8 +128,7 @@
                <el-button :loading="loadingApproveReason" type="primary" @click="handleApproveReason">确定</el-button>
            </span>
    </el-dialog>
    <el-dialog :close-on-click-modal="false" :visible.sync="addApproverDia" title="指定批准人员"
               width="400px"
    <el-dialog :close-on-click-modal="false" :visible.sync="addApproverDia" title="指定批准人员" width="400px"
               @close="closeAddApproverDia">
      <div class="body" style="display: flex;padding: 10px;align-items: center;">
        <div class="search_label" style="width: 150px;"><span class="required-span">*</span>批准人:</div>
@@ -140,9 +144,7 @@
        <el-button :loading="loadingIssued" type="primary" @click="submitAddApprover">ç¡® å®š</el-button>
      </span>
    </el-dialog>
    <el-dialog :close-on-click-modal="false" :visible.sync="addVerifyDia"
               title="指定审核人员"
               width="400px"
    <el-dialog :close-on-click-modal="false" :visible.sync="addVerifyDia" title="指定审核人员" width="400px"
               @close="closeAddVerifyDia">
      <div class="body" style="display: flex;padding: 10px;align-items: center;">
        <div class="search_label" style="width: 150px;"><span class="required-span">*</span>审核人:</div>
@@ -164,7 +166,8 @@
    <el-dialog :fullscreen="fullscreen" :modal-append-to-body="false" :visible.sync="viewIssuedVisible" title="报告查看"
               width="80vw">
      <div class="full-screen">
        <i v-if="!fullscreen" class="el-icon-full-screen" style="cursor: pointer;font-size: 18px" @click="fullscreen=true;"></i>
        <i v-if="!fullscreen" class="el-icon-full-screen" style="cursor: pointer;font-size: 18px"
          @click="fullscreen = true;"></i>
        <img v-else alt="" src="@/assets/images/no-full.svg" style="cursor: pointer;" @click="fullscreen=false;" >
      </div>
      <div v-if="viewIssuedVisible" style="height: 80vh;">
@@ -174,13 +177,9 @@
    <!--附件查看-->
    <el-dialog :visible.sync="filesDialogVisible" title="附件查看" width="80%" @closed="closeFilesLook">
      <div style="margin-bottom: 10px">
        <el-upload ref='upload'
                   :action="fileAction"
                   :auto-upload="true"
                   :before-upload="fileBeforeUpload" :data="{orderId: filesLookInfo.insOrderId}"
                   :headers="uploadHeader" :on-error="onError"
                   :on-success="handleSuccessUp"
                   :show-file-list="false"
        <el-upload ref='upload' :action="fileAction" :auto-upload="true" :before-upload="fileBeforeUpload"
          :data="{ orderId: filesLookInfo.insOrderId }" :headers="uploadHeader" :on-error="onError"
          :on-success="handleSuccessUp" :show-file-list="false"
                   accept='.jpg,.jpeg,.png,.gif,.doc,.docx,.xls,.xlsx,.ppt,.pptx,.pdf,.zip,.rar' style="width: 80px !important;">
          <el-button size="small" style="height: 38px" type="primary">附件上传</el-button>
        </el-upload>
@@ -404,15 +403,19 @@
          formatData: (params) => {
            if (params == 0) {
              return "不通过";
            } else {
            } else if (params == 1) {
              return "通过";
            } else {
              return null
            }
          },
          formatType: (params) => {
            if (params == 0) {
              return "danger";
            } else {
            } else if (params == 1) {
              return "success";
            } else {
              return null
            }
          },
        },
@@ -427,15 +430,19 @@
          formatData: (params) => {
            if (params == 0) {
              return "不批准";
            } else {
            } else if (params == 1) {
              return "批准";
            } else {
              return null
            }
          },
          formatType: (params) => {
            if (params == 0) {
              return "danger";
            } else {
            } else if (params == 1) {
              return "success";
            } else {
              return null
            }
          },
        },
@@ -599,7 +606,6 @@
      this.outLoading = true
      downAll({ids: str}).then(res => {
        this.outLoading = false
        this.$message.success('导出成功')
        this.$download.saveAs(this.javaApi + res.message, row.fileName);
      })
    },
@@ -696,8 +702,12 @@
      }
    },
    download(row) {
      let url = this.javaApi+'/word/' + row.urlS ? row.urlS : row.url;
      this.$download.saveAs(url, row.fileName);
      let url = row.urlS ? row.urlS : row.url;
      const link = document.createElement('a');
      link.href = this.javaApi + url;
      link.target = '_blank';
      document.body.appendChild(link);
      link.click();
    },
    // è¿˜åŽŸæ“ä½œ
    handleRestore(row) {
src/views/business/unpass/components/unPassDialog.vue
@@ -62,7 +62,7 @@
          </el-form-item>
        </el-form>
        <el-upload v-if="type === 'add'" ref="upload" :action="action2" :on-change="beforeUpload" :on-error="onError"
          :on-remove="handleRemoveFile" :on-success="getUnpassUrl" :headers="headers" :file-list="unPassFilesList">
          :on-remove="handleRemoveFile" :on-success="getUnpassUrl" :headers="uploadHeader" :file-list="unPassFilesList">
          <el-button size="small" type="primary" style="text-align: left">附件上传</el-button>
        </el-upload>
        <div v-if="type !== 'add'">
@@ -84,6 +84,7 @@
<script>
import { getInsOrder, getUnqualifiedHandler, downFile, addUnqualifiedHandler } from '@/api/business/unpass.js'
import {mapGetters} from "vuex";
export default {
  name: "unPassDialog",
  // import å¼•入的组件需要注入到对象中才能使用
@@ -148,17 +149,17 @@
          orderId: this.orderId
        }).then(res => {
          if (res.code === 200) {
            this.unPassForm.headline = `No.0005-中天装备电线-外购品不合格反馈评审及纠正预防流程(正式版)-${JSON.parse(localStorage.getItem("user")).name}-${new Date().toISOString().substring(0, 10)}` // æ ‡é¢˜
            this.unPassForm.inventoryQuantityId = res.data.insOrderTemplate.inventoryQuantityId // åŽŸææ–™id
            this.unPassForm.headline = `No.0005-中天装备电线-外购品不合格反馈评审及纠正预防流程(正式版)-${this.nickName}-${new Date().toISOString().substring(0, 10)}` // æ ‡é¢˜
            this.unPassForm.feedbackTime = new Date().toISOString().substring(0, 10) // æŠ¥æ£€æ—¶é—´
            this.unPassForm.feedbackUser = this.nickName // åé¦ˆäºº
            this.unPassForm.insOrderId = res.data.insOrder.id // è®¢å•id
            this.unPassForm.supplierName = res.data.insOrderTemplate.supplierName // ä¾›åº”商名称
            this.unPassForm.materialName = res.data.insOrder.sampleType // ç‰©æ–™åç§°
            this.unPassForm.specsModels = res.data.insOrder.partDetail // è§„格型号
            this.unPassForm.inventoryQuantityId = res.data.insOrderTemplate.inventoryQuantityId // åŽŸææ–™id
            this.unPassForm.supplierName = res.data.insOrderTemplate.supplierName // ä¾›åº”商名称
            this.unPassForm.productionBatch = res.data.insOrderTemplate.updateBatchNo // ç”Ÿäº§æ‰¹æ¬¡
            this.unPassForm.cargoQuantity = res.data.insOrderTemplate.qtyArrived + res.data.insOrderTemplate.buyUnitMeas // åˆ°è´§æ•°é‡
            this.unPassForm.specsModels = res.data.insOrder.partDetail // è§„格型号
            this.unPassForm.inspectTime = res.data.insOrderTemplate.sendTime.substring(0, 10)  // æŠ¥æ£€æ—¶é—´
            this.unPassForm.feedbackTime = new Date().toISOString().substring(0, 10) // æŠ¥æ£€æ—¶é—´
            this.unPassForm.feedbackUser = JSON.parse(localStorage.getItem("user")).name // åé¦ˆäºº
          }
        })
      } else {
@@ -256,11 +257,7 @@
    },
  },
  computed: {
    headers() {
      return {
        'token': sessionStorage.getItem('token')
      }
    },
    ...mapGetters(["nickName"]),
    action2() {
      return this.javaApi + '/unqualifiedHandler/uploadFileByUnqualified'
    }
src/views/index.vue
@@ -10,121 +10,122 @@
            </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 class="left-2 card" v-loading="workLoading" style="overflow: hidden;">
          <div class="left-2-item" v-for="(item,index) in workDay" :key="index">
            <div class="left-item-title">
              <span style="font-size: 18px;">{{ item }}</span>
              <span style="font-size: 14px;color: #999999;">{{ weekdays[index] }}</span>
              <el-tag style="margin-top: 6px;" size="small">{{workList[index].length}} æ¡</el-tag>
            </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 class="body-item" v-for="(m,i) in workList[index]" :key="i" :class="{color0:m.type==0,color1:m.type==1,color2:m.type==2}" @click="goAddList(m)">
                <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>
                  </div>
                </div>
              </div>
            </div>
          </div>
        </div>
      </el-col>
      <el-col :lg="10" :md="10" :sm="24" :xl="10" :xs="24">
        <div class="right-1 card">
          <div class="right-1-item">
            <div class="img">
              <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: 14px;margin-bottom: 10px;">我的待办</p>
            </div>
          </div>
          <div class="right-1-item">
            <div class="img">
              <img alt="" src="@/assets/index_image/index-1.svg">
            </div>
            <div class="mun">
              <p style="font-size: 20px;">{{ getNumberFourTypes.totalNumberOfReadMessages }}</p>
              <p style="font-size: 14px;margin-bottom: 10px;">已办事宜</p>
            </div>
          </div>
          <div class="right-1-item">
            <div class="img">
              <img alt="" src="@/assets/index_image/index-2.svg">
            </div>
            <div class="mun">
              <p style="font-size: 20px;">{{ getNumberFourTypes.remainingToDo }}</p>
              <p style="font-size: 14px;margin-bottom: 10px;">剩余待办</p>
            </div>
          </div>
          <div class="right-1-item">
            <div class="img">
              <img alt="" src="@/assets/index_image/index-3.svg">
            </div>
            <div class="mun">
              <p style="font-size: 20px;">{{ getNumberFourTypes.totalNumberOfMessagesInThePastSevenDays }}</p>
              <p style="font-size: 14px;margin-bottom: 10px;">近期事宜</p>
            </div>
          </div>
        </div>
        <div class="right-2 card">
          <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>
          </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>
                <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>
                  <!-- <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">
                <span>{{ m.scheduleTimes }}</span>
                <el-tooltip :content="m.text" effect="dark" placement="top" style="margin-left: 10px;">
                  <p class="ellipsis-multiline" >{{ m.text }}</p>
                  <span style="font-size: 12px;margin-bottom: 8px;">{{ m.text }}</span>
                  <div class="tags" style="display: flex;align-items: end;flex-wrap: wrap;margin-bottom: 8px;">
                    <el-tooltip class="item" effect="dark" :content="item" placement="top" v-for="(item,index) in m.sample?m.sample.split(','):[]"
                                :key="index">
                      <el-tag
                        :color="m.type==0?'#70A090':(m.type==1?'#EBD476':'#FF3838')"
                        effect="dark" size="mini" style="margin: 2px;" class="single-line-ellipsis">
                        {{ item }}
                      </el-tag>
                </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 style="display: inline-block;height: 22px;width: 70px;border-radius: 10px;line-height: 22px;text-align: center;background: #C0C4CC;color: #fff;font-size: 14px;">{{ m.name }}</span>
            </div>
          </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 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>-->
<!--                  <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>-->
<!--                  </div>-->
<!--                </div>-->
<!--              </div>-->
<!--            </div>-->
<!--          </div>-->
<!--        </div>-->
      </el-col>
      <el-col :lg="10" :md="10" :sm="24" :xl="10" :xs="24">
        <div class="right-2 card">
          <span style="color: #333333;font-size: 16px;">工时统计</span>
          <div>
            <el-select v-model="sonLaboratory" placeholder="站点" size="mini" style="width: 100px;" @change="initEchart">
              <el-option
                v-for="item in dict.type.sys_sub_lab"
                :key="item.value"
                :label="item.label"
                :value="item.value">
              </el-option>
            </el-select>
            <el-radio-group v-model="type" size="mini">
              <el-radio-button label="周" ></el-radio-button>
              <el-radio-button label="月"></el-radio-button>
              <el-radio-button label="å¹´"></el-radio-button>
            </el-radio-group>
            <el-date-picker
              v-model="time.week"
              type="week"
              format="yyyy ç¬¬ WW å‘¨"
              placeholder="选择周" size="mini" v-if="type=='周'" @change="m=>changeTime(type,m)" style="width: 130px;">
            </el-date-picker>
            <el-date-picker
              v-model="time.month"
              type="month"
              placeholder="选择月" size="mini" v-if="type=='月'" @change="m=>changeTime(type,m)" style="width: 130px;">
            </el-date-picker>
            <el-date-picker
              v-model="time.year"
              type="year"
              placeholder="选择年" size="mini" v-if="type=='å¹´'" @change="m=>changeTime(type,m)" style="width: 130px;">
            </el-date-picker>
          </div>
        </div>
        <div class="right-2-body">
          <el-row :gutter="10" style="width: 100%;height: 80px;">
            <el-col :xs="24" :sm="24" :md="12" :lg="12" :xl="12">
              <div style="height: 100%;background: url(~@/assets/images/bg1.png) no-repeat;background-size: 100% 100%;padding: 12px 0;box-sizing: border-box;">
                <p style="text-align: center;font-size: 14px;color: #606266;line-height: 20px;margin-bottom: 4px;">总工时(小时)</p>
                <p style="text-align: center;font-family: DIN Alternate, DIN Alternate;font-weight: 700;font-size: 30px;color: #3D3D3D;line-height: 35px;">{{chartData0.total}}</p>
              </div>
            </el-col>
            <el-col :xs="24" :sm="24" :md="12" :lg="12" :xl="12">
              <div style="height: 100%;background: url(~@/assets/images/bg2.png) no-repeat;background-size: 100% 100%;padding: 12px 0;box-sizing: border-box;">
                <p style="text-align: center;font-size: 14px;color: #606266;line-height: 20px;margin-bottom: 4px;">检验员(个)</p>
                <p style="text-align: center;font-family: DIN Alternate, DIN Alternate;font-weight: 700;font-size: 30px;color: #3D3D3D;line-height: 35px;">{{chartData0.personNum}}</p>
              </div>
            </el-col>
          </el-row>
          <echart-module :id="'index-1'" :config="chartConfig0" :datas="chartData0" style="height: 250px;width: 100%;"></echart-module>
        </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">待办事项</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">
                <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)">
                    <!-- ç¼–号<span style="color:#3A7BFA;"> SB20240101-001 </span>的设备将于2023-09-09 11:11:11过期 -->
                    {{ m.content }}
                  </p>
                  <p>{{ m.createTime }}</p>
@@ -136,59 +137,26 @@
        </div>
      </el-col>
    </el-row>
    <el-dialog :visible.sync="dialogVisible" title="日程添加" width="400px">
      <div class="body" style="max-height: 60vh;">
        <el-row>
          <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"
                style="width: 100%;" type="datetime" value-format="yyyy-MM-dd HH:mm:ss">
              </el-date-picker>
            </div>
          </el-col>
          <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>
            </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-dialog>
  </div>
</template>
<script>
import {getYearAndMonthAndDays} from '@/utils/date.js'
import ScrollPagination from '@/components/index/scroll-paging.vue'
import {calendarWorkByWeek, manHourByPerson, manHourByStation} from "@/api/index/report";
import EchartModule from '@/components/echarts/echart.vue'
export default {
  components: {
    ScrollPagination
    ScrollPagination,
    EchartModule
  },
  dicts: ['sys_sub_lab'],
  data() {
    return {
      user: {},
      now: null,
      calendarValue: new Date(),
      currentIndex:5,
      dialogVisible:false,
      query:{
        time:'',
        text:''
      },
      loading:false,
      workLoading:false,
      workList:[],
      workDay:[],
@@ -203,13 +171,26 @@
      finishLoding: false, // åŠ è½½å®Œæˆï¼Œæ˜¾ç¤ºå·²ç»æ²¡æœ‰æ›´å¤šäº†
      timer:null,
      keyMap:{},
      getNumberFourTypes: {},
      sonLaboratory:null,
      chartData0:{
        total:0,
        personNum:0,
        data:[]
      },
      chartConfig0:{
        height: '',
        isLoading:false,
        type:'pie0'
      },
      type:'月',
      time:{
        week:'',
        month:'',
        year:'',
      },
    }
  },
  watch:{
    calendarValue(val){
      this.getScheduleByMe()
    },
    currentIndex(){
      this.keyMap = {}
      this.currentPage = 1;
@@ -218,7 +199,7 @@
    }
  },
  mounted() {
    this.user = JSON.parse(localStorage.getItem('user'))
    // this.user = JSON.parse(localStorage.getItem('user'))
    this.nowTime()
    setInterval(() => {
      this.nowTime()
@@ -229,7 +210,6 @@
    this.keyMap = {}
    this.list = [];
    this.getList();
    this.getScheduleByMe()
    this.timer&&clearInterval(this.timer)
    this.timer = setInterval(() => {
      this.init();
@@ -237,26 +217,17 @@
      this.keyMap = {}
      this.list = [];
      this.getList();
      this.getScheduleByMe()
    },1000*60*10)
    this.getNumberFourTypesFun()
  },
  methods: {
    // è·³è½¬é¡µé¢
    goAddList() {
    },
    changeState (val) {
      if (val == 0) {
        return '待检验'
      }
    },
    currentIndexChange () {
      this.keyMap = {}
      this.currentPage = 1;
      this.list = [];
      this.getList();
    },
    getNumberFourTypesFun() {
      this.$axios.get(this.$api.informationNotification.getNumberFourTypesMessagesHomePage).then(res => {
        this.getNumberFourTypes = res.data
      })
    },
    getList(){
      const key = `_${this.currentPage}`
@@ -273,26 +244,25 @@
      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){
          return
        }
        let list = res.data.records;
        this.total = res.data.total;
        if(list.length==0){
          this.finishLoding = true;
        }else{
          if(list.length<this.pageSize){
            this.finishLoding = true;
          }
          this.list = this.list.concat(list)
          if(this.total==this.list.length){
            this.finishLoding = true;
          }
          this.currentPage++;
        }
        this.listLoading = false
      })
      // this.$axios.get(this.$api.informationNotification.page+'?size='+this.pageSize+'&current='+this.currentPage+'&messageType='+this.currentIndex).then(res => {
      //   this.listLoading = false
      //   let list = res.data.records;
      //   this.total = res.data.total;
      //   if(list.length==0){
      //     this.finishLoding = true;
      //   }else{
      //     if(list.length<this.pageSize){
      //       this.finishLoding = true;
      //     }
      //     this.list = this.list.concat(list)
      //     if(this.total==this.list.length){
      //       this.finishLoding = true;
      //     }
      //     this.currentPage++;
      //   }
      // }).catch(err => {
      //   this.listLoading = false
      // })
    },
    nowTime() {
      var date = new Date();
@@ -320,94 +290,10 @@
      }
      this.now = y + "-" + m + "-" + d + "  " + h + ":" + min + ":" + s;
    },
    nextMonth(value) {
      let year = this.calendarValue.getFullYear();// å½“前年份
      let month = this.calendarValue.getMonth() + 1;// å½“前月份
      let day = this.calendarValue.getDate();// å½“前天数
      let nextyear = year;
      let nextmonth = parseInt(month) + 1;
      // åˆ¤æ–­ä¸‹ä¸€æœˆæ˜¯å¦ä¼šè¿›å…¥ä¸‹ä¸€å¹´
      if (nextmonth === 13) {
        nextyear = parseInt(year) + 1;
        nextmonth = 1;
      }
      // è®¡ç®—下一年下一个月有多少天
      let nextday = new Date(nextyear, nextmonth, 0);
      let nextdays = nextday.getDate();
      if (day > nextdays) {
        day = nextdays;
        if (day < 10) {
          day = '0' + day;
        }
      }
      if (nextmonth < 10) {
        nextmonth = '0' + nextmonth;
      }
      let nexttime = nextyear + '-' + nextmonth + '-' + day;
      // å°†å¾—到的年月日格式转换为标准时间,与饿了么时间格式相同才能联动
      this.calendarValue = new Date(nexttime);
    },
    prevMonth(time) {
      let year = this.calendarValue.getFullYear();// å½“前年份
      let month = this.calendarValue.getMonth() + 1;// å½“前月份
      let day = this.calendarValue.getDate();// å½“前天数
      let prevyear = year;
      let prevmonth = parseInt(month) - 1;
      // åˆ¤æ–­ä¸Šä¸€æœˆæ˜¯å¦ä¼šè¿›å…¥ä¸Šä¸€å¹´
      if (prevmonth === 0) {
        prevyear = parseInt(year) - 1;
        prevmonth = 12;
      }
      // è®¡ç®—上一年上一个月有多少天
      let prevday = new Date(prevyear, prevmonth, 0);
      let prevdays = prevday.getDate();
      if (day > prevdays) {
        day = prevdays;
        if (day < 10) {
          day = '0' + day;
        }
      }
      if (prevmonth < 10) {
        prevmonth = '0' + prevmonth;
      }
      let prevtime = prevyear + '-' + prevmonth + '-' + day;
      // å°†å¾—到的年月日格式转换为标准时间,与饿了么时间格式相同才能联动
      this.calendarValue = new Date(prevtime);
    },
    handleCancel(){
      this.dialogVisible = false;
      this.query = {
        time:'',
        text:''
      }
    },
    submit(){
      if(!this.query.time){
        this.$message.error('时间未填写')
        return
      }
      if(!this.query.text){
        this.$message.error('内容未填写')
        return
      }
      this.loading = true;
      this.$axios.post(this.$api.report.addSchedule, this.query).then(res => {
        this.loading = false;
        if (res.code == 201) {
          this.$message.error('操作失败')
          return
        }
        this.$message.success('保存成功')
        this.handleCancel()
        this.getScheduleByMe()
      })
    },
    // èŽ·å–æ—¥åŽ†ä»»åŠ¡å›¾
    init(){
      this.workLoading = true;
      this.$axios.get(this.$api.report.calendarWorkByWeek).then(res => {
        if (res.code == 201) return
      calendarWorkByWeek().then(res => {
        this.workLoading = false;
        this.workList = [];
        for(let i=0;i<7;i++){
@@ -417,6 +303,8 @@
          let arr = m.split('-')
          return arr[2]
        })
      }).catch(err=>{
        this.workLoading = false;
      })
    },
    getWeekdaysForNextWeek() {
@@ -457,27 +345,6 @@
      })
      return weekdays;
    },
    getScheduleByMe(){
      this.scheduleLoading = true;
      this.$axios.post(this.$api.report.ScheduleByMe, {
        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){
            let time = m.scheduleTime.split(' ')[1].split(':')
            m.scheduleTimes = time[0] + ':' + time[1]
          }else{
            m.scheduleTimes = ''
          }
          return m
        })
      })
    },
    goNoticeDetail(row){
      this.$axios.put(this.$api.informationNotification.triggerModificationStatusToRead+'/'+row.id).then(res => {
        row.num = Math.random(100);
@@ -491,6 +358,65 @@
        },29);
      })
    },
    changeTime(type,m){
      if(m){
        switch(type){
          case '周':
            this.startTime  = getYearAndMonthAndDays(new Date(this.time.week.getTime() - 24 * 60 * 60 * 1000))
            this.endTime = getYearAndMonthAndDays(new Date(this.time.week.getTime() + 24 * 60 * 60 * 1000 * 5))
            break;
          case '月':
            const year = new Date(this.time.month).getFullYear();
            const month = new Date(this.time.month).getMonth();
            const day = new Date(year, month + 1, 0).getDate(); //
            // è®¾ç½®èµ·å§‹æ—¥æœŸå’Œç»“束日期
            this.startTime = `${year}-${month + 1}-01`
            this.endTime = `${year}-${month + 1}-${day}` // æœˆæœ«
            break;
          case 'å¹´':
            const year0 = new Date(this.time.year).getFullYear();
            this.startTime = `${year0}-01-01`; // å¹´åˆ
            this.endTime = `${year0}-12-31`; // å¹´æœ«
            break;
        }
      }else{
        const year = new Date().getFullYear();
        const month = new Date().getMonth();
        // è®¾ç½®èµ·å§‹æ—¥æœŸå’Œç»“束日期
        this.startTime = new Date(year, month, 1).toISOString().slice(0, 10); // æœˆåˆ
        this.endTime = new Date(year, month + 1, 0).toISOString().slice(0, 10); // æœˆæœ«
        this.time.month = new Date()
      }
      this.initEchart()
    },
    async initEchart(){
      this.chartConfig0.isLoading = false
      const params = {
        startTime: this.startTime,
        endTime: this.endTime,
        sonLaboratory: this.sonLaboratory,
      }
      let res0 = await manHourByStation(params)
      if (res0.code == 500) return
      this.chartData0.total = res0.message
      let res1 = await manHourByPerson(params)
      if (res1.code == 500) return
      this.chartData0.personNum = 0
      this.chartData0.data = []
      if(res1.data){
        for(let m in res1.data){
          this.chartData0.personNum ++
          let obj = {
            name:m,
            value:res1.data[m],
            penl:this.chartData0.total>0?((res1.data[m]/this.chartData0.total)*100).toFixed(2):0
          }
          this.chartData0.data.push(obj)
        }
      }
      this.chartConfig0.isLoading = true
    },
  },
  deactivated(){
    this.timer&&clearInterval(this.timer)
@@ -498,13 +424,13 @@
}
</script>
<style scoped lang="scss">
<style scoped>
.index {
  width: 100%;
  height: calc(100% - 50px);
  overflow-y: auto;
  padding: 20px 10px 10px;
  background: rgb(245, 247, 251);
  padding: 14px;
  background: #F5F7FB;
}
.left-1 {
@@ -565,6 +491,7 @@
  display: flex;
  align-items: center;
  justify-content: center;
  cursor: pointer;
}
.right-1-item .mun{
@@ -586,9 +513,9 @@
.right-2-body{
  width: 100%;
  margin-top: 20px;
  display: flex;
  align-items: flex-start;
  justify-content: space-between;
  /* display: flex;
  align-items: start;
  justify-content: space-between; */
}
>>>.el-calendar__header {
  display: none;
@@ -634,23 +561,17 @@
  font-size: 14px;
}
.right-3-tab{
  display: flex;
  align-items: center;
  padding: 20px 0 0 20px;
  margin-bottom: 16px;
}
.tab-item{
  width: 50%;
  box-sizing: border-box;
  text-align: center;
  padding: 14px 0;
  font-size: 20px;
  background: #F5F7FB;
  color: #333333;
}
.tab-item.active{
  background: #fff;
  color: #FF3838;
  padding-left: 16px;
  font-weight: 500;
  font-size: 18px;
  color: #3D3D3D;
  line-height: 25px;
  text-align: left;
  font-style: normal;
  text-transform: none;
}
.right-3-list{
  padding: 0 12px 8px;
@@ -667,7 +588,7 @@
}
.list3-item-title{
  display: flex;
  align-items: flex-start;
  align-items: start;
  margin-bottom: 10px;
}
.list3-item-info{
@@ -714,6 +635,7 @@
  border-radius: 16px;
  overflow: hidden;
  margin-bottom: 8px;
  cursor: pointer;
}
.body-item.color0{
  background: #70A090;
@@ -768,24 +690,7 @@
  background: #3A7BFA !important;
  color: #fff !important;
}
.body-item-name {
  display: inline-block;
  height: 22px;width: 60px;
  border-radius: 10px;
  line-height: 22px;
  text-align: center;
  background: #C0C4CC;
  color: #fff;
  font-size: 14px
}
.body-item-insState {
  margin-left: 2px;
  display: inline-block;
  height: 22px;width: 60px;
  border-radius: 10px;
  line-height: 22px;
  text-align: center;
  color: #fff;
  font-size: 14px
>>>.el-tag--dark{
  border: 0;
}
</style>
src/views/monitor/logininfor/index.vue
@@ -52,51 +52,51 @@
      </el-form-item>
    </el-form>
    <el-row :gutter="10" class="mb8">
      <el-col :span="1.5">
        <el-button
          type="danger"
          plain
          icon="el-icon-delete"
          size="mini"
          :disabled="multiple"
          @click="handleDelete"
          v-hasPermi="['monitor:logininfor:remove']"
        >删除</el-button>
      </el-col>
      <el-col :span="1.5">
        <el-button
          type="danger"
          plain
          icon="el-icon-delete"
          size="mini"
          @click="handleClean"
          v-hasPermi="['monitor:logininfor:remove']"
        >清空</el-button>
      </el-col>
      <el-col :span="1.5">
        <el-button
          type="primary"
          plain
          icon="el-icon-unlock"
          size="mini"
          :disabled="single"
          @click="handleUnlock"
          v-hasPermi="['monitor:logininfor:unlock']"
        >解锁</el-button>
      </el-col>
      <el-col :span="1.5">
        <el-button
          type="warning"
          plain
          icon="el-icon-download"
          size="mini"
          @click="handleExport"
          v-hasPermi="['monitor:logininfor:export']"
        >导出</el-button>
      </el-col>
      <right-toolbar :showSearch.sync="showSearch" @queryTable="getList"></right-toolbar>
    </el-row>
<!--    <el-row :gutter="10" class="mb8">-->
<!--      <el-col :span="1.5">-->
<!--        <el-button-->
<!--          type="danger"-->
<!--          plain-->
<!--          icon="el-icon-delete"-->
<!--          size="mini"-->
<!--          :disabled="multiple"-->
<!--          @click="handleDelete"-->
<!--          v-hasPermi="['monitor:logininfor:remove']"-->
<!--        >删除</el-button>-->
<!--      </el-col>-->
<!--      <el-col :span="1.5">-->
<!--        <el-button-->
<!--          type="danger"-->
<!--          plain-->
<!--          icon="el-icon-delete"-->
<!--          size="mini"-->
<!--          @click="handleClean"-->
<!--          v-hasPermi="['monitor:logininfor:remove']"-->
<!--        >清空</el-button>-->
<!--      </el-col>-->
<!--      <el-col :span="1.5">-->
<!--        <el-button-->
<!--          type="primary"-->
<!--          plain-->
<!--          icon="el-icon-unlock"-->
<!--          size="mini"-->
<!--          :disabled="single"-->
<!--          @click="handleUnlock"-->
<!--          v-hasPermi="['monitor:logininfor:unlock']"-->
<!--        >解锁</el-button>-->
<!--      </el-col>-->
<!--      <el-col :span="1.5">-->
<!--        <el-button-->
<!--          type="warning"-->
<!--          plain-->
<!--          icon="el-icon-download"-->
<!--          size="mini"-->
<!--          @click="handleExport"-->
<!--          v-hasPermi="['monitor:logininfor:export']"-->
<!--        >导出</el-button>-->
<!--      </el-col>-->
<!--      <right-toolbar :showSearch.sync="showSearch" @queryTable="getList"></right-toolbar>-->
<!--    </el-row>-->
    <el-table ref="tables" v-loading="loading" :data="list" @selection-change="handleSelectionChange" :default-sort="defaultSort" @sort-change="handleSortChange">
      <el-table-column type="selection" width="55" align="center" />
src/views/monitor/operlog/index.vue
@@ -76,40 +76,40 @@
      </el-form-item>
    </el-form>
    <el-row :gutter="10" class="mb8">
      <el-col :span="1.5">
        <el-button
          type="danger"
          plain
          icon="el-icon-delete"
          size="mini"
          :disabled="multiple"
          @click="handleDelete"
          v-hasPermi="['monitor:operlog:remove']"
        >删除</el-button>
      </el-col>
      <el-col :span="1.5">
        <el-button
          type="danger"
          plain
          icon="el-icon-delete"
          size="mini"
          @click="handleClean"
          v-hasPermi="['monitor:operlog:remove']"
        >清空</el-button>
      </el-col>
      <el-col :span="1.5">
        <el-button
          type="warning"
          plain
          icon="el-icon-download"
          size="mini"
          @click="handleExport"
          v-hasPermi="['monitor:operlog:export']"
        >导出</el-button>
      </el-col>
      <right-toolbar :showSearch.sync="showSearch" @queryTable="getList"></right-toolbar>
    </el-row>
<!--    <el-row :gutter="10" class="mb8">-->
<!--      <el-col :span="1.5">-->
<!--        <el-button-->
<!--          type="danger"-->
<!--          plain-->
<!--          icon="el-icon-delete"-->
<!--          size="mini"-->
<!--          :disabled="multiple"-->
<!--          @click="handleDelete"-->
<!--          v-hasPermi="['monitor:operlog:remove']"-->
<!--        >删除</el-button>-->
<!--      </el-col>-->
<!--      <el-col :span="1.5">-->
<!--        <el-button-->
<!--          type="danger"-->
<!--          plain-->
<!--          icon="el-icon-delete"-->
<!--          size="mini"-->
<!--          @click="handleClean"-->
<!--          v-hasPermi="['monitor:operlog:remove']"-->
<!--        >清空</el-button>-->
<!--      </el-col>-->
<!--      <el-col :span="1.5">-->
<!--        <el-button-->
<!--          type="warning"-->
<!--          plain-->
<!--          icon="el-icon-download"-->
<!--          size="mini"-->
<!--          @click="handleExport"-->
<!--          v-hasPermi="['monitor:operlog:export']"-->
<!--        >导出</el-button>-->
<!--      </el-col>-->
<!--      <right-toolbar :showSearch.sync="showSearch" @queryTable="getList"></right-toolbar>-->
<!--    </el-row>-->
    <el-table ref="tables" v-loading="loading" :data="list" @selection-change="handleSelectionChange" :default-sort="defaultSort" @sort-change="handleSortChange">
      <el-table-column type="selection" width="50" align="center" />
src/views/performance/manHour/workTimeConfig.vue
@@ -277,9 +277,11 @@
      })
        .then(() => {
          deleteAuxiliaryWorkingHours({ id: row.id }).then((res) => {
            if (res.code == 201) return;
            console.log('res',res)
            if (res.code == 200){
            this.$message.success("删除成功");
            this.refresh();
            }
          });
        })
        .catch(() => { });
src/views/performance/manHour/workTimeManagement.vue
@@ -4,308 +4,146 @@
    <div class="search">
      <div class="search_thing" style="width: 200px">
        <div class="search_label">星期:</div>
        <el-select
          v-model="entity.weekDay"
          clearable
          placeholder="全部"
          size="small"
          @change="refreshTable()"
        >
          <el-option
            v-for="item in weekList"
            :key="item.value"
            :label="item.label"
            :value="item.value"
          >
        <el-select v-model="entity.weekDay" clearable placeholder="全部" size="small" @change="refreshTable()">
          <el-option v-for="item in weekList" :key="item.value" :label="item.label" :value="item.value">
          </el-option>
        </el-select>
      </div>
      <div class="search_thing" style="width: 390px">
        <div class="search_label" style="width: 90px">时间范围:</div>
        <div class="search_input">
          <el-date-picker
            v-model="entity.dateTime"
            clearable
            end-placeholder="结束日期"
            format="yyyy-MM-dd"
            range-separator="至"
            size="small"
            start-placeholder="开始日期"
            style="width: 100%"
            type="daterange"
            value-format="yyyy-MM-dd"
            @change="refreshTable()"
          >
          <el-date-picker v-model="entity.dateTime" clearable end-placeholder="结束日期" format="yyyy-MM-dd"
            range-separator="至" size="small" start-placeholder="开始日期" style="width: 100%" type="daterange"
            value-format="yyyy-MM-dd" @change="refreshTable()">
          </el-date-picker>
        </div>
      </div>
      <!-- ä»¥ä¸‹è¿™ä¸¤ä¸ªä¸ºç»„长角色特有的 -->
      <div class="search_thing" style="width: 200px">
        <div class="search_label">名字:</div>
        <el-input
          v-model="entity.name"
          clearable
          placeholder="请输入"
          size="small"
          @keyup.enter.native="refreshTable()"
        ></el-input>
        <el-input v-model="entity.name" clearable placeholder="请输入" size="small"
          @keyup.enter.native="refreshTable()"></el-input>
      </div>
      <div
        v-if="currentTable == 'ValueTable1'"
        class="search_thing"
        style="width: 250px"
      >
      <div v-if="currentTable == 'ValueTable1'" class="search_thing" style="width: 250px">
        <div class="search_label" style="width: 120px">样品编号:</div>
        <el-input
          v-model="entity.sample"
          clearable
          placeholder="请输入"
          size="small"
          @keyup.enter.native="refreshTable()"
        ></el-input>
        <el-input v-model="entity.sample" clearable placeholder="请输入" size="small"
          @keyup.enter.native="refreshTable()"></el-input>
      </div>
      <div
        v-if="currentTable == 'ValueTable0'"
        class="search_thing"
        style="width: 200px"
      >
      <div v-if="currentTable == 'ValueTable0'" class="search_thing" style="width: 200px">
        <div class="search_label">状态:</div>
        <el-select
          v-model="entity.state"
          placeholder="全部"
          size="small"
          @change="refreshTable()"
          clearable
        >
          <el-option
            v-for="item in stateList"
            :key="item.value"
            :label="item.label"
            :value="item.value"
          >
        <el-select v-model="entity.state" placeholder="全部" size="small" @change="refreshTable()" clearable>
          <el-option v-for="item in stateList" :key="item.value" :label="item.label" :value="item.value">
          </el-option>
        </el-select>
      </div>
      <div class="search_thing" style="padding-left: 30px; width: 100px">
        <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>
    </div>
    <div
      style="display: flex; align-items: center; justify-content: space-between"
    >
    <div style="display: flex; align-items: center; justify-content: space-between">
      <el-radio-group :key="'111'" v-model="currentTable" size="small">
        <el-radio-button label="ValueTable0"> è¾…助工时 </el-radio-button>
        <el-radio-button label="ValueTable1"> äº§é‡å·¥æ—¶ </el-radio-button>
      </el-radio-group>
      <div style="display: flex; align-items: center">
        <p style="font-size: 14px; margin-right: 30px">
          æ€»å·¥æ—¶æ±‡æ€»ï¼š<span
            v-if="totalInfo"
            style="font-size: 16px; color: #3a7bfa"
            >{{
          æ€»å·¥æ—¶æ±‡æ€»ï¼š<span v-if="totalInfo" style="font-size: 16px; color: #3a7bfa">{{
              totalInfo["产量工时汇总"] + totalInfo["辅助工时汇总"]
                ? Number(
                    totalInfo["产量工时汇总"] + totalInfo["辅助工时汇总"]
                  ).tofixed(4)
                : 0
            }}</span
          >&nbsp;&nbsp;&nbsp;&nbsp;产量工时汇总:<span
            v-if="totalInfo"
            style="font-size: 16px; color: #3a7bfa"
            >{{
          }}</span>&nbsp;&nbsp;&nbsp;&nbsp;产量工时汇总:<span v-if="totalInfo" style="font-size: 16px; color: #3a7bfa">{{
              totalInfo["产量工时汇总"]
                ? Number(totalInfo["产量工时汇总"]).tofixed(4)
                : 0
            }}</span
          >&nbsp;&nbsp;&nbsp;&nbsp;辅助工时汇总:<span
            v-if="totalInfo"
            style="font-size: 16px; color: #3a7bfa"
            >{{
            }}</span>&nbsp;&nbsp;&nbsp;&nbsp;辅助工时汇总:<span v-if="totalInfo" style="font-size: 16px; color: #3a7bfa">{{
              totalInfo["辅助工时汇总"]
                ? Number(totalInfo["辅助工时汇总"]).tofixed(4)
                : 0
            }}</span
          >
            }}</span>
        </p>
        <el-button
          v-show="
            currentTable == 'ValueTable0' &&
        <el-button v-show="currentTable == 'ValueTable0' &&
            checkPermi(['performance:manHour:workTimeManagement:add'])
          "
          size="small"
          type="primary"
          @click="openAdd"
          >录入数据</el-button
        >
        <el-button
          v-if="down && currentTable === 'ValueTable0'"
          :loading="outLoading"
          size="small"
          type="primary"
          @click="handleOut"
          >导 å‡º</el-button
        >
        <el-button
          v-if="down && currentTable === 'ValueTable1'"
          :loading="outLoading"
          size="small"
          type="primary"
          @click="handleOut1"
          >导 å‡º</el-button
        >
        <el-button
          v-show="
            currentTable == 'ValueTable0' &&
          " size="small" type="primary" @click="openAdd">录入数据</el-button>
        <el-button v-if="down && currentTable === 'ValueTable0'" :loading="outLoading" size="small" type="primary"
          @click="handleOut">导 å‡º</el-button>
        <el-button v-if="down && currentTable === 'ValueTable1'" :loading="outLoading" size="small" type="primary"
          @click="handleOut1">导 å‡º</el-button>
        <el-button v-show="currentTable == 'ValueTable0' &&
            checkPermi(['performance:manHour:workTimeManagement:add'])
          "
          size="small"
          type="primary"
          @click="openBatchCheck(1)"
          >批量批准</el-button
        >
          " size="small" type="primary" @click="openBatchCheck(1)">批量批准</el-button>
      </div>
    </div>
    <div class="table">
      <lims-table
        :tableData="tableData"
        :column="column"
        :page="page"
        :tableLoading="tableLoading"
        :height="'calc(100vh - 350px)'"
        :isSelection="true"
        v-if="currentTable == 'ValueTable0'"
        @pagination="pagination"
        :handleSelectionChange="handleSelectionChange"
      ></lims-table>
      <lims-table
        :tableData="tableData0"
        :column="column0"
        :page="page0"
        :tableLoading="tableLoading"
        :height="'calc(100vh - 350px)'"
        v-if="currentTable == 'ValueTable1'"
        @pagination="pagination0"
      ></lims-table>
      <lims-table :tableData="tableData" :column="column" :page="page" :tableLoading="tableLoading"
        :height="'calc(100vh - 350px)'" :isSelection="true" v-if="currentTable == 'ValueTable0'"
        @pagination="pagination" :handleSelectionChange="handleSelectionChange"></lims-table>
      <lims-table :tableData="tableData0" :column="column0" :page="page0" :tableLoading="tableLoading"
        :height="'calc(100vh - 350px)'" v-if="currentTable == 'ValueTable1'" @pagination="pagination0"></lims-table>
    </div>
    <el-dialog
      :before-close="handleClose"
      :title="formData.id ? '编辑' : '录入数据'"
      :visible.sync="addVisible"
      width="600px"
    >
    <el-dialog :before-close="handleClose" :title="formData.id ? '编辑' : '录入数据'" :visible.sync="addVisible"
      width="600px">
      <el-row style="display: flex; justify-content: space-around">
        <el-col :span="12">
          <el-form :model="formData" label-width="90px">
            <el-form-item label="录入时间:">
              <el-radio-group v-model="formData.dateTime" size="small">
                <el-radio :label="getYearAndMonthAndDays() + ' 00:00:00'"
                  >今天</el-radio
                >
                <el-radio
                  :label="
                    getYearAndMonthAndDays(
                <el-radio :label="getYearAndMonthAndDays() + ' 00:00:00'">今天</el-radio>
                <el-radio :label="getYearAndMonthAndDays(
                      new Date(new Date().getTime() - 24 * 60 * 60 * 1000)
                    ) + ' 00:00:00'
                  "
                  >昨天</el-radio
                >
                  ">昨天</el-radio>
              </el-radio-group>
            </el-form-item>
            <el-form-item label="年份:">
              <el-input
                v-model="formData.year"
                disabled
                size="small"
              ></el-input>
              <el-input v-model="formData.year" disabled size="small"></el-input>
            </el-form-item>
            <el-form-item label="周次:">
              <el-input
                v-model="formData.week"
                disabled
                size="small"
              ></el-input>
              <el-input v-model="formData.week" disabled size="small"></el-input>
            </el-form-item>
            <el-form-item label="星期:">
              <!-- <el-input v-model="formData.weekDay" size="small" disabled></el-input> -->
              <el-select
                v-model="formData.weekDay"
                disabled
                placeholder="请选择"
                size="small"
              >
                <el-option
                  v-for="item in weekList"
                  :key="item.value"
                  :label="item.label"
                  :value="item.value"
                >
              <el-select v-model="formData.weekDay" disabled placeholder="请选择" size="small">
                <el-option v-for="item in weekList" :key="item.value" :label="item.label" :value="item.value">
                </el-option>
              </el-select>
            </el-form-item>
            <el-form-item label="班次:">
              <el-input
                v-model="formData.shift"
                disabled
                size="small"
              ></el-input>
              <el-input v-model="formData.shift" disabled size="small"></el-input>
            </el-form-item>
          </el-form>
        </el-col>
        <el-col :span="12">
          <el-form :model="formData" label-width="90px">
            <el-form-item label="编号:" required>
              <el-input
                v-model="formData.number"
                size="small"
                @blur="getInfoByCode"
              ></el-input>
              <el-input v-model="formData.number" size="small" @blur="getInfoByCode"></el-input>
            </el-form-item>
            <el-form-item label="数量:" required>
              <el-input v-model="formData.amount" size="small"></el-input>
            </el-form-item>
            <el-form-item label="核准工时:">
              <el-input
                v-model="formData.approvedWorkingHour"
                disabled
                size="small"
              ></el-input>
              <el-input v-model="formData.approvedWorkingHour" disabled size="small"></el-input>
            </el-form-item>
            <el-form-item label="辅助工时:">
              <el-input
                v-model="formData.nonproductiveTime"
                disabled
                size="small"
              ></el-input>
              <el-input v-model="formData.nonproductiveTime" disabled size="small"></el-input>
            </el-form-item>
            <el-form-item label="辅助项目:">
              <el-input
                v-model="formData.auxiliaryProject"
                disabled
                size="small"
              ></el-input>
              <el-input v-model="formData.auxiliaryProject" disabled size="small"></el-input>
            </el-form-item>
          </el-form>
        </el-col>
      </el-row>
      <el-form :model="formData" label-width="90px">
        <el-form-item label="辅助说明:">
          <el-input
            v-model="formData.remarks"
            :rows="3"
            size="small"
            type="textarea"
          ></el-input>
          <el-input v-model="formData.remarks" :rows="3" size="small" type="textarea"></el-input>
        </el-form-item>
      </el-form>
      <span slot="footer" class="dialog-footer">
        <el-row>
          <el-button @click="handleClose">取 æ¶ˆ</el-button>
          <el-button :loading="addLoad" type="primary" @click="submitAdd"
            >ç¡® å®š</el-button
          >
          <el-button :loading="addLoad" type="primary" @click="submitAdd">ç¡® å®š</el-button>
        </el-row>
      </span>
    </el-dialog>
@@ -315,134 +153,63 @@
        <el-col :span="12">
          <el-form :model="formData0" label-width="90px">
            <el-form-item label="年份:">
              <el-input
                v-model="formData0.year"
                :disabled="title == '批准'"
                size="small"
              ></el-input>
              <el-input v-model="formData0.year" :disabled="title == '批准'" size="small"></el-input>
            </el-form-item>
            <el-form-item label="周次:">
              <el-input
                v-model="formData0.week"
                :disabled="title == '批准'"
                size="small"
              ></el-input>
              <el-input v-model="formData0.week" :disabled="title == '批准'" size="small"></el-input>
            </el-form-item>
            <el-form-item label="星期:">
              <el-select
                v-model="formData0.weekDay"
                :disabled="title == '批准'"
                placeholder="请选择"
                size="small"
              >
                <el-option
                  v-for="item in weekList"
                  :key="item.value"
                  :label="item.label"
                  :value="item.value"
                >
              <el-select v-model="formData0.weekDay" :disabled="title == '批准'" placeholder="请选择" size="small">
                <el-option v-for="item in weekList" :key="item.value" :label="item.label" :value="item.value">
                </el-option>
              </el-select>
            </el-form-item>
            <el-form-item label="姓名:">
              <el-input
                v-model="formData0.name"
                disabled
                size="small"
              ></el-input>
              <el-input v-model="formData0.name" disabled size="small"></el-input>
            </el-form-item>
            <el-form-item label="班次:">
              <el-select
                v-model="formData0.shift"
                :disabled="title == '批准'"
                placeholder="请选择"
                size="small"
              >
                <el-option
                  v-for="item in classType"
                  :key="item.value"
                  :label="item.label"
                  :value="item.value"
                >
              <el-select v-model="formData0.shift" :disabled="title == '批准'" placeholder="请选择" size="small">
                <el-option v-for="item in classType" :key="item.value" :label="item.label" :value="item.value">
                </el-option>
              </el-select>
            </el-form-item>
            <el-form-item label="复核说明:">
              <el-input
                v-model="formData0.reviewerRemark"
                :rows="3"
                size="small"
                type="textarea"
              ></el-input>
              <el-input v-model="formData0.reviewerRemark" :rows="3" size="small" type="textarea"></el-input>
            </el-form-item>
          </el-form>
        </el-col>
        <el-col :span="12">
          <el-form :model="formData0" label-width="90px">
            <el-form-item label="编号:" required>
              <el-input
                v-model="formData0.number"
                :disabled="title == '批准'"
                size="small"
              ></el-input>
              <el-input v-model="formData0.number" :disabled="title == '批准'" size="small"></el-input>
            </el-form-item>
            <el-form-item label="数量:" required>
              <el-input
                v-model="formData0.amount"
                :disabled="title == '批准'"
                size="small"
              ></el-input>
              <el-input v-model="formData0.amount" :disabled="title == '批准'" size="small"></el-input>
            </el-form-item>
            <el-form-item label="复核数量:" required>
              <el-input
                v-model="formData0.reviewerNumber"
                size="small"
              ></el-input>
              <el-input v-model="formData0.reviewerNumber" size="small"></el-input>
            </el-form-item>
            <el-form-item label="核准工时:">
              <el-input
                v-model="formData0.approvedWorkingHour"
                disabled
                size="small"
              ></el-input>
              <el-input v-model="formData0.approvedWorkingHour" disabled size="small"></el-input>
            </el-form-item>
            <el-form-item label="复核工时:">
              <el-input
                v-model="formData0.reviewerNonproductiveTime"
                disabled
                size="small"
              ></el-input>
              <el-input v-model="formData0.reviewerNonproductiveTime" disabled size="small"></el-input>
            </el-form-item>
            <el-form-item label="辅助项目:">
              <el-input
                v-model="formData0.auxiliaryProject"
                disabled
                size="small"
              ></el-input>
              <el-input v-model="formData0.auxiliaryProject" disabled size="small"></el-input>
            </el-form-item>
          </el-form>
        </el-col>
      </el-row>
      <span slot="footer" class="dialog-footer">
        <el-row>
          <el-button :loading="checkLoadN" @click="submitCheck(0)"
            >不批准</el-button
          >
          <el-button
            :loading="checkLoadY"
            type="primary"
            @click="submitCheck(1)"
            >批 å‡†</el-button
          >
          <el-button :loading="checkLoadN" @click="submitCheck(0)">不批准</el-button>
          <el-button :loading="checkLoadY" type="primary" @click="submitCheck(1)">批 å‡†</el-button>
        </el-row>
      </span>
    </el-dialog>
    <el-dialog
      :before-close="closeBatchCheckDialog"
      :title="batchCheckTitle"
      :visible.sync="batchCheckDialog"
      width="30%"
    >
    <el-dialog :before-close="closeBatchCheckDialog" :title="batchCheckTitle" :visible.sync="batchCheckDialog"
      width="30%">
      <span>{{ batchCheckDialogMessage }}</span>
      <span slot="footer" class="dialog-footer">
        <el-button @click="batchCheck(0)">不批准</el-button>
@@ -1096,7 +863,6 @@
      exportAssistantHours({ entity: entity })
        .then((res) => {
          this.outLoading = false;
          this.$message.success("导出成功");
          const blob = new Blob([res]);
          this.$download.saveAs(blob, "辅助工时信息导出.xlsx");
        })
@@ -1115,7 +881,6 @@
      exportOutputHours({ entity: entity })
        .then((res) => {
          this.outLoading = false;
          this.$message.success("导出成功");
          const blob = new Blob([res]);
          this.$download.saveAs(blob, "产量工时信息导出.xlsx");
        })
@@ -1139,6 +904,7 @@
  padding-top: 0;
  /* scrollbar-width: none;  */
}
/* .work-time-management::-webkit-scrollbar {
  display: none;
} */
src/views/standard/standardLibrary/index.vue
@@ -206,7 +206,8 @@
          height: calc(100% - 30px);
          overflow-y: scroll;
          scrollbar-width: none;
        " @node-click="handleNodeClick" @node-expand="nodeOpen" @node-collapse="nodeClose" @node-drop="handleDrop">
        " @node-click="handleNodeClick"
               @node-drop="handleDrop">
        <div slot-scope="{ node, data }" class="custom-tree-node">
          <el-row style="width: 100%">
            <el-col :class="{ sort: node.level > 3 }" :span="19" :title="data.label" style="text-align: left">
@@ -682,10 +683,42 @@
        }
      }
    },
    filterNode(value, data) {
      if (!value) return true;
      return data.label.indexOf(value) !== -1;
    // è°ƒç”¨tree过滤方法 ä¸­æ–‡è‹±è¿‡æ»¤
    filterNode (value, data, node) {
      if (!value) {    //如果数据为空,则返回true,显示所有的数据项
        return true
      }
      // æŸ¥è¯¢åˆ—表是否有匹配数据,将值小写,匹配英文数据
      let val = value.toLowerCase()
      return this.chooseNode(val, data, node) // è°ƒç”¨è¿‡æ»¤äºŒå±‚方法
    },
    // è¿‡æ»¤çˆ¶èŠ‚ç‚¹ / å­èŠ‚ç‚¹ (如果输入的参数是父节点且能匹配,则返回该节点以及其下的所有子节点;如果参数是子节点,则返回该节点的父节点。name是中文字符,enName是英文字符.
    chooseNode (value, data, node) {
      if (data.label.indexOf(value) !== -1) {
        return true
      }
      const level = node.level
      // å¦‚果传入的节点本身就是一级节点就不用校验了
      if (level === 1) {
        return false
      }
      // å…ˆå–当前节点的父节点
      let parentData = node.parent
      // éåŽ†å½“å‰èŠ‚ç‚¹çš„çˆ¶èŠ‚ç‚¹
      let index = 0
      while (index < level - 1) {
        // å¦‚果匹配到直接返回,此处name值是中文字符,enName是英文字符。判断匹配中英文过滤
        if (parentData.data.label.indexOf(value) !== -1) {
          return true
        }
        // å¦åˆ™çš„话再往上一层做匹配
        parentData = parentData.parent
        index++
      }
      // æ²¡åŒ¹é…åˆ°è¿”回false
      return false
    },
    searchFilter() {
      this.$refs.tree.filter(this.search);
    },
@@ -764,15 +797,6 @@
          item.children && this.deleteStandard(item.children, label);
        }
      });
    },
    nodeOpen(data, node, el) {
      $($(el.$el).find(".node_i")[0]).attr(
        "class",
        "node_i el-icon-folder-opened"
      );
    },
    nodeClose(data, node, el) {
      $($(el.$el).find(".node_i")[0]).attr("class", "node_i el-icon-folder");
    },
    selectEnumByCategoryForFactory() {
      this.getConfigKey("sys_factory").then((response) => {
src/views/statisticalCharts/itemInspectionAnalysis/index.vue
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,535 @@
<template>
  <div class="app-container">
    <div v-if="!isShowDataCom">
      <el-form ref="entity" size="small" :inline="true">
        <el-form-item style="width: 16%;">
          <el-date-picker
            v-model="datePicker"
            end-placeholder="结束日期"
            format="yyyy-MM-dd"
            placeholder="选择日期"
            range-separator="至"
            size="small"
            start-placeholder="开始日期"
            style="width: 100%;"
            type="daterange"
            value-format="yyyy-MM-dd">
          </el-date-picker>
        </el-form-item>
        <el-form-item label="样品名称" prop="sampleName">
          <el-input v-model="sampleName" clearable placeholder="请输入样品名称" size="small"></el-input>
        </el-form-item>
        <el-form-item label="型号" prop="modelName">
          <el-input v-model="modelName" clearable placeholder="请输入型号" size="small"></el-input>
        </el-form-item>
        <el-form-item label="供应商名称" prop="supplierName">
          <el-input v-model="supplierName" clearable placeholder="请输入供应商名称" size="small"></el-input>
        </el-form-item>
        <el-form-item label="检验项名称" prop="supplierName">
          <el-select v-model="itemNames" :loading="selectLoading" clearable multiple placeholder="请选择"
                     size="small" style="width: 90%;" @focus="getItemList">
            <el-option
              v-for="item in itemNamesList"
              :key="item.value"
              :label="item.label"
              :value="item.value">
            </el-option>
          </el-select>
        </el-form-item>
        <el-form-item>
          <el-button size="small" type="primary" @click="changeData">查询</el-button>
        </el-form-item>
      </el-form>
    </div>
    <div v-if="!isShowDataCom" style="overflow-y: auto;height: calc(100% - 70px);overflow-x: hidden">
      <el-row>
        <el-col :span="24">
          <div class="inspection-card">
            <div style="display: flex;align-items: center;margin-bottom: 10px;justify-content: space-between;">
              <div>原材料项检分析列表</div>
              <el-button size="small" type="primary" @click="openShowData">查看数据分析</el-button>
            </div>
            <lims-table :tableData="editTableData" :column="editColumn"
                        height="400" key="tableData" :isSelection="true"
                        :handleSelectionChange="handleSelectionChange"
                        :tableLoading="editLoading"></lims-table>
          </div>
        </el-col>
      </el-row>
      <el-row>
        <el-col :span="6" style="padding-top: 14px">
          <div style="display: flex;margin-left: 10px;align-items: center">
            <span style="width: 100px">分组类型:</span>
            <el-select v-model="groupType" clearable placeholder="请选择"
                       size="small"
                       style="width: 90%;" @change="getBarInfo">
              <el-option
                v-for="item in groupTypeList"
                :key="item.value"
                :label="item.label"
                :value="item.value">
              </el-option>
            </el-select>
          </div>
        </el-col>
      </el-row>
      <el-row>
        <el-col :span="24">
          <div class="inspection-card">
            <div class="title">检验项数据对比</div>
            <Echarts ref="chart"
                     :chartStyle="chartStyle"
                     :dataset="dataset"
                     :grid="grid"
                     :options="echartsOptions"
                     :series="echartsSeries"
                     :tooltip="tooltip"
                     :xAxis="xAxis"
                     :yAxis="yAxis"
                     style="height: 40vh;"></Echarts>
          </div>
        </el-col>
      </el-row>
      <el-row>
        <el-col :span="24">
          <div class="inspection-card">
            <div class="title">原材料项检合格率</div>
            <Echarts ref="chart"
                     :chartStyle="chartStyle"
                     :dataset="dataset1"
                     :grid="grid"
                     :options="echartsOptions1"
                     :series="echartsSeries1"
                     :tooltip="tooltip"
                     :xAxis="xAxis"
                     :yAxis="yAxis1"
                     style="height: 40vh;"></Echarts>
          </div>
        </el-col>
      </el-row>
    </div>
    <el-dialog :visible.sync="dataDialogVisible" title="数据查看" width="80%">
      <div v-if="dataDialogVisible" style="height: 70vh;overflow-y: auto;">
        <lims-table :tableData="tableData" :column="column"
                    @pagination="pagination" key="tableData"
                    :page="page" :tableLoading="tableLoading"></lims-table>
      </div>
    </el-dialog>
    <DataComparison v-if="isShowDataCom" :comparisonData="comparisonData"
                    :selectRow="selectRow" @goBack="goBack"></DataComparison>
  </div>
</template>
<script>
import Echarts from "@/components/echarts/echarts.vue";
import DataComparison from '@/components/echarts/DataComparison.vue'
import limsTable from "@/components/Table/lims-table.vue";
import {
  getRawItemNames,
  getRawProductAnalysis,
  getRawProductAnalysisAllList,
  getRawProductAnalysisRawPass, getRawSupplierCompare
} from "@/api/statisticalCharts/dataAnalysis";
import {selectSampleAndProductByOrderId} from "@/api/business/rawMaterialOrder";
export default {
  name: "ItemInspectionAnalysis",
  // import å¼•入的组件需要注入到对象中才能使用
  components: {limsTable, Echarts, DataComparison},
  data() {
    // è¿™é‡Œå­˜æ”¾æ•°æ®
    return {
      selectChangeRows: [], // é€‰ä¸­çš„æ•°æ®
      groupTypeList: [
        {label: '样品', value: '0'},
        {label: '同一厂家, åŒä¸€åž‹å·, ä¸åŒæ‰¹æ¬¡', value: '1'},
        {label: '同一型号, ä¸åŒåނ家', value: '2'},
      ],
      itemNames: [], // æ£€éªŒé¡¹åç§°
      itemNamesList: [],
      selectLoading: false,
      datePicker: [], // æ—¶é—´
      groupType: '', // åˆ†ç»„
      beginDate: '',
      endDate: '',
      sampleName: '', // æ ·å“åç§°
      modelName: '', // åž‹å·
      supplierName: '', // ä¾›åº”商名称
      grid: {
        left: '3%',
        right: '4%',
        bottom: '3%',
        containLabel: true
      },
      echartsOptions: {},
      echartsOptions1: {},
      dataset: {
        dimensions: [],
        source: [],
      },
      dataset1: {
        dimensions: [],
        source: [],
      },
      xAxis: [{ type: 'category' }],
      yAxis: [{}],
      yAxis1: [{
        axisLabel: {
          formatter: '{value} %'
        }
      }],
      echartsSeries: [],
      echartsSeries1: [],
      tooltip: {},
      chartStyle: {
        width: '100%',
        height: '96%' // è®¾ç½®å›¾è¡¨å®¹å™¨çš„高度
      },
      editColumn: [
        {
          label: '批号',
          minWidth: '120px',
          prop: 'updateBatchNo'
        }, {
          label: '委托编号',
          minWidth: '120px',
          prop: 'entrustCode'
        }, {
          label: '零件号',
          minWidth: '120px',
          prop: 'partNo'
        }, {
          label: '零件描述',
          minWidth: '120px',
          prop: 'partDesc'
        }, {
          label: '供应商名称',
          minWidth: '120px',
          prop: 'supplierName',
        }, {
          dataType: 'tag',
          label: '检验状态',
          prop: 'inspectStatus',
          minWidth: '120px',
          formatData: (params) => {
            if (params == 0) {
              return '检验中'
            } else if (params == 1) {
              return '合格'
            } else if (params == 2) {
              return '不合格'
            } else if (params == 3) {
              return '未下单'
            } else if (params == 4) {
              return '让步放行'
            }
          },
          formatType: (params) => {
            if (params == 1 || params == 4) {
              return 'success'
            } else if (params == 3) {
              return 'warning'
            } else if (params == 0 || params == 2) {
              return 'danger'
            }
          }
        }, {
          label: '样品名称',
          minWidth: '300px',
          prop: 'sampleName'
        }, {
          label: '样品型号',
          minWidth: '300px',
          prop: 'sampleModel'
        },{
          label: '下发时间',
          minWidth: '120px',
          prop: 'sendTime'
        },{
          label: '抵达的采购数量',
          minWidth: '130px',
          prop: 'qtyArrived'
        },{
          label: '单位',
          minWidth: '120px',
          prop: 'buyUnitMeas'
        },
        {
          dataType: 'action',
          width: '80px',
          label: '操作',
          fixed: 'right',
          operation: [
            {
              name: '数据查看',
              type: 'text',
              clickFun: (row) => {
                this.handleDataLook(row);
              },
            },
          ]
        }
      ],
      editTableData: [],
      editLoading: false,
      dataDialogVisible: false,
      tableData: [],
      tableLoading: false,
      column: [
        {label: '样品编号', prop: 'sampleCode'},
        {label: '样品名称', prop: 'sample'},
        {label: '检验项分类', prop: 'inspectionItemClass'},
        {label: '检验项', prop: 'inspectionItem'},
        {label: '检验子项', prop: 'inspectionItemSubclass'},
        {label: '单位', prop: 'unit'},
        {label: '样品型号', prop: 'model'},
        {label: '条件', prop: 'radius'},
        {label: '电缆标识', prop: 'cableTag'},
        {label: '试验要求', prop: 'tell'},
        {label: '检验结果', prop: 'lastValue'},
        {
          dataType: 'tag',
          label: '结果判定',
          prop: 'insResult',
          formatData: (params) => {
            if (params == 1) {
              return '合格'
            } else if (params == 0) {
              return '不合格'
            } else if (params == 3) {
              return '不判定'
            } else {
              return null
            }
          },
          formatType: (params) => {
            if (params == 1) {
              return 'success'
            } else if (params == 0) {
              return 'danger'
            } else if (params == 3) {
              return ''
            }  else {
              return null
            }
          }
        }
      ],
      page: {
        total:0,
        size:10,
        current:1
      },
      currentRow: {},
      isShowDataCom: false,
      comparisonData: {},
      selectRow: {},
    }
  },
  mounted() {
    // this.getBar()
  },
  // æ–¹æ³•集合
  methods: {
    getBarInfo (val) {
      if (val === '1') {
        if (!this.modelName || !this.supplierName) {
          this.$message.warning('型号或供应商不能为空')
          this.groupType = ''
          return
        }
      } else if (val === '2') {
        if (!this.modelName) {
          this.$message.warning('型号不能为空')
          this.groupType = ''
          return
        }
        if (this.supplierName) {
          this.$message.warning('不可选供应商名称')
          this.groupType = ''
          return
        }
      }
      this.getBar()
      this.getBar1()
    },
    // èŽ·å–åˆæ ¼çŽ‡å›¾è¡¨æ•°æ®
    getBar() {
      this.echartsSeries = []
      const params = {
        beginDate: this.beginDate,
        endDate: this.endDate,
        sampleName: this.sampleName,
        modelName: this.modelName,
        supplierName: this.supplierName,
        itemNames: this.itemNames,
        groupType: this.groupType,
      }
      getRawProductAnalysis(params).then((res) => {
        if (res.data === null) {
          this.$message.warning('暂无数据')
          return
        }
        for (let i = 0; i < res.data.itemNames.length; i++) {
          this.echartsSeries.push({type: 'line', label: {
              show: true,
              position: 'top'
            },})
        }
        this.dataset.dimensions = this.HaveJson(res.data.itemNames)
        this.dataset.dimensions.unshift('product')
        this.dataset.source = this.HaveJson(res.data.productList)
      })
    },
    getBar1() {
      this.echartsSeries1 = []
      const params = {
        beginDate: this.beginDate,
        endDate: this.endDate,
        sampleName: this.sampleName,
        modelName: this.modelName,
        supplierName: this.supplierName,
        itemNames: this.itemNames,
        groupType: this.groupType,
      }
      getRawProductAnalysisRawPass(params).then((res) => {
        if (res.data === null) {
          this.$message.warning('暂无数据')
          return
        }
        for (let i = 0; i < res.data.itemNames.length; i++) {
          this.echartsSeries1.push({type: 'line',tooltip: {
              valueFormatter: function (value) {
                return value + '%';
              }
            },label: {
              show: true,
              position: 'top',
              formatter: (params) => params.value[params.dimensionNames[params.encode.y[0]]] + '%'
            },})
        }
        this.dataset1.dimensions = this.HaveJson(res.data.itemNames)
        this.dataset1.dimensions.unshift('product')
        this.dataset1.source = this.HaveJson(res.data.productList)
      })
    },
    // æ•°æ®æŸ¥çœ‹
    handleDataLook(row) {
      this.dataDialogVisible = true;
      this.currentRow = row
      this.refreshTable(row)
    },
    // æŸ¥è¯¢å›žè°ƒ
    refreshTable(row) {
      selectSampleAndProductByOrderId({id: row.id}).then(res => {
        this.tableLoading = false
        if (res.code === 200) {
          this.tableData = res.data.records
          this.page.total = res.data.total
        }
      }).catch(err => {
        this.tableLoading = false
      })
    },
    pagination (page) {
      this.page.size = page.limit
      this.refreshTable(this.currentRow)
    },
    changeData () {
      if (this.datePicker !== null && this.datePicker.length > 0) {
        this.beginDate = this.datePicker[0] + ' 00:00:00'
        this.endDate = this.datePicker[1] + ' 23:59:59'
      } else {
        this.beginDate = ''
        this.endDate = ''
      }
      this.getBar()
      this.getBar1()
      this.getTableData()
    },
    getTableData () {
      this.editLoading = true
      const params = {
        beginDate: this.beginDate,
        endDate: this.endDate,
        sampleName: this.sampleName,
        modelName: this.modelName,
        supplierName: this.supplierName,
        itemNames: this.itemNames,
      }
      getRawProductAnalysisAllList(params).then(res => {
        this.editLoading = false
        this.editTableData = res.data
      }).catch(() => {
        this.editLoading = false
      })
    },
    // èŽ·å–æ£€éªŒé¡¹ä¸‹æ‹‰æ¡†
    getItemList () {
      this.selectLoading = true
      this.itemNamesList = []
      const params = {
        beginDate: this.beginDate,
        endDate: this.endDate,
        sampleName: this.sampleName,
        modelName: this.modelName,
        supplierName: this.supplierName,
      }
      getRawItemNames(params).then((res) => {
        this.selectLoading = false
        res.data.map(val => {
          const obj = Object.assign({
            label: val,
            value: val,
          })
          this.itemNamesList.push(obj)
        })
      }).catch(() => {
        this.selectLoading = false
      })
    },
    goBack () {
      this.isShowDataCom = false
    },
    openShowData () {
      if (this.selectChangeRows.length !== 5) {
        this.$message.warning('请选择5条数据')
        return
      }
      if (this.itemNames.length !== 1) {
        this.$message.warning('只能选择1项检验项名称')
        return
      }
      let ids = []
      let itemNames = []
      this.selectChangeRows.forEach(item => {
        ids.push(item.enterOrderId)
      })
      this.itemNames.forEach(item => {
        itemNames.push(item)
      })
      const params = {
        orderIds: ids,
        itemNames: itemNames
      }
      getRawSupplierCompare(params).then(res => {
        this.comparisonData = res.data
        this.selectRow = params
        this.isShowDataCom = true
      })
    },
    handleSelectionChange (val) {
      this.selectChangeRows = val
    },
  },
}
</script>
<style scoped>
.inspection-card{
  width: 100%;
  margin-top: 10px;
}
</style>
src/views/statisticalCharts/qualificationRateStatistics/index.vue
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,448 @@
<template>
  <div class="app-container">
    <el-row>
      <el-col :span="4">
        <el-radio-group v-model="dateType" @change="changeDate">
          <el-radio-button label="1">本周</el-radio-button>
          <el-radio-button label="2">本月</el-radio-button>
          <el-radio-button label="3">今年</el-radio-button>
        </el-radio-group>
      </el-col>
      <el-col :span="20">
        <el-form ref="entity" size="small" :inline="true">
          <el-form-item style="width: 20%;">
            <el-date-picker
              v-model="datePicker"
              end-placeholder="结束日期"
              format="yyyy-MM-dd"
              placeholder="选择日期"
              range-separator="至"
              size="small"
              start-placeholder="开始日期"
              type="daterange"
              style="width: 100%;"
              value-format="yyyy-MM-dd"
              @change="changeDatePicker">
            </el-date-picker>
          </el-form-item>
          <el-form-item label="样品名称" prop="sampleName">
            <el-input v-model="sampleName" clearable placeholder="请输入样品名称" size="small" @change="changeDate"></el-input>
          </el-form-item>
          <el-form-item label="型号" prop="modelName">
            <el-input v-model="modelName" clearable placeholder="请输入型号" size="small" @change="changeDate"></el-input>
          </el-form-item>
          <el-form-item label="供应商名称" prop="supplierName">
            <el-input v-model="supplierName" clearable placeholder="请输入供应商名称" size="small" @change="changeDate"></el-input>
          </el-form-item>
        </el-form>
      </el-col>
    </el-row>
    <el-row :gutter="20">
      <el-col :span="8">
        <div class="pie-card">
          <div class="title">原材料合格率</div>
          <span class="data">{{passRate}}</span>
          <Echarts ref="chart"
                   :legend="pieLegend"
                   :series="materialPieSeries"
                   :tooltip="pieTooltip"
                   style="height: 36vh;"></Echarts>
        </div>
      </el-col>
      <el-col :span="8">
        <div class="pie-card">
          <div class="title"><span style="color: #F56C6C">本月</span>检验类型数量</div>
          <Echarts ref="chart"
                   :chartStyle="chartStyle2"
                   :legend="pieLegend"
                   :series="materialPieSeries1"
                   :tooltip="pieTooltip"
                   style="height: 36vh;"></Echarts>
        </div>
      </el-col>
      <el-col :span="8">
        <div class="pie-card">
          <div class="title">原材料<span style="color: #F56C6C">本月</span>与<span style="color: #F56C6C">上月</span>合格率对比</div>
          <Echarts ref="chart"
                   :barColors="barColors2"
                   :chartStyle="chartStyle"
                   :grid="grid"
                   :legend="barLegend"
                   :series="barSeries"
                   :tooltip="tooltip"
                   :xAxis="xAxis1"
                   :yAxis="yAxis1"
                   style="height: 36vh;"></Echarts>
        </div>
      </el-col>
    </el-row>
    <el-row>
      <el-col :span="24">
        <div class="inspection-card">
          <div class="title">合格率</div>
          <Echarts ref="chart"
                   :barColors="barColors"
                   :grid="grid"
                   :legend="legend"
                   :lineColors="lineColors"
                   :options="echartsOptions"
                   :series="echartsSeries"
                   :tooltip="tooltip"
                   :xAxis="xAxis"
                   :yAxis="yAxis"
                   style="height: 40vh;"></Echarts>
        </div>
      </el-col>
    </el-row>
  </div>
</template>
<script>
import Echarts from "@/components/echarts/echarts.vue";
import {
  getOrderTypeCookie,
  getRawPassRateByBarChart,
  getRawPassRateByCake,
  getRawUpMonth
} from "@/api/statisticalCharts/dataAnalysis";
export default {
  name: "QualificationRateStatistics",
  // import å¼•入的组件需要注入到对象中才能使用
  components: {Echarts},
  data() {
    // è¿™é‡Œå­˜æ”¾æ•°æ®
    return {
      dateType: '1',
      datePicker: [],
      beginDate: '',
      endDate: '',
      sampleName: '',
      modelName: '',
      supplierName: '',
      echartsOptions: {
        title: {
          text: '示例图表',
          left: 'center'
        }
      },
      xAxis: [
        {
          type: 'category',
          data: [],
          axisPointer: {
            type: 'shadow'
          }
        }
      ],
      yAxis: [
        {
          type: 'value',
          name: '总数',
          min: 0,
        },
        {
          type: 'value',
          name: '合格率',
          min: 0,
          max: 100,
          axisLabel: {
            formatter: '{value} %'
          }
        }
      ],
      echartsSeries: [
        {
          name: '总数',
          type: 'bar',
          data: [],
          label: {
            show: true,
            position: 'top'
          },
        },
        {
          name: '合格率',
          type: 'line',
          smooth: true,
          tooltip: {
            valueFormatter: function (value) {
              return value + ' %';
            }
          },
          label: {
            show: true,
            position: 'top',
            formatter: function (value) {
              return value.value + ' %';
            },
            distance: 14
          },
          yAxisIndex: 1,
          data: []
        },
      ],
      grid: {
        left: '3%',
        right: '4%',
        bottom: '3%',
        containLabel: true
      },
      legend: {
        data: ['总数','合格率']
      },
      tooltip: {
        trigger: 'axis',
        axisPointer: {
          type: 'shadow'
        }
      },
      lineColors: ['#409EFF'],
      barColors: ['#E6A23C'],
      barColors2: ['#adde8b'],
      pieTooltip: {
        trigger: 'item'
      },
      pieLegend: {
        orient: 'vertical',
        right: 20,
        top: 'middle',
      },
      materialPieSeries: [
        {
          name: 'Access From',
          type: 'pie',
          radius: ['40%', '70%'],
          right: '22%',
          avoidLabelOverlap: false,
          itemStyle: {
            borderRadius: 5,
            borderColor: '#fff',
            borderWidth: 2
          },
          label: {
            alignTo: 'edge',
            formatter: '{name|{b}}\n{time|{c}}',
            edgeDistance: 10,
            lineHeight: 15,
            rich: {
              time: {
                fontSize: 10,
                color: '#999'
              }
            },
          },
          labelLine: {
            length: 20,
            length2: 40,
          },
          data: [
            { value: 0, name: '不合格数量' },
            { value: 0, name: '合格数量' },
          ]
        }
      ],
      materialPieSeries1: [
        {
          name: 'Access From',
          type: 'pie',
          radius: ['40%', '70%'],
          right: '22%',
          avoidLabelOverlap: false,
          itemStyle: {
            borderRadius: 5,
            borderColor: '#fff',
            borderWidth: 2
          },
          label: {
            alignTo: 'edge',
            formatter: '{name|{b}}\n{time|{c}}',
            edgeDistance: 10,
            lineHeight: 15,
            rich: {
              time: {
                fontSize: 10,
                color: '#999'
              }
            },
          },
          labelLine: {
            length: 20,
            length2: 50,
          },
          data: [
            { value: 0, name: '委托检验' },
            { value: 0, name: '进厂检验' },
            { value: 0, name: '季度检验' },
            { value: 0, name: '抽样' },
          ]
        }
      ],
      barLegend: {},
      chartStyle: {
        width: '90%',
        height: '100%',
      },
      chartStyle2: {
        width: '90%',
        height: '80%',
      },
      xAxis1: [
        {
          type: 'value',
          min: 0,
          max: 100,
          axisLabel: {
            formatter: '{value} %'
          }
        }
      ],
      yAxis1: [
        {
          type: 'category',
          data: []
        }
      ],
      barSeries: [
        {
          type: 'bar',
          data: [],
          tooltip: {
            valueFormatter: function (value) {
              return value + ' %';
            }
          },
          label: {
            show: true,
            formatter: (params) => Math.round(params.value * 100) / 100 + '%'
          }
        },
      ],
      tableData: [],
      passRate: '',
      sum: '',
    }
  },
  mounted() {
    this.getBar()
    this.getRawPass()
    this.getOrderType()
    this.getPassRateCom()
  },
  // æ–¹æ³•集合
  methods: {
    // èŽ·å–åˆæ ¼çŽ‡å›¾è¡¨æ•°æ®
    getBar() {
      const params = {
        dateType: this.dateType,
        beginDate: this.beginDate,
        endDate: this.endDate,
        sampleName: this.sampleName,
        modelName: this.modelName,
        supplierName: this.supplierName,
      }
      getRawPassRateByBarChart(params).then((res) => {
        let lineData = []
        let barData = []
        let xAxis = []
        res.data.forEach(item => {
          barData.push(item.sum)
          lineData.push(item.passRate)
          xAxis.push(item.searchTime)
        })
        this.echartsSeries[0].data = barData
        this.echartsSeries[1].data = lineData
        this.yAxis[0].max = Math.ceil(Math.max.apply(null, barData) / 50) * 50
        this.yAxis[0].interval = this.yAxis[0].max / 5
        this.xAxis[0].data = xAxis
      })
    },
    // èŽ·å–åŽŸææ–™åˆæ ¼çŽ‡å›¾è¡¨æ•°æ®
    getRawPass() {
      const params = {
        dateType: this.dateType,
        beginDate: this.beginDate,
        endDate: this.endDate,
        sampleName: this.sampleName,
        modelName: this.modelName,
        supplierName: this.supplierName,
      }
      getRawPassRateByCake(params).then((res) => {
        this.materialPieSeries[0].data[0].value = res.data.unQualified
        this.materialPieSeries[0].data[1].value = res.data.qualified
        this.passRate = res.data.passRate + '%'
      })
    },
    // èŽ·å–æœ¬æœˆæ£€éªŒç±»åž‹æ•°é‡
    getOrderType() {
      getOrderTypeCookie().then((res) => {
        if (res.code === 201) return
        this.materialPieSeries1[0].data[0].value = res.data.customer // å§”托
        this.materialPieSeries1[0].data[1].value = res.data.enter // è¿›åŽ‚
        this.materialPieSeries1[0].data[2].value = res.data.quarterly // å­£åº¦
        this.materialPieSeries1[0].data[3].value = res.data.spotCheck // æŠ½æ ·
      })
    },
    // æœ¬æœˆä¸Žä¸Šæœˆåˆæ ¼çŽ‡å¯¹æ¯”
    getPassRateCom() {
      getRawUpMonth().then((res) => {
        let month = []
        let barData = []
        res.data.forEach(item => {
          month.push(item.month)
          barData.push(item.passRate)
        })
        this.yAxis1[0].data = month
        this.barSeries[0].data = barData
      })
    },
    changeDate () {
      this.getBar()
      this.getRawPass()
      // this.getOrderType()
      // this.getPassRateCom()
    },
    changeDatePicker (val) {
      if (val) {
        this.beginDate = val[0] + ' 00:00:00'
        this.endDate = val[1] + ' 23:59:59'
      } else {
        this.beginDate = ''
        this.endDate = ''
      }
      this.getBar()
      this.getRawPass()
      // this.getOrderType()
      // this.getPassRateCom()
    },
  },
}
</script>
<style scoped>
.title {
  padding: 10px 0 0 20px;
}
.table {
  padding: 0 10px 10px;
}
.pie-card {
  width: 100%;
  background: #FFFFFF;
  margin-top: 10px;
  position: relative;
}
.data {
  position: absolute;
  font-size: 20px;
  transform: translate(-50%);
  left: 40%;
  top: 42%;
  z-index: 1;
}
.inspection-card{
  width: 100%;
  background: #FFFFFF;
  margin-top: 10px;
}
</style>
src/views/structural/capabilityAndLaboratory/capability/index.vue
@@ -33,9 +33,9 @@
                    v-model="itemParameterForm.inspectionItemSubclass" @keyup.enter.native="refreshTable()">
          </el-input>
        </el-form-item>
        <el-form-item label="检验对象" prop="sample">
        <el-form-item label="检验对象" prop="specimenName">
          <el-input size="small" placeholder="请输入" clearable
                    v-model="itemParameterForm.sample" @keyup.enter.native="refreshTable()">
                    v-model="itemParameterForm.specimenName" @keyup.enter.native="refreshTable()">
          </el-input>
        </el-form-item>
        <el-form-item>
@@ -123,6 +123,7 @@
import EditForm from "@/views/structural/capabilityAndLaboratory/capabilityComponents/EditForm.vue";
import testObjectEditForm from "@/views/structural/capabilityAndLaboratory/capabilityComponents/testObjectEditForm.vue";
import {getToken} from "@/utils/auth";
import { obtainItemParameterList } from '@/api/structural/laboratoryScope'
export default {
  components: {limsTable, EditForm, testObjectEditForm, BindPartDialog, BindSupplierDensityDialog},
@@ -187,17 +188,23 @@
          prop: 'laboratoryId',
          minWidth: '130',
          formatData: (params) => {
            if (params == 1) {
              return '装备电缆试验室'
            } else if (params == 5) {
              return '通信产品实验室'
            } else if (params == 6) {
              return '电力产品实验室'
            } else if (params == 8) {
              return '储能产品实验室'
            let index = this.laboratoryList.findIndex(item => item.value == params)
            if(index > -1) {
              return this.laboratoryList[index].label
            } else {
              return '射频线缆实验室'
              return null
            }
            // if (params == 1) {
            //   return '装备电缆试验室'
            // } else if (params == 5) {
            //   return '通信产品实验室'
            // } else if (params == 6) {
            //   return '电力产品实验室'
            // } else if (params == 8) {
            //   return '储能产品实验室'
            // } else {
            //   return '射频线缆实验室'
            // }
          },
          formatType: (params) => {
            if (params == 1) {
@@ -209,7 +216,7 @@
            } else if (params == 8) {
              return 'danger'
            } else {
              return ''
              return null
            }
          }
        },
@@ -289,7 +296,7 @@
      itemParameterForm: {
        inspectionItem: null,
        inspectionItemSubclass: null,
        sample: null
        specimenName: null
      },
      radio: 0,
      productLoad: false,
@@ -361,10 +368,12 @@
      currentSupplierDensityRow: {}, // é€‰æ‹©é›¶ä»¶ç»‘定本条数据的信息
      bindSupplierDensityDialog: false,
      bindPartDialog: false,
      type: null,  // é›¶ä»¶ç»‘定的类型--0:检验对象,1:产品维护
      type: null,  // é›¶ä»¶ç»‘定的类型--0:检验对象,1:产品维护,
      laboratoryList:[]
    }
  },
  created() {
    this.getItemParameterList()
    this.refreshTable()
  },
  computed: {
@@ -385,8 +394,8 @@
      this.$refs.upload.clearFiles()
      this.uploadDia = false
      this.uploading = false
      if (response.code === 201) {
        this.$message.error(response.message)
      if (response.code !== 200) {
        this.$message.error(response.msg)
        return
      }
      this.$message.success('上传成功')
@@ -636,6 +645,18 @@
    closeBindSupplierDensityDialog () {
      this.bindSupplierDensityDialog = false
    },
    getItemParameterList(){
      obtainItemParameterList().then(res => {
        let data = []
        res.data.forEach(a => {
          data.push({
            label: a.laboratoryName,
            value: a.id
          })
        })
        this.laboratoryList = data
      })
    }
  }
}
</script>
src/views/structural/premises/index.vue
@@ -22,8 +22,7 @@
      </div>
    </div>
    <div class="table">
      <lims-table :tableData="tableData" :column="column"
                  :height="'calc(100vh - 250px)'" @pagination="pagination"
      <lims-table :tableData="tableData" :column="column" :height="'calc(100vh - 250px)'" @pagination="pagination"
                  :page="page" :tableLoading="tableLoading"></lims-table>
    </div>
    <!--    æ–°å¢žå®žéªŒå®¤-->
@@ -102,7 +101,7 @@
  },
  computed: {
    action() {
      return this.javaApi
      return this.javaApi + '/deviceScope/uploadFile'
    }
  },
  data() {
src/views/system/dept/index.vue
@@ -2,21 +2,12 @@
  <div class="app-container">
    <el-form :model="queryParams" ref="queryForm" size="small" :inline="true" v-show="showSearch">
      <el-form-item label="部门名称" prop="deptName">
        <el-input
          v-model="queryParams.deptName"
          placeholder="请输入部门名称"
          clearable
          @keyup.enter.native="handleQuery"
        />
        <el-input v-model="queryParams.deptName" placeholder="请输入部门名称" clearable @keyup.enter.native="handleQuery" />
      </el-form-item>
      <el-form-item label="状态" prop="status">
        <el-select v-model="queryParams.status" placeholder="部门状态" clearable>
          <el-option
            v-for="dict in dict.type.sys_normal_disable"
            :key="dict.value"
            :label="dict.label"
            :value="dict.value"
          />
          <el-option v-for="dict in dict.type.sys_normal_disable" :key="dict.value" :label="dict.label"
            :value="dict.value" />
        </el-select>
      </el-form-item>
      <el-form-item>
@@ -27,35 +18,17 @@
    <el-row :gutter="10" class="mb8">
      <el-col :span="1.5">
        <el-button
          type="primary"
          plain
          icon="el-icon-plus"
          size="mini"
          @click="handleAdd"
          v-hasPermi="['system:dept:add']"
        >新增</el-button>
        <el-button type="primary" plain icon="el-icon-plus" size="mini" @click="handleAdd"
          v-hasPermi="['system:dept:add']">新增</el-button>
      </el-col>
      <el-col :span="1.5">
        <el-button
          type="info"
          plain
          icon="el-icon-sort"
          size="mini"
          @click="toggleExpandAll"
        >展开/折叠</el-button>
        <el-button type="info" plain icon="el-icon-sort" size="mini" @click="toggleExpandAll">展开/折叠</el-button>
      </el-col>
      <right-toolbar :showSearch.sync="showSearch" @queryTable="getList"></right-toolbar>
    </el-row>
    <el-table
      v-if="refreshTable"
      v-loading="loading"
      :data="deptList"
      row-key="deptId"
      :default-expand-all="isExpandAll"
      :tree-props="{children: 'children', hasChildren: 'hasChildren'}"
    >
    <el-table v-if="refreshTable" v-loading="loading" :data="deptList" row-key="deptId"
      :default-expand-all="isExpandAll" :tree-props="{ children: 'children', hasChildren: 'hasChildren' }">
      <el-table-column prop="deptName" label="部门名称" width="260"></el-table-column>
      <el-table-column prop="orderNum" label="排序" width="200"></el-table-column>
      <el-table-column prop="status" label="状态" width="100">
@@ -70,28 +43,12 @@
      </el-table-column>
      <el-table-column label="操作" align="center" class-name="small-padding fixed-width">
        <template slot-scope="scope">
          <el-button
            size="mini"
            type="text"
            icon="el-icon-edit"
            @click="handleUpdate(scope.row)"
            v-hasPermi="['system:dept:edit']"
          >修改</el-button>
          <el-button
            size="mini"
            type="text"
            icon="el-icon-plus"
            @click="handleAdd(scope.row)"
            v-hasPermi="['system:dept:add']"
          >新增</el-button>
          <el-button
            v-if="scope.row.parentId != 0"
            size="mini"
            type="text"
            icon="el-icon-delete"
            @click="handleDelete(scope.row)"
            v-hasPermi="['system:dept:remove']"
          >删除</el-button>
          <el-button size="mini" type="text" icon="el-icon-edit" @click="handleUpdate(scope.row)"
            v-hasPermi="['system:dept:edit']">修改</el-button>
          <el-button size="mini" type="text" icon="el-icon-plus" @click="handleAdd(scope.row)"
            v-hasPermi="['system:dept:add']">新增</el-button>
          <el-button v-if="scope.row.parentId != 0" size="mini" type="text" icon="el-icon-delete"
            @click="handleDelete(scope.row)" v-hasPermi="['system:dept:remove']">删除</el-button>
        </template>
      </el-table-column>
    </el-table>
@@ -102,7 +59,8 @@
        <el-row>
          <el-col :span="24" v-if="form.parentId !== 0">
            <el-form-item label="上级部门" prop="parentId">
              <treeselect v-model="form.parentId" :options="deptOptions" :normalizer="normalizer" placeholder="选择上级部门" />
              <treeselect v-model="form.parentId" :options="deptOptions" :normalizer="normalizer"
                placeholder="选择上级部门" />
            </el-form-item>
          </el-col>
        </el-row>
@@ -139,11 +97,9 @@
          <el-col :span="12">
            <el-form-item label="部门状态">
              <el-radio-group v-model="form.status">
                <el-radio
                  v-for="dict in dict.type.sys_normal_disable"
                  :key="dict.value"
                  :label="dict.value"
                >{{dict.label}}</el-radio>
                <el-radio v-for="dict in dict.type.sys_normal_disable" :key="dict.value" :label="dict.value">{{
                  dict.label
                }}</el-radio>
              </el-radio-group>
            </el-form-item>
          </el-col>
@@ -280,6 +236,7 @@
      this.title = "添加部门";
      listDept().then(response => {
        this.deptOptions = this.handleTree(response.data, "deptId");
        this.deptOptions = this.limitTreeDepth(this.deptOptions, 2)
      });
    },
    /** å±•å¼€/折叠操作 */
@@ -303,6 +260,7 @@
            const noResultsOptions = { deptId: this.form.parentId, deptName: this.form.parentName, children: [] };
            this.deptOptions.push(noResultsOptions);
          }
          this.deptOptions = this.limitTreeDepth(this.deptOptions, 2)
        });
      });
    },
@@ -334,6 +292,20 @@
        this.getList();
        this.$modal.msgSuccess("删除成功");
      }).catch(() => {});
    },
    // é€’归函数,用于限制树的深度
    limitTreeDepth(options, maxDepth, currentDepth = 1) {
      return options.map(option => {
        const newOption = { ...option };
        if (currentDepth < maxDepth && option.children) {
          // å¦‚果当前深度小于最大深度且存在子节点,则递归处理子节点
          newOption.children = this.limitTreeDepth(option.children, maxDepth, currentDepth + 1);
        } else {
          // å¦åˆ™ç§»é™¤å­èŠ‚ç‚¹
          delete newOption.children;
        }
        return newOption;
      });
    }
  }
};
src/views/system/dict/index.vue
@@ -84,15 +84,15 @@
          v-hasPermi="['system:dict:remove']"
        >删除</el-button>
      </el-col>
      <el-col :span="1.5">
        <el-button
          type="warning"
          plain
          icon="el-icon-download"
          size="mini"
          @click="handleExport"
          v-hasPermi="['system:dict:export']"
        >导出</el-button>
<!--      <el-col :span="1.5">-->
<!--        <el-button-->
<!--          type="warning"-->
<!--          plain-->
<!--          icon="el-icon-download"-->
<!--          size="mini"-->
<!--          @click="handleExport"-->
<!--          v-hasPermi="['system:dict:export']"-->
<!--        >导出</el-button>-->
      </el-col>
      <el-col :span="1.5">
        <el-button
src/views/system/role/index.vue
@@ -403,6 +403,8 @@
    handleCheckedTreeConnect(value, type) {
      if (type == 'menu') {
        this.form.menuCheckStrictly = value ? true : false;
        this.menuNodeAll = false
        this.$refs.menu.setCheckedNodes([]);
      } else if (type == 'dept') {
        this.form.deptCheckStrictly = value ? true : false;
      }
src/views/system/user/index.vue
@@ -8,8 +8,8 @@
            <div class="head-container addButton">
              <el-input v-model="deptName" placeholder="部门名称" clearable size="small" prefix-icon="el-icon-search"
                style="margin-bottom: 20px" />
              <el-button style="margin-left: 4px" type="primary" plain icon="el-icon-plus" size="mini" circle
                @click="addSchema"></el-button>
              <!-- <el-button style="margin-left: 4px" type="primary" plain icon="el-icon-plus" size="mini" circle
                @click="addSchema"></el-button> -->
            </div>
            <div class="head-container">
              <el-tree :data="deptOptions" :props="defaultProps" :expand-on-click-node="false"
@@ -149,7 +149,8 @@
          </el-col>
          <el-col :span="12">
            <el-form-item label="归属部门" prop="deptId">
              <treeselect v-model="form.deptId" :options="enabledDeptOptions" :show-count="true" placeholder="请选择归属部门" />
              <treeselect v-model="form.deptId" :options="enabledDeptOptions" :show-count="true"
                placeholder="请选择归属部门" />
            </el-form-item>
          </el-col>
        </el-row>