From 7eb190f13437b2e67788e9f4bdea725fdb165f01 Mon Sep 17 00:00:00 2001 From: zhuo <2089219845@qq.com> Date: 星期二, 20 五月 2025 10:41:01 +0800 Subject: [PATCH] 代码合并 --- src/components/Table/lims-table.vue | 3 src/views/CNAS/process/ensureResults/ensureResultsValidity/index.vue | 26 ++ src/views/CNAS/resourceDemand/device/index.vue | 24 ++ src/api/cnas/process/ensureResults/managementReview.js | 36 +++ src/views/CNAS/resourceDemand/device/component/management.vue | 20 + src/views/structural/capabilityAndLaboratory/capabilityComponents/EditForm.vue | 17 + src/api/cnas/process/reportResults.js | 1 src/layout/components/TagsView/index.vue | 6 src/views/CNAS/process/reportResults/index.vue | 45 +--- src/views/business/inspectionTask/inspection.vue | 13 + src/views/business/productOrder/index.vue | 28 + src/views/business/materialOrder/customsInspectionOrder.vue | 10 src/views/business/productOrder/components/addOrder.vue | 89 +++++-- src/views/CNAS/resourceDemand/device/component/record.vue | 10 src/views/CNAS/process/ensureResults/managementReview/index.vue | 284 +++++++++++++++++++++++++ src/components/Preview/filePreview.vue | 14 src/api/business/add.js | 8 17 files changed, 539 insertions(+), 95 deletions(-) diff --git a/src/api/business/add.js b/src/api/business/add.js index 68389df..053a9cf 100644 --- a/src/api/business/add.js +++ b/src/api/business/add.js @@ -16,6 +16,14 @@ data: query }) } +// 妫�楠岀被鍒负鎶芥鏃舵帀鎺ュ彛 +export function judgeNotSpotCheckOrder(query) { + return request({ + url: '/insOrder/judgeNotSpotCheckOrder', + method: 'post', + data: query + }) +} // 娣诲姞妫�楠屼笅鍗曟暟鎹� export function addInsOrder(query) { return request({ diff --git a/src/api/cnas/process/ensureResults/managementReview.js b/src/api/cnas/process/ensureResults/managementReview.js new file mode 100644 index 0000000..35449f4 --- /dev/null +++ b/src/api/cnas/process/ensureResults/managementReview.js @@ -0,0 +1,36 @@ +//璐ㄩ噺鐩戠潱绠$悊璇勫杈撳叆鏉愭枡鐩稿叧鎺ュ彛 +import request from '@/utils/request' + +// 鍒嗛〉鏌ヨ +export function pageManagementReview(query) { + return request({ + url: '/managementReview/pageManagementReview', + method: 'get', + params: query + }) +} +// 瀵煎嚭 +export function exportManagementReview(query) { + return request({ + url: '/managementReview/exportManagementReview', + method: 'get', + params: query, + responseType: 'blob' + }) +} +// 鍒犻櫎 +export function deleteManagementReview(query) { + return request({ + url: '/managementReview/deleteManagementReview', + method: 'delete', + params: query + }) +} +// 鏂板淇敼鎻愪氦 +export function saveOrUpdateManagementReview(query) { + return request({ + url: '/managementReview/saveOrUpdateManagementReview', + method: 'post', + data: query + }) +} diff --git a/src/api/cnas/process/reportResults.js b/src/api/cnas/process/reportResults.js index 0dbeb96..1b1011f 100644 --- a/src/api/cnas/process/reportResults.js +++ b/src/api/cnas/process/reportResults.js @@ -7,6 +7,7 @@ url: "/processReport/exportProcessReport", method: "get", params: data, + responseType: "blob", }); } diff --git a/src/components/Preview/filePreview.vue b/src/components/Preview/filePreview.vue index 7633c5e..aedb375 100644 --- a/src/components/Preview/filePreview.vue +++ b/src/components/Preview/filePreview.vue @@ -3,10 +3,11 @@ <div v-if="isImage"> <img :src="imgUrl" alt="Image Preview" /> </div> - <div v-if="isPdf"> - <object :data="fileUrl" type="application/pdf" width="100%" height="750px"> - <p>鎮ㄧ殑娴忚鍣ㄤ笉鏀寔 PDF 棰勮銆�<a :href="fileUrl" style="color: #3a7bfa;" target="_blank">涓嬭浇 PDF 鏂囦欢</a></p> - </object> + <div v-if="isPdf" style="height: 80vh;"> +<!-- <object :data="fileUrl" type="application/pdf" width="100%" height="750px">--> +<!-- <p>鎮ㄧ殑娴忚鍣ㄤ笉鏀寔 PDF 棰勮銆�<a :href="fileUrl" style="color: #3a7bfa;" target="_blank">涓嬭浇 PDF 鏂囦欢</a></p>--> +<!-- </object>--> + <onlyoffice ref="onlyoffice" :options="option" style="width: 100%;height: 100%;" /> </div> <div v-if="isDoc"> <p v-if="!isDocShow">鏂囨。鏃犳硶鐩存帴棰勮锛岃涓嬭浇鏌ョ湅銆�</p> @@ -58,8 +59,10 @@ import VueOfficeExcel from '@vue-office/excel' //寮曞叆鐩稿叧鏍峰紡 import '@vue-office/excel/lib/index.css' +import onlyoffice from "@/components/Onlyoffice/onlyoffice.vue"; export default { components: { + onlyoffice, VueOfficeDocx, VueOfficeExcel, }, @@ -72,6 +75,9 @@ type: Object, required: true }, + option: { + type: Object, + }, }, data() { return { diff --git a/src/components/Table/lims-table.vue b/src/components/Table/lims-table.vue index 2df0ddc..1f4e431 100644 --- a/src/components/Table/lims-table.vue +++ b/src/components/Table/lims-table.vue @@ -505,4 +505,7 @@ .lims-table .highlight-danger-row-border td:last-child { border-right: 4px solid #f56c6c; } +>>>.red-row td { + background: #FFCCCC !important; +} </style> diff --git a/src/layout/components/TagsView/index.vue b/src/layout/components/TagsView/index.vue index 73d03a4..3b014fb 100644 --- a/src/layout/components/TagsView/index.vue +++ b/src/layout/components/TagsView/index.vue @@ -168,7 +168,11 @@ closeSelectedTag(view) { this.$tab.closePage(view).then(({ visitedViews }) => { if (this.isActive(view)) { - this.toLastView(visitedViews, view) + if (view.fullPath.includes('/materialOrder/customsInspectionOrder') || view.fullPath.includes('/materialOrder/customsInspectionView')) { + this.$router.push('/business/materialOrder') + } else { + this.toLastView(visitedViews, view) + } } }) }, diff --git a/src/views/CNAS/process/ensureResults/ensureResultsValidity/index.vue b/src/views/CNAS/process/ensureResults/ensureResultsValidity/index.vue index efd399a..0ae1168 100644 --- a/src/views/CNAS/process/ensureResults/ensureResultsValidity/index.vue +++ b/src/views/CNAS/process/ensureResults/ensureResultsValidity/index.vue @@ -85,7 +85,7 @@ </el-dialog> <!--棰勮鎶ュ憡--> <el-dialog :visible.sync="lookDialogVisible" fullscreen title="鏌ョ湅闄勪欢" top="5vh" width="800px"> - <filePreview v-if="lookDialogVisible" :currentFile="{}" + <filePreview v-if="lookDialogVisible" :currentFile="{}" :option="option" :fileUrl="javaApi + '/word/' + currentInfo.finishReportUrl" style="height: 70vh;overflow-y: auto;" /> <div> 鎵瑰噯鐘舵�侊細 @@ -153,7 +153,7 @@ <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 + :limit="1" :on-change="beforeUpload1" :on-error="onError1" :on-success="onSuccess1" accept='.doc,.docx,application/pdf,' drag name="file"> <i class="el-icon-upload"></i> <div class="el-upload__text">灏嗘枃浠舵嫋鍒版澶勶紝鎴�<em>鐐瑰嚮涓婁紶</em></div> @@ -569,7 +569,8 @@ ratifyRemark: '', downloadDialog: false, download: {}, - planYear: '' + planYear: '', + option: {} }; }, mounted() { @@ -802,6 +803,23 @@ if (row.finishReportUrl) { this.currentInfo = row this.ratifyStatus = row.ratifyStatus + const userName = this.nickName + const isPdf = /\.pdf$/i.test(row.finishReportUrl) + if (isPdf) { + this.option = { + url: this.javaApi + "/word/" + row.finishReportUrl, + isEdit: false, + fileType: 'pdf', + title: '鎶ュ憡', + lang: 'zh-CN', + isPrint: false, + user_id: 1, + user_name: userName, + editUrl: this.javaApi + "/insReport/onlyOffice/save?fileName=" + row.finishReportUrl + } + } else { + this.option = {} + } this.lookDialogVisible = true } else { this.uploadDia1 = true @@ -935,7 +953,7 @@ }, // 鐢ㄤ簬涓婁紶鏂囦欢鐨勪俊鎭� computed: { - ...mapGetters(["userId"]), + ...mapGetters(["userId", "nickName"]), action() { return this.javaApi + '/qualityMonitor/importQualityMonitor' }, diff --git a/src/views/CNAS/process/ensureResults/managementReview/index.vue b/src/views/CNAS/process/ensureResults/managementReview/index.vue new file mode 100644 index 0000000..9e7a2a9 --- /dev/null +++ b/src/views/CNAS/process/ensureResults/managementReview/index.vue @@ -0,0 +1,284 @@ +<template> + <div class="capacity-scope"> + <div style="display: flex;justify-content: space-between"> + <div style="display: flex;"> + <div style="margin-bottom: 18px;margin-right: 10px;display: flex;align-items: center;line-height: 32px;"> + <span style="width: 88px;font-size: 14px;font-weight: 700;color: #606266;">鏂囦欢鍚嶇О</span> + <el-input v-model="queryParams.fileName" clearable placeholder="璇疯緭鍏�" size="small" + @keyup.enter.native="refreshTable()"></el-input> + </div> + <div style="line-height: 30px;"> + <el-button type="primary" size="mini" @click="refreshTable">鏌ヨ</el-button> + <el-button size="mini" @click="refresh">閲嶇疆</el-button> + </div> + </div> + <div style="line-height: 30px;"> + <el-button :loading="outLoading" size="small" type="primary" style="margin-right: 10px" @click="openForm('add')">鏂板</el-button> + </div> + </div> + <div class="table"> + <lims-table :tableData="tableData" :column="column" :tableLoading="tableLoading" :height="'calc(100vh - 270px)'" + :page="page" @pagination="pagination"></lims-table> + </div> + <el-dialog :visible.sync="addDialogVisible" title="璇勪环" width="900px" @close="closeDia"> + <el-form ref="form" :model="form" label-position="right" label-width="120px" :rules="formRules"> + <el-row> + <el-col :span="12"> + <el-form-item label="鏂囦欢鍚嶇О:" prop="fileName"> + <el-input v-model="form.fileName" placeholder="璇疯緭鍏�" size="small"></el-input> + </el-form-item> + </el-col> + </el-row> + <el-row> + <el-col :span="24"> + <el-form-item label="璁″垝鍐呭:" prop="implementationContent"> + <el-input v-model="form.implementationContent" placeholder="璇疯緭鍏�" + size="small" + :rows="6" + type="textarea"></el-input> + </el-form-item> + </el-col> + </el-row> + <el-row> + <el-col :span="24"> + <el-form-item label="鍔ㄦ�佸唴瀹�:" prop="dynamicContent"> + <el-input v-model="form.dynamicContent" placeholder="璇疯緭鍏�" + size="small" + :rows="6" + type="textarea"></el-input> + </el-form-item> + </el-col> + </el-row> + <el-row> + <el-col :span="12"> + <el-form-item label="鐩戠潱浜�:" prop="supervisor"> + <el-select v-model="form.supervisor" + clearable filterable + placeholder="璇烽�夋嫨" size="small" style="width: 100%;"> + <el-option v-for="item in responsibleOptions" :key="item.name" :label="item.name" :value="item.name"> + </el-option> + </el-select> + </el-form-item> + </el-col> + <el-col :span="12"> + <el-form-item label="璐ㄩ噺璇勫鏃ユ湡:" prop="superviseDate"> + <el-date-picker v-model="form.superviseDate" format="yyyy-MM-dd" + placeholder="閫夋嫨鏃ユ湡" size="small" value-format="yyyy-MM-dd" + type="date" style="width: 100%"></el-date-picker> + </el-form-item> + </el-col> + </el-row> + </el-form> + <span slot="footer" class="dialog-footer"> + <el-button @click="closeDia">鍙� 娑�</el-button> + <el-button :loading="addLoading" type="primary" @click="handleAdd">纭� 瀹�</el-button> + </span> + </el-dialog> + </div> +</template> + +<script> +import limsTable from "@/components/Table/lims-table.vue"; +import filePreview from "@/components/Preview/filePreview.vue"; +import { + exportProcessEvaluate, + doProcessEvaluate, + delProcessEvaluate, + pageProcessEvaluate, +} from '@/api/cnas/process/uncertainty.js' +import { mapGetters } from "vuex"; +import { + deleteManagementReview, + exportManagementReview, + pageManagementReview, saveOrUpdateManagementReview +} from "@/api/cnas/process/ensureResults/managementReview"; +import {selectUserCondition} from "@/api/cnas/resourceDemand/facilitiesEnvironment/facilitiesAndEnvironment"; +export default { + name: 'Uncertainty', + components: { + limsTable, + filePreview + }, + data() { + return { + addPower: false, + outPower: false, + outLoading: false, + addDialogVisible: false, + operationType: '', + addInfo: {}, + addLoading: false, + queryParams: {}, + tableData: [], + column: [ + { label: "鏂囦欢鍚嶇О", prop: "fileName" }, + { label: "鐩戠潱浜�", prop: "supervisor" }, + { label: "璐ㄩ噺璇勫鏃ユ湡", prop: "superviseDate" }, + { + dataType: "action", + label: "鎿嶄綔", + operation: [ + { + name: "缂栬緫", + type: "text", + clickFun: (row) => { + this.openForm('edit', row); + }, + }, + { + name: "鍒犻櫎", + type: "text", + clickFun: (row) => { + this.handleDelete(row); + }, + }, + { + name: "瀵煎嚭", + type: "text", + clickFun: (row) => { + this.handleDown0(row); + }, + }, + ], + }, + ], + page: { + total: 0, + size: 10, + current: 0, + }, + tableLoading: false, + form: { + fileName: '', + implementationContent: '', + dynamicContent: '', + supervisor: '', + superviseDate: '', + }, + formRules: { + fileName: [{required: true, message: '璇峰~鍐欐枃浠跺悕绉�',trigger: 'blur'}], + implementationContent: [{required: true, message: '璇峰~鍐欒鍒掑唴瀹�',trigger: 'blur'}], + dynamicContent: [{required: true, message: '璇峰~鍔ㄦ�佸唴瀹�',trigger: 'blur'}], + supervisor: [{required: true, message: '璇烽�夋嫨鐩戠潱浜�',trigger: 'change'}], + superviseDate: [{required: true, message: '璇烽�夋嫨鏃ユ湡',trigger: 'change'}], + }, + responsibleOptions: [], + } + }, + // 鐢ㄤ簬涓婁紶鏂囦欢鐨勪俊鎭� + computed: { + ...mapGetters(["userId"]), + }, + mounted() { + this.getList() + }, + methods: { + getList() { + this.tableLoading = true; + let param = { ...this.queryParams, ...this.page }; + delete param.total; + pageManagementReview({ ...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.queryParams = {}; + this.page.current = 1; + this.getList(); + }, + refreshTable() { + this.page.current = 1; + this.getList(); + }, + handleDown0(row) { + exportManagementReview({managementReviewId: row.managementReviewId}).then(res => { + const blob = new Blob([res], { type: 'application/msword' }); + this.$download.saveAs(blob, row.fileName + '.docx'); + }) + }, + // 鎵撳紑鏂板缂栬緫寮规 + openForm (type, row) { + this.addDialogVisible = true; + this.$nextTick(() => { + this.form = {} + this.$refs['form'].resetFields(); + if (type === 'edit') { + this.form = {...row} + } + this.operationType = type; + this.getUserList() + }) + }, + // 鎻愪氦琛ㄥ崟 + handleAdd() { + this.addLoading = true; + saveOrUpdateManagementReview(this.form).then((res) => { + this.addLoading = false; + this.$message.success('璇勪环鎴愬姛'); + this.closeDia(); + this.refreshTable() + }) + }, + closeDia() { + this.$refs['form'].resetFields(); + this.addDialogVisible = false; + }, + handleDelete(row) { + this.$confirm("鏄惁鍒犻櫎璇ユ潯鏁版嵁?", "鎻愮ず", { + confirmButtonText: "纭畾", + cancelButtonText: "鍙栨秷", + type: "warning", + }).then(() => { + deleteManagementReview({ managementReviewId: row.managementReviewId }).then((res) => { + this.$message.success("鍒犻櫎鎴愬姛"); + this.refresh(); + }); + }).catch(() => { }); + }, + getUserList(){ + selectUserCondition({type: 2}).then(res => { + if (res.code == 200) { + this.responsibleOptions = res.data + } + }) + }, + } +} +</script> + +<style scoped> +.search { + height: 46px; + display: flex; + justify-content: space-between; +} + +.search_thing { + width: 350px; + display: flex; + align-items: center; +} + +.search_label { + width: 80px; + font-size: 14px; + text-align: right; +} + +.search_input { + width: calc(100% - 80px); +} +</style> diff --git a/src/views/CNAS/process/reportResults/index.vue b/src/views/CNAS/process/reportResults/index.vue index 81566bd..88b1c7c 100644 --- a/src/views/CNAS/process/reportResults/index.vue +++ b/src/views/CNAS/process/reportResults/index.vue @@ -19,8 +19,7 @@ </div> <div class="table"> <lims-table :tableData="tableData" :column="column" :tableLoading="tableLoading" :height="'calc(100vh - 270px)'" - :page="page" @pagination="pagination" :isSelection="true" - :handleSelectionChange="handleSelectionChange"></lims-table> + :page="page" @pagination="pagination"></lims-table> </div> <el-dialog :title="title" :visible.sync="addDialogVisible" width="400px" top="6vh"> <el-row> @@ -83,12 +82,8 @@ <el-col :span="24" style="margin-bottom: 16px;"> <div class="search_thing"> <div class="search_label">绛炬敹浜猴細</div> - <div class="search_input"> - <el-select v-model="addInfo.signatory" placeholder="璇烽�夋嫨" size="small" style="width: 100%;" multiple> - <el-option v-for="item in personList" :key="item.value" :label="item.label" :value="item.value"> - </el-option> - </el-select> - </div> + <div class="search_input"><el-input size="small" placeholder="璇疯緭鍏�" clearable + v-model="addInfo.signatory"></el-input></div> </div> </el-col> <el-col :span="24" style="margin-bottom: 16px;"> @@ -132,11 +127,8 @@ personList: [], title: '鏂板', addDialogVisible: false, - addInfo: { - signatory: [] - }, + addInfo: {}, addLoading: false, - mutilSelect: [], queryParams: { insReportCode: '' }, @@ -152,7 +144,7 @@ { label: "鍙戦�佹柟寮�", prop: "method" }, { label: "鍙戦�佹棩鏈�", prop: "sendTime" }, { label: "鍙戦�佷汉", prop: "sendUserName" }, - { label: "绛炬敹浜�", prop: "signatoryName" }, + { label: "绛炬敹浜�", prop: "signatory" }, { label: "澶囨敞", prop: "remark" }, { dataType: "action", @@ -191,21 +183,16 @@ }, methods: { handleDown() { - if (this.mutilSelect.length == 0) { - this.$message.warning('璇烽�夋嫨瑕佸鍑虹殑鏁版嵁') - return - } this.outLoading = true - exportProcessReport({ ids: this.mutilSelect.map(m => m.id) }).then(res => { + exportProcessReport(this.queryParams).then(res => { this.outLoading = false - this.$download.saveAs(res.data, "鎶ュ憡缁撴灉"); + const blob = new Blob([res], { type: 'application/msword' }); + this.$download.saveAs(blob, '鎶ュ憡缁撴灉' + '.docx'); }) }, openAdd() { this.title = '鏂板' - this.addInfo = { - signatory: [] - } + this.addInfo = {} this.addDialogVisible = true; }, getList() { @@ -238,9 +225,6 @@ this.page.current = 1; this.getList(); }, - handleSelectionChange(val) { - this.mutilSelect = val - }, getAuthorizedPerson() { selectUserCondition().then(res => { let data = [] @@ -258,13 +242,10 @@ delete this.addInfo.createTime delete this.addInfo.createUser delete this.addInfo.updateTime - delete this.addInfo.signatoryUrl delete this.addInfo.updateUserer delete this.addInfo.sendUserName - let addInfo = this.HaveJson(this.addInfo) - addInfo.signatory = addInfo.signatory.join(',') if (this.title == '鏂板') { - addProcessReport(addInfo).then(res => { + addProcessReport(this.addInfo).then(res => { this.addLoading = false this.addDialogVisible = false this.$message({ @@ -274,7 +255,7 @@ this.refreshTable() }).catch(err => { }) } else { - doProcessReport(addInfo).then(res => { + doProcessReport(this.addInfo).then(res => { this.addLoading = false this.addDialogVisible = false this.$message({ @@ -289,11 +270,7 @@ this.title = '淇敼' this.addInfo = row console.log(this.addInfo) - this.addInfo.signatory = this.addInfo.signatory ? this.addInfo.signatory.split(',').map(m => Number(m)) : [] this.addDialogVisible = true; - }, - handleChangeTask(list) { - this.mutilSelect = list }, handleDelete(row) { this.$confirm("鏄惁鍒犻櫎璇ユ潯鏁版嵁?", "鎻愮ず", { diff --git a/src/views/CNAS/resourceDemand/device/component/management.vue b/src/views/CNAS/resourceDemand/device/component/management.vue index 8d74156..9224055 100644 --- a/src/views/CNAS/resourceDemand/device/component/management.vue +++ b/src/views/CNAS/resourceDemand/device/component/management.vue @@ -16,9 +16,9 @@ @keyup.enter.native="refreshTable()"> </el-input> </el-form-item> - <el-form-item label="瑙勬牸鍨嬪彿" prop="specificationModel"> + <el-form-item label="绠$悊缂栧彿" prop="managementNumber"> <el-input size="small" placeholder="璇疯緭鍏�" clearable - v-model="queryParams.specificationModel" @keyup.enter.native="refreshTable()"></el-input> + v-model="queryParams.managementNumber" @keyup.enter.native="refreshTable()"></el-input> </el-form-item> <el-form-item> <el-button type="primary" size="mini" @click="refreshTable">鏌ヨ</el-button> @@ -33,7 +33,7 @@ </div> <div class="table" v-show="!showData"> <lims-table :tableData="tableData" :column="column" :tableLoading="tableLoading" :height="'calc(100vh - 300px)'" - :page="page" @pagination="pagination"></lims-table> + :page="page" @pagination="pagination" :row-class-name="tableRowClassName"></lims-table> </div> <el-dialog :title="isUp ? '璁惧璇︽儏' : '妗f淇'" :visible.sync="dialogVisible" width="70%" top="5vh" :before-close="handleClose"> @@ -477,7 +477,7 @@ { label: "绠$悊缂栧彿", prop: "managementNumber" }, { label: "鎶�鏈寚鏍�", prop: "technicalIndicators" }, { label: "璐疆鏃ユ湡", prop: "acquisitionDate" }, - { label: "鍚敤鏃ユ湡", prop: "activationDate" }, + { label: "鏍″噯鏈夋晥鏈�", prop: "activationDate" }, { label: "绠$悊浜�", prop: "equipmentManagerUser" }, { label: "瀛樻斁鐐�", prop: "storagePoint" }, { label: "鎵�灞為儴闂�", prop: "laboratoryName" }, @@ -606,6 +606,18 @@ this.page.size = limit; this.getList(); }, + tableRowClassName({ row }) { + const today = new Date(); + const targetDate = new Date(row.activationDate); + const fiveDaysBeforeTarget = new Date(targetDate); + // 璁$畻鍓嶄簲澶╃殑鏃ユ湡 + fiveDaysBeforeTarget.setDate(targetDate.getDate() - 5); + // 姣旇緝鏃堕渶瑕佺‘淇濇瘮杈冪殑鏄畬鏁寸殑鏃ユ湡鏃堕棿锛屽寘鍚椂鍒嗙 + if (today > fiveDaysBeforeTarget) { + return 'red-row'; + } + return ''; + }, refresh() { this.queryParams = {}; this.page.current = 1; diff --git a/src/views/CNAS/resourceDemand/device/component/record.vue b/src/views/CNAS/resourceDemand/device/component/record.vue index 869410d..5f3b83c 100644 --- a/src/views/CNAS/resourceDemand/device/component/record.vue +++ b/src/views/CNAS/resourceDemand/device/component/record.vue @@ -108,7 +108,8 @@ prop="useDateList"> <el-date-picker v-model="form.useDateList" :disabled="operationType === 'view'" end-placeholder="缁撴潫鏃ユ湡" format="yyyy-MM-dd HH:mm:ss" size="small" start-placeholder="寮�濮嬫棩鏈�" style="width:100%" - type="datetimerange" value-format="yyyy-MM-dd HH:mm:ss"> + type="datetimerange" value-format="yyyy-MM-dd HH:mm:ss" + :picker-options="pickerOptions"> </el-date-picker> </el-form-item> </el-col> @@ -213,7 +214,12 @@ dialogVisible: false, operationType: '', formParamList: [], - tableLoading: false + tableLoading: false, + pickerOptions: { + disabledDate(time) { + return time.getTime() > Date.now(); + } + } } }, mounted() { diff --git a/src/views/CNAS/resourceDemand/device/index.vue b/src/views/CNAS/resourceDemand/device/index.vue index 063a9b2..e01dc60 100644 --- a/src/views/CNAS/resourceDemand/device/index.vue +++ b/src/views/CNAS/resourceDemand/device/index.vue @@ -12,7 +12,9 @@ <div slot-scope="{ node, data }" class="custom-tree-node"> <el-row style="width: 100%;"> <el-col :span="24"> - <p class="single-line-ellipsis" style="width: 100%"> + <p class="single-line-ellipsis" style="width: 100%" :style="{ + color: isLeafNode(data) && shouldHighlight(data) ? 'red' : '' + }"> <i :class="`node_i ${data.children != undefined ? data.code === '[1]' ? 'el-icon-folder-opened' @@ -22,7 +24,9 @@ "></i> {{ data.label }} </p> - <p> + <p :style="{ + color: isLeafNode(data) && shouldHighlight(data) ? 'red' : '' + }"> {{ data.managementNumber === undefined ? '' : data.managementNumber }} </p> </el-col> @@ -198,9 +202,25 @@ treeDevice().then(res => { let data = res.data; this.list = data; + console.log('this.list--', this.list) this.loading = false }); }, + // 鍒ゆ柇鏄惁鏄彾瀛愯妭鐐� + isLeafNode(data) { + return !data.children || data.children.length === 0; + }, + // 鍒ゆ柇鏄惁闇�瑕佹爣绾� + shouldHighlight(data) { + if (!data.activationDate) return false; + const today = new Date(); + const targetDate = new Date(data.activationDate); + const fiveDaysBeforeTarget = new Date(targetDate); + // 璁$畻鍓嶄簲澶╃殑鏃ユ湡 + fiveDaysBeforeTarget.setDate(targetDate.getDate() - 5); + + return today > fiveDaysBeforeTarget; + }, handleNodeClick(val, node, el) { // 鐐瑰嚮涓存椂缂撳瓨 this.clickNodeVal = val; diff --git a/src/views/business/inspectionTask/inspection.vue b/src/views/business/inspectionTask/inspection.vue index f648679..06fe550 100644 --- a/src/views/business/inspectionTask/inspection.vue +++ b/src/views/business/inspectionTask/inspection.vue @@ -2663,12 +2663,23 @@ } else { param = this.param; } + let isNoTestValue = '' + for (let key in param) { + if (param[key]) { + if (param[key].insValue?.length === 0) { + isNoTestValue = 1 + } else { + isNoTestValue = '' + } + } + } saveInsContext({ param: JSON.stringify(param), currentTable: this.currentTable, sampleId: this.currentSample.id, orderId: this.orderId, - sonLaboratory: this.sonLaboratory + sonLaboratory: this.sonLaboratory, + isNoTestValue: isNoTestValue }).then((res) => { this.$message.success("宸蹭繚瀛�"); }); diff --git a/src/views/business/materialOrder/customsInspectionOrder.vue b/src/views/business/materialOrder/customsInspectionOrder.vue index 35d165b..cfb2675 100644 --- a/src/views/business/materialOrder/customsInspectionOrder.vue +++ b/src/views/business/materialOrder/customsInspectionOrder.vue @@ -12,9 +12,13 @@ <el-select v-show="active==1" v-model="template" placeholder="涓嬪崟妯℃澘" size="small" style="margin-right: 10px;" @change="selectInsOrderTemplateByIdList"> <el-option v-for="(a, ai) in templates" :key="ai" :label="a.name" :value="a.id"> - <span style="float: left">{{ a.name }}</span> - <i class="el-icon-delete" style="float: right; color: #66b1ff; font-size: 16px" - @click.stop="handleDelete(a)"></i> + <div style="display: flex; align-items: center; justify-content: space-between;"> + <span>{{ a.name }}</span> + <i class="el-icon-delete" + style="color: #66b1ff; font-size: 16px; cursor: pointer;" + @click.stop="handleDelete(a)"> + </i> + </div> </el-option> </el-select> <el-button v-show="active==1" size="small" @click="templateDia=true"> diff --git a/src/views/business/productOrder/components/addOrder.vue b/src/views/business/productOrder/components/addOrder.vue index 555567b..90eb98b 100644 --- a/src/views/business/productOrder/components/addOrder.vue +++ b/src/views/business/productOrder/components/addOrder.vue @@ -14,9 +14,13 @@ <el-select v-show="active==1" v-model="template" placeholder="涓嬪崟妯℃澘" size="small" @change="selectInsOrderTemplateById"> <el-option v-for="(a, ai) in templates" :key="ai" :label="a.name" :value="a.id"> - <span style="float: left">{{ a.name }}</span> - <i class="el-icon-delete" style="float: right; color: #66b1ff; font-size: 16px" - @click.stop="handleDelete(a)"></i> + <div style="display: flex; align-items: center; justify-content: space-between;"> + <span>{{ a.name }}</span> + <i class="el-icon-delete" + style="color: #66b1ff; font-size: 16px; cursor: pointer;" + @click.stop="handleDelete(a)"> + </i> + </div> </el-option> </el-select> <el-button v-show="active==1" size="small" @click="templateDia=true"> @@ -587,7 +591,7 @@ } from "@/api/business/rawMaterialOrder"; import { addInsOrder, addInsOrderTemplate, delInsOrderTemplate, - getQuarterOnOrder, selectInsOrderTemplateById, + getQuarterOnOrder, judgeNotSpotCheckOrder, selectInsOrderTemplateById, selectOrderManDay, updateInsOrder, upInsOrder, @@ -598,6 +602,7 @@ import limsTable from "@/components/Table/lims-table.vue"; import {selectCustomPageList} from "@/api/system/customer"; import {mapGetters} from "vuex"; +import {addQuarter, updateQuarterOnOrder} from "@/api/business/finishedProductSampling"; export default { name: 'AddOrder', @@ -1255,36 +1260,62 @@ } }, saveMethod(sampleList){ - this.saveLoad = true if (this.addObj.quarterItemId) { this.addObj.quarterItemId = this.addObj.quarterItemId[1] } - if(this.tabIndex==4&&this.active==2){ - if (this.addObj.createTime) { - delete this.addObj.createTime - } - // 閫�鍥炲悗鎻愪氦 - updateInsOrder({insOrder: this.addObj, sampleProduct: sampleList}).then(res => { - this.saveLoad = false - this.$message.success('宸叉彁浜�') - this.bsm3Dia = false; - this.closeOpenPage() - }).catch(e=>{ - this.saveLoad = false - }) - }else{ - // 甯歌鎻愪氦 - addInsOrder({insOrder: this.addObj, sampleList: sampleList}).then(res => { - this.saveLoad = false - this.$message.success('宸叉彁浜�') - this.bsm3Dia = false; - this.closeOpenPage() - }).catch(e=>{ - this.saveLoad = false - }) + if (this.addObj.createTime) { + delete this.addObj.createTime } - + if (this.addObj.orderType === '鎶芥') { + judgeNotSpotCheckOrder({ insOrder: this.addObj, sampleList: sampleList }).then(res => { + if (res.data === true) { + this.saveData(sampleList); + } else { + // const message = res.message.replace(/\n/g, '<br>'); + this.$confirm(res.message, '鎻愮ず', { + confirmButtonText: '纭畾', + cancelButtonText: '鍙栨秷', + type: 'warning', + dangerouslyUseHTMLString: true, // 馃憟 鍏抽敭鐐癸細鍏佽 HTML + message: res.message // 杩欓噷涔熷彲浠ョ渷鐣ワ紝鍥犱负绗簩涓弬鏁版槸 title锛岀涓変釜鏄� options + }).then(() => { + this.saveData(sampleList); + }).catch(() => { + this.$message({ + type: 'info', + message: '宸插彇娑�' + }); + }); + } + }); + } else { + this.saveData(sampleList) + } }, + saveData(sampleList) { + this.saveLoad = true + if(this.tabIndex==4&&this.active==2){ + // 閫�鍥炲悗鎻愪氦 + updateInsOrder({insOrder: this.addObj, sampleProduct: sampleList}).then(res => { + this.saveLoad = false + this.$message.success('宸叉彁浜�') + this.bsm3Dia = false; + this.closeOpenPage() + }).catch(e=>{ + this.saveLoad = false + }) + }else{ + // 甯歌鎻愪氦 + addInsOrder({insOrder: this.addObj, sampleList: sampleList}).then(res => { + this.saveLoad = false + this.$message.success('宸叉彁浜�') + this.bsm3Dia = false; + this.closeOpenPage() + }).catch(e=>{ + this.saveLoad = false + }) + } + }, upInsOrderOfState(state) { if (state == 1) { this.saveLoad = true diff --git a/src/views/business/productOrder/index.vue b/src/views/business/productOrder/index.vue index b602274..b674f14 100644 --- a/src/views/business/productOrder/index.vue +++ b/src/views/business/productOrder/index.vue @@ -985,14 +985,26 @@ }, // 鐐瑰嚮鏍峰搧鍚嶇О selectAllByOne(row) { - this.$router.push({ - path: "/productOrder/addView", query: { - examine: 1, - active: 2, - currentId: row.id, - tabIndex: this.tabIndex, - } - }); + if (this.tabIndex === 4) { + this.$router.push({ + path: "/productOrder/addOrder", query: { + examine: 1, + active: 2, + currentId: row.id, + tabIndex: this.tabIndex, + } + }); + } else { + this.$router.push({ + path: "/productOrder/addView", query: { + examine: 1, + active: 2, + currentId: row.id, + tabIndex: this.tabIndex, + } + }); + } + }, // 淇敼鏍峰搧鍨嬪彿 editSampleModel (row) { diff --git a/src/views/structural/capabilityAndLaboratory/capabilityComponents/EditForm.vue b/src/views/structural/capabilityAndLaboratory/capabilityComponents/EditForm.vue index bb55b02..a236a5b 100644 --- a/src/views/structural/capabilityAndLaboratory/capabilityComponents/EditForm.vue +++ b/src/views/structural/capabilityAndLaboratory/capabilityComponents/EditForm.vue @@ -175,6 +175,15 @@ </el-form-item> </el-col> </el-row> + <el-row> + <el-col :span="12"> + <el-form-item label="鎶芥绫诲瀷缁戝畾锛�" prop="spotCheckType"> + <el-select v-model="editForm.spotCheckType" clearable placeholder="璇烽�夋嫨" size="small" style="width: 100%"> + <el-option v-for="item in dict.type.spot_check_type" :key="item.value" :label="item.label" :value="item.value"></el-option> + </el-select> + </el-form-item> + </el-col> + </el-row> <!-- <el-col :span="12">--> <!-- <el-form-item label="瀛楀吀绫诲瀷锛�" prop="dic">--> <!-- <el-select v-model="editForm.dic" clearable placeholder="璇烽�夋嫨" size="small" style="width: 100%">--> @@ -207,7 +216,7 @@ name: "EditForm", // import 寮曞叆鐨勭粍浠堕渶瑕佹敞鍏ュ埌瀵硅薄涓墠鑳戒娇鐢� components: {}, - dicts: ['sys_sub_lab', 'inspection_item_type', 'sys_unit', 'inspection_value_type', 'inspection_bsm'], + dicts: ['sys_sub_lab', 'inspection_item_type', 'sys_unit', 'inspection_value_type', 'inspection_bsm', 'spot_check_type'], data() { // 杩欓噷瀛樻斁鏁版嵁 return { @@ -237,7 +246,8 @@ inspectionItemClassEn: '', // 妫�楠岄」鍒嗙被EN method: '', // 璇曢獙鏂规硶 radiusList: [], // 鏉′欢 - rates: '', // 鏉′欢 + rates: '', // 鏀惰垂鏍囧噯(鍏�/娆�) + spotCheckType: '', // 鎶芥绫诲瀷缁戝畾 deviceId: [], // 璁惧 }, sampleList: [], // 妫�楠屽璞′笅鎷夋 @@ -313,7 +323,8 @@ inspectionItemClassEn: '', // 妫�楠岄」鍒嗙被EN method: '', // 璇曢獙鏂规硶 radiusList: [], // 鏉′欢 - rates: '', // 鏉′欢 + rates: '', // 鏀惰垂鏍囧噯(鍏�/娆�) + spotCheckType: '', // 鎶芥绫诲瀷缁戝畾 } this.resetForm('editForm') } else { -- Gitblit v1.9.3