update 法规采购流程

This commit is contained in:
赵霄
2023-11-20 16:21:30 +08:00
parent 813fd009a6
commit 2eee33a077
5 changed files with 331 additions and 45 deletions
+25 -1
View File
@@ -180,6 +180,22 @@ const agreeConsultationProcess = (params) => postAction('/process/fb/processFbSt
// 驳回 // 驳回
const rejectConsultationProcess = (params) => postAction('/process/fb/processFbStandardConsultation/reject', params) const rejectConsultationProcess = (params) => postAction('/process/fb/processFbStandardConsultation/reject', params)
/*法规采购流程*/
// 获取流程信息
const queryProcurementProcessInfo = (params) => getAction('/process/fb/processFbStandardPurchase/queryProcessInfoVO', params)
// 保存
const saveProcurementProcess = (params) => postAction('/process/fb/processFbStandardPurchase/saveToDraft', params)
// 发起
const initProcurementProcess = (params) => postAction('/process/fb/processFbStandardPurchase/startProcess', params)
// 同意
const agreeProcurementProcess = (params) => postAction('/process/fb/processFbStandardPurchase/agree', params)
// 驳回
const rejectProcurementProcess = (params) => postAction('/process/fb/processFbStandardPurchase/reject', params)
// 转办
const transferProcurementProcess = (params) => postAction('/process/fb/processFbStandardPurchase/transfer', params)
// 抄送
const carbonCopyProcurementProcess = (params) => postAction('/process/fb/processFbStandardPurchase/carbonCopy', params)
export { export {
getProcessNodeList, getProcessNodeList,
@@ -270,5 +286,13 @@ export {
submitConsultationProcess, submitConsultationProcess,
transferConsultationProcess, transferConsultationProcess,
agreeConsultationProcess, agreeConsultationProcess,
rejectConsultationProcess rejectConsultationProcess,
queryProcurementProcessInfo,
saveProcurementProcess,
initProcurementProcess,
agreeProcurementProcess,
rejectProcurementProcess,
transferProcurementProcess,
carbonCopyProcurementProcess
} }
+5
View File
@@ -350,5 +350,10 @@ module.exports = {
meetingName: '会议名称', meetingName: '会议名称',
attendanceDate: '参会日期', attendanceDate: '参会日期',
relevantData: '相关材料' relevantData: '相关材料'
},
// 法规采购流程
standardProcurementProcess: {
reasonForPurchase: '采购理由',
addAtLeastOne: '请添加至少一条数据'
} }
} }
+1 -1
View File
@@ -269,5 +269,5 @@ export const ProcurementProcessNodes = new EsEnums({
sponsorLeaderApproval: { text: '发起人主管级领导审批', value: 'Activity_1fr1x5i', btn: ['return', 'save', 'agree', 'reject'] }, sponsorLeaderApproval: { text: '发起人主管级领导审批', value: 'Activity_1fr1x5i', btn: ['return', 'save', 'agree', 'reject'] },
standardLeaderApproval: { text: '标准化主管级领导审批', value: 'Activity_06jy4oo', btn: ['return', 'save', 'agree', 'reject'] }, standardLeaderApproval: { text: '标准化主管级领导审批', value: 'Activity_06jy4oo', btn: ['return', 'save', 'agree', 'reject'] },
standardSuperiorLeaderApproval: { text: '标准化主管级上一级领导审批', value: 'Activity_1u5337a', btn: ['return', 'save', 'agree', 'reject'] }, standardSuperiorLeaderApproval: { text: '标准化主管级上一级领导审批', value: 'Activity_1u5337a', btn: ['return', 'save', 'agree', 'reject'] },
regulatoryEngineerConfirmation: { text: '法规工程师确认', value: 'Activity_1q01zfq', btn: ['return', 'save', 'agree', 'reject'] } regulatoryEngineerConfirmation: { text: '法规工程师确认', value: 'Activity_1q01zfq', btn: ['carbonCopy', 'submit'] }
}) })
@@ -39,7 +39,7 @@
format="YYYY-MM-DD" format="YYYY-MM-DD"
value-format="YYYY-MM-DD" value-format="YYYY-MM-DD"
v-decorator="['processDueDate']" v-decorator="['processDueDate']"
:disabled="disabled" :disabled="processInfoDisabled"
style="width: 100%" /> style="width: 100%" />
</a-form-item> </a-form-item>
</a-col> </a-col>
@@ -50,7 +50,7 @@
@change="event => event.target.value = event.target.value.trim()" @change="event => event.target.value = event.target.value.trim()"
:maxLength="500" :maxLength="500"
type="textarea" type="textarea"
:disabled="disabled" :disabled="processInfoDisabled"
v-decorator="['processDescription']" /> v-decorator="['processDescription']" />
</a-form-item> </a-form-item>
</a-form> </a-form>
@@ -72,9 +72,13 @@
:dataSource="dataSource" :dataSource="dataSource"
:pagination="false" :pagination="false"
:row-selection="{ selectedRowKeys: selectedRowKeys, onChange: onSelectChange }" :row-selection="{ selectedRowKeys: selectedRowKeys, onChange: onSelectChange }"
:loading="loading" :loading="loading">
:operation-list="operationList"
@operationClick="operationClick"> <template v-slot:action="{text, record, index}">
<a @click="handleEdit(record, index)">{{ $t('edit') }}</a>
<a-divider type="vertical" />
<a @click="handleDelete(index)">{{ $t('delete') }}</a>
</template>
</j-table> </j-table>
</div> </div>
@@ -112,6 +116,10 @@
<a-button type="primary" :loading="loading" ghost icon="arrow-up" v-if="btnList.includes('return')" @click="handleTurnTo"> <a-button type="primary" :loading="loading" ghost icon="arrow-up" v-if="btnList.includes('return')" @click="handleTurnTo">
{{ $t('turnTo') }} {{ $t('turnTo') }}
</a-button> </a-button>
<!--抄送-->
<a-button type="primary" :loading="loading" ghost icon="arrow-up" v-if="btnList.includes('return')" @click="handleCarbonCopy">
{{ $t('turnTo') }}
</a-button>
<!--保存 发起节点、审批节点都存在--> <!--保存 发起节点、审批节点都存在-->
<a-button type="primary" :loading="loading" ghost v-if="btnList.includes('save')" @click="handleSave"> <a-button type="primary" :loading="loading" ghost v-if="btnList.includes('save')" @click="handleSave">
<i class="iconfont icon-save" />{{ $t('preservation') }} <i class="iconfont icon-save" />{{ $t('preservation') }}
@@ -131,7 +139,9 @@
</div> </div>
<!--表格新增、编辑表单--> <!--表格新增、编辑表单-->
<table-form-modal ref="modalForm" /> <table-form-modal ref="modalForm" @ok="modalFormOk" />
<!--转办选人-->
<user-select-modal ref="userSelectModal" check-required :type="isTransfer ? 'radio' : 'checkbox'" @change="handleSelectedUser" />
</internal-detail-page> </internal-detail-page>
</template> </template>
@@ -143,21 +153,26 @@ import ProcessDetailList from '../../../components/ProcessDetailList'
import { ProcessKey, ProcurementProcessNodes } from '../../../enums/commonEnums' import { ProcessKey, ProcurementProcessNodes } from '../../../enums/commonEnums'
import JTable from '../../../components/jero/JTable' import JTable from '../../../components/jero/JTable'
import TableFormModal from './modules/TableFormModal' import TableFormModal from './modules/TableFormModal'
import {
queryProcurementProcessInfo,
saveProcurementProcess,
initProcurementProcess,
agreeProcurementProcess,
rejectProcurementProcess,
transferProcurementProcess,
carbonCopyProcurementProcess
} from '../../../api/workCenter'
import UserSelection from '../../../components/selection/UserSelection'
import UserSelectModal from '../../../components/selection/UserSelectModal'
export default { export default {
name: 'StandardProcurementProcess', name: 'StandardProcurementProcess',
components: { JTable, ProcessDetailList, PersonnelInfo, InternalDetailPage, TableFormModal }, components: { UserSelectModal, UserSelection, JTable, ProcessDetailList, PersonnelInfo, InternalDetailPage, TableFormModal },
mixins: [WorkCenterMixin], mixins: [WorkCenterMixin],
computed: {
pageTitle () {
return `${this.$t('flowCenter')}${this.$route.meta.title}`
}
},
data () { data () {
return { return {
loading: false, loading: false,
btnList: [], btnList: [],
disabled: false,
// 流程信息表单 // 流程信息表单
processInfoForm: this.$form.createForm(this), processInfoForm: this.$form.createForm(this),
processInfo: {}, processInfo: {},
@@ -211,19 +226,19 @@ export default {
scopedSlots: { customRender: 'action' } scopedSlots: { customRender: 'action' }
} }
], ],
operationList: [ dataSource: [],
{ // 编辑
text: this.$t('edit'),
clickEvent: 'handleEdit'
},
{ // 删除
text: this.$t('delete'),
clickEvent: 'handleDelete'
}
],
dataSource: [{ id: 1 }],
selectedRowKeys: [], selectedRowKeys: [],
currentNode: '' currentNode: '',
isTransfer: true // 是否转办
}
},
computed: {
pageTitle () {
return `${this.$t('flowCenter')}${this.$route.meta.title}`
},
// 流程信息部分禁用
processInfoDisabled () {
return !(this.currentNode === ProcurementProcessNodes.initiate.value && !this.$route.query.processInstanceId)
} }
}, },
created () { created () {
@@ -233,28 +248,209 @@ export default {
this.currentNode = ProcurementProcessNodes.initiate.value this.currentNode = ProcurementProcessNodes.initiate.value
} }
this.btnList = ProcurementProcessNodes.propertyOfValue('btn', this.currentNode) this.btnList = ProcurementProcessNodes.propertyOfValue('btn', this.currentNode)
this.getPersonInfoStructure(ProcessKey.LEGAL_PROCUREMENT.value) this.getPersonInfoStructure(ProcessKey.LEGAL_PROCUREMENT.value, () => {
this.initPersonInfoData(this.currentNode === ProcurementProcessNodes.initiate.value)
})
}, },
methods: { methods: {
onSelectChange (selectedRowKeys) { onSelectChange (selectedRowKeys) {
this.selectedRowKeys = selectedRowKeys this.selectedRowKeys = selectedRowKeys
}, },
/**
* 循环操作按钮的操作
* @param operation
* @param record
*/
operationClick (operation, record) {
this[operation.clickEvent](record)
},
handleAdd () { handleAdd () {
this.$refs.modalForm.add() this.$refs.modalForm.add()
}, },
batchDel () { batchDel () {
if (!this.selectedRowKeys || this.selectedRowKeys.length === 0) {
this.$message.warning(this.$t('selectARecord'))
return
}
const data = JSON.parse(JSON.stringify(this.dataSource))
this.dataSource = data.map((tt, index) => {
return this.selectedRowKeys.includes(index) ? null : tt
}).filter(tt => !!tt)
this.selectedRowKeys = []
}, },
handleEdit (record) { handleEdit (record, index) {
this.$refs.modalForm.edit(record) this.$refs.modalForm.edit(record, index)
},
handleDelete (index) {
this.$confirm({
title: this.$t('confirmDeletion'),
content: this.$t('areYouSure'),
ok: () => {
this.dataSource.splice(index, 1)
}
})
},
modalFormOk (record, index) {
if (index || index === 0) {
this.$set(this.dataSource, index, record)
} else {
this.dataSource.push(record)
}
},
dealFormData (isSave) {
let flag = true, formData = {}, processInfo = {}, approvalInfo = {}, businessInfo = [], userInfoMap = {}
if (isSave) {
processInfo = Object.assign(this.processInfo, this.processInfoForm.getFieldsValue())
businessInfo = this.dataSource
approvalInfo = Object.assign(this.approvalInfo, this.approvalInfoForm.getFieldsValue())
userInfoMap = this.$refs.personnelInfo.getDataObj()
const params = { ...processInfo, ...businessInfo, ...approvalInfo, ...userInfoMap }
if (!Object.values(params).some(tt => !!tt || (tt && tt.length > 0))) {
// 提示至少填写一项
this.$message.warning(this.$t('pleaseFillInAtLeastOneItem'))
flag = false
}
} else {
// 流程信息
this.processInfoForm.validateFields((errors, values) => {
if (!errors) {
processInfo = Object.assign(this.processInfo, values)
} else {
flag = false
}
})
// 业务信息
if (!this.dataSource || this.dataSource.length === 0) {
this.$message.warning(this.$t('workCenter.standardProcurementProcess.addAtLeastOne'))
flag = false
}
businessInfo = this.dataSource
// 审批信息
this.approvalInfoForm.validateFields((errors, values) => {
if (!errors) {
approvalInfo = Object.assign(this.approvalInfo, values)
} else {
flag = false
}
})
// 人员信息
const userInfo = this.$refs.personnelInfo.getDataObjVerify()
userInfoMap = userInfo ? userInfo : flag = false
}
formData = {
basicProcessInfoDTO: processInfo,
basicTaskInfoDTO: approvalInfo,
businessInfoDTO: businessInfo,
userInfoMap
}
return !flag ? flag : formData
},
/**
* 转办
*/
handleTurnTo () {
this.isTransfer = true
this.$refs.userSelectModal.open()
},
/**
* 抄送
*/
handleCarbonCopy () {
this.isTransfer = false
this.$refs.userSelectModal.open()
},
handleSelectedUser (userId) {
const params = {
taskId: this.$route.query.taskId,
userId
}
const func = this.isTransfer ? transferProcurementProcess : carbonCopyProcurementProcess
this.loading = true
func(params).then(res => {
if (res.success) {
this.$message.success(res.message)
this.goBack()
} else {
this.$message.warning(res.message)
}
}).finally(() => {
this.loading = false
})
},
/**
* 保存
*/
handleSave () {
const formData = this.dealFormData(true)
this.loading = true
saveProcurementProcess(formData).then(res => {
if (res.success) {
this.$message.success(res.message)
this.goBack()
} else {
this.$message.warning(res.message)
}
}).finally(() => {
this.loading = false
})
},
/**
* 提交
*/
handleSubmit () {
const formData = this.dealFormData()
if (!formData) {
return
}
let submitFunc
if (this.currentNode === ProcurementProcessNodes.initiate.value && !this.$route.query.processInstanceId) {
submitFunc = initProcurementProcess
} else {
submitFunc = agreeProcurementProcess
}
this.loading = true
submitFunc(formData).then(res => {
if (res.success) {
this.$message.success(res.message)
this.goBack()
} else {
this.$message.warning(res.message)
}
}).finally(() => {
this.loading = false
})
},
/**
* 同意
*/
handleAgree () {
const formData = this.dealFormData()
if (!formData) {
return
}
this.loading = true
agreeProcurementProcess(formData).then(res => {
if (res.success) {
this.$message.success(res.message)
this.goBack()
} else {
this.$message.warning(res.message)
}
}).finally(() => {
this.loading = false
})
},
/**
* 驳回
*/
handleReject () {
const formData = this.dealFormData()
if (!formData) {
return
}
this.loading = true
rejectProcurementProcess(formData).then(res => {
if (res.success) {
this.$message.success(res.message)
this.goBack()
} else {
this.$message.warning(res.message)
}
}).finally(() => {
this.loading = false
})
} }
} }
} }
@@ -9,13 +9,41 @@
@ok="handleOk" @ok="handleOk"
@cancel="handleCancel"> @cancel="handleCancel">
<a-spin :spinning="confirmLoading"> <a-spin :spinning="confirmLoading">
<a-form :form="form">
<!--标准编号-->
<a-form-item :labelCol="labelCol" :wrapperCol="wrapperCol" :label="$t('standardNumber')">
<standard-selection :placeholder="$t('pleaseSelect') + $t('standardNumber')"
v-decorator="['standardNumber', validatorRules.standardNumber]"
type="radio"
@nameChange="handleStandardChange" />
</a-form-item>
<!--标准名称-->
<a-form-item :labelCol="labelCol" :wrapperCol="wrapperCol" :label="$t('standardName')">
<a-input v-decorator="['standardName', validatorRules.standardName]"
:maxLength="50"
disabled
:placeholder="$t('pleaseEnter') + $t('standardName')"
@change="e => {e.target.value = (e.target.value + '').trim()}" />
</a-form-item>
<!--采购理由-->
<a-form-item :labelCol="labelCol" :wrapperCol="wrapperCol" :label="$t('workCenter.standardProcurementProcess.reasonForPurchase')">
<a-input v-decorator="['purchaseReason', validatorRules.purchaseReason]"
:maxLength="500"
type="textarea"
:placeholder="$t('pleaseEnter') + $t('workCenter.standardProcurementProcess.reasonForPurchase')"
@change="e => {e.target.value = (e.target.value + '').trim()}" />
</a-form-item>
</a-form>
</a-spin> </a-spin>
</j-modal> </j-modal>
</template> </template>
<script> <script>
import StandardSelection from '../../../../components/selection/StandardSelection'
export default { export default {
name: 'TableFormModal', name: 'TableFormModal',
components: { StandardSelection },
data () { data () {
return { return {
title: this.$t('operation'), title: this.$t('operation'),
@@ -31,28 +59,61 @@ export default {
xs: { span: 24 }, xs: { span: 24 },
sm: { span: 16 } sm: { span: 16 }
}, },
model: {} model: {},
validatorRules: {
// 标准编号
standardNumber: {
rules: [{ required: true, message: this.$t('pleaseSelect') + this.$t('standardNumber') }],
validateTrigger: 'change'
},
// 标准名称
standardName: {
rules: [{ required: true, message: this.$t('pleaseEnter') + this.$t('standardName') }],
validateTrigger: 'blur'
},
// 采购理由
purchaseReason: {
rules: [{ required: true, message: this.$t('pleaseEnter') + this.$t('workCenter.standardProcurementProcess.reasonForPurchase') }],
validateTrigger: 'blur'
}
},
dataIndex: null
} }
}, },
methods: { methods: {
add () { add () {
this.title = this.$t('newlyAdded') this.title = this.$t('newlyAdded')
this.dataIndex = null
this.visible = true this.visible = true
}, },
edit (record) { edit (record, index) {
this.title = this.$t('edit') this.title = this.$t('edit')
this.dataIndex = index
this.visible = true this.visible = true
this.model = Object.assign({}, record)
this.$nextTick(() => {
this.form.setFieldsValue(this.model)
})
}, },
handleOk() { handleOk () {
this.form.validateFields((errors, values) => {
if (!errors) {
const formData = Object.assign(this.model, values)
this.$emit('ok', formData, this.dataIndex)
this.close()
}
})
}, },
handleCancel() { handleCancel () {
this.close() this.close()
}, },
close() { close () {
this.visible = false this.visible = false
this.form.resetFields() this.form.resetFields()
this.model = {} this.model = {}
},
handleStandardChange (name) {
this.form.setFieldsValue({ standardName: name })
} }
} }
} }