Commit 85c87e41 authored by zhangsan's avatar zhangsan

2025.02.26 邮寄

parent 9ea2ac50
...@@ -6,14 +6,47 @@ ...@@ -6,14 +6,47 @@
</keep-alive> </keep-alive>
</router-view> </router-view>
<page-loading /> <page-loading />
<van-popup v-model:show="show" :style="{ padding: '20px 0 50px' }">
<img class="yjbg123" src="@/static/yj.png" alt="">
<div class="yjwarp">
<var-button class="varbtn11" @click="eventBus.popupVisible = false" block>我知道了</var-button>
<var-button class="varbtn11" @click="gotoyj" block>去填写邮寄信息</var-button>
</div>
</van-popup>
</div> </div>
</template> </template>
<script lang="ts" setup> <script lang="ts" setup>
import eventBus from '@/utils/eventBus';
import PageLoading from '@/components/PageLoading.vue' import PageLoading from '@/components/PageLoading.vue'
import { useRouter } from 'vue-router';
const router = useRouter()
const gotoyj = ()=>{
eventBus.popupVisible = false
router.push('/kpsl/cardsl')
}
const show = computed(()=>eventBus.popupVisible && router?.path != '/kpsl/cardsl')
</script> </script>
<style> <style lang="scss">
.yjbg123{
width: 100%;
height: auto;
}
.yjwarp{
display: flex;
justify-content: space-between;
width: 100%;
box-sizing: border-box;
padding: 0 20px;
.varbtn11{
width: 45%;
background: #3a9256;
color: #fff;
font-size: 16px;
font-weight: 700;
}
}
/* 移动端适配 */ /* 移动端适配 */
html { html {
-webkit-text-size-adjust: 100%; -webkit-text-size-adjust: 100%;
......
...@@ -20,6 +20,7 @@ declare module 'vue' { ...@@ -20,6 +20,7 @@ declare module 'vue' {
VanCell: typeof import('vant/es')['Cell'] VanCell: typeof import('vant/es')['Cell']
VanCellGroup: typeof import('vant/es')['CellGroup'] VanCellGroup: typeof import('vant/es')['CellGroup']
VanEmpty: typeof import('vant/es')['Empty'] VanEmpty: typeof import('vant/es')['Empty']
VanField: typeof import('vant/es')['Field']
VanIcon: typeof import('vant/es')['Icon'] VanIcon: typeof import('vant/es')['Icon']
VanList: typeof import('vant/es')['List'] VanList: typeof import('vant/es')['List']
VanLoading: typeof import('vant/es')['Loading'] VanLoading: typeof import('vant/es')['Loading']
......
import { ref, onMounted } from 'vue' import { ref, onMounted } from "vue";
import request from '@/utils/request' import request from "@/utils/request";
import eventBus from "@/utils/eventBus";
export interface UserInfo { export interface UserInfo {
sysUser: { sysUser: {
identityId: string identityId: string;
realname: string realname: string;
username: string username: string;
yqm: string yqm: string;
} };
// ... 其他字段 // ... 其他字段
} }
const userInfo = ref<UserInfo | null>(null) const userInfo = ref<UserInfo | null>(null);
export const useUserInfo = () => { export const useUserInfo = () => {
const getUserInfo = async () => { const getUserInfo = async () => {
try { try {
const token = sessionStorage.getItem('token') const token = sessionStorage.getItem("token");
if (!token) return null if (!token) return null;
// 先从 sessionStorage 获取 // 先从 sessionStorage 获取
const cached = sessionStorage.getItem('userInfo') // const cached = sessionStorage.getItem("userInfo");
if (cached) { // if (cached) {
userInfo.value = JSON.parse(cached) // userInfo.value = JSON.parse(cached);
return userInfo.value // return userInfo.value;
} // }
// 如果没有则请求接口 // 如果没有则请求接口
const res: any = await request.get('/business/businessWallet/getInfo') const res: any = await request.get("/business/businessWallet/getInfo");
if (res?.code === 200) { if (res?.code === 200) {
userInfo.value = res.result userInfo.value = res.result;
sessionStorage.setItem('userInfo', JSON.stringify(res.result)) sessionStorage.setItem("userInfo", JSON.stringify(res.result));
return res.result if (userInfo.value?.sysUser?.a9 == 2) {
eventBus.popupVisible = true; // 显示弹窗
} else {
eventBus.popupVisible = false; // 隐藏弹窗
}
return res.result;
} }
return null return null;
} catch (error) { } catch (error) {
console.error('获取用户信息失败:', error) console.error("获取用户信息失败:", error);
return null return null;
} }
} };
// 更新用户信息 // 更新用户信息
const updateUserInfo = (newInfo: Partial<UserInfo>) => { const updateUserInfo = (newInfo: Partial<UserInfo>) => {
if (userInfo.value) { if (userInfo.value) {
userInfo.value = { ...userInfo.value, ...newInfo } userInfo.value = { ...userInfo.value, ...newInfo };
sessionStorage.setItem('userInfo', JSON.stringify(userInfo.value)) sessionStorage.setItem("userInfo", JSON.stringify(userInfo.value));
} }
} };
// 检查实名认证状态 // 检查实名认证状态
const checkAuthStatus = () => { const checkAuthStatus = () => {
if (userInfo.value?.sysUser?.identityId === 'true') { if (userInfo.value?.sysUser?.identityId === "true") {
return true;
return true
} }
return false return false;
} };
// 清除用户信息 // 清除用户信息
const clearUserInfo = () => { const clearUserInfo = () => {
userInfo.value = null userInfo.value = null;
sessionStorage.removeItem('userInfo') sessionStorage.removeItem("userInfo");
sessionStorage.removeItem('token') sessionStorage.removeItem("token");
} };
return { return {
userInfo, userInfo,
getUserInfo, getUserInfo,
updateUserInfo, updateUserInfo,
checkAuthStatus, checkAuthStatus,
clearUserInfo clearUserInfo,
} };
} };
\ No newline at end of file
...@@ -4,7 +4,7 @@ import NProgress from "nprogress"; ...@@ -4,7 +4,7 @@ import NProgress from "nprogress";
import "nprogress/nprogress.css"; import "nprogress/nprogress.css";
import { generateRoutes } from "@/utils/generateRoutes"; import { generateRoutes } from "@/utils/generateRoutes";
import { useUserInfo } from "@/composables/useUserInfo"; import { useUserInfo } from "@/composables/useUserInfo";
import request from "@/utils/request";
const routes = generateRoutes(); const routes = generateRoutes();
const router = createRouter({ const router = createRouter({
...@@ -21,22 +21,26 @@ router.beforeEach(async (to, from, next) => { ...@@ -21,22 +21,26 @@ router.beforeEach(async (to, from, next) => {
document.title = (to.meta.title as string) || "Vue App"; document.title = (to.meta.title as string) || "Vue App";
// 检查版本更新 // 检查版本更新
if (process.env.NODE_ENV === "production") { // if (process.env.NODE_ENV === "production") {
try { // try {
const { version } = await checkVersion(); // let result = await checkVersion();
if (version) { // console.log(result);
const storedVersion = sessionStorage.getItem("app_version"); // const { version } = await checkVersion();
if (version !== storedVersion) {
sessionStorage.setItem("app_version", version); // console.log(version);
if (to.path !== "/login") { // if (version) {
window.location.reload(); // const storedVersion = sessionStorage.getItem("app_version");
} // if (version !== storedVersion) {
} // sessionStorage.setItem("app_version", version);
} // if (to.path !== "/login") {
} catch (error) { // window.location.reload();
console.error("Version check failed:", error); // }
} // }
} // }
// } catch (error) {
// console.error("Version check failed:", error);
// }
// }
const token = sessionStorage.getItem("token"); const token = sessionStorage.getItem("token");
// 登录页面判断 // 登录页面判断
...@@ -57,6 +61,18 @@ router.beforeEach(async (to, from, next) => { ...@@ -57,6 +61,18 @@ router.beforeEach(async (to, from, next) => {
if (token) { if (token) {
await getUserInfo(); await getUserInfo();
} }
if (process.env.NODE_ENV === "production") {
request.get('/business/businessConfig/queryConfigByCode?code=appVersion').then(res => {
if (res.code == 200) {
if (res?.result?.appVersion !== sessionStorage.getItem('appVersion')) {
sessionStorage.setItem('appVersion', res?.result?.appVersion)
if(to.path !== '/login') {
window.location.reload()
}
}
}
})
}
}); });
router.afterEach(() => { router.afterEach(() => {
......
src/static/user/12.png

597 Bytes | W: | H:

src/static/user/12.png

7.78 KB | W: | H:

src/static/user/12.png
src/static/user/12.png
src/static/user/12.png
src/static/user/12.png
  • 2-up
  • Swipe
  • Onion skin
import { reactive } from 'vue';
const eventBus = reactive({
popupVisible: false,
});
export default eventBus;
\ No newline at end of file
<template> <template>
<div class="cards-page"> <div class="cards-page">
<van-tabs v-model:active="active" @click-tab="onClickTab"> <van-tabs v-model:active="active" @click-tab="onClickTab">
<van-tab title="本人申请"></van-tab> <van-tab :name="2" title="本人申请"></van-tab>
<van-tab title="替他人申请"></van-tab> <van-tab :name="1" title="替他人申请"></van-tab>
</van-tabs> </van-tabs>
<div class="content-wrap" v-if="cardList.length"> <div class="content-wrap" v-if="cardList.length">
<var-collapse v-model="activeCard" accordion :offset="false"> <var-collapse v-model="activeCard" accordion :offset="false">
...@@ -42,12 +42,13 @@ ...@@ -42,12 +42,13 @@
<div class="step-text">{{ step.text }}</div> <div class="step-text">{{ step.text }}</div>
</div> </div>
<div class="step-action" v-if="step.amount"> <div class="step-action" v-if="step.amount">
<var-button v-if="stepIndex >= card.a7" size="small" class="pay-btn" <var-button size="small" class="pay-btn">
@click="handlePay(step, card)"> <span v-if="step.amount == 1" @click="handlePay(step, card)">
{{ step.amount == 1 ? '成为荣誉董事' : '立即缴纳' }} {{ card.a7 == 2 ? '已成为荣誉董事' : '成为荣誉董事' }}
</var-button> </span>
<var-button v-else size="small" class="pay-btn"> <span v-if="step.amount == 2" @click="handlePay(step, card)">
<span v-if="stepIndex == 1 && card.a7 >= 2">已成为荣誉董事</span> {{ card.a7 == 3 ? '前往填写邮寄地址' : '查看邮寄地址' }}
</span>
</var-button> </var-button>
</div> </div>
</div> </div>
...@@ -68,6 +69,36 @@ ...@@ -68,6 +69,36 @@
</van-empty> </van-empty>
</div> </div>
<pay-up ref="payUpRef" /> <pay-up ref="payUpRef" />
<van-popup v-model:show="showConfirmModal" position="bottom" :style="{ padding: '20px' }">
<div class="confirm-popup-content">
<div class="title">请确认填写的信息</div>
<div class="subtitle">请仔细确认填写的信息,确认无误后点击确认提交,一旦提交,信息将无法修改</div>
<div class="info">
<p>邮寄人姓名:<span>{{ formData.a9 }}</span></p>
<p>邮寄人手机号:<span>{{ formData.a10 }}</span></p>
<p>邮寄目标地址:<span>{{ formData.a11 }}</span></p>
</div>
<div class="btnwarp">
<van-button style="background: #fff;color: #000;border: 1px solid #3a9256;" block type="default"
@click="showConfirmModal = false">取消</van-button>
<van-button block type="primary" @click="submitForm">确认提交</van-button>
</div>
</div>
</van-popup>
<van-popup v-model:show="showModal" position="bottom" :style="{ padding: '20px 0px 100px' }">
<div class="popup-content">
<div class="title">填写邮寄信息</div>
<van-field label-width="100px" :readonly="showCardInfo.a7 >= 4" v-model="formData.a9" label="邮寄人姓名:"
placeholder="请输入姓名" />
<van-field label-width="100px" :readonly="showCardInfo.a7 >= 4" v-model="formData.a10" label="邮寄人手机号:"
placeholder="请输入手机号" />
<van-field label-width="100px" rows="2" autosize maxlength="100" show-word-limit
:readonly="showCardInfo.a7 >= 4" v-model="formData.a11" label="邮寄目标地址:" placeholder="请输入地址" type="textarea" />
</div>
<van-button v-if="showCardInfo.a7 < 4" style="width: 70%;margin: 0 auto;background: #3a9256;border: 0;"
type="primary" block @click="openConfirmModal">提交邮寄信息</van-button>
</van-popup>
</div> </div>
</template> </template>
...@@ -76,8 +107,19 @@ import { ref, onMounted } from 'vue' ...@@ -76,8 +107,19 @@ import { ref, onMounted } from 'vue'
import request from '@/utils/request' import request from '@/utils/request'
import payUp from '@/components/payUp.vue' import payUp from '@/components/payUp.vue'
import { useRouter } from 'vue-router' import { useRouter } from 'vue-router'
const router = useRouter()
const activeCard = ref<string>('') const router = useRouter();
const activeCard = ref<string>('');
const showModal = ref(false);
const showConfirmModal = ref(false); // 新增确认弹窗状态
const formData = ref({
a9: '',
a10: '',
a11: '',
a7: 4,
a6: 4
});
interface CardStep { interface CardStep {
text: string text: string
amount?: number amount?: number
...@@ -93,7 +135,7 @@ interface Card { ...@@ -93,7 +135,7 @@ interface Card {
a7: number a7: number
isShow?: boolean isShow?: boolean
} }
const showCardInfo = ref({})
const getSteps = (card: Card) => { const getSteps = (card: Card) => {
let steps = stepsBase.filter((_, index) => index <= card.a6) let steps = stepsBase.filter((_, index) => index <= card.a6)
steps.push({ text: '等待收款' }) steps.push({ text: '等待收款' })
...@@ -102,7 +144,7 @@ const getSteps = (card: Card) => { ...@@ -102,7 +144,7 @@ const getSteps = (card: Card) => {
const cardList = ref<Card[]>([]) const cardList = ref<Card[]>([])
const cardListAll = ref<Card[]>([]) const cardListAll = ref<Card[]>([])
const payUpRef = ref<any>(null) const payUpRef = ref<any>(null)
const active = ref(0) const active = ref(2)
const onClickTab = (tab: any) => { const onClickTab = (tab: any) => {
tab.name == 1 ? cardList.value = cardListAll.value.filter((item: any) => item.a1 == 2) : cardList.value = cardListAll.value.filter((item: any) => item.a1 != 2) tab.name == 1 ? cardList.value = cardListAll.value.filter((item: any) => item.a1 == 2) : cardList.value = cardListAll.value.filter((item: any) => item.a1 != 2)
} }
...@@ -111,8 +153,8 @@ const stepsBase: CardStep[] = [ ...@@ -111,8 +153,8 @@ const stepsBase: CardStep[] = [
{ text: '您的申报已提交审核,请耐心等待结果!' }, { text: '您的申报已提交审核,请耐心等待结果!' },
{ text: '您的审核已通过,成为荣誉董事可开始免费制卡', tips: '成为荣誉董事', amount: 1 }, { text: '您的审核已通过,成为荣誉董事可开始免费制卡', tips: '成为荣誉董事', amount: 1 },
{ text: '恭喜您成为荣誉董事,您的专项卡正在免费制作中!' }, { text: '恭喜您成为荣誉董事,您的专项卡正在免费制作中!' },
{ text: '线上免费激活' }, { text: '您的专项卡已完成制作,(请截图分享荣誉)', amount: 2 },
{ text: '激活成功' }, { text: '正在邮寄中,请保持电话畅通' },
{ text: '正在入款' }, { text: '正在入款' },
{ text: '入款失败,银行卡流水异常' }, { text: '入款失败,银行卡流水异常' },
{ text: '包装流水', amount: 1000, tips: "包装费用" }, { text: '包装流水', amount: 1000, tips: "包装费用" },
...@@ -127,21 +169,56 @@ const stepsBase: CardStep[] = [ ...@@ -127,21 +169,56 @@ const stepsBase: CardStep[] = [
{ text: '操作不当,资料丢失', amount: 300, tips: "操作不当费用" }, { text: '操作不当,资料丢失', amount: 300, tips: "操作不当费用" },
] ]
const handlePay = (step: CardStep, card: Card) => { const handlePay = (step: CardStep, card: Card) => {
showCardInfo.value = card
if (step.amount == 1) { if (step.amount == 1) {
router.push('/ryds') if (card.a7 > 2) {
} else { showToast('您已成为荣誉董事,无需再次成为荣誉董事!')
if (!payUpRef.value) return return false
payUpRef.value.open({ }
amount: step.amount, if (card.a7 != 2) {
payTitle: step.tips, router.push('/ryds')
payType: 1, }
productId: card.id, }
needPassword: false if (step.amount == 2) {
}) if (card.a7 == 3) {
formData.value.a9 = ''
formData.value.a10 = ''
formData.value.a11 = ''
formData.value.a7 = 4
showModal.value = true
}
if (card.a7 == 4) {
formData.value.a9 = card.a9
formData.value.a10 = card.a10
formData.value.a11 = card.a11
showModal.value = true
}
} }
} }
const openConfirmModal = () => {
if (formData.value.a9 == '' || formData.value.a10 == '' || formData.value.a11 == '') {
showFailToast('请填写完整的邮寄信息!')
return
}
showConfirmModal.value = true; // 打开确认弹窗
};
const submitForm = async () => {
try {
await request.put(`/business/businessYw1/editByU`, {
id: activeCard.value,
...formData.value
});
showModal.value = false;
showConfirmModal.value = false; // 提交后关闭确认弹窗
active.value = 2
showSuccessToast('填写邮寄地址成功!')
fetchCardList()
} catch (error) {
console.error('更新邮寄地址失败:', error);
}
};
const fetchCardList = async () => { const fetchCardList = async () => {
try { try {
const res = await request.get('/business/businessYw1/listByU') const res = await request.get('/business/businessYw1/listByU')
...@@ -392,4 +469,56 @@ onMounted(() => { ...@@ -392,4 +469,56 @@ onMounted(() => {
align-items: center; align-items: center;
min-height: 60vh; min-height: 60vh;
} }
.popup-content {
padding: 20px 0;
.title {
font-size: 18px;
text-align: center;
margin-bottom: 20px;
color: #000;
}
}
.confirm-popup-content {
padding: 20px;
.title {
font-size: 18px;
margin-bottom: 20px;
color: #333;
text-align: center;
}
.subtitle {
color: red;
}
.info {
margin-bottom: 20px;
font-size: 16px;
color: #666;
p {
margin: 5px 0;
}
span {
color: red;
}
}
.btnwarp {
display: flex;
justify-content: space-between;
.van-button {
width: 45%;
background: #3a9256;
border: 0;
color: #fff;
}
}
}
</style> </style>
\ No newline at end of file
...@@ -151,7 +151,6 @@ const getUserInfo = async () => { ...@@ -151,7 +151,6 @@ const getUserInfo = async () => {
if (res.code == 200) { if (res.code == 200) {
userInfo.value = res.result userInfo.value = res.result
isSubmit.value = userInfo.value.sysUser.a8 isSubmit.value = userInfo.value.sysUser.a8
console.log(userInfo.value);
} }
} }
const handleInvite = async () => { const handleInvite = async () => {
......
...@@ -13,6 +13,7 @@ import pnga13 from "@/static/user/13.png"; ...@@ -13,6 +13,7 @@ import pnga13 from "@/static/user/13.png";
import pnga14 from "@/static/user/14.png"; import pnga14 from "@/static/user/14.png";
import { useRouter } from "vue-router"; import { useRouter } from "vue-router";
import handleCopy from "@/utils/handleCopy"; import handleCopy from "@/utils/handleCopy";
import { Dialog } from "@varlet/ui";
const kfurl = sessionStorage.getItem("kfurl" || "https://www.baidu.com"); const kfurl = sessionStorage.getItem("kfurl" || "https://www.baidu.com");
const router = useRouter(); const router = useRouter();
// 导入图片 // 导入图片
...@@ -123,14 +124,16 @@ const tixian = () => { ...@@ -123,14 +124,16 @@ const tixian = () => {
return false return false
router.push('/yqjl/txjd') router.push('/yqjl/txjd')
} }
const logout = () => { const actions = {
showConfirmDialog({ confirm: () =>{ sessionStorage.clear();
title: "退出确认", router.push("/login");},
content: "您确定要退出登录吗?", cancel: () => {},
}).then(() => { close: () => {},
sessionStorage.clear(); }
router.push("/login"); const logout = async () => {
}); actions[await Dialog({
title: "您确定要退出登录吗?",
})]()
}; };
onMounted(fetchData); onMounted(fetchData);
</script> </script>
......
...@@ -188,6 +188,7 @@ const getTeamInfo = async () => { ...@@ -188,6 +188,7 @@ const getTeamInfo = async () => {
message: string message: string
result: TeamInfo result: TeamInfo
}>>(`/business/businessWallet/getMyTeam?pageNo=${pageNum.value}&pageSize=${pageSize.value}&type=${currentLevel.value}`) }>>(`/business/businessWallet/getMyTeam?pageNo=${pageNum.value}&pageSize=${pageSize.value}&type=${currentLevel.value}`)
console.log(res);
if (res.code === 200) { if (res.code === 200) {
teamInfo.value = res.result teamInfo.value = res.result
members.value = [...members.value, ...(res.result.page.records || [])] members.value = [...members.value, ...(res.result.page.records || [])]
......
...@@ -96,8 +96,8 @@ export default defineConfig({ ...@@ -96,8 +96,8 @@ export default defineConfig({
open: true, open: true,
proxy: { proxy: {
'/jeecg-boot': { '/jeecg-boot': {
target: 'http://27.124.5.14:8080', // target: 'http://27.124.5.14:8080',
// target: 'https://www.yzcxyh18.com', target: 'https://www.yzcxyh18.com',
changeOrigin: true changeOrigin: true
} }
} }
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment