4b004652 by lttnew

B2B

1 parent 59468e57
......@@ -1548,14 +1548,31 @@ export function creditCodeExist(code) {
}
// 生成单位订单renewYear
export function certifiedNew(renewYear) {
export function certifiedNew(data) {
let url = '/system/certifiedNew/commit'
const params = []
if (data.renewYear) params.push(`renewYear=${data.renewYear}`)
if (data.type) params.push(`type=${data.type}`)
if (data.contactPerson) params.push(`contactPerson=${data.contactPerson}`)
if (data.contactTel) params.push(`contactTel=${data.contactTel}`)
if (params.length > 0) {
url += '?' + params.join('&')
}
return request({
url: `/system/certifiedNew/commit?renewYear=${renewYear}`,
url,
method: 'post',
showLoading: false
})
}
// 订单详情
export function orderDetail(orderId) {
return request({
url: `/common/order/${orderId}`,
method: 'get'
})
}
// 模拟回调
export function callBack2(orderId) {
return request({
......@@ -1638,9 +1655,18 @@ export function getMyStatus() {
}
// 个人会员缴费支付
export function goPay(id, payType) {
export function goPay(params) {
let url = `/person/paymentRangeNew/pay/${params.id}/${params.payType}`
const queryParams = []
if (params.id) queryParams.push(`id=${params.id}`)
if (params.contactPerson) queryParams.push(`contactPerson=${params.contactPerson}`)
if (params.contactTel) queryParams.push(`contactTel=${params.contactTel}`)
if (params.payType) queryParams.push(`payType=${params.payType}`)
if (queryParams.length > 0) {
url += '?' + queryParams.join('&')
}
return request({
url: `/person/paymentRangeNew/pay/${id}/${payType}`,
url,
method: 'post',
showLoading: false
})
......@@ -1866,10 +1892,16 @@ export function confirmExam(examId) {
// 提交级位考试订单
export function commitJiExam(params) {
let url = `/exam/info/commitJi/${params.id}/${params.addresId}/${params.payType}`
const queryParams = []
if (params.contactPerson) queryParams.push(`contactPerson=${params.contactPerson}`)
if (params.contactTel) queryParams.push(`contactTel=${params.contactTel}`)
if (queryParams.length > 0) {
url += '?' + queryParams.join('&')
}
return request({
url: `/exam/info/commitJi/${params.id}/${params.addresId}/${params.payType}`,
url,
method: 'post',
params,
showLoading: false
})
}
......
......@@ -75,12 +75,33 @@
<view class="payment-section">
<view class="section-title">支付方式</view>
<view class="payment-methods">
<view class="payment-item selected">
<image :src="config.baseUrl_api + '/fs/static/min.png'" class="icon" mode="widthFix"></image>
<text class="payment-name">民生付</text>
<view class="check-icon"></view>
<radio-group @change="onPayTypeChange">
<label class="payment-item" :class="{ selected: payType === '1' }">
<radio :checked="payType === '1'" value="1" />
<image :src="config.baseUrl_api + '/fs/static/min.png'" class="icon ml10" mode="widthFix"></image>
<text class="payment-name ml10">民生付</text>
<!-- <view v-if="payType === '1'" class="check-icon"></view> -->
</label>
<label class="payment-item" :class="{ selected: payType === '3' }">
<radio :checked="payType === '3'" value="3" />
<image :src="config.baseUrl_api + '/fs/static/min.png'" class="icon ml10" mode="widthFix"></image>
<text class="payment-name ml10">对公转账</text>
<!-- <view v-if="payType === '3'" class="check-icon"></view> -->
</label>
</radio-group>
</view>
</view>
<!-- 对公转账表单 -->
<view v-if="payType === '3'" class="info-card transfer-form">
<view class="form-item">
<text class="form-label">联系人</text>
<input class="form-input" v-model="formData.contactPerson" placeholder="请输入联系人" />
</view>
<view class="form-item">
<text class="form-label">联系方式</text>
<input class="form-input" v-model="formData.contactTel" type="number" placeholder="请输入联系方式" />
</view>
</view>
</view>
......@@ -116,6 +137,11 @@ const examData = ref({});
const selectedAddress = ref({});
const memberInfo = ref({});
const deptInfo = ref({});
const payType = ref('1');
const formData = ref({
contactPerson: '',
contactTel: ''
});
// 级别标签
const levelTags = computed(() => {
......@@ -203,32 +229,64 @@ const goAddressManage = () => {
});
};
const onPayTypeChange = (e) => {
payType.value = e.detail.value
formData.value.contactPerson = ''
formData.value.contactTel = ''
};
const handleSubmit = async () => {
if (!selectedAddress.value.id) {
return uni.showToast({title: '请先选择地址', icon: 'none'});
}
// 对公转账校验
if (payType.value === '3') {
if (!formData.value.contactPerson) {
return uni.showToast({title: '请输入联系人', icon: 'none'});
}
if (!formData.value.contactTel) {
return uni.showToast({title: '请输入联系方式', icon: 'none'});
}
// 手机号格式校验
if (!/^1[3-9]\d{9}$/.test(formData.value.contactTel)) {
return uni.showToast({title: '请输入正确的手机号', icon: 'none'});
}
}
uni.showModal({
title: '提示',
content: `确定提交订单吗?`,
success: async (res) => {
if (res.confirm) {
uni.showLoading({
title: '支付中...',
title: '提交中...',
mask: true
})
try {
const commitRes = await api.commitJiExam({
addresId: selectedAddress.value.id,
id: examId.value,
payType: '2'
payType: payType.value,
contactPerson: formData.value.contactPerson,
contactTel: formData.value.contactTel
})
if (commitRes.data && commitRes.data.payResult.encryptedData) {
// 对公转账
if (commitRes.data.payFlag == 2) {
uni.hideLoading();
uni.redirectTo({
url: `/myCenter/transferPay?orderId=${commitRes.data.orderId}`
});
return;
}
// 民生付
if (commitRes.data.payResult && commitRes.data.payResult.encryptedData) {
const res = await minShengPay(commitRes.data.orderId, commitRes.data.payResult.encryptedData)
if (res == 'OK') {
uni.showToast({title: '支付成功', icon: 'success'});
setTimeout(() => {
// uni.navigateBack();
uni.redirectTo({
url: '/level/apply'
})
......@@ -477,6 +535,20 @@ const handleSubmit = async () => {
}
}
// 覆盖原生 radio 样式
::v-deep radio .wx-radio-input,
::v-deep radio .uni-radio-input {
width: 36rpx;
height: 36rpx;
border-color: #ccc !important;
}
::v-deep radio .wx-radio-input.wx-radio-input-checked,
::v-deep radio .uni-radio-input-checked {
border-color: #e4393c !important;
background: #e4393c !important;
}
.payment-icon {
width: 48rpx;
height: 48rpx;
......@@ -553,6 +625,34 @@ const handleSubmit = async () => {
}
}
/* 对公转账表单 */
.transfer-form {
.form-item {
display: flex;
align-items: center;
padding: 20rpx 0;
border-bottom: 1rpx solid #f5f5f5;
&:last-child {
border-bottom: none;
}
}
.form-label {
font-size: 28rpx;
color: #333;
width: 140rpx;
flex-shrink: 0;
}
.form-input {
flex: 1;
font-size: 28rpx;
color: #333;
text-align: right;
}
}
.icon {
width: 40rpx;
height: 40rpx;
......
......@@ -53,9 +53,28 @@
<text>民生付</text>
</view>
</label>
<label class="radioItem mt10" >
<radio :checked="payType === '3'" class="custom-radio" value="3"/>
<view class="payInfo">
<image :src="config.baseUrl_api + '/fs/static/min.png'" class="icon" mode="widthFix"></image>
<text>对公转账</text>
</view>
</label>
</radio-group>
</view>
<!-- 对公转账表单 -->
<view v-if="payType === '3'" class="card transfer-form">
<view class="form-item">
<text class="form-label">联系人</text>
<input class="form-input" v-model="form.contactPerson" placeholder="请输入联系人" />
</view>
<view class="form-item">
<text class="form-label">联系电话</text>
<input class="form-input" v-model="form.contactTel" type="number" placeholder="请输入联系电话" />
</view>
</view>
<view class="totalRow ">
<text class="label">支付费用合计</text>
<text class="value redBig">{{ memberTotalFee }}</text>
......@@ -88,7 +107,9 @@ import {minShengPay} from '@/common/pay.js'
import config from '@/config.js'
const form = ref({
renewYear: 1
renewYear: 1,
contactPerson: '',
contactTel: ''
})
const memberFee = ref(0)
const preferentialPolicy = ref(false)
......@@ -136,6 +157,32 @@ const handelPay = async () => {
return
}
// 对公转账校验
if (payType.value === '3') {
if (!form.value.contactPerson) {
uni.showToast({
title: '请输入联系人',
icon: 'none'
})
return
}
if (!form.value.contactTel) {
uni.showToast({
title: '请输入联系电话',
icon: 'none'
})
return
}
// 手机号格式校验
if (!/^1[3-9]\d{9}$/.test(form.value.contactTel)) {
uni.showToast({
title: '请输入正确的手机号',
icon: 'none'
})
return
}
}
// 显示 loading
uni.showLoading({
title: '支付中...',
......@@ -143,8 +190,21 @@ const handelPay = async () => {
})
if (isPaying.value) return
isPaying.value = true
// 构建请求参数
const params = {
renewYear: form.value.renewYear,
type: payType.value
}
// 对公转账需要传联系人信息
if (payType.value === '3') {
params.contactPerson = form.value.contactPerson
params.contactTel = form.value.contactTel
}
// 创建订单 - 参考PC端逻辑
const [orderErr, orderRes] = await to(api.certifiedNew(form.value.renewYear))
const [orderErr, orderRes] = await to(api.certifiedNew(params))
if (orderErr) {
uni.hideLoading()
isPaying.value = false
......@@ -165,6 +225,18 @@ const handelPay = async () => {
})
return
}
// 对公转账 - 跳转转账信息页面
if (data.payFlag == 2) {
uni.hideLoading()
isPaying.value = false
uni.redirectTo({
url: `/myCenter/transferPay?orderId=${data.orderId}`
})
return
}
// 民生支付
if (data.payResult && data.payResult.encryptedData) {
try {
const res = await minShengPay(data.orderId, data.payResult.encryptedData)
......@@ -370,6 +442,36 @@ async function getZtxDiscountPolicyApi() {
line-height: 1.4;
}
/* 对公转账表单 */
.transfer-form {
margin-bottom: 20rpx;
}
.form-item {
display: flex;
align-items: center;
padding: 20rpx 0;
border-bottom: 1rpx solid #f5f5f5;
&:last-child {
border-bottom: none;
}
}
.form-label {
font-size: 28rpx;
color: #333;
width: 140rpx;
flex-shrink: 0;
}
.form-input {
flex: 1;
font-size: 28rpx;
color: #333;
text-align: right;
}
.hint-icon {
width: 24rpx;
height: 24rpx;
......
......@@ -25,21 +25,36 @@
</view>
</view>
<!-- 支付方式选择(修复v-model报错 + 默认勾选) -->
<!-- 支付方式选择 -->
<view class="pay-type-section">
<text class="section-title">选择支付方式</text>
<!-- uni-app小程序原生radio-group写法 -->
<radio-group :value="payType" @change="handlePayTypeChange">
<label class="radio-item">
<!-- checked属性实现默认勾选 -->
<radio :checked="payType === '0'" color="#E60012" value="0"/>
<view class="pay-method">
<image :src="config.baseUrl_api + '/fs/static/min.png'" class="icon" mode="widthFix"></image>
<text class="pay-name">民生付</text>
</view>
<view class="section-title">选择支付方式</view>
<view class="payment-methods">
<radio-group @change="handlePayTypeChange">
<label class="payment-item" :class="{ selected: payType === '1' }">
<radio :checked="payType === '1'" value="0" />
<image :src="config.baseUrl_api + '/fs/static/min.png'" class="icon ml10" mode="widthFix"></image>
<text class="pay-name ml10">民生付</text>
</label>
<label class="payment-item" :class="{ selected: payType === '3' }">
<radio :checked="payType === '3'" value="1" />
<image :src="config.baseUrl_api + '/fs/static/min.png'" class="icon ml10" mode="widthFix"></image>
<text class="pay-name ml10">对公转账</text>
</label>
</radio-group>
</view>
</view>
<!-- 对公转账表单 -->
<view v-if="payType === '3'" class="transfer-form">
<view class="form-item">
<text class="form-label">联系人</text>
<input class="form-input" v-model="form.contactPerson" placeholder="请输入联系人" />
</view>
<view class="form-item">
<text class="form-label">联系电话</text>
<input class="form-input" v-model="form.contactTel" type="number" placeholder="请输入联系电话" />
</view>
</view>
<!-- 底部支付按钮 -->
<view class="fixed-bottom">
......@@ -62,8 +77,12 @@ import {minShengPay} from "@/common/pay";
// 核心数据
const formData = ref({}) // 订单统计数据
const rangeId = ref('') // 核心业务ID
const payType = ref('0') // 支付方式(默认0=民生付)
const payType = ref('1') // 支付方式(默认0=民生付)
const payLoading = ref(false) // 支付按钮加载状态
const form = ref({
contactPerson: '',
contactTel: ''
})
// 页面加载接收参数
onLoad(async (options) => {
......@@ -93,7 +112,12 @@ async function getCount() {
// 支付方式切换
function handlePayTypeChange(e) {
payType.value = e.detail.value
payType.value = e.detail.value == '0' ? '1' : '3'
console.log('支付方式:', payType.value)
if (payType.value === '3') {
form.value.contactPerson = ''
form.value.contactTel = ''
}
}
// 立即支付核心逻辑
......@@ -106,22 +130,54 @@ async function handlePay() {
})
}
// 对公转账校验
if (payType.value === '3') {
if (!form.value.contactPerson) {
return uni.showToast({ title: '请输入联系人', icon: 'none' })
}
if (!form.value.contactTel) {
return uni.showToast({ title: '请输入联系电话', icon: 'none' })
}
// 手机号格式校验
if (!/^1[3-9]\d{9}$/.test(form.value.contactTel)) {
return uni.showToast({ title: '请输入正确的手机号', icon: 'none' })
}
}
try {
payLoading.value = true
uni.showLoading({
title: '支付中...',
title: '提交中...',
mask: true
})
const res = await api.goPay(rangeId.value, '2')
if (res.data.payResult && res.data.payResult.encryptedData) {
const reason = await minShengPay(res.data.orderId, res.data.payResult.encryptedData)
if (reason == 'OK') {
// // 支付成功,跳转到成功页面
// uni.redirectTo({
// url: `/myCenter/sucPay?orderId=${res.data.orderId}`
// })
uni.showToast({title: '支付成功', icon: 'success'});
// 构建请求参数
const params = {
id: rangeId.value,
payType: payType.value
}
if (payType.value === '3') {
params.contactPerson = form.value.contactPerson
params.contactTel = form.value.contactTel
}
const res = await api.goPay(params)
const resData = res.data
// 对公转账 - 跳转转账信息页面
if (resData.payFlag == 2) {
uni.hideLoading()
uni.redirectTo({
url: `/myCenter/transferPay?orderId=${resData.orderId}`
})
return
}
// 民生付
if (resData.payResult && resData.payResult.encryptedData) {
const reason = await minShengPay(resData.orderId, resData.payResult.encryptedData)
if (reason == 'OK') {
uni.showToast({ title: '支付成功', icon: 'success' })
setTimeout(() => {
uni.hideLoading()
uni.redirectTo({
......@@ -131,8 +187,6 @@ async function handlePay() {
}
}
// 跳转到支付成功页
} catch (err) {
console.log(err)
const errMsg = err?.data?.msg || err?.message || '支付失败,请稍后重试'
......@@ -216,32 +270,108 @@ async function handlePay() {
// 支付方式区域
.pay-type-section {
margin-bottom: 80rpx;
margin-bottom: 30rpx;
.section-title {
font-size: 32rpx;
font-weight: 600;
color: #333;
margin-bottom: 20rpx;
display: block;
position: relative;
padding-left: 20rpx;
&::before {
content: '';
position: absolute;
left: 0;
top: 50%;
transform: translateY(-50%);
width: 6rpx;
height: 28rpx;
background: linear-gradient(180deg, #FF755A, #F51722);
border-radius: 3rpx;
}
}
}
.radio-item {
display: flex;
align-items: center;
font-size: 32rpx;
padding: 10rpx 0;
.payment-methods {
background: #f8f9fa;
border-radius: 12rpx;
padding: 20rpx;
.pay-method {
.payment-item {
display: flex;
align-items: center;
margin-left: 10rpx;
padding: 16rpx;
border-radius: 12rpx;
border: 2rpx solid transparent;
&.selected {
border-color: #e4393c;
background: #fff;
}
// 覆盖原生 radio 样式
::v-deep radio .wx-radio-input,
::v-deep radio .uni-radio-input {
width: 36rpx;
height: 36rpx;
border-color: #ccc !important;
}
::v-deep radio .wx-radio-input.wx-radio-input-checked,
::v-deep radio .uni-radio-input-checked {
border-color: #e4393c !important;
background: #e4393c !important;
}
.icon {
width: 40rpx;
height: 40rpx;
}
.pay-name {
font-size: 32rpx;
margin-left: 20rpx;
font-size: 30rpx;
color: #333;
font-weight: 500;
}
.ml10 {
margin-left: 10rpx;
}
}
}
// 对公转账表单
.transfer-form {
background: #f8f9fa;
border-radius: 12rpx;
padding: 20rpx;
margin-bottom: 30rpx;
.form-item {
display: flex;
align-items: center;
padding: 20rpx 0;
border-bottom: 1rpx solid #eee;
&:last-child {
border-bottom: none;
}
}
.form-label {
font-size: 28rpx;
color: #333;
width: 140rpx;
flex-shrink: 0;
}
.form-input {
flex: 1;
font-size: 28rpx;
color: #333;
text-align: right;
}
}
......
......@@ -77,6 +77,17 @@
@select="upPicArr" @delete="delpicArr">
</uni-file-picker>
</uni-forms-item>
<view class="notice-box">
<checkbox-group @change="onNoticeChange">
<label class="notice-label">
<checkbox :checked="form.notice" color="#e64329" value="1"/>
<text class="notice-text">我已阅读并同意</text>
<text class="notice-link" @click.stop="showNotice(1)">《注册须知》</text>
<text class="notice-link" @click.stop="showNotice(2)">《入会须知》</text>
<text class="notice-link" @click.stop="showNotice(3)">《免责声明》</text>
</label>
</checkbox-group>
</view>
</uni-forms>
<view class="fixedBottom">
<button class="btn-red" @click="submit()">确定</button>
......@@ -134,7 +145,8 @@
type: '1',
applyPoints: '0',
renewYear: 1,
legalIdcCode: ''
legalIdcCode: '',
notice: false
});
const years = ref(['1', '2', '3', '4', '5'])
const yesno = ref([{
......@@ -458,6 +470,13 @@
})
return
}
if (!form.value.notice) {
uni.showToast({
title: '请阅读并同意注册须知、入会须知、免责声明',
icon: 'none'
})
return
}
if (form.value.parentId == -1 || form.value.parentId == 0) {
uni.showToast({
title: '请选择所属协会',
......@@ -784,6 +803,25 @@
function delpicArr(e) {
picArr.value.splice(e.index, 1)
}
// 须知勾选
function onNoticeChange(e) {
const values = e.detail.value
form.value.notice = values.includes('1')
}
// 查看须知 - 跳转到须知页面
function showNotice(type) {
const pageMap = {
1: '/pages/index/notice-registration',
2: '/pages/index/notice-membership',
3: '/pages/index/notice-disclaimer'
}
const url = pageMap[type]
if (url) {
uni.navigateTo({url})
}
}
</script>
<style lang="scss" scoped>
......@@ -837,6 +875,25 @@
border-radius: 15rpx;
}
.notice-box {
padding: 20rpx 0;
}
.notice-label {
display: flex;
align-items: center;
flex-wrap: wrap;
font-size: 24rpx;
}
.notice-text {
color: #666;
}
.notice-link {
color: #007AFF;
}
.imgArea {
padding: 1px;
display: flex;
......
<template>
<view class="container">
<!-- 订单信息 -->
<view class="card info-card">
<view class="info-row">
<text class="info-label">订单号</text>
<text class="info-value">{{ form.tradeNo || '-' }}</text>
</view>
<view class="info-row">
<text class="info-label">缴费单位</text>
<text class="info-value">{{ form.orderName || '-' }}</text>
</view>
<view class="info-row">
<text class="info-label">订单金额</text>
<text class="info-value highlight">{{ form.price || '0.00' }}</text>
</view>
</view>
<!-- 转账提示 -->
<view class="transfer-tip">
请通过网上银行(网银)或银行柜台或手机银行
</view>
<!-- 转账信息卡片 -->
<view class="card bank-card">
<view class="card-title">转账信息</view>
<view class="bank-row">
<text class="bank-label">收款人姓名</text>
<text class="bank-value">秦琦五洋赫公司</text>
<text class="copy-btn" @click="handelCoPy('秦琦五洋赫公司')">复制</text>
</view>
<view class="bank-row">
<text class="bank-label">收款银行</text>
<text class="bank-value">中国民生银行</text>
<text class="copy-btn" @click="handelCoPy('中国民生银行')">复制</text>
</view>
<view class="bank-row">
<text class="bank-label">收款卡号</text>
<text class="bank-value card-number">{{ form.ziZhangBu || '-' }}</text>
<text class="copy-btn" @click="handelCoPy(form.ziZhangBu)">复制</text>
</view>
<view class="bank-row">
<text class="bank-label">收款金额</text>
<text class="bank-value highlight">{{ form.price || '0.00' }}</text>
<text class="copy-btn" @click="handelCoPy(form.price)">复制</text>
</view>
</view>
<!-- 金额说明 -->
<view class="card notice-card">
<view class="notice-line">1. 请通过网上银行(网银)或银行柜台或手机银行向以下账号划转款项。</view>
<view class="notice-line">2. 转账金额与订单金额必须保持一致,不得多转、少转。</view>
</view>
<!-- 温馨提示 -->
<view class="card warning-card">
<view class="warning-title">
<text class="warning-icon">!</text>
<text>温馨提示</text>
</view>
<view class="warning-content">
<view class="warning-line">1. 转账时请务必核对账户余额,否则造成的资金损失由您自行承担。</view>
<view class="warning-line">2. 转账成功后请及时查询交易状态。</view>
</view>
</view>
<!-- 底部按钮 -->
<view class="bottomBtn">
<button class="cancelBtn" @click="handelClose">取 消</button>
<button class="confirmBtn" @click="handelClose">确 定</button>
</view>
</view>
</template>
<script setup>
import { ref } from 'vue'
import { onLoad } from '@dcloudio/uni-app'
import * as api from '@/common/api.js'
const form = ref({
tradeNo: '',
orderName: '',
price: '',
ziZhangBu: ''
})
const orderId = ref('')
onLoad((option) => {
orderId.value = option.orderId || ''
getOrderDetail()
})
async function getOrderDetail() {
if (!orderId.value) return
uni.showLoading({ title: '加载中...' })
try {
const res = await api.orderDetail(orderId.value)
if (res.data) {
form.value = res.data
}
} catch (e) {
console.error('获取订单详情失败', e)
} finally {
uni.hideLoading()
}
}
function handelCoPy(text) {
if (!text || text === '-') {
uni.showToast({ title: '暂无内容可复制', icon: 'none' })
return
}
uni.setClipboardData({
data: String(text),
success: () => {
uni.showToast({ title: '复制成功', icon: 'success' })
},
fail: () => {
uni.showToast({ title: '复制失败', icon: 'none' })
}
})
}
function handelClose() {
uni.navigateBack({
delta: 2
})
}
</script>
<style lang="scss" scoped>
.hidden-input {
position: fixed;
left: -9999px;
opacity: 0;
}
.container {
min-height: 100vh;
background-color: #f7f7f7;
padding: 20rpx 20rpx 120rpx;
}
/* 订单信息卡片 */
.info-card {
background: #fff;
border-radius: 8rpx;
padding: 25rpx 20rpx;
margin-bottom: 20rpx;
.info-row {
display: flex;
justify-content: space-between;
align-items: center;
padding: 16rpx 0;
border-bottom: 1rpx solid #f5f5f5;
&:last-child {
border-bottom: none;
}
.info-label {
font-size: 28rpx;
color: #666;
}
.info-value {
font-size: 28rpx;
color: #333;
font-weight: 500;
}
.highlight {
color: #FF8124;
font-weight: 600;
}
}
}
/* 转账提示 */
.transfer-tip {
background-color: #E8F4FF;
color: #409EFF;
padding: 20rpx;
border-radius: 8rpx;
font-size: 28rpx;
text-align: center;
font-weight: 500;
margin-bottom: 20rpx;
}
/* 银行卡信息 */
.bank-card {
background: #fff;
border-radius: 8rpx;
padding: 25rpx 20rpx;
margin-bottom: 20rpx;
.card-title {
font-size: 30rpx;
font-weight: 600;
color: #333;
margin-bottom: 20rpx;
padding-bottom: 16rpx;
border-bottom: 1rpx solid #e4e7ed;
}
.bank-row {
display: flex;
align-items: center;
padding: 16rpx 0;
font-size: 28rpx;
.bank-label {
color: #666;
width: 160rpx;
flex-shrink: 0;
}
.bank-value {
flex: 1;
color: #333;
font-weight: 500;
&.card-number {
font-family: monospace;
letter-spacing: 2rpx;
}
&.highlight {
color: #FF8124;
}
}
.copy-btn {
color: #007AFF;
font-size: 26rpx;
padding: 8rpx 16rpx;
}
}
}
/* 金额说明 */
.notice-card {
background: #FEF0F0;
border-radius: 8rpx;
padding: 25rpx 20rpx;
margin-bottom: 20rpx;
.notice-line {
font-size: 26rpx;
color: #F56C6C;
line-height: 1.6;
margin-bottom: 8rpx;
&:last-child {
margin-bottom: 0;
}
}
}
/* 温馨提示 */
.warning-card {
background: #FDF6EC;
border-radius: 8rpx;
padding: 25rpx 20rpx;
.warning-title {
display: flex;
align-items: center;
font-size: 28rpx;
color: #E6A23C;
font-weight: 600;
margin-bottom: 16rpx;
.warning-icon {
width: 36rpx;
height: 36rpx;
background: #E6A23C;
color: #fff;
border-radius: 50%;
display: flex;
align-items: center;
justify-content: center;
font-size: 24rpx;
margin-right: 10rpx;
}
}
.warning-content {
.warning-line {
font-size: 26rpx;
color: #E6A23C;
line-height: 1.6;
margin-bottom: 8rpx;
&:last-child {
margin-bottom: 0;
}
}
}
}
/* 底部按钮 */
.bottomBtn {
position: fixed;
bottom: 0;
left: 0;
right: 0;
display: flex;
gap: 20rpx;
padding: 20rpx 30rpx;
background: #fff;
border-top: 1rpx solid #eee;
}
.cancelBtn {
flex: 1;
height: 88rpx;
line-height: 88rpx;
background: #f5f5f5;
color: #666;
border-radius: 44rpx;
font-size: 32rpx;
border: none;
}
.confirmBtn {
flex: 1;
height: 88rpx;
line-height: 88rpx;
background: #C4121B;
color: #fff;
border-radius: 44rpx;
font-size: 32rpx;
border: none;
}
</style>
......@@ -83,6 +83,13 @@
}
},
{
"path": "pages/index/notice-membership-vip",
"style": {
"navigationBarTitleText": "入会须知",
"enablePullDownRefresh": false
}
},
{
"path": "pages/index/notice-disclaimer",
"style": {
"navigationBarTitleText": "免责声明",
......@@ -1026,6 +1033,13 @@
}
},
{
"path": "transferPay",
"style": {
"navigationBarTitleText": "对公转账",
"enablePullDownRefresh": false
}
},
{
"path": "examPointApply",
"style": {
"navigationBarTitleText": "申请考点",
......
<template>
<view class="notice-page">
<view class="notice-body">
<view class="notice-content">
欢迎您申请成为中国跆拳道协会(以下简称中国跆协)会员,请确保本次申请是经过您本人或监护人授权同意后的自愿行为,请您务必仔细阅读本入会须知。
</view>
<view class="notice-item">一、中国跆协会员分为个人会员和单位会员。</view>
<view class="notice-item">
二、成为本协会会员条件:遵守中国跆协章程和协会各项规章制度及相关决议,按期交纳会费,积极支持和参与中国跆拳道事业发展的社会各届人士或地方跆拳道协会、俱乐部、培训机构等,均可自愿申请成为中国跆协会员。
</view>
<view class="notice-item">三、个人会员为在中国工作和生活的跆拳道爱好者,16 周岁以下应有监护人协助申请,会员须为中国公民。</view>
<view class="notice-item">四、会员入会需向所在区域内中国跆协单位会员提出入会申请,并按程序报中国跆协批准,按规定交纳会费。</view>
<view class="notice-item">五、会员享有《中国跆拳道协会会员管理办法》规定的会员权利。</view>
<view class="notice-item">六、会员应履行《中国跆拳道协会会员管理办法》规定的会员义务。</view>
<view class="notice-item">七、凡中国跆协会员,须按照《中国跆拳道协会会员会费标准(2021 版)》按时交纳年度会费。</view>
<view class="notice-item">八、会员行为违反《中国跆拳道协会会员管理办法》中规定的,按照相关处罚规定进行处理。</view>
<view class="notice-item">九、其它会员相关内容请查看《中国跆拳道协会章程》《中国跆拳道协会会员管理办法》。</view>
</view>
</view>
</template>
<script setup>
</script>
<style lang="scss" scoped>
.notice-page {
min-height: 100vh;
background: #f7f7f7;
}
.notice-header {
background: #fff;
padding: 30rpx;
text-align: center;
border-bottom: 1rpx solid #eee;
}
.notice-title {
font-size: 34rpx;
font-weight: 600;
color: #333;
}
.notice-body {
padding: 30rpx;
background: #fff;
margin: 20rpx;
border-radius: 12rpx;
}
.notice-content {
font-size: 28rpx;
color: #333;
line-height: 1.8;
margin-bottom: 20rpx;
}
.notice-item {
font-size: 28rpx;
color: #333;
line-height: 1.8;
margin-bottom: 20rpx;
text-indent: 2em;
}
</style>
......@@ -92,6 +92,7 @@
<!-- 会员须知 -->
<uni-popup ref="popup" type="bottom" background-color="#fff" animation :disable-scroll="true"
:mask-click="false">
<view class="tt">注册须知</view>
<view class="tt">入会须知</view>
<view class="popBody">
_{{baseFormData.name}}_欢迎您申请成为中国跆拳道协会(以下简称中国跆协)会员,请确保本次申请是经过您本人或监护人授权同意后的自愿行为,请您务必仔细阅读本入会须知。
......
......@@ -79,50 +79,17 @@
</uni-forms>
</view>
<view class="agreeline">
<image @click="changeAgree(agree)" v-if="agree"
:src="config.baseUrl_api+'/fs/static/login/xz_dwn@2x.png'"></image>
<image @click="changeAgree(agree)" v-else :src="config.baseUrl_api+'/fs/static/login/xz@2x.png'">
</image>
<view>我已阅读<text @click="openpopup">《入会须知》</text></view>
<checkbox-group @change="onAgreeChange">
<label class="agree-label">
<checkbox :checked="agree" color="#C40F18" value="1" />
<text class="agree-text">我已阅读并同意</text>
<text class="notice-link" @click.stop="showNotice(1)">《注册须知》</text>
<text class="notice-link" @click.stop="showNotice(2)">《入会须知》</text>
</label>
</checkbox-group>
</view>
</view>
<view class="fixedBottom"><button class="btn-red" @click="goSubmit">确 定</button></view>
<!-- 会员须知 -->
<uni-popup ref="popup" type="bottom" background-color="#fff" animation :disable-scroll="true"
:mask-click="false">
<view class="tt">入会须知</view>
<view class="popBody">
_{{baseFormData.name}}_欢迎您申请成为中国跆拳道协会(以下简称中国跆协)会员,请确保本次申请是经过您本人或监护人授权同意后的自愿行为,请您务必仔细阅读本入会须知。
<br />
一、中国跆协会员分为个人会员和单位会员。
<br />
二、成为本协会会员条件:遵守中国跆协章程和协会各项规章制度及相关决议,按期交纳会费,积极支持和参与中国跆拳道事业发展的社会各届人士或地方跆拳道协会、俱乐部、培训机构等,均可自愿申请成为中国跆协会员。<br />
三、个人会员为在中国工作和生活的跆拳道爱好者,16 周岁以下应有监护人协助申请,会员须为中国公民。<br />
四、会员入会需向所在区域内中国跆协单位会员提出入会申请,并按程序报中国跆协批准,按规定交纳会费。<br />
五、会员享有《中国跆拳道协会会员管理办法》规定的会员权利。
<br />
六、会员应履行《中国跆拳道协会会员管理办法》规定的会员义务。
<br />
七、凡中国跆协会员,须按照《中国跆拳道协会会员会费标准(2021 版)》按时交纳年度会费。<br />
八、会员行为违反《中国跆拳道协会会员管理办法》中规定的,按照相关处罚规定进行处理。<br />
九、其它会员相关内容请查看《中国跆拳道协会章程》《中国跆拳道协会会员管理办法》。<br />
<button @click="closepopup" class="btn-red">我已阅读</button>
</view>
</uni-popup>
<uni-popup ref="infoConfirm" type="center" :disable-scroll="true" :mask-click="false">
<view class="tt">确认信息</view>
<view class="popBody">
<view>
</view>
<button @click="closepopup" class="btn-red">已确认</button>
</view>
</uni-popup>
</view>
</template>
......@@ -137,8 +104,6 @@
import config from '@/config.js'
import * as aes2 from '@/common/utils.js'
const current = ref(0)
const popup = ref(null)
const infoConfirm = ref(null)
const agree = ref(false)
const perId = ref()
const photoArr = ref({})
......@@ -244,8 +209,21 @@
}
function changeAgree(item) {
agree.value = !item
function onAgreeChange(e) {
const values = e.detail.value
agree.value = values.includes('1')
}
// 查看须知 - 跳转到须知页面
function showNotice(type) {
const pageMap = {
1: '/pages/index/notice-registration',
2: '/pages/index/notice-membership-vip'
}
const url = pageMap[type]
if (url) {
uni.navigateTo({url})
}
}
//身份证识别
......@@ -444,17 +422,6 @@
}
function openpopup() {
popup.value.open()
}
function closepopup() {
agree.value = true
popup.value.close()
}
function changeIdcType(e) {
console.log(e)
// 切换证件照类型把当前页面数据清空
......@@ -473,7 +440,7 @@
if (!agree.value) {
uni.showToast({
icon: 'none',
title: '请阅入会须知',
title: '请阅读并同意注册须知、入会须知',
duration: 2000
});
return
......@@ -647,21 +614,24 @@
}
.agreeline {
padding: 20rpx 40rpx;
padding: 20rpx 30rpx;
box-sizing: border-box;
display: flex;
font-size: 30rpx;
}
text {
color: #014A9F;
.agree-label {
display: flex;
align-items: center;
flex-wrap: wrap;
font-size: 24rpx;
}
image {
width: 40rpx;
height: 40rpx;
margin-right: 20rpx;
.agree-text {
color: #666;
margin-left: 10rpx;
}
.notice-link {
color: #007AFF;
}
.upCard {
......
Styling with Markdown is supported
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!