This commit is contained in:
王一嘉
2025-07-14 16:58:46 +08:00
parent af94cd0a97
commit d68450709b
24 changed files with 397 additions and 79 deletions

View File

@@ -271,6 +271,13 @@ const system = {
data: data
});
},
editWithdrawLog: async (data) => {
return request({
method: MethodsENUM.POST,
url: "/user/editWithdrawLog",
data: data
});
},
getWithdrawalInfo: async (id) => {
return request({
method: MethodsENUM.POST,

View File

@@ -1,12 +1,16 @@
<script setup>
import {onMounted} from "vue";
import {onMounted, reactive} from "vue";
import XModal from "./XModal.vue";
import XQrCode from "./XQrCode.vue";
import Api from "../api/index.js";
const show = defineModel('show');
const detail = reactive({});
onMounted(() => {
Api.system.getQrcode(1).then(({data}) => {
Object.assign(detail, data);
console.log('我坎坎坷坷', detail)
});
});
</script>
@@ -14,11 +18,12 @@ onMounted(() => {
<x-modal
v-model:show="show">
<view class="px-[30rpx] py-[40rpx] relative">
<image @click="show=false" class="!w-[52rpx] !h-[52rpx] absolute top-[-110rpx] right-[calc(-100%-10rpx)]" src="/static/icons/close.png"></image>
<image @click="show=false" class="!w-[52rpx] !h-[52rpx] absolute top-[-110rpx] right-[calc(-100%-10rpx)]"
src="/static/icons/close.png"></image>
<view class="title">关注微信公众号</view>
<view class="!mt-[24rpx] w-[320rpx] !mx-auto aspect-square">
<x-qr-code size="320rpx" :qrSize="180" content="公众号"></x-qr-code>
<image class="!size-[320rpx]" :src="detail.qrcode" mode="aspectFill"></image>
</view>
<view class="desc">截图后扫码变现快人一步</view>
</view>

View File

@@ -0,0 +1,65 @@
<script setup>
import XModal from "./XModal.vue";
import {reactive, ref} from "vue";
import XSelect from "./XSelect.vue";
import Api from "../api";
import {debounce} from "lodash";
import {showToast} from "../utils/uils.js";
const emits = defineEmits(['success']);
const props = defineProps({
id: {
type: String,
default: null,
}
});
const show = ref(false);
const form = reactive({
payType: null,
});
const getApi = async () => {
const {data} = await Api.system.getWithdrawal();
return {
data: data.map(v => ({
...v,
id: v.id,
name: `(${v.type_text}) ${v.realname} ${v.account}`,
})),
}
}
const success = debounce(async () => {
const {msg} = await Api.system.editWithdrawLog({
id: props.id,
wid: form.payType,
});
showToast(msg);
show.value = false;
emits('success')
}, 500);
</script>
<template>
<Text @click="show=true">
<slot></slot>
</Text>
<x-modal v-model:show="show">
<view class="px-[16px] py-[20px] text-[#000]">
<view class="text-[#000] text-center">提现失败</view>
<view class="!my-2 text-black">请修改您的提现信息确保所有信息都归属于用一个自然人修改后在下方选择正确的提现信息
</view>
<x-select v-model:model-value="form.payType" :api="getApi"
placeholder="请选择提现方式"></x-select>
<view class="!flex gap-3 !mt-3">
<tui-button height="80rpx" type="gray" @click="show=false">取消</tui-button>
<tui-button height="80rpx" @click="success">重新提现</tui-button>
</view>
</view>
</x-modal>
</template>
<style scoped lang="scss">
</style>

View File

@@ -8,9 +8,9 @@ const show = ref(false);
<template>
<image v-if="!$slots.button" class="!size-[24rpx]" :src="ICON" mode="aspectFill" @click="show=true"></image>
<div v-else @click="show=true">
<Text v-else @click="show=true">
<slot name="button"></slot>
</div>
</Text>
<x-confirm-modal
width="500rpx"

View File

@@ -1,5 +1,5 @@
<script setup>
import {ref} from 'vue'
import {ref, watch} from 'vue'
import XModal from "./XModal.vue";
import fmt from '../static/images/fmt.png';
import play from '../static/icons/play.png';
@@ -22,6 +22,16 @@ defineExpose({
open
});
watch(
() => show.value,
(val) => {
if (!val) {
playVideo.value = false;
}
},
{deep: true}
)
const changeSwiper = ({detail}) => {
current.value = detail.current;
}
@@ -62,7 +72,7 @@ const changeSwiper = ({detail}) => {
</image>
<view class="!w-full relative rounded-[16rpx] overflow-hidden">
<image v-if="!playVideo" class="!w-full" mode="widthFix" :src="fmt"></image>
<image v-if="!playVideo" class="!w-full" mode="widthFix" :src="options.file"></image>
<view @click="playVideo=!playVideo" v-if="!playVideo"
class="absolute left-0 top-0 w-full h-full bg-[rgba(0,0,0,.4)] z-10 !flex justify-center items-center">
<image class="!w-[94rpx] !h-[94rpx]" :src="play"></image>
@@ -73,7 +83,7 @@ const changeSwiper = ({detail}) => {
@pause="playVideo=!playVideo"
class="!w-full"
v-else
src="https://shopyunlng.oss-cn-beijing.aliyuncs.com/upload/2025/03-18/15-31-150289-429952696.m4v">
:src="options.pop_video[0]">
</video>
</view>
</view>

View File

@@ -14,6 +14,7 @@ import {reactive} from "vue";
import Api from "../../api/index.js";
import {onShow} from "@dcloudio/uni-app";
import {useSystemStore} from "../../pinia/SystemStore/index.js";
import XPrompt from "../../components/XPrompt.vue";
const SystemStore = useSystemStore();
const BASE = [
@@ -127,8 +128,21 @@ const deleteItem = async (id) => {
<view class="px-[12rpx] py-[7rpx] test-24r warn" v-else-if="v.status === 0 || v.status === 3">
{{ v.status_text }}
</view>
<view class="px-[12rpx] py-[7rpx] test-24r error" v-else-if="v.status === -2">
{{ v.status_text }}
<x-prompt title="封禁原因" :info="v.check_text">
<template v-slot:button>
<tui-icon name="about" :size="15" color="#F53F3F"></tui-icon>
</template>
</x-prompt>
</view>
<view class="px-[12rpx] py-[7rpx] test-24r error" v-else>
{{ v.status_text }}
<x-prompt title="账号异常" :info="v.check_text">
<template v-slot:button>
<tui-icon name="about" :size="15" color="#F53F3F"></tui-icon>
</template>
</x-prompt>
</view>
</view>
<view class="!w-full !h-[2rpx] bg-[#E5E6EB] !my-[20rpx]"></view>
@@ -137,9 +151,10 @@ const deleteItem = async (id) => {
<image class="!size-[88rpx] image-bor rounded-[12rpx]" :src="v.qrcode" mode="aspectFill"></image>
<!---->
<image @click="toPage(`/pages/addAccount/index?id=${v.id}`)"
<image v-if="v.status!==0 && v.status!==-2" @click="toPage(`/pages/addAccount/index?id=${v.id}`)"
class="!size-[72rpx] rounded-[50%] overflow-hidden !ml-auto" :src="EDITICON"></image>
<image @click="deleteItem(v.id)" class="!size-[72rpx] rounded-[50%] overflow-hidden"
<image v-if="v.status!==0 && v.status!==-2" @click="deleteItem(v.id)"
class="!size-[72rpx] rounded-[50%] overflow-hidden"
:src="DELETEICON"></image>
</view>
</view>

View File

@@ -52,6 +52,14 @@ onLoad((options) => {
});
if (SystemStore.accountManagementPo.pid) form.pid = Number(SystemStore.accountManagementPo.pid);
})
const getSelect = async () => {
const {data} = await Api.system.getPlatform();
data.shift();
return {
data: data,
}
}
</script>
<template>
@@ -61,7 +69,7 @@ onLoad((options) => {
<view class="min-h-[calc(100vh-100rpx)] bg-[#fff] px-[30rpx] py-[25rpx]">
<x-form>
<x-form-item label="宣发平台">
<x-select v-model:model-value="form.pid" :api="Api.system.getPlatform"></x-select>
<x-select v-model:model-value="form.pid" :api="getSelect"></x-select>
</x-form-item>
<x-form-item label="账号">
<x-input v-model:model-value="form.account" height="80rpx" placeholder="请输入帐号"></x-input>

View File

@@ -89,7 +89,7 @@ const success = async () => {
<view class="items-center test-24r xy">
<x-t-y v-model:model-value="TY">
本人承诺已阅读并同意
<text class="text-[var(--primary-color)]" @click="toPage('/pages/richPage/index?id=3')">
<text class="text-[var(--primary-color)]" @click="toPage('/pages/richPage/index?id=4')">
灵活用工平台综合服务协议
</text>
本人按照协议内容向贵司提供相应的服务

View File

@@ -89,7 +89,7 @@ const success = async () => {
<view class="items-center test-24r xy">
<x-t-y v-model:model-value="TY">
本人承诺已阅读并同意
<text class="text-[var(--primary-color)]" @click="toPage('/pages/richPage/index?id=3')">
<text class="text-[var(--primary-color)]" @click="toPage('/pages/richPage/index?id=4')">
灵活用工平台综合服务协议
</text>
本人按照协议内容向贵司提供相应的服务

View File

@@ -83,6 +83,7 @@ const vo = reactive({
const {loading, pagination, initFetchData} = useTableQuery({
api: Api.system.getTask,
uuid: true,
immediate: false,
parameter: po,
callback: (data) => {

View File

@@ -1,5 +1,5 @@
<script setup>
import {reactive} from "vue";
import {nextTick, reactive} from "vue";
import XInput from "../../components/XInput.vue";
import XLink from "../../components/XLink.vue";
import {showToast, toPage, verifyForm} from "../../utils/uils.js";
@@ -28,12 +28,14 @@ const rules = {
const success = async () => {
verifyForm(form, rules);
const {msg, data} = await Api.system.accountLogin(form);
showToast(msg);
const {data} = await Api.system.accountLogin(form);
showToast('登录成功');
UserStore.isLogin = true;
UserStore.token = data.token;
Object.assign(UserStore.userInfo, data);
await toPage('/pages/home/index');
await nextTick(() => {
toPage('/pages/home/index');
})
}
</script>

View File

@@ -35,7 +35,7 @@ onMounted(() => {
<style lang="scss" scoped>
.scrollX {
width: max-content !important;
animation: scroll 800s linear infinite;
animation: scroll 1200s linear infinite;
image {
flex-shrink: 0;

View File

@@ -1,5 +1,5 @@
<script setup>
import {reactive} from "vue";
import {reactive, nextTick} from "vue";
import XInput from "../../components/XInput.vue";
import {showToast, toPage, verifyForm} from "../../utils/uils.js";
import SendMsg from "../../components/SendMsg.vue";
@@ -29,12 +29,14 @@ const rules = {
const success = async () => {
verifyForm(form, rules);
const {msg, data} = await Api.system.accountLogin(form);
showToast(msg);
const {data} = await Api.system.smsLogin(form);
showToast('登录成功');
UserStore.isLogin = true;
UserStore.token = data.token;
Object.assign(UserStore.userInfo, data);
await toPage('/pages/home/index');
await nextTick(() => {
toPage('/pages/home/index');
})
}
</script>

View File

@@ -52,6 +52,12 @@ onLoad((options) => {
<w-x-official-account v-model:show="showWX"></w-x-official-account>
</template>
<style lang="scss">
page {
background-color: #fff;
}
</style>
<style lang="scss" scoped>
.title {
color: rgb(29, 33, 41);

View File

@@ -84,6 +84,12 @@ onLoad((options) => {
</view>
</template>
<style lang="scss">
page {
background-color: #fff;
}
</style>
<style lang="scss" scoped>
.title {
color: rgb(29, 33, 41);

View File

@@ -27,7 +27,7 @@ const rules = {
},
};
const form = reactive({
mobile: null,
mobile: UserStore.userInfo.full_mobile,
captcha: null,
password: null,
});
@@ -47,7 +47,7 @@ const success = async () => {
<x-form ref="XFormRef" :model="form" :rules="rules">
<x-form-item label="手机号">
<x-input height="72rpx" placeholder="微信号" v-model:model-value="form.mobile"></x-input>
<x-input height="72rpx" placeholder="微信号" disabled v-model:model-value="form.mobile"></x-input>
</x-form-item>
<x-form-item label="验证码">
<send-msg height="72rpx" :mobile="form.mobile" v-model:model-value="form.captcha" :type="3"></send-msg>

View File

@@ -31,7 +31,7 @@ const rules = {
},
};
const form = reactive({
old_mobile: null,
old_mobile: UserStore.userInfo.full_mobile,
old_captcha: null,
new_mobile: null,
new_captcha: null,
@@ -52,7 +52,8 @@ const success = async () => {
<x-form ref="XFormRef" :model="form" :rules="rules">
<x-form-item label="原手机号">
<x-input height="72rpx" placeholder="原手机号" v-model:model-value="form.old_mobile"></x-input>
<x-input height="72rpx" placeholder="原手机号" disabled
v-model:model-value="form.old_mobile"></x-input>
</x-form-item>
<x-form-item label="验证码">
<send-msg

View File

@@ -1,5 +1,6 @@
<script setup>
import {ref} from "vue";
import ZY_ICON from "../../../static/icons/注意.png";
import XConfirmModal from "../../../components/XConfirmModal.vue";
import {showToast} from "../../../utils/uils.js";
import {useUserStore} from "../../../pinia/UserStore/index.js";
@@ -11,7 +12,18 @@ const UserStore = useUserStore();
const emits = defineEmits(['success']);
const show = ref(false);
const defaultDrawal = ref();
const toast = ref();
const open = debounce(async () => {
const {data} = await Api.system.getDefaultWithdrawalInfo();
if (!data) {
toast.value.show({
title: "未添加收款信息",
content: "添加后重新发起打款",
imgUrl: ZY_ICON,
icon: true
});
return;
}
if (UserStore.userInfo.money < 1) {
showToast({
icon: 'error',
@@ -26,7 +38,6 @@ const open = debounce(async () => {
});
return;
}
const {data} = await Api.system.getDefaultWithdrawalInfo();
defaultDrawal.value = data;
show.value = true;
}, 500);
@@ -79,6 +90,8 @@ const success = debounce(async () => {
</template>
</x-confirm-modal>
</view>
<tui-toast ref="toast"></tui-toast>
</template>
<style scoped lang="scss">

View File

@@ -44,7 +44,7 @@ onShow(() => {
v-else
@click="toPage('/pages/paymentAccount/index')">
<image class="!size-[72rpx] rounded-[20rpx]" mode="aspectFill" :src="ZFENUM[defaultDrawal.type]"></image>
<view class="text-[#1D2129] test-28r">{{ defaultDrawal.account }}</view>
<view class="text-[#1D2129] test-28r">{{ defaultDrawal.realname }} {{ defaultDrawal.account }}</view>
<image class="!w-[12rpx] !ml-auto" mode="widthFix" :src="ICON2"></image>
</view>

View File

@@ -10,6 +10,8 @@ import XDateTime from "../../components/XDateTime.vue";
import dayjs from "dayjs";
import ZFENUM from "../../enum/ZFENUM.js";
import TXJLENUM from "../../enum/TXJLENUM.js";
import XModal from "../../components/XModal.vue";
import WithdrawAgainModal from "../../components/WithdrawAgainModal.vue";
const po = reactive({
time: dayjs().format('YYYY-MM'),
@@ -21,8 +23,9 @@ const vo = reactive({
month_money: 0,
all_money: 0,
});
const {loading, pagination, initFetchData} = useTableQuery({
const {loading, pagination, initFetchData, fetchData} = useTableQuery({
api: Api.system.getWithdrawLog,
uuid: true,
parameter: po,
callback: (data) => {
Object.assign(vo, data);
@@ -74,7 +77,12 @@ const {loading, pagination, initFetchData} = useTableQuery({
</view>
</view>
<view class="!ml-auto">
<x-tag :type="TXJLENUM[v.status]">{{ v.status_text }}</x-tag>
<x-tag :type="TXJLENUM[v.status]">
{{ v.status_text }}
<WithdrawAgainModal :id="v.id" @success="fetchData">
<tui-icon v-if="v.status===-1" :size="15" color="#F53F3F" name="about"></tui-icon>
</WithdrawAgainModal>
</x-tag>
</view>
</view>
<view

View File

@@ -27,6 +27,10 @@ $primary-color: #2D5CF6;
padding-bottom: calc(24rpx + env(safe-area-inset-bottom));
}
.uni-picker-container {
z-index: 9998 !important;
}
.ellipsis-1 {
display: inline-block; /* 创建一个伸缩容器 */
-webkit-box-orient: vertical; /* 设置伸缩容器的方向为垂直 */

BIN
src/static/icons/注意.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 3.8 KiB