Merge branch 'dev_2024325_BZSQ' into 'dev_2024325_LCZGF_39'

标准/译文获取申请管理 主页

See merge request laws-foton-slrs/foton-laws-system-front!167
This commit is contained in:
高嵩
2024-03-31 03:00:28 +00:00
13 changed files with 1479 additions and 7 deletions
+24 -4
View File
@@ -40,7 +40,7 @@
v-for="(children, childrenIndex) in item.children"
:key="childrenIndex"
:index="children.path"
style="text-align: center;"
style="padding-right: 15px; padding-left: 30px;font-size: 14px"
v-if="!children.menuId || $hasPermission(children.menuId)"itemSplitInfo
>
<el-badge :value="getDynamicTotal.msgCount" class="item" v-if="children.title === '我的消息' && getDynamicTotal.msgCount !== 0">
@@ -52,6 +52,9 @@
<el-badge :value="getDynamicTotal.myStandCount" class="item" v-else-if="children.title === '我的企标' && getDynamicTotal.myStandCount !== 0">
{{ children.title }}
</el-badge>
<el-badge is-dot class="item miniBadge" v-else-if="children.title === '标准/译文获取申请管理' && getStandardTranslationTodo !== 0">
<div>{{children.title}}</div>
</el-badge>
<div v-else>
{{ children.title }}
</div>
@@ -81,6 +84,7 @@
name: 'NavMenu',
data () {
return {
standardTranslation: 0,
defaultActive: null, // 当前激活菜单的 index
navMenuList: [
// {
@@ -161,6 +165,11 @@
path: '/standQA',
menuId: '2621269642ea4c6c8c42905863b2dc09'
},
{
title: '标准/译文获取申请管理',
path: '/standardTranslationAcquisitionRequest',
menuId: 'd7ad73e98162894d020aa993c08a4532'
},
// {
// title: '零部件编号申请',
// path: '/partCodeApply',
@@ -550,6 +559,11 @@
}
},
mounted () {
this.$http.get('/lawss/standardApplyFor/queryPendingApprovalCount', '', { _this: this }, res => {
if (res.ok) {
this.$store.commit('SET_STANDARD_TRANSLATION_TODO', res.data)
}
})
},
methods: {
handleSelect (key, keyPath) {
@@ -573,7 +587,7 @@
// return this.isCollapse ? require('assets/images/shangqi/img/logo4.png') : require('assets/images/shangqi/img/logo5.png')
return this.isCollapse ? require('assets/images/shangqi/img/logo4.png') : require('assets/images/shangqi/img/logo2.png')
},
...mapGetters(['getDynamicTotal', 'isCollapse'])
...mapGetters(['getDynamicTotal', 'isCollapse', 'getStandardTranslationTodo'])
},
watch: {
// 监听路由 重新渲染面包屑
@@ -606,6 +620,7 @@
width: 58px;
height: 100%;
overflow-y: auto;
overflow-x: hidden;
user-select: none;
box-sizing: border-box;
position: absolute;
@@ -785,7 +800,7 @@
}
}
.el-menu-item {
padding-left: 0 !important;
//padding-left: 0 !important;
font-size: 16px;
font-weight: normal;
height: 40px;
@@ -812,5 +827,10 @@
}
}
}
.miniBadge{
/deep/ .is-dot{
left: -18px;
top: 14px;
}
}
</style>
@@ -917,6 +917,7 @@ export default {
res.data.forEach(item => {
if (item.id && item.id == 'asdfadf') {
item.disabled = true;
this.nodeList.push(item.id)
// if (item.childNodes && item.childNodes.length !== 0) {
// this.addAttr(item.childNodes);
// }
@@ -390,12 +390,13 @@ export default {
},
goNuwPage (item) {
this.$store.commit('setDetailMap', this.$route.path)
console.log(item);
const params = {
id: item.id,
dictionaryName: item.dictionaryName,
dictionType: item.dictionType,
isRelate: item.isRelate,
relateDicId: item.relateDicId
relateDicId: item.relateDicId || '1'
}
if(item.dictionType && item.dictionType === 'TREE'){
this.$router.push({
@@ -408,7 +409,6 @@ export default {
params: params
})
}
},
handleSelectone (data) {
this.selectedList = []
@@ -0,0 +1,268 @@
<template>
<el-drawer
:title="(id ? '编辑' : '新增' ) + '标准/译文获取申请'"
:visible.sync="visible"
:direction="direction"
:append-to-body="true"
:wrapper-closable="false"
:before-close="handleClose"
size="40%"
>
<loading :loading="showLoading">加载中...</loading>
<el-form ref="addFormRef" :model="StandardApplyForEO" :rules="addFormRules" class="label-input-form">
<el-row>
<el-col :span="12">
<el-form-item label="申请单位" prop="applyForUnitName" label-width="100px" class="add-form-item">
<el-input v-model="StandardApplyForEO.applyForUnitName" readonly clearable />
</el-form-item>
</el-col>
<el-col :span="12">
<el-form-item label="申请人" prop="applyForUserName" label-width="100px" class="add-form-item">
<el-input v-model="StandardApplyForEO.applyForUserName" readonly clearable />
</el-form-item>
</el-col>
<el-col :span="12">
<el-form-item label="类型" prop="type" label-width="100px" class="add-form-item">
<el-select
v-model="StandardApplyForEO.type"
:placeholder="'请选择类型'"
clearable
>
<el-option
v-for="opt in typeList"
:key="opt.value"
:value="opt.value === undefined ? '' :opt.value"
:label="opt.label"
>
{{ opt.label }}
</el-option>
</el-select>
</el-form-item>
</el-col>
<el-col :span="12">
<el-form-item label="标准类型" prop="standType" label-width="100px" class="add-form-item">
<el-select
v-model="StandardApplyForEO.standType"
:placeholder="'请选择标准类型'"
clearable
@change="selectStandType"
>
<el-option
v-for="opt in standTypeList"
:key="opt.value"
:value="opt.value === undefined ? '' :opt.value"
:label="opt.label"
>
{{ opt.label }}
</el-option>
</el-select>
</el-form-item>
</el-col>
<el-col :span="12">
<el-form-item label="标准类别" prop="standLb" label-width="100px" class="add-form-item">
<el-select
v-model="StandardApplyForEO.standLb"
:placeholder="'请选择标准类别'"
clearable
>
<el-option
v-for="opt in standLbList"
:key="opt.value"
:value="opt.value === undefined ? '' :opt.value"
:label="opt.label"
>
{{ opt.label }}
</el-option>
</el-select>
</el-form-item>
</el-col>
<el-col :span="12">
<el-form-item label="标准编号" prop="standNum" label-width="100px" class="add-form-item">
<el-input v-model="StandardApplyForEO.standNum" placeholder="请输入标准编号" clearable />
</el-form-item>
</el-col>
<el-col :span="12">
<el-form-item label="标准年份" prop="standYear" label-width="100px" class="add-form-item">
<el-input v-model="StandardApplyForEO.standYear" placeholder="请输入标准年份" clearable />
</el-form-item>
</el-col>
<el-col :span="12">
<el-form-item label="需求时间" prop="requiredTime" label-width="100px" class="add-form-item">
<el-input v-model="StandardApplyForEO.requiredTime" placeholder="请输入需求时间" clearable />
</el-form-item>
</el-col>
<el-col :span="24">
<el-form-item label="标准名称" prop="standName" label-width="100px" class="add-form-item">
<el-input v-model="StandardApplyForEO.standName" placeholder="请输入标准名称" clearable />
</el-form-item>
</el-col>
<el-col :span="12">
<el-form-item label="原语言" prop="sourceLanguage" label-width="100px" class="add-form-item">
<el-input v-model="StandardApplyForEO.sourceLanguage" placeholder="请输入原语言" clearable />
</el-form-item>
</el-col>
<el-col :span="12">
<el-form-item label="目标语言" prop="targetLanguage" label-width="100px" class="add-form-item">
<el-input v-model="StandardApplyForEO.targetLanguage" placeholder="请输入目标语言" clearable />
</el-form-item>
</el-col>
<el-col :span="24">
<el-form-item label="理由" prop="reason" label-width="100px" class="add-form-item">
<el-input v-model="StandardApplyForEO.reason" placeholder="请输入理由" type="textarea" onkeydown="return event.key !== 'Enter';" :autosize="{ minRows: 10,maxRows: 10}" clearable/>
</el-form-item>
</el-col>
</el-row>
</el-form>
<div class="drawer-footer">
<el-button type="primary" class="common-button-primary" icon="el-icon-check" :loading="isSubmit" @click="submit">提交</el-button>
<el-button class="common-button-default" icon="el-icon-close" @click="visible=false">取消</el-button>
</div>
</el-drawer>
</template>
<script>
export default {
name: 'AddModal',
data () {
return {
direction: 'rtl',
visible: false,
isSubmit: false,
showLoading: false,
id: '',
StandardApplyForEO: {},
typeList: [],
standTypeList: [],
standLbList: [],
addFormRules: {
applyForUnitName: [ { required: true, message: '申请单位不能为空', trigger: 'blur' } ],
applyForUserName: [ { required: true, message: '申请人不能为空', trigger: 'blur' } ],
type: [ { required: true, message: '类型不能为空', trigger: 'blur' } ],
standType: [ { required: true, message: '标准类型不能为空', trigger: 'blur' } ],
standLb: [ { required: true, message: '标准类别不能为空', trigger: 'blur' } ],
standYear: [ { max: 100, message: '标准年份不能超过100个字符' } ],
requiredTime: [ { max: 100, message: '需求时间不能超过100个字符' } ],
sourceLanguage: [ { max: 100, message: '原语言不能超过100个字符' } ],
targetLanguage: [ { max: 100, message: '目标语言不能超过100个字符' } ],
standNum: [ { required: true, message: '标准编号不能为空', trigger: 'blur' }, { max: 100, message: '标准编号不能超过100个字符' } ],
standName: [ { required: true, message: '标准名称不能为空', trigger: 'blur' }, { max: 500, message: '标准名称不能超过500个字符' } ],
reason: [ { required: true, message: '理由不能为空', trigger: 'blur' }, {max: 500, message: '理由不能超过500个字符', trigger: 'blur'} ],
},
url: {
addUrl: '/lawss/standardApplyFor/insert',
editUrl: '/lawss/standardApplyFor/edit'
}
}
},
mounted () {
this.getDicTypeListCode()
},
methods: {
getDicTypeListCode () {
this.$http.get('/lawss/standardApplyFor/getStandTypeDropDownData', {}, {
_this: this
}, res => {
this.standTypeList = res.data
})
this.$http.get('sys/dictype/getDicTypeListCode', '', {
_this: this
}, res => {
this.typeList = res.data.BZJYWTYPE // 标准类别
})
},
handleClose () {
this.visible = false
},
addModel () {
this.id = ''
this.visible = true
this.StandardApplyForEO = {}
this.StandardApplyForEO.applyForUserId = this.$store.getters.userInfo.userId
this.StandardApplyForEO.applyForUserName = this.$store.getters.userInfo.userName
this.StandardApplyForEO.applyForUnitId = this.$store.getters.userInfo.upDeptId
this.StandardApplyForEO.applyForUnitName = this.$store.getters.userInfo.upDeptName
this.StandardApplyForEO = { ...this.StandardApplyForEO }
this.$nextTick(() => {
this.$refs.addFormRef.clearValidate()
this.getDicTypeListCode()
})
},
showModal (item) {
this.id = item.id
this.visible = true
this.showLoading = true
this.StandardApplyForEO = JSON.parse(JSON.stringify(item))
this.$nextTick(() => {
this.$refs.addFormRef.clearValidate()
this.getDicTypeListCode()
this.selectStandType(this.StandardApplyForEO.standType, 'callBack')
})
},
selectStandType (value, tag) {
if (value === '') {
this.standLbList = []
}
this.$http.get('/lawss/standardApplyFor/getStandLbDropDownData', { dicId: value }, {
_this: this
}, res => {
if (res.ok) {
this.$nextTick(() => {
this.standLbList = res.data
if (tag !== 'callBack') {
this.$set(this.StandardApplyForEO, 'standLb', null)
}
this.showLoading = false
})
return
}
this.standLbList = []
this.$set(this.StandardApplyForEO, 'standLb', null)
})
},
submit () {
this.$refs.addFormRef.validate((valid) => {
if (valid) {
this.isSubmit = true
const url = this.id ? this.url.editUrl : this.url.addUrl
if (this.id) {
delete this.StandardApplyForEO.updateTime
delete this.StandardApplyForEO.updateBy
}
this.$http.postData(url, this.StandardApplyForEO, { _this: this },
res => {
if (res.ok) {
this.$emit('updateList')
this.$message.success(res.data)
this.visible = false
}else{
this.$message.warning(res.message)
}
this.isSubmit = false
})
}
})
}
}
}
</script>
<style scoped>
.label-input-form {
padding: 0 19px;
}
.drawer-footer {
position: absolute;
bottom: 0;
left: 0;
right: 0;
width: 100%;
padding: 0 20px;
height: 70px;
line-height: 69px;
border-top: 1px solid #e8e8e8;
text-align: right;
background: #fff;
z-index: 999;
}
</style>
@@ -0,0 +1,176 @@
<template>
<el-drawer
title="查看标准/译文获取申请"
:visible.sync="visible"
:direction="direction"
:append-to-body="true"
:wrapper-closable="false"
:before-close="handleClose"
size="40%"
>
<loading :loading="showLoading">加载中...</loading>
<el-form ref="addFormRef" style="padding-bottom: 80px" :model="StandardApplyForEO" class="label-input-form detail-modal-form">
<el-row class="formLine">
<el-col :span="12">
<el-form-item label="申请单位" label-width="100px" class="add-form-item">
<div class="content">{{ StandardApplyForEO.applyForUnitName ? StandardApplyForEO.applyForUnitName : '--' }}</div>
</el-form-item>
</el-col>
<el-col :span="12">
<el-form-item label="申请人" label-width="100px" class="add-form-item">
<div class="content">{{ StandardApplyForEO.applyForUserName ? StandardApplyForEO.applyForUserName : '--' }}</div>
</el-form-item>
</el-col>
</el-row>
<el-row class="formLine">
<el-col :span="12">
<el-form-item label="类型" label-width="100px" class="add-form-item">
<div class="content">{{ StandardApplyForEO.typeShow ? StandardApplyForEO.typeShow : '--' }}</div>
</el-form-item>
</el-col>
<el-col :span="12">
<el-form-item label="标准类型" label-width="100px" class="add-form-item">
<div>{{ StandardApplyForEO.standTypeShow ? StandardApplyForEO.standTypeShow : '--' }}</div>
</el-form-item>
</el-col>
</el-row>
<el-row class="formLine">
<el-col :span="12">
<el-form-item label="标准类别" label-width="100px" class="add-form-item">
<div class="content">{{ StandardApplyForEO.standLbShow ? StandardApplyForEO.standLbShow : '--' }}</div>
</el-form-item>
</el-col>
<el-col :span="12">
<el-form-item label="标准编号" label-width="100px" class="add-form-item">
<div class="content">{{ StandardApplyForEO.standNumShow ? StandardApplyForEO.standNumShow : '--' }}</div>
</el-form-item>
</el-col>
</el-row>
<el-row class="formLine">
<el-col :span="12">
<el-form-item label="标准年份" label-width="100px" class="add-form-item">
<div class="content">{{ StandardApplyForEO.standYear ? StandardApplyForEO.standYear : '--' }}</div>
</el-form-item>
</el-col>
<el-col :span="12">
<el-form-item label="需求时间" label-width="100px" class="add-form-item">
<div class="content">{{ StandardApplyForEO.requiredTime ? StandardApplyForEO.requiredTime : '--' }}</div>
</el-form-item>
</el-col>
</el-row>
<el-row class="formLine">
<el-col :span="24">
<el-form-item label="标准名称" label-width="100px" class="add-form-item">
<div class="content">{{ StandardApplyForEO.standName ? StandardApplyForEO.standName : '--' }}</div>
</el-form-item>
</el-col>
</el-row>
<el-row class="formLine">
<el-col :span="12">
<el-form-item label="原语言" label-width="100px" class="add-form-item">
<div class="content">{{ StandardApplyForEO.sourceLanguage ? StandardApplyForEO.sourceLanguage : '--' }}</div>
</el-form-item>
</el-col>
<el-col :span="12">
<el-form-item label="目标语言" label-width="100px" class="add-form-item">
<div class="content">{{ StandardApplyForEO.targetLanguage ? StandardApplyForEO.targetLanguage : '--' }}</div>
</el-form-item>
</el-col>
</el-row>
<el-row class="formLine">
<el-col :span="24">
<el-form-item label="理由" label-width="100px" class="add-form-item reasonContent">
<div class="contentLine">{{ StandardApplyForEO.reason ? StandardApplyForEO.reason : '--' }}</div>
</el-form-item>
</el-col>
</el-row>
<el-row>
<el-col v-show="StandardApplyForEO.status !== 'pendingApproval' && StandardApplyForEO.status !== 'Staging'" :span="12" class="formLine">
<el-form-item label="审批人" label-width="100px" class="add-form-item">
<div class="content">{{ StandardApplyForEO.approveUserName ? StandardApplyForEO.approveUserName : '--' }}</div>
</el-form-item>
</el-col>
<el-col v-show="StandardApplyForEO.status !== 'pendingApproval' && StandardApplyForEO.status !== 'Staging'" :span="12" class="formLine">
<el-form-item label="审批时间" label-width="100px" class="add-form-item">
<div class="content">{{ StandardApplyForEO.approveTime ? StandardApplyForEO.approveTime : '--' }}</div>
</el-form-item>
</el-col>
<el-col v-show="StandardApplyForEO.status !== 'pendingApproval' && StandardApplyForEO.status !== 'Staging' && StandardApplyForEO.status !== 'pass'" :span="24" class="formLine">
<el-form-item label="驳回原因" label-width="100px" class="add-form-item">
<div class="contentLine">{{ StandardApplyForEO.refuseCause ? StandardApplyForEO.refuseCause : '--' }}</div>
</el-form-item>
</el-col>
</el-row>
</el-form>
<div>
<div class="drawer-footer">
<el-button class="common-button-default" @click="visible=false">关闭</el-button>
</div>
</div>
</el-drawer>
</template>
<script>
export default {
name: 'AddModal',
data () {
return {
visible: false,
showLoading: false,
direction: 'rtl',
StandardApplyForEO: [],
}
},
methods: {
handleClose () {
this.visible = false
},
showModal (item) {
this.visible = true
this.$nextTick(() => {
this.StandardApplyForEO = []
this.StandardApplyForEO = item
})
},
}
}
</script>
<style scoped lang="less">
.label-input-form{
padding: 0 19px;
}
.drawer-footer {
position: absolute;
bottom: 0;
left: 0;
right: 0;
width: 100%;
padding: 0 20px;
height: 70px;
line-height: 69px;
border-top: 1px solid #e8e8e8;
text-align: right;
background: #fff;
z-index: 999;
}
.content{
display: flex;
align-items: center;
min-height: 50px;
overflow: auto;
}
.add-form-item{
border-bottom: none;
}
.formLine{
border-bottom: 1px dashed #e5e5e5
}
</style>
@@ -0,0 +1,62 @@
<template>
<!--导出文件改名字模态框-->
<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 class="common-button-default" icon="el-icon-close" @click="cancel">取消</el-button>
<el-button type="primary" round class="common-button-primary" icon="el-icon-check" @click="submit">提交</el-button>
</span>
</el-dialog>
</template>
<script>
export default {
name: 'exportDialog',
data () {
return {
exportModelFlag: false,
exportName: ''
}
},
methods: {
openModel () {
this.exportName = ''
this.exportModelFlag = true
},
cancel () {
this.exportModelFlag = false
},
submit () {
this.$emit('exportData', this.exportName)
this.exportModelFlag = false
}
}
}
</script>
<style scoped>
/deep/ .label-input-form .add-form-item .el-form-item__content .el-input .el-input__inner {
width: 280px;
}
/deep/ .el-dialog .el-dialog__header {
width: 100%;
font-size: 14px;
color: #17233d;
font-weight: bold;
border-bottom: 1px solid #e5e5e5;
overflow: hidden;
text-overflow: ellipsis;
white-space: nowrap;
}
/deep/ .el-dialog .el-dialog__body {
padding: 15px 20px;
}
/deep/ .el-dialog .el-dialog__footer .el-button {
height: 32px;
padding: 8px 23px;
}
</style>
@@ -0,0 +1,298 @@
<template>
<el-dialog
title="标准/译文获取申请"
width="70%"
:visible.sync="visible"
:before-close="handleClose"
>
<div class="operate">
<el-button size="mini" type="primary" @click="standardTranslationAcquisitionRequestAdd">新增标准/译文获取申请</el-button>
<el-upload
:action="`/api/lawss/standardApplyFor/importData`"
:headers="headers"
style="margin: 0 10px"
:on-success="importSuccess"
:on-error="importError"
:show-file-list="false"
:multiple="false"
accept=".xlsx,xls"
>
<el-button size="mini" type="primary">导入</el-button>
</el-upload>
<el-button size="mini" @click="templateDownload">模板下载</el-button>
<el-button size="mini" @click="batchDelete()">批量删除</el-button>
</div>
<div class="table-container">
<el-table
ref="selections"
tooltip-effect="dark"
style="width: 100%; flex: auto;"
class="drag-table"
height="300px"
row-key="id"
border
:data="StandardApplyForEO"
:header-cell-style="{background: '#e8e8e8', color: '#333333', fontSize: '16px', fontWeight: 'bold', height: '48px'}"
@selection-change="handleSelectionChange"
>
<el-table-column
type="selection"
width="55"
/>
<el-table-column
type="index"
fixed="left"
width="55"
label="序号"
align="center"
/>
<el-table-column
show-overflow-tooltip
label="类型"
prop="typeShow"
align="center"
min-width="100"
/>
<el-table-column
show-overflow-tooltip
label="标准编号"
width="150"
align="center"
prop="standNumShow"
/>
<el-table-column
show-overflow-tooltip
label="标准名称"
prop="standName"
align="center"
min-width="150"
/>
<el-table-column
show-overflow-tooltip
label="原语言"
prop="sourceLanguage"
align="center"
min-width="100"
/>
<el-table-column
show-overflow-tooltip
label="目标语言"
prop="targetLanguage"
align="center"
min-width="100"
/>
<el-table-column
show-overflow-tooltip
label="理由"
prop="reason"
align="center"
min-width="300"
/>
<el-table-column label="操作" align="center" width="200" fixed="right">
<template slot-scope="scope">
<div class="table-operate-btn" @click="toView(scope.row)">查看</div>
<div class="table-operate-btn" @click="edit(scope.row)">编辑</div>
<div class="table-operate-btn" @click="batchDelete(scope.row.id)">删除</div>
</template>
</el-table-column>
</el-table>
<!--分页-->
<pagination
style="position: relative;"
:page="page"
:total="total"
@pageChange="pageChange"
@pageSizeChange="pageSizeChange"
/>
</div>
<span slot="footer" class="dialog-footer">
<el-button size="mini" type="primary" @click="cancel">取消</el-button>
<el-button size="mini" type="primary" @click="submitData(1)">提交</el-button>
</span>
<loading :loading="tableLoading">数据加载中</loading>
<addModal ref="addModalRef" @updateList="getList" />
<detailModal ref="detailModalRef" />
</el-dialog>
</template>
<script>
import addModal from './addModal';
import detailModal from './detailModal';
export default {
name: 'StandardTranslationAcquisitionRequestModal',
components: {
addModal,
detailModal
},
data () {
return {
visible: false,
tableLoading: false,
StandardApplyForEO: [],
selectedList: [],
page: 1,
headers: {
token: JSON.parse(localStorage.getItem('userInfo')).token
},
pageSize: this.$store.getters.userInfo.configContent,
total: 0,
fileList: '',
url: {
deleteUrl: '/lawss/standardApplyFor/batchUpdateValidFlag',
getList: '/lawss/standardApplyFor/queryStagingByPage',
importData: '/lawss/standardApplyFor/importData'
}
}
},
methods: {
showModal () {
this.visible = true
this.StandardApplyForEO = []
this.page = 1
this.getList()
},
handleClose () {
this.visible = false
this.$emit('updateIndexList')
},
toView (item) {
this.$refs.detailModalRef.showModal(item)
},
edit (item) {
this.$refs.addModalRef.showModal(item)
},
importSuccess (response) {
if (response.ok) {
this.$message({
message: response.data,
dangerouslyUseHTMLString: true,
type: 'success'
})
}else {
this.$message({
message: response.message,
dangerouslyUseHTMLString: true,
type: 'warning'
})
}
this.getList()
},
importError () {
this.$message.error('操作失败')
},
templateDownload () {
window.open('/api/lawss/standardApplyFor/exportTemplateFile?fileName=标准/译文获取申请模板.xlsx')
},
getList () {
this.tableLoading = true
this.$http.get(this.url.getList, { page: this.page, pageSize: this.pageSize }, {
_this: this,
}, res => {
if (res.ok) {
this.StandardApplyForEO = res.data.records
this.total = res.data.total
}else {
this.StandardApplyForEO = []
this.total = 0
}
this.tableLoading = false
})
},
batchDelete (id) {
let ids = ''
let tipsText = ''
if (id) {
ids = id
tipsText = '确认删除这条数据?'
} else {
if (this.selectedList && this.selectedList.length > 0) {
ids = this.selectedList.join(',')
tipsText = '确认删除这些数据?'
}else{
this.$message.warning('请至少勾选一条数据')
return
}
}
this.$confirm(tipsText, '提示', {
confirmButtonText: '确定',
confirmButtonClass: 'common-button-primary',
cancelButtonText: '取消',
type: 'warning',
roundButton: false
}).then(() => {
this.$http.postData(this.url.deleteUrl, { ids: ids }, { _this: this }, res => {
if (res.ok) {
this.$message.success('操作成功')
this.getList()
this.selectedList = []
}else{
this.$message.warning(res.message)
}
})
}).catch(() => {
// 取消删除,清空选择
this.$refs.selections.clearSelection()
})
},
submitData () {
if (this.selectedList && this.selectedList.length > 0) {
const query = {
status: 'pendingApproval',
ids: this.selectedList.join(',')
}
this.$http.postData('/lawss/standardApplyFor/batchUpdateStatus', query, { _this: this }, res => {
if (res.ok) {
this.$message.success('操作成功')
this.getList()
}else{
this.$message.warning(res.message)
}
})
} else {
this.$message.warning('请至少勾选一条数据')
}
},
handleSelectionChange (value) {
const ids = []
value.forEach(item => {
ids.push(item.id)
})
this.selectedList = [ ...ids ]
},
standardTranslationAcquisitionRequestAdd () {
this.$refs.addModalRef.addModel()
},
pageChange (page) {
this.page = page
this.getList()
},
pageSizeChange (pageSize) {
this.pageSize = pageSize
this.getList()
},
cancel () {
this.visible = false
this.$emit('updateIndexList')
},
}
}
</script>
<style scoped>
.operate {
display: flex;
justify-content: right;
margin-bottom: 5px;
}
.table-operate-btn {
display: inline-block;
cursor: pointer;
color: #409EFF;
margin: 0 5px;
}
/deep/.el-input.is-disabled .el-input__inner{
background-color: #fff;
color: #606266;
}
</style>
@@ -0,0 +1,619 @@
<template>
<!--标准/译文获取申请管理-->
<div class="standardTranslationAcquisitionRequest">
<div class="search-area">
<el-form :inline="true" :model="StandardApplyForEOPage">
<el-form-item class="el-form-item search-item" label="类型">
<el-select
v-model="StandardApplyForEOPage.type"
:placeholder="'请选择类型'"
clearable
>
<el-option
v-for="opt in typeList"
:key="opt.value"
:value="opt.value === undefined ? '' :opt.value"
:label="opt.label"
>
{{ opt.label }}
</el-option>
</el-select>
</el-form-item>
<el-form-item class="el-form-item search-item" label="申请单位">
<el-input
v-model="applyForUnitName"
:config="zrbmOptions"
clearable
placeholder="请选择申请单位"
readonly
@click.native="choiceZRBM('dep', '选择申请单位', StandardApplyForEOPage.applyForUnitIds)"
/>
</el-form-item>
<el-form-item class="el-form-item search-item" label="申请人">
<el-input v-model="applyForUserName" placeholder="选择请选择申请人" @click.native="choiceWSSMR('wssmr', '请选择申请人', StandardApplyForEOPage.applyForUserIds)" />
</el-form-item>
<el-form-item class="el-form-item search-item" label="需求时间">
<el-input v-model="StandardApplyForEOPage.requiredTime" clearable placeholder="请输入需求时间" />
</el-form-item>
<el-form-item class="el-form-item search-item" label="申请状态">
<el-select
v-model="StandardApplyForEOPage.status"
:placeholder="'请选择申请状态'"
clearable
>
<el-option
v-for="opt in statusList"
:key="opt.value"
:value="opt.value === undefined ? '' :opt.value"
:label="opt.label"
>
{{ opt.label }}
</el-option>
</el-select>
</el-form-item>
<el-form-item>
<el-button size="mini" type="primary" @click="searchData">查询</el-button>
<el-button size="mini" @click="clearSerach">清空</el-button>
</el-form-item>
</el-form>
</div>
<div class="table-container">
<div class="operate-options">
<div>
<el-button v-btn-permission="'34ea84f51eb01a166b7acfe4f7b02c8d'" size="mini" type="danger" @click="batchOverrule(selectedList)">批量驳回</el-button>
<el-button v-btn-permission="'a8218ff15358a5265e5571e49acf1f4e'" size="mini" type="primary" @click="batchPass(selectedList)">批量通过</el-button>
<el-button v-btn-permission="'b899c22e27baa561b8c2ecb0f35d7302'" size="mini" @click="exportList">列表导出</el-button>
</div>
<div>
<el-button v-btn-permission="'33809866b2fda3f52058299b5e2584c3'" size="mini" type="primary" @click="standardsAndTranslationRequestShowModal">标准/译文获取申请</el-button>
</div>
</div>
<el-table
ref="selections"
v-loading="tableLoading"
tooltip-effect="dark"
style="width: 100%; flex: auto;"
class="drag-table"
row-key="id"
border
:data="StandardApplyForEO"
:header-cell-style="{background: '#e8e8e8', color: '#333333', fontSize: '16px', fontWeight: 'bold', height: '48px'}"
@selection-change="handleSelectionChange"
>
<el-table-column
type="selection"
width="55"
/>
<el-table-column
type="index"
fixed="left"
width="55"
label="序号"
align="center"
/>
<el-table-column
show-overflow-tooltip
label="类型"
prop="typeShow"
align="center"
min-width="100"
/>
<el-table-column
show-overflow-tooltip
label="标准编号"
width="150"
align="center"
prop="standNumShow"
/>
<el-table-column
show-overflow-tooltip
label="标准名称"
prop="standName"
align="center"
min-width="150"
/>
<el-table-column
show-overflow-tooltip
label="原语言"
prop="sourceLanguage"
align="center"
min-width="85"
/>
<el-table-column
show-overflow-tooltip
label="目标语言"
prop="targetLanguage"
align="center"
min-width="85"
/>
<el-table-column
show-overflow-tooltip
label="理由"
prop="reason"
align="center"
min-width="300"
/>
<el-table-column
show-overflow-tooltip
label="申请状态"
prop="statusShow"
align="center"
min-width="100"
/>
<el-table-column label="操作" align="center" width="200" fixed="right">
<template slot-scope="scope">
<div class="table-operate-btn" @click="toView(scope.row)">查看</div>
<div v-show="scope.row.status ==='pendingApproval'" v-btn-permission="'3bc041e58bcb4b0510bcc1aad0b9ce89'" class="table-operate-btn" @click="batchPass([scope.row.id])">通过</div>
<div v-show="scope.row.status ==='pendingApproval'" v-btn-permission="'92adace8c9a703b3b2472f684808db98'" class="table-operate-btn" @click="batchOverrule([scope.row.id])">驳回</div>
<div
v-if="account === scope.row.createBy"
v-show="scope.row.status ==='pendingApproval'"
v-btn-permission="'08d4e36d7580c108f3a4ee8a66bbe04e'"
class="table-operate-btn"
@click="ResubmitOrWithdraw (scope.row.id,'draft')"
>
撤回
</div>
<div
v-if="account === scope.row.createBy"
v-show="scope.row.status === 'refuse' || scope.row.status === 'draft'"
v-btn-permission="'a2a193e87244b42fb2f989a1a9b40330'"
class="table-operate-btn"
@click="edit(scope.row)"
>
编辑
</div>
<div
v-if="account === scope.row.createBy"
v-show="scope.row.status === 'refuse' || scope.row.status === 'draft'"
v-btn-permission="'c3944c3c309ba5bc5d11b6b5a2773454'"
class="table-operate-btn"
@click="ResubmitOrWithdraw (scope.row.id,'pendingApproval')"
>
重新提交
</div>
<div
v-if="account === scope.row.createBy"
v-show="scope.row.status === 'refuse' || scope.row.status === 'draft'"
class="table-operate-btn"
@click="batchDelete (scope.row.id)"
>
删除
</div>
</template>
</el-table-column>
</el-table>
<pagination
style="position: relative;"
:page="StandardApplyForEOPage.page"
:total="total"
@pageChange="pageChange"
@pageSizeChange="pageSizeChange"
/>
</div>
<standardsAndTranslationModal ref="standardsAndTranslationModalRef" @updateIndexList="getList" />
<detailModal ref="detailModalRef" />
<addModal ref="addModalRef" @updateList="getList" />
<exportDialog ref="exportDialogRef" @exportData="exportName" />
<Role-tree
:is-title="drawerTitle"
:is-visible.sync="modalShowRoleFlag"
:nodeList="nodeList"
@checkedRole="checkedRole"
/>
<Mechanism-tree
:checkBox="true"
:is-title="choiceTitle"
:is-visible.sync="modalShowDepFlag"
:nodeList="nodeListDep"
@checkedRole="drawerCheckDep"
/>
</div>
</template>
<script>
import standardsAndTranslationModal from './components/standardTranslationAcquisitionRequestModal';
import detailModal from './components/detailModal';
import addModal from './components/addModal';
import exportDialog from './components/exportDialog';
import axios from '@/common/axiosV2'
export default {
name: 'StandardTranslationAcquisitionRequest',
components: {
standardsAndTranslationModal,
detailModal,
exportDialog,
addModal
},
data () {
return {
applyForUnitName: '',
modalShowDepFlag: false,
choiceTitle: '', // 人员选择
zrbmOptions: {
attrName: '责任部门',
options: []
},
tableLoading: false,
selectedTag: true,
total: 0,
StandardApplyForEOPage: {
page: 1,
pageSize: this.$store.getters.userInfo.configContent,
},
applyForUserName: '',
StandardApplyForEO: [],
selectedList: [],
url: {
getList: '/lawss/standardApplyFor/queryByPage',
updateState: '/lawss/standardApplyFor/batchUpdateStatus',
exportData: '/lawss/standardApplyFor/exportStandardApplyForEOExcel',
deleteUrl: '/lawss/standardApplyFor/batchUpdateValidFlag',
},
typeList: [],
applicantUnitList: [],
statusList: [
{
label: '通过',
value: 'pass',
},
{
label: '驳回',
value: 'refuse',
},
{
label: '待审批',
value: 'pendingApproval',
},
{
label: '草稿',
value: 'draft',
}
],
nodeList: [],
userType: '',
drawerTitle: '',
modalShowRoleFlag: false,
account: '',
nodeListDep: []
}
},
mounted () {
this.account = JSON.parse(window.localStorage.getItem('userInfo')).account
if (this.$route.query && this.$route.query.tag === 'fromSearchCenter') {
this.standardsAndTranslationRequestShowModal()
this.$router.replace({ query: { ...this.$route.query, tag: undefined } })
}
this.getList()
this.getDicTypeListCode()
},
methods: {
batchDelete (id) {
let ids = ''
let tipsText = ''
if (id) {
ids = id
tipsText = '确认删除这条数据?'
}
this.$confirm(tipsText, '提示', {
confirmButtonText: '确定',
confirmButtonClass: 'common-button-primary',
cancelButtonText: '取消',
type: 'warning',
roundButton: false
}).then(() => {
this.$http.postData(this.url.deleteUrl, { ids: ids }, { _this: this }, res => {
if (res.ok) {
this.$message.success('操作成功')
this.getList()
}else{
this.$message.warning(res.message)
}
})
})
},
drawerCheckDep (data) {
let idList = ''
let nameList = ''
data.forEach(item => {
if (nameList.length > 0) {
nameList += ','
idList += ','
}
idList += item.id
nameList += item.name
})
this.StandardApplyForEOPage.applyForUnitIds = idList;
this.applyForUnitName = nameList;
},
choiceZRBM (type, title, id = '') {
this.nodeListDep = []
if (id) {
this.$set(this, 'nodeListDep', id.split(','))
}
this.choiceTitle = title
this.modalShowDepFlag = true
},
ResubmitOrWithdraw (id, status) {
const query = {
status: status ? status : '',
ids: id
}
this.$http.postData('/lawss/standardApplyFor/batchUpdateStatus', query, { _this: this }, res => {
if (res.ok) {
this.$message.success('操作成功')
this.getList()
}else{
this.$message.warning(res.message)
}
})
},
edit (item) {
this.$refs.addModalRef.showModal(item)
},
checkedRole (data) {
let idList = ''
let nameList = ''
data.forEach(item => {
if (nameList.length > 0) {
nameList += ','
idList += ','
}
idList += item.id
nameList += item.name
})
this.StandardApplyForEOPage.applyForUserIds = idList
this.applyForUserName = nameList
},
choiceWSSMR (type, title, id) {
this.nodeList = []
if(id) {
const nameId = id.split(',')
let idList = []
nameId.forEach(item => {
idList.push(item)
})
idList = idList.join(',')
this.nodeList.push(idList)
}
this.userType = type
this.drawerTitle = title
this.modalShowRoleFlag = true
},
getDicTypeListCode () {
this.$http.get('sys/dictype/getDicTypeListCode', '', {
_this: this
}, res => {
this.typeList = res.data.BZJYWTYPE // 标准类别
this.applicantUnitList = res.data.GKGLBM // 归口管理部门
}, e => {
})
},
searchData () {
this.StandardApplyForEOPage.page = 1
this.getList()
},
clearSerach () {
this.applyForUnitName = ''
this.applyForUserName = ''
this.StandardApplyForEOPage = {
page: 1,
pageSize: this.$store.getters.userInfo.configContent
}
this.getList()
},
getList () {
this.tableLoading = true
this.$http.get(this.url.getList, {
...this.StandardApplyForEOPage
}, {
_this: this
}, res => {
if (res.ok) {
this.StandardApplyForEO = res.data.records
this.total = res.data.total
}else {
this.StandardApplyForEO = []
this.total = 0
}
this.selectedList = []
this.$refs.selections.clearSelection()
this.tableLoading = false
this.$http.get('/lawss/standardApplyFor/queryPendingApprovalCount', '', { _this: this }, res => {
if (res.ok) {
this.$store.commit('SET_STANDARD_TRANSLATION_TODO', res.data)
}
})
})
},
batchPass (id) {
if (id.length === 0) {
this.$message({
message: '请选择至少一条数据',
type: 'warning',
offset: 20
})
return
}
if (!this.selectedTag) {
this.$message({
message: '只能选择待审批的数据,请重新选择',
type: 'warning',
offset: 20
})
return
}
const ids = id.join(',')
this.$confirm('确定通过?', '提示', {
confirmButtonText: '确定',
confirmButtonClass: 'common-button-primary',
cancelButtonText: '取消',
type: 'warning',
roundButton: false
}).then(() => {
this.$http.postData(this.url.updateState, { status: 'pass', ids: ids }, { _this: this }, res => {
if (res.ok) {
this.$message.success('操作成功')
this.getList()
} else {
this.$message.warning(res.message)
}
})
}).catch(() => {
// 取消删除,清空选择
this.$refs.selections.clearSelection()
})
},
batchOverrule (id) {
if (id.length === 0) {
this.$message({
message: '请选择至少一条数据',
type: 'warning',
offset: 20
})
return
}
if (!this.selectedTag) {
this.$message({
message: '只能选择待审批的数据,请重新选择',
type: 'warning',
offset: 20
})
return
}
const ids = id.join(',')
this.$prompt('请输入驳回原因', '提示', {
confirmButtonText: '确定',
confirmButtonClass: 'common-button-primary',
cancelButtonText: '取消',
type: 'warning',
roundButton: false,
inputValidator: (value) => {
if (value === null || value === undefined) {
return '驳回原因不能为空'
} else if (value.length > 500) {
return '驳回原因不能超过500个字符'
} else if (value.length === 0) {
return '驳回原因不能为空'
} else {
return true
}
},
inputErrorMessage: ''
}).then(({ value }) => {
this.$http.postData(this.url.updateState, { status: 'refuse', refuseCause: value, ids }, { _this: this }, res => {
if (res.ok) {
this.$message.success('操作成功')
this.getList()
} else {
this.$message.warning(res.message)
}
})
}).catch(() => {
// 取消删除,清空选择
this.$refs.selections.clearSelection()
})
},
exportName (name) {
const params = {
...this.StandardApplyForEOPage,
exportFileName: name ? name : '标准及译文获取申请',
ids: this.selectedList.length > 0 ? this.selectedList.join(',') : '',
};
axios({
url: '/api/lawss/standardApplyFor/exportStandardApplyForEOExcel',
method: 'get',
responseType: 'blob',
params: params
}).then(res => {
const blob = new Blob([ res ], { type: 'application/vnd.ms-excel' });
// 浏览器兼容,Google和火狐支持a标签的downloadIE不支持
if (window.navigator && window.navigator.msSaveBlob) {
// IE浏览器、微软浏览器
/* 经过测试,微软浏览器Microsoft Edge下载文件时必须要重命名文件才可以打开,
IE可不重命名,以防万一,所以都写上比较好 */
window.navigator.msSaveBlob(blob, name + '.xlsx');
} else {
// 其他浏览器
const link = document.createElement('a'); // 创建a标签
link.style.display = 'none';
const objectUrl = URL.createObjectURL(blob);
link.href = objectUrl;
link.download = name ? name : '标准及译文获取申请' + '.xlsx';
link.click();
URL.revokeObjectURL(objectUrl);
}
})
},
exportList () {
this.$refs.exportDialogRef.openModel()
},
toView (id) {
this.$refs.detailModalRef.showModal(id)
},
standardsAndTranslationRequestShowModal () {
this.$refs.standardsAndTranslationModalRef.showModal()
},
pageChange (page) {
this.StandardApplyForEOPage.page = page
this.getList()
},
pageSizeChange (pageSize) {
this.StandardApplyForEOPage.pageSize = pageSize
this.getList()
},
handleSelectionChange (value) {
const ids = []
value.forEach(item => {
ids.push(item.id)
this.selectedTag = true
if (item.status !== 'pendingApproval') {
this.selectedTag = false
}
})
this.selectedList = [ ...ids ]
}
},
}
</script>
<style scoped lang="less">
.standardTranslationAcquisitionRequest {
height: 100%;
display: flex;
flex-direction: column;
.table-container {
background-color: white;
padding: 0 10px;
flex-grow: 1;
display: flex;
flex-direction: column;
.drag-table {
flex-grow: 1;
}
.operate-options {
display: flex;
align-items: center;
justify-content: space-between;
padding-bottom: 10px;
}
}
.table-operate-btn {
display: inline-block;
cursor: pointer;
color: #409EFF;
margin: 0 5px;
}
.stand-date-range-picker {
/deep/ .el-range-separator {
width: auto;
}
}
}
</style>
@@ -81,6 +81,7 @@
<div>首页</div>
</router-link>
</div>
<el-button @click="toStandardTranslationAcquisitionRequest" style="margin-left: auto" type="primary" size="mini">标准/译文获取申请</el-button>
</div>
<div class="main">
<loading :loading="loading">数据获取中</loading>
@@ -236,6 +237,15 @@ export default {
this.getData()
},
methods: {
toStandardTranslationAcquisitionRequest () {
let url = this.$router.resolve({
name: 'standardTranslationAcquisitionRequest',
query: {
tag: 'fromSearchCenter'
}
})
window.open(url.href, '_blank')
},
onSearch () {
this.searchForm.page = 1
this.getData()
+10
View File
@@ -4112,6 +4112,16 @@ const routes = [
menuId: ''
}
},
{
path: '/standardTranslationAcquisitionRequest',
name: 'standardTranslationAcquisitionRequest',
component: () => import('@/pages/regulatoryRepository/standardTranslationAcquisitionRequest'),
meta: {
requireAuth: true,
title: '标准/译文获取申请管理',
menuId: 'd7ad73e98162894d020aa993c08a4532'
}
},
// 本地产品/项目库详情页
{
path: '/localProductDetail',
+3
View File
@@ -182,5 +182,8 @@ export default {
},
refreshFlag: state => {
return state.refreshFlag
},
getStandardTranslationTodo: state => {
return state.standardTranslationTodo
}
}
+3
View File
@@ -302,5 +302,8 @@ export default {
try {
localStorage.setItem('refreshFlag', flag)
} catch (e) {}
},
SET_STANDARD_TRANSLATION_TODO (state, value) {
state.standardTranslationTodo = value
}
}
+3 -1
View File
@@ -34,6 +34,7 @@ let rukuBaseInfo = '' // 入库流程基础表单信息(后几步展示用)
let accessStandRegRows = '' // 标准法规清单编辑
let accessStandRegTabName = '' // 标准法规清单页面当前页签
let refreshFlag = '' // 监听其他页面刷新
let standardTranslationTodo = 0 // 标准/译文获取申请管理待办标记
try {
if (localStorage.theme) { defaultTheme = localStorage.theme }
if (localStorage.token) { defaultToken = localStorage.token }
@@ -102,5 +103,6 @@ export default {
rukuBaseInfo,
accessStandRegRows,
accessStandRegTabName,
refreshFlag
refreshFlag,
standardTranslationTodo
}