| | |
| | | data: query |
| | | }) |
| | | } |
| | | // æ£éªç±»å«ä¸ºæ½æ£æ¶ææ¥å£ |
| | | export function judgeNotSpotCheckOrder(query) { |
| | | return request({ |
| | | url: '/insOrder/judgeNotSpotCheckOrder', |
| | | method: 'post', |
| | | data: query |
| | | }) |
| | | } |
| | | // æ·»å æ£éªä¸åæ°æ® |
| | | export function addInsOrder(query) { |
| | | return request({ |
¶Ô±ÈÐÂÎļþ |
| | |
| | | //è´¨éçç£ç®¡çè¯å®¡è¾å
¥ææç¸å
³æ¥å£ |
| | | 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 |
| | | }) |
| | | } |
| | |
| | | url: "/processReport/exportProcessReport", |
| | | method: "get", |
| | | params: data, |
| | | responseType: "blob", |
| | | }); |
| | | } |
| | | |
| | |
| | | <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> |
| | |
| | | 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, |
| | | }, |
| | |
| | | type: Object, |
| | | required: true |
| | | }, |
| | | option: { |
| | | type: Object, |
| | | }, |
| | | }, |
| | | data() { |
| | | return { |
| | |
| | | .lims-table .highlight-danger-row-border td:last-child { |
| | | border-right: 4px solid #f56c6c; |
| | | } |
| | | >>>.red-row td { |
| | | background: #FFCCCC !important; |
| | | } |
| | | </style> |
| | |
| | | closeSelectedTag(view) { |
| | | this.$tab.closePage(view).then(({ visitedViews }) => { |
| | | if (this.isActive(view)) { |
| | | if (view.fullPath.includes('/materialOrder/customsInspectionOrder') || view.fullPath.includes('/materialOrder/customsInspectionView')) { |
| | | this.$router.push('/business/materialOrder') |
| | | } else { |
| | | this.toLastView(visitedViews, view) |
| | | } |
| | | } |
| | | }) |
| | | }, |
| | | closeRightTags() { |
| | |
| | | </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> |
| | | æ¹åç¶æï¼ |
| | |
| | | <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> |
| | |
| | | ratifyRemark: '', |
| | | downloadDialog: false, |
| | | download: {}, |
| | | planYear: '' |
| | | planYear: '', |
| | | option: {} |
| | | }; |
| | | }, |
| | | mounted() { |
| | |
| | | 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 |
| | |
| | | }, |
| | | // ç¨äºä¸ä¼ æä»¶çä¿¡æ¯ |
| | | computed: { |
| | | ...mapGetters(["userId"]), |
| | | ...mapGetters(["userId", "nickName"]), |
| | | action() { |
| | | return this.javaApi + '/qualityMonitor/importQualityMonitor' |
| | | }, |
¶Ô±ÈÐÂÎļþ |
| | |
| | | <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> |
| | |
| | | </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> |
| | |
| | | <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;"> |
| | |
| | | personList: [], |
| | | title: 'æ°å¢', |
| | | addDialogVisible: false, |
| | | addInfo: { |
| | | signatory: [] |
| | | }, |
| | | addInfo: {}, |
| | | addLoading: false, |
| | | mutilSelect: [], |
| | | queryParams: { |
| | | insReportCode: '' |
| | | }, |
| | |
| | | { label: "åéæ¹å¼", prop: "method" }, |
| | | { label: "å鿥æ", prop: "sendTime" }, |
| | | { label: "åé人", prop: "sendUserName" }, |
| | | { label: "ç¾æ¶äºº", prop: "signatoryName" }, |
| | | { label: "ç¾æ¶äºº", prop: "signatory" }, |
| | | { label: "夿³¨", prop: "remark" }, |
| | | { |
| | | dataType: "action", |
| | |
| | | }, |
| | | 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() { |
| | |
| | | this.page.current = 1; |
| | | this.getList(); |
| | | }, |
| | | handleSelectionChange(val) { |
| | | this.mutilSelect = val |
| | | }, |
| | | getAuthorizedPerson() { |
| | | selectUserCondition().then(res => { |
| | | let data = [] |
| | |
| | | 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({ |
| | |
| | | this.refreshTable() |
| | | }).catch(err => { }) |
| | | } else { |
| | | doProcessReport(addInfo).then(res => { |
| | | doProcessReport(this.addInfo).then(res => { |
| | | this.addLoading = false |
| | | this.addDialogVisible = false |
| | | this.$message({ |
| | |
| | | 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("æ¯å¦å é¤è¯¥æ¡æ°æ®?", "æç¤º", { |
| | |
| | | @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> |
| | |
| | | </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 ? '设å¤è¯¦æ
' : 'æ¡£æ¡ä¿®è®¢'" :visible.sync="dialogVisible" width="70%" top="5vh" |
| | | :before-close="handleClose"> |
| | |
| | | { label: "管çç¼å·", prop: "managementNumber" }, |
| | | { label: "ææ¯ææ ", prop: "technicalIndicators" }, |
| | | { label: "è´ç½®æ¥æ", prop: "acquisitionDate" }, |
| | | { label: "å¯ç¨æ¥æ", prop: "activationDate" }, |
| | | { label: "æ ¡åæææ", prop: "activationDate" }, |
| | | { label: "管ç人", prop: "equipmentManagerUser" }, |
| | | { label: "åæ¾ç¹", prop: "storagePoint" }, |
| | | { label: "æå±é¨é¨", prop: "laboratoryName" }, |
| | |
| | | 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; |
| | |
| | | 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> |
| | |
| | | dialogVisible: false, |
| | | operationType: '', |
| | | formParamList: [], |
| | | tableLoading: false |
| | | tableLoading: false, |
| | | pickerOptions: { |
| | | disabledDate(time) { |
| | | return time.getTime() > Date.now(); |
| | | } |
| | | } |
| | | } |
| | | }, |
| | | mounted() { |
| | |
| | | <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' |
| | |
| | | "></i> |
| | | {{ data.label }} |
| | | </p> |
| | | <p> |
| | | <p :style="{ |
| | | color: isLeafNode(data) && shouldHighlight(data) ? 'red' : '' |
| | | }"> |
| | | {{ data.managementNumber === undefined ? '' : data.managementNumber }} |
| | | </p> |
| | | </el-col> |
| | |
| | | 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; |
| | |
| | | } 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("å·²ä¿å"); |
| | | }); |
| | |
| | | <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"> |
| | |
| | | <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"> |
| | |
| | | } from "@/api/business/rawMaterialOrder"; |
| | | import { |
| | | addInsOrder, addInsOrderTemplate, delInsOrderTemplate, |
| | | getQuarterOnOrder, selectInsOrderTemplateById, |
| | | getQuarterOnOrder, judgeNotSpotCheckOrder, selectInsOrderTemplateById, |
| | | selectOrderManDay, |
| | | updateInsOrder, |
| | | upInsOrder, |
| | |
| | | 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', |
| | |
| | | } |
| | | }, |
| | | 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 |
| | | } |
| | | 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.saveLoad = false |
| | | }) |
| | | } |
| | | |
| | | }, |
| | | upInsOrderOfState(state) { |
| | | if (state == 1) { |
| | |
| | | }, |
| | | // ç¹å»æ ·ååç§° |
| | | selectAllByOne(row) { |
| | | 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, |
| | |
| | | tabIndex: this.tabIndex, |
| | | } |
| | | }); |
| | | } |
| | | |
| | | }, |
| | | // ä¿®æ¹æ ·ååå· |
| | | editSampleModel (row) { |
| | |
| | | </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%">--> |
| | |
| | | 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 { |
| | |
| | | inspectionItemClassEn: '', // æ£éªé¡¹åç±»EN |
| | | method: '', // è¯éªæ¹æ³ |
| | | radiusList: [], // æ¡ä»¶ |
| | | rates: '', // æ¡ä»¶ |
| | | rates: '', // æ¶è´¹æ å(å
/次) |
| | | spotCheckType: '', // æ½æ£ç±»åç»å® |
| | | deviceId: [], // è®¾å¤ |
| | | }, |
| | | sampleList: [], // æ£éªå¯¹è±¡ä¸ææ¡ |
| | |
| | | inspectionItemClassEn: '', // æ£éªé¡¹åç±»EN |
| | | method: '', // è¯éªæ¹æ³ |
| | | radiusList: [], // æ¡ä»¶ |
| | | rates: '', // æ¡ä»¶ |
| | | rates: '', // æ¶è´¹æ å(å
/次) |
| | | spotCheckType: '', // æ½æ£ç±»åç»å® |
| | | } |
| | | this.resetForm('editForm') |
| | | } else { |