Merge remote-tracking branch 'origin/dev' into dev
| ¶Ô±ÈÐÂÎļþ |
| | |
| | | import resquest from '@/utils/request' |
| | | |
| | | |
| | | export function pageInsReport(params) { |
| | | return resquest({ |
| | | url: '/insReport/pageInsReport', |
| | | method: 'get', |
| | | params: params |
| | | }) |
| | | } |
| | | |
| | | export function inReport(data) { |
| | | return resquest({ |
| | | url: '/insReport/inReport', |
| | | method: 'post', |
| | | data: data |
| | | }) |
| | | } |
| | | |
| | | export function upAll(data) { |
| | | return resquest({ |
| | | url: '/insReport/upAll', |
| | | method: 'post', |
| | | data: data |
| | | }) |
| | | } |
| | | |
| | | export function getLaboratoryByReportId(params) { |
| | | return resquest({ |
| | | url: '/insReport/getLaboratoryByReportId', |
| | | method: 'get', |
| | | params: params |
| | | }) |
| | | } |
| | | |
| | | export function withdraw(data) { |
| | | return resquest({ |
| | | url: '/insReport/withdraw', |
| | | method: 'post', |
| | | data: data |
| | | }) |
| | | } |
| | | |
| | | export function updateApproveConfig(data) { |
| | | return resquest({ |
| | | url: '/approveConfig/updateApproveConfig', |
| | | method: 'post', |
| | | data: data |
| | | }) |
| | | } |
| | | |
| | | export function getUserList(params) { |
| | | return resquest({ |
| | | url: '/approveConfig/getUserList', |
| | | method: 'get', |
| | | params: params |
| | | }) |
| | | } |
| | | |
| | | export function getApproveConfigList(params) { |
| | | return resquest({ |
| | | url: '/approveConfig/getApproveConfigList', |
| | | method: 'get', |
| | | params: params |
| | | }) |
| | | } |
| | | |
| | | export function batchApprovalReport(data) { |
| | | return resquest({ |
| | | url: '/insReport/batchApprovalReport', |
| | | method: 'post', |
| | | data: data |
| | | }) |
| | | } |
| | | |
| | | export function downAll(params) { |
| | | return resquest({ |
| | | url: '/insReport/downAll', |
| | | method: 'get', |
| | | params: params |
| | | }) |
| | | } |
| | | |
| | | export function getBatchApprovalProgress(params) { |
| | | return resquest({ |
| | | url: '/insReport/getBatchApprovalProgress', |
| | | method: 'get', |
| | | params: params |
| | | }) |
| | | } |
| | | |
| | | export function getReportCountInfo(params) { |
| | | return resquest({ |
| | | url: '/insReport/getReportCountInfo', |
| | | method: 'get', |
| | | params: params |
| | | }) |
| | | } |
| | | |
| | | export function downReport(params) { |
| | | return resquest({ |
| | | url: '/insReport/downReport', |
| | | method: 'get', |
| | | params: params |
| | | }) |
| | | } |
| | | |
| | | export function upReportUrl(data) { |
| | | return resquest({ |
| | | url: '/insReport/upReportUrl', |
| | | method: 'post', |
| | | params: data |
| | | }) |
| | | } |
| | | |
| | | export function examineReport(data) { |
| | | return resquest({ |
| | | url: '/insReport/examineReport', |
| | | method: 'post', |
| | | data: data |
| | | }) |
| | | } |
| | | |
| | | export function ratifyReport(data) { |
| | | return resquest({ |
| | | url: '/insReport/ratifyReport', |
| | | method: 'post', |
| | | data: data |
| | | }) |
| | | } |
| | | |
| | | export function writeReport(data) { |
| | | return resquest({ |
| | | url: '/insReport/writeReport', |
| | | method: 'post', |
| | | params: data |
| | | }) |
| | | } |
| | | |
| | | |
| | | export function downLoad(params) { |
| | | return resquest({ |
| | | url: '/file/attachmentType/downLoad', |
| | | method: 'get', |
| | | params: params, |
| | | responseType: 'blob' |
| | | }) |
| | | } |
| | | |
| | | export function getReportInfo(params) { |
| | | return resquest({ |
| | | url: '/file/attachmentType/getMIME', |
| | | method: 'get', |
| | | params: params |
| | | }) |
| | | } |
| | | |
| | | |
| | | export function getURL(params) { |
| | | return resquest({ |
| | | url: '/file/attachmentType/getURL', |
| | | method: 'get', |
| | | params: params |
| | | }) |
| | | } |
| | |
| | | " |
| | | :sortable="item.sortable ? true : false" |
| | | :type="item.type" |
| | | :width=" |
| | | item.dataType === 'action' ? getWidth(item.operation) : item.width |
| | | " |
| | | align="center" |
| | | :width="item.dataType == 'action' ? btnWidth : item.width" |
| | | > |
| | | <!-- <div class="123" v-if="item.type == ''"> --> |
| | | <template |
| | |
| | | </div> |
| | | |
| | | <!-- æé® --> |
| | | <div v-else-if="item.dataType == 'action'"> |
| | | <div |
| | | v-else-if="item.dataType == 'action'" |
| | | :style="`width:${getWidth(item.operation, scope.row)}`" |
| | | > |
| | | <template v-for="(o, key) in item.operation"> |
| | | <el-button |
| | | v-show="o.type != 'upload'" |
| | |
| | | {{ o.name }} |
| | | </el-button> |
| | | <el-upload |
| | | :action=" |
| | | javaApi + |
| | | o.url + |
| | | '?id=' + |
| | | (o.uploadIdFun ? o.uploadIdFun(scope.row) : scope.row.id) |
| | | " |
| | | :action="javaApi + o.url" |
| | | size="mini" |
| | | ref="upload" |
| | | :multiple="o.multiple ? o.multiple : false" |
| | | :limit="1" |
| | | :disabled="o.disabled ? o.disabled(scope.row) : false" |
| | | :accept=" |
| | | o.accept |
| | |
| | | " |
| | | v-if="o.type == 'upload' && o.url" |
| | | style="display: inline-block; width: 50px" |
| | | :data="o.data ? o.data(scope.row) : {}" |
| | | :before-upload=" |
| | | o.beforeUpload ? o.beforeUpload(scope.row) : () => true |
| | | " |
| | | v-show="o.showHide ? o.showHide(scope.row) : true" |
| | | :headers="uploadHeader" |
| | | :on-error="onError" |
| | |
| | | data() { |
| | | return { |
| | | spanList: [], |
| | | btnWidth: "120px", |
| | | }; |
| | | }, |
| | | watch: { |
| | | column(val) { |
| | | this.doLayout(); |
| | | }, |
| | | }, |
| | | mounted() { |
| | | this.calculateSpanInfo(); |
| | | }, |
| | | methods: { |
| | | getWidth(row) { |
| | | getWidth(row, row0) { |
| | | let count = 0; |
| | | row.forEach((a) => { |
| | | if (a.showHide !== undefined && a.showHide()) { |
| | | if (a.showHide !== undefined && a.showHide(row0)) { |
| | | count += a.name.length; |
| | | } else if (!a.showHide) { |
| | | count += a.name.length; |
| | | } |
| | | }); |
| | | this.btnWidth = count * 15 + 70 + "px"; |
| | | return count * 15 + 70 + "px"; |
| | | }, |
| | | iconFn(row) { |
| | |
| | | this.$message.success("ä¸ä¼ æå"); |
| | | } |
| | | } |
| | | this.$refs.upload.clearFiles(); |
| | | }, |
| | | onError(err, file, fileList) { |
| | | this.$message.error("ä¸ä¼ 失败"); |
| | |
| | | }; |
| | | Vue.prototype.javaApi = process.env.VUE_APP_BASE_API |
| | | ? process.env.VUE_APP_BASE_API |
| | | : "http://192.168.0.104:8002"; |
| | | : "http://127.0.0.1:8002"; |
| | | Vue.prototype.checkPermi = checkPermi; |
| | | Vue.prototype.uploadHeader = { |
| | | Authorization: "Bearer " + getToken(), |
| | |
| | | </div> |
| | | </template> |
| | | <template v-slot:table> |
| | | <limsTable :column="yearPlanColumn" :currentChange="currentChange" :height="'130'" |
| | | <limsTable :column="yearPlanColumn" :currentChange="currentChange" :height="'28vh'" |
| | | :table-data="yearPlanTableData" :table-loading="yearLoading" highlightCurrentRow style="padding: 0 15px" |
| | | :page="pagination" @pagination="paginationMetod"> |
| | | </limsTable> |
| | |
| | | <template v-slot:table> |
| | | <el-tabs v-model="activeName" style="margin-left: 15px"> |
| | | <el-tab-pane label="æªå¹è®" name="first"> |
| | | <limsTable :column="inDetailPlanColumn" :handleSelectionChange="handleSelectionChange" |
| | | :height="tableHeight + ''" :isSelection="true" :table-data="inDetailPlanTableData" |
| | | :table-loading="yearLoading" style="padding: 0 15px" :page="inDetailPagination" |
| | | @pagination="paginationmethod0"> |
| | | <limsTable :column="inDetailPlanColumn" :handleSelectionChange="handleSelectionChange" :height="'28vh'" |
| | | :isSelection="true" :table-data="inDetailPlanTableData" :table-loading="yearLoading" |
| | | style="padding: 0 15px" :page="inDetailPagination" @pagination="paginationmethod0"> |
| | | </limsTable> |
| | | </el-tab-pane> |
| | | <el-tab-pane label="å·²ç»æ" name="second"> |
| | | <limsTable :column="inDetailPlanColumn" :handleSelectionChange="handleSelectionChange" |
| | | :height="tableHeight + ''" :isSelection="true" :table-data="inDetailPlanTableData" |
| | | :table-loading="yearLoading" style="padding: 0 15px" :page="inDetailPagination" |
| | | @pagination="paginationmethod0"> |
| | | <limsTable :column="inDetailPlanColumn" :handleSelectionChange="handleSelectionChange" :height="'28vh'" |
| | | :isSelection="true" :table-data="inDetailPlanTableData" :table-loading="yearLoading" |
| | | style="padding: 0 15px" :page="inDetailPagination" @pagination="paginationmethod0"> |
| | | </limsTable> |
| | | </el-tab-pane> |
| | | </el-tabs> |
| | |
| | | <el-button size="small" @click="clearYear">æ¸
空</el-button> |
| | | </div> |
| | | <!-- <UploadExcel v-if="isShowButton" @upload="getYearPlanList"></UploadExcel> --> |
| | | <el-upload ref="upload" v-if="isShowButton" :action="action" :data="uploadData" |
| | | :headers="uploadHeader" :before-upload="beforeUpload" :on-success="onSuccess"> |
| | | <el-upload ref="upload" :action="action" :data="uploadData" :headers="uploadHeader" |
| | | :before-upload="beforeUpload" :on-success="onSuccess"> |
| | | <el-button size="small" type="primary">导å
¥</el-button> |
| | | </el-upload> |
| | | |
| | |
| | | > |
| | | <lims-table |
| | | highlightCurrentRow |
| | | :heigt="'80vh'" |
| | | :height="'80vh'" |
| | | :tableData="dataLooktableData" |
| | | :column="dataLookcolumn" |
| | | :column="dataLookColumn" |
| | | :tableLoading="dataLookTableLoading" |
| | | ></lims-table> |
| | | </el-dialog> |
| | |
| | | width: "120px", |
| | | }, |
| | | { |
| | | label: "æä½", |
| | | dataType: "action", |
| | | fixed: "right", |
| | | label: "æä½", |
| | | operation: [ |
| | | { |
| | | name: "æ°æ®æ¥ç", |
| | | type: "text", |
| | | clickFun: (row) => {}, |
| | | disabled: (row) => { |
| | | return row.state != 1 && row.state != 4; |
| | | }, |
| | | clickFun: (row) => { |
| | | this.handleDataLook(row); |
| | | }, |
| | | showHide: () => { |
| | | return true; |
| | | }, |
| | | }, |
| | | { |
| | |
| | | ], |
| | | }, |
| | | ], |
| | | dataLookTableLoading: false, |
| | | dataLookcolumn: [ |
| | | dataLookColumn: [ |
| | | { |
| | | label: "å§æç¼å·", |
| | | prop: "entrustCode", |
| | |
| | | { |
| | | label: "管å¥è²æ ", |
| | | prop: "bushColor", |
| | | minWidth: "160px", |
| | | width: "160px", |
| | | minWidth: "100px", |
| | | width: "100px", |
| | | }, |
| | | { |
| | | label: "å
纤带ç¼å·", |
| | | prop: "code", |
| | | minWidth: "160px", |
| | | width: "160px", |
| | | minWidth: "120px", |
| | | width: "120px", |
| | | }, |
| | | { |
| | | label: "å
çº¤è²æ ", |
| | | prop: "color", |
| | | minWidth: "160px", |
| | | width: "160px", |
| | | minWidth: "100px", |
| | | width: "100px", |
| | | }, |
| | | { |
| | | label: "æ£éªé¡¹", |
| | |
| | | width: "100px", |
| | | dataType: "tag", |
| | | formatData: (params) => { |
| | | let index = this.urgencyDictList.findIndex( |
| | | (item) => item.dictValue == params |
| | | let index = this.insResultList.findIndex( |
| | | (item) => item.value == params |
| | | ); |
| | | if (index > -1) { |
| | | return this.urgencyDictList[index].dictLabel; |
| | | return this.insResultList[index].label; |
| | | } else { |
| | | return null; |
| | | } |
| | | }, |
| | | formatType: (params) => { |
| | | let index = this.urgencyDictList.findIndex( |
| | | (item) => item.dictValue == params |
| | | let index = this.insResultList.findIndex( |
| | | (item) => item.value == params |
| | | ); |
| | | if (index > -1) { |
| | | return this.urgencyDictList[index].listClass; |
| | | return this.insResultList[index].type; |
| | | } else { |
| | | return null; |
| | | } |
| | |
| | | { |
| | | label: "æ£éªæ¥æ", |
| | | prop: "checkTime", |
| | | minWidth: "120px", |
| | | width: "120px", |
| | | minWidth: "140px", |
| | | width: "140px", |
| | | }, |
| | | { |
| | | label: "æ ·ååç§°", |
| | |
| | | }, |
| | | { |
| | | dataType: "action", |
| | | fixed: "right", |
| | | label: "æä½", |
| | | fixed: "right", |
| | | operation: [ |
| | | { |
| | | name: "æ¥ç", |
| | | type: "text", |
| | | clickFun: (row) => {}, |
| | | showHide: (row) => { |
| | | console.log(row); |
| | | console.log(row.inspectionItem); |
| | | return ( |
| | | row.inspectionItem == "åæ ¹åç´çç§" || |
| | | row.inspectionItem.includes("æ¾å¥ç®¡") || |
| | |
| | | ], |
| | | }, |
| | | ], |
| | | dataLookTableLoading: false, |
| | | dataLooktableData: [], |
| | | qrData: [], |
| | | multipleSelection: [], |
| | | sonLaboratoryList: [], |
| | | urgencyDictList: [], |
| | | tableHeight: 0, |
| | | tabList: [ |
| | | { |
| | | label: "å¾
å®¡æ ¸", |
| | | value: 0, |
| | | }, |
| | | { |
| | | label: "å¾
æ£éª", |
| | | value: 1, |
| | | }, |
| | | { |
| | | label: "å·²æ£éª", |
| | | value: 4, |
| | | }, |
| | | { |
| | | label: "éå", |
| | | value: 2, |
| | | }, |
| | | { |
| | | label: "æ¤é", |
| | | value: 3, |
| | | }, |
| | | ], |
| | | insResultList: [ |
| | | { |
| | | value: 1, |
| | | label: "åæ ¼", |
| | | type: "success", |
| | | }, |
| | | { |
| | | value: 0, |
| | | label: "ä¸åæ ¼", |
| | | type: "danger", |
| | | }, |
| | | { |
| | | value: 3, |
| | | label: "ä¸å¤å®", |
| | | type: "", |
| | | }, |
| | | ], |
| | | tabIndex: 0, |
| | | active: 0, //1ï¼ä¸åï¼2ï¼æ¥çï¼3ï¼å®¡æ ¸ï¼4ï¼å
纤é
ç½®,é»è®¤ä¸º0 |
| | | currentId: null, |
| | | more: false, |
| | | |
| | | //old |
| | | tableHeader: [], |
| | |
| | | // 人åå表 |
| | | personList: [], |
| | | currentTableData: [], |
| | | // componentData: { |
| | | // entity: { |
| | | // entrustCode: null, |
| | | // sample: null, |
| | | // sampleName: null, |
| | | // sampleModel: null, |
| | | // sampleCode: null, |
| | | // outEntrustCode: null, |
| | | // state: 0, |
| | | // name: null, |
| | | // engineering: null, |
| | | // production: null, |
| | | // startAndEndTime: [], |
| | | // // orderBy: { |
| | | // // field: '', |
| | | // // order: '' |
| | | // // } |
| | | // }, |
| | | // isIndex: true, |
| | | // showSelect: true, |
| | | // select: true, |
| | | // selectMethod: "selectMethod", |
| | | // do: [ |
| | | // { |
| | | // id: "dataLook", |
| | | // font: "æ°æ®æ¥ç", |
| | | // type: "text", |
| | | // method: "handleDataLook", |
| | | // disabFun: (row, index) => { |
| | | // return row.state != 1 && row.state != 4; |
| | | // }, |
| | | // }, |
| | | // { |
| | | // id: "download", |
| | | // font: "æ¥åä¸è½½", |
| | | // type: "text", |
| | | // method: "download", |
| | | // disabFun: (row, index) => { |
| | | // return row.state != 4 || row.isRatify != 1; |
| | | // }, |
| | | // }, |
| | | // { |
| | | // id: "verify", |
| | | // font: "å®¡æ ¸", |
| | | // type: "text", |
| | | // method: "handleVerify", |
| | | // disabFun: (row, index) => { |
| | | // return row.state != 0; |
| | | // }, |
| | | // }, |
| | | // { |
| | | // id: "quash", |
| | | // font: "æ¤é", |
| | | // type: "text", |
| | | // method: "handlEquash", |
| | | // disabFun: (row, index) => { |
| | | // return row.state != 1 && row.state != 0; |
| | | // }, |
| | | // }, |
| | | // { |
| | | // id: "quashCheck", |
| | | // font: "æ¤éå®¡æ ¸", |
| | | // type: "text", |
| | | // method: "handlEquashCheck", |
| | | // disabFun: (row, index) => { |
| | | // return ( |
| | | // (row.state != 1 && row.state != 0) || |
| | | // this.tabIndex != 1 || |
| | | // row.isRevocation != 1 |
| | | // ); |
| | | // }, |
| | | // }, |
| | | // { |
| | | // font: "åé
", |
| | | // type: "text", |
| | | // method: "handleIssued", |
| | | // disabFun: (row, index) => { |
| | | // return ( |
| | | // row.state != 1 || |
| | | // (row.entrustCode != null && |
| | | // Number(row.assign) > 0 && |
| | | // row.inspectId != null) |
| | | // ); |
| | | // }, |
| | | // }, |
| | | // ], |
| | | // linkEvent: { |
| | | // sampleName: { |
| | | // method: "selectAllByOne", |
| | | // }, |
| | | // }, |
| | | // tagField: { |
| | | // type: { |
| | | // select: [], |
| | | // }, |
| | | // createUser: { |
| | | // select: [], |
| | | // }, |
| | | // orderType: { |
| | | // select: [], |
| | | // }, |
| | | // processing: { |
| | | // select: [ |
| | | // { |
| | | // value: 1, |
| | | // label: "å®éªå®¤å¤ç", |
| | | // }, |
| | | // { |
| | | // value: 0, |
| | | // label: "å§æåä½åå", |
| | | // }, |
| | | // ], |
| | | // }, |
| | | // isLeave: { |
| | | // select: [ |
| | | // { |
| | | // value: 1, |
| | | // label: "çæ ·", |
| | | // }, |
| | | // { |
| | | // value: 0, |
| | | // label: "ä¸çæ ·", |
| | | // }, |
| | | // ], |
| | | // }, |
| | | // send: { |
| | | // select: [ |
| | | // { |
| | | // value: 1, |
| | | // label: "èªå", |
| | | // }, |
| | | // { |
| | | // value: 0, |
| | | // label: "å
¶ä»", |
| | | // }, |
| | | // ], |
| | | // }, |
| | | // }, |
| | | // selectField: {}, |
| | | // requiredAdd: [], |
| | | // requiredUp: [], |
| | | // needSort: ["createTime", "sendTime", "type", "appointed"], |
| | | // }, |
| | | orderId: "", |
| | | revocationInsProductIds: "", |
| | | // componentDataDataLook: { |
| | | // isPage: false, |
| | | // entity: { |
| | | // id: 0, |
| | | // orderBy: { |
| | | // field: "sampleCode", |
| | | // order: "asc", |
| | | // }, |
| | | // }, |
| | | // isIndex: false, |
| | | // showSelect: false, |
| | | // select: false, |
| | | // do: [ |
| | | // { |
| | | // id: "", |
| | | // font: "æ¥ç", |
| | | // type: "text", |
| | | // method: "viewDetails", |
| | | // showFun: (row, index) => { |
| | | // return ( |
| | | // row.inspectionItem == "åæ ¹åç´çç§" || |
| | | // row.inspectionItem.includes("æ¾å¥ç®¡") || |
| | | // row.inspectionItemSubclass.includes("æ¾å¥ç®¡") || |
| | | // (row.inspectionItem == "ææå¼ºåº¦" && |
| | | // (row.inspectionItemSubclass == "çèåå¤çå" || |
| | | // row.inspectionItemSubclass == "çèåå¤çå")) || |
| | | // (row.inspectionItem == "æè£ä¼¸é¿ç" && |
| | | // (row.inspectionItemSubclass == "çèåå¤çå" || |
| | | // row.inspectionItemSubclass == "çèåå¤çå")) |
| | | // ); |
| | | // }, |
| | | // }, |
| | | // ], |
| | | // tagField: { |
| | | // insState: { |
| | | // select: [], |
| | | // }, |
| | | // insResult: { |
| | | // select: [ |
| | | // { |
| | | // value: 1, |
| | | // label: "åæ ¼", |
| | | // type: "success", |
| | | // }, |
| | | // { |
| | | // value: 0, |
| | | // label: "ä¸åæ ¼", |
| | | // type: "danger", |
| | | // }, |
| | | // { |
| | | // value: 3, |
| | | // label: "ä¸å¤å®", |
| | | // type: "", |
| | | // }, |
| | | // ], |
| | | // }, |
| | | // }, |
| | | // selectField: {}, |
| | | // spanConfig: { |
| | | // rows: [ |
| | | // // { |
| | | // // name: "entrustCode", |
| | | // // index: 0, |
| | | // // }, |
| | | // // { |
| | | // // name: "sampleCode", |
| | | // // index: 1, |
| | | // // }, |
| | | // ], |
| | | // }, |
| | | // requiredAdd: [], |
| | | // requiredUp: [], |
| | | // }, |
| | | // componentDataDelete: { |
| | | // entity: { |
| | | // // orderId: '', |
| | | // // orderBy: { |
| | | // // field: 'sampleCode', |
| | | // // order: 'asc' |
| | | // // } |
| | | // }, |
| | | // isPage: false, |
| | | // isIndex: false, |
| | | // showSelect: true, |
| | | // select: true, |
| | | // selectMethod: "selectDelete", |
| | | // do: [], |
| | | // tagField: { |
| | | // insState: { |
| | | // select: [], |
| | | // }, |
| | | // insResult: { |
| | | // select: [ |
| | | // { |
| | | // value: 1, |
| | | // label: "åæ ¼", |
| | | // type: "success", |
| | | // }, |
| | | // { |
| | | // value: 0, |
| | | // label: "ä¸åæ ¼", |
| | | // type: "danger", |
| | | // }, |
| | | // ], |
| | | // }, |
| | | // }, |
| | | // selectField: {}, |
| | | // spanConfig: {}, |
| | | // requiredAdd: [], |
| | | // requiredUp: [], |
| | | // }, |
| | | deleteDialogVisible: false, |
| | | entityCopy: {}, |
| | | upIndex: 0, |
| | | upLoad: false, |
| | | tabList: [ |
| | | { |
| | | label: "å¾
å®¡æ ¸", |
| | | value: 0, |
| | | }, |
| | | { |
| | | label: "å¾
æ£éª", |
| | | value: 1, |
| | | }, |
| | | { |
| | | label: "å·²æ£éª", |
| | | value: 4, |
| | | }, |
| | | { |
| | | label: "éå", |
| | | value: 2, |
| | | }, |
| | | { |
| | | label: "æ¤é", |
| | | value: 3, |
| | | }, |
| | | ], |
| | | tabIndex: 0, |
| | | active: 0, //1ï¼ä¸åï¼2ï¼æ¥çï¼3ï¼å®¡æ ¸ï¼4ï¼å
纤é
ç½®,é»è®¤ä¸º0 |
| | | currentId: null, |
| | | more: false, |
| | | |
| | | insOrderRow: {}, |
| | | checkIndexList: [], |
| | | checkDataList: [ |
| | |
| | | sampleCode: "", |
| | | }, |
| | | ], |
| | | qrData: [], |
| | | multipleSelection: [], |
| | | sonLaboratoryList: [], |
| | | queryCount: 0, |
| | | urgencyDictList: [], |
| | | tableHeight: 0, |
| | | }; |
| | | }, |
| | | created() { |
| | |
| | | this.getLabelPrinting(selection); |
| | | this.printDialogVisible = true; |
| | | }, |
| | | // éæ©æ£éªåé
人å |
| | | getAuthorizedPerson() { |
| | | this.$axios.get(this.$api.user.getLaboratoryPersonList).then((res) => { |
| | | // let data = []; |
| | | // res.data.forEach((a) => { |
| | | // data.push({ |
| | | // label: a.name, |
| | | // value: a.id, |
| | | // }); |
| | | // }); |
| | | this.personList = res.data; |
| | | }); |
| | | }, |
| | | refreshTable() { |
| | | this.getList(); |
| | | }, |
| | | getTableData(newData) { |
| | | if (newData && newData.length == 1) { |
| | | const insState = newData[0].state; |
| | | this.tabList.forEach((ele, index) => { |
| | | if (ele.value == insState && this.queryCount == 0) { |
| | | this.handleTab(ele, index); |
| | | this.queryCount = 1; |
| | | } |
| | | }); |
| | | } |
| | | }, |
| | | refresh() { |
| | | this.queryParams = { |
| | |
| | | <style scoped> |
| | | .title { |
| | | height: 60px; |
| | | line-height: 60px; |
| | | } |
| | | |
| | | .search { |
| | | background-color: #fff; |
| | | height: 80px; |
| | | display: flex; |
| | | align-items: center; |
| | | } |
| | | |
| | | .search_thing { |
| | | display: flex; |
| | | align-items: center; |
| | | height: 50px; |
| | | width: 230px; |
| | | } |
| | | |
| | | .search_label { |
| | | width: 90px; |
| | | font-size: 14px; |
| | | text-align: right; |
| | | } |
| | | |
| | | .search_input { |
| | | width: calc(100% - 90px); |
| | | } |
| | | |
| | | .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; |
| | | } |
| | | |
| | | .full-screen { |
| | | position: absolute; |
| | | right: 52px; |
| | | top: 22px; |
| | | } |
| | | |
| | | .btns { |
| | | position: absolute; |
| | | right: 40px; |
| | | top: 50%; |
| | | transform: translate(0, -50%); |
| | | display: flex; |
| | | align-items: center; |
| | | } |
| | | |
| | | .fullscreen { |
| | | height: 82vh; |
| | | } |
| | | .custom-upload >>> .el-upload-list--text { |
| | | max-height: 20vh; |
| | | overflow-y: scroll; |
| | | } |
| | | </style> |
| | | |
| | | <template> |
| | | <div>æ¥åç¼å¶</div> |
| | | <div class="inspection_order"> |
| | | <div style="width: 100%; height: 100%"> |
| | | <div> |
| | | <el-row class="title"> |
| | | <el-col :span="12" style="padding-left: 20px; text-align: left" |
| | | >æ¥åç¼å¶</el-col |
| | | > |
| | | </el-row> |
| | | </div> |
| | | <div class="search" :style="`height: ${more ? 130 : 80}px;`"> |
| | | <el-row :gutter="10" style="width: 100%"> |
| | | <el-col :span="16" style="display: flex; flex-wrap: wrap"> |
| | | <div class="search_thing" v-if="maxNum >= 1"> |
| | | <div class="search_label">æ¥åç¼å·ï¼</div> |
| | | <div class="search_input"> |
| | | <el-input |
| | | size="small" |
| | | placeholder="请è¾å
¥" |
| | | clearable |
| | | v-model="entity.code" |
| | | @keyup.enter.native="refreshTable()" |
| | | ></el-input> |
| | | </div> |
| | | </div> |
| | | <div class="search_thing" v-if="maxNum >= 2"> |
| | | <div class="search_label">ä¸ä¼ ç¶æï¼</div> |
| | | <div class="search_input"> |
| | | <el-select |
| | | size="small" |
| | | clearable |
| | | @clear="refreshTable()" |
| | | @change="refreshTable()" |
| | | v-model="entity.isUpload" |
| | | > |
| | | <el-option |
| | | v-for="(item, index) in tagField.isUpload.select" |
| | | :value="item.value" |
| | | :label="item.label" |
| | | :key="index" |
| | | ></el-option> |
| | | </el-select> |
| | | </div> |
| | | </div> |
| | | <div class="search_thing" v-if="maxNum >= 3"> |
| | | <div class="search_label">æäº¤ç¶æï¼</div> |
| | | <div class="search_input"> |
| | | <el-select |
| | | size="small" |
| | | clearable |
| | | @clear="refreshTable()" |
| | | @change="refreshTable()" |
| | | v-model="entity.state" |
| | | > |
| | | <el-option |
| | | v-for="(item, index) in tagField.state.select" |
| | | :value="item.value" |
| | | :label="item.label" |
| | | :key="index" |
| | | ></el-option> |
| | | </el-select> |
| | | </div> |
| | | </div> |
| | | <div |
| | | class="search_thing" |
| | | v-if="maxNum >= 4 || (maxNum < 4 && more)" |
| | | > |
| | | <div class="search_label">å®¡æ ¸ç¶æï¼</div> |
| | | <div class="search_input"> |
| | | <el-select |
| | | size="small" |
| | | clearable |
| | | @clear="refreshTable()" |
| | | @change="refreshTable()" |
| | | v-model="entity.isExamine" |
| | | > |
| | | <el-option |
| | | v-for="(item, index) in tagField.isExamine.select" |
| | | :value="item.value" |
| | | :label="item.label" |
| | | :key="index" |
| | | ></el-option> |
| | | </el-select> |
| | | </div> |
| | | </div> |
| | | <div class="search_thing" v-if="maxNum >= 5 || more"> |
| | | <div class="search_label">æ¹åç¶æï¼</div> |
| | | <div class="search_input"> |
| | | <el-select |
| | | size="small" |
| | | clearable |
| | | @clear="refreshTable()" |
| | | @change="refreshTable()" |
| | | v-model="entity.isRatify" |
| | | > |
| | | <el-option |
| | | v-for="(item, index) in tagField.isRatify.select" |
| | | :value="item.value" |
| | | :label="item.label" |
| | | :key="index" |
| | | ></el-option> |
| | | </el-select> |
| | | </div> |
| | | </div> |
| | | <div class="search_thing" v-if="maxNum >= 6 || more"> |
| | | <div class="search_label">å建æ¶é´ï¼</div> |
| | | <div class="search_input"> |
| | | <el-date-picker |
| | | size="small" |
| | | clearable |
| | | @clear="refreshTable()" |
| | | @change="refreshTable()" |
| | | v-model="entity.createTimeRange" |
| | | type="daterange" |
| | | value-format="yyyy-MM-dd[T]HH:mm:ss" |
| | | range-separator="è³" |
| | | start-placeholder="å¼å§æ¥æ" |
| | | end-placeholder="ç»ææ¥æ" |
| | | :default-time="['00:00:00', '23:59:59']" |
| | | > |
| | | </el-date-picker> |
| | | </div> |
| | | </div> |
| | | </el-col> |
| | | <el-col :span="8"> |
| | | <div class="search_thing"> |
| | | <el-button |
| | | v-if="maxNum < 5" |
| | | type="text" |
| | | :icon="!more ? 'el-icon-arrow-down' : 'el-icon-arrow-up'" |
| | | style="color: #3a7bfa" |
| | | @click="more = !more" |
| | | >{{ !more ? "æ´å¤" : "æ¶èµ·" }}</el-button |
| | | > |
| | | <div class="search_thing" style="padding-left: 20px"> |
| | | <el-button |
| | | size="small" |
| | | @click="refresh()" |
| | | style="margin-right: 6px" |
| | | >é ç½®</el-button |
| | | > |
| | | <el-button |
| | | size="small" |
| | | type="primary" |
| | | @click="refreshTable()" |
| | | style="margin-right: 6px" |
| | | >æ¥ è¯¢</el-button |
| | | > |
| | | <template> |
| | | <el-dropdown |
| | | @command="handleCommand" |
| | | style="margin-left: 10px" |
| | | > |
| | | <el-button type="primary" size="small"> |
| | | æ´å¤æä½<i class="el-icon-arrow-down el-icon--right"></i> |
| | | </el-button> |
| | | <el-dropdown-menu slot="dropdown"> |
| | | <el-dropdown-item |
| | | icon="el-icon-download" |
| | | command="batchDownload" |
| | | >æ¹éä¸è½½</el-dropdown-item |
| | | > |
| | | <el-dropdown-item |
| | | icon="el-icon-upload" |
| | | command="batchUpload" |
| | | >æ¹éä¸ä¼ </el-dropdown-item |
| | | > |
| | | <el-dropdown-item |
| | | icon="el-icon-s-check" |
| | | command="oneClickApproval" |
| | | >ä¸é®å®¡æ¹</el-dropdown-item |
| | | > |
| | | <el-dropdown-item |
| | | icon="el-icon-setting" |
| | | command="approvalConfig" |
| | | >审æ¹ç¾åé
ç½®</el-dropdown-item |
| | | > |
| | | </el-dropdown-menu> |
| | | </el-dropdown> |
| | | </template> |
| | | <template> |
| | | <el-button |
| | | size="small" |
| | | type="primary" |
| | | @click="handleDowns" |
| | | :loading="outLoading" |
| | | style="margin-right: 6px" |
| | | >æ¹éä¸è½½</el-button |
| | | > |
| | | <el-button |
| | | size="small" |
| | | type="primary" |
| | | @click="openBatchUploadDia()" |
| | | :loading="inLoading" |
| | | >æ¹éä¸ä¼ </el-button |
| | | > |
| | | <el-button |
| | | size="small" |
| | | type="primary" |
| | | @click="oneClickApproval()" |
| | | :loading="approvalLoading" |
| | | >ä¸é®å®¡æ¹</el-button |
| | | > |
| | | <el-button |
| | | size="small" |
| | | type="primary" |
| | | @click="openApprovalConfig()" |
| | | :loading="approvalConfigLoading" |
| | | >审æ¹ç¾åé
ç½®</el-button |
| | | > |
| | | </template> |
| | | </div> |
| | | <!-- <div class="btns"> |
| | | <el-button size="small" type="primary" @click="handleDowns" :loading="outLoading" style="margin-right: 16px;">æ¹éä¸è½½</el-button> |
| | | <el-button size="small" type="primary" @click="openBatchUploadDia()" :loading="inLoading">æ¹éä¸ä¼ </el-button> |
| | | </div> --> |
| | | </div> |
| | | </el-col> |
| | | </el-row> |
| | | </div> |
| | | <div class="table"> |
| | | <div |
| | | style=" |
| | | width: 100%; |
| | | display: flex; |
| | | flex-wrap: nowrap; |
| | | font-size: 13px; |
| | | flex-direction: row; |
| | | justify-content: flex-end; |
| | | align-items: center; |
| | | " |
| | | > |
| | | <p style="margin-left: 15px"> |
| | | å¾
æäº¤æ°é: <span |
| | | style="font-size: 16px; color: rgb(58, 123, 250)" |
| | | >{{ unSubmitCount }}</span |
| | | > |
| | | </p> |
| | | <p style="margin-left: 15px"> |
| | | å¾
å®¡æ ¸æ°é: <span |
| | | style="font-size: 16px; color: rgb(58, 123, 250)" |
| | | >{{ unExamineCount }}</span |
| | | > |
| | | </p> |
| | | <p style="margin-left: 15px"> |
| | | å¾
æ¹åæ°é: <span |
| | | style="font-size: 16px; color: rgb(58, 123, 250)" |
| | | >{{ unRatifyCount }}</span |
| | | > |
| | | </p> |
| | | </div> |
| | | <lims-table |
| | | :tableData="tableData" |
| | | :column="column" |
| | | :tableLoading="tableLoading" |
| | | :height="'calc(100vh - 270px)'" |
| | | :page="page" |
| | | @pagination="pagination" |
| | | ></lims-table> |
| | | </div> |
| | | </div> |
| | | <!--æ¥åæ¥ç--> |
| | | <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> |
| | | <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" |
| | | v-if="!fullscreen" |
| | | ></i> |
| | | <!-- <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" |
| | | /> |
| | | <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="æ¥åå®¡æ ¸" |
| | | top="5vh" |
| | | :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 style="height: 75vh" v-if="issuedVisible"> |
| | | <onlyoffice |
| | | ref="onlyoffice" |
| | | :options="option" |
| | | style="width: 100%; height: 100%" |
| | | /> |
| | | </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-dialog |
| | | title="ä¸éè¿åå " |
| | | top="5vh" |
| | | :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="æ¥åæ¹å" |
| | | top="5vh" |
| | | :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: 75vh" v-if="approveVisible"> |
| | | <onlyoffice |
| | | ref="onlyoffice" |
| | | :options="option" |
| | | style="width: 100%; height: 100%" |
| | | /> |
| | | </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-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> |
| | | <el-dialog |
| | | :visible.sync="batchUploadDia" |
| | | title="æ¥åæ¹éä¸ä¼ " |
| | | width="30%" |
| | | :close-on-click-modal="false" |
| | | top="5vh" |
| | | > |
| | | <div> |
| | | <!-- <el-upload |
| | | class="upload-demo" |
| | | :action="action" |
| | | :headers="headers" |
| | | :show-file-list="false" |
| | | accept=".doc,.docx" |
| | | :limit="1" |
| | | :before-upload="beforeUpload" |
| | | :on-success="handleSuccess" |
| | | ref="upload" |
| | | :on-error="onError"> |
| | | </el-upload> --> |
| | | <el-upload |
| | | ref="upload" |
| | | class="upload-demo custom-upload" |
| | | drag |
| | | show-file-list |
| | | accept=".doc,.docx" |
| | | :action="action" |
| | | :headers="headers" |
| | | :on-error="onError" |
| | | :before-upload="beforeUpload" |
| | | :file-list="fileList" |
| | | :auto-upload="false" |
| | | :limit="100" |
| | | :on-exceed="uploadExceed" |
| | | :on-success="handleSuccess" |
| | | multiple |
| | | > |
| | | <i class="el-icon-upload"></i> |
| | | <div class="el-upload__text">å°æä»¶æå°æ¤å¤ï¼æ<em>ç¹å»ä¸ä¼ </em></div> |
| | | <div class="el-upload__tip" slot="tip"> |
| | | åªè½ä¸ä¼ .doc/.docxæä»¶ï¼ä¸å个æä»¶ä¸è¶
è¿10MB |
| | | </div> |
| | | </el-upload> |
| | | </div> |
| | | <span slot="footer" class="dialog-footer"> |
| | | <el-button size="small" type="primary" @click="submitUpload" |
| | | >确认ä¸ä¼ </el-button |
| | | > |
| | | </span> |
| | | </el-dialog> |
| | | <!-- æ¥åæ¹é审æ¹å¼¹æ¡ --> |
| | | <el-dialog |
| | | :visible.sync="oneClickApprovalDialog" |
| | | title="æ¥åæ¹é审æ¹" |
| | | width="40%" |
| | | :close-on-click-modal="false" |
| | | top="5vh" |
| | | > |
| | | <div> |
| | | <el-result |
| | | icon="error" |
| | | v-show="progressData.hasException != null" |
| | | title="é误信æ¯" |
| | | :subTitle="progressData.hasException" |
| | | ></el-result> |
| | | <el-result |
| | | icon="success" |
| | | v-show="isSuccess && progressData.hasException == null" |
| | | title="æåä¿¡æ¯" |
| | | subTitle="æ¥å审æ¹å®æ" |
| | | ></el-result> |
| | | <el-progress |
| | | :percentage="progressData.hasNum" |
| | | :color="customColors" |
| | | ></el-progress> |
| | | <el-statistic title="å©ä½æ¥åæ°é"> |
| | | <template slot="formatter"> |
| | | {{ progressData.surplus }}/{{ progressData.hasCount }} |
| | | </template> |
| | | </el-statistic> |
| | | </div> |
| | | <span slot="footer" class="dialog-footer"> |
| | | <!-- <el-button size="small" type="primary" @click="confirmApproval" |
| | | >确认</el-button |
| | | > --> |
| | | </span> |
| | | </el-dialog> |
| | | <!-- æ¤åå¼¹æ¡ --> |
| | | <el-dialog |
| | | title="è¯·éæ©éè¦æ¤åçè¯éªå®¤" |
| | | :visible.sync="withdrawDialogVisible" |
| | | width="30%" |
| | | :before-close="handleClose" |
| | | > |
| | | <el-select |
| | | v-model="laboratory" |
| | | multiple |
| | | clearable |
| | | style="width: 100%; margin-bottom: 20px" |
| | | placeholder="è¯·éæ©è¯éªå®¤" |
| | | > |
| | | <el-option |
| | | v-for="(item, i) in laboratorys" |
| | | :key="i" |
| | | :label="item.label" |
| | | :value="item.value" |
| | | ></el-option> |
| | | </el-select> |
| | | |
| | | <span slot="footer" class="dialog-footer"> |
| | | <el-button @click="handleClose">å æ¶</el-button> |
| | | <el-button type="primary" @click="withdrawOperation">ç¡® å®</el-button> |
| | | </span> |
| | | </el-dialog> |
| | | |
| | | <!-- 审æ¹ç¾åé
ç½®å¼¹æ¡ --> |
| | | <el-dialog |
| | | :visible.sync="approvalConfigDialog" |
| | | title="审æ¹ç¾åé
ç½®" |
| | | width="55%" |
| | | :close-on-click-modal="false" |
| | | top="5vh" |
| | | > |
| | | <div v-if="approvalConfigListTX.editor != null"> |
| | | <el-divider content-position="left">é信产åå®éªå®¤</el-divider> |
| | | <el-form |
| | | size="mini" |
| | | :model="approvalConfigListTX" |
| | | inline |
| | | label-position="right" |
| | | > |
| | | <el-row> |
| | | <el-col :span="8"> |
| | | <el-form-item label="ç¼å¶äºº:" prop="editor"> |
| | | <el-select |
| | | v-model="approvalConfigListTX.editor" |
| | | placeholder="è¯·éæ©" |
| | | style="width: 100%" |
| | | filterable |
| | | > |
| | | <el-option-group |
| | | v-for="(item, index) in Object.keys(personList)" |
| | | :key="index" |
| | | :label="item" |
| | | > |
| | | <el-option |
| | | v-for="op in personList[item]" |
| | | :key="op.id" |
| | | :label="op.name" |
| | | :value="op.id" |
| | | > |
| | | </el-option> |
| | | </el-option-group> |
| | | </el-select> |
| | | </el-form-item> |
| | | </el-col> |
| | | <el-col :span="8"> |
| | | <el-form-item label="å®¡æ ¸äºº:" prop="examiner"> |
| | | <el-select |
| | | v-model="approvalConfigListTX.examiner" |
| | | placeholder="è¯·éæ©" |
| | | style="width: 100%" |
| | | filterable |
| | | > |
| | | <el-option-group |
| | | v-for="(item, index) in Object.keys(personList)" |
| | | :key="index" |
| | | :label="item" |
| | | > |
| | | <el-option |
| | | v-for="op in personList[item]" |
| | | :key="op.id" |
| | | :label="op.name" |
| | | :value="op.id" |
| | | > |
| | | </el-option> |
| | | </el-option-group> |
| | | </el-select> |
| | | </el-form-item> |
| | | </el-col> |
| | | <el-col :span="8"> |
| | | <el-form-item label="æ¹å人:" prop="approver"> |
| | | <el-select |
| | | v-model="approvalConfigListTX.approver" |
| | | placeholder="è¯·éæ©" |
| | | style="width: 100%" |
| | | filterable |
| | | > |
| | | <el-option-group |
| | | v-for="(item, index) in Object.keys(personList)" |
| | | :key="index" |
| | | :label="item" |
| | | > |
| | | <el-option |
| | | v-for="op in personList[item]" |
| | | :key="op.id" |
| | | :label="op.name" |
| | | :value="op.id" |
| | | > |
| | | </el-option> |
| | | </el-option-group> |
| | | </el-select> |
| | | </el-form-item> |
| | | </el-col> |
| | | </el-row> |
| | | </el-form> |
| | | </div> |
| | | <br /> |
| | | <div v-if="approvalConfigListDL.editor != null"> |
| | | <el-divider content-position="left">çµå产åå®éªå®¤</el-divider> |
| | | <el-form |
| | | size="mini" |
| | | :model="approvalConfigListDL" |
| | | inline |
| | | label-position="right" |
| | | > |
| | | <el-row> |
| | | <el-col :span="8"> |
| | | <el-form-item label="ç¼å¶äºº:" prop="editor"> |
| | | <el-select |
| | | v-model="approvalConfigListDL.editor" |
| | | placeholder="è¯·éæ©" |
| | | style="width: 100%" |
| | | filterable |
| | | > |
| | | <el-option-group |
| | | v-for="(item, index) in Object.keys(personList)" |
| | | :key="index" |
| | | :label="item" |
| | | > |
| | | <el-option |
| | | v-for="op in personList[item]" |
| | | :key="op.id" |
| | | :label="op.name" |
| | | :value="op.id" |
| | | > |
| | | </el-option> |
| | | </el-option-group> |
| | | </el-select> |
| | | </el-form-item> |
| | | </el-col> |
| | | <el-col :span="8"> |
| | | <el-form-item label="å®¡æ ¸äºº:" prop="examiner"> |
| | | <el-select |
| | | v-model="approvalConfigListDL.examiner" |
| | | placeholder="è¯·éæ©" |
| | | style="width: 100%" |
| | | filterable |
| | | > |
| | | <el-option-group |
| | | v-for="(item, index) in Object.keys(personList)" |
| | | :key="index" |
| | | :label="item" |
| | | > |
| | | <el-option |
| | | v-for="op in personList[item]" |
| | | :key="op.id" |
| | | :label="op.name" |
| | | :value="op.id" |
| | | > |
| | | </el-option> |
| | | </el-option-group> |
| | | </el-select> |
| | | </el-form-item> |
| | | </el-col> |
| | | <el-col :span="8"> |
| | | <el-form-item label="æ¹å人:" prop="approver"> |
| | | <el-select |
| | | v-model="approvalConfigListDL.approver" |
| | | placeholder="è¯·éæ©" |
| | | style="width: 100%" |
| | | filterable |
| | | > |
| | | <el-option-group |
| | | v-for="(item, index) in Object.keys(personList)" |
| | | :key="index" |
| | | :label="item" |
| | | > |
| | | <el-option |
| | | v-for="op in personList[item]" |
| | | :key="op.id" |
| | | :label="op.name" |
| | | :value="op.id" |
| | | > |
| | | </el-option> |
| | | </el-option-group> |
| | | </el-select> |
| | | </el-form-item> |
| | | </el-col> |
| | | </el-row> |
| | | </el-form> |
| | | </div> |
| | | <span slot="footer" class="dialog-footer"> |
| | | <el-button size="small" type="primary" @click="confirmApprovalConfig" |
| | | >确认</el-button |
| | | > |
| | | </span> |
| | | </el-dialog> |
| | | </div> |
| | | </template> |
| | | |
| | | <script> |
| | | export default {}; |
| | | </script> |
| | | import limsTable from "@/components/Table/lims-table.vue"; |
| | | import onlyoffice from "../reportPreparation/onlyoffice.vue"; |
| | | import { |
| | | pageInsReport, |
| | | inReport, |
| | | upAll, |
| | | getLaboratoryByReportId, |
| | | withdraw, |
| | | updateApproveConfig, |
| | | getUserList, |
| | | getApproveConfigList, |
| | | downAll, |
| | | getBatchApprovalProgress, |
| | | getReportCountInfo, |
| | | downReport, |
| | | upReportUrl, |
| | | ratifyReport, |
| | | writeReport, |
| | | examineReport, |
| | | downLoad, |
| | | getReportInfo, |
| | | getURL |
| | | } from "../../../api/business/reportPreparation"; |
| | | |
| | | <style></style> |
| | | export default { |
| | | components: { |
| | | limsTable, |
| | | onlyoffice, |
| | | }, |
| | | data() { |
| | | return { |
| | | tagField: { |
| | | isUpload: { |
| | | select: [ |
| | | { |
| | | value: 0, |
| | | type: "danger", |
| | | label: "æªä¸ä¼ ", |
| | | }, |
| | | { |
| | | value: 1, |
| | | type: "success", |
| | | label: "å·²ä¸ä¼ ", |
| | | }, |
| | | ], |
| | | }, |
| | | isRatify: { |
| | | select: [ |
| | | { |
| | | value: -9, |
| | | type: "info", |
| | | label: "æªæ¹å", |
| | | }, |
| | | { |
| | | value: 0, |
| | | type: "danger", |
| | | label: "䏿¹å", |
| | | }, |
| | | { |
| | | value: 1, |
| | | type: "success", |
| | | label: "æ¹å", |
| | | }, |
| | | ], |
| | | }, |
| | | isExamine: { |
| | | select: [ |
| | | { |
| | | value: -9, |
| | | type: "info", |
| | | label: "æªå®¡æ ¸", |
| | | }, |
| | | { |
| | | value: 0, |
| | | type: "danger", |
| | | label: "ä¸éè¿", |
| | | }, |
| | | { |
| | | value: 1, |
| | | type: "success", |
| | | label: "éè¿", |
| | | }, |
| | | ], |
| | | }, |
| | | state: { |
| | | select: [ |
| | | { |
| | | value: 0, |
| | | type: "danger", |
| | | label: "å¾
æäº¤", |
| | | }, |
| | | { |
| | | value: 1, |
| | | type: "success", |
| | | label: "å·²æäº¤", |
| | | }, |
| | | ], |
| | | }, |
| | | }, |
| | | entity: { |
| | | isUpload: null, |
| | | entrustCode: null, |
| | | state: null, |
| | | isExamine: null, |
| | | isRatify: null, |
| | | code: null, |
| | | createTimeRange: [], |
| | | }, |
| | | withdrawDialogVisible: false, |
| | | laboratory: [], |
| | | laboratorys: [], |
| | | isSuccess: false, |
| | | time: null, |
| | | //审æ¹è¿åº¦å¯¹è±¡ |
| | | progressData: { |
| | | hasProgress: false, |
| | | hasNum: 0, |
| | | hasCount: 0, |
| | | hasException: null, |
| | | surplus: 0, |
| | | }, |
| | | personList: [], |
| | | approvalConfigListTX: { |
| | | editor: null, |
| | | examiner: null, |
| | | approver: null, |
| | | }, //审æ¹ç¾åé
ç½®å表 |
| | | approvalConfigListDL: { |
| | | editor: null, |
| | | examiner: null, |
| | | approver: null, |
| | | }, //审æ¹ç¾åé
ç½®å表 |
| | | approvalConfigDialog: false, |
| | | approvalConfigLoading: false, |
| | | surplusReportNum: 0, |
| | | percentage: 0, |
| | | customColors: [ |
| | | { color: "#f56c6c", percentage: 20 }, |
| | | { color: "#e6a23c", percentage: 40 }, |
| | | { color: "#5cb87a", percentage: 60 }, |
| | | { color: "#1989fa", percentage: 80 }, |
| | | { color: "#6f7ad3", percentage: 100 }, |
| | | ], |
| | | oneClickApprovalDialog: false, |
| | | approvalLoading: false, |
| | | isShowMore: false, |
| | | more: false, |
| | | fileList: [], |
| | | batchUploadDia: false, |
| | | viewIssuedVisible: false, |
| | | tableData: [], |
| | | column: [ |
| | | { |
| | | label: "æ¥åç¼å·", |
| | | prop: "code", |
| | | }, |
| | | { |
| | | label: "ä¸ä¼ ç¶æ", |
| | | prop: "isUpload", |
| | | dataType: "tag", |
| | | formatData: (params) => { |
| | | return params == 1 ? "å·²ä¸ä¼ " : "æªä¸ä¼ "; |
| | | }, |
| | | formatType: (params) => { |
| | | return params == 1 ? "success" : "danger"; |
| | | }, |
| | | }, |
| | | { |
| | | label: "å建æ¶é´", |
| | | prop: "createTime", |
| | | }, |
| | | { |
| | | label: "æäº¤äºº", |
| | | prop: "writeUserName", |
| | | }, |
| | | { |
| | | label: "æäº¤ç¶æ", |
| | | prop: "state", |
| | | dataType: "tag", |
| | | formatData: (params) => { |
| | | return params == 1 ? "å·²æäº¤" : "å¾
æäº¤"; |
| | | }, |
| | | formatType: (params) => { |
| | | return params == 1 ? "success" : "danger"; |
| | | }, |
| | | }, |
| | | { |
| | | label: "æäº¤æ¶é´", |
| | | prop: "writeTime", |
| | | }, |
| | | { |
| | | label: "å®¡æ ¸äºº", |
| | | prop: "examineUser", |
| | | }, |
| | | { |
| | | label: "å®¡æ ¸ç¶æ", |
| | | prop: "isExamine", |
| | | dataType: "tag", |
| | | formatData: (params) => { |
| | | let farmat = ""; |
| | | if (params == 0) { |
| | | farmat = "ä¸éè¿"; |
| | | } else if (params == 1) { |
| | | farmat = "éè¿"; |
| | | } else { |
| | | farmat = "æªå®¡æ ¸"; |
| | | } |
| | | return farmat; |
| | | }, |
| | | formatType: (params) => { |
| | | let farmat = ""; |
| | | if (params == 0) { |
| | | farmat = "danger"; |
| | | } else if (params == 1) { |
| | | farmat = "success"; |
| | | } else { |
| | | farmat = "info"; |
| | | } |
| | | return farmat; |
| | | }, |
| | | }, |
| | | { |
| | | label: "å®¡æ ¸å¤æ³¨", |
| | | prop: "examineTell", |
| | | }, |
| | | { |
| | | label: "å®¡æ ¸æ¶é´", |
| | | prop: "examineTime", |
| | | }, |
| | | { |
| | | label: "æ¹å人", |
| | | prop: "ratifyUser", |
| | | }, |
| | | { |
| | | label: "æ¹åç¶æ", |
| | | prop: "isRatify", |
| | | dataType: "tag", |
| | | formatData: (params) => { |
| | | let farmat = ""; |
| | | if (params == 0) { |
| | | farmat = "䏿¹å"; |
| | | } else if (params == 1) { |
| | | farmat = "æ¹å"; |
| | | } else { |
| | | farmat = "æªæ¹å"; |
| | | } |
| | | return farmat; |
| | | }, |
| | | formatType: (params) => { |
| | | let farmat = ""; |
| | | if (params == 0) { |
| | | farmat = "danger"; |
| | | } else if (params == 1) { |
| | | farmat = "sucess"; |
| | | } else { |
| | | farmat = "info"; |
| | | } |
| | | return farmat; |
| | | }, |
| | | }, |
| | | { |
| | | label: "æ¹å夿³¨", |
| | | prop: "ratifyTell", |
| | | }, |
| | | { |
| | | label: "æ¹åæ¶é´", |
| | | prop: "ratifyTime", |
| | | }, |
| | | { |
| | | dataType: "action", |
| | | fixed: "right", |
| | | label: "æä½", |
| | | operation: [ |
| | | { |
| | | name: "ç¼å¶", |
| | | type: "text", |
| | | clickFun: (row) => { |
| | | this.handleWeave(row); |
| | | }, |
| | | disabled: (row) => { |
| | | return row.isExamine != -9; |
| | | }, |
| | | }, |
| | | { |
| | | name: "ä¸è½½", |
| | | type: "text", |
| | | clickFun: (row) => { |
| | | this.download(row); |
| | | }, |
| | | }, |
| | | { |
| | | name: "ä¸ä¼ ", |
| | | type: "upload", |
| | | url: "/file/attachmentType/upload", |
| | | data: (row) => { |
| | | return { |
| | | id: row.id, |
| | | type: 1, |
| | | }; |
| | | }, |
| | | uploadIdFun: (row) => { |
| | | return row.id; |
| | | }, |
| | | disabled: (row) => { |
| | | return row.isExamine != -9; |
| | | }, |
| | | }, |
| | | { |
| | | name: "è¿å", |
| | | type: "text", |
| | | clickFun: (row) => { |
| | | this.handleRestore(row); |
| | | }, |
| | | disabled: (row) => { |
| | | return row.isExamine != -9; |
| | | }, |
| | | }, |
| | | { |
| | | name: "æäº¤", |
| | | type: "text", |
| | | clickFun: (row) => { |
| | | this.handleSubmit(row); |
| | | }, |
| | | disabled: (row) => { |
| | | return row.state != 0; |
| | | }, |
| | | }, |
| | | { |
| | | name: "å®¡æ ¸", |
| | | type: "text", |
| | | clickFun: (row) => { |
| | | this.handleIssued(row); |
| | | }, |
| | | disabled: (row) => { |
| | | return ( |
| | | row.state == null || row.state == 0 || row.isExamine == 1 |
| | | ); |
| | | }, |
| | | }, |
| | | { |
| | | name: "æ¹å", |
| | | type: "text", |
| | | clickFun: (row) => { |
| | | this.handleApprove(row); |
| | | }, |
| | | disabled: (row) => { |
| | | return ( |
| | | row.state == null || |
| | | row.state == 0 || |
| | | row.isExamine == 0 || |
| | | row.isExamine == -9 || |
| | | row.isRatify == 1 |
| | | ); |
| | | }, |
| | | }, |
| | | { |
| | | name: "æ¤å", |
| | | type: "text", |
| | | clickFun: (row) => { |
| | | this.withdraw(row); |
| | | }, |
| | | disabled: (row) => { |
| | | return row.state == 1; |
| | | }, |
| | | }, |
| | | ], |
| | | }, |
| | | ], |
| | | page: { |
| | | total: 0, |
| | | size: 10, |
| | | current: 1, |
| | | }, |
| | | tableLoading: false, |
| | | 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, |
| | | maxNum: 1, |
| | | unSubmitCount: 0, |
| | | unRatifyCount: 0, |
| | | unExamineCount: 0, |
| | | }; |
| | | }, |
| | | computed: { |
| | | headers() { |
| | | return { |
| | | token: sessionStorage.getItem("token"), |
| | | }; |
| | | }, |
| | | action() { |
| | | return ""; |
| | | }, |
| | | }, |
| | | created() { |
| | | this.getAuthorizedPerson(); |
| | | this.handleResize(); |
| | | // çå¬çªå£å¤§å°æ¹åäºä»¶ |
| | | window.addEventListener("resize", this.handleResize); |
| | | }, |
| | | beforeDestroy() { |
| | | if (this.time != null) { |
| | | clearInterval(this.time); |
| | | this.time = null; |
| | | } |
| | | this.progressData = { |
| | | hasProgress: false, |
| | | hasNum: 0, |
| | | hasCount: 0, |
| | | hasException: null, |
| | | surplus: 0, |
| | | }; |
| | | window.removeEventListener("resize", this.handleResize); |
| | | }, |
| | | mounted() { |
| | | this.entityCopy = this.HaveJson(this.entity); |
| | | this.getList(); |
| | | this.getReportCountInfo(); |
| | | }, |
| | | watch: { |
| | | batchUploadDia(newVal) { |
| | | if (!newVal) { |
| | | this.$refs.upload.clearFiles(); |
| | | this.fileList = []; |
| | | } |
| | | }, |
| | | progressData(newVal) { |
| | | if (newVal && newVal.hasNum == 100) { |
| | | clearInterval(this.time); |
| | | this.$message.success("æ¥å审æ¹å®æ"); |
| | | this.isSuccess = true; |
| | | this.mutiList = []; |
| | | this.refresh(); |
| | | } else if ( |
| | | newVal && |
| | | newVal.hasException != null && |
| | | newVal.hasException != "" |
| | | ) { |
| | | clearInterval(this.time); |
| | | } |
| | | }, |
| | | oneClickApprovalDialog(newVal) { |
| | | if (!newVal) { |
| | | this.isSuccess = false; |
| | | this.progressData = { |
| | | hasProgress: false, |
| | | hasNum: 0, |
| | | hasCount: 0, |
| | | hasException: null, |
| | | surplus: 0, |
| | | }; |
| | | } |
| | | }, |
| | | }, |
| | | methods: { |
| | | // è¿ååé¡µå¼ |
| | | pagination({ page, limit }) { |
| | | this.page.current = page; |
| | | this.page.size = limit; |
| | | this.getList(); |
| | | }, |
| | | getList() { |
| | | this.tableLoading = true; |
| | | if (!this.entity.createTimeRange) { |
| | | this.entity.createTimeRange = []; |
| | | } |
| | | const data = { ...this.page, ...this.entity }; |
| | | pageInsReport(data) |
| | | .then((res) => { |
| | | this.tableData = res.data.records; |
| | | this.page.total = res.data.total; |
| | | this.tableLoading = false; |
| | | }) |
| | | .catch((error) => { |
| | | console.error(error); |
| | | this.tableLoading = false; |
| | | }); |
| | | }, |
| | | // æ¤å å¼¹æ¡ |
| | | withdraw(row) { |
| | | getLaboratoryByReportId(row.id).then((res) => { |
| | | this.laboratorys = res.data; |
| | | this.reportId = row.id; |
| | | this.withdrawDialogVisible = true; |
| | | }); |
| | | }, |
| | | withdrawOperation() { |
| | | if (this.laboratory.length == 0) { |
| | | this.$message.error("è¯·éæ©éè¦æ¤åçè¯éªå®¤"); |
| | | return; |
| | | } |
| | | let data = { |
| | | laboratory: JSON.stringify(this.laboratory), |
| | | id: this.reportId, |
| | | }; |
| | | withdraw(data).then((res) => { |
| | | if (res.code == 200) { |
| | | this.$message.success("æ¤åæå"); |
| | | this.withdrawDialogVisible = false; |
| | | this.refresh(); |
| | | } |
| | | }); |
| | | }, |
| | | |
| | | handleCommand(command) { |
| | | switch (command) { |
| | | case "batchDownload": |
| | | //æ¹éä¸è½½ |
| | | this.handleDowns(); |
| | | break; |
| | | case "batchUpload": |
| | | //æ¹éä¸ä¼ |
| | | this.openBatchUploadDia(); |
| | | break; |
| | | case "oneClickApproval": |
| | | //ä¸é®å®¡æ¹ |
| | | this.oneClickApproval(); |
| | | break; |
| | | case "approvalConfig": |
| | | //审æ¹ç¾åé
ç½® |
| | | this.openApprovalConfig(); |
| | | break; |
| | | } |
| | | }, |
| | | //ç¡®è®¤æ´æ°å®¡æ¹ç¾åé
ç½® |
| | | confirmApprovalConfig() { |
| | | let data = []; |
| | | if (this.approvalConfigListTX.id) { |
| | | data.push(this.approvalConfigListTX); |
| | | } |
| | | if (this.approvalConfigListDL.id) { |
| | | data.push(this.approvalConfigListDL); |
| | | } |
| | | updateApproveConfig({ configList: data }) |
| | | .then((res) => { |
| | | if (res.code == 200) { |
| | | this.$message.success("æ´æ°æå"); |
| | | this.approvalConfigDialog = false; |
| | | } |
| | | }) |
| | | .catch((error) => { |
| | | console.error(error); |
| | | }); |
| | | }, |
| | | //è·å人åä¿¡æ¯ |
| | | getAuthorizedPerson() { |
| | | getUserList() |
| | | .then((res) => { |
| | | this.personList = res.data; |
| | | }) |
| | | .catch((error) => { |
| | | console.error(error); |
| | | }); |
| | | }, |
| | | //æå¼å®¡æ¹ç¾åé
ç½®å¼¹æ¡ |
| | | openApprovalConfig() { |
| | | getApproveConfigList() |
| | | .then((res) => { |
| | | if (res.code !== 201) { |
| | | res.data.forEach((ele) => { |
| | | if (ele.laboratory == "é信产åå®éªå®¤") { |
| | | this.approvalConfigListTX = { ...ele }; |
| | | } |
| | | if (ele.laboratory == "çµå产åå®éªå®¤") { |
| | | this.approvalConfigListDL = { ...ele }; |
| | | } |
| | | }); |
| | | } |
| | | }) |
| | | .catch((error) => { |
| | | console.error(error); |
| | | }); |
| | | this.$nextTick(() => { |
| | | this.approvalConfigDialog = true; |
| | | }); |
| | | }, |
| | | //ç¡®è®¤å®¡æ¹ |
| | | confirmApproval() {}, |
| | | //ä¸é®å®¡æ¹æé® |
| | | oneClickApproval() { |
| | | if (this.mutiList.length == 0) { |
| | | this.$message.error("è¯·éæ©è¦å®¡æ¹çæ¥å"); |
| | | return; |
| | | } |
| | | //æ§è¡å®¡æ¹ |
| | | if (!this.progressData.hasProgress) { |
| | | //æªå®¡æ¹çæ¥å |
| | | let unApprovalList = this.mutiList.filter( |
| | | (ele) => ele.isExamine == -9 || ele.isRatify == -9 |
| | | ); |
| | | let entity = this.entity; |
| | | //æ ¹æ®æ¥è¯¢æ¡ä»¶è¿æ»¤å·²éæ©çæ°æ® |
| | | let ids = unApprovalList |
| | | .filter((f) => |
| | | entity.isExamine != null && entity.isExamine !== "" |
| | | ? f.isExamine === entity.isExamine |
| | | : true |
| | | ) |
| | | .filter((f) => |
| | | entity.isRatify != null && entity.isRatify !== "" |
| | | ? f.isRatify === entity.isRatify |
| | | : true |
| | | ) |
| | | .filter((f) => |
| | | entity.isUpload != null && entity.isUpload !== "" |
| | | ? f.isUpload === entity.isUpload |
| | | : true |
| | | ) |
| | | .filter((f) => |
| | | entity.code != null && entity.code !== "" |
| | | ? f.code.indexOf(entity.code) >= 0 |
| | | : true |
| | | ) |
| | | .filter((f) => |
| | | entity.state != null && entity.state !== "" |
| | | ? f.state === entity.state |
| | | : true |
| | | ) |
| | | .map((ele) => ele.id); |
| | | batchApprovalReport({ ids: ids }) |
| | | .then((res) => { |
| | | if (res.code != 201) { |
| | | //æ¥è¯¢å®¡æ¹è¿åº¦ |
| | | this.time = setInterval(() => { |
| | | this.getProgress(); |
| | | }, 500); |
| | | } |
| | | }) |
| | | .catch((error) => { |
| | | console.error(error); |
| | | clearInterval(this.time); |
| | | }); |
| | | } |
| | | // this.getProgress(); |
| | | this.$nextTick(() => { |
| | | this.oneClickApprovalDialog = true; |
| | | }); |
| | | }, |
| | | getProgress() { |
| | | getBatchApprovalProgress().then((res) => { |
| | | this.progressData = res.data; |
| | | }); |
| | | }, |
| | | // å®ä¹ä¸ä¸ªå½æ°æ¥å¤çè§å£å®½åº¦åå |
| | | handleResize() { |
| | | //è§å£å®½åº¦ |
| | | let windowWidth = window.innerWidth; |
| | | //åå»å·¦è¾¹èåæ å®½åº¦92ï¼é¡µè¾¹è·40,å³è¾¹çæä½æé®å®½åº¦viewportWidth*33.33333% |
| | | let viewportWidth = windowWidth - 92 - 40; |
| | | //æç´¢è¡¨åæå¤§å®½åº¦ |
| | | let formMaxWidth = viewportWidth - viewportWidth * 0.3333333; |
| | | //å个æç´¢æ¡å®½åº¦ä¸º230 |
| | | this.maxNum = formMaxWidth / 230; |
| | | }, |
| | | //æ¹éä¸ä¼ æ¥å |
| | | openBatchUploadDia() { |
| | | this.batchUploadDia = true; |
| | | }, |
| | | // æ¥çæ¥å |
| | | viewIssued(row) { |
| | | 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; |
| | | }, |
| | | handleChange(arr) { |
| | | this.mutiList = arr; |
| | | }, |
| | | handleDowns() { |
| | | if (this.mutiList.length == 0) { |
| | | this.$message.error("è¯·éæ©æ¥å"); |
| | | return; |
| | | } |
| | | let entity = this.entity; |
| | | //æ ¹æ®æ¥è¯¢æ¡ä»¶è¿æ»¤å·²éæ©çæ°æ® |
| | | let str = this.mutiList |
| | | .filter((f) => |
| | | entity.isExamine != null && entity.isExamine !== "" |
| | | ? f.isExamine === entity.isExamine |
| | | : true |
| | | ) |
| | | .filter((f) => |
| | | entity.isRatify != null && entity.isRatify !== "" |
| | | ? f.isRatify === entity.isRatify |
| | | : true |
| | | ) |
| | | .filter((f) => |
| | | entity.isUpload != null && entity.isUpload !== "" |
| | | ? f.isUpload === entity.isUpload |
| | | : true |
| | | ) |
| | | .filter((f) => |
| | | entity.code != null && entity.code !== "" |
| | | ? f.code.indexOf(entity.code) >= 0 |
| | | : true |
| | | ) |
| | | .filter((f) => |
| | | entity.state != null && entity.state !== "" |
| | | ? f.state === entity.state |
| | | : true |
| | | ) |
| | | .map((m) => m.id) |
| | | .join(","); |
| | | if (str === "" || str == null) { |
| | | this.$message.error("没æç¬¦åæ¡ä»¶çæ°æ®!"); |
| | | return; |
| | | } |
| | | this.outLoading = true; |
| | | 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 + res.message; |
| | | link.target = "_blank"; |
| | | document.body.appendChild(link); |
| | | link.click(); |
| | | //ä¸è½½å®æï¼éç½®è¡¨æ ¼ |
| | | this.$nextTick(() => { |
| | | this.refresh(); |
| | | }); |
| | | }); |
| | | }, |
| | | uploadExceed(file, fileList) { |
| | | this.$message.error("åæ¶ä¸ä¼ æä»¶æ°ç®æå¤§ä¸º100ï¼è¯·éè¯"); |
| | | }, |
| | | submitUpload() { |
| | | this.$refs.upload.submit(); |
| | | }, |
| | | beforeUpload(file) { |
| | | const docxType = [ |
| | | "application/vnd.openxmlformats-officedocument.wordprocessingml.document", |
| | | "application/msword", |
| | | ]; |
| | | if (!docxType.includes(file.type)) { |
| | | this.$message.error("åªè½ä¸ä¼ ç±»å为.doc/.docxçæä»¶"); |
| | | return false; |
| | | } |
| | | const maxSize = 10 * 1024 * 1024; //å个æä»¶æå¤§ä¸ä¼ 大å°10MB |
| | | if (file.size > maxSize) { |
| | | this.$message.error("æä»¶" + file.name + "大å°è¶
è¿10MB"); |
| | | return false; |
| | | } |
| | | return true; |
| | | // const isZip = file.type === 'application/vnd.openxmlformats-officedocument.wordprocessingml.document' || 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(); |
| | | this.$refs.upload.clearFiles(); |
| | | this.fileList = []; |
| | | } else { |
| | | this.$message.error(response.message); |
| | | } |
| | | }, |
| | | onError(err, file, fileList, type) { |
| | | this.$message.error("ä¸ä¼ 失败"); |
| | | this.$refs.upload.clearFiles(); |
| | | this.fileList = []; |
| | | }, |
| | | refreshTable(e) { |
| | | if (!this.entity.createTimeRange) { |
| | | this.entity.createTimeRange = []; |
| | | } |
| | | this.getList(); |
| | | this.getReportCountInfo(); |
| | | }, |
| | | getReportCountInfo() { |
| | | if (!this.entity.createTimeRange) { |
| | | this.entity.createTimeRange = []; |
| | | } |
| | | console.log("entity", this.entity); |
| | | getReportCountInfo(this.entity) |
| | | .then((res) => { |
| | | this.unSubmitCount = res.data.unSubmitCount; |
| | | this.unRatifyCount = res.data.unRatifyCount; |
| | | this.unExamineCount = res.data.unExamineCount; |
| | | }) |
| | | .catch((error) => { |
| | | console.error(error); |
| | | }); |
| | | }, |
| | | refresh() { |
| | | this.entity = this.HaveJson(this.entityCopy); |
| | | this.upIndex++; |
| | | this.mutiList = []; |
| | | this.getReportCountInfo(); |
| | | }, |
| | | async handleWeave(row) { |
| | | let fileName = row.urlS === null || row.urlS === "" ? row.url : row.urlS; |
| | | fileName = fileName.replace("/word/", ""); |
| | | const userName = this.$store.state.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"); |
| | | }, |
| | | 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) { |
| | | getReportInfo({ id: row.id, type: 1,suffix:'.docx' }).then((response) => { |
| | | if (response.data && response.data.contentType) { |
| | | downLoad({ id: row.id, type: 1, code: row.code,suffix: '.docx' }) |
| | | .then((res) => { |
| | | // è·åæä»¶å |
| | | const blob = new Blob([res], { type: response.data.contentType }); |
| | | const url = URL.createObjectURL(blob); |
| | | let link = document.createElement("a"); |
| | | link.href = url; |
| | | link.download = row.code; |
| | | document.body.appendChild(link); |
| | | link.click(); |
| | | document.body.removeChild(link); |
| | | URL.revokeObjectURL(url); |
| | | }) |
| | | .catch((error) => { |
| | | this.$message.error(error); |
| | | }); |
| | | } else { |
| | | this.$message.error("æªæ¾å°æä»¶"); |
| | | } |
| | | }); |
| | | }, |
| | | // è¿åæä½ |
| | | handleRestore(row) { |
| | | this.$confirm("æ¯å¦è¿åå½åæ¥å?", "è¿å", { |
| | | confirmButtonText: "è¿å", |
| | | cancelButtonText: "åæ¶", |
| | | type: "warning", |
| | | }) |
| | | .then(() => { |
| | | upReportUrl({ id: row.id,type:1 }).then((res) => { |
| | | if (res.code === 200) { |
| | | this.$message.success("æä½æå"); |
| | | this.refreshTable("page"); |
| | | } |
| | | }); |
| | | }) |
| | | .catch({}()); |
| | | }, |
| | | handleIssued(row) { |
| | | this.currentInfo = row; |
| | | let fileName = row.urlS === null || row.urlS === "" ? row.url : row.urlS; |
| | | fileName = fileName.replace("/word/", ""); |
| | | const userName = JSON.parse(localStorage.getItem("user")).name; |
| | | this.option = { |
| | | url: this.javaApi + "/word/" + fileName, |
| | | isEdit: false, |
| | | fileType: "docx", |
| | | title: fileName, |
| | | lang: "zh-CN", |
| | | isPrint: false, |
| | | user_id: 1, |
| | | user_name: userName, |
| | | editUrl: |
| | | this.javaApi + "/insReport/onlyOffice/save?fileName=" + fileName, |
| | | }; |
| | | this.issuedVisible = true; |
| | | }, |
| | | // å®¡æ ¸éè¿ |
| | | subIssued() { |
| | | this.loadingIssued = true; |
| | | 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; |
| | | getURL().then(res => { |
| | | |
| | | }) |
| | | |
| | | |
| | | |
| | | let fileName = row.urlS === null || row.urlS === "" ? row.url : row.urlS; |
| | | fileName = fileName.replace("/word/", ""); |
| | | const userName = this.$store.state.user.name; |
| | | this.option = { |
| | | url: javaApi + "/word/" + fileName, |
| | | isEdit: false, |
| | | fileType: "docx", |
| | | title: fileName, |
| | | lang: "zh-CN", |
| | | isPrint: false, |
| | | user_id: 1, |
| | | user_name: userName, |
| | | editUrl: |
| | | this.javaApi + "/insReport/onlyOffice/save?fileName=" + fileName, |
| | | }; |
| | | this.approveVisible = true; |
| | | }, |
| | | // æ¹åéè¿ |
| | | subApprove() { |
| | | this.loadingApprove = true; |
| | | 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("page"); |
| | | this.currentInfo = null; |
| | | this.approveVisible = false; |
| | | }); |
| | | }, |
| | | // æäº¤æä½ |
| | | handleSubmit(row) { |
| | | this.$confirm("æ¯å¦æäº¤å½åæ¥å?", "æäº¤", { |
| | | confirmButtonText: "æäº¤", |
| | | cancelButtonText: "åæ¶", |
| | | type: "warning", |
| | | }) |
| | | .then(() => { |
| | | writeReport({ id: row.id }) |
| | | .then((res) => { |
| | | if (res.code === 201) { |
| | | return; |
| | | } |
| | | this.$message.success("æäº¤æå"); |
| | | this.refreshTable("page"); |
| | | }) |
| | | .catch((e) => { |
| | | this.$message.error("æäº¤å¤±è´¥"); |
| | | }); |
| | | }) |
| | | .catch(() => {}); |
| | | }, |
| | | // å®¡æ ¸ä¸éè¿åå æäº¤ |
| | | handleIssuedReason() { |
| | | if (!this.reason) { |
| | | return this.$message.error("请è¾å
¥åå "); |
| | | } |
| | | this.loadingIssuedReason = true; |
| | | 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; |
| | | examineReport({ |
| | | id: this.currentInfo.id, |
| | | isRatify: 0, |
| | | ratifyTell: 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; |
| | | }); |
| | | }, |
| | | handleClose() { |
| | | this.withdrawDialogVisible = false; |
| | | this.laboratory = []; |
| | | }, |
| | | getStyle() { |
| | | return "height: calc(100% - " + (this.more ? "94" : "44") + "px)"; |
| | | }, |
| | | }, |
| | | }; |
| | | </script> |
| ¶Ô±ÈÐÂÎļþ |
| | |
| | | <!--onlyoffice ç¼è¾å¨--> |
| | | <template> |
| | | <div id="vabOnlyOffice"></div> |
| | | </template> |
| | | |
| | | <script> |
| | | export default { |
| | | name: "VabOnlyOffice", |
| | | props: ['options'], |
| | | data() { |
| | | return { |
| | | doctype: "", |
| | | docEditor: null, |
| | | //åèvabOnlyOfficeç»ä»¶åæ°é
ç½® |
| | | option: { |
| | | url: "", |
| | | isEdit: false, |
| | | fileType: "", |
| | | title: "", |
| | | lang: "zh-CN", |
| | | isPrint: true, |
| | | user: {}, |
| | | editUrl: "" |
| | | } |
| | | }; |
| | | }, |
| | | created() { |
| | | if(this.options){ |
| | | const option = this.options |
| | | this.option.url = option.url |
| | | this.option.isEdit = option.isEdit === "true" ? true : false |
| | | this.option.fileType = option.fileType |
| | | this.option.title = option.title |
| | | this.option.lang = option.lang |
| | | this.option.isPrint = option.isPrint |
| | | this.option.user.id = option.user_id |
| | | this.option.user.name = option.user_name |
| | | this.option.editUrl = option.editUrl |
| | | }else{ |
| | | const option = this.$route.query |
| | | this.option.url = option.url |
| | | this.option.isEdit = option.isEdit === "true" ? true : false |
| | | this.option.fileType = option.fileType |
| | | this.option.title = option.title |
| | | this.option.lang = option.lang |
| | | this.option.isPrint = option.isPrint |
| | | this.option.user.id = option.user_id |
| | | this.option.user.name = option.user_name |
| | | this.option.editUrl = option.editUrl |
| | | } |
| | | }, |
| | | beforeDestroy() { |
| | | if (this.docEditor !== null) { |
| | | this.docEditor.destroyEditor(); |
| | | this.docEditor = null; |
| | | } |
| | | }, |
| | | watch: { |
| | | option: { |
| | | handler: function(n) { |
| | | this.setEditor(n); |
| | | this.doctype = this.getFileType(n.fileType); |
| | | }, |
| | | deep: true |
| | | } |
| | | }, |
| | | mounted() { |
| | | if (this.option.url) { |
| | | this.setEditor(this.option); |
| | | } |
| | | }, |
| | | methods: { |
| | | async setEditor(option) { |
| | | if (this.docEditor !== null) { |
| | | this.docEditor.destroyEditor(); |
| | | this.docEditor = null; |
| | | } |
| | | this.doctype = this.getFileType(option.fileType); |
| | | let config = { |
| | | document: { |
| | | //åç¼ |
| | | fileType: option.fileType, |
| | | key: option.key || "", |
| | | title: option.title, |
| | | permissions: { |
| | | edit: option.isEdit, //æ¯å¦å¯ä»¥ç¼è¾: åªè½æ¥çï¼ä¼ false |
| | | print: option.isPrint, |
| | | download: false |
| | | // "fillForms": true,//æ¯å¦å¯ä»¥å¡«åè¡¨æ ¼ï¼å¦æå°modeåæ°è®¾ç½®ä¸ºeditï¼åå¡«å表åä»
å¯¹ææ¡£ç¼è¾å¨å¯ç¨ã é»è®¤å¼ä¸editæreviewåæ°çå¼ä¸è´ã |
| | | // "review": true //è·è¸ªåå |
| | | }, |
| | | url: option.url |
| | | }, |
| | | documentType: this.doctype, |
| | | editorConfig: { |
| | | callbackUrl: option.editUrl, //"ç¼è¾wordåä¿åæ¶åè°çå°åï¼è¿ä¸ªapiéè¦èªå·±åäºï¼å°ç¼è¾åçæä»¶éè¿è¿ä¸ªapiä¿åå°èªå·±æ³è¦çä½ç½® |
| | | lang: option.lang, //è¯è¨è®¾ç½® |
| | | //å®å¶ |
| | | customization: { |
| | | autosave: true, //æ¯å¦èªå¨ä¿å |
| | | chat: true, |
| | | comments: false, |
| | | help: false, |
| | | "hideRightMenu": false,//å®ä¹å¨ç¬¬ä¸æ¬¡å è½½æ¶æ¯æ¾ç¤ºè¿æ¯éèå³ä¾§èåã é»è®¤å¼ä¸ºfalse |
| | | //æ¯å¦æ¾ç¤ºæä»¶ |
| | | plugins: false |
| | | }, |
| | | user: { |
| | | id: option.user.id, |
| | | name: option.user.name |
| | | }, |
| | | mode: option.model ? option.model : "edit" |
| | | }, |
| | | width: "100%", |
| | | height: "100%", |
| | | token: option.token || "" |
| | | }; |
| | | |
| | | // eslint-disable-next-line no-undef,no-unused-vars |
| | | this.docEditor = new DocsAPI.DocEditor("vabOnlyOffice", config); |
| | | }, |
| | | getFileType(fileType) { |
| | | let docType = ""; |
| | | let fileTypesDoc = [ |
| | | "doc", |
| | | "docm", |
| | | "docx", |
| | | "dot", |
| | | "dotm", |
| | | "dotx", |
| | | "epub", |
| | | "fodt", |
| | | "htm", |
| | | "html", |
| | | "mht", |
| | | "odt", |
| | | "ott", |
| | | "pdf", |
| | | "rtf", |
| | | "txt", |
| | | "djvu", |
| | | "xps" |
| | | ]; |
| | | let fileTypesCsv = [ |
| | | "csv", |
| | | "fods", |
| | | "ods", |
| | | "ots", |
| | | "xls", |
| | | "xlsm", |
| | | "xlsx", |
| | | "xlt", |
| | | "xltm", |
| | | "xltx" |
| | | ]; |
| | | let fileTypesPPt = [ |
| | | "fodp", |
| | | "odp", |
| | | "otp", |
| | | "pot", |
| | | "potm", |
| | | "potx", |
| | | "pps", |
| | | "ppsm", |
| | | "ppsx", |
| | | "ppt", |
| | | "pptm", |
| | | "pptx" |
| | | ]; |
| | | if (fileTypesDoc.includes(fileType)) { |
| | | docType = "text"; |
| | | } |
| | | if (fileTypesCsv.includes(fileType)) { |
| | | docType = "spreadsheet"; |
| | | } |
| | | if (fileTypesPPt.includes(fileType)) { |
| | | docType = "presentation"; |
| | | } |
| | | return docType; |
| | | } |
| | | } |
| | | }; |
| | | </script> |
| | | |
| | | <style> |
| | | html, |
| | | body { |
| | | height: 100%; |
| | | } |
| | | #app { |
| | | font-family: Avenir, Helvetica, Arial, sans-serif; |
| | | -webkit-font-smoothing: antialiased; |
| | | -moz-osx-font-smoothing: grayscale; |
| | | text-align: center; |
| | | color: #2c3e50; |
| | | height: 100%; |
| | | } |
| | | .qualityManual-container { |
| | | padding: 0 !important; |
| | | height: 100%; |
| | | } |
| | | .qualityManual-container-office { |
| | | width: 100%; |
| | | height: calc(100% - 55px); |
| | | } |
| | | </style> |
| | | |