审核预览文件时增加输入框 初步调试

This commit is contained in:
BianLzhaoMin 2025-02-11 17:39:37 +08:00
parent de3a1dd6ed
commit 8d5ca641b1
7 changed files with 641 additions and 491 deletions

Binary file not shown.

Before

Width:  |  Height:  |  Size: 5.4 KiB

After

Width:  |  Height:  |  Size: 7.7 KiB

View File

@ -3,35 +3,21 @@
<div v-if="items.length === 0" class="no-files"> <div v-if="items.length === 0" class="no-files">
<img src="../../assets/file/no_file.png" alt="文件图标" /> <img src="../../assets/file/no_file.png" alt="文件图标" />
</div> </div>
<div <div v-for="(item, index) in items" :key="index" class="file-item">
v-for="(item, index) in items" <div class="file-icon" @click="handView(item)" :title="item.fileName" style="cursor: pointer">
:key="index" <img v-if="getIconPaths(item.fileName) === 'word.png'" src="@/assets/file/word.png" alt="文件图标" />
class="file-item" <img v-else-if="getIconPaths(item.fileName) === 'excel.png'" src="@/assets/file/excel.png" alt="文件图标" />
> <img v-else-if="getIconPaths(item.fileName) === 'pdf.png'" src="@/assets/file/pdf.png" alt="文件图标" />
<div class="file-icon" @click="handView(item)" :title="item.fileName" style="cursor: pointer"> <img v-else-if="getIconPaths(item.fileName) === 'txt.png'" src="@/assets/file/txt.png" alt="文件图标" />
<img v-if="getIconPaths(item.fileName) === 'word.png'" <img v-else-if="getIconPaths(item.fileName) === 'ppt.png'" src="@/assets/file/ppt.png" alt="文件图标" />
src="@/assets/file/word.png" alt="文件图标" <img v-else-if="getIconPaths(item.fileName) === 'png'" :src="`${lookFile + item.filePath}`" alt="文件图标" />
/>
<img v-else-if="getIconPaths(item.fileName) === 'excel.png'"
src="@/assets/file/excel.png" alt="文件图标"
/>
<img v-else-if="getIconPaths(item.fileName) === 'pdf.png'"
src="@/assets/file/pdf.png" alt="文件图标"
/>
<img v-else-if="getIconPaths(item.fileName) === 'txt.png'"
src="@/assets/file/txt.png" alt="文件图标"
/>
<img v-else-if="getIconPaths(item.fileName) === 'ppt.png'"
src="@/assets/file/ppt.png" alt="文件图标"
/>
<img v-else-if="getIconPaths(item.fileName) === 'png'"
:src="`${lookFile + item.filePath}`" alt="文件图标"
/>
</div> </div>
<div class="file-details"> <div class="file-details">
<div class="file-name" :title="item.fileName"> <div class="file-name" :title="item.fileName">
{{ item.fileName.length > 8 ? item.fileName.substring(0, 8) + '....' + item.fileName.split('.').pop().toLowerCase() : item.fileName {{
item.fileName.length > 8
? item.fileName.substring(0, 8) + '....' + item.fileName.split('.').pop().toLowerCase()
: item.fileName
}} }}
<div class="file-info"> <div class="file-info">
<div class="file-size">{{ (item.fileSize / 1024).toFixed(2) + 'Kb' }}</div> <div class="file-size">{{ (item.fileSize / 1024).toFixed(2) + 'Kb' }}</div>
@ -40,14 +26,30 @@
</div> </div>
</div> </div>
</div> </div>
<el-dialog title="文件预览" :visible.sync="viewOpen" width="90%" append-to-body> <el-dialog title="文件预览" :visible.sync="viewOpen" width="90%" append-to-body @closed="onCloseFileDialog">
<div style="width: 100%;height:720px"> <div style="width: 100%; height: 720px">
<bns-kkFile-preview :items="filePreview" v-on:fillInComments="handleFillInComments"></bns-kkFile-preview> <el-row>
<el-col :span="!isShowOptions ? 24 : 18">
<div>
<bns-kkFile-preview :items="filePreview" v-on:fillInComments="handleFillInComments"></bns-kkFile-preview>
</div>
</el-col>
<el-col :span="isShowOptions ? 6 : 0">
<div style="padding-left: 12px" v-if="isShowOptions">
<el-input
type="textarea"
:autosize="{ minRows: 30, maxRows: 50 }"
placeholder="请输入意见"
v-model="opinionValue"
maxlength="200"
show-word-limit
/>
</div>
</el-col>
</el-row>
</div> </div>
</el-dialog> </el-dialog>
</div> </div>
</template> </template>
<script> <script>
import bnsKkFilePreview from '@/components/pro-tabs/bns-kkFile-preview.vue' import bnsKkFilePreview from '@/components/pro-tabs/bns-kkFile-preview.vue'
@ -56,17 +58,35 @@ import { lookFaceFile } from '@/utils/bonus'
export default { export default {
components: { components: {
'bns-kkFile-preview': bnsKkFilePreview 'bns-kkFile-preview': bnsKkFilePreview,
}, },
props: { props: {
items: { items: {
type: Array, type: Array,
default: () => { default: () => {
return { return {
label: '' label: '',
} }
} },
} },
//
isShowOptions: {
type: Boolean,
default: false,
},
// taps
opinionValueOther: {
type: String,
default: '',
},
},
watch: {
opinionValueOther: {
handler(newValue) {
this.opinionValue = newValue
},
deep: true,
},
}, },
data() { data() {
return { return {
@ -74,10 +94,11 @@ export default {
filePreview: { filePreview: {
filePreviewUrl: '', filePreviewUrl: '',
fileName: '', fileName: '',
showDownloadButton: false showDownloadButton: false,
}, },
iconSrc: '', iconSrc: '',
lookFile: '' lookFile: '',
opinionValue: '',
} }
}, },
created() { created() {
@ -92,13 +113,19 @@ export default {
this.viewOpen = true this.viewOpen = true
this.filePreview = { this.filePreview = {
filePreviewUrl: item.filePath, filePreviewUrl: item.filePath,
fileName: item.fileName fileName: item.fileName,
} }
}, },
handleFillInComments: function(e) { handleFillInComments: function (e) {
console.log('handleFillInComments', e) console.log('handleFillInComments', e)
} },
}
//
onCloseFileDialog() {
//
this.$emit('onCloseFileDialog', this.opinionValue)
},
},
} }
</script> </script>
<style scoped> <style scoped>

View File

@ -170,6 +170,12 @@ export default {
type: Number, type: Number,
default: 1, default: 1,
}, },
//
opinionValueOther: {
type: String,
default: () => '',
},
}, },
computed: { computed: {
store() { store() {
@ -191,6 +197,15 @@ export default {
}, },
deep: true, deep: true,
}, },
opinionValueOther: {
handler(newValue) {
if (newValue && this.isExamine) {
this.reason = newValue
}
},
deep: true,
},
}, },
data() { data() {
return { return {

View File

@ -6,26 +6,26 @@ const cbc_iv = CryptoJS.enc.Utf8.parse('1234567812345678')
* 默认参数需要加密 * 默认参数需要加密
* @type {boolean} * @type {boolean}
*/ */
const jia_mi=false; const jia_mi = false
/** /**
* 默认后台会自动加密 * 默认后台会自动加密
* @type {boolean} * @type {boolean}
*/ */
const jie_mi=false; const jie_mi = false
/** /**
* 加密 * 加密
* @param word * @param word
* @returns {string} * @returns {string}
*/ */
export const encryptCBC = function(word) { export const encryptCBC = function (word) {
if(!jia_mi){ if (!jia_mi) {
return word; return word
} }
const srcs = CryptoJS.enc.Utf8.parse(word) const srcs = CryptoJS.enc.Utf8.parse(word)
const encrypted = CryptoJS.AES.encrypt(srcs, cbc_key, { const encrypted = CryptoJS.AES.encrypt(srcs, cbc_key, {
iv: cbc_iv, iv: cbc_iv,
mode: CryptoJS.mode.CBC, mode: CryptoJS.mode.CBC,
padding: CryptoJS.pad.Pkcs7 padding: CryptoJS.pad.Pkcs7,
}) })
return encrypted.toString() return encrypted.toString()
} }
@ -35,14 +35,14 @@ export const encryptCBC = function(word) {
* @param word * @param word
* @returns {*} * @returns {*}
*/ */
export const decryptCBC = function(word) { export const decryptCBC = function (word) {
if(!jie_mi){ if (!jie_mi) {
return word; return word
} }
const encrypted = CryptoJS.AES.decrypt(word, cbc_key, { const encrypted = CryptoJS.AES.decrypt(word, cbc_key, {
iv: cbc_iv, iv: cbc_iv,
mode: CryptoJS.mode.CBC, mode: CryptoJS.mode.CBC,
padding: CryptoJS.pad.Pkcs7 padding: CryptoJS.pad.Pkcs7,
}) })
return encrypted.toString(CryptoJS.enc.Utf8) return encrypted.toString(CryptoJS.enc.Utf8)
} }
@ -52,12 +52,12 @@ export const decryptCBC = function(word) {
* @param word * @param word
* @returns {string} * @returns {string}
*/ */
export const encryptCBCTime= function(word) { export const encryptCBCTime = function (word) {
const srcs = CryptoJS.enc.Utf8.parse(word) const srcs = CryptoJS.enc.Utf8.parse(word)
const encrypted = CryptoJS.AES.encrypt(srcs, cbc_key, { const encrypted = CryptoJS.AES.encrypt(srcs, cbc_key, {
iv: cbc_iv, iv: cbc_iv,
mode: CryptoJS.mode.CBC, mode: CryptoJS.mode.CBC,
padding: CryptoJS.pad.Pkcs7 padding: CryptoJS.pad.Pkcs7,
}) })
return encrypted.toString() return encrypted.toString()
} }

View File

@ -7,28 +7,19 @@
placeholder="请输入关键字" placeholder="请输入关键字"
maxlength="60" maxlength="60"
show-word-limit show-word-limit
clearable v-no-whitespace clearable
v-no-whitespace
@keyup.enter.native="handleQuery" @keyup.enter.native="handleQuery"
/> />
</el-form-item> </el-form-item>
<el-form-item label="工程" prop="proName" v-if="hideOrNot"> <el-form-item label="工程" prop="proName" v-if="hideOrNot">
<el-select v-model="queryParams.proName" placeholder="请选择工程" clearable> <el-select v-model="queryParams.proName" placeholder="请选择工程" clearable>
<el-option <el-option v-for="dict in proNameDict" :key="dict.value" :label="dict.label" :value="dict.value" />
v-for="dict in proNameDict"
:key="dict.value"
:label="dict.label"
:value="dict.value"
/>
</el-select> </el-select>
</el-form-item> </el-form-item>
<el-form-item label="审批状态" prop="status"> <el-form-item label="审批状态" prop="status">
<el-select v-model="queryParams.status" placeholder="请选择审批状态" clearable> <el-select v-model="queryParams.status" placeholder="请选择审批状态" clearable>
<el-option <el-option v-for="dict in approvalStatus" :key="dict.value" :label="dict.label" :value="dict.value" />
v-for="dict in approvalStatus"
:key="dict.value"
:label="dict.label"
:value="dict.value"
/>
</el-select> </el-select>
</el-form-item> </el-form-item>
<el-form-item> <el-form-item>
@ -36,10 +27,13 @@
<el-button icon="el-icon-refresh" size="mini" @click="resetQuery">重置</el-button> <el-button icon="el-icon-refresh" size="mini" @click="resetQuery">重置</el-button>
</el-form-item> </el-form-item>
</el-form> </el-form>
<right-toolbar :showSearch.sync="showSearch" @queryTable="getList" :style="{float:'right'}"></right-toolbar> <right-toolbar :showSearch.sync="showSearch" @queryTable="getList" :style="{ float: 'right' }"></right-toolbar>
<el-table v-loading="loading" :data="proList" @selection-change="handleSelectionChange" <el-table
:index="indexContinuous(queryParams.pageNum, queryParams.pageSize)" v-loading="loading"
:data="proList"
@selection-change="handleSelectionChange"
:index="indexContinuous(queryParams.pageNum, queryParams.pageSize)"
> >
<el-table-column label="序号" type="index" width="55" align="center" /> <el-table-column label="序号" type="index" width="55" align="center" />
<el-table-column label="工程名称" align="center" prop="proName" /> <el-table-column label="工程名称" align="center" prop="proName" />
@ -57,51 +51,49 @@
<el-table-column label="承包商负责人联系方式" align="center"> <el-table-column label="承包商负责人联系方式" align="center">
<template slot-scope="scope"> <template slot-scope="scope">
<!-- 检查是否存在身份证号 --> <!-- 检查是否存在身份证号 -->
<span v-if="scope.row.contractorPrincipalPhone">{{ hideSensitiveInfo(scope.row.contractorPrincipalPhone) <span v-if="scope.row.contractorPrincipalPhone">
}}</span> {{ hideSensitiveInfo(scope.row.contractorPrincipalPhone) }}
</span>
<span v-else>-</span> <span v-else>-</span>
</template> </template>
</el-table-column> </el-table-column>
<el-table-column label="审批状态" align="center" prop="intoStatus" > <el-table-column label="审批状态" align="center" prop="intoStatus">
<template slot-scope="scope"> <template slot-scope="scope">
<!-- 检查是否存在身份证号 --> <!-- 检查是否存在身份证号 -->
<span v-if="scope.row.intoStatus">{{ updateStatus(scope.row.intoStatus) <span v-if="scope.row.intoStatus">{{ updateStatus(scope.row.intoStatus) }}</span>
}}</span> <span v-else>-</span>
<span v-else>-</span> </template>
</template>
</el-table-column> </el-table-column>
<el-table-column label="操作" width="300px" align="center" class-name="small-padding fixed-width"> <el-table-column label="操作" width="300px" align="center" class-name="small-padding fixed-width">
<template slot-scope="scope"> <template slot-scope="scope">
<el-button <el-button
size="mini" size="mini"
type="text" type="text"
@click="examine(scope.row,1)" @click="examine(scope.row, 1)"
v-if="scope.row.status === '1'" v-if="scope.row.status === '1'"
v-hasPermi="['system:consApproval:approval']" v-hasPermi="['system:consApproval:approval']"
>审核 >
审核
</el-button> </el-button>
<el-button <el-button
size="mini" size="mini"
type="text" type="text"
@click="examine(scope.row,2)" @click="examine(scope.row, 2)"
v-hasPermi="['system:consApproval:approval']" v-hasPermi="['system:consApproval:approval']"
v-else v-else
>查看 >
查看
</el-button> </el-button>
<el-button <el-button size="mini" type="text" @click="auditRecord(scope.row)" v-hasPermi="['system:audit:query']">
size="mini" 审核记录
type="text"
@click="auditRecord(scope.row)"
v-hasPermi="['system:audit:query']"
>审核记录
</el-button> </el-button>
</template> </template>
</el-table-column> </el-table-column>
</el-table> </el-table>
<pagination <pagination
v-show="total>0" v-show="total > 0"
:total="total" :total="total"
:page.sync="queryParams.pageNum" :page.sync="queryParams.pageNum"
:limit.sync="queryParams.pageSize" :limit.sync="queryParams.pageSize"
@ -145,20 +137,19 @@ export default {
keyword: undefined, keyword: undefined,
proName: undefined, proName: undefined,
start: undefined, start: undefined,
status:'1' status: '1',
}, },
// //
form: {}, form: {},
// //
rules: {}, rules: {},
statusDict:{ statusDict: {
"1" : "待审批", 1: '待审批',
"2" : "审批中", 2: '审批中',
"3" : "已通过", 3: '已通过',
"4" : "已驳回", 4: '已驳回',
"5" : "已撤销" 5: '已撤销',
} },
} }
}, },
created() { created() {
@ -171,7 +162,7 @@ export default {
this.getApprovalStatus() this.getApprovalStatus()
}, },
methods: { methods: {
updateStatus(status){ updateStatus(status) {
return this.statusDict[status] return this.statusDict[status]
}, },
indexContinuous, indexContinuous,
@ -180,7 +171,7 @@ export default {
getApprovalStatus() { getApprovalStatus() {
const params = { const params = {
dictType: 'sys_approval_state', dictType: 'sys_approval_state',
dictValue: '' dictValue: '',
} }
dictTableOption(params).then(response => { dictTableOption(params).then(response => {
this.approvalStatus = response.data this.approvalStatus = response.data
@ -189,7 +180,7 @@ export default {
/** 获取工程下拉选 */ /** 获取工程下拉选 */
getProOption() { getProOption() {
const params = { const params = {
id: '' id: '',
} }
getProOptions(params).then(res => { getProOptions(params).then(res => {
this.proNameDict = res.data this.proNameDict = res.data
@ -200,8 +191,8 @@ export default {
getList() { getList() {
this.loading = false this.loading = false
// this.queryParams.proId = this.$store.state.user.thisIds.proId; // this.queryParams.proId = this.$store.state.user.thisIds.proId;
this.queryParams.supUuid = this.$store.state.user.thisIds.supUuid; this.queryParams.supUuid = this.$store.state.user.thisIds.supUuid
this.queryParams.userType = this.$store.state.user.userType; this.queryParams.userType = this.$store.state.user.userType
getConsEntranceList(this.queryParams).then(response => { getConsEntranceList(this.queryParams).then(response => {
this.proList = response.rows this.proList = response.rows
this.total = response.total this.total = response.total
@ -213,36 +204,51 @@ export default {
/** 打开审核页面 */ /** 打开审核页面 */
examine(row, type) { examine(row, type) {
if (type === 1) { if (type === 1) {
this.$router.push('/system/cons-approval-auth/consEntranceApproval/' + encryptCBC(JSON.stringify({ this.$router.push(
proId: row.proId, '/system/cons-approval-auth/consEntranceApproval/' +
taskId: row.taskId, encryptCBC(
procInstId:row.procInsId, JSON.stringify({
finalCheck: row.finalCheck, proId: row.proId,
consUuid: row.consUuid, taskId: row.taskId,
isExamine: true, procInstId: row.procInsId,
btnShow: true, finalCheck: row.finalCheck,
showType: 2 consUuid: row.consUuid,
}))) isExamine: true,
btnShow: true,
showType: 2,
})
)
)
} else { } else {
this.$router.push('/system/cons-approval-auth/consEntranceApproval/' + encryptCBC(JSON.stringify({ this.$router.push(
proId: row.proId, '/system/cons-approval-auth/consEntranceApproval/' +
taskId: row.taskId, encryptCBC(
procInstId:row.procInsId, JSON.stringify({
finalCheck: row.finalCheck, proId: row.proId,
consUuid: row.consUuid, taskId: row.taskId,
isExamine: false, procInstId: row.procInsId,
btnShow: false, finalCheck: row.finalCheck,
showType: 1 consUuid: row.consUuid,
}))) isExamine: false,
btnShow: false,
showType: 1,
})
)
)
} }
}, },
/** 打开审核记录页面 */ /** 打开审核记录页面 */
auditRecord(row) { auditRecord(row) {
this.$router.push("/flow/auditRecord/" + encryptCBC(JSON.stringify({ this.$router.push(
taskId: row.taskId, '/flow/auditRecord/' +
checkType:'2', encryptCBC(
taskType: '存在' JSON.stringify({
}))); taskId: row.taskId,
checkType: '2',
taskType: '存在',
})
)
)
}, },
/** 搜索按钮操作 */ /** 搜索按钮操作 */
handleQuery() { handleQuery() {
@ -259,7 +265,7 @@ export default {
this.ids = selection.map(item => item.proId) this.ids = selection.map(item => item.proId)
this.single = selection.length !== 1 this.single = selection.length !== 1
this.multiple = !selection.length this.multiple = !selection.length
} },
} },
} }
</script> </script>

View File

@ -1,10 +1,7 @@
<template> <template>
<el-tabs v-model="activeName" @tab-click="handleClick" :style="{padding:'20px'}"> <el-tabs v-model="activeName" @tab-click="handleClick" :style="{ padding: '20px' }">
<el-tab-pane label="监理单位信息" name="first"> <el-tab-pane label="监理单位信息" name="first">
<bns-supervisor-info-tabs <bns-supervisor-info-tabs :items="supervisoryUnitInformationItems"></bns-supervisor-info-tabs>
:items="supervisoryUnitInformationItems"
>
</bns-supervisor-info-tabs>
</el-tab-pane> </el-tab-pane>
<el-tab-pane label="监理人员基本信息" name="second"> <el-tab-pane label="监理人员基本信息" name="second">
<div class="app-container"> <div class="app-container">
@ -13,7 +10,8 @@
<el-input <el-input
v-model="queryParams.supervisorName" v-model="queryParams.supervisorName"
maxlength="20" maxlength="20"
show-word-limit v-no-whitespace show-word-limit
v-no-whitespace
placeholder="请输入监理姓名" placeholder="请输入监理姓名"
clearable clearable
@keyup.enter.native="handleQuery" @keyup.enter.native="handleQuery"
@ -22,14 +20,7 @@
<el-form-item> <el-form-item>
<el-button type="primary" icon="el-icon-search" size="mini" @click="handleQuery">搜索</el-button> <el-button type="primary" icon="el-icon-search" size="mini" @click="handleQuery">搜索</el-button>
<el-button icon="el-icon-refresh" size="mini" @click="resetQuery">重置</el-button> <el-button icon="el-icon-refresh" size="mini" @click="resetQuery">重置</el-button>
<el-button <el-button type="primary" plain icon="el-icon-download" size="mini" @click="handleExport">导出</el-button>
type="primary"
plain
icon="el-icon-download"
size="mini"
@click="handleExport"
>导出
</el-button>
</el-form-item> </el-form-item>
</el-form> </el-form>
<el-table v-loading="loading" :data="supervisorList"> <el-table v-loading="loading" :data="supervisorList">
@ -44,17 +35,17 @@
<el-table-column label="岗位" align="center" prop="postName" /> <el-table-column label="岗位" align="center" prop="postName" />
<el-table-column label="体检文件" width="100" align="center"> <el-table-column label="体检文件" width="100" align="center">
<template slot-scope="scope"> <template slot-scope="scope">
<el-button size="mini" @click="handleShow(scope.row,1)">查看</el-button> <el-button size="mini" @click="handleShow(scope.row, 1)">查看</el-button>
</template> </template>
</el-table-column> </el-table-column>
<el-table-column label="保险文件" width="100" align="center"> <el-table-column label="保险文件" width="100" align="center">
<template slot-scope="scope"> <template slot-scope="scope">
<el-button size="mini" @click="handleShow(scope.row,2)">查看</el-button> <el-button size="mini" @click="handleShow(scope.row, 2)">查看</el-button>
</template> </template>
</el-table-column> </el-table-column>
<el-table-column label="其他文件" width="100" align="center"> <el-table-column label="其他文件" width="100" align="center">
<template slot-scope="scope"> <template slot-scope="scope">
<el-button size="mini" @click="handleShow(scope.row,4)">查看</el-button> <el-button size="mini" @click="handleShow(scope.row, 4)">查看</el-button>
</template> </template>
</el-table-column> </el-table-column>
<el-table-column label="年龄" align="center" prop="age" /> <el-table-column label="年龄" align="center" prop="age" />
@ -68,39 +59,37 @@
<el-table-column label="人脸照片" align="center" prop="faceUrl"> <el-table-column label="人脸照片" align="center" prop="faceUrl">
<template slot-scope="scope"> <template slot-scope="scope">
<el-popover placement="right" title="" trigger="hover"> <el-popover placement="right" title="" trigger="hover">
<img :src="`${lookFaceFile+scope.row.faceUrl}`" :min-width="300" :height="300" alt="照片" /> <img :src="`${lookFaceFile + scope.row.faceUrl}`" :min-width="300" :height="300" alt="照片" />
<img slot="reference" :src="`${lookFaceFile+scope.row.faceUrl}`" style="max-height: 50px; max-width: 50px" <img
:alt="`${lookFaceFile+scope.row.faceUrl}`" slot="reference"
:src="`${lookFaceFile + scope.row.faceUrl}`"
style="max-height: 50px; max-width: 50px"
:alt="`${lookFaceFile + scope.row.faceUrl}`"
/> />
</el-popover> </el-popover>
</template> </template>
</el-table-column> </el-table-column>
<el-table-column label="操作" align="center" class-name="small-padding fixed-width"> <el-table-column label="操作" align="center" class-name="small-padding fixed-width">
<template slot-scope="scope"> <template slot-scope="scope">
<el-button <el-button size="mini" type="text" @click="handleView(scope.row)">查看</el-button>
size="mini"
type="text"
@click="handleView(scope.row)"
>查看
</el-button>
</template> </template>
</el-table-column> </el-table-column>
</el-table> </el-table>
<pagination <pagination
v-show="total>0" v-show="total > 0"
:total="total" :total="total"
:page.sync="queryParams.pageNum" :page.sync="queryParams.pageNum"
:limit.sync="queryParams.pageSize" :limit.sync="queryParams.pageSize"
@pagination="getSupervisorPersonList" @pagination="getSupervisorPersonList"
/> />
<el-dialog title="文件查看" :visible.sync="document" width="80%" top="5vh" append-to-body> <el-dialog title="文件查看" :visible.sync="document" width="80%" top="5vh" append-to-body>
<div style="width: 100%;height:720px"> <div style="width: 100%; height: 720px">
<bns-file-list-tabs :items="fileList" /> <bns-file-list-tabs :items="fileList" />
</div> </div>
</el-dialog> </el-dialog>
<el-dialog title="文件查看" :visible.sync="documentPreview" width="80%" top="5vh" append-to-body> <el-dialog title="文件查看" :visible.sync="documentPreview" width="80%" top="5vh" append-to-body>
<div style="width: 100%;height:720px"> <div style="width: 100%; height: 720px">
<bns-kkFile-preview :items="kkFilePreview"></bns-kkFile-preview> <bns-kkFile-preview :items="kkFilePreview"></bns-kkFile-preview>
</div> </div>
</el-dialog> </el-dialog>
@ -110,15 +99,25 @@
<el-row type="flex" justify="start" align="top" :gutter="gutterValue"> <el-row type="flex" justify="start" align="top" :gutter="gutterValue">
<el-col :span="11"> <el-col :span="11">
<el-form-item label-width="120px" label="姓名" prop="name"> <el-form-item label-width="120px" label="姓名" prop="name">
<el-input v-model="formData.name" placeholder="请输入姓名" :disabled="true" clearable v-no-whitespace <el-input
:style="{width: '100%'}" v-model="formData.name"
placeholder="请输入姓名"
:disabled="true"
clearable
v-no-whitespace
:style="{ width: '100%' }"
></el-input> ></el-input>
</el-form-item> </el-form-item>
</el-col> </el-col>
<el-col :span="11"> <el-col :span="11">
<el-form-item label-width="120px" label="性别" prop="sex"> <el-form-item label-width="120px" label="性别" prop="sex">
<el-input v-model="formData.sex" placeholder="请输入性别" :disabled="true" clearable v-no-whitespace <el-input
:style="{width: '100%'}" v-model="formData.sex"
placeholder="请输入性别"
:disabled="true"
clearable
v-no-whitespace
:style="{ width: '100%' }"
></el-input> ></el-input>
</el-form-item> </el-form-item>
</el-col> </el-col>
@ -126,15 +125,25 @@
<el-row type="flex" justify="start" align="top" :gutter="gutterValue"> <el-row type="flex" justify="start" align="top" :gutter="gutterValue">
<el-col :span="11"> <el-col :span="11">
<el-form-item label-width="120px" label="年龄" prop="age"> <el-form-item label-width="120px" label="年龄" prop="age">
<el-input v-model="formData.age" placeholder="请输入年龄" :disabled="true" clearable v-no-whitespace <el-input
:style="{width: '100%'}" v-model="formData.age"
placeholder="请输入年龄"
:disabled="true"
clearable
v-no-whitespace
:style="{ width: '100%' }"
></el-input> ></el-input>
</el-form-item> </el-form-item>
</el-col> </el-col>
<el-col :span="11"> <el-col :span="11">
<el-form-item label-width="120px" label="身份证号码" prop="idCard"> <el-form-item label-width="120px" label="身份证号码" prop="idCard">
<el-input v-model="formData.idCard" placeholder="请输入身份证号码" :disabled="true" clearable <el-input
:style="{width: '100%'}" v-no-whitespace v-model="formData.idCard"
placeholder="请输入身份证号码"
:disabled="true"
clearable
:style="{ width: '100%' }"
v-no-whitespace
></el-input> ></el-input>
</el-form-item> </el-form-item>
</el-col> </el-col>
@ -142,18 +151,30 @@
<el-row type="flex" justify="start" align="top" :gutter="gutterValue"> <el-row type="flex" justify="start" align="top" :gutter="gutterValue">
<el-col :span="11"> <el-col :span="11">
<el-form-item label-width="120px" label="联系方式" prop="phone"> <el-form-item label-width="120px" label="联系方式" prop="phone">
<el-input v-model="formData.phone" placeholder="请输入联系方式" :disabled="true" clearable <el-input
:style="{width: '100%'}" v-no-whitespace v-model="formData.phone"
placeholder="请输入联系方式"
:disabled="true"
clearable
:style="{ width: '100%' }"
v-no-whitespace
></el-input> ></el-input>
</el-form-item> </el-form-item>
</el-col> </el-col>
<el-col :span="11"> <el-col :span="11">
<el-form-item label-width="120px" label="岗位" prop="postName"> <el-form-item label-width="120px" label="岗位" prop="postName">
<el-select v-model="formData.postName" placeholder="请选择岗位" :style="{width: '100%'}" clearable <el-select
:disabled="true" v-model="formData.postName"
placeholder="请选择岗位"
:style="{ width: '100%' }"
clearable
:disabled="true"
> >
<el-option v-for="(item,index) in postList" :key="item.value" :label="item.label" <el-option
:value="item.value" v-for="(item, index) in postList"
:key="item.value"
:label="item.label"
:value="item.value"
></el-option> ></el-option>
</el-select> </el-select>
</el-form-item> </el-form-item>
@ -161,14 +182,17 @@
</el-row> </el-row>
<el-row type="flex" justify="start" align="top" :gutter="gutterValue"> <el-row type="flex" justify="start" align="top" :gutter="gutterValue">
<el-col :span="24"> <el-col :span="24">
<el-form-item label-width="120px" label="人脸照片" :style="{width:'100%'}"> <el-form-item label-width="120px" label="人脸照片" :style="{ width: '100%' }">
<img v-if="formData.facePhoto.length === 0" style="width:100px;height: 100px;margin-left: 45px;" <img
src="@/assets/file/no_file.png" alt="暂无文件" v-if="formData.facePhoto.length === 0"
> style="width: 100px; height: 100px; margin-left: 45px"
src="@/assets/file/no_file.png"
alt="暂无文件"
/>
<bns-file-list-tabs <bns-file-list-tabs
v-else v-else
:items="formData.facePhoto" :items="formData.facePhoto"
:style="{marginLeft:'45px'}" :style="{ marginLeft: '45px' }"
></bns-file-list-tabs> ></bns-file-list-tabs>
</el-form-item> </el-form-item>
</el-col> </el-col>
@ -176,14 +200,16 @@
<el-row type="flex" justify="start" align="top" :gutter="gutterValue"> <el-row type="flex" justify="start" align="top" :gutter="gutterValue">
<el-col :span="24"> <el-col :span="24">
<el-form-item label-width="120px" label="体检文件"> <el-form-item label-width="120px" label="体检文件">
<img v-if="formData.physicalExaminationFile.length === 0" <img
style="width:100px;height: 100px;margin-left: 45px;" src="@/assets/file/no_file.png" v-if="formData.physicalExaminationFile.length === 0"
alt="暂无文件" style="width: 100px; height: 100px; margin-left: 45px"
> src="@/assets/file/no_file.png"
alt="暂无文件"
/>
<bns-file-list-tabs <bns-file-list-tabs
v-else v-else
:items="formData.physicalExaminationFile" :items="formData.physicalExaminationFile"
:style="{marginLeft:'45px'}" :style="{ marginLeft: '45px' }"
></bns-file-list-tabs> ></bns-file-list-tabs>
</el-form-item> </el-form-item>
</el-col> </el-col>
@ -191,13 +217,16 @@
<el-row type="flex" justify="start" align="top" :gutter="gutterValue"> <el-row type="flex" justify="start" align="top" :gutter="gutterValue">
<el-col :span="24"> <el-col :span="24">
<el-form-item label-width="120px" label="保险文件"> <el-form-item label-width="120px" label="保险文件">
<img v-if="formData.insuranceFile.length === 0" style="width:100px;height: 100px;margin-left: 45px;" <img
src="@/assets/file/no_file.png" alt="暂无文件" v-if="formData.insuranceFile.length === 0"
> style="width: 100px; height: 100px; margin-left: 45px"
src="@/assets/file/no_file.png"
alt="暂无文件"
/>
<bns-file-list-tabs <bns-file-list-tabs
v-else v-else
:items="formData.insuranceFile" :items="formData.insuranceFile"
:style="{marginLeft:'45px'}" :style="{ marginLeft: '45px' }"
></bns-file-list-tabs> ></bns-file-list-tabs>
</el-form-item> </el-form-item>
</el-col> </el-col>
@ -205,13 +234,16 @@
<el-row type="flex" justify="start" align="top" :gutter="gutterValue"> <el-row type="flex" justify="start" align="top" :gutter="gutterValue">
<el-col :span="24"> <el-col :span="24">
<el-form-item label-width="120px" label="其他文件"> <el-form-item label-width="120px" label="其他文件">
<img v-if="formData.otherFileList.length === 0" style="width:100px;height: 100px;margin-left: 45px;" <img
src="@/assets/file/no_file.png" alt="暂无文件" v-if="formData.otherFileList.length === 0"
> style="width: 100px; height: 100px; margin-left: 45px"
src="@/assets/file/no_file.png"
alt="暂无文件"
/>
<bns-file-list-tabs <bns-file-list-tabs
v-else v-else
:items="formData.otherFileList" :items="formData.otherFileList"
:style="{marginLeft:'45px'}" :style="{ marginLeft: '45px' }"
></bns-file-list-tabs> ></bns-file-list-tabs>
</el-form-item> </el-form-item>
</el-col> </el-col>
@ -226,34 +258,50 @@
<el-tab-pane label="企业资质" name="third"> <el-tab-pane label="企业资质" name="third">
<bns-file-list-tabs <bns-file-list-tabs
:items="enterpriseQualificationItems" :items="enterpriseQualificationItems"
:isShowOptions="paramsData.isExamine"
:opinionValueOther="opinionValueOther"
@onCloseFileDialog="onCloseFileDialog"
></bns-file-list-tabs> ></bns-file-list-tabs>
</el-tab-pane> </el-tab-pane>
<el-tab-pane label="安全协议书" name="fourth"> <el-tab-pane label="安全协议书" name="fourth">
<bns-file-list-tabs <bns-file-list-tabs
:items="securityAgreementFileItems" :items="securityAgreementFileItems"
:isShowOptions="paramsData.isExamine"
:opinionValueOther="opinionValueOther"
@onCloseFileDialog="onCloseFileDialog"
></bns-file-list-tabs> ></bns-file-list-tabs>
</el-tab-pane> </el-tab-pane>
<el-tab-pane label="监理规划" name="five"> <el-tab-pane label="监理规划" name="five">
<bns-file-list-tabs <bns-file-list-tabs
:items="supervisionPlanningItems" :items="supervisionPlanningItems"
:isShowOptions="paramsData.isExamine"
:opinionValueOther="opinionValueOther"
@onCloseFileDialog="onCloseFileDialog"
></bns-file-list-tabs> ></bns-file-list-tabs>
</el-tab-pane> </el-tab-pane>
<el-tab-pane label="实施细则" name="six"> <el-tab-pane label="实施细则" name="six">
<bns-file-list-tabs <bns-file-list-tabs
:items="implementationRulesItems" :items="implementationRulesItems"
:isShowOptions="paramsData.isExamine"
:opinionValueOther="opinionValueOther"
@onCloseFileDialog="onCloseFileDialog"
></bns-file-list-tabs> ></bns-file-list-tabs>
</el-tab-pane> </el-tab-pane>
<el-tab-pane label="审批结果及意见" name="seven"> <el-tab-pane label="审批结果及意见" name="seven">
<bns-timeline-tabs :is-examine="paramsData.isExamine" :btn-show="paramsData.btnShow" <bns-timeline-tabs
:show-type="paramsData.showType" :final-check="paramsData.finalCheck" :is-examine="paramsData.isExamine"
:items="formData.approvalItems" :audit-type="'审批信息'" :btn-show="paramsData.btnShow"
v-on:pass="approvalPass" :show-type="paramsData.showType"
v-on:turnDown="approvalTurnDown" :final-check="paramsData.finalCheck"
v-on:finalInstance="approvalFinalInstance" :items="formData.approvalItems"
:audit-type="'审批信息'"
v-on:pass="approvalPass"
v-on:turnDown="approvalTurnDown"
v-on:finalInstance="approvalFinalInstance"
:opinionValueOther="opinionValueOther"
/> />
</el-tab-pane> </el-tab-pane>
</el-tabs> </el-tabs>
</template> </template>
<script> <script>
import bnsSupervisorInfoTabs from '@/components/pro-tabs/bns-supervisor-info-tabs.vue' import bnsSupervisorInfoTabs from '@/components/pro-tabs/bns-supervisor-info-tabs.vue'
@ -274,7 +322,7 @@ export default {
BnsTimelineTabs, BnsTimelineTabs,
bnsSupervisorInfoTabs, bnsSupervisorInfoTabs,
bnsFileListTabs, bnsFileListTabs,
bnsGenerateWorkCardTabs bnsGenerateWorkCardTabs,
}, },
data() { data() {
return { return {
@ -293,7 +341,7 @@ export default {
kkFilePreview: { kkFilePreview: {
filePreviewUrl: '', filePreviewUrl: '',
fileName: '', fileName: '',
showDownloadButton: false showDownloadButton: false,
}, },
gutterValue: parseInt('21', 10), gutterValue: parseInt('21', 10),
// //
@ -306,7 +354,7 @@ export default {
queryParams: { queryParams: {
pageNum: 1, pageNum: 1,
pageSize: 10, pageSize: 10,
supervisorName: undefined supervisorName: undefined,
}, },
// //
enterpriseQualificationItems: [], enterpriseQualificationItems: [],
@ -335,10 +383,12 @@ export default {
// //
insuranceFile: [], insuranceFile: [],
// //
otherFileList: [] otherFileList: [],
}, },
paramsData: {}, paramsData: {},
lookFaceFile:'' lookFaceFile: '',
//
opinionValueOther: '',
} }
}, },
created() { created() {
@ -352,16 +402,15 @@ export default {
indexContinuous, indexContinuous,
lookFaceFile, lookFaceFile,
hideSensitiveInfo, hideSensitiveInfo,
approvalHistory(){ approvalHistory() {
approvalHistory({taskId:this.paramsData.taskId}).then(res => { approvalHistory({ taskId: this.paramsData.taskId }).then(res => {
this.formData.approvalItems = res.data this.formData.approvalItems = res.data
}) })
}, },
getStatus() { getStatus() {
const params = { const params = {
dictType: 'sys_sup_post', dictType: 'sys_sup_post',
dictValue: '' dictValue: '',
} }
dictTableOption(params).then(response => { dictTableOption(params).then(response => {
this.postList = response.data this.postList = response.data
@ -382,13 +431,13 @@ export default {
1: '体检文件', 1: '体检文件',
2: '保险文件', 2: '保险文件',
3: '特殊工种文件', 3: '特殊工种文件',
4: '其他文件' 4: '其他文件',
} }
selectFile({ selectFile({
classification: 9, classification: 9,
uuid: row.uuid, uuid: row.uuid,
informationType: informationType, informationType: informationType,
fromType: 3 fromType: 3,
}).then(response => { }).then(response => {
console.log(response) console.log(response)
if (response.data.length === 0) { if (response.data.length === 0) {
@ -398,7 +447,7 @@ export default {
this.kkFilePreview = { this.kkFilePreview = {
filePreviewUrl: response.data[0].filePath, filePreviewUrl: response.data[0].filePath,
fileName: response.data[0].fileName, fileName: response.data[0].fileName,
showDownloadButton: false showDownloadButton: false,
} }
this.documentPreview = true this.documentPreview = true
} else { } else {
@ -412,7 +461,7 @@ export default {
getSupervisorList() { getSupervisorList() {
this.loading = true this.loading = true
const params = { const params = {
proId: this.paramsData.proId proId: this.paramsData.proId,
} }
listSupervisor(params).then(response => { listSupervisor(params).then(response => {
this.supervisoryUnitInformationItems = response.data this.supervisoryUnitInformationItems = response.data
@ -430,7 +479,7 @@ export default {
proId: this.paramsData.proId, proId: this.paramsData.proId,
supId: this.paramsData.supId, supId: this.paramsData.supId,
supUuid: this.paramsData.supUuid, supUuid: this.paramsData.supUuid,
...this.queryParams ...this.queryParams,
} }
listSupervisorPerson(params).then(response => { listSupervisorPerson(params).then(response => {
console.log(response) console.log(response)
@ -446,7 +495,7 @@ export default {
classification: '1', classification: '1',
fromType: '1', fromType: '1',
informationType: '1', informationType: '1',
uuid : this.$store.state.user.thisIds.uuid uuid: this.$store.state.user.thisIds.uuid,
} }
selectFile(params).then(response => { selectFile(params).then(response => {
this.enterpriseQualificationItems = response.data this.enterpriseQualificationItems = response.data
@ -459,7 +508,7 @@ export default {
classification: '1', classification: '1',
fromType: '1', fromType: '1',
informationType: '2', informationType: '2',
uuid : this.$store.state.user.thisIds.uuid uuid: this.$store.state.user.thisIds.uuid,
} }
selectFile(params).then(response => { selectFile(params).then(response => {
this.securityAgreementFileItems = response.data this.securityAgreementFileItems = response.data
@ -471,7 +520,7 @@ export default {
id: this.paramsData.proId, id: this.paramsData.proId,
classification: '1', classification: '1',
fromType: '1', fromType: '1',
informationType: '9' informationType: '9',
} }
selectFile(params).then(response => { selectFile(params).then(response => {
this.supervisionPlanningItems = response.data this.supervisionPlanningItems = response.data
@ -483,7 +532,7 @@ export default {
id: this.paramsData.proId, id: this.paramsData.proId,
classification: '1', classification: '1',
fromType: '1', fromType: '1',
informationType: '10' informationType: '10',
} }
selectFile(params).then(response => { selectFile(params).then(response => {
this.implementationRulesItems = response.data this.implementationRulesItems = response.data
@ -505,11 +554,15 @@ export default {
proId: this.paramsData.proId, proId: this.paramsData.proId,
pageNum: 1, pageNum: 1,
pageSize: 10, pageSize: 10,
supervisorName: this.queryParams.supervisorName supervisorName: this.queryParams.supervisorName,
} }
this.derive('project/outsourcingPro/exportSupervisorPerson', { this.derive(
...params 'project/outsourcingPro/exportSupervisorPerson',
}, `监理人员基本信息.xlsx`) {
...params,
},
`监理人员基本信息.xlsx`
)
}, },
// tab tab // tab tab
handleClick(tab, event) { handleClick(tab, event) {
@ -523,7 +576,7 @@ export default {
id: row.id, id: row.id,
proId: row.proId, proId: row.proId,
uuid: row.uuid, uuid: row.uuid,
supUuid: row.supUuid supUuid: row.supUuid,
} }
this.getStatus() this.getStatus()
listSupervisorPersonById(params).then(response => { listSupervisorPersonById(params).then(response => {
@ -546,35 +599,35 @@ export default {
name: row.name, name: row.name,
phone: row.phone, phone: row.phone,
postName: row.postName, postName: row.postName,
faceUrl: row.faceUrl faceUrl: row.faceUrl,
} }
}, },
/** 审核通过*/ /** 审核通过*/
approvalPass(e){ approvalPass(e) {
const param = { const param = {
reason:e, reason: e,
...this.paramsData, ...this.paramsData,
agree:"1" agree: '1',
} }
this.approval(param,"审批通过") this.approval(param, '审批通过')
}, },
/**审核驳回*/ /**审核驳回*/
approvalTurnDown(e){ approvalTurnDown(e) {
const param = { const param = {
...e, ...e,
...this.paramsData, ...this.paramsData,
agree:"2" agree: '2',
} }
this.approval(param,"退回成功") this.approval(param, '退回成功')
}, },
/**终审*/ /**终审*/
approvalFinalInstance(e){ approvalFinalInstance(e) {
const param = { const param = {
reason:e, reason: e,
...this.paramsData, ...this.paramsData,
agree:"3" agree: '3',
} }
this.approval(param,"终审成功") this.approval(param, '终审成功')
}, },
/** /**
* 审批方法+ * 审批方法+
@ -582,23 +635,27 @@ export default {
* @param text * @param text
*/ */
getMyToDoNum, getMyToDoNum,
approval(param,text){ approval(param, text) {
submitPersonApproval(param).then(response => { submitPersonApproval(param).then(response => {
this.getMyToDoNum() this.getMyToDoNum()
if (response.code === 200) { if (response.code === 200) {
this.$message({ this.$message({
message: text, message: text,
type: 'success' type: 'success',
}) })
this.$tab.closePage(); this.$tab.closePage()
} else { } else {
this.$message({ this.$message({
message: response.msg, message: response.msg,
type: 'error' type: 'error',
}) })
} }
}) })
} },
} //
onCloseFileDialog(val) {
this.opinionValueOther = val
},
},
} }
</script> </script>