|
|
|
<template>
|
|
|
|
|
|
|
|
<a-spin :spinning="confirmLoading">
|
|
|
|
<j-form-container :disabled="formDisabled">
|
|
|
|
<!-- 主表单区域 -->
|
|
|
|
<a-form :form="form" slot="detail">
|
|
|
|
<a-row>
|
|
|
|
<a-col :span="8" v-show="false">
|
|
|
|
<a-form-item label="ID" :labelCol="labelCol" :wrapperCol="wrapperCol">
|
|
|
|
<a-input v-decorator="['id']" placeholder="" style="width: 100%"/>
|
|
|
|
</a-form-item>
|
|
|
|
</a-col>
|
|
|
|
<a-col :span="8">
|
|
|
|
<a-form-item label="流程发起人" :labelCol="labelCol" :wrapperCol="wrapperCol">
|
|
|
|
<j-select-user-by-dep v-decorator="['createBy']"/>
|
|
|
|
</a-form-item>
|
|
|
|
</a-col>
|
|
|
|
<a-col :span="8">
|
|
|
|
<a-form-item label="流程发起公司" :labelCol="labelCol" :wrapperCol="wrapperCol">
|
|
|
|
<j-select-company v-decorator="['company']" multi/>
|
|
|
|
</a-form-item>
|
|
|
|
</a-col>
|
|
|
|
<a-col :span="8">
|
|
|
|
<a-form-item label="流程发起部门" :labelCol="labelCol" :wrapperCol="wrapperCol">
|
|
|
|
<j-select-depart @orgCodeTxt="orgCodeTxt" v-decorator="['sysOrgCode']" multi/>
|
|
|
|
</a-form-item>
|
|
|
|
</a-col>
|
|
|
|
<a-col :span="8">
|
|
|
|
<a-form-item label="流程发起时间" :labelCol="labelCol" :wrapperCol="wrapperCol">
|
|
|
|
<j-date placeholder="请选择流程发起时间" v-decorator="['createTime']" :trigger-change="true" :show-time="true"
|
|
|
|
date-format="YYYY-MM-DD HH:mm:ss" style="width: 100%"/>
|
|
|
|
</a-form-item>
|
|
|
|
</a-col>
|
|
|
|
<a-col :span="8">
|
|
|
|
<a-form-item label="物资类型" :labelCol="labelCol" :wrapperCol="wrapperCol">
|
|
|
|
<j-dict-select-tag type="list" v-decorator="['materialType']" :trigger-change="true" dictCode="material_type"
|
|
|
|
placeholder="请选择物资类型"/>
|
|
|
|
</a-form-item>
|
|
|
|
</a-col>
|
|
|
|
<a-col :span="8">
|
|
|
|
<a-form-item label="流程计划" :labelCol="labelCol" :wrapperCol="wrapperCol">
|
|
|
|
<j-dict-select-tag type="list" v-decorator="['processPlan']" :trigger-change="true" dictCode="process_plan"
|
|
|
|
placeholder="请选择流程计划"/>
|
|
|
|
</a-form-item>
|
|
|
|
</a-col>
|
|
|
|
<a-col :span="8">
|
|
|
|
<a-form-item label="需求时间" :labelCol="labelCol" :wrapperCol="wrapperCol">
|
|
|
|
<j-date placeholder="请选择需求时间" v-decorator="['needTime']" :trigger-change="true" style="width: 100%"/>
|
|
|
|
</a-form-item>
|
|
|
|
</a-col>
|
|
|
|
<a-col :span="8">
|
|
|
|
<a-form-item label="顺序号" :labelCol="labelCol" :wrapperCol="wrapperCol">
|
|
|
|
<a-input-number v-decorator="['orderNumber']" placeholder="请输入顺序号" style="width: 100%"/>
|
|
|
|
</a-form-item>
|
|
|
|
</a-col>
|
|
|
|
<a-col :span="8">
|
|
|
|
<a-form-item label="文件id" :labelCol="labelCol" :wrapperCol="wrapperCol">
|
|
|
|
<j-upload v-decorator="['fileId']" :trigger-change="true"></j-upload>
|
|
|
|
</a-form-item>
|
|
|
|
</a-col>
|
|
|
|
</a-row>
|
|
|
|
</a-form>
|
|
|
|
</j-form-container>
|
|
|
|
<!-- 子表单区域 -->
|
|
|
|
<a-tabs v-model="activeKey" @change="handleChangeTabs" ref="tabs">
|
|
|
|
<a-tab-pane tab="预算计划采购流程物料清单表" :key="refKeys[0]" :forceRender="true">
|
|
|
|
<j-editable-table
|
|
|
|
:ref="refKeys[0]"
|
|
|
|
:loading="processUdgetPlanMaterialTable.loading"
|
|
|
|
:columns="processUdgetPlanMaterialTable.columns"
|
|
|
|
:dataSource="processUdgetPlanMaterialTable.dataSource"
|
|
|
|
:maxHeight="300"
|
|
|
|
:disabled="formDisabled"
|
|
|
|
:rowNumber="true"
|
|
|
|
:rowSelection="true"
|
|
|
|
:actionButton="true"/>
|
|
|
|
</a-tab-pane>
|
|
|
|
</a-tabs>
|
|
|
|
<div class="div_process">
|
|
|
|
<a-form-item v-if="!disabled" :wrapperCol="{ span: 24 }" style="text-align: center">
|
|
|
|
<a-button type="primary" :disabled="disabled||btndisabled" @click="handleSubmit">保存</a-button>
|
|
|
|
<a-button style="margin-left: 8px" :disabled="disabled" @click="close">取消</a-button>
|
|
|
|
</a-form-item>
|
|
|
|
<a-form-item v-if="task" :wrapperCol="{ span: 24 }" style="text-align: center">
|
|
|
|
<a-button type="primary" @click="passTask">通过</a-button>
|
|
|
|
<a-button style="margin-left: 8px" @click="backTask">驳回</a-button>
|
|
|
|
</a-form-item>
|
|
|
|
</div>
|
|
|
|
</a-spin>
|
|
|
|
</template>
|
|
|
|
|
|
|
|
<script>
|
|
|
|
import { validateTables } from '../../../utils/JEditableTableUtil'
|
|
|
|
|
|
|
|
const VALIDATE_NO_PASSED = Symbol()
|
|
|
|
import pick from 'lodash.pick'
|
|
|
|
import { getAction,httpAction } from '@/api/manage'
|
|
|
|
import { FormTypes, getRefPromise,validateFormAndTables } from '@/utils/JEditableTableUtil'
|
|
|
|
import { JEditableTableMixin } from '@/mixins/JEditableTableMixin'
|
|
|
|
import JFormContainer from '@/components/jeecg/JFormContainer'
|
|
|
|
import JDate from '@/components/jeecg/JDate'
|
|
|
|
import JUpload from '@/components/jeecg/JUpload'
|
|
|
|
import JSelectCompany from '@/components/jeecgbiz/JSelectCompany'
|
|
|
|
import JSelectDepart from '@/components/jeecgbiz/JSelectDepart'
|
|
|
|
import JSelectUserByDep from '@/components/jeecgbiz/JSelectUserByDep'
|
|
|
|
import JDictSelectTag from '@/components/dict/JDictSelectTag'
|
|
|
|
export default {
|
|
|
|
name: 'ProcessUdgetPlanForm',
|
|
|
|
mixins: [JEditableTableMixin],
|
|
|
|
components: {
|
|
|
|
JFormContainer,
|
|
|
|
JDate,
|
|
|
|
JUpload,
|
|
|
|
JSelectDepart,
|
|
|
|
JSelectUserByDep,
|
|
|
|
JDictSelectTag,
|
|
|
|
JSelectCompany,
|
|
|
|
},
|
|
|
|
data() {
|
|
|
|
return {
|
|
|
|
labelCol: {
|
|
|
|
xs: { span: 24 },
|
|
|
|
sm: { span: 6 }
|
|
|
|
},
|
|
|
|
wrapperCol: {
|
|
|
|
xs: { span: 24 },
|
|
|
|
sm: { span: 18 }
|
|
|
|
},
|
|
|
|
labelCol2: {
|
|
|
|
xs: { span: 24 },
|
|
|
|
sm: { span: 3 }
|
|
|
|
},
|
|
|
|
wrapperCol2: {
|
|
|
|
xs: { span: 24 },
|
|
|
|
sm: { span: 20 }
|
|
|
|
},
|
|
|
|
// 新增时子表默认添加几行空数据
|
|
|
|
addDefaultRowNum: 1,
|
|
|
|
validatorRules: {},
|
|
|
|
refKeys: ['processUdgetPlanMaterial'],
|
|
|
|
tableKeys: ['processUdgetPlanMaterial'],
|
|
|
|
activeKey: 'processUdgetPlanMaterial',
|
|
|
|
// 预算计划采购流程物料清单表
|
|
|
|
processUdgetPlanMaterialTable: {
|
|
|
|
loading: false,
|
|
|
|
dataSource: [],
|
|
|
|
columns: [
|
|
|
|
{
|
|
|
|
title: '物料组',
|
|
|
|
key: 'materialGroup',
|
|
|
|
type: FormTypes.select,
|
|
|
|
dictCode: '',
|
|
|
|
width: '200px',
|
|
|
|
placeholder: '请输入${title}',
|
|
|
|
defaultValue: ''
|
|
|
|
},
|
|
|
|
{
|
|
|
|
title: '物料号',
|
|
|
|
key: 'materialNumber',
|
|
|
|
type: FormTypes.sel_search,
|
|
|
|
dictCode: '',
|
|
|
|
width: '200px',
|
|
|
|
placeholder: '请输入${title}',
|
|
|
|
defaultValue: ''
|
|
|
|
},
|
|
|
|
// {
|
|
|
|
// title: '物料描述',
|
|
|
|
// key: 'materialDescription',
|
|
|
|
// type: FormTypes.input,
|
|
|
|
// width: '200px',
|
|
|
|
// placeholder: '请输入${title}',
|
|
|
|
// defaultValue: ''
|
|
|
|
// },
|
|
|
|
// {
|
|
|
|
// title: '仓储地点_id',
|
|
|
|
// key: 'unitWasteWarehouseCodeId',
|
|
|
|
// type: FormTypes.input,
|
|
|
|
// width: '200px',
|
|
|
|
// placeholder: '请输入${title}',
|
|
|
|
// defaultValue: ''
|
|
|
|
// },
|
|
|
|
// {
|
|
|
|
// title: '生产时间',
|
|
|
|
// key: 'productionTime',
|
|
|
|
// type: FormTypes.date,
|
|
|
|
// width: '200px',
|
|
|
|
// placeholder: '请输入${title}',
|
|
|
|
// defaultValue: ''
|
|
|
|
// },
|
|
|
|
// {
|
|
|
|
// title: '保质期',
|
|
|
|
// key: 'expirationDate',
|
|
|
|
// type: FormTypes.date,
|
|
|
|
// width: '200px',
|
|
|
|
// placeholder: '请输入${title}',
|
|
|
|
// defaultValue: ''
|
|
|
|
// },
|
|
|
|
// {
|
|
|
|
// title: '是否到货',
|
|
|
|
// key: 'arrivalNotice',
|
|
|
|
// type: FormTypes.inputNumber,
|
|
|
|
// width: '200px',
|
|
|
|
// placeholder: '请输入${title}',
|
|
|
|
// defaultValue: ''
|
|
|
|
// },
|
|
|
|
// {
|
|
|
|
// title: '入库时间',
|
|
|
|
// key: 'storageTime',
|
|
|
|
// type: FormTypes.date,
|
|
|
|
// width: '200px',
|
|
|
|
// placeholder: '请输入${title}',
|
|
|
|
// defaultValue: ''
|
|
|
|
// },
|
|
|
|
// {
|
|
|
|
// title: '入库人',
|
|
|
|
// key: 'librarySign',
|
|
|
|
// type: FormTypes.input,
|
|
|
|
// width: '200px',
|
|
|
|
// placeholder: '请输入${title}',
|
|
|
|
// defaultValue: ''
|
|
|
|
// },
|
|
|
|
// {
|
|
|
|
// title: '核算属性',
|
|
|
|
// key: 'materialType',
|
|
|
|
// type: FormTypes.input,
|
|
|
|
// width: '200px',
|
|
|
|
// placeholder: '请输入${title}',
|
|
|
|
// defaultValue: ''
|
|
|
|
// },
|
|
|
|
{
|
|
|
|
title: '物料名称及规格型号',
|
|
|
|
key: 'materialName',
|
|
|
|
type: FormTypes.sel_search,
|
|
|
|
dictCode: '',
|
|
|
|
width: '200px',
|
|
|
|
placeholder: '请输入${title}',
|
|
|
|
defaultValue: ''
|
|
|
|
},
|
|
|
|
{
|
|
|
|
title: '系列',
|
|
|
|
key: 'materialSeries',
|
|
|
|
type: FormTypes.sel_search,
|
|
|
|
dictCode: '',
|
|
|
|
width: '200px',
|
|
|
|
placeholder: '请输入${title}',
|
|
|
|
defaultValue: ''
|
|
|
|
},
|
|
|
|
{
|
|
|
|
title: '单位',
|
|
|
|
key: 'materialUnit',
|
|
|
|
type: FormTypes.select,
|
|
|
|
dictCode: '',
|
|
|
|
width: '200px',
|
|
|
|
placeholder: '请输入${title}',
|
|
|
|
defaultValue: ''
|
|
|
|
},
|
|
|
|
{
|
|
|
|
title: '单价',
|
|
|
|
key: 'materialPrice',
|
|
|
|
type: FormTypes.inputNumber,
|
|
|
|
width: '200px',
|
|
|
|
placeholder: '请输入${title}',
|
|
|
|
defaultValue: ''
|
|
|
|
},
|
|
|
|
{
|
|
|
|
title: '对比单价',
|
|
|
|
key: 'contrastPrice',
|
|
|
|
type: FormTypes.normal,
|
|
|
|
width: '200px',
|
|
|
|
placeholder: '请输入${title}',
|
|
|
|
defaultValue: ''
|
|
|
|
},
|
|
|
|
{
|
|
|
|
title: '数量',
|
|
|
|
key: 'materialQuantity',
|
|
|
|
type: FormTypes.inputNumber,
|
|
|
|
width: '200px',
|
|
|
|
placeholder: '请输入${title}',
|
|
|
|
defaultValue: ''
|
|
|
|
},
|
|
|
|
{
|
|
|
|
title: '金额',
|
|
|
|
key: 'materialAmount',
|
|
|
|
type: FormTypes.inputNumber,
|
|
|
|
width: '200px',
|
|
|
|
placeholder: '请输入${title}',
|
|
|
|
defaultValue: ''
|
|
|
|
},
|
|
|
|
{
|
|
|
|
title: '执行标准',
|
|
|
|
key: 'materialStandard',
|
|
|
|
type: FormTypes.input,
|
|
|
|
width: '200px',
|
|
|
|
placeholder: '请输入${title}',
|
|
|
|
defaultValue: ''
|
|
|
|
},
|
|
|
|
{
|
|
|
|
title: '备注',
|
|
|
|
key: 'remarks',
|
|
|
|
type: FormTypes.input,
|
|
|
|
width: '200px',
|
|
|
|
placeholder: '请输入${title}',
|
|
|
|
defaultValue: ''
|
|
|
|
}
|
|
|
|
]
|
|
|
|
},
|
|
|
|
url: {
|
|
|
|
getForm:'/actBusiness/getForm',
|
|
|
|
add: '/hy/processUdgetPlan/add',
|
|
|
|
edit: '/hy/processUdgetPlan/edit',
|
|
|
|
queryById: '/hy/processUdgetPlan/queryById',
|
|
|
|
processUdgetPlanMaterial: {
|
|
|
|
list: '/hy/processUdgetPlan/queryProcessUdgetPlanMaterialByMainId'
|
|
|
|
}
|
|
|
|
},
|
|
|
|
btndisabled: false
|
|
|
|
}
|
|
|
|
},
|
|
|
|
props: {
|
|
|
|
/*流程数据*/
|
|
|
|
processData:{
|
|
|
|
type:Object,
|
|
|
|
default:()=>{return {}},
|
|
|
|
required:false
|
|
|
|
},
|
|
|
|
/*是否新增*/
|
|
|
|
isNew: {type: Boolean, default: false, required: false},
|
|
|
|
/*是否处理流程*/
|
|
|
|
task: {type: Boolean, default: false, required: false},
|
|
|
|
//流程表单data
|
|
|
|
formData: {
|
|
|
|
type: Object,
|
|
|
|
default: () => {
|
|
|
|
},
|
|
|
|
required: false
|
|
|
|
},
|
|
|
|
//表单模式:false流程表单 true普通表单
|
|
|
|
formBpm: {
|
|
|
|
type: Boolean,
|
|
|
|
default: false,
|
|
|
|
required: false
|
|
|
|
},
|
|
|
|
//表单禁用
|
|
|
|
disabled: {
|
|
|
|
type: Boolean,
|
|
|
|
default: false,
|
|
|
|
required: false
|
|
|
|
}
|
|
|
|
},
|
|
|
|
computed: {
|
|
|
|
formDisabled() {
|
|
|
|
if (this.formBpm === true) {
|
|
|
|
if (this.formData.disabled === false) {
|
|
|
|
return false
|
|
|
|
}
|
|
|
|
return true
|
|
|
|
}
|
|
|
|
return this.disabled
|
|
|
|
},
|
|
|
|
showFlowSubmitButton() {
|
|
|
|
if (this.formBpm === true) {
|
|
|
|
if (this.formData.disabled === false) {
|
|
|
|
return true
|
|
|
|
}
|
|
|
|
}
|
|
|
|
return false
|
|
|
|
}
|
|
|
|
},
|
|
|
|
created() {
|
|
|
|
//如果是流程中表单,则需要加载流程表单data
|
|
|
|
console.log("流程数据",this.processData)
|
|
|
|
this.showFlowData()
|
|
|
|
if (!this.isNew){
|
|
|
|
this.init();
|
|
|
|
}
|
|
|
|
this.getAllTable()
|
|
|
|
},
|
|
|
|
methods: {
|
|
|
|
/*回显数据*/
|
|
|
|
init(){
|
|
|
|
this.btndisabled = true;
|
|
|
|
var r = this.processData;
|
|
|
|
this.getAction(this.url.getForm,{
|
|
|
|
tableId:r.tableId,
|
|
|
|
tableName:r.tableName,
|
|
|
|
}).then((res)=>{
|
|
|
|
if (res.success){
|
|
|
|
let formData = res.result;
|
|
|
|
formData.tableName = r.tableName;
|
|
|
|
this.data = formData;
|
|
|
|
console.log("表单回显数据",this.data)
|
|
|
|
this.editAfter();
|
|
|
|
this.btndisabled = false;
|
|
|
|
}else {
|
|
|
|
this.$message.error(res.message)
|
|
|
|
}
|
|
|
|
})
|
|
|
|
},
|
|
|
|
close() {
|
|
|
|
//todo 关闭后的回调
|
|
|
|
this.$emit('close')
|
|
|
|
},
|
|
|
|
/*通过审批*/
|
|
|
|
passTask() {
|
|
|
|
this.$emit('passTask')
|
|
|
|
},
|
|
|
|
/*驳回审批*/
|
|
|
|
backTask() {
|
|
|
|
this.$emit('backTask')
|
|
|
|
},
|
|
|
|
addBefore() {
|
|
|
|
this.form.resetFields()
|
|
|
|
this.processUdgetPlanMaterialTable.dataSource = []
|
|
|
|
},
|
|
|
|
getAllTable() {
|
|
|
|
console.log('-------------------->')
|
|
|
|
if (!(this.refKeys instanceof Array)) {
|
|
|
|
throw this.throwNotArray('refKeys')
|
|
|
|
}
|
|
|
|
let values = this.refKeys.map(key => getRefPromise(this, key))
|
|
|
|
return Promise.all(values)
|
|
|
|
},
|
|
|
|
/** 调用完edit()方法之后会自动调用此方法 */
|
|
|
|
editAfter() {
|
|
|
|
let fieldval = pick(this.data, 'company', 'createTime', 'sysOrgCode', 'createBy', 'materialType', 'processPlan', 'needTime', 'orderNumber', 'fileId')
|
|
|
|
this.$nextTick(() => {
|
|
|
|
this.form.setFieldsValue(fieldval)
|
|
|
|
})
|
|
|
|
// 加载子表数据
|
|
|
|
if (this.data.id) {
|
|
|
|
let params = { id: this.data.id }
|
|
|
|
this.requestSubTableData(this.url.processUdgetPlanMaterial.list, params, this.processUdgetPlanMaterialTable)
|
|
|
|
}
|
|
|
|
},
|
|
|
|
/** 整理成formData */
|
|
|
|
classifyIntoFormData(allValues) {
|
|
|
|
let main = Object.assign(this.model, allValues.formValue)
|
|
|
|
return {
|
|
|
|
...main, // 展开
|
|
|
|
processUdgetPlanMaterialList: allValues.tablesValue[0].values
|
|
|
|
}
|
|
|
|
},
|
|
|
|
orgCodeTxt(a){
|
|
|
|
console.log("当前选中用户部门",a)
|
|
|
|
},
|
|
|
|
//渲染流程表单数据
|
|
|
|
showFlowData() {
|
|
|
|
if (this.formBpm === true) {
|
|
|
|
let params = { id: this.formData.dataId }
|
|
|
|
getAction(this.url.queryById, params).then((res) => {
|
|
|
|
if (res.success) {
|
|
|
|
this.edit(res.result)
|
|
|
|
}
|
|
|
|
})
|
|
|
|
}
|
|
|
|
},
|
|
|
|
|
|
|
|
validateError(msg) {
|
|
|
|
this.$message.error(msg)
|
|
|
|
},
|
|
|
|
popupCallback(row) {
|
|
|
|
this.form.setFieldsValue(pick(row, 'company', 'createTime', 'sysOrgCode', 'createBy', 'materialType', 'processPlan', 'needTime', 'orderNumber', 'fileId'))
|
|
|
|
},
|
|
|
|
// handler
|
|
|
|
handleSubmit (e) {
|
|
|
|
this.getAllTable().then(tables => {
|
|
|
|
return validateFormAndTables(this.form, tables)
|
|
|
|
}).then(allValues=>{
|
|
|
|
console.log('所有数据',allValues)
|
|
|
|
if (typeof this.classifyIntoFormData !== 'function') {
|
|
|
|
throw this.throwNotFunction('classifyIntoFormData')
|
|
|
|
}
|
|
|
|
let formData = this.classifyIntoFormData(allValues)
|
|
|
|
|
|
|
|
this.form.validateFields((err, values) => {
|
|
|
|
if (!err) {
|
|
|
|
formData.procDefId = this.processData.id;
|
|
|
|
formData.procDeTitle = this.processData.name;
|
|
|
|
formData.title=this.processData.description;
|
|
|
|
if (!formData.tableName)formData.tableName = this.processData.businessTable;
|
|
|
|
console.log('格式化后的数据',formData)
|
|
|
|
var url = this.url.add;
|
|
|
|
let method='post';
|
|
|
|
if (!this.isNew){
|
|
|
|
url = this.url.edit;
|
|
|
|
method='put';
|
|
|
|
}
|
|
|
|
console.log('提交方法',method)
|
|
|
|
this.btndisabled = true;
|
|
|
|
httpAction(url,formData,method).then((res)=>{
|
|
|
|
if (res.success){
|
|
|
|
this.$message.success("保存成功!")
|
|
|
|
//todo 将表单的数据传给父组件
|
|
|
|
this.$emit('afterSubmit',formData)
|
|
|
|
}else {
|
|
|
|
this.$message.error(res.message)
|
|
|
|
}
|
|
|
|
}).finally(()=>{
|
|
|
|
this.btndisabled = false;
|
|
|
|
})
|
|
|
|
}
|
|
|
|
})
|
|
|
|
})
|
|
|
|
|
|
|
|
},
|
|
|
|
|
|
|
|
}
|
|
|
|
}
|
|
|
|
</script>
|
|
|
|
|
|
|
|
<style scoped>
|
|
|
|
.div_process{
|
|
|
|
margin-top: 30px;
|
|
|
|
}
|
|
|
|
</style>
|