Merge remote-tracking branch 'origin/dev' into dev
已修改4个文件
已重命名6个文件
已删除2个文件
已添加8个文件
| | |
| | | import request from "@/utils/request"; |
| | | |
| | | // 姿忣éªå页æ¥è¯¢ |
| | | export const getInspectionOrder = (params) => { |
| | | return request({ |
| | | url: "/inspectionOrder/pageInspectionOrder", |
| | | method: "get", |
| | | params: params |
| | | }) |
| | | export function pageInspectionOrder(query) { |
| | | return request({ |
| | | url: '/inspectionOrder/pageInspectionOrder', |
| | | method: 'get', |
| | | params: query |
| | | }) |
| | | } |
| | | |
| | | // å§æåæ¥è¯¢æå订å |
| | | export function getInsOrderOnInspection(query) { |
| | | return request({ |
| | | url: '/inspectionOrder/getInsOrderOnInspection', |
| | | method: 'get', |
| | | params: query |
| | | }) |
| | | } |
| | | // å§æåæ£éªæ°å¢ |
| | | export function addInspectionOrder(query) { |
| | | return request({ |
| | | url: '/inspectionOrder/addInspectionOrder', |
| | | method: 'post', |
| | | data: query |
| | | }) |
| | | } |
| | | // 姿忣éªä¿®æ¹ |
| | | export function updateInspectionOrder(query) { |
| | | return request({ |
| | | url: '/inspectionOrder/updateInspectionOrder', |
| | | method: 'post', |
| | | data: query |
| | | }) |
| | | } |
| | | // æ°å¢æ¶æ ¹æ®æåè®¢åæ¥è¯¢å§æå详æ
|
| | | export const getInspectionOrderByInsOderId = (params) => { |
| | | return request({ |
| | | url: "/inspectionOrder/getInspectionOrderByInsOderId", |
| | | method: "get", |
| | | params: params |
| | | }) |
| | | export function getInspectionOrderByInsOderId(query) { |
| | | return request({ |
| | | url: '/inspectionOrder/getInspectionOrderByInsOderId', |
| | | method: 'get', |
| | | params: query |
| | | }) |
| | | } |
| | | |
| | | // æ¥è¯¢å¯æ°å¢çæ£éªå |
| | | export const getInsOrderOnInspection = (data) => { |
| | | return request({ |
| | | url: "/inspectionOrder/getInsOrderOnInspection", |
| | | method: "post", |
| | | data: data |
| | | }) |
| | | // å§æåæ£éªæ¥ç详æ
|
| | | export function getInspectionOrderOne(query) { |
| | | return request({ |
| | | url: '/inspectionOrder/getInspectionOrderOne', |
| | | method: 'get', |
| | | params: query |
| | | }) |
| | | } |
| | | |
| | | // æ¥çå§æå详æ
|
| | | export const getInspectionOrderOne = (params) => { |
| | | return request({ |
| | | url: "/inspectionOrder/getInspectionOrderOne", |
| | | method: "get", |
| | | params: params |
| | | }) |
| | | // 姿忣éªå é¤ |
| | | export function delInspectionOrder(query) { |
| | | return request({ |
| | | url: '/inspectionOrder/delInspectionOrder', |
| | | method: 'get', |
| | | params: query |
| | | }) |
| | | } |
| | | |
| | | // æ°å¢æ£éªå |
| | | export const addInspectionOrder = (data) => { |
| | | return request({ |
| | | url: "/inspectionOrder/addInspectionOrder", |
| | | method: "post", |
| | | data: data |
| | | }) |
| | | // 姿忣éªå é¤ |
| | | export function exportInspectionOrder(query) { |
| | | return request({ |
| | | url: '/inspectionOrder/exportInspectionOrder', |
| | | method: 'get', |
| | | params: query, |
| | | responseType: 'blob' |
| | | }) |
| | | } |
| | | |
| | | // ç¼è¾æ£éªå |
| | | export const editInspectionOrder = (data) => { |
| | | return request({ |
| | | url: "/inspectionOrder/editInspectionOrder", |
| | | method: "post", |
| | | data: data |
| | | }) |
| | | } |
¶Ô±ÈÐÂÎļþ |
| | |
| | | // è´¨éçç£è®¡å页é¢ç¸å
³æ¥å£ |
| | | import request from '@/utils/request' |
| | | |
| | | // è´¨éçç£å¹´è®¡åå表 |
| | | export function pageQualitySupervise(query) { |
| | | return request({ |
| | | url: '/qualitySupervise/pageQualitySupervise', |
| | | method: 'get', |
| | | params: query |
| | | }) |
| | | } |
| | | // è´¨éçç£å¹´è®¡åå表 |
| | | export function ratifyQualitySupervise(query) { |
| | | return request({ |
| | | url: '/qualitySupervise/ratifyQualitySupervise', |
| | | method: 'post', |
| | | data: query |
| | | }) |
| | | } |
| | | // è´¨éçç£å¹´è®¡åå表 |
| | | export function exportQualitySupervise(query) { |
| | | return request({ |
| | | url: '/qualitySupervise/exportQualitySupervise', |
| | | method: 'get', |
| | | data: query, |
| | | responseType: "blob" |
| | | }) |
| | | } |
| | | // å é¤çç£è®¡å |
| | | export function delQualitySupervise(query) { |
| | | return request({ |
| | | url: '/qualitySupervise/delQualitySupervise', |
| | | method: 'delete', |
| | | params: query, |
| | | }) |
| | | } |
| | | // è´¨éçç£å¹´è®¡åå表 |
| | | export function pageQualitySuperviseDetail(query) { |
| | | return request({ |
| | | url: '/qualitySupervise/pageQualitySuperviseDetail', |
| | | method: 'get', |
| | | params: query, |
| | | }) |
| | | } |
| | | // 导åºè´¨éçç£è®¡åè®°å½å |
| | | export function exportSuperviseDetailRecord(query) { |
| | | return request({ |
| | | url: '/qualitySupervise/exportSuperviseDetailRecord', |
| | | method: 'get', |
| | | params: query, |
| | | responseType: "blob" |
| | | }) |
| | | } |
| | | // 导åºä¸ç¬¦å项 |
| | | export function superviseDetailAccordingExport(query) { |
| | | return request({ |
| | | url: '/qualitySupervise/superviseDetailAccordingExport', |
| | | method: 'get', |
| | | params: query, |
| | | responseType: "blob" |
| | | }) |
| | | } |
| | | // 导åºçç£çº æ£æªæ½ |
| | | export function exportSuperviseDetaillCorrect(query) { |
| | | return request({ |
| | | url: '/qualitySupervise/exportSuperviseDetaillCorrect', |
| | | method: 'get', |
| | | params: query, |
| | | responseType: "blob" |
| | | }) |
| | | } |
| | | // å é¤çç£è®¡å详æ
|
| | | export function delQualitySuperviseDetail(query) { |
| | | return request({ |
| | | url: '/qualitySupervise/delQualitySuperviseDetail', |
| | | method: 'delete', |
| | | params: query, |
| | | }) |
| | | } |
| | | // æ°å¢çç£è®¡å详æ
|
| | | export function addQualitySuperviseDetail(query) { |
| | | return request({ |
| | | url: '/qualitySupervise/addQualitySuperviseDetail', |
| | | method: 'post', |
| | | data: query, |
| | | }) |
| | | } |
| | | // ä¿®æ¹çç£è®¡å详æ
|
| | | export function updateQualitySuperviseDetail(query) { |
| | | return request({ |
| | | url: '/qualitySupervise/updateQualitySuperviseDetail', |
| | | method: 'post', |
| | | data: query, |
| | | }) |
| | | } |
| | | // æ¥è¯¢çç£è®¡åè®°å½æµç¨è¯¦æ
|
| | | export function getSuperviseDetailRecord(query) { |
| | | return request({ |
| | | url: '/qualitySupervise/getSuperviseDetailRecord', |
| | | method: 'get', |
| | | params: query, |
| | | }) |
| | | } |
| | | // æ°å¢çç£è®°å½ä¿¡æ¯ |
| | | export function addSuperviseDetailRecord(query) { |
| | | return request({ |
| | | url: '/qualitySupervise/addSuperviseDetailRecord', |
| | | method: 'post', |
| | | data: query, |
| | | }) |
| | | } |
| | | // æäº¤çç£è®°å½æ¹å |
| | | export function addSuperviseRecordOpinion(query) { |
| | | return request({ |
| | | url: '/qualitySupervise/addSuperviseRecordOpinion', |
| | | method: 'post', |
| | | data: query, |
| | | }) |
| | | } |
| | | // è·åå½åçç£è®°å½ççç£åå表 |
| | | export function getRecordUser(query) { |
| | | return request({ |
| | | url: '/qualitySupervise/getRecordUser', |
| | | method: 'get', |
| | | params: query, |
| | | }) |
| | | } |
| | | // æ¥è¯¢çç£è®°å½ä¸ç¬¦åæ§å¶ä¿¡æ¯ |
| | | export function getSuperviseDetailAccording(query) { |
| | | return request({ |
| | | url: '/qualitySupervise/getSuperviseDetailAccording', |
| | | method: 'get', |
| | | params: query, |
| | | }) |
| | | } |
| | | // (è£
夿µç¨)æ°å¢çç£è®°å½ä¸ç¬¦åæ§å¶ä¿¡æ¯ |
| | | export function addEquipSuperviseDetailAccording(query) { |
| | | return request({ |
| | | url: '/qualitySupervise/addEquipSuperviseDetailAccording', |
| | | method: 'post', |
| | | data: query, |
| | | }) |
| | | } |
| | | // (è£
夿µç¨)æ¹åçç£è®°å½ä¸ç¬¦åæ§å¶ä¿¡æ¯ |
| | | export function approverEquipSuperviseDetailAccording(query) { |
| | | return request({ |
| | | url: '/qualitySupervise/approverEquipSuperviseDetailAccording', |
| | | method: 'post', |
| | | data: query, |
| | | }) |
| | | } |
| | | // æ¥è¯¢çç£çº æ£å¤ç |
| | | export function getSuperviseDetailCorrect(query) { |
| | | return request({ |
| | | url: '/qualitySupervise/getSuperviseDetailCorrect', |
| | | method: 'get', |
| | | params: query, |
| | | }) |
| | | } |
| | | // (è£
夿µç¨)æ°å¢çç£çº æ£å¤ç |
| | | export function addEquipSuperviseDetailCorrect(query) { |
| | | return request({ |
| | | url: '/qualitySupervise/addEquipSuperviseDetailCorrect', |
| | | method: 'post', |
| | | data: query, |
| | | }) |
| | | } |
| | | // (è£
夿µç¨)æ¹åçç£çº æ£å¤ç |
| | | export function approveEquipSuperviseDetailCorrect(query) { |
| | | return request({ |
| | | url: '/qualitySupervise/approveEquipSuperviseDetailCorrect', |
| | | method: 'post', |
| | | data: query, |
| | | }) |
| | | } |
| | | // (è£
夿µç¨)æ¹åçç£çº æ£å¤ç |
| | | export function getThisYearTrainingDetailed(query) { |
| | | return request({ |
| | | url: '/personTraining/getThisYearTrainingDetailed', |
| | | method: 'get' |
| | | }) |
| | | } |
¶Ô±ÈÐÂÎļþ |
| | |
| | | // ä¸ç¡®å®åº¦è¯å®ç¸å
³æ¥å£ |
| | | import request from "@/utils/request"; |
| | | |
| | | //å¯¼åº |
| | | export function exportProcessEvaluate(query) { |
| | | return request({ |
| | | url: "/processEvaluate/exportProcessEvaluate", |
| | | method: "get", |
| | | responseType: "blob", |
| | | params: query, |
| | | }); |
| | | } |
| | | |
| | | // å¡«å (主è¦ä¸ä¼ idå夿³¨note就好äº) |
| | | export function doProcessEvaluate(data) { |
| | | return request({ |
| | | url: "/processEvaluate/doProcessEvaluate", |
| | | method: "post", |
| | | data: data, |
| | | }); |
| | | } |
| | | |
| | | //å é¤ |
| | | export function delProcessEvaluate(query) { |
| | | return request({ |
| | | url: "/processEvaluate/delProcessEvaluate", |
| | | method: "delete", |
| | | params: query, |
| | | }); |
| | | } |
| | | |
| | | //å页 |
| | | export function pageProcessEvaluate(query) { |
| | | return request({ |
| | | url: "/processEvaluate/pageProcessEvaluate", |
| | | method: "get", |
| | | params: query, |
| | | }); |
| | | } |
| | |
| | | }; |
| | | 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(), |
| | | }; |
| | | // è§£å³el-radio-groupåéæ¡èªèº«çbug |
| | | Vue.directive('removeAriaHidden', { |
| | | bind(el, binding) { |
| | | let ariaEls = el.querySelectorAll('.el-radio__original'); |
| | | ariaEls.forEach((item) => { |
| | | item.removeAttribute('aria-hidden'); |
| | | }); |
| | | } |
| | | }) |
| | | |
| | | // å
¨å±ç»ä»¶æè½½ |
| | | Vue.component("DictTag", DictTag); |
| | |
| | | <style lang="scss" scoped> |
| | | .standard_method { |
| | | padding: 20px; |
| | | } |
| | | .search { |
| | | background-color: #fff; |
| | | height: 80px; |
| | | display: flex; |
| | | align-items: center; |
| | | } |
| | | |
| | | .search_thing { |
| | | // width: 350px; |
| | | display: flex; |
| | | align-items: center; |
| | | } |
| | | |
| | | .search_label { |
| | | width: 110px; |
| | | font-size: 14px; |
| | | text-align: right; |
| | | } |
| | | |
| | | .search_input { |
| | | width: calc(100% - 110px); |
| | | } |
| | | |
| | | .table { |
| | | margin-top: 10px; |
| | | background-color: #fff; |
| | | width: calc(100% - 40px); |
| | | height: calc(100% - 60px - 80px - 10px - 40px); |
| | | padding: 20px; |
| | | } |
| | | </style> |
| | | |
| | | <template> |
| | | <div class="standard_method"> |
| | | <el-form :model="model" :inline="true" label-width="auto"> |
| | | <el-form-item label="è¯æ ·åç§°ï¼"> |
| | | <el-input size="small" |
| | | placeholder="请è¾å
¥" |
| | | clearable |
| | | @change="refreshTable()" |
| | | /> |
| | | </el-form-item> |
| | | <el-form-item label="å§æåä½ï¼"> |
| | | <el-input size="small" |
| | | placeholder="请è¾å
¥" |
| | | clearable |
| | | @change="refreshTable()" |
| | | /> |
| | | </el-form-item> |
| | | <el-form-item label="ç产åä½ï¼"> |
| | | <el-input size="small" |
| | | placeholder="请è¾å
¥" |
| | | clearable |
| | | @change="refreshTable()" |
| | | /> |
| | | </el-form-item> |
| | | <el-form-item label="å§æäººï¼"> |
| | | <el-input size="small" |
| | | placeholder="请è¾å
¥" |
| | | clearable |
| | | @change="refreshTable()" |
| | | /> |
| | | </el-form-item> |
| | | <el-form-item> |
| | | <el-button size="small"> |
| | | é ç½® |
| | | </el-button> |
| | | <el-button size="small" type="primary"> |
| | | æ¥ è¯¢ |
| | | </el-button> |
| | | </el-form-item> |
| | | </el-form> |
| | | <div style="margin-bottom: 10px"> |
| | | <el-button size="small" type="primary" icon="el-icon-plus" @click="openDialog('add')"> |
| | | æ° å¢ |
| | | </el-button> |
| | | </div> |
| | | <lims-table |
| | | :column="column" |
| | | :tableData="tableData" |
| | | :height="'calc(100vh - 250px)'" |
| | | :page="page" |
| | | /> |
| | | <Edit ref="editRef" /> |
| | | <div class="app-container"> |
| | | <div style="display: flex;justify-content: space-between;"> |
| | | <el-form :model="entitySearch" ref="entitySearch" size="small" :inline="true"> |
| | | <el-form-item label="è¯æ ·åç§°" prop="sampleName"> |
| | | <el-input size="small" placeholder="请è¾å
¥" clearable v-model="entitySearch.sampleName" |
| | | @keyup.enter.native="refreshTable"></el-input> |
| | | </el-form-item> |
| | | <el-form-item label="å§æåä½" prop="commissionUnit"> |
| | | <el-input v-model="entitySearch.commissionUnit" clearable placeholder="请è¾å
¥" size="small" |
| | | @keyup.enter.native="refreshTable()"></el-input> |
| | | </el-form-item> |
| | | <el-form-item label="ç产åä½" prop="production"> |
| | | <el-input v-model="entitySearch.production" clearable placeholder="请è¾å
¥" size="small" |
| | | @keyup.enter.native="refreshTable()"></el-input> |
| | | </el-form-item> |
| | | <el-form-item label="å§æäºº" prop="commissionUser"> |
| | | <el-input v-model="entitySearch.commissionUser" clearable placeholder="请è¾å
¥" size="small" |
| | | @keyup.enter.native="refreshTable()"></el-input> |
| | | </el-form-item> |
| | | <el-form-item> |
| | | <el-button icon="el-icon-refresh" size="mini" @click="refresh">é ç½®</el-button> |
| | | <el-button type="primary" icon="el-icon-search" size="mini" @click="refreshTable">æ¥ è¯¢</el-button> |
| | | </el-form-item> |
| | | </el-form> |
| | | </div> |
| | | <div style="text-align: right; margin-bottom: 20px"> |
| | | <el-button size="medium" type="primary" @click="goAdd">æ°å¢</el-button> |
| | | </div> |
| | | <div class="table"> |
| | | <el-table v-loading="tableListLoading" :data="tableList" height="530" style="width: 100%"> |
| | | <el-table-column align="center" label="åºå·" type="index" width="60"></el-table-column> |
| | | <el-table-column label="è¯æ ·åç§°" prop="sampleName" show-overflow-tooltip width="120"></el-table-column> |
| | | <el-table-column label="å§æç¼å·" prop="entrustCode" show-overflow-tooltip width="120"></el-table-column> |
| | | <el-table-column label="å§ææ¶é´" prop="commissionDate" width="120"></el-table-column> |
| | | <el-table-column label="åå·" prop="modelNo"></el-table-column> |
| | | <el-table-column label="å§æåä½" prop="commissionUnit" show-overflow-tooltip width="120"></el-table-column> |
| | | <el-table-column label="ç产åä½" prop="production" show-overflow-tooltip width="120"></el-table-column> |
| | | <el-table-column label="å§æäºº" prop="commissionUser"></el-table-column> |
| | | <el-table-column label="æ ·åæ°é" prop="quantity"></el-table-column> |
| | | <el-table-column label="æ ·åç¶æ" prop="sampleStatus"></el-table-column> |
| | | <el-table-column label="æ¯å¦çæ ·" prop="isLeave"> |
| | | <template slot-scope="scope"> |
| | | <span v-if="scope.row.isLeave === 1">æ¯</span> |
| | | <span v-if="scope.row.isLeave === 0">å¦</span> |
| | | </template> |
| | | </el-table-column> |
| | | <el-table-column label="æ ·åå¤çæ¹å¼" prop="processing"> |
| | | <template slot-scope="scope"> |
| | | <span v-if="scope.row.processing === 1">å®éªå®¤å¤ç</span> |
| | | <span v-if="scope.row.processing === 0">å§æåä½åå</span> |
| | | </template> |
| | | </el-table-column> |
| | | <el-table-column align="center" label="æä½" width="240" fixed="right"> |
| | | <template slot-scope="scope"> |
| | | <el-button size="mini" type="text" @click="goUpdate(scope.row)">ç¼è¾</el-button> |
| | | <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"> |
| | | <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> |
| | | </div> |
| | | <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-button size="small" type="primary" @click="searchTableData">æ¥è¯¢</el-button> |
| | | <el-button size="small" @click="refreshTableData">é ç½®</el-button> |
| | | </div> |
| | | <el-table v-loading="tableLoading" :data="tableData" height="550" style="width: 100%"> |
| | | <el-table-column align="center" label="åºå·" type="index" width="60"></el-table-column> |
| | | <el-table-column label="å§æç¼å·" prop="entrustCode"></el-table-column> |
| | | <el-table-column label="æ ·ååç§°" prop="sample"></el-table-column> |
| | | <el-table-column align="center" label="æä½"> |
| | | <template slot-scope="scope"> |
| | | <el-button align="center" size="mini" type="text" @click="goAddOrder(scope.row)">æ°å¢å§æå</el-button> |
| | | </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> |
| | | </el-dialog> |
| | | <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"> |
| | | <table border="1" cellpadding="10" class="tables heads" style="border: 1px dashed black;"> |
| | | <tr> |
| | | <td rowspan="2"> |
| | | <img alt="" src="@/assets/logo/ZTTlogo.png" style="width: 80%;"> |
| | | </td> |
| | | <td> |
| | | <p>è®°å½åç§°ï¼æ£éªå§æå</p> |
| | | </td> |
| | | <td> |
| | | <p>ä¿åæéï¼6å¹´</p> |
| | | </td> |
| | | </tr> |
| | | <tr> |
| | | <td> |
| | | <p>è®°å½ç¼å·ï¼ ZTT/QR-16-04-a</p> |
| | | </td> |
| | | <td> |
| | | <p>彿¡£é¨é¨ï¼ç»¼å室</p> |
| | | </td> |
| | | </tr> |
| | | </table> |
| | | <h4 style="display: flex;align-items: center;flex-direction: column;justify-content: center;"> |
| | | <span style="font-size: 28px;">æ£ éª å§ æ å</span> |
| | | </h4> |
| | | <p v-if="operationType !== 'view'" style="margin-left: 560px;display: flex;align-items: center"> |
| | | <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> |
| | | <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'">{{ 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> |
| | | </td> |
| | | <td v-if="operationType === 'view'">{{ currentInfo.commissionDate }}</td> |
| | | </tr> |
| | | <tr> |
| | | <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'">{{ 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'">{{ 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'">{{ 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'">{{ 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'">{{ 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> |
| | | </tr> |
| | | <tr> |
| | | <td colspan="2"> |
| | | <p>æ¯å¦çæ ·</p> |
| | | </td> |
| | | <td v-if="operationType !== 'view'"> |
| | | <el-radio-group v-model="currentInfo.isLeave" v-removeAriaHidden> |
| | | <el-radio :label="1">æ¯</el-radio> |
| | | <el-radio :label="0">å¦</el-radio> |
| | | </el-radio-group> |
| | | </td> |
| | | <td v-if="operationType === 'view'"> |
| | | <span v-if="currentInfo.isLeave==1">æ¯</span> |
| | | <span v-else>å¦</span> |
| | | </td> |
| | | <td> |
| | | <p>æ ·åå¤çæ¹å¼</p> |
| | | </td> |
| | | <td v-if="operationType !== 'view'"> |
| | | <el-radio-group v-model="currentInfo.processing" v-removeAriaHidden> |
| | | <el-radio :label="0">å§æåä½åå</el-radio> |
| | | <el-radio :label="1">å®éªå®¤å¤ç</el-radio> |
| | | </el-radio-group> |
| | | </td> |
| | | <td v-if="operationType === 'view'"> |
| | | <span v-if="currentInfo.processing==0">å§æåä½åå</span> |
| | | <span v-else>å®éªå®¤å¤ç</span> |
| | | </td> |
| | | </tr> |
| | | <tr> |
| | | <td colspan="2"> |
| | | <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> |
| | | </td> |
| | | <td v-if="operationType === 'view'">{{ currentInfo.appointed }}</td> |
| | | <td> |
| | | <p>æ¥ååéæ¹å¼</p> |
| | | </td> |
| | | <td v-if="operationType !== 'view'"> |
| | | <el-radio-group v-model="currentInfo.send" v-removeAriaHidden> |
| | | <el-radio :label="1">èªå</el-radio> |
| | | <el-radio :label="0">å
¶ä»</el-radio> |
| | | </el-radio-group> |
| | | </td> |
| | | <td v-if="operationType === 'view'"> |
| | | <span v-if="currentInfo.send==1">èªå</span> |
| | | <span v-else>å
¶ä»</span> |
| | | </td> |
| | | </tr> |
| | | <el-button size="small" type="primary" @click="addOrderDetailList" v-if="operationType !== 'view'">æ·»å </el-button> |
| | | <tr> |
| | | <td> |
| | | <p>åºå·</p> |
| | | </td> |
| | | <td> |
| | | <p>æ ·åç¼å·</p> |
| | | </td> |
| | | <td> |
| | | <p>è¯éªé¡¹ç®</p> |
| | | </td> |
| | | <td> |
| | | <p>æ£éªä¾æ®</p> |
| | | </td> |
| | | <td> |
| | | <p>夿³¨</p> |
| | | </td> |
| | | </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'">{{ 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'">{{ 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'">{{ 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'">{{ item.remark }}</td> |
| | | </tr> |
| | | <tr> |
| | | <td colspan="2"> |
| | | <p>å¤å®è§å</p> |
| | | </td> |
| | | <td v-if="operationType !== 'view'" colspan="3"> |
| | | <el-radio-group v-model="currentInfo.criterionRule" v-removeAriaHidden> |
| | | <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> |
| | | </td> |
| | | <td v-if="operationType === 'view'" colspan="3"> |
| | | <span v-if="currentInfo.criterionRule===0">ä¸èèä¸ç¡®å®åº¦</span> |
| | | <span v-if="currentInfo.criterionRule===1">èèä¸ç¡®å®åº¦</span> |
| | | <span v-if="currentInfo.criterionRule===1">{{ currentInfo.criterionRuleRemark + '%' }}</span> |
| | | </td> |
| | | </tr> |
| | | <tr> |
| | | <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'"> |
| | | {{currentInfo.commissionUser}} |
| | | </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> |
| | | </td> |
| | | <td v-if="operationType === 'view'">{{ currentInfo.commissionDate }}</td> |
| | | </tr> |
| | | <tr> |
| | | <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">{{ 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'">{{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> |
| | | </td> |
| | | <td v-if="operationType === 'view'">{{ currentInfo.receiptData }}</td> |
| | | </tr> |
| | | <tr> |
| | | <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'">{{ 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> |
| | | </td> |
| | | <td v-if="operationType === 'view'">{{ currentInfo.sampleData }}</td> |
| | | </tr> |
| | | <tr> |
| | | <td colspan="2" rowspan="3"> |
| | | <p>æ£æµæºæä¿¡æ¯</p> |
| | | </td> |
| | | <td colspan="3"> |
| | | <p>æ±èä¸å¤©ç§æè¡ä»½æéå
¬å¸æ£æµä¸å¿</p> |
| | | </td> |
| | | </tr> |
| | | <tr> |
| | | <td colspan="3"> |
| | | <p>å°åï¼æ±èçåéå¸ç»æµææ¯å¼ååºæ°å¼åè·¯ 19 å·</p> |
| | | </td> |
| | | </tr> |
| | | <tr> |
| | | <td colspan="3"> |
| | | <p>çµè¯ï¼0513-89059043</p> |
| | | </td> |
| | | </tr> |
| | | </table> |
| | | <p style="margin-top: 10px;margin-left: 20px;">æ³¨ï¼æ¬æ£éªå§æåä¸å¼äºä»½ï¼ä¸ä»½ç»¼å室彿¡£ï¼ä¸ä»½å§æåä½çåã</p> |
| | | </div> |
| | | </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> |
| | | </span> |
| | | </el-dialog> |
| | | <el-dialog :visible.sync="downloadDialog" title="ä¸è½½" width="600px"> |
| | | <span> |
| | | <el-button :loading="outLoading" plain type="primary" @click="orderReportDown">ä¸è½½å§æå</el-button> |
| | | <el-button :loading="outLoading" plain type="primary" @click="orderFormDown">ä¸è½½å§ææ¥å</el-button> |
| | | </span> |
| | | <span slot="footer" class="dialog-footer"> |
| | | <el-button @click="downloadDialog = false">å æ¶</el-button> |
| | | </span> |
| | | </el-dialog> |
| | | </div> |
| | | </template> |
| | | |
| | | <script> |
| | | import { |
| | | addInspectionOrder, delInspectionOrder, exportInspectionOrder, |
| | | getInsOrderOnInspection, getInspectionOrderByInsOderId, getInspectionOrderOne, |
| | | pageInspectionOrder, |
| | | updateInspectionOrder |
| | | } from "@/api/cnas/process/demand/demand"; |
| | | import limsTable from "@/components/Table/lims-table.vue"; |
| | | import Edit from './Edit.vue' |
| | | import { getInspectionOrder } from "@/api/cnas/process/demand/demand.js" |
| | | import {selectUserCondition} from "@/api/business/inspectionTask"; |
| | | |
| | | export default { |
| | | name: 'Demand', |
| | | components: { |
| | | limsTable, |
| | | Edit |
| | | }, |
| | | data() { |
| | | return { |
| | | queryParams: { |
| | | code: '' |
| | | }, |
| | | model: {}, |
| | | column: [ |
| | | { label: 'åºå·', minWidth: '100px' }, |
| | | { label: 'è¯æ ·åç§°', minWidth: '100px' }, |
| | | { label: 'å§æç¼å·' }, |
| | | { label: 'å§ææ¶é´' }, |
| | | { label: 'åå·' }, |
| | | { label: 'å§æåä½' }, |
| | | { label: 'ç产åä½' }, |
| | | { label: 'å§æäºº' }, |
| | | { label: 'æ ·åæ°é' }, |
| | | { label: 'æ ·åç¶æ' }, |
| | | { label: 'æ¯å¦çæ ·' }, |
| | | { label: 'æ ·åå¤çæ¹å¼' }, |
| | | { |
| | | dataType: "action", |
| | | fixed: "right", |
| | | label: "æä½", |
| | | operation: [ |
| | | { |
| | | name: "ç¼ è¾", |
| | | type: "text", |
| | | clickFun: (row) => { |
| | | this.$refs.editRef.openAddContracts(row) |
| | | } |
| | | } |
| | | ], |
| | | }, |
| | | ], |
| | | tableData: [], // è¡¨æ ¼æ°æ® |
| | | page: { |
| | | total: 0, |
| | | size: 10, |
| | | current: 1, |
| | | }, |
| | | } |
| | | }, |
| | | mounted() { |
| | | this.refreshTable() |
| | | }, |
| | | methods: { |
| | | /** |
| | | * @desc å·æ°è¡¨æ ¼ |
| | | */ |
| | | async refreshTable() { |
| | | await getInspectionOrder({ ...this.page }) |
| | | name: "a7-Inspection-Order-Form", |
| | | components: {limsTable}, |
| | | data() { |
| | | return { |
| | | title:'æ£éªå§æå', |
| | | detailDialogVisible:false, |
| | | addLoading:false, |
| | | outLoading:false, |
| | | currentInfo:{ |
| | | orderDetailList: [] |
| | | }, |
| | | personList:[], |
| | | insStateList:[ |
| | | { |
| | | label: 'å¾
å®¡æ ¸', |
| | | value: 0 |
| | | }, { |
| | | label: 'å¾
æ£éª', |
| | | value: 1 |
| | | }, |
| | | /** |
| | | * @desc æå¼æ¨¡ææ¡ |
| | | */ |
| | | openDialog(type) { |
| | | this.$refs.editRef.open(type) |
| | | } |
| | | { |
| | | label: 'å·²æ£éª', |
| | | value: 4 |
| | | }, |
| | | { |
| | | label: 'éå', |
| | | value: 2 |
| | | }, |
| | | { |
| | | label: 'æ¤é', |
| | | value: 3 |
| | | }, |
| | | ], |
| | | operationType: '', |
| | | orderRowsVisible: false, |
| | | tableList: [], |
| | | tableListLoading: false, |
| | | pages: { |
| | | current: 1, |
| | | size: 20, |
| | | }, |
| | | tableData: [], |
| | | tableLoading: false, |
| | | tableSearch: { |
| | | current: 1, |
| | | size: 20, |
| | | }, |
| | | total: 0, |
| | | total1: 0, |
| | | entity: { |
| | | entrustCode: '' |
| | | }, |
| | | entitySearch: { |
| | | sampleName: '', |
| | | commissionUnit: '', |
| | | production: '', |
| | | commissionUser: '', |
| | | }, |
| | | buttonLoading: false, |
| | | downloadDialog: false, |
| | | download: {}, |
| | | }; |
| | | }, |
| | | mounted() { |
| | | // this.getPower() |
| | | this.getAuthorizedPerson() |
| | | this.refreshTable() |
| | | }, |
| | | computed: { |
| | | action() { |
| | | return this.javaApi + '/inspectionOrder/uploadInspectionOrderFile' |
| | | } |
| | | }, |
| | | methods: { |
| | | addOrderDetailList () { |
| | | if (this.currentInfo.orderDetailList == null) { |
| | | this.currentInfo.orderDetailList = [] |
| | | } |
| | | this.currentInfo.orderDetailList.push({ |
| | | sampleNumber: '', |
| | | testItem: '', |
| | | testStandard: '', |
| | | standardMethodList: '', |
| | | remark: '', |
| | | }) |
| | | }, |
| | | // æ¥è¯¢å表 |
| | | refreshTable() { |
| | | this.tableListLoading = true |
| | | pageInspectionOrder({ |
| | | ...this.pages, |
| | | ...this.entitySearch |
| | | }).then(res => { |
| | | this.tableListLoading = false |
| | | this.tableList = res.data.records |
| | | this.total1 = res.data.total |
| | | }).catch(err => { |
| | | this.tableListLoading = false |
| | | }) |
| | | }, |
| | | // éç½® |
| | | refresh() { |
| | | this.entitySearch = { |
| | | sampleName: '', |
| | | commissionUnit: '', |
| | | production: '', |
| | | commissionUser: '', |
| | | } |
| | | this.pages = { |
| | | current: 1, |
| | | size: 20, |
| | | } |
| | | this.refreshTable() |
| | | }, |
| | | // æå¼æ°å¢å¼¹æ¡ |
| | | goAdd () { |
| | | this.operationType = 'add' |
| | | this.title = 'æ°å¢æ£éªå§æå'; |
| | | this.orderRowsVisible = true |
| | | this.searchTableData() |
| | | }, |
| | | // æ¥è¯¢å¯æ°å¢çæ£éªå |
| | | searchTableData () { |
| | | this.tableLoading = true |
| | | getInsOrderOnInspection({ |
| | | ...this.tableSearch, |
| | | ...this.entity |
| | | }).then(res => { |
| | | this.tableLoading = false |
| | | this.tableData = res.data.records |
| | | this.total = res.data.total |
| | | }).catch(err => { |
| | | this.tableLoading = false |
| | | }) |
| | | }, |
| | | // éç½®æ£éªåå表 |
| | | refreshTableData () { |
| | | this.entity = { |
| | | entrustCode: '' |
| | | } |
| | | this.tableSearch = { |
| | | current: 1, |
| | | size: 20, |
| | | } |
| | | this.searchTableData() |
| | | }, |
| | | // æ£éªåå表å页 |
| | | handleSizeChange(val) { |
| | | this.tableSearch.size = val |
| | | this.searchTableData(); |
| | | }, |
| | | handleCurrentChange(val) { |
| | | this.tableSearch.current = val |
| | | this.searchTableData(); |
| | | }, |
| | | // å表å页 |
| | | handleSizeChange1(val) { |
| | | this.pages.size = val |
| | | this.refreshTable(); |
| | | }, |
| | | handleCurrentChange1(val) { |
| | | this.pages.current = val |
| | | this.refreshTable(); |
| | | }, |
| | | // æäº¤æ°å¢ |
| | | handleAdd () { |
| | | this.buttonLoading = true |
| | | addInspectionOrder(this.currentInfo).then(res => { |
| | | this.buttonLoading = false |
| | | this.$message.success('æ°å¢æå') |
| | | this.detailDialogVisible = false |
| | | this.orderRowsVisible = false |
| | | this.refreshTable() |
| | | }).catch(err => { |
| | | this.buttonLoading = false |
| | | }) |
| | | }, |
| | | // æäº¤ä¿®æ¹ |
| | | handleEdit () { |
| | | this.buttonLoading = true |
| | | updateInspectionOrder(this.currentInfo).then(res => { |
| | | this.buttonLoading = false |
| | | if (res.code === 201) return |
| | | this.$message.success('æ°å¢æå') |
| | | this.detailDialogVisible = false |
| | | this.orderRowsVisible = false |
| | | this.refreshTable() |
| | | }).catch(err => { |
| | | this.buttonLoading = false |
| | | }) |
| | | }, |
| | | // æ¥è¯¢éè¦æ°å¢çå§æå详æ
|
| | | goAddOrder (row) { |
| | | getInspectionOrderByInsOderId({insOrderId: row.id}).then(res => { |
| | | this.currentInfo = res.data |
| | | this.title = 'æ°å¢æ£éªå§æå'; |
| | | this.detailDialogVisible = true |
| | | }).catch(err => { |
| | | console.log('err----', err) |
| | | }) |
| | | }, |
| | | // æå¼ç¼è¾å¼¹æ¡ |
| | | goUpdate (row) { |
| | | this.operationType = 'edit' |
| | | getInspectionOrderOne({inspectionOrderId: row.inspectionOrderId}).then(res => { |
| | | this.currentInfo = res.data |
| | | this.title = 'ç¼è¾æ£éªå§æå'; |
| | | this.detailDialogVisible = true |
| | | }).catch(err => { |
| | | console.log('err----', err) |
| | | }) |
| | | }, |
| | | // æ¥ç |
| | | handleLook(row){ |
| | | this.operationType = 'view' |
| | | getInspectionOrderOne({inspectionOrderId: row.inspectionOrderId}).then(res => { |
| | | this.currentInfo = res.data |
| | | this.title = 'æ¥çæ£éªå§æå'; |
| | | this.detailDialogVisible = true |
| | | }).catch(err => { |
| | | console.log('err----', err) |
| | | }) |
| | | }, |
| | | // å é¤ |
| | | deleteOrder (row) { |
| | | this.$confirm('æ¤æä½å°æ°¸ä¹
å é¤è¯¥æ°æ®, æ¯å¦ç»§ç»?', 'æç¤º', { |
| | | confirmButtonText: 'ç¡®å®', |
| | | cancelButtonText: 'åæ¶', |
| | | type: 'warning' |
| | | }).then(() => { |
| | | delInspectionOrder({inspectionOrderId: row.inspectionOrderId}).then(res => { |
| | | this.$message.success('å 餿åï¼'); |
| | | this.refreshTable(); |
| | | }); |
| | | }).catch(() => { |
| | | this.$message({ |
| | | type: 'info', |
| | | message: '已忶å é¤' |
| | | }); |
| | | }); |
| | | }, |
| | | // æå¼ä¸è½½å¼¹æ¡ |
| | | openDownloadDia (row) { |
| | | this.downloadDialog = true |
| | | this.download = row |
| | | }, |
| | | // å§æåä¸è½½ |
| | | orderFormDown () { |
| | | let url = this.download.fileUrl; |
| | | const link = document.createElement('a'); |
| | | link.href = this.javaApi + url; |
| | | link.target = '_blank'; |
| | | document.body.appendChild(link); |
| | | link.click(); |
| | | }, |
| | | // å§ææ¥åä¸è½½ |
| | | orderReportDown () { |
| | | this.outLoading = true; |
| | | exportInspectionOrder({inspectionOrderId: this.download.inspectionOrderId}).then(res => { |
| | | 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; |
| | | }) |
| | | }, |
| | | // ä¸ä¼ |
| | | handleSuccessUp(response, ) { |
| | | if (response.code == 200) { |
| | | this.$message.success('ä¸ä¼ æå'); |
| | | this.refreshTable() |
| | | } |
| | | }, |
| | | beforeUpload(file) { |
| | | if (file.size > 1024 * 1024 * 10) { |
| | | this.$message.error('ä¸ä¼ æä»¶ä¸è¶
è¿10M'); |
| | | this.$refs.upload.clearFiles() |
| | | return false; |
| | | } else { |
| | | return true; |
| | | } |
| | | }, |
| | | onError(err, file, fileList) { |
| | | this.$message.error('ä¸ä¼ 失败') |
| | | this.$refs.upload.clearFiles() |
| | | }, |
| | | // 人åå表 |
| | | getAuthorizedPerson() { |
| | | selectUserCondition().then(res => { |
| | | let data = [] |
| | | res.data.forEach(a => { |
| | | data.push({ |
| | | label: a.name, |
| | | value: a.id |
| | | }) |
| | | }) |
| | | this.personList = data |
| | | }) |
| | | }, |
| | | |
| | | }, |
| | | } |
| | | </script> |
| | | </script> |
| | | |
| | | <style scoped> |
| | | </style> |
ÎļþÃû´Ó src/views/CNAS/process/ensureResultsValidity/components/carryOutDialog.vue ÐÞ¸Ä |
| | |
| | | import { |
| | | addQualityMonitorRatify, addQualityMonitorRatifyOpinion, |
| | | getQualityMonitorRatify |
| | | } from "@/api/cnas/process/ensureResultsValidity/qualityMonitor"; |
| | | } from "@/api/cnas/process/ensureResults/qualityMonitor"; |
| | | import {selectUserCondition} from "@/api/business/inspectionTask"; |
| | | |
| | | export default { |
ÎļþÃû´Ó src/views/CNAS/process/ensureResultsValidity/components/detailFormDialog.vue ÐÞ¸Ä |
| | |
| | | import { |
| | | addQualityMonitorDetail, |
| | | updateQualityMonitorDetail |
| | | } from "@/api/cnas/process/ensureResultsValidity/qualityMonitor"; |
| | | } from "@/api/cnas/process/ensureResults/qualityMonitor"; |
| | | |
| | | export default { |
| | | name: 'detailFormDialog', |
ÎļþÃû´Ó src/views/CNAS/process/ensureResultsValidity/components/evaluateDialog.vue ÐÞ¸Ä |
| | |
| | | import { |
| | | addMonitorEvaluateOpinion, addQualityMonitorEvaluate, |
| | | getQualityMonitorEvaluate |
| | | } from "@/api/cnas/process/ensureResultsValidity/qualityMonitor"; |
| | | } from "@/api/cnas/process/ensureResults/qualityMonitor"; |
| | | import {selectUserCondition} from "@/api/business/inspectionTask"; |
| | | import {selectUserDepartmentLimsName} from "@/api/system/user"; |
| | | |
ÎļþÃû´Ó src/views/CNAS/process/ensureResultsValidity/index.vue ÐÞ¸Ä |
| | |
| | | </div> |
| | | </div> |
| | | <lims-table :tableData="yearTableData" :column="yearColumnData" :page="yearPage" :tableLoading="yearLoading" |
| | | height="40vh" @pagination="pagination" |
| | | height="40vh" @pagination="pagination" :rowClick="rowClick" |
| | | key="yearTableData"></lims-table> |
| | | </div> |
| | | <div style="margin-top: 20px"> |
| | |
| | | examineQualityMonitor, exportQualityMonitorDetail, exportQualityMonitorEvaluate, exportQualityMonitorRatify, |
| | | pageQualityMonitor, pageQualityMonitorDetail, ratifyFinishReport, |
| | | ratifyQualityMonitor |
| | | } from "@/api/cnas/process/ensureResultsValidity/qualityMonitor"; |
| | | } from "@/api/cnas/process/ensureResults/qualityMonitor"; |
| | | import {selectUserCondition} from "@/api/performance/class"; |
| | | import {mapGetters} from "vuex"; |
| | | |
| | |
| | | this.uploading = false; |
| | | if (response.code == 200) { |
| | | this.$message.success('ä¸ä¼ æå'); |
| | | this.timer = setTimeout(() => { |
| | | this.uploadDia = false |
| | | this.fileList = [] |
| | | this.planYear = '' |
| | | this.examineUserId = '' |
| | | this.getYearPlanList() |
| | | }, 1000) |
| | | } else { |
| | | this.$message.error(response.msg) |
| | | } |
| | |
| | | return; |
| | | } |
| | | this.$refs.upload.submit(); |
| | | this.timer = setTimeout(() => { |
| | | this.uploadDia = false |
| | | this.fileList = [] |
| | | this.planYear = '' |
| | | this.examineUserId = '' |
| | | this.getYearPlanList() |
| | | }, 1000) |
| | | }, |
| | | // end |
| | | // å®¡æ ¸ |
¶Ô±ÈÐÂÎļþ |
| | |
| | | <template> |
| | | <div> |
| | | <el-dialog :close-on-click-modal="false" :close-on-press-escape="false" |
| | | :title="operationType === 'edit'? 'ç¼è¾' : 'æ°å¢'" |
| | | :visible.sync="formDia" |
| | | width="80%" @close="closeDia"> |
| | | <el-form ref="form" :model="form" :rules="rules" label-width="140px"> |
| | | <el-col :span="12"> |
| | | <el-form-item label="çç£æ¥æ" prop="superviseTime"> |
| | | <el-date-picker |
| | | v-model="form.superviseTime" |
| | | clearable |
| | | format="yyyy-MM" |
| | | placeholder="éæ©æ¥æ" |
| | | size="small" |
| | | style="width: 100%" |
| | | type="month" |
| | | value-format="yyyy-MM"> |
| | | </el-date-picker> |
| | | </el-form-item> |
| | | </el-col> |
| | | <el-col :span="12"> |
| | | <el-form-item label="çç£ç®ç" prop="supervisePurpose"> |
| | | <el-input v-model="form.supervisePurpose" clearable size="small"></el-input> |
| | | </el-form-item> |
| | | </el-col> |
| | | <el-col :span="12"> |
| | | <el-form-item label="çæ§é¡¹ç®" prop="superviseProject"> |
| | | <el-input v-model="form.superviseProject" clearable size="small"></el-input> |
| | | </el-form-item> |
| | | </el-col> |
| | | <el-col :span="12"> |
| | | <el-form-item label="被çç£äººå" prop="supervisedUserId"> |
| | | <el-select @change="usePersonName" v-model="form.supervisedUserId" 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="çç£åå " prop="superviseReason"> |
| | | <el-input v-model="form.superviseReason" clearable size="small"></el-input> |
| | | </el-form-item> |
| | | </el-col> |
| | | <el-col :span="12"> |
| | | <el-form-item label="夿³¨" prop="remark"> |
| | | <el-input v-model="form.remark" clearable size="small"></el-input> |
| | | </el-form-item> |
| | | </el-col> |
| | | </el-form> |
| | | <span slot="footer" class="dialog-footer"> |
| | | <el-button @click="closeDia">å æ¶</el-button> |
| | | <el-button :loading="upLoad" type="primary" @click="submitForm">ç¡® å®</el-button> |
| | | </span> |
| | | </el-dialog> |
| | | </div> |
| | | </template> |
| | | |
| | | <script> |
| | | import { |
| | | addQualitySuperviseDetail, |
| | | updateQualitySuperviseDetail |
| | | } from "@/api/cnas/process/ensureResults/qualitySupervise"; |
| | | import {selectUserCondition} from "@/api/business/inspectionTask"; |
| | | |
| | | export default { |
| | | name: 'detailFormDialog', |
| | | // import å¼å
¥çç»ä»¶éè¦æ³¨å
¥å°å¯¹è±¡ä¸æè½ä½¿ç¨ |
| | | components: {}, |
| | | props: ['superviseId'], |
| | | data() { |
| | | // è¿éåæ¾æ°æ® |
| | | return { |
| | | formDia: false, |
| | | form: { |
| | | qualityMonitorDetailsId: '', |
| | | superviseTime: '', |
| | | supervisePurpose: '', |
| | | superviseProject: '', |
| | | supervisee: '', |
| | | supervisedUserId: '', |
| | | superviseReason: '', |
| | | remark: '', |
| | | superviseDetailsId: '', |
| | | }, |
| | | rules: { |
| | | superviseTime: [{ required: true, message: '请è¾å
¥çç£æ¥æ', trigger: 'blur' }], |
| | | supervisePurpose: [{ required: true, message: '请è¾å
¥çç£ç®ç', trigger: 'blur' }], |
| | | superviseProject: [{ required: false, message: '请è¾å
¥çæ§é¡¹ç®', trigger: 'blur' }], |
| | | }, |
| | | upLoad: false, |
| | | operationType: '', |
| | | userList: [], |
| | | }; |
| | | }, |
| | | // æ¹æ³éå |
| | | methods: { |
| | | openDia(type, row) { |
| | | this.formDia = true |
| | | this.operationType = type |
| | | this.getUserList() |
| | | if (type === 'edit') { |
| | | this.searchInfo(row) |
| | | } |
| | | }, |
| | | usePersonName (value) { |
| | | const index = this.userList.findIndex(item => item.id === value) |
| | | if (index > -1) { |
| | | this.form.supervisee = this.userList[index].name |
| | | } |
| | | }, |
| | | searchInfo (row) { |
| | | this.form = {...row} |
| | | }, |
| | | // æäº¤è¡¨å |
| | | submitForm () { |
| | | this.$refs['form'].validate((valid) => { |
| | | if (valid) { |
| | | if (this.operationType === 'add') { |
| | | this.handleAdd() |
| | | } else { |
| | | this.handleEdit() |
| | | } |
| | | } |
| | | }) |
| | | }, |
| | | // æäº¤æ°å¢ |
| | | handleAdd () { |
| | | let entity = this.HaveJson(this.form) |
| | | entity.superviseId = this.superviseId |
| | | this.upLoad = true |
| | | addQualitySuperviseDetail(entity).then(res => { |
| | | this.upLoad = false |
| | | this.$message.success('æ°å¢æå') |
| | | this.closeDia() |
| | | }).catch(err => { |
| | | console.log('err---', err); |
| | | this.upLoad = false |
| | | }) |
| | | }, |
| | | // æäº¤ä¿®æ¹ |
| | | handleEdit () { |
| | | const entity = this.HaveJson(this.form) |
| | | this.upLoad = true |
| | | updateQualitySuperviseDetail(entity).then(res => { |
| | | this.upLoad = false |
| | | if (res.code === 201) return |
| | | this.$message.success('ä¿®æ¹æå') |
| | | this.closeDia() |
| | | }).catch(err => { |
| | | console.log('err---', err); |
| | | this.upLoad = false |
| | | }) |
| | | }, |
| | | // å
³éå¼¹æ¡ |
| | | closeDia () { |
| | | this.$refs.form.resetFields(); |
| | | this.formDia = false |
| | | this.$emit('closeDia') |
| | | }, |
| | | getUserList(){ |
| | | selectUserCondition({ type: 0 }).then((res) => { |
| | | this.userList = res.data; |
| | | }) |
| | | }, |
| | | } |
| | | }; |
| | | </script> |
| | | |
| | | <style scoped> |
| | | >>>.el-dialog__body { |
| | | max-height: 720px; |
| | | overflow-y: auto; |
| | | } |
| | | </style> |
¶Ô±ÈÐÂÎļþ |
| | |
| | | <template> |
| | | <div> |
| | | <el-dialog :close-on-click-modal="false" :close-on-press-escape="false" |
| | | :visible.sync="formDia" |
| | | title="ä¸ç¬¦å工使§å¶å" |
| | | width="60%" @close="closeProcessingDia"> |
| | | <el-steps :active="currentStep" align-center finish-status="success"> |
| | | <el-step title="ä¸ç¬¦å工使
åµè®°å½"></el-step> |
| | | <el-step title="æ¹å"></el-step> |
| | | </el-steps> |
| | | <div style="height: 510px;overflow-y: auto"> |
| | | <table border="1" cellspacing="10" class="tables"> |
| | | <tr> |
| | | <td class="td-title"> |
| | | <p>åçé¨é¨ï¼</p> |
| | | </td> |
| | | <td class="td-info"> |
| | | <el-input v-if="currentStep === 0" v-model="form.occurrenceDepartment" |
| | | placeholder="请è¾å
¥å
容" |
| | | size="small"> |
| | | </el-input> |
| | | <span v-if="currentStep !== 0" class="td-info1"> {{ form.occurrenceDepartment }}</span> |
| | | </td> |
| | | <td class="td-title"> |
| | | <p>é¨é¨è´è´£äººï¼</p> |
| | | </td> |
| | | <td class="td-info"> |
| | | <el-input v-if="currentStep === 0" v-model="form.headDepartment" |
| | | placeholder="请è¾å
¥å
容" |
| | | size="small"> |
| | | </el-input> |
| | | <span v-if="currentStep !== 0" class="td-info1"> {{ form.headDepartment }}</span> |
| | | </td> |
| | | </tr> |
| | | <tr> |
| | | <td class="td-title"> |
| | | <p><span class="required-span">* </span>ä¸ç¬¦åå·¥ä½åç°éå¾ï¼</p> |
| | | </td> |
| | | <td class="td-info" colspan="3"> |
| | | <el-radio-group v-model="form.findWay" v-removeAriaHidden :disabled="currentStep !== 0"> |
| | | <el-radio :label="0">管çè¯å®¡</el-radio> |
| | | <el-radio :label="1">å
é¨å®¡æ ¸</el-radio> |
| | | <el-radio :label="2">æ£æµè¿ç¨æ§å¶</el-radio> |
| | | <el-radio :label="3">å
é¨è´¨éæ§å¶</el-radio> |
| | | <el-radio :label="4">å
é¨çç£</el-radio> |
| | | <el-radio :label="5">å¤é¨è¯å®¡</el-radio> |
| | | <el-radio :label="6">å¤é¨æè¯</el-radio> |
| | | <el-radio :label="7">å
¶ä»</el-radio> |
| | | </el-radio-group> |
| | | </td> |
| | | </tr> |
| | | <tr> |
| | | <td class="td-title"> |
| | | <p>ä¸ç¬¦åå·¥ä½ç详ç»è®°å½ï¼</p> |
| | | </td> |
| | | <td class="td-info" colspan="3"> |
| | | <el-input v-if="currentStep === 0" v-model="form.recordDetail" |
| | | :rows="4" |
| | | placeholder="请è¾å
¥å
容" |
| | | size="small" |
| | | type="textarea"> |
| | | </el-input> |
| | | <span v-if="currentStep !== 0" class="td-info1"> {{ form.recordDetail }}</span> |
| | | </td> |
| | | </tr> |
| | | <tr> |
| | | <td class="td-title"> |
| | | <p>ä¸ç¬¦åå·¥ä½ç以ååæ¡æ¬¾å·ï¼</p> |
| | | </td> |
| | | <td class="td-info" colspan="3"> |
| | | <el-input v-if="currentStep === 0" v-model="form.recordAccording" |
| | | :rows="4" |
| | | placeholder="请è¾å
¥å
容" |
| | | size="small" |
| | | type="textarea"> |
| | | </el-input> |
| | | <span v-if="currentStep !== 0" class="td-info1"> {{ form.recordAccording }}</span> |
| | | </td> |
| | | </tr> |
| | | <tr> |
| | | <td class="td-title"> |
| | | <p><span class="required-span">* </span>被çç£äººï¼</p> |
| | | </td> |
| | | <td class="td-info"> |
| | | <!-- <el-select v-if="currentStep === 0" v-model="form.supervisedUserId" clearable--> |
| | | <!-- filterable--> |
| | | <!-- placeholder="è¯·éæ©" size="small">--> |
| | | <!-- <el-option v-for="(item,i) in supervisedUserList" :key="i" :label="item.label" :value="item.value">--> |
| | | <!-- </el-option>--> |
| | | <!-- </el-select>--> |
| | | <span class="td-info1"> {{ form.supervisedUserName }}</span> |
| | | </td> |
| | | <td class="td-title"> |
| | | <p><span class="required-span">* </span>被çç£æ¶é´ï¼</p> |
| | | </td> |
| | | <td class="td-info"> |
| | | <el-date-picker |
| | | v-if="currentStep === 0" |
| | | v-model="form.supervisedTime" |
| | | format="yyyy-MM-dd" |
| | | placeholder="éæ©æ¥æ" |
| | | size="small" |
| | | style="width: 80%" |
| | | type="date" |
| | | value-format="yyyy-MM-dd"> |
| | | </el-date-picker> |
| | | <span v-if="currentStep !== 0" class="td-info1"> {{ form.supervisedTime }}</span> |
| | | </td> |
| | | </tr> |
| | | <tr v-if="currentStep !== 0"> |
| | | <td class="td-title"> |
| | | <p>åç°é¨é¨ï¼</p> |
| | | </td> |
| | | <td class="td-info"> |
| | | {{form.foundDepartment}} |
| | | </td> |
| | | <td class="td-title"> |
| | | <p>æ¶é´ï¼</p> |
| | | </td> |
| | | <td class="td-info"> |
| | | {{form.recordTime}} |
| | | </td> |
| | | </tr> |
| | | <tr> |
| | | <td class="td-title" v-if="currentStep !== 0"> |
| | | <p>è®°å½äººï¼</p> |
| | | </td> |
| | | <td class="td-info" v-if="currentStep !== 0"> |
| | | {{form.recordUserName}} |
| | | </td> |
| | | <td class="td-title"> |
| | | <p>è®°å½æ¶é´ï¼</p> |
| | | </td> |
| | | <td class="td-info" v-if="currentStep === 0"> |
| | | <el-date-picker |
| | | v-model="form.recordTime" |
| | | format="yyyy-MM-dd" |
| | | placeholder="éæ©æ¥æ" |
| | | size="small" |
| | | style="width: 80%" |
| | | type="date" |
| | | value-format="yyyy-MM-dd"> |
| | | </el-date-picker> |
| | | </td> |
| | | <td class="td-info" v-if="currentStep !== 0"> |
| | | {{form.recordTime}} |
| | | </td> |
| | | </tr> |
| | | <tr> |
| | | <td class="td-title"> |
| | | <p><span class="required-span">* </span>æ¶é¤ä¸ç¬¦å工使éåçæªæ½ï¼</p> |
| | | </td> |
| | | <td class="td-info" colspan="3"> |
| | | <el-input v-if="currentStep === 0" v-model="form.eliminateMeasure" |
| | | :rows="5" |
| | | placeholder="请è¾å
¥å
容" |
| | | size="small" |
| | | type="textarea"> |
| | | </el-input> |
| | | <span v-if="currentStep !== 0" class="td-info1"> {{ form.eliminateMeasure }}</span> |
| | | </td> |
| | | </tr> |
| | | <tr> |
| | | <td class="td-title" v-if="currentStep !== 0"> |
| | | <p>å½åè´è´£äººï¼</p> |
| | | </td> |
| | | <td class="td-info" v-if="currentStep !== 0"> |
| | | {{form.actionsUserName}} |
| | | </td> |
| | | <td class="td-title"> |
| | | <p>å¤çæ¶é´ï¼</p> |
| | | </td> |
| | | <td class="td-info" v-if="currentStep === 0"> |
| | | <el-date-picker |
| | | v-model="form.actionsTime" |
| | | format="yyyy-MM-dd" |
| | | placeholder="éæ©æ¥æ" |
| | | size="small" |
| | | style="width: 80%" |
| | | type="date" |
| | | value-format="yyyy-MM-dd"> |
| | | </el-date-picker> |
| | | </td> |
| | | <td class="td-info" v-if="currentStep !== 0"> |
| | | {{form.actionsTime}} |
| | | </td> |
| | | </tr> |
| | | <tr> |
| | | <td class="td-title"> |
| | | <p><span class="required-span">* </span>æ¯å¦éè¦éåçº æ£æªæ½ï¼</p> |
| | | </td> |
| | | <td class="td-info" colspan="3"> |
| | | <el-radio-group v-model="form.isCorrect" v-removeAriaHidden :disabled="currentStep !== 0"> |
| | | <el-radio :label="0">å¦</el-radio> |
| | | <el-radio :label="1">æ¯</el-radio> |
| | | </el-radio-group> |
| | | </td> |
| | | </tr> |
| | | <tr> |
| | | <td class="td-title"> |
| | | <p>çº æ£æªæ½å¤çåè·è¸ªï¼</p> |
| | | </td> |
| | | <td class="td-info" colspan="3"> |
| | | <el-input v-if="currentStep === 0" v-model="form.correctContent" |
| | | :rows="5" |
| | | placeholder="请è¾å
¥å
容" |
| | | size="small" |
| | | type="textarea"> |
| | | </el-input> |
| | | <span v-if="currentStep !== 0" class="td-info1"> {{ form.correctContent }}</span> |
| | | </td> |
| | | </tr> |
| | | <tr> |
| | | <td class="td-title" v-if="currentStep !== 0"> |
| | | <p>å½åè´è´£äººï¼</p> |
| | | </td> |
| | | <td class="td-info" v-if="currentStep !== 0"> |
| | | {{form.correctUserName}} |
| | | </td> |
| | | <td class="td-title"> |
| | | <p>çº æ£å¡«åæ¶é´ï¼</p> |
| | | </td> |
| | | <td class="td-info" v-if="currentStep === 0"> |
| | | <el-date-picker |
| | | v-model="form.correctTime" |
| | | format="yyyy-MM-dd" |
| | | placeholder="éæ©æ¥æ" |
| | | size="small" |
| | | style="width: 80%" |
| | | type="date" |
| | | value-format="yyyy-MM-dd"> |
| | | </el-date-picker> |
| | | </td> |
| | | <td v-if="currentStep !== 0" class="td-info"> |
| | | {{form.correctTime}} |
| | | </td> |
| | | </tr> |
| | | <tr> |
| | | <td rowspan="3"> |
| | | <p>æ¯å¦éç¥å®¢æ·å坿¢å¤å·¥ä½</p> |
| | | </td> |
| | | </tr> |
| | | <tr> |
| | | <td class="td-title"> |
| | | <p><span class="required-span">* </span>éç¥å®¢æ·ï¼</p> |
| | | </td> |
| | | <td class="td-info" colspan="2"> |
| | | <el-radio-group v-model="form.notifyCustomer" v-removeAriaHidden :disabled="currentStep !== 0"> |
| | | <el-radio :label="0">å¦</el-radio> |
| | | <el-radio :label="1">æ¯</el-radio> |
| | | </el-radio-group> |
| | | </td> |
| | | </tr> |
| | | <tr> |
| | | <td class="td-title"> |
| | | <p><span class="required-span">* </span>æ¢å¤å·¥ä½ï¼</p> |
| | | </td> |
| | | <td class="td-info" colspan="2"> |
| | | <el-radio-group v-model="form.backToWork" v-removeAriaHidden :disabled="currentStep !== 0"> |
| | | <el-radio :label="0">å¦</el-radio> |
| | | <el-radio :label="1">æ¯</el-radio> |
| | | </el-radio-group> |
| | | </td> |
| | | </tr> |
| | | <tr> |
| | | <td class="td-title" v-if="currentStep !== 0"> |
| | | <p>å½åè´è´£äººï¼</p> |
| | | </td> |
| | | <td class="td-info" v-if="currentStep !== 0"> |
| | | {{form.qualityManagerUserName}} |
| | | </td> |
| | | <td class="td-title"> |
| | | <p>è´¨éè´è´£äººå¡«åæ¶é´ï¼</p> |
| | | </td> |
| | | <td class="td-info" v-if="currentStep === 0"> |
| | | <el-date-picker |
| | | v-model="form.qualityManagerTime" |
| | | format="yyyy-MM-dd" |
| | | placeholder="éæ©æ¥æ" |
| | | size="small" |
| | | style="width: 80%" |
| | | type="date" |
| | | value-format="yyyy-MM-dd"> |
| | | </el-date-picker> |
| | | </td> |
| | | <td v-if="currentStep !== 0" class="td-info"> |
| | | {{form.qualityManagerTime}} |
| | | </td> |
| | | </tr> |
| | | <tr v-if=" currentStep === 0"> |
| | | <td v-if="currentStep === 0" class="td-title"> |
| | | <p><span class="required-span">* </span>è¯·éæ©æ¹å人ï¼</p> |
| | | </td> |
| | | <td v-if="currentStep === 0" class="td-info" colspan="3"> |
| | | <el-select v-model="form.approverUserId" clearable filterable |
| | | placeholder="è¯·éæ©" size="small"> |
| | | <el-option v-for="(item,i) in personList" :key="i" :label="item.label" :value="item.value"> |
| | | </el-option> |
| | | </el-select> |
| | | </td> |
| | | </tr> |
| | | </table> |
| | | </div> |
| | | <span slot="footer" class="dialog-footer"> |
| | | <el-button @click="closeProcessingDia">å æ¶</el-button> |
| | | <el-button v-if="currentStep !== 2" :loading="editLoad" type="primary" @click="handleEdit">æ 交</el-button> |
| | | </span> |
| | | </el-dialog> |
| | | </div> |
| | | </template> |
| | | |
| | | <script> |
| | | import { |
| | | addEquipSuperviseDetailAccording, approverEquipSuperviseDetailAccording, |
| | | getSuperviseDetailAccording |
| | | } from "@/api/cnas/process/ensureResults/qualitySupervise"; |
| | | import {selectUserCondition} from "@/api/business/inspectionTask"; |
| | | |
| | | export default { |
| | | name: 'processingSheet', |
| | | // import å¼å
¥çç»ä»¶éè¦æ³¨å
¥å°å¯¹è±¡ä¸æè½ä½¿ç¨ |
| | | components: {}, |
| | | data() { |
| | | // è¿éåæ¾æ°æ® |
| | | return { |
| | | formDia: false, |
| | | currentStep: 0, |
| | | form: { |
| | | occurrenceDepartment: '', |
| | | headDepartment: '', |
| | | findWay: '', |
| | | recordDetail: '', |
| | | recordAccording: '', |
| | | supervisedUserId: '', |
| | | supervisedUserName: '', |
| | | supervisedTime: '', |
| | | actionsUserName: '', |
| | | eliminateMeasure: '', |
| | | // correctUserId: '', |
| | | correctUserName: '', |
| | | isCorrect: '', |
| | | // qualityManagerUserId: '', |
| | | correctContent: '', |
| | | superviseDetailsId: '', |
| | | superviseDetailsAccordingId: '', |
| | | flowType: '', |
| | | recordUserName: '', |
| | | recordTime: '', |
| | | foundDepartment: '', |
| | | actionsTime: '', |
| | | correctTime: '', |
| | | notifyCustomer: '', |
| | | backToWork: '', |
| | | qualityManagerUserName: '', |
| | | qualityManagerTime: '', |
| | | approverUserId: '', |
| | | approveId: '', |
| | | }, |
| | | editLoad: false, |
| | | personList: [], |
| | | supervisedUserList: [], |
| | | }; |
| | | }, |
| | | // æ¹æ³éå |
| | | methods: { |
| | | openDia (row) { |
| | | this.formDia = true |
| | | this.searchInfo(row) |
| | | this.form.superviseDetailsId = row.superviseDetailsId |
| | | this.form.approveId = row.approveId |
| | | this.getAuthorizedPerson() // è·å人åå表 |
| | | // this.getSupervisedUserList() // è·åå½åé¨é¨äººå |
| | | }, |
| | | // æ¥è¯¢çæ§è®¡å详æ
宿½ä¿¡æ¯ |
| | | searchInfo (row) { |
| | | this.form.qualityMonitorDetailsId = row.qualityMonitorDetailsId |
| | | getSuperviseDetailAccording({superviseDetailsId: row.superviseDetailsId}).then(res => { |
| | | this.form.supervisedUserId = res.data.supervisedUserId |
| | | this.form.supervisedUserName = res.data.supervisedUserName |
| | | if (res.data.superviseDetailsAccordingId === null) { |
| | | this.currentStep = 0 |
| | | } else { |
| | | this.form = res.data |
| | | if (res.data.isFinish === 0) { |
| | | if (res.data.approverUserId) { |
| | | this.currentStep = 1 |
| | | } |
| | | } else { |
| | | this.currentStep = 2 |
| | | } |
| | | } |
| | | }).catch(err => { |
| | | console.log('err---', err); |
| | | }) |
| | | }, |
| | | // æäº¤ |
| | | handleEdit () { |
| | | if (this.currentStep === 0) { |
| | | if (this.form.findWay === null) { |
| | | this.$message.warning('è¯·éæ©ä¸ç¬¦åå·¥ä½åç°éå¾') |
| | | return |
| | | } |
| | | if (!this.form.supervisedTime) { |
| | | this.$message.warning('è¯·éæ©è¢«çç£æ¶é´') |
| | | return |
| | | } |
| | | if (this.form.notifyCustomer === null) { |
| | | this.$message.warning('è¯·éæ©æ¯å¦éç¥å®¢æ·') |
| | | return |
| | | } |
| | | if (this.form.backToWork === null) { |
| | | this.$message.warning('è¯·éæ©æ¯å¦æ¢å¤å·¥ä½') |
| | | return |
| | | } |
| | | if (this.form.isCorrect === null) { |
| | | this.$message.warning('è¯·éæ©æ¯å¦éè¦éåçº æ£æªæ½') |
| | | return |
| | | } |
| | | if (!this.form.approverUserId) { |
| | | this.$message.warning('è¯·éæ©æ¹å人') |
| | | return |
| | | } |
| | | } |
| | | this.editLoad = true |
| | | this.form.flowType = this.currentStep |
| | | if (this.currentStep === 0) { |
| | | addEquipSuperviseDetailAccording(this.form).then(res => { |
| | | this.editLoad = false |
| | | if (res.code === 201) return |
| | | this.$message.success('æäº¤æå') |
| | | this.closeProcessingDia() |
| | | }).catch(err => { |
| | | console.log('err---', err); |
| | | this.editLoad = false |
| | | }) |
| | | } else { |
| | | approverEquipSuperviseDetailAccording(this.form).then(res => { |
| | | this.editLoad = false |
| | | if (res.code === 201) return |
| | | this.$message.success('æ¹åæå') |
| | | this.closeProcessingDia() |
| | | }).catch(err => { |
| | | console.log('err---', err); |
| | | this.editLoad = false |
| | | }) |
| | | } |
| | | }, |
| | | // å
³éå¼¹æ¡ |
| | | closeProcessingDia () { |
| | | this.formDia = false |
| | | this.$emit('closeProcessingDia') |
| | | }, |
| | | getAuthorizedPerson() { |
| | | selectUserCondition({ type: 1 }).then((res) => { |
| | | let data = []; |
| | | res.data.forEach((a) => { |
| | | data.push({ |
| | | label: a.name, |
| | | value: a.id, |
| | | }); |
| | | }); |
| | | this.personList = data; |
| | | }); |
| | | }, |
| | | // getSupervisedUserList () { |
| | | // this.$axios.get(this.$api.user.selectDepartmentLimsUserList).then(res => { |
| | | // let data = [] |
| | | // res.data.forEach(a => { |
| | | // data.push({ |
| | | // label: a.name, |
| | | // value: a.id |
| | | // }) |
| | | // }) |
| | | // this.supervisedUserList = data |
| | | // }) |
| | | // }, |
| | | } |
| | | }; |
| | | </script> |
| | | |
| | | <style scoped> |
| | | >>>.el-dialog { |
| | | margin: 20px auto 50px !important; |
| | | } |
| | | .tables { |
| | | table-layout: fixed; |
| | | width: 100%; |
| | | margin-top: 10px; |
| | | } |
| | | .td-title { |
| | | height: 40px; |
| | | width: 170px; |
| | | text-align: center; |
| | | font-size: 14px; |
| | | word-wrap: break-word; |
| | | white-space: normal; |
| | | padding: 6px; |
| | | } |
| | | .td-info { |
| | | padding: 6px; |
| | | } |
| | | .td-info1 { |
| | | display: inline-block; |
| | | width: 100%; |
| | | text-align: left; |
| | | font-size: 14px; |
| | | word-wrap: break-word; |
| | | white-space: normal; |
| | | } |
| | | </style> |
¶Ô±ÈÐÂÎļþ |
| | |
| | | <template> |
| | | <div> |
| | | <el-dialog :close-on-click-modal="false" :close-on-press-escape="false" |
| | | :visible.sync="formDia" |
| | | title="æ£æµå·¥ä½çç£è®°å½è¡¨" |
| | | width="70%" @close="closeRecordsDia"> |
| | | <el-steps :active="currentStep" align-center finish-status="success"> |
| | | <el-step title="宿½"></el-step> |
| | | <el-step title="æ¹å"></el-step> |
| | | </el-steps> |
| | | <div style="height: 470px;overflow-y: auto"> |
| | | <table border="1" cellspacing="10" class="tables"> |
| | | <tr> |
| | | <td class="td-title"> |
| | | <p><span class="required-span">* </span>æ£æµäººåï¼</p> |
| | | </td> |
| | | <td colspan="2"> |
| | | <el-input v-if="currentStep === 0" v-model="form.testMember" |
| | | placeholder="请è¾å
¥å
容" |
| | | size="small"> |
| | | </el-input> |
| | | <span v-else class="td-info"> {{ form.testMember }}</span> |
| | | </td> |
| | | <td class="td-title"> |
| | | <p><span class="required-span">* </span>çç£åï¼</p> |
| | | </td> |
| | | <td colspan="2"> |
| | | <el-select v-if="currentStep === 0" @change="usePersonName" v-model="form.supervisorId" placeholder="è¯·éæ©" size="small" style="width: 100%"> |
| | | <el-option v-for="item in recordUserList" :key="item.userId" :label="item.userName" :value="item.userId"></el-option> |
| | | </el-select> |
| | | <span v-else class="td-info"> {{ form.supervisor }}</span> |
| | | </td> |
| | | </tr> |
| | | <tr> |
| | | <td class="td-title"> |
| | | <p><span class="required-span">* </span>æ£æµé¡¹ç®ï¼</p> |
| | | </td> |
| | | <td> |
| | | <el-input v-if="currentStep === 0" v-model="form.testItem" |
| | | placeholder="请è¾å
¥å
容" |
| | | size="small"> |
| | | </el-input> |
| | | <span v-else class="td-info"> {{ form.testItem }}</span> |
| | | </td> |
| | | <td class="td-title"> |
| | | <p><span class="required-span">* </span>æ ·åç¼å·ï¼</p> |
| | | </td> |
| | | <td> |
| | | <el-input v-if="currentStep === 0" v-model="form.sampleNumber" |
| | | placeholder="请è¾å
¥å
容" |
| | | size="small"> |
| | | </el-input> |
| | | <span v-else class="td-info"> {{ form.sampleNumber }}</span> |
| | | </td> |
| | | <td class="td-title"> |
| | | <p><span class="required-span">* </span>æ£æµæ¥æï¼</p> |
| | | </td> |
| | | <td> |
| | | <el-input v-if="currentStep === 0" v-model="form.testDate" |
| | | placeholder="请è¾å
¥å
容" |
| | | size="small"> |
| | | </el-input> |
| | | <span v-else class="td-info"> {{ form.testDate }}</span> |
| | | </td> |
| | | </tr> |
| | | <tr> |
| | | <td class="td-title"> |
| | | <p><span class="required-span">* </span>人åï¼</p> |
| | | </td> |
| | | <td colspan="5"> |
| | | <el-input v-if="currentStep === 0" v-model="form.personnel" |
| | | placeholder="请è¾å
¥å
容" |
| | | size="small"> |
| | | </el-input> |
| | | <span v-else class="td-info"> {{ form.personnel }}</span> |
| | | </td> |
| | | </tr> |
| | | <tr> |
| | | <td class="td-title"> |
| | | <p><span class="required-span">* </span>仪å¨è®¾å¤ï¼</p> |
| | | </td> |
| | | <td colspan="5"> |
| | | <el-input v-if="currentStep === 0" v-model="form.device" |
| | | placeholder="请è¾å
¥å
容" |
| | | size="small"> |
| | | </el-input> |
| | | <span v-else class="td-info"> {{ form.device }}</span> |
| | | </td> |
| | | </tr> |
| | | <tr> |
| | | <td class="td-title"> |
| | | <p><span class="required-span">* </span>å·¥ä½ç¯å¢ï¼</p> |
| | | </td> |
| | | <td colspan="5"> |
| | | <el-input v-if="currentStep === 0" v-model="form.environment" |
| | | placeholder="请è¾å
¥å
容" |
| | | size="small"> |
| | | </el-input> |
| | | <span v-else class="td-info"> {{ form.environment }}</span> |
| | | </td> |
| | | </tr> |
| | | <tr> |
| | | <td class="td-title"> |
| | | <p><span class="required-span">* </span>æ ·åééï¼</p> |
| | | </td> |
| | | <td colspan="5"> |
| | | <el-input v-if="currentStep === 0" v-model="form.sampleCollection" |
| | | placeholder="请è¾å
¥å
容" |
| | | size="small"> |
| | | </el-input> |
| | | <span v-else class="td-info"> {{ form.sampleCollection }}</span> |
| | | </td> |
| | | </tr> |
| | | <tr> |
| | | <td class="td-title"> |
| | | <p><span class="required-span">* </span>æ ·åçåå¤ï¼</p> |
| | | </td> |
| | | <td colspan="5"> |
| | | <el-input v-if="currentStep === 0" v-model="form.samplePreparation" |
| | | placeholder="请è¾å
¥å
容" |
| | | size="small"> |
| | | </el-input> |
| | | <span v-else class="td-info"> {{ form.samplePreparation }}</span> |
| | | </td> |
| | | </tr> |
| | | <tr> |
| | | <td class="td-title"> |
| | | <p><span class="required-span">* </span>æ£æµæ¹æ³ï¼</p> |
| | | </td> |
| | | <td colspan="5"> |
| | | <el-input v-if="currentStep === 0" v-model="form.detectionMethod" |
| | | placeholder="请è¾å
¥å
容" |
| | | size="small"> |
| | | </el-input> |
| | | <span v-else class="td-info"> {{ form.detectionMethod }}</span> |
| | | </td> |
| | | </tr> |
| | | <tr> |
| | | <td class="td-title"> |
| | | <p><span class="required-span">* </span>æ£æµè®°å½ï¼</p> |
| | | </td> |
| | | <td colspan="5"> |
| | | <el-input v-if="currentStep === 0" v-model="form.inspectionRecord" |
| | | placeholder="请è¾å
¥å
容" |
| | | size="small"> |
| | | </el-input> |
| | | <span v-else class="td-info"> {{ form.inspectionRecord }}</span> |
| | | </td> |
| | | </tr> |
| | | <tr> |
| | | <td class="td-title"> |
| | | <p><span class="required-span">* </span>æ£æµæ¥åï¼</p> |
| | | </td> |
| | | <td colspan="5"> |
| | | <el-input v-if="currentStep === 0" v-model="form.examiningReport" |
| | | placeholder="请è¾å
¥å
容" |
| | | size="small"> |
| | | </el-input> |
| | | <span v-else class="td-info"> {{ form.examiningReport }}</span> |
| | | </td> |
| | | </tr> |
| | | <tr> |
| | | <td class="td-title"> |
| | | <p><span class="required-span">* </span>çç£æ
åµè¯ä»·ï¼</p> |
| | | </td> |
| | | <td colspan="5"> |
| | | <el-input v-if="currentStep === 0" v-model="form.supervisionEvaluation" |
| | | :rows="4" |
| | | placeholder="请è¾å
¥å
容" |
| | | size="small" |
| | | type="textarea"> |
| | | </el-input> |
| | | <span v-else class="td-info"> {{ form.supervisionEvaluation }}</span> |
| | | </td> |
| | | </tr> |
| | | <tr> |
| | | <td class="td-title"> |
| | | <p><span class="required-span">* </span>ä¸ç¬¦åå¤çæè§ï¼</p> |
| | | </td> |
| | | <td colspan="5"> |
| | | <el-input v-if="currentStep === 0" v-model="form.handlingAdvice" |
| | | :rows="4" |
| | | placeholder="请è¾å
¥å
容" |
| | | size="small" |
| | | type="textarea"> |
| | | </el-input> |
| | | <span v-else class="td-info"> {{ form.handlingAdvice }}</span> |
| | | </td> |
| | | </tr> |
| | | <tr> |
| | | <td v-if="currentStep === 0" class="td-title"> |
| | | <p><span class="required-span">* </span>è¯·éæ©ä¸ä¸æ¥æ¹å人ï¼</p> |
| | | </td> |
| | | <td v-if="currentStep === 0" colspan="5"> |
| | | <el-select v-model="form.ratifyUserId" clearable filterable |
| | | placeholder="è¯·éæ©" size="small"> |
| | | <el-option v-for="(item,i) in personList" :key="i" :label="item.label" :value="item.value"> |
| | | </el-option> |
| | | </el-select> |
| | | </td> |
| | | <td v-if="currentStep === 1" class="td-title"> |
| | | <p>æ¹åè´è´£äººï¼</p> |
| | | </td> |
| | | <td v-if="currentStep === 1" class="td-info" colspan="5"> |
| | | {{form.ratifyUserName}} |
| | | </td> |
| | | </tr> |
| | | <tr v-if="currentStep === 1 || currentStep === 2"> |
| | | <td class="td-title"> |
| | | <p><span class="required-span">* </span>审æ¹ç»è®ºï¼</p> |
| | | </td> |
| | | <td colspan="2"> |
| | | <el-input v-if="currentStep === 1" |
| | | v-model="form.ratifyOpinion" |
| | | :rows="4" |
| | | placeholder="请è¾å
¥å
容" |
| | | size="small" |
| | | type="textarea"> |
| | | </el-input> |
| | | <span v-if="currentStep === 2" class="td-info"> {{ form.ratifyOpinion }}</span> |
| | | </td> |
| | | <td class="td-title"> |
| | | <p v-if="currentStep === 1">è¯·éæ©æ¯å¦ç¬¦åï¼</p> |
| | | <p v-if="currentStep === 2">æ¯å¦ç¬¦åï¼</p> |
| | | </td> |
| | | <td colspan="2"> |
| | | <el-radio-group v-if="currentStep === 1" v-model="form.isAccording"> |
| | | <el-radio :label="0">ä¸ç¬¦å</el-radio> |
| | | <el-radio :label="1">符å</el-radio> |
| | | </el-radio-group> |
| | | <span v-if="currentStep === 2" class="td-info"> {{ form.isAccording === 0 ? 'ä¸ç¬¦å' : '符å' }}</span> |
| | | </td> |
| | | </tr> |
| | | </table> |
| | | </div> |
| | | <span slot="footer" class="dialog-footer"> |
| | | <el-button @click="closeRecordsDia">å æ¶</el-button> |
| | | <el-button v-if="currentStep !== 2" :loading="editLoad" type="primary" @click="handleEdit">æ 交</el-button> |
| | | </span> |
| | | </el-dialog> |
| | | </div> |
| | | </template> |
| | | |
| | | <script> |
| | | import { |
| | | addSuperviseDetailRecord, |
| | | addSuperviseRecordOpinion, getRecordUser, |
| | | getSuperviseDetailRecord |
| | | } from "@/api/cnas/process/ensureResults/qualitySupervise"; |
| | | import {selectUserCondition} from "@/api/business/inspectionTask"; |
| | | |
| | | export default { |
| | | name: 'recordsDialog', |
| | | // import å¼å
¥çç»ä»¶éè¦æ³¨å
¥å°å¯¹è±¡ä¸æè½ä½¿ç¨ |
| | | components: {}, |
| | | data() { |
| | | // è¿éåæ¾æ°æ® |
| | | return { |
| | | formDia: false, |
| | | form: { |
| | | superviseDetailsId: '', |
| | | superviseDetailsRecordId: '', |
| | | testMember: '', |
| | | supervisor: '', |
| | | supervisorId: '', |
| | | testItem: '', |
| | | sampleNumber: '', |
| | | testDate: '', |
| | | personnel: '', |
| | | device: '', |
| | | environment: '', |
| | | sampleCollection: '', |
| | | samplePreparation: '', |
| | | detectionMethod: '', |
| | | inspectionRecord: '', |
| | | examiningReport: '', |
| | | supervisionEvaluation: '', |
| | | handlingAdvice: '', |
| | | ratifyUserId: '', |
| | | ratifyUserName: '', |
| | | ratifyOpinion: '', |
| | | isAccording: '', |
| | | }, |
| | | currentStep: 0, |
| | | editLoad: false, |
| | | personList: [], |
| | | recordUserList: [], |
| | | }; |
| | | }, |
| | | // æ¹æ³éå |
| | | methods: { |
| | | openDia(row) { |
| | | this.formDia = true |
| | | this.searchInfo(row) |
| | | this.getAuthorizedPerson() |
| | | }, |
| | | usePersonName (value) { |
| | | const index = this.recordUserList.findIndex(item => item.userId === value) |
| | | if (index > -1) { |
| | | this.form.supervisor = this.recordUserList[index].userName |
| | | } |
| | | }, |
| | | // æ¥è¯¢çç£è®¡å详æ
è®°å½æµç¨ä¿¡æ¯ |
| | | searchInfo (row) { |
| | | getSuperviseDetailRecord({superviseDetailsId: row.superviseDetailsId}).then(res => { |
| | | // æsuperviseDetailsRecordId说ææäº¤è¿è®°å½ |
| | | if (res.data.superviseDetailsRecordId) { |
| | | // æ¯å¦ç»æ0:æªç»æ, 1:å·²ç»æ |
| | | if (res.data.isFinish === 0) { |
| | | this.currentStep = 1 |
| | | } else if (res.data.isFinish === 1) { |
| | | this.currentStep = 2 |
| | | } |
| | | } else { |
| | | this.currentStep = 0 |
| | | } |
| | | this.form = res.data |
| | | this.form.superviseDetailsId = row.superviseDetailsId |
| | | this.getRecordUser() |
| | | }).catch(err => { |
| | | console.log('err---', err); |
| | | }) |
| | | }, |
| | | // æäº¤æµç¨ |
| | | handleEdit () { |
| | | if (!this.form.testMember || !this.form.supervisor || !this.form.testItem || !this.form.sampleNumber |
| | | || !this.form.testDate) { |
| | | this.$message.warning('请填å宿´') |
| | | return |
| | | } |
| | | if (this.currentStep === 0) { |
| | | this.addInfo() |
| | | } else { |
| | | this.editInfo() |
| | | } |
| | | }, |
| | | // æäº¤è®°å½ |
| | | addInfo () { |
| | | if (!this.form.ratifyUserId) { |
| | | this.$message.warning('è¯·éæ©ä¸ä¸æ¥æ¹å人') |
| | | return |
| | | } |
| | | this.editLoad = true |
| | | addSuperviseDetailRecord(this.form).then(res => { |
| | | this.editLoad = false |
| | | this.$message.success('æä½æå') |
| | | this.closeRecordsDia() |
| | | }).catch(err => { |
| | | console.log('err---', err); |
| | | this.editLoad = false |
| | | }) |
| | | }, |
| | | // æäº¤æ¹å |
| | | editInfo () { |
| | | if (!this.form.ratifyOpinion) { |
| | | this.$message.warning('请填åå®¡æ¹æè§') |
| | | return |
| | | } |
| | | if (this.form.isAccording === null) { |
| | | this.$message.warning('è¯·éæ©æ¯å¦ç¬¦å') |
| | | return |
| | | } |
| | | this.editLoad = true |
| | | addSuperviseRecordOpinion(this.form).then(res => { |
| | | this.editLoad = false |
| | | this.$message.success('æä½æå') |
| | | this.closeRecordsDia() |
| | | }).catch(err => { |
| | | console.log('err---', err); |
| | | this.editLoad = false |
| | | }) |
| | | }, |
| | | // å
³éå¼¹æ¡ |
| | | closeRecordsDia () { |
| | | this.formDia = false |
| | | this.$emit('closeRecordsDia') |
| | | }, |
| | | getAuthorizedPerson() { |
| | | selectUserCondition({ type: 1 }).then((res) => { |
| | | let data = []; |
| | | res.data.forEach((a) => { |
| | | data.push({ |
| | | label: a.name, |
| | | value: a.id, |
| | | }); |
| | | }); |
| | | this.personList = data; |
| | | }); |
| | | }, |
| | | getRecordUser () { |
| | | getRecordUser({superviseDetailsId: this.form.superviseDetailsId}).then(res => { |
| | | this.recordUserList = res.data |
| | | }) |
| | | }, |
| | | } |
| | | }; |
| | | </script> |
| | | |
| | | <style scoped> |
| | | .tables { |
| | | table-layout: fixed; |
| | | width: 100%; |
| | | margin-top: 10px; |
| | | } |
| | | .td-title { |
| | | height: 40px; |
| | | text-align: center; |
| | | font-size: 14px; |
| | | word-wrap: break-word; |
| | | white-space: normal; |
| | | padding: 6px; |
| | | } |
| | | .td-info { |
| | | text-align: center; |
| | | font-size: 14px; |
| | | word-wrap: break-word; |
| | | white-space: normal; |
| | | } |
| | | .tables td { |
| | | height: 40px; |
| | | font-size: 14px; |
| | | word-wrap: break-word; |
| | | white-space: normal; |
| | | padding: 6px; |
| | | } |
| | | </style> |
¶Ô±ÈÐÂÎļþ |
| | |
| | | <template> |
| | | <div> |
| | | <el-dialog :close-on-click-modal="false" :close-on-press-escape="false" |
| | | :visible.sync="formDia" |
| | | title="çº æ£æªæ½å¤çå" |
| | | width="60%" @close="closeRectifyDia"> |
| | | <el-steps :active="currentStep" align-center finish-status="success"> |
| | | <el-step title="ä¸åæ ¼æå离äºå®çæè¿°" @click.native="setStep(0)"></el-step> |
| | | <el-step title="æ¹å" @click.native="setStep(2)"></el-step> |
| | | </el-steps> |
| | | <div style="height: 510px;overflow-y: auto"> |
| | | <table border="1" cellspacing="10" class="tables"> |
| | | <tr> |
| | | <td class="td-title"> |
| | | <p><span class="required-span">* </span>å¹è®è®¡åï¼</p> |
| | | </td> |
| | | <td class="td-info" colspan="3"> |
| | | <el-select v-model="form.personTrainingDetailedId" clearable filterable |
| | | style="width: 100%" |
| | | :disabled="currentStep !== 0" |
| | | placeholder="è¯·éæ©" size="small"> |
| | | <el-option v-for="item in yearTrainingDetailed" :key="item.id" :label="item.trainingObjectives" :value="item.id"> |
| | | </el-option> |
| | | </el-select> |
| | | </td> |
| | | </tr> |
| | | <tr> |
| | | <td class="td-title"> |
| | | <p><span class="required-span">* </span>ä¸åæ ¼æå离äºå®çæè¿°ï¼</p> |
| | | </td> |
| | | <td class="td-info" colspan="3"> |
| | | <el-input v-if="currentStep === 0" v-model="form.raiseResult" |
| | | :rows="2" |
| | | placeholder="请è¾å
¥å
容" |
| | | size="small" |
| | | type="textarea"> |
| | | </el-input> |
| | | <span v-if="currentStep !== 0" class="td-info1"> {{ form.raiseResult }}</span> |
| | | </td> |
| | | </tr> |
| | | <!-- <tr v-if="showStep === 0">--> |
| | | <!-- <td v-if="currentStep === 0" class="td-title">--> |
| | | <!-- <p><span class="required-span">* </span>è¯·éæ©ä¸ä¸æ¥è´è´£äººï¼</p>--> |
| | | <!-- </td>--> |
| | | <!-- <td v-if="currentStep === 0" class="td-info" colspan="3">--> |
| | | <!-- <el-select v-model="form.causeUserId" clearable filterable--> |
| | | <!-- placeholder="è¯·éæ©" size="small">--> |
| | | <!-- <el-option v-for="(item,i) in personList" :key="i" :label="item.label" :value="item.value">--> |
| | | <!-- </el-option>--> |
| | | <!-- </el-select>--> |
| | | <!-- </td>--> |
| | | <!-- </tr>--> |
| | | <tr v-if="currentStep !== 0"> |
| | | <td class="td-title"> |
| | | <p>æåºäººï¼</p> |
| | | </td> |
| | | <td class="td-info"> |
| | | {{form.raiseUserName}} |
| | | </td> |
| | | <td class="td-title"> |
| | | <p>æåºé¨é¨ï¼</p> |
| | | </td> |
| | | <td class="td-info"> |
| | | {{form.raiseDepartment}} |
| | | </td> |
| | | </tr> |
| | | <tr> |
| | | <td class="td-title"> |
| | | <p>æåºæ¥æï¼</p> |
| | | </td> |
| | | <td class="td-info" v-if="currentStep === 0"> |
| | | <el-date-picker |
| | | v-model="form.raiseTime" |
| | | format="yyyy-MM-dd" |
| | | placeholder="éæ©æ¥æ" |
| | | size="small" |
| | | style="width: 80%" |
| | | type="date" |
| | | value-format="yyyy-MM-dd"> |
| | | </el-date-picker> |
| | | </td> |
| | | <td class="td-info" colspan="3" v-if="currentStep !== 0"> |
| | | {{form.raiseTime}} |
| | | </td> |
| | | </tr> |
| | | <tr> |
| | | <td class="td-title"> |
| | | <p><span class="required-span">* </span>åå åæï¼</p> |
| | | </td> |
| | | <td class="td-info" colspan="3"> |
| | | <el-input v-if="currentStep === 0" v-model="form.causeResult" |
| | | :rows="2" |
| | | placeholder="请è¾å
¥å
容" |
| | | size="small" |
| | | type="textarea"> |
| | | </el-input> |
| | | <span v-if="currentStep !== 0" class="td-info1"> {{ form.causeResult }}</span> |
| | | </td> |
| | | </tr> |
| | | <tr v-if="currentStep !== 0"> |
| | | <td class="td-title"> |
| | | <p>åå åæäººï¼</p> |
| | | </td> |
| | | <td class="td-info"> |
| | | {{form.causeUserName}} |
| | | </td> |
| | | <td class="td-title"> |
| | | <p>责任é¨é¨ï¼</p> |
| | | </td> |
| | | <td class="td-info"> |
| | | {{form.causeDepartment}} |
| | | </td> |
| | | </tr> |
| | | <tr> |
| | | <td class="td-title"> |
| | | <p>åå åææ¥æï¼</p> |
| | | </td> |
| | | <td class="td-info" colspan="3" v-if="currentStep === 0"> |
| | | <el-date-picker |
| | | v-model="form.causeTime" |
| | | format="yyyy-MM-dd" |
| | | placeholder="éæ©æ¥æ" |
| | | size="small" |
| | | style="width: 80%" |
| | | type="date" |
| | | value-format="yyyy-MM-dd"> |
| | | </el-date-picker> |
| | | </td> |
| | | <td class="td-info" colspan="3" v-if="currentStep !== 0"> |
| | | {{form.causeTime}} |
| | | </td> |
| | | </tr> |
| | | <!-- <tr v-if="showStep === 0">--> |
| | | <!-- <td v-if="currentStep === 0" class="td-title">--> |
| | | <!-- <p><span class="required-span">* </span>è¯·éæ©ä¸ä¸æ¥è´è´£äººï¼</p>--> |
| | | <!-- </td>--> |
| | | <!-- <td v-if="currentStep === 0" class="td-info" colspan="3">--> |
| | | <!-- <el-select v-model="form.correctUserId" clearable filterable--> |
| | | <!-- placeholder="è¯·éæ©" size="small">--> |
| | | <!-- <el-option v-for="(item,i) in personList" :key="i" :label="item.label" :value="item.value">--> |
| | | <!-- </el-option>--> |
| | | <!-- </el-select>--> |
| | | <!-- </td>--> |
| | | <!-- </tr>--> |
| | | <tr> |
| | | <td class="td-title"> |
| | | <p><span class="required-span">* </span>çº æ£æªæ½ï¼</p> |
| | | </td> |
| | | <td class="td-info" colspan="3"> |
| | | <el-input v-if="currentStep === 0" v-model="form.correctResult" |
| | | :rows="2" |
| | | placeholder="请è¾å
¥å
容" |
| | | size="small" |
| | | type="textarea"> |
| | | </el-input> |
| | | <span v-if="currentStep !== 0" class="td-info1"> {{ form.correctResult }}</span> |
| | | </td> |
| | | </tr> |
| | | <tr> |
| | | <td class="td-title"> |
| | | <p>æåºè¦æ±é¨é¨ç¡®è®¤ï¼</p> |
| | | </td> |
| | | <td class="td-info" colspan="3"> |
| | | <el-input v-if="currentStep === 0" v-model="form.raiseDepartmentAffirm" |
| | | :rows="2" |
| | | placeholder="请è¾å
¥å
容" |
| | | size="small" |
| | | type="textarea"> |
| | | </el-input> |
| | | <span v-if="currentStep !== 0" class="td-info1"> {{ form.raiseDepartmentAffirm }}</span> |
| | | </td> |
| | | </tr> |
| | | <tr v-if="currentStep !== 0"> |
| | | <td class="td-title"> |
| | | <p>çº æ£äººï¼</p> |
| | | </td> |
| | | <td class="td-info"> |
| | | {{form.correctUserName}} |
| | | </td> |
| | | <td class="td-title"> |
| | | <p>责任é¨é¨ï¼</p> |
| | | </td> |
| | | <td class="td-info"> |
| | | {{form.correctDepartment}} |
| | | </td> |
| | | </tr> |
| | | <tr> |
| | | <td class="td-title"> |
| | | <p>çº æ£æ¥æï¼</p> |
| | | </td> |
| | | <td class="td-info" v-if="currentStep === 0"> |
| | | <el-date-picker |
| | | v-model="form.correctTime" |
| | | format="yyyy-MM-dd" |
| | | placeholder="éæ©æ¥æ" |
| | | size="small" |
| | | style="width: 80%" |
| | | type="date" |
| | | value-format="yyyy-MM-dd"> |
| | | </el-date-picker> |
| | | </td> |
| | | <td class="td-info" colspan="3" v-if="currentStep !== 0"> |
| | | {{form.correctTime}} |
| | | </td> |
| | | </tr> |
| | | <tr> |
| | | <td class="td-title"> |
| | | <p><span class="required-span">* </span>宿½éªè¯ç»æï¼</p> |
| | | </td> |
| | | <td class="td-info" colspan="3"> |
| | | <el-input v-if="currentStep === 0" v-model="form.validationResult" |
| | | :rows="2" |
| | | placeholder="请è¾å
¥å
容" |
| | | size="small" |
| | | type="textarea"> |
| | | </el-input> |
| | | <span v-if="currentStep !== 0" class="td-info1"> {{ form.validationResult }}</span> |
| | | </td> |
| | | </tr> |
| | | <tr v-if="currentStep !== 0"> |
| | | <td class="td-title"> |
| | | <p>éªè¯äººï¼</p> |
| | | </td> |
| | | <td class="td-info"> |
| | | {{form.validationUserName}} |
| | | </td> |
| | | <td class="td-title"> |
| | | <p>责任é¨é¨ï¼</p> |
| | | </td> |
| | | <td class="td-info"> |
| | | {{form.validationDepartment}} |
| | | </td> |
| | | </tr> |
| | | <tr> |
| | | <td class="td-title"> |
| | | <p>éªè¯æ¥æï¼</p> |
| | | </td> |
| | | <td class="td-info" v-if="currentStep === 0"> |
| | | <el-date-picker |
| | | v-model="form.validationTime" |
| | | format="yyyy-MM-dd" |
| | | placeholder="éæ©æ¥æ" |
| | | size="small" |
| | | style="width: 80%" |
| | | type="date" |
| | | value-format="yyyy-MM-dd"> |
| | | </el-date-picker> |
| | | </td> |
| | | <td class="td-info" colspan="3" v-if="currentStep !== 0"> |
| | | {{form.validationTime}} |
| | | </td> |
| | | </tr> |
| | | <tr v-if="currentStep === 0"> |
| | | <td v-if="currentStep === 0" class="td-title"> |
| | | <p><span class="required-span">* </span>è¯·éæ©æ¹å人ï¼</p> |
| | | </td> |
| | | <td v-if="currentStep === 0" class="td-info" colspan="3"> |
| | | <el-select v-model="form.approverUserId" clearable filterable |
| | | placeholder="è¯·éæ©" size="small"> |
| | | <el-option v-for="(item,i) in personList" :key="i" :label="item.label" :value="item.value"> |
| | | </el-option> |
| | | </el-select> |
| | | </td> |
| | | </tr> |
| | | </table> |
| | | </div> |
| | | <span slot="footer" class="dialog-footer"> |
| | | <el-button @click="closeRectifyDia">å æ¶</el-button> |
| | | <el-button v-if="currentStep !== 2" :loading="editLoad" type="primary" @click="handleEdit">æ 交</el-button> |
| | | </span> |
| | | </el-dialog> |
| | | </div> |
| | | </template> |
| | | |
| | | <script> |
| | | import { |
| | | addEquipSuperviseDetailCorrect, approveEquipSuperviseDetailCorrect, |
| | | getSuperviseDetailCorrect |
| | | } from "@/api/cnas/process/ensureResults/qualitySupervise"; |
| | | import {selectUserCondition} from "@/api/business/inspectionTask"; |
| | | import {getThisYearTrainingDetailed} from "@/api/cnas/systemManagement/correctiveAction"; |
| | | |
| | | export default { |
| | | name: 'rectifyDialog', |
| | | // import å¼å
¥çç»ä»¶éè¦æ³¨å
¥å°å¯¹è±¡ä¸æè½ä½¿ç¨ |
| | | components: {}, |
| | | data() { |
| | | // è¿éåæ¾æ°æ® |
| | | return { |
| | | formDia: false, |
| | | currentStep: 0, |
| | | showStep: 0, |
| | | form: { |
| | | superviseDetailsId: '', |
| | | raiseResult: '', |
| | | vdeRaiseResult: '', |
| | | // causeUserId: '', |
| | | raiseUserName: '', |
| | | raiseDepartment: '', |
| | | raiseTime: '', |
| | | causeResult: '', |
| | | causeUserName: '', |
| | | causeDepartment: '', |
| | | causeTime: '', |
| | | // correctUserId: '', |
| | | correctResult: '', |
| | | raiseDepartmentAffirm: '', |
| | | correctUserName: '', |
| | | correctDepartment: '', |
| | | correctTime: '', |
| | | approverUserId: '', |
| | | validationResult: '', |
| | | validationUserName: '', |
| | | validationDepartment: '', |
| | | validationTime: '', |
| | | superviseDetailsCorrectId: '', |
| | | approveId: '', |
| | | personTrainingDetailedId: '', |
| | | }, |
| | | editLoad: false, |
| | | personList: [], |
| | | yearTrainingDetailed: [], |
| | | }; |
| | | }, |
| | | // æ¹æ³éå |
| | | methods: { |
| | | openDia (row) { |
| | | this.formDia = true |
| | | this.searchInfo(row) |
| | | this.form.superviseDetailsId = row.superviseDetailsId |
| | | this.form.approveId = row.approveId |
| | | this.getAuthorizedPerson() // è·å人åå表 |
| | | this.getYearTrainingDetailed() // è·åå¹è®è®¡å |
| | | }, |
| | | // æ¥è¯¢çæ§è®¡å详æ
宿½ä¿¡æ¯ |
| | | searchInfo (row) { |
| | | this.form.qualityMonitorDetailsId = row.qualityMonitorDetailsId |
| | | getSuperviseDetailCorrect({superviseDetailsId: row.superviseDetailsId}).then(res => { |
| | | if (res.data.superviseDetailsCorrectId === null) { |
| | | this.showStep = 0 |
| | | this.currentStep = 0 |
| | | } else { |
| | | this.form = res.data |
| | | if (res.data.isFinish === 0) { |
| | | if (res.data.approverUserId) { |
| | | this.showStep = 1 |
| | | this.currentStep = 1 |
| | | } |
| | | } else { |
| | | this.currentStep = 2 |
| | | this.showStep = 1 |
| | | } |
| | | } |
| | | }).catch(err => { |
| | | console.log('err---', err); |
| | | }) |
| | | }, |
| | | // æäº¤ |
| | | handleEdit () { |
| | | if (this.currentStep === 0) { |
| | | if (!this.form.raiseResult) { |
| | | this.$message.warning('请填åä¸åæ ¼æè¿°') |
| | | return |
| | | } |
| | | if (!this.form.causeResult) { |
| | | this.$message.warning('请填ååå åæ') |
| | | return |
| | | } |
| | | if (!this.form.correctResult) { |
| | | this.$message.warning('请填åçº æ£æªæ½') |
| | | return |
| | | } |
| | | if (!this.form.validationResult) { |
| | | this.$message.warning('请填å宿½éªè¯ç»æ') |
| | | return |
| | | } |
| | | } |
| | | this.editLoad = true |
| | | this.form.flowType = this.currentStep |
| | | if (this.currentStep === 0) { |
| | | addEquipSuperviseDetailCorrect(this.form).then(res => { |
| | | this.editLoad = false |
| | | if (res.code === 201) return |
| | | this.$message.success('æäº¤æå') |
| | | this.closeRectifyDia() |
| | | }).catch(err => { |
| | | console.log('err---', err); |
| | | this.editLoad = false |
| | | }) |
| | | } else { |
| | | approveEquipSuperviseDetailCorrect(this.form).then(res => { |
| | | this.editLoad = false |
| | | if (res.code === 201) return |
| | | this.$message.success('æ¹åæå') |
| | | this.closeRectifyDia() |
| | | }).catch(err => { |
| | | console.log('err---', err); |
| | | this.editLoad = false |
| | | }) |
| | | } |
| | | }, |
| | | // å
³éå¼¹æ¡ |
| | | closeRectifyDia () { |
| | | this.formDia = false |
| | | this.$emit('closeRectifyDia') |
| | | }, |
| | | setStep (step) { |
| | | this.showStep = step |
| | | }, |
| | | getAuthorizedPerson() { |
| | | selectUserCondition({ type: 1 }).then((res) => { |
| | | let data = []; |
| | | res.data.forEach((a) => { |
| | | data.push({ |
| | | label: a.name, |
| | | value: a.id, |
| | | }); |
| | | }); |
| | | this.personList = data; |
| | | }); |
| | | }, |
| | | getYearTrainingDetailed () { |
| | | getThisYearTrainingDetailed().then(res => { |
| | | this.yearTrainingDetailed = res.data |
| | | }) |
| | | }, |
| | | } |
| | | }; |
| | | </script> |
| | | |
| | | <style scoped> |
| | | >>>.el-dialog { |
| | | margin: 20px auto 50px !important; |
| | | } |
| | | .tables { |
| | | table-layout: fixed; |
| | | width: 100%; |
| | | margin-top: 10px; |
| | | } |
| | | .td-title { |
| | | height: 40px; |
| | | width: 170px; |
| | | text-align: center; |
| | | font-size: 14px; |
| | | word-wrap: break-word; |
| | | white-space: normal; |
| | | padding: 6px; |
| | | } |
| | | .td-info { |
| | | padding: 6px; |
| | | } |
| | | .td-info1 { |
| | | display: inline-block; |
| | | width: 100%; |
| | | text-align: left; |
| | | font-size: 14px; |
| | | word-wrap: break-word; |
| | | white-space: normal; |
| | | } |
| | | </style> |
¶Ô±ÈÐÂÎļþ |
| | |
| | | <template> |
| | | <!-- 7.7è´¨éçç£è®¡å--> |
| | | <div class="app-container"> |
| | | <div class="table-card"> |
| | | <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" |
| | | @keyup.enter.native="getYearPlanList"></el-input> |
| | | </el-form-item> |
| | | <el-form-item> |
| | | <el-button icon="el-icon-refresh" size="mini" @click="clearYear">é ç½®</el-button> |
| | | <el-button type="primary" icon="el-icon-search" size="mini" @click="getYearPlanList">æ¥ è¯¢</el-button> |
| | | </el-form-item> |
| | | </el-form> |
| | | <div> |
| | | <el-button size="small" type="primary" @click="record">导å
¥</el-button> |
| | | </div> |
| | | </div> |
| | | <lims-table :tableData="yearTableData" :column="yearColumnData" :page="yearPage" :tableLoading="yearLoading" |
| | | height="40vh" @pagination="pagination" :rowClick="rowClick" |
| | | key="yearTableData"></lims-table> |
| | | </div> |
| | | <div style="margin-top: 20px"> |
| | | <div style="display: flex;justify-content: space-between;"> |
| | | <el-form :model="yearDetailForm" ref="yearDetailForm" size="small" :inline="true"> |
| | | <el-form-item> |
| | | <el-radio-group v-model="yearDetailForm.causeType" @change="getYearDetailPlanList" size="small"> |
| | | <el-radio-button :label="1">宿çç£</el-radio-button> |
| | | <el-radio-button :label="2">卿çç£</el-radio-button> |
| | | </el-radio-group> |
| | | </el-form-item> |
| | | <el-form-item label="çæ§ç®ç" prop="supervisePurpose"> |
| | | <el-input v-model="yearDetailForm.supervisePurpose" placeholder="请è¾å
¥" size="small"></el-input> |
| | | </el-form-item> |
| | | <el-form-item label="çæ§é¡¹ç®" prop="superviseProject"> |
| | | <el-input v-model="yearDetailForm.superviseProject" placeholder="请è¾å
¥" size="small"></el-input> |
| | | </el-form-item> |
| | | <el-form-item> |
| | | <el-button icon="el-icon-refresh" size="mini" @click="clearDetail">é ç½®</el-button> |
| | | <el-button type="primary" icon="el-icon-search" size="mini" @click="getYearDetailPlanList">æ¥ è¯¢</el-button> |
| | | </el-form-item> |
| | | </el-form> |
| | | <div> |
| | | <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" |
| | | key="yearDetailTableData"></lims-table> |
| | | </div> |
| | | <!--æ°å¢ä¿®æ¹å¼¹æ¡--> |
| | | <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> |
| | | <!--ä¸ç¬¦åå¤çæµç¨å¼¹æ¡--> |
| | | <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> |
| | | <el-dialog :visible.sync="ratifyDialog" title="æ¹å" width="30%" @close="closeRatifyDia"> |
| | | <span> |
| | | æ¹å夿³¨ï¼ |
| | | <el-input v-model="ratifyInfo.ratifyRemark" type="textarea"></el-input> |
| | | </span> |
| | | <span slot="footer" class="dialog-footer"> |
| | | <el-button :loading="ratifyLoading" @click="handleRatify(0)">䏿¹å</el-button> |
| | | <el-button :loading="ratifyLoading" type="primary" @click="handleRatify(1)">æ¹ å</el-button> |
| | | </span> |
| | | </el-dialog> |
| | | <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> |
| | | <el-button plain type="primary" @click="supervisoryDown">çº æ£å导åº</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"> |
| | | <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" |
| | | 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-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-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' |
| | | :on-change="beforeUpload" :on-error="onError" :on-success="handleSuccessUp" drag |
| | | :data="{recordUserIds: recordUserIds1, superviseYear: superviseYear, ratifyUserId: ratifyUserId}" |
| | | name="file"> |
| | | <i class="el-icon-upload"></i> |
| | | <div class="el-upload__text">å°æä»¶æå°æ¤å¤ï¼æ<em>ç¹å»ä¸ä¼ </em></div> |
| | | </el-upload> |
| | | </div> |
| | | <span slot="footer" class="dialog-footer"> |
| | | <el-button @click="closeUploadDia">å æ¶</el-button> |
| | | <el-button :loading="uploading" type="primary" @click="submitUpload()">ä¸ ä¼ </el-button> |
| | | </span> |
| | | </el-dialog> |
| | | </div> |
| | | </template> |
| | | |
| | | <script> |
| | | import DetailFormDialog from './components/detailFormDialog.vue'; |
| | | import RecordsDialog from './components/recordsDialog.vue'; |
| | | import ProcessingSheet from './components/processingSheet.vue'; |
| | | import RectifyDialogNew from './components/rectifyDialogNew.vue'; |
| | | import limsTable from "@/components/Table/lims-table.vue"; |
| | | import { |
| | | delQualitySupervise, delQualitySuperviseDetail, |
| | | exportQualitySupervise, exportSuperviseDetailRecord, |
| | | pageQualitySupervise, pageQualitySuperviseDetail, |
| | | ratifyQualitySupervise, superviseDetailAccordingExport, |
| | | exportSuperviseDetaillCorrect |
| | | } from "@/api/cnas/process/ensureResults/qualitySupervise"; |
| | | import {selectUserCondition} from "@/api/business/inspectionTask"; |
| | | import {mapGetters} from "vuex"; |
| | | |
| | | export default { |
| | | name: 'a7-quality-control-plan', |
| | | // import å¼å
¥çç»ä»¶éè¦æ³¨å
¥å°å¯¹è±¡ä¸æè½ä½¿ç¨ |
| | | components: {limsTable, RectifyDialogNew, ProcessingSheet, RecordsDialog, DetailFormDialog}, |
| | | data() { |
| | | // è¿éåæ¾æ°æ® |
| | | return { |
| | | yearForm: { |
| | | superviseName: '', |
| | | }, |
| | | yearPage: { |
| | | current: 1, |
| | | size: 20, |
| | | total: 0 |
| | | }, |
| | | yearColumnData: [ |
| | | { |
| | | label: '计ååç§°', |
| | | prop: 'superviseName', |
| | | minWidth: '150px' |
| | | }, { |
| | | label: 'ç¼å¶äºº', |
| | | prop: 'writeUserName', |
| | | minWidth: '100' |
| | | }, { |
| | | label: 'ç¼å¶æ¥æ', |
| | | prop: 'writeTime', |
| | | minWidth: '160' |
| | | }, { |
| | | dataType: 'tag', |
| | | label: 'æ¹åç¶æ', |
| | | prop: 'ratifyStatus', |
| | | minWidth: '100', |
| | | formatData: (params) => { |
| | | if (params === 0) { |
| | | return '䏿¹å'; |
| | | } else if (params === 1) { |
| | | return 'æ¹å'; |
| | | } else { |
| | | return null; |
| | | } |
| | | }, |
| | | formatType: (params) => { |
| | | if (params === 0) { |
| | | return 'danger'; |
| | | } else if (params === 1) { |
| | | return 'success'; |
| | | } else { |
| | | return null; |
| | | } |
| | | } |
| | | },{ |
| | | label: 'æ¹åå
容', |
| | | prop: 'ratifyRemark', |
| | | minWidth: '100' |
| | | },{ |
| | | label: 'æ¹å人', |
| | | prop: 'ratifyUserName', |
| | | minWidth: '100' |
| | | },{ |
| | | label: 'æ¹åæ¥æ', |
| | | prop: 'ratifyTime', |
| | | minWidth: '160' |
| | | }, { |
| | | dataType: 'action', |
| | | minWidth: '170', |
| | | label: 'æä½', |
| | | fixed: 'right', |
| | | operation: [ |
| | | { |
| | | name: 'æ¹å', |
| | | type: 'text', |
| | | disabled: (row) => { |
| | | if (row.ratifyStatus === 1 || this.userId != row.ratifyUserId) { |
| | | return true |
| | | } else { |
| | | return false |
| | | } |
| | | }, |
| | | clickFun: (row) => { |
| | | this.approvalPlan(row) |
| | | } |
| | | }, |
| | | { |
| | | name: '导åº', |
| | | type: 'text', |
| | | clickFun: (row) => { |
| | | this.handleDown(row) |
| | | }, |
| | | disabled: (row) => { |
| | | if (row.ratifyStatus !== 1) { |
| | | return true |
| | | } else { |
| | | return false |
| | | } |
| | | }, |
| | | }, |
| | | { |
| | | name: 'å é¤', |
| | | type: 'text', |
| | | color: '#f56c6c', |
| | | clickFun: (row) => { |
| | | this.delPlan(row) |
| | | }, |
| | | disabled: (row) => { |
| | | if (row.ratifyStatus === 1) { |
| | | return true |
| | | } else { |
| | | return false |
| | | } |
| | | }, |
| | | } |
| | | ] |
| | | }], |
| | | yearTableData: [], // 年表 |
| | | yearLoading: false, |
| | | yearDetailForm: { |
| | | supervisePurpose: '', |
| | | superviseProject: '', |
| | | causeType: 1 |
| | | }, |
| | | yearDetailColumnData: [ |
| | | { |
| | | label: 'çç£æ¥æ', |
| | | prop: 'superviseTime', |
| | | minWidth: '150px' |
| | | }, { |
| | | label: 'çç£ç®ç', |
| | | prop: 'supervisePurpose', |
| | | minWidth: '150px', |
| | | showOverflowTooltip: true, |
| | | }, { |
| | | label: 'çæ§é¡¹ç®', |
| | | prop: 'superviseProject', |
| | | minWidth: '150px' |
| | | }, { |
| | | label: '被çç£äººå', |
| | | prop: 'supervisee', |
| | | minWidth: '150px' |
| | | }, { |
| | | label: 'çç£åå ', |
| | | prop: 'superviseReason', |
| | | minWidth: '150px' |
| | | },{ |
| | | label: '夿³¨', |
| | | prop: 'remark', |
| | | minWidth: '150px' |
| | | },{ |
| | | dataType: 'action', |
| | | width: '260', |
| | | label: 'æä½', |
| | | fixed: 'right', |
| | | operation: [ |
| | | { |
| | | name: 'ç¼è¾', |
| | | type: 'text', |
| | | clickFun: (row) => { |
| | | this.showDialog('edit', row) |
| | | } |
| | | }, |
| | | { |
| | | name: 'è®°å½', |
| | | type: 'text', |
| | | clickFun: (row) => { |
| | | this.records(row) |
| | | } |
| | | }, |
| | | { |
| | | name: 'å¤ç', |
| | | type: 'text', |
| | | clickFun: (row) => { |
| | | this.processing(row) |
| | | }, |
| | | disabled: (row) => { |
| | | if (row.isAccording === 1 || row.isAccording === null) { |
| | | return true |
| | | } else { |
| | | return false |
| | | } |
| | | }, |
| | | }, |
| | | { |
| | | name: 'çº æ£', |
| | | type: 'text', |
| | | clickFun: (row) => { |
| | | this.rectify(row) |
| | | }, |
| | | disabled: (row) => { |
| | | if (row.isAccording === 1 || row.isAccording === null || row.isCorrect === null || row.isCorrect === 0) { |
| | | return true |
| | | } else { |
| | | return false |
| | | } |
| | | }, |
| | | }, |
| | | { |
| | | name: '导åº', |
| | | type: 'text', |
| | | clickFun: (row) => { |
| | | this.openDownloadDia(row); |
| | | }, |
| | | }, |
| | | { |
| | | name: 'å é¤', |
| | | type: 'text', |
| | | color: '#f56c6c', |
| | | clickFun: (row) => { |
| | | this.delYearPlanDetail(row) |
| | | } |
| | | } |
| | | ] |
| | | } |
| | | ], |
| | | yearDetailTableData: [], // å¹´æç»è¡¨ |
| | | yearDetailLoading: false, |
| | | yearDetailPage: { |
| | | current: 1, |
| | | size: 20, |
| | | total: 0 |
| | | }, |
| | | superviseId: '', |
| | | formDia: false, |
| | | recordsDia: false, |
| | | processingDia: false, |
| | | rectifyDia: false, |
| | | ratifyDialog: false, |
| | | ratifyLoading: false, |
| | | ratifyInfo: {}, |
| | | downloadDialog: false, |
| | | download: {}, |
| | | uploadDia: false, |
| | | uploading: false, |
| | | fileList: [], |
| | | userList: [], |
| | | recordUserIds: [], |
| | | recordUserIds1: '', |
| | | superviseYear: '', |
| | | ratifyUserId: '', |
| | | }; |
| | | }, |
| | | mounted() { |
| | | this.getYearPlanList() |
| | | }, |
| | | // æ¹æ³éå |
| | | methods: { |
| | | // æ¥è¯¢å¹´åº¦è®¡å表 |
| | | getYearPlanList () { |
| | | const entity = { |
| | | superviseName: this.yearForm.superviseName, |
| | | } |
| | | const page = this.yearPage |
| | | this.yearLoading = true |
| | | pageQualitySupervise({ ...entity, ...page }).then(res => { |
| | | this.yearLoading = false |
| | | this.yearTableData = res.data.records |
| | | this.yearPage.total = res.data.total |
| | | if (this.yearTableData.length > 0) { |
| | | this.rowClick(this.yearTableData[0]) |
| | | } |
| | | }).catch(err => { |
| | | console.log('err---', err); |
| | | this.yearLoading = false |
| | | }) |
| | | }, |
| | | clearYear () { |
| | | this.yearForm.superviseName = '' |
| | | this.getYearPlanList() |
| | | }, |
| | | pagination({ page, limit }) { |
| | | this.yearPage.current = page; |
| | | this.yearPage.size = limit; |
| | | this.getYearPlanList(); |
| | | }, |
| | | pagination1({ page, limit }) { |
| | | this.yearDetailPage.current = page; |
| | | this.yearDetailPage.size = limit; |
| | | this.getYearPlanList(); |
| | | }, |
| | | // 导å
¥æµç¨ |
| | | beforeUpload(file) { |
| | | if (file.size > 1024 * 1024 * 10) { |
| | | this.$message.error('ä¸ä¼ æä»¶ä¸è¶
è¿10M'); |
| | | this.$refs.upload1.clearFiles() |
| | | return false; |
| | | } |
| | | }, |
| | | onError(err, file, fileList) { |
| | | this.$message.error('ä¸ä¼ 失败') |
| | | this.$refs.upload1.clearFiles() |
| | | }, |
| | | handleSuccessUp(response) { |
| | | this.uploading = false; |
| | | if (response.code == 200) { |
| | | this.$message.success('ä¸ä¼ æå'); |
| | | this.recordUserIds = [] |
| | | this.superviseYear = '' |
| | | this.fileList = [] |
| | | this.timer = setTimeout(() => { |
| | | this.closeUploadDia() |
| | | }, 1000) |
| | | } |
| | | }, |
| | | splitList (val) { |
| | | const string = this.HaveJson(val) |
| | | this.recordUserIds1 = string.join(','); |
| | | console.log(this.recordUserIds1) |
| | | }, |
| | | // æäº¤å¯¼å
¥ |
| | | submitUpload() { |
| | | if (!this.superviseYear) { |
| | | this.$message.warning('è¯·éæ©å¹´ä»½') |
| | | return; |
| | | } |
| | | if (this.recordUserIds.length === 0) { |
| | | this.$message.warning('è¯·éæ©çç£å') |
| | | return; |
| | | } |
| | | if (!this.ratifyUserId) { |
| | | this.$message.warning('è¯·éæ©æ¹å人') |
| | | return; |
| | | } |
| | | this.uploading = true |
| | | this.$refs.upload1.submit(); |
| | | }, |
| | | // å
³é导å
¥å¼¹æ¡ |
| | | closeUploadDia () { |
| | | this.uploadDia = false; |
| | | this.recordUserIds = [] |
| | | this.ratifyUserId = '' |
| | | this.superviseYear = '' |
| | | this.getYearPlanList() |
| | | }, |
| | | // æå¼æ¥åå¼¹æ¡ |
| | | record (row) { |
| | | this.uploadDia = true |
| | | this.getUserList() |
| | | }, |
| | | getUserList(){ |
| | | selectUserCondition({ type: 0 }).then((res) => { |
| | | this.userList = res.data; |
| | | }) |
| | | }, |
| | | // æ¹å |
| | | approvalPlan (row) { |
| | | this.ratifyDialog = true |
| | | this.ratifyInfo = row |
| | | }, |
| | | handleRatify (ratifyStatus) { |
| | | // æ¹åç¶æ , 0 ä¸éè¿, 1éè¿ |
| | | this.ratifyInfo.ratifyStatus = ratifyStatus |
| | | this.ratifyLoading = true |
| | | ratifyQualitySupervise(this.ratifyInfo).then(res => { |
| | | this.ratifyLoading = false |
| | | this.$message.success('æä½æå') |
| | | this.closeRatifyDia() |
| | | }).catch(err => { |
| | | console.log('err---', err); |
| | | this.ratifyLoading = false |
| | | }) |
| | | }, |
| | | closeRatifyDia () { |
| | | this.ratifyDialog = false |
| | | this.ratifyInfo.ratifyRemark = '' |
| | | this.getYearPlanList() |
| | | }, |
| | | // å¯¼åº |
| | | handleDown (row) { |
| | | exportQualitySupervise({superviseId: row.superviseId}).then(res => { |
| | | try { |
| | | 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); |
| | | } |
| | | }) |
| | | }, |
| | | // å é¤è¿åº¦è®¡å表 |
| | | delPlan (row) { |
| | | this.$confirm('æ¤æä½å°æ°¸ä¹
å é¤è¯¥æ°æ®, æ¯å¦ç»§ç»?', 'æç¤º', { |
| | | confirmButtonText: 'ç¡®å®', |
| | | cancelButtonText: 'åæ¶', |
| | | type: 'warning' |
| | | }).then(() => { |
| | | this.yearLoading = true |
| | | delQualitySupervise({superviseId: row.superviseId}).then(res => { |
| | | this.yearLoading = false |
| | | this.$message.success('å 餿å') |
| | | this.getYearPlanList() |
| | | }).catch(err => { |
| | | this.yearLoading = false |
| | | console.log('err---', err); |
| | | }) |
| | | }).catch(() => { |
| | | this.$message({ |
| | | type: 'info', |
| | | message: '已忶å é¤' |
| | | }); |
| | | }); |
| | | }, |
| | | // 年度计åè¡¨æ ¼ï¼ç¹å»è¡æ°æ®åå·æ°è¯¦æ
|
| | | rowClick(row) { |
| | | this.superviseId = row.superviseId |
| | | this.getYearDetailPlanList() |
| | | }, |
| | | // è·å年度æç»è¡¨ |
| | | getYearDetailPlanList () { |
| | | const entity = { |
| | | superviseId: this.superviseId, |
| | | supervisePurpose: this.yearDetailForm.supervisePurpose, |
| | | superviseProject: this.yearDetailForm.superviseProject, |
| | | causeType: this.yearDetailForm.causeType, |
| | | } |
| | | const page = this.yearDetailPage |
| | | this.yearDetailLoading = true |
| | | pageQualitySuperviseDetail({ ...entity, ...page }).then(res => { |
| | | this.yearDetailLoading = false |
| | | this.yearDetailTableData = res.data.records |
| | | this.yearDetailPage.total = res.data.total |
| | | }).catch(err => { |
| | | console.log('err---', err); |
| | | this.yearDetailLoading = false |
| | | }) |
| | | }, |
| | | // éç½®æç»è¡¨ |
| | | clearDetail () { |
| | | this.yearDetailForm = { |
| | | supervisePurpose: '', |
| | | superviseProject: '' |
| | | } |
| | | this.getYearDetailPlanList() |
| | | }, |
| | | // æå¼å¹´åº¦æç»æ°å¢ãä¿®æ¹å¼¹æ¡ |
| | | showDialog (type, row) { |
| | | this.formDia = true |
| | | this.$nextTick(() => { |
| | | this.$refs.formDia.openDia(type, row) |
| | | }) |
| | | }, |
| | | closeDia () { |
| | | this.formDia = false |
| | | this.getYearDetailPlanList() |
| | | }, |
| | | // è®°å½æµç¨ |
| | | records (row) { |
| | | this.recordsDia = true |
| | | this.$nextTick(() => { |
| | | this.$refs.recordsDia.openDia(row) |
| | | }) |
| | | }, |
| | | closeRecordsDia () { |
| | | this.recordsDia = false |
| | | this.getYearDetailPlanList() |
| | | }, |
| | | // ä¸ç¬¦åæµç¨å¼¹æ¡ |
| | | processing (row) { |
| | | this.processingDia = true |
| | | this.$nextTick(() => { |
| | | this.$refs.processingDia.openDia(row) |
| | | }) |
| | | }, |
| | | closeProcessingDia () { |
| | | this.processingDia = false |
| | | this.getYearDetailPlanList() |
| | | }, |
| | | // çº æ£æµç¨å¼¹æ¡ |
| | | rectify (row) { |
| | | this.rectifyDia = true |
| | | this.$nextTick(() => { |
| | | this.$refs.rectifyDia.openDia(row) |
| | | }) |
| | | }, |
| | | closeRectifyDia () { |
| | | this.rectifyDia = false |
| | | this.getYearDetailPlanList() |
| | | }, |
| | | // æå¼å¯¼åºå¼¹æ¡ |
| | | openDownloadDia (row) { |
| | | this.downloadDialog = true |
| | | this.download = row |
| | | }, |
| | | // 导åºè®°å½ |
| | | controlDown () { |
| | | 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); |
| | | }) |
| | | }, |
| | | // å¤çåå¯¼åº |
| | | processingDown () { |
| | | 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); |
| | | }) |
| | | }, |
| | | // çº æ£åå¯¼åº |
| | | supervisoryDown () { |
| | | exportSuperviseDetaillCorrect({superviseDetailsCorrectId: this.download.superviseDetailsCorrectId}).then(res => { |
| | | const blob = new Blob([res], { type: 'application/msword' }); |
| | | this.$download.saveAs(blob, 'çç£çº æ£æªæ½.docx') |
| | | this.$message.success('å¯¼åºæå') |
| | | }) |
| | | }, |
| | | // å é¤å¹´åº¦è¯¦æ
å表 |
| | | delYearPlanDetail (row) { |
| | | this.$confirm('æ¤æä½å°æ°¸ä¹
å é¤è¯¥æ°æ®, æ¯å¦ç»§ç»?', 'æç¤º', { |
| | | confirmButtonText: 'ç¡®å®', |
| | | cancelButtonText: 'åæ¶', |
| | | type: 'warning' |
| | | }).then(() => { |
| | | this.yearDetailLoading = true |
| | | delQualitySuperviseDetail({superviseDetailsId: row.superviseDetailsId}).then(res => { |
| | | this.yearDetailLoading = false |
| | | this.$message.success('å 餿å') |
| | | this.getYearDetailPlanList() |
| | | }).catch(err => { |
| | | this.yearDetailLoading = false |
| | | console.log('err---', err); |
| | | }) |
| | | }) |
| | | }, |
| | | }, |
| | | // ç¨äºä¸ä¼ æä»¶çä¿¡æ¯ |
| | | computed: { |
| | | action() { |
| | | return this.javaApi + '/qualitySupervise/importQualitySupervise' |
| | | }, |
| | | ...mapGetters(["userId"]), |
| | | }, |
| | | }; |
| | | </script> |
| | | |
| | | <style scoped> |
| | | .table-card { |
| | | background-color: #ffffff; |
| | | } |
| | | .flex_column { |
| | | display: flex; |
| | | height: 80vh; |
| | | flex-direction: column; |
| | | overflow: auto; |
| | | justify-content: space-between; |
| | | } |
| | | |
| | | .pagination { |
| | | display: flex; |
| | | justify-content: space-between |
| | | } |
| | | |
| | | .items_center { |
| | | display: flex; |
| | | align-items: center; |
| | | } |
| | | |
| | | .date_box { |
| | | margin: 0 5px; |
| | | } |
| | | |
| | | .search { |
| | | width: 150px; |
| | | padding: 0 16px; |
| | | } |
| | | </style> |
¶Ô±ÈÐÂÎļþ |
| | |
| | | <template> |
| | | <div class="uncertainty-evaluation"> |
| | | <div class="search"> |
| | | <div class="search_thing"> |
| | | <div class="search_label">æ¥ååç§°ï¼</div> |
| | | <div class="search_input"><el-input v-model="queryParams.reportName" clearable placeholder="请è¾å
¥" size="small" |
| | | @keyup.enter.native="refreshTable()"></el-input></div> |
| | | </div> |
| | | <div class="search_thing" style="padding-left: 30px;"> |
| | | <el-button size="small" @click="refresh()">é ç½®</el-button> |
| | | <el-button size="small" type="primary" @click="refreshTable()">æ¥ è¯¢</el-button> |
| | | </div> |
| | | <div class="btn"> |
| | | <el-button :loading="outLoading" size="small" style="margin-right: 16px;margin-top: 3px;" type="primary" |
| | | @click="handleDown0">导åº</el-button> |
| | | <el-upload ref='upload' :action="action" :headers="uploadHeader" :on-change="beforeUpload" :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-button :loading="upLoading" size="small" type="primary">导å
¥</el-button></el-upload> |
| | | </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="400px"> |
| | | <el-row> |
| | | <el-col :span="24" style="margin-bottom: 16px;"> |
| | | <div class="search_thing"> |
| | | <div class="search_label">è¯ä»·ï¼</div> |
| | | <div class="search_input"><el-input v-model="addInfo.note" clearable placeholder="请è¾å
¥" |
| | | size="small"></el-input></div> |
| | | </div> |
| | | </el-col> |
| | | <el-col :span="24" style="margin-bottom: 16px;"> |
| | | <div class="search_thing"> |
| | | <div class="search_label">æ¥æï¼</div> |
| | | <div class="search_input"> |
| | | <el-date-picker v-model="addInfo.evaluateTime" format="yyyy-MM-dd" placeholder="éæ©æ¥æ" size="small" |
| | | style="width: 100%;" type="date" value-format="yyyy-MM-dd"> |
| | | </el-date-picker> |
| | | </div> |
| | | </div> |
| | | </el-col> |
| | | </el-row> |
| | | <span slot="footer" class="dialog-footer"> |
| | | <el-button @click="addDialogVisible = false">å æ¶</el-button> |
| | | <el-button :loading="addLoading" type="primary" @click="handleAdd">ç¡® å®</el-button> |
| | | </span> |
| | | </el-dialog> |
| | | <el-dialog :visible.sync="lookDialogVisible" fullscreen title="æ¥çéä»¶" top="5vh" width="800px"> |
| | | <filePreview v-if="lookDialogVisible" :currentFile="{}" :fileUrl="javaApi + '/word/' + currentInfo.reportUrl" |
| | | style="max-height: 90vh;overflow-y: auto;" /> |
| | | </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"; |
| | | export default { |
| | | components: { |
| | | limsTable, |
| | | filePreview |
| | | }, |
| | | data() { |
| | | return { |
| | | addPower: false, |
| | | outPower: false, |
| | | outLoading: false, |
| | | upLoading: false, |
| | | addDialogVisible: false, |
| | | addInfo: {}, |
| | | addLoading: false, |
| | | currentInfo: {}, |
| | | lookDialogVisible: false, |
| | | queryParams: {}, |
| | | tableData: [], |
| | | column: [ |
| | | { label: "æ¥ååç§°", prop: "reportName" }, |
| | | { label: "è¯ä»·äºº", prop: "evaluateUserName" }, |
| | | { label: "è¯ä»·æ¥æ", prop: "evaluateTime" }, |
| | | { label: "夿³¨", prop: "note" }, |
| | | { |
| | | dataType: "action", |
| | | fixed: "right", |
| | | label: "æä½", |
| | | operation: [ |
| | | { |
| | | name: "è¯ä»·", |
| | | type: "text", |
| | | clickFun: (row) => { |
| | | this.handleTell(row); |
| | | }, |
| | | }, |
| | | { |
| | | name: "å é¤", |
| | | type: "text", |
| | | clickFun: (row) => { |
| | | this.handleDelete(row); |
| | | }, |
| | | }, |
| | | { |
| | | name: "ä¸è½½", |
| | | type: "text", |
| | | clickFun: (row) => { |
| | | this.handleDown(row); |
| | | }, |
| | | }, |
| | | { |
| | | name: "æ¥çéä»¶", |
| | | type: "text", |
| | | clickFun: (row) => { |
| | | this.handleLook(row); |
| | | }, |
| | | }, |
| | | ], |
| | | }, |
| | | ], |
| | | page: { |
| | | total: 0, |
| | | size: 10, |
| | | current: 0, |
| | | }, |
| | | tableLoading: false, |
| | | } |
| | | }, |
| | | // ç¨äºä¸ä¼ æä»¶çä¿¡æ¯ |
| | | computed: { |
| | | ...mapGetters(["userId"]), |
| | | action() { |
| | | return this.javaApi + '/processEvaluate/addProcessEvaluate' |
| | | } |
| | | }, |
| | | mounted() { |
| | | // this.entityCopy = this.HaveJson(this.componentData.entity); |
| | | this.getList() |
| | | }, |
| | | methods: { |
| | | getPower() { |
| | | let power = JSON.parse(sessionStorage.getItem('power')) |
| | | let up = false |
| | | let del = false |
| | | let add = false |
| | | let out = false |
| | | for (var i = 0; i < power.length; i++) { |
| | | if (power[i].menuMethod == 'doProcessEvaluate') { |
| | | up = true |
| | | } |
| | | if (power[i].menuMethod == 'addProcessEvaluate') { |
| | | add = true |
| | | } |
| | | if (power[i].menuMethod == 'delProcessEvaluate') { |
| | | del = true |
| | | } |
| | | if (power[i].menuMethod == 'exportProcessEvaluate') { |
| | | out = true |
| | | } |
| | | } |
| | | if (!del) { |
| | | this.componentData.do.splice(1, 1) |
| | | } |
| | | if (!up) { |
| | | this.componentData.do.splice(0, 1) |
| | | } |
| | | this.outPower = out |
| | | this.addPower = add |
| | | }, |
| | | handleDown0() { |
| | | this.outLoading = true |
| | | exportProcessEvaluate(this.queryParams).then(res => { |
| | | this.outLoading = false |
| | | if (res.code === 201) return |
| | | const blob = new Blob([res], { type: 'application/octet-stream' }); |
| | | this.$download.saveAs(blob, 'æµéä¸ç¡®å®åº¦çè¯å®.xlsx'); |
| | | }) |
| | | }, |
| | | handleDown(row) { |
| | | let url = this.javaApi + '/word/' + row.reportUrl |
| | | this.$download.saveAs(url, row.reportName); |
| | | }, |
| | | beforeUpload(file) { |
| | | if (file.size > 1024 * 1024 * 10) { |
| | | this.$message.error('ä¸ä¼ æä»¶ä¸è¶
è¿10M'); |
| | | this.$refs.upload.clearFiles() |
| | | return false; |
| | | } else { |
| | | // this.upLoading = true; |
| | | return true; |
| | | } |
| | | }, |
| | | onError(err, file, fileList) { |
| | | this.$message.error('ä¸ä¼ 失败') |
| | | this.$refs.upload.clearFiles() |
| | | }, |
| | | handleSuccessUp(response) { |
| | | this.upLoading = false; |
| | | if (response.code == 200) { |
| | | this.$message.success('ä¸ä¼ æå'); |
| | | this.refreshTable() |
| | | } |
| | | }, |
| | | handleTell(row) { |
| | | this.addInfo = row; |
| | | this.addDialogVisible = true; |
| | | }, |
| | | handleAdd() { |
| | | this.addLoading = true; |
| | | doProcessEvaluate({ |
| | | id: this.addInfo.id, |
| | | note: this.addInfo.note, |
| | | evaluateTime: this.addInfo.evaluateTime, |
| | | evaluateUser: this.userId |
| | | }).then((res) => { |
| | | this.addLoading = false; |
| | | if (res.code == 201) { |
| | | this.$message.error('è¯ä»·å¤±è´¥'); |
| | | return; |
| | | } |
| | | this.$message.success('è¯ä»·æå'); |
| | | this.addDialogVisible = false; |
| | | this.refreshTable() |
| | | }) |
| | | }, |
| | | getList() { |
| | | this.tableLoading = true; |
| | | let param = { ...this.queryParams, ...this.page }; |
| | | delete param.total; |
| | | pageProcessEvaluate({ ...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(); |
| | | }, |
| | | handleLook(row) { |
| | | this.currentInfo = row; |
| | | this.lookDialogVisible = true; |
| | | }, |
| | | handleDelete(row) { |
| | | this.$confirm("æ¯å¦å é¤è¯¥æ¡æ°æ®?", "æç¤º", { |
| | | confirmButtonText: "ç¡®å®", |
| | | cancelButtonText: "åæ¶", |
| | | type: "warning", |
| | | }) |
| | | .then(() => { |
| | | delProcessEvaluate({ id: row.id }).then((res) => { |
| | | if (res.code == 201) return; |
| | | this.$message.success("å 餿å"); |
| | | this.refresh(); |
| | | }); |
| | | }) |
| | | .catch(() => { }); |
| | | }, |
| | | } |
| | | } |
| | | </script> |
| | | |
| | | <style scoped> |
| | | .title { |
| | | height: 60px; |
| | | line-height: 60px; |
| | | } |
| | | |
| | | .search { |
| | | background-color: #fff; |
| | | height: 80px; |
| | | display: flex; |
| | | align-items: center; |
| | | position: relative; |
| | | } |
| | | |
| | | .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); |
| | | } |
| | | |
| | | .table { |
| | | background-color: #fff; |
| | | height: calc(100% - 60px - 80px - 10px - 40px); |
| | | padding: 20px; |
| | | } |
| | | |
| | | .btn { |
| | | position: absolute; |
| | | top: 16px; |
| | | right: 20px; |
| | | display: flex; |
| | | align-items: center; |
| | | } |
| | | </style> |
| | |
| | | <div> |
| | | <el-form :model="entity" ref="entity" size="small" :inline="true"> |
| | | <el-form-item label="å§æç¼å·" prop="entrustCode"> |
| | | <el-input size="small" placeholder="请è¾å
¥" clearable |
| | | v-model="entity.entrustCode" |
| | | @keyup.enter.native="refreshTable()"></el-input> |
| | | <el-input size="small" placeholder="请è¾å
¥" clearable v-model="entity.entrustCode" |
| | | @keyup.enter.native="refreshTable()"></el-input> |
| | | </el-form-item> |
| | | <el-form-item label="ä¸åç±»å«" prop="entrustCode"> |
| | | <el-select size="small" v-model="entity.typeSource" clearable style="width: 100%;" @change="refreshTable()"> |
| | |
| | | </el-form> |
| | | <div class="page_total"> |
| | | <span>æ»è®¡ä»»å¡æ°é:</span> |
| | | <span>{{page.total}}</span> |
| | | <span>{{ page.total }}</span> |
| | | </div> |
| | | </div> |
| | | <div> |
| | | <lims-table :tableData="tableData" :column="column" :page="page" :tableLoading="tableLoading" |
| | | :rowClassName="rowClassName" :height="'calc(100vh - 270px)'" @pagination="pagination" |
| | | key="tableData0"></lims-table> |
| | | :rowClassName="rowClassName" :height="'calc(100vh - 270px)'" @pagination="pagination" |
| | | key="tableData0"></lims-table> |
| | | </div> |
| | | <!--æ¥åæ¥ç--> |
| | | <el-dialog title="æ¥åæ¥ç" :visible.sync="issuedVisible" width="80vw" :modal-append-to-body="false" |
| | | :fullscreen="fullscreen"> |
| | | :fullscreen="fullscreen"> |
| | | <div class="full-screen"> |
| | | <i class="el-icon-full-screen" style="cursor: pointer;font-size: 18px" @click="fullscreen=true;" v-if="!fullscreen"></i> |
| | | <img src="@/assets/images/no-full.svg" alt="" v-else style="cursor: pointer;" @click="fullscreen=false;" > |
| | | <i class="el-icon-full-screen" style="cursor: pointer;font-size: 18px" @click="fullscreen = true;" |
| | | v-if="!fullscreen"></i> |
| | | <img src="@/assets/images/no-full.svg" alt="" v-else style="cursor: pointer;" @click="fullscreen = false;"> |
| | | </div> |
| | | <div style="height: 80vh;" v-if="issuedVisible"> |
| | | <onlyoffice ref="onlyoffice" :options="option" style="width: 100%;height: 100%;" /> |
| | |
| | | </el-dialog> |
| | | <el-dialog title="æ¥çéä»¶" :visible.sync="lookDialogVisible" width="800px" top="5vh" fullscreen> |
| | | <filePreview v-if="lookDialogVisible" :fileUrl="javaApi + '/word/' + currentInfo.tempUrlPdf" :currentFile="{}" |
| | | style="max-height: 90vh;overflow-y: auto;" /> |
| | | style="max-height: 90vh;overflow-y: auto;" /> |
| | | </el-dialog> |
| | | </div> |
| | | </template> |
| | |
| | | // import ShowInfo from "../do/b1-material-ins-order/showInfo.vue"; |
| | | import onlyoffice from "@/components/Onlyoffice/onlyoffice.vue"; |
| | | import limsTable from "@/components/Table/lims-table.vue"; |
| | | import {selectInsOrderPlanList, selectUserCondition} from "@/api/business/inspectionTask"; |
| | | import {mapGetters} from "vuex"; |
| | | import {upReportUrl} from "@/api/business/insReport"; |
| | | import { selectInsOrderPlanList, selectUserCondition } from "@/api/business/inspectionTask"; |
| | | import { mapGetters } from "vuex"; |
| | | import { upReportUrl } from "@/api/business/insReport"; |
| | | import filePreview from "@/components/Preview/filePreview.vue"; |
| | | |
| | | export default { |
| | |
| | | upIndex: 0, |
| | | planTotal: 0, |
| | | insStateList: [], |
| | | state:0,//0:å°è´¦é¡µï¼1ï¼æ£éªé¡µé¢,2æ£éªé¡µé¢(夿 ¸)ï¼é»è®¤ä¸º0 |
| | | state: 0,//0:å°è´¦é¡µï¼1ï¼æ£éªé¡µé¢,2æ£éªé¡µé¢(夿 ¸)ï¼é»è®¤ä¸º0 |
| | | activeFace: 0, //1ï¼ä¸åï¼2ï¼æ¥çï¼3ï¼å®¡æ ¸ï¼é»è®¤ä¸º0 |
| | | examine: null, |
| | | isReport: 0, |
| | | currentId: null, |
| | | orderId: 0, |
| | | personList:[], |
| | | personList: [], |
| | | currentTime: null, |
| | | sonLaboratoryList:[], |
| | | sonLaboratoryList: [], |
| | | typeSourceList: [ |
| | | {label: 'æåä¸å', value: 0}, |
| | | {label: 'åææä¸å', value: 1}, |
| | | { label: 'æåä¸å', value: 0 }, |
| | | { label: 'åææä¸å', value: 1 }, |
| | | ], |
| | | isCopper: null, |
| | | customsInspection: {}, |
| | |
| | | showInfoDialog: false, // 产ä¸é¾ä¿¡æ¯æ¥ç |
| | | issuedVisible: false, |
| | | fullscreen: false, |
| | | option:null, |
| | | option: null, |
| | | orderTypeList: [ |
| | | {label: 'å§æè¯éª', value: 'Customer-ordered test'}, |
| | | {label: 'æ½æ£', value: 'æ½æ£'}, |
| | | {label: 'è¿åæ£éª', value: 'è¿åæ£éª'}, |
| | | {label: 'å£åº¦æ£éª', value: 'Quarterly inspection'}, |
| | | { label: 'å§æè¯éª', value: 'Customer-ordered test' }, |
| | | { label: 'æ½æ£', value: 'æ½æ£' }, |
| | | { label: 'è¿åæ£éª', value: 'è¿åæ£éª' }, |
| | | { label: 'å£åº¦æ£éª', value: 'Quarterly inspection' }, |
| | | ], |
| | | urgencyLevel: [], |
| | | inspectionTaskState: [], |
| | |
| | | } |
| | | }, |
| | | // 夿 ¸åè° |
| | | handleReview(row){ |
| | | handleReview(row) { |
| | | this.$router.push({ |
| | | path: "/inspectionTask/inspection", |
| | | query: { |
| | |
| | | }) |
| | | }, |
| | | // ä¸ä¼ æ¥å |
| | | handleUpload (row) { |
| | | handleUpload(row) { |
| | | |
| | | }, |
| | | // ä¸è½½æ¥å |
| | | download(row) { |
| | | let url = this.javaApi+'/word/' + (row.urlS===null||row.urlS==='')?row.url:row.urlS |
| | | let url = this.javaApi + '/word/' + (row.urlS === null || row.urlS === '') ? row.url : row.urlS |
| | | this.$download.saveAs(url, row.fileName); |
| | | }, |
| | | // è¿åæä½ |
| | |
| | | cancelButtonText: "åæ¶", |
| | | type: "warning" |
| | | }).then(() => { |
| | | upReportUrl({id: row.insReportId}).then(res => { |
| | | upReportUrl({ id: row.insReportId }).then(res => { |
| | | if (res.code === 200) { |
| | | this.$message.success('è¿åæå') |
| | | this.refreshTable() |