Files
income_payments_client/src/views/draftingGroup/modules/WorkingGroupProjectModule.vue
T

355 lines
12 KiB
Vue
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
<template>
<j-modal
:title="title"
:width="width"
:visible="visible"
:confirmLoading="confirmLoading"
switchFullscreen
@ok="handleOk"
@cancel="handleCancel"
cancelText="关闭">
<a-spin :spinning="confirmLoading">
<span class="prompt-message">
说明1.负责人A为该工作组的主负责人负责人B为该工作组的辅助负责人<br>
<span class="prompt-message-line2">2.设置本年应收款A和本年应收款B是为了区分工作组成员的价格</span>
</span>
<a-form :form="form">
<a-row>
<a-col :span="24">
<a-form-item label="工作组项目" :labelCol="remarksLabelCol" :wrapperCol="remarksWrapperCol">
<a-input placeholder="请输入工作组项目"
v-decorator="['workingGroupProject',validatorRules.workingGroupProject]"
:maxLength='50'
@change="e => {e.target.value = (e.target.value + '').trim()}"></a-input>
</a-form-item>
</a-col>
</a-row>
<a-row>
<a-col :span="12">
<a-form-item label="运行年份" :labelCol="labelCol" :wrapperCol="wrapperCol">
<j-year-date style="width:100%" placeholder="请选择运行年份"
v-decorator="['year',validatorRules.year]"></j-year-date>
</a-form-item>
</a-col>
</a-row>
<a-row>
<a-col :span="12">
<a-form-item label="负责人A" :labelCol="labelCol" :wrapperCol="wrapperCol">
<select-principal placeholder="请选择负责人A"
v-decorator="['principalIdA',validatorRules.principalIdA]"
:maxLength='50'></select-principal>
</a-form-item>
</a-col>
<a-col :span="12">
<a-form-item label="负责人B" :labelCol="labelCol" :wrapperCol="wrapperCol">
<select-principal placeholder="请选择负责人B"
v-decorator="['principalIdB',validatorRules.principalIdB]"
:maxLength='50'></select-principal>
</a-form-item>
</a-col>
</a-row>
<a-row>
<a-col :span="12">
<a-form-item label="每年召开次数" :labelCol="labelCol" :wrapperCol="wrapperCol">
<a-input placeholder="请输入每年召开次数"
v-decorator="['convokeNum']"
:maxLength='50'
@change="e => {e.target.value = (e.target.value + '').trim()}"></a-input>
</a-form-item>
</a-col>
<a-col :span="12">
<a-form-item label="运行周期" :labelCol="labelCol" :wrapperCol="wrapperCol">
<a-input placeholder="请输入运行周期"
v-decorator="['operationCycle']"
:maxLength='50'
@change="e => {e.target.value = (e.target.value + '').trim()}"></a-input>
</a-form-item>
</a-col>
</a-row>
<a-row>
<a-col :span="12">
<a-form-item label="本年应收款A" :labelCol="labelCol" :wrapperCol="wrapperCol">
<a-row :gutter="10">
<a-col :span="20">
<a-input placeholder="请输入本年应收款A"
v-decorator="['yearChargeA',validatorRules.checkMoney]"
:maxLength='50'
@blur="addZero"
@change="(e) => {e.target.value = (e.target.value.replace(/[^0-9.]/g,'')).trim()}"></a-input>
</a-col>
<a-col :span="4">/</a-col>
</a-row>
</a-form-item>
</a-col>
</a-row>
<a-row>
<a-col :span="12">
<a-form-item label="收费通知号A" :labelCol="labelCol" :wrapperCol="wrapperCol">
<a-input placeholder="请输入收费通知号A"
v-decorator="['chargeNoticeNoA']"
:maxLength='50'
@change="e => {e.target.value = (e.target.value + '').trim()}"></a-input>
</a-form-item>
</a-col>
<a-col :span="12">
<a-form-item label="收费通知A" :labelCol="labelCol" :wrapperCol="wrapperCol">
<j-upload :multiple="false"
:return-id="true"
bizPath="payment"
:number="1"
v-decorator="['chargeNoticeAId']"
:trigger-change="true"></j-upload>
</a-form-item>
</a-col>
</a-row>
<a-row>
<a-col :span="12">
<a-form-item label="本年应收款B" :labelCol="labelCol" :wrapperCol="wrapperCol">
<a-row :gutter="10">
<a-col :span="20">
<a-input placeholder="请输入本年应收款B"
v-decorator="['yearChargeB',validatorRules.checkMoney]"
:maxLength='50'
@blur="addZero"
@change="(e) => {e.target.value = (e.target.value.replace(/[^0-9.]/g,'')).trim()}"></a-input>
</a-col>
<a-col :span="4">/</a-col>
</a-row>
</a-form-item>
</a-col>
</a-row>
<a-row>
<a-col :span="12">
<a-form-item label="收费通知号B" :labelCol="labelCol" :wrapperCol="wrapperCol">
<a-input placeholder="请输入收费通知号B"
v-decorator="['chargeNoticeNoB']"
:maxLength='50'
@change="e => {e.target.value = (e.target.value + '').trim()}"></a-input>
</a-form-item>
</a-col>
<a-col :span="12">
<a-form-item label="收费通知B" :labelCol="labelCol" :wrapperCol="wrapperCol">
<j-upload :multiple="false"
:return-id="true"
bizPath="payment"
:number="1"
v-decorator="['chargeNoticeBId']"
:trigger-change="true"></j-upload>
</a-form-item>
</a-col>
</a-row>
<a-row>
<a-col>
<a-form-item label="任务及目标" :labelCol="remarksLabelCol" :wrapperCol="remarksWrapperCol">
<a-textarea
placeholder="请输入任务及目标"
:auto-size="{ minRows: 3, maxRows: 6 }"
v-decorator="['missionAndObjectives']"
:maxLength='200'
@change="e => {e.target.value = (e.target.value + '').trim()}"/>
</a-form-item>
</a-col>
</a-row>
<a-row>
<a-col>
<a-form-item label="备注" :labelCol="remarksLabelCol" :wrapperCol="remarksWrapperCol">
<a-textarea
placeholder="请输入备注"
:auto-size="{ minRows: 3, maxRows: 6 }"
v-decorator="['remarks']"
:maxLength='200'
@change="e => {e.target.value = (e.target.value + '').trim()}"/>
</a-form-item>
</a-col>
</a-row>
</a-form>
</a-spin>
</j-modal>
</template>
<script>
import pick from 'lodash.pick'
import { httpAction } from '@api/manage'
import JUpload from '@comp/jero/JUpload'
import JYearDate from '@comp/jero/JYearDate'
import SelectPrincipal from '@comp/company/SelectPrincipal'
import { isRepeat } from '../../../utils/util'
import { money } from '../../../utils/validate'
import { addZero } from '../../../utils/util'
export default {
name: 'WorkingGroupProjectModule',
components: { JUpload, JYearDate, SelectPrincipal },
data() {
return {
title: '操作',
width: 800,
visible: false,
confirmLoading: false,
form: this.$form.createForm(this),
model: {},
labelCol: {
xs: { span: 24 },
sm: { span: 6 }
},
wrapperCol: {
xs: { span: 24 },
sm: { span: 18 }
},
remarksLabelCol: {
xs: { span: 24 },
sm: { span: 3 }
},
remarksWrapperCol: {
xs: { span: 24 },
sm: { span: 21 }
},
validatorRules: {
workingGroupProject: {
rules: [{ required: true, message: '请输入项目名称' }],
validateTrigger: 'blur'
},
year: {
rules: [{ required: true, message: '请选择运行年份' }],
validateTrigger: 'change'
},
principalIdA: {
rules: [{ required: true, validator: this.validatePrincipal }],
validateTrigger: 'change'
},
principalIdB: {
rules: [{ required: false, validator: this.validatePrincipal }],
validateTrigger: 'change'
},
checkMoney: {
rules: [{ required: false, validator: this.checkMoney }],
validateTrigger: 'blur'
}
},
url: {
add: '/project/payWorkingGroup/add',
edit: '/project/payWorkingGroup/edit'
}
}
},
methods: {
addZero,
add() {
this.edit({})
},
edit(record) {
this.form.resetFields()
// 防止下拉选项出现问题
record.principalIdA = record.principalIdA || undefined
record.principalIdB = record.principalIdB || undefined
this.model = Object.assign({}, record)
this.visible = true
this.$nextTick(() => {
this.form.setFieldsValue(pick(this.model, 'workingGroupProject', 'year', 'principalIdA', 'principalIdB', 'convokeNum', 'operationCycle', 'yearChargeA', 'chargeNoticeNoA', 'chargeNoticeAId', 'yearChargeB', 'chargeNoticeNoB', 'chargeNoticeBId', 'missionAndObjectives', 'remarks'))
if (!this.model.id) {
this.form.setFieldsValue({'year': (new Date().getFullYear()).toString()})
}
})
},
close() {
this.$emit('close')
this.visible = false
},
handleOk() {
if (this.confirmLoading) {
return
}
this.confirmLoading = true
const that = this
// 触发表单验证
this.form.validateFields((err, values) => {
if (!err) {
that.confirmLoading = true
let httpurl = ''
let method = 'post'
if (!this.model.id) {
httpurl += this.url.add
} else {
httpurl += this.url.edit
}
values.yearChargeA = values.yearChargeA ? Number(values.yearChargeA) : null
values.yearChargeB = values.yearChargeB ? Number(values.yearChargeB) : null
values.chargeA = values.chargeNoticeNoA ? 'a' : null
values.chargeB = values.chargeNoticeNoB ? 'b' : null
const formData = Object.assign(this.model, values)
console.log('表单提交数据', formData)
httpAction(httpurl, formData, method).then((res) => {
if (res.success) {
that.$message.success(res.message)
that.$emit('ok')
that.close()
} else {
that.$message.warning(res.message)
}
}).finally(() => {
setTimeout(() => {
this.confirmLoading = false
}, 1000)
})
} else {
this.confirmLoading = false
}
})
},
handleCancel() {
this.close()
},
/**
* 校验负责人是否重复
* @param rule
* @param value
* @param callback
*/
validatePrincipal(rule, value, callback) {
if (rule.field === 'principalIdA') {
if (!value) {
callback('请选择负责人A')
}
}
if (value) {
const principalObj = this.form.getFieldsValue(['principalIdA', 'principalIdB'])
const principalArr = Object.values(principalObj)
principalArr.filter(tt => tt !== undefined)
if (isRepeat(principalArr)) {
callback('请选择不同的负责人')
} else {
callback()
}
return
}
callback()
},
/**
* 校验金额格式
* @param rules
* @param value
* @param callback
*/
checkMoney(rules, value, callback) {
if (value) {
if (money(value)) {
callback()
return
}
callback('请输入合法的金额数字,最多2位小数,10位整数')
}
callback()
},
}
}
</script>
<style scoped lang="less">
.prompt-message {
color: red;
&-line2 {
padding-left: 2.7rem;
}
}
</style>