Merge branch 'dev' of http://114.132.189.42:9002/r/lims-ruoyi-before into dev
¶Ô±ÈÐÂÎļþ |
| | |
| | | // æåæ½æ ·è¯¦æ
页é¢ç¸å
³æ¥å£ |
| | | import request from '@/utils/request' |
| | | |
| | | // åæææ ¹æ®idæ¥æ£ |
| | | export function getIfsStock(query) { |
| | | return request({ |
| | | url: '/finishProductSpotCheck/getIfsStock', |
| | | method: 'post', |
| | | data: query |
| | | }) |
| | | } |
| | | // å£åº¦æ½æ£æ¥ç详æ
|
| | | export function getQuarter(query) { |
| | | return request({ |
| | | url: '/finishProductSpotCheck/getQuarter', |
| | | method: 'get', |
| | | params: query |
| | | }) |
| | | } |
| | | // æäº¤å£åº¦æ½æ · |
| | | export function addQuarter(query) { |
| | | return request({ |
| | | url: '/finishProductSpotCheck/addQuarter', |
| | | method: 'post', |
| | | data: query |
| | | }) |
| | | } |
| | | // ç¼è¾å£åº¦æ£éª |
| | | export function updateQuarterOnOrder(query) { |
| | | return request({ |
| | | url: '/finishProductSpotCheck/updateQuarterOnOrder', |
| | | method: 'post', |
| | | data: query |
| | | }) |
| | | } |
¶Ô±ÈÐÂÎļþ |
| | |
| | | import request from '@/utils/request' |
| | | |
| | | // å页æ¥è¯¢ |
| | | export function selectQualifiedSupplierManagementPage(query) { |
| | | return request({ |
| | | url: '/supplierManagement/selectQualifiedSupplierManagementPage', |
| | | method: 'get', |
| | | params: query |
| | | }) |
| | | } |
| | | |
| | | // ç¼è¾ä¾åºå |
| | | export function updateSupplierManagement(query) { |
| | | return request({ |
| | | url: '/supplierManagement/updateSupplierManagement', |
| | | method: 'post', |
| | | data: query |
| | | }) |
| | | } |
| | | |
| | | // æ°å¢ä¾åºå |
| | | export function addSupplierManagement(query) { |
| | | return request({ |
| | | url: '/supplierManagement/addSupplierManagement', |
| | | method: 'post', |
| | | data: query |
| | | }) |
| | | } |
| | | |
| | | // 导åºä¾åºå |
| | | export function exportSupplierManagement(query) { |
| | | return request({ |
| | | url: "/supplierManagement/exportSupplierManagement", |
| | | method: "get", |
| | | responseType: "blob", |
| | | params: query, |
| | | }); |
| | | } |
| | | |
| | | // å é¤ä¾åºå |
| | | export function delSupplierManagement(query) { |
| | | return request({ |
| | | url: '/supplierManagement/delSupplierManagement', |
| | | method: 'delete', |
| | | params: query |
| | | }) |
| | | } |
| | | |
| | | |
| | | |
| | | |
| | | |
| | |
| | | return request({ |
| | | url: "/manageDocumentControlled/checkManageDocumentControlledPdf", |
| | | method: "get", |
| | | headers: { |
| | | responseType: "blob", |
| | | }, |
| | | responseType: "blob", |
| | | params: query, |
| | | }); |
| | | } |
| | |
| | | return request({ |
| | | url: "/manageDocumentIssueRecycle/exportManageDocumentIssueRecycle", |
| | | method: "get", |
| | | responseType: "blob", |
| | | params: query, |
| | | }); |
| | | } |
| | |
| | | return request({ |
| | | url: "/manageDocumentIssueRecycle/addManageDocumentIssueRecycle", |
| | | method: "post", |
| | | headers: { "Content-Type": "application/x-www-form-urlencoded" }, |
| | | responseType: "blob", |
| | | data: data, |
| | | }); |
| | | } |
| | |
| | | return request({ |
| | | url: "/manageDocumentAlter/exportManageDocumentAlter", |
| | | method: "get", |
| | | headers: { responseType: "blob" }, |
| | | responseType: "blob", |
| | | params: query, |
| | | }); |
| | | } |
| | |
| | | return request({ |
| | | url: "/manageDocumentAlter/checkManageDocumentAlterPdf", |
| | | method: "get", |
| | | headers: { responseType: "blob" }, |
| | | responseType: "blob", |
| | | params: query, |
| | | }); |
| | | } |
| | |
| | | return request({ |
| | | url: "/manageDocumentCancel/exportManageDocumentCancel", |
| | | method: "get", |
| | | headers: { responseType: "blob" }, |
| | | responseType: "blob", |
| | | params: query, |
| | | }); |
| | | } |
| | |
| | | return request({ |
| | | url: "/internalPlan/exportInternalPlan", |
| | | method: "get", |
| | | headers: { |
| | | responseType: "blob", |
| | | }, |
| | | responseType: "blob", |
| | | params: query, |
| | | }); |
| | | } |
| | |
| | | return request({ |
| | | url: "/internalImplement/exportInternalImplement", |
| | | method: "get", |
| | | headers: { |
| | | responseType: "blob", |
| | | }, |
| | | responseType: "blob", |
| | | params: query, |
| | | }); |
| | | } |
| | |
| | | return request({ |
| | | url: "/internalMeeting/exportInternalMeeting", |
| | | method: "get", |
| | | headers: { |
| | | responseType: "blob", |
| | | }, |
| | | responseType: "blob", |
| | | params: query, |
| | | }); |
| | | } |
| | |
| | | return request({ |
| | | url: "/internalCheck/exportInternalCheck", |
| | | method: "get", |
| | | headers: { |
| | | responseType: "blob", |
| | | }, |
| | | responseType: "blob", |
| | | params: query, |
| | | }); |
| | | } |
| | |
| | | return request({ |
| | | url: "/internalCorrect/exportInternalCorrect", |
| | | method: "get", |
| | | headers: { |
| | | responseType: "blob", |
| | | }, |
| | | responseType: "blob", |
| | | params: query, |
| | | }); |
| | | } |
| | |
| | | return request({ |
| | | url: "/internalReport/exportInternalReport", |
| | | method: "get", |
| | | headers: { |
| | | responseType: "blob", |
| | | }, |
| | | responseType: "blob", |
| | | params: query, |
| | | }); |
| | | } |
¶Ô±ÈÐÂÎļþ |
| | |
| | | // 管çè¯å®¡ç¸å
³æ¥å£ |
| | | import request from "@/utils/request"; |
| | | |
| | | // 管ç计å-ä¸ä¼ éä»¶ |
| | | export function addReviewProgramFile(data) { |
| | | return request({ |
| | | url: "/manageReviewProgramFile/addReviewProgramFile", |
| | | method: "post", |
| | | headers: { "Content-Type": "application/x-www-form-urlencoded" }, |
| | | data: data, |
| | | }); |
| | | } |
| | | |
| | | //管ç计å-éä»¶å表 |
| | | export function selectReviewProgramFile(query) { |
| | | return request({ |
| | | url: "/manageReviewProgramFile/selectReviewProgramFile", |
| | | method: "get", |
| | | params: query, |
| | | }); |
| | | } |
| | | |
| | | //管ç计å-æ¥è¯¢ç®¡çè¯å®¡è®¡å |
| | | export function getPageReviewProgram(query) { |
| | | return request({ |
| | | url: "/manageReviewProgram/getPageReviewProgram", |
| | | method: "get", |
| | | params: query, |
| | | }); |
| | | } |
| | | |
| | | //管ç计å-å é¤ç®¡çè¯å®¡è®¡å |
| | | export function deleteReviewProgram(query) { |
| | | return request({ |
| | | url: "/manageReviewProgram/deleteReviewProgram", |
| | | method: "delete", |
| | | params: query, |
| | | }); |
| | | } |
| | | |
| | | //管ç计å |
| | | export function exportReviewProgram(query) { |
| | | return request({ |
| | | url: "/manageReviewProgram/exportReviewProgram", |
| | | method: "get", |
| | | responseType: "blob", |
| | | params: query, |
| | | }); |
| | | } |
| | | |
| | | // 管ç计å-ç¼è¾ç®¡çè¯å®¡è®¡å |
| | | export function modifyReviewProgram(data) { |
| | | return request({ |
| | | url: "/manageReviewProgram/modifyReviewProgram", |
| | | method: "post", |
| | | data: data, |
| | | }); |
| | | } |
| | | |
| | | //ä¼è®®è®°å½-æ¥è¯¢ç®¡çè¯å®¡ä¼è®®è®°å½ |
| | | export function getPageMeeting(query) { |
| | | return request({ |
| | | url: "/manageMeeting/getPageMeeting", |
| | | method: "get", |
| | | params: query, |
| | | }); |
| | | } |
| | | |
| | | //ä¼è®®è®°å½-å é¤ç®¡çè¯å®¡ä¼è®®è®°å½ |
| | | export function deleteMeeting(query) { |
| | | return request({ |
| | | url: "/manageMeeting/deleteMeeting", |
| | | method: "delete", |
| | | params: query, |
| | | }); |
| | | } |
| | | |
| | | //ä¼è®®è®°å½-ä¸è½½ç®¡çè¯å®¡ä¼è®®è®°å½ |
| | | export function exportMeeting(query) { |
| | | return request({ |
| | | url: "/manageMeeting/exportMeeting", |
| | | method: "get", |
| | | responseType: "blob", |
| | | params: query, |
| | | }); |
| | | } |
| | | |
| | | // 管ç计å-æ°å¢ç®¡çè¯å®¡ä¼è®®è®°å½ |
| | | export function addMeeting(data) { |
| | | return request({ |
| | | url: "/manageMeeting/addMeeting", |
| | | method: "post", |
| | | data: data, |
| | | }); |
| | | } |
| | | |
| | | // 管ç计å-ä¿®æ¹ç®¡çè¯å®¡ä¼è®®è®°å½ |
| | | export function modifyMeeting(data) { |
| | | return request({ |
| | | url: "/manageMeeting/modifyMeeting", |
| | | method: "post", |
| | | data: data, |
| | | }); |
| | | } |
| | | |
| | | //è¯å®¡ä¼è®®æ¥å-æ¥è¯¢ç®¡çè¯å®¡ä¼è®®æ¥å |
| | | export function getPageReviewReport(query) { |
| | | return request({ |
| | | url: "/manageReviewReport/getPageReviewReport", |
| | | method: "get", |
| | | params: query, |
| | | }); |
| | | } |
| | | |
| | | //è¯å®¡ä¼è®®æ¥å-å é¤ç®¡çè¯å®¡ä¼è®®æ¥å |
| | | export function deleteReviewReport(query) { |
| | | return request({ |
| | | url: "/manageReviewReport/deleteReviewReport", |
| | | method: "delete", |
| | | params: query, |
| | | }); |
| | | } |
| | | |
| | | //è¯å®¡ä¼è®®æ¥å-ä¸è½½ |
| | | export function exportReviewReport(query) { |
| | | return request({ |
| | | url: "/manageReviewReport/exportReviewReport", |
| | | method: "get", |
| | | responseType: "blob", |
| | | params: query, |
| | | }); |
| | | } |
| | | |
| | | // è¯å®¡ä¼è®®æ¥å-ç¼è¾ç®¡çè¯å®¡ä¼è®®æ¥å |
| | | export function modifyReviewReport(data) { |
| | | return request({ |
| | | url: "/manageReviewReport/modifyReviewReport", |
| | | method: "post", |
| | | data: data, |
| | | }); |
| | | } |
| | | |
| | | // è¯å®¡ä¼è®®æ¥å-æ°å¢ç®¡çè¯å®¡ä¼è®®æ¥å |
| | | export function addReviewReport(data) { |
| | | return request({ |
| | | url: "/manageReviewReport/addReviewReport", |
| | | method: "post", |
| | | data: data, |
| | | }); |
| | | } |
| | | |
| | | // è¯å®¡ä¼è®®æ¥å-æ°å¢ç®¡çè¯å®¡è®¡å |
| | | export function addReviewProgram(data) { |
| | | return request({ |
| | | url: "/manageReviewProgram/addReviewProgram", |
| | | method: "post", |
| | | data: data, |
| | | }); |
| | | } |
| | |
| | | return request({ |
| | | url: "/manageRiskAssessmentResults/exportHazardFactorIdentification", |
| | | method: "get", |
| | | headers: { |
| | | responseType: "blob", |
| | | }, |
| | | responseType: "blob", |
| | | params: query, |
| | | }); |
| | | } |
| | |
| | | return request({ |
| | | url: "/manageControlPlanList/exportSignificantRiskFactors", |
| | | method: "get", |
| | | headers: { |
| | | responseType: "blob", |
| | | }, |
| | | responseType: "blob", |
| | | params: query, |
| | | }); |
| | | } |
| | |
| | | <!-- æé® --> |
| | | <div v-else-if="item.dataType == 'action'"> |
| | | <template v-for="(o, key) in item.operation"> |
| | | <el-button v-if="o.type != 'upload'" size="mini" v-show="o.showHide ? o.showHide(scope.row) : true" |
| | | <el-button v-show="o.type != 'upload'" size="mini" |
| | | v-if="o.showHide ? o.showHide(scope.row) : true" |
| | | :disabled="o.disabled ? o.disabled(scope.row) : false" :icon="iconFn(o)" :plain="o.plain" |
| | | :style="{ color: o.name === 'å é¤' ? '#f56c6c' : o.color }" :type="o.type | typeFn(scope.row)" |
| | | @click="o.clickFun(scope.row)" :key="key"> |
| | |
| | | :disabled="o.disabled ? o.disabled(scope.row) : false" :accept="o.accept |
| | | ? o.accept |
| | | : '.jpg,.jpeg,.png,.gif,.doc,.docx,.xls,.xlsx,.ppt,.pptx,.pdf,.zip,.rar' |
| | | " v-if="o.type == 'upload'" style="display: inline-block; width: 50px" |
| | | " |
| | | v-if="o.type == 'upload'" style="display: inline-block; width: 50px" |
| | | v-show="o.showHide ? o.showHide(scope.row) : true" |
| | | :headers="uploadHeader" |
| | | :on-error="onError" |
| | |
| | | url = url.slice(0, -1); |
| | | config.params = {}; |
| | | config.url = url; |
| | | config.headers["responseType"] = config.headers["responseType"] |
| | | ? config.headers["responseType"] |
| | | : ""; // 让æ¯ä¸ªè¯·æ±æºå¸¦èªå®ä¹token è¯·æ ¹æ®å®é
æ
åµèªè¡ä¿®æ¹ |
| | | } |
| | | if ( |
| | | !isRepeatSubmit && |
¶Ô±ÈÐÂÎļþ |
| | |
| | | <template> |
| | | <div> |
| | | <el-dialog :close-on-click-modal="false" :close-on-press-escape="false" |
| | | :title="operationType === 'edit' ? 'ç¼è¾' : 'æ°å¢'" |
| | | :visible.sync="formDia" |
| | | width="90%" @close="closeDia"> |
| | | <el-form :model="model" ref="modelForm" label-width="150px" :rules="rules"> |
| | | <el-row> |
| | | <el-col :span="12"> |
| | | <el-form-item label="ä¾åºå" prop="supplierName"> |
| | | <el-input v-model="model.supplierName" placeholder="请è¾å
¥" /> |
| | | </el-form-item> |
| | | </el-col> |
| | | <el-col :span="12"> |
| | | <el-form-item label="ç¼å·" prop="supplierRef"> |
| | | <el-input v-model="model.supplierRef" placeholder="请è¾å
¥" /> |
| | | </el-form-item> |
| | | </el-col> |
| | | </el-row> |
| | | <el-row> |
| | | <el-col :span="24"> |
| | | <el-form-item label="ä¾åºåç©åæå¡åç§°" prop="supplierItemServiceName"> |
| | | <el-input v-model="model.supplierItemServiceName" placeholder="请è¾å
¥" /> |
| | | </el-form-item> |
| | | </el-col> |
| | | </el-row> |
| | | <el-row> |
| | | <el-col :span="12"> |
| | | <el-form-item label="é®ç¼"> |
| | | <el-input v-model="model.postalCode" placeholder="请è¾å
¥" /> |
| | | </el-form-item> |
| | | </el-col> |
| | | <el-col :span="12"> |
| | | <el-form-item label="å°å"> |
| | | <el-input v-model="model.adress" placeholder="请è¾å
¥" /> |
| | | </el-form-item> |
| | | </el-col> |
| | | </el-row> |
| | | <el-row> |
| | | <el-col :span="12"> |
| | | <el-form-item label="è系人"> |
| | | <el-input v-model="model.contacts" placeholder="请è¾å
¥" /> |
| | | </el-form-item> |
| | | </el-col> |
| | | <el-col :span="12"> |
| | | <el-form-item label="èç³»çµè¯"> |
| | | <el-input v-model="model.phone" placeholder="请è¾å
¥" /> |
| | | </el-form-item> |
| | | </el-col> |
| | | </el-row> |
| | | <el-row> |
| | | <el-col :span="12"> |
| | | <el-form-item label="æ·å"> |
| | | <el-input v-model="model.householdName" placeholder="请è¾å
¥" /> |
| | | </el-form-item> |
| | | </el-col> |
| | | <el-col :span="12"> |
| | | <el-form-item label="ä¼ ç"> |
| | | <el-input v-model="model.fax" placeholder="请è¾å
¥" /> |
| | | </el-form-item> |
| | | </el-col> |
| | | </el-row> |
| | | <el-row> |
| | | <el-col :span="12"> |
| | | <el-form-item label="弿·è¡"> |
| | | <el-input v-model="model.openingName" placeholder="请è¾å
¥" /> |
| | | </el-form-item> |
| | | </el-col> |
| | | <el-col :span="12"> |
| | | <el-form-item label="ç½å"> |
| | | <el-input v-model="model.website" placeholder="请è¾å
¥" /> |
| | | </el-form-item> |
| | | </el-col> |
| | | </el-row> |
| | | <el-row> |
| | | <el-col :span="12"> |
| | | <el-form-item label="è´¦å·"> |
| | | <el-input v-model="model.accountName" placeholder="请è¾å
¥" /> |
| | | </el-form-item> |
| | | </el-col> |
| | | <el-col :span="12"> |
| | | <el-form-item label="Email"> |
| | | <el-input v-model="model.email" placeholder="请è¾å
¥" /> |
| | | </el-form-item> |
| | | </el-col> |
| | | </el-row> |
| | | </el-form> |
| | | <span slot="footer"> |
| | | <el-button @click="closeDia">å æ¶</el-button> |
| | | <el-button type="primary" @click="submit" :loading="editLoad">ä¿ å</el-button> |
| | | </span> |
| | | </el-dialog> |
| | | </div> |
| | | </template> |
| | | |
| | | <script> |
| | | import { |
| | | addSupplierManagement, |
| | | updateSupplierManagement |
| | | } from '@/api/cnas/externalService/supplierManage/supplierManage' |
| | | |
| | | export default { |
| | | name: "formDia", |
| | | // import å¼å
¥çç»ä»¶éè¦æ³¨å
¥å°å¯¹è±¡ä¸æè½ä½¿ç¨ |
| | | components: {}, |
| | | data() { |
| | | // è¿éåæ¾æ°æ® |
| | | return { |
| | | operationType: '', |
| | | formDia: false, |
| | | model: { |
| | | supplierName: '', |
| | | supplierRef: '', |
| | | supplierItemServiceName: '', |
| | | postalCode: '', |
| | | adress: '', |
| | | contacts: '', |
| | | phone: '', |
| | | householdName: '', |
| | | fax: '', |
| | | openingName: '', |
| | | website: '', |
| | | accountName: '', |
| | | email: '', |
| | | supplierManagementId: '', |
| | | }, |
| | | rules: { |
| | | supplierName: [{ required: true, message: '请è¾å
¥ä¾åºå', trigger: 'blur' }], |
| | | supplierRef: [{ required: true, message: '请è¾å
¥ä¾åºåç¼å·', trigger: 'blur' }], |
| | | |
| | | }, |
| | | editLoad: false, |
| | | } |
| | | }, |
| | | mounted() { |
| | | |
| | | }, |
| | | // æ¹æ³éå |
| | | methods: { |
| | | openDialog (type, row) { |
| | | this.operationType = type |
| | | this.formDia = true |
| | | if (this.operationType === 'edit') { |
| | | this.model = this.HaveJson(row) |
| | | } |
| | | }, |
| | | // æäº¤è¡¨å |
| | | submit () { |
| | | this.$refs.modelForm.validate((valid) => { |
| | | if (valid) { |
| | | this.editLoad = true |
| | | if (this.operationType === 'edit') { |
| | | updateSupplierManagement(this.model).then(res => { |
| | | this.editLoad = false |
| | | if (res.code === 200){ |
| | | this.$message.success('ä¿®æ¹æå') |
| | | this.closeDia() |
| | | } |
| | | }).catch(err => { |
| | | console.log('err---', err); |
| | | this.editLoad = false |
| | | }) |
| | | } else { |
| | | addSupplierManagement(this.model).then(res => { |
| | | this.editLoad = false |
| | | if (res.code === 200){ |
| | | this.$message.success('æ°å¢æå') |
| | | this.closeDia() |
| | | } |
| | | }).catch(err => { |
| | | console.log('err---', err); |
| | | this.editLoad = false |
| | | }) |
| | | } |
| | | } |
| | | }) |
| | | }, |
| | | closeDia () { |
| | | this.$refs.modelForm.resetFields() |
| | | this.formDia = false |
| | | this.$emit('closeDia') |
| | | } |
| | | }, |
| | | } |
| | | </script> |
| | | |
| | | <style scoped> |
| | | </style> |
¶Ô±ÈÐÂÎļþ |
| | |
| | | <template> |
| | | <div class="capacity-scope"> |
| | | <div class="search"> |
| | | <div> |
| | | <el-form :model="searchForm" ref="searchForm" size="small" :inline="true"> |
| | | <el-form-item label="åç§°" prop="supplierName"> |
| | | <el-input v-model="searchForm.supplierName" clearable size="small"></el-input> |
| | | </el-form-item> |
| | | <el-form-item> |
| | | <el-button type="primary" icon="el-icon-search" size="mini" @click="getTableData">æ¥ è¯¢</el-button> |
| | | <el-button icon="el-icon-refresh" size="mini" @click="resetSearchForm">é ç½®</el-button> |
| | | </el-form-item> |
| | | </el-form> |
| | | </div> |
| | | <div> |
| | | <el-button size="medium" @click="exportExcel">导 åº</el-button> |
| | | <el-button size="medium" type="primary" @click="showDialog('add')">æ° å¢</el-button> |
| | | </div> |
| | | </div> |
| | | <div class="table"> |
| | | <lims-table :tableData="tableData" :column="tableColumn" :height="'calc(100vh - 250px)'" @pagination="pagination" |
| | | :page="page" :tableLoading="tableLoading"></lims-table> |
| | | </div> |
| | | <form-dia ref="formDia" v-if="formDia" @closeDia="closeDia"></form-dia> |
| | | </div> |
| | | </template> |
| | | |
| | | <script> |
| | | // import ZTTable from "../caorui/ZTTable/index.vue"; |
| | | // import TableCard from "../caorui/TableCard/index.vue"; |
| | | // import axios from "axios"; |
| | | import FormDia from "../supplierManage/component/formDia.vue"; |
| | | import limsTable from '@/components/Table/lims-table.vue' |
| | | import { |
| | | selectQualifiedSupplierManagementPage, |
| | | exportSupplierManagement, |
| | | delSupplierManagement |
| | | } from '@/api/cnas/externalService/supplierManage/supplierManage' |
| | | |
| | | export default { |
| | | name: "a6-supplier-manage-new", |
| | | // import å¼å
¥çç»ä»¶éè¦æ³¨å
¥å°å¯¹è±¡ä¸æè½ä½¿ç¨ |
| | | components: { |
| | | limsTable, |
| | | FormDia |
| | | }, |
| | | data() { |
| | | // è¿éåæ¾æ°æ® |
| | | return { |
| | | searchForm: { |
| | | supplierName: '' |
| | | }, |
| | | tableLoading: false, |
| | | tableColumn: [ |
| | | { |
| | | label: "ä¾åºåç¼å·", |
| | | prop: "supplierRef" |
| | | }, |
| | | { |
| | | label: "ä¾åºå", |
| | | prop: "supplierName" |
| | | }, |
| | | { |
| | | label: "ä¾åºç©å(æå¡)åç§°", |
| | | prop: "supplierItemServiceName" |
| | | }, |
| | | { |
| | | label: "å°å", |
| | | prop: "adress" |
| | | }, |
| | | { |
| | | label: "èç³»çµè¯", |
| | | prop: "phone" |
| | | }, |
| | | { |
| | | dataType: 'action', |
| | | fixed: "right", |
| | | minWidth: '60', |
| | | label: 'æä½', |
| | | operation: [ |
| | | { |
| | | name: 'ç¼è¾', |
| | | type: 'text', |
| | | clickFun: (row) => { |
| | | this.showDialog('edit', row); |
| | | }, |
| | | }, |
| | | { |
| | | name: 'å é¤', |
| | | type: 'text', |
| | | color: '#f56c6c', |
| | | clickFun: (row) => { |
| | | this.deleteRow(row); |
| | | }, |
| | | } |
| | | |
| | | ] |
| | | } |
| | | ], |
| | | tableData: [], |
| | | page: { |
| | | total: 0, |
| | | size: 10, |
| | | current: 1 |
| | | }, |
| | | formDia: false, |
| | | } |
| | | }, |
| | | mounted() { |
| | | this.getTableData() |
| | | }, |
| | | // æ¹æ³éå |
| | | methods: { |
| | | // è·åè¡¨æ ¼æ°æ® |
| | | async getTableData() { |
| | | this.tableLoading = true; |
| | | selectQualifiedSupplierManagementPage(this.searchForm).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 |
| | | }) |
| | | }, |
| | | // éç½® |
| | | resetSearchForm () { |
| | | this.pagination.current = 1 |
| | | this.pagination.pageSize = 20 |
| | | this.searchForm.supplierName = '' |
| | | this.getTableData() |
| | | }, |
| | | // å页忢 |
| | | pagination(page) { |
| | | this.page.size = page.limit |
| | | this.getTableData(); |
| | | }, |
| | | // æå¼æ°å¢å¼¹æ¡ |
| | | showDialog(type, row) { |
| | | this.formDia = true |
| | | this.$nextTick(() => { |
| | | this.$refs.formDia.openDialog(type, row) |
| | | }) |
| | | }, |
| | | // å
³éå¼¹æ¡ |
| | | closeDia () { |
| | | this.formDia = false |
| | | this.getTableData() |
| | | }, |
| | | // å é¤è®°å½ |
| | | deleteRow (row) { |
| | | this.$confirm('æ¤æä½å°æ°¸ä¹
å é¤è¯¥æä»¶, æ¯å¦ç»§ç»?', 'æç¤º', { |
| | | confirmButtonText: 'ç¡®å®', |
| | | cancelButtonText: 'åæ¶', |
| | | type: 'warning' |
| | | }).then(() => { |
| | | delSupplierManagement({supplierManagementId:row.supplierManagementId}).then(res => { |
| | | if (res.code === 200) { |
| | | this.$message.success('å 餿åï¼') |
| | | this.getTableData() |
| | | } |
| | | }) |
| | | }).catch(() => { |
| | | this.$message({ |
| | | type: 'info', |
| | | message: '已忶å é¤' |
| | | }); |
| | | }); |
| | | }, |
| | | // 导åºexcel |
| | | async exportExcel() { |
| | | exportSupplierManagement({deviceId:this.clickNodeVal.value}).then(res => { |
| | | const blob = new Blob([res], { type: 'application/octet-stream' }); |
| | | this.$download.saveAs(blob, 'åæ ¼ä¾åºå.xlsx') |
| | | this.$message.success('å¯¼åºæå') |
| | | }) |
| | | } |
| | | }, |
| | | } |
| | | </script> |
| | | |
| | | <style scoped> |
| | | .search { |
| | | height: 46px; |
| | | display: flex; |
| | | justify-content: space-between; |
| | | } |
| | | </style> |
| | |
| | | exportOfStandardSubstanceList(this.searchForm).then(res =>{ |
| | | this.outLoading = false |
| | | const blob = new Blob([res], {type: 'application/octet-stream'},false); |
| | | let reader = new FileReader(); |
| | | reader.readAsText(blob, 'utf-8'); |
| | | reader.onload = () => { |
| | | try { |
| | | let result = JSON.parse(reader.result); |
| | | if (result.message) { |
| | | this.$message.error(result.message); |
| | | } else { |
| | | const url = URL.createObjectURL(blob); |
| | | const link = document.createElement('a'); |
| | | link.href = url; |
| | | link.download = 'æ åç©è´¨æ¸
å.xlsx'; |
| | | link.click(); |
| | | this.$message.success('å¯¼åºæå') |
| | | } |
| | | } catch (err) { |
| | | console.log(err); |
| | | const url = URL.createObjectURL(blob); |
| | | const link = document.createElement('a'); |
| | | link.href = url; |
| | | link.download = 'æ åç©è´¨æ¸
å.xlsx'; |
| | | link.click(); |
| | | this.$message.success('å¯¼åºæå') |
| | | } |
| | | } |
| | | this.$download.saveAs(blob, 'æ åç©è´¨æ¸
å.xlsx') |
| | | this.$message.success('å¯¼åºæå') |
| | | }) |
| | | }, |
| | | // æ¥è¯¢å表 |
| | |
| | | exportManageDocumentIssueRecycle(this.queryParams).then(res => { |
| | | this.outLoading = false |
| | | const blob = new Blob([res], { type: 'application/octet-stream' }); |
| | | this.$download.saveAs(blob, 'åæ¾åæ¶è®°å½.xlsx') |
| | | // this.$download.saveAs(blob, 'åæ¾åæ¶è®°å½.xlsx') |
| | | //å°Blob å¯¹è±¡è½¬æ¢æå符串 |
| | | // let reader = new FileReader(); |
| | | // reader.readAsText(blob, 'utf-8'); |
| | | // reader.onload = () => { |
| | | // try { |
| | | // let result = JSON.parse(reader.result); |
| | | // if (result.message) { |
| | | // this.$message.error(result.message); |
| | | // } else { |
| | | // const url = URL.createObjectURL(blob); |
| | | // const link = document.createElement('a'); |
| | | // link.href = url; |
| | | // link.download = 'åæ¾åæ¶è®°å½.xlsx'; |
| | | // link.click(); |
| | | // this.$message.success('å¯¼åºæå') |
| | | // } |
| | | // } catch (err) { |
| | | // console.log(err); |
| | | // const url = URL.createObjectURL(blob); |
| | | // const link = document.createElement('a'); |
| | | // link.href = url; |
| | | // link.download = 'åæ¾åæ¶è®°å½.xlsx'; |
| | | // link.click(); |
| | | // this.$message.success('å¯¼åºæå') |
| | | // } |
| | | // } |
| | | let reader = new FileReader(); |
| | | reader.readAsText(blob, 'utf-8'); |
| | | reader.onload = () => { |
| | | try { |
| | | let result = JSON.parse(reader.result); |
| | | if (result.message) { |
| | | this.$message.error(result.message); |
| | | } else { |
| | | const url = URL.createObjectURL(blob); |
| | | const link = document.createElement('a'); |
| | | link.href = url; |
| | | link.download = 'åæ¾åæ¶è®°å½.xlsx'; |
| | | link.click(); |
| | | this.$message.success('å¯¼åºæå') |
| | | } |
| | | } catch (err) { |
| | | console.log(err); |
| | | const url = URL.createObjectURL(blob); |
| | | const link = document.createElement('a'); |
| | | link.href = url; |
| | | link.download = 'åæ¾åæ¶è®°å½.xlsx'; |
| | | link.click(); |
| | | this.$message.success('å¯¼åºæå') |
| | | } |
| | | } |
| | | }) |
| | | }, |
| | | changeFileList(e) { |
| | |
| | | this.outLoading = false |
| | | if (res.code == 201) return this.$message.error('导åºå¤±è´¥') |
| | | this.$message.success('å¯¼åºæå') |
| | | let url = this.javaApi + 'word/' + res.message |
| | | let url = this.javaApi + '/word/' + res.message |
| | | this.$download.saveAs(url, 'æä»¶å®¡æ¹è®°å½') |
| | | }) |
| | | }, |
¶Ô±ÈÐÂÎļþ |
| | |
| | | <template> |
| | | <div> |
| | | <el-dialog v-loading="diaLoading" :close-on-click-modal="false" :close-on-press-escape="false" |
| | | :visible.sync="formDia" title="管çè¯å®¡è®¡å" width="80%" @close="closeImplementDia"> |
| | | <el-form ref="form" :model="form" :rules="rules" label-position="right" label-width="auto"> |
| | | <el-row :gutter="20"> |
| | | <el-col :span="12"> |
| | | <el-form-item label="è¯å®¡æ¶é´" prop="reviewTime"> |
| | | <el-date-picker v-model="form.reviewTime" :disabled="operationType === 'ratify'" clearable |
| | | format="yyyy-MM-dd HH:mm:ss" placeholder="éæ©æ¥æ" size="small" style="width: 100%" type="datetime" |
| | | value-format="yyyy-MM-dd HH:mm:ss"> |
| | | </el-date-picker> |
| | | </el-form-item> |
| | | </el-col> |
| | | <el-col :span="12"> |
| | | <el-form-item label="è¯å®¡å°ç¹" prop="judgingLocation"> |
| | | <el-input v-model="form.judgingLocation" :disabled="operationType === 'ratify'" clearable |
| | | size="small"></el-input> |
| | | </el-form-item> |
| | | </el-col> |
| | | <el-col :span="24"> |
| | | <el-form-item label="è¯å®¡ç®ç" prop="judgingPurpose"> |
| | | <el-input v-model="form.judgingPurpose" :disabled="operationType === 'ratify'" clearable |
| | | size="small"></el-input> |
| | | </el-form-item> |
| | | </el-col> |
| | | <el-col :span="24"> |
| | | <el-form-item label="è¯å®¡æ¹å¼" prop="judgingMethod"> |
| | | <el-input v-model="form.judgingMethod" :disabled="operationType === 'ratify'" clearable |
| | | size="small"></el-input> |
| | | </el-form-item> |
| | | </el-col> |
| | | <el-col :span="24"> |
| | | <el-form-item label="åå 人å" prop="participants"> |
| | | <!-- <el-input v-model="form.participants" :disabled="operationType === 'ratify'" clearable size="small"></el-input> --> |
| | | <el-select v-model="form.participants" size="small" style="width: 100%;" filterable |
| | | :disabled="operationType === 'ratify'" clearable multiple> |
| | | <el-option v-for="item in personList" :key="item.value" :label="item.label" :value="item.value"> |
| | | </el-option> |
| | | </el-select> |
| | | </el-form-item> |
| | | </el-col> |
| | | <el-col :span="24"> |
| | | <el-form-item label="è¯å®¡èå´" prop="judgingScope"> |
| | | <el-input v-model="form.judgingScope" :disabled="operationType === 'ratify'" clearable |
| | | size="small"></el-input> |
| | | </el-form-item> |
| | | </el-col> |
| | | <el-col :span="24"> |
| | | <el-form-item label="è¯å®¡ä¾æ®" prop="judgingBasis"> |
| | | <el-input v-model="form.judgingBasis" :disabled="operationType === 'ratify'" :rows="3" clearable |
| | | size="small" type="textarea"></el-input> |
| | | </el-form-item> |
| | | </el-col> |
| | | <el-col :span="24"> |
| | | <el-form-item label="è¯å®¡ä¸»è¦å
容" prop="mainContext"> |
| | | <el-input v-model="form.mainContext" :disabled="operationType === 'ratify'" :rows="3" clearable |
| | | size="small" type="textarea"></el-input> |
| | | </el-form-item> |
| | | </el-col> |
| | | <el-col :span="24"> |
| | | <el-form-item label="åå¤å·¥ä½è¦æ±" prop="preparationRequirements"> |
| | | <el-input v-model="form.preparationRequirements" :disabled="operationType === 'ratify'" :rows="3" |
| | | clearable size="small" type="textarea"></el-input> |
| | | </el-form-item> |
| | | </el-col> |
| | | </el-row> |
| | | </el-form> |
| | | <span slot="footer" class="dialog-footer"> |
| | | <el-button @click="closeImplementDia">å æ¶</el-button> |
| | | <el-button v-if="operationType === 'ratify'" :loading="loading" type="primary" @click="handleApproval(1)">æ¹ |
| | | å</el-button> |
| | | <el-button v-if="operationType !== 'ratify'" :loading="loading" type="primary" @click="handleEdit">æ |
| | | 交</el-button> |
| | | </span> |
| | | </el-dialog> |
| | | <el-dialog :visible.sync="approvalDialog" title="æ¹å" width="30%" @close="approvalDialog = false"> |
| | | <span> |
| | | æ¹å夿³¨ï¼ |
| | | <el-input v-model="qualityRemark" type="textarea"></el-input> |
| | | </span> |
| | | <span slot="footer" class="dialog-footer"> |
| | | <el-button :loading="approvalLoading" @click="approvalDialog = false">å æ¶</el-button> |
| | | <el-button :loading="approvalLoading" type="primary" @click="handleApproval(0)">ç¡® å®</el-button> |
| | | </span> |
| | | </el-dialog> |
| | | </div> |
| | | </template> |
| | | |
| | | <script> |
| | | import { |
| | | addReviewProgram, |
| | | modifyReviewProgram, |
| | | } from '@/api/cnas/systemManagement/managementReview.js' |
| | | import { dateFormat } from '@/utils/date' |
| | | import { |
| | | selectUserCondition, |
| | | } from "@/api/business/inspectionTask.js"; |
| | | import { mapGetters } from "vuex"; |
| | | export default { |
| | | name: 'managementFormDIa', |
| | | // import å¼å
¥çç»ä»¶éè¦æ³¨å
¥å°å¯¹è±¡ä¸æè½ä½¿ç¨ |
| | | components: {}, |
| | | data() { |
| | | // è¿éåæ¾æ°æ® |
| | | return { |
| | | formDia: false, |
| | | diaLoading: false, |
| | | loading: false, |
| | | form: { |
| | | id: '', |
| | | reviewTime: '', |
| | | judgingLocation: '', |
| | | judgingPurpose: '', |
| | | judgingMethod: '', |
| | | participants: [], |
| | | judgingScope: '', |
| | | judgingBasis: '', |
| | | mainContext: '', |
| | | preparationRequirements: '', |
| | | }, |
| | | rules: { |
| | | reviewTime: [{ required: true, message: 'è¯·éæ©è¯å®¡æ¶é´', trigger: 'blur' }], |
| | | judgingLocation: [{ required: true, message: '请填åè¯å®¡å°ç¹', trigger: 'blur' }], |
| | | judgingPurpose: [{ required: true, message: '请填åè¯å®¡ç®ç', trigger: 'blur' }], |
| | | judgingMethod: [{ required: true, message: '请填åè¯å®¡æ¹å¼', trigger: 'blur' }], |
| | | participants: [{ required: true, message: '请填ååå 人å', trigger: 'change' }], |
| | | judgingScope: [{ required: true, message: '请填åè¯å®¡èå´', trigger: 'blur' }], |
| | | judgingBasis: [{ required: true, message: '请填åè¯å®¡ä¾æ®', trigger: 'blur' }], |
| | | mainContext: [{ required: true, message: '请填åè¯å®¡ä¸»è¦å
容', trigger: 'blur' }], |
| | | preparationRequirements: [{ required: true, message: '请填ååå¤å·¥ä½è¦æ±', trigger: 'blur' }], |
| | | }, |
| | | operationType: '', |
| | | approvalDialog: false, |
| | | approvalLoading: false, |
| | | qualityRemark: '', |
| | | personList: [], |
| | | }; |
| | | }, |
| | | computed: { |
| | | ...mapGetters(['nickName']) |
| | | }, |
| | | mounted() { |
| | | this.getAuthorizedPerson() |
| | | }, |
| | | // æ¹æ³éå |
| | | methods: { |
| | | // æå¼å¼¹æ¡ |
| | | openDia(type, row) { |
| | | this.formDia = true |
| | | this.operationType = type |
| | | if (type !== 'add') { |
| | | this.form = row |
| | | this.form.participants = row.participants ? row.participants.split(',').map(m => Number(m)) : [] |
| | | } |
| | | }, |
| | | // æ¥è¯¢è¯¦æ
|
| | | // searchInfo (row) { |
| | | // this.diaLoading = true |
| | | // this.$axios(this.$api.internalReport.getInternalReportOne + '?reportId=' + row.reportId).then(res => { |
| | | // this.diaLoading = false |
| | | // if (res.code === 201) return |
| | | // this.form = res.data |
| | | // }).catch(err => { |
| | | // console.log(err) |
| | | // this.diaLoading = false |
| | | // }) |
| | | // }, |
| | | // æäº¤å¼¹æ¡æ°æ® |
| | | handleEdit() { |
| | | this.$refs['form'].validate((valid) => { |
| | | if (valid) { |
| | | this.loading = true |
| | | const internalReport = this.HaveJson(this.form) |
| | | internalReport.participants = internalReport.participants.join(',') |
| | | if (this.operationType === 'add') { |
| | | addReviewProgram(internalReport).then(res => { |
| | | this.loading = false |
| | | if (res.code === 201) return |
| | | this.$message.success('æä½æå') |
| | | this.closeImplementDia() |
| | | }).catch(err => { |
| | | console.log('err---', err); |
| | | this.loading = false |
| | | }) |
| | | } else if (this.operationType === 'edit') { |
| | | modifyReviewProgram(internalReport).then(res => { |
| | | this.loading = false |
| | | if (res.code === 201) return |
| | | this.$message.success('æä½æå') |
| | | this.closeImplementDia() |
| | | }).catch(err => { |
| | | console.log('err---', err); |
| | | this.loading = false |
| | | }) |
| | | } |
| | | } else { |
| | | console.log('error submit!!'); |
| | | return false; |
| | | } |
| | | }); |
| | | }, |
| | | // æäº¤æ¹åä¿¡æ¯ |
| | | handleApproval(qualityStatus) { |
| | | this.approvalLoading = true |
| | | const internalReport = this.HaveJson(this.form) |
| | | internalReport.approve = this.nickName |
| | | internalReport.approveDate = dateFormat(new Date()) |
| | | internalReport.participants = internalReport.participants.join(',') |
| | | modifyReviewProgram(internalReport).then(res => { |
| | | if (res.code === 200) { |
| | | this.$message.success('æäº¤æåï¼'); |
| | | this.approvalDialog = false |
| | | this.closeImplementDia(this.departId); |
| | | } |
| | | this.approvalLoading = false |
| | | }).catch(() => { |
| | | this.approvalLoading = false |
| | | }) |
| | | }, |
| | | closeImplementDia() { |
| | | this.$refs.form.resetFields(); |
| | | this.formDia = false |
| | | this.$emit('closeImplementDia') |
| | | }, |
| | | getAuthorizedPerson() { |
| | | selectUserCondition().then(res => { |
| | | let data = [] |
| | | res.data.forEach(a => { |
| | | data.push({ |
| | | label: a.name, |
| | | value: a.id |
| | | }) |
| | | }) |
| | | this.personList = data |
| | | }) |
| | | }, |
| | | } |
| | | }; |
| | | </script> |
| | | |
| | | <style scoped> |
| | | >>>.el-dialog { |
| | | margin: 6vh auto 50px !important; |
| | | } |
| | | </style> |
¶Ô±ÈÐÂÎļþ |
| | |
| | | <template> |
| | | <div> |
| | | <div class="search-background"> |
| | | <span class="search-group"> |
| | | <span style="width: 160px">è¯å®¡å°ç¹ï¼</span> |
| | | <el-input v-model="searchForm.judgingLocation" clearable size="small"></el-input> |
| | | <el-button size="medium" style="margin-left: 10px" @click="resetSearchForm">é ç½®</el-button> |
| | | <el-button size="medium" type="primary" @click="searchList">æ¥ è¯¢</el-button> |
| | | </span> |
| | | <span class="search-group"> |
| | | <el-button size="medium" type="primary" @click="openFormDia('add')">æ° å¢</el-button> |
| | | </span> |
| | | </div> |
| | | <div class="table"> |
| | | <limsTable :column="tableColumn" :height="'calc(100vh - 23em)'" :table-data="tableData" |
| | | :table-loading="tableLoading" style="padding: 0 10px;margin-bottom: 16px" :page="page" @pagination="pagination"> |
| | | </limsTable> |
| | | </div> |
| | | <management-form-d-ia v-if="managementFormDIa" ref="managementFormDIa" |
| | | @closeImplementDia="closeImplementDia"></management-form-d-ia> |
| | | <el-dialog :visible.sync="listDialogVisible" title="æä»¶æ¥ç" top="15vh" width="400px"> |
| | | <div style="max-height:60vh;overflow-y: auto;"> |
| | | <p v-for="(item, index) in fileList" :key="index"> |
| | | <span>{{ item.fileName }}</span> |
| | | <el-button icon="el-icon-view" size="small" style="margin-left: 20px;" type="text" |
| | | @click="lookFile(item.url, item.fileName)">é¢è§</el-button> |
| | | <el-button icon="el-icon-bottom" size="small" style="margin-left: 20px;" type="text" |
| | | @click="handleDown0(item.url, item.fileName)">ä¸è½½</el-button> |
| | | </p> |
| | | </div> |
| | | </el-dialog> |
| | | <el-dialog :visible.sync="lookDialogVisible" fullscreen title="æ¥çéä»¶" top="5vh" width="800px"> |
| | | <filePreview v-if="lookDialogVisible" :currentFile="{}" :fileUrl="javaApi + '/word/' + currentInfo.url" |
| | | style="height: 90vh;overflow-y: auto;" /> |
| | | </el-dialog> |
| | | </div> |
| | | </template> |
| | | |
| | | <script> |
| | | import limsTable from "@/components/Table/lims-table.vue"; |
| | | import ManagementFormDIa from './managementFormDIa.vue'; |
| | | import filePreview from "@/components/Preview/filePreview.vue"; |
| | | import { |
| | | addReviewProgramFile, |
| | | selectReviewProgramFile, |
| | | getPageReviewProgram, |
| | | deleteReviewProgram, |
| | | exportReviewProgram, |
| | | } from '@/api/cnas/systemManagement/managementReview.js' |
| | | |
| | | export default { |
| | | name: 'managementReviewPlan', |
| | | // import å¼å
¥çç»ä»¶éè¦æ³¨å
¥å°å¯¹è±¡ä¸æè½ä½¿ç¨ |
| | | components: { ManagementFormDIa, limsTable, filePreview }, |
| | | data() { |
| | | // è¿éåæ¾æ°æ® |
| | | return { |
| | | searchForm: { |
| | | judgingLocation: '', |
| | | }, |
| | | listDialogVisible: false, |
| | | lookDialogVisible: false, |
| | | fileList: [], |
| | | currentInfo: {}, |
| | | tableColumn: [ |
| | | { |
| | | label: 'è¯å®¡æ¶é´', |
| | | prop: 'reviewTime', |
| | | }, |
| | | { |
| | | label: 'è¯å®¡å°ç¹', |
| | | prop: 'judgingLocation', |
| | | }, |
| | | { |
| | | label: 'è¯å®¡ç®ç', |
| | | prop: 'judgingPurpose', |
| | | }, |
| | | { |
| | | label: 'è¯å®¡æ¹å¼', |
| | | prop: 'judgingMethod', |
| | | }, |
| | | { |
| | | label: 'è¯å®¡èå´', |
| | | prop: 'judgingScope', |
| | | }, |
| | | // { |
| | | // dataType: 'tag', |
| | | // label: 'æ¹åç¶æ', |
| | | // prop: 'approve', |
| | | // 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; |
| | | // } |
| | | // } |
| | | // }, |
| | | { |
| | | dataType: 'action', |
| | | minWidth: '110', |
| | | label: 'æä½', |
| | | operation: [ |
| | | { |
| | | name: 'ç¼è¾', |
| | | type: 'text', |
| | | clickFun: (row) => { |
| | | this.openFormDia('edit', row); |
| | | }, |
| | | disabled: (row) => { |
| | | return !!row.approve |
| | | }, |
| | | }, |
| | | { |
| | | name: 'ä¸ä¼ ', |
| | | type: 'upload', |
| | | multiple: true, |
| | | limit: 20, |
| | | accept: '.doc,.docx,.xls,.xlsx,.jpg,.jpeg,.png,.pdf', |
| | | clickFun: async (row, file, fileList) => { |
| | | const formData = new FormData(); |
| | | formData.append('file', file.raw); // æä»¶å段 |
| | | formData.append('id', row.id); // æä»¶ååæ®µ |
| | | let res = await addReviewProgramFile(formData) |
| | | if (res.code == 200) { |
| | | this.$message({ message: 'ä¸ä¼ æå', type: 'success' }); |
| | | // this.searchList() |
| | | return |
| | | } else { |
| | | this.$message({ message: 'ä¸ä¼ 失败', type: 'error' }); |
| | | return |
| | | } |
| | | }, |
| | | disabled: (row) => { |
| | | return !!row.approve |
| | | }, |
| | | }, |
| | | { |
| | | name: 'æ¥çéä»¶', |
| | | type: 'text', |
| | | clickFun: (row) => { |
| | | selectReviewProgramFile({ id: row.id }).then(res => { |
| | | this.listDialogVisible = true; |
| | | this.fileList = res.data.fileList |
| | | }); |
| | | }, |
| | | }, |
| | | { |
| | | name: 'æ¹å', |
| | | type: 'text', |
| | | clickFun: (row) => { |
| | | this.openFormDia('ratify', row); |
| | | }, |
| | | disabled: (row) => { |
| | | return !!row.approve |
| | | }, |
| | | }, |
| | | { |
| | | name: 'å é¤', |
| | | type: 'text', |
| | | color: '#f56c6c', |
| | | clickFun: (row) => { |
| | | this.delPlan(row) |
| | | }, |
| | | disabled: (row) => { |
| | | if (row.qualityStatus === 1) { |
| | | return true |
| | | } else { |
| | | return false |
| | | } |
| | | }, |
| | | }, |
| | | { |
| | | name: 'ä¸è½½', |
| | | type: 'text', |
| | | clickFun: (row) => { |
| | | this.handleDown(row) |
| | | } |
| | | }, |
| | | ] |
| | | } |
| | | ], |
| | | tableData: [], |
| | | tableLoading: false, |
| | | page: { |
| | | size: 20, |
| | | current: 1, |
| | | total: 0, |
| | | }, |
| | | managementFormDIa: false, |
| | | }; |
| | | }, |
| | | mounted() { |
| | | this.searchList() |
| | | }, |
| | | // æ¹æ³éå |
| | | methods: { |
| | | // æ¥è¯¢å表 |
| | | searchList() { |
| | | this.tableLoading = true |
| | | getPageReviewProgram({ |
| | | judgingLocation: this.searchForm.judgingLocation, |
| | | pages: this.page.current, |
| | | size: this.page.size |
| | | }).then(res => { |
| | | this.tableLoading = false |
| | | if (res.code === 201) return |
| | | this.tableData = res.data.records |
| | | this.page.total = res.data.total |
| | | }).catch(err => { |
| | | console.log('err---', err); |
| | | this.tableLoading = false |
| | | }) |
| | | }, |
| | | // æ°å¢ï¼ç¼è¾ï¼æ¹åå¼¹æ¡ |
| | | openFormDia(type, row) { |
| | | this.managementFormDIa = true |
| | | this.$nextTick(() => { |
| | | this.$refs.managementFormDIa.openDia(type, row) |
| | | }) |
| | | }, |
| | | closeImplementDia() { |
| | | this.managementFormDIa = false |
| | | this.searchList() |
| | | }, |
| | | // éç½®æ¥è¯¢æ¡ä»¶ |
| | | resetSearchForm() { |
| | | this.searchForm.judgingLocation = ''; |
| | | this.searchList() |
| | | }, |
| | | // å é¤ |
| | | delPlan(row) { |
| | | this.$confirm('æ¤æä½å°æ°¸ä¹
å é¤è¯¥æ°æ®, æ¯å¦ç»§ç»?', 'æç¤º', { |
| | | confirmButtonText: 'ç¡®å®', |
| | | cancelButtonText: 'åæ¶', |
| | | type: 'warning' |
| | | }).then(() => { |
| | | this.tableLoading = true |
| | | deleteReviewProgram({ id: row.id }).then(res => { |
| | | this.tableLoading = false |
| | | if (res.code === 201) return |
| | | this.$message.success('å 餿å') |
| | | this.searchList() |
| | | }).catch(err => { |
| | | this.tableLoading = false |
| | | console.log('err---', err); |
| | | }) |
| | | }).catch(() => { |
| | | this.$message({ |
| | | type: 'info', |
| | | message: '已忶å é¤' |
| | | }); |
| | | }); |
| | | }, |
| | | // å页 |
| | | pagination({ page, limit }) { |
| | | this.page.current = page; |
| | | this.page.size = limit; |
| | | this.searchList(); |
| | | }, |
| | | handleDown(row) { |
| | | exportReviewProgram({ id: row.id }).then(res => { |
| | | if (res.code == 201) { |
| | | this.$message.error(res.message) |
| | | return |
| | | } |
| | | const blob = new Blob([res], { type: 'application/octet-stream' }); |
| | | //å°Blob å¯¹è±¡è½¬æ¢æå符串 |
| | | let reader = new FileReader(); |
| | | reader.readAsText(blob, 'utf-8'); |
| | | reader.onload = () => { |
| | | try { |
| | | let result = JSON.parse(reader.result); |
| | | if (result.message) { |
| | | this.$message.error(result.message); |
| | | } else { |
| | | const url = URL.createObjectURL(blob); |
| | | const link = document.createElement('a'); |
| | | link.href = url; |
| | | link.download = 'è¯å®¡è®¡å.docx'; |
| | | link.click(); |
| | | this.$download.saveAs(blob, name) |
| | | this.$message.success('å¯¼åºæå') |
| | | } |
| | | } catch (err) { |
| | | console.log(err); |
| | | const url = URL.createObjectURL(blob); |
| | | const link = document.createElement('a'); |
| | | link.href = url; |
| | | link.download = 'è¯å®¡è®¡å.docx'; |
| | | link.click(); |
| | | this.$message.success('å¯¼åºæå') |
| | | } |
| | | } |
| | | }) |
| | | }, |
| | | lookFile(url, name) { |
| | | this.currentInfo.url = url |
| | | this.currentInfo.name = name |
| | | this.lookDialogVisible = true |
| | | }, |
| | | handleDown0(url, name) { |
| | | if (!url) return this.$message.warning('æä»¶æªä¸ä¼ ') |
| | | let url0 = this.javaApi + '/word/' + url |
| | | const link = document.createElement('a'); |
| | | link.href = url0; |
| | | link.target = '_blank'; |
| | | link.click(); |
| | | } |
| | | } |
| | | }; |
| | | </script> |
| | | |
| | | <style scoped> |
| | | .search-background { |
| | | width: 100%; |
| | | height: 60px; |
| | | line-height: 60px; |
| | | display: flex; |
| | | justify-content: space-between; |
| | | } |
| | | |
| | | .search-group { |
| | | display: flex; |
| | | align-items: center; |
| | | margin: 0 20px; |
| | | } |
| | | </style> |
¶Ô±ÈÐÂÎļþ |
| | |
| | | <template> |
| | | <div> |
| | | <div class="search-background"> |
| | | <span class="search-group"> |
| | | <span style="width: 160px">ä¼è®®å°ç¹ï¼</span> |
| | | <el-input v-model="searchForm.place" clearable size="small"></el-input> |
| | | <el-button size="medium" style="margin-left: 10px" @click="resetSearchForm">é ç½®</el-button> |
| | | <el-button size="medium" type="primary" @click="searchList">æ¥ è¯¢</el-button> |
| | | </span> |
| | | <span class="search-group"> |
| | | <el-button size="medium" type="primary" @click="openFormDia('add')">æ° å¢</el-button> |
| | | </span> |
| | | </div> |
| | | <div class="table"> |
| | | <limsTable :column="tableColumn" :height="'calc(100vh - 23em)'" :table-data="tableData" |
| | | :table-loading="tableLoading" style="padding: 0 10px;margin-bottom: 16px" :page="page" @pagination="pagination"> |
| | | </limsTable> |
| | | </div> |
| | | <meeting-records-dia v-if="meetingRecordsDia" ref="meetingRecordsDia" |
| | | @closeYearDia="closeYearDia"></meeting-records-dia> |
| | | </div> |
| | | </template> |
| | | |
| | | <script> |
| | | import limsTable from "@/components/Table/lims-table.vue"; |
| | | import MeetingRecordsDia from './meetingRecordsDia.vue'; |
| | | import ManagementFormDIa from './managementFormDIa.vue'; |
| | | import { |
| | | getPageMeeting, |
| | | deleteMeeting, |
| | | exportMeeting, |
| | | } from '@/api/cnas/systemManagement/managementReview.js' |
| | | |
| | | export default { |
| | | name: 'meetingRecords', |
| | | // import å¼å
¥çç»ä»¶éè¦æ³¨å
¥å°å¯¹è±¡ä¸æè½ä½¿ç¨ |
| | | components: { ManagementFormDIa, MeetingRecordsDia, limsTable }, |
| | | data() { |
| | | // è¿éåæ¾æ°æ® |
| | | return { |
| | | searchForm: { |
| | | place: '', |
| | | }, |
| | | tableColumn: [ |
| | | { |
| | | label: 'æ¶é´', |
| | | prop: 'meetingTime', |
| | | minWidth: '100' |
| | | }, |
| | | { |
| | | label: '主æäºº', |
| | | prop: 'compere', |
| | | minWidth: '100' |
| | | }, |
| | | { |
| | | label: 'ä¼è®®å°ç¹', |
| | | prop: 'place', |
| | | minWidth: '100' |
| | | }, |
| | | { |
| | | label: 'ä¼è®®å
容æè¦', |
| | | prop: 'content', |
| | | minWidth: '100' |
| | | }, |
| | | { |
| | | dataType: 'action', |
| | | minWidth: '120', |
| | | label: 'æä½', |
| | | operation: [ |
| | | { |
| | | name: 'ç¼è¾', |
| | | type: 'text', |
| | | clickFun: (row) => { |
| | | this.openFormDia('edit', row); |
| | | }, |
| | | }, |
| | | { |
| | | name: 'å é¤', |
| | | type: 'text', |
| | | color: '#f56c6c', |
| | | clickFun: (row) => { |
| | | this.delPlan(row) |
| | | } |
| | | }, |
| | | { |
| | | name: 'ä¸è½½', |
| | | type: 'text', |
| | | clickFun: (row) => { |
| | | this.handleDown(row) |
| | | } |
| | | }, |
| | | ] |
| | | } |
| | | ], |
| | | tableData: [], |
| | | tableLoading: false, |
| | | page: { |
| | | size: 20, |
| | | current: 1, |
| | | total: 0, |
| | | }, |
| | | meetingRecordsDia: false |
| | | }; |
| | | }, |
| | | mounted() { |
| | | this.searchList() |
| | | }, |
| | | // æ¹æ³éå |
| | | methods: { |
| | | // æ¥è¯¢å表 |
| | | searchList() { |
| | | this.tableLoading = true |
| | | getPageMeeting({ place: this.searchForm.place, pages: this.page.current, size: this.page.size }).then(res => { |
| | | this.tableLoading = false |
| | | if (res.code === 201) return |
| | | this.tableData = res.data.records |
| | | this.page.total = res.data.total |
| | | }).catch(err => { |
| | | console.log('err---', err); |
| | | this.tableLoading = false |
| | | }) |
| | | }, |
| | | // æ°å¢ï¼ç¼è¾å¼¹æ¡ |
| | | openFormDia(type, row) { |
| | | this.meetingRecordsDia = true |
| | | this.$nextTick(() => { |
| | | this.$refs.meetingRecordsDia.openDia(type, row) |
| | | }) |
| | | }, |
| | | closeYearDia() { |
| | | this.meetingRecordsDia = false |
| | | this.searchList() |
| | | }, |
| | | // éç½®æ¥è¯¢æ¡ä»¶ |
| | | resetSearchForm() { |
| | | this.searchForm.place = ''; |
| | | this.searchList() |
| | | }, |
| | | // å é¤ |
| | | delPlan(row) { |
| | | this.$confirm('æ¤æä½å°æ°¸ä¹
å é¤è¯¥æ°æ®, æ¯å¦ç»§ç»?', 'æç¤º', { |
| | | confirmButtonText: 'ç¡®å®', |
| | | cancelButtonText: 'åæ¶', |
| | | type: 'warning' |
| | | }).then(() => { |
| | | this.tableLoading = true |
| | | deleteMeeting({ id: row.id }).then(res => { |
| | | this.tableLoading = false |
| | | if (res.code === 201) return |
| | | this.$message.success('å 餿å') |
| | | this.searchList() |
| | | }).catch(err => { |
| | | this.tableLoading = false |
| | | console.log('err---', err); |
| | | }) |
| | | }).catch(() => { |
| | | this.$message({ |
| | | type: 'info', |
| | | message: '已忶å é¤' |
| | | }); |
| | | }); |
| | | }, |
| | | pagination({ page, limit }) { |
| | | this.page.current = page; |
| | | this.page.size = limit; |
| | | this.searchList(); |
| | | }, |
| | | handleDown(row) { |
| | | exportMeeting({ id: row.id }).then(res => { |
| | | if (res.code == 201) { |
| | | this.$message.error(res.message) |
| | | return |
| | | } |
| | | const blob = new Blob([res], { type: 'application/octet-stream' }); |
| | | //å°Blob å¯¹è±¡è½¬æ¢æå符串 |
| | | let reader = new FileReader(); |
| | | reader.readAsText(blob, 'utf-8'); |
| | | reader.onload = () => { |
| | | try { |
| | | let result = JSON.parse(reader.result); |
| | | if (result.message) { |
| | | this.$message.error(result.message); |
| | | } else { |
| | | const url = URL.createObjectURL(blob); |
| | | const link = document.createElement('a'); |
| | | link.href = url; |
| | | link.download = 'ä¼è®®è®°å½.docx'; |
| | | link.click(); |
| | | this.$message.success('å¯¼åºæå') |
| | | } |
| | | } catch (err) { |
| | | console.log(err); |
| | | const url = URL.createObjectURL(blob); |
| | | const link = document.createElement('a'); |
| | | link.href = url; |
| | | link.download = 'ä¼è®®è®°å½.docx'; |
| | | link.click(); |
| | | this.$message.success('å¯¼åºæå') |
| | | } |
| | | } |
| | | }) |
| | | }, |
| | | } |
| | | }; |
| | | </script> |
| | | |
| | | <style scoped> |
| | | .search-background { |
| | | width: 100%; |
| | | height: 60px; |
| | | line-height: 60px; |
| | | display: flex; |
| | | justify-content: space-between; |
| | | } |
| | | |
| | | .search-group { |
| | | display: flex; |
| | | align-items: center; |
| | | margin: 0 20px; |
| | | } |
| | | </style> |
¶Ô±ÈÐÂÎļþ |
| | |
| | | <template> |
| | | <div> |
| | | <el-dialog v-loading="diaLoading" :close-on-click-modal="false" :close-on-press-escape="false" |
| | | :visible.sync="formDia" title="管çè¯å®¡ä¼è®®è®°å½" width="1000px" @close="closeYearDia"> |
| | | <el-form ref="form" :model="form" :rules="rules" label-position="top" label-width="auto"> |
| | | <el-row :gutter="20"> |
| | | <el-col :span="12"> |
| | | <el-form-item label="æ¶é´" prop="meetingTime"> |
| | | <el-date-picker v-model="form.meetingTime" clearable format="yyyy-MM-dd HH:mm:ss" placeholder="éæ©æ¥æ" |
| | | size="small" style="width: 100%" type="datetime" value-format="yyyy-MM-dd HH:mm:ss"> |
| | | </el-date-picker> |
| | | </el-form-item> |
| | | </el-col> |
| | | <el-col :span="12"> |
| | | <el-form-item label="å°ç¹" prop="place"> |
| | | <el-input v-model="form.place" clearable size="small"></el-input> |
| | | </el-form-item> |
| | | </el-col> |
| | | <el-col :span="12"> |
| | | <el-form-item label="主æäºº" prop="compere"> |
| | | <el-input v-model="form.compere" clearable size="small"></el-input> |
| | | </el-form-item> |
| | | </el-col> |
| | | <el-col :span="12"> |
| | | <el-form-item label="ä¼è®®å
容æè¦" prop="content"> |
| | | <el-input v-model="form.content" clearable size="small"></el-input> |
| | | </el-form-item> |
| | | </el-col> |
| | | <el-col :span="24"> |
| | | <el-form-item label="åä¼äººå" prop="participant"> |
| | | <el-select v-model="form.participant" clearable filterable multiple placeholder="è¯·éæ©" size="small" |
| | | style="width: 100%;"> |
| | | <el-option v-for="(item, i) in personList" :key="i" :label="item.label" :value="item.value"> |
| | | </el-option> |
| | | </el-select> |
| | | </el-form-item> |
| | | </el-col> |
| | | </el-row> |
| | | </el-form> |
| | | <span slot="footer" class="dialog-footer"> |
| | | <el-button @click="closeYearDia">å æ¶</el-button> |
| | | <el-button :loading="loading" type="primary" @click="handleEdit">æ 交</el-button> |
| | | </span> |
| | | </el-dialog> |
| | | </div> |
| | | </template> |
| | | |
| | | <script> |
| | | import { |
| | | addMeeting, |
| | | modifyMeeting, |
| | | } from '@/api/cnas/systemManagement/managementReview.js' |
| | | import { |
| | | selectUserCondition, |
| | | } from "@/api/business/inspectionTask.js"; |
| | | export default { |
| | | name: 'meetingRecordsDia', |
| | | // import å¼å
¥çç»ä»¶éè¦æ³¨å
¥å°å¯¹è±¡ä¸æè½ä½¿ç¨ |
| | | components: {}, |
| | | data() { |
| | | // è¿éåæ¾æ°æ® |
| | | return { |
| | | formDia: false, |
| | | diaLoading: false, |
| | | loading: false, |
| | | form: { |
| | | id: '', |
| | | meetingTime: '', |
| | | compere: '', |
| | | place: '', |
| | | content: '', |
| | | participant: [], |
| | | }, |
| | | rules: { |
| | | meetingTime: [{ required: true, message: '请填åä¼è®®æ¶é´', trigger: 'blur' }], |
| | | compere: [{ required: true, message: '请填å主æäºº', trigger: 'blur' }], |
| | | place: [{ required: true, message: '请填åå°ç¹', trigger: 'blur' }], |
| | | content: [{ required: true, message: '请填åä¼è®®å
容æè¦', trigger: 'blur' }], |
| | | participant: [{ required: true, message: 'è¯·éæ©åå 人å', trigger: 'change' }], |
| | | }, |
| | | operationType: '', |
| | | personList: [] |
| | | }; |
| | | }, |
| | | mounted() { |
| | | |
| | | }, |
| | | // æ¹æ³éå |
| | | methods: { |
| | | // æå¼å¼¹æ¡ |
| | | openDia(type, row) { |
| | | this.operationType = type |
| | | this.getAuthorizedPerson() |
| | | if (type !== 'add') { |
| | | this.form = row |
| | | this.form.participant = row.participant.split(',').map(a => { |
| | | a = Number(a) |
| | | return a |
| | | }) |
| | | } |
| | | this.formDia = true |
| | | }, |
| | | // æäº¤å¼¹æ¡æ°æ® |
| | | handleEdit() { |
| | | this.$refs['form'].validate((valid) => { |
| | | if (valid) { |
| | | this.loading = true |
| | | const internalMeeting = this.HaveJson(this.form) |
| | | internalMeeting.participant = internalMeeting.participant.join(',') |
| | | if (this.operationType === 'add') { |
| | | addMeeting(internalMeeting).then(res => { |
| | | this.loading = false |
| | | if (res.code === 201) return |
| | | this.$message.success('æä½æå') |
| | | this.closeYearDia() |
| | | }).catch(err => { |
| | | console.log('err---', err); |
| | | this.loading = false |
| | | }) |
| | | } else if (this.operationType === 'edit') { |
| | | modifyMeeting(internalMeeting).then(res => { |
| | | this.loading = false |
| | | if (res.code === 201) return |
| | | this.$message.success('æä½æå') |
| | | this.closeYearDia() |
| | | }).catch(err => { |
| | | console.log('err---', err); |
| | | this.loading = false |
| | | }) |
| | | } |
| | | } else { |
| | | console.log('error submit!!'); |
| | | return false; |
| | | } |
| | | }); |
| | | }, |
| | | closeYearDia() { |
| | | this.$refs.form.resetFields(); |
| | | this.formDia = false |
| | | this.$emit('closeYearDia') |
| | | }, |
| | | getAuthorizedPerson() { |
| | | selectUserCondition().then(res => { |
| | | let data = [] |
| | | res.data.forEach(a => { |
| | | data.push({ |
| | | label: a.name, |
| | | value: a.id |
| | | }) |
| | | }) |
| | | this.personList = data |
| | | }) |
| | | }, |
| | | } |
| | | }; |
| | | </script> |
| | | |
| | | <style scoped></style> |
¶Ô±ÈÐÂÎļþ |
| | |
| | | <template> |
| | | <div> |
| | | <div class="search-background"> |
| | | <span class="search-group"> |
| | | <span style="width: 160px">å°ç¹ï¼</span> |
| | | <el-input v-model="searchForm.place" clearable size="small"></el-input> |
| | | <el-button size="medium" style="margin-left: 10px" @click="resetSearchForm">é ç½®</el-button> |
| | | <el-button size="medium" type="primary" @click="searchList">æ¥ è¯¢</el-button> |
| | | </span> |
| | | <span class="search-group"> |
| | | <el-button size="medium" type="primary" @click="openFormDia('add')">æ° å¢</el-button> |
| | | </span> |
| | | </div> |
| | | <div class="table"> |
| | | <limsTable :column="tableColumn" :height="'calc(100vh - 23em)'" :table-data="tableData" |
| | | :table-loading="tableLoading" style="padding: 0 10px;margin-bottom: 16px" :page="page" @pagination="pagination"> |
| | | </limsTable> |
| | | </div> |
| | | <review-report-dia v-if="reviewReportDia" ref="reviewReportDia" @closeYearDia="closeYearDia"></review-report-dia> |
| | | </div> |
| | | </template> |
| | | |
| | | <script> |
| | | import limsTable from "@/components/Table/lims-table.vue"; |
| | | import ReviewReportDia from './reviewReportDia.vue'; |
| | | import { |
| | | getPageReviewReport, |
| | | deleteReviewReport, |
| | | exportReviewReport, |
| | | modifyReviewReport, |
| | | } from '@/api/cnas/systemManagement/managementReview.js' |
| | | import { mapGetters } from "vuex"; |
| | | export default { |
| | | name: 'reviewReport', |
| | | // import å¼å
¥çç»ä»¶éè¦æ³¨å
¥å°å¯¹è±¡ä¸æè½ä½¿ç¨ |
| | | components: { ReviewReportDia, limsTable }, |
| | | data() { |
| | | // è¿éåæ¾æ°æ® |
| | | return { |
| | | searchForm: { |
| | | place: '', |
| | | }, |
| | | tableColumn: [ |
| | | { |
| | | label: 'ç®ç', |
| | | prop: 'objective', |
| | | minWidth: '100' |
| | | }, |
| | | { |
| | | label: 'å°ç¹', |
| | | prop: 'place', |
| | | minWidth: '100' |
| | | }, |
| | | { |
| | | label: '主æäºº', |
| | | prop: 'compere', |
| | | minWidth: '100' |
| | | }, |
| | | { |
| | | label: 'è®°å½äºº', |
| | | prop: 'recordPeople', |
| | | minWidth: '100' |
| | | }, |
| | | { |
| | | label: 'æ¥æ', |
| | | prop: 'date', |
| | | minWidth: '100' |
| | | }, |
| | | { |
| | | label: '页次', |
| | | prop: 'page', |
| | | minWidth: '100' |
| | | }, |
| | | { |
| | | label: 'è¯å®¡æ¹å¼', |
| | | prop: 'judgingMethod', |
| | | minWidth: '100' |
| | | }, |
| | | { |
| | | label: 'è¯å®¡ä¾æ®', |
| | | prop: 'reviewBasis', |
| | | minWidth: '100' |
| | | }, |
| | | { |
| | | dataType: 'action', |
| | | minWidth: '160', |
| | | label: 'æä½', |
| | | operation: [ |
| | | { |
| | | name: 'ç¼è¾', |
| | | type: 'text', |
| | | clickFun: (row) => { |
| | | this.openFormDia('edit', row); |
| | | }, |
| | | disabled: (row) => { |
| | | return !!row.audit || !!row.approval |
| | | } |
| | | }, |
| | | { |
| | | name: 'å®¡æ ¸', |
| | | type: 'text', |
| | | clickFun: (row) => { |
| | | this.$confirm('ç¡®å®å®¡æ ¸éè¿?', 'æç¤º', { |
| | | confirmButtonText: 'ç¡®å®', |
| | | cancelButtonText: 'åæ¶', |
| | | type: 'warning' |
| | | }).then(() => { |
| | | this.submit('audit', row) |
| | | }).catch(() => { |
| | | }); |
| | | }, |
| | | disabled: (row) => { |
| | | return !!row.audit |
| | | } |
| | | }, |
| | | { |
| | | name: 'æ¹å', |
| | | type: 'text', |
| | | clickFun: (row) => { |
| | | this.$confirm('ç¡®å®æ¹åéè¿?', 'æç¤º', { |
| | | confirmButtonText: 'ç¡®å®', |
| | | cancelButtonText: 'åæ¶', |
| | | type: 'warning' |
| | | }).then(() => { |
| | | this.submit('approval', row) |
| | | }).catch(() => { |
| | | }); |
| | | }, |
| | | disabled: (row) => { |
| | | return !row.audit || !!row.approval |
| | | } |
| | | }, |
| | | { |
| | | name: 'å é¤', |
| | | type: 'text', |
| | | color: '#f56c6c', |
| | | clickFun: (row) => { |
| | | this.delPlan(row) |
| | | } |
| | | }, |
| | | { |
| | | name: 'ä¸è½½', |
| | | type: 'text', |
| | | clickFun: (row) => { |
| | | this.handleDown(row) |
| | | } |
| | | }, |
| | | ] |
| | | } |
| | | ], |
| | | tableData: [], |
| | | tableLoading: false, |
| | | page: { |
| | | size: 20, |
| | | current: 1, |
| | | total: 0, |
| | | }, |
| | | reviewReportDia: false, |
| | | }; |
| | | }, |
| | | computed: { |
| | | ...mapGetters(['nickName']) |
| | | }, |
| | | mounted() { |
| | | this.searchList() |
| | | }, |
| | | // æ¹æ³éå |
| | | methods: { |
| | | // æ¥è¯¢å表 |
| | | searchList() { |
| | | this.tableLoading = true |
| | | getPageReviewReport({ place: this.searchForm.place, pages: this.page.current, size: this.page.size }).then(res => { |
| | | this.tableLoading = false |
| | | if (res.code === 201) return |
| | | this.tableData = res.data.records |
| | | this.page.total = res.data.total |
| | | }).catch(err => { |
| | | console.log('err---', err); |
| | | this.tableLoading = false |
| | | }) |
| | | }, |
| | | // æ°å¢ï¼ç¼è¾å¼¹æ¡ |
| | | openFormDia(type, row) { |
| | | this.reviewReportDia = true |
| | | this.$nextTick(() => { |
| | | this.$refs.reviewReportDia.openDia(type, row) |
| | | }) |
| | | }, |
| | | closeYearDia() { |
| | | this.reviewReportDia = false |
| | | this.searchList() |
| | | }, |
| | | // éç½®æ¥è¯¢æ¡ä»¶ |
| | | resetSearchForm() { |
| | | this.searchForm.place = ''; |
| | | this.searchList() |
| | | }, |
| | | // å é¤ |
| | | delPlan(row) { |
| | | this.$confirm('æ¤æä½å°æ°¸ä¹
å é¤è¯¥æ°æ®, æ¯å¦ç»§ç»?', 'æç¤º', { |
| | | confirmButtonText: 'ç¡®å®', |
| | | cancelButtonText: 'åæ¶', |
| | | type: 'warning' |
| | | }).then(() => { |
| | | this.tableLoading = true |
| | | deleteReviewReport({ id: row.id }).then(res => { |
| | | this.tableLoading = false |
| | | if (res.code === 201) return |
| | | this.$message.success('å 餿å') |
| | | this.searchList() |
| | | }).catch(err => { |
| | | this.tableLoading = false |
| | | console.log('err---', err); |
| | | }) |
| | | }).catch(() => { |
| | | this.$message({ |
| | | type: 'info', |
| | | message: '已忶å é¤' |
| | | }); |
| | | }); |
| | | }, |
| | | pagination({ page, limit }) { |
| | | this.page.current = page; |
| | | this.page.size = limit; |
| | | this.searchList(); |
| | | }, |
| | | handleDown(row) { |
| | | exportReviewReport({ id: row.id }).then(res => { |
| | | if (res.code == 201) { |
| | | this.$message.error(res.message) |
| | | return |
| | | } |
| | | const blob = new Blob([res], { type: 'application/octet-stream' }); |
| | | //å°Blob å¯¹è±¡è½¬æ¢æå符串 |
| | | let reader = new FileReader(); |
| | | reader.readAsText(blob, 'utf-8'); |
| | | reader.onload = () => { |
| | | try { |
| | | let result = JSON.parse(reader.result); |
| | | if (result.message) { |
| | | this.$message.error(result.message); |
| | | } else { |
| | | const url = URL.createObjectURL(blob); |
| | | const link = document.createElement('a'); |
| | | link.href = url; |
| | | link.download = 'è¯å®¡æ¥å.docx'; |
| | | link.click(); |
| | | this.$message.success('å¯¼åºæå') |
| | | } |
| | | } catch (err) { |
| | | console.log(err); |
| | | const url = URL.createObjectURL(blob); |
| | | const link = document.createElement('a'); |
| | | link.href = url; |
| | | link.download = 'è¯å®¡æ¥å.docx'; |
| | | link.click(); |
| | | this.$message.success('å¯¼åºæå') |
| | | } |
| | | } |
| | | }) |
| | | }, |
| | | submit(type, row) { |
| | | let obj = row |
| | | obj[type] = this.nickNamee; |
| | | modifyReviewReport(obj).then(res => { |
| | | if (res.code === 201) return |
| | | this.$message.success('æä½æå') |
| | | this.searchList() |
| | | }).catch(err => { |
| | | console.log('err---', err); |
| | | }) |
| | | } |
| | | } |
| | | }; |
| | | </script> |
| | | |
| | | <style scoped> |
| | | .search-background { |
| | | width: 100%; |
| | | height: 60px; |
| | | line-height: 60px; |
| | | display: flex; |
| | | justify-content: space-between; |
| | | } |
| | | |
| | | .search-group { |
| | | display: flex; |
| | | align-items: center; |
| | | margin: 0 20px; |
| | | } |
| | | </style> |
¶Ô±ÈÐÂÎļþ |
| | |
| | | <template> |
| | | <div> |
| | | <el-dialog v-loading="diaLoading" :close-on-click-modal="false" :close-on-press-escape="false" |
| | | :visible.sync="formDia" title="管çè¯å®¡ä¼è®®è®°å½" width="1000px" @close="closeYearDia"> |
| | | <el-form ref="form" :model="form" :rules="rules" label-position="top" label-width="auto"> |
| | | <el-row :gutter="20"> |
| | | <el-col :span="12"> |
| | | <el-form-item label="ç®ç" prop="objective"> |
| | | <el-input v-model="form.objective" clearable size="small"></el-input> |
| | | </el-form-item> |
| | | </el-col> |
| | | <el-col :span="12"> |
| | | <el-form-item label="å°ç¹" prop="place"> |
| | | <el-input v-model="form.place" clearable size="small"></el-input> |
| | | </el-form-item> |
| | | </el-col> |
| | | <el-col :span="12"> |
| | | <el-form-item label="主æäºº" prop="compere"> |
| | | <el-input v-model="form.compere" clearable size="small"></el-input> |
| | | </el-form-item> |
| | | </el-col> |
| | | <el-col :span="12"> |
| | | <el-form-item label="è®°å½äºº" prop="recordPeople"> |
| | | <el-input v-model="form.recordPeople" clearable size="small"></el-input> |
| | | </el-form-item> |
| | | </el-col> |
| | | <el-col :span="12"> |
| | | <el-form-item label="æ¥æ" prop="date"> |
| | | <el-date-picker v-model="form.date" clearable format="yyyy-MM-dd HH:mm:ss" placeholder="éæ©æ¥æ" size="small" |
| | | style="width: 100%" type="datetime" value-format="yyyy-MM-dd HH:mm:ss"> |
| | | </el-date-picker> |
| | | </el-form-item> |
| | | </el-col> |
| | | <el-col :span="12"> |
| | | <el-form-item label="页次" prop="page"> |
| | | <el-input v-model="form.page" clearable size="small"></el-input> |
| | | </el-form-item> |
| | | </el-col> |
| | | <el-col :span="12"> |
| | | <el-form-item label="è¯å®¡æ¹å¼" prop="judgingMethod"> |
| | | <el-input v-model="form.judgingMethod" clearable size="small"></el-input> |
| | | </el-form-item> |
| | | </el-col> |
| | | <el-col :span="12"> |
| | | <el-form-item label="è¯å®¡ä¾æ®" prop="reviewBasis"> |
| | | <el-input v-model="form.reviewBasis" clearable size="small"></el-input> |
| | | </el-form-item> |
| | | </el-col> |
| | | <el-col :span="24"> |
| | | <el-form-item label="åºå¸äººå" prop="attendess"> |
| | | <!-- <el-input v-model="form.attendess " clearable size="small"></el-input> --> |
| | | <el-select v-model="form.attendess" size="small" style="width: 100%;" filterable clearable multiple> |
| | | <el-option v-for="item in personList" :key="item.value" :label="item.label" :value="item.value"> |
| | | </el-option> |
| | | </el-select> |
| | | </el-form-item> |
| | | </el-col> |
| | | <el-col :span="24"> |
| | | <el-form-item label="è¯å®¡è¾å
¥æ
åµ" prop="reviewInputs"> |
| | | <el-input v-model="form.reviewInputs" clearable size="small"></el-input> |
| | | </el-form-item> |
| | | </el-col> |
| | | <el-col :span="24"> |
| | | <el-form-item label="è¯å®¡è¿ç¨æ¦åµ" prop="reviewProcess"> |
| | | <el-input v-model="form.reviewProcess" clearable size="small"></el-input> |
| | | </el-form-item> |
| | | </el-col> |
| | | <el-col :span="24"> |
| | | <el-form-item label="主è¦è®®é¢æ¦è¿°" prop="mainTopic"> |
| | | <el-input v-model="form.mainTopic" :rows="5" clearable placeholder="请è¾å
¥å
容ï¼å¯è¾å
¥å åå" size="small" |
| | | type="textarea"> |
| | | </el-input> |
| | | </el-form-item> |
| | | </el-col> |
| | | <el-col :span="24"> |
| | | <el-form-item label="äºé¡¹" prop="matters"> |
| | | <el-input v-model="form.matters" clearable size="small"></el-input> |
| | | </el-form-item> |
| | | </el-col> |
| | | <el-col :span="24"> |
| | | <el-form-item label="è´è´£äºº" prop="head"> |
| | | <el-input v-model="form.head" clearable size="small"></el-input> |
| | | </el-form-item> |
| | | </el-col> |
| | | <el-col :span="24"> |
| | | <el-form-item label="å®ææ¥æ" prop="completionDate"> |
| | | <el-date-picker v-model="form.completionDate" clearable format="yyyy-MM-dd HH:mm:ss" placeholder="éæ©æ¥æ" |
| | | size="small" style="width: 100%" type="datetime" value-format="yyyy-MM-dd HH:mm:ss"> |
| | | </el-date-picker> |
| | | </el-form-item> |
| | | </el-col> |
| | | <el-col :span="24"> |
| | | <el-form-item label="è·è¸ªç¡®è®¤äºº" prop="trackingConfirmed"> |
| | | <el-input v-model="form.trackingConfirmed" clearable size="small"></el-input> |
| | | </el-form-item> |
| | | </el-col> |
| | | <el-col :span="24"> |
| | | <el-form-item label="è·è¸ªæ
åµç¡®è®¤è®°å½" prop="follerUp"> |
| | | <el-input v-model="form.follerUp" clearable size="small"></el-input> |
| | | </el-form-item> |
| | | </el-col> |
| | | <el-col :span="24"> |
| | | <el-form-item label="ä½ç³»è¯ä»·" prop="overallEvaluation"> |
| | | <el-input v-model="form.overallEvaluation" clearable size="small"></el-input> |
| | | </el-form-item> |
| | | </el-col> |
| | | </el-row> |
| | | </el-form> |
| | | <span slot="footer" class="dialog-footer"> |
| | | <el-button @click="closeYearDia">å æ¶</el-button> |
| | | <el-button :loading="loading" type="primary" @click="handleEdit">æ 交</el-button> |
| | | </span> |
| | | </el-dialog> |
| | | </div> |
| | | </template> |
| | | |
| | | <script> |
| | | import { |
| | | addReviewReport, |
| | | modifyReviewReport, |
| | | } from '@/api/cnas/systemManagement/managementReview.js' |
| | | import { |
| | | selectUserCondition, |
| | | } from "@/api/business/inspectionTask.js"; |
| | | export default { |
| | | name: 'reviewReportDia', |
| | | // import å¼å
¥çç»ä»¶éè¦æ³¨å
¥å°å¯¹è±¡ä¸æè½ä½¿ç¨ |
| | | components: {}, |
| | | data() { |
| | | // è¿éåæ¾æ°æ® |
| | | return { |
| | | formDia: false, |
| | | diaLoading: false, |
| | | loading: false, |
| | | form: { |
| | | id: '', |
| | | objective: '', |
| | | place: '', |
| | | compere: '', |
| | | recordPeople: '', |
| | | date: '', |
| | | page: '', |
| | | judgingMethod: '', |
| | | reviewBasis: '', |
| | | attendess: [], |
| | | reviewInputs: '', |
| | | reviewProcess: '', |
| | | mainTopic: '', |
| | | matters: '', |
| | | head: '', |
| | | completionDate: '', |
| | | trackingConfirmed: '', |
| | | follerUp: '', |
| | | overallEvaluation: '', |
| | | }, |
| | | rules: { |
| | | objective: [{ required: true, message: '请填åç®ç', trigger: 'blur' }], |
| | | place: [{ required: true, message: '请填åå°ç¹', trigger: 'blur' }], |
| | | compere: [{ required: true, message: '请填å主æäºº', trigger: 'blur' }], |
| | | recordPeople: [{ required: true, message: '请填åè®°å½äºº', trigger: 'blur' }], |
| | | date: [{ required: true, message: 'è¯·éæ©æ¥æ', trigger: 'change' }], |
| | | completionDate: [{ required: true, message: 'è¯·éæ©å®ææ¥æ', trigger: 'change' }], |
| | | page: [{ required: true, message: '请填å页次', trigger: 'blur' }], |
| | | judgingMethod: [{ required: true, message: '请填åè¯å®¡æ¹å¼', trigger: 'blur' }], |
| | | reviewBasis: [{ required: true, message: '请填åè¯å®¡ä¾æ®', trigger: 'blur' }], |
| | | attendess: [{ required: true, message: '请填ååºå¸äººå', trigger: 'change' }], |
| | | reviewInputs: [{ required: true, message: '请填åè¯å®¡è¾å
¥æ
åµ', trigger: 'blur' }], |
| | | reviewProcess: [{ required: true, message: '请填åè¯å®¡è¾å
¥æ
åµ', trigger: 'blur' }], |
| | | mainTopic: [{ required: true, message: '请填å主è¦è®®é¢æ¦è¿°', trigger: 'blur' }], |
| | | matters: [{ required: true, message: '请填å主è¦è®®é¢æ¦è¿°', trigger: 'blur' }], |
| | | head: [{ required: true, message: '请填åè´è´£äºº', trigger: 'blur' }], |
| | | trackingConfirmed: [{ required: true, message: '请填åè·è¸ªç¡®è®¤äºº', trigger: 'blur' }], |
| | | follerUp: [{ required: true, message: '请填åè·è¸ªç¡®è®¤äºº', trigger: 'blur' }], |
| | | overallEvaluation: [{ required: true, message: '请填åä½ç³»è¯ä»·', trigger: 'blur' }], |
| | | }, |
| | | operationType: '', |
| | | personList: [] |
| | | }; |
| | | }, |
| | | mounted() { |
| | | |
| | | }, |
| | | // æ¹æ³éå |
| | | methods: { |
| | | // æå¼å¼¹æ¡ |
| | | openDia(type, row) { |
| | | this.formDia = true |
| | | this.operationType = type |
| | | this.getAuthorizedPerson() |
| | | if (type !== 'add') { |
| | | this.form = row |
| | | this.form.attendess = this.form.attendess ? this.form.attendess.split(',').map(m => Number(m)) : [] |
| | | } |
| | | }, |
| | | // æäº¤å¼¹æ¡æ°æ® |
| | | handleEdit() { |
| | | this.$refs['form'].validate((valid) => { |
| | | if (valid) { |
| | | this.loading = true |
| | | const internalMeeting = this.HaveJson(this.form) |
| | | internalMeeting.attendess = internalMeeting.attendess ? internalMeeting.attendess.join(',') : '' |
| | | if (this.operationType === 'add') { |
| | | addReviewReport(internalMeeting).then(res => { |
| | | this.loading = false |
| | | if (res.code === 201) return |
| | | this.$message.success('æä½æå') |
| | | this.closeYearDia() |
| | | }).catch(err => { |
| | | console.log('err---', err); |
| | | this.loading = false |
| | | }) |
| | | } else if (this.operationType === 'edit') { |
| | | modifyReviewReport(internalMeeting).then(res => { |
| | | this.loading = false |
| | | if (res.code === 201) return |
| | | this.$message.success('æä½æå') |
| | | this.closeYearDia() |
| | | }).catch(err => { |
| | | console.log('err---', err); |
| | | this.loading = false |
| | | }) |
| | | } |
| | | } else { |
| | | console.log('error submit!!'); |
| | | return false; |
| | | } |
| | | }); |
| | | }, |
| | | closeYearDia() { |
| | | this.$refs.form.resetFields(); |
| | | this.formDia = false |
| | | this.$emit('closeYearDia') |
| | | }, |
| | | getAuthorizedPerson() { |
| | | selectUserCondition().then(res => { |
| | | let data = [] |
| | | res.data.forEach(a => { |
| | | data.push({ |
| | | label: a.name, |
| | | value: a.id |
| | | }) |
| | | }) |
| | | this.personList = data |
| | | }) |
| | | }, |
| | | } |
| | | }; |
| | | </script> |
| | | |
| | | <style scoped> |
| | | >>>.el-dialog { |
| | | margin: 4vh auto 50px !important; |
| | | } |
| | | |
| | | >>>.el-dialog__body { |
| | | max-height: 600px; |
| | | overflow-y: auto; |
| | | } |
| | | </style> |
¶Ô±ÈÐÂÎļþ |
| | |
| | | <template> |
| | | <div class="main"> |
| | | <el-tabs v-model="activeName" class="tab-panel" type="border-card"> |
| | | <el-tab-pane label="管çè¯å®¡è®¡å" name="yearPlan"> |
| | | <management-review-plan></management-review-plan> |
| | | </el-tab-pane> |
| | | <el-tab-pane label="ä¼è®®è®°å½" name="implementationPlan"> |
| | | <meeting-records></meeting-records> |
| | | </el-tab-pane> |
| | | <el-tab-pane label="è¯å®¡æ¥å" name="meetingSignIn"> |
| | | <review-report></review-report> |
| | | </el-tab-pane> |
| | | </el-tabs> |
| | | </div> |
| | | </template> |
| | | |
| | | <script> |
| | | import ManagementReviewPlan from './components/managementReviewPlan.vue'; |
| | | import MeetingRecords from './components/meetingRecords.vue'; |
| | | import ReviewReport from './components/reviewReport.vue'; |
| | | |
| | | export default { |
| | | name: 'a9-management-review', |
| | | // import å¼å
¥çç»ä»¶éè¦æ³¨å
¥å°å¯¹è±¡ä¸æè½ä½¿ç¨ |
| | | components: { ReviewReport, MeetingRecords, ManagementReviewPlan }, |
| | | data() { |
| | | // è¿éåæ¾æ°æ® |
| | | return { |
| | | activeName: 'yearPlan', |
| | | }; |
| | | }, |
| | | mounted() { |
| | | |
| | | }, |
| | | // æ¹æ³éå |
| | | methods: {} |
| | | }; |
| | | </script> |
| | | |
| | | <style scoped> |
| | | .main { |
| | | padding: 15px 0; |
| | | } |
| | | |
| | | .tab-panel { |
| | | background: #fff; |
| | | } |
| | | </style> |
¶Ô±ÈÐÂÎļþ |
| | |
| | | <template> |
| | | <div> |
| | | <el-dialog :close-on-click-modal="false" :close-on-press-escape="false" :visible.sync="quarterSampleDia" title="å£åº¦æ½æ ·" width="90%" @close="quarterSampleDia = false"> |
| | | <div style="display: flex;align-items: center;justify-content: space-between;margin-bottom: 10px"> |
| | | <div style="width: 30%;display: flex;align-items: center;" > |
| | | <span style="width: 50px">ç¼å·ï¼</span> |
| | | <el-input v-model="quarterSampleForm.quarterNo" :disabled="operationType !== 'add'" size="small"></el-input> |
| | | </div> |
| | | <div v-if="operationType === 'add'"> |
| | | <el-button size="small" type="primary" @click="addQuarter">æ·»å </el-button> |
| | | <el-button size="small" type="danger" @click="clearTable">æ¸
空</el-button> |
| | | </div> |
| | | </div> |
| | | <div> |
| | | <el-table v-loading="tableLoading" :data="quarterItems" border height="420" style="width: 100%"> |
| | | <el-table-column label="产åç±»å" prop="productType" width="200"> |
| | | <template slot-scope="{row}"> |
| | | <template> |
| | | <el-input v-model="row.productType" size="small"/> |
| | | </template> |
| | | </template> |
| | | </el-table-column> |
| | | <el-table-column label="责任人" prop="dutyUser" width="100"></el-table-column> |
| | | <el-table-column label="åå·" prop="productModel" width="120"> |
| | | <template slot-scope="{row}"> |
| | | <template> |
| | | <el-input v-model="row.productModel" size="small" :disabled="operationType === 'view'"/> |
| | | </template> |
| | | </template> |
| | | </el-table-column> |
| | | <el-table-column label="æ½æ ·æ°é" min-width="340" prop="spotCheckNumber"> |
| | | <template slot-scope="{row}"> |
| | | <template> |
| | | <el-input v-model="row.spotCheckNumber" size="small" :disabled="operationType === 'view'"/> |
| | | </template> |
| | | </template> |
| | | </el-table-column> |
| | | <el-table-column v-if="operationType === 'add'" label="æ°é" min-width="120" prop="number"> |
| | | <template slot-scope="{row}"> |
| | | <template> |
| | | <el-input v-model="row.number" size="small" :disabled="operationType === 'view'"/> |
| | | </template> |
| | | </template> |
| | | </el-table-column> |
| | | <el-table-column v-if="operationType !== 'add'" label="æ½æ ·æ¶é´" prop="spotCheckTime" width="160"> |
| | | <template slot-scope="{row}"> |
| | | <template> |
| | | <el-date-picker v-model="row.spotCheckTime" |
| | | format="yyyy-MM-dd" |
| | | :disabled="operationType === 'view'" |
| | | placeholder="éæ©æ¥æ" |
| | | size="small" |
| | | clearable |
| | | style="width:100%" |
| | | type="date" |
| | | value-format="yyyy-MM-dd"> |
| | | </el-date-picker> |
| | | </template> |
| | | </template> |
| | | </el-table-column> |
| | | <el-table-column v-if="operationType !== 'add'" label="è¯æ ·ç»è®º" prop="result" width="130"> |
| | | <template v-slot="scope"> |
| | | <el-select v-model="scope.row.result" placeholder="è¯·éæ©" size="small" clearable :disabled="operationType === 'view'"> |
| | | <el-option label="åæ ¼" value="åæ ¼"></el-option> |
| | | <el-option label="ä¸åæ ¼" value="ä¸åæ ¼"></el-option> |
| | | </el-select> |
| | | </template> |
| | | </el-table-column> |
| | | <el-table-column v-if="operationType !== 'add'" label="åæ ·äººå" prop="samplingUser" width="120"> |
| | | <template slot-scope="{row}"> |
| | | <template> |
| | | <el-input v-model="row.samplingUser" size="small" :disabled="operationType === 'view'"/> |
| | | </template> |
| | | </template> |
| | | </el-table-column> |
| | | <el-table-column label="夿³¨" prop="itemRemark" width="200"> |
| | | <template slot-scope="{row}"> |
| | | <template> |
| | | <el-input v-model="row.itemRemark" size="small" :disabled="operationType === 'view'"/> |
| | | </template> |
| | | </template> |
| | | </el-table-column> |
| | | <el-table-column v-if="operationType !== 'view'" fixed="right" label="æä½" width="100"> |
| | | <template slot-scope="scope"> |
| | | <el-button size="small" style="color: #f56c6c" type="text" @click="deleteScope(scope.$index)">å é¤</el-button> |
| | | </template> |
| | | </el-table-column> |
| | | </el-table> |
| | | </div> |
| | | <div style="display: flex;align-items: center;margin: 10px 0"> |
| | | <span style="width: 70px">夿³¨ï¼</span> |
| | | <el-input v-model="quarterSampleForm.remark" :disabled="operationType === 'view'" size="small" style="width: 43%" type="textarea"></el-input> |
| | | </div> |
| | | <div v-if="operationType !== 'add'"> |
| | | <el-form ref="form" :model="editForm" label-width="70px"> |
| | | <el-col :span="12"> |
| | | <el-form-item label="ç¼å¶äººï¼"> |
| | | <el-select v-model="editForm.writeUser" :disabled="operationType !=='edit'" placeholder="è¯·éæ©" size="small" style="width: 100%"> |
| | | <el-option v-for="item in userList" :key="item.id" :label="item.name" :value="item.id"></el-option> |
| | | </el-select> |
| | | </el-form-item> |
| | | </el-col> |
| | | <el-col :span="12"> |
| | | <el-form-item label="ä¼ç¾äººï¼"> |
| | | <el-select v-model="editForm.countersignUser" :disabled="operationType !=='edit'" multiple placeholder="è¯·éæ©" size="small" style="width: 100%"> |
| | | <el-option v-for="item in userList" :key="item.id" :label="item.name" :value="item.id"></el-option> |
| | | </el-select> |
| | | </el-form-item> |
| | | </el-col> |
| | | <el-col :span="12"> |
| | | <el-form-item label="å®¡æ ¸äººï¼"> |
| | | <el-select v-model="editForm.examineUser" :disabled="operationType !=='edit'" placeholder="è¯·éæ©" size="small" style="width: 100%"> |
| | | <el-option v-for="item in userList" :key="item.id" :label="item.name" :value="item.id"></el-option> |
| | | </el-select> |
| | | </el-form-item> |
| | | </el-col> |
| | | <el-col :span="12"> |
| | | <el-form-item label="æ¹å人ï¼"> |
| | | <el-select v-model="editForm.ratifyUser" :disabled="operationType !=='edit'" placeholder="è¯·éæ©" size="small" style="width: 100%"> |
| | | <el-option v-for="item in userList" :key="item.id" :label="item.name" :value="item.id"></el-option> |
| | | </el-select> |
| | | </el-form-item> |
| | | </el-col> |
| | | </el-form> |
| | | </div> |
| | | <span v-if="operationType !== 'view'" slot="footer" class="dialog-footer"> |
| | | <el-button v-if="operationType !== 'add'" @click="quarterSampleDia = false">å æ¶</el-button> |
| | | <el-button v-if="operationType === 'add'" @click="quarterSampleDia = false">ä¿ å</el-button> |
| | | <el-button type="primary" @click="handleSample">ç¡® å®</el-button> |
| | | </span> |
| | | </el-dialog> |
| | | </div> |
| | | </template> |
| | | |
| | | <script> |
| | | import {addQuarter, getQuarter, updateQuarterOnOrder} from "@/api/business/finishedProductSampling"; |
| | | import {selectUserCondition} from "@/api/business/inspectionTask"; |
| | | import {mapGetters} from "vuex"; |
| | | |
| | | export default { |
| | | name: "addQuarterItem", |
| | | // import å¼å
¥çç»ä»¶éè¦æ³¨å
¥å°å¯¹è±¡ä¸æè½ä½¿ç¨ |
| | | components: {}, |
| | | data() { |
| | | // è¿éåæ¾æ°æ® |
| | | return { |
| | | tableLoading: false, |
| | | quarterSampleDia: false, // å£åº¦æ½æ ·å¼¹æ¡ |
| | | quarterSampleForm: { |
| | | quarterNo: '', // ç¼å· |
| | | }, |
| | | quarterItems: [], |
| | | quarterTemItems: [], |
| | | operationType: '', |
| | | editForm: { |
| | | quarterId: '', |
| | | writeUser: '', // ç¼å¶äºº |
| | | countersignUser: [], // ä¼ç¾äºº |
| | | examineUser: '', // å®¡æ ¸äºº |
| | | ratifyUser: '', // æ¹å人 |
| | | }, |
| | | userList: [], |
| | | quarterRow: {}, |
| | | } |
| | | }, |
| | | computed: { |
| | | ...mapGetters(["nickName"]), |
| | | }, |
| | | mounted() { |
| | | this.getUserList() |
| | | }, |
| | | // æ¹æ³éå |
| | | methods: { |
| | | openDia (quarterTemItems, type) { |
| | | this.quarterSampleDia = true |
| | | this.operationType = type |
| | | if (type === 'add') { |
| | | if (quarterTemItems.length > 0) { |
| | | this.quarterItems = quarterTemItems |
| | | } |
| | | this.quarterSampleForm.quarterNo = getCurrentMonthTwoDigits() |
| | | } else { |
| | | this.tableLoading = true |
| | | this.quarterRow = quarterTemItems |
| | | getQuarter({quarterId: quarterTemItems.quarterId}).then(res => { |
| | | this.tableLoading = false |
| | | if (res.code === 200) { |
| | | this.quarterItems = res.data.quarterItems |
| | | this.quarterSampleForm.quarterNo = res.data.quarterNo |
| | | this.quarterSampleForm.remark = res.data.remark |
| | | this.editForm.quarterId = res.data.quarterId |
| | | this.editForm.writeUser = res.data.writeUser |
| | | this.editForm.examineUser = res.data.examineUser |
| | | this.editForm.ratifyUser = res.data.ratifyUser |
| | | if (res.data.countersignUser) { |
| | | this.editForm.countersignUser = res.data.countersignUser.split(",").map(Number) |
| | | } |
| | | } |
| | | }).catch(err => { |
| | | this.tableLoading = false |
| | | }) |
| | | } |
| | | }, |
| | | // æå¨æ·»å |
| | | addQuarter () { |
| | | this.quarterItems.push({ |
| | | productType: '', |
| | | dutyUser: this.nickName, |
| | | productModel: '', |
| | | spotCheckNumber: '', |
| | | number: '', |
| | | spotCheckTime: '', |
| | | result: '', |
| | | samplingUser: '', |
| | | itemRemark: '', |
| | | }) |
| | | }, |
| | | // æäº¤å£åº¦æ½æ · |
| | | handleSample () { |
| | | this.$confirm('æ¯å¦æäº¤è¯¥æ°æ®', 'æç¤º', { |
| | | confirmButtonText: 'ç¡®å®', |
| | | cancelButtonText: 'åæ¶', |
| | | type: 'warning' |
| | | }).then(() => { |
| | | if (this.operationType === 'add') { |
| | | this.quarterSampleForm.quarterItems = JSON.parse(JSON.stringify(this.quarterItems)) |
| | | this.quarterSampleForm.quarterItems.forEach(item => { |
| | | item.spotCheckNumber = item.spotCheckNumber + ' ' + (item.number == null ? "" : item.number) |
| | | }) |
| | | addQuarter(this.quarterSampleForm).then(res => { |
| | | if (res.code == 200) { |
| | | this.$message.success('æäº¤æå') |
| | | this.quarterItems = [] |
| | | this.$parent.quarterTemItems = [] |
| | | this.closeQuarterSampleDia() |
| | | } |
| | | }) |
| | | } else { |
| | | const params = {...this.editForm} |
| | | if (params.countersignUser.length > 0) { |
| | | params.countersignUser = params.countersignUser.join(',') |
| | | } else { |
| | | params.countersignUser = '' |
| | | } |
| | | params.quarterItems = JSON.parse(JSON.stringify(this.quarterItems)) |
| | | updateQuarterOnOrder(params).then(res => { |
| | | if (res.code == 200) { |
| | | this.$message.success('æäº¤æå') |
| | | this.quarterItems = [] |
| | | this.closeQuarterSampleDia() |
| | | } |
| | | }) |
| | | } |
| | | }).catch(() => { |
| | | this.$message({ |
| | | type: 'info', |
| | | message: '已忶' |
| | | }); |
| | | }); |
| | | |
| | | }, |
| | | // æ¸
ç©ºæ½æ ·è®¡å |
| | | clearTable () { |
| | | this.quarterItems = [] |
| | | this.$parent.quarterTemItems = [] |
| | | }, |
| | | // æå¨å é¤ |
| | | deleteScope (index) { |
| | | this.quarterItems.splice(index, 1) |
| | | }, |
| | | // å
³éå£åº¦æ½æ ·å¼¹æ¡ |
| | | closeQuarterSampleDia () { |
| | | this.quarterSampleDia = false |
| | | if (this.operationType === 'add') { |
| | | this.$parent.handleStockList() |
| | | } else { |
| | | this.$parent.refreshTable('page') |
| | | } |
| | | }, |
| | | getUserList(){ |
| | | selectUserCondition({ type: 0 }).then((res) => { |
| | | this.userList = res.data; |
| | | }) |
| | | }, |
| | | }, |
| | | } |
| | | function getCurrentMonthTwoDigits() { |
| | | const currentDate = new Date(); |
| | | const year = currentDate.getFullYear(); |
| | | const currentMonth = currentDate.getMonth() + 1; |
| | | return year + currentMonth.toString().padStart(2, '0'); |
| | | } |
| | | </script> |
| | | |
| | | <style scoped> |
| | | </style> |
¶Ô±ÈÐÂÎļþ |
| | |
| | | <!--æåæ½æ ·é¡µé¢--> |
| | | <template> |
| | | <div style="padding: 10px 0"> |
| | | <div class="card"> |
| | | <div class="title"> |
| | | <el-button size="small" type="primary" @click="addTemQuarter">æ°å¢</el-button> |
| | | <el-button size="small" type="primary" @click="quarterSample">å£åº¦æ½æ ·</el-button> |
| | | <el-button size="small" type="primary" @click="handleStockList">å·æ°</el-button> |
| | | </div> |
| | | <el-table |
| | | ref="finishedproducttransferTable" |
| | | v-loading="tableLoading" |
| | | :data="stockList" |
| | | :header-cell-style="lineSideWarehouseTableHeaderCellStyle" |
| | | :row-class-name="lineSideWarehouseTableRowClassName" |
| | | class="finishedproducttransfer-table" |
| | | height="calc(100vh - 240px)" |
| | | @selection-change="handleSelectionChange" |
| | | > |
| | | <el-table-column type="selection" width="45"></el-table-column> |
| | | <el-table-column |
| | | :show-overflow-tooltip="true" |
| | | align="center" |
| | | label="客æ·è®¢åç¼å·" |
| | | prop="customerOrderNo" |
| | | width="140" |
| | | > |
| | | <template slot="header" slot-scope="scope"> |
| | | <div style="line-height: 14px;margin-bottom: 6px">客æ·è®¢åç¼å·</div> |
| | | <div class="th" @click.stop> |
| | | <el-input |
| | | v-model="queryParamOne.customerOrderNo" |
| | | clearable |
| | | size="mini" |
| | | type="text" |
| | | @clear="handleStockList" |
| | | @keyup.enter.native="handleStockList" |
| | | ></el-input> |
| | | </div> |
| | | </template> |
| | | <template slot-scope="scope"> |
| | | <span>{{ scope.row.customerOrderNo }}</span> |
| | | </template> |
| | | </el-table-column> |
| | | <el-table-column |
| | | align="center" |
| | | label="æåé¶ä»¶å·" |
| | | prop="partNo" |
| | | width="140" |
| | | > |
| | | <template slot="header" slot-scope="scope"> |
| | | <div style="line-height: 14px;margin-bottom: 6px">æåé¶ä»¶å·</div> |
| | | <div class="th" @click.stop> |
| | | <el-input |
| | | v-model="queryParamOne.partNo" |
| | | clearable |
| | | size="mini" |
| | | type="text" |
| | | @clear="handleStockList" |
| | | @keyup.enter.native="handleStockList" |
| | | ></el-input> |
| | | </div> |
| | | </template> |
| | | <template slot-scope="scope"> |
| | | <span>{{ scope.row.partNo }}</span> |
| | | </template> |
| | | </el-table-column> |
| | | <el-table-column |
| | | align="center" |
| | | label="é¶ä»¶åç§°" |
| | | prop="partName" |
| | | width="140" |
| | | > |
| | | <template slot="header" slot-scope="scope"> |
| | | <div style="line-height: 14px;margin-bottom: 6px">é¶ä»¶åç§°</div> |
| | | <div class="th" @click.stop> |
| | | <el-input |
| | | v-model="queryParamOne.partName" |
| | | clearable |
| | | size="mini" |
| | | type="text" |
| | | @clear="handleStockList" |
| | | @keyup.enter.native="handleStockList" |
| | | ></el-input> |
| | | </div> |
| | | </template> |
| | | <template slot-scope="scope"> |
| | | <span>{{ scope.row.partName }}</span> |
| | | </template> |
| | | </el-table-column> |
| | | <el-table-column |
| | | :show-overflow-tooltip="true" |
| | | align="center" |
| | | label="ä»åº" |
| | | prop="warehouseName" |
| | | width="140" |
| | | > |
| | | <template slot="header" slot-scope="scope"> |
| | | <div style="line-height: 14px;margin-bottom: 6px">ä»åº</div> |
| | | <div class="th" @click.stop> |
| | | <el-input |
| | | v-model="queryParamOne.warehouseName" |
| | | clearable |
| | | size="mini" |
| | | type="text" |
| | | @clear="handleStockList" |
| | | @keyup.enter.native="handleStockList" |
| | | ></el-input> |
| | | </div> |
| | | </template> |
| | | <template slot-scope="scope"> |
| | | <span>{{ scope.row.warehouseName }}</span> |
| | | </template> |
| | | </el-table-column> |
| | | <el-table-column |
| | | :show-overflow-tooltip="true" |
| | | align="center" |
| | | label="åºä½å·" |
| | | prop="locationNo" |
| | | width="140" |
| | | > |
| | | <template slot="header" slot-scope="scope"> |
| | | <div style="line-height: 14px;margin-bottom: 6px">åºä½å·</div> |
| | | <div class="th" @click.stop> |
| | | <el-input |
| | | v-model="queryParamOne.locationNo" |
| | | clearable |
| | | size="mini" |
| | | type="text" |
| | | @clear="handleStockList" |
| | | @keyup.enter.native="handleStockList" |
| | | ></el-input> |
| | | </div> |
| | | </template> |
| | | <template slot-scope="scope"> |
| | | <span>{{ scope.row.locationNo }}</span> |
| | | </template> |
| | | </el-table-column> |
| | | <el-table-column |
| | | :show-overflow-tooltip="true" |
| | | align="center" |
| | | label="åºä½åç§°" |
| | | prop="locationName" |
| | | width="140" |
| | | > |
| | | <template slot="header" slot-scope="scope"> |
| | | <div style="line-height: 14px;margin-bottom: 6px">åºä½åç§°</div> |
| | | <div class="th" @click.stop> |
| | | <el-input |
| | | v-model="queryParamOne.locationName" |
| | | clearable |
| | | size="mini" |
| | | type="text" |
| | | @clear="handleStockList" |
| | | @keyup.enter.native="handleStockList" |
| | | ></el-input> |
| | | </div> |
| | | </template> |
| | | <template slot-scope="scope"> |
| | | <span>{{ scope.row.locationName }}</span> |
| | | </template> |
| | | </el-table-column> |
| | | <el-table-column |
| | | align="center" |
| | | label="æ¹æ¬¡å·" |
| | | prop="partBatchNo" |
| | | width="140" |
| | | > |
| | | <template slot="header" slot-scope="scope"> |
| | | <div style="line-height: 14px;margin-bottom: 6px">æ¹æ¬¡å·</div> |
| | | <div class="th" @click.stop> |
| | | <el-input |
| | | v-model="queryParamOne.partBatchNo" |
| | | clearable |
| | | size="mini" |
| | | type="text" |
| | | @clear="handleStockList" |
| | | @keyup.enter.native="handleStockList" |
| | | ></el-input> |
| | | </div> |
| | | </template> |
| | | <template slot-scope="scope"> |
| | | <span>{{ scope.row.partBatchNo }}</span> |
| | | </template> |
| | | </el-table-column> |
| | | <el-table-column |
| | | align="center" |
| | | label="å
¥åºæ¥æº" |
| | | prop="inSource" |
| | | width="140" |
| | | > |
| | | <template slot="header" slot-scope="scope"> |
| | | <div style="line-height: 14px;margin-bottom: 6px">å
¥åºæ¥æº</div> |
| | | <div class="th" @click.stop> |
| | | <el-input |
| | | v-model="queryParamOne.inSource" |
| | | clearable |
| | | size="mini" |
| | | type="text" |
| | | @clear="handleStockList" |
| | | @keyup.enter.native="handleStockList" |
| | | ></el-input> |
| | | </div> |
| | | </template> |
| | | <template slot-scope="scope"> |
| | | <span>{{ scope.row.inSource }}</span> |
| | | </template> |
| | | </el-table-column> |
| | | <el-table-column |
| | | align="center" |
| | | label="夿¤é¢è²" |
| | | prop="outerColor" |
| | | width="140" |
| | | > |
| | | <template slot="header" slot-scope="scope"> |
| | | <div style="line-height: 14px;margin-bottom: 6px">夿¤é¢è²</div> |
| | | <div class="th" @click.stop> |
| | | <el-input |
| | | v-model="queryParamOne.outerColor" |
| | | clearable |
| | | size="mini" |
| | | type="text" |
| | | @clear="handleStockList" |
| | | @keyup.enter.native="handleStockList" |
| | | ></el-input> |
| | | </div> |
| | | </template> |
| | | <template slot-scope="scope"> |
| | | <span>{{ scope.row.outerColor }}</span> |
| | | </template> |
| | | </el-table-column> |
| | | <el-table-column |
| | | align="center" |
| | | label="åºåæ°é" |
| | | prop="stockQuantity" |
| | | width="140" |
| | | > |
| | | </el-table-column> |
| | | <el-table-column |
| | | align="center" |
| | | label="å¯ç¨åºåæ°é" |
| | | prop="availableStockQuantity" |
| | | width="140" |
| | | > |
| | | <template slot-scope="scope"> |
| | | <span>{{ scope.row.availableStockQuantity }}</span> |
| | | </template> |
| | | </el-table-column> |
| | | </el-table> |
| | | <div class="pagin-page" style="margin-top: 0;margin-bottom: 0;"> |
| | | <el-pagination |
| | | background |
| | | :current-page="queryReport.current" |
| | | :page-size="queryReport.size" |
| | | :page-sizes="[10, 15, 20, 50, 100]" |
| | | :total="queryReport.total" |
| | | layout="total, sizes, prev, pager, next, jumper" |
| | | style="text-align:right;padding: 20px 16px;" |
| | | @size-change="handleSizeChangeReport" |
| | | @current-change="handleCurrentChangeReport" |
| | | > |
| | | </el-pagination> |
| | | </div> |
| | | </div> |
| | | <add-quarter-item ref="addQuarterItem"></add-quarter-item> |
| | | </div> |
| | | </template> |
| | | |
| | | <script> |
| | | |
| | | import AddQuarterItem from "./components/addQuarterItem.vue"; |
| | | import {getIfsStock} from "@/api/business/finishedProductSampling"; |
| | | import {mapGetters} from "vuex"; |
| | | |
| | | export default { |
| | | data() { |
| | | return { |
| | | stockList: [], |
| | | queryParamOne: { |
| | | partNo: null, |
| | | partName: null, |
| | | warehouseName: null, |
| | | locationName: null, |
| | | locationNo: null, |
| | | partBatchNo: null, |
| | | stockQuantity: null, |
| | | availableStockQuantity: null, |
| | | outerColor: null, |
| | | customerOrderNo: null, |
| | | inSource: null, |
| | | }, |
| | | queryReport: { |
| | | current: 1, |
| | | size: 20, |
| | | total: 0 |
| | | }, |
| | | tableLoading: false, |
| | | multipleSelection: [], // tableæéä¸ç对象 |
| | | showEditForm: false, |
| | | showMoveForm: false, |
| | | showMoveAllForm: false, |
| | | erpfinishstock: {}, |
| | | isAvaliable: false, |
| | | isPackage: false, |
| | | quarterTemItems: [], |
| | | operationType: '' |
| | | } |
| | | }, |
| | | components: {AddQuarterItem}, |
| | | mounted() { |
| | | this.getIfsStock() |
| | | }, |
| | | updated() { |
| | | this.$nextTick(() => { |
| | | this.$refs.finishedproducttransferTable.doLayout() |
| | | }) |
| | | }, |
| | | computed: { |
| | | ...mapGetters(["nickName"]), |
| | | }, |
| | | methods: { |
| | | // å£åº¦æ½æ · |
| | | quarterSample () { |
| | | this.$refs.addQuarterItem.openDia(this.quarterTemItems, 'add') |
| | | }, |
| | | addTemQuarter () { |
| | | if (this.multipleSelection.length > 0) { |
| | | const multipleSelection = JSON.parse(JSON.stringify(this.multipleSelection)) |
| | | if (multipleSelection.length > 0) { |
| | | multipleSelection.forEach(item => { |
| | | if (item.partName.includes(' ')) { |
| | | const list = item.partName.match(/^(\S+)\s(.*)/).slice(1) |
| | | console.log('list', list) |
| | | item.productType = list[0] |
| | | item.spotCheckNumber = list[1] |
| | | } |
| | | item.dutyUser = this.nickName |
| | | item.itemRemark = item.partBatchNo; |
| | | this.quarterTemItems.push(item) |
| | | }) |
| | | } |
| | | this.$message.success('æåæå') |
| | | this.$refs.finishedproducttransferTable.clearSelection() |
| | | } else { |
| | | this.$message.warning('è¯·éæ©æ°æ®') |
| | | } |
| | | }, |
| | | // è·åæ°æ®å表 |
| | | getIfsStock() { |
| | | this.tableLoading = true |
| | | this.stockList = [] |
| | | const newReqParam = this.getFinalParam() |
| | | getIfsStock(newReqParam) |
| | | .then((response) => { |
| | | const resData = response.data |
| | | this.queryReport.total = resData.total |
| | | const resStockList = resData.data |
| | | resStockList.forEach((item) => { |
| | | this.stockList.push({ |
| | | partNo: item.PART_NO, |
| | | partName: item.PART_DESC, |
| | | warehouseName: item.WAREHOUSE_ID, |
| | | locationName: item.LOCATION_DESC, |
| | | locationNo: item.LOCATION_NO, |
| | | partBatchNo: item.LOT_BATCH_NO, |
| | | stockQuantity: item.QTY_ONHAND, |
| | | availableStockQuantity: item.QTY_AVAILABLE, |
| | | outerColor: item.ATTR4, |
| | | customerOrderNo: item.ATTR6, |
| | | inSource: item.ATTR23, |
| | | }) |
| | | }) |
| | | this.tableLoading = false |
| | | }) |
| | | .catch(() => { |
| | | this.tableLoading = false |
| | | }) |
| | | }, |
| | | getFinalParam() { |
| | | const newReqParam = { |
| | | partNo: this.queryParamOne.partNo, |
| | | partDescription: this.queryParamOne.partName, |
| | | warehouse: this.queryParamOne.warehouseName |
| | | ? this.queryParamOne.warehouseName + '%' |
| | | : null, |
| | | locDesc: this.queryParamOne.locationName, |
| | | locNo: this.queryParamOne.locationNo, |
| | | lotBatchNo: this.queryParamOne.partBatchNo, |
| | | quantityFlag: this.queryParamOne.stockQuantity, |
| | | outerColor: this.queryParamOne.outerColor, |
| | | otcOrderNo: this.queryParamOne.customerOrderNo, |
| | | availableStockQuantity: this.queryParamOne.availableStockQuantity, |
| | | inSource: this.queryParamOne.inSource, |
| | | page: this.queryReport.current, |
| | | limit: this.queryReport.size |
| | | } |
| | | return newReqParam |
| | | }, |
| | | lineSideWarehouseTableHeaderCellStyle({row, column, rowIndex, columnIndex}) { |
| | | let headerStyle = 'background:#FAFAFA;color:#666;' |
| | | if (columnIndex === 0) { |
| | | headerStyle += 'border-radius: 6px 0px 0px 0px;' |
| | | } else if (columnIndex === 13) { |
| | | headerStyle += 'border-radius: 0px 6px 0px 0px;' |
| | | } |
| | | return headerStyle |
| | | }, |
| | | lineSideWarehouseTableRowClassName({ row, rowIndex }) { |
| | | if (rowIndex % 2 === 1) { |
| | | return 'stripe-row' |
| | | } else { |
| | | return '' |
| | | } |
| | | }, |
| | | handleSizeChangeReport(val) { |
| | | this.queryReport.size = val |
| | | this.queryReport.current = 1 |
| | | this.getIfsStock() |
| | | }, |
| | | handleCurrentChangeReport(val) { |
| | | this.queryReport.current = val |
| | | this.getIfsStock() |
| | | }, |
| | | handleStockList() { |
| | | this.queryReport.current = 1 |
| | | this.getIfsStock() |
| | | }, |
| | | handleSelectionChange(val) { |
| | | this.multipleSelection = val |
| | | } |
| | | } |
| | | } |
| | | </script> |
| | | |
| | | <style scoped> |
| | | >>>.el-table__header { |
| | | height: 70px; |
| | | } |
| | | .card { |
| | | height: calc(100% - 40px); |
| | | background: #ffffff; |
| | | padding: 10px; |
| | | } |
| | | .title { |
| | | text-align: right; |
| | | margin-bottom: 10px; |
| | | } |
| | | </style> |
| | |
| | | v-if="checkPermi(['performance:manHour:workTimeConfig:add'])">æ° å¢</el-button> |
| | | </div> |
| | | <div class="table"> |
| | | <lims-table :tableData="tableData" :column="column" :page="page" :tableLoading="tableLoading" |
| | | :height="'calc(100vh - 290px)'" @pagination="pagination"></lims-table> |
| | | <lims-table :tableData="tableData" :column="column" :tableLoading="tableLoading" :height="'calc(100vh - 290px)'" |
| | | :page="page" @pagination="pagination"></lims-table> |
| | | </div> |
| | | <!-- æ°å¢/ç¼è¾ --> |
| | | <el-dialog :title="title" :visible.sync="timeDia" width="500px"> |
| | |
| | | <el-col :class="{ sort: node.level > 3 }" :span="19" :title="data.label" style="text-align: left"> |
| | | <span> |
| | | <i :class="`node_i ${data.children != undefined |
| | | ? data.code === '[1]' |
| | | ? 'el-icon-folder-opened' |
| | | : 'el-icon-folder' |
| | | : 'el-icon-tickets' |
| | | ? data.code === '[1]' |
| | | ? 'el-icon-folder-opened' |
| | | : 'el-icon-folder' |
| | | : 'el-icon-tickets' |
| | | }`"></i> |
| | | {{ data.label }} |
| | | </span> |
| | |
| | | (node.data.children === null || |
| | | node.data.children === undefined) |
| | | " :span="2" style="text-align: right"> |
| | | <el-button size="mini" type="text" @click="editTreeName(node.data)"> |
| | | <el-button size="mini" type="text" @click.stop="editTreeName(node.data)"> |
| | | <i class="el-icon-edit"></i> |
| | | </el-button> |
| | | </el-col> |
| | |
| | | <template slot-scope="scope"> |
| | | <el-input v-if=" |
| | | checkPermi(['standard:standardLibrary:upStandardProduct']) |
| | | " v-model="scope.row.ask" :autosize="{ minRows: 1, maxRows: 3 }" clearable placeholder="è¦æ±å¼" |
| | | size="small" type="textarea" @change="(value) => upStandardProductList(value, scope.row.id)"></el-input> |
| | | " v-model="scope.row.ask" :autosize="{ minRows: 1, maxRows: 3 }" clearable placeholder="è¦æ±å¼" size="small" |
| | | type="textarea" @change="(value) => upStandardProductList(value, scope.row.id)"></el-input> |
| | | <span v-else>{{ scope.row.ask }}</span> |
| | | </template> |
| | | </el-table-column> |
| | |
| | | <el-select v-if=" |
| | | checkPermi(['standard:standardLibrary:upStandardProduct']) |
| | | " v-model="scope.row.methodS" clearable placeholder="è¯éªæ¹æ³" size="small" @change="(value) => upStandardProductListOfMethodS(value, scope.row.id) |
| | | "> |
| | | "> |
| | | <el-option v-for="(a, i) in scope.row.method && |
| | | JSON.parse(scope.row.method)" :key="i" :label="a" :value="a"></el-option> |
| | | </el-select> |
| | |
| | | <el-select v-if=" |
| | | checkPermi(['standard:standardLibrary:upStandardProduct']) |
| | | " v-model="scope.row.radius" clearable placeholder="æ¡ä»¶" size="small" @change="(value) => upStandardProductListOfRadius(value, scope.row.id) |
| | | "> |
| | | "> |
| | | <el-option v-for="(a, i) in scope.row.radiusList && |
| | | JSON.parse(scope.row.radiusList)" :key="i" :label="a" :value="a"></el-option> |
| | | </el-select> |
| | |
| | | <el-input v-if=" |
| | | checkPermi(['standard:standardLibrary:upStandardProduct']) |
| | | " v-model="scope.row.price" placeholder="åä»·(å
)" size="small" @change="(value) => upStandardProductListOfPrice(value, scope.row.id) |
| | | "> |
| | | "> |
| | | </el-input> |
| | | <span v-else>{{ scope.row.price }}</span> |
| | | </template> |
| | |
| | | <el-input v-if=" |
| | | checkPermi(['standard:standardLibrary:upStandardProduct']) |
| | | " v-model="scope.row.manHour" placeholder="åä»·(å
)" size="small" @change="(value) => upStandardProductListOfManHour(value, scope.row.id) |
| | | "> |
| | | "> |
| | | </el-input> |
| | | <span v-else>{{ scope.row.manHour }}</span> |
| | | </template> |
| | |
| | | <template slot-scope="scope"> |
| | | <el-select v-model="scope.row.templateId" :disabled="!checkPermi(['standard:standardLibrary:upStandardProduct']) |
| | | " filterable size="small" @change="(value) => |
| | | upStandardProductListOfTemplate(value, scope.row.id) |
| | | upStandardProductListOfTemplate(value, scope.row.id) |
| | | "> |
| | | <el-option v-for="(a, ai) in templateList" :key="ai" :label="a.name" :value="a.id"></el-option> |
| | | </el-select> |
| | |
| | | </template> |
| | | </el-table-column> |
| | | </el-table> |
| | | <el-pagination :current-page="currentPage" :page-size="300" :total="total" |
| | | layout="total, prev, pager, next, jumper" style="position: absolute; right: 16px; bottom: 1px" |
| | | @current-change="handleCurrentChange"> |
| | | </el-pagination> |
| | | <!-- <el-pagination :current-page="currentPage" :page-size="300" :total="total" layout="total" |
| | | style="position: absolute; right: 16px; bottom: 1px" @current-change="handleCurrentChange"> |
| | | </el-pagination> --> |
| | | <p style="text-align: right;margin-right: 20px;color: #333;">å
±{{ total }}æ¡</p> |
| | | </el-row> |
| | | </div> |
| | | |
| | |
| | | return; |
| | | } |
| | | this.$message.success("æ·»å æå"); |
| | | this.selectStandardTreeList(); |
| | | this.$tab.refreshPage(); |
| | | // this.selectStandardTreeList(); |
| | | this.updateDia = false; |
| | | this.updateLoad = false; |
| | | }) |