|
|
@@ -112,12 +112,19 @@
|
|
|
<el-table-column label="操作" align="center" fixed="right" width="120" class-name="small-padding fixed-width">
|
|
|
<template slot-scope="scope">
|
|
|
<el-button
|
|
|
- size="mini"
|
|
|
- type="text"
|
|
|
- icon="el-icon-document"
|
|
|
- @click="openDetail(scope.row)"
|
|
|
+ size="mini"
|
|
|
+ type="text"
|
|
|
+ icon="el-icon-document"
|
|
|
+ @click="openDetail(scope.row)"
|
|
|
>详情
|
|
|
</el-button>
|
|
|
+ <el-button v-if="scope.row.approveStatus == 2"
|
|
|
+ size="mini"
|
|
|
+ type="text"
|
|
|
+ icon="el-icon-document"
|
|
|
+ @click="wordView(scope.row)"
|
|
|
+ >预览
|
|
|
+ </el-button>
|
|
|
</template>
|
|
|
</el-table-column>
|
|
|
</el-table>
|
|
|
@@ -131,36 +138,78 @@
|
|
|
/>
|
|
|
|
|
|
<el-dialog title="详情" :visible.sync="detail.open" width="70%" append-to-body close-on-click-modal>
|
|
|
- <el-descriptions class="margin-top" :column="2" border :label-style="{'width': '200px'}">
|
|
|
- <el-descriptions-item label="申请状态"><el-tag size="small" :type="approveStatusFlag">{{ approveStatus[detail.detailData.approveStatus] }}</el-tag></el-descriptions-item>
|
|
|
- <el-descriptions-item label="完成状态"><el-tag size="small" :type="statusFlag">{{ status[detail.detailData.status] }}</el-tag></el-descriptions-item>
|
|
|
+ <el-descriptions class="margin-top" :column="2" border :label-style="{'width': '200px'}">
|
|
|
+ <el-descriptions-item label="申请状态">
|
|
|
+ <el-tag size="small" :type="approveStatusFlag">{{ approveStatus[detail.detailData.approveStatus] }}</el-tag>
|
|
|
+ </el-descriptions-item>
|
|
|
+ <el-descriptions-item label="完成状态">
|
|
|
+ <el-tag size="small" :type="statusFlag">{{ status[detail.detailData.status] }}</el-tag>
|
|
|
+ </el-descriptions-item>
|
|
|
<el-descriptions-item label="锁编号">{{ detail.detailData.lockNo }}</el-descriptions-item>
|
|
|
<el-descriptions-item label="措施变更描述">{{ detail.detailData.changeDescribe }}</el-descriptions-item>
|
|
|
<el-descriptions-item label="状态变更原因">{{ detail.detailData.changeReason }}</el-descriptions-item>
|
|
|
<el-descriptions-item label="评估及临时的安全措施">{{ detail.detailData.safa }}</el-descriptions-item>
|
|
|
<el-descriptions-item label="申请人">{{ detail.detailData.applicantName }}</el-descriptions-item>
|
|
|
- <el-descriptions-item label="申请时间">{{ parseTime(detail.detailData.applicationTime, '{y}-{m}-{d}') }}</el-descriptions-item>
|
|
|
+ <el-descriptions-item label="申请时间">{{
|
|
|
+ parseTime(detail.detailData.applicationTime, '{y}-{m}-{d}')
|
|
|
+ }}
|
|
|
+ </el-descriptions-item>
|
|
|
<el-descriptions-item label="评估人">{{ detail.detailData.safaerName }}</el-descriptions-item>
|
|
|
- <el-descriptions-item label="评估时间">{{ parseTime(detail.detailData.safaTime, '{y}-{m}-{d}') }}</el-descriptions-item>
|
|
|
- <el-descriptions-item :span="2" label="组织保护措施状态变更执行">{{ detail.detailData.changeExecution }}</el-descriptions-item>
|
|
|
+ <el-descriptions-item label="评估时间">{{
|
|
|
+ parseTime(detail.detailData.safaTime, '{y}-{m}-{d}')
|
|
|
+ }}
|
|
|
+ </el-descriptions-item>
|
|
|
+ <el-descriptions-item :span="2" label="组织保护措施状态变更执行">{{
|
|
|
+ detail.detailData.changeExecution
|
|
|
+ }}
|
|
|
+ </el-descriptions-item>
|
|
|
<el-descriptions-item label="批准人">{{ detail.detailData.approverName }}</el-descriptions-item>
|
|
|
- <el-descriptions-item label="批准时间">{{ parseTime(detail.detailData.approveTime, '{y}-{m}-{d}') }}</el-descriptions-item>
|
|
|
+ <el-descriptions-item label="批准时间">{{
|
|
|
+ parseTime(detail.detailData.approveTime, '{y}-{m}-{d}')
|
|
|
+ }}
|
|
|
+ </el-descriptions-item>
|
|
|
<el-descriptions-item label="措施确认人">{{ detail.detailData.confirmerName }}</el-descriptions-item>
|
|
|
- <el-descriptions-item label="措施确认时间">{{ parseTime(detail.detailData.confirmTime, '{y}-{m}-{d}') }}</el-descriptions-item>
|
|
|
+ <el-descriptions-item label="措施确认时间">{{
|
|
|
+ parseTime(detail.detailData.confirmTime, '{y}-{m}-{d}')
|
|
|
+ }}
|
|
|
+ </el-descriptions-item>
|
|
|
<el-descriptions-item label="措施执行人">{{ detail.detailData.executorName }}</el-descriptions-item>
|
|
|
- <el-descriptions-item label="措施执行时间">{{ parseTime(detail.detailData.executionTime, '{y}-{m}-{d}') }}</el-descriptions-item>
|
|
|
+ <el-descriptions-item label="措施执行时间">{{
|
|
|
+ parseTime(detail.detailData.executionTime, '{y}-{m}-{d}')
|
|
|
+ }}
|
|
|
+ </el-descriptions-item>
|
|
|
<el-descriptions-item label="变更确认人">{{ detail.detailData.changeConfirmerName }}</el-descriptions-item>
|
|
|
- <el-descriptions-item label="变更确认人确认时间">{{ parseTime(detail.detailData.changeConfirmTime, '{y}-{m}-{d}') }}</el-descriptions-item>
|
|
|
+ <el-descriptions-item label="变更确认人确认时间">
|
|
|
+ {{ parseTime(detail.detailData.changeConfirmTime, '{y}-{m}-{d}') }}
|
|
|
+ </el-descriptions-item>
|
|
|
<el-descriptions-item label="变更执行人">{{ detail.detailData.changeExecutorName }}</el-descriptions-item>
|
|
|
- <el-descriptions-item label="变更执行时间">{{ parseTime(detail.detailData.changeExecutorTime, '{y}-{m}-{d}') }}</el-descriptions-item>
|
|
|
+ <el-descriptions-item label="变更执行时间">{{
|
|
|
+ parseTime(detail.detailData.changeExecutorTime, '{y}-{m}-{d}')
|
|
|
+ }}
|
|
|
+ </el-descriptions-item>
|
|
|
<el-descriptions-item label="班长">{{ detail.detailData.monitorName }}</el-descriptions-item>
|
|
|
- <el-descriptions-item label="班长确认时间">{{ parseTime(detail.detailData.monitorTime, '{y}-{m}-{d}') }}</el-descriptions-item>
|
|
|
+ <el-descriptions-item label="班长确认时间">{{
|
|
|
+ parseTime(detail.detailData.monitorTime, '{y}-{m}-{d}')
|
|
|
+ }}
|
|
|
+ </el-descriptions-item>
|
|
|
<el-descriptions-item label="确认人1">{{ detail.detailData.resetConfirmerName1 }}</el-descriptions-item>
|
|
|
- <el-descriptions-item label="确认时间1">{{ parseTime(detail.detailData.resetConfirmTime1, '{y}-{m}-{d}') }}</el-descriptions-item>
|
|
|
+ <el-descriptions-item label="确认时间1">{{
|
|
|
+ parseTime(detail.detailData.resetConfirmTime1, '{y}-{m}-{d}')
|
|
|
+ }}
|
|
|
+ </el-descriptions-item>
|
|
|
<el-descriptions-item label="确认人2">{{ detail.detailData.resetConfirmerName2 }}</el-descriptions-item>
|
|
|
- <el-descriptions-item label="确认时间2">{{ parseTime(detail.detailData.resetConfirmTime2, '{y}-{m}-{d}') }}</el-descriptions-item>
|
|
|
- <el-descriptions-item label="状态恢复后,之前采取的安全措施是否已撤销:">{{ detail.detailData.revokeConfirm }}</el-descriptions-item>
|
|
|
- <el-descriptions-item label="组织保护措施是否已经恢复至变更前的状态">{{ detail.detailData.resetConfirm }}</el-descriptions-item>
|
|
|
+ <el-descriptions-item label="确认时间2">{{
|
|
|
+ parseTime(detail.detailData.resetConfirmTime2, '{y}-{m}-{d}')
|
|
|
+ }}
|
|
|
+ </el-descriptions-item>
|
|
|
+ <el-descriptions-item label="状态恢复后,之前采取的安全措施是否已撤销:">{{
|
|
|
+ detail.detailData.revokeConfirm
|
|
|
+ }}
|
|
|
+ </el-descriptions-item>
|
|
|
+ <el-descriptions-item label="组织保护措施是否已经恢复至变更前的状态">{{
|
|
|
+ detail.detailData.resetConfirm
|
|
|
+ }}
|
|
|
+ </el-descriptions-item>
|
|
|
<el-descriptions-item :span="2" label="备注">{{ detail.detailData.remarks }}</el-descriptions-item>
|
|
|
</el-descriptions>
|
|
|
<div class="mt5">
|
|
|
@@ -231,35 +280,24 @@
|
|
|
<el-button @click="cancel">取 消</el-button>
|
|
|
</div>
|
|
|
</el-dialog>
|
|
|
- <!-- 用户导入对话框 -->
|
|
|
- <el-dialog :title="upload.title" :visible.sync="upload.open" width="400px" append-to-body>
|
|
|
- <el-upload
|
|
|
- ref="upload"
|
|
|
- :limit="1"
|
|
|
- accept=".xlsx, .xls"
|
|
|
- :headers="upload.headers"
|
|
|
- :action="upload.url + '?updateSupport=' + upload.updateSupport"
|
|
|
- :disabled="upload.isUploading"
|
|
|
- :on-progress="handleFileUploadProgress"
|
|
|
- :on-success="handleFileSuccess"
|
|
|
- :auto-upload="false"
|
|
|
- drag
|
|
|
- >
|
|
|
- <i class="el-icon-upload"></i>
|
|
|
- <div class="el-upload__text">
|
|
|
- 将文件拖到此处,或
|
|
|
- <em>点击上传</em>
|
|
|
- </div>
|
|
|
- <div class="el-upload__tip" slot="tip">
|
|
|
- <el-checkbox v-model="upload.updateSupport"/>
|
|
|
- 是否更新已经存在的用户数据
|
|
|
- <el-link type="info" style="font-size:12px" @click="importTemplate">下载模板</el-link>
|
|
|
- </div>
|
|
|
- <div class="el-upload__tip" style="color:red" slot="tip">提示:仅允许导入“xls”或“xlsx”格式文件!</div>
|
|
|
- </el-upload>
|
|
|
- <div slot="footer" class="dialog-footer">
|
|
|
- <el-button type="primary" @click="submitFileForm">确 定</el-button>
|
|
|
- <el-button @click="upload.open = false">取 消</el-button>
|
|
|
+
|
|
|
+ <el-dialog :close-on-click-modal="false" v-loading="loadingFlash" element-loading-background="rgba(0,0,0,0.2)"
|
|
|
+ v-dialogDrag :title="pdf.title"
|
|
|
+ :visible.sync="pdf.open" width="1300px" :center="true" append-to-body>
|
|
|
+ <div style="margin-top: -60px;float: right;margin-right: 40px;">
|
|
|
+ <el-button size="mini" type="text" @click="openPdf">{{ $t('新页面打开PDF') }}</el-button>
|
|
|
+ </div>
|
|
|
+ <div style="margin-top: -30px">
|
|
|
+ <iframe id="iFrame" class="iframe-html" :src="pdf.pdfUrl" frameborder="0" width="100%" height="700px"
|
|
|
+ v-if="ppt"></iframe>
|
|
|
+ </div>
|
|
|
+ <div style="padding: 30px; width: 100%; height: 100%;">
|
|
|
+ <el-carousel class="" ref="carousel" arrow="always" v-if="pptView"
|
|
|
+ height="700px" trigger="click" :autoplay="false" indicator-position="outside">
|
|
|
+ <el-carousel-item class="lun_img" v-for="item in imgs" v-bind:key="item">
|
|
|
+ <img :src="item" width="100%" height="100%" object-fit="cover"/>
|
|
|
+ </el-carousel-item>
|
|
|
+ </el-carousel>
|
|
|
</div>
|
|
|
</el-dialog>
|
|
|
</div>
|
|
|
@@ -273,7 +311,8 @@ import {
|
|
|
addEoegChange,
|
|
|
updateEoegChange,
|
|
|
exportEoegChange,
|
|
|
- importTemplate
|
|
|
+ importTemplate,
|
|
|
+ wordView
|
|
|
} from "@/api/eoeg/eoegChange";
|
|
|
import {treeselect} from "@/api/system/dept";
|
|
|
import {getToken} from "@/utils/auth";
|
|
|
@@ -289,9 +328,18 @@ export default {
|
|
|
components: {Treeselect},
|
|
|
data() {
|
|
|
return {
|
|
|
- detail:{
|
|
|
- open:false,
|
|
|
- detailData:{}
|
|
|
+ detail: {
|
|
|
+ open: false,
|
|
|
+ detailData: {}
|
|
|
+ },
|
|
|
+ pdf: {
|
|
|
+ title: '',
|
|
|
+ pdfUrl: '',
|
|
|
+ numPages: null,
|
|
|
+ open: false,
|
|
|
+ pageNum: 1,
|
|
|
+ pageTotalNum: 1,
|
|
|
+ loadedRatio: 0,
|
|
|
},
|
|
|
statusFlag: '',
|
|
|
approveStatusFlag: '',
|
|
|
@@ -399,28 +447,28 @@ export default {
|
|
|
// 表单校验
|
|
|
rules: {
|
|
|
lockNo: [
|
|
|
- { required: true, message: '锁编号不能为空', trigger: 'change' }
|
|
|
+ {required: true, message: '锁编号不能为空', trigger: 'change'}
|
|
|
],
|
|
|
changeDescribe: [
|
|
|
- { required: true, message: '组织保护措施变更描述不能为空', trigger: 'blur' }
|
|
|
+ {required: true, message: '组织保护措施变更描述不能为空', trigger: 'blur'}
|
|
|
],
|
|
|
changeReason: [
|
|
|
- { required: true, message: '状态变更原因不能为空', trigger: 'blur' }
|
|
|
+ {required: true, message: '状态变更原因不能为空', trigger: 'blur'}
|
|
|
],
|
|
|
safa: [
|
|
|
- { required: true, message: '安全评估及临时的安全措施不能为空', trigger: 'blur' }
|
|
|
+ {required: true, message: '安全评估及临时的安全措施不能为空', trigger: 'blur'}
|
|
|
],
|
|
|
safaer: [
|
|
|
- { required: true, message: '评估人不能为空', trigger: 'change' }
|
|
|
+ {required: true, message: '评估人不能为空', trigger: 'change'}
|
|
|
],
|
|
|
executor: [
|
|
|
- { required: true, message: '措施执行人不能为空', trigger: 'change' }
|
|
|
+ {required: true, message: '措施执行人不能为空', trigger: 'change'}
|
|
|
],
|
|
|
changeExecutor: [
|
|
|
- { required: true, message: '变更执行人不能为空', trigger: 'change' }
|
|
|
+ {required: true, message: '变更执行人不能为空', trigger: 'change'}
|
|
|
],
|
|
|
changeConfirmer: [
|
|
|
- { required: true, message: '变更确认人不能为空', trigger: 'change' }
|
|
|
+ {required: true, message: '变更确认人不能为空', trigger: 'change'}
|
|
|
],
|
|
|
}
|
|
|
|
|
|
@@ -449,7 +497,77 @@ export default {
|
|
|
this.approveStatusList = response.data;
|
|
|
});
|
|
|
},
|
|
|
- methods: {// 字典翻译
|
|
|
+ methods: {
|
|
|
+ wordView(row) {
|
|
|
+ wordView(row.id).then(response => {
|
|
|
+ console.log(response.msg)
|
|
|
+ this.handleSee("申请单", response.msg)
|
|
|
+ });
|
|
|
+ },
|
|
|
+ handleSee(fileName, url) {
|
|
|
+ //office预览
|
|
|
+ this.loadingFlash = true
|
|
|
+ this.pdf.open = true
|
|
|
+ this.pdf.title = fileName
|
|
|
+ this.pdf.pdfUrl = ""
|
|
|
+ this.pptView = false
|
|
|
+ this.ppt = true
|
|
|
+ //如果是PDF等直接可以打开的就不调接口,否则调用接口
|
|
|
+ if (fileName.endsWith('pdf')) {
|
|
|
+ this.pdf.pdfUrl = process.env.VUE_APP_BASE_API + '/pdf/web/viewer.html?file=' + process.env.VUE_APP_BASE_API + url
|
|
|
+ this.loadingFlash = false
|
|
|
+ } else {
|
|
|
+ const formatDate = new FormData();
|
|
|
+ formatDate.append("filepath", url)
|
|
|
+ //调用文件预览api
|
|
|
+ let res = this.officeConvert.bookConvertCommon(formatDate)
|
|
|
+ //查看接受全局方法的返回结果 console.log(res)
|
|
|
+ //利用.then方法接受Promise对象
|
|
|
+ res.then((result) => {
|
|
|
+ //关闭加载中
|
|
|
+ this.loadingFlash = false
|
|
|
+ if (result.msg.includes("csv")) {
|
|
|
+ this.pdf.pdfUrl = process.env.VUE_APP_BASE_API + result.data
|
|
|
+ this.$alert(result.msg, this.$t('检查乱码'), {dangerouslyUseHTMLString: true});
|
|
|
+ // this.$message({message: result.msg, center: true,type:'warning', offset:400, });
|
|
|
+ } else if (result.msg.includes("不存在")) {
|
|
|
+ //文件不存在时提示
|
|
|
+ this.pdf.pdfUrl = ""
|
|
|
+ this.$alert(result.msg, this.$t('预览失败'), {dangerouslyUseHTMLString: true});
|
|
|
+ // this.$message({message: result.msg, center: true,type:'warning', offset:400, });
|
|
|
+ this.pdf.open = false
|
|
|
+ } else if (result.msg.includes("不支持此格式")) {
|
|
|
+ this.pdf.pdfUrl = ""
|
|
|
+ this.$alert(result.msg, this.$t('预览失败'), {dangerouslyUseHTMLString: true});
|
|
|
+ // this.$message({message: result.msg, center: true,type:'warning', offset:400, });
|
|
|
+ this.pdf.open = false
|
|
|
+ } else {
|
|
|
+ //成功时直接给地址
|
|
|
+ this.pdf.pdfUrl = process.env.VUE_APP_BASE_API + result.data
|
|
|
+ }
|
|
|
+ }).catch(result => {
|
|
|
+ //请求失败,关闭loading,pdf地址直接为为空,不显示
|
|
|
+ this.pdf.pdfUrl = ""
|
|
|
+ this.loadingFlash = false;
|
|
|
+ })
|
|
|
+ }
|
|
|
+ },
|
|
|
+ //文件预览
|
|
|
+ openPdf() {
|
|
|
+ //ppt就跳路由预览,office就直接打开文件新页面
|
|
|
+ const didi = {imgs: this.imgs}
|
|
|
+ if (this.pptView == true && this.ppt == false) {
|
|
|
+ let routeUrl = this.$router.resolve({
|
|
|
+ path: "/cpms/index.html#/pptyulan",
|
|
|
+ query: didi
|
|
|
+ });
|
|
|
+ window.open("/cpms/index.html#/pptyulan?id=" + this.pdf.pdfUrl, '_blank')
|
|
|
+ console.log(this.imgs)
|
|
|
+ } else {
|
|
|
+ window.open(this.pdf.pdfUrl)
|
|
|
+ }
|
|
|
+ },
|
|
|
+ // 字典翻译
|
|
|
approveStatusFormat(row, column) {
|
|
|
let s = this.selectDictLabel(this.approveStatusList, row.approveStatus)
|
|
|
let type = '';
|
|
|
@@ -516,9 +634,9 @@ export default {
|
|
|
this.classStaffOptions = response.data;
|
|
|
});
|
|
|
},
|
|
|
- openDetail(row){
|
|
|
- this.detail.open=true;
|
|
|
- this.detail.detailData=row;
|
|
|
+ openDetail(row) {
|
|
|
+ this.detail.open = true;
|
|
|
+ this.detail.detailData = row;
|
|
|
this.statusFlag = '';
|
|
|
this.approveStatusFlag = '';
|
|
|
if (row.status === 1) {
|
|
|
@@ -532,8 +650,8 @@ export default {
|
|
|
this.approveStatusFlag = 'danger';
|
|
|
}
|
|
|
let processId;
|
|
|
- listLockApply({changeId:row.id}).then(res=>{
|
|
|
- processId=res.rows[0].processId;
|
|
|
+ listLockApply({changeId: row.id}).then(res => {
|
|
|
+ processId = res.rows[0].processId;
|
|
|
getHistorylist({processId: processId}).then(response => {
|
|
|
this.historyList = response.rows;
|
|
|
this.historyLoading = false
|
|
|
@@ -541,7 +659,7 @@ export default {
|
|
|
})
|
|
|
},
|
|
|
getLockList() {
|
|
|
- listEoegLock({}).then(response => {
|
|
|
+ listEoegLock({status:0}).then(response => {
|
|
|
this.lockList = response.rows;
|
|
|
});
|
|
|
},
|