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.
 
 
 
 

677 lines
25 KiB

<template>
<div class="app-container">
<div class="filter-container">
<sticky style="margin-bottom: 10px;">
<div class="sub-navbar">
<el-button type="primary" icon="el-icon-edit" @click="editYsjl('YSJL')">
起草原始记录
</el-button>
<el-button type="primary" icon="el-icon-edit" @click="editYsjl('JYBG')">
起草报告
</el-button>
<el-button type="success" icon="el-icon-tickets" @click="copyYsjl">
复制数据
</el-button>
<el-button type="warning" @click="turnBack">
<svg-icon icon-class="reject" /> 任务退回
</el-button>
<el-button type="danger" icon="el-icon-delete" @click="deleteRenwu">
作废任务
</el-button>
<el-button type="success" icon="el-icon-success" @click="completeRenwu">
任务完成
</el-button>
<el-button type="danger" @click="terminationFn">
<svg-icon icon-class="termination" /> 终止任务
</el-button>
</div>
</sticky>
<el-form>
<el-form-item>
<el-select v-model="listQuery.shebeizhongleidaima" placeholder="请选择设备种类" clearable>
<el-option v-for="item in sbzlList" :key="item.value" :label="item.label" :value="item.value" />
</el-select>
<el-select v-model="listQuery.neibuleibie" placeholder="请选择检验类别" clearable>
<el-option v-for="item in $store.getters.allCategory" v-show="item.parentId" :key="item.code" :label="item.name" :value="item.code" />
</el-select>
<el-input v-model="listQuery.shiyongdanwei" placeholder="使用单位名称" clearable style="width: 340px" @keyup.enter.native="handleFilter" />
<el-input v-model="listQuery.zhucedaima" placeholder="注册代码" clearable style="width: 230px" @keyup.enter.native="handleFilter" />
<el-input v-model="listQuery.shiyongdengjibianhao" placeholder="使用登记证号" clearable style="width: 200px" @keyup.enter.native="handleFilter" />
<el-button type="primary" icon="el-icon-search" @click="handleFilter">
查询
</el-button>
<el-button type="info" icon="el-icon-close" @click="clearQuery">
清空条件
</el-button>
</el-form-item>
</el-form>
</div>
<el-table
ref="list"
v-adaptive="{bottomOffset: 50}"
height="0"
:data="list"
width="100%"
size="small"
border
fit
highlight-current-row
stripe
@row-click="onRowClick"
@selection-change="handleSelectionChange"
>
<el-table-column type="selection" width="40" />
<el-table-column align="center" label="序号" width="60" fixed="left" type="index" />
<el-table-column align="center" label="设备种类" prop="shebeizhonglei" width="100" />
<el-table-column :formatter="formatter.formatterCategory" align="center" label="检验类别" prop="neibuleibie" width="100" />
<el-table-column align="center" label="使用登记证号" prop="shiyongdengjibianhao" width="180" sortable="custom" />
<el-table-column align="center" label="注册代码" prop="zhucedaima" width="180" sortable="custom" />
<el-table-column align="center" label="使用单位" prop="shiyongdanwei" min-width="240" />
<el-table-column align="center" label="产品名称/设备名称" prop="shebeimingcheng" width="180" />
<el-table-column align="center" label="产品编号/出厂编号" prop="chanpinbianhao" width="220" />
<el-table-column v-if="$store.getters.departmentId === 68" align="center" label="管道级别" prop="s7" width="140" />
<el-table-column align="center" label="区划名称" prop="quhuamingcheng" width="150" />
<el-table-column :formatter="formatterSlrq" align="center" label="报检日期" prop="shouliriqi" width="120" sortable />
<el-table-column align="center" label="下次检验日期" prop="xiacijianyanriqi" width="120" />
<el-table-column :formatter="formatter.getChineseName" align="center" label="认领人" prop="renlingren" width="140" />
</el-table>
<pagination v-show="total>0" :total="total" :page-num.sync="listQuery.pageNum" :page-row.sync="listQuery.pageRow" @pagination="getList" />
<el-dialog :title="textMap[category]" :visible.sync="dialogFormVisible" @close="closeDialog">
<el-row style="margin-bottom: 15px;">
<el-select v-model="neibuleibie" placeholder="内部类别" style="width: 180px" @change="getTemplateList">
<el-option v-for="item in nblbList" :key="item.code" :label="item.name" :value="item.code" />
</el-select>
<el-select v-model="shebeizhongleidaima" placeholder="设备种类" style="width: 180px" @change="getSblbList">
<el-option v-for="item in sbzlList" :key="item.value" :label="item.label" :value="item.value" />
</el-select>
<el-select v-model="shebeileibiedaima" placeholder="设备类别" style="width: 210px" @change="getSbpzList">
<el-option v-for="item in sblbList" :key="item.value" :label="item.label" :value="item.value" />
</el-select>
<el-select v-model="shebeipinzhongdaima" placeholder="设备品种" style="width: 220px" :disabled="$store.getters.departmentId === 74" @change="getModelList">
<el-option v-for="item in sbpzList" :key="item.value" :label="item.label" :value="item.value" />
</el-select>
</el-row>
<el-row>
<el-select v-model="template" value-key="value" placeholder="模板名称" style="width: 88%" @change="templateChange">
<el-option v-for="item in modelList" :key="item.value" :label="item.label" :value="item" />
</el-select>
</el-row>
<div slot="footer" class="dialog-footer">
<el-button @click="dialogFormVisible = false">
取 消
</el-button>
<el-button type="primary" @click="initYsjl">
确 定
</el-button>
</div>
</el-dialog>
<el-dialog :visible.sync="dialogFormCopyVisible" title="复制数据" width="85%">
<el-container>
<el-header height="165px">
<el-input v-model="listQueryCopy.searchYsjl.jilubianhao" placeholder="记录编号" clearable style="width: 200px" @keyup.enter.native="handleFilterCopy" />
<el-input v-model="listQueryCopy.searchYsjl.baogaobianhao" placeholder="报告编号" clearable style="width: 200px" @keyup.enter.native="handleFilterCopy" />
<el-input v-model="listQueryCopy.searchYsjl.zhucedaima" placeholder="注册代码" clearable style="width: 280px" @keyup.enter.native="handleFilterCopy" />
<el-input v-model="listQueryCopy.searchYsjl.shiyongdanwei" placeholder="使用单位" clearable style="width: 310px" @keyup.enter.native="handleFilterCopy" />
<br><br>
<el-input v-model="listQueryCopy.searchYsjl.chanpinbianhao" placeholder="产品/出厂编号" clearable style="width: 200px" @keyup.enter.native="handleFilterCopy" />
<el-input v-model="listQueryCopy.searchYsjl.shiyongdengjibianhao" placeholder="使用登记证" clearable style="width: 200px" @keyup.enter.native="handleFilterCopy" />
<el-input v-model="listQueryCopy.searchYsjl.zhizaodanwei" placeholder="制造单位" clearable style="width: 280px" @keyup.enter.native="handleFilterCopy" />
<el-input v-model="listQueryCopy.searchYsjl.weibaodanwei" placeholder="维保单位" clearable style="width: 310px" @keyup.enter.native="handleFilterCopy" />
<br><br>
<el-select
v-model="listQueryCopy.searchYsjl.neibuleibie"
placeholder="检验类别"
clearable
style="width: 200px"
>
<el-option v-for="item in jylbList" v-show="item.parentId" :key="item.code" :label="item.name" :value="item.code" />
</el-select>
</el-header>
<div style="margin-left: 400px;height: 60px;">
<el-button type="primary" icon="el-icon-search" @click="handleFilterCopy">
查询
</el-button>
<el-button type="info" icon="el-icon-close" @click="clearCopyQuery">
清空条件
</el-button>
</div>
</el-container>
<el-table
ref="listCopy"
:data="listCopy"
size="small"
style="width: 100%"
border
fit
height="450px"
width="100%"
highlight-current-row
@row-click="onDialogRowClick"
@selection-change="handleDialogSelectionChange"
>
<el-table-column type="selectionCopy" width="45" />
<el-table-column align="center" label="序号" width="50" type="index">
<!-- <template slot-scope="scope">
<span v-text="getIndex(scope.$index)" />
</template> -->
</el-table-column>
<el-table-column align="center" label="报告编号" prop="baogaobianhao" width="180px;" />
<el-table-column align="center" label="记录编号" prop="jilubianhao" width="180" sortable="custom" />
<el-table-column align="center" label="检验类别" :formatter="formatter.formatterCategory" prop="neibuleibie" width="100" />
<el-table-column align="center" label="使用登记证号" prop="shiyongdengjibianhao" width="180" sortable="custom" />
<el-table-column align="center" label="注册代码" prop="zhucedaima" width="180" sortable="custom" />
<el-table-column align="center" label="使用单位" prop="shiyongdanwei" width="240" />
<el-table-column align="center" label="产品名称/设备名称" prop="shebeimingcheng" width="220" />
<el-table-column align="center" label="产品编号/出厂编号" prop="chanpinbianhao" width="220" />
<el-table-column align="center" label="检验日期" prop="jianyanjieshuriqi" width="110" />
<el-table-column fixed="right" align="center" label="操作" prop="">
<template slot-scope="scopecopy">
<el-button type="primary" size="medium" icon="el-icon-tickets" title="复制设备信息" @click="copyYsjl(scopecopy.$index)" />
</template>
</el-table-column>
</el-table>
<pagination v-show="total>0" :total="totalCopy" :page-num.sync="listQueryCopy.pageNum" :page-row.sync="listQueryCopy.pageRow" @pagination="getListCopy" />
</el-dialog>
</div>
</template>
<script>
import Sticky from '@/components/Sticky'
import Pagination from '@/components/Pagination'
import Utils from '../../utils/contact.js'
import { getOwnList, terminateRenwu, completeRenwuFn } from '@/api/renwu'
import { cancelRenwuFn } from '@/api/common'
import qs from 'qs'
export default {
name: 'MyTask',
components: { Sticky, Pagination },
data() {
return {
total: 0,
list: [],
totalCopy: 0,
listCopy: [],
sbzlList: [],
sblbList: [],
sbpzList: [],
jylbList: [],
nblbList: [],
modelList: [],
listQuery: {
pageNum: 1, // 页码
pageRow: 20 // 每页条数
},
listQueryCopy: {
pageNum: 1, // 页码
pageRow: 20, // 每页条数
hasChild: false,
searchYsjl: {
neibuleibie: 'DQ'
}
},
multipleSelection: [],
selectionCopy: [],
selection: {},
dialogFormVisible: false,
dialogFormCopyVisible: false,
shebeizhongleidaima: '',
shebeileibiedaima: '',
shebeipinzhongdaima: '',
jianyanleibie: '',
neibuleibie: '',
template: {},
renwuId: '',
category: '',
textMap: {
YSJL: '起草原始记录',
JYBG: '起草检验报告'
},
path: '',
// 压力容器移动式起草报告模板 将设备信息传到后台
sbxxList: {
sblbmc: '',
sbpzmc: '',
sblbdm: '',
sbpzdm: ''
},
currentRenwuId: 0,
dialogEnclosureVisible: false
}
},
created() {
this.getList()
this.getSbList(undefined, undefined, 1)
},
mounted() {
const that = this
this.common.$on('task-list', function() {
that.handleFilter()
})
this.jylbList = this.$store.getters.allCategory
},
methods: {
getList() {
getOwnList(this.listQuery).then(data => {
this.list = data.list
this.total = data.total
})
},
getListCopy() {
this.listQueryCopy.searchYsjl.bglx = '1'
this.listQueryCopy.copyPage = true
this.listQueryCopy.hasLook = 0
this.listQueryCopy.searchYsjl.shebeizhongleidaima = this.multipleSelection[0].shebeizhongleidaima
this.api({
url: '/ysjl/getList',
method: 'get',
params: this.listQueryCopy
}).then(data => {
this.listCopy = data.list
this.totalCopy = data.total
})
},
onDialogRowClick(row) {
this.$refs.listCopy.toggleRowSelection(row)
},
handleDialogSelectionChange(val) {
this.selectionCopy = val
},
getSblbList(val) {
this.shebeileibiedaima = ''
this.sbpzList = []
this.shebeipinzhongdaima = ''
this.modelList = []
this.template = {}
this.getSbList(val, undefined, 2)
this.neibuleibie = ''
this.getCategoryList('nblb', this.jianyanleibie, this.shebeizhongleidaima)
},
getSbpzList(val) {
this.modelList = []
this.template = {}
this.shebeipinzhongdaima = ''
this.getSbList(this.shebeizhongleidaima, val, 3)
},
getSbList(sbzl, sblb, level) {
this.api({
url: '/sedirectory/getList',
method: 'get',
params: {
sbzl: sbzl,
sblb: sblb,
level: level
}
}).then(data => {
switch (level) {
case 2:
this.sblbList = data
break
case 3:
this.sbpzList = data
this.shebeipinzhongdaima = this.sbpzList[0].value
this.getModelList(this.shebeipinzhongdaima)
break
default:
this.sbzlList = data
break
}
})
},
getModelList(val) {
if (this.neibuleibie === null || this.neibuleibie === '' || this.neibuleibie === undefined) {
this.$message({
message: '请先选择内部类别。',
type: 'warning'
})
return false
}
this.getTemplateData(val, this.jianyanleibie, this.neibuleibie, this.category)
},
getTemplateList(val) {
if (this.shebeipinzhongdaima === null || this.shebeipinzhongdaima === '' || this.shebeipinzhongdaima === undefined) {
return false
}
this.getTemplateData(this.shebeipinzhongdaima, this.jianyanleibie, val, this.category)
},
getTemplateData(sbpz, jianyanleibie, neibuleibie, category) {
this.api({
url: '/template/getTemplateBySbpz',
method: 'get',
params: {
sbpz: sbpz,
jianyanleibie: jianyanleibie,
neibuleibie: neibuleibie,
category: category
}
}).then(data => {
if (data.length > 0) {
for (var i = 0; i < data.length; i++) {
if (data[i].label === 'JTYJL252-2016氧舱定期检验报告' || data[i].label === 'JTYJL252-2016氧舱年度检验报告' || data[i].label === '压力容器改造与重大修理监督检验报告') {
data.splice(i, 1)
}
if (this.$store.getters.clientType === 'Enterprise' && data[i].label.indexOf('JTY') === 0) {
data[i].label = data[i].label.substr(13)
}
}
this.modelList = data
this.template = data[0]
this.path = data[0].path
} else {
this.modelList = []
this.template = {}
}
})
},
templateChange(item) {
this.path = item.path
},
getCategoryList(type, parentCode, species) {
this.api({
url: '/category/getCategoryList',
method: 'get',
params: {
parentCode: parentCode,
species: species
}
}).then(data => {
switch (type) {
case 'jylb':
this.jylbList = data
return ''
case 'nblb':
this.nblbList = data
return ''
}
})
},
getIndex($index) {
// 表格序号
return (this.listQuery.pageNum - 1) * this.listQuery.pageRow + $index + 1
},
handleFilter() {
// 查询事件
this.listQuery.pageNum = 1
this.getList()
},
handleFilterCopy() {
// 查询事件
this.listQueryCopy.pageNum = 1
this.getListCopy()
},
onRowClick(row) {
this.selection = row
this.$refs.list.toggleRowSelection(row)
},
handleSelectionChange: function(val) {
this.multipleSelection = val
},
editYsjl(val) {
if (this.multipleSelection.length !== 1) {
let mes = ''
if (val === 'YSJL') {
mes = '请选择一条任务起草原始记录!'
} else {
mes = '请选择一条任务起草检验报告!'
}
this.$message({
type: 'error',
message: mes
})
return false
}
this.category = val
this.jianyanleibie = this.multipleSelection[0].jianyanleibie
this.shebeizhongleidaima = this.multipleSelection[0].shebeizhongleidaima
this.renwuId = this.multipleSelection[0].id
if (this.shebeizhongleidaima !== null && this.shebeizhongleidaima !== '') {
this.getSblbList(this.shebeizhongleidaima)
this.shebeileibiedaima = this.multipleSelection[0].shebeileibiedaima
if (this.shebeileibiedaima !== null && this.shebeileibiedaima !== '') {
this.getSbpzList(this.shebeileibiedaima)
this.neibuleibie = this.multipleSelection[0].neibuleibie
this.shebeipinzhongdaima = this.multipleSelection[0].shebeipinzhongdaima
if (this.shebeipinzhongdaima !== null && this.shebeipinzhongdaima !== '' && this.neibuleibie !== null && this.neibuleibie !== undefined) {
this.getModelList(this.shebeipinzhongdaima)
}
}
}
this.dialogFormVisible = true
},
closeDialog() {
this.shebeizhongleidaima = ''
this.shebeileibiedaima = ''
this.shebeipinzhongdaima = ''
this.template = {}
this.neibuleibie = ''
this.sblbList = []
this.sbpzList = []
this.modelList = []
this.nblbList = []
},
initYsjl() {
if (this.template === '' || this.template === null || this.template === undefined) {
this.$message({
message: '请选择模板。',
type: 'warning'
})
return false
}
for (let i = 0; i < this.sblbList.length; i++) {
if (this.sblbList[i].value === this.shebeileibiedaima) {
this.sbxxList.sblbmc = this.sblbList[i].label
}
}
for (let i = 0; i < this.sbpzList.length; i++) {
if (this.sbpzList[i].value === this.shebeipinzhongdaima) {
this.sbxxList.sbpzmc = this.sbpzList[i].label
}
}
this.sbxxList.sblbdm = this.shebeileibiedaima
this.sbxxList.sbpzdm = this.shebeipinzhongdaima
console.log(this.path + '/null')
this.$router.push({
path: this.path + '/null',
query: {
state: 'create',
renwuId: this.renwuId,
templateId: this.template.value,
jylb: this.jianyanleibie,
neibuleibie: this.neibuleibie,
departmentId: this.$store.getters.departmentId,
sbzldm: this.shebeizhongleidaima,
sblbdm: this.sbxxList.sblbdm,
sblbmc: this.sbxxList.sblbmc,
sbpzdm: this.sbxxList.sbpzdm,
sbpzmc: this.sbxxList.sbpzmc
}
})
this.dialogFormVisible = false
},
copyYsjl($index) {
if (this.multipleSelection.length <= 0) {
this.$message({
message: '请选择需要复制设备的任务。',
type: 'warning'
})
return false
}
let renwuids = ''
for (var i = 0; i < this.multipleSelection.length; i++) {
if (this.multipleSelection[0].shebeizhongleidaima !== this.multipleSelection[i].shebeizhongleidaima) {
this.$message({
message: '请选择同设备种类任务进行复制。',
type: 'warning'
})
return false
}
if (i === 0) {
renwuids = this.multipleSelection[i].id
} else {
renwuids = renwuids + ',' + this.multipleSelection[i].id
}
}
if (!this.dialogFormCopyVisible) {
this.listQueryCopy.neibuleibie = this.multipleSelection[0].neibuleibie
this.handleFilterCopy()
this.dialogFormCopyVisible = true
} else {
this.api({
url: '/copy/createCopyObj',
method: 'get',
params: {
ysjlId: this.listCopy[$index].id,
renwuIds: renwuids
}
}).then(data => {
Utils.$emit('ysjl-list')
this.$message({
type: 'success',
message: '任务复制成功!'
})
this.dialogFormCopyVisible = false
this.getList()
})
}
},
turnBack() {
if (this.multipleSelection.length === 0) {
this.$message({
type: 'error',
message: '请选择要退回的任务'
})
return false
}
this.apibjd({
url: 'renwu/backToLeader',
method: 'get',
params: {
renwuIds: this.$refs.list.selection.map(rw => {
return rw.id
})
},
paramsSerializer: function(params) {
return qs.stringify(params, { indices: false })
}
}).then(data => {
this.$message({
type: 'success',
message: '任务退回成功'
})
this.getList()
})
},
clearQuery() {
this.listQuery = {}
this.getList()
},
clearCopyQuery() {
this.$set(this.listQueryCopy, 'searchYsjl', {})
this.handleFilterCopy()
},
formatterSlrq(row) {
if (row.shouliriqi) {
return row.shouliriqi.substring(0, 10)
}
return row.shouliriqi
},
deleteRenwu() {
if (!this.$refs.list.selection.length) {
this.$message.error('请选择要作废的任务')
return false
}
this.$prompt('正在执行作废任务操作,确定继续?', '提示', {
inputType: 'textarea',
confirmButtonText: '确定',
cancelButtonText: '取消'
}).then(({ value }) => {
if (value === null) {
this.$message({ message: '请填写作废原因!', type: 'warning' })
return false
}
const arr = this.$refs.list.selection.map(rw => {
return rw.id
})
cancelRenwuFn({
renwuIds: arr,
reason: value
}).then(data => {
this.$message.success('作废成功!')
this.getList()
})
}).catch(() => {
this.$message({
type: 'info',
message: '已取消作废'
})
})
},
completeRenwu() {
if (!this.$refs.list.selection.length) {
this.$message.error('请选择要完成的任务')
return false
}
this.$confirm('正在执行任务完成操作,确定继续?', '提示', {
confirmButtonText: '确定',
cancelButtonText: '取消',
type: 'warning'
}).then(() => {
const arr = []
this.$refs.list.selection.map(rw => {
arr.push(rw.id)
})
completeRenwuFn({ renwuIds: arr }).then(res => {
this.$message.success('任务已完成')
this.getList()
})
}).catch(() => {
this.$message({
type: 'info',
message: '已取消删除'
})
})
},
// 终止任务
terminationFn() {
if (!this.$refs.list.selection.length) {
this.$message.error('请选择要终止的任务')
return false
}
const renwuIds = []
this.$refs.list.selection.map(rw => {
renwuIds.push(rw.id)
})
this.$prompt('请输入终止原因', '确认提前终止任务?', {
confirmButtonText: '确定',
cancelButtonText: '取消',
inputPattern: /\S/,
inputErrorMessage: '终止原因不能为空'
}).then(({ value }) => {
const data = {
reason: value,
renwuIds
}
terminateRenwu(data).then(data => {
this.$message.success('任务已终止')
this.getList()
})
}).catch(() => {
this.$message({
type: 'info',
message: '已取消'
})
})
},
/**
* 显示相关鉴证文件上传窗口
* @param renwuId
*/
showVerification(renwuId) {
this.dialogEnclosureVisible = true
this.currentRenwuId = renwuId
}
}
}
</script>