Merge remote-tracking branch 'origin/dev' into dev
| | |
| | | /** |
| | | * @description æ£éªå§æå |
| | | */ |
| | | |
| | | // å®éªå®¤çæ£æµè½åæ¡£æ¡ç¸å
³æ¥å£ |
| | | import request from "@/utils/request"; |
| | | |
| | |
| | | method: "get", |
| | | params: params |
| | | }) |
| | | } |
| | | |
| | | // æ°å¢æ¶æ ¹æ®æåè®¢åæ¥è¯¢å§æå详æ
|
| | | export const getInspectionOrderByInsOderId = (params) => { |
| | | return request({ |
| | | url: "/inspectionOrder/getInspectionOrderByInsOderId", |
| | | method: "get", |
| | | params: params |
| | | }) |
| | | } |
| | | |
| | | // æ¥è¯¢å¯æ°å¢çæ£éªå |
| | | export const getInsOrderOnInspection = (data) => { |
| | | return request({ |
| | | url: "/inspectionOrder/getInsOrderOnInspection", |
| | | method: "post", |
| | | data: data |
| | | }) |
| | | } |
| | | |
| | | // æ¥çå§æå详æ
|
| | | export const getInspectionOrderOne = (params) => { |
| | | return request({ |
| | | url: "/inspectionOrder/getInspectionOrderOne", |
| | | method: "get", |
| | | params: params |
| | | }) |
| | | } |
| | | |
| | | // æ°å¢æ£éªå |
| | | export const addInspectionOrder = (data) => { |
| | | return request({ |
| | | url: "/inspectionOrder/addInspectionOrder", |
| | | method: "post", |
| | | data: data |
| | | }) |
| | | } |
| | | |
| | | // ç¼è¾æ£éªå |
| | | export const editInspectionOrder = (data) => { |
| | | return request({ |
| | | url: "/inspectionOrder/editInspectionOrder", |
| | | method: "post", |
| | | data: data |
| | | }) |
| | | } |
| | |
| | | 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, |
| | | }); |
| | | } |
| | |
| | | url = url.slice(0, -1); |
| | | config.params = {}; |
| | | config.url = url; |
| | | config.headers["responseType"] = config.headers["responseType"] |
| | | ? config.headers["responseType"] |
| | | : ""; // 让æ¯ä¸ªè¯·æ±æºå¸¦èªå®ä¹token è¯·æ ¹æ®å®é
æ
åµèªè¡ä¿®æ¹ |
| | | } |
| | | if ( |
| | | !isRepeatSubmit && |
| | |
| | | <template> |
| | | <el-dialog title="æ°å¢æ£éªå§æå" :visible.sync="visible" width="1200px"> |
| | | <el-dialog :title="title" :visible.sync="visible" width="1200px"> |
| | | <div id="dialogBody"> |
| | | <div style="max-height: 75vh;overflow-y: auto;"> |
| | | <div id="dialogBody"> |
| | |
| | | <el-radio-group |
| | | v-if="operationType !== 'view'" |
| | | v-model="currentInfo.isLeave" |
| | | v-removeAriaHidden |
| | | > |
| | | <el-radio :label="1">æ¯</el-radio> |
| | | <el-radio :label="0">å¦</el-radio> |
| | |
| | | <p>æ ·åå¤çæ¹å¼</p> |
| | | </td> |
| | | <td v-if="operationType !== 'view'"> |
| | | <el-radio-group v-model="currentInfo.processing" v-removeAriaHidden> |
| | | <el-radio-group v-model="currentInfo.processing"> |
| | | <el-radio :label="0">å§æåä½åå</el-radio> |
| | | <el-radio :label="1">å®éªå®¤å¤ç</el-radio> |
| | | </el-radio-group> |
| | |
| | | <td > |
| | | <el-radio-group |
| | | v-if="operationType !== 'view'" |
| | | v-model="currentInfo.send" v-removeAriaHidden |
| | | v-model="currentInfo.send" |
| | | > |
| | | <el-radio :label="1">èªå</el-radio> |
| | | <el-radio :label="0">å
¶ä»</el-radio> |
| | |
| | | <p>å¤å®è§å</p> |
| | | </td> |
| | | <td v-if="operationType !== 'view'" colspan="3"> |
| | | <el-radio-group v-model="currentInfo.criterionRule" v-removeAriaHidden> |
| | | <el-radio-group v-model="currentInfo.criterionRule"> |
| | | <el-radio :label="0">ä¸èèä¸ç¡®å®åº¦</el-radio> |
| | | <el-radio :label="1">èèä¸ç¡®å®åº¦</el-radio> |
| | | </el-radio-group> |
| | |
| | | </div> |
| | | <span v-if="operationType !== 'view'" slot="footer" class="dialog-footer"> |
| | | <el-button @click="detailDialogVisible = false">å æ¶</el-button> |
| | | <el-button v-if="operationType === 'add'" :loading="buttonLoading" type="primary" @click="handleAdd"> |
| | | ç¡® å® |
| | | </el-button> |
| | | <el-button v-if="operationType === 'edit'" :loading="buttonLoading" type="primary" @click="handleEdit"> |
| | | <el-button :loading="buttonLoading" type="primary" @click="handleSubmit"> |
| | | ç¡® å® |
| | | </el-button> |
| | | </span> |
| | |
| | | </template> |
| | | <script> |
| | | import ZTTLogo from "@/assets/logo/ZTTlogo.png" |
| | | import { getInspectionOrderByInsOderId, getInspectionOrderOne, addInspectionOrder, editInspectionOrder } from "@/api/cnas/process/demand/demand.js" |
| | | |
| | | export default { |
| | | name: 'AddContracts', |
| | | props: { |
| | | operationType: { |
| | | type: String, |
| | | default: '' |
| | | }, |
| | | }, |
| | | data() { |
| | | return { |
| | | title: '', |
| | | ZTTLogo, |
| | | visible: false, |
| | | operationType: '', |
| | | currentInfo:{ |
| | | orderDetailList: [] |
| | | }, |
| | | buttonLoading: false |
| | | } |
| | | }, |
| | | methods: { |
| | | open() { |
| | | open(row) { |
| | | this.visible = true |
| | | if(operationType == 'add') { |
| | | this.goAddOrder(row) |
| | | } else { |
| | | |
| | | } |
| | | }, |
| | | // æå¼å¼¹çªçæ¶åï¼æ¥è¯¢éè¦æ°å¢çå§æå详æ
|
| | | async goAddOrder(row) { |
| | | this.title = 'æ°å¢æ£éªå§æå'; |
| | | const { code, data } = await getInspectionOrderByInsOderId({ |
| | | insOrderId: row.id |
| | | }) |
| | | if(code == 200) { |
| | | this.currentInfo = res.data |
| | | this.detailDialogVisible = true |
| | | } |
| | | }, |
| | | async goUpdateOrder(row) { |
| | | this.title = 'ç¼è¾æ£éªå§æå'; |
| | | const { code, data } = await getInspectionOrderOne({ |
| | | insOrderId: row.inspectionOrderId |
| | | }) |
| | | if(code == 200) { |
| | | this.currentInfo = res.data |
| | | this.detailDialogVisible = true |
| | | } |
| | | }, |
| | | addOrderDetailList() { |
| | | if (this.currentInfo.orderDetailList == null) { |
| | | this.currentInfo.orderDetailList = [] |
| | | } |
| | | this.currentInfo.orderDetailList.push({ |
| | | sampleNumber: '', |
| | | testItem: '', |
| | | testStandard: '', |
| | | standardMethodList: '', |
| | | remark: '', |
| | | }) |
| | | }, |
| | | |
| | | async handleSubmit() { |
| | | this.operationType == 'add' ? await addInspectionOrder(this.currentInfo) : await editInspectionOrder(this.currentInfo) |
| | | } |
| | | } |
| | | } |
| | |
| | | :page="page" |
| | | /> |
| | | </el-dialog> |
| | | <AddContracts ref="addContractsRef" /> |
| | | <AddContracts ref="addContractsRef" :operationType="operationType" /> |
| | | </div> |
| | | </template> |
| | | |
| | | <script> |
| | | import limsTable from "@/components/Table/lims-table.vue"; |
| | | import AddContracts from "./AddContracts.vue"; |
| | | import { getInsOrderOnInspection } from "@/api/cnas/process/demand/demand.js" |
| | | |
| | | export default { |
| | | name: 'EditDemand', |
| | | components: { |
| | |
| | | return { |
| | | visible: false, |
| | | search: {}, |
| | | operationType: '', |
| | | column: [ |
| | | { label: 'åºå·', minWidth: '100px' }, |
| | | { label: 'å§æç¼å·', minWidth: '100px' }, |
| | |
| | | name: "æ°å¢å§æå", |
| | | type: "text", |
| | | clickFun: (row) => { |
| | | this.$refs.addContractsRef.open() |
| | | this.operationType = 'add' |
| | | this.$refs.addContractsRef.open(row) |
| | | } |
| | | } |
| | | ], |
| | |
| | | }, |
| | | } |
| | | }, |
| | | // æå¼å¼¹çª |
| | | methods: { |
| | | open() { |
| | | open(type) { |
| | | this.visible = true |
| | | this.operationType = type |
| | | this.getTableData() |
| | | }, |
| | | openAddContracts(row) { |
| | | this.operationType = 'edit' |
| | | this.$refs.addContractsRef.open(row) |
| | | }, |
| | | async getTableData() { |
| | | // æ¥è¯¢å½åå¼¹çªè¡¨æ°æ® |
| | | const { code, data } = await getInsOrderOnInspection({ |
| | | ...this.search, ...this.page |
| | | }) |
| | | if (code === 200) { |
| | | this.tableData = data |
| | | } |
| | | } |
| | | } |
| | | } |
| | |
| | | </el-form-item> |
| | | </el-form> |
| | | <div style="margin-bottom: 10px"> |
| | | <el-button size="small" type="primary" icon="el-icon-plus" @click="openDialog"> |
| | | <el-button size="small" type="primary" icon="el-icon-plus" @click="openDialog('add')"> |
| | | æ° å¢ |
| | | </el-button> |
| | | </div> |
| | |
| | | operation: [ |
| | | { |
| | | name: "ç¼ è¾", |
| | | type: "text" |
| | | type: "text", |
| | | clickFun: (row) => { |
| | | this.$refs.editRef.openAddContracts(row) |
| | | } |
| | | } |
| | | ], |
| | | }, |
| | |
| | | /** |
| | | * @desc æå¼æ¨¡ææ¡ |
| | | */ |
| | | openDialog() { |
| | | this.$refs.editRef.open() |
| | | openDialog(type) { |
| | | this.$refs.editRef.open(type) |
| | | } |
| | | } |
| | | } |
| | |
| | | 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> |
| | |
| | | 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; |
| | | }) |