Files
foton-laws-system-front/src/pages/regulatoryRepository/nonConfomity/pages/rectificationDatabase.vue
T

736 lines
27 KiB
Vue

<!--未符合项整改数据库-->
<template>
<div id="rectification-dataBase">
<div class="search-area">
<div class="content-top">
<el-form :modal="nonConformitySearch" inline class="label-input-form">
<el-form-item label="标准号/标准名称" class="search-item">
<el-input v-model="nonConformitySearch.standSerialNumber"
placeholder="请输入"
clearable
:maxlength="100"></el-input>
</el-form-item>
<el-form-item label="项目名称" class="search-item">
<el-input v-model="nonConformitySearch.productName"
placeholder="请输入"
clearable
:maxlength="100"></el-input>
</el-form-item>
<el-form-item label="责任部门" class="search-item">
<el-select v-model="nonConformitySearch.responsibleUnit" placeholder="根据责任部门查找" clearable>
<el-option v-for="opt in zrbmOptions" :value="opt.value === undefined ? '' :opt.value" :key="opt.value" :label="opt.label">
{{ opt.label}}</el-option>
</el-select>
</el-form-item>
<!-- <el-form-item label="责任部门" class="search-item">-->
<!-- <el-input v-model="nonConformitySearch.responsibleUnit" v-show="false" />-->
<!-- <el-popover-->
<!-- placement="bottom"-->
<!-- popper-class="user-dept-popper"-->
<!-- trigger="click"-->
<!-- :value="false"-->
<!-- >-->
<!-- <el-input-->
<!-- slot="reference"-->
<!-- v-model="nonConformitySearch.responsibleUnitShow"-->
<!-- placeholder="根据责任部门查找"-->
<!-- readonly-->
<!-- clearable-->
<!-- id="searchResp"-->
<!-- />-->
<!-- <div class="api">-->
<!-- <laws-tree-->
<!-- :zNodes="zNodesSItem"-->
<!-- treeDivId="zNodesSItemSearch"-->
<!-- deptSelect-->
<!-- showRMenu-->
<!-- @treeDblClick="(treeId, treeNode) => treeClickSearch(treeId, treeNode)"-->
<!-- class="ztree" style="width: 200px;height: 400px;overflow: auto">-->
<!-- </laws-tree>-->
<!-- </div>-->
<!-- </el-popover>-->
<!-- </el-form-item>-->
<el-form-item class="search-item btn-box">
<el-button
type="primary"
class="common-button-primary"
size="mini"
v-btn-permission="'b3aaea6d18f5871b68825d3783eb736a'"
@click="getTableByPage('')">
查询
</el-button>
</el-form-item>
<el-form-item class="search-item btn-box">
<el-button
class="common-button-default"
size="mini"
v-btn-permission="'5905d0743c3504799aee83ac9697f8c5'"
@click="clearAllSearch">
清空
</el-button>
</el-form-item>
</el-form>
</div>
</div>
<div class="content-center">
<el-button
class="common-button-primary"
type="primary"
size="mini"
@click="exportStandard()"
title="不勾选时默认导出所有筛选项;勾选时仅导出勾选项"
v-btn-permission="'620e6da5808bf104e576c763546a33b6'"
><i class="iconfont">&#xe6e9;</i>导出</el-button>
<el-button
class="common-button-primary"
type="primary"
size="mini"
@click="batchClose()"
v-btn-permission="'503f373e13fc62a8b50d52898fcd50cd'"
><i class="iconfont">&#xe611;</i>批量关闭</el-button>
<el-button
class="common-button-primary"
size="mini"
type="primary"
@click="historyClick"
style="float: right; margin-right: 10px;"
v-btn-permission="'173e7a3ce7e9544578f63eaf11dd48de'"
>历史数据</el-button>
</div>
<div class="container">
<loading :loading="loading">数据获取中....</loading>
<div class="table-wrap">
<div class="inner-wrap">
<el-table
:data="nonList"
tooltip-effect="dark"
height="100%"
border
class="table"
v-loading="myLoading.loadData"
@selection-change="standSelectChange"
:header-cell-style="{background: '#e8e8e8', color: '#333333', fontSize: '16px',
fontWeight: 'bold', height: '48px'}"
>
<el-table-column
type="selection"
width="55"
fixed="left"
align="center">
</el-table-column>
<el-table-column
prop="standSerialNumber"
fixed="left"
width="180"
label="标准号">
<!-- <template slot-scope="scope">-->
<!-- <a @click="detailsStandard(scope.row)" class="table-jump">{{ scope.row.standId }}</a>-->
<!--&lt;!&ndash; {{ scope.row.standId }}&ndash;&gt;-->
<!-- </template>-->
<template slot-scope="scope">
<a class="table-jump" @click="handlePreview(scope.row)">{{ scope.row.standSerialNumber }}</a>
</template>
</el-table-column>
<el-table-column
prop="standName"
fixed="left"
width="180"
label="标准名称">
<template slot-scope="scope">
<a @click="handlePreview(scope.row)" class="table-jump">{{ scope.row.standName }}</a>
</template>
</el-table-column>
<el-table-column
prop="itemsNum"
width="180"
label="条款号">
</el-table-column>
<el-table-column
prop="itemsName"
width="180"
label="条款名称">
</el-table-column>
<el-table-column
prop="productType"
width="180"
label="产品类型">
</el-table-column>
<el-table-column
prop="productLine"
width="180"
label="产品线">
</el-table-column>
<el-table-column
prop="productName"
width="180"
label="项目名称">
</el-table-column>
<el-table-column
prop="reason"
width="180"
label="不合规项目">
</el-table-column>
<el-table-column
prop="responsibleUnit"
width="180"
label="责任部门">
</el-table-column>
<el-table-column
prop="dutyEngineerName"
width="150"
label="责任工程师">
</el-table-column>
<el-table-column
prop="authEngineerName"
width="150"
label="认证工程师">
</el-table-column>
<el-table-column
prop="qaEngineerName"
width="150"
label="质量工程师">
</el-table-column>
<el-table-column
prop="planCloseTime"
width="150"
sortable="custom"
label="计划关闭时间">
<template slot-scope="scope">{{(scope.row.planCloseTime ? scope.row.planCloseTime.substring(0, 11): '')}}</template>
</el-table-column>
<el-table-column label="操作" align="center" width="50">
<template slot-scope="scope">
<div @click.stop style="display: inline-block">
<el-dropdown trigger="click" @command="handleCommand">
<i class="iconfont">&#xe61e;</i>
<el-dropdown-menu slot="dropdown">
<el-dropdown-item :command="[scope.row, '查看']" v-btn-permission="'374cb5206597fa201e57f561ff2f8ed7'">查看 </el-dropdown-item>
</el-dropdown-menu>
</el-dropdown>
</div>
</template>
</el-table-column>
</el-table>
</div>
</div>
<div class="footer">
<pagination
:page="pageNo"
:total="total"
@pageChange="pageChange"
@pageSizeChange="pageSizeChange"></pagination>
<el-drawer
title='查看'
:visible.sync="historySee"
destroy-on-close
:wrapperClosable="false"
class="seeHisToryDraw"
size="1000px"
>
<div class="demo-drawer-content">
<div class="el-drawer-form" style="height: auto">
<el-form
class="label-input-form"
label-width="150px"
ref="nonAddForm"
style="width: 100%;"
:model="historySeeForm"
>
<el-form-item class="add-form-item" label="标准号:">
<div class="seeItem">{{historySeeForm.standSerialNumber}}</div>
</el-form-item>
<el-form-item class="add-form-item" label="标准名称:">
<div class="seeItem">{{historySeeForm.standName}}</div>
</el-form-item>
<el-form-item class="add-form-item" label="条款号:">
<div class="seeItem">{{historySeeForm.itemsNum}}</div>
</el-form-item>
<el-form-item class="add-form-item" label="条款名称:">
<div class="seeItem">{{historySeeForm.itemsName}}</div>
</el-form-item>
<el-form-item class="add-form-item" label="产品线:">
<div class="seeItem">{{historySeeForm.productLine}}</div>
</el-form-item>
<el-form-item class="add-form-item" label="项目名称:">
<div class="seeItem">{{historySeeForm.productName}}</div>
</el-form-item>
<el-form-item class="add-form-item" label="不合规项目:">
<div class="seeItem">{{historySeeForm.reason}}</div>
</el-form-item>
<el-form-item class="add-form-item" label="责任部门:">
<div class="seeItem">{{historySeeForm.responsibleUnit}}</div>
</el-form-item>
<el-form-item class="add-form-item" label="责任工程师:">
<div class="seeItem">{{historySeeForm.dutyEngineer}}</div>
</el-form-item>
<el-form-item class="add-form-item" label="认证工程师:">
<div class="seeItem">{{historySeeForm.authEngineer}}</div>
</el-form-item>
<el-form-item class="add-form-item" label="质量工程师:">
<div class="seeItem">{{historySeeForm.qaEngineer}}</div>
</el-form-item>
<el-form-item class="add-form-item" label="计划关闭时间:">
<div class="seeItem">{{historySeeForm.planCloseTime ? historySeeForm.planCloseTime.substring(0, 11) : '-'}}</div>
</el-form-item>
</el-form>
</div>
<div class="typebox" v-if="historySeeForm.inconItemEOList != null && historySeeForm.inconItemEOList.length > 0">
<el-divider content-position="left">不符合项</el-divider>
<div class="typeitem" v-for="(item, index) in historySeeForm.inconItemEOList" :key="index">
<div class="typeitems">
<div class="itemsLeft">条款号:</div>
<div class="itemsRight">{{item.itemNum}}</div>
</div>
<div class="typeitems">
<div class="itemsLeft">涉及项目:</div>
<div class="itemsRight">{{item.productNameShow}}</div>
</div>
<div class="typeitems">
<div class="itemsLeft">目前状态:</div>
<!-- <div class="itemsRight" v-if="item.itemState == '2'">符合</div>-->
<div class="itemsRight">不符合</div>
</div>
<div class="typeitems">
<div class="itemsLeft">设计完成时间:</div>
<div class="itemsRight">{{(item.stepFirTime ? item.stepFirTime.substring(0, 10): '')}}</div>
</div>
<div class="typeitems">
<div class="itemsLeft">佐证材料:</div>
<!-- <div class="itemsRight">{{item.supportFile}}</div>-->
<div class="itemsRight">
<p
class="files-title"
v-for="(file, fileIndex) in item.supportFileList"
:key="fileIndex"
>
<span>{{ file.oldFileName }}</span>
<i title="下载" @click="downloadFile(file.id)" class="icon-download" />
</p>
</div>
</div>
<div class="typeitems">
<div class="itemsLeft">备注信息:</div>
<div class="itemsRight">{{item.remark}}</div>
</div>
<div class="typeitems">
<div class="itemsLeft">验证完成时间:</div>
<div class="itemsRight">{{(item.stepSecTime ? item.stepSecTime.substring(0, 10): '')}}</div>
</div>
<div class="typeitems">
<div class="itemsLeft">佐证材料:</div>
<div class="itemsRight">
<p
class="files-title"
v-for="(file, fileIndex) in item.secSupportFileList"
:key="fileIndex"
>
<span>{{ file.oldFileName }}</span>
<i title="下载" @click="downloadFile(file.id)" class="icon-download" />
</p>
</div>
</div>
<div class="typeitems">
<div class="itemsLeft">备注信息:</div>
<div class="itemsRight">{{item.secRemark}}</div>
</div>
<div class="typeitems">
<div class="itemsLeft">整改完成时间:</div>
<div class="itemsRight">{{(item.stepThiTime ? item.stepThiTime.substring(0, 10): '')}}</div>
</div>
<div class="typeitems">
<div class="itemsLeft">佐证材料:</div>
<div class="itemsRight">
<p
class="files-title"
v-for="(file, fileIndex) in item.thrSupportFileList"
:key="fileIndex"
>
<span>{{ file.oldFileName }}</span>
<i title="下载" @click="downloadFile(file.id)" class="icon-download" />
</p>
</div>
</div>
<div class="typeitems">
<div class="itemsLeft">备注信息:</div>
<div class="itemsRight">{{item.thrRemark}}</div>
</div>
<div class="typeitems">
<div class="itemsLeft">责任部门:</div>
<div class="itemsRight">{{item.responsibleUnitShow}}</div>
</div>
<div class="typeitems">
<div class="itemsLeft">责任工程师:</div>
<div class="itemsRight">{{item.responseEnginShow}}</div>
</div>
</div>
</div>
<div class="typebox" v-if="historySeeForm.besureItemEOList != null && historySeeForm.besureItemEOList.length > 0">
<el-divider content-position="left">待验证项</el-divider>
<div class="typeitem" v-for="(item, index) in historySeeForm.besureItemEOList" :key="index">
<div class="typeitems">
<div class="itemsLeft">条款号:</div>
<div class="itemsRight">{{item.itemNum}}</div>
</div>
<div class="typeitems">
<div class="itemsLeft">涉及项目:</div>
<div class="itemsRight">{{item.productNameShow}}</div>
</div>
<div class="typeitems">
<div class="itemsLeft">责任部门:</div>
<div class="itemsRight">{{item.responsibleUnitShow}}</div>
</div>
<div class="typeitems">
<div class="itemsLeft">责任工程师:</div>
<div class="itemsRight">{{item.responseEnginShow}}</div>
</div>
<div class="typeitems">
<div class="itemsLeft">验证时间:</div>
<div class="itemsRight">{{(item.validTime ? item.validTime.substring(0, 11) : '')}}</div>
</div>
<div class="typeitems">
<div class="itemsLeft">验证结果:</div>
<div class="itemsRight">待验证</div>
</div>
</div>
</div>
</div>
</el-drawer>
</div>
</div>
<el-dialog :visible.sync="exportModelFlag" title="导出文件" width="300px">
<el-form :inline="true" class="label-input-form search-area">
<el-form-item label="导出名称" class="search-item">
<el-input v-model="exportName" placeholder="请输入导出文件名称" :maxlength="30" clearable label="导出名称"/>
</el-form-item>
</el-form>
<span slot="footer" class="demo-drawer-footer">
<el-button size="mini" class="common-button-default" icon="el-icon-close" @click="cancal">取消</el-button>
<el-button type="primary" size="mini" class="common-button-primary" icon="el-icon-check" @click="exportTestItem">提交</el-button>
</span>
</el-dialog>
</div>
</template>
<script>
import { interfaceUrl } from "@/sysConfig";
export default {
name: "rectificationDatabase",
data () {
return {
loading: false,
nonList:[], //未符合项表格数据
exportModelFlag: false, //导出模态窗
tableHeight: null, //表格高度
exportName: '',
selectedList: [], //标准选中的数据
saveExportType: '',// 导出文件模态框控制,和文件名称
// 总数
total: 0,
// 当前页数
pageNo: 1,
nonConformitySearch: {
standId: '', // 标准号/名称
standSerialNumber:'',
productName: '', // 项目名称
responsibleUnit: '' // 责任部门
},
zrbmOptions: [], // 责任部门下拉框
// 责任部门
zNodesSItem: [],
myLoading: {
loadData: false
},
//数据查看
historySee: false,
historySeeForm: {},
}
},
methods: {
// 查询未符合项table列表
getTableByPage () {
this.myLoading.loadData = true
this.$http.get('sarStandUnqualified/sar-stand-unqualified', {
...this.nonConformitySearch,
current: this.pageNo,
size: this.$store.getters.userInfo.configContent
}, {
_this: this
}, res => {
this.myLoading.loadData = false
this.nonList = res.data.records
this.total = res.data.total
}, e => {
this.myLoading.loadData = false
})
},
// 点击历史记录按钮事件
historyClick () {
this.$router.push({
name: 'HistoricalData'
})
},
//导出
exportStandard () {
if(this.selectedList.length > 0) {
this.saveExportType = 'apart'
} else {
this.saveExportType = 'all'
}
this.exportName = ''
this.exportModelFlag = true
console.log(this.saveExportType);
},
//取消导出
cancal () {
this.exportModelFlag = false
},
//确认导出
exportTestItem () {
if(this.saveExportType === 'apart') {
if (this.selectedList != null && this.selectedList != ''){
console.log(this.selectedList);
const exportURL = interfaceUrl + 'sarStandUnqualified/sar-stand-unqualified/exportStandUnqulifiedExcel?' +
'exportType' + this.saveExportType + '&ids=' + this.selectedList.join(',') + '&exportName=' + this.exportName
window.open(exportURL)
this.$message.success('导出信息成功')
}
} else if (this.saveExportType === 'all') {
console.log(this.selectedList);
const exportURL = interfaceUrl + 'sarStandUnqualified/sar-stand-unqualified/exportStandUnqulifiedExcel?' +
'exportType' + this.saveExportType + '&ids=' + this.selectedList.join(',') + '&exportName=' + this.exportName
window.open(exportURL)
this.$message.success('导出信息成功')
}
this.exportModelFlag = false
this.selectedList = []
},
//批量关闭
batchClose () {
if (this.selectedList.length === 0){
this.$message.warning('请选择一条数据进行关闭')
}else{
this.$confirm('确认关闭这些数据?', '提示', {
confirmButtonText: '确定',
confirmButtonClass: 'common-button-primary',
cancelButtonTxe: '取消',
type: 'warning',
roundButton: false,
}).then(() => {
this.$http.post('sarStandUnqualified/sar-stand-unqualified/close',{
ids: this.selectedList
},{
_this: this
}, res => {
if (res.ok) {
this.getTableByPage()
this.selectedList = []
this.$message.success('关闭成功')
}
})
}).catch(() => {
})
}
},
// 获取组织机构数据
getOrgTreeSource () {
this.$http.get('sys/org/getTree', {}, {
_this: this
},
res => {
if (res.ok) {
let treeNode = []
res.data.map((item, index) => {
let treeItem = {}
for (let key in item) {
if (key === 'orgName') {
treeItem.name = item[key]
} else {
treeItem[key] = item[key]
}
}
treeNode[index] = treeItem
})
this.zNodesS = JSON.parse(JSON.stringify(treeNode))
this.zNodesSItem = JSON.parse(JSON.stringify(treeNode))
this.searchInlandNodes = JSON.parse(JSON.stringify(treeNode))
}
}, e => {})
},
treeClickSearch (treeId, treeNode) {
this.nonConformitySearch.responsibleUnit = treeNode.id
this.nonConformitySearch.responsibleUnitShow = treeNode.name
},
// 清空 查询条件
clearAllSearch (search = true) {
this.nonConformitySearch = {
standId: '',
productName: '',
responsibleUnit: ''
}
this.getTableByPage()
},
// 修改成表格样式后,选择项勾选改变
standSelectChange (data) {
this.selectedList = []
for (let i = 0; i < data.length; i++) {
this.selectedList.push(data[i].id)
}
},
// 更多
handleCommand (command) {
switch (command[1]) {
case '查看':
this.showUser(command[0])
break
}
},
//点击查看按钮事件
showUser(row) {
this.historySeeForm = JSON.parse(JSON.stringify(row))
this.historySee = true
this.$nextTick(() => {
const arr = []
let questionType = []
if (this.historySeeForm.quesType) {
questionType = this.historySeeForm.quesType.split(',')
questionType.map((item) => {
this.optionList.map((opr) => {
if (item === opr.value) {
item = opr.label
arr.push(item)
}
})
})
this.historySeeForm.quesType = arr.toString()
}
})
},
//点击编辑按钮事件
openEditModal(item) {
console.log(item)
},
// 点击查看
handlePreview (item) {
console.log(item);
let routeUrl = this.$router.resolve({
name: 'OtherStandardDetails',
params: {
id: item.standId,
pageType: 'FOREIGN_STAND'
// pageType: item.standType + '_STAND'
}
})
window.open(routeUrl.href, '_blank')
},
detailsStandard (item) {
this.$http.post('lawss/sarTestItem/validateStandNumber', {
standnumber: item.standNum
}, {
_this: this
}, res => {
this.pageType = res.data.standType
let name = ''
switch (this.pageType) {
case 'FOREIGN_LAWS':
name = 'OtherLawsDetails'
break
case 'INLAND_STAND':
name = 'OtherStandardDetails'
break
case 'FOREIGN_STAND':
name = 'OtherStandardDetails'
break
}
let routeUrl = this.$router.resolve({
name: name,
params: {
id: res.data.standid,
pageType: this.pageType
}
})
window.open(routeUrl.href, '_blank')
}, e => {
})
},
// 分页事件
pageChange (page) {
this.pageNo = page
this.getTableByPage()
},
pageSizeChange (pageSize) {
console.log(pageSize);
this.getTableByPage()
},
},
mounted () {
// 从数据库中查询各下拉框数据
this.$http.get('sys/dictype/getDicTypeListCode', '', {
_this: this
}, res => {
this.allSelectOptions = res.data || {}
this.zrbmOptions = res.data.ZRBMCLASS // 责任部门
this.zrbmOptions = res.data.ZRBMCLASS // 责任部门
this.getGzzOption()
this.setMap(this.standStateOptions)
}, e => {
})
this.getTableByPage()
// 加载所有的部门
this.getOrgTreeSource()
}
};
</script>
<style lang="less" scoped>
//.el-table {
// .el-table__fixed {
// height:auto !important; // 此处的important表示优先于element.style
// bottom:17px; // 改为自动高度后,设置与父容器的底部距离,则高度会动态改变
// }
//}
#rectification-dataBase {
/deep/.table-wrap {
.el-table__fixed {
height: calc(~'100% - 20px') !important;
}
}
height: 100%;
display: flex;
flex-direction: column;
.content-center {
margin-left: 10px;
margin-bottom: 10px;
}
.container {
flex: 1;
overflow: hidden;
display: flex;
flex-direction: column;
.table-wrap {
flex: 1;
overflow: hidden;
position: relative;
.inner-wrap {
position: absolute;
top: 0;
left: 0;
width: 100%;
height: 100%;
}
}
.footer {
/deep/ .pagination {
position: static;
}
}
}
}
</style>