新增工作组会议、

This commit is contained in:
fengachen
2021-09-03 19:03:19 +08:00
parent 574588dd0f
commit 04bb7c9e7c
8 changed files with 20790 additions and 888 deletions
@@ -20,15 +20,27 @@
</a-col>
<a-col :xl="6" :md="8" :sm="24">
<a-form-item label="会议类型" :labelCol="labelCol" :wrapperCol="wrapperCol">
<j-dict-select-tag style="width: 100%" v-decorator="['meetingType',validatorRules.meetingType]" @change="changeMeetingType"
<j-dict-select-tag style="width: 100%" v-decorator="['meetingType',validatorRules.meetingType]"
@change="changeMeetingType"
:trigger-change="true" dict-code="meeting_type"
placeholder="请选择会议类型"></j-dict-select-tag>
</a-form-item>
</a-col>
<!--工作组会议才有-->
<a-col :xl="6" :md="8" :sm="24" v-if="meetingType === '1' ">
<a-form-item label="工作组" :labelCol="labelCol" :wrapperCol="wrapperCol">
<a-select placeholder="请选择工作组"
v-decorator="['workingGroupId',validatorRules.parentId]"
:maxLength='50'>
<a-select-option v-for="item in workGroupList" :key="item.id" :value="item.id">{{ item.workingGroupProject }}</a-select-option>
</a-select>
</a-form-item>
</a-col>
<a-col :xl="6" :md="8" :sm="24" v-if="meetingType === '2' ">
<a-form-item label="标协会议类型" :labelCol="labelCol" :wrapperCol="wrapperCol">
<j-dict-select-tag v-decorator="['tbMeetingType',validatorRules.tbMeetingType]" :trigger-change="true" style="width: 100%" dict-code="standard_meeting_type"
<j-dict-select-tag v-decorator="['tbMeetingType',validatorRules.tbMeetingType]" :trigger-change="true"
style="width: 100%" dict-code="standard_meeting_type"
placeholder="请选择标协会议类型"></j-dict-select-tag>
</a-form-item>
</a-col>
@@ -47,7 +59,8 @@
<a-col :xl="6" :md="8" :sm="24">
<a-form-item label="年份" :labelCol="labelCol" :wrapperCol="wrapperCol">
<j-year-date v-decorator="['particularYear',validatorRules.particularYear]" placeholder="请选择年份" style="width: 100%"></j-year-date>
<j-year-date v-decorator="['particularYear',validatorRules.particularYear]" placeholder="请选择年份"
style="width: 100%"></j-year-date>
</a-form-item>
</a-col>
<a-col :xl="6" :md="8" :sm="24">
@@ -79,8 +92,9 @@
<a-col :xl="6" :md="8" :sm="24">
<a-form-item label="报名截止时间" :labelCol="labelCol" :wrapperCol="wrapperCol">
<j-date placeholder="请选择报名截止时间" style="width: 100%;" v-decorator="['registerDeadline',validatorRules.registerDeadline]" :trigger-change="true"
date-format="YYYY-MM-DD HH:mm:ss" :show-time="true" />
<j-date placeholder="请选择报名截止时间" style="width: 100%;"
v-decorator="['registerDeadline',validatorRules.registerDeadline]" :trigger-change="true"
date-format="YYYY-MM-DD HH:mm:ss" :show-time="true"/>
</a-form-item>
</a-col>
@@ -121,7 +135,7 @@
<!--邀请码begin-->
<!-- 国际研讨会出现-->
<!-- 国际研讨会出现-->
<section v-if="meetingType === '3' ">
<div class="item-title">邀请码</div>
<a-row :gutter="24">
@@ -130,7 +144,7 @@
<a-input placeholder="请输入邀请码"
@change="event => event.target.value = event.target.value.trim()"
:maxLength='50'
v-decorator="['vipInvitationCode',validatorRules.invitationCode]"></a-input>
v-decorator="['vipInvitationCode',validateInviteCode.invitationCode]"></a-input>
</a-form-item>
</a-col>
@@ -139,7 +153,7 @@
<a-input placeholder="请输入邀请码"
@change="event => event.target.value = event.target.value.trim()"
:maxLength='50'
v-decorator="[ 'speakerInvitationCode',validatorRules.invitationCode]"></a-input>
v-decorator="[ 'speakerInvitationCode',validateInviteCode.invitationCode]"></a-input>
</a-form-item>
</a-col>
@@ -148,7 +162,7 @@
<a-input placeholder="请输入邀请码"
@change="event => event.target.value = event.target.value.trim()"
:maxLength='50'
v-decorator="[ 'guestInvitationCode',validatorRules.invitationCode]"></a-input>
v-decorator="[ 'guestInvitationCode',validateInviteCode.invitationCode]"></a-input>
</a-form-item>
</a-col>
@@ -157,18 +171,18 @@
<a-input placeholder="请输入邀请码"
@change="event => event.target.value = event.target.value.trim()"
:maxLength='50'
v-decorator="[ 'cooperativeInvitationCode',validatorRules.invitationCode]"></a-input>
v-decorator="[ 'cooperativeInvitationCode',validateInviteCode.invitationCode]"></a-input>
</a-form-item>
</a-col>
</a-row>
</section>
<!--邀请码end-->
<!--邀请码end-->
<!--会议费用begin-->
<div class="item-title">会议费用</div>
<a-row :gutter="24">
<a-col :xl="8" :md="8" :sm="24">
<a-col :xxl="6" :xl="8" :md="12" :sm="24">
<a-form-item label="会议费用" :labelCol="labelCol" :wrapperCol="{ xs: {span: 24},sm: {span: 16}}">
<a-input placeholder="请输入会议费用"
:maxLength='50'
@@ -177,9 +191,9 @@
<span class="yuan">元/人</span>
</a-form-item>
</a-col>
<!-- 标协会议才有 -->
<a-col :xl="8" :md="8" :sm="24" v-if="meetingType === '2' ">
<a-form-item label="会议费用(标协会员)" :labelCol="labelCol" :wrapperCol="{ xs: {span: 24},sm: {span: 16}}">
<!-- 标协会议才有 -->
<a-col :xxl="6" :xl="10" :md="12" :sm="24" v-if="meetingType === '2' ">
<a-form-item label="会议费用(标协会员)" :labelCol="{ xs: {span: 24},sm: {span: 8}}" :wrapperCol="{ xs: {span: 24},sm: {span: 16}}">
<a-input placeholder="请输入会议费用"
:maxLength='50'
@change="(e) => {e.target.value = e.target.value.replace(/[^0-9.]/g,'')}"
@@ -193,14 +207,14 @@
<!--联系方式begin-->
<div class="item-title">联系方式</div>
<a-row :gutter="24">
<a-col :xl="6" :md="8" :sm="24">
<a-col :xxl="6" :xl="8" :md="12" :sm="24">
<a-form-item label="会议负责人" :labelCol="labelCol" :wrapperCol="wrapperCol">
<select-principal placeholder="请选择会议负责人"
@change="selectPerson"
v-decorator="['directorId',validatorRules.directorId]"></select-principal>
</a-form-item>
</a-col>
<a-col :xl="6" :md="8" :sm="24">
<a-col :xxl="6" :xl="8" :md="12" :sm="24">
<a-form-item label="手机号" :labelCol="labelCol" :wrapperCol="wrapperCol">
<a-input placeholder="请输入手机号"
disabled
@@ -210,7 +224,7 @@
</a-form-item>
</a-col>
<!--标协会议才有-->
<a-col :xl="6" :md="8" :sm="24" v-if="meetingType === '2' ">
<a-col :xxl="6" :xl="8" :md="12" :sm="24" v-if="meetingType === '2' ">
<a-form-item label="酒店名称" :labelCol="labelCol" :wrapperCol="wrapperCol">
<a-input placeholder="请输入酒店名称"
:maxLength='50'
@@ -219,7 +233,7 @@
</a-form-item>
</a-col>
<!--标协会议才有-->
<a-col :xl="6" :md="8" :sm="24" v-if="meetingType === '2' ">
<a-col :xxl="6" :xl="8" :md="12" :sm="24" v-if="meetingType === '2' ">
<a-form-item label="酒店地址" :labelCol="labelCol" :wrapperCol="wrapperCol">
<a-input placeholder="请输入酒店地址"
:maxLength='50'
@@ -228,39 +242,39 @@
</a-form-item>
</a-col>
</a-row>
<!--标协会议-->
<section v-if="meetingType === '2'">
<a-row :gutter="24" v-for="(hotel, index) in model.hotelList" :key="index" class="hotelInfo">
<a-col :xl="6" :md="8" :sm="24">
<a-form-item label="酒店联系人" :labelCol="labelCol" :wrapperCol="wrapperCol">
<a-input
@change="event => event.target.value = event.target.value.trim()"
:maxLength="50"
v-decorator="['hotelList['+index+'].contactPerson', validatorRules.contactPerson]"
placeholder="请输入酒店联系人"></a-input>
</a-form-item>
</a-col>
<a-col :xl="6" :md="8" :sm="24">
<a-form-item :labelCol="labelCol" :wrapperCol="wrapperCol">
<a-input
@change="(e) => {e.target.value = e.target.value.replace(/[^0-9.]/g,'')}"
:maxLength="15"
v-decorator="['hotelList['+index+'].telephoneNumber',validatorRules.telephoneNumber]"
placeholder="请输入联系人手机号"></a-input>
</a-form-item>
</a-col>
<a-col :xl="2" :md="2" >
<a-form-item>
<a-icon class="add-icon" type="plus" @click="addNew(index)"/>
<a-icon
class="remove-icon"
type="minus-circle-o"
:class="{'disabled': model.hotelList.length === 1 }"
@click="() => remove(index)"/>
</a-form-item>
</a-col>
</a-row>
</section>
<!--标协会议-->
<section v-if="meetingType === '2'">
<a-row :gutter="24" v-for="(hotel, index) in model.hotelContactsList" :key="index" class="hotelInfo">
<a-col :xxl="6" :xl="8" :md="12" :sm="24">
<a-form-item label="酒店联系人" :labelCol="{ xs: {span: 24},sm: {span: 8}}" :wrapperCol="{ xs: {span: 24},sm: {span: 16}}">
<a-input
@change="event => event.target.value = event.target.value.trim()"
:maxLength="50"
v-decorator="['hotelContactsList['+index+'].hotelContacts', validatorRules.contactPerson]"
placeholder="请输入酒店联系人"></a-input>
</a-form-item>
</a-col>
<a-col :xxl="6" :xl="8" :md="12" :sm="24">
<a-form-item :labelCol="labelCol" :wrapperCol="wrapperCol">
<a-input
@change="(e) => {e.target.value = e.target.value.replace(/[^0-9.]/g,'')}"
:maxLength="15"
v-decorator="['hotelContactsList['+index+'].hotelContactsPhone',validatorRules.telephoneNumber]"
placeholder="请输入联系人手机号"></a-input>
</a-form-item>
</a-col>
<a-col :xl="2" :md="2">
<a-form-item>
<a-icon class="add-icon" type="plus" @click="addNew(index)"/>
<a-icon
class="remove-icon"
type="minus-circle-o"
:class="{'disabled': model.hotelContactsList.length === 1 }"
@click="() => remove(index)"/>
</a-form-item>
</a-col>
</a-row>
</section>
<a-row :gutter="24">
<a-col :xl="12" :md="8" :sm="24">
@@ -287,7 +301,8 @@
</template>
<script>
import {getUserInfo,getMeetInfoById} from "@api/inconmeMeetingApi";
import {getUserInfo, getMeetInfoById,getAllWorkProjects} from "@api/inconmeMeetingApi";
import {isRepeat} from "@/utils/util";
import {httpAction} from "@api/manage";
import JDictSelectTag from "@comp/dict/JDictSelectTag";
import JYearDate from "@comp/jero/JYearDate";
@@ -338,24 +353,34 @@ export default {
// 详细地址
address: '',
// 会议类型 新增时默认为其他会议
meetingType:"4",
meetingType: "4",
validatorRules: meetingValidate,
validateInviteCode: {
invitationCode: {
rules: [
{required: true, validator: this.validateCode},
],
validateTrigger: ['blur']
}
},
url: {
add: "/meeting/payMeeting/add",
edit: "/meeting/payMeeting/edit",
},
// 召开时间
newConvokeTime:'',
newConvokeTime: '',
// 注册召开时间
newSignInTime:'',
newSignInTime: '',
// 工作组会议列表
workGroupList:[]
}
},
created() {
this.pcaData = new AreaPca();
// 编辑获取会议信息
if(this.$route.query.id){
getMeetInfoById({id:this.$route.query.id}).then(res => {
if(res.success){
if (this.$route.query.id) {
getMeetInfoById({id: this.$route.query.id}).then(res => {
if (res.success) {
this.edit(res.result)
}
})
@@ -366,19 +391,45 @@ export default {
/*
* 新增
* */
add(){
add() {
this.edit({})
},
/*
* 编辑
* */
edit(record){
edit(record) {
this.form.resetFields()
this.model = Object.assign({},record)
this.model = Object.assign({}, record)
let dateFormat = 'YYYY-MM-DD HH:mm:ss'
// 修改会议类型 控制dom显示
this.meetingType = record.meetingType + ''
// 当为工作组会议的时候 需要获取工作组
if(this.meetingType === '1'){
this.getWorkSelectList()
}
// 召开时间回显
this.model.convokeTime = [moment(this.model.startTime, dateFormat), moment(this.model.endTime, dateFormat)]
// 注册签到时间回显
this.model.signInTime = [moment(this.model.startSignInTime, dateFormat), moment(this.model.endSignInTime, dateFormat)]
// 后端需要的召开时间
this.newConvokeTime = [this.model.startTime, this.model.endTime]
// 后端需要的注册签到时间
this.newSignInTime = [this.model.startSignInTime, this.model.endSignInTime]
// 联系人电话
this.model.directorPhone = this.$route.query.directorPhone
this.$nextTick(() => {
this.form.setFieldsValue(pick(this.model,'meetingName','meetingType'))
this.form.setFieldsValue(pick(this.model, 'meetingName', 'meetingType', 'convokeTime', 'particularYear', 'estimatedNumber', 'meetingFiles', 'registerDeadline', 'meetingContent', 'convokeLocale', 'address', 'meetingCosts', 'directorId', 'remark', 'directorPhone'))
// 如果是标协会议则回显 标协会议的字段
// if(this.meetingType === '2'){
// this.form.setFieldsValue(pick(this.model,'signInTime', ))
// }
// 如果是国际研讨会则赋值邀请码
if (this.meetingType === '3') {
this.form.setFieldsValue(pick(this.model, 'vipInvitationCode', 'speakerInvitationCode', 'guestInvitationCode', 'cooperativeInvitationCode'))
}
})
},
/*
* 发布会议
@@ -389,15 +440,19 @@ export default {
if (!err) {
let httpurl = ''
let method = 'post'
httpurl = this.url.add
if (that.model.id) {
httpurl = this.url.edit
} else {
httpurl = this.url.add
}
let placeName = values.convokeLocale
const formData = Object.assign(this.model, values,{ venue: this.getPcaText(placeName) })
const formData = Object.assign(this.model, values, {venue: this.getPcaText(placeName)})
// 转换召开时间
formData.startTime = this.newConvokeTime[0]
formData.endTime = this.newConvokeTime[1]
// 转换注册签到时间
if(values.signInTime){
formData.startSignInTime = this.newSignInTime[0]
if (values.signInTime) {
formData.startSignInTime = this.newSignInTime[0]
formData.endSignInTime = this.newSignInTime[1]
}
console.log('表单提交数据', formData)
@@ -432,25 +487,29 @@ export default {
* */
changeMeetingType(val) {
this.meetingType = val
if(val === '2'){
this.model.hotelList =[{
contactPerson: '',
telephoneNumber: ''
// 如果是工作组会议就需要查询所有的工作组
if(val === '1'){
this.getWorkSelectList()
}
if (val === '2') {
this.model.hotelContactsList = [{
hotelContacts: '',
hotelContactsPhone: ''
}]
}else {
if(this.model.hasOwnProperty('hotelList')){
delete this.model.hotelList
} else {
if (this.model.hasOwnProperty('hotelContactsList')) {
delete this.model.hotelContactsList
}
}
},
/*
* 会议负责人
* */
selectPerson(val){
getUserInfo({id:val}).then(res => {
if(res.success){
this.$nextTick( () => {
this.form.setFieldsValue({directorPhone:res.result.phone})
selectPerson(val) {
getUserInfo({id: val}).then(res => {
if (res.success) {
this.$nextTick(() => {
this.form.setFieldsValue({directorPhone: res.result.phone})
})
}
})
@@ -459,22 +518,22 @@ export default {
* 添加酒店联系人
* */
addNew(index) {
if (this.model.hotelList.length >= 5) {
if (this.model.hotelContactsList.length >= 5) {
this.$message.warning('最多添加5个酒店联系人')
return
}
const { form } = this
const {form} = this
const obj = {
contactPerson: '',
telephoneNumber: ''
hotelContacts: '',
hotelContactsPhone: ''
}
const keys = form.getFieldValue('hotelList')
const keys = form.getFieldValue('hotelContactsList')
// 增加数据后重新赋值
this.model.hotelList.splice(index + 1, 0, obj)
this.model.hotelContactsList.splice(index + 1, 0, obj)
keys.splice(index + 1, 0, obj)
this.$nextTick(() => {
form.setFieldsValue({
hotelList: keys
hotelContactsList: keys
})
})
},
@@ -483,19 +542,19 @@ export default {
* */
remove(k) {
// 如果长度是1的话则不进行删除操作
if (this.model.hotelList.length === 1) {
if (this.model.hotelContactsList.length === 1) {
return
}
const { form } = this
const {form} = this
// // can use data-binding to get
const hotelList = form.getFieldValue('hotelList')
const hotelContactsList = form.getFieldValue('hotelContactsList')
// 把循环的dom元素删除
this.model.hotelList.splice(k, 1)
this.model.hotelContactsList.splice(k, 1)
// 把绑定在dom里面的值删除
hotelList.splice(k, 1)
hotelContactsList.splice(k, 1)
// 重新赋值
form.setFieldsValue({
hotelList: hotelList
hotelContactsList: hotelContactsList
})
},
/*
@@ -507,14 +566,42 @@ export default {
/*
* 召开时间转化
* */
changeConvokeTime(date,dateString){
changeConvokeTime(date, dateString) {
this.newConvokeTime = dateString
},
/*
* 注册签到时间转化
* */
changeSignTime(date,dateString){
changeSignTime(date, dateString) {
this.newSignInTime = dateString
},
/*
* 校验邀请码
* */
validateCode(rule, value, callback) {
if (value === null || value === '' || value === undefined) {
callback(new Error('请输入邀请码'))
}else {
let codeObj = this.form.getFieldsValue(['cooperativeInvitationCode', 'vipInvitationCode', 'speakerInvitationCode', 'guestInvitationCode'])
const codeArr = Object.values(codeObj)
console.log('codearr',codeArr)
// 校验是否重复
if(isRepeat(codeArr)){
callback('请填写不同的邀请码!')
}else {
callback()
}
}
},
/*
* 获取所有的工作组
* */
getWorkSelectList(){
getAllWorkProjects().then(res => {
if(res.success){
this.workGroupList = [...res.result]
}
})
}
}
}
@@ -593,6 +680,7 @@ export default {
margin-right: 10px;
cursor: pointer;
}
.remove-icon {
height: 100%;
cursor: pointer;