| | |
| | | <!-- |
| | | * @Author: licp lichunping@guanfang.com.cn |
| | | * @Date: 2024-10-28 15:06:45 |
| | | * @LastEditors: licp lichunping@guanfang.com.cn |
| | | * @LastEditTime: 2024-12-18 10:21:33 |
| | | * @FilePath: \tx-lims-before\index.html |
| | | * @Description: è¿æ¯é»è®¤è®¾ç½®,请设置`customMade`, æå¼koroFileHeaderæ¥çé
ç½® è¿è¡è®¾ç½®: https://github.com/OBKoro1/koro1FileHeader/wiki/%E9%85%8D%E7%BD%AE |
| | | --> |
| | | <!DOCTYPE html> |
| | | <html> |
| | | <head> |
| | |
| | | </body> |
| | | <script src="<%= htmlWebpackPlugin.options.url %>/static/luckysheet/plugins/js/plugin.js"></script> |
| | | <script src="<%= htmlWebpackPlugin.options.url %>/static/luckysheet/luckysheet.umd.js"></script> |
| | | <script src="https://cdnjs.cloudflare.com/ajax/libs/pdf.js/2.16.105/pdf.min.js"></script> |
| | | </html> |
| | |
| | | evaluate, |
| | | role, |
| | | insProductTemplate, |
| | | manageDocumentList, |
| | | } |
| | | } |
| | | |
| | |
| | | getInsProductTemplate:'/insProductTemplate/getInsProductTemplate',//éæ©ä¹åæ¥ç详æ
ä¼ åid |
| | | delInsProductTemplate:'/insProductTemplate/delInsProductTemplate',//å 餿¨¡ç ä¼ åid |
| | | } |
| | | |
| | | // 8.3 管çä½ç³»æä»¶çæ§å¶ |
| | | const manageDocumentList = { |
| | | pageManageDocumentList:'/manageDocumentList/pageManageDocumentList', // æä»¶æ¸
å-å表 |
| | | doManageDocumentList:'/manageDocumentList/doManageDocumentList', // æä»¶æ¸
å-ç¼è¾ |
| | | uploadFileManageDocumentList:'/manageDocumentList/uploadFileManageDocumentList', // æä»¶æ¸
å-éä»¶ä¸ä¼ |
| | | exportManageDocumentList:'/manageDocumentList/exportManageDocumentList', // æä»¶æ¸
å-éä»¶ä¸ä¼ |
| | | delManageDocumentList:'/manageDocumentList/delManageDocumentList', // æä»¶æ¸
å-å¯¼åº |
| | | pageManageDocumentControlled:'/manageDocumentControlled/pageManageDocumentControlled', // æä»¶åæ§-å表 |
| | | addManageDocumentControlled:'/manageDocumentControlled/addManageDocumentControlled', // æä»¶åæ§-æ°å¢ |
| | | getManageDocumentControlled:'/manageDocumentControlled/getManageDocumentControlled', // æä»¶åæ§-æ¥ç |
| | | doManageDocumentControlled:'/manageDocumentControlled/doManageDocumentControlled', // æä»¶åæ§-ä¿®æ¹ |
| | | delManageDocumentControlled:'/manageDocumentControlled/delManageDocumentControlled', // æä»¶åæ§-å é¤ |
| | | checkManageDocumentControlled:'/manageDocumentControlled/checkManageDocumentControlled', // æä»¶åæ§-å®¡æ ¸ |
| | | checkManageDocumentControlledPdf:'/manageDocumentControlled/checkManageDocumentControlledPdf', // æä»¶åæ§-è·åpdfæä»¶æµ |
| | | pageManageDocumentCancel:'/manageDocumentCancel/pageManageDocumentCancel', // æä»¶ä½åº-å表 |
| | | addManageDocumentCancel:'/manageDocumentCancel/addManageDocumentCancel', // æä»¶ä½åº-æ°å¢ |
| | | checkManageDocumentCancel:'/manageDocumentCancel/checkManageDocumentCancel', // æä»¶ä½åº-å®¡æ ¸ |
| | | delManageDocumentCancel:'/manageDocumentCancel/delManageDocumentCancel', // æä»¶ä½åº-å é¤ |
| | | getManageDocumentCancel:'/manageDocumentCancel/getManageDocumentCancel', // æä»¶ä½åº-æ¥ç |
| | | doManageDocumentCancel:'/manageDocumentCancel/doManageDocumentCancel', // æä»¶ä½åº-ç¼è¾ |
| | | exportManageDocumentCancel:'/manageDocumentCancel/exportManageDocumentCancel', // æä»¶ä½åº-å¯¼åº |
| | | pageManageDocumentIssueRecycle:'/manageDocumentIssueRecycle/pageManageDocumentIssueRecycle', // æä»¶åæ¾åæ¶-å表 |
| | | addManageDocumentIssueRecycle:'/manageDocumentIssueRecycle/addManageDocumentIssueRecycle', // æä»¶åæ¾åæ¶-æ°å¢ |
| | | delManageDocumentIssueRecycle:'/manageDocumentIssueRecycle/delManageDocumentIssueRecycle', // æä»¶åæ¾åæ¶-å é¤ |
| | | getManageDocumentIssueRecycle:'/manageDocumentIssueRecycle/getManageDocumentIssueRecycle', // æä»¶åæ¾åæ¶-æ¥ç |
| | | doManageDocumentIssueRecycle:'/manageDocumentIssueRecycle/doManageDocumentIssueRecycle', // æä»¶åæ¾åæ¶-ç¼è¾ |
| | | checkManageDocumentIssueRecycle:'/manageDocumentIssueRecycle/checkManageDocumentIssueRecycle', // æä»¶åæ¾åæ¶-å®¡æ ¸ |
| | | exportManageDocumentIssueRecycle:'/manageDocumentIssueRecycle/exportManageDocumentIssueRecycle', // æä»¶åæ¾åæ¶-å¯¼åº |
| | | pageManageDocumentAlter:'/manageDocumentAlter/pageManageDocumentAlter', // æä»¶åæ´-å表 |
| | | delManageDocumentAlter:'/manageDocumentAlter/delManageDocumentAlter', // æä»¶åæ´-å é¤ |
| | | getManageDocumentAlter:'/manageDocumentAlter/getManageDocumentAlter', // æä»¶åæ´-æ¥ç |
| | | addManageDocumentAlter:'/manageDocumentAlter/addManageDocumentAlter', // æä»¶åæ´-æ°å¢ |
| | | doManageDocumentAlter:'/manageDocumentAlter/doManageDocumentAlter', // æä»¶åæ´-ç¼è¾ |
| | | checkManageDocumentAlter:'/manageDocumentAlter/checkManageDocumentAlter', // æä»¶åæ´-å®¡æ ¸ |
| | | checkManageDocumentAlterPdf:'/manageDocumentAlter/checkManageDocumentAlterPdf', // æä»¶åæ´-è½¬æ¢æµ |
| | | exportManageDocumentAlter:'/manageDocumentAlter/exportManageDocumentAlter', // æä»¶åæ´-å¯¼åº |
| | | } |
¶Ô±ÈÐÂÎļþ |
| | |
| | | <template> |
| | | <!-- æä»¶åæ§è®°å½ --> |
| | | <div class="controlled-file-application" 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.documentCode" |
| | | @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.createUserName" |
| | | @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" style="padding-left: 30px;" v-if="addPower"> |
| | | <el-button size="small" type="primary" @click="addDialogVisible=true,addInfo={},file=null">æä»¶åæ§ç³è¯·</el-button> |
| | | </div> |
| | | </div> |
| | | <div class="table"> |
| | | <ValueTable ref="ValueTable" :url="$api.manageDocumentList.pageManageDocumentControlled" |
| | | :componentData="componentData" :delUrl="$api.manageDocumentList.delManageDocumentControlled" :key="upIndex"/> |
| | | </div> |
| | | <el-dialog |
| | | title="æä»¶åæ§ç³è¯·" |
| | | :visible.sync="addDialogVisible" |
| | | width="800px" top="10vh"> |
| | | <el-row> |
| | | <el-col :span="12" style="margin-bottom: 16px;"> |
| | | <div class="search_thing"> |
| | | <div class="search_label"><span style="color:red;margin-right: 4px;">*</span>ç³è¯·ç¼å·ï¼</div> |
| | | <div class="search_input"><el-input size="small" placeholder="请è¾å
¥" clearable v-model="addInfo.documentCode"></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.dutyUser" 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="12" style="margin-bottom: 16px;"> |
| | | <div class="search_thing"> |
| | | <div class="search_label">æä»¶ç±»å«ï¼</div> |
| | | <div class="search_input"> |
| | | <el-select v-model="addInfo.type" 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="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.name"></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.version"></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"> |
| | | <el-button size="small" type="primary">ä¸ä¼ éä»¶</el-button> |
| | | </el-upload></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.writer"></el-input> --> |
| | | <el-select v-model="addInfo.writer" size="small" style="width: 100%;" filterable> |
| | | <el-option |
| | | v-for="item in personList" |
| | | :key="item.value" |
| | | :label="item.label" |
| | | :value="item.label"> |
| | | </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.submitDate" |
| | | 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="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.instructions" 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="æ¥çéä»¶" |
| | | :visible.sync="lookDialogVisible" |
| | | width="800px" top="5vh" fullscreen> |
| | | <filePreview v-if="lookDialogVisible" :fileUrl="javaApi+'/word/'+currentInfo.url" |
| | | :currentFile="{}" style="height: 90vh;overflow-y: auto;"/> |
| | | </el-dialog> |
| | | <el-dialog |
| | | title="å®¡æ ¸" |
| | | :visible.sync="checkDialogVisible" |
| | | width="1000px" top="5vh"> |
| | | <UpPdfStamp ref="UpPdfStamp" v-if="checkDialogVisible" @uploadPDF="uploadPDF" :isUpFile="false" style="max-height: 80vh;overflow-y: auto;"></UpPdfStamp> |
| | | <span slot="footer" class="dialog-footer"> |
| | | <el-button @click="handleCheckSub('ä¸éè¿')" :loading="noCheckLoading">ä¸éè¿</el-button> |
| | | <el-button type="primary" @click="handleCheckSub('éè¿')" :loading="checkLoading">é è¿</el-button> |
| | | </span> |
| | | </el-dialog> |
| | | <el-dialog |
| | | title="éæ©åæ§ç« " |
| | | :visible.sync="checkStampDialogVisible" |
| | | width="600px" top="5vh"> |
| | | <div class="stamp-list"> |
| | | <img :src="'../../../../static/img/stamps/'+item+'.png'" alt="" v-for="(item,index) in stampsList" :key="index" style="width: 120px;height: 80px;margin: 6px;" class="stamp" :class="{active:currentStamp==item}" @click="currentStamp=item"> |
| | | </div> |
| | | <span slot="footer" class="dialog-footer"> |
| | | <el-button @click="checkStampDialogVisible=false" >å æ¶</el-button> |
| | | <el-button type="primary" @click="handleCheck0(currentInfo)">ç¡® å®</el-button> |
| | | </span> |
| | | </el-dialog> |
| | | </div> |
| | | </template> |
| | | |
| | | <script> |
| | | import ValueTable from '../../tool/value-table.vue' |
| | | import filePreview from '../../tool/file-preview.vue' |
| | | import UpPdfStamp from '../../tool/upPdfStamp.vue' |
| | | export default { |
| | | components: { |
| | | ValueTable, |
| | | filePreview, |
| | | UpPdfStamp |
| | | }, |
| | | data() { |
| | | return { |
| | | upLoading: false, |
| | | addPower:false, |
| | | addDialogVisible:false, |
| | | addLoading:false, |
| | | lookDialogVisible:false, |
| | | checkDialogVisible:false, |
| | | checkStampDialogVisible:false, |
| | | componentData: { |
| | | entity: { |
| | | documentCode: null, |
| | | createUserName: null, |
| | | orderBy: { |
| | | field: 'createTime', |
| | | order: 'desc' |
| | | } |
| | | }, |
| | | isIndex: true, |
| | | showSelect: false, |
| | | select: false, |
| | | do: [{ |
| | | id: 'handleUpdate', |
| | | font: 'ç¼è¾', |
| | | type: 'text', |
| | | method: 'handleUpdate', |
| | | field:[], |
| | | disabFun: (row, index) => { |
| | | return row.state=='éè¿' |
| | | } |
| | | }, |
| | | { |
| | | id: 'delete', |
| | | font: 'å é¤', |
| | | type: 'text', |
| | | method: 'doDiy', |
| | | disabFun: (row, index) => { |
| | | return row.state=='éè¿' |
| | | } |
| | | }, |
| | | { |
| | | id: 'handleCheck', |
| | | font: 'å®¡æ ¸', |
| | | type: 'text', |
| | | method: 'handleCheck', |
| | | disabFun: (row, index) => { |
| | | return (row.dutyUserName&&!row.dutyUserName.includes(JSON.parse(localStorage.getItem("user")).name))||row.state=='éè¿' |
| | | } |
| | | }, |
| | | { |
| | | id: 'handleLook', |
| | | font: 'æ¥çéä»¶', |
| | | type: 'text', |
| | | method: 'handleLook' |
| | | }, |
| | | { |
| | | id: 'handleDown', |
| | | font: 'ä¸è½½éä»¶', |
| | | type: 'text', |
| | | method: 'handleDown' |
| | | }], |
| | | tagField: { |
| | | state:{ |
| | | select: [ |
| | | { |
| | | value: 'éè¿', |
| | | label: 'éè¿' |
| | | }, |
| | | { |
| | | value: 'ä¸éè¿', |
| | | label: 'ä¸éè¿' |
| | | }, |
| | | ] |
| | | }, |
| | | }, |
| | | selectField: { |
| | | state:{ |
| | | select: [] |
| | | }, |
| | | signatory:{ |
| | | select: [] |
| | | }, |
| | | }, |
| | | datePicker:['effectiveDate'], |
| | | addUpload:['signatoryUrl'], |
| | | requiredAdd: [], |
| | | requiredUp: [], |
| | | needSort: [], |
| | | inputType:Â '' |
| | | }, |
| | | entityCopy: {}, |
| | | upIndex: 0, |
| | | addInfo:{}, |
| | | personList:[], |
| | | fileType:[], |
| | | file:null, |
| | | currentInfo:{}, |
| | | checkLoading:false, |
| | | noCheckLoading:false, |
| | | type:'', |
| | | stampsList:['主任','è´¨éè´è´£äºº','ææ¯è´è´£äºº','综å室','éä¿¡','çµå','è£
å¤','å¨è½','å°é¢'], |
| | | currentStamp:'主任' |
| | | } |
| | | }, |
| | | mounted() { |
| | | this.entityCopy = this.HaveJson(this.componentData.entity); |
| | | this.getPower() |
| | | this.getAuthorizedPerson() |
| | | this.selectEnumByCategory() |
| | | }, |
| | | methods: { |
| | | getPower(){ |
| | | let power = JSON.parse(sessionStorage.getItem('power')) |
| | | let up = false |
| | | let del = false |
| | | let add = false |
| | | // let check = false |
| | | for (var i = 0; i < power.length; i++) { |
| | | if (power[i].menuMethod == 'addManageDocumentControlled') { |
| | | up = true |
| | | } |
| | | if (power[i].menuMethod == 'addManageDocumentControlled') { |
| | | add = true |
| | | } |
| | | if (power[i].menuMethod == 'delManageDocumentControlled') { |
| | | del = true |
| | | } |
| | | // if (power[i].menuMethod == 'checkManageDocumentControlled') { |
| | | // check = true |
| | | // } |
| | | } |
| | | // if (!check) { |
| | | // this.componentData.do.splice(2, 1) |
| | | // } |
| | | if (!del) { |
| | | this.componentData.do.splice(1, 1) |
| | | } |
| | | if (!up) { |
| | | this.componentData.do.splice(0, 1) |
| | | } |
| | | this.addPower = add |
| | | }, |
| | | refreshTable() { |
| | | this.$refs['ValueTable'].selectList() |
| | | }, |
| | | 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.personList = data |
| | | }) |
| | | }, |
| | | selectEnumByCategory() { |
| | | this.$axios.post(this.$api.enums.selectEnumByCategory, { |
| | | category: "æä»¶ç±»å«" |
| | | }).then(res => { |
| | | this.fileType = res.data |
| | | }) |
| | | }, |
| | | // æäº¤ |
| | | handleAdd(){ |
| | | if(!this.addInfo.documentCode) return this.$message({type:'error',message:"请è¾å
¥ç¼å·"}) |
| | | if(!this.addInfo.id){ |
| | | // æ°å¢ |
| | | let fd = new FormData(); |
| | | //æä»¶ä¿¡æ¯ä¸rawææ¯ççæä»¶ |
| | | 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.manageDocumentList.addManageDocumentControlled, 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,documentCode,dutyUser,type,name,version,writer,submitDate,instructions} = this.addInfo |
| | | let fd = new FormData(); |
| | | //æä»¶ä¿¡æ¯ä¸rawææ¯ççæä»¶ |
| | | if(this.file){ |
| | | fd.append("file",this.file.raw); |
| | | } |
| | | fd.append("id",id); |
| | | fd.append("documentCode",documentCode); |
| | | fd.append("dutyUser",dutyUser); |
| | | fd.append("type",type); |
| | | fd.append("name",name); |
| | | fd.append("version",version); |
| | | fd.append("writer",writer); |
| | | fd.append("submitDate",submitDate); |
| | | fd.append("instructions",instructions); |
| | | this.addLoading = true |
| | | this.$axios.post(this.$api.manageDocumentList.doManageDocumentControlled, 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: 'æ·»å 失败' |
| | | }) |
| | | } |
| | | }) |
| | | } |
| | | }, |
| | | handleChangeUpload(file, fileLists){ |
| | | this.file = file |
| | | this.$set(this.addInfo,'name',file.name) |
| | | }, |
| | | // ç¼è¾ |
| | | handleUpdate(row){ |
| | | this.title='æä»¶åæ´ç³è¯·' |
| | | this.addInfo = this.HaveJson(row) |
| | | this.addDialogVisible = true |
| | | }, |
| | | // æ¥çéä»¶ |
| | | handleLook(row){ |
| | | this.currentInfo = row |
| | | this.lookDialogVisible = true |
| | | }, |
| | | // å®¡æ ¸ |
| | | handleCheck(row){ |
| | | this.title='å®¡æ ¸' |
| | | this.currentInfo = row |
| | | if(!row.url) return this.$message.warning('æä»¶æªä¸ä¼ ') |
| | | this.checkStampDialogVisible=true |
| | | }, |
| | | handleCheck0(row){ |
| | | this.checkStampDialogVisible=false |
| | | this.checkDialogVisible = true |
| | | this.$axios.post(this.$api.manageDocumentList.checkManageDocumentControlledPdf,{id:row.id},{responseType: "blob"}).then(res=>{ |
| | | // |
| | | const blob = new Blob([res]); |
| | | const file = new File([blob], row.name, { type: 'application/pdf' }) |
| | | this.$refs.UpPdfStamp.lookFile(file,this.currentStamp) |
| | | }).catch(err=>{ |
| | | console.log(err) |
| | | }) |
| | | }, |
| | | handleDown(row){ |
| | | if(!row.url) return this.$message.warning('æä»¶æªä¸ä¼ ') |
| | | let url = this.javaApi+'/word/'+row.url |
| | | const link = document.createElement('a'); |
| | | link.href = url; |
| | | link.click(); |
| | | }, |
| | | async uploadPDF(pdfBlob){ |
| | | const formData = new FormData(); |
| | | formData.append('file', pdfBlob, this.fileName+'.pdf'); // æä»¶å段 |
| | | formData.append('id', this.currentInfo.id); // æä»¶ååæ®µ |
| | | formData.append('state', this.type); // æä»¶ååæ®µ |
| | | formData.append('writer', this.currentInfo.writer); // æä»¶ååæ®µ |
| | | |
| | | let res = await this.$axios.post(this.$api.manageDocumentList.checkManageDocumentControlled, formData,{ |
| | | headers: { |
| | | 'Content-Type': 'multipart/form-data;' |
| | | }, |
| | | noQs: true |
| | | }) |
| | | this.checkLoading = false |
| | | this.noCheckLoading = false |
| | | if(res.code==200){ |
| | | this.$message({ message: 'æä½æå', type: 'success' }); |
| | | this.checkDialogVisible = false; |
| | | this.refreshTable() |
| | | return true |
| | | }else{ |
| | | this.$message({ message: 'æä½å¤±è´¥', type: 'error' }); |
| | | return false |
| | | } |
| | | }, |
| | | handleCheckSub(type){ |
| | | this.type = type |
| | | if(type == 'éè¿') { |
| | | this.checkLoading = true |
| | | }else{ |
| | | this.noCheckLoading = true |
| | | } |
| | | this.addLoading = true |
| | | this.$refs['UpPdfStamp'].generatePDF() |
| | | } |
| | | } |
| | | } |
| | | </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 - 80px); |
| | | padding: 20px; |
| | | } |
| | | .btns{ |
| | | position: absolute; |
| | | right: 20px; |
| | | top: 5px; |
| | | } |
| | | .stamp{ |
| | | cursor: pointer; |
| | | border: #fff 1px solid; |
| | | } |
| | | .stamp:hover{ |
| | | border: #3A7BFA 1px solid; |
| | | box-shadow: inset 0px 0px 15px #3A7BFA; |
| | | } |
| | | .stamp.active{ |
| | | border: #3A7BFA 1px solid; |
| | | box-shadow: inset 0px 0px 15px #3A7BFA; |
| | | } |
| | | </style> |
¶Ô±ÈÐÂÎļþ |
| | |
| | | <template> |
| | | <!-- åæ¾åæ¶è®°å½ --> |
| | | <div class="distribution-collection-record" 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.documentCode" |
| | | @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.name" |
| | | @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" style="padding-left: 30px;"> |
| | | <el-button size="small" type="primary" @click="addDialogVisible=true,addInfo={},radio='åæ¾'" v-if="addPower">æ·»å åæ¾è®°å½</el-button> |
| | | <el-button size="small" type="primary" v-if="outPower" @click="handleOut" :loading="outLoading">导åº</el-button> |
| | | </div> |
| | | </div> |
| | | <div class="table"> |
| | | <ValueTable ref="ValueTable" :url="$api.manageDocumentList.pageManageDocumentIssueRecycle" |
| | | :componentData="componentData" :delUrl="$api.manageDocumentList.delManageDocumentIssueRecycle" :key="upIndex"/> |
| | | </div> |
| | | <el-dialog |
| | | :title="'æ·»å '+radio+'è®°å½'" |
| | | :visible.sync="addDialogVisible" |
| | | width="800px" top="10vh"> |
| | | <el-row> |
| | | <el-col :span="12" style="margin-bottom: 16px;"> |
| | | <div class="search_thing"> |
| | | <div class="search_label"><span style="color:red;margin-right: 4px;">*</span>ç³è¯·ç¼å·ï¼</div> |
| | | <div class="search_input"> |
| | | <el-select v-model="addInfo.documentCode" size="small" style="width: 100%;" @change="changeFileList" :disabled="radio=='åæ¶'" filterable allow-create clearable> |
| | | <el-option |
| | | v-for="item in fileList" |
| | | :key="item.documentCode" |
| | | :label="item.documentCode" |
| | | :value="item.documentCode"> |
| | | </el-option> |
| | | </el-select> |
| | | </div> |
| | | </div> |
| | | </el-col> |
| | | <el-col :span="12" style="margin-bottom: 16px;" v-if="radio=='åæ¾'"> |
| | | <div class="search_thing"> |
| | | <div class="search_label"><span style="color:red;margin-right: 4px;">*</span>åæ¾äººï¼</div> |
| | | <div class="search_input"> |
| | | <el-select v-model="addInfo.issueUser" 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="12" style="margin-bottom: 16px;" v-else> |
| | | <div class="search_thing"> |
| | | <div class="search_label"><span style="color:red;margin-right: 4px;">*</span>åæ¶äººï¼</div> |
| | | <div class="search_input"> |
| | | <el-select v-model="addInfo.recycleUser" 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="12" style="margin-bottom: 16px;"> |
| | | <div class="search_thing"> |
| | | <div class="search_label"><span style="color:red;margin-right: 4px;">*</span>审æ¹äººï¼</div> |
| | | <div class="search_input"> |
| | | <el-select v-model="addInfo.receiveUser" size="small" style="width: 100%;" :disabled="radio!='åæ¾'" 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="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.name" :disabled="radio=='åæ¶'"></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.version" :disabled="radio=='åæ¶'"></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.state" size="small" style="width: 100%;" :disabled="radio=='åæ¶'"> |
| | | <el-option :label="item.label" :value="item.value" v-for="(item,index) in fileState" :key="index"></el-option> |
| | | </el-select> |
| | | </div> |
| | | </div> |
| | | </el-col> |
| | | <el-col :span="12" style="margin-bottom: 16px;" v-if="radio=='åæ¾'"> |
| | | <div class="search_thing"> |
| | | <div class="search_label">åæ¾ç¼å·ï¼</div> |
| | | <div class="search_input"><el-input size="small" placeholder="请è¾å
¥" clearable v-model="addInfo.issueCode"></el-input></div> |
| | | </div> |
| | | </el-col> |
| | | <el-col :span="12" style="margin-bottom: 16px;" v-else> |
| | | <div class="search_thing"> |
| | | <div class="search_label">åæ¶ç¼å·ï¼</div> |
| | | <div class="search_input"><el-input size="small" placeholder="请è¾å
¥" clearable v-model="addInfo.recycleCode"></el-input></div> |
| | | </div> |
| | | </el-col> |
| | | <el-col :span="12" style="margin-bottom: 16px;" v-if="radio=='åæ¾'"> |
| | | <div class="search_thing"> |
| | | <div class="search_label">åæ¾æ¶é´ï¼</div> |
| | | <div class="search_input"> |
| | | <el-date-picker |
| | | v-model="addInfo.issueDate" |
| | | 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="12" style="margin-bottom: 16px;" v-else> |
| | | <div class="search_thing"> |
| | | <div class="search_label">åæ¶æ¶é´ï¼</div> |
| | | <div class="search_input"> |
| | | <el-date-picker |
| | | v-model="addInfo.recycleDate" |
| | | 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="12" style="margin-bottom: 16px;" v-if="radio=='åæ¾'"> |
| | | <div class="search_thing"> |
| | | <div class="search_label">åæ¾è¯´æï¼</div> |
| | | <div class="search_input"><el-input size="small" placeholder="请è¾å
¥" clearable v-model="addInfo.issueNote" type="textarea" |
| | | :rows="2"></el-input></div> |
| | | </div> |
| | | </el-col> |
| | | <el-col :span="12" style="margin-bottom: 16px;" v-else> |
| | | <div class="search_thing"> |
| | | <div class="search_label">åæ¶è¯´æï¼</div> |
| | | <div class="search_input"><el-input size="small" placeholder="请è¾å
¥" clearable v-model="addInfo.recycleNote" type="textarea" |
| | | :rows="2"></el-input></div> |
| | | </div> |
| | | </el-col> |
| | | <el-col :span="12" style="margin-bottom: 16px;" v-if="radio=='åæ¾'"> |
| | | <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,.jpg,.jpeg,.png,.gif,.doc,.docx,.xls,.xlsx' :on-change="handleChangeUpload"> |
| | | <el-button size="small" type="primary">ä¸ä¼ éä»¶</el-button> |
| | | </el-upload></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="æ¥çéä»¶" |
| | | :visible.sync="lookDialogVisible" |
| | | width="800px" top="5vh" fullscreen> |
| | | <filePreview v-if="lookDialogVisible" :fileUrl="javaApi+'/word/'+currentInfo.url" |
| | | :currentFile="{}" style="height: 90vh;overflow-y: auto;"/> |
| | | </el-dialog> |
| | | </div> |
| | | </template> |
| | | |
| | | <script> |
| | | import ValueTable from '../../tool/value-table.vue' |
| | | import filePreview from '../../tool/file-preview.vue' |
| | | export default { |
| | | components: { |
| | | ValueTable, |
| | | filePreview |
| | | }, |
| | | data() { |
| | | return { |
| | | ddPower: false, |
| | | outPower:true, |
| | | addInfo: {}, |
| | | addPower:true, |
| | | addLoading:false, |
| | | addDialogVisible: false, |
| | | outLoading:false, |
| | | componentData: { |
| | | entity: { |
| | | documentCode: null, |
| | | name: null, |
| | | orderBy: { |
| | | field: 'createTime', |
| | | order: 'desc' |
| | | } |
| | | }, |
| | | isIndex: true, |
| | | showSelect: false, |
| | | select: false, |
| | | do: [{ |
| | | id: 'handleUpdate', |
| | | font: 'åæ¶è®°å½', |
| | | type: 'text', |
| | | method: 'handleUpdate', |
| | | field:[], |
| | | // disabFun: (row, index) => { |
| | | // return row.documentState=='éè¿' |
| | | // } |
| | | }, |
| | | { |
| | | id: 'delete', |
| | | font: 'å é¤', |
| | | type: 'text', |
| | | method: 'doDiy', |
| | | disabFun: (row, index) => { |
| | | return row.documentState=='éè¿' |
| | | } |
| | | }, |
| | | { |
| | | id: 'handleLook', |
| | | font: 'æ¥çéä»¶', |
| | | type: 'text', |
| | | method: 'handleLook', |
| | | disabFun: (row, index) => { |
| | | return !row.url |
| | | } |
| | | }, |
| | | { |
| | | id: 'handleCheck', |
| | | font: 'å®¡æ ¸', |
| | | type: 'text', |
| | | method: 'handleCheck', |
| | | disabFun: (row, index) => { |
| | | return row.receiveUser!=JSON.parse(localStorage.getItem("user")).userId||row.documentState=='éè¿' |
| | | } |
| | | },], |
| | | tagField: { |
| | | state:{ |
| | | select: [ |
| | | { |
| | | value: 'éè¿', |
| | | label: 'éè¿' |
| | | }, |
| | | { |
| | | value: 'ä¸éè¿', |
| | | label: 'ä¸éè¿' |
| | | }, |
| | | ] |
| | | }, |
| | | }, |
| | | selectField: { |
| | | state:{ |
| | | select: [ |
| | | { |
| | | value: 'éè¿', |
| | | label: 'éè¿' |
| | | }, |
| | | { |
| | | value: 'ä¸éè¿', |
| | | label: 'ä¸éè¿' |
| | | }, |
| | | ] |
| | | }, |
| | | signatory:{ |
| | | select: [] |
| | | }, |
| | | }, |
| | | datePicker:['effectiveDate'], |
| | | addUpload:['signatoryUrl'], |
| | | requiredAdd: [], |
| | | requiredUp: [], |
| | | needSort: [], |
| | | inputType:Â '' |
| | | }, |
| | | entityCopy: {}, |
| | | upIndex: 0, |
| | | personList:[], |
| | | fileList:[], |
| | | fileList0:[], |
| | | radio:'åæ¾', |
| | | fileState:[], |
| | | file:null, |
| | | currentInfo:{}, |
| | | lookDialogVisible:false |
| | | } |
| | | }, |
| | | mounted() { |
| | | this.entityCopy = this.HaveJson(this.componentData.entity); |
| | | this.getPower() |
| | | this.getAuthorizedPerson() |
| | | this.getFileList() |
| | | this.getFileList0() |
| | | this.selectEnumByCategory() |
| | | }, |
| | | methods:{ |
| | | getPower(){ |
| | | let power = JSON.parse(sessionStorage.getItem('power')) |
| | | let out = false |
| | | let del = false |
| | | let add = false |
| | | // let check = false |
| | | for (var i = 0; i < power.length; i++) { |
| | | if (power[i].menuMethod == 'exportManageDocumentIssueRecycle') { |
| | | out = true |
| | | } |
| | | if (power[i].menuMethod == 'addManageDocumentIssueRecycle') { |
| | | add = true |
| | | } |
| | | if (power[i].menuMethod == 'delManageDocumentIssueRecycle') { |
| | | del = true |
| | | } |
| | | // if (power[i].menuMethod == 'checkManageDocumentControlled') { |
| | | // check = true |
| | | // } |
| | | } |
| | | // if (!check) { |
| | | // this.componentData.do.splice(2, 1) |
| | | // } |
| | | if (!del) { |
| | | this.componentData.do.splice(1, 1) |
| | | } |
| | | if (!add) { |
| | | this.componentData.do.splice(0, 1) |
| | | } |
| | | this.addPower = add |
| | | this.outPower = out |
| | | }, |
| | | refreshTable() { |
| | | this.$refs['ValueTable'].selectList() |
| | | }, |
| | | refresh() { |
| | | this.componentData.entity = this.HaveJson(this.entityCopy) |
| | | this.upIndex++ |
| | | this.refreshTable() |
| | | }, |
| | | selectEnumByCategory() { |
| | | this.$axios.post(this.$api.enums.selectEnumByCategory, { |
| | | category: "æä»¶ç¶æ" |
| | | }).then(res => { |
| | | this.fileState = res.data |
| | | // this.componentData.tagField.state.select = res.data |
| | | // this.componentData.selectField.state.select = res.data |
| | | }) |
| | | }, |
| | | // è·å人åå表 |
| | | 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.personList = 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 |
| | | }).catch(err=>{}) |
| | | }, |
| | | // è·åæä»¶å表--ä½åºæä»¶ |
| | | getFileList0(){ |
| | | this.$axios.post(this.$api.manageDocumentList.pageManageDocumentCancel,{ |
| | | entity: { |
| | | orderBy: { |
| | | field: 'createTime', |
| | | order: 'desc' |
| | | } |
| | | }, |
| | | page:{ |
| | | current:-1, |
| | | size:-1 |
| | | } |
| | | },{headers: { |
| | | 'Content-Type': 'application/json' |
| | | }}).then(res=>{ |
| | | this.fileList0 = res.data.body.records |
| | | }).catch(err=>{}) |
| | | }, |
| | | // å¯¼åº |
| | | handleOut(){ |
| | | this.outLoading = true |
| | | this.$axios.post(this.$api.manageDocumentList.exportManageDocumentIssueRecycle, {entity:this.componentData.entity},{headers: { |
| | | 'Content-Type': 'application/json' |
| | | },responseType: "blob"},).then(res => { |
| | | this.outLoading = false |
| | | this.$message.success('å¯¼åºæå') |
| | | const blob = new Blob([res],{ type: 'application/octet-stream' }); |
| | | const url = URL.createObjectURL(blob); |
| | | const link = document.createElement('a'); |
| | | link.href = url; |
| | | link.download = 'åæ¾åæ¶è®°å½.xlsx'; |
| | | link.click(); |
| | | }) |
| | | }, |
| | | changeFileList(e){ |
| | | if(e){ |
| | | let obj = this.fileList.find(a=>a.documentCode == e) |
| | | this.addInfo.name = obj.name |
| | | this.addInfo.version = obj.version |
| | | this.addInfo.state = obj.state |
| | | } |
| | | }, |
| | | // æäº¤ |
| | | handleAdd(){ |
| | | if(!this.addInfo.documentCode){ |
| | | this.$message.error('è¯·éæ©æä»¶') |
| | | return |
| | | } |
| | | if(!this.addInfo.receiveUser){ |
| | | this.$message.error('è¯·éæ©å®¡æ¹äºº') |
| | | return |
| | | } |
| | | if(this.radio=='åæ¾'){ |
| | | if(!this.addInfo.issueUser){ |
| | | this.$message.error('è¯·éæ©åæ¾äºº') |
| | | return |
| | | } |
| | | }else{ |
| | | if(!this.addInfo.recycleUser){ |
| | | this.$message.error('è¯·éæ©åæ¶äºº') |
| | | return |
| | | } |
| | | } |
| | | this.addLoading = true; |
| | | if(!this.addInfo.id){ |
| | | // æ°å¢åæ¾è®°å½ |
| | | let fd = new FormData(); |
| | | //æä»¶ä¿¡æ¯ä¸rawææ¯ççæä»¶ |
| | | if(this.file){ |
| | | fd.append("file",this.file.raw); |
| | | } |
| | | for(let key in this.addInfo){ |
| | | fd.append(key,this.addInfo[key]) |
| | | } |
| | | this.$axios.post(this.$api.manageDocumentList.addManageDocumentIssueRecycle,fd,{ |
| | | headers: { |
| | | 'Content-Type': 'multipart/form-data' |
| | | }, |
| | | noQs:true |
| | | }).then(res=>{ |
| | | this.addLoading = false; |
| | | if(res.code==200){ |
| | | this.$message.success('åæ¾æå') |
| | | this.addDialogVisible = false |
| | | this.refreshTable() |
| | | } |
| | | }) |
| | | }else{ |
| | | let {documentCode,id,issueUser,recycleUser,receiveUser,name,version,documentState,issueCode,recycleCode,issueDate,recycleDate,issueNote,recycleNote} = this.addInfo |
| | | // æ·»å åæ¶è®°å½ |
| | | this.$axios.post(this.$api.manageDocumentList.doManageDocumentIssueRecycle,{ |
| | | documentCode,id,issueUser,recycleUser,receiveUser,name,version,documentState,issueCode,recycleCode,issueDate,recycleDate,issueNote,recycleNote |
| | | },{headers: { |
| | | 'Content-Type': 'application/json' |
| | | },noQS:true}).then(res=>{ |
| | | this.addLoading = false; |
| | | if(res.code==200){ |
| | | this.$message.success('æäº¤æå') |
| | | this.addDialogVisible = false |
| | | this.refreshTable() |
| | | } |
| | | }) |
| | | } |
| | | }, |
| | | // æ·»å åæ¶ |
| | | handleUpdate(row){ |
| | | this.addInfo = this.HaveJson(row) |
| | | this.radio = 'åæ¶' |
| | | this.addDialogVisible = true |
| | | }, |
| | | // å®¡æ ¸ |
| | | handleCheck(row){ |
| | | this.$confirm('æ¯å¦å®¡æ ¸éè¿?', 'æç¤º', { |
| | | confirmButtonText: 'éè¿', |
| | | cancelButtonText: 'ä¸éè¿', |
| | | type: 'warning', |
| | | closeOnClickModal: false, // ç¦æ¢ç¹å»é®ç½©å±å
³é |
| | | distinguishCancelAndClose: true, |
| | | beforeClose: (action, instance, done) => { |
| | | if (action === 'confirm') { |
| | | // ç¹å»âç¡®å®âæé®ï¼å
许å
³é |
| | | this.$axios.post(this.$api.manageDocumentList.checkManageDocumentIssueRecycle, {id:row.id,documentState:'éè¿'}).then(res => { |
| | | this.refreshTable() |
| | | done(); |
| | | this.$message({ |
| | | type: 'success', |
| | | message: 'æäº¤æå' |
| | | }) |
| | | }) |
| | | .catch(err => { |
| | | |
| | | }) |
| | | } else if (action === 'cancel') { |
| | | // ç¹å»âåæ¶âæé®ï¼ä¸å
许å
³é |
| | | this.$axios.post(this.$api.manageDocumentList.checkManageDocumentIssueRecycle, {id:row.id,documentState:'ä¸éè¿'}).then(res => { |
| | | this.refreshTable() |
| | | done(); |
| | | this.$message({ |
| | | type: 'success', |
| | | message: 'æäº¤æå' |
| | | }) |
| | | }) |
| | | .catch(err => { |
| | | |
| | | }) |
| | | console.log("åæ¶æé®ç¹å»äºä»¶ï¼ä¸å
³éå¼¹æ¡"); |
| | | } else if (action === 'close') { |
| | | // ç¹å»âÃâæé®ï¼ä¸å
许å
³é |
| | | done(); |
| | | console.log("Ãæé®ç¹å»äºä»¶ï¼ä¸å
³éå¼¹æ¡"); |
| | | } |
| | | } |
| | | }) |
| | | }, |
| | | handleChangeUpload(file, fileLists){ |
| | | this.file = file |
| | | this.$set(this.addInfo,'name',file.name) |
| | | }, |
| | | // æ¥çéä»¶ |
| | | handleLook(row){ |
| | | this.currentInfo = this.HaveJson(row) |
| | | this.lookDialogVisible = true |
| | | } |
| | | } |
| | | } |
| | | </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 - 80px); |
| | | padding: 20px; |
| | | } |
| | | .btns{ |
| | | position: absolute; |
| | | right: 20px; |
| | | top: 5px; |
| | | } |
| | | </style> |
¶Ô±ÈÐÂÎļþ |
| | |
| | | <template> |
| | | <!-- æä»¶åæ´ç³è¯· --> |
| | | <div class="file-change-request" 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.code" |
| | | @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" v-if="addPower"> |
| | | <el-button size="small" type="primary" @click="addDialogVisible=true,addInfo={},currentFile={},title='æä»¶åæ´ç³è¯·'">æä»¶åæ´ç³è¯·</el-button> |
| | | <el-button size="small" type="primary" v-if="outPower" @click="handleOut" :loading="outLoading">导åº</el-button> |
| | | </div> |
| | | </div> |
| | | <div class="table"> |
| | | <ValueTable ref="ValueTable" :url="$api.manageDocumentList.pageManageDocumentAlter" |
| | | :componentData="componentData" :delUrl="$api.manageDocumentList.delManageDocumentAlter" :key="upIndex"/> |
| | | </div> |
| | | <el-dialog |
| | | :title="title" |
| | | :visible.sync="addDialogVisible" |
| | | width="950px" top="0vh"> |
| | | <el-row style="max-height: 80vh;overflow-y: auto;"> |
| | | <el-col :span="12" style="margin-bottom: 16px;"> |
| | | <div class="search_thing"> |
| | | <div class="search_label"><span style="color:red;margin-right: 4px;">*</span>ç³è¯·ç¼å·ï¼</div> |
| | | <div class="search_input"><el-input size="small" placeholder="请è¾å
¥" clearable v-model="addInfo.code" :disabled="title=='å®¡æ ¸'"></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.checkUser" size="small" style="width: 100%;" filterable :disabled="title=='å®¡æ ¸'"> |
| | | <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-date-picker |
| | | v-model="addInfo.expectAlterDate" |
| | | type="date" |
| | | size="small" |
| | | placeholder="éæ©æ¥æ" |
| | | format="yyyy-MM-dd" |
| | | value-format="yyyy-MM-dd" style="width: 100%;" :disabled="title=='å®¡æ ¸'"> |
| | | </el-date-picker> |
| | | </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.actuallyAlterDate" |
| | | type="date" |
| | | size="small" |
| | | placeholder="éæ©æ¥æ" |
| | | format="yyyy-MM-dd" |
| | | value-format="yyyy-MM-dd" style="width: 100%;" |
| | | :disabled="title=='å®¡æ ¸'"> |
| | | </el-date-picker> |
| | | </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.alterBeforeCode" size="small" style="width: 100%;" @change="getCurrentFile" :disabled="title=='å®¡æ ¸'" filterable allow-create clearable> |
| | | <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"> |
| | | <h4 class="title">å½åæä»¶ä¿¡æ¯</h4> |
| | | </el-col> |
| | | <el-col :span="8" style="margin-bottom: 16px;"> |
| | | <div class="search_thing" style="width: 100%;"> |
| | | <div class="search_label">æä»¶ç¼å·ï¼</div> |
| | | <div class="search_input"><el-input size="small" placeholder="请è¾å
¥" clearable v-model="currentFile.documentCode" :disabled="title=='å®¡æ ¸'"></el-input></div> |
| | | </div> |
| | | </el-col> |
| | | <el-col :span="8" style="margin-bottom: 16px;"> |
| | | <div class="search_thing" style="width: 100%;"> |
| | | <div class="search_label">æä»¶åç§°ï¼</div> |
| | | <div class="search_input"><el-input size="small" placeholder="请è¾å
¥" clearable v-model="currentFile.name" :disabled="title=='å®¡æ ¸'"></el-input></div> |
| | | </div> |
| | | </el-col> |
| | | <el-col :span="8" style="margin-bottom: 16px;"> |
| | | <div class="search_thing" style="width: 100%;"> |
| | | <div class="search_label">æä»¶çæ¬ï¼</div> |
| | | <div class="search_input"><el-input size="small" placeholder="请è¾å
¥" clearable v-model="currentFile.version" :disabled="title=='å®¡æ ¸'"></el-input></div> |
| | | </div> |
| | | </el-col> |
| | | <el-col :span="8" style="margin-bottom: 16px;"> |
| | | <div class="search_thing" style="width: 100%;"> |
| | | <div class="search_label">æäº¤äººï¼</div> |
| | | <div class="search_input"><el-select v-model="currentFile.createUser" size="small" style="width: 100%;" disabled 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="8" style="margin-bottom: 16px;"> |
| | | <div class="search_thing" style="width: 100%;"> |
| | | <div class="search_label">å®¡æ ¸äººï¼</div> |
| | | <div class="search_input"><el-input size="small" placeholder="请è¾å
¥" clearable v-model="addInfo.version" disabled></el-input></div> |
| | | </div> |
| | | </el-col> |
| | | <el-col :span="8" style="margin-bottom: 16px;"> |
| | | <div class="search_thing" style="width: 100%;"> |
| | | <div class="search_label">ä½åºäººï¼</div> |
| | | <div class="search_input"><el-input size="small" placeholder="请è¾å
¥" clearable v-model="addInfo.version" disabled></el-input></div> |
| | | </div> |
| | | </el-col> --> |
| | | <el-col :span="8" style="margin-bottom: 16px;"> |
| | | <div class="search_thing" style="width: 100%;"> |
| | | <div class="search_label">æäº¤æ¶é´ï¼</div> |
| | | <div class="search_input"><el-input size="small" placeholder="请è¾å
¥" clearable v-model="currentFile.createTime" disabled></el-input></div> |
| | | </div> |
| | | </el-col> |
| | | <el-col :span="8" style="margin-bottom: 16px;"> |
| | | <div class="search_thing" style="width: 100%;"> |
| | | <div class="search_label">å®¡æ ¸æ¶é´ï¼</div> |
| | | <div class="search_input"><el-input size="small" placeholder="请è¾å
¥" clearable v-model="currentFile.effectiveDate" disabled></el-input></div> |
| | | </div> |
| | | </el-col> |
| | | <!-- <el-col :span="8" style="margin-bottom: 16px;"> |
| | | <div class="search_thing" style="width: 100%;"> |
| | | <div class="search_label">ä½åºæ¶é´ï¼</div> |
| | | <div class="search_input"><el-input size="small" placeholder="请è¾å
¥" clearable v-model="addInfo.version" disabled></el-input></div> |
| | | </div> |
| | | </el-col> --> |
| | | <el-col :span="8" style="margin-bottom: 16px;"> |
| | | <div class="search_thing" style="width: 100%;"> |
| | | <div class="search_label">æä»¶ç¶æï¼</div> |
| | | <div class="search_input"> |
| | | <el-select v-model="currentFile.state" size="small" style="width: 100%;" disabled> |
| | | <el-option |
| | | v-for="item in fileState" |
| | | :key="item.value" |
| | | :label="item.label" |
| | | :value="item.value"> |
| | | </el-option> |
| | | </el-select> |
| | | </div> |
| | | </div> |
| | | </el-col> |
| | | <!-- <el-col :span="8" style="margin-bottom: 16px;"> |
| | | <div class="search_thing" style="width: 100%;"> |
| | | <div class="search_label">æä»¶è¯´æï¼</div> |
| | | <div class="search_input"><el-input size="small" placeholder="请è¾å
¥" clearable v-model="addInfo.instructions" type="textarea" |
| | | :rows="2" disabled></el-input></div> |
| | | </div> |
| | | </el-col> --> |
| | | <el-col :span="24"> |
| | | <h4 class="title">æä»¶åæ´ç³è¯·</h4> |
| | | </el-col> |
| | | <el-col :span="8" style="margin-bottom: 16px;"> |
| | | <div class="search_thing" style="width: 100%;"> |
| | | <div class="search_label">åæ´åç¼å·ï¼</div> |
| | | <div class="search_input"><el-input size="small" placeholder="请è¾å
¥" clearable v-model="addInfo.alterAfterCode" :disabled="title=='å®¡æ ¸'"></el-input></div> |
| | | </div> |
| | | </el-col> |
| | | <el-col :span="8" style="margin-bottom: 16px;"> |
| | | <div class="search_thing" style="width: 100%;"> |
| | | <div class="search_label">åæ´ååç§°ï¼</div> |
| | | <div class="search_input"><el-input size="small" placeholder="请è¾å
¥" clearable v-model="addInfo.alterAfterName" :disabled="title=='å®¡æ ¸'"></el-input></div> |
| | | </div> |
| | | </el-col> |
| | | <el-col :span="8" style="margin-bottom: 16px;"> |
| | | <div class="search_thing" style="width: 100%;"> |
| | | <div class="search_label">åä¸çæ¬å¤çï¼</div> |
| | | <div class="search_input"> |
| | | <el-select v-model="addInfo.method" size="small" style="width: 100%;" :disabled="title=='å®¡æ ¸'"> |
| | | <el-option label="ä½åº" value="ä½åº"></el-option> |
| | | <el-option label="åæ¡£ä¸å¯ç¨" value="åæ¡£ä¸å¯ç¨"> |
| | | </el-option> |
| | | </el-select> |
| | | </div> |
| | | </div> |
| | | </el-col> |
| | | <el-col :span="8" style="margin-bottom: 16px;"> |
| | | <div class="search_thing" style="width: 100%;"> |
| | | <div class="search_label">åæ´åçæ¬ï¼</div> |
| | | <div class="search_input"><el-input size="small" placeholder="请è¾å
¥" clearable v-model="addInfo.alterAfterVersion" :disabled="title=='å®¡æ ¸'"></el-input></div> |
| | | </div> |
| | | </el-col> |
| | | <el-col :span="16" style="margin-bottom: 16px;"> |
| | | <div class="search_thing" style="width: 100%;"> |
| | | <div class="search_label">åæ´è¯´æï¼</div> |
| | | <div class="search_input"><el-input size="small" placeholder="请è¾å
¥" clearable v-model="addInfo.alterNote" type="textarea" |
| | | :rows="2" :disabled="title=='å®¡æ ¸'"></el-input></div> |
| | | </div> |
| | | </el-col> |
| | | <el-col :span="24" style="margin-bottom: 16px;" v-if="title!='å®¡æ ¸'"> |
| | | <div class="search_thing" style="width: 100%;"> |
| | | <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"> |
| | | <el-button size="small" type="primary">ä¸ä¼ éä»¶</el-button> |
| | | </el-upload></div> |
| | | </div> |
| | | </el-col> |
| | | <UpPdfStamp ref="UpPdfStamp" v-if="title=='å®¡æ ¸'&&addDialogVisible" @uploadPDF="uploadPDF" :isUpFile="false"></UpPdfStamp> |
| | | </el-row> |
| | | <span slot="footer" class="dialog-footer" v-if="title!='å®¡æ ¸'"> |
| | | <el-button @click="addDialogVisible = false">å æ¶</el-button> |
| | | <el-button type="primary" @click="handleAdd" :loading="addLoading">ç¡® å®</el-button> |
| | | </span> |
| | | <span slot="footer" class="dialog-footer" v-else> |
| | | <el-button @click="handleCheckSub('ä¸éè¿')" :loading="noCheckLoading">ä¸éè¿</el-button> |
| | | <el-button type="primary" @click="handleCheckSub('éè¿')" :loading="checkLoading">é è¿</el-button> |
| | | </span> |
| | | </el-dialog> |
| | | <el-dialog |
| | | title="æ¥çéä»¶" |
| | | :visible.sync="lookDialogVisible" |
| | | width="800px" top="5vh" fullscreen> |
| | | <filePreview v-if="lookDialogVisible" :fileUrl="javaApi+'/word/'+currentInfo.alterAfterUrl" |
| | | :currentFile="{}" style="height: 90vh;overflow-y: auto;"/> |
| | | </el-dialog> |
| | | </div> |
| | | </template> |
| | | |
| | | <script> |
| | | import ValueTable from '../../tool/value-table.vue' |
| | | import filePreview from '../../tool/file-preview.vue' |
| | | import UpPdfStamp from '../../tool/upPdfStamp.vue' |
| | | export default { |
| | | components: { |
| | | ValueTable, |
| | | filePreview, |
| | | UpPdfStamp, |
| | | }, |
| | | data() { |
| | | return { |
| | | title:'æä»¶åæ´ç³è¯·', |
| | | noCheckLoading:false, |
| | | checkLoading:false, |
| | | addDialogVisible: false, |
| | | addInfo:{}, |
| | | componentData: { |
| | | entity: { |
| | | code: null, |
| | | orderBy: { |
| | | field: 'createTime', |
| | | order: 'desc' |
| | | } |
| | | }, |
| | | isIndex: true, |
| | | showSelect: false, |
| | | select: false, |
| | | do: [{ |
| | | id: 'handleUpdate', |
| | | font: 'ç¼è¾', |
| | | type: 'text', |
| | | method: 'handleUpdate', |
| | | field:[], |
| | | disabFun: (row, index) => { |
| | | return row.state=='éè¿' |
| | | } |
| | | }, |
| | | { |
| | | id: 'delete', |
| | | font: 'å é¤', |
| | | type: 'text', |
| | | method: 'doDiy', |
| | | disabFun: (row, index) => { |
| | | return row.state=='éè¿' |
| | | } |
| | | }, |
| | | { |
| | | id: 'handleCheck', |
| | | font: 'å®¡æ ¸', |
| | | type: 'text', |
| | | method: 'handleCheck', |
| | | disabFun: (row, index) => { |
| | | return row.checkUser!=JSON.parse(localStorage.getItem("user")).userId||row.state=='éè¿' |
| | | } |
| | | }, |
| | | { |
| | | id: 'handleLook', |
| | | font: 'æ¥çéä»¶', |
| | | type: 'text', |
| | | method: 'handleLook' |
| | | }, |
| | | { |
| | | id: 'handleDown', |
| | | font: 'ä¸è½½éä»¶', |
| | | type: 'text', |
| | | method: 'handleDown' |
| | | }], |
| | | tagField: { |
| | | state:{ |
| | | select: [ |
| | | { |
| | | value: 'éè¿', |
| | | label: 'éè¿' |
| | | }, |
| | | { |
| | | value: 'ä¸éè¿', |
| | | label: 'ä¸éè¿' |
| | | }, |
| | | ] |
| | | }, |
| | | }, |
| | | selectField: { |
| | | state:{ |
| | | select: [] |
| | | }, |
| | | signatory:{ |
| | | select: [] |
| | | }, |
| | | }, |
| | | datePicker:['effectiveDate'], |
| | | addUpload:['signatoryUrl'], |
| | | requiredAdd: [], |
| | | requiredUp: [], |
| | | needSort: [], |
| | | inputType:Â '' |
| | | }, |
| | | entityCopy: {}, |
| | | upIndex: 0, |
| | | addPower:false, |
| | | outPower:false, |
| | | outLoading:false, |
| | | personList:[], |
| | | fileList:[], |
| | | currentFile:{}, |
| | | fileState:[], |
| | | file:null, |
| | | addLoading:false, |
| | | lookDialogVisible:false, |
| | | currentInfo:{ |
| | | }, |
| | | type:null, |
| | | fileName:null, |
| | | } |
| | | }, |
| | | mounted() { |
| | | this.entityCopy = this.HaveJson(this.componentData.entity); |
| | | this.getPower() |
| | | this.getAuthorizedPerson() |
| | | this.getFileList() |
| | | this.selectEnumByCategory() |
| | | }, |
| | | methods: { |
| | | getPower(){ |
| | | let power = JSON.parse(sessionStorage.getItem('power')) |
| | | let up = false |
| | | let del = false |
| | | let add = false |
| | | let out = false |
| | | for (var i = 0; i < power.length; i++) { |
| | | if (power[i].menuMethod == 'addManageDocumentAlter') { |
| | | up = true |
| | | } |
| | | if (power[i].menuMethod == 'addManageDocumentAlter') { |
| | | add = true |
| | | } |
| | | if (power[i].menuMethod == 'delManageDocumentAlter') { |
| | | del = true |
| | | } |
| | | if (power[i].menuMethod == 'exportManageDocumentAlter') { |
| | | out = true |
| | | } |
| | | } |
| | | if (!del) { |
| | | this.componentData.do.splice(1, 1) |
| | | } |
| | | if (!up) { |
| | | this.componentData.do.splice(0, 1) |
| | | } |
| | | this.addPower = add |
| | | this.outPower = out |
| | | }, |
| | | refreshTable() { |
| | | this.$refs['ValueTable'].selectList() |
| | | }, |
| | | refresh() { |
| | | this.componentData.entity = this.HaveJson(this.entityCopy) |
| | | this.upIndex++ |
| | | this.refreshTable() |
| | | }, |
| | | // å¯¼åº |
| | | handleOut(){ |
| | | this.outLoading = true |
| | | this.$axios.post(this.$api.manageDocumentList.exportManageDocumentAlter, {entity:this.componentData.entity},{headers: { |
| | | 'Content-Type': 'application/json' |
| | | },responseType: "blob"},).then(res => { |
| | | this.outLoading = false |
| | | this.$message.success('å¯¼åºæå') |
| | | const blob = new Blob([res],{ type: 'application/octet-stream' }); |
| | | const url = URL.createObjectURL(blob); |
| | | const link = document.createElement('a'); |
| | | link.href = url; |
| | | link.download = 'æä»¶åæ´è®°å½.xlsx'; |
| | | link.click(); |
| | | }) |
| | | }, |
| | | 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.personList = 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 +':'+m.name |
| | | return m |
| | | }) |
| | | }).catch(err=>{}) |
| | | }, |
| | | // å½åæä»¶ |
| | | getCurrentFile(e){ |
| | | this.currentFile = this.fileList.find(m=>m.documentCode==e) |
| | | }, |
| | | selectEnumByCategory() { |
| | | this.$axios.post(this.$api.enums.selectEnumByCategory, { |
| | | category: "æä»¶ç¶æ" |
| | | }).then(res => { |
| | | this.fileState = res.data |
| | | }) |
| | | }, |
| | | handleChangeUpload(file, fileLists){ |
| | | this.file = file |
| | | this.$set(this.addInfo,'alterAfterName',file.name) |
| | | }, |
| | | handleAdd(){ |
| | | if(!this.addInfo.code) return this.$message({type:'error',message:"请è¾å
¥ç³è¯·ç¼å·"}) |
| | | if(!this.addInfo.id){ |
| | | // æ°å¢ |
| | | let fd = new FormData(); |
| | | //æä»¶ä¿¡æ¯ä¸rawææ¯ççæä»¶ |
| | | if(this.file){ |
| | | fd.append("file",this.file.raw); |
| | | } |
| | | for (let m in this.addInfo){ |
| | | fd.append(m,this.addInfo[m]) |
| | | } |
| | | let {name,version,documentCode} = this.currentFile; |
| | | fd.append("alterBeforeName",name); |
| | | fd.append("alterBeforeVersion",version); |
| | | // fd.append("alterBeforeCode",documentCode); |
| | | this.addLoading = true |
| | | this.$axios.post(this.$api.manageDocumentList.addManageDocumentAlter, 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 fd = new FormData(); |
| | | //æä»¶ä¿¡æ¯ä¸rawææ¯ççæä»¶ |
| | | if(this.file){ |
| | | fd.append("file",this.file.raw); |
| | | } |
| | | let {name,version} = this.currentFile; |
| | | fd.append("alterBeforeName",name); |
| | | fd.append("alterBeforeVersion",version); |
| | | let {code,checkUser,expectAlterDate,actuallyAlterDate,alterAfterCode,method,alterAfterVersion,alterNote,alterAfterName,id} = this.addInfo |
| | | fd.append("code",code); |
| | | fd.append("checkUser",checkUser); |
| | | fd.append("expectAlterDate",expectAlterDate); |
| | | fd.append("actuallyAlterDate",actuallyAlterDate); |
| | | fd.append("alterAfterCode",alterAfterCode); |
| | | fd.append("method",method); |
| | | fd.append("alterAfterVersion",alterAfterVersion); |
| | | fd.append("alterNote",alterNote); |
| | | fd.append("alterAfterName",alterAfterName); |
| | | fd.append("id",id); |
| | | this.addLoading = true |
| | | this.$axios.post(this.$api.manageDocumentList.doManageDocumentAlter, 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: 'ä¿®æ¹å¤±è´¥' |
| | | }) |
| | | } |
| | | }) |
| | | } |
| | | }, |
| | | // ç¼è¾ |
| | | handleUpdate(row){ |
| | | this.title = 'æä»¶åæ´ç³è¯·' |
| | | this.addInfo = this.HaveJson(row) |
| | | let alterBeforeCode = this.addInfo.alterBeforeCode |
| | | this.getCurrentFile(alterBeforeCode) |
| | | this.addDialogVisible = true |
| | | }, |
| | | // é¢è§ |
| | | handleLook(row){ |
| | | this.currentInfo = this.HaveJson(row) |
| | | this.lookDialogVisible = true |
| | | }, |
| | | // ä¸è½½éä»¶ |
| | | handleDown(row){ |
| | | if(!row.alterAfterUrl) return this.$message.warning('æä»¶æªä¸ä¼ ') |
| | | let url = this.javaApi+'/word/'+row.alterAfterUrl |
| | | const link = document.createElement('a'); |
| | | link.href = url; |
| | | link.click(); |
| | | }, |
| | | // æå¼å®¡æ ¸å¼¹æ¡ |
| | | handleCheck(row){ |
| | | this.title = 'å®¡æ ¸' |
| | | this.fileName = row.alterAfterName |
| | | if(!row.alterAfterUrl) return this.$message.warning('æä»¶æªä¸ä¼ ') |
| | | this.addInfo = this.HaveJson(row) |
| | | let alterBeforeCode = this.addInfo.alterBeforeCode |
| | | this.getCurrentFile(alterBeforeCode) |
| | | this.addDialogVisible = true |
| | | this.$axios.post(this.$api.manageDocumentList.checkManageDocumentAlterPdf,{id:row.id},{responseType: "blob"}).then(res=>{ |
| | | // |
| | | const blob = new Blob([res]); |
| | | const file = new File([blob], row.name, { type: 'application/pdf' }) |
| | | this.$refs.UpPdfStamp.lookFile(file) |
| | | this.currentInfo = row |
| | | }).catch(err=>{ |
| | | console.log(err) |
| | | }) |
| | | }, |
| | | // å®¡æ ¸ä¿å |
| | | async uploadPDF(pdfBlob){ |
| | | const formData = new FormData(); |
| | | formData.append('file', pdfBlob, this.fileName+'.pdf'); // æä»¶å段 |
| | | formData.append('id', this.currentInfo.id); // æä»¶ååæ®µ |
| | | formData.append('state', this.type); // æä»¶ååæ®µ |
| | | |
| | | let res = await this.$axios.post(this.$api.manageDocumentList.checkManageDocumentAlter, formData,{ |
| | | headers: { |
| | | 'Content-Type': 'multipart/form-data;' |
| | | }, |
| | | noQs: true |
| | | }) |
| | | this.checkLoading = false |
| | | this.noCheckLoading = false |
| | | if(res.code==200){ |
| | | this.$message({ message: 'æä½æå', type: 'success' }); |
| | | this.addDialogVisible = false; |
| | | this.refreshTable() |
| | | return true |
| | | }else{ |
| | | this.$message({ message: 'æä½å¤±è´¥', type: 'error' }); |
| | | return false |
| | | } |
| | | }, |
| | | // æäº¤å®¡æ ¸ |
| | | handleCheckSub(type){ |
| | | this.type = type |
| | | if(type == 'éè¿') { |
| | | this.checkLoading = true |
| | | }else{ |
| | | this.noCheckLoading = true |
| | | } |
| | | this.addLoading = true |
| | | this.$refs['UpPdfStamp'].generatePDF() |
| | | } |
| | | } |
| | | } |
| | | </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 - 80px); |
| | | padding: 20px; |
| | | } |
| | | .btns{ |
| | | position: absolute; |
| | | right: 20px; |
| | | top: 5px; |
| | | } |
| | | 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; |
| | | } |
| | | </style> |
¶Ô±ÈÐÂÎļþ |
| | |
| | | <template> |
| | | <!-- æä»¶æ¸
å --> |
| | | <div class="file-list" 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.name" |
| | | @keyup.enter.native="refreshTable()"></el-input></div> |
| | | </div> |
| | | <div class="search_thing"> |
| | | <div class="search_label">æä»¶ç¶æï¼</div> |
| | | <div class="search_input"> |
| | | <el-select v-model="componentData.entity.state" size="small" @change="refreshTable()"> |
| | | <el-option :label="item.label" :value="item.value" v-for="(item,index) in fileState" :key="index"></el-option> |
| | | </el-select> |
| | | </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" style="padding-left: 30px;"> |
| | | <el-upload :action="action" :multiple="false" |
| | | accept='.xls,.xlsx' :headers="headers" :on-change="beforeUpload" |
| | | :on-error="onError" ref='upload' v-if="addPower" :on-success="handleSuccessUp" :show-file-list="false"> |
| | | <el-button size="small" type="primary" :loading="upLoading">导å
¥</el-button></el-upload> |
| | | </div> |
| | | </div> |
| | | <div class="table"> |
| | | <ValueTable ref="ValueTable" :url="$api.manageDocumentList.pageManageDocumentList" |
| | | :componentData="componentData" :upUrl="$api.manageDocumentList.doManageDocumentList" :delUrl="$api.manageDocumentList.delManageDocumentList" :key="upIndex"/> |
| | | </div> |
| | | <el-dialog |
| | | title="ä¸ä¼ " |
| | | :visible.sync="addDialogVisible" |
| | | width="1000px" top="3vh"> |
| | | <UpPdfStamp ref="UpPdfStamp" v-if="addDialogVisible" @uploadPDF="uploadPDF" :isUpFile="true" @uploadPDFErr="uploadPDFErr" style="max-height: 85vh;overflow-y: auto;"></UpPdfStamp> |
| | | <span slot="footer" class="dialog-footer"> |
| | | <el-button @click="addDialogVisible = false">å æ¶</el-button> |
| | | <el-button type="primary" @click="handleAdd" v-loading="addLoading">ç¡® å®</el-button> |
| | | </span> |
| | | </el-dialog> |
| | | <el-dialog |
| | | title="æ¥çéä»¶" |
| | | :visible.sync="lookDialogVisible" |
| | | width="800px" top="5vh" fullscreen> |
| | | <filePreview v-if="lookDialogVisible" :fileUrl="javaApi+'/word/'+currentInfo.url" |
| | | :currentFile="{}" style="height: 90vh;overflow-y: auto;"/> |
| | | </el-dialog> |
| | | </div> |
| | | </template> |
| | | |
| | | <script> |
| | | import ValueTable from '../../tool/value-table.vue' |
| | | import UpPdfStamp from '../../tool/upPdfStamp.vue' |
| | | import filePreview from '../../tool/file-preview.vue' |
| | | export default { |
| | | components: { |
| | | ValueTable, |
| | | UpPdfStamp, |
| | | filePreview, |
| | | }, |
| | | data() { |
| | | return { |
| | | addDialogVisible:false, |
| | | lookDialogVisible:false, |
| | | addPower:false, |
| | | upLoading:false, |
| | | addLoading:false, |
| | | componentData: { |
| | | entity: { |
| | | name: null, |
| | | state: null, |
| | | orderBy: { |
| | | field: 'createTime', |
| | | order: 'desc' |
| | | } |
| | | }, |
| | | isIndex: true, |
| | | showSelect: false, |
| | | select: false, |
| | | do: [{ |
| | | id: 'update', |
| | | font: 'ç¼è¾', |
| | | type: 'text', |
| | | method: 'doDiy', |
| | | field:[] |
| | | }, |
| | | { |
| | | id: 'handleUp', |
| | | font: 'ä¸ä¼ ', |
| | | type: 'text', |
| | | method: 'handleUp' |
| | | }, |
| | | { |
| | | id: 'handleDown', |
| | | font: 'ä¸è½½', |
| | | type: 'text', |
| | | method: 'handleDown' |
| | | }, |
| | | { |
| | | id: 'handleLook', |
| | | font: 'æ¥çéä»¶', |
| | | type: 'text', |
| | | method: 'handleLook' |
| | | }, { |
| | | id: 'delete', |
| | | font: 'å é¤', |
| | | type: 'text', |
| | | method: 'doDiy' |
| | | },], |
| | | tagField: { |
| | | state:{ |
| | | select: [] |
| | | }, |
| | | type:{ |
| | | select: [] |
| | | }, |
| | | }, |
| | | selectField: { |
| | | state:{ |
| | | select: [] |
| | | }, |
| | | type:{ |
| | | select: [] |
| | | }, |
| | | }, |
| | | datePicker:['effectiveDate'], |
| | | addUpload:['signatoryUrl'], |
| | | requiredAdd: ['documentCode'], |
| | | requiredUp: ['documentCode'], |
| | | needSort: [], |
| | | inputType:Â '' |
| | | }, |
| | | entityCopy: {}, |
| | | upIndex: 0, |
| | | currentInfo:{}, |
| | | fileType:[], |
| | | fileState:[], |
| | | } |
| | | }, |
| | | // ç¨äºä¸ä¼ æä»¶çä¿¡æ¯ |
| | | computed: { |
| | | headers() { |
| | | return { |
| | | 'token': sessionStorage.getItem('token') |
| | | } |
| | | }, |
| | | action() { |
| | | return this.javaApi +this.$api.manageDocumentList.exportManageDocumentList |
| | | } |
| | | }, |
| | | mounted() { |
| | | this.entityCopy = this.HaveJson(this.componentData.entity); |
| | | this.getPower() |
| | | this.selectEnumByCategory() |
| | | }, |
| | | methods: { |
| | | // ä¸è½½æä»¶ |
| | | handleDown(row) { |
| | | if(!row.url) return this.$message.warning('æä»¶æªä¸ä¼ ') |
| | | let url = this.javaApi+'/word/'+row.url |
| | | const link = document.createElement('a'); |
| | | link.href = url; |
| | | link.click(); |
| | | }, |
| | | // æ¥çæä»¶ |
| | | handleLook(row){ |
| | | if(!row.url) return this.$message.warning('æä»¶æªä¸ä¼ ') |
| | | this.currentInfo = row |
| | | this.lookDialogVisible = true |
| | | }, |
| | | getPower(){ |
| | | let power = JSON.parse(sessionStorage.getItem('power')) |
| | | let up = false |
| | | let upFile = false |
| | | let add = false |
| | | for (var i = 0; i < power.length; i++) { |
| | | if (power[i].menuMethod == 'doManageDocumentList') { |
| | | up = true |
| | | } |
| | | if (power[i].menuMethod == 'exportManageDocumentList') { |
| | | add = true |
| | | } |
| | | if (power[i].menuMethod == 'uploadFileManageDocumentList') { |
| | | upFile = true |
| | | } |
| | | } |
| | | if (!upFile) { |
| | | this.componentData.do.splice(1, 1) |
| | | } |
| | | if (!up) { |
| | | this.componentData.do.splice(0, 1) |
| | | } |
| | | this.addPower = add |
| | | }, |
| | | refreshTable() { |
| | | this.$refs['ValueTable'].selectList() |
| | | }, |
| | | refresh() { |
| | | this.componentData.entity = this.HaveJson(this.entityCopy) |
| | | this.upIndex++ |
| | | this.refreshTable() |
| | | }, |
| | | // ä¸ä¼ æä»¶ |
| | | handleUp(row) { |
| | | this.currentInfo = row |
| | | this.addDialogVisible = true; |
| | | }, |
| | | // æäº¤ä¸ä¼ |
| | | handleAdd(){ |
| | | this.addLoading = true |
| | | this.$refs['UpPdfStamp'].generatePDF() |
| | | }, |
| | | uploadPDFErr(){ |
| | | this.addLoading = false |
| | | }, |
| | | 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() |
| | | } |
| | | }, |
| | | selectEnumByCategory() { |
| | | this.$axios.post(this.$api.enums.selectEnumByCategory, { |
| | | category: "æä»¶ç±»å«" |
| | | }).then(res => { |
| | | this.fileType = res.data |
| | | this.componentData.tagField.type.select = this.fileType |
| | | this.componentData.selectField.type.select = this.fileType |
| | | }) |
| | | this.$axios.post(this.$api.enums.selectEnumByCategory, { |
| | | category: "æä»¶ç¶æ" |
| | | }).then(res => { |
| | | this.fileState = res.data |
| | | this.componentData.tagField.state.select = res.data |
| | | this.componentData.selectField.state.select = res.data |
| | | }) |
| | | }, |
| | | async uploadPDF(pdfBlob) { |
| | | const formData = new FormData(); |
| | | formData.append('file', pdfBlob, this.fileName+'.pdf'); // æä»¶å段 |
| | | formData.append('id', this.currentInfo.id); // æä»¶ååæ®µ |
| | | |
| | | let res = await this.$axios.post(this.$api.manageDocumentList.uploadFileManageDocumentList, formData,{ |
| | | headers: { |
| | | 'Content-Type': 'multipart/form-data;' |
| | | }, |
| | | noQs: true |
| | | }) |
| | | this.addLoading = false |
| | | if(res.code==200){ |
| | | this.$message({ message: 'ä¸ä¼ æå', type: 'success' }); |
| | | this.addDialogVisible = false; |
| | | this.refreshTable() |
| | | return true |
| | | }else{ |
| | | this.$message({ message: 'ä¸ä¼ 失败', type: 'error' }); |
| | | return false |
| | | } |
| | | } |
| | | } |
| | | } |
| | | </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 - 80px); |
| | | padding: 20px; |
| | | } |
| | | .btns{ |
| | | position: absolute; |
| | | right: 20px; |
| | | top: 5px; |
| | | } |
| | | </style> |
¶Ô±ÈÐÂÎļþ |
| | |
| | | <template> |
| | | <!-- æä»¶ä½åºç³è¯· --> |
| | | <div class="file-obsoletion-request" 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.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" style="padding-left: 30px;"> |
| | | <el-button size="small" type="primary" @click="addDialogVisible=true,addInfo={}" v-if="addPower">æä»¶ä½åºç³è¯·</el-button> |
| | | <el-button size="small" type="primary" v-if="outPower" @click="handleOut" :loading="outLoading">导åº</el-button> |
| | | </div> |
| | | </div> |
| | | <div class="table"> |
| | | <ValueTable ref="ValueTable" :url="$api.manageDocumentList.pageManageDocumentCancel" |
| | | :componentData="componentData" :delUrl="$api.manageDocumentList.delManageDocumentCancel" :key="upIndex"/> |
| | | </div> |
| | | <el-dialog |
| | | title="æä»¶ä½åºç³è¯·" |
| | | :visible.sync="addDialogVisible" |
| | | width="800px" top="10vh"> |
| | | <el-row> |
| | | <el-col :span="12" style="margin-bottom: 16px;"> |
| | | <div class="search_thing"> |
| | | <div class="search_label"><span style="color:red;margin-right: 4px;">*</span>ç³è¯·ç¼å·ï¼</div> |
| | | <div class="search_input"> |
| | | <el-select v-model="addInfo.documentCode" size="small" style="width: 100%;" @change="changeFileList" filterable allow-create clearable> |
| | | <el-option |
| | | v-for="item in fileList" |
| | | :key="item.documentCode" |
| | | :label="item.documentCode" |
| | | :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-select v-model="addInfo.checkUser" 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="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.name"></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.version"></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.state" size="small" style="width: 100%;" > |
| | | <el-option :label="item.label" :value="item.value" v-for="(item,index) in fileState" :key="index"></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.method" size="small" style="width: 100%;"> |
| | | <el-option label="ä½åº" value="ä½åº"></el-option> |
| | | <el-option label="æ æ" 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-date-picker |
| | | v-model="addInfo.expectCancelDate" |
| | | 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="12" style="margin-bottom: 16px;"> |
| | | <div class="search_thing"> |
| | | <div class="search_label">å®é
ä½åºæ¶é´ï¼</div> |
| | | <div class="search_input"> |
| | | <el-date-picker |
| | | v-model="addInfo.actuallyCancelDate" |
| | | 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="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.cancelNote" 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 '../../tool/value-table.vue' |
| | | export default { |
| | | components: { |
| | | ValueTable |
| | | }, |
| | | data() { |
| | | return { |
| | | addPower: false, |
| | | outPower:false, |
| | | addInfo: {}, |
| | | addLoading:false, |
| | | addDialogVisible: false, |
| | | componentData: { |
| | | entity: { |
| | | documentCode: null, |
| | | state: null, |
| | | orderBy: { |
| | | field: 'createTime', |
| | | order: 'desc' |
| | | } |
| | | }, |
| | | isIndex: true, |
| | | showSelect: false, |
| | | select: false, |
| | | do: [{ |
| | | id: 'handleUpdate', |
| | | font: 'ç¼è¾', |
| | | type: 'text', |
| | | method: 'handleUpdate', |
| | | field:[], |
| | | disabFun: (row, index) => { |
| | | return row.state=='éè¿' |
| | | } |
| | | }, |
| | | { |
| | | id: 'delete', |
| | | font: 'å é¤', |
| | | type: 'text', |
| | | method: 'doDiy', |
| | | disabFun: (row, index) => { |
| | | return row.state=='éè¿' |
| | | } |
| | | }, |
| | | { |
| | | id: 'handleCheck', |
| | | font: 'å®¡æ ¸', |
| | | type: 'text', |
| | | method: 'handleCheck', |
| | | disabFun: (row, index) => { |
| | | return row.checkUser!=JSON.parse(localStorage.getItem("user")).userId||row.state=='éè¿' |
| | | } |
| | | },], |
| | | tagField: { |
| | | state:{ |
| | | select: [ |
| | | { |
| | | value: 'éè¿', |
| | | label: 'éè¿' |
| | | }, |
| | | { |
| | | value: 'ä¸éè¿', |
| | | label: 'ä¸éè¿' |
| | | }, |
| | | ] |
| | | }, |
| | | }, |
| | | selectField: { |
| | | state:{ |
| | | select: [ |
| | | { |
| | | value: 'éè¿', |
| | | label: 'éè¿' |
| | | }, |
| | | { |
| | | value: 'ä¸éè¿', |
| | | label: 'ä¸éè¿' |
| | | }, |
| | | ] |
| | | }, |
| | | signatory:{ |
| | | select: [] |
| | | }, |
| | | }, |
| | | datePicker:['effectiveDate'], |
| | | addUpload:['signatoryUrl'], |
| | | requiredAdd: [], |
| | | requiredUp: [], |
| | | needSort: [], |
| | | inputType:Â '' |
| | | }, |
| | | entityCopy: {}, |
| | | upIndex: 0, |
| | | personList:[], |
| | | fileList:[], |
| | | outLoading:false, |
| | | fileState:[] |
| | | } |
| | | }, |
| | | mounted() { |
| | | this.entityCopy = this.HaveJson(this.componentData.entity); |
| | | this.getPower() |
| | | this.getAuthorizedPerson() |
| | | this.getFileList() |
| | | this.selectEnumByCategory() |
| | | }, |
| | | methods: { |
| | | getPower(){ |
| | | let power = JSON.parse(sessionStorage.getItem('power')) |
| | | let out = false |
| | | let del = false |
| | | let add = false |
| | | // let check = false |
| | | for (var i = 0; i < power.length; i++) { |
| | | if (power[i].menuMethod == 'exportManageDocumentCancel') { |
| | | out = true |
| | | } |
| | | if (power[i].menuMethod == 'addManageDocumentCancel') { |
| | | add = true |
| | | } |
| | | if (power[i].menuMethod == 'delManageDocumentCancel') { |
| | | del = true |
| | | } |
| | | // if (power[i].menuMethod == 'checkManageDocumentControlled') { |
| | | // check = true |
| | | // } |
| | | } |
| | | // if (!check) { |
| | | // this.componentData.do.splice(2, 1) |
| | | // } |
| | | if (!del) { |
| | | this.componentData.do.splice(1, 1) |
| | | } |
| | | if (!add) { |
| | | this.componentData.do.splice(0, 1) |
| | | } |
| | | this.addPower = add |
| | | this.outPower = out |
| | | }, |
| | | refreshTable() { |
| | | this.$refs['ValueTable'].selectList() |
| | | }, |
| | | refresh() { |
| | | this.componentData.entity = this.HaveJson(this.entityCopy) |
| | | this.upIndex++ |
| | | this.refreshTable() |
| | | }, |
| | | selectEnumByCategory() { |
| | | this.$axios.post(this.$api.enums.selectEnumByCategory, { |
| | | category: "æä»¶ç¶æ" |
| | | }).then(res => { |
| | | this.fileState = res.data |
| | | // this.componentData.tagField.state.select = res.data |
| | | // this.componentData.selectField.state.select = res.data |
| | | }) |
| | | }, |
| | | // è·å人åå表 |
| | | 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.personList = 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 |
| | | }).catch(err=>{}) |
| | | }, |
| | | // æäº¤ |
| | | handleAdd(){ |
| | | if(!this.addInfo.documentCode){ |
| | | this.$message.error('请è¾å
¥ç³è¯·ç¼å·') |
| | | return false |
| | | } |
| | | this.addInfo.method = 'ä½åº' |
| | | this.addLoading = true |
| | | if(!this.addInfo.id){ |
| | | // æ°å¢ |
| | | this.axios.post(this.$api.manageDocumentList.addManageDocumentCancel, this.addInfo,{headers: { |
| | | 'Content-Type': 'application/json' |
| | | }}).then(res => { |
| | | this.addLoading = false |
| | | this.refreshTable() |
| | | this.$message({ |
| | | type: 'success', |
| | | message: 'æäº¤æå' |
| | | }) |
| | | this.addDialogVisible = false |
| | | }).catch(err => {}) |
| | | }else{ |
| | | // ç¼è¾ |
| | | this.axios.post(this.$api.manageDocumentList.doManageDocumentCancel, { |
| | | id: this.addInfo.id, |
| | | method: 'ä½åº', |
| | | documentCode: this.addInfo.documentCode, |
| | | checkUser: this.addInfo.checkUser, |
| | | name: this.addInfo.name, |
| | | version: this.addInfo.version, |
| | | documentState: this.addInfo.documentState, |
| | | expectCancelDate: this.addInfo.expectCancelDate, |
| | | actuallyCancelDate: this.addInfo.actuallyCancelDate, |
| | | cancelNote: this.addInfo.cancelNote, |
| | | },{headers: { |
| | | 'Content-Type': 'application/json' |
| | | }}).then(res => { |
| | | this.addLoading = false |
| | | this.refreshTable() |
| | | this.$message({ |
| | | type: 'success', |
| | | message: 'æäº¤æå' |
| | | }) |
| | | this.addDialogVisible = false |
| | | }).catch(err => {}) |
| | | } |
| | | |
| | | }, |
| | | // é䏿件 |
| | | changeFileList(e){ |
| | | if(e){ |
| | | let obj = this.fileList.find(a=>a.documentCode == e) |
| | | this.addInfo.name = obj.name |
| | | this.addInfo.version = obj.version |
| | | this.addInfo.documentState = obj.state |
| | | } |
| | | }, |
| | | handleUpdate(row){ |
| | | this.addInfo = this.HaveJson(row) |
| | | this.addDialogVisible = true |
| | | }, |
| | | // å®¡æ ¸ |
| | | handleCheck(row){ |
| | | this.$confirm('æ¯å¦å®¡æ ¸éè¿?', 'æç¤º', { |
| | | confirmButtonText: 'éè¿', |
| | | cancelButtonText: 'ä¸éè¿', |
| | | type: 'warning', |
| | | closeOnClickModal: false, // ç¦æ¢ç¹å»é®ç½©å±å
³é |
| | | distinguishCancelAndClose: true, |
| | | beforeClose: (action, instance, done) => { |
| | | if (action === 'confirm') { |
| | | // ç¹å»âç¡®å®âæé®ï¼å
许å
³é |
| | | this.$axios.post(this.$api.manageDocumentList.checkManageDocumentCancel, {id:row.id,state:'éè¿'}).then(res => { |
| | | this.refreshTable() |
| | | done(); |
| | | this.$message({ |
| | | type: 'success', |
| | | message: 'æäº¤æå' |
| | | }) |
| | | }) |
| | | .catch(err => { |
| | | |
| | | }) |
| | | } else if (action === 'cancel') { |
| | | // ç¹å»âåæ¶âæé®ï¼ä¸å
许å
³é |
| | | this.$axios.post(this.$api.manageDocumentList.checkManageDocumentCancel, {id:row.id,state:'ä¸éè¿'}).then(res => { |
| | | this.refreshTable() |
| | | done(); |
| | | this.$message({ |
| | | type: 'success', |
| | | message: 'æäº¤æå' |
| | | }) |
| | | }) |
| | | .catch(err => { |
| | | |
| | | }) |
| | | console.log("åæ¶æé®ç¹å»äºä»¶ï¼ä¸å
³éå¼¹æ¡"); |
| | | } else if (action === 'close') { |
| | | // ç¹å»âÃâæé®ï¼ä¸å
许å
³é |
| | | done(); |
| | | console.log("Ãæé®ç¹å»äºä»¶ï¼ä¸å
³éå¼¹æ¡"); |
| | | } |
| | | } |
| | | }) |
| | | }, |
| | | // å¯¼åº |
| | | handleOut(){ |
| | | this.outLoading = true |
| | | this.$axios.post(this.$api.manageDocumentList.exportManageDocumentCancel, {entity:this.componentData.entity},{headers: { |
| | | 'Content-Type': 'application/json' |
| | | },responseType: "blob"},).then(res => { |
| | | this.outLoading = false |
| | | this.$message.success('å¯¼åºæå') |
| | | const blob = new Blob([res],{ type: 'application/octet-stream' }); |
| | | const url = URL.createObjectURL(blob); |
| | | const link = document.createElement('a'); |
| | | link.href = url; |
| | | link.download = 'æä»¶ä½åºè¡¨.xlsx'; |
| | | link.click(); |
| | | }) |
| | | } |
| | | } |
| | | } |
| | | </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 - 80px); |
| | | padding: 20px; |
| | | } |
| | | .btns{ |
| | | position: absolute; |
| | | right: 20px; |
| | | top: 5px; |
| | | } |
| | | </style> |
| | |
| | | <img :src="fileUrl" alt="Image Preview" /> |
| | | </div> |
| | | <div v-if="isPdf"> |
| | | <object :data="fileUrl" type="application/pdf" width="100%" height="600px"> |
| | | <object :data="fileUrl" type="application/pdf" width="100%" height="750px"> |
| | | <p>æ¨çæµè§å¨ä¸æ¯æ PDF é¢è§ã<a :href="fileUrl">ä¸è½½ PDF æä»¶</a></p> |
| | | </object> |
| | | </div> |
¶Ô±ÈÐÂÎļþ |
| | |
| | | <template> |
| | | <div class="up-pdf-stamp"> |
| | | <div class="work" style="display: flex;justify-content: space-between;align-items: center;margin-bottom: 10px;" v-if="isUpFile"> |
| | | <input type="file" @change="handleFileUpload" accept="application/pdf" ref="fileInput" /> |
| | | </div> |
| | | <p style="color: red;font-size: 12px;margin: 16px 0;" v-if="canvasNumPages>0">æç¤ºï¼å¨æä»¶èå´å
ï¼åå»é¼ æ çç« ï¼åå»é¼ æ å·²çå¥½ç« å¤å¯å é¤å½åç« </p> |
| | | <canvas ref="pdfCanvas" @click="e=>handleCanvasClick(e,index)" style="border: 1px solid #000;" @dblclick="e=>removeStamp(e,index)" v-for="(item,index) in canvasNumPages" :key="index"></canvas> |
| | | </div> |
| | | </template> |
| | | |
| | | <script> |
| | | import jsPDF from "jspdf"; |
| | | export default { |
| | | props:['isUpFile'], |
| | | data() { |
| | | return { |
| | | pdfDoc: null, // åå¨ä¸ä¼ ç PDF æ°æ® |
| | | stamps: [], // è®°å½çç« çä½ç½® |
| | | contextList:[],//canvaså表 |
| | | canvasNumPages:0,// åå¨ PDF æ»é¡µæ° |
| | | stampWidth: 120, // çç« å®½åº¦ |
| | | stampHeight: 80, // çç« é«åº¦ |
| | | stampsName:'', |
| | | stampsList:['主任','è´¨éè´è´£äºº','ææ¯è´è´£äºº','综å室','éä¿¡','çµå','è£
å¤','å¨è½','å°é¢'], |
| | | fileName:'æä»¶å' |
| | | }; |
| | | }, |
| | | methods:{ |
| | | handleFileUpload(event){ |
| | | const file = event.target.files[0]; |
| | | if(file.size>20*1024*1024){ |
| | | this.$refs.fileInput.value = ""; // æ¸
空æä»¶è¾å
¥æ¡å
容 |
| | | return this.$message.error('æä»¶å¤§å°ä¸è½è¶
è¿20M') |
| | | } |
| | | this.lookFile(file) |
| | | }, |
| | | lookFile(file,currentStamp){ |
| | | this.fileName = file.name |
| | | if(currentStamp){ |
| | | this.stampsName = currentStamp |
| | | }else{ |
| | | const index = this.stampsList.indexOf(m=>file.name.includes(m)) |
| | | if(index>-1){ |
| | | this.stampsName = this.stampsList[index] |
| | | }else{ |
| | | this.stampsName = '综å室' |
| | | } |
| | | } |
| | | if (file && file.type === 'application/pdf') { |
| | | const reader = new FileReader(); |
| | | reader.onload = (e) => { |
| | | const typedArray = new Uint8Array(e.target.result); |
| | | this.loadPDF(typedArray); |
| | | }; |
| | | reader.readAsArrayBuffer(file); |
| | | } else { |
| | | this.$message.error('è¯·éæ© PDF æä»¶'); |
| | | } |
| | | }, |
| | | loadPDF(typedArray) { |
| | | pdfjsLib.getDocument(typedArray).promise.then(pdfDoc_ => { |
| | | this.pdfDoc = pdfDoc_; |
| | | this.canvasNumPages = this.pdfDoc._pdfInfo.numPages |
| | | this.stamps = [] |
| | | this.contextList = [] |
| | | for (let i = 1; i <= this.canvasNumPages; i++) { |
| | | this.$nextTick(() => { |
| | | this.renderPage(i); // 渲æé¡µé¢ |
| | | }); |
| | | this.stamps.push([]) |
| | | } |
| | | }); |
| | | }, |
| | | // 渲ææå®é¡µé¢ |
| | | renderPage(pageNum) { |
| | | this.pdfDoc.getPage(pageNum).then(page => { |
| | | const canvas = this.$refs.pdfCanvas[pageNum-1]; |
| | | this.contextList.push(canvas.getContext("2d")) |
| | | const viewport = page.getViewport({ scale: 1.5 }); |
| | | |
| | | canvas.width = viewport.width; |
| | | canvas.height = viewport.height; |
| | | |
| | | page.render({ |
| | | canvasContext: this.contextList[pageNum-1], |
| | | viewport: viewport |
| | | }).promise.then(() => { |
| | | this.stamps[pageNum-1].forEach(m=>{ |
| | | this.drawStamps( m.x, m.y,pageNum-1) |
| | | }) |
| | | }); |
| | | }); |
| | | }, |
| | | // åå»--æ·»å ç« |
| | | handleCanvasClick(event,i) { |
| | | const x = event.offsetX; |
| | | const y = event.offsetY; |
| | | const index = this.stamps[i].findIndex(stamp => { |
| | | let x0 = x - stamp.x; |
| | | let y0 = y - stamp.y; |
| | | return x0>0 && x0 < this.stampWidth && y0>0&& y0 < this.stampHeight; |
| | | }); |
| | | if (index > -1) return; |
| | | this.drawStamps( x, y,i) |
| | | this.stamps[i].push({ x, y}); |
| | | }, |
| | | // åå»--å é¤çç« |
| | | removeStamp(event,i) { |
| | | const x = event.offsetX; |
| | | const y = event.offsetY; |
| | | // æ¥æ¾è¢«åå»ççç« |
| | | const index = this.stamps[i].findIndex(stamp => { |
| | | let x0 = x - stamp.x; |
| | | let y0 = y - stamp.y; |
| | | return x0>0 && x0 < this.stampWidth && y0>0&& y0 < this.stampHeight; |
| | | }); |
| | | if (index === -1) return; |
| | | this.stamps[i].splice(index, 1); // å 餿å®ççç« |
| | | this.contextList[i].clearRect(0, 0, this.contextList[i].width, this.contextList[i].height); |
| | | this.renderPage(i+1) |
| | | }, |
| | | // 渲æç« |
| | | drawStamps(x,y,index){ |
| | | var img = new Image(); |
| | | console.log(this.stampsName) |
| | | // 设置å¾çæº |
| | | img.src = "/static/img/stamps/"+this.stampsName+".png"; // æ¿æ¢ä¸ºä½ çå¾ç龿¥ |
| | | let that = this |
| | | img.onload = function() { |
| | | // å¾çå è½½å®æåï¼å°å¾çç»å¶å°canvasä¸ |
| | | that.contextList[index].drawImage(img, x, y, that.stampWidth , that.stampHeight); |
| | | }; |
| | | }, |
| | | // çæ PDF ç彿° |
| | | async generatePDF() { |
| | | if(this.contextList.length===0){ |
| | | this.$message({ message: '请å
ä¸ä¼ PDFæä»¶', type: 'error' }); |
| | | this.$emit('uploadPDFErr') |
| | | return false |
| | | } |
| | | const pdf = new jsPDF("p", "mm", "a4"); |
| | | for (let i = 0; i < this.contextList.length; i++) { |
| | | const imgData = this.$refs.pdfCanvas[i].toDataURL('image/jpeg', 1.0); |
| | | const pdfWidth = pdf.internal.pageSize.getWidth(); |
| | | const pdfHeight = (this.$refs.pdfCanvas[i].height * pdfWidth) / this.$refs.pdfCanvas[i].width; |
| | | pdf.addImage(imgData, "JPEG", 0, 0, pdfWidth, pdfHeight); // å°å¾çæ·»å å° PDF |
| | | if(i!==this.contextList.length-1){ |
| | | pdf.addPage(); // æ·»å æ°çä¸é¡µ |
| | | } |
| | | } |
| | | |
| | | // å° PDF æä»¶ä¿åæä¸ä¼ |
| | | const pdfOutput = pdf.output('blob'); // è·å PDF æä»¶ç Blob 对象 |
| | | |
| | | // ä¸ä¼ å°å端 |
| | | return this.$emit('uploadPDF',pdfOutput) |
| | | }, |
| | | } |
| | | } |
| | | </script> |
| | | |
| | | <style scoped> |
| | | |
| | | </style> |
¶Ô±ÈÐÂÎļþ |
| | |
| | | <template> |
| | | <div class="file-handling"> |
| | | <el-tabs type="border-card" v-model="activeName" style="height: 100%;"> |
| | | <el-tab-pane :label="item.name" :name="item.component" v-for="(item,index) in tabList" :key="index" style="height: 100%;"> |
| | | <component :is="item.component" :key="item.component"></component> |
| | | </el-tab-pane> |
| | | </el-tabs> |
| | | </div> |
| | | </template> |
| | | |
| | | <script> |
| | | import FileList from '../do/a8-file-handling/FileList.vue' |
| | | import ControlledFileApplication from '../do/a8-file-handling/ControlledFileApplication.vue' |
| | | import DistributionCollectionRecord from '../do/a8-file-handling/DistributionCollectionRecord.vue' |
| | | import FileChangeRequest from '../do/a8-file-handling/FileChangeRequest.vue' |
| | | import FileObsoletionRequest from '../do/a8-file-handling/FileObsoletionRequest.vue' |
| | | export default { |
| | | components: { |
| | | FileList, |
| | | ControlledFileApplication, |
| | | DistributionCollectionRecord, |
| | | FileChangeRequest, |
| | | FileObsoletionRequest |
| | | }, |
| | | data() { |
| | | return { |
| | | tabList:[ |
| | | { |
| | | name:'æä»¶æ¸
å', |
| | | component:'FileList' |
| | | }, |
| | | { |
| | | name:'æä»¶åæ§ç³è¯·', |
| | | component:'ControlledFileApplication' |
| | | }, |
| | | { |
| | | name:'åæ¾åæ¶è®°å½', |
| | | component:'DistributionCollectionRecord' |
| | | }, |
| | | { |
| | | name:'æä»¶åæ´ç³è¯·', |
| | | component:'FileChangeRequest' |
| | | }, |
| | | { |
| | | name:'æä»¶ä½åºç³è¯·', |
| | | component:'FileObsoletionRequest' |
| | | }, |
| | | ], |
| | | activeName:'FileList' |
| | | }; |
| | | }, |
| | | } |
| | | </script> |
| | | |
| | | <style scoped> |
| | | .file-handling { |
| | | margin-top: 10px; |
| | | height: calc(100% - 20px); |
| | | } |
| | | >>>.el-tabs__content{ |
| | | height: 100%; |
| | | } |
| | | </style> |
| | |
| | | // p: "" |
| | | // }, |
| | | { |
| | | v: "äººåæ»è§", |
| | | v: "人å", |
| | | i: "font icon-erjidaohang", |
| | | u: "a6-personnel-overview", |
| | | u: "a6-personnel", |
| | | g: "6.2 人å", |
| | | p: "selectPersonnelOverview" |
| | | }, { |
| | | v: "人åæç»", |
| | | i: "font icon-erjidaohang", |
| | | u: "a6-personnel-detail", |
| | | g: "6.2 人å", |
| | | p: "selectDepartmentLim" |
| | | p: "" |
| | | }, |
| | | // { |
| | | // v: "人åå¹è®", |
| | | // i: "font icon-erjidaohang", |
| | | // u: "", |
| | | // g: "6.2 人å", |
| | | // p: "" |
| | | // }, { |
| | | // v: "人åçç£", |
| | | // i: "font icon-erjidaohang", |
| | | // u: "", |
| | | // g: "6.2 人å", |
| | | // p: "" |
| | | // }, { |
| | | // v: "å²ä½èè´£", |
| | | // i: "font icon-erjidaohang", |
| | | // u: "", |
| | | // g: "6.2 人å", |
| | | // p: "" |
| | | // }, { |
| | | // v: "人ååºæ¬ä¿¡æ¯", |
| | | // i: "font icon-erjidaohang", |
| | | // u: "", |
| | | // g: "6.2 人å", |
| | | // p: "" |
| | | // }, { |
| | | // v: "å·¥ä½å±¥å", |
| | | // i: "font icon-erjidaohang", |
| | | // u: "", |
| | | // g: "6.2 人å", |
| | | // p: "" |
| | | // }, { |
| | | // v: "奿©è®°å½", |
| | | // i: "font icon-erjidaohang", |
| | | // u: "", |
| | | // g: "6.2 人å", |
| | | // p: "" |
| | | // }, { |
| | | // v: "å¹è®è®°å½", |
| | | // i: "font icon-erjidaohang", |
| | | // u: "", |
| | | // g: "6.2 人å", |
| | | // p: "" |
| | | // }, { |
| | | // v: "çç£è®°å½", |
| | | // i: "font icon-erjidaohang", |
| | | // u: "", |
| | | // g: "6.2 人å", |
| | | // p: "" |
| | | // }, { |
| | | // v: "ä»»èææè®°å½", |
| | | // i: "font icon-erjidaohang", |
| | | // u: "", |
| | | // g: "6.2 人å", |
| | | // p: "" |
| | | // }, { |
| | | // v: "人åè½åçæ§è®°å½", |
| | | // i: "font icon-erjidaohang", |
| | | // u: "", |
| | | // g: "6.2 人å", |
| | | // p: "" |
| | | // }, { |
| | | // v: "æ²éè®°å½", |
| | | // i: "font icon-erjidaohang", |
| | | // u: "", |
| | | // g: "6.2 人å", |
| | | // p: "" |
| | | // }, { |
| | | // v: "夿¥äººå管ç", |
| | | // i: "font icon-erjidaohang", |
| | | // u: "a6-external-personnel-management", |
| | | // g: "6.3 设æ½åç¯å¢æ¡ä»¶", |
| | | // p: "" |
| | | // }, { |
| | | // v: "å®éªå®¤è®¾æ½åºæä¿¡æ¯", |
| | | // i: "font icon-erjidaohang", |
| | | // u: "", |
| | | // g: "6.3 设æ½åç¯å¢æ¡ä»¶", |
| | | // p: "" |
| | | // }, { |
| | | // v: "设æ½åç¯å¢æ¡ä»¶è¦æ±", |
| | | // i: "font icon-erjidaohang", |
| | | // u: "", |
| | | // g: "6.3 设æ½åç¯å¢æ¡ä»¶", |
| | | // p: "" |
| | | // }, { |
| | | // v: "ç¯å¢æ¡ä»¶å¼ç¨", |
| | | // i: "font icon-erjidaohang", |
| | | // u: "", |
| | | // g: "6.3 设æ½åç¯å¢æ¡ä»¶", |
| | | // p: "" |
| | | // }, { |
| | | // v: "å®å
¨åºä»£è¡¨æ£æ¥", |
| | | // i: "font icon-erjidaohang", |
| | | // u: "", |
| | | // g: "6.3 设æ½åç¯å¢æ¡ä»¶", |
| | | // p: "" |
| | | // }, { |
| | | // v: "å®å
¨å
å¡", |
| | | // i: "font icon-erjidaohang", |
| | | // u: "", |
| | | // g: "6.3 设æ½åç¯å¢æ¡ä»¶", |
| | | // p: "" |
| | | // }, { |
| | | // v: "åºç©å¤ç交æ¥è®°å½", |
| | | // i: "font icon-erjidaohang", |
| | | // u: "a6-waste-handover", |
| | | // g: "6.3 设æ½åç¯å¢æ¡ä»¶", |
| | | // p: "" |
| | | // }, |
| | | { |
| | | v: "设æ½åç¯å¢æ¡ä»¶", |
| | | i: "font icon-erjidaohang", |
| | | u: "a6-facilities-environment", |
| | | g: "6.3 设æ½åç¯å¢æ¡ä»¶", |
| | | p: "" |
| | | }, |
| | | { |
| | | v: "设å¤", |
| | | i: "font icon-erjidaohang", |
| | | u: "a6-device", |
| | | g: "6.4 设å¤", |
| | | p: "" |
| | | }, |
| | | { |
| | | v: "é弿º¯æºè®¡å", |
| | | i: "font icon-erjidaohang", |
| | | u: "a6-quantity-value-traceability-plan", |
| | | g: "6.5 è®¡éæº¯æºæ§", |
| | | p: "" |
| | | }, { |
| | | v: "æ åç©è´¨æ¸
å", |
| | | i: "font icon-erjidaohang", |
| | | u: "a6-standard-material-list", |
| | | g: "6.5 è®¡éæº¯æºæ§", |
| | | p: "" |
| | | }, { |
| | | v: "æ åç©è´¨éªæ¶", |
| | | i: "font icon-erjidaohang", |
| | | u: "a6-standard-material-accep", |
| | | g: "6.5 è®¡éæº¯æºæ§", |
| | | p: "" |
| | | }, { |
| | | v: "æ åç©è´¨é¢ç¨", |
| | | i: "font icon-erjidaohang", |
| | | u: "a6-standard-material-requisition", |
| | | g: "6.5 è®¡éæº¯æºæ§", |
| | | p: "" |
| | | }, { |
| | | v: "è¿ææ æ ·å¤ç½®", |
| | | i: "font icon-erjidaohang", |
| | | u: "", |
| | | g: "6.5 è®¡éæº¯æºæ§", |
| | | p: "" |
| | | }, { |
| | | v: "æå¡åä¾åºåéè´", |
| | | i: "font icon-erjidaohang", |
| | | u: "a6.service-and-supply-purchase", |
| | | g: "6.6 å¤é¨æä¾ç产ååæå¡", |
| | | p: "" |
| | | },{ |
| | | v: "ä¾åºå管ç", |
| | | i: "font icon-erjidaohang", |
| | | u: "a6-supplier-manage", |
| | | g: "6.6 å¤é¨æä¾ç产ååæå¡", |
| | | p: "" |
| | | }, |
| | | { |
| | | v: "è®¾å¤æ»è§", |
| | | i: "font icon-erjidaohang", |
| | |
| | | g: "6.4 设å¤", |
| | | p: "selectDeviceParameter" |
| | | }, |
| | | // { |
| | | // v: "èµæºé¢å®", |
| | | // i: "font icon-erjidaohang", |
| | | // u: "", |
| | | // g: "6.4 设å¤", |
| | | // p: "" |
| | | // }, { |
| | | // v: "ä½ä¸æå¯¼ä¹¦", |
| | | // i: "font icon-erjidaohang", |
| | | // u: "", |
| | | // g: "6.4 设å¤", |
| | | // p: "" |
| | | // }, { |
| | | // v: "设å¤è¿è¡æ»è§", |
| | | // i: "font icon-erjidaohang", |
| | | // u: "", |
| | | // g: "6.4 设å¤", |
| | | // p: "" |
| | | // }, { |
| | | // v: "è®¾å¤æ¡£æ¡", |
| | | // i: "font icon-erjidaohang", |
| | | // u: "a6-device", |
| | | // g: "6.4 设å¤", |
| | | // p: "" |
| | | // }, { |
| | | // v: "设å¤éªæ¶", |
| | | // i: "font icon-erjidaohang", |
| | | // u: "", |
| | | // g: "6.4 设å¤", |
| | | // p: "" |
| | | // }, { |
| | | // v: "è®¾å¤æ ¡å", |
| | | // i: "font icon-erjidaohang", |
| | | // u: "", |
| | | // g: "6.4 设å¤", |
| | | // p: "" |
| | | // }, { |
| | | // v: "è®¾å¤æ ¸æ¥", |
| | | // i: "font icon-erjidaohang", |
| | | // u: "", |
| | | // g: "6.4 设å¤", |
| | | // p: "" |
| | | // }, { |
| | | // v: "设å¤ç»´æ¤", |
| | | // i: "font icon-erjidaohang", |
| | | // u: "", |
| | | // g: "6.4 设å¤", |
| | | // p: "" |
| | | // }, { |
| | | // v: "设å¤åç¨", |
| | | // i: "font icon-erjidaohang", |
| | | // u: "", |
| | | // g: "6.4 设å¤", |
| | | // p: "" |
| | | // }, { |
| | | // v: "è®¾å¤æ
é", |
| | | // i: "font icon-erjidaohang", |
| | | // u: "", |
| | | // g: "6.4 设å¤", |
| | | // p: "" |
| | | // }, { |
| | | // v: "使ç¨è®°å½", |
| | | // i: "font icon-erjidaohang", |
| | | // u: "", |
| | | // g: "6.4 设å¤", |
| | | // p: "" |
| | | // }, { |
| | | // v: "设å¤åç¨/å¯ç¨", |
| | | // i: "font icon-erjidaohang", |
| | | // u: "", |
| | | // g: "6.4 设å¤", |
| | | // p: "" |
| | | // }, { |
| | | // v: "é弿º¯æºè®¡å", |
| | | // i: "font icon-erjidaohang", |
| | | // u: "", |
| | | // g: "6.5 è®¡éæº¯æºæ§", |
| | | // p: "" |
| | | // }, |
| | | { |
| | | v: "æ åç©è´¨æ¸
å", |
| | | i: "font icon-erjidaohang", |
| | | u: "a6-standard-material-list", |
| | | g: "6.5 è®¡éæº¯æºæ§", |
| | | p: "" |
| | | }, |
| | | // { |
| | | // v: "æ åç©è´¨éªæ¶", |
| | | // i: "font icon-erjidaohang", |
| | | // u: "", |
| | | // g: "6.5 è®¡éæº¯æºæ§", |
| | | // p: "" |
| | | // }, |
| | | { |
| | | v: "æ åç©è´¨é¢ç¨", |
| | | i: "font icon-erjidaohang", |
| | | u: "a6-standard-material-requisition", |
| | | g: "6.5 è®¡éæº¯æºæ§", |
| | | p: "" |
| | | }, |
| | | // { |
| | | // v: "è¿ææ æ ·å¤ç½®", |
| | | // i: "font icon-erjidaohang", |
| | | // u: "", |
| | | // g: "6.5 è®¡éæº¯æºæ§", |
| | | // p: "" |
| | | // }, { |
| | | // v: "æå¡åä¾åºåéè´", |
| | | // i: "font icon-erjidaohang", |
| | | // u: "", |
| | | // g: "6.6 å¤é¨æä¾ç产ååæå¡", |
| | | // p: "" |
| | | // },{ |
| | | // v: "ä¾åºå管ç", |
| | | // i: "font icon-erjidaohang", |
| | | // u: "", |
| | | // g: "6.6 å¤é¨æä¾ç产ååæå¡", |
| | | // p: "" |
| | | // } |
| | | } |
| | | ] |
| | | }, |
| | | { |
| | |
| | | i: "font icon-guochengyaoqiu", |
| | | p: "", |
| | | c: [ |
| | | // { |
| | | // v: "æ£éªå§æå", |
| | | // i: "font icon-erjidaohang", |
| | | // u: "", |
| | | // g: "7.1 è¦æ±ãæ 书åååè¯å®¡", |
| | | // p: "" |
| | | // }, { |
| | | // v: "ååè¯å®¡", |
| | | // i: "font icon-erjidaohang", |
| | | // u: "", |
| | | // g: "7.1 è¦æ±ãæ 书åååè¯å®¡", |
| | | // p: "" |
| | | // }, |
| | | { |
| | | v: "å®éªå®¤çæ£æµè½åæ¡£æ¡", |
| | | i: "font icon-erjidaohang", |
| | | u: "a7-standard-method", |
| | | g: "7.2 æ¹æ³çéæ©ãéªè¯å确认", |
| | | p: "selectStandardMethodList" |
| | | } |
| | | // , { |
| | | // v: "æ 忥æ°", |
| | | // i: "font icon-erjidaohang", |
| | | // u: "", |
| | | // g: "7.2 æ¹æ³çéæ©ãéªè¯å确认", |
| | | // p: "" |
| | | // }, { |
| | | // v: "æ åæ¹æ³çåæ´", |
| | | // i: "font icon-erjidaohang", |
| | | // u: "", |
| | | // g: "7.2 æ¹æ³çéæ©ãéªè¯å确认", |
| | | // p: "" |
| | | // }, { |
| | | // v: "æ¹æ³éªè¯", |
| | | // i: "font icon-erjidaohang", |
| | | // u: "", |
| | | // g: "7.2 æ¹æ³çéæ©ãéªè¯å确认", |
| | | // p: "" |
| | | // }, { |
| | | // v: "æ½æ ·", |
| | | // i: "font icon-erjidaohang", |
| | | // u: "", |
| | | // g: "7.3 æ½æ ·", |
| | | // p: "" |
| | | // }, { |
| | | // v: "æ£æµææ ¡åç©åçå¤ç½®", |
| | | // i: "font icon-erjidaohang", |
| | | // u: "", |
| | | // g: "7.4 æ£æµææ ¡åç©åçå¤ç½®", |
| | | // p: "" |
| | | // }, { |
| | | // v: "ææ¯è®°å½", |
| | | // i: "font icon-erjidaohang", |
| | | // u: "", |
| | | // g: "7.5 ææ¯è®°å½", |
| | | // p: "" |
| | | // }, { |
| | | // v: "æµéä¸ç¡®å®åº¦çè¯å®", |
| | | // i: "font icon-erjidaohang", |
| | | // u: "", |
| | | // g: "7.6 æµéä¸ç¡®å®åº¦çè¯å®", |
| | | // p: "" |
| | | // }, { |
| | | // v: "ç¡®ä¿ç»ææææ§", |
| | | // i: "font icon-erjidaohang", |
| | | // u: "", |
| | | // g: "7.7 ç¡®ä¿ç»ææææ§", |
| | | // p: "" |
| | | // }, { |
| | | // v: "æ¥åç»æ", |
| | | // i: "font icon-erjidaohang", |
| | | // u: "", |
| | | // g: "7.8 æ¥åç»æ", |
| | | // p: "" |
| | | // }, { |
| | | // v: "æè¯è¯¦æ
", |
| | | // i: "font icon-erjidaohang", |
| | | // u: "", |
| | | // g: "7.9 æè¯", |
| | | // p: "" |
| | | // }, { |
| | | // v: "æè¯æ
嵿±æ»è¡¨", |
| | | // i: "font icon-erjidaohang", |
| | | // u: "", |
| | | // g: "7.9 æè¯", |
| | | // p: "" |
| | | // }, { |
| | | // v: "ä¸ç¬¦å项", |
| | | // i: "font icon-erjidaohang", |
| | | // u: "", |
| | | // g: "7.10 ä¸ç¬¦åå·¥ä½", |
| | | // p: "" |
| | | // }, { |
| | | // v: "ä¸ç¬¦å项çåå¸", |
| | | // i: "font icon-erjidaohang", |
| | | // u: "", |
| | | // g: "7.10 ä¸ç¬¦åå·¥ä½", |
| | | // p: "" |
| | | // }, { |
| | | // v: "æ°æ®æ§å¶åä¿¡æ¯ç®¡ç", |
| | | // i: "font icon-erjidaohang", |
| | | // u: "", |
| | | // g: "7.11 æ°æ®æ§å¶åä¿¡æ¯ç®¡ç", |
| | | // p: "" |
| | | // } |
| | | { |
| | | v: "æ£éªå§æå", |
| | | i: "font icon-erjidaohang", |
| | | u: "a7-contract-review", |
| | | g: "7.1 è¦æ±ãæ 书åååè¯å®¡", |
| | | p: "pageProcessOrder" |
| | | }, { |
| | | v: "ååè¯å®¡", |
| | | i: "font icon-erjidaohang", |
| | | u: "a7-contract-review", |
| | | g: "7.1 è¦æ±ãæ 书åååè¯å®¡", |
| | | p: "pageProcessOrder" |
| | | }, { |
| | | v: "å®éªå®¤çæ£æµè½åæ¡£æ¡", |
| | | i: "font icon-erjidaohang", |
| | | u: "a7-standard-method", |
| | | g: "7.2 æ¹æ³çéæ©ãéªè¯å确认", |
| | | p: "selectStandardMethodList" |
| | | }, { |
| | | v: "æ 忥æ°", |
| | | i: "font icon-erjidaohang", |
| | | u: "a7-standard-novelty-retrieval", |
| | | g: "7.2 æ¹æ³çéæ©ãéªè¯å确认", |
| | | p: "" |
| | | }, { |
| | | v: "æ åæ¹æ³çåæ´", |
| | | i: "font icon-erjidaohang", |
| | | u: "a7-changes-standard-methods", |
| | | g: "7.2 æ¹æ³çéæ©ãéªè¯å确认", |
| | | p: "" |
| | | }, { |
| | | v: "æ¹æ³éªè¯", |
| | | i: "font icon-erjidaohang", |
| | | u: "a7-method-verification", |
| | | g: "7.2 æ¹æ³çéæ©ãéªè¯å确认", |
| | | p: "" |
| | | }, { |
| | | v: "æ½æ ·", |
| | | i: "font icon-erjidaohang", |
| | | u: "", |
| | | g: "7.3 æ½æ ·", |
| | | p: "" |
| | | }, { |
| | | v: "æ ·åæ¥æ¶", |
| | | i: "font icon-erjidaohang", |
| | | u: "a7-sample-registration", |
| | | g: "7.4 æ£æµææ ¡åç©åçå¤ç½®", |
| | | p: "pageProcessTotaldeal" |
| | | },{ |
| | | v: "æ£æµææ ¡åç©åçå¤ç½®", |
| | | i: "font icon-erjidaohang", |
| | | u: "a7-sample-disposal", |
| | | g: "7.4 æ£æµææ ¡åç©åçå¤ç½®", |
| | | p: "pageProcessTotaldeal" |
| | | }, { |
| | | v: "ææ¯è®°å½", |
| | | i: "font icon-erjidaohang", |
| | | u: "", |
| | | g: "7.5 ææ¯è®°å½", |
| | | p: "" |
| | | }, { |
| | | v: "æµéä¸ç¡®å®åº¦çè¯å®", |
| | | i: "font icon-erjidaohang", |
| | | u: "a7-uncertainty-evaluation", |
| | | g: "7.6 æµéä¸ç¡®å®åº¦çè¯å®", |
| | | p: "pageProcessEvaluate" |
| | | }, { |
| | | v: "è´¨éçæ§è®¡å", |
| | | i: "font icon-erjidaohang", |
| | | u: "a7-Ensure-results-validity", |
| | | g: "7.7 ç¡®ä¿ç»ææææ§", |
| | | p: "" |
| | | }, { |
| | | v: "è´¨éçç£è®¡å", |
| | | i: "font icon-erjidaohang", |
| | | u: "a7-quality-control-plan", |
| | | g: "7.7 ç¡®ä¿ç»ææææ§", |
| | | p: "" |
| | | }, { |
| | | v: "æ¥åç»æ", |
| | | i: "font icon-erjidaohang", |
| | | u: "a7-report-results", |
| | | g: "7.8 æ¥åç»æ", |
| | | p: "pageProcessReport" |
| | | },{ |
| | | v: "æè¯æ
嵿±æ»è¡¨", |
| | | i: "font icon-erjidaohang", |
| | | u: "a7-complaint", |
| | | g: "7.9 æè¯", |
| | | p: "pageProcessComplain" |
| | | }, { |
| | | v: "ä¸ç¬¦å项", |
| | | i: "font icon-erjidaohang", |
| | | u: "a7-nonconforming-item", |
| | | g: "7.10 ä¸ç¬¦åå·¥ä½", |
| | | p: "" |
| | | }, { |
| | | v: "ä¸ç¬¦å项çåå¸", |
| | | i: "font icon-erjidaohang", |
| | | u: "a7-distribution-of-nonconforming", |
| | | g: "7.10 ä¸ç¬¦åå·¥ä½", |
| | | p: "" |
| | | }, { |
| | | v: "æ°æ®æ§å¶åä¿¡æ¯ç®¡ç", |
| | | i: "font icon-erjidaohang", |
| | | u: "", |
| | | g: "7.11 æ°æ®æ§å¶åä¿¡æ¯ç®¡ç", |
| | | p: "" |
| | | } |
| | | ] |
| | | }, |
| | | // { |
| | | // v: "8 ä½ç³»ç®¡çè¦æ±", |
| | | // i: "font icon-guanlitixiyaoqiu", |
| | | // p: "", |
| | | // c: [{ |
| | | // v: "æ¹å¼", |
| | | // i: "font icon-erjidaohang", |
| | | // u: "", |
| | | // g: "8.1 æ¹å¼", |
| | | // p: "" |
| | | // }, { |
| | | // v: "管çä½ç³»æä»¶", |
| | | // i: "font icon-erjidaohang", |
| | | // u: "", |
| | | // g: "8.2 管çä½ç³»æä»¶", |
| | | // p: "" |
| | | // }, { |
| | | // v: "æä»¶æ¸
å", |
| | | // i: "font icon-erjidaohang", |
| | | // u: "", |
| | | // g: "8.3 管çä½ç³»æä»¶çæ§å¶", |
| | | // p: "" |
| | | // }, { |
| | | // v: "æä»¶åæ§", |
| | | // i: "font icon-erjidaohang", |
| | | // u: "", |
| | | // g: "8.3 管çä½ç³»æä»¶çæ§å¶", |
| | | // p: "" |
| | | // }, { |
| | | // v: "æä»¶åæ¾åæ¶", |
| | | // i: "font icon-erjidaohang", |
| | | // u: "", |
| | | // g: "8.3 管çä½ç³»æä»¶çæ§å¶", |
| | | // p: "" |
| | | // }, { |
| | | // v: "æä»¶åæ´", |
| | | // i: "font icon-erjidaohang", |
| | | // u: "", |
| | | // g: "8.3 管çä½ç³»æä»¶çæ§å¶", |
| | | // p: "" |
| | | // }, { |
| | | // v: "æä»¶ä½åº", |
| | | // i: "font icon-erjidaohang", |
| | | // u: "", |
| | | // g: "8.3 管çä½ç³»æä»¶çæ§å¶", |
| | | // p: "" |
| | | // }, { |
| | | // v: "è®°å½çæ§å¶", |
| | | // i: "font icon-erjidaohang", |
| | | // u: "", |
| | | // g: "8.4 è®°å½çæ§å¶", |
| | | // p: "" |
| | | // }, { |
| | | // v: "åºå¯¹é£é©åæºéçæªæ½", |
| | | // i: "font icon-erjidaohang", |
| | | // u: "", |
| | | // g: "8.5 åºå¯¹é£é©åæºéçæªæ½", |
| | | // p: "" |
| | | // }, { |
| | | // v: "客æ·åºæ¬ä¿¡æ¯ç®¡ç", |
| | | // i: "font icon-erjidaohang", |
| | | // u: "", |
| | | // g: "8.6 æ¹è¿", |
| | | // p: "" |
| | | // }, { |
| | | // v: "å®¢æ·æ»¡æåº¦", |
| | | // i: "font icon-erjidaohang", |
| | | // u: "", |
| | | // g: "8.6 æ¹è¿", |
| | | // p: "" |
| | | // }, { |
| | | // v: "çº æ£æªæ½", |
| | | // i: "font icon-erjidaohang", |
| | | // u: "", |
| | | // g: "8.7 çº æ£æªæ½", |
| | | // p: "" |
| | | // }, { |
| | | // v: "å
审管ç", |
| | | // i: "font icon-erjidaohang", |
| | | // u: "", |
| | | // g: "8.8 å
审管ç", |
| | | // p: "" |
| | | // }, { |
| | | // v: "管çè¯å®¡", |
| | | // i: "font icon-erjidaohang", |
| | | // u: "", |
| | | // g: "8.9 管çè¯å®¡", |
| | | // p: "" |
| | | // }] |
| | | // } |
| | | { |
| | | v: "8 ä½ç³»ç®¡çè¦æ±", |
| | | i: "font icon-guanlitixiyaoqiu", |
| | | p: "", |
| | | c: [{ |
| | | v: "æ¹å¼", |
| | | i: "font icon-erjidaohang", |
| | | u: "", |
| | | g: "8.1 æ¹å¼", |
| | | p: "" |
| | | }, { |
| | | v: "管çä½ç³»æä»¶", |
| | | i: "font icon-erjidaohang", |
| | | u: "", |
| | | g: "8.2 管çä½ç³»æä»¶", |
| | | p: "" |
| | | }, { |
| | | v: "管çä½ç³»æä»¶çæ§å¶", |
| | | i: "font icon-erjidaohang", |
| | | u: "a8-file-handling", |
| | | g: "8.3 管çä½ç³»æä»¶çæ§å¶", |
| | | p: "doManageDocumentList pageManageDocumentControlled" |
| | | },{ |
| | | v: "æä»¶å®¡æ¹è®°å½", |
| | | i: "font icon-erjidaohang", |
| | | u: "a8-document-approval-records", |
| | | g: "8.4 è®°å½çæ§å¶", |
| | | p: "pageManageRecordCheck" |
| | | },{ |
| | | v: "夿¥æä»¶ç¡®è®¤è®°å½", |
| | | i: "font icon-erjidaohang", |
| | | u: "a8-external-document-confirmation-records", |
| | | g: "8.4 è®°å½çæ§å¶", |
| | | p: "pageManageRecordTotal" |
| | | },{ |
| | | v: "æææä»¶ï¼å
ãå¤é¨æä»¶ï¼çåæ¾ä¸åæ¶è®°å½", |
| | | i: "font icon-erjidaohang", |
| | | u: "a8-distribution-retrieval-records-all-documents", |
| | | g: "8.4 è®°å½çæ§å¶", |
| | | p: "pageManageRecordIssueRecycle" |
| | | },{ |
| | | v: "æä»¶ä¿®è®¢ç³è¯·å®¡æ¹è®°å½", |
| | | i: "font icon-erjidaohang", |
| | | u: "a8-document-revision-request-approval-records", |
| | | g: "8.4 è®°å½çæ§å¶", |
| | | p: "pageManageRecordAudit" |
| | | },{ |
| | | v: "æä»¶å®æå®¡æ¥è®°å½", |
| | | i: "font icon-erjidaohang", |
| | | u: "a8-periodic-document-review-records", |
| | | g: "8.4 è®°å½çæ§å¶", |
| | | p: "pageManageRecordIntervals" |
| | | },{ |
| | | v: "ä½åºæä»¶éæ¯è®°å½", |
| | | i: "font icon-erjidaohang", |
| | | u: "a8-obsolete-document-destruction-records", |
| | | g: "8.4 è®°å½çæ§å¶", |
| | | p: "pageManageRecordCancel" |
| | | }, { |
| | | v: "åºå¯¹é£é©åæºéçæªæ½", |
| | | i: "font icon-erjidaohang", |
| | | u: "a8-measures_deal_risks_opportunities", |
| | | g: "8.5 åºå¯¹é£é©åæºéçæªæ½", |
| | | p: "" |
| | | }, { |
| | | v: "客æ·åºæ¬ä¿¡æ¯ç®¡ç", |
| | | i: "font icon-erjidaohang", |
| | | u: "", |
| | | g: "8.6 æ¹è¿", |
| | | p: "" |
| | | }, { |
| | | v: "å®¢æ·æ»¡æåº¦", |
| | | i: "font icon-erjidaohang", |
| | | u: "a8-customer-satisfaction", |
| | | g: "8.6 æ¹è¿", |
| | | p: "" |
| | | }, { |
| | | v: "çº æ£æªæ½", |
| | | i: "font icon-erjidaohang", |
| | | u: "a8-corrective-action", |
| | | g: "8.7 çº æ£æªæ½", |
| | | p: "" |
| | | }, { |
| | | v: "å
审管ç", |
| | | i: "font icon-erjidaohang", |
| | | u: "a8-internal-audit-management", |
| | | g: "8.8 å
审管ç", |
| | | p: "" |
| | | }, { |
| | | v: "管çè¯å®¡", |
| | | i: "font icon-erjidaohang", |
| | | u: "a9-management-review", |
| | | g: "8.9 管çè¯å®¡", |
| | | p: "" |
| | | }] |
| | | } |
| | | ] |
| | | |
| | | function computeK() { |