This commit is contained in:
2025-05-27 20:03:47 +08:00
parent 3c812c37e7
commit 03ecb95a9b
8 changed files with 107 additions and 28 deletions

View File

@@ -341,6 +341,27 @@ const system = {
data: data data: data
}); });
}, },
createQrcode: async (data) => {
return request({
method: MethodsENUM.POST,
url: "/index/createQrcode",
data: data
});
},
getMyTop: async (data) => {
return request({
method: MethodsENUM.POST,
url: "/user/getMyTop",
data: data
});
},
myTeamList: async (data) => {
return request({
method: MethodsENUM.POST,
url: "/user/myTeamList",
data: data
});
},
} }
export default system; export default system;

View File

@@ -1,17 +1,19 @@
<script setup> <script setup>
import {onMounted, reactive} from "vue"; import {reactive, watch} from "vue";
import XModal from "./XModal.vue"; import XModal from "./XModal.vue";
import XQrCode from "./XQrCode.vue";
import Api from "../api/index.js"; import Api from "../api/index.js";
const show = defineModel('show'); const show = defineModel('show');
const detail = reactive({}); const detail = reactive({});
onMounted(() => { watch(
Api.system.getQrcode(1).then(({data}) => { () => show.value,
(val) => {
if (val) Api.system.getQrcode(1).then(({data}) => {
Object.assign(detail, data); Object.assign(detail, data);
}); });
}); },
)
</script> </script>
<template> <template>

View File

@@ -1,13 +1,19 @@
<script setup> <script setup>
import {onMounted} from "vue"; import {watch, ref} from "vue";
import XModal from "./XModal.vue"; import XModal from "./XModal.vue";
import XQrCode from "./XQrCode.vue"; import Api from "../api/index.js";
const show = defineModel('show'); const show = defineModel('show');
const qrCode = ref(null);
onMounted(() => { watch(
() => show.value,
}); (val) => {
if (val) Api.system.createQrcode().then(({data}) => {
qrCode.value = data.url;
})
}
)
</script> </script>
<template> <template>
@@ -23,7 +29,8 @@ onMounted(() => {
<view class="title">绑定</view> <view class="title">绑定</view>
<view class="!mt-[24rpx] w-[320rpx] !mx-auto aspect-square"> <view class="!mt-[24rpx] w-[320rpx] !mx-auto aspect-square">
<x-qr-code size="320rpx" :qrSize="180" content="公众号"></x-qr-code> <image v-if="qrCode" class="!size-full" :src="qrCode"></image>
<tui-loading v-else type="row"></tui-loading>
</view> </view>
<view class="desc !mt-[24rpx]">截图保存后使用微信扫码并关注</view> <view class="desc !mt-[24rpx]">截图保存后使用微信扫码并关注</view>
</view> </view>

View File

@@ -9,13 +9,25 @@ import {reactive, ref} from "vue";
import XFilterItem from "../../components/XFilterItem.vue"; import XFilterItem from "../../components/XFilterItem.vue";
import XRadioGroup from "../../components/XRadioGroup.vue"; import XRadioGroup from "../../components/XRadioGroup.vue";
import XRadio from "../../components/XRadio.vue"; import XRadio from "../../components/XRadio.vue";
import useTableQuery from "../../hooks/useTableQuery.js";
import Api from "../../api/index.js";
const isVague = ref(false); const isVague = ref(false);
const showFilter = ref(false); const showFilter = ref(false);
const isSearch = ref(false); const isSearch = ref(false);
const po = reactive({});
const vo = reactive({});
const sumPo = reactive({ const sumPo = reactive({
type: 0, type: 0,
}); });
const {loading, pagination, initFetchData} = useTableQuery({
api: Api.system.myTeamList,
parameter: po,
callback: (data) => {
Object.assign(vo, data);
}
});
</script> </script>
<template> <template>
@@ -101,28 +113,28 @@ const sumPo = reactive({
</view> </view>
<view class="p-[20rpx] !flex flex-col gap-[20rpx]"> <view class="p-[20rpx] !flex flex-col gap-[20rpx]">
<view v-for="item in 20" class="rounded-[8rpx] bg-[#fff] p-[24rpx] flex-grow"> <view v-for="v in vo.rows" class="rounded-[8rpx] bg-[#fff] p-[24rpx] flex-grow">
<view :class="['!flex gap-[18rpx]', isVague?'vague':'']"> <view :class="['!flex gap-[18rpx]', isVague?'vague':'']">
<image class="!size-[88rpx] rounded-[16rpx]" :src="Avatar" mode="aspectFill"></image> <image class="!size-[88rpx] rounded-[16rpx]" :src="v.avatar" mode="aspectFill"></image>
<view class="flex-grow h-full !flex flex-col justify-between gap-[14rpx]"> <view class="flex-grow h-full !flex flex-col justify-between gap-[14rpx]">
<view class="!flex justify-between items-center"> <view class="!flex justify-between items-center">
<view class="test-28r">一只哈里路</view> <view class="test-28r">{{ v.nickname }}</view>
<view class="text-[#86909C] test-24r">2024-01-26 加入</view> <view class="text-[#86909C] test-24r">{{ v.createtime }} 加入</view>
</view> </view>
<view class="!flex flex-wrap"> <view class="!flex flex-wrap">
<view class="py-[3rpx] px-[8rpx] test-20r bg-[#F2F3F5]">id53379</view> <view class="py-[3rpx] px-[8rpx] test-20r bg-[#F2F3F5]">id{{ v.uid }}</view>
</view> </view>
</view> </view>
</view> </view>
<view class="!flex gap-[22rpx] !mt-[20rpx]"> <view class="!flex gap-[22rpx] !mt-[20rpx]">
<view class="!flex items-center py-[10rpx] px-[20rpx] bg-[#E8F3FF] flex-grow test-24r"> <view class="!flex items-center py-[10rpx] px-[20rpx] bg-[#E8F3FF] flex-grow test-24r">
<view>收益</view> <view>收益</view>
<view class="text-[var(--primary-color)]">245.14</view> <view class="text-[var(--primary-color)]">{{ Number(v.income).toFixed(2) }}</view>
</view> </view>
<view <view
:class="['!flex items-center py-[10rpx] px-[20rpx] bg-[#E8F3FF] flex-grow test-24r', isVague?'vague':'']"> :class="['!flex items-center py-[10rpx] px-[20rpx] bg-[#E8F3FF] flex-grow test-24r', isVague?'vague':'']">
<view>收益</view> <view>奖励</view>
<view class="text-[var(--primary-color)]">245.14</view> <view class="text-[var(--primary-color)]">{{ Number(v.reward).toFixed(2) }}</view>
</view> </view>
</view> </view>
</view> </view>

View File

@@ -5,15 +5,19 @@ import BD3 from "../../static/icons/bd3.png";
import BD4 from "../../static/icons/bd4.png"; import BD4 from "../../static/icons/bd4.png";
import BDH from "../../static/icons/bdh.png"; import BDH from "../../static/icons/bdh.png";
import WBDICON from "../../static/icons/缺省图.png"; import WBDICON from "../../static/icons/缺省图.png";
import YBDICON from "../../static/icons/已绑定.png";
import XNav from "../../components/XNav.vue"; import XNav from "../../components/XNav.vue";
import BindMsgModal from "../../components/BindMsgModal.vue"; import BindMsgModal from "../../components/BindMsgModal.vue";
import {useUserStore} from "../../pinia/UserStore/index.js";
const UserStore = useUserStore();
</script> </script>
<template> <template>
<!--消息推送--> <!--消息推送-->
<x-nav></x-nav> <x-nav></x-nav>
<view class="!flex flex-col items-center !mt-[128rpx]"> <view v-if="!UserStore.userInfo.openid" class="!flex flex-col items-center !mt-[128rpx]">
<image class="!size-[260rpx]" mode="aspectFill" :src="WBDICON"></image> <image class="!size-[260rpx]" mode="aspectFill" :src="WBDICON"></image>
<view class="!mt-[-70rpx] relative z-10">暂未绑定</view> <view class="!mt-[-70rpx] relative z-10">暂未绑定</view>
<view class="text-[#86909C] test-28r">当前消息推送无法使用将影响您收益!</view> <view class="text-[#86909C] test-28r">当前消息推送无法使用将影响您收益!</view>
@@ -24,6 +28,17 @@ import BindMsgModal from "../../components/BindMsgModal.vue";
</bind-msg-modal> </bind-msg-modal>
</view> </view>
<view v-else class="!flex flex-col items-center !mt-[128rpx]">
<image class="!size-[260rpx]" mode="aspectFill" :src="YBDICON"></image>
<view class="!mt-[-70rpx] relative z-10">已绑定</view>
<view class="text-[#86909C] test-28r">{{ UserStore.userInfo.mobile }}可正常接收消息</view>
<bind-msg-modal>
<view class="!mt-[80rpx] rounded-[4rpx] bg-[var(--primary-color)] text-[#fff] py-[10rpx] px-[32rpx]">重新绑定
</view>
</bind-msg-modal>
</view>
<view class="btm h-[50vh] !flex flex-col items-center px-[40rpx] !mx-[20rpx]"> <view class="btm h-[50vh] !flex flex-col items-center px-[40rpx] !mx-[20rpx]">
<image class="!w-[300rpx] !mt-[40rpx] !mb-[40rpx]" mode="widthFix" :src="BDH"></image> <image class="!w-[300rpx] !mt-[40rpx] !mb-[40rpx]" mode="widthFix" :src="BDH"></image>
<view class="!flex items-center bg-[#fff] p-[28rpx] w-full rounded-[16rpx] gap-[28rpx]"> <view class="!flex items-center bg-[#fff] p-[28rpx] w-full rounded-[16rpx] gap-[28rpx]">

View File

@@ -1,13 +1,29 @@
<script setup> <script setup>
import Avatar from '../../../static/images/Avatar.png' import {onMounted, reactive} from "vue";
import Api from "../../../api/index.js";
const detail = reactive({});
onMounted(() => {
Api.system.getMyTop().then(({data}) => {
Object.assign(detail, data);
});
});
const callPhone = () => {
uni.makePhoneCall({
phoneNumber: detail.mobile,
});
}
</script> </script>
<template> <template>
<view class="p-[20rpx] bg-[#F2F3F5] rounded-[16rpx] !mt-[40rpx] !flex items-center"> <view class="p-[20rpx] bg-[#F2F3F5] rounded-[16rpx] !mt-[40rpx] !flex items-center" v-if="detail.id">
<image class="!size-[64rpx]" mode="aspectFill" :src="Avatar"></image> <image class="!size-[64rpx]" mode="aspectFill" :src="detail.avatar"></image>
<view class="test-24r !ml-[24rpx]">Adam</view> <view class="test-24r !ml-[24rpx]">{{ detail.nickname }}</view>
<view <view
@click="callPhone"
class="px-[20rpx] py-[7rpx] test-22r text-[#fff] rounded-full bg-[var(--primary-color)] !flex items-center justify-center !ml-auto"> class="px-[20rpx] py-[7rpx] test-22r text-[#fff] rounded-full bg-[var(--primary-color)] !flex items-center justify-center !ml-auto">
联系TA 联系TA
</view> </view>

View File

@@ -1,5 +1,5 @@
<script setup> <script setup>
import {defineAsyncComponent, onMounted, ref} from 'vue'; import {defineAsyncComponent, onMounted, ref, reactive} from 'vue';
import ICON1 from '../../static/icons/icon_提现记录.png'; import ICON1 from '../../static/icons/icon_提现记录.png';
import ICON2 from '../../static/icons/icon_变动记录.png'; import ICON2 from '../../static/icons/icon_变动记录.png';
import ICON3 from '../../static/icons/icon_我的钱包.png'; import ICON3 from '../../static/icons/icon_我的钱包.png';
@@ -13,6 +13,7 @@ import XNav from "../../components/XNav.vue";
import CreditScore from "../../components/CreditScore.vue"; import CreditScore from "../../components/CreditScore.vue";
import {toPage} from "../../utils/uils.js"; import {toPage} from "../../utils/uils.js";
import {useUserStore} from "../../pinia/UserStore/index.js"; import {useUserStore} from "../../pinia/UserStore/index.js";
import AddCustomerServiceModal from "../../components/AddCustomerServiceModal.vue";
// #ifdef APP-PLUS // #ifdef APP-PLUS
// #endif // #endif
@@ -43,6 +44,9 @@ const tabs = [
] ]
const UserStore = useUserStore(); const UserStore = useUserStore();
const state = reactive({
showAddCustomer: false,
});
onMounted(() => { onMounted(() => {
UserStore.getUserInfo(); UserStore.getUserInfo();
@@ -150,7 +154,7 @@ onMounted(() => {
<image class="!size-[84rpx]" mode="aspectFill" :src="ICON5"></image> <image class="!size-[84rpx]" mode="aspectFill" :src="ICON5"></image>
<view class="test-24r">账号管理</view> <view class="test-24r">账号管理</view>
</view> </view>
<view class="!flex items-center flex-col justify-center gap-[12rpx]"> <view class="!flex items-center flex-col justify-center gap-[12rpx]" @click="state.showAddCustomer=true">
<image class="!size-[84rpx]" mode="aspectFill" :src="ICON6"></image> <image class="!size-[84rpx]" mode="aspectFill" :src="ICON6"></image>
<view class="test-24r">联系客服</view> <view class="test-24r">联系客服</view>
</view> </view>
@@ -161,6 +165,8 @@ onMounted(() => {
</view> </view>
</view> </view>
</view> </view>
<add-customer-service-modal v-model:show="state.showAddCustomer"></add-customer-service-modal>
</template> </template>
<style lang="scss" scoped> <style lang="scss" scoped>

Binary file not shown.

After

Width:  |  Height:  |  Size: 14 KiB