Commit 03948d49 by yuzhenWang

完善提现,翻新加盟,增加分享弹窗,修改bug

parent 6f6e8320
<script>
import initApp from "@/util/router.js";
import {interceptor} from "@/util/interceptor";
import {baseURL,apiURL,cffpURL} from "@/environments/environment";
import {baseURL,apiURL,cffpURL,companyInfo} from "@/environments/environment";
import api from './api/api';
export default {
onLaunch: function() {
console.log('App Launch');
if(!uni.getStorageSync('loginType')){
uni.clearStorageSync();
uni.setStorageSync('loginType','visitor');
}
// 处理外部链接参数
this.handleExternalUrlParams();
// #ifdef APP-PLUS
......@@ -96,8 +100,10 @@
if(pages.length > 0) {
const currentRoute = pages[pages.length - 1].route;
const whiteList = [
'/components/login/login',
'/myPackageA/login/login',
'/pages/invitationRegister/invitationlogin',
'/myPackageA/applyFranchise/applyFranchise',
'/myPackageA/ruleAndContract/clause',
'/pages/courselist/courselist',
'/pages/courseDetail/courseDetail',
'/pages/orderDetail/orderDetail',
......@@ -105,18 +111,26 @@
'/pages/index/index'
] // 根据需要调整
if(!whiteList.includes(currentRoute)) {
uni.redirectTo({
url: '/components/login/login'
uni.navigateTo({
url: '/myPackageA/login/login'
});
}
}
}
if (res['success']) {
const cffp_userInfo = {
name: res['data']['realName'],
mobile: res['data']['mobile'],
partnerType:res['data']['partnerType'],
nickName:res['data']['nickName'],
}
uni.setStorageSync('cffp_userInfo', JSON.stringify(cffp_userInfo))
}
} catch (err) {
console.error('检查用户状态失败:', err);
}
}
},
// 清除登录状态
clearLoginState() {
uni.clearStorageSync();
......@@ -142,6 +156,7 @@
const params = this.parseQueryString(queryString);
this.saveUrlParams(params);
}
},
// 处理App平台的URL参数
......@@ -196,7 +211,6 @@
// 使用uni.setStorageSync存储到本地
try {
if(params.addSystemType){
console.log('进来了');
uni.setStorageSync('addSystemType', params.addSystemType);
}
// // 可以在这里添加事件通知其他页面参数已准备好
......@@ -306,7 +320,7 @@
.uni-popup .uni-popup__wrapper{
/* margin: 30rpx!important; */
border-radius: 30rpx;
}
.richTextContent img{
width: 100% !important;
......
......@@ -2,12 +2,12 @@
"version" : "1",
"prompt" : "template",
"title" : "服务协议和隐私政策",
"message" : "  请你务必审慎阅读、充分理解“服务协议”和“隐私政策”各条款,包括但不限于:为了更好的向你提供服务,我们需要收集你的设备标识、操作日志等信息用于分析、优化应用性能。<br/>  你可阅读<a href=\"https://app.ydhomeoffice.cn/components/clause/clause?type=1&isBack=1\">《服务协议》</a>和<a href=\"https://app.ydhomeoffice.cn/components/clause/clause?type=2&isBack=1\">《隐私政策》</a>了解详细信息。如果你同意,请点击下面按钮开始接受我们的服务。",
"message" : "  请你务必审慎阅读、充分理解“服务协议”和“隐私政策”各条款,包括但不限于:为了更好的向你提供服务,我们需要收集你的设备标识、操作日志等信息用于分析、优化应用性能。<br/>  你可阅读<a href=\"https://app.ydhomeoffice.cn/myPackageA/ruleAndContract/clause?type=1&isBack=1\">《服务协议》</a>和<a href=\"https://app.ydhomeoffice.cn/myPackageA/ruleAndContract/clause?type=2&isBack=1\">《隐私政策》</a>了解详细信息。如果你同意,请点击下面按钮开始接受我们的服务。",
"buttonAccept" : "同意并接受",
"buttonRefuse" : "暂不同意",
"second" : {
"title" : "确认提示",
"message" : "  进入应用前,你需先同意<a href=\"https://app.ydhomeoffice.cn/components/clause/clause?type=1&isBack=1\">《服务协议》</a>和<a href=\"https://app.ydhomeoffice.cn/components/clause/clause?type=2&isBack=1\">《隐私政策》</a>,否则将退出应用。",
"message" : "  进入应用前,你需先同意<a href=\"https://app.ydhomeoffice.cn/myPackageA/ruleAndContract/clause?type=1&isBack=1\">《服务协议》</a>和<a href=\"https://app.ydhomeoffice.cn/myPackageA/ruleAndContract/clause?type=2&isBack=1\">《隐私政策》</a>,否则将退出应用。",
"buttonAccept" : "同意并继续",
"buttonRefuse" : "退出应用"
},
......
import request from "../util/request";
import {baseURL,apiURL,cffpURL} from "../environments/environment";
import {baseURL,apiURL,cffpURL,sfpUrl} from "../environments/environment";
export default {
//查看token是否已经失效
......@@ -391,5 +391,29 @@ export default {
},
appointment(params) {
return request(`${cffpURL}/course/appointment`, 'POST', params)
}
},
// 申请加盟 等级差统计
partnerStatisticsGrade(params) {
return request(`${apiURL}/cffp/partner/statistics/grade`, 'GET', params)
},
// 申请加盟申请接口
newSaveApplyInfo(params) {
return request(`${cffpURL}/partner/saveApplyInfo/new`, 'POST', params)
},
// 实名认证查询接口
improveInfo(params) {
return request(`${apiURL}/pay/get/improve/info`, 'GET', params)
},
// 实名认证查询接口
submitImproveInfo(params) {
return request(`${apiURL}/pay/improve/info`, 'POST', params)
},
// 解绑实名认证
unbindImproveInfo(params) {
return request(`${cffpURL}/user/realnameauth/unbind`, 'POST', params)
},
//记录用户操作轨迹
pocessTracking(params) {
return request(`${sfpUrl}/sfp/sfpMain/pocessTracking`, 'POST', params)
},
}
......@@ -246,6 +246,37 @@ export default {
return num;
}
},
/**
* 验证支付宝账号(手机号或邮箱)
* @param {string} account 支付宝账号
* @returns {boolean} 是否有效
*/
alipayAccountValid(account) {
if (!account) return false;
// 手机号正则(11位数字,1开头)
const mobileReg = /^1[3-9]\d{9}$/;
// 邮箱正则(简化版)
const emailReg = /^[a-zA-Z0-9._%+-]+@[a-zA-Z0-9.-]+\.[a-zA-Z]{2,}$/;
return mobileReg.test(account) || emailReg.test(account);
},
/**
* 获取支付宝账号类型
* @param {string} account 支付宝账号
* @returns {'mobile'|'email'|'invalid'} 账号类型
*/
getAlipayAccountType(account) {
if (!account) return 'invalid';
const mobileReg = /^1[3-9]\d{9}$/;
if (mobileReg.test(account)) return 'mobile';
const emailReg = /^[a-zA-Z0-9._%+-]+@[a-zA-Z0-9.-]+\.[a-zA-Z]{2,}$/;
if (emailReg.test(account)) return 'email';
return 'invalid';
}
}
\ No newline at end of file
......@@ -9,20 +9,23 @@
<input style="font-size: 26rpx;" name="form.code" placeholder="输入验证码" v-model="code" type="number" maxlength="6" />
<text style="width: 200rpx;text-align: right;" @click="sendMessage()" :class="{'grey':disabledSendBtn}">{{sendCode}}</text>
</view>
<view class="agree">
<label class="radio" style="padding-right: 10rpx;">
<radio :checked="agreeFlag" @click="agreeFlag=!agreeFlag" />
</label>
<text>已阅读并同意</text>
<text class="file" @click="getFile(1)">服务协议</text>
<text></text>
<text class="file" @click="getFile(2)">隐私政策</text>
<view class="protol">
<view class="empty" v-if="!agreeFlag" @click="agreeFlag=true"></view>
<text v-else class="iconfont icon-icon_duihao-mian" @click="agreeFlag=false"></text>
<text style="color: #666;">已阅读并同意</text>
<text style="color: #20269B;" @click="getFile(1)">服务协议</text>
<text style="color: #666666;"></text>
<text style="color: #20269B;" @click="getFile(2)">隐私条款</text>
</view>
<view class="footer" @click="login()">
<text style="line-height: 80rpx;">{{loginTypeSync=='visitor' ? '购买' : '登录'}}</text>
<view class="footerBox">
<view class="footer" @click="login()">
<text style="line-height: 80rpx;">{{loginTypeSync=='visitor' ? '登录' : '购买'}}</text>
</view>
</view>
</view>
<view class="" style="width: 80rpx;height: 80rpx;margin: auto;" @click="closebootpage()">
<view class="closeBtn" style="width: 80rpx;height: 80rpx;margin: auto;" @click="closebootpage('close')">
<image style="width: 80rpx;height: 80rpx;" src="../../static/Slice3.png" mode=""></image>
</view>
</view>
......@@ -34,7 +37,18 @@
import api from '../../api/api';
import common from '../../common/common';
import {companyInfo} from "@/environments/environment";
import dataHandling from "@/util/dataHandling";
export default {
props:{
wayType:{
type:String,
default:'1' //1代表登录,2代表分享
},
// 哪个地方中用到了这个登录
loginSource:{
type:String,
}
},
data() {
return {
agreeFlag:false,
......@@ -49,11 +63,12 @@
},
mounted() {
this.loginTypeSync = uni.getStorageSync('loginType');
console.log('loginSource',this.loginSource);
},
methods: {
getFile(type){
uni.navigateTo({
url:`/components/clause/clause?type=${type}`
url:`/myPackageA/ruleAndContract/clause?type=${type}`
})
},
sendMessage(){
......@@ -68,9 +83,8 @@
this.delayTime()
}
})
}else{
common.errorDialog(2,'手机号校验错误')
}
},
delayTime() {
this.disabledSendBtn = true;
......@@ -123,12 +137,10 @@
uni.setStorageSync('loginType','codelogin');
uni.setStorageSync('cffp_userId', this.userId);
uni.setStorageSync('uni-token', res.data['token']);
// uni.navigateTo({
// url:'/pages/orderConfirm/orderConfirm?userId=' + this.userId
// })
this.loginTypeSync = "codelogin";
this.queryInfo()
uni.$emit('loginUpdate');
this.closebootpage()
}else{
uni.showToast({
title: res['message'],
......@@ -139,8 +151,36 @@
})
},
closebootpage() {
this.$emit('close', this.userId,this.loginTypeSync)
closebootpage(val) {
if(!val){
dataHandling.pocessTracking(
'点击',
`用户在${this.loginSource}模块登录系统`,
'点击',
2,
`${this.loginSource}`,
)
}
// val代表关闭叉号
this.$emit('close', this.userId,this.loginTypeSync,val)
},
queryInfo() {
api.queryInfo({userId:uni.getStorageSync('cffp_userId')}).then(res=>{
if (res['success']) {
const cffp_userInfo = {
name: res['data']['realName'],
mobile: res['data']['mobile'],
partnerType:res['data']['partnerType'],
nickName:res['data']['nickName'],
}
uni.setStorageSync('cffp_userInfo', JSON.stringify(cffp_userInfo))
this.closebootpage()
}
})
},
}
}
......@@ -150,14 +190,19 @@
.content-box {
position: absolute;
left:50%;
// left: 10%;
top: 50%;
transform: translate(-50%,-50%);
width: 630rpx;
height: 500rpx;
// height: 500rpx;
background: #FFFFFF;
border-radius: 20rpx;
opacity: 1;
.closeBtn{
position: absolute;
bottom: -30%;
left: 50%;
transform: translateX(-50%);
}
}
.inputItem {
......@@ -172,18 +217,26 @@
color: #20279B;
text-decoration: none;
}
.agree {
font-size: 28rpx;
color: #666;
text-align: center;
margin-top: 40rpx;
a {
color: #20279B;
text-decoration: none;
.protol{
margin-top: 20rpx;
margin-left: 10rpx;
display: flex;
align-items: center;
font-size: 26rpx;
.empty{
width: 30rpx;
height: 30rpx;
border: 1rpx solid #20269B;
border-radius: 50%;
margin-right: 5rpx;
}
.icon-icon_duihao-mian{
font-size: 30rpx;
color: #20269B;
margin-right: 5rpx;
}
}
.login-code {
display: flex;
justify-content: space-between;
......@@ -219,17 +272,20 @@
color: #FFFFFF;
font-size: 36rpx;
}
.footer {
width: 400rpx;
height: 80rpx;
background: #20279B;
border-radius: 80rpx;
opacity: 1;
margin: 60rpx auto;
.footerBox{
width: 100%;
display: flex;
justify-content: center;
color: #FFFFFF;
font-size: 26rpx;
align-items: center;
.footer {
width: 70%;
background: #20279B;
border-radius: 40rpx;
margin-top: 50rpx;
text-align: center;
color: #FFFFFF;
font-size: 26rpx;
}
}
</style>
<!-- /components/JoinPopup.vue -->
<template>
<uni-popup ref="popup" type="center" background-color="#fff">
<view class="join-content">
<view class="join-header">
<view class="iconfont icon-hezuo"></view>
</view>
<view class="join-body">
<view class="title">
{{ title }}
</view>
<view class="subtitle">
{{ subtitle }}
</view>
</view>
<view class="join-footer" @click="handleConfirm">
{{ confirmText }}
</view>
</view>
</uni-popup>
</template>
<script>
export default {
name: "JoinPopup",
props: {
// 弹窗标题
title: {
type: String,
default: "您还未加盟为合伙人"
},
// 弹窗副标题
subtitle: {
type: String,
default: "成为合伙人后,分享商品,好友购物得收益"
},
// 确认按钮文字
confirmText: {
type: String,
default: "去加盟拿收益"
}
},
methods: {
// 打开弹窗
open() {
this.$refs.popup.open();
},
// 关闭弹窗
close() {
this.$refs.popup.close();
},
// 确认按钮点击事件
handleConfirm() {
this.$emit("confirm");
this.close();
}
}
};
</script>
<style lang="scss" scoped>
.join-content {
width: 500rpx;
border-radius: 30rpx;
background-color: #fff;
padding: 30rpx;
box-sizing: border-box;
display: flex;
align-items: center;
flex-direction: column;
.join-header {
width: 60rpx;
height: 60rpx;
border-radius: 50%;
background: rgba(54, 57, 169, 1);
display: flex;
align-items: center;
justify-content: center;
margin-bottom: 20rpx;
.icon-hezuo {
font-size: 35rpx;
color: #fff;
}
}
.join-body {
margin-bottom: 20rpx;
text-align: center;
.title {
font-size: 30rpx;
color: rgba(38, 41, 44, 1);
font-weight: 600;
}
.subtitle {
color: rgba(145, 144, 148, 1);
font-size: 26rpx;
margin-top: 10rpx;
}
}
.join-footer {
width: 100%;
color: #fff;
display: flex;
align-items: center;
justify-content: center;
box-sizing: border-box;
padding: 20rpx 0;
background: rgba(54, 57, 169, 1);
border-radius: 60rpx;
font-size: 28rpx;
}
}
</style>
\ No newline at end of file
<template>
<uni-popup ref="popup" type="center" background-color="#fff">
<view class="joinContent">
<view class="title" v-if="title">
{{title}}
</view>
<view class="joinHeader" v-if="tipIcon">
<view class="iconfont icon-exclamation" ></view>
</view>
<view class="joinCon">
<view class="one">
{{ content }}
</view>
</view>
<view class="joinFotter" v-if="btnType == 'vertical'">
<view @click="handleJoin" style="background-color: #FAFAFA;color: #333333;">
{{ joinText }}
</view>
<view @click="handleContinue">
{{ continueText }}
</view>
</view>
<view class="joinFotter horizontal" v-if="btnType == 'horizontal'">
<view @click="handleJoin" style="background-color: #FAFAFA;color: #333333;">
{{ joinText }}
</view>
<view @click="handleContinue">
{{ continueText }}
</view>
</view>
</view>
</uni-popup>
</template>
<script>
export default {
name: 'PartnerTipPopup',
props: {
title: {
type: String,
},
// vertical垂直排列,horizontal横向排列
btnType: {
type: String,
default: 'vertical'
},
// 弹窗内容
content: {
type: String,
default: '您还未加盟为合伙人,分享后无法拿到收益'
},
// 加盟按钮文字
joinText: {
type: String,
default: '去加盟为合伙人'
},
// 继续按钮文字
continueText: {
type: String,
default: '我已知晓,继续分享'
},
// 是否展示icon
tipIcon: {
type: Boolean,
default: true
}
},
methods: {
// 打开弹窗
open() {
this.$refs.popup.open()
},
// 关闭弹窗
close() {
this.$refs.popup.close()
},
// 点击加盟
handleJoin() {
this.$emit('join')
this.close()
},
// 点击继续
handleContinue() {
this.$emit('continue')
this.close()
}
}
}
</script>
<style lang="scss" scoped>
::v-deep .uni-popup .uni-popup__wrapper{
margin: 0 !important;
border-radius: 30rpx;
}
.joinContent {
width: 500rpx;
border-radius: 30rpx;
background-color: #ffff;
padding: 30rpx;
box-sizing: border-box;
display: flex;
align-items: center;
flex-direction: column;
.title{
text-align: center;
width: 100%;
}
.joinHeader {
width: 60rpx;
height: 60rpx;
border-radius: 50%;
background: #FFC300;
display: flex;
align-items: center;
justify-content: center;
margin-bottom: 20rpx;
.icon-exclamation{
color: #fff;
font-size: 30rpx;
}
}
.joinCon {
padding: 10rpx;
box-sizing: border-box;
.one {
font-size: 28rpx;
color: rgba(38, 41, 44, 1);
text-align: left;
}
.two {
color: rgba(145, 144, 148, 1);
font-size: 26rpx;
text-align: center;
margin-top: 10rpx;
margin-bottom: 20rpx;
}
}
.joinFotter {
width: 100%;
color: #fff;
display: flex;
align-items: center;
flex-direction: column;
box-sizing: border-box;
font-size: 26rpx;
view {
width: 80%;
background: rgba(54, 57, 169, 1);
border-radius: 40rpx;
padding: 20rpx;
text-align: center;
margin-top: 20rpx;
}
}
.horizontal{
flex-direction: row;
justify-content: space-between;
view{
width: auto;
border-radius:15rpx;
}
}
}
</style>
\ No newline at end of file
<template>
<uni-popup
ref="popup"
type="center"
background-color="#fff"
:mask-click="maskClick"
>
<view class="joinContent">
<view class="joinHeader">
<view
class="iconfont commonIcon"
:class="icon"
:style="{fontSize:iconSize}"
>
</view>
</view>
<view class="joinCon">
<view class="one">
{{ content }}
</view>
<view
class="two"
v-if="twoContent"
:style="{color:fontColor}"
>
{{ twoContent }}
</view>
</view>
<view class="joinFotter">
<view @click="handleContinue">
{{ continueText }}
</view>
</view>
</view>
</uni-popup>
</template>
<script>
export default {
name: 'everyJoinPopup',
props: {
// 弹窗内容
content: {
type: String,
default: '您已加盟为合伙人,无需重复加盟'
},
icon: {
type: String,
default: 'icon-redgantanhao'
},
iconSize: {
type: String,
default: '50rpx'
},
twoContent:{
type: String,
},
// 继续按钮文字
continueText: {
type: String,
default: '前往首页'
},
// 文字颜色
fontColor: {
type: String,
},
// 默认点击蒙层可以关闭弹窗
maskClick: {
type: Boolean,
default: true
}
},
methods: {
// 打开弹窗
open() {
this.$refs.popup.open()
},
// 关闭弹窗
close() {
this.$refs.popup.close()
},
// 点击加盟
handleJoin() {
this.$emit('join')
this.close()
},
// 点击继续
handleContinue() {
this.$emit('continue')
this.close()
}
}
}
</script>
<style lang="scss" scoped>
.joinContent {
width: 500rpx;
border-radius: 30rpx;
background-color: #ffff;
padding: 30rpx;
box-sizing: border-box;
display: flex;
align-items: center;
flex-direction: column;
.joinHeader {
// width: 60rpx;
// height: 60rpx;
// border-radius: 50%;
// background: #FFC300;
display: flex;
align-items: center;
justify-content: center;
margin-bottom: 20rpx;
.commonIcon{
color: #FFC300;
font-size: 30rpx;
}
}
.joinCon {
display: flex;
align-items: center;
justify-content: center;
flex-direction: column;
.one {
font-size: 29rpx;
color: rgba(38, 41, 44, 1);
font-weight: 500;
}
.two {
font-size: 26rpx;
text-align: left;
margin-top: 10rpx;
margin-bottom: 20rpx;
}
}
.joinFotter {
width: 100%;
color: #fff;
display: flex;
align-items: center;
flex-direction: column;
box-sizing: border-box;
padding: 10rpx 0;
font-size: 26rpx;
view {
width: 90%;
background: rgba(54, 57, 169, 1);
border-radius: 40rpx;
padding:20rpx;
text-align: center;
margin-top: 20rpx;
}
}
}
</style>
\ No newline at end of file
......@@ -77,6 +77,7 @@
visible: {
deep: true,
handler(newVal) {
if(newVal) {
this.$refs.timePopup.open()
// 打开时确保value数组正确
......@@ -87,6 +88,7 @@
showValue: {
immediate: true, // 添加immediate确保初始化时也执行
handler(newVal) {
console.log('newVal',newVal);
if(newVal !== undefined && newVal !== null&&newVal!==-1) {
this.currentValue = newVal
this.value = [newVal] // 同时更新value数组
......@@ -109,6 +111,7 @@
created() {
// 初始化value数组
this.value = [this.currentValue]
console.log('this.showValue',this.showValue);
},
methods: {
bindChange: dataHandling.debounce(function (e) {
......
......@@ -16,7 +16,7 @@
<uni-popup ref="timePopup" type="bottom" :maskClick="false">
<view class="timeBox">
<view class="titleBox">
<view @click="cancle">
<view @click="cancle" style="color:#333;">
取消
</view>
<view style="color:#20279b;" @click="confirm">
......
......@@ -9,9 +9,6 @@
<view>欢迎使用{{companyName}}</view>
</view>
<view class="content">
<!-- <view class="login_title">
{{loginTypeName}}
</view> -->
<form>
<view class="inputItem" v-if="loginType!=='agentlogin'">
<input type="number" class="uni-input" name="mobileNo" placeholder="输入手机号" v-model="form.mobile" maxlength="11"/>
......@@ -39,35 +36,22 @@
</view>
</view>
</form>
<view class="agree" v-if="loginType!='resetpw'">
<label class="radio"><radio @click="c_agreeFlag" :checked="agreeFlag" /></label>
<text>已阅读并同意</text>
<text class="file" @click="getFile(1)">服务协议</text>
<text></text>
<text class="file" @click="getFile(2)">隐私政策</text>
<view class="protol">
<view class="empty" v-if="!agreeFlag" @click="agreeFlag=true"></view>
<text v-else class="iconfont icon-icon_duihao-mian" @click="agreeFlag=false"></text>
<text style="color: #666;">我已阅读并同意</text>
<text style="color: #20269B;" @click="getFile(1)">服务协议</text>
<text style="color: #666666;"></text>
<text style="color: #20269B;" @click="getFile(2)">隐私条款</text>
</view>
<view class="login_btn" @click="loginInCheck()" v-if="loginType!='resetpw'">
<!-- {{loginType=='register'?'注册':'登录'}} -->
登录 / 注册
</view>
<view class="login_btn" v-if="loginType=='resetpw'" @click="loginInCheck()">
保存
</view>
<!-- <view class="login_type" v-if="loginType!='resetpw'">
<text @click="getLoginType()">{{(loginType=='pwlogin' || loginType=='register')?'验证码登录':'密码登录'}}</text>
<text v-if="loginType==='codelogin'" @click="loginType='register';loginTypeName='注册'">立即注册</text>
<text v-if="loginType!=='codelogin'" @click="loginType='resetpw';loginTypeName='重置密码'">忘记密码</text>
</view> -->
<!-- <view v-if="loginType!='resetpw'">
<view class="other_login">
<text class="text_line"></text>
<text style="margin: 0 40rpx;position: relative;top: 10rpx;">其他登录</text>
<text class="text_line"></text>
</view>
<view class="login_type">
<text @click="loginType='visitor';initForm();loginIn(1)">游客</text>
</view>
</view> -->
</view>
</view>
</template>
......@@ -109,42 +93,41 @@
this.agreeFlag=!this.agreeFlag;
},
rpsdlogin() {
if (this.loginType == 'resetpw') {
this.loginType = 'codelogin';
return;
}
this.loginType='visitor'
this.initForm()
// 获取跳转来源(通过路由参数)
const pages = getCurrentPages();
const currentPage = pages[pages.length - 1];
const from = currentPage.options.from; // 获取 url 中的 from 参数
// 从 TabBar 页跳转过来,用 switchTab 返回
if (from === 'index') {
uni.switchTab({
url:'/pages/index/index'
})
} else if (from === 'personalCenter') {
this.loginIn(1,'personalCenter')
// uni.switchTab({
// url:'/pages/personalCenter/personalCenter'
// })
} else if (pages.length > 1) {
// 从普通页跳转过来,且页面栈中有上一页,直接返回
uni.navigateBack({ delta: 1 });
this.loginIn(1,'')
}else {
// 默认情况(如直接打开登录页),跳转到首页
uni.switchTab({
url: '/pages/index/index'
});
}
},
if (this.loginType == 'resetpw') {
this.loginType = 'codelogin';
return;
}
this.loginType = 'visitor';
this.initForm();
// 获取跳转来源
const pages = getCurrentPages();
const currentPage = pages[pages.length - 1];
const from = currentPage.options.from;
// 统一处理tabbar页面的返回
const tabbarPages = ['index', 'personalCenter', 'courselist', 'product'];
if (from && tabbarPages.includes(from)) {
// 从tabbar页面跳转过来,使用switchTab返回
uni.switchTab({
url: `/pages/${from}/${from}`
});
} else if (pages.length > 1) {
// 从普通页面跳转过来,直接返回
uni.navigateBack({ delta: 1 });
} else {
// 默认返回首页
uni.switchTab({
url: '/pages/index/index'
});
}
},
getFile(type){
uni.navigateTo({
url:`/components/clause/clause?type=${type}`
url:`/myPackageA/ruleAndContract/clause?type=${type}`
})
},
getLoginType(){
......@@ -169,7 +152,7 @@
})
}
}else{
common.errorDialog(2,'手机号校验错误')
common.errorDialog(2,'请填写手机号')
}
},
delayTime() {
......@@ -186,8 +169,6 @@
}, 1000);
},
loginIn(loginType,urlType){
console.log('loginType',loginType);
console.log('this.loginType',this.loginType);
uni.showLoading({
title: '加载中...'
});
......@@ -202,6 +183,7 @@
uni.setStorageSync('cffp_userId',this.userId);
uni.setStorageSync('loginType',this.loginType);
uni.setStorageSync('uni-token', res.data['token']);
uni.setStorageSync('isPartner', res.data['isPartner']); //是否是合伙人
if(urlType == 'personalCenter'){
uni.switchTab({
url:'/pages/personalCenter/personalCenter'
......@@ -418,6 +400,25 @@
padding: 40rpx 60rpx;
overflow: hidden;
margin-bottom: 30rpx;
.protol{
// margin-top: 50rpx;
// margin-left: 10rpx;
display: flex;
align-items: center;
font-size: 26rpx;
.empty{
width: 30rpx;
height: 30rpx;
border: 1rpx solid #20269B;
border-radius: 50%;
margin-right: 5rpx;
}
.icon-icon_duihao-mian{
font-size: 30rpx;
color: #20269B;
margin-right: 5rpx;
}
}
// min-height: 65%;
.login_title{
text-align: center;
......@@ -425,6 +426,7 @@
margin-bottom: 60rpx;
}
form{
margin-bottom: 20rpx;
.inputItem{
position: relative;
margin-bottom: 30rpx;
......@@ -461,19 +463,20 @@
}
}
}
.agree{
font-size: 28rpx;
color:#666;
text-align: center;
.radio{
width: 30rpx;
height: 30rpx;
}
.file{
color: #20279B;
text-decoration: none;
}
}
// .agree{
// font-size: 28rpx;
// color:#666;
// text-align: center;
// .radio{
// width: 30rpx;
// height: 30rpx;
// }
// .file{
// color: #20279B;
// text-decoration: none;
// }
// }
.login_btn{
height: 100rpx;
// line-height: 100rpx;
......
......@@ -68,7 +68,7 @@
methods:{
getFile(type){
uni.navigateTo({
url:`/components/clause/clause?type=${type}`
url:`/myPackageA/ruleAndContract/clause?type=${type}`
})
},
confirm() {
......
const dev = {
// base_url:'https://mstage.zuihuibi.cn',
// api_url:'https://mstage.zuihuibi.cn/cffpApi',
// cffp_url:'https://mstage.zuihuibi.cn/cffpApi/cffp',
// share_url:'https://mstage.zuihuibi.cn/cffp',
// api_url:'http://10.0.10.26:8888/cffpApi',
// cffp_url:'http://10.0.10.26:8888/cffpApi/cffp',
base_url:'https://mdev.anjibao.cn',
api_url:'https://mdev.anjibao.cn/cffpApi',
cffp_url:'https://mdev.anjibao.cn/cffpApi/cffp',
share_url:'https://mdev.anjibao.cn/cffp',
sfp_url:'https://mdev.anjibao.cn/sfpApi',
}
const stage = {
base_url:'https://mstage.zuihuibi.cn',
api_url:'https://mstage.zuihuibi.cn/cffpApi',
cffp_url:'https://mstage.zuihuibi.cn/cffpApi/cffp',
share_url:'https://mstage.zuihuibi.cn/cffp',
sfp_url:'https://mstage.zuihuibi.cn/sfpApi'
}
const prod = {
......@@ -20,10 +20,12 @@ const prod = {
api_url:'https://app.ydhomeoffice.cn/appApi',
cffp_url:'https://app.ydhomeoffice.cn/appApi/cffp',
share_url:'https://app.ydhomeoffice.cn/appYdhomeoffice',
sfp_url:'https://hoservice.ydhomeoffice.cn/hoserviceApi'
}
// companyType: '1', cffp
// companyType: '2', appYdhomeoffice
let companyInfo = {
// imgType:'cffp' //因为测试环境用的cffp,生产环境要改成cffp
// companyType: '1',
// appName: 'CFFP财富中心',
// companyName: '赢盾财务顾问',
......@@ -34,24 +36,27 @@ let companyInfo = {
companyName: '银盾家办',
companyFullName: '银盾家办(广州)企业管理咨询有限公司',
companyLogo:'../../static/logo2.png',
systemType: 'NoIOS'
systemType: 'NoIOS',
imgType:'cffp' //因为测试环境用的cffp,生产环境要改成appYdhomeoffice
}
const config = {
dev,
stage,
prod
}
let env = 'prod';
let env = 'dev';
let baseURL = config[env].base_url;
let apiURL = config[env].api_url;
let cffpURL = config[env].cffp_url;
let shareURL = config[env].share_url;
let sfpUrl = config[env].sfp_url;
export{
baseURL,
apiURL,
cffpURL,
companyInfo,
shareURL
shareURL,
sfpUrl,
}
\ No newline at end of file
......@@ -15,6 +15,8 @@
<!-- <link rel="shortcut icon" href="./static/icon.png"> -->
<!--preload-links-->
<!--app-context-->
<!-- 哈希加密算法 -->
<!-- <script src="https://cdnjs.cloudflare.com/ajax/libs/js-sha256/0.9.0/sha256.min.js"></script> -->
<script src="https://res2.wx.qq.com/open/js/jweixin-1.6.0.js"></script>
<!-- 移动端调试 -->
<!-- <script type="text/javascript" src="//cdn.jsdelivr.net/npm/eruda"></script> -->
......
......@@ -138,7 +138,7 @@
"quickapp" : {},
/* 小程序特有相关 */
"mp-weixin" : {
"appid" : "wx53a601e27aaf7897",
"appid" : "wxb51e1a817e215563",
"setting" : {
"urlCheck" : false,
"es6" : true,
......@@ -184,7 +184,8 @@
"^/api" : ""
}
}
}
},
"disableReload": true // 添加这行禁用自动刷新
},
"uniStatistics" : {
"enable" : false
......
<template>
<view class="account-cancel-protocol">
<view class="header">
<text class="title">账号注销协议</text>
</view>
<view class="content">
<view class="section">
<text class="text">
请您在注销银盾家族办公室分销系统(以下简称家办分销)账号前,充分阅读、理解并同意下列内容:(如您不同意下列任一内容,或无法准确理解任何条款的含义,请不要进行账号注销操作。您通过网络页面确认申请注销,视为您同意本协议项下所有权利义务。如您对本协议有任何疑问,可通过银盾家族办公室分销系统-我的-咨询客服,联系在线客服)
</text>
</view>
<view class="section">
<text class="section-title">1、注销须知</text>
<text class="text">
如果您申请注销家办分销账号,请在提交申请前确认以下信息,以保证您的账号和资产安全:
</text>
<view class="subsection">
<text class="subsection-text">1.1您申请注销的家办分销账号应当是您本人注册并使用的账号。该账号应处于正常状态,即非被盗、被封禁(禁言、停用)、其他账号异常情形等;</text>
</view>
<view class="subsection">
<text class="subsection-text">1.2 账号内资产已处理完毕。包括但不限于:您的家办分销账户佣金、红包、优惠券、权益、积分、兑换码等资产,可用款项已全部提现,或者通过兑换、消费等途径支用完毕。您的账户内没有未使用完毕的会员权益或您已购买但未使用完的其他权益类、资格类产品和订单。同时,您也有权选择放弃该账号内的资产。</text>
</view>
<view class="subsection">
<text class="subsection-text">1.3 账号已解除与第三方产品的绑定关系或授权登录关系。</text>
</view>
<view class="subsection">
<text class="subsection-text">1.4 账号未涉及任何争议纠纷。</text>
</view>
<view class="subsection">
<text class="subsection-text">1.5 实名账号已解除实名信息。</text>
</view>
<view class="subsection">
<text class="subsection-text">1.6 账号注销成功后,包括但不限于《家办分销用户协议》、《隐私政策》等项下所有权利义务终止。</text>
</view>
</view>
<view class="section">
<text class="section-title">2、特别提醒</text>
<view class="subsection">
<text class="subsection-text">2.1您的家办分销账号一旦被注销成功将不可恢复,您将无法再使用本账号或找回任何本账号内容或信息(即使您使用相同的手机号再次注册并使用家办分销系统),包括但不限于:</text>
<view class="sub-subsection">
<text class="sub-subsection-text">2.1.1您账号下的个人资料(头像、昵称、用户名、身份认证信息等)、与账号有关的信息和数据(团队、交易记录、积分记录、分享数据、浏览记录等),都将无法找回。请您务必在注销之前自行备份与账号相关的前述所有内容或信息。您理解并同意,家办分销也无法协助您恢复前述内容或信息,且针对该账号注销的申请一经提交,您不会以任何理由要求家办分销平台予以撤销。</text>
</view>
<view class="sub-subsection">
<text class="sub-subsection-text">2.1.2 您理解并同意,您在注销前确认放弃的家办分销账户佣金、红包、优惠券、权益、积分、兑换码、资产性权益、资格类产品等,在您注销账号后将无法继续使用,历史交易无法通过该账号进行退款或售后,即使您使用相同的手机号再次注册并使用家办分销的,家办分销也无法协助您重新恢复前述权益。</text>
</view>
</view>
<view class="subsection">
<text class="subsection-text">2.3 您申请注销的家办分销账号所对应的其他账号应当不存在任何由于该账号被注销而导致的未了结的合同关系与其他基于该账号的存在而产生或维持的权利义务,及本公司认为注销该账号会由此产生未了结的权利义务而产生纠纷的情况。</text>
</view>
<view class="subsection">
<text class="subsection-text">2.4 在您的账号注销期间,如您的家办分销账号被他人举报、被投诉、被国家机关调查或正处于诉讼、仲裁程序中,家办分销有权自行终止您的家办分销账号注销流程而无需另行获得您的同意。</text>
</view>
<view class="subsection">
<text class="subsection-text">2.5 注销家办分销账号并不代表账号注销前的行为和相关责任得到任何形式的豁免或减轻。</text>
</view>
</view>
<view class="section">
<text class="section-title">3、争议解决</text>
<view class="subsection">
<text class="subsection-text">3.1凡因本协议引起的或与本协议有关的任何争议,均应提交上海仲裁委员会按照该会仲裁规则进行仲裁。仲裁裁决是终局的,对双方当事人均有约束力。</text>
</view>
</view>
</view>
</view>
</template>
<script>
export default {
data() {
return {
}
}
}
</script>
<style lang="scss">
.account-cancel-protocol {
padding: 20rpx 30rpx;
background-color: #fff;
.header {
margin-bottom: 30rpx;
text-align: center;
.title {
font-size: 36rpx;
font-weight: bold;
color: #333;
}
}
.content {
.section {
margin-bottom: 30rpx;
.section-title {
font-size: 32rpx;
font-weight: bold;
color: #333;
display: block;
margin-bottom: 15rpx;
}
.text {
font-size: 28rpx;
color: #333;
line-height: 1.6;
display: block;
margin-bottom: 20rpx;
}
.subsection {
margin-bottom: 15rpx;
.subsection-text {
font-size: 28rpx;
color: #333;
line-height: 1.6;
display: block;
}
}
.sub-subsection {
margin-left: 30rpx;
margin-top: 10rpx;
.sub-subsection-text {
font-size: 28rpx;
color: #333;
line-height: 1.6;
display: block;
}
}
}
}
}
</style>
\ No newline at end of file
<template>
<view class="">
<view class="content_wrapper">
<h4 style="font-size: 28rpx;">劳务报酬税缴纳规则</h4>
<view class="content">
根据国家相关法律法规,提现将由银盾家办公司代缴个税后(按劳务报酬税率计算),付款到用户的微信钱包/支付宝账户/银行卡内。 根据规则,将实行按月累计扣税,若在当月发起多次提现,本次扣税基数将累计当月全部的提现金额。以下内容供参考,详细内容可在国家税务局查询。
</view>
<h4 style="text-align: center;font-size: 28rpx;">劳务报酬所得预扣率表</h4>
<view style="color:#666;text-align: center;margin-bottom: 20rpx;font-size: 22rpx;">
(居民个人劳务报酬所得预扣预缴适用)
</view>
<view style="margin-bottom: 20rpx;">
<view class="list">
<view class="list_item title">级数</view>
<view class="list_item title">预扣预缴应纳税所得额</view>
<view class="list_item title">预扣率(%)</view>
<view class="list_item title">速算扣除数</view>
</view>
<view class="list">
<view class="list_item">1</view>
<view class="list_item">不超过20000元的</view>
<view class="list_item">20</view>
<view class="list_item">0</view>
</view>
<view class="list" style="background: #D0D3FF;">
<view class="list_item">2</view>
<view class="list_item">不超过20000元至50000元的</view>
<view class="list_item">30</view>
<view class="list_item">2000</view>
</view>
<view class="list">
<view class="list_item">3</view>
<view class="list_item">不超过50000元的</view>
<view class="list_item">40</view>
<view class="list_item">7000</view>
</view>
</view>
<view style="color: #666666;font-size: 24rpx;">
<view class="">
应纳税所得额=劳务报酬所得 - 减除费用,即:
</view>
<view class="">
当劳务报酬所得不超过4000元: 应纳税所得额=劳务报酬所得 - 800;
</view>
<view class="">
当劳务报酬所得超过4000元: 应纳税所得额=劳务报酬所得 ×(1-20%);
</view>
<view class="">
预扣预缴税额=应纳税所得额×预扣率-速算扣除数。
</view>
</view>
<navigator class="btn" delta="1" open-type="navigateBack">知道了</navigator>
</view>
</view>
</template>
<script>
export default{
data(){
return {
}
},
components:{},
onLoad(){
},
methods:{
}
}
</script>
<style lang="scss" scoped>
.content_wrapper{
padding: 30rpx;
h4{
margin: 20rpx auto;
}
.btn{
background-color: #2A36AD;
font-size: 28rpx;
margin-bottom: 20rpx;
}
.content{
color: #666666;
font-size: 24rpx;
background: #fff;
}
.list:nth-of-type(even) .list_item{
border-right:1px solid #2A36AD;
}
.list:nth-of-type(odd) .list_item{
border-right:1px solid #fff;
}
.list{
display: flex;
justify-content: space-between;
align-items: center;
font-size: 24rpx;
border: 2rpx #2A36AD solid;
border-bottom: 0;
.list_item{
width: 20%;
height: 70rpx;
line-height: 70rpx;
text-align: center;
}
.list_item:nth-child(1){
width: 10%;
}
.list_item:nth-child(2){
width: 50%;
}
.title{
background: #2A36AD;
color: #fff;
}
.list_item:nth-child(4){
border-right: 0;
}
}
.list:last-child{
border-bottom:2rpx #2A36AD solid;
}
}
</style>
\ No newline at end of file
{
"name": "验证码输入框",
"version": "2.0",
"lockfileVersion": 1,
"lockfileVersion": 3,
"requires": true,
"dependencies": {
"dayjs": {
"packages": {
"": {
"name": "验证码输入框",
"version": "2.0",
"dependencies": {
"crypto-js": "^4.2.0",
"dayjs": "^1.11.13",
"echarts": "^5.4.1",
"js-sha256": "^0.11.1",
"nanoid": "^4.0.0"
}
},
"node_modules/crypto-js": {
"version": "4.2.0",
"resolved": "https://registry.npmmirror.com/crypto-js/-/crypto-js-4.2.0.tgz",
"integrity": "sha512-KALDyEYgpY+Rlob/iriUtjV6d5Eq+Y191A5g4UqLAi8CyGP9N1+FdVbkc1SxKc2r4YAYqG8JzO2KGL+AizD70Q=="
},
"node_modules/dayjs": {
"version": "1.11.13",
"resolved": "https://registry.npmmirror.com/dayjs/-/dayjs-1.11.13.tgz",
"integrity": "sha512-oaMBel6gjolK862uaPQOVTA7q3TZhuSvuMQAAglQDOWYO9A91IrAOUJEyKVlqJlHE0vq5p5UXxzdPfMH/x6xNg=="
},
"echarts": {
"node_modules/echarts": {
"version": "5.6.0",
"requires": {
"integrity": "sha512-oTbVTsXfKuEhxftHqL5xprgLoc0k7uScAwtryCgWF6hPYFLRwOUHiFmHGCBKP5NPFNkDVopOieyUqYGH8Fa3kA==",
"dependencies": {
"tslib": "2.3.0",
"zrender": "5.6.1"
},
}
},
"node_modules/echarts/node_modules/tslib": {
"version": "2.3.0",
"resolved": "https://registry.npmmirror.com/tslib/-/tslib-2.3.0.tgz",
"integrity": "sha512-N82ooyxVNm6h1riLCoyS9e3fuJ3AMG2zIZs2Gd1ATcSFjSA23Q0fzjjZeh0jbJvWVDZ0cJT8yaNNaaXHzueNjg=="
},
"node_modules/echarts/node_modules/zrender": {
"version": "5.6.1",
"resolved": "https://registry.npmmirror.com/zrender/-/zrender-5.6.1.tgz",
"integrity": "sha512-OFXkDJKcrlx5su2XbzJvj/34Q3m6PvyCZkVPHGYpcCJ52ek4U/ymZyfuV1nKE23AyBJ51E/6Yr0mhZ7xGTO4ag==",
"dependencies": {
"tslib": {
"version": "2.3.0",
"resolved": "https://registry.npmmirror.com/tslib/-/tslib-2.3.0.tgz",
"integrity": "sha512-N82ooyxVNm6h1riLCoyS9e3fuJ3AMG2zIZs2Gd1ATcSFjSA23Q0fzjjZeh0jbJvWVDZ0cJT8yaNNaaXHzueNjg=="
},
"zrender": {
"version": "5.6.1",
"resolved": "https://registry.npmmirror.com/zrender/-/zrender-5.6.1.tgz",
"integrity": "sha512-OFXkDJKcrlx5su2XbzJvj/34Q3m6PvyCZkVPHGYpcCJ52ek4U/ymZyfuV1nKE23AyBJ51E/6Yr0mhZ7xGTO4ag==",
"requires": {
"tslib": "2.3.0"
}
}
"tslib": "2.3.0"
}
},
"nanoid": {
"version": "4.0.2"
"node_modules/js-sha256": {
"version": "0.11.1",
"resolved": "https://registry.npmmirror.com/js-sha256/-/js-sha256-0.11.1.tgz",
"integrity": "sha512-o6WSo/LUvY2uC4j7mO50a2ms7E/EAdbP0swigLV+nzHKTTaYnaLIWJ02VdXrsJX0vGedDESQnLsOekr94ryfjg=="
},
"node_modules/nanoid": {
"version": "4.0.2",
"integrity": "sha512-7ZtY5KTCNheRGfEFxnedV5zFiORN1+Y1N6zvPTnHQd8ENUvfaDBeuJDZb2bN/oXwXxu3qkTXDzy57W5vAmDTBw==",
"funding": [
{
"type": "github",
"url": "https://github.com/sponsors/ai"
}
],
"bin": {
"nanoid": "bin/nanoid.js"
},
"engines": {
"node": "^14 || ^16 || >=18"
}
}
}
}
......@@ -15,8 +15,10 @@
]
},
"dependencies": {
"crypto-js": "^4.2.0",
"dayjs": "^1.11.13",
"echarts": "^5.4.1",
"js-sha256": "^0.11.1",
"nanoid": "^4.0.0"
}
}
......@@ -441,13 +441,6 @@
}
},
{
"path": "components/clause/clause",
"style": {
"navigationBarTitleText": "",
"enablePullDownRefresh": false
}
},
{
"path": "components/clause/clauseIOS",
"style": {
"navigationBarTitleText": "",
......@@ -505,7 +498,54 @@
"style": {
"navigationBarTitleText": "微信登录"
}
}]
},{
"path": "applyFranchise/applyFranchise",
"style": {
"navigationBarTitleText": "申请加盟",
"h5": {
"reload": false // 禁用自动重新加载
}
}
},{
"path": "integralExchange/exchange",
"style": {
"navigationBarTitleText": "积分提现"
}
},{
"path": "ruleAndContract/taxRules",
"style": {
"navigationBarTitleText": "纳税规则"
}
},{
"path": "integralExchange/authenticaInfo",
"style": {
"navigationBarTitleText": "实名认证"
}
},{
"path": "setting/logOff",
"style": {
"navigationBarTitleText": "注销账号"
}
},{
"path": "ruleAndContract/cancelProtocol",
"style": {
"navigationBarTitleText": "注销账号协议"
}
}, {
"path": "login/login",
"style": {
"navigationBarTitleText": "银盾家办"
}
},{
"path": "ruleAndContract/clause",
"style": {
"navigationBarTitleText": "协议",
"h5": {
"reload": false // 禁用自动重新加载
}
}
}
]
},{
"root": "officialWebsite",
"pages": [{
......
......@@ -77,6 +77,7 @@
<script>
import courseItem from "@/components/courseItem/courseItem.vue";
import api from "@/api/api";
import dataHandling from "@/util/dataHandling";
export default {
components:{courseItem},
data() {
......@@ -101,6 +102,14 @@
})
},
goDetail(){
dataHandling.pocessTracking(
'到账说明',
`点击到账说明按钮,查看到账说明详情`,
'点击',
2,
'我的售后',
'pages/afterSaleDetail/afterSaleDetail'
)
uni.navigateTo({
url:'/pages/receiptCycleDesc/receiptCycleDesc'
})
......
......@@ -23,6 +23,7 @@
</template>
<script>
import dataHandling from "@/util/dataHandling";
import api from "@/api/api";
import courseItem from "@/components/courseItem/courseItem.vue";
export default {
......@@ -43,6 +44,14 @@
})
},
goDetail(item){
dataHandling.pocessTracking(
'查看退款订单',
`点击订单详情,查看退款订单详情`,
'点击',
2,
'我的售后',
'pages/afterSales/afterSales'
)
uni.navigateTo({
url:`/pages/afterSaleDetail/afterSaleDetail?orderNo=${item.orderNo}&afterSalesFlag=${this.afterSalesFlag}`
})
......
......@@ -41,9 +41,7 @@
</view>
<image :src="applyParam.personalSignOssPath" mode="widthFix" v-if="applyParam.personalSignOssPath"></image>
<!-- <view class="imgBox" style="margin-top: 20rpx;">
<image src="../../static/clear.png" @click="clearImg" mode="widthFix"></image>
</view> -->
<view class="fixed" url="bank-card" @click="save()">
{{(this.applyParam.approvalStatus== 0 || this.applyParam.approvalStatus == 2)?'我自愿签订合伙人合同书':'下一步'}}
</view>
......@@ -100,22 +98,6 @@
this.releaseScroll();
},
methods: {
// // 锁定滚动
// lockScroll() {
// // #ifdef H5
// if (this.touchMoveHandler) return; // 避免重复绑定
// this.touchMoveHandler = (e) => {
// e.preventDefault();
// };
// document.body.addEventListener(
// 'touchmove',
// this.touchMoveHandler,
// { passive: false }
// );
// // #endif
// },
// 锁定滚动 - 修改后的方法
lockScroll() {
if (this.isScrollLocked) return;
......@@ -147,18 +129,7 @@
this.isScrollLocked = true;
},
// // 释放滚动
// releaseScroll() {
// // #ifdef H5
// if (this.touchMoveHandler) {
// document.body.removeEventListener(
// 'touchmove',
// this.touchMoveHandler
// );
// this.touchMoveHandler = null;
// }
// // #endif
// },
// 释放滚动 - 修改后的方法
releaseScroll() {
if (!this.isScrollLocked) return;
......
......@@ -85,6 +85,7 @@
import api from "@/api/api";
import courseItem from "@/components/courseItem/courseItem.vue";
import commonSelect from '@/components/commonSelect/commonSelect.vue';
import dataHandling from "@/util/dataHandling";
export default {
components:{
courseItem,
......@@ -169,6 +170,14 @@
// return
api.unifiedRefund(param).then(res=>{
if(res['success']){
dataHandling.pocessTracking(
'退款',
`已提交退款申请`,
'点击',
2,
'申请退款',
'pages/applyDropClass/applyDropClass'
)
uni.navigateTo({
url:`/pages/afterSaleDetail/afterSaleDetail?orderNo=${this.dropInfo.orderNo}&afterSalesFlag=3`
})
......
......@@ -122,10 +122,11 @@
if(this.status != 1 && this.status != 3 &&this.status !== null){
if(uni.getStorageSync('loginType')=='visitor'){
uni.redirectTo({
url:'/components/login/login'
url:'/myPackageA/login/login'
})
try {
uni.clearStorageSync();
uni.setStorageSync('loginType','visitor');
} catch (e) {
// error
}
......
......@@ -94,12 +94,12 @@
})
}
}else{
common.errorDialog(2,'手机号校验错误')
common.errorDialog(2,'请填写手机号')
}
},
getFile(type){
uni.navigateTo({
url:`/components/clause/clause?type=${type}`
url:`/myPackageA/ruleAndContract/clause?type=${type}`
})
},
delayTime() {
......
......@@ -15,13 +15,13 @@
<view v-if="tabType===1">
<view class="ulBox">
<view class="liBox">
<text>姓名</text>
<text>昵称</text>
<text>
<input
v-model="dataForm.name"
class="uni-input"
maxlength="10"
placeholder="姓名"
placeholder="昵称"
/>
</text>
</view>
......@@ -151,6 +151,7 @@
</template>
<script>
import dataHandling from "@/util/dataHandling";
import api from "@/api/api"
import common from '../../common/common';
import {hshare } from '@/util/fiveshare';
......@@ -200,7 +201,7 @@
this.ydLogoShare = `${shareURL}/static/logo2.png`;
}
let dataForm = uni.getStorageSync('userinfodataForm')
this.realName = dataForm.realName;
this.realName = dataForm.realName || dataForm.nickName;
this.invitationCode = dataForm.invitationCode
if(!this.realName){
this.queryInfo();
......@@ -216,7 +217,7 @@
api.queryInfo({userId:uni.getStorageSync('cffp_userId')}).then(res=>{
if(res['success']){
uni.setStorageSync('userinfodataForm', res.data);
this.realName = res.data.realName;
this.realName = res.data.realName ||res.data.nickName ;
this.invitationCode = res.data.invitationCode;
}
})
......@@ -268,6 +269,7 @@
this.dataForm.partnerLevel = 'P1'
this.dataForm.hasCrossDistrict = this.isCross == true ? '1' : '0'
this.dataForm.userId = this.userId
this.dataForm.inviteUserId = this.userId
// this.dataForm.areaId = this.isCross == true ? null : this.queryList[this.index].areaId
// this.dataForm.areaName = this.isCross == false ? this.queryList[this.index].areaName : this.dataForm.areaName
this.dataForm.areaId = 1;
......@@ -280,11 +282,11 @@
});
return false
}
if(!common.nameValid(this.dataForm.name)){
uni.showToast({title: '请填写真实姓名',duration: 2000,icon: 'none'})
this.dataForm.name = ''
return
}
// if(!common.nameValid(this.dataForm.name)){
// uni.showToast({title: '请填写真实姓名',duration: 2000,icon: 'none'})
// this.dataForm.name = ''
// return
// }
if (common.mobileNoValid(this.dataForm.mobileNumber)) {
api.saveApplyInfo(this.dataForm).then(res => {
if (res['success']) {
......@@ -318,8 +320,8 @@
//desc: `我是家庭财务策划师${this.realName}正在使用银盾家办,点击即刻加入!`,
desc: `${this.realName}邀您加入【家庭财策师联盟】,资源+伙伴,共赢未来!`,
link: shareURL +
"/pages/invitationRegister/invitationRegister?shareId=" +
this.shareId + '&invitationCode=' + this.invitationCode, //分享链接
"/myPackageA/applyFranchise/applyFranchise?shareId=" +
this.shareId + '&invitationCode=' + this.invitationCode+ '&inviteUserId=' + this.userId, //分享链接
imgUrl: this.ydLogoShare, //图片
//imgUrl: `${baseURL}/static/cffp_logo.jpg`, //图片
}
......@@ -336,6 +338,14 @@
}
}
hshare(data, url)
dataHandling.pocessTracking(
'邀请',
`发出邀请`,
'点击',
2,
'邀请加盟',
'pages/inviteJoin/inviteJoin'
)
},
closeShare() {
this.$refs.share.close()
......@@ -355,11 +365,21 @@
if(!this.realName){
this.realName = ""
}
let typeName = type == 1?'微信好友':'朋友圈'
dataHandling.pocessTracking(
'邀请',
`向${typeName}发出邀请`,
'点击',
2,
'邀请加盟',
'pages/inviteJoin/inviteJoin'
)
uni.share({
provider: "weixin",
scene: type === 1 ? "WXSceneSession" : "WXSceneTimeline",
type: 0,
href: `${shareURL}/pages/invitationRegister/invitationRegister?shareId=${this.shareId}&invitationCode=${this.invitationCode}`,
href: `${shareURL}/myPackageA/applyFranchise/applyFranchise?shareId=${this.shareId}&invitationCode=${this.invitationCode}&inviteUserId=${this.userId}`,
// href: `${shareURL}/pages/invitationRegister/invitationRegister?shareId=${this.shareId}&invitationCode=${this.invitationCode}&inviteUserId=${this.userId}`,
title: "银盾家办家庭财务策划师联盟邀您加入",
//summary: `我是家庭财务策划师${this.realName}正在使用银盾家办,点击下载即刻加入!`,
summary: `${this.realName}邀您加入【家庭财策师联盟】,资源+伙伴,共赢未来!`,
......
......@@ -80,24 +80,12 @@
</view>
</view>
<uni-popup ref="joinPopup" type="center" background-color="#fff">
<view class="joinContent">
<view class="joinHeader">
<view class="iconfont icon-hezuo" style="font-size: 35rpx;color: #fff;"></view>
</view>
<view class="joinCon">
<view class="one">
您还未加盟为合伙人
</view>
<view class="two">
成为合伙人后,分享商品,好友购物得收益
</view>
</view>
<view class="joinFotter" @click="gotoApply">
去加盟拿收益
</view>
</view>
</uni-popup>
<!-- 使用封装后的弹窗组件 -->
<join-popup
ref="joinPopup"
@confirm="gotoApply"
></join-popup>
</view>
</template>
......@@ -106,13 +94,15 @@
import courseItem from "@/components/courseItem/courseItem.vue";
import dataHandling from "@/util/dataHandling";
import CommonTimePicker from '@/components/commonTimePicker/commonTimePicker.vue';
import JoinPopup from '@/components/commonPopup/JoinPopup.vue';
import {
fmdata
} from '@/util/currentDate.js'
export default {
components: {
courseItem,
CommonTimePicker
CommonTimePicker,
JoinPopup
},
data() {
return {
......@@ -136,8 +126,16 @@
methods: {
// 去加盟
gotoApply(){
dataHandling.pocessTracking(
'加盟',
`点击加盟按钮去加盟`,
'点击',
2,
'分享数据',
'pages/myShare/myShare'
)
uni.navigateTo({
url: '/pages/application-process/basic-info'
url: '/myPackageA/applyFranchise/applyFranchise'
})
this.$refs.joinPopup.close()
......@@ -195,6 +193,15 @@
},
// 查看详情
goDetail(val, type) {
let typeName = type==1?'分享':type==2?"阅读":type==3?"购买":''
dataHandling.pocessTracking(
`${typeName}`,
`点击${typeName}按钮,查看${typeName}数据`,
'点击',
2,
'分享数据',
'pages/myShare/myShare'
)
uni.navigateTo({
url: `/pages/commonDetail/commonDetail?fileId=${val}&type=${type}&queryDate=${this.queryDate}`
})
......@@ -205,6 +212,14 @@
this.$refs.joinPopup.open()
return
}
dataHandling.pocessTracking(
'积分',
`点击积分查看佣金`,
'点击',
2,
'分享数据',
'pages/myShare/myShare'
)
uni.navigateTo({
url:`/pages/pointsExchange/pointsExchange`
})
......
......@@ -210,6 +210,14 @@
})
},
dropClasses() {
dataHandling.pocessTracking(
'退款',
`用户申请退款`,
'点击',
2,
'订单详情',
'pages/orderDetail/orderDetail'
)
uni.navigateTo({
url: `/pages/applyDropClass/applyDropClass?id=${this.orderId}&fileId=${this.fileId}`
})
......
......@@ -74,7 +74,7 @@
},
getFile(type){
uni.navigateTo({
url:`/components/clause/clause?type=${type}`
url:`/myPackageA/ruleAndContract/clause?type=${type}`
})
},
latestversion(){
......
......@@ -59,7 +59,7 @@
})
uni.removeStorageSync('isLogin')
uni.redirectTo({
url:'/components/login/login'
url:'/myPackageA/login/login'
})
//重置密码后需要密码登录
this.form = {
......
......@@ -300,6 +300,12 @@
this.totalOrder = res.data.totalOrder ? res.data.totalOrder : '0';
this.totalCoursePrice = res.data.totalCoursePrice ? Number(res.data.totalCoursePrice).toFixed(2) : '0.00';
this.monthStandardSales = res.data.monthStandardSales ? Number(res.data.monthStandardSales).toFixed(2) : '0.00';
}else {
uni.showToast({
title: res['message'],
duration: 2000,
icon: 'none'
})
}
})
},
......@@ -322,6 +328,12 @@
if(data.directList && data.directList.length != 0 && data.directList != null){
this.myTeamList.push( ...data['directList'])
}
}else {
uni.showToast({
title: res['message'],
duration: 2000,
icon: 'none'
})
}
})
},
......
......@@ -258,6 +258,12 @@
this.totalCoursePrice = res.data.totalCoursePrice ? Number(res.data.totalCoursePrice).toFixed(2) : '0.00';
this.monthStandardSales = res.data.monthStandardSales ? Number(res.data.monthStandardSales).toFixed(2) : '0.00';
}else {
uni.showToast({
title: res['message'],
duration: 2000,
icon: 'none'
})
}
})
},
......@@ -277,7 +283,12 @@
item.raiseTime = dataHandling.dateFormat2(item.raiseTime,'yyyy-MM-dd')
})
}
console.log('this.myTeamList',this.myTeamList);
}else {
uni.showToast({
title: res['message'],
duration: 2000,
icon: 'none'
})
}
})
},
......
......@@ -44,7 +44,7 @@
{
title: '注销账号',
icon: '',
link: '/pages/personalCenter/system/cancellation',
link: '/myPackageA/setting/logOff',
isOpen: true,
isShow: true,
isTips: false,
......
......@@ -68,8 +68,9 @@
});
// 清空全部本地存储
uni.clearStorageSync();
uni.setStorageSync('loginType','visitor');
uni.redirectTo({
url:'/components/login/login?from=index'
url:'/myPackageA/login/login?from=index'
})
}
})
......
......@@ -20,6 +20,7 @@
<script>
import MenuList from "@/components/menuList/menuList.vue"
import {companyInfo} from "@/environments/environment";
import dataHandling from "@/util/dataHandling";
export default {
components:{ MenuList },
data() {
......@@ -68,11 +69,20 @@
showCancel: true,
success: function(res) {
if (res.confirm) {
dataHandling.pocessTracking(
'退出登录',
`用户退出系统`,
'点击',
2,
'设置',
'pages/personalCenter/system/settings'
)
uni.redirectTo({
url:'/components/login/login'
url:'/myPackageA/login/login'
})
try {
uni.clearStorageSync();
uni.setStorageSync('loginType','visitor');
} catch (e) {
console.log(e)
// error
......
......@@ -14,7 +14,7 @@
</view> -->
<view class="band">
<view class="contentItem">
<text class="left">真实名称</text>
<text class="left">姓名</text>
<input
class="user-input"
v-model="optionForm.realName"
......@@ -27,7 +27,7 @@
<view class="contentItem">
<text class="left">昵称</text>
<input class="user-input" v-model="optionForm.nickName" maxlength="10" type="text"
placeholder="请输入3~10个字符" />
placeholder="请输入2~10个字符" />
</view>
<!-- <view class="contentItem">
<text>个人简介</text>
......@@ -49,6 +49,7 @@
import api from "@/api/api";
import common from '../../common/common';
import {companyInfo} from "@/environments/environment";
import dataHandling from "@/util/dataHandling";
export default {
data() {
return {
......@@ -174,6 +175,10 @@
let that = this;
uni.showToast({title: '请填写真实姓名',duration: 2000,icon: 'none'});
this.optionForm.realName = ''
return
}else if (this.optionForm.nickName&&this.optionForm.nickName.length<2) {
uni.showToast({title: '昵称为2~10个字符',duration: 2000,icon: 'none'});
return
}else{
this.saveUserInfo();
}
......@@ -189,6 +194,14 @@
api.updateinfo(UserRequestVO).then(res => {
if (res.success) {
uni.showToast({title: '修改成功',duration: 2000,icon: 'none'});
dataHandling.pocessTracking(
'个人资料',
`成功修改个人资料`,
'点击',
2,
'个人资料',
'pages/personalCenter/user-information'
)
uni.$emit("handClick", {data: this.optionForm});
setTimeout(() => {
uni.navigateBack({delta: 1});
......
......@@ -142,7 +142,7 @@
returnFortune:'',
totalFortune:'',
scoreList:[
{name:'总积分',value:'0.00',id:'1',position:'bottom',content:'包含已兑换+待结算+兑换中的积分'},
{name:'总积分',value:'0.00',id:'1',position:'bottom',content:'包含已兑换+待结算+可兑换+兑换中的积分'},
{name:'已兑换',value:'0.00',id:'2',position:'bottom',content:'已经提取入账的积分'},
{name:'待结算',value:'0.00',id:'3',position:'left',content:'订单成交后需等待7天结算期'},
{name:'兑换中',value:'0.00',id:'4',position:'left',content:'正在审核中的积分'},
......@@ -176,13 +176,25 @@
},
components:{CustomDatePop},
onLoad(){
},
onShow(){
this.queryByUserIdFortuneStatistic();
this.getCommissionType()
this.getDetail()
console.log(11111);
},
methods:{
// 查看订单详情
viewDetail(item){
dataHandling.pocessTracking(
'查看订单详情',
`点击查看订单详情`,
'点击',
2,
'佣金',
'pages/pointsExchange/pointsExchange'
)
uni.navigateTo({
url:`/pages/orderDetail/orderDetail?id=${item.orderId}&commissionType=${item.commissionType}&type=drop`
})
......@@ -282,17 +294,7 @@
if(res['success']){
// //可兑换
this.yesExchangeFortune = res['data']['yesExchangeFortune'] || '0.00';
console.log('this.yesExchangeFortune',this.yesExchangeFortune);
// //待结算
// this.notExchangeFortune = res['data']['notExchangeFortune'];
// //兑换中
// this.inExchangeFortune = res['data']['inExchangeFortune'];
// //已兑换
// this.alreadyExchangeFortune = res['data']['alreadyExchangeFortune'];
// //已退款
// this.returnFortune = res['data']['returnFortune'];
// //总积分
// this.totalFortune = res['data']['totalFortune'];
//总积分
this.scoreList[0].value = res['data']['totalFortune'] || '0.00';
//兑换中
......@@ -318,8 +320,19 @@
}
});
}else{
// uni.navigateTo({
// url:`/pages/withdrawal/withdrawal?exchangeAmount=${this.yesExchangeFortune}`
// })
dataHandling.pocessTracking(
'提现',
`点击提现按钮`,
'点击',
2,
'佣金',
'pages/pointsExchange/pointsExchange'
)
uni.navigateTo({
url:`/pages/withdrawal/withdrawal?exchangeAmount=${this.yesExchangeFortune}`
url:`/myPackageA/integralExchange/exchange`
})
}
},
......
......@@ -23,32 +23,12 @@
</view>
</view>
<!-- <view class="header">
<view class="" style="width: 60rpx;height: 60rpx;">
<image style="width: 60rpx;height: 60rpx;" src="../../static/tabbar/sfp_active.png" mode=""></image>
</view>
<text>SFP</text>
</view> -->
<!-- <view class="content-box">
<view class="content" v-for="(item,index) in remList" :key="index" style="width: 50%;justify-content: center;">
<view class="">
<view class="content-box-item" @click="gotobach(item)">
<view class="" style="width: 60rpx;height: 60rpx;text-align: center;padding-bottom: 10rpx;">
<image style="width: 60rpx;height: 60rpx;" :src="item.icon" mode=""></image>
</view>
<text>{{item.text}}</text>
</view>
</view>
</view>
</view> -->
<!-- <tabBar :currentPage="currentPage" ></tabBar> -->
</view>
</template>
<script>
import dataHandling from "@/util/dataHandling";
import tabBar from '../../components/tabBar/tabBar.vue';
import courseItem from "@/components/courseItem/courseItem.vue";
export default {
......@@ -92,19 +72,6 @@
}
},
methods:{
gotobach(item){
if(item.link == ''){
uni.showToast({
title: '此功能暂未开放!',
duration: 2000,
icon: 'none'
});
return false
}
uni.navigateTo({
url:item.link
})
},
goDetail(item) {
if (item.isShow == true && item.isOpen == true) {
if (item.isTips == true) {
......@@ -124,6 +91,14 @@
}
});
} else if (item.link != null) {
dataHandling.pocessTracking(
'点击',
`用户在金融工具模块点击${item.title}`,
'点击',
2,
'金融工具模块',
'pages/product/product'
)
uni.navigateTo({
url: item.link
});
......
<template>
<view class="container">
<view class="top">
<text class="iconfont icon-youjiantou zuojiantou" @click="goBack()"></text>
<text style="font-size: 30rpx;">到账说明</text>
</view>
<!-- #ifdef APP -->
<view class="top">
<text class="iconfont icon-youjiantou zuojiantou" @click="goBack()"></text>
<text style="font-size: 30rpx;">到账说明</text>
</view>
<!-- #endif -->
<view class="returnDetailContainer">
<h4>根据交易方式不同,退款处理时间不同,请在对应的时间内注意查看到账情况:</h4>
<view class="returnInfoContent">
......@@ -77,6 +80,7 @@
}
}
.returnDetailContainer{
background-color: #fff;
padding: 20rpx 40rpx;
margin: 10rpx auto;
......
......@@ -90,24 +90,12 @@
</view>
</template>
</view>
<uni-popup ref="joinPopup" type="center" background-color="#fff">
<view class="joinContent">
<view class="joinHeader">
<view class="iconfont icon-hezuo" style="font-size: 35rpx;color: #fff;"></view>
</view>
<view class="joinCon">
<view class="one">
您还未加盟为合伙人
</view>
<view class="two">
成为合伙人后,分享商品,好友购物得收益
</view>
</view>
<view class="joinFotter" @click="gotoApply">
去加盟拿收益
</view>
</view>
</uni-popup>
<!-- 使用封装后的弹窗组件 -->
<join-popup
ref="joinPopup"
@confirm="gotoApply"
></join-popup>
</view>
</template>
......@@ -117,10 +105,12 @@
import {fmdata} from '@/util/currentDate.js'
import CommonTimePicker from '@/components/commonTimePicker/commonTimePicker.vue';
import dataHandling from "@/util/dataHandling";
import JoinPopup from '@/components/commonPopup/JoinPopup.vue';
export default {
components:{
courseItem,
CommonTimePicker
CommonTimePicker,
JoinPopup
},
data() {
return {
......@@ -141,8 +131,16 @@
methods: {
// 去加盟
gotoApply(){
dataHandling.pocessTracking(
'加盟',
`点击加盟按钮去加盟`,
'点击',
2,
'成交单数',
'pages/saleCourseLists/saleCourseLists'
)
uni.navigateTo({
url: '/pages/application-process/basic-info'
url: '/myPackageA/applyFranchise/applyFranchise'
})
this.$refs.joinPopup.close()
......@@ -160,6 +158,14 @@
});
},
curriculumDetail(item){
dataHandling.pocessTracking(
'查看产品详情',
`点击产品,查看${item.fileTitle}详情`,
'点击',
2,
'成交单数',
'pages/saleCourseLists/saleCourseLists'
)
uni.navigateTo({
url:`/pages/courseDetail/courseDetail?fileId=${item.fileId}`
})
......@@ -167,6 +173,14 @@
// 查看订单详情
viewDetail(item){
let type = this.tabType == 1 ? 'drop': ''
dataHandling.pocessTracking(
'查看订单详情',
`点击订单详情,查看订单`,
'点击',
2,
'成交单数',
'pages/saleCourseLists/saleCourseLists'
)
uni.navigateTo({
url:`/pages/orderDetail/orderDetail?id=${item.orderId}&type=${type}&Withdrawal=1`
})
......@@ -216,6 +230,14 @@
this.$refs.joinPopup.open()
return
}
dataHandling.pocessTracking(
'积分/单数',
`点击积分/单数查看佣金`,
'点击',
2,
'成交单数',
'pages/saleCourseLists/saleCourseLists'
)
uni.navigateTo({
url:`/pages/pointsExchange/pointsExchange`
})
......
......@@ -38,7 +38,7 @@
</view>
</view>
<!-- <view class="paymentItem" @click="selectPaymentMethod(1)">
<view class="paymentItem" @click="selectPaymentMethod(1)">
<view>
<i class="iconfont icon-py_weixinzhifu"></i>
<text>微信钱包</text>
......@@ -46,7 +46,7 @@
<view class="selectRadio" :class="{'actived':paymentMethod===1}">
<i class="iconfont icon-duihao"></i>
</view>
</view> -->
</view>
<view class="tips_wrapper">
<view class="">
提示:
......@@ -307,13 +307,6 @@
}else{
uni.showModal({
content: res['message'],
success: function (res) {
if (res.confirm) {
console.log('用户点击确定');
} else if (res.cancel) {
console.log('用户点击取消');
}
}
});
}
});
......
@font-face {
font-family: "iconfont"; /* Project id 4933433 */
src: url('iconfont.woff2?t=1750822970160') format('woff2'),
url('iconfont.woff?t=1750822970160') format('woff'),
url('iconfont.ttf?t=1750822970160') format('truetype');
src: url('iconfont.woff2?t=1751592106397') format('woff2'),
url('iconfont.woff?t=1751592106397') format('woff'),
url('iconfont.ttf?t=1751592106397') format('truetype');
}
.iconfont {
......@@ -13,6 +13,78 @@
-moz-osx-font-smoothing: grayscale;
}
.icon-icon_duihao-mian:before {
content: "\e300";
}
.icon-redgantanhao:before {
content: "\e229";
}
.icon-circleDuiHao:before {
content: "\e228";
}
.icon-weixin:before {
content: "\e226";
}
.icon-zhifubao2:before {
content: "\e227";
}
.icon-weiwancheng:before {
content: "\e663";
}
.icon-xiaoshoue:before {
content: "\e9dc";
}
.icon-jia:before {
content: "\e128";
}
.icon-zhuanfa:before {
content: "\e127";
}
.icon-lajitong:before {
content: "\e126";
}
.icon-chahao:before {
content: "\e125";
}
.icon-ddailirenshu:before {
content: "\e118";
}
.icon-point:before {
content: "\e119";
}
.icon-dianzan:before {
content: "\e120";
}
.icon-duihao2:before {
content: "\e121";
}
.icon-a-tuandui3:before {
content: "\e123";
}
.icon-exclamation:before {
content: "\e124";
}
.icon-gongjuxiang1:before {
content: "\e639";
}
.icon-yuchengguanxi:before {
content: "\e117";
}
......@@ -21,10 +93,6 @@
content: "\e645";
}
.icon-kefu:before {
content: "\e116";
}
.icon-shuangyoujiantou:before {
content: "\ecc0";
}
......@@ -106,7 +174,7 @@
}
.icon-jiantou2:before {
content: "\e602";
content: "\e225";
}
.icon-hezuo:before {
......
This source diff could not be displayed because it is too large. You can view the blob instead.
......@@ -6,6 +6,132 @@
"description": "",
"glyphs": [
{
"icon_id": "4735289",
"name": "icon_对号-面",
"font_class": "icon_duihao-mian",
"unicode": "e300",
"unicode_decimal": 58112
},
{
"icon_id": "9974757",
"name": "感叹号",
"font_class": "redgantanhao",
"unicode": "e229",
"unicode_decimal": 57897
},
{
"icon_id": "15346589",
"name": "对号",
"font_class": "circleDuiHao",
"unicode": "e228",
"unicode_decimal": 57896
},
{
"icon_id": "925499",
"name": "微信",
"font_class": "weixin",
"unicode": "e226",
"unicode_decimal": 57894
},
{
"icon_id": "8875680",
"name": "支付宝",
"font_class": "zhifubao2",
"unicode": "e227",
"unicode_decimal": 57895
},
{
"icon_id": "5306518",
"name": "未完成",
"font_class": "weiwancheng",
"unicode": "e663",
"unicode_decimal": 58979
},
{
"icon_id": "21528511",
"name": "销售额",
"font_class": "xiaoshoue",
"unicode": "e9dc",
"unicode_decimal": 59868
},
{
"icon_id": "1302",
"name": "加",
"font_class": "jia",
"unicode": "e128",
"unicode_decimal": 57640
},
{
"icon_id": "13569992",
"name": "转发",
"font_class": "zhuanfa",
"unicode": "e127",
"unicode_decimal": 57639
},
{
"icon_id": "19117427",
"name": "垃圾桶",
"font_class": "lajitong",
"unicode": "e126",
"unicode_decimal": 57638
},
{
"icon_id": "6536737",
"name": "叉号",
"font_class": "chahao",
"unicode": "e125",
"unicode_decimal": 57637
},
{
"icon_id": "1320017",
"name": "d代理人数",
"font_class": "ddailirenshu",
"unicode": "e118",
"unicode_decimal": 57624
},
{
"icon_id": "3526773",
"name": "感叹号",
"font_class": "point",
"unicode": "e119",
"unicode_decimal": 57625
},
{
"icon_id": "6737518",
"name": "点赞 (2)",
"font_class": "dianzan",
"unicode": "e120",
"unicode_decimal": 57632
},
{
"icon_id": "16270796",
"name": "对号",
"font_class": "duihao2",
"unicode": "e121",
"unicode_decimal": 57633
},
{
"icon_id": "35566568",
"name": "团队 (3)",
"font_class": "a-tuandui3",
"unicode": "e123",
"unicode_decimal": 57635
},
{
"icon_id": "25017368",
"name": "感叹号",
"font_class": "exclamation",
"unicode": "e124",
"unicode_decimal": 57636
},
{
"icon_id": "6193800",
"name": "工具箱",
"font_class": "gongjuxiang1",
"unicode": "e639",
"unicode_decimal": 58937
},
{
"icon_id": "6835940",
"name": "育成关系",
"font_class": "yuchengguanxi",
......@@ -20,13 +146,6 @@
"unicode_decimal": 58949
},
{
"icon_id": "518189",
"name": "客服",
"font_class": "kefu",
"unicode": "e116",
"unicode_decimal": 57622
},
{
"icon_id": "6999657",
"name": "双右箭头",
"font_class": "shuangyoujiantou",
......@@ -170,8 +289,8 @@
"icon_id": "15852687",
"name": "箭头 左 小",
"font_class": "jiantou2",
"unicode": "e602",
"unicode_decimal": 58882
"unicode": "e225",
"unicode_decimal": 57893
},
{
"icon_id": "649319",
......
// utils/crypto.js
import CryptoJS from 'crypto-js'
/**
* 生成SHA-256签名
* @param {string} userId 用户ID
* @param {string|number} timestamp 时间戳
* @param {string} signatureSecret 签名密钥
* @returns {string} SHA-256加密后的16进制字符串
*/
export function generateSignature(userId, timestamp, signatureSecret) {
// 拼接需要加密的字符串
const content = `${userId}${timestamp}${signatureSecret}`
// 使用SHA-256加密
const hash = CryptoJS.SHA256(content)
// 转换为16进制字符串
return hash.toString(CryptoJS.enc.Hex)
}
\ No newline at end of file
import dayjs from 'dayjs';
import api from '@/api/api'
export default{
// 获取url的参数
getQueryString(name){
......@@ -206,6 +207,8 @@ export default{
return 'unknown';
}
},
/**
* 判断当前运行环境
* @returns {Object} 包含环境信息的对象
......@@ -272,5 +275,93 @@ export default{
// 原始系统信息
systemInfo,
}
}
},
/**
* @function 记录用户操作轨迹
* @param familyMemberId 客户ID
* @param eventName 事件名称
* @param eventDesc 事件说明
* @param triggerCondi 触发条件
* @param modelType 模块
* @param modelPage 模块页面
* @param pageUrl 当前页面
*/
pocessTracking(
// familyMemberId = '',
eventName = '',
eventDesc = '',
triggerCondi = '',
isScreenshots = '',
modelType = '',
modelPage = '',
pageUrl = ''
) {
// console.log('eventName',eventName);
// console.log('eventDesc',eventDesc);
// console.log('triggerCondi',triggerCondi);
// console.log('isScreenshots',isScreenshots);
// console.log('modelType',modelType);
// console.log('modelPage',modelPage);
// console.log('pageUrl',pageUrl);
// 0:登录, 1.购买页面, 2.KYC客户采集页面
//获取系统信息
let uniPlatform = uni.getSystemInfoSync()
//获取当前路由信息
let pages = getCurrentPages()
uni.getNetworkType({
success(e) {
let obj = {
//主表id
sfpMainId: '',
//用户id
userId: uni.getStorageSync('cffp_userId'),
//家庭成员id
// familyMemberId: familyMemberId,
//
modelType: modelType ? modelType : pages[pages.length - 1]?.$page?.options?.modelType,
//模块页面
// modelPage: modelPage?modelPage:pages[pages.length - 1]?.$page?.options?.modelPage,
modelPage: '',
//当前页面
pageUrl: pageUrl ? pageUrl : pages[pages.length - 1]?.route,
//事件名称
eventName: eventName,
//事件说明
eventDesc: eventDesc,
//触发条件
triggerCondi: triggerCondi,
//身份证
// idNo: '',
//微信号
// wxNo: '',
//地理位置
// geographicLocation: '',
//设备类型
deviceType: uniPlatform.deviceType,
//设备品牌
deviceBrand: uniPlatform.deviceBrand,
//设备型号
deviceModel: uniPlatform.deviceModel,
//设备方向
deviceDirection: uniPlatform.deviceOrientation,
//运行平台
platform: uniPlatform.uniPlatform,
//操作系统版本
systemVersion: uniPlatform.osVersion,
//操作系统语言
systemLanguage: uniPlatform.osLanguage,
//网络状态
netWorkStatus: e.networkType,
//用户来源
// userFrom: '',
//是否截屏 1是 2否
isScreenshots: isScreenshots,
//实例
// example: '',
systemType: 'cffp'
}
api.pocessTracking(obj).then(res => {})
}
})
},
}
\ No newline at end of file
......@@ -36,13 +36,15 @@ export function initJssdkShare(callback, url) {
// data是穿的参数 url是当前页面的链接
export function hshare(data,url){
console.log('data,url',data,url);
// 确保分享的链接不包含时间戳
const cleanLink = data.link.split('&t_reload=')[0];
// initJssdkShare(data, url)
initJssdkShare(function(){
jWeixin.ready(function(){
var sharedata={
title: data.title, //标题
desc: data.desc, //描述
link: data.link ,//分享链接
link: cleanLink ,//分享链接
imgUrl:data.imgUrl, //图片
success:(res=>{
})
......
import api from "@/api/api";
import dataHandling from './dataHandling'
//只要是未登录状态,想要跳转到名单内的路径时,直接跳到登录页
// 页面白名单,不受拦截
const whiteList = [
'/components/login/login',
'/myPackageA/login/login',
'/pages/invitationRegister/invitationlogin',
'/components/clause/clause',
'/myPackageA/applyFranchise/applyFranchise',
'/myPackageA/ruleAndContract/clause',
'/pages/orderDetail/orderDetail',
'/pages/courseDetail/courseDetail',
'/pages/courselist/courselist',
......@@ -12,14 +14,25 @@ const whiteList = [
'/pages/index/index'
]
export default function initApp(){
let date = Date.now()
uni.addInterceptor('navigateTo', {
// 页面跳转前进行拦截, invoke根据返回值进行判断是否继续执行跳转
invoke (e) {
// 移除URL中的t_reload参数
let url = e.url;
if(url.includes('t_reload=')) {
url = url.split('?')[0] + (url.includes('?') ? '?' : '') +
url.split('?')[1].split('&').filter(param => !param.startsWith('t_reload=')).join('&');
}
let pages = getCurrentPages()
let pagesLength = pages.length
if(!uni.getStorageSync('loginType')){
uni.clearStorageSync();
uni.setStorageSync('loginType','visitor')
uni.redirectTo({
url: '/components/login/login'
uni.navigateTo({
url: '/myPackageA/login/login'
})
}
if(uni.getStorageSync('cffp_userId')){
......@@ -28,12 +41,21 @@ export default function initApp(){
// 清空全部本地存储
uni.clearStorageSync();
uni.setStorageSync('loginType','visitor')
uni.redirectTo({
url: '/components/login/login'
uni.navigateTo({
url: '/myPackageA/login/login'
})
return
}
// 保存用户得个人信息
if (res['success']) {
const cffp_userInfo = {
name: res['data']['realName'],
mobile: res['data']['mobile'],
partnerType:res['data']['partnerType'],
nickName:res['data']['nickName'],
}
uni.setStorageSync('cffp_userInfo', JSON.stringify(cffp_userInfo))
}
})
}
......@@ -46,43 +68,78 @@ export default function initApp(){
return params.get(key);
};
const fromParam = getQueryParam(e.url, 'from');
if(!hasPermission(e.url)){
const fromParam = getQueryParam(url, 'from');
if(!hasPermission(url)){
// 如果 from 参数在 whiteArr 中,说明是tabbar页带着tabbar的标志参数跳转到登录页,以便未登录状态下回到对应的tabbar页
if (fromParam && whiteArr.includes(fromParam)) {
uni.redirectTo({
url: `/components/login/login?from=${fromParam}`
url: `/myPackageA/login/login?from=${fromParam}`
})
}else {
uni.redirectTo({
url: '/components/login/login'
url: '/myPackageA/login/login'
})
}
return false
}
//当页面栈的个数大于10个时,不入页面栈
if (pagesLength >= 10) {
//临时处理,跟换调整方式
uni.redirectTo({
url: e.url
})
} else {
if (date) {
//如果时间戳存在 那么记录此页面的停留时间
dataHandling.pocessTracking(
'停留',
`用户在此页面停留${(Date.now() - date) / 1000}秒`,
'进入页面后离开页面',
2
)
}
date = Date.now()
}
return true
},
success (e) {
success (e) {}
})
uni.addInterceptor('switchTab', {
// tabbar页面跳转前进行拦截
invoke(e) {
if (date) {
//如果时间戳存在 那么记录此页面的停留时间
dataHandling.pocessTracking(
'停留',
`用户在此页面停留${(Date.now() - date) / 1000}秒`,
'进入页面后离开页面',
2
)
}
date = Date.now()
return true
},
success(e) {}
})
uni.addInterceptor('reLaunch', {
//页面跳转前拦截
invoke(e) {
if (date) {
//如果时间戳存在 那么记录此页面的停留时间
dataHandling.pocessTracking(
'停留',
`用户在此页面停留${(Date.now() - date) / 1000}秒`,
'进入页面后离开页面',
2
)
}
date = Date.now()
return true
},
//页面跳转后缓存当前页路由
success(e) {}
})
//最新 修改 tabbar页面跳转前不进行拦截
// uni.addInterceptor('switchTab', {
//
// invoke (e) {
// console.log('!hasPermission(e.url)',e.url);
// if(!hasPermission(e.url)){
// uni.redirectTo({
// url: '/components/login/login'
// })
// return false
// }
// return true
// },
// success (e) {
// }
// })
}
function hasPermission (url) {
let islogin = uni.getStorageSync("isLogin");//在这可以使用token、vuex
......
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