Merge remote-tracking branch 'origin/branch20211008'

This commit is contained in:
fengachen
2021-10-26 09:07:52 +08:00
55 changed files with 1464 additions and 615 deletions
+1 -1
View File
@@ -13,7 +13,7 @@ window._CONFIG["casPrefixUrl"] = "http://cas.example.org:8443/cas";
window._CONFIG["onlinePreviewDomainURL"] = "http://localhost:8012/onlinePreview";
// 会议管理报名二维码地址
window._CONFIG['singUpQRCodeURL'] = 'http://10.0.1.27:21825/signUpEntrance'
window._CONFIG['singUpQRCodeURL'] = 'http://localhost:3000/signUpEntrance'
// 签到二维码url
window._CONFIG['signInUrl'] = '/meeting/payMeetingSituation/getSignInPage'
+14 -6
View File
@@ -1,24 +1,28 @@
<!--进度组件-->
<template>
<div>
<!-- 三项非全0-->
<div class="progress" v-if="(data.allPayment + data.partPayment + data.notPayment) !== 0">
<!-- 将全部付款和部分付款放入一个div中-->
<div class="full-and-partial"
:style="{width: (data.allPayment + data.partPayment)/(data.allPayment + data.partPayment + data.notPayment) * 100 + '%'}">
<!-- 全部付款-->
<div :style="{width: data.allPayment/(data.allPayment + data.partPayment) * 100 + '%'}"
class="progress-item pay-in-full">
class="progress-item pay-in-full" v-if="data.allPayment !== 0">
{{ data.allPayment }}
</div>
<!-- 部分付款-->
<div :style="{width: data.partPayment/(data.allPayment + data.partPayment) * 100 + '%'}"
class="progress-item partial-payment">
class="progress-item partial-payment" v-if="data.partPayment !== 0">
{{ data.partPayment }}
</div>
</div>
<div :style="{width: data.notPayment/(data.allPayment + data.partPayment + data.notPayment) * 100 + '%'}"
class="progress-item non-payment">
class="progress-item non-payment" v-if="data.notPayment !== 0">
{{ data.notPayment }}
</div>
</div>
<!-- 三项均为0-->
<div class="progress progress-null" v-else>0</div>
</div>
</template>
@@ -60,8 +64,12 @@ export default {
}
}
.no-display {
display: none;
}
.full-and-partial {
background: linear-gradient(0deg,#0075a9 0%, #008dcc 100%);
background: linear-gradient(0deg, #0075a9 0%, #008dcc 100%);
display: flex;
border-radius: 10px;
box-sizing: border-box;
@@ -77,11 +85,11 @@ export default {
}
.pay-in-full {
background: linear-gradient(0deg,#069f99 0%, #07b1aa 100%);
background: linear-gradient(0deg, #069f99 0%, #07b1aa 100%);
}
.partial-payment {
background: linear-gradient(0deg,#0075a9 0%, #008dcc 100%);
background: linear-gradient(0deg, #0075a9 0%, #008dcc 100%);
}
.non-payment {
+1 -1
View File
@@ -2,7 +2,7 @@
<div class="company-select">
<a-row>
<a-col :span="20">
<a-input @click="chooseBusiness" :value="value[valueKey]" v-bind="$attrs" :readOnly="true"></a-input>
<a-input @click="chooseBusiness" :value="value[valueKey]" v-bind="$attrs" :readOnly="true" unselectable="on"></a-input>
</a-col>
<a-col :span="4" class="form-btn" v-if="canAdd">
<a-button v-bind="$attrs" icon="plus" @click="addCompany"></a-button>
+5 -3
View File
@@ -6,7 +6,9 @@
allowClear
option-filter-prop="children"
:filter-option="filterOption">
<a-select-option v-for="item in userList" :key="item.id" :value="item.id">{{ `${item.realname}(${item.orgCodeTxt})` }}</a-select-option>
<a-select-option v-for="item in userList" :key="item.id" :value="item.id">
{{ `${ item.realname }(${ item.orgCodeTxt })` }}
</a-select-option>
</a-select>
</template>
@@ -36,7 +38,7 @@ export default {
* 获取所有用户
*/
initUserList() {
getAllUserList({status:1}).then(res => {
getAllUserList().then(res => {
this.userList = res.result
})
},
@@ -44,7 +46,7 @@ export default {
filterOption(input, option) {
console.log(option)
return (
option.componentOptions.children[0].text.toLowerCase().indexOf(input.toLowerCase()) >= 0
option.componentOptions.children[0].text.toLowerCase().indexOf(input.toLowerCase()) >= 0
)
}
},
+13 -6
View File
@@ -12,7 +12,7 @@
</a-form-item>
</a-col>
<a-col :xxl="4" :xl="8" :sm="12">
<a-form-item :label="`${index + 1}阶段应`" :labelCol="labelCol" :wrapperCol="wrapperCol">
<a-form-item :label="`${index + 1}阶段应${label}`" :labelCol="labelCol" :wrapperCol="wrapperCol">
<a-input placeholder="请输入金额"
v-decorator="['installmentList['+index+'].accountsReceivableAmount',validatorRules.accountsReceivableAmount]"
:maxLength='50'
@@ -22,8 +22,8 @@
</a-form-item>
</a-col>
<a-col :xxl="5" :xl="8" :sm="12">
<a-form-item :label="`${index + 1}阶段应时间`" :labelCol="labelCol" :wrapperCol="wrapperCol">
<j-date placeholder="请选择应时间"
<a-form-item :label="`${index + 1}阶段应${label}时间`" :labelCol="labelCol" :wrapperCol="wrapperCol">
<j-date :placeholder="`请选择应${label}时间`"
style="width: 100%;"
v-decorator="['installmentList['+index+'].accountsReceivableTime']"
:trigger-change="true"
@@ -32,7 +32,7 @@
</a-form-item>
</a-col>
<a-col :xxl="4" :xl="8" :sm="12">
<a-form-item :label="`${index + 1}阶段实`" :labelCol="labelCol" :wrapperCol="wrapperCol">
<a-form-item :label="`${index + 1}阶段实${label}`" :labelCol="labelCol" :wrapperCol="wrapperCol">
<a-input placeholder="请输入金额"
v-decorator="['installmentList['+index+'].paidAmount',validatorRules.paidAmount]"
:maxLength='50'
@@ -42,8 +42,8 @@
</a-form-item>
</a-col>
<a-col :xxl="5" :xl="8" :sm="12">
<a-form-item :label="`${index + 1}阶段实时间`" :labelCol="labelCol" :wrapperCol="wrapperCol">
<j-date placeholder="请选择实时间"
<a-form-item :label="`${index + 1}阶段实${label}时间`" :labelCol="labelCol" :wrapperCol="wrapperCol">
<j-date :placeholder="`请选择实${label}时间`"
style="width: 100%;"
v-decorator="['installmentList['+index+'].paidTime',validatorRules.paidTime]"
:trigger-change="true"
@@ -72,6 +72,13 @@ import { money } from '../../utils/validate'
export default {
name: 'InstallmentForm',
components: { JDate },
props: {
label: {
type: String,
required: false,
default: '收'
}
},
data() {
return {
form: this.$form.createForm(this),
+18 -3
View File
@@ -2,6 +2,7 @@
<div v-if="!reloading" class="j-area-linkage">
<!--area-cascader level-0二级联动 1-三级联动-->
<area-cascader
style="border-color: red"
v-if="_type === enums.type[0]"
:value="innerValue"
:data="pca"
@@ -9,7 +10,7 @@
v-bind="$attrs"
v-on="_listeners"
@change="handleChange"
:class="isActive ? 'placeholderBlack' : 'placeholderGray'"
:class="{'placeholderBlack':isActive,'placeholderGray':!isActive,'has-error':hasError}"
/>
<!--area-select level-1二级联动 2-三级联动-->
<area-select
@@ -19,7 +20,7 @@
v-bind="$attrs"
v-on="_listeners"
@change="handleChange"
:class="isActive ? 'placeholderBlack' : 'placeholderGray'"
:class="{'placeholderBlack':isActive,'placeholderGray':!isActive,'has-error':hasError}"
/>
<div v-else>
<span style="color:red;"> Bad type value: {{_type}}</span>
@@ -36,7 +37,13 @@ export default {
props: {
value: {
type: String,
required: false
required: false,
},
// 表单是否必填控制
hasError:{
type:Boolean,
required: false,
default:false
},
// 组件的类型,可选值:
// select 下拉样式
@@ -160,6 +167,14 @@ export default {
}
/deep/ .area-cascader-wrap .area-select:hover {
border-color: #069f99;;
}
/deep/ .has-error .area-select {
border-color: #f5222d!important;
}
///deep/.placeholderBlack .area-cascader-wrap .area-select.active {
// color: #333 !important;
//}
+3 -1
View File
@@ -80,7 +80,9 @@
}
},
created() {
if (this.$route.path != indexKey) {
// if (this.$route.path != indexKey) {
// 在当前页面不是首页 并且有首页权限的时候,把首页增加到面板的第一位
if (this.$route.path !== indexKey && this.$store.state.user.permissionList.find(item => item.component === 'dashboard/Analysis')) {
this.addIndexToFirst()
}
// 复制一个route对象出来,不能影响原route
+2 -2
View File
@@ -61,8 +61,8 @@
overflow: auto;
.container {
width: 100%;
min-width: 1366px;
min-height: 768px;
min-width: 1300px;
min-height: 600px;
height: 100%;
overflow: hidden;
position: relative;
+1 -1
View File
@@ -356,7 +356,7 @@ body {
}
.anticon {
color: inherit;
color: #FFFFFF;
}
}
}
+31 -27
View File
@@ -7,35 +7,39 @@
</component>
</template>
<script>
export default {
name: 'DynamicNotice',
data () {
return {
compName: this.path
export default {
name: 'DynamicNotice',
data() {
return {
compName: this.path
}
},
computed: {
comp: function () {
if (!this.path) {
return null
}
},
computed: {
comp: function () {
if(!this.path){
return null
// this.path中的@comp字符串会拼接组件路径为@/components@comp导致控制台报错
let path = this.path.replace('@comp', '')
// @views/incomePayments重复导致找不到组件
path = path.replace('@views/incomePayments', '')
// 这么写 是因未用数据库的路径拿不到 组件 实例
if (path && path.includes('AuditModal')) {
return resolve => require([`@views/incomePayments${ path }.vue`], resolve)
} else {
return resolve => require([`@/components${ path }.vue`], resolve)
}
}
},
props: ['path', 'formData'],
methods: {
detail() {
setTimeout(() => {
if (this.path) {
this.$refs.compModel.open(this.formData)
}
// 这么写 是因未用数据库的路径拿不到 组件 实例
if(this.path && this.path.includes('AuditModal')){
return resolve => require([`@views/incomePayments${this.path}.vue`], resolve)
}else {
return resolve => require([`@/components${this.path}.vue`], resolve)
}
}
},
props: ['path','formData'],
methods: {
detail () {
setTimeout(() => {
if(this.path){
this.$refs.compModel.open(this.formData)
}
}, 200)
},
}, 200)
}
}
}
</script>
+4 -4
View File
@@ -70,12 +70,12 @@ export default {
validatorRules: {
oldpassword: {
rules: [{
required: true, message: '请输入旧密码!'
required: true, message: '请输入旧密码'
}]
},
password: {
rules: [
{ required: true, message: '请输入新密码!' },
{ required: true, message: '请输入新密码' },
{
//原正则,3种组合时不会提示 /^(?=.*[a-zA-Z])(?=.*\d)(?=.*[~!@#$%^&*()_+`\-={}:";'<>?,./]).{8,}$/
pattern: /^(?=.*[a-z])(?=.*[A-Z])(?=.*\d)(?=.*[~!@#$%^&*()_+`\-={}:";'<>?,./]).{8,30}$/,
@@ -186,14 +186,14 @@ export default {
callback(new Error('两次密码不一致'))
}
if (value && !passwordReg(value)) {
callback('密码由8位及以上数字、大小写字母和特殊符号组成')
callback('密码由8位及以上数字、大小写字母和特殊符号组成')
}
callback()
},
compareToFirstPassword(rule, value, callback) {
const form = this.form
if (value && value !== form.getFieldValue('password')) {
callback('两次输入的密码不一样!')
callback('两次密码不一')
} else {
callback()
}
+21 -21
View File
@@ -1,26 +1,26 @@
export const ACCESS_TOKEN = 'Access-Token'
export const SIDEBAR_TYPE = 'SIDEBAR_TYPE'
export const DEFAULT_THEME = 'DEFAULT_THEME'
export const DEFAULT_LAYOUT_MODE = 'DEFAULT_LAYOUT_MODE'
export const DEFAULT_COLOR = 'DEFAULT_COLOR'
export const DEFAULT_COLOR_WEAK = 'DEFAULT_COLOR_WEAK'
export const DEFAULT_FIXED_HEADER = 'DEFAULT_FIXED_HEADER'
export const DEFAULT_FIXED_SIDEMENU= 'DEFAULT_FIXED_SIDEMENU'
export const DEFAULT_FIXED_HEADER_HIDDEN = 'DEFAULT_FIXED_HEADER_HIDDEN'
export const DEFAULT_CONTENT_WIDTH_TYPE = 'DEFAULT_CONTENT_WIDTH_TYPE'
export const DEFAULT_MULTI_PAGE = 'DEFAULT_MULTI_PAGE'
export const USER_NAME = 'Login_Username'
export const USER_INFO = 'Login_Userinfo'
export const USER_AUTH = 'LOGIN_USER_BUTTON_AUTH'
export const SYS_BUTTON_AUTH = 'SYS_BUTTON_AUTH'
export const ENCRYPTED_STRING = 'ENCRYPTED_STRING'
export const ENHANCE_PRE = 'enhance_'
export const UI_CACHE_DB_DICT_DATA = 'UI_CACHE_DB_DICT_DATA'
export const ACCESS_TOKEN = 'Income-Management-Access-Token'
export const SIDEBAR_TYPE = 'INCOME_MANAGEMENT_SIDEBAR_TYPE'
export const DEFAULT_THEME = 'INCOME_MANAGEMENT_DEFAULT_THEME'
export const DEFAULT_LAYOUT_MODE = 'INCOME_MANAGEMENT_DEFAULT_LAYOUT_MODE'
export const DEFAULT_COLOR = 'INCOME_MANAGEMENT_DEFAULT_COLOR'
export const DEFAULT_COLOR_WEAK = 'INCOME_MANAGEMENT_DEFAULT_COLOR_WEAK'
export const DEFAULT_FIXED_HEADER = 'INCOME_MANAGEMENT_DEFAULT_FIXED_HEADER'
export const DEFAULT_FIXED_SIDEMENU= 'INCOME_MANAGEMENT_DEFAULT_FIXED_SIDEMENU'
export const DEFAULT_FIXED_HEADER_HIDDEN = 'INCOME_MANAGEMENT_DEFAULT_FIXED_HEADER_HIDDEN'
export const DEFAULT_CONTENT_WIDTH_TYPE = 'INCOME_MANAGEMENT_DEFAULT_CONTENT_WIDTH_TYPE'
export const DEFAULT_MULTI_PAGE = 'INCOME_MANAGEMENT_DEFAULT_MULTI_PAGE'
export const USER_NAME = 'Income_Management_Login_Username'
export const USER_INFO = 'Income_Management_Login_Userinfo'
export const USER_AUTH = 'INCOME_MANAGEMENT_LOGIN_USER_BUTTON_AUTH'
export const SYS_BUTTON_AUTH = 'INCOME_MANAGEMENT_SYS_BUTTON_AUTH'
export const ENCRYPTED_STRING = 'INCOME_MANAGEMENT_ENCRYPTED_STRING'
export const ENHANCE_PRE = 'Income_Management_enhance_'
export const UI_CACHE_DB_DICT_DATA = 'INCOME_MANAGEMENT_UI_CACHE_DB_DICT_DATA'
export const INDEX_MAIN_PAGE_PATH = '/dashboard/analysis'
export const TENANT_ID = 'TENANT_ID'
export const ONL_AUTH_FIELDS = 'ONL_AUTH_FIELDS'
export const TENANT_ID = 'INCOME_MANAGEMENT_TENANT_ID'
export const ONL_AUTH_FIELDS = 'INCOME_MANAGEMENT_ONL_AUTH_FIELDS'
//路由缓存问题,关闭了tab页时再打开就不刷新 #842
export const CACHE_INCLUDED_ROUTES = 'CACHE_INCLUDED_ROUTES'
export const CACHE_INCLUDED_ROUTES = 'INCOME_MANAGEMENT_CACHE_INCLUDED_ROUTES'
export const CONTENT_WIDTH_TYPE = {
Fluid: 'Fluid',
Fixed: 'Fixed'
+20 -2
View File
@@ -81,8 +81,26 @@ export function formatDate(value, fmt) {
}
}
/**
* 代码找出第一个没有下级子菜单的路由
* @param data
*/
function findFirstRoute(data) {
if (data[0]) {
if (data[0] && data[0].children && data[0].children.length > 0) {
return findFirstRoute(data[0].children)
} else {
return data[0].path
}
} else {
return '/'
}
}
// 生成首页路由
export function generateIndexRouter(data) {
// 对任意页面重定向的地址做改变,
const redirectPath = findFirstRoute(data)
let indexRouter = [{
path: '/',
name: 'dashboard',
@@ -90,7 +108,8 @@ export function generateIndexRouter(data) {
// eslint-disable-next-line
component: resolve => require(['@/components/layouts/TabLayout'], resolve),
meta: { title: '首页' },
redirect: '/dashboard/analysis',
// redirect: '/dashboard/analysis',
redirect: redirectPath,
children: [
...generateChildRouters(data)
]
@@ -141,7 +160,6 @@ function generateChildRouters(data) {
// eslint-disable-next-line
componentPath = resolve => require(['@/' + component + '.vue'], resolve)
// }
let menu = {
path: item.path,
name: item.name,
@@ -189,9 +189,9 @@ export default {
methods: {
add(limit) {
// true 是调用无权限接口
if(limit){
if (limit) {
this.url.add = '/company/payCompanyManagement/addMeeting'
}else {
} else {
this.url.add = '/company/payCompanyManagement/add'
}
this.edit({})
@@ -312,7 +312,7 @@ export default {
callback('请输入15位、18位的信用代码')
return
}
if (!this.model.id) {
if (this.model.dutyCode !== value) {
const params = {
confusionCode: 'pay_company_duty_code',
fieldVal: value
@@ -325,8 +325,9 @@ export default {
}
})
return
} else {
callback()
}
callback()
} else {
callback('请输入信用代码')
}
@@ -386,7 +386,7 @@ export default {
if (isEmail(value)) {
callback()
} else {
callback('请输入正确的邮箱')
callback('请输入正确格式的邮箱')
}
}
callback('请输入邮箱')
@@ -0,0 +1,392 @@
<template>
<div>
<page-header-title :is-level-one="false" :img-for-icon="IconImg" level-two-title="支出合同详情"></page-header-title>
<a-spin :spinning="loading">
<a-card :bordered="false">
<!-- 主体信息-->
<div>
<div class="part-title">
<div class="part-title-text">主体信息</div>
</div>
<div class="detail" v-if="mainInfoShowList.length > 0">
<div class="detail-item"
v-for="(item, index) in mainInfoShowList"
:key="index">
<a-row>
<a-col :sm="10" :xs="24" class="detail-item-title">{{ item.title }}</a-col>
<a-col :sm="14" :xs="24" v-if="item.fieldName === 'rate'">{{ detailData[item.fieldName] }}%</a-col>
<a-col :sm="14" :xs="24" v-else>{{ detailData[item.fieldName] }}</a-col>
</a-row>
</div>
</div>
<a-empty v-else></a-empty>
</div>
<a-divider></a-divider>
<!-- 日期节点-->
<div>
<div class="part-title">
<div class="part-title-text">日期节点</div>
</div>
<div class="detail" v-if="dateNodeShowList.length > 0">
<div class="detail-item" v-for="(item, index) in dateNodeShowList"
:key="index">
<a-row>
<a-col :sm="10" :xs="24" class="detail-item-title">{{ item.title }}</a-col>
<a-col :sm="14" :xs="24">{{ detailData[item.fieldName] }}</a-col>
</a-row>
</div>
</div>
<a-empty v-else></a-empty>
</div>
<a-divider></a-divider>
<!-- 账款信息-->
<div>
<div class="part-title">
<div class="part-title-text">账款信息</div>
</div>
<div class="detail" v-if="accountInfoShowList.length > 0">
<div class="detail-item" v-for="(item, index) in accountInfoShowList"
:key="index">
<a-row>
<a-col :sm="10" :xs="24" class="detail-item-title">{{ item.title }}</a-col>
<a-col :sm="14" :xs="24">{{ detailData[item.fieldName] }}</a-col>
</a-row>
</div>
</div>
<a-empty v-else></a-empty>
</div>
<a-divider></a-divider>
<!-- 其他信息-->
<div>
<div class="part-title">
<div class="part-title-text">其他信息</div>
</div>
<div class="detail" v-if="otherInfoShowList.length > 0">
<div class="detail-item all-line" v-for="(item, index) in otherInfoShowList"
:key="index">
<a-row>
<a-col :sm="4" :xs="24" class="detail-item-title">{{ item.title }}</a-col>
<a-col :sm="20" :xs="24">{{ detailData[item.fieldName] }}</a-col>
</a-row>
</div>
</div>
<a-empty v-else></a-empty>
</div>
<a-divider></a-divider>
<!-- 分期信息-->
<div>
<div class="part-title">
<div class="part-title-text">分期信息</div>
</div>
<a-row class="detail" v-for="(item, index) in detailData.listInstallment" :key="item.id">
<a-col :xxl="4" :xl="8" :sm="12" class="detail-item">
<a-row>
<a-col :sm="10" :xs="24" class="detail-item-title">{{ index + 1 }}阶段</a-col>
<a-col :sm="14" :xs="24">{{ item.phaseName }}</a-col>
</a-row>
</a-col>
<a-col :xxl="4" :xl="8" :sm="12" class="detail-item">
<a-row>
<a-col :sm="10" :xs="24" class="detail-item-title">{{ index + 1 }}阶段应收</a-col>
<a-col :sm="14" :xs="24">{{ item.accountsReceivableAmount }}</a-col>
</a-row>
</a-col>
<a-col :xxl="4" :xl="8" :sm="12" class="detail-item">
<a-row>
<a-col :sm="10" :xs="24" class="detail-item-title">{{ index + 1 }}阶段应收时间</a-col>
<a-col :sm="14" :xs="24">{{ item.accountsReceivableTime }}</a-col>
</a-row>
</a-col>
<a-col :xxl="4" :xl="8" :sm="12" class="detail-item">
<a-row>
<a-col :sm="10" :xs="24" class="detail-item-title">{{ index + 1 }}阶段实收</a-col>
<a-col :sm="14" :xs="24">{{ item.paidAmount }}</a-col>
</a-row>
</a-col>
<a-col :xxl="4" :xl="8" :sm="12" class="detail-item">
<a-row>
<a-col :sm="10" :xs="24" class="detail-item-title">{{ index + 1 }}阶段实收时间</a-col>
<a-col :sm="14" :xs="24">{{ item.paidTime }}</a-col>
</a-row>
</a-col>
</a-row>
</div>
<a-divider></a-divider>
<!-- 存档信息-->
<div>
<div class="part-title">
<div class="part-title-text">存档信息</div>
</div>
<div class="detail" v-if="detailData.listArchive && detailData.listArchive.length > 0">
<div class="detail-item" v-for="(item, index) in detailData.listArchive"
:key="index">
<a-row>
<a-col :sm="6" :xs="24">{{ item.createBy }}</a-col>
<a-col :sm="6" :xs="24">{{ item.createTime }}</a-col>
<a-col :sm="6" :xs="24">{{ item.contractStatus_dictText }}</a-col>
</a-row>
</div>
</div>
<a-empty v-else></a-empty>
</div>
<a-divider></a-divider>
<!-- 审核记录-->
<div>
<div class="part-title">
<div class="part-title-text">审核记录</div>
</div>
<div class="aduit-text" v-if="detailData.listAudit && detailData.listAudit.length > 0">
<div v-for="(item, index) in detailData.listAudit"
:key="index">
<a-row>
<a-col :sm="6" :xs="24">{{ item.createBy }}</a-col>
<a-col :sm="6" :xs="24">{{ item.createTime }}</a-col>
<a-col :sm="6" :xs="24">{{ item.contractStatus_dictText }}</a-col>
<a-col :sm="6" :xs="24">{{ item.explainRemarks }}</a-col>
</a-row>
</div>
</div>
<a-empty v-else></a-empty>
</div>
<!-- 状态非已存档显示-->
<template v-if="detailData.status < 5">
<a-divider></a-divider>
<!-- 编辑审核存档-->
<div>
<div class="part-title">
<div class="part-title-text">操作</div>
</div>
<div class="operator-btn">
<a-button
type="primary"
@click="handleEdit(detailData.id, detailData.contractNum)"
v-if="detailData.status === 1 || detailData.status === 4"
v-has="'revenueContract:edit'">
编辑
</a-button>
<a-button
type="primary"
@click="handleAudit(detailData.id)"
v-if="detailData.status === 2"
v-has="'revenueContract:aduit'">
审核
</a-button>
<a-button
type="primary"
@click="handleArchive(detailData.id)"
v-if="detailData.status === 3"
v-has="'revenueContract:archive'">
存档
</a-button>
</div>
</div>
</template>
</a-card>
</a-spin>
</div>
</template>
<script>
import PageHeaderTitle from '../../../components/layouts/PageHeaderTitle'
import IconImg from '@/assets/imgs/icon/icon_revenue_contract.png'
import { getExpenditureContractById } from '../../../api/incomePaymentsApi'
export default {
name: 'ExpenditureContractDetail',
components: { PageHeaderTitle },
data() {
return {
IconImg,
loading: false,
detailData: {},
// 主体信息
mainInfoList: [
{
fieldName: 'contractNum',
title: '合同编号'
}, {
fieldName: 'contractName',
title: '合同名称'
}, {
fieldName: 'signedCompanyTemporaryName',
title: '签订单位'
}, {
fieldName: 'signedContactsTemporaryName',
title: '签订联系人'
}, {
fieldName: 'opening_dictText',
title: '是否开口'
}, {
fieldName: 'principalName',
title: '负责人'
}, {
fieldName: 'departmentName',
title: '部门名称'
}, {
fieldName: 'contractAmount',
title: '签订合同总金额'
}, {
fieldName: 'rate',
title: '税率'
}, {
fieldName: 'noTaxAmount',
title: '未税金额'
}
],
// 日期节点
dateNodeList: [
{
fieldName: 'contractDate',
title: '合同签订日期'
}, {
fieldName: 'terminationDate',
title: '合同终止日期'
}, {
fieldName: 'contractTimePoints',
title: '合同约定主要时点'
}
],
// 账款信息
accountInfoList: [
{
fieldName: 'accountsReceivableAmount',
title: '应付金额'
}, {
fieldName: 'amountReceived',
title: '已收金额'
}, {
fieldName: 'amountReceived',
title: '未收金额'
}, {
fieldName: 'accountStatus_dictText',
title: '赊账状态'
}
],
// 其他信息
otherInfoList: [
{
fieldName: 'contractPaymentTimes',
title: '合同约定付款次数'
}
// {
// fieldName: 'pack_dictText',
// title: '是否打包'
// }, {
// fieldName: 'packYear',
// title: '打包年份'
// }
]
}
},
computed: {
// 主体信息,去掉没有数据的字段
mainInfoShowList() {
return this.mainInfoList.filter(item => this.detailData[item.fieldName] && this.detailData[item.fieldName] !== '') || []
},
// 日期节点
dateNodeShowList() {
return this.dateNodeList.filter(item => this.detailData[item.fieldName] && this.detailData[item.fieldName] !== '') || []
},
// 账款信息
accountInfoShowList() {
return this.accountInfoList.filter(item => this.detailData[item.fieldName] && this.detailData[item.fieldName] !== '') || []
},
// 其他信息
otherInfoShowList() {
return this.otherInfoList.filter(item => this.detailData[item.fieldName] && this.detailData[item.fieldName] !== '') || []
}
},
mounted() {
this.initDetailData(this.$route.query.revenueId)
},
methods: {
initDetailData() {
this.loading = true
let param = {
id: this.$route.query.revenueId
}
getExpenditureContractById(param).then(res => {
if (res.success) {
this.detailData = res.result
// this.detailData.pack = this.detailData.pack === 1 ? '是' : this.detailData.pack === 0 ? '否' : ''
} else {
// 添加异常判断,防止消息进入详情无法正常获取数据造成卡死及控制台报错
this.$message.warn(res.message)
}
}).finally(() => {
this.loading = false
})
},
operatorOk() {
this.initDetailData()
},
/**
* 编辑
* @param id
* @param contractNum
*/
handleEdit(id, contractNum) {
this.$router.push({
path: '/contractManagement/RevenueContractModule',
query: {
revenueId: id
}
})
}
}
}
</script>
<style scoped lang="less">
@import '~@assets/less/common.less';
.detail {
display: flex;
padding: 0 20px;
flex-wrap: wrap;
&-item {
width: 25%;
min-width: 280px;
padding-top: 10px;
color: #2F3133;
word-break: break-all;
&-title {
color: #999999;
text-align: right;
}
}
}
.all-line {
width: 100%!important;
}
.ant-divider-horizontal {
margin: 20px 0;
}
.operator-btn {
margin-top: 10px;
button {
margin-right: 8px;
}
}
.aduit-text {
color: #2F3133;
padding: 0 20px;
}
</style>
@@ -75,6 +75,14 @@
@change="handleTableChange"
class="j-table-force-nowrap">
<template slot="projectName" slot-scope="text, record">
<j-ellipsis
class="primary-color"
@click="toContractDetail(record.id)"
:value="text"
:length="18"></j-ellipsis>
</template>
<template slot="text" slot-scope="text">
<j-ellipsis :value="text" :length="18"></j-ellipsis>
</template>
@@ -135,7 +143,7 @@ export default {
align: 'center',
dataIndex: 'contractNum',
width: 280,
scopedSlots: { customRender: 'text' }
scopedSlots: { customRender: 'projectName' }
}, {
title: '合同名称',
align: 'center',
@@ -197,6 +205,15 @@ export default {
contractId: id
}
})
},
toContractDetail(id) {
console.log(id)
this.$router.push({
path: '/contractManagement/ExpenditureContractDetail',
query: {
revenueId: id
}
})
}
}
}
@@ -75,7 +75,7 @@
</a-col>
<a-col :xxl="6" :xl="8" :sm="12">
<a-form-item label="税率" :labelCol="labelCol" :wrapperCol="wrapperCol">
<a-row>
<a-row :gutter="10">
<a-col :span="20">
<a-input placeholder="请输入税率"
v-decorator="['rate',validatorRules.rate]"
@@ -104,7 +104,7 @@
<div class="part-title">
<div class="part-title-text">日期节点</div>
</div>
<a-row :gutter="30">
<a-row>
<a-col :xxl="6" :xl="8" :sm="12">
<a-form-item label="合同签订日期" :labelCol="labelCol" :wrapperCol="wrapperCol">
<j-date placeholder="请选择合同签订日期"
@@ -123,12 +123,15 @@
date-format="YYYY-MM-DD"/>
</a-form-item>
</a-col>
<a-col :xxl="6" :xl="8" :sm="12">
<a-form-item label="合同约定主要时点" :labelCol="labelCol" :wrapperCol="wrapperCol">
<a-input placeholder="请输入合同约定主要时点"
v-decorator="['contractTimePoints',validatorRules.contractTimePoints]"
:maxLength='50'
@change="e => {e.target.value = (e.target.value + '').trim()}"></a-input>
</a-row>
<a-row>
<a-col :xxl="12" :xl="16" :sm="24">
<a-form-item label="合同约定主要时点" :labelCol="longLabelCol" :wrapperCol="longWrapperCol">
<!-- 20211022需求变更将input改为textarea-->
<a-textarea placeholder="请输入合同约定主要时点"
v-decorator="['contractTimePoints',validatorRules.contractTimePoints]"
:maxLength='200'
@change="e => {e.target.value = (e.target.value + '').trim()}"></a-textarea>
</a-form-item>
</a-col>
</a-row>
@@ -141,10 +144,10 @@
<div class="part-title-text">账款信息</div>
</div>
<div>
<a-row :gutter="30">
<a-row>
<a-col :xxl="6" :xl="8" :sm="12">
<a-form-item label="应金额" :labelCol="labelCol" :wrapperCol="wrapperCol">
<a-input placeholder="请输入应金额"
<a-form-item label="应金额" :labelCol="labelCol" :wrapperCol="wrapperCol">
<a-input placeholder="请输入应金额"
v-decorator="['accountsReceivableAmount',validatorRules.accountsReceivableAmount]"
:maxLength='50'
@blur="addZero"
@@ -152,8 +155,8 @@
</a-form-item>
</a-col>
<a-col :xxl="6" :xl="8" :sm="12">
<a-form-item label="已金额" :labelCol="labelCol" :wrapperCol="wrapperCol">
<a-input placeholder="请输入已金额"
<a-form-item label="已金额" :labelCol="labelCol" :wrapperCol="wrapperCol">
<a-input placeholder="请输入已金额"
v-decorator="['amountReceived',validatorRules.amountReceived]"
:maxLength='50'
@blur="addZero"
@@ -161,8 +164,8 @@
</a-form-item>
</a-col>
<a-col :xxl="6" :xl="8" :sm="12">
<a-form-item label="未金额" :labelCol="labelCol" :wrapperCol="wrapperCol">
<a-input placeholder="请输入未金额"
<a-form-item label="未金额" :labelCol="labelCol" :wrapperCol="wrapperCol">
<a-input placeholder="请输入未金额"
:maxLength='50'
@blur="addZero"
v-decorator="['outstandingAmount']"
@@ -189,7 +192,7 @@
<div class="part-title-text">其他信息</div>
</div>
<div>
<a-row :gutter="30">
<a-row>
<a-col :xxl="6" :xl="8" :sm="12">
<a-form-item label="合同约定付款次数" :labelCol="labelCol" :wrapperCol="wrapperCol">
<a-input placeholder="请输入合同约定付款次数"
@@ -198,22 +201,23 @@
@change="e => {e.target.value = (e.target.value + '').trim()}"></a-input>
</a-form-item>
</a-col>
<a-col :xxl="6" :xl="8" :sm="12">
<a-form-item label="是否打包" :labelCol="labelCol" :wrapperCol="wrapperCol">
<j-dict-select-tag v-decorator="['pack', validatorRules.pack]"
:triggerChange="true"
placeholder="请选择是否打包"
dictCode="yn"
@change="packageChange"/>
</a-form-item>
</a-col>
<a-col :xxl="6" :xl="8" :sm="12">
<a-form-item label="打包年份" :labelCol="labelCol" :wrapperCol="wrapperCol" v-if="isPackage">
<j-year-date style="width:100%"
placeholder="请选择打包年份"
v-decorator="['packYear',validatorRules.packYear]"></j-year-date>
</a-form-item>
</a-col>
<!-- 2021-10-18需求变更去掉-->
<!-- <a-col :xxl="6" :xl="8" :sm="12">-->
<!-- <a-form-item label="是否打包" :labelCol="labelCol" :wrapperCol="wrapperCol">-->
<!-- <j-dict-select-tag v-decorator="['pack', validatorRules.pack]"-->
<!-- :triggerChange="true"-->
<!-- placeholder="请选择是否打包"-->
<!-- dictCode="yn"-->
<!-- @change="packageChange"/>-->
<!-- </a-form-item>-->
<!-- </a-col>-->
<!-- <a-col :xxl="6" :xl="8" :sm="12">-->
<!-- <a-form-item label="打包年份" :labelCol="labelCol" :wrapperCol="wrapperCol" v-if="isPackage">-->
<!-- <j-year-date style="width:100%"-->
<!-- placeholder="请选择打包年份"-->
<!-- v-decorator="['packYear',validatorRules.packYear]"></j-year-date>-->
<!-- </a-form-item>-->
<!-- </a-col>-->
</a-row>
</div>
</div>
@@ -224,7 +228,7 @@
<div class="part-title">
<div class="part-title-text">分期信息</div>
</div>
<installment-form ref="installmentForm" @ok="installmentFormOk"></installment-form>
<installment-form ref="installmentForm" @ok="installmentFormOk" label="付"></installment-form>
</div>
<!-- /分期信息-->
<a-form-item class="table-operator">
@@ -278,6 +282,14 @@ export default {
xs: { span: 24 },
sm: { span: 14 }
},
longLabelCol: {
xs: { span: 24 },
sm: { span: 5 }
},
longWrapperCol: {
xs: { span: 24 },
sm: { span: 19 }
},
validatorRules: {
contractNum: {
rules: [{ required: true, validator: this.checkContractNum }],
@@ -648,13 +660,13 @@ export default {
callback('请输入签订合同总金额')
break
case 'accountsReceivableAmount':
callback('请输入应金额')
callback('请输入应金额')
break
case 'noTaxAmount':
callback('请输入未税金额')
break
case 'amountReceived':
callback('请输入已金额')
callback('请输入已金额')
break
}
}
@@ -6,28 +6,46 @@
<div class="table-page-search-wrapper">
<a-form layout="inline" @keyup.enter.native="searchQuery">
<a-row>
<a-col :xl="6" :lg="7" :md="8" :sm="24">
<a-col :xl="8" :lg="9" :md="10" :sm="24">
<a-form-item label="合同编号" :labelCol="labelCol" :wrapperCol="wrapperCol">
<a-input placeholder="请输入合同编号" v-model="queryParam.contractNum" :maxLength='50'></a-input>
</a-form-item>
</a-col>
<a-col :xl="6" :lg="7" :md="8" :sm="24">
<a-col :xl="8" :lg="9" :md="10" :sm="24">
<a-form-item label="合同名称" :labelCol="labelCol" :wrapperCol="wrapperCol">
<a-input placeholder="请输入合同名称" v-model="queryParam.contractName" :maxLength='50'></a-input>
</a-form-item>
</a-col>
<a-col :xl="6" :lg="7" :md="8" :sm="24">
<a-col :xl="8" :lg="9" :md="10" :sm="24">
<a-form-item label="关联项目" :labelCol="labelCol" :wrapperCol="wrapperCol">
<a-input placeholder="请输入关联项目" v-model="queryParam.projectName" :maxLength='50'></a-input>
</a-form-item>
</a-col>
<a-col :xl="6" :lg="7" :md="8" :sm="24">
<a-col :xl="8" :lg="9" :md="10" :sm="24">
<a-form-item label="合同状态" :labelCol="labelCol" :wrapperCol="wrapperCol">
<j-dict-select-tag v-model="queryParam.status" placeholder="请选择合同状态"
<j-dict-select-tag v-model="queryParam.status"
placeholder="请选择合同状态"
dictCode="revenue_contract_status"/>
</a-form-item>
</a-col>
<a-col :xl="10" :lg="11" :md="12" :sm="24">
<!-- 需求变更-->
<a-col :xl="8" :lg="9" :md="10" :sm="24">
<a-form-item label="是否打包" :labelCol="labelCol" :wrapperCol="wrapperCol">
<j-dict-select-tag v-model="queryParam.pack"
placeholder="请选择是否打包"
dictCode="yn"
@input="packageChange"/>
</a-form-item>
</a-col>
<a-col :xl="8" :lg="9" :md="10" :sm="24">
<a-form-item label="打包年份" :labelCol="labelCol" :wrapperCol="wrapperCol" v-if="isPackage">
<j-year-date style="width:100%"
placeholder="请选择打包年份"
v-model="queryParam.packYear"></j-year-date>
</a-form-item>
</a-col>
<!-- /需求变更-->
<a-col :xl="10" :lg="12" :md="12" :sm="24">
<a-form-item label="创建时间" :labelCol="labelCol" :wrapperCol="wrapperCol">
<j-date
placeholder="请选择开始日期"
@@ -88,7 +106,7 @@
@change="handleTableChange"
class="j-table-force-nowrap">
<!-- 项目名称 待审核状态为红色-->
<!-- 项目名称 -->
<template slot="projectName" slot-scope="text, record">
<j-ellipsis
@click="toRevenueContractDetail(record.id, record.contractNum)"
@@ -133,10 +151,11 @@ import RevenueContractAduitModule from './modules/RevenueContractAduitModule'
import JDate from '../../../components/tools/JDate'
import { RangeDateMixin } from '../../../mixins/RangeDateMixin'
import { archiveRevenueContract } from '../../../api/incomePaymentsApi'
import JYearDate from '../../../components/jero/JYearDate'
export default {
name: 'RevenueContractList',
components: { PageHeaderTitle, RevenueContractAduitModule, JDate },
components: { PageHeaderTitle, RevenueContractAduitModule, JDate, JYearDate },
mixins: [JeroListMixin, RangeDateMixin],
data() {
return {
@@ -233,12 +252,15 @@ export default {
width: 200,
scopedSlots: { customRender: 'action' }
}
]
],
isPackage: false // 是否打包,控制打包年份显隐
}
},
methods: {
searchQuery() {
this.lastQueryParam = { ...this.queryParam }
searchReset() {
this.lastQueryParam = {}
this.queryParam = {}
this.isPackage = false
this.loadData(1)
},
toRevenueContractDetail(id, contractNum) {
@@ -314,6 +336,16 @@ export default {
})
}
})
},
/**
* 打包状态修改
*/
packageChange(value) {
if (value === '1') {
this.isPackage = true
} else {
this.isPackage = false
}
}
}
}
@@ -230,7 +230,7 @@ export default {
validateTrigger: 'blur'
},
postAddress: {
rules: [{required: true, message: '请输入邮'}],
rules: [{required: true, message: '请输入邮寄地址'}],
validateTrigger: 'blur'
},
payMode: {
@@ -267,7 +267,7 @@ export default {
if(value && money(value)){
callback()
}else {
callback('请输入合法的金额数字,最多2位小数,10位正数')
callback('应收金额格式错误')
}
},
@@ -108,7 +108,7 @@
<div class="part-title">
<div class="part-title-text">日期节点</div>
</div>
<a-row :gutter="30">
<a-row>
<a-col :xxl="6" :xl="8" :sm="12">
<a-form-item label="合同签订日期" :labelCol="labelCol" :wrapperCol="wrapperCol">
<j-date placeholder="请选择合同签订日期"
@@ -127,12 +127,15 @@
date-format="YYYY-MM-DD"/>
</a-form-item>
</a-col>
<a-col :xxl="6" :xl="8" :sm="12">
<a-form-item label="合同约定主要时点" :labelCol="labelCol" :wrapperCol="wrapperCol">
<a-input placeholder="请输入合同约定主要时点"
v-decorator="['contractTimePoints']"
:maxLength='50'
@change="e => {e.target.value = (e.target.value + '').trim()}"></a-input>
</a-row>
<a-row>
<a-col :xxl="12" :xl="16" :sm="24">
<a-form-item label="合同约定主要时点" :labelCol="longLabelCol" :wrapperCol="longWrapperCol">
<!-- 20211022需求变更将input改为textarea-->
<a-textarea placeholder="请输入合同约定主要时点"
v-decorator="['contractTimePoints']"
:maxLength='200'
@change="e => {e.target.value = (e.target.value + '').trim()}"></a-textarea>
</a-form-item>
</a-col>
</a-row>
@@ -145,7 +148,7 @@
<div class="part-title-text">账款信息</div>
</div>
<div>
<a-row :gutter="30">
<a-row>
<a-col :xxl="6" :xl="8" :sm="12">
<a-form-item label="应收金额" :labelCol="labelCol" :wrapperCol="wrapperCol">
<a-input placeholder="请输入应收金额"
@@ -160,6 +163,7 @@
<a-input placeholder="请输入已收金额"
v-decorator="['amountReceived',validatorRules.amountReceived]"
:maxLength='50'
:disabled="true"
@blur="addZero"
@change="amountReceivedChange"></a-input>
</a-form-item>
@@ -193,7 +197,7 @@
<div class="part-title-text">其他信息</div>
</div>
<div>
<a-row :gutter="30">
<a-row>
<a-col :xxl="6" :xl="8" :sm="12">
<a-form-item label="合同约定付款次数" :labelCol="labelCol" :wrapperCol="wrapperCol">
<a-input placeholder="请输入合同约定付款次数"
@@ -205,7 +209,7 @@
<a-col :xxl="6" :xl="8" :sm="12">
<a-form-item label="是否打包" :labelCol="labelCol" :wrapperCol="wrapperCol">
<j-dict-select-tag v-decorator="['pack', validatorRules.pack]"
:triggerChange="true"
:trigger-change="true"
placeholder="请选择是否打包"
dictCode="yn"
:disabled="isSaved"
@@ -258,7 +262,8 @@
<a-card :bordered="false" v-else class="associated-project" style="height: 200px"></a-card>
<!-- 项目类型选择-->
<project-type-selection ref="projectTypeSelection" :is-pack="isPackage" @ok="selectProjectTypeOk"></project-type-selection>
<project-type-selection ref="projectTypeSelection" :is-pack="isPackage"
@ok="selectProjectTypeOk"></project-type-selection>
<!-- 普通项目选择-->
<select-project-module ref="selectProjectModule"
@ok="selectProjectOk"
@@ -345,6 +350,14 @@ export default {
xs: { span: 24 },
sm: { span: 14 }
},
longLabelCol: {
xs: { span: 24 },
sm: { span: 5 }
},
longWrapperCol: {
xs: { span: 24 },
sm: { span: 19 }
},
validatorRules: {
contractNum: {
rules: [{ required: true, validator: this.checkContractNum }],
@@ -437,10 +450,15 @@ export default {
add() {
this.title = '新建收入合同'
this.$refs.installmentForm.initInstallmentList([])
// 税率默认为6
// 税率默认为6,已收金额默认为0
let obj = {
rate: 6,
amountReceived: '0.00'
}
this.$nextTick(() => {
this.form.setFieldsValue({ rate: 6 })
this.form.setFieldsValue(pick(obj, 'rate', 'amountReceived'))
})
this.amountReceivedNum = 0
this.rateNum = 6 / 100
},
edit(id) {
@@ -13,16 +13,16 @@
<a-tab-pane key="1" tab="会员项目">
<a-form layout="inline" @keyup.enter.native="searchQuery">
<a-row>
<!-- <a-col :xl="6" :lg="7" :md="8" :sm="24">-->
<!-- <a-form-item label="会员项目" :labelCol="labelCol" :wrapperCol="wrapperCol">-->
<!-- <a-input placeholder="请输入会员项目" v-model="queryParam.workingGroupProject"></a-input>-->
<!-- </a-form-item>-->
<!-- </a-col>-->
<a-col :xl="6" :lg="7" :md="8" :sm="24">
<a-form-item label="运行年份" :labelCol="labelCol" :wrapperCol="wrapperCol">
<j-year-date placeholder="请选择运行年份" v-model="queryParam.particularYear"></j-year-date>
<a-form-item label="会员项目" :labelCol="labelCol" :wrapperCol="wrapperCol">
<a-input placeholder="请输入会员项目" v-model="queryParam.projectName" :maxLength='50'></a-input>
</a-form-item>
</a-col>
<!-- <a-col :xl="6" :lg="7" :md="8" :sm="24">-->
<!-- <a-form-item label="运行年份" :labelCol="labelCol" :wrapperCol="wrapperCol">-->
<!-- <j-year-date placeholder="请选择运行年份" v-model="queryParam.particularYear"></j-year-date>-->
<!-- </a-form-item>-->
<!-- </a-col>-->
<a-col :xl="6" :lg="7" :md="8" :sm="24">
<span class="table-page-search-submitButtons">
@@ -115,7 +115,7 @@
<script>
import {associatedProject} from '@api/incomePaymentsApi'
import {JeroListMixin} from '@/mixins/JeroListMixin'
import JYearDate from '@comp/jero/JYearDate'
// import JYearDate from '@comp/jero/JYearDate'
import StatusSlot from '@comp/tools/StatusSlot'
import JEllipsis from '@comp/jero/JEllipsis'
import AddMemberProject from '@views/contractManagement/revenueContract/modules/AddMemberProject'
@@ -124,7 +124,7 @@ export default {
name: 'SelectMemberProjectModule',
mixins: [JeroListMixin],
components: {
JYearDate,
// JYearDate,
StatusSlot,
JEllipsis,
AddMemberProject
@@ -226,21 +226,21 @@ export default {
title: '联系人',
align: 'center',
dataIndex: 'liaisonMan',
width: 80,
width: 200,
scopedSlots: {customRender: 'text'}
},
{
title: '邮箱',
align: 'center',
dataIndex: 'email',
width: 160,
width: 200,
scopedSlots: {customRender: 'text'},
},
{
title: '手机',
align: 'center',
dataIndex: 'phone',
width: 80,
width: 100,
scopedSlots: {customRender: 'text'}
},
{
@@ -189,7 +189,7 @@ export default {
align: 'center',
width: 280,
dataIndex: 'chargeProject',
scopedSlots: { customRender: 'projectName' }
scopedSlots: { customRender: 'text' }
}, {
title: '来款用途',
align: 'center',
@@ -135,11 +135,12 @@ export default {
title: '工作组项目',
align: 'center',
dataIndex: 'workingGroupProject',
scopedSlots: { customRender: 'projectName' }
scopedSlots: { customRender: 'text' }
}, {
title: '负责人A',
align: 'center',
dataIndex: 'principalNameA'
dataIndex: 'principalNameA',
scopedSlots: { customRender: 'text' }
}, {
title: '进度',
align: 'center',
@@ -334,10 +334,12 @@ export default {
arr = this.dataSource.filter(tt => selectedKeys.indexOf(tt.id) > -1)
// 开票
if (operateType === 'invoic') {
// 是否存在不需要发票的项目
if (arr.some(item => item.needInvoice === 0 || Number(item.receivableAmount) === 0)) {
reject('存在不需要发票的项目!')
}
// 是否存在企业不同的项目
let companyArr = []
arr.forEach(item => {
@@ -347,9 +349,20 @@ export default {
if (!isAllEqual(companyArr)) {
reject('请选择来款单位为同一企业的项目合并开票!')
}
// 是否存在已完成开票的项目
if (arr.some(item => item.makeInvoice === 1)) {
reject('存在已完成开票的项目!')
}
// 是否选中了标协会员项目,标协会员项目只能到账一次、开票一次,前端进行是否完全到账的限制
if (arr.some(item => item.projectType === 5)) {
// 标协会员项目是否完全到账
if (arr.some(item => item.inAccount !== 1)) {
reject('存在未全部到账的标协会员项目!')
}
}
this.selectedCompany = {
id: arr[0].chargeCompanyId,
companyName: arr[0].chargeCompanyTemporaryName
@@ -94,6 +94,8 @@
<j-area-linkage
type="cascader"
placeholder="请选择省市"
:has-error="hasError"
@change="changeConvoke"
v-decorator="['convokeLocale',validatorRules.convokeLocale]"
></j-area-linkage>
</a-form-item>
@@ -436,8 +438,10 @@ export default {
workGroupList: [],
// 收费二维码显示
QRcodeBool: true,
// 召开地点border颜色控制
hasError:false,
// 会议类型
meetingType:'',
meetingType: '',
}
},
computed: {
@@ -467,7 +471,7 @@ export default {
this.edit(res.result)
}
})
}else {
} else {
// 没有id走新增
this.add()
}
@@ -510,11 +514,11 @@ export default {
}
console.log(this.model)
// 召开时间回显
if(this.model.startTime){
if (this.model.startTime) {
this.model.convokeTime = [moment(this.model.startTime, dateFormat), moment(this.model.endTime, dateFormat)]
}
// 注册签到时间回显
if( this.model.startSignInTime){
if (this.model.startSignInTime) {
this.model.signInTime = [moment(this.model.startSignInTime, dateFormat), moment(this.model.endSignInTime, dateFormat)]
}
// 后端需要的召开时间
@@ -525,7 +529,7 @@ export default {
this.$nextTick(() => {
// 加定时器是因为有可能赋值不成功
setTimeout(() => {
this.form.setFieldsValue(pick(this.model,'notice','paymentQrCode','meetingName', 'meetingType', 'convokeTime', 'particularYear', 'estimatedNumber', 'meetingFiles', 'registerDeadline', 'meetingContent', 'convokeLocale', 'address', 'meetingCosts', 'directorId', 'remark', 'directorPhone')), 200
this.form.setFieldsValue(pick(this.model, 'notice', 'paymentQrCode', 'meetingName', 'meetingType', 'convokeTime', 'particularYear', 'estimatedNumber', 'meetingFiles', 'registerDeadline', 'meetingContent', 'convokeLocale', 'address', 'meetingCosts', 'directorId', 'remark', 'directorPhone')), 200
})
// 如果是标协会议则回显 标协会议的字段
if (this.meetingType === '2') {
@@ -550,6 +554,10 @@ export default {
handleOk() {
const that = this
this.form.validateFields((err, values) => {
// 这是设置召开时间不选择的边框颜色为红色
if (err && Object.prototype.hasOwnProperty.call(err, 'convokeLocale')) {
this.hasError = true
}
if (!err) {
that.confirmLoading = true
let httpurl = ''
@@ -562,7 +570,7 @@ export default {
let placeName = values.convokeLocale
const formData = Object.assign(this.model, values, {venue: this.getPcaText(placeName)})
// 如果会议的费用未为0 不能上传缴费凭证
if(values.meetingCosts === '0.00' ){
if (values.meetingCosts === '0.00') {
delete formData.paymentQrCode
}
// 添加编辑会议需要增加会议类型
@@ -601,6 +609,14 @@ export default {
})
},
/*
*
* */
changeConvoke(val){
if(val){
this.hasError = false
}
},
/*
* 取消
* */
handleCancel() {
@@ -706,33 +722,38 @@ export default {
/*
* 根据会议类型返回不同的会议新增与编辑接口
* */
createUrlByMeetingType(meetingType){
switch (String(meetingType)){
createUrlByMeetingType(meetingType) {
switch (String(meetingType)) {
// 工作组会议
case '1':return {
add:'/meeting/workGroupMeeting/add',
edit:'/meeting/workGroupMeeting/edit'
}
case '1':
return {
add: '/meeting/workGroupMeeting/add',
edit: '/meeting/workGroupMeeting/edit'
}
// 标协会议
case '2':return {
add:'/meeting/standardsMeeting/add',
edit:'/meeting/standardsMeeting/edit'
}
case '2':
return {
add: '/meeting/standardsMeeting/add',
edit: '/meeting/standardsMeeting/edit'
}
// 国际研讨会
case '3':return {
add:'/meeting/internalMeeting/add',
edit:'/meeting/internalMeeting/edit'
}
case '3':
return {
add: '/meeting/internalMeeting/add',
edit: '/meeting/internalMeeting/edit'
}
// 其他会议
case '4':return {
add:'/meeting/otherMeeting/add',
edit:'/meeting/otherMeeting/edit'
}
case '4':
return {
add: '/meeting/otherMeeting/add',
edit: '/meeting/otherMeeting/edit'
}
// 分标委会议
case '5':return {
add:'/meeting/committeeMeeting/add',
edit:'/meeting/committeeMeeting/edit'
}
case '5':
return {
add: '/meeting/committeeMeeting/add',
edit: '/meeting/committeeMeeting/edit'
}
}
},
/*
@@ -791,8 +812,8 @@ export default {
// 会议费用为 0控制二维码显示隐藏
if (value === '0.00') {
this.QRcodeBool = false
// 如果付款二维码有值 需要清空
if(this.form.getFieldValue('paymentQrCode')){
// 如果付款二维码有值 需要清空
if (this.form.getFieldValue('paymentQrCode')) {
this.form.resetFields('paymentQrCode')
}
} else {
@@ -886,6 +907,7 @@ export default {
.yuan {
position: absolute;
right: -40px;
top: -10px;
}
.add-icon {
@@ -253,8 +253,8 @@
</template>
<span slot="action" slot-scope="text, record" class="action-span-cell">
<!-- 只有缴费方式为汇款并且上传了汇款凭证的的才会有审核按钮-->
<a @click="handleAudit(record)" v-if="(record.payMode === 1 || record.payMode === 2 ) && record.paymentRecord"
<!-- 只有缴费方式为汇款并且上传了汇款凭证的的才会有审核按钮 审核通过后不显示 审核凭证按钮 -->
<a @click="handleAudit(record)" v-if="(record.payMode === 1 || record.payMode === 2 ) && record.paymentRecord && record.checkResult !== 1"
v-has:[authorCode.auditRecord]="'attendance:auditCredentials'">审核凭证</a>
<!-- 只有工作组会议与分标委会议才有审核报名信息-->
<a @click="handleAuditSignUp(record)"
@@ -532,6 +532,7 @@ export default {
}
},
created() {
// console.log(this.$route,'this.$route this.$route')
// 为不同会议的参会情况去设置不同的权限编码
this.setCodeByMeetingType(this.$route.query.meetingType)
// 获取会议详情
@@ -540,7 +541,6 @@ export default {
}
getMeetInfoById(param).then(res => {
if (res.success) {
console.log(res.result)
this.currentMeetingInfo = Object.assign({}, res.result)
// 转化会议类型
this.meetingType = this.generateMeetingType(this.currentMeetingInfo.meetingType)
@@ -831,6 +831,7 @@ export default {
}
}
}
}
</script>
@@ -29,7 +29,7 @@
<!-- 选择嘉宾和内部企业缴费方式为打包也不显示-->
<!-- 会议费为0不显示 -->
<template v-if="!meetingCostBool">
<div class="item-title" v-if="identifyType === 2 && !payModeBool">缴费信息</div>
<div class="item-title" v-if="identifyType === 2">缴费信息</div>
<a-row :gutter="24">
<a-col :xxl="8" :xl="12" :sm="24" v-if="identifyType === 2">
<a-form-item label="缴费方式" :labelCol="labelCol" :wrapperCol="wrapperCol">
@@ -46,6 +46,7 @@
<j-dict-select-tag style="width: 100%" dict-code="invoice_type"
v-decorator="['needInvoice',validatorRules.needInvoice]"
:trigger-change="true"
@change="changeInvoice"
:disabled="isEditBool"
placeholder="请选择发票类型"></j-dict-select-tag>
</a-form-item>
@@ -69,9 +70,9 @@
<!-- </a-col>-->
</a-row>
</template>
<!-- 选择嘉宾和内部企业缴费方式为打包也不显示-->
<!-- 其他会议选择嘉宾和内部企业缴费方式为打包也不显示-->
<!-- 会议费为0不显示 -->
<template v-if="!meetingCostBool">
<template v-if="!meetingCostBool && !needInvoiceBool ">
<div class="item-title" v-if="identifyType === 2 && !payModeBool ">邮寄信息</div>
<a-row :gutter="24">
<a-col :xxl="8" :xl="12" :sm="24" v-if="identifyType === 2 && !payModeBool ">
@@ -178,7 +179,7 @@ export default {
sm: {span: 21}
},
// 缴费方式为打包
payModeBool: false,
payModeBool: true,
// 缴费方式为线上缴费
onlinePayModeBool:false,
// 回显的邮寄联系人
@@ -203,6 +204,8 @@ export default {
},
// 是否可编辑
isEditBool:false,
// 是否需要发票
needInvoiceBool:true,
}
},
watch: {
@@ -226,6 +229,13 @@ export default {
}
})
},
/*
* 清空邮寄联系人 地址 邮编
* */
clearFormItem(){
// 选择企业清空 姓名 手机号
this.form.resetFields(['postContactId','postContactAddress','postCode'])
},
/*
* 选择了联系人后给邮寄联系人和地址赋值
@@ -280,6 +290,7 @@ export default {
* */
setFormVal(record) {
this.isEditBool = record.checkResult === 1
this.needInvoiceBool = record.needInvoice === 0
// 回显邮寄联系人
this.selectPostPerson = {
id: record.postContactTemporaryId,
@@ -304,6 +315,17 @@ export default {
})
},
/*
* 选择发票
* */
changeInvoice(val){
if(val === '0'){
// 不需要发票
this.needInvoiceBool = true
}else {
this.needInvoiceBool = false
}
},
addContactsOk() {
}
@@ -36,24 +36,27 @@
<a-col :xxl="8" :xl="12" :sm="24">
<label class="label">是否住酒店</label><span>{{ model.checkInHotel_dictText }}</span>
</a-col>
<a-col :xxl="8" :xl="12" :sm="24">
<!-- 抵达时间和离开时间 填写了才显示 -->
<a-col :xxl="8" :xl="12" :sm="24" v-if="!!model.arrivalTime">
<label class="label">抵达时间</label><span>{{ model.arrivalTime }}</span>
</a-col>
<a-col :xxl="8" :xl="12" :sm="24">
<a-col :xxl="8" :xl="12" :sm="24" v-if="!!model.departureTime">
<label class="label">离开时间</label><span>{{ model.departureTime }}</span>
</a-col>
</a-row>
</template>
<!--行程信息end-->
<!--其他会议的身份选择参会人才显示 缴费信息和邮寄信息 -->
<!--缴费信息begin-->
<template>
<template v-if="model.identity === 2">
<div class="item-title">缴费信息</div>
<a-row :gutter="24">
<a-col :xxl="8" :xl="12" :sm="24">
<label class="label">缴费方式</label><span>{{ model.payMode_dictText }}</span>
</a-col>
<a-col :xxl="8" :xl="12" :sm="24">
<!-- 缴费方式为打包的不显示发票 -->
<a-col :xxl="8" :xl="12" :sm="24" v-if="model.payMode !== 3">
<label class="label">需要发票</label><span>{{ model.needInvoice_dictText }}</span>
</a-col>
<!-- <a-col :xxl="8" :xl="12" :sm="24">-->
@@ -62,9 +65,9 @@
</a-row>
</template>
<!--缴费信息end-->
<!-- 不需要发票的不显示邮寄信息 -->
<!--邮寄信息begin-->
<template>
<template v-if="model.identity === 2 && model.needInvoice !== 0 ">
<div class="item-title">邮寄信息</div>
<a-row :gutter="24">
<a-col :xxl="8" :xl="12" :sm="24">
@@ -89,10 +92,10 @@
<a-col :xxl="8" :xl="12" :sm="24">
<label class="label">是否住酒店</label><span>{{ model.checkInHotel_dictText }}</span>
</a-col>
<a-col :xxl="8" :xl="12" :sm="24">
<a-col :xxl="8" :xl="12" :sm="24" v-if="!!model.arrivalTime">
<label class="label">抵达时间</label><span>{{ model.arrivalTime }}</span>
</a-col>
<a-col :xxl="8" :xl="12" :sm="24">
<a-col :xxl="8" :xl="12" :sm="24" v-if="!!model.departureTime ">
<label class="label">离开时间</label><span>{{ model.departureTime }}</span>
</a-col>
</a-row>
@@ -100,13 +103,15 @@
<!--行程信息end-->
<!--缴费信息begin-->
<template>
<!-- 内部企业显示 -->
<template v-if="model.identity !== 3 ">
<div class="item-title">缴费信息</div>
<a-row :gutter="24">
<a-col :xxl="8" :xl="12" :sm="24">
<label class="label">缴费方式</label><span>{{ model.payMode_dictText }}</span>
</a-col>
<a-col :xxl="8" :xl="12" :sm="24">
<!-- 国际研讨会打包不显示需要发票-->
<a-col :xxl="8" :xl="12" :sm="24" v-if="model.payMode !== 3 ">
<label class="label">需要发票</label><span>{{ model.needInvoice_dictText }}</span>
</a-col>
<!-- <a-col :xxl="8" :xl="12" :sm="24">-->
@@ -117,7 +122,8 @@
<!--缴费信息end-->
<!--邮寄信息begin-->
<template>
<!-- 参会人不需要发票不显示 -->
<template v-if="model.needInvoice !== 0">
<div class="item-title">邮寄信息</div>
<a-row :gutter="24">
<a-col :xxl="8" :xl="12" :sm="24">
@@ -138,19 +144,22 @@
<!--演讲信息begin-->
<template v-if="model.guestType !== 3">
<div class="item-title">演讲信息</div>
<a-row :gutter="24">
<a-row :gutter="24" class="info flex-col">
<a-col :xxl="8" :xl="12" :sm="24">
<label class="label">演讲题目</label><span>{{ model.speechTopic }}</span>
</a-col>
<a-col :xxl="8" :xl="12" :sm="24">
<label class="label">演讲PPT</label> <preview-file v-if="model.speechPpt" :file-id="model.speechPpt"></preview-file>
<label class="label">演讲PPT</label>
<preview-file v-if="model.speechPpt" :file-id="model.speechPpt"></preview-file>
</a-col>
<a-col :xxl="8" :xl="12" :sm="24" style="display: flex" >
<label class="label">照片</label><span><j-image-upload v-if="model.photo" :return-id="true" v-model="model.photo " disabled></j-image-upload></span>
<a-col :xxl="8" :xl="12" :sm="24" style="display: flex">
<label class="label">照片</label><span><j-image-upload v-if="model.photo" :return-id="true"
v-model="model.photo "
disabled></j-image-upload></span>
</a-col>
</a-row>
<a-row :gutter="24">
<a-col :xxl="8" :xl="12" :sm="24">
<a-row :gutter="24" class="info-textarea flex-col">
<a-col :xxl="22" :xl="22" :sm="22">
<label class="label">个人简介</label><span>{{ model.profile }}</span>
</a-col>
</a-row>
@@ -174,7 +183,7 @@
<!--住店信息begin-->
<template v-if="model.guestType !== 3">
<div class="item-title">住店信息</div>
<a-row :gutter="24">
<a-row :gutter="24" class="info flex-col">
<a-col :xxl="8" :xl="12" :sm="24">
<label class="label">是否住酒店</label><span>{{ model.checkInHotel_dictText }}</span>
</a-col>
@@ -196,21 +205,21 @@
<!--行程信息begin-->
<template>
<div class="item-title">行程信息</div>
<a-row :gutter="24">
<a-row :gutter="24" class="info flex-col">
<a-col :xxl="8" :xl="12" :sm="24">
<label class="label">是否需要接站</label><span>{{ model.pickUp_dictText }}</span>
</a-col>
<div v-if="model.pickUp === 1">
<a-col :xxl="8" :xl="12" :sm="24" >
<label class="label">抵达时间</label><span>{{ model.arrivalTime }}</span>
</a-col>
<a-col :xxl="8" :xl="12" :sm="24">
<label class="label">到达站</label><span>{{ model.destination }}</span>
</a-col>
<a-col :xxl="8" :xl="12" :sm="24">
<label class="label">到达班次</label><span>{{ model.arrivalShift }}</span>
</a-col>
</div>
<div v-if="model.pickUp === 1">
<a-col :xxl="8" :xl="12" :sm="24">
<label class="label">抵达时间</label><span>{{ model.arrivalTime }}</span>
</a-col>
<a-col :xxl="8" :xl="12" :sm="24">
<label class="label">到达站</label><span>{{ model.destination }}</span>
</a-col>
<a-col :xxl="8" :xl="12" :sm="24">
<label class="label">到达班次</label><span>{{ model.arrivalShift }}</span>
</a-col>
</div>
<a-col :xxl="8" :xl="12" :sm="24">
<label class="label">是否需要送站</label><span>{{ model.deliveryStation_dictText }}</span>
</a-col>
@@ -229,8 +238,8 @@
<label class="label">同行人</label><span>{{ model.peer }}</span>
</a-col>
</a-row>
<a-row :gutter="24" v-if="model.guestType !== 3">
<a-col :xxl="8" :xl="12" :sm="24">
<a-row :gutter="24" v-if="model.guestType !== 3" class="info-textarea flex-col">
<a-col :xxl="22" :xl="22" :sm="22">
<label class="label">备注</label><span>{{ model.remark }}</span>
</a-col>
</a-row>
@@ -309,6 +318,33 @@ export default {
<style scoped lang="less">
@import '~@assets/less/common.less';
.info {
.ant-col {
span {
display: inline-block;
word-break: keep-all;
white-space: nowrap;
max-width: calc(100% - 100px);
overflow: hidden;
text-overflow: ellipsis;
}
}
}
//会议内容、备注的样式
.info-textarea {
display: flex;
label {
flex-shrink: 0;
}
}
.flex-col {
.ant-col {
display: flex;
}
}
.ant-row {
line-height: 3;
@@ -242,7 +242,6 @@ export default {
if(this.model.id){
this.title = '编辑参会人'
}
console.log(this.model)
// 设置编辑的显示隐藏状态
this.identifyType = this.model.identity
this.guestType = this.model.guestType ? this.model.guestType : null
@@ -265,9 +264,16 @@ export default {
if(record.payMode === 3){
this.$refs.formother.payModeBool = true
}
// 缴费方式为汇款 需要显示发票字段
if(record.payMode === 1){
this.$refs.formother.payModeBool = false
}
// 缴费方式为线上的需要回显订单号后四位
if(record.payMode === 2){
this.$refs.formother.onlinePayModeBool = true
// 控制发票是否显示的字段
this.$refs.formother.payModeBool = false
}
this.$refs.formother.setFormVal(this.model)
}
@@ -377,6 +383,11 @@ export default {
* */
changeCompany(value) {
this.selectedCompany = value
// 选择企业清空 姓名 手机号
this.form.resetFields(['companyContactId','phone'])
if(this.$refs.formother ){
this.$refs.formother.clearFormItem()
}
},
/*
* 选择联系人获取信息
@@ -1,37 +1,37 @@
export default {
meetingType: {
rules: [
{ required: true, message: '请选择会议类型!' },
{ required: true, message: '请选择会议类型' },
],
validateTrigger:['blur','change']
},
convokeTime: {
rules: [
{ required: true, message: '请选择召开时间!' },
{ required: true, message: '请选择召开时间' },
],
validateTrigger:['change']
},
meetingContent:{
rules: [
{ required: true, message: '请输入会议内容!' },
{ required: true, message: '请输入会议内容' },
],
validateTrigger:['blur']
},
registerDeadline:{
rules: [
{ required: true, message: '请选择报名截止时间!' },
{ required: true, message: '请选择报名截止时间' },
],
validateTrigger:['blur','change']
},
convokeLocale: {
rules: [
{ required: true, message: '请选择省市!' },
{ required: true, message: '请选择省市' },
],
validateTrigger:['blur','change']
validateTrigger:['change']
},
address:{
rules: [
{ required: true, message: '请输入详细地址!' },
{ required: true, message: '请输入详细地址' },
],
validateTrigger:['blur']
},
@@ -49,43 +49,43 @@ export default {
},
tbMeetingType:{
rules: [
{ required: true, message: '请选择标协会议类型' },
{ required: true, message: '请选择标协会议类型' },
],
validateTrigger:['blur','change']
},
signInTime:{
rules: [
{ required: true, message: '请选择注册签到时间' },
{ required: true, message: '请选择注册签到时间' },
],
validateTrigger:['change']
},
meetingCostsVip:{
rules: [
{ required: true, message: '请输入会议费用' },
{ required: true, message: '请输入会议费用' },
],
validateTrigger:['blur','change']
},
hotelName:{
rules: [
{ required: true, message: '请输入酒店名称' },
{ required: true, message: '请输入酒店名称' },
],
validateTrigger:['blur']
},
hotelAddress:{
rules: [
{ required: true, message: '请输入酒店地址' },
{ required: true, message: '请输入酒店地址' },
],
validateTrigger:['blur']
},
contactPerson:{
rules: [
{ required: true, message: '请输入酒店联系人' },
{ required: true, message: '请输入酒店联系人' },
],
validateTrigger:['blur']
},
telephoneNumber:{
rules: [
{ required: true, message: '请输入联系人手机号' },
{ required: true, message: '请输入联系人手机号' },
],
validateTrigger:['blur']
}
@@ -49,15 +49,18 @@
<label>需要发票</label>
<span>{{model.needInvoice_dictText}}</span></a-col>
</a-row>
</section>
<a-row :gutter="24">
<a-row :gutter="24" style="margin-top: 10px">
<a-col :span="3">
<label>缴费凭证</label>
<label class="color-999">缴费凭证</label>
</a-col>
<a-col :span="10">
<a-col :span="9">
<j-image-upload disabled :return-id="true" v-model="model.paymentRecord"></j-image-upload>
</a-col>
<!-- 缴费上方式为线上的 显示 -->
<a-col :span="12" v-if="model.payMode === 2 ">
<label class="color-999">订单后四位</label>
<span class="color-black">{{model.orderCode}}</span></a-col>
</a-row>
<h3>审核</h3>
@@ -265,7 +268,7 @@ export default {
// 审核结果选择拒绝 审核说明必填
if(e.target.value === '1'){
this.checkBool = false
}else if(e.target.value === '0'){
}else if(e.target.value === '2'){
this.checkBool = true
}
},
@@ -309,4 +312,11 @@ export default {
color: black;
}
}
.color-999 {
color: #999;
}
.color-black {
color:black;
}
</style>
@@ -87,21 +87,21 @@
<!--入住酒店选择是才显示-->
<a-col :xxl="8" :xl="12" :sm="24" v-if="inHotelBool">
<a-form-item label="入住酒店时间" :labelCol="labelCol" :wrapperCol="wrapperCol">
<j-date :disabled="isEditBool" v-decorator="['inHotelTime']" :trigger-change="true" show-type="day"
<j-date :disabled="isEditBool" v-decorator="['inHotelTime',validatorRules.inHotelTime]" :trigger-change="true" show-type="day"
placeholder="请选择入住酒店时间"></j-date>
</a-form-item>
</a-col>
<a-col :xxl="8" :xl="12" :sm="24" v-if="inHotelBool">
<a-form-item label="离店时间" :labelCol="labelCol" :wrapperCol="wrapperCol">
<j-date :disabled="isEditBool" :disabled-date="disabledEndDate" :trigger-change="true" show-type="day"
v-decorator="['outHotelTime']" placeholder="请选择离店时间"></j-date>
v-decorator="['outHotelTime',validatorRules.outHotelTime]" placeholder="请选择离店时间"></j-date>
</a-form-item>
</a-col>
<a-col :xxl="8" :xl="12" :sm="24" v-if="inHotelBool">
<a-form-item label="房型" :labelCol="labelCol" :wrapperCol="wrapperCol">
<a-input :disabled="isEditBool" @change="event => event.target.value = event.target.value.trim()"
:maxLength="50"
v-decorator="['roomLayout']"
v-decorator="['roomLayout',validatorRules.roomLayout]"
placeholder="请输入房型"></a-input>
</a-form-item>
</a-col>
@@ -124,7 +124,7 @@
<a-row :gutter="24">
<a-col :xxl="8" :xl="12" :sm="24" v-if="pickUpBool">
<a-form-item label="抵达时间" :labelCol="labelCol" :wrapperCol="wrapperCol">
<j-date :disabled="isEditBool" placeholder="请选择抵达时间" style="width: 100%;" v-decorator="['arrivalTime']"
<j-date :disabled="isEditBool" placeholder="请选择抵达时间" style="width: 100%;" v-decorator="['arrivalTime',validatorRules.arrivalTime]"
:trigger-change="true"
show-type="day"
date-format="YYYY-MM-DD"/>
@@ -135,7 +135,7 @@
<a-form-item label="到达站" :labelCol="labelCol" :wrapperCol="wrapperCol">
<a-input :disabled="isEditBool" placeholder="请输入到达站"
@change="event => event.target.value = event.target.value.trim()" :maxLength="50"
v-decorator="[ 'destination']"></a-input>
v-decorator="[ 'destination',validatorRules.destination]"></a-input>
</a-form-item>
</a-col>
@@ -143,7 +143,7 @@
<a-form-item label="到达班次" :labelCol="labelCol" :wrapperCol="wrapperCol">
<a-input :disabled="isEditBool" placeholder="请输入到达班次"
@change="event => event.target.value = event.target.value.trim()" :maxLength="50"
v-decorator="[ 'arrivalShift']"></a-input>
v-decorator="[ 'arrivalShift',validatorRules.arrivalShift]"></a-input>
</a-form-item>
</a-col>
</a-row>
@@ -162,7 +162,7 @@
<!--送站选择是才显示-->
<a-col :xxl="8" :xl="12" :sm="24" v-if="sendBool">
<a-form-item label="离开时间" :labelCol="labelCol" :wrapperCol="wrapperCol">
<j-date :disabled="isEditBool" placeholder="请选择离开时间" style="width: 100%;" v-decorator="['departureTime']"
<j-date :disabled="isEditBool" placeholder="请选择离开时间" style="width: 100%;" v-decorator="['departureTime',validatorRules.departureTime]"
:trigger-change="true"
show-type="day"
date-format="YYYY-MM-DD"/>
@@ -173,7 +173,7 @@
<a-form-item label="离开站" :labelCol="labelCol" :wrapperCol="wrapperCol">
<a-input :disabled="isEditBool" placeholder="请输入离开站"
@change="event => event.target.value = event.target.value.trim()" :maxLength="50"
v-decorator="[ 'departureStation']"></a-input>
v-decorator="[ 'departureStation',validatorRules.departureStation]"></a-input>
</a-form-item>
</a-col>
@@ -182,7 +182,7 @@
<a-form-item label="离开班次" :labelCol="labelCol" :wrapperCol="wrapperCol">
<a-input :disabled="isEditBool" placeholder="请输入离开班次"
@change="event => event.target.value = event.target.value.trim()" :maxLength="50"
v-decorator="[ 'departureShift']"></a-input>
v-decorator="[ 'departureShift',validatorRules.departureShift]"></a-input>
</a-form-item>
</a-col>
</a-row>
@@ -274,14 +274,51 @@ export default {
rules: [{ required: true, message: '请选择是否入住酒店' }],
validateTrigger: 'change'
},
inHotelTime:{
rules: [{ required: true, message: '请选择入住酒店时间' }],
validateTrigger: 'change'
},
outHotelTime:{
rules: [{ required: true, message: '请选择离店时间' }],
validateTrigger: 'change'
},
roomLayout:{
rules: [{ required: true, message: '请输入房型' }],
validateTrigger: 'blur'
},
pickUp: {
rules: [{ required: true, message: '请选择是否接站' }],
validateTrigger: 'change'
},
departureTime:{
rules: [{ required: true, message: '请选择离开时间' }],
validateTrigger: 'change'
},
departureStation:{
rules: [{ required: true, message: '请输入离开站' }],
validateTrigger: 'blur'
},
arrivalShift:{
rules: [{ required: true, message: '请输入到达班次' }],
validateTrigger: 'blur'
},
deliveryStation: {
rules: [{ required: true, message: '请选择是否送站' }],
validateTrigger: 'change'
}
},
arrivalTime:{
rules: [{ required: true, message: '请选择抵达时间' }],
validateTrigger: 'change'
},
destination:{
rules: [{ required: true, message: '请输入到达站' }],
validateTrigger: 'blur'
},
departureShift:{
rules: [{ required: true, message: '请输入离开班次' }],
validateTrigger: 'blur'
},
}
}
@@ -21,10 +21,6 @@
</a-row>
</a-form>
</a-spin>
<template slot="footer">
<a-button @click="handleCancel">关闭</a-button>
<a-button @click="handleOk" type="primary" v-preventclick>确定</a-button>
</template>
</j-modal>
</template>
@@ -116,6 +112,10 @@ export default {
},
handleOk() {
const that = this
if (this.confirmLoading) {
return
}
this.confirmLoading = true
// 触发表单验证
this.form.validateFields((err, values) => {
if(!err && values.fileIds !== undefined){
@@ -127,8 +127,18 @@ export default {
if(res.success){
that.$message.success(res.message)
that.$emit('ok')
this.confirmLoading = false
that.close()
}else {
this.$message.warn(res.message)
this.confirmLoading = false
}
}).catch((err) => {
console.log(err,'err')
}).finally(() => {
setTimeout(() => {
this.confirmLoading = false
}, 1000)
})
}else {
that.close()
@@ -38,7 +38,7 @@
<a-form-item label="收费标准" :labelCol="labelCol" :wrapperCol="wrapperCol">
<a-input placeholder="请输入收费标准"
:maxLength='50'
v-decorator="[ 'chargeStandard']"
v-decorator="[ 'chargeStandard',validatorRules.chargeStandard]"
@blur="addZero"
@change="(e) => {e.target.value = e.target.value.replace(/[^0-9.]/g,'')}"></a-input>
<span class="yuan"></span>
@@ -90,6 +90,7 @@ import JYearDate from '@comp/jero/JYearDate'
import JUpload from '@comp/jero/JUpload'
import SelectPrincipal from '@comp/company/SelectPrincipal'
import {addZero} from '@/utils/util'
import {money} from '@/utils/validate'
export default {
name: 'MemberProjectModal',
@@ -129,6 +130,12 @@ export default {
rules: [{required: true, message: '请输入会员项目'}],
validateTrigger: 'blur'
},
chargeStandard:{
rules: [
{required: false, validator: this.validateMoney},
],
validateTrigger: ['blur']
},
particularYear: {
rules: [{required: true, message: '请选择年份'}],
validateTrigger: ['change','blur']
@@ -196,6 +203,17 @@ export default {
handleCancel() {
this.close()
},
validateMoney(rule, value, callback) {
if(value){
if (value && money(value)) {
callback()
} else {
callback('请输入合法的金额数字,最多2位小数,10位正数')
}
}else {
callback()
}
},
}
}
</script>
@@ -204,5 +222,6 @@ export default {
.yuan {
position: absolute;
right: -20px;
top: -10px;
}
</style>
@@ -23,6 +23,7 @@
v-decorator="['companyId', validatorRules.companyId]"
@change="companyChange"
:maxLength="50"
:disabled="disabledCompany"
>
</company-select>
</a-form-item>
@@ -117,6 +118,7 @@
<a-radio-group
v-decorator="['paymentMethod', validatorRules.paymentMethod]"
@change="changePaymentMethod"
:disabled="isAssociatedContract"
>
<a-radio :value="2">合同</a-radio>
<a-radio :value="3">收费通知</a-radio>
@@ -134,6 +136,7 @@
placeholder="请输入合同号"
:maxLength="50"
v-decorator="['contractNo', validatorRules.contractNo]"
:disabled="isAssociatedContract"
@change="
(e) => {
e.target.value = (e.target.value + '').trim();
@@ -173,8 +176,8 @@
file-type="pdf"
file-type-error-message="请上传收费通知"
:multiple="false"
:return-id="true"
:number="1"
bizPath="payment"
v-decorator="['chargeNoticeFileId']"
:trigger-change="true"
></j-upload>
@@ -220,6 +223,8 @@ import CompanySelect from '@comp/company/CompanySelect'
// import ContactManagementModule from '@views/businessManagement/modules/ContactManagementModule'
import SelectContacts from '@comp/company/SelectContacts'
import {addZero} from '@/utils/util'
import {money} from '@/utils/validate'
import {checkAssociatedProject} from '@/utils/projectCheck'
export default {
name: 'SafeguardMemberModal',
@@ -276,9 +281,12 @@ export default {
initialValue: 3,
},
amountReceivable: {
rules: [{ required: true, message: '请输入应收金额' }],
validateTrigger: 'blur',
rules: [
{required: true, validator: this.validateMoney},
],
validateTrigger: ['blur']
},
chargeNoticeNo: {
rules: [{ required: true, message: '请输入收费通知号' }],
validateTrigger: 'blur',
@@ -303,6 +311,8 @@ export default {
add: '/jero/memberProjectSubitem/add',
edit: '/jero/memberProjectSubitem/edit',
},
disabledCompany: false, // 企业是否可以编辑
isAssociatedContract: false, // 是否已关联合同
}
},
methods: {
@@ -310,12 +320,32 @@ export default {
add() {
this.edit({})
},
validateMoney(rule, value, callback) {
if (value === undefined || value === '' || value === null) {
callback('请输入应收金额')
}
if (value && money(value)) {
callback()
} else {
callback('请输入合法的金额数字,最多2位小数,10位正数')
}
},
edit(record) {
// 清除定时器
if (this.timer) {
clearTimeout(this.timer)
}
this.form.resetFields()
// 判断企业是否可以编辑,项目来款、开票、邮寄、打包、关联合同后,企业不可更改
if (record.id) {
// 验证项目是否关联收入合同
checkAssociatedProject(record.id).then(res => {
this.disabledCompany = this.disabledChargeCompany || res || (!!record.inAccount && record.inAccount !== 0) || (!!record.makeInvoice && record.makeInvoice !== 0) || (!!record.mail && record.mail !== 0)
this.isAssociatedContract = res
})
} else {
this.disabledCompany = this.disabledChargeCompany
}
// 如果没有id 就是新增 新增需要将上级的项目收费通知与文件回显
let flag = Object.prototype.hasOwnProperty.call(record, 'id')
@@ -376,7 +406,10 @@ export default {
close() {
this.incomePaysType = 3
this.$emit('close')
this.disabledCompany = false
this.isAssociatedContract = false
this.visible = false
clearTimeout(this.timer)
},
handleOk() {
@@ -448,5 +481,6 @@ export default {
.yuan {
position: absolute;
right: -20px;
top: -10px;
}
</style>
+22 -8
View File
@@ -31,7 +31,8 @@
<!-- 操作按钮区域-->
<div class="table-operator">
<a-button type="primary" icon="plus" @click="handleAdd" v-has="'packCompany:add'">新增</a-button>
<a-button type="primary" icon="export" @click="handleExportXls('打包企业列表')" v-has="'packCompany:export'">导出</a-button>
<a-button type="primary" icon="export" @click="handleExportXls('打包管理')" v-has="'packCompany:export'">导出
</a-button>
<a-button type="danger" icon="delete" @click="batchDel" v-has="'packCompany:batchDel'">批量删除</a-button>
</div>
<!-- 操作按钮区域-end-->
@@ -54,7 +55,8 @@
<!-- 项目名称-->
<template slot="projectName" slot-scope="text, record">
<j-ellipsis :value="text" :length="18" class="primary-color" @click="toProjectMaintenance(record)"></j-ellipsis>
<j-ellipsis :value="text" :length="18" class="primary-color"
@click="toProjectMaintenance(record)"></j-ellipsis>
</template>
@@ -117,12 +119,6 @@ export default {
width: 140,
dataIndex: 'packYear',
scopedSlots: { customRender: 'text' }
}, {
title: '企业联系人',
align: 'center',
width: 280,
dataIndex: 'companyContactTemporaryName',
scopedSlots: { customRender: 'text' }
}, {
title: '打包联系人',
align: 'center',
@@ -141,6 +137,24 @@ export default {
width: 180,
dataIndex: 'receiptExpense',
scopedSlots: { customRender: 'text' }
}, {
title: '企业联系人',
align: 'center',
width: 280,
dataIndex: 'companyContactTemporaryName',
scopedSlots: { customRender: 'text' }
}, {
title: '联系人电话',
align: 'center',
width: 200,
dataIndex: 'phone',
scopedSlots: { customRender: 'text' }
}, {
title: '邮箱',
align: 'center',
width: 280,
dataIndex: 'email',
scopedSlots: { customRender: 'text' }
}, {
title: '操作',
dataIndex: 'action',
@@ -184,7 +184,7 @@ export default {
title: '打包项目名称',
align: 'center',
dataIndex: 'chargeProject',
scopedSlots: { customRender: 'projectName' }
scopedSlots: { customRender: 'text' }
}, {
title: '应收金额',
align: 'center',
@@ -51,8 +51,8 @@
</j-date>
</a-form-item>
</a-col>
<a-col :xl="6" :lg="7" :md="8" :sm="24">
<!-- 标协会议不显示-->
<a-col :xl="6" :lg="7" :md="8" :sm="24" v-if="$route.query.meetingType === '5' ">
<a-form-item label="已提醒" :labelCol="labelCol" :wrapperCol="wrapperCol">
<j-dict-select-tag style="width: 100%"
dict-code="yn"
@@ -62,7 +62,8 @@
</a-col>
<a-col :xl="6" :lg="7" :md="8" :sm="24">
<span class="table-page-search-submitButtons">
<a-button type="primary" icon="search" @click="searchQuery" v-has:[authorCode.search]="'committeeMeeting:search'">查询</a-button>
<a-button type="primary" icon="search" @click="searchQuery"
v-has:[authorCode.search]="'committeeMeeting:search'">查询</a-button>
<a-button icon="reload" @click="searchReset" class="reset-button">重置</a-button>
</span>
</a-col>
@@ -73,11 +74,18 @@
<!-- 操作按钮区域-->
<div class="table-operator">
<a-button type="primary" icon="plus" @click="handleAdd" v-has:[authorCode.add]="'committeeMeeting:add'">新增</a-button>
<a-button type="primary" icon="export" @click="handleExportXls('会议维护')" v-has:[authorCode.search]="'committeeMeeting:export'">导出</a-button>
<a-button type="danger" icon="delete" @click="batchDel" v-has:[authorCode.batchDel]="'committeeMeeting:batchDel'">批量删除</a-button>
<a-button type="primary" icon="plus" @click="handleAdd" v-has:[authorCode.add]="'committeeMeeting:add'">新增
</a-button>
<a-button type="primary" icon="export" @click="handleExportXls('会议维护')"
v-has:[authorCode.search]="'committeeMeeting:export'">导出
</a-button>
<a-button type="danger" icon="delete" @click="batchDel"
v-has:[authorCode.batchDel]="'committeeMeeting:batchDel'">批量删除
</a-button>
<!--只有工作会议与分标委会议才有-->
<a-button type="primary" @click="publishRemind" v-if="meetingType === '5' " v-has="'committeeMeeting:publish'">发布</a-button>
<a-button type="primary" @click="publishRemind" v-if="meetingType === '5' " v-has="'committeeMeeting:publish'">
发布
</a-button>
</div>
<!-- /操作按钮区域-end-->
@@ -89,7 +97,7 @@
bordered
rowKey="id"
:scroll="{x:true}"
:columns="columns"
:columns="newColumns"
:dataSource="dataSource"
:pagination="ipagination"
:loading="loading"
@@ -98,7 +106,8 @@
class="j-table-force-nowrap">
<template slot="htmlSlot" slot-scope="text,record">
<j-ellipsis class="primary-color" @click="toAttendance(record)" v-if="text" :value="text" :length="20"></j-ellipsis>
<j-ellipsis class="primary-color" @click="toAttendance(record)" v-if="text" :value="text"
:length="20"></j-ellipsis>
<span v-else></span>
</template>
@@ -197,7 +206,8 @@ export default {
align: 'center',
dataIndex: 'startTime',
width: 160,
customRender: (text, record) => (<j-ellipsis value={record.startTime + '~' + record.endTime} length={20}></j-ellipsis>)
customRender: (text, record) => (
<j-ellipsis value={record.startTime + '~' + record.endTime} length={20}></j-ellipsis>)
},
{
title: '召开地点',
@@ -234,51 +244,51 @@ export default {
scopedSlots: {customRender: 'action'}
},
],
newColumns: [],
// 权限编码
authorCode:{
},
authorCode: {},
// 分标委的权限编码
committeeMeetingAuthorCode:{
add:'committeeMeeting:add',
search:'committeeMeeting:search',
export:'committeeMeeting:export',
batchDel:'committeeMeeting:batchDel',
upload:'committeeMeeting:upload',
edit:'committeeMeeting:edit',
delete:'committeeMeeting:delete'
committeeMeetingAuthorCode: {
add: 'committeeMeeting:add',
search: 'committeeMeeting:search',
export: 'committeeMeeting:export',
batchDel: 'committeeMeeting:batchDel',
upload: 'committeeMeeting:upload',
edit: 'committeeMeeting:edit',
delete: 'committeeMeeting:delete'
},
// 标协会议的权限编码
standardsMeetingAuthorCode:{
add:'standardsMeeting:add',
search:'standardsMeeting:search',
export:'standardsMeeting:export',
batchDel:'standardsMeeting:batchDel',
upload:'standardsMeeting:upload',
edit:'standardsMeeting:edit',
delete:'standardsMeeting:delete'
standardsMeetingAuthorCode: {
add: 'standardsMeeting:add',
search: 'standardsMeeting:search',
export: 'standardsMeeting:export',
batchDel: 'standardsMeeting:batchDel',
upload: 'standardsMeeting:upload',
edit: 'standardsMeeting:edit',
delete: 'standardsMeeting:delete'
}
}
},
created() {
this.filters.meetingType = this.meetingType
// 分标委会议需要加上分标委id
if(this.meetingType === '5'){
if (this.meetingType === '5') {
// 在这改变v-has 的值 用分标委的会议权限
this.authorCode = Object.assign({},this.committeeMeetingAuthorCode)
this.authorCode = Object.assign({}, this.committeeMeetingAuthorCode)
this.filters.caseCommitteeId = this.caseCommitteeId
}
// 如果是标协会议 用标协会议权限
if(this.meetingType === '2'){
this.authorCode = Object.assign({},this.standardsMeetingAuthorCode)
if (this.meetingType === '2') {
this.authorCode = Object.assign({}, this.standardsMeetingAuthorCode)
}
this.loadData(1)
// 不是分标委会议去掉提醒字段
if (this.meetingType !== 5) {
console.log(this.columns)
if (this.meetingType !== '5') {
this.newColumns = [...this.columns]
// 找出提醒字段的索引
let index = this.columns.findIndex(item => item.dataIndex === 'remind_dictText')
this.columns.splice(index, 1)
this.newColumns = this.newColumns.filter(item => item.dataIndex !== 'remind_dictText')
} else {
this.newColumns = [...this.columns]
}
},
computed: {
@@ -290,23 +300,23 @@ export default {
return this.$route.query.meetingType + ''
},
// 分标委id
caseCommitteeId(){
caseCommitteeId() {
return this.$route.query.id ? this.$route.query.id : undefined
},
// eslint-disable-next-line
url() {
let meetingType = this.$route.query.meetingType + ''
let meetingType = this.$route.query.meetingType + ''
// 标协会议
if(meetingType === '2'){
if (meetingType === '2') {
return {
list: '/meeting/standardsMeeting/page',
delete: '/meeting/standardsMeeting/delete',
deleteBatch: '/meeting/standardsMeeting/deleteBatch',
exportXlsUrl: '/meeting/standardsMeeting/exportXls',
}
}else if(meetingType === '5') {
} else if (meetingType === '5') {
// 分标委会议
return {
return {
list: '/meeting/committeeMeeting/page',
delete: '/meeting/committeeMeeting/delete',
deleteBatch: '/meeting/committeeMeeting/deleteBatch',
@@ -321,21 +331,21 @@ export default {
* */
handleAdd() {
// 分标委的新增应该是需要分标委的id
if(this.meetingType === '5'){
if (this.meetingType === '5') {
this.$router.push({
path: '/incomePayments/meetManage/AddOrDetailMeet',
query: {
meetingType:this.meetingType,
caseCommitteeId:this.caseCommitteeId
meetingType: this.meetingType,
caseCommitteeId: this.caseCommitteeId
}
})
}
// 标协会议新增
if(this.meetingType === '2'){
if (this.meetingType === '2') {
this.$router.push({
path: '/incomePayments/meetManage/AddOrDetailMeet',
query: {
meetingType:this.meetingType
meetingType: this.meetingType
}
})
}
@@ -358,13 +368,20 @@ export default {
* 参会情况
* */
toAttendance(record) {
const that = this
let path = ''
let meetingType = this.$route.query.meetingType + ''
// 分标委会议与标协会议的跳转
if (meetingType === '2') {
path = '/incomePayments/meetManage/AttendanceStandardsMeeting'
} else if (meetingType === '5') {
path = '/incomePayments/meetManage/AttendanceCommitteeMeeting'
}
this.$router.push({
path: '/incomePayments/meetManage/Attendance',
path: path,
query: {
id: record.id,
meetingName: record.meetingName,
meetingType:that.$route.query.meetingType + ''
meetingType: meetingType
}
})
},
@@ -1,129 +1,130 @@
<template>
<a-card :bordered="false">
<div class="title">
<a-icon type="left" :style="{ fontSize: '22px' }" @click="backWorkingGroupProject"></a-icon>
<span class="title-text">{{ workingGroupProject }}</span>
</div>
<div class="divider"></div>
<div>
<page-header-title :is-level-one="false" :level-two-title="workingGroupProject"></page-header-title>
<a-card :bordered="false">
<!-- 查询区域-->
<div class="table-page-search-wrapper">
<a-form layout="inline" @keyup.enter.native="searchQuery">
<a-row>
<a-col :xl="6" :lg="7" :md="8" :sm="24">
<a-form-item label="会议名称" :labelCol="labelCol" :wrapperCol="wrapperCol">
<a-input placeholder="请输入会议名称" v-model="queryParam.meetingName" :maxLength='50'></a-input>
</a-form-item>
</a-col>
<a-col :xl="10" :lg="12" :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="年份" :labelCol="labelCol" :wrapperCol="wrapperCol">
<j-year-date style="width:100%" placeholder="请选择年份"
v-model="queryParam.particularYear"></j-year-date>
</a-form-item>
</a-col>
<a-col :xl="10" :lg="12" :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>
<!-- 查询区域-->
<div class="table-page-search-wrapper">
<a-form layout="inline" @keyup.enter.native="searchQuery">
<a-row>
<a-col :xl="6" :lg="7" :md="8" :sm="24">
<a-form-item label="会议名称" :labelCol="labelCol" :wrapperCol="wrapperCol">
<a-input placeholder="请输入会议名称" v-model="queryParam.meetingName" :maxLength='50'></a-input>
</a-form-item>
</a-col>
<a-col :xl="10" :lg="12" :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="年份" :labelCol="labelCol" :wrapperCol="wrapperCol">
<j-year-date style="width:100%" placeholder="请选择年份"
v-model="queryParam.particularYear"></j-year-date>
</a-form-item>
</a-col>
<a-col :xl="10" :lg="12" :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">
<a-form-item label="已提醒" :labelCol="labelCol" :wrapperCol="wrapperCol">
<j-dict-select-tag style="width: 100%"
dict-code="yn"
v-model="queryParam.remind"
placeholder="请选择提醒类型"></j-dict-select-tag>
</a-form-item>
</a-col>
<a-col :xl="6" :lg="7" :md="8" :sm="24">
<a-col :xl="6" :lg="7" :md="8" :sm="24">
<a-form-item label="已提醒" :labelCol="labelCol" :wrapperCol="wrapperCol">
<j-dict-select-tag style="width: 100%"
dict-code="yn"
v-model="queryParam.remind"
placeholder="请选择提醒类型"></j-dict-select-tag>
</a-form-item>
</a-col>
<a-col :xl="6" :lg="7" :md="8" :sm="24">
<span class="table-page-search-submitButtons">
<a-button type="primary" icon="search" @click="searchQuery"
v-has="'workGroupMeeting:search'">查询</a-button>
<a-button icon="reload" @click="searchReset" class="reset-button">重置</a-button>
</span>
</a-col>
</a-row>
</a-form>
</div>
<!-- /查询区域-->
</a-col>
</a-row>
</a-form>
</div>
<!-- /查询区域-->
<!-- 操作按钮区域-->
<div class="table-operator">
<a-button type="primary" icon="plus" @click="handleAdd" v-has="'workGroupMeeting:add'" v-if="canOperate">新增</a-button>
<a-button type="primary" icon="export" @click="handleExportXls('工作组会议')"
v-has="'workGroupMeeting:export'">导出
</a-button>
<a-button type="danger" icon="delete" @click="batchDel" v-has="'workGroupMeeting:batchDel'" v-if="canOperate">批量删除</a-button>
<a-button type="primary" @click="publishRemind" v-has="'workGroupMeeting:publish'" v-if="canOperate">发布</a-button>
</div>
<!-- /操作按钮区域-end-->
<!-- 操作按钮区域-->
<div class="table-operator">
<a-button type="primary" icon="plus" @click="handleAdd" v-has="'workGroupMeeting:add'" v-if="canOperate">新增
</a-button>
<a-button type="primary" icon="export" @click="handleExportXls('工作组会议')"
v-has="'workGroupMeeting:export'">导出
</a-button>
<a-button type="danger" icon="delete" @click="batchDel" v-has="'workGroupMeeting:batchDel'" v-if="canOperate">
批量删除
</a-button>
<a-button type="primary" @click="publishRemind" v-has="'workGroupMeeting:publish'" v-if="canOperate">发布
</a-button>
</div>
<!-- /操作按钮区域-end-->
<!-- table表格区域-->
<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}"
@change="handleTableChange"
class="j-table-force-nowrap">
<!-- table表格区域-->
<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}"
@change="handleTableChange"
class="j-table-force-nowrap">
<!-- 会议名称 点击去参会情况-->
<template slot="htmlSlot" slot-scope="text, record">
<j-ellipsis v-if="!!text" class="primary-color" :value="text" :length="20"
@click="toAttendance(record)"></j-ellipsis>
</template>
<!-- 会议名称 点击去参会情况-->
<template slot="htmlSlot" slot-scope="text, record">
<j-ellipsis v-if="!!text" class="primary-color" :value="text" :length="20"
@click="toAttendance(record)"></j-ellipsis>
</template>
<template slot="text" slot-scope="text">
<j-ellipsis :value="text" :length="20"></j-ellipsis>
</template>
<template slot="text" slot-scope="text">
<j-ellipsis :value="text" :length="20"></j-ellipsis>
</template>
<span slot="action" class="action-span-cell" slot-scope="text, record" v-if="canOperate">
<span slot="action" class="action-span-cell" slot-scope="text, record" v-if="canOperate">
<a @click="uploadFile(record)" v-has="'workGroupMeeting:upload'">上传文件</a>
<!-- <a @click="applyMsg">报名信息</a>-->
<!-- <a @click="applyMsg">报名信息</a>-->
<a @click="handleEdit(record)" v-has="'workGroupMeeting:edit'">编辑</a>
<a @click="handleDelete(record.id)" v-has="'workGroupMeeting:delete'">删除</a>
</span>
</a-table>
</div>
<publish-remind-modal ref="publishRemindModal" @ok="modalFormOk"></publish-remind-modal>
<upload-meet-file-modal ref="modalForm" @ok="modalFormOk"></upload-meet-file-modal>
</a-card>
</a-table>
</div>
<publish-remind-modal ref="publishRemindModal" @ok="modalFormOk"></publish-remind-modal>
<upload-meet-file-modal ref="modalForm" @ok="modalFormOk"></upload-meet-file-modal>
</a-card>
</div>
</template>
<script>
@@ -136,6 +137,7 @@ import JDictSelectTag from '@comp/dict/JDictSelectTag'
import PublishRemindModal from '@views/projectManagement/modules/PublishRemindModal'
import UploadMeetFileModal from '@views/incomePayments/meetManage/modules/UploadMeetFileModal'
import '@/assets/less/TableExpand.less'
import PageHeaderTitle from '../../components/layouts/PageHeaderTitle'
export default {
name: 'ConferenceMaintenance',
@@ -144,7 +146,8 @@ export default {
JDate,
JDictSelectTag,
PublishRemindModal,
UploadMeetFileModal
UploadMeetFileModal,
PageHeaderTitle
},
mixins: [JeroListMixin, RangeDateMixin],
data() {
@@ -181,7 +184,7 @@ export default {
align: 'center',
dataIndex: 'meetingName',
scopedSlots: { customRender: 'htmlSlot' },
width: 160,
width: 160
},
{
@@ -240,15 +243,15 @@ export default {
fixed: 'right',
width: 160,
scopedSlots: { customRender: 'action' }
},
}
],
url: {
list: '/meeting/workGroupMeeting/page',
delete: '/meeting/workGroupMeeting/delete',
deleteBatch: '/meeting/workGroupMeeting/deleteBatch',
exportXlsUrl: '/meeting/workGroupMeeting/exportXls',
exportXlsUrl: '/meeting/workGroupMeeting/exportXls'
},
canOperate: true, // 是否可操作(负责人B不可操作)
canOperate: true // 是否可操作(负责人B不可操作)
}
},
created() {
@@ -277,7 +280,7 @@ export default {
path: '/incomePayments/meetManage/AddOrDetailMeet',
query: {
workingGroupProjectId: currentId,
meetingType:'1'
meetingType: '1'
}
})
},
@@ -291,7 +294,7 @@ export default {
path: '/incomePayments/meetManage/AddOrDetailMeet',
query: {
workingGroupProjectId: currentId,
id: record.id,
id: record.id
}
})
},
@@ -328,11 +331,11 @@ export default {
* */
toAttendance(record) {
this.$router.push({
path: '/incomePayments/meetManage/Attendance',
path: '/incomePayments/meetManage/AttendanceWorkGroupMeeting',
query: {
id: record.id,
meetingName: record.meetingName,
meetingType:'1'
meetingType: '1'
}
})
},
@@ -366,7 +369,7 @@ export default {
this.queryParam.createTime_end = this.queryParam.createTime_end ? this.queryParam.createTime_end + ' ' + '23:59:59' : undefined
this.lastQueryParam = { ...this.queryParam }
this.loadData(1)
},
}
}
}
</script>
@@ -270,7 +270,7 @@ export default {
* */
toAttendance(record) {
this.$router.push({
path: '/incomePayments/meetManage/Attendance',
path: '/incomePayments/meetManage/AttendanceInternalMeeting',
query: {
id: record.id,
meetingName: record.meetingName,
+1 -1
View File
@@ -275,7 +275,7 @@ name: 'OtherMeeting',
* */
toAttendance(record) {
this.$router.push({
path: '/incomePayments/meetManage/Attendance',
path: '/incomePayments/meetManage/AttendanceOhterMeeting',
query: {
id: record.id,
meetingName: record.meetingName,
@@ -41,7 +41,8 @@
<a-row>
<a-col :xl="6" :lg="7" :md="8" :sm="24">
<a-form-item label="成员单位" :labelCol="labelCol" :wrapperCol="wrapperCol">
<a-input placeholder="请输入成员单位" v-model="queryParam.chargeCompanyTemporaryName" :maxLength='50'></a-input>
<a-input placeholder="请输入成员单位" v-model="queryParam.chargeCompanyTemporaryName"
:maxLength='50'></a-input>
</a-form-item>
</a-col>
<a-col :xl="6" :lg="7" :md="8" :sm="24">
@@ -69,9 +70,12 @@
<!-- 操作按钮区域-->
<div class="table-operator">
<a-button type="primary" icon="plus" @click="handleAdd" v-has="'workingGroupMember:add'" v-if="canOperate">添加成员</a-button>
<a-button type="primary" icon="plus" @click="handleAdd" v-has="'workingGroupMember:add'" v-if="canOperate">
添加成员
</a-button>
<a-upload name="file" :showUploadList="false" :multiple="false" :headers="tokenHeader" :data="importParam"
:action="importExcelUrl" @change="handleImportExcel" v-has="'workingGroupMember:import'" v-if="canOperate">
:action="importExcelUrl" @change="handleImportExcel" v-has="'workingGroupMember:import'"
v-if="canOperate">
<a-button type="primary" icon="import">导入</a-button>
</a-upload>
<a-button type="primary" icon="export" @click="handleExportXls('工作组成员')" v-has="'workingGroupMember:export'">
@@ -80,9 +84,14 @@
<a-button type="primary" icon="download" @click="downTemplate('工作组成员导入模板')"
v-has="'workingGroupMember:downTemplate'" v-if="canOperate">下载模板
</a-button>
<a-button type="danger" icon="delete" @click="batchDel" v-has="'workingGroupMember:batchDel'" v-if="canOperate">批量删除</a-button>
<a-button type="primary" @click="setChargeNotic" v-has="'workingGroupMember:setChargeNotic'" v-if="canOperate">设置收费通知</a-button>
<a-button type="primary" @click="setDunningReminder" v-has="'workingGroupMember:setDunningReminder'" v-if="canOperate">催款提醒
<a-button type="danger" icon="delete" @click="batchDel" v-has="'workingGroupMember:batchDel'" v-if="canOperate">
批量删除
</a-button>
<a-button type="primary" @click="setChargeNotic" v-has="'workingGroupMember:setChargeNotic'" v-if="canOperate">
设置收费通知
</a-button>
<a-button type="primary" @click="setDunningReminder" v-has="'workingGroupMember:setDunningReminder'"
v-if="canOperate">催款提醒
</a-button>
</div>
<!-- /操作按钮区域-end-->
@@ -261,6 +270,13 @@ export default {
width: 280,
dataIndex: 'contactsTemporaryNameOne',
scopedSlots: { customRender: 'text' }
}, {
// 2021-10-22需求变更新加
title: '收费通知号',
align: 'center',
width: 280,
dataIndex: 'chargeNoticeNo',
scopedSlots: { customRender: 'text' }
}, {
title: '应收金额',
align: 'center',
@@ -322,7 +338,7 @@ export default {
// lastQueryParam: {
// paymentDate: new Date().getFullYear().toString()
// },
canOperate: true, // 是否可操作(负责人B不可操作)
canOperate: true // 是否可操作(负责人B不可操作)
}
},
created() {
@@ -469,7 +485,7 @@ export default {
// let url = `${window._CONFIG['onlinePreviewDomainURL']}?url=${encodeURIComponent(fileFullUrl)}`
window.open(url)
}
},
}
// 2021 10 11 沟通后去掉了这个功能
// searchReset() {
// this.lastQueryParam = {
@@ -197,7 +197,7 @@ export default {
// 选择多个会议的时候不需要提醒字段 这样写是因为无法精准定位每一个人对应的每一个会议 这个人是否被提醒
if (meetingList.length > 1) {
// 去掉列表的提醒字段
this.newColumns = this.newColumns.filter(item => item.dataIndex !== 'remind')
this.newColumns = this.newColumns.filter(item => item.dataIndex !== 'remind_dictText')
}
this.searchReset()
},
@@ -69,7 +69,7 @@
<a-row>
<a-col :span="12">
<a-form-item label="本年应收款A" :labelCol="labelCol" :wrapperCol="wrapperCol">
<a-row>
<a-row :gutter="10">
<a-col :span="20">
<a-input placeholder="请输入本年应收款A"
v-decorator="['yearChargeA',validatorRules.checkMoney]"
@@ -105,7 +105,7 @@
<a-row>
<a-col :span="12">
<a-form-item label="本年应收款B" :labelCol="labelCol" :wrapperCol="wrapperCol">
<a-row>
<a-row :gutter="10">
<a-col :span="20">
<a-input placeholder="请输入本年应收款B"
v-decorator="['yearChargeB',validatorRules.checkMoney]"
+6 -3
View File
@@ -70,7 +70,7 @@
<a-row>
<img :src="singUpQRCode" class="qr-code"/>
</a-row>
<a-button type="primary" style="margin-left: 19px;" @click="toSingUpPage" v-if="!invalidationBool">立即报名
<a-button type="primary" style="margin-left: 19px;" @click="toSingUpPage" v-if="!invalidationBool && urlHaveIdBool">立即报名
</a-button>
</section>
</div>
@@ -105,12 +105,15 @@ export default {
// 会议id
meetingId: '',
// 当前时间是否超过报名截止时间
invalidationBool: false
invalidationBool: false,
// url是否有id参数
urlHaveIdBool:false,
}
},
created() {
// 获取会议id
let id = this.GetQueryString('id')
this.urlHaveIdBool = id ? true :false
this.meetingId = id
document.title = '报名入口'
if (id) {
@@ -179,7 +182,7 @@ export default {
this.holdAddress = this.currentMeetingInfo.venue + '/' + this.currentMeetingInfo.address
}
} else {
console.log(res.message)
this.urlHaveIdBool = false
}
})
},
+135 -127
View File
@@ -89,128 +89,133 @@
<section class="main-content-title mt-10">
<img src="../../assets/signUpImg/signUpInfo.png"/> 报名信息
</section>
<a-spin :spinning="confirmLoading">
<a-form :form="form">
<!--个人信息begin-->
<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">
<company-select @change="changeCompany" v-decorator="['companyId',validatorRules.companyId]"
placeholder="请选择参会企业"
:is-limit="true"
:maxLength='50'>
</company-select>
</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">
<select-contacts :selected-company="selectedCompany"
placeholder="请选择参会人"
:is-limit="true"
v-decorator="['companyContactId',validatorRules.companyContactId]"
:maxLength='50'
@change="changeContact"
ref="selectMailContacts"
@ok="addContactsOk"></select-contacts>
</a-form-item>
</a-col>
<a-col :xxl="8" :xl="12" :sm="24">
<a-form-item label="手机号" :labelCol="labelCol" :wrapperCol="wrapperCol">
<a-input placeholder="请输入手机号"
@change="(e) => {e.target.value = e.target.value.replace(/[^0-9]/g,'')}"
:maxLength='11'
disabled
v-decorator="['phone',validatorRules.phone]"></a-input>
</a-form-item>
</a-col>
<!--非国际研讨会-->
<a-col :xxl="8" :xl="12" :sm="24" v-if="meetingType !== '3' ">
<a-form-item label="身份" :labelCol="labelCol" :wrapperCol="wrapperCol">
<a-radio-group v-decorator="['identity',validatorRules.identify]" @change="changeIdentify">
<a-radio :value="1">嘉宾</a-radio>
<a-radio :value="2">参会人</a-radio>
<a-radio :value="3">内部企业</a-radio>
</a-radio-group>
</a-form-item>
</a-col>
<a-col :xxl="8" :xl="12" :sm="24" v-if="meetingType === '3' ">
<a-form-item label="是否有邀请码" :labelCol="labelCol" :wrapperCol="wrapperCol">
<a-radio-group v-decorator="['inviteCode',validatorRules.inviteCode]" @change="changeInviteCode">
<a-radio :value="1"></a-radio>
<a-radio :value="0"></a-radio>
</a-radio-group>
</a-form-item>
</a-col>
<template v-if="urlHaveIdBool">
<a-spin :spinning="confirmLoading">
<a-form :form="form">
<!--个人信息begin-->
<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">
<company-select @change="changeCompany" v-decorator="['companyId',validatorRules.companyId]"
placeholder="请选择参会企业"
:is-limit="true"
:maxLength='50'>
</company-select>
</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">
<select-contacts :selected-company="selectedCompany"
placeholder="请选择参会人"
:is-limit="true"
v-decorator="['companyContactId',validatorRules.companyContactId]"
:maxLength='50'
@change="changeContact"
ref="selectMailContacts"
@ok="addContactsOk"></select-contacts>
</a-form-item>
</a-col>
<a-col :xxl="8" :xl="12" :sm="24">
<a-form-item label="手机号" :labelCol="labelCol" :wrapperCol="wrapperCol">
<a-input placeholder="请输入手机号"
@change="(e) => {e.target.value = e.target.value.replace(/[^0-9]/g,'')}"
:maxLength='11'
disabled
v-decorator="['phone',validatorRules.phone]"></a-input>
</a-form-item>
</a-col>
<!--非国际研讨会-->
<a-col :xxl="8" :xl="12" :sm="24" v-if="meetingType !== '3' ">
<a-form-item label="身份" :labelCol="labelCol" :wrapperCol="wrapperCol">
<a-radio-group v-decorator="['identity',validatorRules.identify]" @change="changeIdentify">
<a-radio :value="1">嘉宾</a-radio>
<a-radio :value="2">参会人</a-radio>
<a-radio :value="3">内部企业</a-radio>
</a-radio-group>
</a-form-item>
</a-col>
<a-col :xxl="8" :xl="12" :sm="24" v-if="meetingType === '3' ">
<a-form-item label="是否有邀请码" :labelCol="labelCol" :wrapperCol="wrapperCol">
<a-radio-group v-decorator="['inviteCode',validatorRules.inviteCode]" @change="changeInviteCode">
<a-radio :value="1"></a-radio>
<a-radio :value="0"></a-radio>
</a-radio-group>
</a-form-item>
</a-col>
<!--邀请码选择是出现填写邀请码 否选择身份-->
<a-col :xxl="8" :xl="12" :sm="24" v-if="meetingType === '3' && identityBool ">
<a-form-item label="身份" :labelCol="labelCol" :wrapperCol="wrapperCol">
<a-radio-group v-decorator="['identity',validatorRules.identify]" @change="changeIdentify">
<a-radio :value="2">参会人</a-radio>
<a-radio :value="3">内部企业</a-radio>
</a-radio-group>
</a-form-item>
</a-col>
<!--邀请码选择是出现填写邀请码 否选择身份-->
<a-col :xxl="8" :xl="12" :sm="24" v-if="meetingType === '3' && identityBool ">
<a-form-item label="身份" :labelCol="labelCol" :wrapperCol="wrapperCol">
<a-radio-group v-decorator="['identity',validatorRules.identify]" @change="changeIdentify">
<a-radio :value="2">参会人</a-radio>
<a-radio :value="3">内部企业</a-radio>
</a-radio-group>
</a-form-item>
</a-col>
<a-col :xxl="8" :xl="12" :sm="24" v-if="inviteCodeBool">
<a-form-item label="邀请码" :labelCol="labelCol" :wrapperCol="wrapperCol">
<a-input placeholder="请输入邀请码"
:maxLength='50'
@change="event => event.target.value = event.target.value.trim()"
@blur="validateCode"
v-decorator="[ 'code',
<a-col :xxl="8" :xl="12" :sm="24" v-if="inviteCodeBool">
<a-form-item label="邀请码" :labelCol="labelCol" :wrapperCol="wrapperCol">
<a-input placeholder="请输入邀请码"
:maxLength='50'
@change="event => event.target.value = event.target.value.trim()"
@blur="validateCode"
v-decorator="[ 'code',
validatorRules.code]"></a-input>
</a-form-item>
</a-col>
</a-row>
<!--邀请码选择是才出现-->
<a-row :gutter="24" class="center" v-if="inviteCodeBool">
<a-button @click="nextSetp" type="primary">下一步</a-button>
</a-row>
<!--个人信息end-->
<!--除开国际研讨会的其他会议的显示-->
<template v-if="meetingType !== '3' ">
<other-meeting-form ref="formother" :selected-company="selectedCompany"
:meeting-cost-bool="meetingCostBool"
:identify-type="identifyType" @formData="getFormData" @isPack="isPack"></other-meeting-form>
</template>
</a-form-item>
</a-col>
</a-row>
<!--邀请码选择是才出现-->
<a-row :gutter="24" class="center" v-if="inviteCodeBool">
<a-button @click="nextSetp" type="primary">下一步</a-button>
</a-row>
<!--个人信息end-->
<!--除开国际研讨会的其他会议的显示-->
<template v-if="meetingType !== '3' ">
<other-meeting-form ref="formother" :selected-company="selectedCompany"
:meeting-cost-bool="meetingCostBool"
:identify-type="identifyType" @formData="getFormData"
@isPack="isPack"></other-meeting-form>
</template>
<!--国际研讨会参会人与内部企业的显示 默认不展示 -->
<template v-if="meetingType === '3' && identifyType !== 1 && identifyType !== null ">
<other-meeting-form ref="formother" :meeting-type="meetingType" :selected-company="selectedCompany"
:meeting-cost-bool="meetingCostBool"
@isPack="isPack"
:identify-type="identifyType" @formData="getFormData"></other-meeting-form>
</template>
<!-- 国际研讨会身份选择嘉宾 并且是VIP-->
<template v-if="identifyType === 1 && guestType === 1">
<seminar-vip-form ref="seminarVipForm" @formData="getFormData" :identify-type="identifyType"
:guest-type="guestType"></seminar-vip-form>
</template>
<!-- 国际研讨会身份选择嘉宾 并且是演讲嘉宾-->
<template v-if="identifyType === 1 && guestType === 2">
<seminar-vip-form ref="seminarVipForm" @formData="getFormData" :guest-type="guestType"></seminar-vip-form>
</template>
<!-- 国际研讨会身份选择嘉宾 并且是特邀嘉宾-->
<template v-if="identifyType === 1 && guestType === 3">
<seminar-vip-form ref="seminarVipForm" @formData="getFormData" :guest-type="guestType"></seminar-vip-form>
</template>
<!-- 国际研讨会身份选择嘉宾 并且是合作伙伴-->
<template v-if="identifyType === 1 && guestType === 4">
<seminar-partner-form ref="seminarPartnerForm" @formData="getFormData"></seminar-partner-form>
</template>
<section class="meetingCost">
费用合计:{{ meetingCostSum }} 元
</section>
<div class="action">
<a-button class="submit" type="primary" @click="handleOk" v-preventclick>确定</a-button>
<a-button @click="handleCancel">取消</a-button>
</div>
</a-form>
</a-spin>
<!--国际研讨会参会人与内部企业的显示 默认不展示 -->
<template v-if="meetingType === '3' && identifyType !== 1 && identifyType !== null ">
<other-meeting-form ref="formother" :meeting-type="meetingType" :selected-company="selectedCompany"
:meeting-cost-bool="meetingCostBool"
@isPack="isPack"
:identify-type="identifyType" @formData="getFormData"></other-meeting-form>
</template>
<!-- 国际研讨会身份选择嘉宾 并且是VIP-->
<template v-if="identifyType === 1 && guestType === 1">
<seminar-vip-form ref="seminarVipForm" @formData="getFormData" :identify-type="identifyType"
:guest-type="guestType"></seminar-vip-form>
</template>
<!-- 国际研讨会身份选择嘉宾 并且是演讲嘉宾-->
<template v-if="identifyType === 1 && guestType === 2">
<seminar-vip-form ref="seminarVipForm" @formData="getFormData"
:guest-type="guestType"></seminar-vip-form>
</template>
<!-- 国际研讨会身份选择嘉宾 并且是特邀嘉宾-->
<template v-if="identifyType === 1 && guestType === 3">
<seminar-vip-form ref="seminarVipForm" @formData="getFormData"
:guest-type="guestType"></seminar-vip-form>
</template>
<!-- 国际研讨会身份选择嘉宾 并且是合作伙伴-->
<template v-if="identifyType === 1 && guestType === 4">
<seminar-partner-form ref="seminarPartnerForm" @formData="getFormData"></seminar-partner-form>
</template>
<section class="meetingCost">
费用合计:{{ meetingCostSum }} 元
</section>
<div class="action">
<a-button class="submit" type="primary" @click="handleOk" v-preventclick>确定</a-button>
<a-button @click="handleCancel">取消</a-button>
</div>
</a-form>
</a-spin>
</template>
</div>
</section>
<!--内容end-->
@@ -323,9 +328,11 @@ export default {
// 邀请码错误状态
codeErrorBool: true,
// 是否是打包
isPackBool:false,
isPackBool: false,
// 国际研讨会身份的控制
identityBool:false,
identityBool: false,
// url是否有id字段 默认没有
urlHaveIdBool: false,
url: {
add: '/meeting/payMeetingSituation/signUp'
}
@@ -335,6 +342,7 @@ export default {
document.title = '会议报名'
// 获取会议id
let id = this.GetQueryString('id')
this.urlHaveIdBool = id ? true : false
this.meetingId = id
if (id) {
this.getMeetingInfo(id)
@@ -395,7 +403,7 @@ export default {
}
}
} else {
console.log(res.message)
this.urlHaveIdBool = false
}
})
},
@@ -431,11 +439,11 @@ export default {
return null
},
// 是否打包 打包会议费用为0
isPack(val){
isPack(val) {
this.isPackBool = val
if(this.isPackBool){
if (this.isPackBool) {
this.meetingCostSum = '0.00'
}else {
} else {
this.meetingCostSum = this.currentMeetingInfo.meetingCosts
}
},
@@ -462,7 +470,7 @@ export default {
this.form.validateFields((err, values) => {
if (!err) {
// 判断邀请码是否错误 需要判断会议类型 以及 是否有邀请码
if (this.codeErrorBool && this.currentMeetingInfo.meetingType === '3' && this.inviteCodeBool ) {
if (this.codeErrorBool && this.currentMeetingInfo.meetingType === '3' && this.inviteCodeBool) {
this.$message.error('邀请码填写错误')
return
}
@@ -523,7 +531,7 @@ export default {
changeCompany(value) {
this.selectedCompany = value
// 选择企业清空 姓名 手机号
this.form.resetFields(['companyContactId','phone'])
this.form.resetFields(['companyContactId', 'phone'])
},
/*
@@ -558,7 +566,7 @@ export default {
// 选的否 身份置空
this.identifyType = null
this.$nextTick(() => {
if(this.$refs.formother){
if (this.$refs.formother) {
this.$refs.formother.isLimitBool = true
}
})
+10 -2
View File
@@ -24,7 +24,8 @@
<a v-if="this.currSelected.title" style="margin-left: 10px" @click="onClearSelected">取消选择</a>
</div>
</a-alert>
<a-input-search @search="onSearch" allowClear style="width:100%;margin-top: 10px" placeholder="请输入部门名称" :maxLength="50"/>
<a-input-search @search="onSearch" allowClear style="width:100%;margin-top: 10px" placeholder="请输入部门名称"
:maxLength="50"/>
<!-- -->
<a-col :md="10" :sm="24">
<template>
@@ -504,7 +505,7 @@ export default {
this.form.resetFields()
this.selectedKeys = []
//取消选择 清除选中部门id
this.$refs.DeptUserInfo.cancelSelect()
// this.$refs.DeptUserInfo.cancelSelect()
// 暂时注释(部门权限组件)没用 2021-08-24
// this.$refs.departAuth.departId = ''
},
@@ -736,4 +737,11 @@ export default {
background: #fff;
border-radius: 0 0 2px 2px;
}
//解决组织机构名称很长的时候文字无法隐藏的问题
/deep/ .ant-tree li .ant-tree-node-content-wrapper {
max-width: 235%;
overflow: hidden;
text-overflow: ellipsis;
}
</style>
+38 -4
View File
@@ -9,8 +9,15 @@
<a-col :xl="7" :lg="8" :md="8" :sm="24">
<a-form-item label="提醒类型">
<j-dict-select-tag dict-code="notice_type" placeholder="请选择提醒类型"
v-model="queryParam.titile"></j-dict-select-tag>
<a-select
v-model="queryParam.titile"
show-search
allowClear
option-filter-prop="children"
:filter-option="filterOption"
placeholder="请选择提醒类型">
<a-select-option v-for="(item,index) in noticeTypeList" :key="index" :value="item.value">{{ item.name }}</a-select-option>
</a-select>
</a-form-item>
</a-col>
<a-col :xl="10" :lg="11" :md="12" :sm="24">
@@ -47,6 +54,7 @@
size="default"
bordered
rowKey="id"
:scroll="{x: 1200}"
:columns="columns"
:dataSource="dataSource"
:pagination="ipagination"
@@ -85,7 +93,6 @@ import ShowAnnouncement from '@/components/tools/ShowAnnouncement'
import {JeroListMixin} from '@/mixins/JeroListMixin'
import {RangeDateMixin} from '@/mixins/RangeDateMixin'
import DynamicNotice from '../../components/tools/DynamicNotice'
import JDictSelectTag from '@comp/dict/JDictSelectTag'
import '@/assets/less/TableExpand.less'
import JDate from '@comp/tools/JDate'
import PageHeaderTitle from '@comp/layouts/PageHeaderTitle'
@@ -98,7 +105,6 @@ export default {
components: {
DynamicNotice,
ShowAnnouncement,
JDictSelectTag,
JDate,
PageHeaderTitle
},
@@ -106,6 +112,29 @@ export default {
return {
description: '系统通告表管理页面',
queryParam: {},
// 管理端消息提醒类型
noticeTypeList: [
{
name: '项目通知',
value: '1'
},
{
name: '合同通知',
value: '2'
},
{
name: '会议通知',
value: '3'
},
{
name: '打包通知',
value: '4'
},
{
name: '企业通知',
value: '5'
}
],
IconImg,
columns: [
{
@@ -169,6 +198,11 @@ export default {
Bus.$off('header-notice-change')
},
methods: {
filterOption(input, option) {
return (
option.componentOptions.children[0].text.toLowerCase().indexOf(input.toLowerCase()) >= 0
)
},
handleDetail: function (record) {
this.$refs.sysAnnouncementModal.detail(record)
this.$refs.sysAnnouncementModal.title = '查看'
+1 -1
View File
@@ -166,7 +166,7 @@
if(value){
let reg=new RegExp("[`_~!@#$^&*()=|{}'.<>《》/?!¥()—【】‘;:”“。,、?]")
if(reg.test(value)){
callback('数据值不能包含特殊字符')
callback('数据值不能包含特殊字符')
}else{
//update--begin--autor:lvdandan-----date:20201203------forJT-27【数据字典】字典 - 数据值可重复
getAction('/sys/dictItem/dictItemCheck',param).then((res)=>{
+3 -3
View File
@@ -597,7 +597,7 @@ export default {
callback()
}
if (!passwordReg(value)) {
callback('密码由8位及以上数字、大小写字母和特殊符号组成')
callback('密码由8位及以上数字、大小写字母和特殊符号组成')
}
if (value && this.confirmDirty) {
form.validateFields(['confirm'], {force: true})
@@ -607,10 +607,10 @@ export default {
compareToFirstPassword(rule, value, callback) {
const form = this.form
if (value && value !== form.getFieldValue('password')) {
callback('两次输入的密码不一样!')
callback('两次密码不一')
}
if (value && !passwordReg(value)) {
callback('密码由8位及以上数字、大小写字母和特殊符号组成')
callback('密码由8位及以上数字、大小写字母和特殊符号组成')
}
callback()
},
+6 -5
View File
@@ -81,11 +81,12 @@
}
},
methods: {
onTreeNodeSelect(id){
if(id && id.length>0){
this.selectedKeys = id
}
this.$refs.datarule.show(this.selectedKeys[0],this.roleId)
onTreeNodeSelect(){
// id
// if(id && id.length>0){
// this.selectedKeys = id
// }
// this.$refs.datarule.show(this.selectedKeys[0],this.roleId)
},
onCheck (o) {
if(this.checkStrictly){
+4 -3
View File
@@ -326,7 +326,7 @@ export default {
z-index: 99;
width: 50%;
box-sizing: border-box;
height: 60%;
height: 80%;
position: absolute;
right: 0;
top: 50%;
@@ -336,11 +336,12 @@ export default {
height: 100%;
overflow: hidden;
display: flex;
justify-content: space-between;
justify-content: center;
flex-direction: column;
.title{
display: flex;
justify-content: center;
margin-bottom: 10px;
img{
width: 395px;
height: 124px;
@@ -366,7 +367,7 @@ export default {
}
}
/deep/.ant-row{
margin-bottom: 0 !important;
margin-bottom: 4px!important;
}
/deep/.ant-input-affix-wrapper .ant-input{
border-radius: 30px;
+8 -8
View File
@@ -129,35 +129,35 @@ export default {
validatorRules: {
username: {
rules: [
{ required: true, message: '请输入账号!' }],
{ required: true, message: '请输入账号' }],
validateTrigger: 'blur'
},
phone: {
rules: [
{ required: true, message: '请输入手机号!' },
{ required: true, message: '请输入手机号' },
{ validator: this.validatePhone }
],
validateTrigger: 'blur'
},
verifyCode: {
rules: [{ required: true, message: '请输入验证码!' }],
rules: [{ required: true, message: '请输入验证码' }],
validateTrigger: 'blur'
},
password: {
rules: [
{ required: true, message: '请输入新密码!' },
{ required: true, message: '请输入新密码' },
{
pattern: /^(?=.*[a-z])(?=.*[A-Z])(?=.*\d)(?=.*[~!@#$%^&*()_+`\-={}:";'<>?,./]).{8,30}$/,
message: '密码由8位及以上数字、大小写字母和特殊符号组成'
message: '密码由8位及以上数字、大小写字母和特殊符号组成'
}
],
validateTrigger: 'blur'
},
confirmPassword: {
rules: [
{ required: true, message: '请输入确认密码!' },
{ required: true, message: '请输入确认密码' },
{ pattern: /^(?=.*[a-z])(?=.*[A-Z])(?=.*\d)(?=.*[~!@#$%^&*()_+`\-={}:";'<>?,./]).{8,30}$/,
message: '密码由8位及以上数字、大小写字母和特殊符号组成'
message: '密码由8位及以上数字、大小写字母和特殊符号组成'
},
{ validator: this.handlePasswordCheck }
],
@@ -315,7 +315,7 @@ export default {
}
.alteration-content {
margin: auto;
//margin: auto;
width: 1000px;
display: flex;
justify-content: center;