From 956d572ebf6936af220e65f5dbab9f78eacc5ad0 Mon Sep 17 00:00:00 2001 From: spring <2396852758@qq.com> Date: 星期五, 21 二月 2025 17:23:30 +0800 Subject: [PATCH] 完成文件审批记录迁移 --- src/utils/downHtmlToPDF.js | 22 src/views/CNAS/systemManagement/documentRecords/distributionCollectionRecord.vue | 488 ++++++++ src/api/cnas/systemManagement/documentRecords.js | 65 + src/views/CNAS/systemManagement/documentRecords/approvalRecord.vue | 520 +++++++++ src/views/CNAS/systemManagement/documentRecords/revisionRecord.vue | 848 +++++++++++++++ src/views/CNAS/systemManagement/documentRecords/cancellationRecord.vue | 442 +++++++ src/views/CNAS/systemManagement/documentRecords/regularReviewsRecord.vue | 585 ++++++++++ src/views/CNAS/systemManagement/documentRecords/outDocumenRecordt.vue | 378 ++++++ 8 files changed, 3,348 insertions(+), 0 deletions(-) diff --git a/src/api/cnas/systemManagement/documentRecords.js b/src/api/cnas/systemManagement/documentRecords.js new file mode 100644 index 0000000..30fc1d5 --- /dev/null +++ b/src/api/cnas/systemManagement/documentRecords.js @@ -0,0 +1,65 @@ +// 浣撶郴鏂囦欢璁板綍鐩稿叧鎺ュ彛 +import request from "@/utils/request"; + +// 鏂囦欢瀹℃壒璁板綍-鏂板 +export function addManageRecordCheck(data) { + return request({ + url: "/manageRecordCheck/addManageRecordCheck", + method: "post", + data: data, + }); +} + +// 鏂囦欢瀹℃壒璁板綍-淇敼 +export function doManageRecordCheck(data) { + return request({ + url: "/manageRecordCheck/doManageRecordCheck", + method: "post", + data: data, + }); +} + +//鏂囦欢瀹℃壒璁板綍-瀵煎嚭 +export function exportOutManageRecordCheck(query) { + return request({ + url: "/manageRecordCheck/exportOutManageRecordCheck", + method: "get", + params: query, + }); +} + +// 鏂囦欢瀹℃壒璁板綍-瀹℃牳 +export function checkManageRecordCheck(data) { + return request({ + url: "/manageRecordCheck/checkManageRecordCheck", + method: "post", + data: data, + }); +} + +// 鏂囦欢瀹℃壒璁板綍-鎵瑰噯 +export function ratifyManageRecordCheck(data) { + return request({ + url: "/manageRecordCheck/ratifyManageRecordCheck", + method: "post", + data: data, + }); +} + +//鏂囦欢瀹℃壒璁板綍-鍒犻櫎 +export function delManageRecordCheck(query) { + return request({ + url: "/manageRecordCheck/delManageRecordCheck", + method: "delete", + params: query, + }); +} + +//鏂囦欢瀹℃壒璁板綍-鍒楄〃 +export function pageManageRecordCheck(query) { + return request({ + url: "/manageRecordCheck/pageManageRecordCheck", + method: "get", + params: query, + }); +} diff --git a/src/utils/downHtmlToPDF.js b/src/utils/downHtmlToPDF.js new file mode 100644 index 0000000..3e83e09 --- /dev/null +++ b/src/utils/downHtmlToPDF.js @@ -0,0 +1,22 @@ +import html2canvas from "html2canvas"; +import jsPDF from "jspdf"; + +export async function exportHtmlToPDF(element, name = "exported") { + try { + // 灏� HTML 鍏冪礌杞崲涓� canvas + console.log("姝e湪灏� HTML 杞崲涓� canvas...", element); + const canvas = await html2canvas(element, { useCORS: true }); + const imgData = canvas.toDataURL("image/png"); + + // 鍒涘缓 PDF + const pdf = new jsPDF("p", "mm", "a4"); + const pdfWidth = pdf.internal.pageSize.getWidth(); + const pdfHeight = (canvas.height * pdfWidth) / canvas.width; + + pdf.addImage(imgData, "PNG", 10, 10, pdfWidth - 20, pdfHeight - 20); + pdf.save(name + ".pdf"); + console.log("PDF 瀵煎嚭鎴愬姛锛�"); + } catch (error) { + console.error("瀵煎嚭 PDF 澶辫触锛�", error); + } +} diff --git a/src/views/CNAS/systemManagement/documentRecords/approvalRecord.vue b/src/views/CNAS/systemManagement/documentRecords/approvalRecord.vue new file mode 100644 index 0000000..c405704 --- /dev/null +++ b/src/views/CNAS/systemManagement/documentRecords/approvalRecord.vue @@ -0,0 +1,520 @@ +<template> + <!-- 鏂囦欢瀹℃壒璁板綍 --> + <div class="DocumentApprovalRecords"> + <div class="search"> + <div class="search_thing"> + <div class="search_label">鏂囦欢鍚嶇О锛�</div> + <div class="search_input"><el-input size="small" placeholder="璇疯緭鍏�" clearable v-model="queryParams.documentName" + @keyup.enter.native="refreshTable()"></el-input></div> + </div> + <div class="search_thing"> + <div class="search_label">鏂囦欢缂栧彿锛�</div> + <div class="search_input"> + <el-input size="small" placeholder="璇疯緭鍏�" clearable v-model="queryParams.documentCode" + @keyup.enter.native="refreshTable()"></el-input> + </div> + </div> + <div class="search_thing" style="padding-left: 30px;"> + <el-button size="small" @click="refresh()">閲� 缃�</el-button> + <el-button size="small" type="primary" @click="refreshTable()">鏌� 璇�</el-button> + </div> + <div class="btn"> + <el-button size="small" type="primary" @click="openAdd('鏂板')">鏂板</el-button> + <el-upload :action="action" :multiple="false" :show-file-list="false" accept='.doc,.docx' :headers="headers" + :on-change="beforeUpload" :on-error="onError" ref='upload' :on-success="handleSuccessUp" + style="display:inline-block;margin-left: 20px;"> + <el-button type="primary" size="small">瀵煎叆</el-button></el-upload> + <el-button size="small" type="primary" @click="handleDown" :loading="outLoading" + style="display:inline-block;margin-left: 20px;">瀵煎嚭</el-button> + </div> + </div> + <div class="table"> + <lims-table :tableData="tableData" :column="column" :page="page" :tableLoading="tableLoading" + :height="'calc(100vh - 290px)'" @pagination="pagination"></lims-table> + </div> + <!-- 鏂板/缂栬緫 --> + <el-dialog :title="title" :visible.sync="addDia" width="500px"> + <el-form :model="addForm" ref="addForm" :rules="addRules" label-position="right" label-width="120px"> + <el-form-item label="鏂囦欢鍚嶇О" prop="documentName"> + <el-input size="small" placeholder="璇疯緭鍏�" clearable v-model="addForm.documentName"></el-input> + </el-form-item> + <el-form-item label="鏂囦欢缂栧彿" prop="documentCode"> + <el-input size="small" placeholder="璇疯緭鍏�" clearable v-model="addForm.documentCode"> + </el-input> + </el-form-item> + <el-form-item label="鐗�/娆�" prop="documentVersion"> + <el-input size="small" placeholder="璇疯緭鍏�" clearable v-model="addForm.documentVersion"> + </el-input> + </el-form-item> + <el-form-item label="缂栧埗" prop="writeUser"> + <el-select v-model="addForm.writeUser" size="small" clearable placeholder="璇烽�夋嫨" style="width: 100%"> + <el-option v-for="item in personList" :key="item.value" :label="item.label" :value="item.value"> + </el-option> + </el-select> + </el-form-item> + <el-form-item label="瀹℃牳" prop="checkUser"> + <el-select v-model="addForm.checkUser" size="small" clearable placeholder="璇烽�夋嫨" style="width: 100%"> + <el-option v-for="item in personList" :key="item.value" :label="item.label" :value="item.value"> + </el-option> + </el-select> + </el-form-item> + <el-form-item label="鎵瑰噯" prop="ratifyUser"> + <el-select v-model="addForm.ratifyUser" size="small" clearable placeholder="璇烽�夋嫨" style="width: 100%"> + <el-option v-for="item in personList" :key="item.value" :label="item.label" :value="item.value"> + </el-option> + </el-select> + </el-form-item> + <el-form-item label="鎵瑰噯鏃ユ湡" prop="ratifyDate"> + <el-date-picker v-model="addForm.ratifyDate" style="width: 100%" value-format="yyyy-MM-dd" ormat="yyyy-MM-dd" + type="date" size="small"></el-date-picker> + </el-form-item> + <el-form-item label="澶囨敞" prop="remark"> + <el-input size="small" placeholder="璇疯緭鍏�" type="textarea" :rows="2" clearable v-model="addForm.remarks"> + </el-input> + </el-form-item> + </el-form> + <span slot="footer" class="dialog-footer"> + <el-button @click="addDia = false">鍙� 娑�</el-button> + <el-button :loading="uploading" type="primary" @click="submitProduct('addForm')">纭� 璁�</el-button> + </span> + </el-dialog> + </div> +</template> + +<script> +import limsTable from "@/components/Table/lims-table.vue"; +import { getToken } from "@/utils/auth"; +import { + selectUserCondition, +} from "@/api/business/inspectionTask.js"; +import { + addManageRecordCheck, + doManageRecordCheck, + exportOutManageRecordCheck, + checkManageRecordCheck, + ratifyManageRecordCheck, + delManageRecordCheck, + pageManageRecordCheck +} from '@/api/cnas/systemManagement/documentRecords.js' +export default { + components: { + limsTable + }, + data() { + return { + addPower: true, + outPower: true, + upPower: true, + outLoading: false, + personList: [], + queryParams: {}, + tableData: [], + column: [ + { label: "鏂囦欢鍚嶇О", prop: "documentName" }, + { label: "鏂囦欢缂栧彿", prop: "documentCode", width: "120px" }, + { + label: "鐗�/娆�", + prop: "documentVersion", + }, + { label: "缂栧埗", prop: "writeUser" }, + { label: "瀹℃牳", prop: "checkUser" }, + { label: "鎵瑰噯", prop: "ratifyUser" }, + { label: "鎵瑰噯鏃ユ湡", prop: "ratifyDate" }, + { label: "澶囨敞", prop: "remark" }, + { + dataType: "action", + fixed: "right", + label: "鎿嶄綔", + operation: [ + { + name: "缂栬緫", + type: "text", + clickFun: (row) => { + this.openAdd("缂栬緫", row); + }, + disabled: (row) => { + return row.checkState == '閫氳繃' || row.ratifyState == '閫氳繃' + }, + }, + { + name: "瀹℃牳", + type: "text", + clickFun: (row) => { + this.handleCheck(row); + }, + disabled: (row) => { + return row.checkState == '閫氳繃' || row.ratifyState == '閫氳繃' + }, + }, + { + name: "鎵瑰噯", + type: "text", + clickFun: (row) => { + this.handleApproval(row); + }, + disabled: (row) => { + return row.ratifyState == '閫氳繃' + }, + }, + { + name: "鍒犻櫎", + type: "text", + clickFun: (row) => { + this.handleDelete(row); + }, + disabled: (row) => { + return row.checkState == '閫氳繃' || row.ratifyState == '閫氳繃' + }, + }, + ], + }, + ], + page: { + total: 0, + size: 10, + current: 0, + }, + tableLoading: false, + title: "鏂板", + addDia: false, + addForm: {}, + addRules: { + documentName: [{ required: true, message: "璇疯緭鍏ユ枃浠跺悕绉�", trigger: "blur" }], + }, + uploading: false, + } + }, + // 鐢ㄤ簬涓婁紶鏂囦欢鐨勪俊鎭� + computed: { + headers() { + return { + 'Authorization': "Bearer " + getToken() + } + }, + action() { + return this.javaApi + '/manageRecordCheck/exportInManageRecordCheck' + } + }, + mounted() { + this.getAuthorizedPerson() + }, + methods: { + getPower() { + let power = JSON.parse(sessionStorage.getItem('power')) + let add = false + let del = false + let up = false; + let out = false; + let check = false + let ratify = false + for (var i = 0; i < power.length; i++) { + if (power[i].menuMethod == 'addManageRecordCheck') { + add = true + } + if (power[i].menuMethod == 'delManageRecordCheck') { + del = true + } + if (power[i].menuMethod == 'exportInManageRecordCheck') { + up = true + } + if (power[i].menuMethod == 'checkManageRecordCheck') { + check = true + } + if (power[i].menuMethod == 'ratifyManageRecordCheck') { + ratify = true + } + if (power[i].menuMethod == 'exportOutManageRecordCheck') { + out = true + } + } + if (!ratify) { + this.componentData.do.splice(3, 1) + } + if (!check) { + this.componentData.do.splice(2, 1) + } + if (!add) { + this.componentData.do.splice(1, 1) + } + if (!del) { + this.componentData.do.splice(0, 1) + } + this.addPower = add + this.outPower = out + this.upPower = up + }, + getList() { + this.tableLoading = true; + let param = { ...this.queryParams, ...this.page }; + delete param.total; + pageManageRecordCheck({ ...param }) + .then((res) => { + this.tableLoading = false; + if (res.code === 200) { + this.tableData = res.data.records; + this.page.total = res.data.total; + } + }) + .catch((err) => { + this.tableLoading = false; + }); + }, + pagination({ page, limit }) { + this.page.current = page; + this.page.size = limit; + this.getList(); + }, + refresh() { + this.queryParams = {}; + this.page.current = 1; + this.getList(); + }, + refreshTable() { + this.page.current = 1; + this.getList(); + }, + // 鏂板/缂栬緫 + openAdd(title, row) { + this.title = title + if (row) { + this.addForm = row + } else { + this.addForm = {} + } + this.addDia = true; + }, + // 瀵煎嚭 + handleDown() { + this.outLoading = true + // queryParams + exportOutManageRecordCheck(this.queryParams).then(res => { + this.outLoading = false + if (res.code == 201) return this.$message.error('瀵煎嚭澶辫触') + this.$message.success('瀵煎嚭鎴愬姛') + let url = this.javaApi + 'word/' + res.message + this.$download.saveAs(url, '鏂囦欢瀹℃壒璁板綍') + }) + }, + getAuthorizedPerson() { + selectUserCondition().then(res => { + let data = [] + res.data.forEach(a => { + data.push({ + label: a.name, + value: a.id + }) + }) + this.personList = data + this.refreshTable()() + }) + }, + // 瀹℃牳 + handleCheck(row) { + this.$confirm('鏄惁瀹℃牳閫氳繃?', '鎻愮ず', { + confirmButtonText: '閫氳繃', + cancelButtonText: '涓嶉�氳繃', + type: 'warning', + closeOnClickModal: false, // 绂佹鐐瑰嚮閬僵灞傚叧闂� + distinguishCancelAndClose: true, + beforeClose: (action, instance, done) => { + if (action === 'confirm') { + // 鐐瑰嚮鈥滅‘瀹氣�濇寜閽紝鍏佽鍏抽棴 + checkManageRecordCheck({ id: row.id, checkState: '閫氳繃' }).then(res => { + if (res.code === 201) return + this.refreshTable() + done(); + this.$message({ + type: 'success', + message: '鎻愪氦鎴愬姛' + }) + }) + .catch(err => { + + }) + } else if (action === 'cancel') { + // 鐐瑰嚮鈥滃彇娑堚�濇寜閽紝涓嶅厑璁稿叧闂� + checkManageRecordCheck({ id: row.id, checkState: '涓嶉�氳繃' }).then(res => { + if (res.code === 201) return + this.refreshTable() + done(); + this.$message({ + type: 'success', + message: '鎻愪氦鎴愬姛' + }) + }) + .catch(err => { + + }) + console.log("鍙栨秷鎸夐挳鐐瑰嚮浜嬩欢锛屼笉鍏抽棴寮规"); + } else if (action === 'close') { + // 鐐瑰嚮鈥溍椻�濇寜閽紝涓嶅厑璁稿叧闂� + done(); + console.log("脳鎸夐挳鐐瑰嚮浜嬩欢锛屼笉鍏抽棴寮规"); + } + } + }) + }, + // 鎵瑰噯 + handleApproval(row) { + this.$confirm('鏄惁鎵瑰噯閫氳繃?', '鎻愮ず', { + confirmButtonText: '閫氳繃', + cancelButtonText: '涓嶉�氳繃', + type: 'warning', + closeOnClickModal: false, // 绂佹鐐瑰嚮閬僵灞傚叧闂� + distinguishCancelAndClose: true, + beforeClose: (action, instance, done) => { + if (action === 'confirm') { + // 鐐瑰嚮鈥滅‘瀹氣�濇寜閽紝鍏佽鍏抽棴 + ratifyManageRecordCheck({ id: row.id, ratifyState: '閫氳繃' }).then(res => { + if (res.code === 201) return + this.refreshTable() + done(); + this.$message({ + type: 'success', + message: '鎻愪氦鎴愬姛' + }) + }) + .catch(err => { + + }) + } else if (action === 'cancel') { + // 鐐瑰嚮鈥滃彇娑堚�濇寜閽紝涓嶅厑璁稿叧闂� + ratifyManageRecordCheck({ id: row.id, ratifyState: '涓嶉�氳繃' }).then(res => { + if (res.code === 201) return + this.refreshTable() + done(); + this.$message({ + type: 'success', + message: '鎻愪氦鎴愬姛' + }) + }) + .catch(err => { + + }) + } else if (action === 'close') { + // 鐐瑰嚮鈥溍椻�濇寜閽紝涓嶅厑璁稿叧闂� + done(); + console.log("脳鎸夐挳鐐瑰嚮浜嬩欢锛屼笉鍏抽棴寮规"); + } + } + }) + }, + beforeUpload(file) { + if (file.size > 1024 * 1024 * 10) { + this.$message.error('涓婁紶鏂囦欢涓嶈秴杩�10M'); + this.$refs.upload.clearFiles() + return false; + } else { + // this.upLoading = true; + return true; + } + }, + onError(err, file, fileList) { + this.$message.error('涓婁紶澶辫触') + this.$refs.upload.clearFiles() + }, + handleSuccessUp(response) { + this.upLoading = false; + if (response.code == 200) { + this.$message.success('涓婁紶鎴愬姛'); + this.refreshTable()() + } else { + this.$message.error('涓婁紶澶辫触'); + } + }, + // 鏂板/淇敼 + submitProduct(formName) { + this.$refs[formName].validate((valid) => { + if (valid) { + this.uploading = true; + if (this.title == "鏂板") { + addManageRecordCheck(this.addForm) + .then((res) => { + this.uploading = false; + if (res.code != 200) { + return; + } + this.$message.success("鎻愪氦鎴愬姛"); + this.refresh(); + this.addDia = false; + }) + .catch((err) => { + this.uploading = false; + }); + } else { + doManageRecordCheck(this.addForm) + .then((res) => { + this.uploading = false; + if (res.code != 200) { + return; + } + this.$message.success("鎻愪氦鎴愬姛"); + this.refresh(); + this.addDia = false; + }) + .catch((err) => { + this.uploading = false; + }); + } + } else { + return false; + } + }); + }, + handleDelete(row) { + this.$confirm("鏄惁鍒犻櫎璇ユ潯鏁版嵁?", "鎻愮ず", { + confirmButtonText: "纭畾", + cancelButtonText: "鍙栨秷", + type: "warning", + }) + .then(() => { + delManageRecordCheck({ id: row.id }).then((res) => { + if (res.code == 201) return; + this.$message.success("鍒犻櫎鎴愬姛"); + this.refresh(); + }); + }) + .catch(() => { }); + }, + } +} +</script> + +<style scoped> +.search { + background-color: #fff; + height: 80px; + display: flex; + align-items: center; + position: relative; +} + +.search_thing { + width: 350px; + display: flex; + align-items: center; +} + +.search_label { + width: 110px; + font-size: 14px; + text-align: right; +} + +.search_input { + width: calc(100% - 110px); +} + +.btn { + position: absolute; + right: 16px; + top: 20px; +} + +.table { + margin-top: 10px; + background-color: #fff; + height: calc(100% - 60px - 80px - 10px - 40px); + padding: 20px; +} +</style> diff --git a/src/views/CNAS/systemManagement/documentRecords/cancellationRecord.vue b/src/views/CNAS/systemManagement/documentRecords/cancellationRecord.vue new file mode 100644 index 0000000..7eb6040 --- /dev/null +++ b/src/views/CNAS/systemManagement/documentRecords/cancellationRecord.vue @@ -0,0 +1,442 @@ +<template> + <!-- 浣滃簾鏂囦欢閿�姣佽褰� --> + <div class="ObsoleteDocumentDestructionRecords"> + <el-row class="title"> + <el-col :span="12" style="padding-left: 20px;text-align: left;">浣滃簾鏂囦欢閿�姣佽褰�</el-col> + <el-col :span="12" style="text-align: right;"> + <el-button size="medium" type="primary" @click="openAdd" v-if="addPower">鏂板</el-button> + <el-upload :action="action" :multiple="false" :show-file-list="false" accept='.doc,.docx' :headers="headers" + :on-change="beforeUpload" :on-error="onError" ref='upload' v-if="upPower" :on-success="handleSuccessUp" + style="display:inline-block;margin-left: 20px;"> + <el-button type="primary" size="medium">瀵煎叆</el-button></el-upload> + <el-button size="medium" type="primary" @click="handleDown" :loading="outLoading" v-if="outPower" + style="display:inline-block;margin-left: 20px;">瀵煎嚭</el-button> + </el-col> + </el-row> + <div class="search"> + <div class="search_thing"> + <div class="search_label">鏂囦欢鍚嶇О锛�</div> + <div class="search_input"><el-input size="small" placeholder="璇疯緭鍏�" clearable + v-model="componentData.entity.documentName" @keyup.enter.native="refreshTable()"></el-input></div> + </div> + <div class="search_thing"> + <div class="search_label">鏂囦欢缂栧彿锛�</div> + <div class="search_input"> + <el-input size="small" placeholder="璇疯緭鍏�" clearable v-model="componentData.entity.documentCode" + @keyup.enter.native="refreshTable()"></el-input> + </div> + </div> + <div class="search_thing" style="padding-left: 30px;"> + <el-button size="small" @click="refresh()">閲� 缃�</el-button> + <el-button size="small" type="primary" @click="refreshTable()">鏌� 璇�</el-button> + </div> + </div> + <div class="table"> + <ValueTable ref="ValueTable" :url="$api.manageRecordCancel.pageManageRecordCancel" + :delUrl="$api.manageRecordCancel.delManageRecordCancel" :componentData="componentData" + :upUrl="$api.manageRecordIssueRecycle.doManageRecordIssueRecycle" :key="upIndex" /> + </div> + <el-dialog :title="title" :visible.sync="addDialogVisible" width="400px" top="6vh"> + <el-row> + <el-col :span="24" style="margin-bottom: 16px;"> + <div class="search_thing"> + <div class="search_label"><span style="color: red;margin-left: 4px;">* </span>鏂囦欢缂栧彿锛�</div> + <div class="search_input"> + <el-select v-model="addInfo.documentCode" size="small" style="width: 100%;" @change="getCurrentFile" + allow-create clearable filterable> + <el-option v-for="item in fileList" :key="item.documentCode" :label="item.title" + :value="item.documentCode"> + </el-option> + </el-select> + </div> + </div> + </el-col> + <el-col :span="24" style="margin-bottom: 16px;"> + <div class="search_thing"> + <div class="search_label">鏂囦欢鍚嶇О锛�</div> + <div class="search_input"><el-input size="small" placeholder="璇疯緭鍏�" clearable + v-model="addInfo.documentName"></el-input></div> + </div> + </el-col> + <el-col :span="24" style="margin-bottom: 16px;"> + <div class="search_thing"> + <div class="search_label">鏁伴噺锛�</div> + <div class="search_input"><el-input size="small" placeholder="璇疯緭鍏�" clearable + v-model="addInfo.qty"></el-input></div> + </div> + </el-col> + <el-col :span="24" style="margin-bottom: 16px;"> + <div class="search_thing"> + <div class="search_label">閿�姣佸師鍥狅細</div> + <div class="search_input"><el-input size="small" placeholder="璇疯緭鍏�" clearable + v-model="addInfo.reason"></el-input></div> + </div> + </el-col> + <el-col :span="24" style="margin-bottom: 16px;"> + <div class="search_thing"> + <div class="search_label">澶囨敞锛�</div> + <div class="search_input"><el-input size="small" placeholder="璇疯緭鍏�" clearable v-model="addInfo.remark" + type="textarea" :rows="2"></el-input></div> + </div> + </el-col> + </el-row> + <span slot="footer" class="dialog-footer"> + <el-button @click="addDialogVisible = false">鍙� 娑�</el-button> + <el-button type="primary" @click="handleAdd" :loading="addLoading">纭� 瀹�</el-button> + </span> + </el-dialog> + </div> +</template> + +<script> +import ValueTable from '@/components/Table//value-table.vue' +import { getToken } from "@/utils/auth"; +export default { + components: { + ValueTable + }, + data() { + return { + addPower: true, + outPower: true, + upPower: true, + outLoading: false, + addLoading: false, + componentData: { + entity: { + documentName: null, + documentCode: null, + orderBy: { + field: 'createTime', + order: 'desc' + } + }, + isIndex: true, + showSelect: false, + select: false, + // selectMethod: 'handleChangeTask', + do: [{ + id: 'handleEdit0', + font: '淇敼', + type: 'text', + method: 'handleEdit0', + field: [], + disabFun: (row, index) => { + return row.ratifyState == '閫氳繃' + } + }, { + id: 'handleRatify', + font: '鎵瑰噯', + type: 'text', + method: 'handleRatify', + field: [], + disabFun: (row, index) => { + return row.ratifyState == '閫氳繃' + } + }, { + id: 'delete', + font: '鍒犻櫎', + type: 'text', + method: 'doDiy', + disabFun: (row, index) => { + return row.ratifyState == '閫氳繃' + } + },], + tagField: { + // documentType:{ + // select: [] + // }, + // receiveUserName:{ + // select: [] + // }, + }, + selectField: { + // documentType:{ + // select: [] + // }, + // receiveUserName:{ + // select: [] + // }, + }, + addUpload: ['signatoryUrl'], + requiredAdd: [], + requiredUp: [], + datePicker: ['receiveDate'], + noHead: ['signedUserName', 'signedDate', 'departLims'],//涓嶅弬涓庢柊澧炵紪杈戠殑瀛楁 + needSort: [], + inputType: '' + }, + entityCopy: {}, + upIndex: 0, + addInfo: {}, + title: '鏂板', + addInfo: {}, + addDialogVisible: false, + fileList: [], + personList: [], + } + }, + // 鐢ㄤ簬涓婁紶鏂囦欢鐨勪俊鎭� + computed: { + headers() { + return { + 'Authorization': "Bearer " + getToken() + } + }, + action() { + return this.javaApi + this.$api.manageRecordCancel.exportInManageRecordCancel + } + }, + mounted() { + this.entityCopy = this.HaveJson(this.componentData.entity); + this.getPower() + this.getAuthorizedPerson() + this.getFileList() + }, + methods: { + getPower() { + let power = JSON.parse(sessionStorage.getItem('power')) + let add = false + let del = false + let up = false; + let out = false; + let ratify = false + for (var i = 0; i < power.length; i++) { + if (power[i].menuMethod == 'addManageRecordCancel') { + add = true + } + if (power[i].menuMethod == 'delManageRecordCancel') { + del = true + } + if (power[i].menuMethod == 'exportInManageRecordCancel') { + up = true + } + if (power[i].menuMethod == 'ratifyManageRecordCancel') { + ratify = true + } + if (power[i].menuMethod == 'exportOutManageRecordCancel') { + out = true + } + } + if (!ratify) { + this.componentData.do.splice(2, 1) + } + if (!add) { + this.componentData.do.splice(1, 1) + } + if (!del) { + this.componentData.do.splice(0, 1) + } + this.addPower = add + this.outPower = out + this.upPower = up + }, + openAdd() { + // this.$refs.ValueTable.openAddDia(this.$api.manageRecordIssueRecycle.addManageRecordIssueRecycle); + this.addInfo = {} + this.title = '鏂板' + this.addDialogVisible = true; + }, + handleEdit0(row) { + this.addInfo = row + this.title = '淇敼' + this.addDialogVisible = true; + }, + // 瀵煎嚭 + handleDown() { + this.outLoading = true + this.$axios.post(this.$api.manageRecordCancel.exportOutManageRecordCancel, { entity: this.componentData.entity }, { headers: { 'Content-Type': 'application/json' } }).then(res => { + this.outLoading = false + if (res.code == 201) return this.$message.error('瀵煎嚭澶辫触') + this.$message.success('瀵煎嚭鎴愬姛') + let url = this.javaApi + 'word/' + res.message + const link = document.createElement('a'); + link.href = url; + link.download = '浣滃簾鏂囦欢閿�姣佽褰�'; + link.click(); + }) + }, + refreshTable() { + this.refreshTable()() + }, + refresh() { + this.componentData.entity = this.HaveJson(this.entityCopy) + this.upIndex++ + this.refreshTable() + }, + beforeUpload(file) { + if (file.size > 1024 * 1024 * 10) { + this.$message.error('涓婁紶鏂囦欢涓嶈秴杩�10M'); + this.$refs.upload.clearFiles() + return false; + } else { + // this.upLoading = true; + return true; + } + }, + onError(err, file, fileList) { + this.$message.error('涓婁紶澶辫触') + this.$refs.upload.clearFiles() + }, + handleSuccessUp(response) { + this.upLoading = false; + if (response.code == 200) { + this.$message.success('涓婁紶鎴愬姛'); + this.refreshTable()() + } else { + this.$message.error('涓婁紶澶辫触'); + } + }, + // 鑾峰彇鏂囦欢鍒楄〃--鏂囦欢娓呭崟 + getFileList() { + this.$axios.post(this.$api.manageDocumentList.pageManageDocumentList, { + entity: { + orderBy: { + field: 'createTime', + order: 'desc' + } + }, + page: { + current: -1, + size: -1 + } + }, { + headers: { + 'Content-Type': 'application/json' + } + }).then(res => { + this.fileList = res.data.body.records.map(m => { + m.title = m.documentCode + return m + }) + }).catch(err => { }) + }, + handleAdd() { + if (!this.addInfo.documentCode) return this.$message.error('璇疯緭鍏ユ枃浠剁紪鍙�') + this.addLoading = true + let obj = {} + if (this.title == '鏂板') { + obj = this.HaveJson(this.addInfo) + } else { + let { id, documentCode, documentName, qty, reason, remark } = this.addInfo + obj = { id, documentCode, documentName, qty, reason, remark } + } + this.$axios.post(this.$api.manageRecordCancel[this.title == '鏂板' ? 'addManageRecordCancel' : 'doManageRecordCancel'], obj, { headers: { 'Content-Type': 'application/json' }, noQs: true }).then(res => { + this.addLoading = false + if (res.code == 201) { + return + } + this.addDialogVisible = false + this.$message({ + type: 'success', + message: '鎿嶄綔鎴愬姛!' + }); + this.refreshTable() + }).catch(err => { }) + }, + getCurrentFile(e) { + let obj = this.fileList.find(m => m.documentCode == e) + if (obj) { + this.$set(this.addInfo, 'documentName', obj.name) + } + }, + getAuthorizedPerson() { + this.$axios.get(this.$api.user.getUserMenu).then(res => { + let data = [] + res.data.forEach(a => { + data.push({ + label: a.name, + value: a.id + }) + }) + // this.componentData.tagField.receiveUserName.select = data + // this.componentData.selectField.receiveUserName.select = data + this.personList = data + }) + }, + handleRatify(row) { + this.$confirm('鏄惁鎵瑰噯閫氳繃?', '鎻愮ず', { + confirmButtonText: '閫氳繃', + cancelButtonText: '涓嶉�氳繃', + type: 'warning', + closeOnClickModal: false, // 绂佹鐐瑰嚮閬僵灞傚叧闂� + distinguishCancelAndClose: true, + beforeClose: (action, instance, done) => { + if (action === 'confirm') { + // 鐐瑰嚮鈥滅‘瀹氣�濇寜閽紝鍏佽鍏抽棴 + this.$axios.post(this.$api.manageRecordCancel.ratifyManageRecordCancel, { id: row.id, ratifyState: '閫氳繃' }).then(res => { + if (res.code === 201) return + this.refreshTable() + done(); + this.$message({ + type: 'success', + message: '鎻愪氦鎴愬姛' + }) + }) + .catch(err => { + + }) + } else if (action === 'cancel') { + // 鐐瑰嚮鈥滃彇娑堚�濇寜閽紝涓嶅厑璁稿叧闂� + this.$axios.post(this.$api.manageRecordCancel.ratifyManageRecordCancel, { id: row.id, ratifyState: '涓嶉�氳繃' }).then(res => { + if (res.code === 201) return + this.refreshTable() + done(); + this.$message({ + type: 'success', + message: '鎻愪氦鎴愬姛' + }) + }) + .catch(err => { + + }) + console.log("鍙栨秷鎸夐挳鐐瑰嚮浜嬩欢锛屼笉鍏抽棴寮规"); + } else if (action === 'close') { + // 鐐瑰嚮鈥溍椻�濇寜閽紝涓嶅厑璁稿叧闂� + done(); + console.log("脳鎸夐挳鐐瑰嚮浜嬩欢锛屼笉鍏抽棴寮规"); + } + } + }) + } + } +} +</script> + +<style scoped> +.title { + height: 60px; + line-height: 60px; +} + +.search { + background-color: #fff; + height: 80px; + display: flex; + align-items: center; +} + +.search_thing { + width: 350px; + display: flex; + align-items: center; +} + +.search_label { + width: 110px; + font-size: 14px; + text-align: right; +} + +.search_input { + width: calc(100% - 110px); +} + +.table { + margin-top: 10px; + background-color: #fff; + width: calc(100% - 40px); + height: calc(100% - 60px - 80px - 10px - 40px); + padding: 20px; +} +</style> diff --git a/src/views/CNAS/systemManagement/documentRecords/distributionCollectionRecord.vue b/src/views/CNAS/systemManagement/documentRecords/distributionCollectionRecord.vue new file mode 100644 index 0000000..9be00a1 --- /dev/null +++ b/src/views/CNAS/systemManagement/documentRecords/distributionCollectionRecord.vue @@ -0,0 +1,488 @@ +<template> + <!-- 鎵�鏈夋枃浠讹紙鍐呫�佸閮ㄦ枃浠讹級鐨勫彂鏀句笌鍥炴敹璁板綍 --> + <div class="DistributionRetrievalRecordsAllDocuments"> + <el-row class="title"> + <el-col :span="12" style="padding-left: 20px;text-align: left;">鎵�鏈夋枃浠讹紙鍐呫�佸閮ㄦ枃浠讹級鐨勫彂鏀句笌鍥炴敹璁板綍</el-col> + <el-col :span="12" style="text-align: right;"> + <el-button size="medium" type="primary" @click="openAdd" v-if="addPower">鏂板</el-button> + <el-upload :action="action" :multiple="false" :show-file-list="false" accept='.doc,.docx' :headers="headers" + :on-change="beforeUpload" :on-error="onError" ref='upload' v-if="upPower" :on-success="handleSuccessUp" + style="display:inline-block;margin-left: 20px;"> + <el-button type="primary" size="medium">瀵煎叆</el-button></el-upload> + <el-button size="medium" type="primary" @click="handleDown" :loading="outLoading" v-if="outPower" + style="display:inline-block;margin-left: 20px;">瀵煎嚭</el-button> + </el-col> + </el-row> + <div class="search"> + <div class="search_thing"> + <div class="search_label">鏂囦欢鍚嶇О锛�</div> + <div class="search_input"><el-input size="small" placeholder="璇疯緭鍏�" clearable + v-model="componentData.entity.documentName" @keyup.enter.native="refreshTable()"></el-input></div> + </div> + <div class="search_thing"> + <div class="search_label">鏂囦欢缂栧彿锛�</div> + <div class="search_input"> + <el-input size="small" placeholder="璇疯緭鍏�" clearable v-model="componentData.entity.documentCode" + @keyup.enter.native="refreshTable()"></el-input> + </div> + </div> + <div class="search_thing" style="padding-left: 30px;"> + <el-button size="small" @click="refresh()">閲� 缃�</el-button> + <el-button size="small" type="primary" @click="refreshTable()">鏌� 璇�</el-button> + </div> + </div> + <div class="table"> + <ValueTable ref="ValueTable" :url="$api.manageRecordIssueRecycle.pageManageRecordIssueRecycle" + :delUrl="$api.manageRecordIssueRecycle.delManageRecordIssueRecycle" :componentData="componentData" + :upUrl="$api.manageRecordIssueRecycle.doManageRecordIssueRecycle" :key="upIndex" /> + </div> + <el-dialog :title="title" :visible.sync="addDialogVisible" width="400px" top="6vh"> + <el-row> + <el-col :span="24" style="margin-bottom: 16px;"> + <div class="search_thing"> + <div class="search_label"><span style="color: red;margin-left: 4px;">* </span>鏂囦欢缂栧彿锛�</div> + <div class="search_input"> + <el-select v-model="addInfo.documentCode" size="small" style="width: 100%;" @change="getCurrentFile" + allow-create clearable filterable> + <el-option v-for="item in fileList" :key="item.documentCode" :label="item.title" + :value="item.documentCode"> + </el-option> + </el-select> + </div> + </div> + </el-col> + <el-col :span="24" style="margin-bottom: 16px;"> + <div class="search_thing"> + <div class="search_label">鏂囦欢鍚嶇О锛�</div> + <div class="search_input"><el-input size="small" placeholder="璇疯緭鍏�" clearable + v-model="addInfo.documentName"></el-input></div> + </div> + </el-col> + <el-col :span="24" style="margin-bottom: 16px;"> + <div class="search_thing"> + <div class="search_label">鐗堝彿锛�</div> + <div class="search_input"><el-input size="small" placeholder="璇疯緭鍏�" clearable + v-model="addInfo.documentVersion"></el-input></div> + </div> + </el-col> + <el-col :span="24" style="margin-bottom: 16px;"> + <div class="search_thing"> + <div class="search_label">浠芥暟锛�</div> + <div class="search_input"><el-input size="small" placeholder="璇疯緭鍏�" clearable + v-model="addInfo.pages"></el-input></div> + </div> + </el-col> + <el-col :span="24" style="margin-bottom: 16px;"> + <div class="search_thing"> + <div class="search_label">鏂囦欢绫诲埆锛�</div> + <div class="search_input"> + <el-select v-model="addInfo.documentType" placeholder="璇烽�夋嫨" size="small" style="width: 100%;"> + <el-option v-for="item in fileType" :key="item.value" :label="item.label" :value="item.value"> + </el-option> + </el-select> + </div> + </div> + </el-col> + <el-col :span="24" style="margin-bottom: 16px;"> + <div class="search_thing"> + <div class="search_label">鍒嗗彂鍙凤細</div> + <div class="search_input"><el-input size="small" placeholder="璇疯緭鍏�" clearable + v-model="addInfo.number"></el-input></div> + </div> + </el-col> + <el-col :span="24" style="margin-bottom: 16px;"> + <div class="search_thing"> + <div class="search_label">鎺ュ彈浜猴細</div> + <div class="search_input"> + <el-select v-model="addInfo.receiveUser" placeholder="璇烽�夋嫨" size="small" style="width: 100%;" + filterable=""> + <el-option v-for="item in personList" :key="item.value" :label="item.label" :value="item.value"> + </el-option> + </el-select> + </div> + </div> + </el-col> + <el-col :span="24" style="margin-bottom: 16px;"> + <div class="search_thing"> + <div class="search_label">鎺ユ敹閮ㄩ棬锛�</div> + <div class="search_input"> + <el-select v-model="addInfo.departLims" placeholder="璇烽�夋嫨" size="small" style="width: 100%;"> + <el-option v-for="item in list" :key="item.name" :label="item.name" :value="item.name"> + </el-option> + </el-select> + </div> + </div> + </el-col> + <el-col :span="24" style="margin-bottom: 16px;"> + <div class="search_thing"> + <div class="search_label">鎺ュ彈鏃ユ湡锛�</div> + <div class="search_input"> + <el-date-picker v-model="addInfo.receiveDate" type="date" size="small" placeholder="閫夋嫨鏃ユ湡" + format="yyyy-MM-dd" value-format="yyyy-MM-dd" style="width: 100%;"> + </el-date-picker> + </div> + </div> + </el-col> + </el-row> + <span slot="footer" class="dialog-footer"> + <el-button @click="addDialogVisible = false">鍙� 娑�</el-button> + <el-button type="primary" @click="handleAdd" :loading="addLoading">纭� 瀹�</el-button> + </span> + </el-dialog> + </div> +</template> + +<script> +import ValueTable from '@/components/Table/value-table.vue' +import { + getYearAndMonthAndDays +} from '@/utils/date' +import { getToken } from "@/utils/auth"; +export default { + components: { + ValueTable + }, + data() { + return { + addPower: true, + outPower: true, + upPower: true, + outLoading: false, + addLoading: false, + componentData: { + entity: { + documentName: null, + documentCode: null, + orderBy: { + field: 'id', + order: 'desc' + } + }, + isIndex: true, + showSelect: false, + select: false, + // selectMethod: 'handleChangeTask', + do: [{ + id: 'delete', + font: '鍒犻櫎', + type: 'text', + method: 'doDiy', + disabFun: (row, index) => { + return !!row.signedUser + } + }, { + id: 'handleEdit', + font: '淇敼', + type: 'text', + method: 'handleEdit', + field: [], + disabFun: (row, index) => { + return !!row.signedUser + } + }, { + id: 'handleBack', + font: '鍥炴敹', + type: 'text', + method: 'handleBack', + disabFun: (row, index) => { + return !!row.signedUser + } + }], + tagField: { + // documentType:{ + // select: [] + // }, + // receiveUserName:{ + // select: [] + // }, + }, + selectField: { + // documentType:{ + // select: [] + // }, + // receiveUserName:{ + // select: [] + // }, + }, + addUpload: ['signatoryUrl'], + requiredAdd: [], + requiredUp: [], + datePicker: ['receiveDate'], + noHead: ['signedUserName', 'signedDate', 'departLims'],//涓嶅弬涓庢柊澧炵紪杈戠殑瀛楁 + needSort: [], + inputType: '' + }, + entityCopy: {}, + upIndex: 0, + title: '鏂板', + addDialogVisible: false, + addInfo: {}, + personList: [], + fileType: [], + fileList: [], + list: [] + } + }, + // 鐢ㄤ簬涓婁紶鏂囦欢鐨勪俊鎭� + computed: { + headers() { + return { + 'Authorization': "Bearer " + getToken() + } + }, + action() { + return this.javaApi + this.$api.manageRecordIssueRecycle.exportInManageRecordIssueRecycle + } + }, + mounted() { + this.entityCopy = this.HaveJson(this.componentData.entity); + this.getPower() + this.getAuthorizedPerson() + this.selectEnumByCategory() + this.getFileList() + this.selectTreeList() + }, + methods: { + getPower() { + let power = JSON.parse(sessionStorage.getItem('power')) + let add = false + let del = false + let up = false; + let out = false; + let edit = false + for (var i = 0; i < power.length; i++) { + if (power[i].menuMethod == 'addManageRecordIssueRecycle') { + add = true + } + if (power[i].menuMethod == 'delManageRecordIssueRecycle') { + del = true + } + if (power[i].menuMethod == 'exportInManageRecordIssueRecycle') { + up = true + } + if (power[i].menuMethod == 'doManageRecordIssueRecycle') { + edit = true + } + if (power[i].menuMethod == 'exportOutManageRecordIssueRecycle') { + out = true + } + } + if (!add) { + this.componentData.do.splice(2, 1) + } + if (!add) { + this.componentData.do.splice(1, 1) + } + if (!del) { + this.componentData.do.splice(0, 1) + } + this.addPower = add + this.outPower = out + this.upPower = up + }, + // 鏂板 + openAdd() { + // this.$refs.ValueTable.openAddDia(this.$api.manageRecordIssueRecycle.addManageRecordIssueRecycle); + this.addInfo = {} + this.title = '鏂板' + this.addDialogVisible = true; + }, + handleEdit(row) { + this.addInfo = row + this.title = '缂栬緫' + this.addDialogVisible = true; + }, + // 瀵煎嚭 + handleDown() { + this.outLoading = true + this.$axios.post(this.$api.manageRecordIssueRecycle.exportOutManageRecordIssueRecycle, { entity: this.componentData.entity }, { headers: { 'Content-Type': 'application/json' } }).then(res => { + this.outLoading = false + if (res.code == 201) return this.$message.error('瀵煎嚭澶辫触') + this.$message.success('瀵煎嚭鎴愬姛') + let url = this.javaApi + 'word/' + res.message + const link = document.createElement('a'); + link.href = url; + link.download = '鏂囦欢鍙戞斁涓庡洖鏀惰褰�'; + link.click(); + }) + }, + refreshTable() { + this.refreshTable()() + }, + refresh() { + this.componentData.entity = this.HaveJson(this.entityCopy) + this.upIndex++ + this.refreshTable() + }, + getAuthorizedPerson() { + this.$axios.get(this.$api.user.getUserMenu).then(res => { + let data = [] + res.data.forEach(a => { + data.push({ + label: a.name, + value: a.id + }) + }) + // this.componentData.tagField.receiveUserName.select = data + // this.componentData.selectField.receiveUserName.select = data + this.personList = data + }) + }, + beforeUpload(file) { + if (file.size > 1024 * 1024 * 10) { + this.$message.error('涓婁紶鏂囦欢涓嶈秴杩�10M'); + this.$refs.upload.clearFiles() + return false; + } else { + // this.upLoading = true; + return true; + } + }, + onError(err, file, fileList) { + this.$message.error('涓婁紶澶辫触') + this.$refs.upload.clearFiles() + }, + handleSuccessUp(response) { + this.upLoading = false; + if (response.code == 200) { + this.$message.success('涓婁紶鎴愬姛'); + this.refreshTable()() + } else { + this.$message.error('涓婁紶澶辫触'); + } + }, + selectEnumByCategory() { + this.$axios.post(this.$api.enums.selectEnumByCategory, { + category: "鏂囦欢绫诲埆" + }).then(res => { + // this.componentData.tagField.documentType.select = res.data + // this.componentData.selectField.documentType.select = res.data + this.fileType = res.data + }) + }, + // 鑾峰彇鏂囦欢鍒楄〃--鏂囦欢娓呭崟 + getFileList() { + this.$axios.post(this.$api.manageDocumentList.pageManageDocumentList, { + entity: { + orderBy: { + field: 'createTime', + order: 'desc' + } + }, + page: { + current: -1, + size: -1 + } + }, { + headers: { + 'Content-Type': 'application/json' + } + }).then(res => { + this.fileList = res.data.body.records.map(m => { + m.title = m.documentCode + return m + }) + }).catch(err => { }) + }, + getCurrentFile(e) { + let obj = this.fileList.find(m => m.documentCode == e) + if (obj) { + this.$set(this.addInfo, 'documentName', obj.name) + this.$set(this.addInfo, 'documentVersion', obj.version) + this.$set(this.addInfo, 'documentType', obj.type) + } + }, + handleAdd() { + if (!this.addInfo.documentCode) return this.$message.error('璇疯緭鍏ユ枃浠剁紪鍙�') + this.addLoading = true + let obj = {} + if (this.title == '鏂板') { + obj = this.HaveJson(this.addInfo) + } else { + let { id, documentCode, documentName, documentVersion, pages, documentType, number, receiveUser, receiveDate, departLims } = this.addInfo + obj = { id, documentCode, documentName, documentVersion, pages, documentType, number, receiveUser, receiveDate, departLims } + } + this.$axios.post(this.$api.manageRecordIssueRecycle[this.title == '鏂板' ? 'addManageRecordIssueRecycle' : 'doManageRecordIssueRecycle'], obj, { headers: { 'Content-Type': 'application/json' }, noQs: true }).then(res => { + this.addLoading = false + if (res.code == 201) { + return + } + this.addDialogVisible = false + this.$message({ + type: 'success', + message: '鎿嶄綔鎴愬姛!' + }); + this.refreshTable() + }).catch(err => { }) + }, + // 鍥炴敹 + handleBack(row) { + this.$confirm('鏄惁纭鍥炴敹?', "鎻愮ず", { + confirmButtonText: "纭畾", + cancelButtonText: "鍙栨秷", + type: "warning" + }).then(() => { + let obj = {} + let { id, documentCode, documentName, documentVersion, pages, documentType, number, receiveUser, receiveDate, departLims } = row + obj = { id, documentCode, documentName, documentVersion, pages, documentType, number, receiveUser, receiveDate, departLims, signedDate: getYearAndMonthAndDays(), signedUser: JSON.parse(localStorage.getItem("user")).userId } + this.$axios.post(this.$api.manageRecordIssueRecycle.doManageRecordIssueRecycle, obj, { headers: { 'Content-Type': 'application/json' }, noQs: true }).then(res => { + this.addLoading = false + if (res.code == 201) { + return + } + this.addDialogVisible = false + this.$message({ + type: 'success', + message: '鎿嶄綔鎴愬姛!' + }); + this.refreshTable() + }).catch(err => { }) + }).catch(() => { }) + }, + // 鏌ヨ鏍戝舰鍒楄〃 + selectTreeList() { + this.$axios.get(this.$api.personnel.selectCNSAPersonTree).then((res) => { + this.list = res.data[0].children; + }); + }, + } +} +</script> + +<style scoped> +.title { + height: 60px; + line-height: 60px; +} + +.search { + background-color: #fff; + height: 80px; + display: flex; + align-items: center; +} + +.search_thing { + width: 350px; + display: flex; + align-items: center; +} + +.search_label { + width: 110px; + font-size: 14px; + text-align: right; +} + +.search_input { + width: calc(100% - 110px); +} + +.table { + margin-top: 10px; + background-color: #fff; + width: calc(100% - 40px); + height: calc(100% - 60px - 80px - 10px - 40px); + padding: 20px; +} +</style> diff --git a/src/views/CNAS/systemManagement/documentRecords/outDocumenRecordt.vue b/src/views/CNAS/systemManagement/documentRecords/outDocumenRecordt.vue new file mode 100644 index 0000000..0bcdb64 --- /dev/null +++ b/src/views/CNAS/systemManagement/documentRecords/outDocumenRecordt.vue @@ -0,0 +1,378 @@ +<template> + <!-- 澶栨潵鏂囦欢纭璁板綍 --> + <div class="ExternalDocumentConfirmationRecords"> + <el-row class="title"> + <el-col :span="20" style="padding-left: 20px;text-align: left;">澶栨潵鏂囦欢纭璁板綍</el-col> + </el-row> + <el-tabs type="border-card" v-model="activeName" style="height: 100%;"> + <el-tab-pane label="濉啓" name="濉啓" style="height: 100%;"> + <div style="display: flex;align-items: center;justify-content: flex-end;margin-right: 20px;"> + <el-button size="small" type="primary" @click="handleAdd0" style="margin-left: 20px;" + v-if="addPower">鏂板</el-button> + <el-upload :action="action" :multiple="false" :show-file-list="false" accept='.doc,.docx' :headers="headers" + :on-change="beforeUpload" :on-error="onError" ref='upload' v-if="upPower" :on-success="handleSuccessUp" + style="display:inline-block;margin-left: 20px;"> + <el-button size="small" type="primary" :loading="upLoading">瀵煎叆</el-button></el-upload> + </div> + <div class="table" style="height: calc(100% - 200px)"> + <ValueTable ref="ValueTable0" :url="$api.manageRecordTotal.pageManageRecordVerify" + :componentData="componentData0" :key="upIndex0" :delUrl="$api.manageRecordTotal.delManageRecordVerify" + :upUrl="$api.manageRecordTotal.doManageRecordVerify" /> + </div> + </el-tab-pane> + <el-tab-pane label="鍘嗗彶璁板綍" name="鍘嗗彶璁板綍" style="height: 100%;"> + <div class="search"> + <div class="search_thing"> + <div class="search_label">骞达細</div> + <div class="search_input"> + <el-date-picker v-model="componentData.entity.year" type="year" placeholder="閫夋嫨骞�" format="yyyy" + value-format="yyyy" size="small" @change="refreshTable()"> + </el-date-picker> + </div> + </div> + <div class="search_thing" style="padding-left: 30px;"> + <el-button size="small" @click="refresh()">閲� 缃�</el-button> + <el-button size="small" type="primary" @click="refreshTable()">鏌� 璇�</el-button> + </div> + </div> + <div class="table"> + <ValueTable ref="ValueTable" :url="$api.manageRecordTotal.pageManageRecordTotal" + :componentData="componentData" :key="upIndex" /> + </div> + </el-tab-pane> + </el-tabs> + <!-- 璇︽儏/涓嬭浇/瀹℃牳 --> + <el-dialog :title="title0" :visible.sync="lookDialogVisible" width="800px" :class="{ downPdf: title0 == '涓嬭浇' }" + :modal="title0 != '涓嬭浇'" top="5vh"> + <filePreview v-if="lookDialogVisible" :fileUrl="javaApi + '/word/' + currentInfo.url" :currentFile="{}" + style="max-height: 70vh;overflow-y: auto;" /> + <span slot="footer" class="dialog-footer" v-if="title0 == '瀹℃牳' || title0 == '鎵瑰噯'"> + <el-button @click="submitCheck('涓嶉�氳繃')" :loading="noCheckLoading">涓嶉�氳繃</el-button> + <el-button type="primary" @click="submitCheck('閫氳繃')" :loading="checkLoading">閫� 杩�</el-button> + </span> + </el-dialog> + </div> +</template> + +<script> +import filePreview from '@/components/Preview/filePreview.vue' +import ValueTable from '@/components/Table/value-table.vue' +import { getToken } from "@/utils/auth"; +export default { + components: { + ValueTable, + filePreview, + }, + data() { + return { + title0: '鏌ョ湅', + activeName: '濉啓', + lookDialogVisible: false, + noCheckLoading: false, + checkLoading: false, + componentData: { + entity: { + year: null, + orderBy: { + field: 'id', + order: 'desc' + } + }, + isIndex: true, + showSelect: false, + select: false, + do: [{ + id: 'handleLook', + font: '鏌ョ湅', + type: 'text', + method: 'handleLook', + disabFun: (row, index) => { + return !row.url + } + }, { + id: 'handleDown0', + font: '涓嬭浇', + type: 'text', + method: 'handleDown0', + disabFun: (row, index) => { + return !row.url + } + }, + { + id: 'handleSubmit', + font: '鎻愪氦', + type: 'text', + method: 'handleSubmit', + disabFun: (row, index) => { + return !!row.submitUserName + } + }, { + id: 'handleApproval', + font: '鎵瑰噯', + type: 'text', + method: 'handleApproval', + disabFun: (row, index) => { + return !row.submitUserName || !!row.ratifyUserName + } + }], + tagField: {}, + selectField: {}, + requiredAdd: [], + requiredUp: [], + needSort: [], + inputType: '' + }, + // 鏍峰搧鍒楄〃 + componentData0: { + entity: { + manageRecordTotalId: null, + orderBy: { + field: 'id', + order: 'desc' + } + }, + isIndex: true, + showSelect: false, + select: false, + do: [{ + id: 'update', + font: '淇敼', + type: 'text', + method: 'doDiy' + }, { + id: 'delete', + font: '鍒犻櫎', + type: 'text', + method: 'doDiy' + }], + tagField: {}, + selectField: {}, + requiredAdd: ['documentName', 'documentCode'], + requiredUp: ['documentName', 'documentCode'], + datePicker: ['effectiveDate', 'cancelDate'], + needSort: [], + inputType: '' + }, + upIndex0: 100, + entityCopy: {}, + upIndex: 0, + addPower: true, + upPower: true, + currentInfo: {}, + upLoading: false, + } + }, + // 鐢ㄤ簬涓婁紶鏂囦欢鐨勪俊鎭� + computed: { + headers() { + return { + 'Authorization': "Bearer " + getToken() + } + }, + action() { + return this.javaApi + this.$api.manageRecordTotal.exportManageRecordVerify + } + }, + mounted() { + this.entityCopy = this.HaveJson(this.componentData.entity); + this.getPower() + }, + methods: { + getPower() { + let power = JSON.parse(sessionStorage.getItem('power')) + let add = false + let del = false + let up = false; + let sub = false + let ratify = false + for (var i = 0; i < power.length; i++) { + if (power[i].menuMethod == 'addManageRecordVerify') { + add = true + } + if (power[i].menuMethod == 'delManageRecordVerify') { + del = true + } + if (power[i].menuMethod == 'exportManageRecordVerify') { + up = true + } + if (power[i].menuMethod == 'submitManageRecordTotal') { + sub = true + } + if (power[i].menuMethod == 'ratifyManageRecordTotal') { + ratify = true + } + } + if (!ratify) { + this.componentData.do.splice(3, 1) + } + if (!sub) { + this.componentData.do.splice(2, 1) + } + if (!del) { + this.componentData0.do.splice(1, 1) + } + if (!add) { + this.componentData0.do.splice(0, 1) + } + this.addPower = add + this.upPower = up + }, + handleAdd0() { + this.$refs.ValueTable0.openAddDia(this.$api.manageRecordTotal.addManageRecordVerify); + }, + refreshTable() { + this.refreshTable()() + }, + beforeUpload(file) { + if (file.size > 1024 * 1024 * 10) { + this.$message.error('涓婁紶鏂囦欢涓嶈秴杩�10M'); + this.$refs.upload.clearFiles() + return false; + } else { + // this.upLoading = true; + return true; + } + }, + onError(err, file, fileList) { + this.$message.error('涓婁紶澶辫触') + this.$refs.upload.clearFiles() + }, + handleSuccessUp(response) { + this.upLoading = false; + if (response.code == 200) { + this.$message.success('涓婁紶鎴愬姛'); + this.$refs['ValueTable0'].selectList() + } else { + this.$message.error('涓婁紶澶辫触'); + } + }, + refresh() { + this.componentData.entity = this.HaveJson(this.entityCopy) + this.upIndex++ + this.refreshTable() + }, + submitCheck(type) { }, + // 鏌ョ湅 + handleLook(row) { + this.title0 = '鏌ョ湅' + this.commonFun(row) + }, + // 鍏敤鏂规硶 + commonFun(row, callbanck) { + this.currentInfo = row + this.componentData0.entity.manageRecordTotalId = row.id + this.$axios.post(this.$api.manageRecordTotal.pageManageRecordVerify, { + entity: this.componentData0.entity, + page: { + current: -1, + size: -1 + } + }, { + headers: { + 'Content-Type': 'application/json' + }, noQs: true + }).then(res => { + this.currentInfo.arr = res.data.body.records + this.lookDialogVisible = true + if (callbanck) { + callbanck() + } + }).catch(err => { }); + }, + handleDown0(row) { + let url = this.javaApi + 'word/' + row.url + const link = document.createElement('a'); + link.href = url; + link.download = row.month + ' 澶栨潵鏂囦欢纭璁板綍'; + link.click(); + }, + // 鎻愪氦 + handleSubmit(row) { + this.$confirm('鏄惁鎻愪氦 ' + row.year + ' 骞寸殑鏁版嵁', '鎻愪氦', { + confirmButtonText: '纭畾', + cancelButtonText: '鍙栨秷', + type: 'warning' + }).then(() => { + this.$axios.post(this.$api.manageRecordTotal.submitManageRecordTotal, { + id: row.id + }).then(res => { + this.$message({ + type: 'success', + message: '鎻愪氦鎴愬姛!' + }); + this.refreshTable()() + }).catch(err => { }); + }) + }, + // 鎵瑰噯 + handleApproval(row) { + this.title0 = '鎵瑰噯' + this.commonFun(row) + }, + // 鎻愪氦瀹℃牳/鎵瑰噯 + submitCheck(state) { + if (state == '閫氳繃') { + this.checkLoading = true + } else { + this.noCheckLoading = true + } + this.$axios.post(this.$api.manageRecordTotal.ratifyManageRecordTotal, { + id: this.currentInfo.id, + ratifyState: state + }).then(res => { + this.checkLoading = false + this.noCheckLoading = false + if (res.code === 201) return + this.$message({ + type: 'success', + message: '鎿嶄綔鎴愬姛!' + }); + this.refreshTable()() + this.lookDialogVisible = false + }).catch(err => { }); + }, + } +} +</script> + +<style scoped> +.title { + height: 60px; + line-height: 60px; +} + +.search { + background-color: #fff; + height: 40px; + display: flex; + align-items: center; + position: relative; +} + +.search_thing { + width: 350px; + display: flex; + align-items: center; +} + +.search_label { + width: 110px; + font-size: 14px; + text-align: right; +} + +.search_input { + width: calc(100% - 110px); +} + +.table { + background-color: #fff; + width: calc(100% - 40px); + height: calc(100% - 60px - 140px); + padding: 20px; +} + +>>>.el-tabs__content { + height: 100%; +} +</style> diff --git a/src/views/CNAS/systemManagement/documentRecords/regularReviewsRecord.vue b/src/views/CNAS/systemManagement/documentRecords/regularReviewsRecord.vue new file mode 100644 index 0000000..5e9b191 --- /dev/null +++ b/src/views/CNAS/systemManagement/documentRecords/regularReviewsRecord.vue @@ -0,0 +1,585 @@ +<template> + <!-- 鏂囦欢瀹氭湡瀹℃煡璁板綍 --> + <div class="PeriodicDocumentReviewRecords"> + <el-row class="title"> + <el-col :span="12" style="padding-left: 20px;text-align: left;">鏂囦欢瀹氭湡瀹℃煡璁板綍</el-col> + <!-- <el-col :span="12" style="text-align: right;"> + <el-button size="medium" type="primary" @click="openAdd" v-if="addPower">鏂板</el-button> + <el-upload :action="action" :show-file-list="false" + accept='.doc,.docx' :headers="headers" :on-change="beforeUpload" + :on-error="onError" ref='upload' v-if="upPower" :on-success="handleSuccessUp" style="display:inline-block;margin-left: 20px;"> + <el-button type="primary" size="medium">瀵煎叆</el-button></el-upload> + <el-button size="medium" type="primary" @click="handleDown" :loading="outLoading" v-if="outPower" style="display:inline-block;margin-left: 20px;">瀵煎嚭</el-button> + </el-col> --> + </el-row> + <el-tabs type="border-card" v-model="activeName" style="height: 100%;"> + <el-tab-pane label="濉啓" name="濉啓" style="height: 100%;"> + <div class="search"> + <div class="search_thing"> + <div class="search_label">鏂囦欢鍚嶇О锛�</div> + <div class="search_input"><el-input size="small" placeholder="璇疯緭鍏�" clearable + v-model="componentData.entity.documentName" @keyup.enter.native="refreshTable()"></el-input></div> + </div> + <div class="search_thing"> + <div class="search_label">鏂囦欢缂栧彿锛�</div> + <div class="search_input"> + <el-input size="small" placeholder="璇疯緭鍏�" clearable v-model="componentData.entity.documentCode" + @keyup.enter.native="refreshTable()"></el-input> + </div> + </div> + <div class="search_thing" style="padding-left: 30px;"> + <el-button size="small" @click="refresh()">閲� 缃�</el-button> + <el-button size="small" type="primary" @click="refreshTable()">鏌� 璇�</el-button> + </div> + <div class="btns"> + <el-button size="medium" type="primary" @click="openAdd" v-if="addPower">鏂板</el-button> + <el-upload :action="action" :multiple="false" :show-file-list="false" accept='.doc,.docx' :headers="headers" + :on-change="beforeUpload" :on-error="onError" ref='upload' v-if="upPower" :on-success="handleSuccessUp" + style="display:inline-block;margin-left: 20px;"> + <el-button type="primary" size="medium">瀵煎叆</el-button></el-upload> + </div> + </div> + <div class="table"> + <ValueTable ref="ValueTable" :url="$api.manageRecordIntervals.pageManageRecordIntervals" + :delUrl="$api.manageRecordIntervals.delManageRecordIntervals" :componentData="componentData" + :upUrl="$api.manageRecordIssueRecycle.doManageRecordIssueRecycle" :key="upIndex" /> + </div> + </el-tab-pane> + <el-tab-pane label="鍘嗗彶璁板綍" name="鍘嗗彶璁板綍" style="height: 100%;"> + <div class="search"> + <div class="search_thing"> + <div class="search_label">骞达細</div> + <div class="search_input"> + <el-date-picker v-model="componentData0.entity.year" type="year" placeholder="閫夋嫨骞�" format="yyyy" + value-format="yyyy" size="small" @change="refreshTable()"> + </el-date-picker> + </div> + </div> + <div class="search_thing" style="padding-left: 30px;"> + <el-button size="small" @click="refresh(1)">閲� 缃�</el-button> + <el-button size="small" type="primary" @click="refreshTable(1)">鏌� 璇�</el-button> + </div> + </div> + <div class="table"> + <ValueTable ref="ValueTable0" :url="$api.manageRecordIntervals.pageManageRecordIntervalsTotal" + :componentData="componentData0" :key="upIndex" /> + </div> + </el-tab-pane> + </el-tabs> + <el-dialog :title="title" :visible.sync="addDialogVisible" width="400px" top="6vh"> + <el-row> + <el-col :span="24" style="margin-bottom: 16px;"> + <div class="search_thing"> + <div class="search_label"><span style="color: red;margin-left: 4px;">* </span>鏂囦欢缂栧彿锛�</div> + <div class="search_input"> + <el-select v-model="addInfo.documentCode" size="small" style="width: 100%;" @change="getCurrentFile" + allow-create clearable filterable> + <el-option v-for="item in fileList" :key="item.documentCode" :label="item.title" + :value="item.documentCode"> + </el-option> + </el-select> + </div> + </div> + </el-col> + <el-col :span="24" style="margin-bottom: 16px;"> + <div class="search_thing"> + <div class="search_label">鏂囦欢鍚嶇О锛�</div> + <div class="search_input"><el-input size="small" placeholder="璇疯緭鍏�" clearable + v-model="addInfo.documentName"></el-input></div> + </div> + </el-col> + <el-col :span="24" style="margin-bottom: 16px;"> + <div class="search_thing"> + <div class="search_label">鐗堟湰鍙凤細</div> + <div class="search_input"><el-input size="small" placeholder="璇疯緭鍏�" clearable + v-model="addInfo.documentVersion"></el-input></div> + </div> + </el-col> + <el-col :span="24" style="margin-bottom: 16px;"> + <div class="search_thing"> + <div class="search_label">淇鍙凤細</div> + <div class="search_input"><el-input size="small" placeholder="璇疯緭鍏�" clearable + v-model="addInfo.revision"></el-input></div> + </div> + </el-col> + <el-col :span="24" style="margin-bottom: 16px;"> + <div class="search_thing"> + <div class="search_label">閫傚疁鎬э細</div> + <div class="search_input"> + <el-select v-model="addInfo.suitability" placeholder="璇烽�夋嫨" size="small" style="width: 100%;"> + <el-option v-for="item in typeList" :key="item.value" :label="item.label" :value="item.value"> + </el-option> + </el-select> + </div> + </div> + </el-col> + <el-col :span="24" style="margin-bottom: 16px;"> + <div class="search_thing"> + <div class="search_label">澶囨敞锛�</div> + <div class="search_input"><el-input size="small" placeholder="璇疯緭鍏�" clearable v-model="addInfo.remark" + type="textarea" :rows="2"></el-input></div> + </div> + </el-col> + </el-row> + <span slot="footer" class="dialog-footer"> + <el-button @click="addDialogVisible = false">鍙� 娑�</el-button> + <el-button type="primary" @click="handleAdd" :loading="addLoading">纭� 瀹�</el-button> + </span> + </el-dialog> + <!-- 璇︽儏/瀹℃牳 --> + <el-dialog :title="title0" :visible.sync="lookDialogVisible" width="800px" top="5vh"> + <filePreview v-if="lookDialogVisible" :fileUrl="javaApi + '/word/' + currentInfo.url" :currentFile="{}" + style="max-height: 70vh;overflow-y: auto;" /> + <span slot="footer" class="dialog-footer" v-if="title0 == '瀹℃牳' || title0 == '鎵瑰噯'"> + <el-button @click="submitCheck('涓嶉�氳繃')" :loading="noCheckLoading">涓嶉�氳繃</el-button> + <el-button type="primary" @click="submitCheck('閫氳繃')" :loading="checkLoading">閫� 杩�</el-button> + </span> + </el-dialog> + </div> +</template> + +<script> +import ValueTable from '@/components/Table/value-table.vue' +import filePreview from '@/components/Preview/filePreview.vue' +import { getToken } from "@/utils/auth"; +export default { + components: { + ValueTable, + filePreview + }, + data() { + return { + activeName: '濉啓', + title0: '鏂板', + addPower: true, + outPower: true, + upPower: true, + outLoading: false, + addLoading: false, + lookDialogVisible: false, + noCheckLoading: false, + checkLoading: false, + componentData: { + entity: { + documentName: null, + documentCode: null, + orderBy: { + field: 'id', + order: 'desc' + } + }, + isIndex: true, + showSelect: false, + select: false, + // selectMethod: 'handleChangeTask', + do: [{ + id: 'handleEdit', + font: '淇敼', + type: 'text', + method: 'handleEdit', + field: [], + }, { + id: 'delete', + font: '鍒犻櫎', + type: 'text', + method: 'doDiy', + }], + tagField: { + // documentType:{ + // select: [] + // }, + // receiveUserName:{ + // select: [] + // }, + }, + selectField: { + // documentType:{ + // select: [] + // }, + // receiveUserName:{ + // select: [] + // }, + }, + addUpload: ['signatoryUrl'], + requiredAdd: [], + requiredUp: [], + datePicker: ['receiveDate'], + noHead: ['signedUserName', 'signedDate', 'departLims'],//涓嶅弬涓庢柊澧炵紪杈戠殑瀛楁 + needSort: [], + inputType: '' + }, + componentData0: { + entity: { + year: null, + orderBy: { + field: 'id', + order: 'desc' + } + }, + isIndex: true, + showSelect: false, + select: false, + do: [{ + id: 'handleLook', + font: '鏌ョ湅', + type: 'text', + method: 'handleLook', + disabFun: (row, index) => { + return !row.url + } + }, { + id: 'handleDown0', + font: '涓嬭浇', + type: 'text', + method: 'handleDown0', + disabFun: (row, index) => { + return !row.url + } + }, + { + id: 'handleSubmit', + font: '鎻愪氦', + type: 'text', + method: 'handleSubmit', + disabFun: (row, index) => { + return !!row.submitUserName + } + }, { + id: 'handleApproval', + font: '鎵瑰噯', + type: 'text', + method: 'handleApproval', + disabFun: (row, index) => { + return !row.submitUserName || !!row.ratifyUserName + } + }], + tagField: {}, + selectField: {}, + requiredAdd: [], + requiredUp: [], + needSort: [], + inputType: '' + }, + entityCopy: {}, + entityCopy0: {}, + upIndex: 0, + addInfo: {}, + title: '鏂板', + addInfo: {}, + addDialogVisible: false, + fileList: [], + typeList: [], + currentInfo: {}, + } + }, + // 鐢ㄤ簬涓婁紶鏂囦欢鐨勪俊鎭� + computed: { + headers() { + return { + 'Authorization': "Bearer " + getToken() + } + }, + action() { + return this.javaApi + this.$api.manageRecordIntervals.exportInManageRecordIntervals + } + }, + mounted() { + this.entityCopy = this.HaveJson(this.componentData.entity); + this.entityCopy0 = this.HaveJson(this.componentData0.entity); + this.getPower() + this.getFileList() + this.selectEnumByCategory() + }, + methods: { + getPower() { + let power = JSON.parse(sessionStorage.getItem('power')) + let add = false + let del = false + let up = false; + let out = false; + let submit = false + let ratify = false + for (var i = 0; i < power.length; i++) { + if (power[i].menuMethod == 'addManageRecordIntervals') { + add = true + } + if (power[i].menuMethod == 'delManageRecordIntervals') { + del = true + } + if (power[i].menuMethod == 'exportInManageRecordIntervals') { + up = true + } + if (power[i].menuMethod == 'exportOutManageRecordIntervals') { + out = true + } + if (power[i].menuMethod == 'submitManageRecordIntervalsTotal') { + submit = true + } + if (power[i].menuMethod == 'ratifyManageRecordIntervalsTotal') { + ratify = true + } + } + if (!ratify) { + this.componentData0.do.splice(3, 1) + } + if (!submit) { + this.componentData0.do.splice(2, 1) + } + if (!add) { + this.componentData.do.splice(1, 1) + } + if (!del) { + this.componentData.do.splice(0, 1) + } + this.addPower = add + this.outPower = out + this.upPower = up + }, + // 鏂板 + openAdd() { + // this.$refs.ValueTable.openAddDia(this.$api.manageRecordIssueRecycle.addManageRecordIssueRecycle); + this.addInfo = {} + this.title = '鏂板' + this.addDialogVisible = true; + }, + // 瀵煎嚭 + handleDown() { + this.outLoading = true + this.$axios.post(this.$api.manageRecordIntervals.exportOutManageRecordIntervals, { entity: this.componentData.entity }, { headers: { 'Content-Type': 'application/json' } }).then(res => { + this.outLoading = false + if (res.code == 201) return this.$message.error('瀵煎嚭澶辫触') + this.$message.success('瀵煎嚭鎴愬姛') + let url = this.javaApi + 'word/' + res.message + const link = document.createElement('a'); + link.href = url; + link.download = '鏂囦欢瀹氭湡瀹℃煡璁板綍'; + link.click(); + }) + }, + refreshTable(num) { + if (num) { + this.$refs['ValueTable0'].selectList() + } else { + this.refreshTable()() + } + }, + refresh(num) { + if (num) { + this.componentData0.entity = this.HaveJson(this.entityCopy0) + this.upIndex++ + } else { + this.componentData.entity = this.HaveJson(this.entityCopy) + this.upIndex++ + } + }, + beforeUpload(file) { + if (file.size > 1024 * 1024 * 10) { + this.$message.error('涓婁紶鏂囦欢涓嶈秴杩�10M'); + this.$refs.upload.clearFiles() + return false; + } else { + // this.upLoading = true; + return true; + } + }, + onError(err, file, fileList) { + this.$message.error('涓婁紶澶辫触') + this.$refs.upload.clearFiles() + }, + handleSuccessUp(response) { + this.upLoading = false; + if (response.code == 200) { + this.$message.success('涓婁紶鎴愬姛'); + this.refreshTable()() + } else { + this.$message.error('涓婁紶澶辫触'); + } + }, + getCurrentFile(e) { + let obj = this.fileList.find(m => m.documentCode == e) + if (obj) { + this.$set(this.addInfo, 'documentName', obj.name) + this.$set(this.addInfo, 'documentVersion', obj.version) + // this.addInfo.documentName = obj.name + // this.addInfo.documentVersion = obj.version + } + }, + // 鑾峰彇鏂囦欢鍒楄〃--鏂囦欢娓呭崟 + getFileList() { + this.$axios.post(this.$api.manageDocumentList.pageManageDocumentList, { + entity: { + orderBy: { + field: 'id', + order: 'asc' + } + }, + page: { + current: -1, + size: -1 + } + }, { + headers: { + 'Content-Type': 'application/json' + } + }).then(res => { + this.fileList = res.data.body.records.map(m => { + m.title = m.documentCode + return m + }) + }).catch(err => { }) + }, + selectEnumByCategory() { + this.$axios.post(this.$api.enums.selectEnumByCategory, { + category: "閫傚疁鎬�" + }).then(res => { + this.typeList = res.data + }) + }, + // 鎻愪氦 + handleAdd() { + if (!this.addInfo.documentCode) return this.$message.error('璇疯緭鍏ユ枃浠剁紪鍙�') + this.addLoading = true + let obj = {} + if (this.title == '鏂板') { + obj = this.HaveJson(this.addInfo) + } else { + let { id, documentCode, documentName, documentVersion, revision, suitability, remark } = this.addInfo + obj = { id, documentCode, documentName, documentVersion, revision, suitability, remark } + } + this.$axios.post(this.$api.manageRecordIntervals[this.title == '鏂板' ? 'addManageRecordIntervals' : 'doManageRecordIntervals'], obj, { headers: { 'Content-Type': 'application/json' }, noQs: true }).then(res => { + this.addLoading = false + if (res.code == 201) { + return + } + this.addDialogVisible = false + this.$message({ + type: 'success', + message: '鎿嶄綔鎴愬姛!' + }); + this.refreshTable() + }).catch(err => { }) + }, + // 淇敼 + handleEdit(row) { + this.addInfo = row + this.title = '缂栬緫' + this.addDialogVisible = true; + }, + submitCheck(state) { + if (state == '閫氳繃') { + this.checkLoading = true + } else { + this.noCheckLoading = true + } + this.$axios.post(this.$api.manageRecordIntervals.ratifyManageRecordIntervalsTotal, { + id: this.currentInfo.id, + ratifyState: state + }).then(res => { + this.checkLoading = false + if (res.code == 201) { + return + } + this.noCheckLoading = false + this.$message({ + type: 'success', + message: '鎿嶄綔鎴愬姛!' + }); + this.$refs['ValueTable0'].selectList() + this.lookDialogVisible = false + }).catch(err => { }); + }, + // 鏌ョ湅 + handleLook(row) { + this.title0 = '鏌ョ湅' + this.commonFun(row) + }, + commonFun(row, callbanck) { + this.currentInfo = row + this.lookDialogVisible = true + if (callbanck) { + callbanck() + } + }, + handleDown0(row) { + let url = this.javaApi + 'word/' + row.url + const link = document.createElement('a'); + link.href = url; + link.download = row.month + ' 鎵�鏈夋枃浠跺畾鏈熸鏌ヨ褰�'; + link.click(); + }, + // 鎻愪氦 + handleSubmit(row) { + this.$confirm('鏄惁鎻愪氦 ' + row.year + ' 骞寸殑鏁版嵁', '鎻愪氦', { + confirmButtonText: '纭畾', + cancelButtonText: '鍙栨秷', + type: 'warning' + }).then(() => { + this.$axios.post(this.$api.manageRecordIntervals.submitManageRecordIntervalsTotal, { + id: row.id + }).then(res => { + if (res.code === 201) return + this.$message({ + type: 'success', + message: '鎻愪氦鎴愬姛!' + }); + this.$refs['ValueTable0'].selectList() + }).catch(err => { }); + }) + }, + // 鎵瑰噯 + handleApproval(row) { + this.title0 = '鎵瑰噯' + this.commonFun(row) + }, + } +} +</script> + +<style scoped> +.title { + height: 60px; + line-height: 60px; +} + +.search { + background-color: #fff; + height: 40px; + display: flex; + align-items: center; + position: relative; +} + +.search_thing { + width: 350px; + display: flex; + align-items: center; +} + +.search_label { + width: 110px; + font-size: 14px; + text-align: right; +} + +.search_input { + width: calc(100% - 110px); +} + +.table { + margin-top: 10px; + background-color: #fff; + width: calc(100% - 40px); + height: calc(100% - 60px - 140px); + padding: 20px; +} + +>>>.el-tabs__content { + height: 100%; +} + +.btns { + position: absolute; + right: 20px; + top: 5px; +} +</style> diff --git a/src/views/CNAS/systemManagement/documentRecords/revisionRecord.vue b/src/views/CNAS/systemManagement/documentRecords/revisionRecord.vue new file mode 100644 index 0000000..c7d80ce --- /dev/null +++ b/src/views/CNAS/systemManagement/documentRecords/revisionRecord.vue @@ -0,0 +1,848 @@ +<template> + <!-- 鏂囦欢淇鐢宠瀹℃壒璁板綍 --> + <div class="DocumentRevisionRequestApprovalRecords"> + <el-row class="title"> + <el-col :span="12" style="padding-left: 20px;text-align: left;">鏂囦欢淇鐢宠瀹℃壒璁板綍</el-col> + <el-col :span="12" style="text-align: right;"> + <el-button size="medium" type="primary" @click="openAdd" v-if="addPower">鏂板</el-button> + <!-- <el-upload :action="action" :show-file-list="false" + accept='.doc,.docx' :headers="headers" :on-change="beforeUpload" + :on-error="onError" ref='upload' v-if="upPower" :on-success="handleSuccessUp" style="display:inline-block;margin-left: 20px;"> + <el-button type="primary" size="medium">瀵煎叆</el-button></el-upload> --> + <el-button size="medium" type="primary" @click="handleDown" :loading="outLoading" v-if="outPower" + style="display:inline-block;margin-left: 20px;">瀵煎嚭</el-button> + </el-col> + </el-row> + <div class="search"> + <!-- <div class="search_thing"> + <div class="search_label">鏂囦欢鍚嶇О锛�</div> + <div class="search_input"><el-input size="small" placeholder="璇疯緭鍏�" clearable v-model="componentData.entity.documentName" + @keyup.enter.native="refreshTable()"></el-input></div> + </div> --> + <div class="search_thing"> + <div class="search_label">鏂囦欢缂栧彿锛�</div> + <div class="search_input"> + <el-input size="small" placeholder="璇疯緭鍏�" clearable v-model="componentData.entity.documentCode" + @keyup.enter.native="refreshTable()"></el-input> + </div> + </div> + <div class="search_thing" style="padding-left: 30px;"> + <el-button size="small" @click="refresh()">閲� 缃�</el-button> + <el-button size="small" type="primary" @click="refreshTable()">鏌� 璇�</el-button> + </div> + </div> + <div class="table"> + <ValueTable ref="ValueTable" :url="$api.manageRecordAudit.pageManageRecordAudit" + :delUrl="$api.manageRecordAudit.delManageRecordAudit" :componentData="componentData" + :upUrl="$api.manageRecordIssueRecycle.doManageRecordIssueRecycle" :key="upIndex" /> + </div> + <el-dialog :title="title" :visible.sync="addDialogVisible" width="800px" top="6vh"> + <el-row> + <el-col :span="12" style="margin-bottom: 16px;"> + <div class="search_thing"> + <div class="search_label">鐢宠绫诲瀷锛�</div> + <div class="search_input"> + <el-radio-group v-model="addInfo.method" size="small" :disabled="title.includes('鎰忚')"> + <el-radio label="淇">淇</el-radio> + <el-radio label="浣滃簾">浣滃簾</el-radio> + </el-radio-group> + </div> + </div> + </el-col> + <el-col :span="12" style="margin-bottom: 16px;"> + <div class="search_thing"> + <div class="search_label"><span style="color: red;margin-left: 4px;">* </span>鏂囦欢缂栧彿锛�</div> + <div class="search_input"> + <el-select v-model="addInfo.documentCode" size="small" style="width: 100%;" @change="getCurrentFile" + allow-create clearable filterable :disabled="title.includes('鎰忚')"> + <el-option v-for="item in fileList" :key="item.documentCode" :label="item.title" + :value="item.documentCode"> + </el-option> + </el-select> + </div> + </div> + </el-col> + <el-col :span="12" style="margin-bottom: 16px;"> + <div class="search_thing"> + <div class="search_label">鏂囦欢鍚嶇О锛�</div> + <div class="search_input"><el-input size="small" placeholder="璇疯緭鍏�" clearable v-model="addInfo.documentName" + :disabled="title.includes('鎰忚')"></el-input></div> + </div> + </el-col> + <el-col :span="12" style="margin-bottom: 16px;"> + <div class="search_thing"> + <div class="search_label">绔犺妭鍙凤細</div> + <div class="search_input"><el-input size="small" placeholder="璇疯緭鍏�" clearable v-model="addInfo.capter" + :disabled="title.includes('鎰忚')"></el-input></div> + </div> + </el-col> + <el-col :span="12" style="margin-bottom: 16px;"> + <div class="search_thing"> + <div class="search_label">椤电爜锛�</div> + <div class="search_input"><el-input size="small" placeholder="璇疯緭鍏�" clearable v-model="addInfo.pages" + :disabled="title.includes('鎰忚')"></el-input></div> + </div> + </el-col> + <el-col :span="12" style="margin-bottom: 16px;"> + <div class="search_thing"> + <div class="search_label">淇敼娆℃暟锛�</div> + <div class="search_input"><el-input size="small" placeholder="璇疯緭鍏�" clearable v-model="addInfo.number" + :disabled="title.includes('鎰忚')"></el-input></div> + </div> + </el-col> + <el-col :span="12" style="margin-bottom: 16px;"> + <div class="search_thing"> + <div class="search_label">淇敼鍓嶇増鏈彿锛�</div> + <div class="search_input"><el-input size="small" placeholder="璇疯緭鍏�" clearable v-model="addInfo.beforeVersion" + :disabled="title.includes('鎰忚')"></el-input></div> + </div> + </el-col> + <el-col :span="12" style="margin-bottom: 16px;"> + <div class="search_thing"> + <div class="search_label">淇敼鍚庣増鏈彿锛�</div> + <div class="search_input"><el-input size="small" placeholder="璇疯緭鍏�" clearable v-model="addInfo.afterVersion" + :disabled="title.includes('鎰忚')"></el-input></div> + </div> + </el-col> + <el-col :span="12" style="margin-bottom: 16px;"> + <div class="search_thing"> + <div class="search_label">淇浜猴細</div> + <div class="search_input"> + <el-select v-model="addInfo.alterUser" placeholder="璇烽�夋嫨" size="small" style="width: 100%;" filterable + :disabled="title.includes('鎰忚')"> + <el-option v-for="item in personList" :key="item.value" :label="item.label" :value="item.value"> + </el-option> + </el-select> + </div> + </div> + </el-col> + <el-col :span="12" style="margin-bottom: 16px;"> + <div class="search_thing"> + <div class="search_label">鍘熷垎鍙戦儴闂細</div> + <div class="search_input"> + <el-select v-model="addInfo.beforeDepart" placeholder="璇烽�夋嫨" size="small" style="width: 100%;" + :disabled="title.includes('鎰忚')"> + <el-option v-for="item in list" :key="item.name" :label="item.name" :value="item.name"> + </el-option> + </el-select> + </div> + </div> + </el-col> + <el-col :span="12" style="margin-bottom: 16px;"> + <div class="search_thing"> + <div class="search_label">淇鍚庡垎鍙戦儴闂細</div> + <div class="search_input"> + <el-select v-model="addInfo.afterDepart" placeholder="璇烽�夋嫨" size="small" style="width: 100%;" + :disabled="title.includes('鎰忚')"> + <el-option v-for="item in list" :key="item.name" :label="item.name" :value="item.name"> + </el-option> + </el-select> + </div> + </div> + </el-col><el-col :span="12" style="margin-bottom: 16px;"> + <div class="search_thing"> + <div class="search_label">鏃ユ湡锛�</div> + <div class="search_input"> + <el-date-picker v-model="addInfo.date" type="date" size="small" placeholder="閫夋嫨鏃ユ湡" format="yyyy-MM-dd" + value-format="yyyy-MM-dd" style="width: 100%;"> + </el-date-picker> + </div> + </div> + </el-col> + <el-col :span="24" style="margin-bottom: 16px;"> + <div class="search_thing" style="width: 90%;"> + <div class="search_label">淇敼鍐呭锛�</div> + <div class="search_input"><el-input size="small" placeholder="璇疯緭鍏�" clearable v-model="addInfo.alterThing" + type="textarea" :rows="2" :disabled="title.includes('鎰忚')"></el-input></div> + </div> + </el-col> + <el-col :span="24" style="margin-bottom: 16px;"> + <div class="search_thing" style="width: 90%;"> + <div class="search_label">鍙樺寲鍘熷洜锛�</div> + <div class="search_input"><el-input size="small" placeholder="璇疯緭鍏�" clearable v-model="addInfo.reason" + type="textarea" :rows="2" :disabled="title.includes('鎰忚')"></el-input></div> + </div> + </el-col> + <el-col :span="12" style="margin-bottom: 16px;"> + <div class="search_thing"> + <div class="search_label">涓婁紶闄勪欢锛�</div> + <div class="search_input"><el-upload style="margin: 8px 0 0px 50px;" action="#" :auto-upload="false" + :multiple="false" accept='.pdf' :on-change="handleChangeUpload" + v-if="addDialogVisible && !title.includes('鎰忚')"> + <el-button size="small" type="primary">涓婁紶闄勪欢</el-button> + </el-upload></div> + </div> + </el-col> + <el-col :span="12" style="margin-bottom: 16px;" v-if="title.includes('鎰忚')"> + <div class="search_thing"> + <div class="search_label">鐢宠閮ㄩ棬涓荤鎰忚锛�</div> + <div class="search_input"><el-input size="small" placeholder="璇疯緭鍏�" clearable v-model="addInfo.applicant" + type="textarea" :rows="2" :disabled="title != '鐢宠閮ㄩ棬涓荤鎰忚'"></el-input></div> + </div> + </el-col> + <el-col :span="12" style="margin-bottom: 16px;" v-if="title.includes('鎰忚')"> + <div class="search_thing"> + <div class="search_label">鍘熷畾鍒堕儴闂ㄦ剰瑙侊細</div> + <div class="search_input"><el-input size="small" placeholder="璇疯緭鍏�" clearable v-model="addInfo.formulation" + type="textarea" :rows="2" :disabled="title != '鍘熷畾鍒堕儴闂ㄦ剰瑙�'"></el-input></div> + </div> + </el-col> + <el-col :span="12" style="margin-bottom: 16px;" v-if="title.includes('鎰忚')"> + <div class="search_thing"> + <div class="search_label">鍘熷鏍搁儴闂ㄦ剰瑙侊細</div> + <div class="search_input"><el-input size="small" placeholder="璇疯緭鍏�" clearable v-model="addInfo.audit" + type="textarea" :rows="2" :disabled="title != '鍘熷鏍搁儴闂ㄦ剰瑙�'"></el-input></div> + </div> + </el-col> + </el-row> + <span slot="footer" class="dialog-footer"> + <el-button @click="addDialogVisible = false">鍙� 娑�</el-button> + <el-button type="primary" @click="handleAdd" :loading="addLoading">纭� 瀹�</el-button> + </span> + </el-dialog> + <el-dialog :title="title0" :visible.sync="detailDialogVisible" width="900px" top="20px" + :class="{ downPdf: title0 == '涓嬭浇' }" :modal="title0 != '涓嬭浇'"> + <div style="max-height: 75vh;overflow-y: auto;"> + <div id="dialogBody"> + <h4 style="display: flex;align-items: center;flex-direction: column;justify-content: center;"> + <span style="font-size: 20px;">鏂囦欢鏇存敼/浣滃簾鐢宠琛�</span> + <span>Application for alteration/cancellation of Document</span> + </h4> + <p style="display: flex;justify-content: space-between;margin-top: 16px;"> + <span>{{ currentInfo.documentCode }}</span> + <span>{{ currentInfo.method }}</span> + </p> + <table border="1" class="tables" cellpadding="10"> + <tr> + <td> + <p>鐢宠閮ㄩ棬</p> + <p class="en">Application department</p> + </td> + <td>{{ currentInfo.createUserDepart }}</td> + <td> + <p>鐢宠浜�</p> + <p>Proposer</p> + </td> + <td>{{ currentInfo.createUserName }}</td> + <td> + <p>鐢宠鏃堕棿</p> + <p class="en">Application date</p> + </td> + <td>{{ currentInfo.createTime }}</td> + </tr> + <tr> + <td> + <p>鏂囦欢鍚嶇О</p> + <p class="en">File name</p> + </td> + <td colspan="3">{{ currentInfo.documentName }}</td> + <td> + <p>鏂囦欢缂栧彿</p> + <p class="en">Document number</p> + </td> + <td>{{ currentInfo.documentCode }}</td> + </tr> + <tr> + <td> + <p>淇敼鍓嶇増娆�</p> + <p class="en">Modify previous editions</p> + </td> + <td colspan="2">{{ currentInfo.beforeVersion }}</td> + <td> + <p>淇敼鍚庣増娆�</p> + <p class="en">Revised edition</p> + </td> + <td colspan="2">{{ currentInfo.afterVersion }}</td> + </tr> + <tr> + <td> + <p>鍙樺寲鍘熷洜</p> + <p class="en">Changing reason</p> + </td> + <td colspan="5"> + <div class="user-content"> + <p style="text-align: left;line-height: 26px;">{{ currentInfo.reason }}</p> + </div> + </td> + </tr> + <tr> + <td> + <p>鍘熸枃鍐呭</p> + <p class="en">Original content</p> + </td> + <td colspan="2">瑙侀檮浠�</td> + <td> + <p>鎷熶慨璁㈠唴瀹�</p> + <p class="en">Content be revised</p> + </td> + <td colspan="2">{{ currentInfo.alterThing }}</td> + </tr> + <tr> + <td> + <p>淇鍚庡垎鍙戦儴闂�</p> + <p class="en">Distribute to the department after revision</p> + </td> + <td colspan="2">{{ currentInfo.afterDepart }}</td> + <td> + <p>鍘熷垎鏀鹃儴闂�</p> + <p class="en">The original distribution department</p> + </td> + <td colspan="2">{{ currentInfo.beforeDepart }}</td> + </tr> + <tr> + <td> + <p>鐢宠閮ㄩ棬涓荤鎰忚</p> + <p class="en">Opinion of the head of the applicant department</p> + </td> + <td colspan="2"> + <p>鍘熷埗瀹氶儴闂ㄦ剰瑙�</p> + <p class="en">Original formulation of the department's opinion</p> + </td> + <td colspan="2"> + <p>鍘熷鏍搁儴闂ㄦ剰瑙�</p> + <p class="en">Opinion of the original audit department</p> + </td> + <td> + <p>鎵瑰噯</p> + <p class="en">Ratify</p> + </td> + </tr> + <tr> + <td> + {{ currentInfo.applicant }} + </td> + <td colspan="2"> + {{ currentInfo.formulation }} + </td> + <td colspan="2"> + {{ currentInfo.audit }} + </td> + <td> + <img :src="javaApi + 'img/' + currentInfo.ratifyUserUrl" style="width: 100%;" alt="鎵瑰噯浜虹鍚�"> + </td> + </tr> + </table> + </div> + </div> + </el-dialog> + <el-dialog title="鏂囦欢棰勮" :visible.sync="lookDialogVisible" width="800px" top="5vh" fullscreen> + <h4>淇鍐呭</h4> + <filePreview v-if="lookDialogVisible" :fileUrl="javaApi + '/word/' + currentInfo.afterUrl" :currentFile="{}" /> + <h4>鍘熷唴瀹�</h4> + <filePreview v-if="lookDialogVisible" :fileUrl="javaApi + '/word/' + currentInfo.beforeUrl" :currentFile="{}" /> + </el-dialog> + </div> +</template> + +<script> +import ValueTable from '@/components/Table/value-table.vue' +import { exportHtmlToPDF } from '@/utils/downHtmlToPDF' +import filePreview from '@/components/Preview/filePreview.vue' +export default { + components: { + ValueTable, + filePreview + }, + data() { + return { + addPower: true, + outPower: true, + outLoading: false, + lookDialogVisible: false, + addLoading: false, + componentData: { + entity: { + // documentName: null, + documentCode: null, + orderBy: { + field: 'createTime', + order: 'desc' + } + }, + isIndex: true, + showSelect: false, + select: false, + // selectMethod: 'handleChangeTask', + do: [{ + id: 'handleLook', + font: '鏌ョ湅', + type: 'text', + method: 'handleLook' + }, { + id: 'handleLook0', + font: '鏂囦欢棰勮', + type: 'text', + method: 'handleLook0' + }, { + id: 'handleOut', + font: '涓嬭浇', + type: 'text', + method: 'handleOut' + }, { + id: 'delete', + font: '鍒犻櫎', + type: 'text', + method: 'doDiy', + disabFun: (row, index) => { + return !!row.ratifyUser + } + }, { + id: 'handleEdit', + font: '淇敼', + type: 'text', + method: 'handleEdit', + field: [], + disabFun: (row, index) => { + return !!row.ratifyUser + } + }, { + id: 'handleRatify', + font: '鎵瑰噯', + type: 'text', + method: 'handleRatify', + field: [], + disabFun: (row, index) => { + return !!row.ratifyUser + } + }, { + id: 'handlework0', + font: '鐢宠鎰忚', + type: 'text', + method: 'handlework0', + field: [], + disabFun: (row, index) => { + return !!row.ratifyUser + } + }, { + id: 'handlework1', + font: '鍘熷畾鍒舵剰瑙�', + type: 'text', + method: 'handlework1', + field: [], + disabFun: (row, index) => { + return !!row.ratifyUser + } + }, { + id: 'handlework2', + font: '鍘熷鏍告剰瑙�', + type: 'text', + method: 'handlework2', + field: [], + disabFun: (row, index) => { + return !!row.ratifyUser + } + }], + tagField: { + // documentType:{ + // select: [] + // }, + // receiveUserName:{ + // select: [] + // }, + }, + selectField: { + // documentType:{ + // select: [] + // }, + // receiveUserName:{ + // select: [] + // }, + }, + addUpload: ['signatoryUrl'], + requiredAdd: [], + requiredUp: [], + datePicker: ['receiveDate'], + noHead: ['signedUserName', 'signedDate', 'departLims'],//涓嶅弬涓庢柊澧炵紪杈戠殑瀛楁 + needSort: [], + inputType: '' + }, + entityCopy: {}, + upIndex: 0, + title: '鏂板', + addInfo: { + method: '淇', + }, + addDialogVisible: false, + detailDialogVisible: false, + fileList: [], + personList: [], + list: [], + file: null, + title0: '鏌ョ湅', + currentInfo: {}, + } + }, + mounted() { + this.entityCopy = this.HaveJson(this.componentData.entity); + this.getPower() + this.getFileList() + this.getAuthorizedPerson() + this.selectTreeList() + }, + methods: { + getPower() { + let power = JSON.parse(sessionStorage.getItem('power')) + let add = false + let del = false + let out = false; + let ratify = false + let audit1 = false + let audit2 = false + let audit3 = false + for (var i = 0; i < power.length; i++) { + if (power[i].menuMethod == 'addManageRecordAudit') { + add = true + } + if (power[i].menuMethod == 'delManageRecordAudit') { + del = true + } + if (power[i].menuMethod == 'ratifyManageRecordAudit') { + ratify = true + } + if (power[i].menuMethod == 'exportOutManageRecordAudit') { + out = true + } + if (power[i].menuMethod == 'manageRecordAudit1') { + audit1 = true + } + if (power[i].menuMethod == 'manageRecordAudit2') { + audit2 = true + } + if (power[i].menuMethod == 'manageRecordAudit3') { + audit3 = true + } + } + if (!audit3) { + this.componentData.do.splice(8, 1) + } + if (!audit2) { + this.componentData.do.splice(7, 1) + } + if (!audit1) { + this.componentData.do.splice(6, 1) + } + if (!ratify) { + this.componentData.do.splice(5, 1) + } + if (!add) { + this.componentData.do.splice(4, 1) + } + if (!del) { + this.componentData.do.splice(3, 1) + } + this.addPower = add + this.outPower = out + }, + openAdd() { + this.addInfo = { + method: '淇', + } + this.title = '鏂板' + this.addDialogVisible = true; + }, + // 瀵煎嚭 + handleDown() { + this.outLoading = true + this.$axios.post(this.$api.manageRecordAudit.exportOutManageRecordAudit, { entity: this.componentData.entity }, { headers: { 'Content-Type': 'application/json' } }).then(res => { + this.outLoading = false + if (res.code == 201) return this.$message.error('瀵煎嚭澶辫触') + this.$message.success('瀵煎嚭鎴愬姛') + let url = this.javaApi + 'word/' + res.message + const link = document.createElement('a'); + link.href = url; + link.download = '鏂囦欢淇琛�'; + link.click(); + }) + }, + refreshTable() { + this.refreshTable()() + }, + refresh() { + this.componentData.entity = this.HaveJson(this.entityCopy) + this.upIndex++ + this.refreshTable() + }, + // 鑾峰彇鏂囦欢鍒楄〃--鏂囦欢娓呭崟 + getFileList() { + this.$axios.post(this.$api.manageDocumentList.pageManageDocumentList, { + entity: { + orderBy: { + field: 'createTime', + order: 'desc' + } + }, + page: { + current: -1, + size: -1 + } + }, { + headers: { + 'Content-Type': 'application/json' + } + }).then(res => { + this.fileList = res.data.body.records.map(m => { + m.title = m.documentCode + return m + }) + }).catch(err => { }) + }, + getCurrentFile(e) { }, + handleAdd() { + if (!this.addInfo.documentCode) return this.$message({ type: 'error', message: "璇疯緭鍏ユ枃浠剁紪鍙�" }) + if (!this.addInfo.id) { + // 鏂板 + let fd = new FormData(); + //鏂囦欢淇℃伅涓璻aw鎵嶆槸鐪熺殑鏂囦欢 + if (this.file) { + fd.append("file", this.file.raw); + } + for (let m in this.addInfo) { + fd.append(m, this.addInfo[m]) + } + this.addLoading = true + this.$axios.post(this.$api.manageRecordAudit.addManageRecordAudit, fd, { + headers: { + 'Content-Type': 'multipart/form-data' + }, + noQs: true + }).then(res => { + this.addLoading = false + if (res.code == 200) { + this.$message({ + type: 'success', + message: '娣诲姞鎴愬姛' + }) + this.refreshTable() + this.addDialogVisible = false + } else { + this.$message({ + type: 'error', + message: '娣诲姞澶辫触' + }) + } + }) + } else { + // 淇敼 + let { id, method, documentCode, documentName, capter, pages, beforeVersion, afterVersion, alterUser, alterThing, reason, beforeDepart, afterDepart, number, applicant, formulation, audit, date } = this.addInfo + let fd = new FormData(); + //鏂囦欢淇℃伅涓璻aw鎵嶆槸鐪熺殑鏂囦欢 + if (this.file) { + fd.append("file", this.file.raw); + } + let obj = { id, method, documentCode, documentName, capter, pages, beforeVersion, afterVersion, alterUser, alterThing, reason, beforeDepart, afterDepart, number, applicant, formulation, audit, date } + for (let m in obj) { + if (this.addInfo[m]) { + fd.append(m, this.addInfo[m]) + } + } + this.addLoading = true + this.$axios.post(this.$api.manageRecordAudit.doManageRecordAudit, fd, { + headers: { + 'Content-Type': 'multipart/form-data' + }, + noQs: true + }).then(res => { + this.addLoading = false + if (res.code == 200) { + this.refreshTable() + this.addDialogVisible = false + } else { + this.$message({ + type: 'error', + message: '娣诲姞澶辫触' + }) + } + }) + } + }, + getAuthorizedPerson() { + this.$axios.get(this.$api.user.getUserMenu).then(res => { + let data = [] + res.data.forEach(a => { + data.push({ + label: a.name, + value: a.id + }) + }) + // this.componentData.tagField.receiveUserName.select = data + // this.componentData.selectField.receiveUserName.select = data + this.personList = data + }) + }, + // 鏌ヨ鏍戝舰鍒楄〃 + selectTreeList() { + this.$axios.get(this.$api.personnel.selectCNSAPersonTree).then((res) => { + this.list = res.data[0].children; + }); + }, + handleChangeUpload(file, fileLists) { + this.file = file + // this.$set(this.addInfo,'name',file.name) + }, + handleEdit(row) { + this.addInfo = row + this.title = '淇敼' + this.addDialogVisible = true; + }, + // 瀹℃壒 + handleRatify(row) { + this.$confirm('鏄惁鎵瑰噯閫氳繃?', '鎵瑰噯', { + confirmButtonText: '纭畾', + cancelButtonText: '鍙栨秷', + type: 'warning' + }) + .then(() => { + this.$axios + .post(this.$api.manageRecordAudit.ratifyManageRecordAudit, { id: row.id }) + .then(res => { + if (res.code === 201) { + return; + } + this.$message.success('鎿嶄綔鎴愬姛'); + this.refreshTable(); + }) + .catch(e => { + this.$message.error('鎿嶄綔澶辫触'); + }); + }) + .catch(() => { + }); + }, + handlework0(row) { + this.addInfo = row + this.title = '鐢宠閮ㄩ棬涓荤鎰忚' + this.addDialogVisible = true; + }, + handlework1(row) { + this.addInfo = row + this.title = '鍘熷畾鍒堕儴闂ㄦ剰瑙�' + this.addDialogVisible = true; + }, + handlework2(row) { + this.addInfo = row + this.title = '鍘熷鏍搁儴闂ㄦ剰瑙�' + this.addDialogVisible = true; + }, + handleLook(row) { + this.title0 = '鏌ョ湅' + this.currentInfo = row + this.detailDialogVisible = true; + }, + handleOut(row) { + this.currentInfo = row + this.title0 = '涓嬭浇' + this.detailDialogVisible = true; + setTimeout(() => { + this.$nextTick(() => { + const element = document.getElementById("dialogBody"); + exportHtmlToPDF(element, '鏂囦欢' + row.method + '鐢宠琛�').then(res => { + this.detailDialogVisible = false; + }) + }) + }, 500); + }, + handleLook0(row) { + this.currentInfo = row; + this.lookDialogVisible = true + } + } +} +</script> + +<style scoped> +.title { + height: 60px; + line-height: 60px; +} + +.search { + background-color: #fff; + height: 80px; + display: flex; + align-items: center; +} + +.search_thing { + width: 350px; + display: flex; + align-items: center; +} + +.search_label { + width: 110px; + font-size: 14px; + text-align: right; +} + +.search_input { + width: calc(100% - 110px); +} + +.table { + margin-top: 10px; + background-color: #fff; + width: calc(100% - 40px); + height: calc(100% - 60px - 80px - 10px - 40px); + padding: 20px; +} + +.tables { + table-layout: fixed; + width: 100%; + margin-top: 10px; +} + +.tables td { + height: 40px; + width: 100px; + text-align: center; + font-size: 14px; + word-wrap: break-word; + white-space: normal; +} + +.en { + font-size: 12px; + word-break: break-word; + /* 鑷姩鏂 */ + overflow-wrap: break-word; + /* 闃叉婧㈠嚭 */ + white-space: normal; + /* 榛樿鎹㈣ */ +} + +.heads td { + border: 1px dashed black; + /* 鍗曞厓鏍肩殑铏氱嚎 */ + padding: 8px; + text-align: left; +} + +.downPdf { + opacity: 0 !important; +} + +h4.title { + position: relative; + height: 30px; + line-height: 30px; + box-sizing: border-box; + padding-left: 16px; + margin-left: 10px; + margin-bottom: 10px; +} + +h4.title::after { + content: ''; + width: 4px; + height: 20px; + background: #3A7BFA; + position: absolute; + top: 5px; + left: 0; +} + +>>>.el-dialog__body { + height: auto; +} +</style> -- Gitblit v1.9.3