Merge branch '24年6月海外会议' into 24年6月功能安全中心

# Conflicts:
#	src/enums/commonEnums.js
#	src/views/incomePayments/meetManage/AddOrDetailMeet.vue
#	src/views/incomePayments/meetManage/Attendance.vue
#	src/views/incomePayments/meetManage/SignUpInfoEdit.vue
#	src/views/incomePayments/meetManage/modules/UploadMeetFileModal.vue
#	src/views/projectManagement/AllMeetingList.vue
This commit is contained in:
danshihao
2024-07-03 10:44:48 +08:00
10 changed files with 1068 additions and 17 deletions
+4 -1
View File
@@ -32,6 +32,8 @@ const getStandardNumberList = (params) => getAction('/meeting/standardsMeeting/g
// 国际研讨会-WASIC-通过会议ID获取关联主题的信息
const getLinkTopics = (params) => getAction('/meeting/internalMeeting/getLinkTopics', params)
// 通过id获取海外会议参会人详细信息
const getSingUpUserInfoOverseas = (params) => getAction('/meeting/overseasSituation/queryById', params)
export {
getUserInfo,
@@ -46,5 +48,6 @@ export {
addGenerateCodeList,
editGenerateCodeList,
getStandardNumberList,
getLinkTopics
getLinkTopics,
getSingUpUserInfoOverseas
}
+16 -1
View File
@@ -89,8 +89,14 @@
type:Number,
required:false,
default:0
}
},
//update-end-author:wangshuai date:20201021 for:LOWCOD-969 新增number属性,用于判断上传数量
// 限制的后缀数组
fileTypeList: {
type: Array,
required: false,
default: () => []
}
},
computed: {
//透传给下级组件的事件,需要排除本组件使用的change事件
@@ -190,6 +196,15 @@
this.$message.warning('请上传图片')
return false
}
// 限制文件类型
if (this.fileTypeList && this.fileTypeList.length) {
const tmpArr = file.name.split('.')
const fileSuffix = tmpArr[tmpArr.length - 1].toLowerCase()
if (!this.fileTypeList.some(t => t === fileSuffix)) {
this.$message.warning('图片格式必须是' + this.fileTypeList.join(','))
return false
}
}
},
handleChange(info) {
this.picUrl = false
+2 -1
View File
@@ -166,7 +166,8 @@ export default {
// update-begin author:wangshuai date:20200601 for: 退出登录跳转登录页面
that.$router.push({ path: '/user/login' })
// update-end author:wangshuai date:20200601 for: 退出登录跳转登录页面
//window.location.reload()
// 退出登录必须要刷新页面,否则会保留上一个用户的菜单权限
window.location.reload()
}).catch(err => {
that.$message.error({
title: '错误',
@@ -404,7 +404,7 @@
<template v-if="!isWasic">
<a-col :xxl="8" :xl="12" :sm="24">
<a-form-item label="会议费用" :labelCol="labelCol" :wrapperCol="{ xs: {span: 24},sm: {span: 16}}">
<!-- 起草组会议、功能安全中心会议费用默认0不可修改 -->
<!-- 起草组会议、海外会议、功能安全中心会议费用默认0不可修改 -->
<a-input placeholder="请输入会议费用"
:maxLength='50'
@change="(e) => {e.target.value = e.target.value.replace(/[^0-9.]/g,'')}"
@@ -813,7 +813,7 @@ export default {
return false
}
},
// 是否应用安全中心来的
// 是否功能安全中心来的
isSafetyCenterId() {
if (this.$route.query.safetyCenterId) {
return true
@@ -1215,7 +1215,8 @@ export default {
* 添加会议联系人
* */
addMeetingContacts(index) {
if (this.model.meetingContactsList.length >= 5) {
// 国际研讨会不限制5个会议联系人
if ((this.meetingType !== MeetingTypeEnums.internationalSeminar.value) && (this.model.meetingContactsList.length >= 5)) {
this.$message.warning('最多添加5个会议联系人')
return
}
@@ -1428,6 +1429,12 @@ export default {
add: '/meeting/draftGroupMeeting/add',
edit: '/meeting/draftGroupMeeting/edit'
}
// 海外会议
case MeetingTypeEnums.overseas.value:
return {
add: '/meeting/overseas/add',
edit: '/meeting/overseas/edit'
}
// 功能安全中心会议
case MeetingTypeEnums.safetyCenter.value:
return {
@@ -157,7 +157,8 @@
<label>报名二维码</label><img class="qr-code" :src="signUpQRCode" alt="报名二维码"/><i class="copy primary-color"
@click="copy(showSignUpHref)">复制</i>
</a-col>
<a-col :xxl="8" :xl="12" :sm="24">
<!--海外会议没有签到-->
<a-col :xxl="8" :xl="12" :sm="24" v-if="!isOverseasMeeting">
<label>签到二维码</label><img class="qr-code" :src="signInQRCode" alt="签到二维码"/>
<!-- <i class="copy primary-color" @click="copy(signInUrl)">复制</i>-->
</a-col>
@@ -174,7 +175,7 @@
<!-- 查询区域 -->
<div class="table-page-search-wrapper">
<a-form layout="inline" @keyup.enter.native="searchQuery">
<a-row :gutter="24">
<a-row :gutter="24" v-if="!isOverseasMeeting">
<a-col :xl="6" :lg="7" :md="8" :sm="24">
<a-form-item label="参会单位">
<a-input placeholder="请输入参会单位" v-model="queryParam.companyName" :maxLength='50'></a-input>
@@ -273,6 +274,56 @@
</span>
</a-col>
</a-row>
<!-- 海外会议 -->
<a-row :gutter="24" v-else>
<a-col :xl="6" :lg="7" :md="8" :sm="24">
<a-form-item label="姓名">
<a-input placeholder="请输入姓名" v-model="queryParam.name" :maxLength='50'></a-input>
</a-form-item>
</a-col>
<a-col :xl="6" :lg="7" :md="8" :sm="24">
<a-form-item label="性别">
<a-input placeholder="请输入性别" v-model="queryParam.sex" :maxLength='50'></a-input>
</a-form-item>
</a-col>
<a-col :xl="6" :lg="7" :md="8" :sm="24">
<a-form-item label="国籍">
<a-input placeholder="请输入国籍" v-model="queryParam.nationality" :maxLength='50'></a-input>
</a-form-item>
</a-col>
<a-col :xl="6" :lg="7" :md="8" :sm="24">
<a-form-item label="单位">
<a-input placeholder="请输入单位" v-model="queryParam.unit" :maxLength='50'></a-input>
</a-form-item>
</a-col>
<a-col :xl="6" :lg="7" :md="8" :sm="24">
<a-form-item label="职务">
<a-input placeholder="请输入职务" v-model="queryParam.post" :maxLength='50'></a-input>
</a-form-item>
</a-col>
<a-col :xl="6" :lg="7" :md="8" :sm="24">
<a-form-item label="地址">
<a-input placeholder="请输入地址" v-model="queryParam.address" :maxLength='50'></a-input>
</a-form-item>
</a-col>
<a-col :xl="6" :lg="7" :md="8" :sm="24">
<a-form-item label="邮箱">
<a-input placeholder="请输入邮箱" v-model="queryParam.email" :maxLength='50'></a-input>
</a-form-item>
</a-col>
<a-col :xl="6" :lg="7" :md="8" :sm="24">
<a-form-item label="联系电话">
<a-input placeholder="请输入联系电话" v-model="queryParam.phone" :maxLength='50'></a-input>
</a-form-item>
</a-col>
<a-col :xl="6" :lg="7" :md="8" :sm="24">
<span style="float: left;overflow: hidden;" class="table-page-search-submitButtons">
<a-button type="primary" @click="searchQuery" icon="search"
v-has:[authorCode.search]="'attendance:search'">查询</a-button>
<a-button @click="searchReset" icon="reload" class="reset-button" style="margin-left: 8px">重置</a-button>
</span>
</a-col>
</a-row>
</a-form>
</div>
<!-- 查询区域-END -->
@@ -572,6 +623,73 @@ export default {
scopedSlots: { customRender: 'action' }
}
],
// 海外会议表格
overseasMeetingColumns: [
{
title: '序号',
dataIndex: '',
key: 'rowIndex',
width: 60,
align: 'center',
customRender: function (t, r, index) {
return parseInt(index) + 1
}
},
{
title: '姓名',
align: 'center',
dataIndex: 'name',
width: 100
},
{
title: '性别',
align: 'center',
dataIndex: 'sex',
width: 100
},
{
title: '国籍',
align: 'center',
dataIndex: 'nationality',
width: 100
},
{
title: '单位',
align: 'center',
dataIndex: 'unit',
width: 200
},
{
title: '职务',
align: 'center',
dataIndex: 'post',
width: 200
},
{
title: '地址',
align: 'center',
dataIndex: 'address',
},
{
title: '邮箱',
align: 'center',
dataIndex: 'email',
width: 200
},
{
title: '联系电话',
align: 'center',
dataIndex: 'phone',
width: 120
},
{
title: '操作',
align: 'center',
fixed: 'right',
width: 300,
scopedSlots: { customRender: 'action' }
}
],
// 权限编码
authorCode: {},
// 其他会议的参会情况的权限编码
@@ -658,6 +776,18 @@ export default {
auditSignUpInfo: 'draftGroupMeetingSituation:auditSignUp',
guestsUploadFileFlag: 'draftGroupMeetingSituation:guestsUploadFileFlag'
},
// 海外会议的参会情况的权限编码
overseasMeetingCode: {
search: 'overseasMeetingSituation:search',
add: 'overseasMeetingSituation:add',
export: 'overseasMeetingSituation:export',
batchDel: 'overseasMeetingSituation:batchDel',
edit: 'overseasMeetingSituation:edit',
delete: 'overseasMeetingSituation:delete',
auditRecord: 'overseasMeetingSituation:auditCredentials',
auditSignUpInfo: 'overseasMeetingSituation:auditSignUp',
guestsUploadFileFlag: 'overseasMeetingSituation:guestsUploadFileFlag'
},
// 功能安全中心会议的参会情况的权限编码
safetyCenterMeetingCode: {
search: 'safetyCenterMeetingSituation:search',
@@ -734,6 +864,14 @@ export default {
exportXlsUrl: '/meeting/draftGroupMeetingSituation/exportXls',
importExcelUrl: '/meeting/draftGroupMeetingSituation/importExcel'
},
// 海外会议的url
overseasMeetingUrl: {
list: '/meeting/overseasSituation/page',
delete: '/meeting/overseasSituation/delete',
deleteBatch: '/meeting/overseasSituation/deleteBatch',
exportXlsUrl: '/meeting/overseasSituation/exportXls',
importExcelUrl: '/meeting/overseasSituation/importExcel'
},
// 功能安全中心会议的url
safetyCenterMeetingUrl: {
list: '/meeting/safetyCenterMeeting/page',
@@ -761,6 +899,10 @@ export default {
},
created() {
// console.log(this.$route,'this.$route this.$route')
// 海外会议处理表格
if (this.isOverseasMeeting) {
this.columns = this.overseasMeetingColumns
}
// 为不同会议的参会情况去设置不同的权限编码
this.setCodeByMeetingType(this.$route.query.meetingType)
// 获取会议详情
@@ -777,7 +919,9 @@ export default {
// 列表表头只有国际研讨会有对接人字段
if (this.currentMeetingInfo.meetingType !== '3') {
let index = this.columns.findIndex(item => item.dataIndex === 'dockName')
this.columns.splice(index, 1)
if (index !== -1) {
this.columns.splice(index, 1)
}
}
// 计算会议费用 会议费用为0 添加参会人不显示邮寄信息与缴费信息 标协会议
if (this.currentMeetingInfo.meetingType === '2' && this.currentMeetingInfo.meetingCostsVip) {
@@ -824,6 +968,10 @@ export default {
this.signInQRCode = await this.generateQRCode(this.signInUrl)
},
computed: {
// 是否海外会议
isOverseasMeeting () {
return this.$route.query.meetingType === MeetingTypeEnums.overseas.value
},
// 标协会议类型
tbMeetingType() {
if (this.currentMeetingInfo.tbMeetingType === '1') {
@@ -854,7 +1002,10 @@ export default {
return this.councilMeetingUrl
case '7':
return this.draftGroupMeetingUrl
// 安全中心会议
// 海外会议
case MeetingTypeEnums.overseas.value:
return this.overseasMeetingUrl
// 功能安全中心会议
case MeetingTypeEnums.safetyCenter.value:
return this.safetyCenterMeetingUrl
// 为了解决控制台报错写的
@@ -942,8 +1093,10 @@ export default {
if (this.selectedRowKeys && this.selectedRowKeys.length > 0) {
param['selections'] = this.selectedRowKeys.join(',')
}
// 增加特有的企业名称排序
param.column = 'companyName'
// 增加特有的企业名称排序,海外会议按创建时间
if (!this.isOverseasMeeting) {
param.column = 'companyName'
}
downloadFile(this.url.exportXlsUrl, fileName + '.xlsx', param)
},
/*
@@ -957,8 +1110,13 @@ export default {
* 添加参会人
* */
addParticipant() {
let path = '/incomePayments/meetManage/SignUpInfoEdit'
// 海外会议跳转另一个页面
if (this.isOverseasMeeting) {
path = '/incomePayments/meetManage/SignUpInfoEditOverseas'
}
this.$router.push({
path: '/incomePayments/meetManage/SignUpInfoEdit',
path,
query: {
meetingType: this.currentMeetingInfo.meetingType,
meetingId: this.$route.query.id,
@@ -970,8 +1128,13 @@ export default {
* 编辑参会人
* */
handleEdit(record) {
let path = '/incomePayments/meetManage/SignUpInfoEdit'
// 海外会议跳转另一个页面
if (this.isOverseasMeeting) {
path = '/incomePayments/meetManage/SignUpInfoEditOverseas'
}
this.$router.push({
path: '/incomePayments/meetManage/SignUpInfoEdit',
path,
query: {
id: record.id,
meetingId: this.$route.query.id,
@@ -1061,6 +1224,8 @@ export default {
return '理事会会议'
case '7':
return '起草组会议'
case MeetingTypeEnums.overseas.value:
return '海外会议'
// 功能安全中心会议
case MeetingTypeEnums.safetyCenter.value:
return MeetingTypeEnums.safetyCenter.name
@@ -1166,9 +1331,14 @@ export default {
case '7':
this.authorCode = Object.assign({}, this.draftGroupMeetingCode)
break
// 海外会议
case MeetingTypeEnums.overseas.value:
this.authorCode = Object.assign({}, this.overseasMeetingCode)
break
// 功能安全中心会议
case MeetingTypeEnums.safetyCenter.value:
this.authorCode = Object.assign({}, this.safetyCenterMeetingCode)
break
}
}
}
@@ -18,7 +18,7 @@
</a-form-item>
</a-col>
</a-row>
<a-row :gutter="24">
<a-row :gutter="24" type="flex">
<a-col :xxl="8" :xl="12" :sm="24">
<a-form-item label="姓名" :labelCol="labelCol" :wrapperCol="wrapperCol">
<select-contacts :selected-company="selectedCompany"
@@ -42,6 +42,15 @@
</a-form-item>
</a-col>
<!--国际研讨会-职务-->
<a-col :xxl="8" :xl="12" :sm="24" v-if="meetingType === MeetingTypeEnums.internationalSeminar.value ">
<a-form-item label="职务" :labelCol="labelCol" :wrapperCol="wrapperCol">
<a-input placeholder="请输入职务"
:maxLength='50'
v-decorator="['post',validatorRules.post]"></a-input>
</a-form-item>
</a-col>
<a-col :xxl="8" :xl="12" :sm="24">
<a-form-item label="身份" :labelCol="labelCol" :wrapperCol="wrapperCol">
<!--内部企业的时候不允许进行修改参会身份-->
@@ -144,7 +153,6 @@
</a-form-item>
</a-col>
</a-row>
<div class="center">
<a-button class="submit" type="primary" @click="handleOk" v-preventclick>确定</a-button>
<a-button @click="handleCancel">取消</a-button>
@@ -185,6 +193,7 @@ export default {
},
data() {
return {
MeetingTypeEnums,
description: '报名信息编辑页',
form: this.$form.createForm(this),
confirmLoading: false,
@@ -233,8 +242,11 @@ export default {
guestType:{
rules: [{required: true, message: '请选择嘉宾类型'}],
validateTrigger: 'change'
},
post: {
rules: [{required: true, message: '请输入职务'}],
validateTrigger: 'blur'
}
},
// 身份类型
identifyType: null,
@@ -289,6 +301,11 @@ export default {
add: '/meeting/draftGroupMeetingSituation/add',
edit:'/meeting/draftGroupMeetingSituation/edit'
},
// 海外会议的url
overseasMeetingUrl: {
add: '/meeting/overseasSituation/add',
edit: '/meeting/overseasSituation/edit'
},
// 功能安全中心会议的url
safetyCenterMeetingUrl: {
add: '/meeting/safetyCenterMeetingSituation/add',
@@ -345,6 +362,10 @@ export default {
return this.councilMeetingUrl
case '7':
return this.draftGroupMeetingUrl
// 海外会议
case MeetingTypeEnums.overseas.value:
return this.overseasMeetingUrl
// 功能安全中心会议
case MeetingTypeEnums.safetyCenter.value:
return this.safetyCenterMeetingUrl
}
@@ -0,0 +1,498 @@
<template>
<div>
<page-header-title :is-level-one="false" :level-two-title="title"></page-header-title>
<a-card :bordered="false">
<a-spin :spinning="confirmLoading">
<!-- 海外会议单独的表单 -->
<a-form :form="form">
<!-- 海外会议的表单 -->
<div class="item-title">个人信息</div>
<a-row :gutter="24">
<a-col :xxl="8" :xl="12" :sm="24">
<a-form-item label="照片" :labelCol="labelCol" :wrapperCol="wrapperCol">
<j-image-upload v-decorator="['photo',validatorRules.photo]" :return-id="true"
accept=".jpg,.jpeg,.png"
:file-type-list="['jpg', 'jpeg', 'png']"></j-image-upload>
</a-form-item>
</a-col>
</a-row>
<a-row :gutter="24">
<a-col :xxl="8" :xl="12" :sm="24">
<a-form-item label="姓名" :labelCol="labelCol" :wrapperCol="wrapperCol">
<a-input placeholder="请输入姓名"
:maxLength='50'
v-decorator="['name',validatorRules.name]"></a-input>
</a-form-item>
</a-col>
<a-col :xxl="8" :xl="12" :sm="24">
<a-form-item label="性别" :labelCol="labelCol" :wrapperCol="wrapperCol">
<a-input placeholder="请输入性别"
:maxLength='50'
v-decorator="['sex',validatorRules.sex]"></a-input>
</a-form-item>
</a-col>
<a-col :xxl="8" :xl="12" :sm="24">
<a-form-item label="国籍" :labelCol="labelCol" :wrapperCol="wrapperCol">
<a-input placeholder="请输入国籍"
:maxLength='50'
v-decorator="['nationality',validatorRules.nationality]"></a-input>
</a-form-item>
</a-col>
<a-col :xxl="8" :xl="12" :sm="24">
<a-form-item label="单位" :labelCol="labelCol" :wrapperCol="wrapperCol">
<a-input placeholder="请输入单位"
:maxLength='50'
v-decorator="['unit',validatorRules.unit]"></a-input>
</a-form-item>
</a-col>
<a-col :xxl="8" :xl="12" :sm="24" key="post">
<a-form-item label="职务" :labelCol="labelCol" :wrapperCol="wrapperCol">
<a-input placeholder="请输入职务"
:maxLength='50'
v-decorator="['post',validatorRules.post]"></a-input>
</a-form-item>
</a-col>
<a-col :xxl="8" :xl="12" :sm="24">
<a-form-item label="地址" :labelCol="labelCol" :wrapperCol="wrapperCol">
<a-input placeholder="请输入地址"
:maxLength='50'
v-decorator="['address',validatorRules.address]"></a-input>
</a-form-item>
</a-col>
<a-col :xxl="8" :xl="12" :sm="24">
<a-form-item label="邮箱" :labelCol="labelCol" :wrapperCol="wrapperCol">
<a-input placeholder="请输入邮箱"
:maxLength='50'
v-decorator="['email',validatorRules.email]"></a-input>
</a-form-item>
</a-col>
<a-col :xxl="8" :xl="12" :sm="24">
<a-form-item label="联系电话" :labelCol="labelCol" :wrapperCol="wrapperCol">
<a-input placeholder="请输入联系电话"
:maxLength='50'
v-decorator="['phone',validatorRules.phone]"></a-input>
</a-form-item>
</a-col>
<a-col :xxl="8" :xl="12" :sm="24">
<a-form-item label="是否需要签证" :labelCol="labelCol" :wrapperCol="wrapperCol">
<j-dict-select-tag v-decorator="['needVisa',validatorRules.needVisa]"
:triggerChange="true"
placeholder="请选择是否需要签证"
@change="changeNeedVisa"
type="radio"
dictCode="yn"/>
</a-form-item>
</a-col>
<template v-if="isNeedVisa">
<a-col :xxl="8" :xl="12" :sm="24">
<a-form-item label="出生日期" :labelCol="labelCol" :wrapperCol="wrapperCol">
<j-date placeholder="请选择出生日期" style="width: 100%;"
v-decorator="['birthday',validatorRules.birthday]"
:trigger-change="true"
show-type="day"
date-format="YYYY-MM-DD"/>
</a-form-item>
</a-col>
<a-col :xxl="8" :xl="12" :sm="24">
<a-form-item label="护照号码" :labelCol="labelCol" :wrapperCol="wrapperCol">
<a-input placeholder="请输入护照号码"
:maxLength='50'
v-decorator="['passportNo',validatorRules.passportNo]"></a-input>
</a-form-item>
</a-col>
<a-col :xxl="8" :xl="12" :sm="24">
<a-form-item label="入境日期" :labelCol="labelCol" :wrapperCol="wrapperCol">
<j-date placeholder="请选择入境日期" style="width: 100%;"
v-decorator="['entryDate',validatorRules.entryDate]"
:trigger-change="true"
show-type="day"
date-format="YYYY-MM-DD"/>
</a-form-item>
</a-col>
<a-col :xxl="8" :xl="12" :sm="24">
<a-form-item label="出境日期" :labelCol="labelCol" :wrapperCol="wrapperCol">
<j-date placeholder="请选择出境日期" style="width: 100%;"
v-decorator="['exitDate',validatorRules.exitDate]"
:trigger-change="true"
show-type="day"
date-format="YYYY-MM-DD"/>
</a-form-item>
</a-col>
<a-col :xxl="8" :xl="12" :sm="24">
<a-form-item label="办理签证使领馆" :labelCol="labelCol" :wrapperCol="wrapperCol">
<a-input placeholder="请输入办理签证使领馆"
:maxLength='50'
v-decorator="['embassiesAndConsulates',validatorRules.embassiesAndConsulates]"></a-input>
</a-form-item>
</a-col>
</template>
</a-row>
<div class="center">
<a-button class="submit" type="primary" @click="handleOk" v-preventclick>确定</a-button>
<a-button @click="handleCancel">取消</a-button>
</div>
</a-form>
</a-spin>
</a-card>
</div>
</template>
<script>
import {getMeetInfoById, getSingUpUserInfoOverseas} from '@api/incomeMeetingApi'
import {httpAction} from '@api/manage'
import PageHeaderTitle from '@comp/layouts/PageHeaderTitle'
import {LinkTopicsEnums, MeetingTypeEnums, YesOrNoEnums} from '../../../enums/commonEnums'
import JImageUpload from '@comp/jero/JImageUpload'
import JDate from '@comp/tools/JDate'
import {isEmail} from '@/utils/validate'
export default {
name: 'SignUpInfoEdit',
components: {
JDate,
JImageUpload,
PageHeaderTitle
},
data() {
return {
MeetingTypeEnums,
description: '海外会议报名信息编辑页',
form: this.$form.createForm(this),
confirmLoading: false,
model: {},
formData:{},
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: {
photo: {
rules: [{required: true, message: '请上传照片'}],
validateTrigger: 'change'
},
name: {
rules: [{required: true, message: '请输入姓名'}],
validateTrigger: 'blur'
},
post: {
rules: [{required: true, message: '请输入职务'}],
validateTrigger: 'blur'
},
unit: {
rules: [{required: true, message: '请输入单位'}],
validateTrigger: 'blur'
},
international: {
rules: [{required: true, message: '请输入国际'}],
validateTrigger: 'blur'
},
address: {
rules: [{required: true, message: '请输入地址'}],
validateTrigger: 'blur'
},
email: {
rules: [{ required: true, validator: this.checkMail }],
validateTrigger: 'blur'
},
phone: {
rules: [{required: true, message: '请输入联系电话'}],
validateTrigger: 'blur'
},
needVisa: {
rules: [{required: true, message: '请选择是否需要签证'}],
validateTrigger: 'change'
},
foreignName: {
rules: [{required: true, message: '请输入外文姓名'}],
validateTrigger: 'blur'
},
sex: {
rules: [{required: true, message: '请输入性别'}],
validateTrigger: 'blur'
},
birthday: {
rules: [{required: true, message: '请选择出生日期'}],
validateTrigger: 'change'
},
nationality: {
rules: [{required: true, message: '请输入国籍'}],
validateTrigger: 'blur'
},
passportNo: {
rules: [{required: true, message: '请输入护照号码'}],
validateTrigger: 'blur'
},
entryDate: {
rules: [{required: true, message: '请选择入境日期'}],
validateTrigger: 'change'
},
exitDate: {
rules: [{required: true, message: '请选择出境日期'}],
validateTrigger: 'change'
},
embassiesAndConsulates: {
rules: [{required: true, message: '请输入办理签证使领馆'}],
validateTrigger: 'blur'
}
},
// 会议类型
meetingType: '',
// 当前会议的信息
currentMeetingInfo:{},
url:{
add: '/meeting/overseasSituation/add',
edit: '/meeting/overseasSituation/edit'
},
title:'添加参会人',
// 是否需要签证
isNeedVisa: false
}
},
created() {
this.meetingType = this.$route.query.meetingType
// 参会情况页面判断的是否会议费用为0 true 为0
if(this.$route.query.costBool === 'true'){
this.meetingCostBool = true
}else if(this.$route.query.costBool === 'false'){
this.meetingCostBool = false
}
if(this.$route.query.id){
getSingUpUserInfoOverseas({id: this.$route.query.id}).then(res => {
if(res.success) {
this.edit(res.result)
}
})
}
//获取 会议信息
if(this.$route.query.meetingId){
this.queryMeetingInfo(this.$route.query.meetingId)
}
},
computed:{
// 是否海外会议,报名信息调整
isOverseasMeeting () {
return this.meetingType + '' === MeetingTypeEnums.overseas.value
},
// eslint-disable-next-line
url() {
switch (this.$route.query.meetingType) {
case '1':
return this.workGroupMeetingUrl
case '2':
return this.standardsMeetingUrl
case '3':
return this.internalMeetingUrl
case '4':
return this.otherMeetingUrl
case '5':
return this.committeeMeetingUrl
case '6':
return this.councilMeetingUrl
case '7':
return this.draftGroupMeetingUrl
// 海外会议
case MeetingTypeEnums.overseas.value:
return this.overseasMeetingUrl
}
},
},
methods: {
// 是否需要签证改变
changeNeedVisa (val) {
if (val + '' === YesOrNoEnums.yes.value) {
this.isNeedVisa = true
} else {
this.isNeedVisa = false
}
},
// 验证选择会议名称的情况
checkChoiceTopic(rules, value, callback) {
console.log(value)
let arr = []
if (value && value.length > 0) {
arr = [...value]
}
let radioKey = this.form.getFieldValue('radioKey')
let radioKeyTwo = this.form.getFieldValue('radioKeyTwo')
if(radioKey || radioKeyTwo) {
callback()
} else {
arr = arr.filter(tt => tt !== LinkTopicsEnums.freeTwo.index + '')
if(arr.length === 0) {
callback('请至少选择一个非参观类会议')
} else {
callback()
}
}
},
/*
* 编辑
* */
async edit(record){
this.form.resetFields()
this.model = Object.assign({},record)
if(this.model.id){
this.title = '编辑参会人'
}
// 海外会议回显单独处理
this.changeNeedVisa(this.model.needVisa)
this.$nextTick(() => {
this.form.setFieldsValue(this.model)
})
},
/*
* 确定
* */
handleOk() {
const that = this
this.form.validateFields((err, values) => {
if (!err) {
this.confirmLoading = true
let submitData = Object.assign({},values,this.formData)
// 会议id
submitData.meetingId = this.$route.query.meetingId
// 会议类型
submitData.meetingType = this.$route.query.meetingType
console.log(submitData)
let url = ''
if(!this.model.id){
url = this.url.add
}else {
url = this.url.edit
// 编辑的时候需要传入id
submitData.id = this.model.id
}
// that.confirmLoading = false
// return
let method = 'post'
httpAction(url,submitData,method).then(res => {
if(res.success){
that.$emit('ok')
that.handleCancel()
that.$message.success(res.message)
that.confirmLoading = false
}else {
that.$message.warn(res.message)
}
}).finally( () => {
that.confirmLoading = false
})
}
})
},
/*
* 获取表单的值
* */
getFormData(value){
this.formData = Object.assign({},value)
},
/*
* 取消
* */
handleCancel() {
this.$router.go(-1)
},
/**
* @Description 通过会议id获取会议信息
* @Date 2021-11-29
* @param meetingId 会议id
* @author fac
* */
queryMeetingInfo(meetingId){
this.currentMeetingInfo = {}
getMeetInfoById({id: meetingId}).then(res => {
if(res.success){
this.currentMeetingInfo = res.result
}
})
},
/**
* 邮箱校验
* @param rules
* @param value
* @param callback
*/
checkMail(rules, value, callback) {
if (value) {
if (isEmail(value)) {
callback()
} else {
callback('请输入正确格式的邮箱')
}
}
callback('请输入邮箱')
},
}
}
</script>
<style scoped lang="less">
@import '~@assets/less/common.less';
.center {
text-align: center;
.submit {
margin-right: 8px;
}
}
.item-title {
padding-left: 40px;
box-sizing: border-box;
height: 46px;
line-height: 46px;
color: #333;
position: relative;
font-size: 16px;
&::before {
position: absolute;
content: "";
width: 10px;
height: 10px;
border-radius: 50%;
background: #069f99;
top: 50%;
margin-top: -5px;
left: 15px;
}
}
// 国际研讨会-关联会议 多选样式的修改
.meeting-form-multi-select{
.topic-title{
padding: 10px 0;
}
/deep/.ant-checkbox-wrapper + .ant-checkbox-wrapper {
margin-left: 0!important;
}
/deep/ .ant-checkbox-wrapper,
/deep/ .ant-radio-wrapper{
margin-right: 8px;
display: block;
}
}
.radio-div{
border-top: 1px solid rgba(0, 0, 0, 0.2);
padding-top: 10px;
margin-top: 10px;
}
</style>
@@ -209,6 +209,12 @@ export default {
uploadFile: '/meeting/draftGroupMeeting/uploadFile',
uploadCouncilFile: '/meeting/draftGroupMeeting/uploadCouncilFile',
}
// 海外会议
case MeetingTypeEnums.overseas.value:
return {
uploadFile: '/meeting/overseas/uploadFile',
uploadCouncilFile: '/meeting/overseas/uploadCouncilFile',
}
// 安全中心会议
case MeetingTypeEnums.safetyCenter.value:
return {
@@ -297,6 +297,8 @@ export default {
pathMap.set('5','/incomePayments/meetManage/AttendanceCommitteeMeeting')
pathMap.set('6','/incomePayments/meetManage/AttendanceCouncilMeeting')
pathMap.set('7','/incomePayments/meetManage/AttendanceDraftGroupMeeting')
// 海外会议
pathMap.set(MeetingTypeEnums.overseas.value,'/incomePayments/meetManage/AttendanceOverseasMeeting')
// 功能安全中心会议
pathMap.set(MeetingTypeEnums.safetyCenter.value,'/incomePayments/meetManage/AttendanceFunctionalSafetyCenter')
this.$router.push({
@@ -0,0 +1,328 @@
<template>
<div>
<page-header-title :img-for-icon="IconImg"></page-header-title>
<a-card :bordered="false">
<!-- 查询区域 -->
<div class="table-page-search-wrapper">
<a-form layout="inline" @keyup.enter.native="searchQuery">
<a-row :gutter="24">
<a-col :xl="6" :lg="7" :md="8" :sm="24">
<a-form-item label="会议名称">
<a-input placeholder="请输入会议名称" v-model="queryParam.meetingName" :maxLength='50'></a-input>
</a-form-item>
</a-col>
<a-col :xl="10" :lg="11" :md="12" :sm="24">
<a-form-item label="会议时间">
<j-date
placeholder="请选择开始日期"
class="query-group-cust"
v-model="queryParam.meetingStartTime"
:disabled-date="disabledStartDate">
</j-date>
<span class="query-group-split-cust"></span>
<j-date
placeholder="请选择结束日期"
class="query-group-cust"
v-model="queryParam.meetingEndTime"
:disabled-date="disabledEndDate">
</j-date>
</a-form-item>
</a-col>
<a-col :xl="6" :lg="7" :md="8" :sm="24">
<a-form-item label="年份">
<j-year-date style="width: 100%" placeholder="请选择年份" v-model="queryParam.particularYear"></j-year-date>
</a-form-item>
</a-col>
<a-col :xl="10" :lg="11" :md="12" :sm="24">
<a-form-item label="创建时间">
<j-date
placeholder="请选择开始日期"
class="query-group-cust"
v-model="queryParam.createTime_begin"
:disabled-date="disabledStartCreateDate">
</j-date>
<span class="query-group-split-cust"></span>
<j-date
placeholder="请选择结束日期"
class="query-group-cust"
v-model="queryParam.createTime_end"
:disabled-date="disabledEndCreateDate">
</j-date>
</a-form-item>
</a-col>
<a-col :xl="6" :lg="7" :md="8" :sm="24">
<span style="float: left;overflow: hidden;" class="table-page-search-submitButtons">
<a-button type="primary" @click="searchQuery" icon="search" v-has="'overseasMeeting:search'">查询</a-button>
<a-button @click="searchReset" icon="reload" class="reset-button" style="margin-left: 8px">重置</a-button>
</span>
</a-col>
</a-row>
</a-form>
</div>
<!-- 查询区域-END -->
<!-- 操作按钮区域 -->
<div class="table-operator">
<a-button @click="handleAdd" type="primary" icon="plus" v-has="'overseasMeeting:add'">新增</a-button>
<a-button type="primary" icon="download" @click="handleExportXls('海外会议')" v-has="'overseasMeeting:export'">导出
</a-button>
<a-button type="danger" icon="delete" @click="batchDel" v-has="'overseasMeeting:batchDel'">批量删除</a-button>
<!--<a-button @click="releaseMeeing" type="primary" v-has="'overseasMeeting:publish'">发布</a-button>-->
</div>
<!-- table区域-begin -->
<div>
<a-table
ref="table"
size="middle"
bordered
rowKey="id"
:scroll="{x:true}"
:columns="columns"
:dataSource="dataSource"
:pagination="ipagination"
:loading="loading"
:rowSelection="{selectedRowKeys: selectedRowKeys, onChange: onSelectChange}"
class="j-table-force-nowrap"
@change="handleTableChange">
<template slot="htmlSlot" slot-scope="text,record">
<j-ellipsis v-if="text" class="primary-color" @click="toAttendance(record)" :value="text"
:length="20"></j-ellipsis>
<span v-else></span>
</template>
<template slot="text" slot-scope="text">
<j-ellipsis v-if="text" :value="text" :length="20"></j-ellipsis>
<span v-else></span>
</template>
<span slot="action" slot-scope="text, record" class="action-span-cell">
<!--会议需要发布才能让企业人员看见 已发布状态禁用按钮 -->
<!--调整为页面级按钮-->
<!-- <a @click="releaseMeeing(record)" v-has=" '' " :disabled="record.isRelease === 1 ">发布</a>-->
<a @click="handleUploadFile(record,'1')" v-has="'overseasMeeting:uploadCouncil'">会议纪要</a>
<a @click="handleUploadFile(record,'2')" v-has="'overseasMeeting:upload'">上传文件</a>
<!-- <a @click="handleSignup(record)">报名信息</a>-->
<a @click="handleEdit(record)" v-has="'overseasMeeting:edit'">编辑</a>
<a @click="handleDelete(record.id)" v-has="'overseasMeeting:delete'">删除</a>
</span>
</a-table>
</div>
<!-- <meet-modal ref="modalForm" @ok="modalFormOk"></meet-modal>-->
<upload-meet-file-modal ref="modalForm" @ok="modalFormOk"></upload-meet-file-modal>
</a-card>
</div>
</template>
<script>
import {mixinDevice} from '@/utils/mixin'
import {JeroListMixin} from '@/mixins/JeroListMixin'
import {RangeDateMixin} from '@/mixins/RangeDateMixin'
import JYearDate from '@comp/jero/JYearDate'
import UploadMeetFileModal from '@views/incomePayments/meetManage/modules/UploadMeetFileModal'
import PageHeaderTitle from '@comp/layouts/PageHeaderTitle'
import IconImg from '@/assets/imgs/icon/icon_other_meeting.png'
import '@/assets/less/TableExpand.less'
import JDate from '@comp/tools/JDate'
import moment from 'moment'
import {MeetingTypeEnums} from '@/enums/commonEnums'
export default {
name: 'OverseasMeeting',
mixins: [JeroListMixin, mixinDevice, RangeDateMixin],
components: {
JYearDate,
UploadMeetFileModal,
PageHeaderTitle,
JDate,
},
data() {
return {
description: '海外会议',
IconImg,
columns: [
{
title: '序号',
dataIndex: '',
key: 'rowIndex',
width: 60,
align: 'center',
customRender: function (t, r, index) {
return parseInt(index) + 1
}
},
{
title: '会议名称',
align: 'center',
dataIndex: 'meetingName',
scopedSlots: {customRender: 'htmlSlot'},
width: 220,
},
{
title: '会议类型',
align: 'center',
dataIndex: 'meetingType_dictText',
width: 120,
scopedSlots: {customRender: 'text'}
},
{
title: '负责人',
align: 'center',
dataIndex: 'directorName',
width: 160,
scopedSlots: {customRender: 'text'},
},
{
title: '召开时间',
align: 'center',
dataIndex: 'startTime',
width: 220,
customRender: (text, record) => (
<j-ellipsis value={record.startTime + '~' + record.endTime} length={20}></j-ellipsis>)
},
{
title: '召开地点',
align: 'center',
dataIndex: 'venue',
width: 240,
customRender: (text, record) => (<j-ellipsis value={text + '/' + record.address} length={20}></j-ellipsis>)
},
{
title: '年份',
align: 'center',
dataIndex: 'particularYear',
width: 120,
scopedSlots: {customRender: 'text'}
},
{
title: '创建时间',
align: 'center',
dataIndex: 'createTime',
scopedSlots: {customRender: 'text'}
},
{
title: '操作',
align: 'center',
fixed: 'right',
width: 180,
scopedSlots: {customRender: 'action'}
},
],
dateKeyObj: {
beginKey: 'meetingStartTime',
endKey: 'meetingEndTime'
},
url: {
list: '/meeting/overseas/page',
delete: '/meeting/overseas/delete',
deleteBatch: '/meeting/overseas/deleteBatch',
exportXlsUrl: '/meeting/overseas/exportXls',
releaseMeeingUrl: '/meeting/overseas/publishReminder'// 发布会议的接口
},
disableMixinCreated: true
}
},
created() {
this.filters.meetingType = MeetingTypeEnums.overseas.value
this.loadData(1)
},
methods: {
/*
* 上传会议文件
* */
handleUploadFile(record, type) {
this.$refs.modalForm.edit(record, type)
},
/*
* 报名信息
* */
handleSignup() {
this.$router.push({
path: '/incomePayments/meetManage/SignUpInfoList'
})
},
/*
* 修改查询条件
* */
searchQuery() {
// this.queryParam.meetingStartTime = this.queryParam.meetingStartTime ? this.queryParam.meetingStartTime + ' ' + '00:00:00' : undefined
// this.queryParam.meetingEndTime = this.queryParam.meetingEndTime ? this.queryParam.meetingEndTime + ' ' + '23:59:59' : undefined
// this.queryParam.createTime_begin = this.queryParam.createTime_begin ? this.queryParam.createTime_begin + ' ' + '00:00:00' : undefined
// this.queryParam.createTime_end = this.queryParam.createTime_end ? this.queryParam.createTime_end + ' ' + '23:59:59' : undefined
this.lastQueryParam = {...this.queryParam}
if(this.lastQueryParam.meetingStartTime) this.lastQueryParam.meetingStartTime = this.lastQueryParam.meetingStartTime + ' ' + '00:00:00'
if(this.lastQueryParam.meetingEndTime) this.lastQueryParam.meetingEndTime = this.lastQueryParam.meetingEndTime + ' ' + '23:59:59'
if(this.lastQueryParam.createTime_begin) this.lastQueryParam.createTime_begin = this.lastQueryParam.createTime_begin + ' ' + '00:00:00'
if(this.lastQueryParam.createTime_end) this.lastQueryParam.createTime_end = this.lastQueryParam.createTime_end + ' ' + '23:59:59'
this.loadData(1)
},
/*
* 编辑
* /incomePayments/meetManage/AddOrDetailMeet
* */
handleEdit(record) {
this.$router.push({
path: '/incomePayments/meetManage/AddOrDetailMeet',
query: {
id: record.id,
}
})
},
/*
* 新增
* */
handleAdd() {
this.$router.push({
path: '/incomePayments/meetManage/AddOrDetailMeet',
query: {
meetingType: MeetingTypeEnums.overseas.value
}
})
},
/*
* 参会情况
* */
toAttendance(record) {
this.$router.push({
path: '/incomePayments/meetManage/AttendanceOverseasMeeting',
query: {
id: record.id,
meetingName: record.meetingName,
meetingType: MeetingTypeEnums.overseas.value
}
})
},
/*
* 创建时间开始禁用
* */
disabledStartCreateDate(startValue) {
const endValue = this.queryParam.createTime_end && moment(this.queryParam.createTime_end, this.rangeDateFormat.end)
if (!startValue || !endValue) {
return false
}
return startValue.valueOf() > endValue.valueOf()
},
/*
* 创建时间结束禁用
* */
disabledEndCreateDate(endValue) {
const startValue = this.queryParam.createTime_begin && moment(this.queryParam.createTime_begin, this.rangeDateFormat.begin)
if (!endValue || !startValue) {
return false
}
return startValue.valueOf() > endValue.valueOf()
},
}
}
</script>
<style scoped lang="less">
@import '~@assets/less/common.less';
.primary-color {
color: #069f99;
cursor: pointer;
}
</style>