项目法规任务批量处理审批不固定

This commit is contained in:
范强强
2023-04-11 10:56:07 +08:00
parent 186188efb8
commit 5e90e750da
5 changed files with 523 additions and 2 deletions
+4 -1
View File
@@ -1423,7 +1423,7 @@ module.exports = {
confirmLaunchTask:'Confirm launch task ?',
conditionsNotMet:'Conditions not met',
onlyProcessStatusReturned:'Only the data whose process status is list to be checked and rejected by the responsible person can be returned',
onlyProcessReturned:'Only data with process status of list to be checked and rejected by responsible person can be initiated And the project interface person and responsible person cannot be blank',
onlyProcessReturned:'Only data with a process status of list to be verified and rejected by the responsible person can be initiated, and the delivery type, engineering interface person, responsible person, and deadline cannot be empty',
confirmToAcceptTheTask:'Confirm to accept the task ?',
confirmRejectTask:'Confirm Reject Task ?',
onlyDataStatusConfirmedSelected:'Only data with process status of task to be confirmed can be selected',
@@ -1767,4 +1767,7 @@ module.exports = {
andPendingSubmissionReviewReturned:'And the process status is result pending submission, review returned',
deliverablesFor:'Deliverables for',
dutyPersonRejected:'Duty Person Rejected',
theCurrentlySelectedDataContainsReviewed:'The currently selected data contains reviewed data. Are you sure to return it?',
reviewTheReasonForReturn:'Review the reason for return',
reasonForTaskRejection:'Reason for task rejection',
}
+5 -1
View File
@@ -1523,7 +1523,7 @@ module.exports = {
confirmLaunchTask:'确认发起任务?',
conditionsNotMet:'不满足条件',
onlyProcessStatusReturned:'只能退回流程状态为清单待校核和责任人拒绝的数据',
onlyProcessReturned:'只能发起流程状态为清单待校核和责任人拒绝的数据,并且工程接口人和责任人不能为空',
onlyProcessReturned:'只能发起流程状态为清单待校核和责任人拒绝的数据,并且交付物类型工程接口人责任人截止时间不能为空',
confirmToAcceptTheTask:'确认接受任务?',
confirmRejectTask:'确认拒绝任务?',
onlyDataStatusConfirmedSelected:'只能选择流程状态为任务待确认的数据',
@@ -1869,4 +1869,8 @@ module.exports = {
andPendingSubmissionReviewReturned:'并且流程状态为结果待提交审查退回',
deliverablesFor:'的交付结果',
dutyPersonRejected:'责任人拒绝',
theCurrentlySelectedDataContainsReviewed:'当前选择的数据中包含审查通过的数据确认退回吗',
reviewTheReasonForReturn:'审查退回原因',
reasonForTaskRejection:'任务拒绝原因',
}
@@ -0,0 +1,123 @@
<template>
<a-modal
:title="$t('addConfiguration')"
:width="600"
:visible="visible"
:confirm-loading="confirmLoading"
:maskClosable="false"
@ok="handleOk"
@cancel="handleCancel"
>
<a-form-model :model="formInline" class="formAdd" :rules="rules" ref="ruleForm">
<a-row :gutter="24">
<a-col :span="24">
<div class="box-title-text">
<div class="title-text">
<span class="Required">*</span>
<span class="title-text-text" :title="$t('configurationItem')">{{$t('configurationItem')}}</span>
</div>
<a-form-model-item class="itemModel" prop="configItem">
<a-input class="box-input"
v-model.trim="formInline.configItem"
:placeholder="$t('PleaseEnter')+$t('configurationItem')"/>
</a-form-model-item>
</div>
</a-col>
</a-row>
</a-form-model>
</a-modal>
</template>
<script>
export default {
name: 'addConfiguration',
data() {
return {
visible: false,
confirmLoading: false,
formInline: {},
ids: [],
rules: {
configItem: [
{
required: true,
message: this.$t('configurationItem') + this.$t('cannotEmpty'),
trigger: 'blur'
},
{
max: 100,
message: this.$t('configurationItem') + this.$t('cannotExceed') + 100 + this.$t('Characters'),
trigger: 'blur'
}
]
}
}
},
methods: {
getData(ids) {
this.visible = true
this.ids = ids
this.formInline = {}
this.$nextTick(() => {
this.$refs.ruleForm.clearValidate()
})
},
handleOk() {
this.$refs.ruleForm.validate(valid => {
if (valid) {
}
})
},
handleCancel() {
this.visible = false
}
}
}
</script>
<style scoped>
.box-title-text {
line-height: 1.4;
display: flex;
}
.title-text {
width: 104px;
text-align: right;
display: inline-block;
font-weight: 500;
font-size: 14px;
margin-right: 16px;
overflow: hidden;
text-overflow: ellipsis;
white-space: nowrap;
height: 42px;
line-height: 42px;
}
.box-input {
display: inline-block;
height: 38px;
width: 100%;
}
.itemModel {
width: calc(100% - 130px);
display: inline-block;
margin-top: 2px;
}
.title-text-text {
margin-top: 9px;
}
.formAdd {
margin-bottom: 40px;
}
.Required {
color: red;
margin-right: 4px;
}
</style>
@@ -0,0 +1,147 @@
<template>
<div>
<a-modal
:title="title"
:width="600"
:visible="visible"
:confirm-loading="confirmLoading"
:maskClosable="false"
@ok="handleOk"
@cancel="handleCancel"
>
<a-form-model :model="formInline" class="formAdd" :rules="rules"
ref="ruleForm">
<a-row :gutter="24">
<a-col :span="24">
<div class="box-title-text">
<div class="title-text">
<span class="Required">*</span>
<span class="title-text-text" :title="title">{{ title }}</span>
</div>
<a-form-model-item class="itemModel" :prop="'explanation'">
<a-textarea :placeholder="$t('pleaseEnter')+title"
v-model.trim="formInline.explanation"
:rows="4"/>
</a-form-model-item>
</div>
</a-col>
</a-row>
</a-form-model>
</a-modal>
</div>
</template>
<script>
export default {
name: 'reasonForReturn',
data() {
return {
visible: false,
confirmLoading: false,
formInline: {},
rules: {
explanation: [
{
max: 100,
message: this.$t('certifiedEngineer') + this.$t('cannotExceed') + 100 + this.$t('Characters'),
trigger: 'change'
}
]
},
value: '',
text: '',
ids: [],
notConditions: '',
data: '',
title: ''
}
},
mounted() {
},
methods: {
getData(value, text, ids, notConditions, data, title) {
this.value = value
this.text = text
this.ids = ids
this.notConditions = notConditions
this.data = data
this.title = title
this.visible = true
this.formInline = {}
this.confirmLoading = false
this.$nextTick(() => {
this.$refs.ruleForm.clearValidate()
this.rules = {
explanation: [
{
required: true,
message: title + this.$t('cannotEmpty'),
trigger: 'blur'
},
{
max: 300,
message: title + this.$t('cannotExceed') + 300 + this.$t('Characters'),
trigger: 'blur'
}
]
}
})
},
handleOk() {
this.$refs.ruleForm.validate(valid => {
if (valid) {
this.$emit('reasonForReturnForm', this.value, this.text, this.ids, this.notConditions, this.data)
this.confirmLoading = true
}
})
},
handleCancel() {
this.visible = false
}
}
}
</script>
<style scoped>
.box-title-text {
line-height: 1.4;
/*display: flex;*/
/*align-items: center;*/
}
.title-text {
width: 114px;
text-align: right;
display: inline-block;
font-weight: 500;
font-size: 14px;
margin-right: 16px;
overflow: hidden;
text-overflow: ellipsis;
white-space: nowrap;
height: 42px;
line-height: 48px;
}
.box-input {
display: inline-block;
height: 38px;
width: 100%;
}
.itemModel {
width: calc(100% - 130px);
display: inline-block;
margin-top: 2px;
margin-bottom: 14px;
}
.Required {
color: red;
margin-right: 4px;
}
.title-text-text {
margin-top: 9px;
}
</style>
@@ -0,0 +1,244 @@
<template>
<a-drawer
:title="$t('referenceDeliverables')"
:maskClosable="false"
:width="1000"
placement="right"
:closable="true"
@close="handleCancel"
:visible="visible"
style="height: 100%;overflow: auto;padding-bottom: 53px;">
<div style="margin-bottom: 60px">
<div class="table-page-search-wrapper">
<a-form layout="inline" @keyup.enter.native="searchQuery">
<a-row :gutter="24">
<a-col :md="12" :sm="8">
<div class="box-title-text">
<div class="title-text" :title="$t('entryName')">
<span>{{$t('entryName')}}</span>
</div>
<a-input class="box-input" :placeholder="$t('PleaseEnter')+$t('entryName')"
v-model="queryParam.projectName"></a-input>
</div>
</a-col>
<span style="float: right;overflow: hidden;margin-right: 11px" class="table-page-search-submitButtons">
<a-col :md="12" :sm="24">
<a-button class="box-button" @click="searchReset">{{$t('reset')}}</a-button>
<a-button class="box-button" style="margin-left: 8px" type="primary" @click="searchQuery">{{$t('query')}}</a-button>
</a-col>
</span>
</a-row>
</a-form>
</div>
<a-table
:columns="columns"
rowKey="id"
:scroll="{x: '100%',y:600}"
:data-source="dataList"
:pagination="false"
:row-selection="{ selectedRowKeys: selectedRowKeys, onChange: onSelectChange,columnTitle:' ' , type:'radio'}"
:loading="loading">
</a-table>
<div class="page" v-if="dataList.length > 0">
<a-pagination
:show-total="total => $t('total')+` ${total} `+$t('strip')"
show-quick-jumper
show-size-changer
:page-size.sync="pageSize"
:total="total"
:current="pageNo"
@change="onChange"
@showSizeChange="SizeChange"
/>
</div>
</div>
<div class="drawer-bootom-button">
<a-button @click="handleCancel" style="margin-right: 16px">{{$t('cancel')}}</a-button>
<a-button @click="handleSubmit" type="primary" :loading="confirmLoading">{{$t('determine')}}</a-button>
</div>
</a-drawer>
</template>
<script>
import { getAction, postAction } from '@/api/manage'
export default {
name: 'referenceDeliverablesList',
components: {},
props: ['url'],
data() {
return {
visible: false,
queryParam: {},
confirmLoading: false,
selectedRowKeys: [],
columns: [
{
title: this.$t('entryName'),
dataIndex: 'projectName',
align: 'left',
ellipsis: true,
width: 223
},
{
title: 'Studio',
dataIndex: 'studioEngineerName',
align: 'left',
ellipsis: true,
width: 223
}
],
dataList: [],
content: [],
loading: false,
pageNo: 1,
pageSize: 10,
total: 0,
ids: '',
detailedWarningList: []
}
},
mounted() {
},
methods: {
transferModel(ids) {
this.visible = true
this.queryParam = {}
this.selectedRowKeys = []
this.replacePage()
},
searchQuery() {
this.pageNo = 1
this.replacePage()
},
searchReset() {
this.pageNo = 1
this.queryParam = {}
this.replacePage()
},
onChange(page, pageSize) {
this.pageNo = page
this.replacePage()
},
SizeChange(page, pageSize) {
this.pageNo = 1
this.pageSize = pageSize
this.replacePage()
},
replacePage() {
let query = {
pageNo: this.pageNo,
pageSize: this.pageSize,
...this.queryParam
}
this.loading = true
postAction('project/projectLibraryBase/page', query).then((res) => {
if (res.success) {
this.dataList = res.result.records || []
this.total = res.result.total
this.loading = false
} else {
this.loading = false
}
})
},
onSelectChange(value) {
this.selectedRowKeys = value
},
handleCancel() {
this.visible = false
},
handleSubmit() {
if (this.selectedRowKeys && this.selectedRowKeys.length > 0) {
let selectedRowKeys = JSON.parse(JSON.stringify(this.selectedRowKeys))
if (selectedRowKeys.join(',') == this.$route.query.id) {
this.$message.warning(this.$t('theDeliverablesCannotReferencedPleaseReselect'))
return
}
this.confirmLoading = true
postAction('/project/projectCertificationInventoryEO/citeDeliverable', {
projectCertificationInventoryIds: this.ids,
projectLibraryId: this.$route.query.id,
citeProjectLibraryId: selectedRowKeys.join(',')
}).then((res) => {
if (res.success) {
this.confirmLoading = false
if (res.result) {
this.$message.warning(res.result)
} else {
this.$message.success(this.$t('OperationSuccessful'))
}
this.visible = false
this.$emit('referenceDeliverablesListForm')
} else {
if (res.result) {
this.$message.warning(res.result)
} else {
this.$message.warning(this.$t('operationFailed'))
}
this.confirmLoading = false
}
})
} else {
this.$message.warning(this.$t('selectLeastOne'))
}
}
}
}
</script>
<style scoped>
.page {
text-align: right;
margin-top: 20px;
}
.drawer-bootom-button {
position: absolute;
bottom: 0;
z-index: 100;
width: 100%;
border-top: 1px solid #e8e8e8;
padding: 10px 16px;
text-align: right;
left: 0;
background: #fff;
border-radius: 0 0 2px 2px;
}
.box-title-text {
line-height: 1.4;
display: flex;
align-items: center;
margin-bottom: 10px;
}
.title-text {
width: 20%;
min-width: 110px;
color: #000F16;
display: inline-block;
font-weight: 500;
font-size: 14px;
margin-right: 16px;
margin-top: 3px;
text-align: right;
white-space: nowrap;
overflow: hidden;
text-overflow: ellipsis;
}
.box-input {
display: inline-block;
width: 70%;
height: 38px;
margin-top: 2px;
}
.box-button {
height: 38px;
}
</style>