Browse Source

修改会员模块需求

master
岳鹏龙 6 months ago
parent
commit
62eb91ff02
  1. 14
      package-lock.json
  2. 2
      package.json
  3. 71
      src/api/memberCenter.ts
  4. 24
      src/pages.json
  5. 74
      src/pages/index/index.vue
  6. 5
      src/pages/index/shoppage/financialAssistance.vue
  7. 14
      src/pages/index/shoppage/mediaDetail.vue
  8. 6
      src/pages/index/tabsComm.vue
  9. 45
      src/pages/memberCenter/agreement.vue
  10. 79
      src/pages/memberCenter/index.vue
  11. 1071
      src/pages/memberCenter/inpart.vue
  12. 155
      src/pages/memberCenter/jump-login.vue
  13. 63
      src/pages/memberCenter/memberRegistration.vue
  14. 201
      src/pages/memberCenter/memberZc.vue
  15. 467
      src/pages/memberCenter/slpace.json
  16. 383
      src/pages/mine/index.vue

14
package-lock.json

@ -30,7 +30,7 @@
"pinia": "2.0.36", "pinia": "2.0.36",
"pnpm": "^10.14.0", "pnpm": "^10.14.0",
"sass": "^1.63.2", "sass": "^1.63.2",
"uview-plus": "^3.4.9", "uview-plus": "^3.5.52",
"vue": "^3.2.45", "vue": "^3.2.45",
"vue-i18n": "^9.1.9" "vue-i18n": "^9.1.9"
}, },
@ -12075,13 +12075,17 @@
} }
}, },
"node_modules/uview-plus": { "node_modules/uview-plus": {
"version": "3.4.9", "version": "3.5.52",
"resolved": "https://registry.npmjs.org/uview-plus/-/uview-plus-3.5.52.tgz",
"integrity": "sha512-cyZv0Pz+rZ4vohbtZXAlnvCHwzkLudrvFXZVPr+NlUHuTJwAjZ6vSb6jmcZeozmz4HOyGfSf+USjdswdUG9OIQ==",
"dependencies": { "dependencies": {
"clipboard": "^2.0.11", "clipboard": "^2.0.11",
"dayjs": "^1.11.3" "dayjs": "^1.11.3"
}, },
"engines": { "engines": {
"HBuilderX": "^3.1.0" "HBuilderX": "^3.1.0",
"uni-app": "^4.66",
"uni-app-x": ""
} }
}, },
"node_modules/v8-to-istanbul": { "node_modules/v8-to-istanbul": {
@ -20513,7 +20517,9 @@
"dev": true "dev": true
}, },
"uview-plus": { "uview-plus": {
"version": "3.4.9", "version": "3.5.52",
"resolved": "https://registry.npmjs.org/uview-plus/-/uview-plus-3.5.52.tgz",
"integrity": "sha512-cyZv0Pz+rZ4vohbtZXAlnvCHwzkLudrvFXZVPr+NlUHuTJwAjZ6vSb6jmcZeozmz4HOyGfSf+USjdswdUG9OIQ==",
"requires": { "requires": {
"clipboard": "^2.0.11", "clipboard": "^2.0.11",
"dayjs": "^1.11.3" "dayjs": "^1.11.3"

2
package.json

@ -66,7 +66,7 @@
"pinia": "2.0.36", "pinia": "2.0.36",
"pnpm": "^10.14.0", "pnpm": "^10.14.0",
"sass": "^1.63.2", "sass": "^1.63.2",
"uview-plus": "^3.4.9", "uview-plus": "^3.5.52",
"vue": "^3.2.45", "vue": "^3.2.45",
"vue-i18n": "^9.1.9" "vue-i18n": "^9.1.9"
}, },

71
src/api/memberCenter.ts

@ -41,3 +41,74 @@ export function myMemberApply() {
method: 'POST' method: 'POST'
}) })
} }
//协会会员列表
export function xhMember(data: any) {
return request.http({
url: '/api/huiqitong/xh_member',
method: 'GET',
data
})
}
//协会会员详情
export function xhMemberInfo(id: string) {
return request.http({
url: '/api/huiqitong/xh_member/info/'+id,
method: 'GET'
})
}
//获取授权手机号注册协会会员
export function authRegister(data: any) {
return request.http({
url: '/api/huiqitong/xh_member/auth_register',
method: 'POST',
data
})
}
//发送手机号验证码
export function register(data: any) {
return request.http({
url: '/api/send/mobile/register',
method: 'POST',
data
})
}
//手机号验证码注册协会会员
export function smsRegister(data: any) {
return request.http({
url: '/api/huiqitong/xh_member/sms_register',
method: 'POST',
data
})
}
//完善会员信息
export function xhMemberImprove(data: any) {
return request.http({
url: '/api/huiqitong/xh_member/improve',
method: 'POST',
data
})
}
//入会协议
export function agreement() {
return request.http({
url: '/api/huiqitong/xh_member/agreement',
method: 'GET'
})
}
//获取我的待审核的入会信息
export function myInfo() {
return request.http({
url: '/api/huiqitong/xh_member/my_info',
method: 'GET'
})
}

24
src/pages.json

@ -30,6 +30,30 @@
"enablePullDownRefresh": false "enablePullDownRefresh": false
} }
}, },
{
"path": "pages/memberCenter/memberRegistration",
"style": {
"navigationBarTitleText": "会员注册",
"enablePullDownRefresh": false,
"navigationStyle": "custom"
}
},
{
"path": "pages/memberCenter/memberZc",
"style": {
"navigationBarTitleText": "会员注册",
"enablePullDownRefresh": false,
"navigationStyle": "custom"
}
},
{
"path": "pages/memberCenter/agreement",
"style": {
"navigationBarTitleText": "入会协议",
"enablePullDownRefresh": false,
"navigationStyle": "custom"
}
},
{ {
"path": "pages/learningCenter/index", "path": "pages/learningCenter/index",
"style": { "style": {

74
src/pages/index/index.vue

@ -106,28 +106,32 @@
<image style="width: 40rpx; height: 40rpx" src="@/static/img/tjhy.png" mode=""></image> <image style="width: 40rpx; height: 40rpx" src="@/static/img/tjhy.png" mode=""></image>
<text class="text">活跃会员</text> <text class="text">活跃会员</text>
</view> </view>
<view class="more" @click="gohyzc">
会员注册
</view>
<view class="more" @click="gohyList">更多会员 ></view> <view class="more" @click="gohyList">更多会员 ></view>
</view> </view>
<view class="hylist"> <view class="hylist">
<tabsComm :tabs-data="filterTabs" :showNum="2" @tabChange="handleTabSelect" /> <tabsComm :tabs-data="filterTabs" :showNum="1" @tabChange="handleTabSelect" />
<scroll-view scroll-y="auto" class="hyonne"> <scroll-view scroll-y="auto" class="hyonne">
<view class="hyCard" v-for="(item, index) in hyList.slice(0, 6)" :key="index" <view class="hyCard" v-for="(item, index) in hyList.slice(0, 6)" :key="index"
@click="gohydetail(item.id)"> >
<!-- @click="gohydetail(item.id)"> -->
<view class="left"> <view class="left">
<u-avatar :src="url + '/' + item.head_pic" size="45"></u-avatar> <!-- <u-avatar :src="url + '/' + item.head_pic" size="45"></u-avatar> -->
<view class="textpart"> <view class="textpart">
<view class="namepart"> <view class="namepart">
<text class="name">{{ item.name }}</text> <text class="name">{{ item.contact }}</text>
<view class="biaoq" <view class="biaoq" v-if="item.industry"
:style="{ background: `linear-gradient(0deg, ${item.member_tag_color} 0%, #dcdcdc70 100%)` }"> :style="{ background: `linear-gradient(0deg, #007fff 0%, #dcdcdc70 100%)` }">
{{ item.member_tag_title }} {{ item.industry }}
</view> </view>
</view> </view>
<text class="company">{{ item.enterprise ? item.enterprise[0].title : '无' }}</text> <text class="company">{{ item.title || '无' }}</text>
</view> </view>
</view> </view>
<image style="width: 48rpx; height: 48rpx" src="@/static/img/Icon.png" mode=""></image> <!-- <image style="width: 48rpx; height: 48rpx" src="@/static/img/Icon.png" mode=""></image> -->
</view> </view>
</scroll-view> </scroll-view>
</view> </view>
@ -172,7 +176,7 @@
} from '@/api/index' } from '@/api/index'
import chatdialog from '@/pages/index/ChatDialog.vue' import chatdialog from '@/pages/index/ChatDialog.vue'
import { import {
memberTagList, xhMember,
memberCenter memberCenter
} from '@/api/memberCenter' } from '@/api/memberCenter'
@ -309,6 +313,12 @@
}) })
} }
const gohyzc = () => {
uni.navigateTo({
url: '/pages/memberCenter/memberRegistration'
})
}
const gohdList = () => { const gohdList = () => {
uni.navigateTo({ uni.navigateTo({
url: '/pages/index/active/activelist' url: '/pages/index/active/activelist'
@ -347,22 +357,47 @@
} }
const getbqlist = async () => { const getbqlist = async () => {
filterTabs.value = [] filterTabs.value = [
await memberTagList().then((res) => { {
res.data.forEach((ele) => { id: 1,
filterTabs.value.push(ele) title: '个体私营企业'
}) },
}) {
id: 2,
title: '个体工商户'
},
{
id: 3,
title: '理事单位'
},
{
id: 4,
title: '商协会'
},
{
id: 5,
title: '自然人'
},
{
id: 6,
title: '其他单位'
}
]
// await memberTagList().then((res) => {
// res.data.forEach((ele) => {
// filterTabs.value.push(ele)
// })
// })
} }
const getMemberCenter = async (id) => { const getMemberCenter = async (id) => {
let params = { let params = {
member_tag_id: id, identity: id,
name: '', keyword: '',
page: 1, page: 1,
limit: 120 limit: 120
} }
await memberCenter(params).then((res) => { await xhMember(params).then((res) => {
hyList.value = res.data.data hyList.value = res.data.data
}) })
} }
@ -711,7 +746,6 @@
.hylist { .hylist {
width: 100%; width: 100%;
display: grid; display: grid;
justify-content: center;
.hyCard { .hyCard {
border: 2rpx solid #f1f3f9; border: 2rpx solid #f1f3f9;

5
src/pages/index/shoppage/financialAssistance.vue

@ -4,7 +4,7 @@
<u-search @search="search" @clickIcon="clickIcon" @clear="clear" shape="square" placeholder="请输入搜索内容" <u-search @search="search" @clickIcon="clickIcon" @clear="clear" shape="square" placeholder="请输入搜索内容"
placeholder-color="#A9D4FF" v-model="keyword" search-icon="/static/img/search.png" search-icon-size="14" placeholder-color="#A9D4FF" v-model="keyword" search-icon="/static/img/search.png" search-icon-size="14"
:show-action="false" height="40" margin="" bg-color="#FFFFFF"></u-search> :show-action="false" height="40" margin="" bg-color="#FFFFFF"></u-search>
<tabsComm :tabs-data="filterTabs" :showAll="false" :showNum="3" @tabChange="handleTabSelect" /> <tabsComm :tabs-data="filterTabs" :showAll="true" :showalltitle="'自治区'" :showNum="3" @tabChange="handleTabSelect" />
<view class="main"> <view class="main">
<scroll-view scroll-y="auto" class="hyonne" @scrolltolower="onloadmore"> <scroll-view scroll-y="auto" class="hyonne" @scrolltolower="onloadmore">
<view class="ztone" v-for="(item, index) in ztList" :key="index" @click="godetail(item.id)"> <view class="ztone" v-for="(item, index) in ztList" :key="index" @click="godetail(item.id)">
@ -168,7 +168,8 @@
const handleTabSelect = async (tab) => { const handleTabSelect = async (tab) => {
currentTab.value = tab currentTab.value = tab
if (tab === 'all') { if (tab === 'all') {
// await getMemberCenter('') currentTab.value = ''
await getfinanceList('', 1, 6)
} else { } else {
await getfinanceList('', 1, 6) await getfinanceList('', 1, 6)
} }

14
src/pages/index/shoppage/mediaDetail.vue

@ -4,9 +4,9 @@
<image style="width: 100%; height: 300rpx" src="@/static/img/ztback.png" mode=""></image> <image style="width: 100%; height: 300rpx" src="@/static/img/ztback.png" mode=""></image>
<view class="main"> <view class="main">
<view class="head"> <view class="head">
<image class="toux" :src="baseurl + userData.head_pic" mode=""></image> <image v-if="userData.head_pic" class="toux" :src="baseurl + userData.head_pic" mode=""></image>
<text class="name">{{ userData.name }}</text> <text class="name">{{ userData.name || userData.contact }}</text>
<text class="type">{{ userData.member_tag_title || userData.tag_name }}</text> <text class="type">{{ userData.member_tag_title || userData.title }}</text>
</view> </view>
<view class="content"> <view class="content">
<view class="titlepart"> <view class="titlepart">
@ -20,9 +20,9 @@
<text class="title">联系方式</text> <text class="title">联系方式</text>
</view> </view>
<view class="people"> <view class="people">
<text class="text">{{ userData.moblie || userData.tel }}</text> <text class="text">{{ userData.moblie }}</text>
</view> </view>
<view class="titlepart"> <view class="titlepart" v-if="userData.wx_code">
<view class="icon"></view> <view class="icon"></view>
<text class="title">微信二维码</text> <text class="title">微信二维码</text>
</view> </view>
@ -46,7 +46,7 @@
<script setup> <script setup>
import { onLoad } from '@dcloudio/uni-app' import { onLoad } from '@dcloudio/uni-app'
import { ref } from 'vue' import { ref } from 'vue'
import { memberCenterInfo } from '@/api/memberCenter' import { xhMemberInfo } from '@/api/memberCenter'
import { mediumInfo } from '@/api/shop' import { mediumInfo } from '@/api/shop'
import uvparse from '@/uni_modules/uv-parse/components/uv-parse/uv-parse.vue' import uvparse from '@/uni_modules/uv-parse/components/uv-parse/uv-parse.vue'
@ -62,7 +62,7 @@ onLoad(async (param) => {
} }
}) })
} else { } else {
await memberCenterInfo(param.id).then((res) => { await xhMemberInfo(param.id).then((res) => {
console.log(res) console.log(res)
if (res.code === 1) { if (res.code === 1) {
userData.value = res.data userData.value = res.data

6
src/pages/index/tabsComm.vue

@ -1,7 +1,7 @@
<template> <template>
<view class="tabs-wrapper" :style="{justifyContent: tabsData.length >2? 'space-between' : 'start', gap: tabsData.length >2? '10px' : 'none' }"> <view class="tabs-wrapper" :style="{justifyContent: tabsData.length >2? 'space-between' : 'start', gap: tabsData.length >2? '10px' : 'none' }">
<!-- 固定显示的'全部'标签 --> <!-- 固定显示的'全部'标签 -->
<view class="tab-item" v-if="showAll" :class="{ active: activeTab === 'all' }" @click="handleTabSelect('all')">全部</view> <view class="tab-item" v-if="showAll" :class="{ active: activeTab === 'all' }" @click="handleTabSelect('all')">{{showalltitle}}</view>
<!-- 主显示区域 --> <!-- 主显示区域 -->
<!-- <scroll-view <!-- <scroll-view
@ -59,6 +59,10 @@ const props = defineProps({
showNum: { showNum: {
type: Number, type: Number,
default: 2 default: 2
},
showalltitle: {
type: String,
default: '全部'
} }
}) })

45
src/pages/memberCenter/agreement.vue

@ -0,0 +1,45 @@
<template>
<view class="container">
<u-navbar title="入会协议" placeholder="true" :auto-back="true" bg-color="#F1F3F9" left-icon-size="24"></u-navbar>
<view class="title">
{{xydata.title}}
</view>
<rich-text :nodes="xydata.content"></rich-text>
</view>
</template>
<script setup>
import {
ref
} from 'vue'
import {
agreement
} from '@/api/memberCenter'
import { onShow } from '@dcloudio/uni-app'
const baseurl = ref(import.meta.env.VITE_APP_BASE_URL + '/')
const xydata = ref({})
onShow(async () => {
agreement().then(res => {
console.log(res);
xydata.value = res.data
})
})
</script>
<style scoped lang="scss">
.container {
height: 100vh;
width: 100%;
display: grid;
align-content: flex-start;
justify-items: center;
.title {
margin-top: 40rpx;
margin-bottom: 20rpx;
}
}
</style>

79
src/pages/memberCenter/index.vue

@ -34,20 +34,22 @@
></u-tabs> ></u-tabs>
<view class="main"> <view class="main">
<scroll-view scroll-y="auto" class="hyonne" @scrolltolower="onloadmore"> <scroll-view scroll-y="auto" class="hyonne" @scrolltolower="onloadmore">
<view class="hyCard" v-for="(item, index) in hyList" :key="index" @click="godetail(item.id)"> <view class="hyCard" v-for="(item, index) in hyList" :key="index"
>
<!-- @click="godetail(item.id)"> -->
<view class="left"> <view class="left">
<u-avatar :src="baseurl + item.head_pic" size="64"></u-avatar> <!-- <u-avatar :src="baseurl + item.head_pic" size="64"></u-avatar> -->
<view class="textpart"> <view class="textpart">
<view class="namepart"> <view class="namepart">
<text class="name">{{ item.name }}</text> <text class="name">{{ item.contact }}</text>
<view class="biaoq" :style="{ background: `linear-gradient(0deg, ${item.member_tag_color} 0%, #dcdcdc70 100%)` }"> <view class="biaoq" v-if="item.industry" :style="{ background: `linear-gradient(0deg, #007fff 0%, #dcdcdc70 100%)` }">
{{ item.member_tag_title }} {{ item.industry }}
</view> </view>
</view> </view>
<text class="company">{{ item.enterprise ? item.enterprise[0].title : '无' }}</text> <text class="company">{{ item.title || '无' }}</text>
</view> </view>
</view> </view>
<image style="width: 48rpx; height: 48rpx" src="@/static/img/Icon.png" mode=""></image> <!-- <image style="width: 48rpx; height: 48rpx" src="@/static/img/Icon.png" mode=""></image> -->
</view> </view>
</scroll-view> </scroll-view>
</view> </view>
@ -57,7 +59,7 @@
<script setup> <script setup>
import { ref } from 'vue' import { ref } from 'vue'
import tabsComm from '../index/tabsComm.vue' import tabsComm from '../index/tabsComm.vue'
import { memberTagList, memberCenter } from '@/api/memberCenter' import { xhMember } from '@/api/memberCenter'
const baseurl = ref(import.meta.env.VITE_APP_BASE_URL + '/') const baseurl = ref(import.meta.env.VITE_APP_BASE_URL + '/')
@ -92,9 +94,33 @@ const currentTab = ref('0')
// "" // ""
const filterTabs = ref([ const filterTabs = ref([
{ {
id: 0, id: '',
title: '全部' title: '全部'
} },
{
id: 1,
title: '个体私营企业'
},
{
id: 2,
title: '个体工商户'
},
{
id: 3,
title: '理事单位'
},
{
id: 4,
title: '商协会'
},
{
id: 5,
title: '自然人'
},
{
id: 6,
title: '其他单位'
}
]) ])
const leftClick = () => { const leftClick = () => {
@ -104,9 +130,12 @@ const leftClick = () => {
icon: 'fail' icon: 'fail'
}) })
} else { } else {
uni.navigateTo({ // uni.navigateTo({
url: '/pages/memberCenter/inpart' // url: '/pages/memberCenter/inpart'
}) // })
uni.navigateTo({
url: '/pages/memberCenter/memberRegistration'
})
} }
} }
@ -128,24 +157,24 @@ const godetail = (id) => {
const getbqlist = async () => { const getbqlist = async () => {
filterTabs.value = [ filterTabs.value = [
{ {
id: 0, id: '',
title: '全部' title: '全部'
} }
] ]
await memberTagList().then((res) => { // await memberTagList().then((res) => {
filterTabs.value = [...filterTabs.value, ...res.data] // filterTabs.value = [...filterTabs.value, ...res.data]
console.log(res.data) // console.log(res.data)
}) // })
} }
const getMemberCenter = async (id, name, page, limit) => { const getMemberCenter = async (id, name, page, limit) => {
let params = { let params = {
member_tag_id: id, identity: id,
name: name, keyword: name,
page: page, page: page,
limit: limit limit: limit
} }
await memberCenter(params).then((res) => { await xhMember(params).then((res) => {
hyList.value = res.data.data hyList.value = res.data.data
}) })
} }
@ -153,18 +182,18 @@ const getMemberCenter = async (id, name, page, limit) => {
const onloadmore = async () => { const onloadmore = async () => {
page.value++ page.value++
let params = { let params = {
member_tag_id: currentTab.value.id, identity: currentTab.value.id,
name: keyword.value, keyword: keyword.value,
page: page.value, page: page.value,
limit: pagesize.value limit: pagesize.value
} }
await memberCenter(params).then((res) => { await xhMember(params).then((res) => {
hyList.value = [...hyList.value, ...res.data.data] hyList.value = [...hyList.value, ...res.data.data]
}) })
} }
onLoad(async () => { onLoad(async () => {
await getbqlist() // await getbqlist()
await getMemberCenter('', '', page.value, pagesize.value) await getMemberCenter('', '', page.value, pagesize.value)
}) })
</script> </script>

1071
src/pages/memberCenter/inpart.vue

File diff suppressed because it is too large

155
src/pages/memberCenter/jump-login.vue

@ -0,0 +1,155 @@
<template>
<view class="login-view">
<input type="tel" confirm-type="确认" class="input" v-model="phoneNum" placeholder="请输入手机号" />
<view class="input-w-view">
<input class="input-w" confirm-type="确认" type="number" v-model="smsCode" placeholder="请输入验证码" />
<view @click="sendMsg" class="code-view">{{codeViewMsg}}</view>
</view>
<button @click="userLogin" class="loginBtn" type="primary" :disabled="btnDisabled">确定</button>
</view>
</template>
<script>
export default {
name: "jump-login",
props: ['smsCall', 'loginCall'],
data() {
return {
styles: {
color: '#000000',
borderColor: '#ffffff',
backgroupColor: '#ffffff'
},
codeViewMsg: "获取验证码",
countDown: 61,
dbClick: false,
btnDisabled: true,
phoneNum: '',
smsCode: ''
};
},
methods: {
sendMsg() {
const that = this;
if (this.phoneNum == '' || this.phoneNum == undefined) {
uni.showToast({
icon: 'none',
title: "请先输入手机号"
})
return;
}
if (this.dbClick) return;
this.dbClick = true;
setTimeout(() => {
this.dbClick = false;
}, 500)
if (!this.validatePhoneNumber(that.phoneNum)) {
uni.showToast({
icon: "none",
title: "手机号码异常"
})
return;
}
//
if(this.countDown === 61) {
that.countDown--;
that.codeViewMsg = "重新获取(" + this.countDown + "s)"
that.countDownData();
this.$emit('smsCall', this.phoneNum);
} else {
uni.showToast({
icon: "none",
title: "请稍后"
})
}
},
userLogin() {
const that = this;
if (!this.validatePhoneNumber(that.phoneNum)) {
uni.showToast({
icon: "none",
title: "手机号码异常"
})
return;
}
const sD = {
"phoneNum": that.phoneNum,
"smsCode": that.smsCode
};
console.log(sD);
console.log(sD.phoneNum);
console.log(sD.smsCode);
this.$emit('loginCall', sD);
},
validatePhoneNumber(phoneNumber) {
// 使
var pattern = /^1[3456789]\d{9}$/;
//
if (pattern.test(phoneNumber)) {
return true; //
} else {
return false; //
}
},
countDownData() {
this.btnDisabled = false;
setTimeout(() => {
this.countDown--;
this.codeViewMsg = "重新获取(" + this.countDown + "s)"
if (this.countDown <= 0) {
this.countDown = 61;
this.codeViewMsg = "获取验证码";
return
}
this.countDownData();
}, 1000)
},
}
}
</script>
<style>
.login-view {
width: 100vw;
padding: 40rpx 80rpx;
}
.input {
margin-top: 40rpx;
border-radius: 20rpx;
background-color: white;
padding: 20rpx;
border: 2rpx solid black;
}
.input-w-view {
position: relative;
display: flex;
height: 120rpx;
}
.input-w {
position: absolute;
margin-top: 40rpx;
border-radius: 20rpx;
background-color: white;
padding: 20rpx;
border: 2rpx solid black;
width: calc(100% - 40rpx);
}
.code-view {
right: 30rpx;
position: absolute;
margin-top: 60rpx;
z-index: 99;
}
.loginBtn {
margin-top: 100rpx;
border-radius: 20rpx;
}
</style>

63
src/pages/memberCenter/memberRegistration.vue

@ -0,0 +1,63 @@
<template>
<view class="container">
<u-navbar title="会员注册" placeholder="true" auto-back="true" bg-color="#F1F3F9" left-icon-size="24"></u-navbar>
<view class="butp">
<view class="but" @click="gozc">
确认注册
</view>
</view>
</view>
</template>
<script setup>
import {
ref
} from 'vue'
const baseurl = ref(import.meta.env.VITE_APP_BASE_URL + '/')
const gozc = () => {
uni.navigateTo({
url: '/pages/memberCenter/memberZc'
})
}
// onLoad(async () => {
// })
</script>
<style scoped lang="scss">
.container {
background: linear-gradient(0deg, #f1f3f9 72%, rgba(129, 179, 222, 0.5) 88%);
height: 100vh;
width: 100%;
.butp {
width: 100%;
height: 168rpx;
background: #FFFFFF;
/* 标签栏投影 */
box-shadow: 0rpx 0rpx 20rpx 0rpx rgba(0, 0, 0, 0.3);
position: fixed;
bottom: 0;
display: flex;
align-items: center;
justify-content: center;
.but {
height: 96rpx;
width: 70%;
border-radius: 248rpx;
background: linear-gradient(90deg, #007FFF 0%, #99CCFF 100%);
display: flex;
align-items: center;
justify-content: center;
font-family: Source Han Sans;
font-size: 36rpx;
font-weight: 350;
color: #FFFFFF;
}
}
}
</style>

201
src/pages/memberCenter/memberZc.vue

@ -0,0 +1,201 @@
<template>
<view class="container">
<u-navbar title="会员注册" placeholder="true" :auto-back="true" bg-color="#F1F3F9" left-icon-size="24"></u-navbar>
<view class="butp">
<u-button @getphonenumber="onGetPhoneNumber" text="手机号一键注册" icon-color="#fff" open-type="getPhoneNumber"
color="linear-gradient(90deg, #007FFF 0%, #99CCFF 100%)" />
<view class="but" style="color: #616161;background: #FFFFFF;" @click="showpopup">
其他手机号注册
</view>
</view>
<view class="radiotxt">
<u-checkbox name="agree" shape="circle" label="我已阅读并同意" usedAlone v-model:checked="radioVal">
</u-checkbox>
<view class="txt2" @click="gorhxy">
用户服务协议
</view>
</view>
<u-popup :show="showMobile" @close="showMobile = false" mode="center">
<jumplogin @smsCall="smsCall" @loginCall="loginCall"></jumplogin>
</u-popup>
</view>
</template>
<script setup>
import {
ref
} from 'vue'
import {
authRegister,
register,
smsRegister
} from '@/api/memberCenter'
import jumplogin from './jump-login.vue'
const baseurl = ref(import.meta.env.VITE_APP_BASE_URL + '/')
const radioVal = ref(false)
const showMobile = ref(false)
const onGetPhoneNumber = (e) => {
if (e.detail.errMsg.includes('fail')) {
uni.showToast({
title: '用户拒绝授权',
icon: 'none'
})
return
}
try {
if (radioVal.value) {
console.log(e);
authRegister({
code: e.detail.code
}).then(res => {
if (res.code === 1) {
uni.showToast({
title: '注册成功',
icon: 'none',
duration: 2000
})
setTimeout(() => {
uni.navigateTo({
url: '/pages/memberCenter/inpart?number=' + res.data.mobile
})
}, 2000)
}
})
} else {
uni.showToast({
title: '请勾选用户服务协议',
icon: 'none'
})
}
} catch (error) {
uni.showToast({
title: '注册失败',
icon: 'none'
})
}
}
const showpopup = () => {
if (radioVal.value) {
showMobile.value = true
} else {
uni.showToast({
title: '请勾选用户服务协议',
icon: 'none'
})
}
}
const gorhxy = () => {
uni.navigateTo({
url: '/pages/memberCenter/agreement'
})
}
const loginCall = (e) => {
smsRegister({
mobile: e.phoneNum,
mobile_key: mobile_key.value,
mobile_code: e.smsCode
}).then(res => {
if (res.code === 1) {
uni.showToast({
title: '注册成功',
icon: 'none',
duration: 2000
})
setTimeout(() => {
uni.navigateTo({
url: '/pages/memberCenter/inpart?number=' + res.data.mobile
})
}, 2000)
}
})
}
const mobile_key = ref('')
const smsCall = (e) => {
register({
mobile: e
}).then(res => {
if (res.code === 1) {
mobile_key.value = res.data.key
}
})
}
// onLoad(async () => {
// })
</script>
<style scoped lang="scss">
.container {
background: linear-gradient(0deg, #f1f3f9 72%, rgba(129, 179, 222, 0.5) 88%);
height: 100vh;
width: 100%;
display: grid;
align-content: center;
justify-content: center;
.butp {
/* 标签栏投影 */
display: grid;
align-items: center;
justify-content: center;
.but {
margin-top: 22rpx;
padding: 24rpx 224rpx;
border-radius: 16rpx;
background: linear-gradient(90deg, #007FFF 0%, #99CCFF 100%);
display: flex;
align-items: center;
justify-content: center;
font-family: Source Han Sans;
font-size: 36rpx;
font-weight: 350;
color: #FFFFFF;
}
:deep(.u-button) {
padding: 24rpx 224rpx;
border-radius: 16rpx;
height: 96rpx;
}
:deep(.u-button__text) {
font-family: Source Han Sans;
font-size: 36rpx !important;
font-weight: 350;
color: #FFFFFF;
}
}
.radiotxt {
margin-top: 96rpx;
display: flex;
align-items: center;
justify-content: center;
.txt1 {
font-family: Source Han Sans;
font-size: 28rpx;
font-weight: 350;
color: #969696;
}
.txt2 {
margin-left: 10rpx;
font-family: Source Han Sans;
font-size: 28rpx;
font-weight: 350;
color: #2563EB
}
}
}
</style>

467
src/pages/memberCenter/slpace.json

@ -0,0 +1,467 @@
{
"label": "内蒙古自治区",
"value": "内蒙古自治区",
"children": [
{
"label": "呼和浩特市",
"value": "呼和浩特市",
"children": [{
"label": "新城区",
"value": "新城区"
},
{
"label": "回民区",
"value": "回民区"
},
{
"label": "玉泉区",
"value": "玉泉区"
},
{
"label": "赛罕区",
"value": "赛罕区"
},
{
"label": "土默特左旗",
"value": "土默特左旗"
},
{
"label": "托克托县",
"value": "托克托县"
},
{
"label": "和林格尔县",
"value": "和林格尔县"
},
{
"label": "清水河县",
"value": "清水河县"
},
{
"label": "武川县",
"value": "武川县"
}
]
}, {
"label": "包头市",
"value": "包头市",
"children": [{
"label": "东河区",
"value": "东河区"
},
{
"label": "昆都仑区",
"value": "昆都仑区"
},
{
"label": "青山区",
"value": "青山区"
},
{
"label": "石拐区",
"value": "石拐区"
},
{
"label": "白云鄂博矿区",
"value": "白云鄂博矿区"
},
{
"label": "九原区",
"value": "九原区"
},
{
"label": "土默特右旗",
"value": "土默特右旗"
},
{
"label": "固阳县",
"value": "固阳县"
},
{
"label": "达尔罕茂明安联合旗",
"value": "达尔罕茂明安联合旗"
}
]
}, {
"label": "乌海市",
"value": "乌海市",
"children": [{
"label": "海勃湾区",
"value": "海勃湾区"
},
{
"label": "海南区",
"value": "海南区"
},
{
"label": "乌达区",
"value": "乌达区"
}
]
}, {
"label": "赤峰市",
"value": "赤峰市",
"children": [{
"label": "红山区",
"value": "红山区"
},
{
"label": "元宝山区",
"value": "元宝山区"
},
{
"label": "松山区",
"value": "松山区"
},
{
"label": "阿鲁科尔沁旗",
"value": "阿鲁科尔沁旗"
},
{
"label": "巴林左旗",
"value": "巴林左旗"
},
{
"label": "巴林右旗",
"value": "巴林右旗"
},
{
"label": "林西县",
"value": "林西县"
},
{
"label": "克什克腾旗",
"value": "克什克腾旗"
},
{
"label": "翁牛特旗",
"value": "翁牛特旗"
},
{
"label": "喀喇沁旗",
"value": "喀喇沁旗"
},
{
"label": "宁城县",
"value": "宁城县"
},
{
"label": "敖汉旗",
"value": "敖汉旗"
}
]
}, {
"label": "通辽市",
"value": "通辽市",
"children": [{
"label": "科尔沁区",
"value": "科尔沁区"
},
{
"label": "科尔沁左翼中旗",
"value": "科尔沁左翼中旗"
},
{
"label": "科尔沁左翼后旗",
"value": "科尔沁左翼后旗"
},
{
"label": "开鲁县",
"value": "开鲁县"
},
{
"label": "库伦旗",
"value": "库伦旗"
},
{
"label": "奈曼旗",
"value": "奈曼旗"
},
{
"label": "扎鲁特旗",
"value": "扎鲁特旗"
},
{
"label": "霍林郭勒市",
"value": "霍林郭勒市"
}
]
}, {
"label": "鄂尔多斯市",
"value": "鄂尔多斯市",
"children": [{
"label": "东胜区",
"value": "东胜区"
},
{
"label": "康巴什区",
"value": "康巴什区"
},
{
"label": "达拉特旗",
"value": "达拉特旗"
},
{
"label": "准格尔旗",
"value": "准格尔旗"
},
{
"label": "鄂托克前旗",
"value": "鄂托克前旗"
},
{
"label": "鄂托克旗",
"value": "鄂托克旗"
},
{
"label": "杭锦旗",
"value": "杭锦旗"
},
{
"label": "乌审旗",
"value": "乌审旗"
},
{
"label": "伊金霍洛旗",
"value": "伊金霍洛旗"
}
]
}, {
"label": "呼伦贝尔市",
"value": "呼伦贝尔市",
"children": [{
"label": "海拉尔区",
"value": "海拉尔区"
},
{
"label": "扎赉诺尔区",
"value": "扎赉诺尔区"
},
{
"label": "阿荣旗",
"value": "阿荣旗"
},
{
"label": "莫力达瓦达斡尔族自治旗",
"value": "莫力达瓦达斡尔族自治旗"
},
{
"label": "鄂伦春自治旗",
"value": "鄂伦春自治旗"
},
{
"label": "鄂温克族自治旗",
"value": "鄂温克族自治旗"
},
{
"label": "陈巴尔虎旗",
"value": "陈巴尔虎旗"
},
{
"label": "新巴尔虎左旗",
"value": "新巴尔虎左旗"
},
{
"label": "新巴尔虎右旗",
"value": "新巴尔虎右旗"
},
{
"label": "满洲里市",
"value": "满洲里市"
},
{
"label": "牙克石市",
"value": "牙克石市"
},
{
"label": "扎兰屯市",
"value": "扎兰屯市"
},
{
"label": "额尔古纳市",
"value": "额尔古纳市"
},
{
"label": "根河市",
"value": "根河市"
}
]
}, {
"label": "巴彦淖尔市",
"value": "巴彦淖尔市",
"children": [{
"label": "临河区",
"value": "临河区"
},
{
"label": "五原县",
"value": "五原县"
},
{
"label": "磴口县",
"value": "磴口县"
},
{
"label": "乌拉特前旗",
"value": "乌拉特前旗"
},
{
"label": "乌拉特中旗",
"value": "乌拉特中旗"
},
{
"label": "乌拉特后旗",
"value": "乌拉特后旗"
},
{
"label": "杭锦后旗",
"value": "杭锦后旗"
}
]
}, {
"label": "乌兰察布市",
"value": "乌兰察布市",
"children": [{
"label": "集宁区",
"value": "集宁区"
},
{
"label": "卓资县",
"value": "卓资县"
},
{
"label": "化德县",
"value": "化德县"
},
{
"label": "商都县",
"value": "商都县"
},
{
"label": "兴和县",
"value": "兴和县"
},
{
"label": "凉城县",
"value": "凉城县"
},
{
"label": "察哈尔右翼前旗",
"value": "察哈尔右翼前旗"
},
{
"label": "察哈尔右翼中旗",
"value": "察哈尔右翼中旗"
},
{
"label": "察哈尔右翼后旗",
"value": "察哈尔右翼后旗"
},
{
"label": "四子王旗",
"value": "四子王旗"
},
{
"label": "丰镇市",
"value": "丰镇市"
}
]
}, {
"label": "兴安盟",
"value": "兴安盟",
"children": [{
"label": "乌兰浩特市",
"value": "乌兰浩特市"
},
{
"label": "阿尔山市",
"value": "阿尔山市"
},
{
"label": "科尔沁右翼前旗",
"value": "科尔沁右翼前旗"
},
{
"label": "科尔沁右翼中旗",
"value": "科尔沁右翼中旗"
},
{
"label": "扎赉特旗",
"value": "扎赉特旗"
},
{
"label": "突泉县",
"value": "突泉县"
}
]
}, {
"label": "锡林郭勒盟",
"value": "锡林郭勒盟",
"children": [{
"label": "二连浩特市",
"value": "二连浩特市"
},
{
"label": "锡林浩特市",
"value": "锡林浩特市"
},
{
"label": "阿巴嘎旗",
"value": "阿巴嘎旗"
},
{
"label": "苏尼特左旗",
"value": "苏尼特左旗"
},
{
"label": "苏尼特右旗",
"value": "苏尼特右旗"
},
{
"label": "东乌珠穆沁旗",
"value": "东乌珠穆沁旗"
},
{
"label": "西乌珠穆沁旗",
"value": "西乌珠穆沁旗"
},
{
"label": "太仆寺旗",
"value": "太仆寺旗"
},
{
"label": "镶黄旗",
"value": "镶黄旗"
},
{
"label": "正镶白旗",
"value": "正镶白旗"
},
{
"label": "正蓝旗",
"value": "正蓝旗"
},
{
"label": "多伦县",
"value": "多伦县"
}
]
}, {
"label": "阿拉善盟",
"value": "阿拉善盟",
"children": [{
"label": "阿拉善左旗",
"value": "阿拉善左旗"
},
{
"label": "阿拉善右旗",
"value": "阿拉善右旗"
},
{
"label": "额济纳旗",
"value": "额济纳旗"
}
]
}
]
}

383
src/pages/mine/index.vue

@ -1,194 +1,217 @@
<template> <template>
<view class="container"> <view class="container">
<image style="width: 100%" src="@/static/img/ztback.png" mode="widthFix"></image> <image style="width: 100%" src="@/static/img/ztback.png" mode="widthFix"></image>
<view class="main"> <view class="main">
<view class="head"> <view class="head">
<view class="left"> <view class="left">
<u-avatar v-if="logintype" :src="url + '/' + userStore.userInfo.head_pic" :size="72"></u-avatar> <u-avatar v-if="logintype" :src="url + '/' + userStore.userInfo.head_pic" :size="72"></u-avatar>
<img v-else style="width: 72px; height: 72px; border-radius: 50%" src="@/static/img/qdl.png" alt="" /> <img v-else style="width: 144rpx; height: 144rpx; border-radius: 50%" src="@/static/img/qdl.png"
<text class="name">{{ userStore.userInfo.name }}</text> alt="" />
</view> <text class="name">{{ userStore.userInfo.name }}</text>
<image </view>
v-if="logintype" <image v-if="logintype" style="width: 48rpx; height: 48rpx" src="@/static/img/setting.png" mode=""
style="width: 48rpx; height: 48rpx" @click="goeditinfo('')"></image>
src="@/static/img/setting.png" </view>
mode="" <view class="editlist">
@click="goeditinfo('')" <view class="editone" @click="goeditinfo('关联企业')">
></image> <view class="left">
</view> <image style="width: 74rpx; height: 74rpx" src="@/static/img/glqy.png" mode=""></image>
<view class="editlist"> <text class="txt">关联企业</text>
<view class="editone" @click="goeditinfo('关联企业')"> </view>
<view class="left"> <image style="width: 14.14rpx; height: 14.14rpx" src="@/static/img/Group13.png" mode=""></image>
<image style="width: 74rpx; height: 74rpx" src="@/static/img/glqy.png" mode=""></image> </view>
<text class="txt">关联企业</text> <view class="editone" @click="goeditinfo('我的申请')">
</view> <view class="left">
<image style="width: 14.14rpx; height: 14.14rpx" src="@/static/img/Group13.png" mode=""></image> <image style="width: 74rpx; height: 74rpx" src="@/static/img/wdsq.png" mode=""></image>
</view> <text class="txt">我的申请</text>
<view class="editone" @click="goeditinfo('我的申请')"> </view>
<view class="left"> <image style="width: 14.14rpx; height: 14.14rpx" src="@/static/img/Group13.png" mode=""></image>
<image style="width: 74rpx; height: 74rpx" src="@/static/img/wdsq.png" mode=""></image> </view>
<text class="txt">我的申请</text> <view class="editone" @click="goeditinfo('完善入会信息')" v-if="showwsmsg">
</view> <view class="left">
<image style="width: 14.14rpx; height: 14.14rpx" src="@/static/img/Group13.png" mode=""></image> <image style="width: 74rpx; height: 74rpx" src="@/static/img/wdkc.png" mode=""></image>
</view> <text class="txt">完善入会信息</text>
<!-- <view class="editone" @click="goeditinfo('我的课程')"> </view>
<image style="width: 14.14rpx; height: 14.14rpx" src="@/static/img/Group13.png" mode=""></image>
</view>
<!-- <view class="editone" @click="goeditinfo('我的课程')">
<view class="left"> <view class="left">
<image style="width: 74rpx; height: 74rpx" src="@/static/img/wdkc.png" mode=""></image> <image style="width: 74rpx; height: 74rpx" src="@/static/img/wdkc.png" mode=""></image>
<text class="txt">我的课程</text> <text class="txt">我的课程</text>
</view> </view>
<image style="width: 14.14rpx; height: 14.14rpx" src="@/static/img/Group13.png" mode=""></image> <image style="width: 14.14rpx; height: 14.14rpx" src="@/static/img/Group13.png" mode=""></image>
</view> --> </view> -->
</view> </view>
<view class="buts"> <view class="buts">
<view class="but" @click="outLogin"> <view class="but" @click="outLogin">
{{ logintype ? '退出登录' : '登录' }} {{ logintype ? '退出登录' : '登录' }}
</view> </view>
</view> </view>
</view> </view>
</view> </view>
</template> </template>
<script setup> <script setup>
import { onLoad } from '@dcloudio/uni-app' import {
import { ref } from 'vue' onLoad
import useUserStore from '@/store/user' } from '@dcloudio/uni-app'
const userStore = useUserStore() import {
ref
const url = ref(import.meta.env.VITE_APP_BASE_URL) } from 'vue'
const logintype = ref(false)
import {
const goeditinfo = (val) => { myInfo
if (val === '关联企业') { } from '@/api/memberCenter'
uni.navigateTo({ import useUserStore from '@/store/user'
url: '/pages/mine/associatedEnterprise' const userStore = useUserStore()
})
} else if (val === '我的申请') { const url = ref(import.meta.env.VITE_APP_BASE_URL)
uni.navigateTo({ const logintype = ref(false)
url: '/pages/mine/myApplication'
}) const goeditinfo = (val) => {
} else if (val === '我的课程') { if (val === '关联企业') {
uni.navigateTo({ uni.navigateTo({
url: '/pages/mine/myCourses' url: '/pages/mine/associatedEnterprise'
}) })
} else { } else if (val === '我的申请') {
uni.navigateTo({ uni.navigateTo({
url: '/pages/mine/porsonalinfo' url: '/pages/mine/myApplication'
}) })
} } else if (val === '我的课程') {
} uni.navigateTo({
url: '/pages/mine/myCourses'
const outLogin = () => { })
userStore.logOut() } else if (val === '完善入会信息') {
logintype.value = !logintype.value uni.navigateTo({
} url: '/pages/memberCenter/inpart?number='+userStore.userInfo.moblie
onShow(() => { })
logintype.value = uni.getStorageSync('access_token') } else {
if(!logintype.value) { uni.navigateTo({
userStore.userInfo = {} url: '/pages/mine/porsonalinfo'
})
}
}
const outLogin = () => {
userStore.logOut()
logintype.value = !logintype.value
} }
// if (uni.getStorageSync('access_token') === '') { const showwsmsg = ref(false)
// uni.navigateTo({ onShow(() => {
// url: '/pages/login/login' myInfo().then(res => {
// }) if(res.data.id) {
// } else { showwsmsg.value = true
userStore.getUserInfo() } else {
// } showwsmsg.value = false
}) }
})
logintype.value = uni.getStorageSync('access_token')
if (!logintype.value) {
userStore.userInfo = {}
}
// if (uni.getStorageSync('access_token') === '') {
// uni.navigateTo({
// url: '/pages/login/login'
// })
// } else {
userStore.getUserInfo()
// }
})
</script> </script>
<style scoped lang="scss"> <style scoped lang="scss">
.container { .container {
background-color: #ffffff; background-color: #ffffff;
height: 100vh; height: 100vh;
width: 100%; width: 100%;
display: grid; display: grid;
.main { .main {
border-radius: 60rpx 60rpx 0rpx 0rpx; border-radius: 60rpx 60rpx 0rpx 0rpx;
background: #ffffff; background: #ffffff;
margin-top: -350rpx; margin-top: -350rpx;
height: calc(100vh - 350rpx); height: calc(100vh - 350rpx);
padding: 0 40rpx; padding: 0 40rpx;
box-sizing: border-box; box-sizing: border-box;
.head { .head {
display: flex; display: flex;
align-items: center; align-items: center;
justify-content: space-between; justify-content: space-between;
.left { .left {
display: flex; display: flex;
align-items: center; align-items: center;
margin-top: -50rpx; margin-top: -50rpx;
.name { .name {
margin-top: 50rpx; margin-top: 50rpx;
font-family: Source Han Sans; font-family: Source Han Sans;
font-size: 40rpx; font-size: 40rpx;
font-weight: 350; font-weight: 350;
text-align: center; text-align: center;
letter-spacing: normal; letter-spacing: normal;
/* 文本/正文 */ /* 文本/正文 */
color: #1a1a1a; color: #1a1a1a;
margin-left: 30rpx; margin-left: 30rpx;
} }
} }
} }
.editlist { .editlist {
margin-top: 24rpx; margin-top: 24rpx;
.editone { .editone {
width: 100%; width: 100%;
height: 120rpx; height: 120rpx;
background: #ffffff; background: #ffffff;
border-bottom: 2rpx solid #f3f3f3; border-bottom: 2rpx solid #f3f3f3;
display: flex; display: flex;
align-items: center; align-items: center;
justify-content: space-between; justify-content: space-between;
.left { .left {
display: flex; display: flex;
align-items: center; align-items: center;
.txt { .txt {
margin-left: 36rpx; margin-left: 36rpx;
font-family: Source Han Sans; font-family: Source Han Sans;
font-size: 28rpx; font-size: 28rpx;
font-weight: 350; font-weight: 350;
text-align: right; text-align: right;
letter-spacing: normal; letter-spacing: normal;
color: #333333; color: #333333;
} }
} }
} }
} }
.buts { .buts {
width: 100%; width: 100%;
display: flex; display: flex;
justify-content: center; justify-content: center;
.but { .but {
margin-top: 160rpx; margin-top: 160rpx;
width: 574rpx; width: 574rpx;
height: 96rpx; height: 96rpx;
border-radius: 248rpx; border-radius: 248rpx;
background: linear-gradient(90deg, #007fff 0%, #99ccff 100%); background: linear-gradient(90deg, #007fff 0%, #99ccff 100%);
display: flex; display: flex;
align-items: center; align-items: center;
justify-content: center; justify-content: center;
font-family: Source Han Sans; font-family: Source Han Sans;
font-size: 36rpx; font-size: 36rpx;
font-weight: 500; font-weight: 500;
text-align: justify; text-align: justify;
/* 浏览器可能不支持 */ /* 浏览器可能不支持 */
display: flex; display: flex;
align-items: center; align-items: center;
letter-spacing: normal; letter-spacing: normal;
color: #ffffff; color: #ffffff;
} }
} }
} }
} }
</style> </style>
Loading…
Cancel
Save