| | |
| | | <style scoped> |
| | | .title { |
| | | height: 60px; |
| | | line-height: 60px; |
| | | } |
| | | .title { |
| | | height: 60px; |
| | | line-height: 60px; |
| | | } |
| | | |
| | | .search { |
| | | background-color: #fff; |
| | | height: 80px; |
| | | display: flex; |
| | | align-items: center; |
| | | } |
| | | .search { |
| | | background-color: #fff; |
| | | height: 80px; |
| | | display: flex; |
| | | align-items: center; |
| | | } |
| | | |
| | | .search_thing { |
| | | display: flex; |
| | | align-items: center; |
| | | height: 50px; |
| | | } |
| | | .search_thing { |
| | | display: flex; |
| | | align-items: center; |
| | | height: 50px; |
| | | } |
| | | |
| | | .search_label { |
| | | width: 120px; |
| | | font-size: 14px; |
| | | text-align: right; |
| | | } |
| | | .search_label { |
| | | width: 120px; |
| | | font-size: 14px; |
| | | text-align: right; |
| | | } |
| | | |
| | | .search_input { |
| | | width: calc(100% - 120px); |
| | | } |
| | | .search_input { |
| | | width: calc(100% - 120px); |
| | | } |
| | | |
| | | .table { |
| | | margin-top: 10px; |
| | | background-color: #fff; |
| | | width: calc(100% - 40px); |
| | | height: calc(100% - 60px - 80px - 10px - 40px); |
| | | padding: 20px; |
| | | } |
| | | .table { |
| | | margin-top: 10px; |
| | | background-color: #fff; |
| | | width: calc(100% - 40px); |
| | | height: calc(100% - 60px - 80px - 10px - 40px); |
| | | padding: 20px; |
| | | } |
| | | |
| | | .el-form-item { |
| | | margin-bottom: 16px; |
| | | } |
| | | .el-form-item { |
| | | margin-bottom: 16px; |
| | | } |
| | | |
| | | .full-screen { |
| | | position: absolute; |
| | | right: 52px; |
| | | top: 22px; |
| | | } |
| | | .full-screen { |
| | | position: absolute; |
| | | right: 52px; |
| | | top: 22px; |
| | | } |
| | | |
| | | .btns { |
| | | position: absolute; |
| | | right: 100px; |
| | | top: 17px; |
| | | } |
| | | .btns { |
| | | position: absolute; |
| | | right: 40px; |
| | | top: 50%; |
| | | transform: translate(0, -50%); |
| | | display: flex; |
| | | align-items: center; |
| | | } |
| | | |
| | | .fullscreen { |
| | | height: 82vh |
| | | } |
| | | .fullscreen { |
| | | height: 82vh |
| | | } |
| | | |
| | | .img-list { |
| | | width: 100%; |
| | | display: flex; |
| | | } |
| | | |
| | | .list { |
| | | display: flex; |
| | | justify-content: flex-start; |
| | | align-items: center; |
| | | } |
| | | |
| | | .list-item { |
| | | width: 120px; |
| | | height: 120px; |
| | | margin: 4px; |
| | | cursor: pointer; |
| | | box-sizing: border-box; |
| | | border: 1px solid #fff; |
| | | } |
| | | |
| | | .list-item:hover { |
| | | border: 1px solid #3A7BFA; |
| | | } |
| | | |
| | | .list-item.active { |
| | | border: 1px solid #3A7BFA; |
| | | } |
| | | </style> |
| | | |
| | | <template> |
| | |
| | | <div style="width: 100%;height: 100%;"> |
| | | <div> |
| | | <el-row class="title"> |
| | | <el-col :span="12" style="padding-left: 20px;">报告编制</el-col> |
| | | <el-col :span="12" style="text-align: left;"> |
| | | <span>报告编制</span> |
| | | <!-- <el-radio-group v-model="radio"size="medium" fill="#3A7BFA"> |
| | | <el-radio-button label="0">报告编制</el-radio-button> |
| | | <el-radio-button label="1">订单</el-radio-button> |
| | | </el-radio-group> --> |
| | | </el-col> |
| | | </el-row> |
| | | </div> |
| | | <div class="search"> |
| | | <div class="search" style="position: relative;" v-if="radio == 0"> |
| | | <div class="search_thing"> |
| | | <div class="search_label">报告编号:</div> |
| | | <div class="search_input"><el-input size="small" placeholder="请输入" clearable |
| | |
| | | @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.sampleCode" |
| | | @keyup.enter.native="refreshTable()"></el-input> |
| | | </div> |
| | | </div> |
| | | <div class="search_thing" style="padding-left: 30px;"> |
| | | <el-button size="small" @click="refresh()">重 置</el-button> |
| | | <el-button size="small" type="primary" @click="refreshTable()">查 询</el-button> |
| | | </div> |
| | | <div class="btns"> |
| | | <el-button size="small" type="primary" @click="handleDowns" :loading="outLoading" |
| | | style="margin-right: 16px;">批量下载</el-button> |
| | | <el-upload class="upload-demo" :action="action" :headers="headers" :show-file-list="false" accept=".zip" |
| | | :limit="1" :before-upload="beforeUpload" :on-success="handleSuccess" ref="upload" :on-error="onError"> |
| | | <el-button size="small" type="primary" :loading="inLoading">批量上传</el-button> |
| | | </el-upload> |
| | | </div> |
| | | </div> |
| | | <!-- <input id="input" type="file" accept=".doc,.docx"></input> --> |
| | | <div class="table"> |
| | | <ValueTable ref="ValueTable" :url="$api.insReport.pageInsReport" :componentData="componentData" |
| | | :key="upIndex" /> |
| | | <div class="table" v-if="radio == 0"> |
| | | <ValueTable ref="ValueTable" :url="$api.insReport.pageInsReport" :isColumnWidth="true" |
| | | :componentData="componentData" :key="upIndex" /> |
| | | </div> |
| | | <Order v-if="radio == 1" /> |
| | | </div> |
| | | <el-dialog title="在线编制" :visible.sync="claimVisible" width="22cm" :modal-append-to-body="false" |
| | | :fullscreen="fullscreen"> |
| | | <div class="full-screen"> |
| | | <i class="el-icon-full-screen" style="cursor: pointer;font-size: 18px" @click="fullscreen=true;" |
| | | <i class="el-icon-full-screen" style="cursor: pointer;font-size: 18px" @click="fullscreen = true;" |
| | | v-if="!fullscreen"></i> |
| | | <img src="../../../static/img/no-full.svg" alt="" v-else style="cursor: pointer;" @click="fullscreen=false;"> |
| | | <img src="../../../static/img/no-full.svg" alt="" v-else style="cursor: pointer;" @click="fullscreen = false;"> |
| | | </div> |
| | | <Word style="height:70vh" :class="{fullscreen:fullscreen}" v-if="claimVisible" ref="Word" :value="value" /> |
| | | <Word style="height:70vh" :class="{ fullscreen: fullscreen }" v-if="claimVisible" ref="Word" :value="value" /> |
| | | <span slot="footer" class="dialog-footer"> |
| | | <el-button @click="claimVisible = false">取 消</el-button> |
| | | <el-button type="primary" @click="confirmClaim">确 定</el-button> |
| | | </span> |
| | | </el-dialog> |
| | | <el-dialog title="报告审核" :visible.sync="issuedVisible" width="400px" :modal-append-to-body="false" |
| | | <el-dialog title="报告审核" :visible.sync="issuedVisible" width="80vw" :modal-append-to-body="false" |
| | | :fullscreen="fullscreen"> |
| | | <!-- <div class="full-screen"> |
| | | <i class="el-icon-full-screen" style="cursor: pointer;font-size: 18px" @click="fullscreen=true;" v-if="!fullscreen"></i> |
| | | <img src="../../../static/img/no-full.svg" alt="" v-else style="cursor: pointer;" @click="fullscreen=false;" > |
| | | </div> --> |
| | | <!-- <div class="btns"> |
| | | <el-button type="primary" size="small">通过</el-button> |
| | | <el-button size="small">不通过</el-button> |
| | | </div> --> |
| | | <div class="full-screen"> |
| | | <i class="el-icon-full-screen" style="cursor: pointer;font-size: 18px" @click="fullscreen = true;" |
| | | v-if="!fullscreen"></i> |
| | | <img src="../../../static/img/no-full.svg" alt="" v-else style="cursor: pointer;" @click="fullscreen = false;"> |
| | | </div> |
| | | <div style="height: 78vh;" v-if="issuedVisible"> |
| | | <onlyoffice ref="onlyoffice" :options="option" style="width: 100%;height: 100%;" /> |
| | | <!-- <filePreview v-if="issuedVisible" :fileUrl="currentFile.url" |
| | | :currentFile="currentFile" style="max-height: 100%;overflow-y: auto;"/> --> |
| | | </div> |
| | | <span slot="footer" class="dialog-footer"> |
| | | <el-button @click="issuedReasonVisible=true" :disabled="loadingIssued">不通过</el-button> |
| | | <el-button type="primary" @click="subIssued" :loading="loadingIssued">通 过</el-button> |
| | | </span> |
| | | </el-dialog> |
| | | <el-button @click="issuedReasonVisible = true" :disabled="loadingIssued">不通过</el-button> |
| | | <el-button type="primary" @click="subIssued" :loading="loadingIssued">通 过</el-button> |
| | | </span> |
| | | </el-dialog> |
| | | <el-dialog title="不通过原因" :visible.sync="issuedReasonVisible" width="400px" :modal-append-to-body="false"> |
| | | <div class="search_thing"> |
| | | <div class="search_label">不通过原因:</div> |
| | | <div class="search_input"><el-input size="small" placeholder="请输入" clearable v-model="reason"></el-input></div> |
| | | </div> |
| | | <span slot="footer" class="dialog-footer"> |
| | | <el-button @click="issuedReasonVisible=false" :disabled="loadingIssuedReason">取消</el-button> |
| | | <el-button type="primary" @click="handleIssuedReason" :loading="loadingIssuedReason">确定</el-button> |
| | | </span> |
| | | </el-dialog> |
| | | <el-dialog title="报告批准" :visible.sync="approveVisible" width="400px" :modal-append-to-body="false" :fullscreen="fullscreen"> |
| | | <!-- <div class="full-screen"> |
| | | <i class="el-icon-full-screen" style="cursor: pointer;font-size: 18px" @click="fullscreen=true;" v-if="!fullscreen"></i> |
| | | <img src="../../../static/img/no-full.svg" alt="" v-else style="cursor: pointer;" @click="fullscreen=false;" > |
| | | </div> --> |
| | | <!-- <div class="btns"> |
| | | <el-button type="primary" size="small">批准</el-button> |
| | | <el-button size="small">不批准</el-button> |
| | | </div> --> |
| | | <el-button @click="issuedReasonVisible = false" :disabled="loadingIssuedReason">取消</el-button> |
| | | <el-button type="primary" @click="handleIssuedReason" :loading="loadingIssuedReason">确定</el-button> |
| | | </span> |
| | | </el-dialog> |
| | | <el-dialog title="报告批准" :visible.sync="approveVisible" width="80vw" :modal-append-to-body="false" |
| | | :fullscreen="fullscreen"> |
| | | <div class="full-screen"> |
| | | <i class="el-icon-full-screen" style="cursor: pointer;font-size: 18px" @click="fullscreen = true;" |
| | | v-if="!fullscreen"></i> |
| | | <img src="../../../static/img/no-full.svg" alt="" v-else style="cursor: pointer;" @click="fullscreen = false;"> |
| | | </div> |
| | | <div style="height: 78vh;" v-if="approveVisible"> |
| | | <onlyoffice ref="onlyoffice" :options="option" style="width: 100%;height: 100%;" /> |
| | | <!-- <filePreview v-if="approveVisible" :fileUrl="currentFile.url" |
| | | :currentFile="currentFile" style="max-height: 100%;overflow-y: auto;"/> --> |
| | | </div> |
| | | <span slot="footer" class="dialog-footer"> |
| | | <el-button @click="approveReasonVisible=true" :disabled="loadingApprove">不批准</el-button> |
| | | <el-button type="primary" @click="subApprove" :loading="loadingApprove">批 准</el-button> |
| | | </span> |
| | | </el-dialog> |
| | | <el-button @click="approveReasonVisible = true" :disabled="loadingApprove">不批准</el-button> |
| | | <el-button type="primary" @click="subApprove" :loading="loadingApprove">批 准</el-button> |
| | | </span> |
| | | </el-dialog> |
| | | <el-dialog title="印章选择" :visible.sync="imgVisible" width="50vw" :modal-append-to-body="false" |
| | | :close-on-click-modal="false" :close-on-press-escape="false"> |
| | | <div class="img-list"> |
| | | <label style="width: 120px;">印章选择:</label> |
| | | <div class="list" style="flex: 1;"> |
| | | <div class="list-item" :class="{ active: currentImg == m.id }" v-for="m in imgList" |
| | | @click="currentImg = m.id"> |
| | | <img :src="javaApi + '/img/' + m.address" alt="" style="width: 118px;height: 118px;"> |
| | | </div> |
| | | </div> |
| | | </div> |
| | | <span slot="footer" class="dialog-footer"> |
| | | <el-button type="primary" @click="subApprove0" :loading="loadingApprove">确 认</el-button> |
| | | </span> |
| | | </el-dialog> |
| | | <el-dialog title="不批准原因" :visible.sync="approveReasonVisible" width="400px" :modal-append-to-body="false"> |
| | | <div class="search_thing"> |
| | | <div class="search_label">不批准原因:</div> |
| | | <div class="search_input"><el-input size="small" placeholder="请输入" clearable v-model="reason"></el-input></div> |
| | | </div> |
| | | <span slot="footer" class="dialog-footer"> |
| | | <el-button @click="approveReasonVisible=false" :disabled="loadingApproveReason">取消</el-button> |
| | | <el-button type="primary" @click="handleApproveReason" :loading="loadingApproveReason">确定</el-button> |
| | | </span> |
| | | </el-dialog> |
| | | </div> |
| | | <el-button @click="approveReasonVisible = false" :disabled="loadingApproveReason">取消</el-button> |
| | | <el-button type="primary" @click="handleApproveReason" :loading="loadingApproveReason">确定</el-button> |
| | | </span> |
| | | </el-dialog> |
| | | <el-dialog title="文件预览" :visible.sync="lookFileVisible" fullscreen :modal="false"> |
| | | <filePreview v-if="lookFileVisible" :fileUrl="currentFile.url" :currentFile="currentFile" |
| | | style="max-height: 87vh;overflow-y: auto;" /> |
| | | </el-dialog> |
| | | <!--报告查看--> |
| | | <el-dialog :fullscreen="fullscreen" top="5vh" :modal-append-to-body="false" :visible.sync="viewIssuedVisible" |
| | | title="报告查看" width="80vw"> |
| | | <div class="full-screen"> |
| | | <i v-if="!fullscreen" class="el-icon-full-screen" style="cursor: pointer;font-size: 18px" |
| | | @click="fullscreen = true;"></i> |
| | | <img v-else alt="" src="../../../static/img/no-full.svg" style="cursor: pointer;" @click="fullscreen = false;"> |
| | | </div> |
| | | <div v-if="viewIssuedVisible" style="height: 80vh;"> |
| | | <onlyoffice ref="onlyoffice" :options="option" style="width: 100%;height: 100%;" /> |
| | | </div> |
| | | </el-dialog> |
| | | </div> |
| | | </template> |
| | | |
| | | <script> |
| | | import ValueTable from '../tool/value-table.vue' |
| | | import Word from '../tool/word.vue' |
| | | import file from '../../util/file'; |
| | | import { |
| | | convertToHtml |
| | | } from 'mammoth'; |
| | | import axios from "axios"; |
| | | export default { |
| | | components: { |
| | | ValueTable, |
| | | Word, |
| | | }, |
| | | data() { |
| | | return { |
| | | componentData: { |
| | | entity: { |
| | | entrustCode: null, |
| | | code: null, |
| | | orderBy: { |
| | | field: 'id', |
| | | order: 'desc' |
| | | } |
| | | }, |
| | | isIndex: true, |
| | | showSelect: false, |
| | | select: false, |
| | | do: [ |
| | | { |
| | | id: 'handleWeave', |
| | | font: '在线编制', |
| | | type: 'text', |
| | | method: 'handleWeave', |
| | | disabFun: (row, index) => { |
| | | return row.isExamine != null |
| | | } |
| | | }, |
| | | { |
| | | id: 'download', |
| | | font: '下载', |
| | | type: 'text', |
| | | method: 'download' |
| | | }, { |
| | | id: 'handleUpload', |
| | | font: '上传', |
| | | type: 'upload', |
| | | uploadConfig: { |
| | | url: this.$api.insReport.inReport, |
| | | accept: '.docx' |
| | | }, |
| | | method: 'handleUpload', |
| | | disabFun: (row, index) => { |
| | | return row.isExamine != null |
| | | } |
| | | }, { |
| | | id: 'handleRestore', |
| | | font: '还原', |
| | | type: 'text', |
| | | method: 'handleRestore', |
| | | disabFun: (row, index) => { |
| | | return row.isExamine != null |
| | | } |
| | | }, { |
| | | id: 'handleSubmit', |
| | | font: '提交', |
| | | type: 'text', |
| | | method: 'handleSubmit', |
| | | disabFun: (row, index) => { |
| | | return row.state != 0 |
| | | } |
| | | }, { |
| | | id: 'handleIssued', |
| | | font: '审核', |
| | | type: 'text', |
| | | method: 'handleIssued', |
| | | disabFun: (row, index) => { |
| | | return row.state == null || row.state == 0 || row.isExamine == 1 |
| | | } |
| | | }, { |
| | | id: 'handleApprove', |
| | | font: '批准', |
| | | type: 'text', |
| | | method: 'handleApprove', |
| | | disabFun: (row, index) => { |
| | | return row.state == null || row.state == 0 || row.isExamine == 0 || row.isExamine == null || row |
| | | .isRatify == 1 |
| | | } |
| | | } |
| | | ], |
| | | linkEvent: { |
| | | code: { |
| | | method: 'selectAllByOne' |
| | | } |
| | | }, |
| | | tagField: { |
| | | isRatify: { |
| | | select: [{ |
| | | value: 0, |
| | | type: 'danger', |
| | | label: '不批准' |
| | | }, { |
| | | value: 1, |
| | | type: 'success', |
| | | label: '批准' |
| | | }] |
| | | }, |
| | | isExamine: { |
| | | select: [{ |
| | | value: 0, |
| | | type: 'danger', |
| | | label: '不通过' |
| | | }, { |
| | | value: 1, |
| | | type: 'success', |
| | | label: '通过' |
| | | }] |
| | | }, |
| | | state: { |
| | | select: [{ |
| | | value: 0, |
| | | type: 'danger', |
| | | label: '待提交' |
| | | }, { |
| | | value: 1, |
| | | type: 'success', |
| | | label: '已提交' |
| | | }] |
| | | } |
| | | }, |
| | | selectField: {}, |
| | | requiredAdd: [], |
| | | requiredUp: [] |
| | | import ValueTable from '../tool/value-table.vue' |
| | | import onlyoffice from '../tool/onlyoffice.vue' |
| | | import Order from '../do/b1-report-preparation/order.vue' |
| | | import filePreview from '../tool/file-preview.vue' |
| | | export default { |
| | | components: { |
| | | ValueTable, |
| | | onlyoffice, |
| | | Order, |
| | | filePreview |
| | | }, |
| | | data() { |
| | | return { |
| | | lookFileVisible: false, |
| | | currentFile: { |
| | | url: '' |
| | | }, |
| | | radio: 0, |
| | | componentData: { |
| | | entity: { |
| | | entrustCode: null, |
| | | code: null, |
| | | sampleCode: null, |
| | | orderBy: { |
| | | field: 'id', |
| | | order: 'desc' |
| | | } |
| | | }, |
| | | entityCopy: {}, |
| | | upIndex: 0, |
| | | statusList: [], |
| | | claimVisible: false, |
| | | issuedVisible: false, |
| | | issuedReasonVisible: false, |
| | | approveVisible: false, |
| | | approveReasonVisible: false, |
| | | fullscreen: false, |
| | | loadingApproveReason: false, |
| | | loadingApprove: false, |
| | | loadingIssuedReason: false, |
| | | loadingIssued: false, |
| | | value: ``, |
| | | reason: '', |
| | | currentInfo: null, |
| | | isIndex: true, |
| | | showSelect: true, |
| | | select: true, |
| | | selectMethod: 'handleChange', |
| | | do: [ |
| | | // { |
| | | // id: 'handleWeave', |
| | | // font: '编制', |
| | | // type: 'text', |
| | | // method: 'handleWeave', |
| | | // disabFun: (row, index) => { |
| | | // return row.isExamine != null |
| | | // } |
| | | // }, |
| | | { |
| | | id: 'download', |
| | | font: '下载', |
| | | type: 'text', |
| | | method: 'download' |
| | | }, { |
| | | id: 'handleUpload', |
| | | font: '上传', |
| | | type: 'upload', |
| | | uploadConfig: { |
| | | url: this.$api.insReport.inReport, |
| | | accept: '.docx' |
| | | }, |
| | | method: 'handleUpload', |
| | | disabFun: (row, index) => { |
| | | return row.isExamine != null || row.orderType == 'C' |
| | | } |
| | | }, { |
| | | id: 'handleRestore', |
| | | font: '还原', |
| | | type: 'text', |
| | | method: 'handleRestore', |
| | | disabFun: (row, index) => { |
| | | return row.isExamine != null || row.orderType == 'C' |
| | | } |
| | | }, { |
| | | id: 'handleSubmit', |
| | | font: '提交', |
| | | type: 'text', |
| | | method: 'handleSubmit', |
| | | disabFun: (row, index) => { |
| | | return row.state != 0 |
| | | } |
| | | }, { |
| | | id: 'handleIssued', |
| | | font: '审核', |
| | | type: 'text', |
| | | method: 'handleIssued', |
| | | disabFun: (row, index) => { |
| | | return row.state == null || row.state == 0 || row.isExamine == 1 |
| | | } |
| | | }, { |
| | | id: 'handleApprove', |
| | | font: '批准', |
| | | type: 'text', |
| | | method: 'handleApprove', |
| | | disabFun: (row, index) => { |
| | | return row.state == null || row.state == 0 || row.isExamine == 0 || row.isExamine == null || row |
| | | .isRatify == 1 |
| | | } |
| | | } |
| | | ], |
| | | linkEvent: { |
| | | code: { |
| | | method: 'selectAllByOne' |
| | | } |
| | | }, |
| | | tagField: { |
| | | isRatify: { |
| | | select: [{ |
| | | value: 0, |
| | | type: 'danger', |
| | | label: '不批准' |
| | | }, { |
| | | value: 1, |
| | | type: 'success', |
| | | label: '批准' |
| | | }] |
| | | }, |
| | | isExamine: { |
| | | select: [{ |
| | | value: 0, |
| | | type: 'danger', |
| | | label: '不通过' |
| | | }, { |
| | | value: 1, |
| | | type: 'success', |
| | | label: '通过' |
| | | }] |
| | | }, |
| | | state: { |
| | | select: [{ |
| | | value: 0, |
| | | type: 'danger', |
| | | label: '待提交' |
| | | }, { |
| | | value: 1, |
| | | type: 'success', |
| | | label: '已提交' |
| | | }] |
| | | } |
| | | }, |
| | | selectField: {}, |
| | | requiredAdd: [], |
| | | needSort: ['createTime', 'state', 'writeTime', 'isExamine', 'examineTime', 'ratifyTime'], |
| | | requiredUp: [] |
| | | }, |
| | | entityCopy: {}, |
| | | upIndex: 0, |
| | | statusList: [], |
| | | claimVisible: false, |
| | | issuedVisible: false, |
| | | issuedReasonVisible: false, |
| | | approveVisible: false, |
| | | approveReasonVisible: false, |
| | | fullscreen: false, |
| | | loadingApproveReason: false, |
| | | loadingApprove: false, |
| | | loadingIssuedReason: false, |
| | | loadingIssued: false, |
| | | value: ``, |
| | | reason: '', |
| | | currentInfo: null, |
| | | option: null, |
| | | mutiList: [], |
| | | outLoading: false, |
| | | inLoading: false, |
| | | imgList: [], |
| | | imgVisible: false, |
| | | currentImg: null, |
| | | viewIssuedVisible: false |
| | | } |
| | | }, |
| | | computed: { |
| | | headers() { |
| | | return { |
| | | 'token': sessionStorage.getItem('token') |
| | | } |
| | | }, |
| | | mounted() { |
| | | this.entityCopy = this.HaveJson(this.componentData.entity) |
| | | this.getPower() |
| | | action() { |
| | | return this.javaApi + this.$api.insReport.upAll |
| | | } |
| | | }, |
| | | mounted() { |
| | | this.entityCopy = this.HaveJson(this.componentData.entity) |
| | | this.getPower() |
| | | |
| | | // let that = this; |
| | | // let input = document.getElementById('input'); |
| | | // input.onchange = function(){ |
| | | // let file = this.files[0]; |
| | | // let reader = new FileReader(); |
| | | // reader.readAsArrayBuffer(file); |
| | | // reader.onload = function(loadEvent){ |
| | | // convertToHtml({ |
| | | // arrayBuffer: loadEvent.target.result }) |
| | | // .then(res=>{ |
| | | // that.value = res.value |
| | | // .replace('<h1>', '<h1 style="text-align: center;">') |
| | | // .replace('<h2>', '<h2 style="text-align: center;">') |
| | | // .replace('<img ','<img style="height:3.6cm;width:3.6cm"') |
| | | // .replace(/<table>/g, '<table style="border-collapse: collapse;border: 1px solid #000;">') |
| | | // .replace(/<tr>/g, '<tr style="height: 30px;">') |
| | | // .replace(/<td>/g, '<td style="border: 1px solid #000;">') |
| | | // .replace(/<p>/g, '<p style="text-indent: 2em;">') |
| | | // .replace(/<a [^>]*>/g, "") |
| | | // .replace(/<\/a>/g, "") |
| | | // console.log(11111111111,that.value) |
| | | // that.claimVisible = true; |
| | | // }) |
| | | // .done(); |
| | | // } |
| | | // } |
| | | // let that = this; |
| | | // let input = document.getElementById('input'); |
| | | // input.onchange = function(){ |
| | | // let file = this.files[0]; |
| | | // let reader = new FileReader(); |
| | | // reader.readAsArrayBuffer(file); |
| | | // reader.onload = function(loadEvent){ |
| | | // convertToHtml({ |
| | | // arrayBuffer: loadEvent.target.result }) |
| | | // .then(res=>{ |
| | | // that.value = res.value |
| | | // .replace('<h1>', '<h1 style="text-align: center;">') |
| | | // .replace('<h2>', '<h2 style="text-align: center;">') |
| | | // .replace('<img ','<img style="height:3.6cm;width:3.6cm"') |
| | | // .replace(/<table>/g, '<table style="border-collapse: collapse;border: 1px solid #000;">') |
| | | // .replace(/<tr>/g, '<tr style="height: 30px;">') |
| | | // .replace(/<td>/g, '<td style="border: 1px solid #000;">') |
| | | // .replace(/<p>/g, '<p style="text-indent: 2em;">') |
| | | // .replace(/<a [^>]*>/g, "") |
| | | // .replace(/<\/a>/g, "") |
| | | // console.log(11111111111,that.value) |
| | | // that.claimVisible = true; |
| | | // }) |
| | | // .done(); |
| | | // } |
| | | // } |
| | | }, |
| | | methods: { |
| | | handleChange(arr) { |
| | | this.mutiList = arr |
| | | }, |
| | | methods: { |
| | | refreshTable() { |
| | | this.$refs['ValueTable'].selectList() |
| | | }, |
| | | refresh() { |
| | | this.componentData.entity = this.HaveJson(this.entityCopy) |
| | | this.upIndex++ |
| | | }, |
| | | async handleWeave(row) { |
| | | const userName = JSON.parse(localStorage.getItem("user")).name; |
| | | //参考vabOnlyOffice组件参数配置 |
| | | const { href } = this.$router.resolve({ |
| | | path: `/wordEdit`, |
| | | query: { |
| | | url: this.javaApi + "/word/" + row.entrustCode + ".docx", |
| | | isEdit: true, |
| | | fileType: "docx", |
| | | title: row.entrustCode + ".docx", |
| | | lang: 'zh-CN', |
| | | isPrint: true, |
| | | user: { id: 1, name: userName}, |
| | | editUrl: this.javaApi + "/insReport/onlyOffice/save?fileName=" + row.entrustCode + ".docx" |
| | | } |
| | | }) |
| | | window.open(href, '_blank'); |
| | | }, |
| | | // 权限分配 |
| | | getPower(radio) { |
| | | let power = JSON.parse(sessionStorage.getItem('power')) |
| | | let edit = false |
| | | let up = false |
| | | let res = false |
| | | let sub = false |
| | | let issued = true |
| | | let approve = true |
| | | for (var i = 0; i < power.length; i++) { |
| | | if (power[i].menuMethod == 'upReportFile') { |
| | | edit = true |
| | | } |
| | | if (power[i].menuMethod == 'inReport') { |
| | | up = true |
| | | } |
| | | if (power[i].menuMethod == 'upReportUrl') { |
| | | res = true |
| | | } |
| | | if (power[i].menuMethod == 'writeReport') { |
| | | sub = true |
| | | } |
| | | } |
| | | if (!approve) { |
| | | this.componentData.do.splice(5, 1) |
| | | } |
| | | if (!issued) { |
| | | this.componentData.do.splice(4, 1) |
| | | } |
| | | if (!sub) { |
| | | this.componentData.do.splice(3, 1) |
| | | } |
| | | if (!res) { |
| | | this.componentData.do.splice(2, 1) |
| | | } |
| | | if (!up) { |
| | | this.componentData.do.splice(1, 1) |
| | | } |
| | | // if (!edit) { |
| | | // this.componentData.do.splice(0, 1) |
| | | // } |
| | | }, |
| | | confirmClaim() { |
| | | // console.log(this.$refs.Word.getValue()) |
| | | }, |
| | | async selectAllByOne(row) { |
| | | const userName = JSON.parse(localStorage.getItem("user")).name; |
| | | //参考vabOnlyOffice组件参数配置 |
| | | const { href } = this.$router.resolve({ |
| | | path: `/wordEdit`, |
| | | query: { |
| | | url: this.javaApi + "/word/" + row.entrustCode + ".docx", |
| | | isEdit: "false", |
| | | fileType: "docx", |
| | | title: row.entrustCode + ".docx", |
| | | lang: 'zh-CN', |
| | | isPrint: true, |
| | | user_id: 1, |
| | | user_name: userName |
| | | } |
| | | }) |
| | | window.open(href, '_blank'); |
| | | console.log(`output->row`,row) |
| | | }, |
| | | download(row) { |
| | | let url = row.urlS ? row.urlS : row.url; |
| | | handleDowns() { |
| | | if (this.mutiList.length == 0) { |
| | | this.$message.error('请选择报告') |
| | | return |
| | | } |
| | | let str = this.mutiList.map(m => m.id).join(',') |
| | | this.outLoading = true |
| | | this.$axios.get(this.$api.insReport.downAll + '?ids=' + str).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 = '报告.zip'; |
| | | // link.click(); |
| | | const link = document.createElement('a'); |
| | | link.href = this.javaApi + url; |
| | | link.href = this.javaApi + res.message; |
| | | link.target = '_blank'; |
| | | document.body.appendChild(link); |
| | | link.click(); |
| | | }, |
| | | handleRestore(row) { |
| | | this.$axios.post(this.$api.insReport.upReportUrl, { |
| | | }) |
| | | }, |
| | | beforeUpload(file) { |
| | | const isZip = file.type === 'application/zip' || file.name.endsWith('.zip'); |
| | | if (!isZip) { |
| | | this.$message.error('上传文件只能是 ZIP 格式!'); |
| | | } |
| | | if (isZip) { |
| | | this.inLoading = true; |
| | | } |
| | | return isZip; |
| | | }, |
| | | handleSuccess(response,) { |
| | | this.inLoading = false; |
| | | if (response.code == 200) { |
| | | this.$message.success('导入成功') |
| | | this.refreshTable() |
| | | } else { |
| | | this.$message.error(response.message) |
| | | } |
| | | }, |
| | | async selectSeal(row) { |
| | | await this.$axios.post(this.$api.sealScope.selectSeal, { |
| | | entity: { |
| | | labId: row.labId, |
| | | orderBy: { |
| | | field: 'id', |
| | | order: 'asc' |
| | | } |
| | | }, |
| | | page: { |
| | | current: -1, |
| | | size: -1 |
| | | } |
| | | }, { |
| | | headers: { |
| | | 'Content-Type': 'application/json' |
| | | } |
| | | }).then(res => { |
| | | this.imgList = res.data.body.records.map((m, i) => { |
| | | m.id = i + 1 |
| | | return m |
| | | }) |
| | | }) |
| | | }, |
| | | onError(err, file, fileList, type) { |
| | | this.$message.error('上传失败') |
| | | this.$refs.upload.clearFiles() |
| | | }, |
| | | refreshTable(e) { |
| | | this.$refs['ValueTable'].selectList(e) |
| | | }, |
| | | refresh() { |
| | | this.componentData.entity = this.HaveJson(this.entityCopy) |
| | | this.upIndex++ |
| | | this.$refs['ValueTable'].selectList(e) |
| | | }, |
| | | async handleWeave(row) { |
| | | let fileName = (row.urlS === null || row.urlS === '') ? row.url : row.urlS |
| | | fileName = fileName.replace('/word/', '') |
| | | const userName = JSON.parse(localStorage.getItem("user")).name; |
| | | //参考vabOnlyOffice组件参数配置 |
| | | const { href } = this.$router.resolve({ |
| | | path: `/wordEdit`, |
| | | query: { |
| | | url: this.javaApi + "/word/" + fileName, |
| | | isEdit: true, |
| | | fileType: "docx", |
| | | title: fileName, |
| | | lang: 'zh-CN', |
| | | isPrint: true, |
| | | user_id: 1, |
| | | user_name: userName, |
| | | editUrl: this.javaApi + "/insReport/onlyOffice/save?fileName=" + fileName |
| | | } |
| | | }) |
| | | window.open(href, '_blank'); |
| | | }, |
| | | // 权限分配 |
| | | getPower(radio) { |
| | | let power = JSON.parse(sessionStorage.getItem('power')) |
| | | let edit = false |
| | | let up = false |
| | | let res = false |
| | | let sub = false |
| | | let issued = true |
| | | let approve = true |
| | | for (var i = 0; i < power.length; i++) { |
| | | if (power[i].menuMethod == 'upReportFile') { |
| | | edit = true |
| | | } |
| | | if (power[i].menuMethod == 'inReport') { |
| | | up = true |
| | | } |
| | | if (power[i].menuMethod == 'upReportUrl') { |
| | | res = true |
| | | } |
| | | if (power[i].menuMethod == 'writeReport') { |
| | | sub = true |
| | | } |
| | | if (power[i].menuMethod == 'ratifyReport') { |
| | | approve = true |
| | | } |
| | | if (power[i].menuMethod == 'examineReport') { |
| | | issued = true |
| | | } |
| | | } |
| | | if (!approve) { |
| | | this.componentData.do.splice(5, 1) |
| | | } |
| | | if (!issued) { |
| | | this.componentData.do.splice(4, 1) |
| | | } |
| | | if (!sub) { |
| | | this.componentData.do.splice(3, 1) |
| | | } |
| | | if (!res) { |
| | | this.componentData.do.splice(2, 1) |
| | | } |
| | | if (!up) { |
| | | this.componentData.do.splice(1, 1) |
| | | } |
| | | // if (!edit) { |
| | | // this.componentData.do.splice(0, 1) |
| | | // } |
| | | }, |
| | | confirmClaim() { |
| | | // console.log(this.$refs.Word.getValue()) |
| | | }, |
| | | async selectAllByOne(row) { |
| | | // let url = row.urlS ? row.urlS : row.url; |
| | | // this.currentFile.url = this.javaApi + url; |
| | | // let fileName = (row.urlS===null||row.urlS==='')?row.url:row.urlS |
| | | // fileName = fileName.replace('/word/','') |
| | | // const userName = JSON.parse(localStorage.getItem("user")).name; |
| | | // //参考vabOnlyOffice组件参数配置 |
| | | // const { href } = this.$router.resolve({ |
| | | // path: `/wordEdit`, |
| | | // query: { |
| | | // url: this.javaApi + "/word/" + fileName, |
| | | // isEdit: false, |
| | | // fileType: "docx", |
| | | // title: fileName, |
| | | // lang: 'zh-CN', |
| | | // isPrint: true, |
| | | // user_id: 1, |
| | | // user_name: userName, |
| | | // } |
| | | // }) |
| | | // window.open(href, '_blank'); |
| | | // this.lookFileVisible = true |
| | | this.currentInfo = row; |
| | | console.log(`output->row`, row); |
| | | let fileName = (row.urlS === null || row.urlS === '') ? row.url : row.urlS |
| | | let fileType = "docx" |
| | | if (row.tempUrlPdf != null || row.tempUrlPdf === '') { |
| | | fileName = row.tempUrlPdf |
| | | fileType = "pdf" |
| | | } |
| | | fileName = fileName.replace('/word/', '') |
| | | const userName = JSON.parse(localStorage.getItem("user")).name; |
| | | this.option = { |
| | | url: this.javaApi + "/word/" + fileName, |
| | | isEdit: false, |
| | | fileType: fileType, |
| | | title: fileName, |
| | | lang: 'zh-CN', |
| | | isPrint: false, |
| | | user_id: 1, |
| | | user_name: userName, |
| | | editUrl: this.javaApi + "/insReport/onlyOffice/save?fileName=" + fileName |
| | | } |
| | | // console.log(this.javaApi + "/word/" + fileName); |
| | | this.viewIssuedVisible = true; |
| | | }, |
| | | download(row) { |
| | | // 判断row对象中是否存在urlS属性,若存在则使用urlS,否则使用url |
| | | let url = row.urlS ? row.urlS : row.url; |
| | | |
| | | // 创建一个<a>标签元素 |
| | | const link = document.createElement('a'); |
| | | |
| | | // 设置<a>标签的href属性,为javaApi和url的组合 |
| | | link.href = this.javaApi + url; |
| | | |
| | | // 设置<a>标签的target属性为'_blank',表示在新窗口中打开链接 |
| | | link.target = '_blank'; |
| | | |
| | | // 将<a>标签添加到文档的主体中 |
| | | document.body.appendChild(link); |
| | | |
| | | link.click(); |
| | | }, |
| | | // 还原操作 |
| | | handleRestore(row) { |
| | | this.$axios.post(this.$api.insReport.upReportUrl, { |
| | | id: row.id |
| | | }).then(res => { |
| | | if (res.code === 200) { |
| | | this.$message.success('操作成功') |
| | | this.refreshTable('page') |
| | | } |
| | | }) |
| | | }, |
| | | handleIssued(row) { |
| | | this.currentInfo = row; |
| | | // let url = row.urlS ? row.urlS : row.url; |
| | | // this.currentFile.url = this.javaApi + url; |
| | | let fileName = (row.urlS === null || row.urlS === '') ? row.url : row.urlS |
| | | fileName = fileName.replace('/word/', '') |
| | | const userName = JSON.parse(localStorage.getItem("user")).name; |
| | | //参考vabOnlyOffice组件参数配置 |
| | | this.option = { |
| | | url: this.javaApi + "/word/" + fileName, |
| | | isEdit: false, |
| | | fileType: "docx", |
| | | title: fileName, |
| | | lang: 'zh-CN', |
| | | isPrint: true, |
| | | user_id: 1, |
| | | user_name: userName, |
| | | } |
| | | this.issuedVisible = true; |
| | | }, |
| | | // 审核通过 |
| | | subIssued() { |
| | | this.loadingIssued = true; |
| | | this.$axios.post(this.$api.insReport.examineReport, { |
| | | id: this.currentInfo.id, |
| | | isExamine: 1 |
| | | }).then(res => { |
| | | this.loadingIssued = false; |
| | | if (res.code === 201) { |
| | | return |
| | | } |
| | | this.$message.success('提交成功') |
| | | this.refreshTable('page') |
| | | this.currentInfo = null; |
| | | this.issuedVisible = false; |
| | | }).catch(e => { |
| | | this.$message.error('提交失败') |
| | | this.loadingIssued = false; |
| | | }) |
| | | }, |
| | | handleApprove(row) { |
| | | this.currentInfo = row; |
| | | // let url = row.urlS ? row.urlS : row.url; |
| | | // this.currentFile.url = this.javaApi + url; |
| | | let fileName = (row.urlS === null || row.urlS === '') ? row.url : row.urlS |
| | | fileName = fileName.replace('/word/', '') |
| | | const userName = JSON.parse(localStorage.getItem("user")).name; |
| | | //参考vabOnlyOffice组件参数配置 |
| | | this.option = { |
| | | url: this.javaApi + "/word/" + fileName, |
| | | isEdit: false, |
| | | fileType: "docx", |
| | | title: fileName, |
| | | lang: 'zh-CN', |
| | | isPrint: true, |
| | | user_id: 1, |
| | | user_name: userName, |
| | | } |
| | | this.approveVisible = true; |
| | | }, |
| | | // 批准通过 |
| | | async subApprove() { |
| | | // this.currentInfo |
| | | await this.selectSeal(this.currentInfo) |
| | | this.approveVisible = false; |
| | | this.imgVisible = true; |
| | | }, |
| | | // 提交操作 |
| | | handleSubmit(row) { |
| | | this.$confirm('是否提交当前报告?', "提交", { |
| | | confirmButtonText: "提交", |
| | | cancelButtonText: "取消", |
| | | type: "warning" |
| | | }).then(() => { |
| | | this.$axios.post(this.$api.insReport.writeReport, { |
| | | id: row.id |
| | | }).then(res => { |
| | | if (res.code === 200) { |
| | | this.$message.success('操作成功') |
| | | this.refreshTable() |
| | | } |
| | | }) |
| | | }, |
| | | handleIssued(row) { |
| | | this.currentInfo = row; |
| | | this.issuedVisible = true; |
| | | }, |
| | | subIssued() { |
| | | this.loadingIssued = true; |
| | | this.$axios.post(this.$api.insReport.examineReport, { |
| | | id: this.currentInfo.id, |
| | | isExamine: 1 |
| | | }).then(res => { |
| | | this.loadingIssued = false; |
| | | if (res.code === 201) { |
| | | return |
| | | } |
| | | this.$message.success('提交成功') |
| | | this.refreshTable() |
| | | this.currentInfo = null; |
| | | this.issuedVisible = false; |
| | | this.refreshTable('page') |
| | | }).catch(e => { |
| | | this.$message.error('提交失败') |
| | | this.loadingIssued = false; |
| | | }) |
| | | }, |
| | | handleApprove(row) { |
| | | this.currentInfo = row; |
| | | this.approveVisible = true; |
| | | }, |
| | | subApprove() { |
| | | this.loadingApprove = true; |
| | | this.$axios.post(this.$api.insReport.ratifyReport, { |
| | | id: this.currentInfo.id, |
| | | isRatify: 1 |
| | | }).then(res => { |
| | | this.loadingApprove = false; |
| | | if (res.code == 201) { |
| | | this.$message.error('批准失败') |
| | | return |
| | | } |
| | | this.$message.success('已批准') |
| | | this.refreshTable() |
| | | this.currentInfo = null; |
| | | this.approveVisible = false; |
| | | }) |
| | | }, |
| | | handleSubmit(row) { |
| | | this.$confirm('是否提交当前报告?', "提交", { |
| | | confirmButtonText: "提交", |
| | | cancelButtonText: "取消", |
| | | type: "warning" |
| | | }).then(() => { |
| | | this.$axios.post(this.$api.insReport.writeReport, { |
| | | id: row.id |
| | | }).then(res => { |
| | | if (res.code === 201) { |
| | | return |
| | | } |
| | | this.$message.success('提交成功') |
| | | this.refreshTable() |
| | | }).catch(e => { |
| | | this.$message.error('提交失败') |
| | | }) |
| | | }).catch(() => {}) |
| | | }, |
| | | handleIssuedReason() { |
| | | if (!this.reason) { |
| | | return this.$message.error('请输入原因') |
| | | } |
| | | this.loadingIssuedReason = true; |
| | | this.$axios.post(this.$api.insReport.examineReport, { |
| | | id: this.currentInfo.id, |
| | | isExamine: 0, |
| | | examineTell: this.reason |
| | | }).then(res => { |
| | | this.loadingIssuedReason = false; |
| | | if (res.code === 201) { |
| | | return |
| | | } |
| | | this.$message.success('操作成功') |
| | | this.refreshTable() |
| | | this.currentInfo = null; |
| | | this.reason = ''; |
| | | this.issuedVisible = false; |
| | | this.issuedReasonVisible = false; |
| | | }).catch(e => { |
| | | this.$message.error('操作失败') |
| | | this.loadingIssuedReason = false; |
| | | }) |
| | | }, |
| | | handleApproveReason() { |
| | | if (!this.reason) { |
| | | return this.$message.error('请输入原因') |
| | | } |
| | | this.loadingApproveReason = true |
| | | this.$axios.post(this.$api.insReport.examineReport, { |
| | | id: this.currentInfo.id, |
| | | isExamine: 0, |
| | | examineTell: this.reason |
| | | }).then(res => { |
| | | this.loadingApproveReason = false |
| | | if (res.code === 201) { |
| | | return |
| | | } |
| | | this.$message.success('操作成功') |
| | | this.refreshTable() |
| | | this.currentInfo = null; |
| | | this.reason = ''; |
| | | this.issuedVisible = false; |
| | | this.issuedReasonVisible = false; |
| | | }).catch(e => { |
| | | this.$message.error('操作失败') |
| | | this.loadingIssuedReason = false; |
| | | }) |
| | | }).catch(() => { }) |
| | | }, |
| | | // 审核不通过原因提交 |
| | | handleIssuedReason() { |
| | | if (!this.reason) { |
| | | return this.$message.error('请输入原因') |
| | | } |
| | | this.loadingIssuedReason = true; |
| | | this.$axios.post(this.$api.insReport.examineReport, { |
| | | id: this.currentInfo.id, |
| | | isExamine: 0, |
| | | examineTell: this.reason |
| | | }).then(res => { |
| | | this.loadingIssuedReason = false; |
| | | if (res.code === 201) { |
| | | return |
| | | } |
| | | this.$message.success('操作成功') |
| | | this.refreshTable('page') |
| | | this.currentInfo = null; |
| | | this.reason = ''; |
| | | this.issuedVisible = false; |
| | | this.issuedReasonVisible = false; |
| | | }).catch(e => { |
| | | this.$message.error('操作失败') |
| | | this.loadingIssuedReason = false; |
| | | }) |
| | | }, |
| | | // 不批准原因提交 |
| | | handleApproveReason() { |
| | | if (!this.reason) { |
| | | return this.$message.error('请输入原因') |
| | | } |
| | | this.loadingApproveReason = true |
| | | this.$axios.post(this.$api.insReport.examineReport, { |
| | | id: this.currentInfo.id, |
| | | isExamine: 0, |
| | | examineTell: this.reason |
| | | }).then(res => { |
| | | this.loadingApproveReason = false |
| | | if (res.code === 201) { |
| | | return |
| | | } |
| | | this.$message.success('操作成功') |
| | | this.refreshTable('page') |
| | | this.currentInfo = null; |
| | | this.reason = ''; |
| | | this.issuedVisible = false; |
| | | this.issuedReasonVisible = false; |
| | | }).catch(e => { |
| | | this.$message.error('操作失败') |
| | | this.loadingIssuedReason = false; |
| | | }) |
| | | }, |
| | | subApprove0() { |
| | | if (!(this.currentImg && this.imgList.find(m => m.id == this.currentImg))) { |
| | | this.$message.error('请选择印章') |
| | | return |
| | | } |
| | | this.loadingApprove = true; |
| | | this.$axios.post(this.$api.insReport.ratifyReport, { |
| | | id: this.currentInfo.id, |
| | | isRatify: 1, |
| | | sealUrl: this.imgList.find(m => m.id == this.currentImg).address |
| | | }).then(res => { |
| | | this.loadingApprove = false; |
| | | if (res.code == 201) { |
| | | this.$message.error('批准失败') |
| | | return |
| | | } |
| | | this.$message.success('已批准') |
| | | this.refreshTable('page') |
| | | this.currentInfo = null; |
| | | this.currentImg = null; |
| | | this.imgVisible = false; |
| | | }) |
| | | } |
| | | } |
| | | } |
| | | </script> |