You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

467 lines
17 KiB

3 years ago
<template>
<div class="app-container">
<div class="filter-container">
<sticky style="margin-bottom: 10px;">
<div class="sub-navbar">
<el-button v-show="hasPerm('liaison:add')" type="primary" icon="el-icon-edit" @click="showCreate">
添加
</el-button>
<el-button v-show="hasPerm('liaison:delete')" type="danger" icon="el-icon-delete" @click="deleteSet">
删除
</el-button>
</div>
</sticky>
<el-form>
<el-form-item>
<el-input v-model="listQuery.number" clearable placeholder="请填写编号" style="width: 200px" @keyup.enter.native="handleFilter" />
<el-select v-model="listQuery.zzdwId" placeholder="请选择制造单位" clearable style="width: 200px;" @keyup.enter.native="handleFilter">
<el-option v-for="item in manufacturerList" :key="item.id" :label="item.zhizaodanwei" :value="item.id" />
</el-select>
<el-select v-model="workItemQuerys" placeholder="请选择问题项" multiple clearable style="width: 200px;" @keyup.enter.native="handleFilter">
<el-option v-for="item in checkedCities" :key="item" :label="item" :value="item" />
</el-select>
<el-button type="primary" icon="el-icon-search" @click="handleFilter">
查询
</el-button>
</el-form-item>
</el-form>
</div>
<el-table
ref="list"
:data="list"
border
fit
size="small"
width="100%"
@row-click="onRowClick"
@selection-change="handleSelectionChange"
>
<el-table-column type="selection" width="50px;" />
<el-table-column align="center" label="编号" prop="number" />
<el-table-column align="center" label="制造单位" :formatter="getManufacturerName" prop="zzdwId" />
<el-table-column align="center" label="文件类型" width="100px;">
<template slot-scope="scope">
<el-tag v-if="scope.row.type" type="danger">
联络单
</el-tag>
<el-tag v-else type="warning">
意见书
</el-tag>
</template>
</el-table-column>
<el-table-column align="center" label="下发日期" prop="processingDate" />
<el-table-column align="center" label="检验人员" prop="inspector" />
<el-table-column align="center" label="检验日期" prop="inspectorDate" />
<el-table-column align="center" label="受检单位接收人" prop="receiver" />
<el-table-column align="center" label="问题项" prop="workItem" />
<el-table-column align="center" label="操作" fixed="right" width="250px">
<template slot-scope="scope">
<el-button v-show="hasPerm('liaison:update')" type="primary" @click="showUpdate(scope.row)">
编辑
</el-button>
<el-button v-show="hasPerm('liaison:upload')" type="success" @click="showVerification(scope.row.id)">
上传相关鉴证
</el-button>
</template>
</el-table-column>
</el-table>
<pagination v-show="totalCount>0" :total="totalCount" :page-num.sync="listQuery.pageNum" :page-row.sync="listQuery.pageSize" style="float: left;" @pagination="getList" />
<!--选择文件类型-->
<el-dialog title="文件类型" :visible.sync="dialogVisibleType" width="20%">
<el-button type="warning" plain @click="setLiaisonTpye(true)">
联络单
</el-button>
<el-button type="warning" plain @click="setLiaisonTpye(false)">
意见书
</el-button>
</el-dialog>
<!--打开录入框-->
<el-dialog :title="textMap[dialogStatus]" :visible.sync="dialogVisible" style="width: 120%; margin-top: -7vh;margin-left: -12%" @close="closeDialog">
<el-form ref="liaison" :model="liaison" :rules="rules" style="overflow: auto;">
<el-row>
<el-col :span="10">
<el-form-item label="受检单位:" prop="inspectorDate">
<el-select v-model="liaison.zzdwId" size="medium" filterable placeholder="请选择受检单位" style="width: 200px;" clearable>
<el-option v-for="item in manufacturerList" :key="item.id" :label="item.zhizaodanwei" :value="item.id" />
</el-select>
</el-form-item>
</el-col>
<el-col :span="9" :offset="5">
<el-form-item label="编号:" prop="inspectorDate">
<el-input v-model="liaison.number" size="medium" placeholder="请录入编号" style="width: 200px;" clearable type="text" />
</el-form-item>
</el-col>
</el-row>
<el-row>
<el-col :span="24">
<el-form-item label="问题项:" prop="inspectorDate">
<el-checkbox-group v-model="workItem" size="medium" @change="handleCheckedCitiesChange">
<el-checkbox v-for="city in checkedCities" :key="city" :label="city">
{{ city }}
</el-checkbox>
</el-checkbox-group>
</el-form-item>
</el-col>
</el-row>
<el-row style="height: 90px">
<el-col :span="24">
经监督检验发现你单位在
<el-input v-model="liaison.position" size="medium" show-word-limit maxlength="200" placeholder="填写压力容器产品名称、产品批号、编号或者位号" style="width: 380px;" clearable type="text" />
<el-input v-model="liaison.process" size="medium" show-word-limit maxlength="200" placeholder="填写制造、安装、改造、重大修理" style="width: 280px;" clearable type="text" />
过程中存在以下影响安全性能的问题请于
<el-date-picker v-model="liaison.processingDate" size="medium" value-format="yyyy-MM-dd" style="width: 150px;" clearable type="date" placeholder="选下发日期" />
前将处理结果报送监检机构
</el-col>
</el-row>
<el-row style="height: 100px">
<el-col :span="24">
<el-form-item label="问题和意见:" prop="inspectorDate">
<el-input v-model="liaison.questions" style="width: 100%" show-word-limit maxlength="200" placeholder="请录入问题和意见" clearable type="textarea" />
</el-form-item>
</el-col>
</el-row>
<el-row>
<el-col :span="13" :offset="2">
<el-form-item label="检验人员:" prop="inspector">
<el-input v-model="liaison.inspector" size="medium" style="width: 200px;" disabled type="text" />
</el-form-item>
</el-col>
<el-col :span="9">
<el-form-item label="日期:" prop="inspectorDate">
<el-date-picker v-model="liaison.inspectorDate" size="medium" value-format="yyyy-MM-dd" style="width: 200px;" clearable type="date" placeholder="选择检验日期" />
</el-form-item>
</el-col>
</el-row>
<el-row v-show="!type">
<el-col :span="13" :offset="2">
<el-form-item label="监检机构技术负责人:" prop="director">
<el-input v-model="liaison.director" size="medium" placeholder="请录入监检机构技术负责人" style="width: 200px;" clearable type="text" />
</el-form-item>
</el-col>
<el-col :span="9">
<el-form-item label="日期:" prop="directorDate">
<el-date-picker v-model="liaison.directorDate" size="medium" style="width: 200px;" value-format="yyyy-MM-dd" clearable type="date" placeholder="选择监检机构技术负责人签字日期" />
</el-form-item>
</el-col>
</el-row>
<el-row>
<el-col :span="13" :offset="2">
<el-form-item label="受检单位接收人:" prop="receiver">
<el-input v-model="liaison.receiver" size="medium" placeholder="请录入受检单位接收人" style="width: 200px;" clearable type="text" />
</el-form-item>
</el-col>
<el-col :span="9">
<el-form-item label="日期:" prop="receiverDate">
<el-date-picker v-model="liaison.receiverDate" size="medium" value-format="yyyy-MM-dd" style="width: 200px;" clearable type="date" placeholder="选择受检单位接收日期" />
</el-form-item>
</el-col>
</el-row>
<el-row>
<el-form-item label="处理结果:" prop="results">
<el-input v-model="liaison.results" placeholder="请录入处理结果" show-word-limit maxlength="200" style="width: 100%" clearable type="textarea" />
</el-form-item>
</el-row>
<el-row>
<el-col :span="15">
<el-form-item label="受检单位主管负责人:" prop="executive">
<el-input v-model="liaison.executive" size="medium" style="width: 200px;" placeholder="请录入受检单位主管负责人" clearable type="text" />
</el-form-item>
</el-col>
<el-col :span="9">
<el-form-item label="日期:" prop="executiveDate">
<el-date-picker v-model="liaison.executiveDate" size="medium" style="width: 200px;" value-format="yyyy-MM-dd" clearable type="date" placeholder="选择受检单位主管负责人签字日期" />
</el-form-item>
</el-col>
</el-row>
<el-row>
<el-col :span="9" :offset="15">
<el-form-item label="日期:" prop="closingDate">
<el-date-picker v-model="liaison.closingDate" size="medium" style="width: 200px;" value-format="yyyy-MM-dd" clearable type="date" placeholder="选择回复日期" />
</el-form-item>
</el-col>
</el-row>
</el-form>
<div slot="footer" class="dialog-footer">
<el-button @click="dialogVisible = false">
</el-button>
<el-button v-show="dialogStatus==='create'" type="success" @click="saveOrUpdate">
</el-button>
<el-button v-show="dialogStatus!=='create' " type="primary" @click="saveOrUpdate">
</el-button>
</div>
</el-dialog>
<el-dialog title="上传相关鉴证" :modal-append-to-body="false" :visible.sync="dialogEnclosureVisible">
<enclosure :relation-id.sync="currentId" :if-liaison.sync="ifLiaison" :view-button.sync="viewButton" />
</el-dialog>
</div>
</template>
<script>
import Sticky from '@/components/Sticky'
import Pagination from '@/components/Pagination'
import Enclosure from '@/views/common/Enclosure'
export default {
name: 'LiaisonList',
components: { Sticky, Pagination, Enclosure },
data() {
return {
list: [],
ifClientType: this.$store.getters.clientType === 'System',
listQuery: {
pageNum: 1, // 页码
pageSize: 20, // 每页条数
inspector: this.ifClientType ? this.$store.getters.userId : ''
},
workItemQuerys: [],
totalCount: 0,
manufacturerList: [],
dialogStatus: '',
liaison: {},
type: false,
textMap: {
create: '添加',
update: '编辑'
},
activeName: 'first',
dialogVisibleType: false,
dialogVisible: false,
multipleSelection: [],
dialogEnclosureVisible: false,
currentId: '',
ifLiaison: true,
viewButton: true,
checkedCities: ['设计', '材料', '制造', '无损检测', '出厂资料', '其它'],
workItem: [],
rules: {
zzdwId: [{ required: true, message: '请选择制造单位', trigger: 'blur' }]
}
}
},
created() {
this.getList()
this.getManufacturerByUserId()
},
methods: {
/**
* 检索条件查询事件
*/
handleFilter() {
this.listQuery.pageNum = 1
if (this.workItemQuerys.length > 0) {
this.listQuery.workItems = this.workItemQuerys.join(',')
} else {
this.listQuery.workItems = ''
}
this.getList()
},
/**
* 根据登录用户获得所属列表数据事件
*/
getList() {
this.api({
url: '/liaison/list',
method: 'get',
params: this.listQuery
}).then(data => {
this.list = data.list
this.totalCount = data.total
})
},
/**
* 工作项选择事件
*/
handleCheckedCitiesChange(val) {
this.workItem = val
},
/**
* 根据登录用户获取所属制造单位集合事件
*/
getManufacturerByUserId() {
this.api({
url: '/dwxx/getAll',
method: 'get',
params: {
shebeizhongleidaima: this.$store.getters.departmentId === 74 ? '1000' : '2000',
// zhuchangjianyanrenyuan: this.ifClientType && this.$store.getters.username !== 'admin' ? this.$store.getters.userId : null,
userId: this.ifClientType ? null : this.$store.getters.userId
}
}).then(data => {
this.manufacturerList = data
})
},
/**
* 打开添加页面事件
*/
showCreate() {
this.dialogStatus = 'create'
this.workItem = []
this.liaison = {}
this.liaison.inspector = this.$store.getters.nickname
this.dialogVisibleType = true
},
/**
* 选择文件类型事件
*/
setLiaisonTpye(type) {
this.liaison.type = type
this.type = type
this.textMap.create = type ? '添加特种设备监督检验联络单' : '添加特种设备监督检验意见通知书'
this.textMap.update = type ? '编辑特种设备监督检验联络单' : '编辑特种设备监督检验意见通知书'
this.dialogVisibleType = false
this.dialogVisible = true
},
/**
* 根据主键批量删除事件-同时删除所包含相关鉴证事件
*/
deleteSet() {
if (this.multipleSelection.length === 0) {
this.$message({ type: 'error', message: '请选择需要删除的数据!' })
return false
} else {
this.$confirm('确定删除当前选中联络单意见书?', '提示', {
confirmButtonText: '确定',
showCancelButton: true,
type: 'warning'
}).then(() => {
const ids = []
const qs = require('qs')
this.multipleSelection.forEach(data => {
ids.push(data.id)
})
this.api({
url: '/liaison/delLiaison',
method: 'delete',
params: { ids: ids },
paramsSerializer: function(params) {
return qs.stringify(params, { indices: false })
}
}).then(() => {
this.$message.success('删除成功!')
// 待删除相关鉴证信息方法!
this.preview({
url: '/upload/deleteProveByRelationIds',
method: 'delete',
params: { relationIds: ids, ifLiaison: true },
paramsSerializer: function(params) {
return qs.stringify(params, { indices: false })
}
}).then(() => {
this.getList()
})
})
})
}
},
/**
* 根据主键获取数据信息事件
*/
getById(id) {
this.api({
url: '/liaison/getById',
method: 'get',
params: { id: id }
}).then(data => {
this.liaison = data
if (this.liaison.workItem) {
this.workItem = this.liaison.workItem.split(',')
}
})
},
/**
* 打开编辑页面事件
*/
showUpdate(row) {
this.getById(row.id)
this.dialogStatus = 'update'
this.dialogVisible = true
},
/**
* 保存事件
*/
saveOrUpdate() {
this.$refs['liaison'].validate(valid => {
if (valid) {
if (!this.liaison.zzdwId || this.liaison.zzdwId === '') {
this.$message.error('请选择受检单位!')
return false
}
if (this.workItem) {
this.liaison.workItem = this.workItem.join(',')
}
let url = '/liaison/saveLiaison'
let text = '添加成功!'
if (this.dialogStatus === 'update') {
url = '/liaison/updateLiaison'
text = '编辑成功!'
}
this.api({
url: url,
method: 'post',
data: this.liaison
}).then(() => {
this.$message.success(text)
this.dialogVisible = false
this.getList()
})
} else {
return false
}
})
},
/**
* 展示上传相关鉴证窗口事件
* @param liaisonId
*/
showVerification(liaisonId) {
this.currentId = liaisonId
this.dialogEnclosureVisible = true
},
/**
* 根据列表行制造单位主键展示对应制造单位名称事件
* @param value
*/
getManufacturerName(value) {
if (this.$store.getters.clientType === 'Enterprise') {
if (this.manufacturerList.length > 0) {
return this.manufacturerList[0].zhizaodanwei
}
} else {
const manufacturer = this.manufacturerList.filter(item => item.id === value.zzdwId)
if (manufacturer.length > 0) {
return manufacturer[0].zhizaodanwei
}
}
},
/**
* 行点击事件
* @param row
*/
onRowClick(row) {
this.$refs.list.toggleRowSelection(row)
},
/**
* 列表勾选事件
* @param val
*/
handleSelectionChange(val) {
this.multipleSelection = val
},
/**
* 关闭保存编辑窗口事件
*/
closeDialog() {
this.dialogVisible = false
}
}
}
</script>
<style scoped>
</style>