【update】 标协会员注册页面迁移至来款企业端;修改会员缴费、证书缴费反馈的问题

This commit is contained in:
fengchenchen
2022-01-24 23:14:12 +08:00
parent cc7ceb4248
commit 96ad46dbcc
14 changed files with 1961 additions and 28 deletions
+17 -1
View File
@@ -7,6 +7,17 @@ import { getAction, postAction } from '@api/memberManage'
import { ACCESS_TOKEN } from '@/store/mutation-types'
// 验证用户是否存在
const checkOnlyUser = (params) => getAction('/sys/user/checkOnlyUser', params)
// 验证税号是否重复
const checkOnlytaxNo = (params) => getAction('/sys/user/taxNoCheck', params)
// 企业性质dict查询
const getDictOptions = (params) => getAction('/memberInfo/memberInfo/getDictOptions', params)
// 手机号唯一性校验
const phoneCheck = (params) => getAction('/sys/user/phoneCheck', params)
// 邮箱唯一性校验
const emailCheck = (params) => getAction('/sys/user/emailCheck', params)
// 标协会员-基本信息-调用来款系统的接口
const getMemberBaseInfo = (param) => incomeGetAction('/company/payContactsManagement/baseInfo', param)
@@ -87,6 +98,11 @@ export {
getCertificateById,
application,
determineOrCancel
determineOrCancel,
checkOnlyUser,
checkOnlytaxNo,
getDictOptions,
phoneCheck,
emailCheck
}
@@ -130,3 +130,18 @@
}
}
</script>
<style scoped lang="less">
.ant-checkbox-group {
display: flex;
flex-wrap: wrap;
}
.ant-checkbox-wrapper + .ant-checkbox-wrapper{
width:25%
}
.ant-checkbox-wrapper:nth-child(1){
width: 25%;
}
.ant-checkbox-wrapper + .ant-checkbox-wrapper {
margin-left: 0px;
}
</style>
@@ -0,0 +1,247 @@
<template>
<a-upload
name="file"
listType="picture-card"
:multiple="isMultiple"
:action="uploadAction"
:headers="headers"
:data="{biz:bizPath}"
:fileList="fileList"
:beforeUpload="beforeUpload"
:disabled="disabled"
:isMultiple="isMultiple"
:showUploadList="isMultiple"
@change="handleChange"
@preview="handlePreview">
<img v-if="!isMultiple && picUrl" :src="getAvatarView()" @click="clickFunc" style="height:104px;max-width:300px"/>
<div v-else >
<a-icon :type="uploadLoading ? 'loading' : 'plus'" />
<div class="ant-upload-text">{{ text }}</div>
</div>
<j-modal
title="预览"
width="800px"
:visible="previewVisible"
:maskClosable="false"
:footer="null"
switchFullscreen
@cancel="handleCancel()"
cancelText="关闭">
<img alt="example" style="width: 100%" :src="previewImage"/>
</j-modal>
<!--<j-modal :visible="previewVisible" :footer="null" @cancel="handleCancel()">-->
<!--<img alt="example" style="width: 100%" :src="previewImage"/>-->
<!--</j-modal>-->
</a-upload>
</template>
<script>
import { getFileAccessHttpUrl } from '@/api/memberManage'
const uidGenerator = () => {
return '-' + parseInt(Math.random() * 10000 + 1, 10)
}
const getFileName = (path) => {
if (path.lastIndexOf('\\') >= 0) {
const reg = new RegExp('\\\\', 'g')
path = path.replace(reg, '/')
}
return path.substring(path.lastIndexOf('/') + 1)
}
export default {
name: 'RImageUpload',
data() {
return {
uploadAction: window._CONFIG['memberURL'] + '/memberInfo/memberInfo/upload',
uploadLoading: false,
picUrl: false,
headers: {},
fileList: [],
previewImage: '',
previewVisible: false
}
},
props: {
text: {
type: String,
required: false,
default: '上传'
},
number: {
type: Number,
required: false,
default: 0
},
/* 这个属性用于控制文件上传的业务路径*/
bizPath: {
type: String,
required: false,
default: 'temp'
},
value: {
type: [String, Array],
required: false
},
disabled: {
type: Boolean,
required: false,
default: false
},
isMultiple: {
type: Boolean,
required: false,
default: false
},
// 是否需要校验图片大小不超过5M
isLessThan5M: {
type: Boolean,
required: false,
default: false
}
},
watch: {
value(val) {
if (val instanceof Array) {
this.initFileList(val.join(','))
} else {
this.initFileList(val)
}
}
},
created() {
// const token = Vue.ls.get(ACCESS_TOKEN);
// this.headers = {"X-Access-Token":token}
},
methods: {
initFileList(paths) {
if (!paths || paths.length === 0) {
this.fileList = []
this.picUrl = false
return
}
this.picUrl = true
const fileList = []
const arr = paths.split(',')
for (var a = 0; a < arr.length; a++) {
const url = getFileAccessHttpUrl(arr[a])
fileList.push({
uid: uidGenerator(),
name: getFileName(arr[a]),
status: 'done',
url: url,
response: {
status: 'history',
message: arr[a]
}
})
}
this.fileList = fileList
},
beforeUpload: function(file) {
var fileType = file.type
const imgTypes = ['jpg', 'jpeg', 'png']
const imgFlag = imgTypes.some(item => {
return fileType.indexOf(item) > 0
})
file.uploadGoOn = true
if (!imgFlag) {
this.$message.warning('请上传jpg,jpeg,png格式的图片')
file.uploadGoOn = false
return false
}
if (this.isLessThan5M) {
if (file.size > 1024 * 1024 * 5) {
this.$message.warning('图片大小限制为5M')
file.uploadGoOn = false
return false
}
}
},
clickFunc() {
if (!this.disabled) return
if (this.fileList.length > 0) {
this.handlePreview(this.fileList[0])
}
},
handleChange(info) {
if (!info.file.status && info.file.uploadGoOn === false) {
info.fileList.pop()
return
}
this.picUrl = false
let fileList = info.fileList
if (info.file.status === 'done') {
if (this.number > 0) {
fileList = fileList.slice(-this.number)
}
if (info.file.response.success) {
this.picUrl = true
fileList = fileList.map((file) => {
if (file.response) {
file.url = file.response.message
}
return file
})
}
// this.$message.success(`${info.file.name} 上传成功!`);
} else if (info.file.status === 'error') {
this.$message.error(`${info.file.name} 上传失败.`)
} else if (info.file.status === 'removed') {
this.handleDelete(info.file)
}
this.fileList = fileList
if (info.file.status === 'done' || info.file.status === 'removed') {
this.handlePathChange()
}
},
// 预览
handlePreview(file) {
this.previewImage = file.url || file.thumbUrl
this.previewVisible = true
},
getAvatarView() {
if (this.fileList.length > 0) {
return this.fileList[0].url
}
},
handlePathChange() {
const uploadFiles = this.fileList
let path = ''
if (!uploadFiles || uploadFiles.length === 0) {
path = ''
}
const arr = []
if (!this.isMultiple) {
arr.push(uploadFiles[uploadFiles.length - 1].response.message)
} else {
for (var a = 0; a < uploadFiles.length; a++) {
arr.push(uploadFiles[a].response.message)
}
}
if (arr.length > 0) {
path = arr.join(',')
}
this.$emit('change', path)
},
handleDelete(file) {
// 如有需要新增 删除逻辑
console.log(file)
},
handleCancel() {
this.close()
this.previewVisible = false
},
close() {
}
},
model: {
prop: 'value',
event: 'change'
}
}
</script>
<style scoped>
</style>
@@ -0,0 +1,487 @@
<template>
<div :id="containerId" style="position: relative">
<!-- ---------------------------- begin 图片左右换位置 ------------------------------------- -->
<div class="movety-container" :style="{top:top+'px',left:left+'px',display:moveDisplay}" style="padding:0 8px;position: absolute;z-index: 91;height: 32px;width: 104px;text-align: center;">
<div :id="containerId+'-mover'" :class="showMoverTask?'uploadty-mover-mask':'movety-opt'" style="margin-top: 12px">
<a @click="moveLast" style="margin: 0 5px;"><a-icon type="arrow-left" style="color: #fff;font-size: 16px"/></a>
<a @click="moveNext" style="margin: 0 5px;"><a-icon type="arrow-right" style="color: #fff;font-size: 16px"/></a>
</div>
</div>
<!-- ---------------------------- end 图片左右换位置 ------------------------------------- -->
<a-upload
name="file"
:multiple="true"
:action="uploadAction"
:headers="headers"
:data="{'biz':bizPath}"
:fileList="fileList"
:beforeUpload="beforeUpload"
@change="handleChange"
:disabled="disabled"
:returnUrl="returnUrl"
:listType="complistType"
@preview="handlePreview"
:class="{'uploadty-disabled':disabled}">
<template>
<div v-if="isImageComp">
<a-icon type="plus" />
<div class="ant-upload-text">{{ text }}</div>
</div>
<a-button v-else-if="buttonVisible">
<a-icon type="upload" />{{ text }}
</a-button>
</template>
</a-upload>
<a-modal :visible="previewVisible" :footer="null" @cancel="handleCancel">
<img alt="example" style="width: 100%" :src="previewImage" />
</a-modal>
</div>
</template>
<script>
import Vue from 'vue'
import { ACCESS_TOKEN } from '@/store/mutation-types'
import { getFileAccessHttpUrl } from '@/api/memberManage'
import { getFilesByIds } from '@api/standardsAssociationApi'
const FILE_TYPE_ALL = 'all'
const FILE_TYPE_IMG = 'image'
const FILE_TYPE_JPG = 'image/jpg'
const FILE_TYPE_PNG = 'image/png'
const FILE_TYPE_TXT = 'file'
const FILE_TYPE_PDF = 'pdf'
const FILE_TYPE_VIDEO = 'video'
const FILE_TYPE_ZIP = 'zip'
const FILE_TYPE_WORD = 'word'
const FILE_TYPE_MP3 = 'audio'
const uidGenerator = () => {
return '-' + parseInt(Math.random() * 10000 + 1, 10)
}
const getFileName = (path) => {
if (path.lastIndexOf('\\') >= 0) {
const reg = new RegExp('\\\\', 'g')
path = path.replace(reg, '/')
}
return path.substring(path.lastIndexOf('/') + 1)
}
export default {
name: 'JUpload',
props: {
text: {
type: String,
required: false,
default: '点击上传'
},
fileType: {
type: [String, Array],
required: false,
default: FILE_TYPE_ALL
},
fileTypeErrorMessage: {
type: String,
required: false,
default: ''
},
/* 这个属性用于控制文件上传的业务路径*/
bizPath: {
type: String,
required: false,
default: 'temp'
},
value: {
type: [String, Array],
required: false
},
// update-begin- --- author:wangshuai ------ date:20190929 ---- for:Jupload组件增加是否能够点击
disabled: {
type: Boolean,
required: false,
default: false
},
// update-end- --- author:wangshuai ------ date:20190929 ---- for:Jupload组件增加是否能够点击
// 此属性被废弃了
triggerChange: {
type: Boolean,
required: false,
default: false
},
/**
* update -- author:lvdandan -- date:20190219 -- for:Jupload组件增加是否返回url,
* true:仅返回url
* false:返回fileName filePath fileSize
*/
returnUrl: {
type: Boolean,
required: false,
default: true
},
number: {
type: Number,
required: false,
default: 0
},
buttonVisible: {
type: Boolean,
required: false,
default: true
}
},
data() {
return {
uploadAction: window._CONFIG['memberURL'] + '/memberInfo/memberInfo/upload',
headers: {},
fileList: [],
newFileList: [],
uploadGoOn: true,
previewVisible: false,
// ---------------------------- begin 图片左右换位置 -------------------------------------
previewImage: '',
containerId: '',
top: '',
left: '',
moveDisplay: 'none',
showMoverTask: false,
moverHold: false,
currentImg: '',
fileTypes: this.fileType
// ---------------------------- end 图片左右换位置 -------------------------------------
}
},
watch: {
value: {
immediate: true,
handler() {
const val = this.value
if (val instanceof Array) {
if (this.returnUrl) {
this.initFileList(val.join(','))
} else {
this.initFileListArr(val)
}
} else {
this.initFileList(val)
}
}
}
},
computed: {
isImageComp() {
return this.fileTypes === FILE_TYPE_IMG || this.fileTypes === FILE_TYPE_PNG || this.fileTypes === FILE_TYPE_JPG
},
complistType() {
return (this.fileTypes === FILE_TYPE_IMG || this.fileTypes === FILE_TYPE_PNG || this.fileTypes === FILE_TYPE_JPG) ? 'picture-card' : 'text'
}
},
created() {
const token = Vue.ls.get(ACCESS_TOKEN)
// ---------------------------- begin 图片左右换位置 -------------------------------------
// this.headers = { 'X-Access-Token': token }
this.containerId = 'container-ty-' + new Date().getTime()
// ---------------------------- end 图片左右换位置 -------------------------------------
},
methods: {
initFileListArr(val) {
if (!val || val.length === 0) {
this.fileList = []
return
}
const fileList = []
for (var a = 0; a < val.length; a++) {
const url = getFileAccessHttpUrl(val[a].filePath)
fileList.push({
uid: uidGenerator(),
name: val[a].fileName,
status: 'done',
url: url,
response: {
status: 'history',
message: val[a].filePath
}
})
}
this.fileList = fileList
},
async getFilesByIds(params) {
return new Promise(resolve => {
let result = []
getFilesByIds({ ids: params }).then(res => {
if (res.success) {
result = res.result.map(tt => tt.fileName)
}
}).finally(() => {
resolve(result)
})
})
},
async initFileList(paths) {
if (!paths || paths.length === 0) {
// return [];
// update-begin- --- author:os_chengtgen ------ date:20190729 ---- for:issues:326,Jupload组件初始化bug
this.fileList = []
return
// update-end- --- author:os_chengtgen ------ date:20190729 ---- for:issues:326,Jupload组件初始化bug
}
const fileList = []
const arr = paths.split(',')
const nameArr = await this.getFilesByIds(paths)
for (var a = 0; a < arr.length; a++) {
const url = getFileAccessHttpUrl(arr[a])
fileList.push({
uid: uidGenerator(),
// name:getFileName(arr[a]),
name: nameArr[a],
status: 'done',
url: url,
response: {
status: 'history',
message: arr[a]
}
})
}
this.fileList = fileList
},
handlePathChange() {
const uploadFiles = this.fileList
let path = ''
if (!uploadFiles || uploadFiles.length === 0) {
path = ''
}
const arr = []
for (var a = 0; a < uploadFiles.length; a++) {
arr.push((uploadFiles[a].response || {}).message)
}
if (arr.length > 0) {
path = arr.join(',')
}
this.$emit('change', path)
},
beforeUpload(file) {
this.uploadGoOn = true
file.uploadGoOn = true
const fileSize = file.size // 上传的文件大小
const fileType = file.type // 上传的文件类型
if (fileSize > 1024 * 1024 * 50) {
this.$message.warning('文件大小限制为50M')
this.uploadGoOn = false
file.uploadGoOn = false
return false
}
// 不等于全部类型可以上传的时候,对上传的文件进行判断
if (this.fileType !== FILE_TYPE_ALL) {
// filter(tt => fileType.indexOf(tt) > -1) 判断用户传的文件类型,和要求传的文件类型是否一致
// 当上传的图片格式为jpg时,在此组件中,会返回类型为 image/jpeg ElememntUI设计如此 所以需要把用户传下来的jpg强制改成jpeg
this.fileTypes = this.fileTypes.replace('jpg', 'jpeg')
const arr = this.fileTypes.split(',').filter(tt => fileType.indexOf(tt) > -1)
if (arr.length === 0) {
this.$message.warning(this.fileTypeErrorMessage || `请上传${this.fileTypes}文件`)
this.uploadGoOn = false
file.uploadGoOn = false
return false
}
}
if (this.fileTypes === FILE_TYPE_IMG) {
if (fileType.indexOf('image') < 0) {
this.$message.warning('请上传图片')
this.uploadGoOn = false
file.uploadGoOn = false
return false
}
}
// TODO 扩展功能验证文件大小
return true
},
handleChange(info) {
if (!info.file.status && info.file.uploadGoOn === false) {
info.fileList.pop()
return
}
let fileList = info.fileList
if (info.file.status === 'done') {
if (this.number > 0) {
fileList = fileList.slice(-this.number)
}
if (info.file.response.success) {
fileList = fileList.map((file) => {
if (file.response) {
const reUrl = file.response.message
file.url = getFileAccessHttpUrl(reUrl)
file.fileName = file.name
}
return file
})
} else {
this.$message.error(`${info.file.response.message}`)
info.fileList.pop()
return
}
// this.$message.success(`${info.file.name} 上传成功!`);
} else if (info.file.status === 'error') {
this.$message.error(`${info.file.name} 上传失败.`)
} else if (info.file.status === 'removed') {
this.handleDelete(info.file)
}
this.fileList = fileList
if (info.file.status === 'done' || info.file.status === 'removed') {
// returnUrl为true时仅返回文件路径
if (this.returnUrl) {
this.handlePathChange()
} else {
// returnUrl为false时返回文件名称、文件路径及文件大小
this.newFileList = []
for (var a = 0; a < fileList.length; a++) {
var fileJson = {
fileName: fileList[a].name,
filePath: fileList[a].response.message,
fileSize: fileList[a].size
}
this.newFileList.push(fileJson)
}
this.$emit('change', this.newFileList)
}
}
},
handleDelete(file) {
// 如有需要新增 删除逻辑
console.log(file)
},
handlePreview(file) {
if (this.fileTypes === FILE_TYPE_IMG) {
this.previewImage = file.url || file.thumbUrl
this.previewVisible = true
} else {
location.href = file.url
}
},
handleCancel() {
this.previewVisible = false
},
// ---------------------------- begin 图片左右换位置 -------------------------------------
moveLast() {
// console.log(ev)
// console.log(this.fileList)
// console.log(this.currentImg)
const index = this.getIndexByUrl()
if (index == 0) {
this.$message.warn('未知的操作')
} else {
const curr = this.fileList[index].url
const last = this.fileList[index - 1].url
const arr = []
for (let i = 0; i < this.fileList.length; i++) {
if (i == index - 1) {
arr.push(curr)
} else if (i == index) {
arr.push(last)
} else {
arr.push(this.fileList[i].url)
}
}
this.currentImg = last
this.$emit('change', arr.join(','))
}
},
moveNext() {
const index = this.getIndexByUrl()
if (index == this.fileList.length - 1) {
this.$message.warn('已到最后~')
} else {
const curr = this.fileList[index].url
const next = this.fileList[index + 1].url
const arr = []
for (let i = 0; i < this.fileList.length; i++) {
if (i == index + 1) {
arr.push(curr)
} else if (i == index) {
arr.push(next)
} else {
arr.push(this.fileList[i].url)
}
}
this.currentImg = next
this.$emit('change', arr.join(','))
}
},
getIndexByUrl() {
for (let i = 0; i < this.fileList.length; i++) {
if (this.fileList[i].url === this.currentImg || encodeURI(this.fileList[i].url) === this.currentImg) {
return i
}
}
return -1
}
},
mounted() {
const moverObj = document.getElementById(this.containerId + '-mover')
moverObj.addEventListener('mouseover', () => {
this.moverHold = true
this.moveDisplay = 'block'
})
moverObj.addEventListener('mouseout', () => {
this.moverHold = false
this.moveDisplay = 'none'
})
const picList = document.getElementById(this.containerId) ? document.getElementById(this.containerId).getElementsByClassName('ant-upload-list-picture-card') : []
if (picList && picList.length > 0) {
picList[0].addEventListener('mouseover', (ev) => {
ev = ev || window.event
const target = ev.target || ev.srcElement
if (target.className == 'ant-upload-list-item-info') {
this.showMoverTask = false
const item = target.parentElement
this.left = item.offsetLeft
this.top = item.offsetTop + item.offsetHeight - 50
this.moveDisplay = 'block'
this.currentImg = target.getElementsByTagName('img')[0].src
}
})
picList[0].addEventListener('mouseout', (ev) => {
ev = ev || window.event
const target = ev.target || ev.srcElement
// console.log('移除',target)
if (target.className == 'ant-upload-list-item-info') {
this.showMoverTask = true
setTimeout(() => {
if (this.moverHold === false) { this.moveDisplay = 'none' }
}, 100)
}
if (target.className == 'ant-upload-list-item ant-upload-list-item-done' || target.className == 'ant-upload-list ant-upload-list-picture-card') {
this.moveDisplay = 'none'
}
})
// ---------------------------- end 图片左右换位置 -------------------------------------
}
},
model: {
prop: 'value',
event: 'change'
}
}
</script>
<style lang="less">
.uploadty-disabled{
.ant-upload-list-item {
.anticon-close{
display: none;
}
.anticon-delete{
display: none;
}
}
}
//---------------------------- begin 图片左右换位置 -------------------------------------
.uploadty-mover-mask{
background-color: rgba(0, 0, 0, 0.5);
opacity: .8;
color: #fff;
height: 28px;
line-height: 28px;
}
//---------------------------- end 图片左右换位置 -------------------------------------
</style>
+10 -1
View File
@@ -52,7 +52,16 @@ export const constantRouterMap = [
path: 'alteration',
name: 'alteration',
component: () => import(/* webpackChunkName: "user" */ '@/views/user/alteration/Alteration')
}
},{
path: 'member-register',
name: 'MemberRegister',
component: () => import(/* webpackChunkName: "user" */ '@/views/standardsAssociation/register/Register')
},
{
path: 'member-register-result',
name: 'MemberRegisterResult',
component: () => import(/* webpackChunkName: "user" */ '@/views/standardsAssociation/register/RegisterResult')
},
]
},
{
+1 -1
View File
@@ -9,7 +9,7 @@ import { generateIndexRouter } from '@/utils/util'
NProgress.configure({ showSpinner: false }) // NProgress Configuration
const whiteList = ['/user/login', '/user/register', '/user/register-result', '/user/alteration','/signupentrance','/signUpPage'] // no redirect whitelist
const whiteList = ['/user/login', '/user/register', '/user/register-result', '/user/member-register', '/user/member-register-result', '/user/alteration','/signupentrance','/signUpPage'] // no redirect whitelist
const ThirdLoginFunc = (token) => {
return new Promise(resolve => {
+3 -2
View File
@@ -12,7 +12,8 @@ export function isEmail(s) {
* @param {*} s
*/
export function isPhone(s) {
return /^([0-9]{3,4}-)?[0-9]{7,8}$/.test(s)
// return /^([0-9]{3,4}-)?[0-9]{7,8}$/.test(s)
return /^([0-9-]{0,15})$/.test(s)
}
/**
@@ -81,4 +82,4 @@ export function dutyCode(s) {
*/
export function number(s) {
return /^[0-9]*$/.test(s)
}
}
@@ -251,6 +251,8 @@ export default {
method = 'put'
}
const formData = Object.assign(this.model, values)
// 用户昵称 默认等于单位全称
formData.realname = formData.companyName
let encrypt = new JSEncrypt()
encrypt.setPublicKey(that.encryptedString)
formData.standardPhone = encrypt.encrypt(values.standardPhone)
@@ -51,6 +51,9 @@
<!-- 操作按钮区域 -->
<div class="table-operator">
<div class="notice-msg">
附加证书需求,请转至“证书管理”工作区提交申请。本页面仅提供数据查询。
</div>
<!-- <a-button @click="handleAdd" type="primary" icon="plus">新增</a-button>-->
</div>
@@ -303,4 +306,8 @@ export default {
<style scoped lang="less">
@import '~@assets/less/common.less';
.notice-msg{
color: red;
padding-bottom: 5px;
}
</style>
@@ -235,11 +235,11 @@ export default {
align: 'center',
dataIndex: 'paymentAmount'
},
{
title: '网员服务费',
align: 'center',
dataIndex: 'serviceCharge'
},
// {
// title: '网员服务费',
// align: 'center',
// dataIndex: 'serviceCharge'
// },
// {
// title:'证书个数',
// align:"center",
@@ -11,7 +11,7 @@
<a-spin :spinning="confirmLoading">
<a-form :form="form" style="margin-left: 10px">
<a-divider orientation="left">
缴费信息<font color="red">(缴费时长满5年才可申请证书)</font>
缴费信息<font color="red">(缴费时长5年可绑定两张证书)</font>
<span
v-if="isMember === 'member'"
class="charge-notice"
@@ -60,7 +60,7 @@
</a-form-item>
</a-col>
</a-row>
<a-row>
<a-row class="payment-table">
<a-col :span="1"></a-col>
<a-col :span="22">
<table class="table" border="1">
@@ -82,6 +82,7 @@
:trigger-change="true"
dictCode="payment_time"
placeholder="请选择缴费时长"
:get-popup-container="(node) => node.parentNode || document.body"
style="width: 140px" />
</a-form-item>
</td>
@@ -100,7 +101,7 @@
</a-form-item>
</td>
</tr>
<tr>
<!-- <tr>
<td>网员服务费</td>
<td>
<span>1年</span>
@@ -118,7 +119,7 @@
style="width: 180px" />
</a-form-item>
</td>
</tr>
</tr>-->
</table>
</a-col>
<a-col :span="1"></a-col>
@@ -329,8 +330,8 @@
<!-- 证书信息 -->
<div v-if="typeFlag || memberType === 1 ">
<a-divider orientation="left">证书需求</a-divider>
<span>申请证书</span>
<a-divider orientation="left">绑定证书</a-divider>
<!-- <span>申请证书</span>-->
<div v-if="checkFlag||detailFlag">
</div>
@@ -381,6 +382,7 @@
<a-select-option value="1">是</a-select-option>
<a-select-option value="0">否</a-select-option>
</a-select>
<span v-else> — </span>
</template>
</a-table>
<div style="position: relative;top: 20px;" v-if="certificatesNum>0">
@@ -694,13 +696,13 @@ export default {
payTime: '1/5',
paymentType: '',
payNumber: ''
},
}/*,
{
payCategory: '网员服务费',
payTime: '1',
paymentType: '',
payNumber: ''
}
}*/
],
// 是否是添加功能
addFlag: false,
@@ -1039,6 +1041,8 @@ export default {
} else {
formData.paymentType = 0
}
// 客户要去掉网员服务费字段,但是后端没有去掉校验,所以前端写死
formData.serviceCharge = 0
httpAction(httpurl, formData, method).then((res) => {
if (res.success) {
that.$message.success(res.message)
@@ -1090,6 +1094,8 @@ export default {
}
this.model.certificatesNum = this.selectedRowKeys.length
const formData = Object.assign(this.model, values)
// 客户要去掉网员服务费字段,但是后端没有去掉校验,所以前端写死
formData.serviceCharge = 0
if (this.typeFlag) {
formData.paymentType = 1
} else {
@@ -1466,4 +1472,8 @@ export default {
/deep/ .ant-form-item-label {
width: 145px !important;
}
// 会员缴费表格的样式修改,防止缴费年限下拉框被遮挡
.payment-table{
z-index: 10;
}
</style>
@@ -27,15 +27,15 @@
</a-form-item>
</a-col>
</a-row>
<a-row :span="24" class="label-width-row">
<a-col :span="16">
<a-form-item label="用户昵称" :labelCol="labelCol1" :wrapperCol="wrapperCol1">
<a-input @change="event => event.target.value = event.target.value.trim()"
v-decorator="[ 'realname', validatorRules.realname]" placeholder="请输入用户昵称"
:maxLength="50"></a-input>
</a-form-item>
</a-col>
</a-row>
<!-- <a-row :span="24" class="label-width-row">-->
<!-- <a-col :span="16">-->
<!-- <a-form-item label="用户昵称" :labelCol="labelCol1" :wrapperCol="wrapperCol1">-->
<!-- <a-input @change="event => event.target.value = event.target.value.trim()"-->
<!-- v-decorator="[ 'realname', validatorRules.realname]" placeholder="请输入用户昵称"-->
<!-- :maxLength="50"></a-input>-->
<!-- </a-form-item>-->
<!-- </a-col>-->
<!-- </a-row>-->
<a-row :span="24" class="label-width-row">
<a-col :span="16">
<a-form-item label="隶属部门/集团" :labelCol="labelCol1" :wrapperCol="wrapperCol1">
@@ -303,6 +303,8 @@ import { getFileAccessHttpUrl } from '../../../api/memberManage'
import { DisabledAuthFilterMixin } from '@/mixins/DisabledAuthFilterMixin'
import ChangeCompanyModal from './modules/ChangeCompanyModal'
import pick from 'lodash.pick'
import {phoneReg, isPhone} from '@/utils/validate'
// eslint-disable-next-line no-unused-vars
import Vue from 'vue'
@@ -618,7 +620,22 @@ export default {
// 更新变更
getChangeHistoryData() {
}
},
/*
* 验证发票信息-电话号码 的正确性
* */
handleInvoicePhoneCheck(rule, value, callback) {
if (!value) {
callback(new Error('请输入电话号码'))
return
} else {
if (phoneReg(value) || isPhone(value)) {
callback()
} else {
callback(new Error('请输入正确格式的电话号码'))
}
}
},
},
created() {
console.log('&&*****会员信息****')
File diff suppressed because it is too large Load Diff
@@ -0,0 +1,81 @@
<template>
<a-card style="width: 100%;height: 100%;text-align: left;">
<div class="register-result-content">
<result
:isSuccess="true"
:content="false"
:title="email">
<template slot="action">
<a-button size="large" style="margin-left: 8px" @click="goHomeHandle">返回登录页</a-button>
</template>
</result>
</div>
</a-card>
</template>
<script>
import Result from '@/views/result/Result'
export default {
name: 'MemberRegisterResult',
components: {
Result
},
data() {
return {
form: {}
}
},
computed: {
email() {
const v = this.form ? this.form.username || this.form.mobile : ' XXX '
// const title = `申请表提交成功,等待标协管理员审核,审核结果将24小时内发送至邮箱。`
const title = `感谢您的关注!您的申请已收到,请耐心等待系统审核,24小时内您将收到我们发至预留联系人电子邮箱的邮件,请注意查收!`
// eslint-disable-next-line vue/no-side-effects-in-computed-properties
this.username = v
return title
}
},
created() {
this.form = this.$route.params
},
methods: {
goHomeHandle() {
const params = {}
params.username = this.form.username
params.password = this.form.password
this.$router.push({path: '/user/login'})
// console.log(params)
// this.$router.push({ name: 'login', params })
// window.open(`${window._CONFIG['IncomePaymentsLoginUrl']}/user/login`, '_self')
}
}
}
</script>
<style scoped lang="less">
/deep/ .ant-card {
width: 100%;
overflow: hidden;
}
/deep/ .ant-card-body {
padding: 0 !important;
height: 100%;
background: #F0F2F5;
}
.register-result-content{
background: #fff;
width: calc(100% - 40px);
height: calc(100% - 40px);
margin: 20px;
display: flex;
align-items: center;
/deep/.result{
margin-bottom: 20px;
width: 60%;
}
}
</style>