源文件

This commit is contained in:
gyq
2024-05-23 14:39:33 +08:00
commit a1128dd791
2997 changed files with 500069 additions and 0 deletions

View File

@@ -0,0 +1,725 @@
<template>
<navigationTitle :postion="false" :title="'工作台'"></navigationTitle>
<view class="content">
<view class="head">
<view class="head-image">
<image :src="vdata.userImg"></image>
</view>
<view class="head-rignt">
<view class="head-text">
<text class="head-title">{{ vdata.userName }}</text>
<text class="head-id">ID{{ vdata.userId }}</text>
</view>
<view class="head-set" @tap="goSetAccount">
<image :src="imageInfo.setting"></image>
</view>
</view>
</view>
<view class="title">
<text>管理工具</text>
</view>
<view class="entrances-body">
<view class="entrances" :class="{ 'grid-box': vdata.isList === false }">
<view class="entrance-box" @tap="toPage('applicationManagement')">
<view class="left">
<image :src="imageInfo.apply"></image>
<text>进件管理</text>
</view>
<view class="right">
<image :src="imageInfo.arrowGray"></image>
</view>
<!-- <view class="border"></view> -->
<view class="grid-border"></view>
</view>
<view class="entrance-box" @tap="toPage('merchantManagement')">
<view class="left">
<image :src="imageInfo.merchant"></image>
<text>商户管理</text>
</view>
<view class="right">
<image :src="imageInfo.arrowGray"></image>
</view>
<!-- <view class="border"></view> -->
<view class="grid-border"></view>
</view>
<view class="entrance-box" @tap="toPage('setUp')">
<view class="left">
<image :src="imageInfo.setUp"></image>
<text>设置</text>
</view>
<view class="right" style="border-bottom: none">
<image :src="imageInfo.arrowGray"></image>
</view>
</view>
</view>
</view>
<view class="title">
<text>数据统计</text>
</view>
<view class="header animation-close" :style="{ height: vdata.isA ? '230rpx' : '110rpx' }">
<view class="date-filter">
<view
class="date"
:class="vdata.selectFlge == item.index ? 'select' : ''"
v-for="(item, index) in vdata.selectList"
:key="index"
@click="onSelsct(index)"
>
<text>{{ item.text }}</text>
</view>
<view class="close" @click="onClose">
<image :class="vdata.isA ? 'animation' : ''" src="../../static/indexImg/down.png" mode=""></image>
</view>
</view>
<view class="time-picker">
<xp-picker @confirm="confirm" mode="ymdhi" :startTime="vdata.startDate">{{ vdata.startDate }}</xp-picker>
<text></text>
<xp-picker @confirm="confirmEnd" mode="ymdhi" :startTime="vdata.endDate">{{ vdata.endDate }}</xp-picker>
</view>
</view>
<view class="statistics" style="margin-top: 20rpx; background-color: #262e4d">
<view class="amount">
<text>收款金额</text>
</view>
<view class="money">
<text>{{ (indexData.payAmount / 100).toFixed(2) }}</text>
</view>
<view class="other">
<view class="deal-amount">
<text>收款笔数</text>
<text style="color: #ffffff; font-size: 28rpx">{{ indexData.payCount }}</text>
</view>
<view class="refund">
<text>退款金额</text>
<text style="color: #ffffff; font-size: 28rpx">{{ (indexData.refundAmount / 100).toFixed(2) }}</text>
</view>
<view class="refund-amount">
<text>退款笔数</text>
<text style="color: #ffffff; font-size: 28rpx">{{ indexData.refundCount }}</text>
</view>
</view>
</view>
<view class="statistics" style="background-color: #3981ff; border-radius: 0 0 20rpx 20rpx">
<view class="amount">
<text>商户总数</text>
</view>
<view class="money" style="color: #ffffff">
<text>{{ vdata.mchCount.mchAllCount }}</text>
</view>
<view class="other">
<view class="deal-amount">
<text>新增商户数</text>
<text style="color: #ffffff; font-size: 28rpx">{{ vdata.mchCount.mchTodayAddCount }}</text>
</view>
<view class="refund">
<text>入网商户数</text>
<text style="color: #ffffff; font-size: 28rpx">{{ vdata.mchCount.mchOnNetCount }}</text>
</view>
<view class="refund-amount">
<text>新增入网商户数</text>
<text style="color: #ffffff; font-size: 28rpx">{{ vdata.mchCount.mchOnNetNewCount }}</text>
</view>
</view>
</view>
<view class="footer"> </view>
</view>
</template>
<script setup>
import { ref, reactive } from "vue"
import { $statistics, $payIfDefines, $getUserInfo, $getPayDayCount, $getPayConfigIfcodes } from "@/http/apiManager.js"
import { onLoad, onBackPress, onShow } from "@dcloudio/uni-app"
import { intNum } from "@/util/intNumber.js"
import { getDay } from "@/util/timeInterval.js"
import navigationTitle from "@/components/jeepayNavigationTitle/jeepayNavigationTitle.vue"
const baseImage = ref("/static/iconImg/")
const blanceInfo = ref({})
const imageInfo = reactive({
setting: baseImage.value + "setting.svg",
close: baseImage.value + "icon-close.svg",
eyeClose: baseImage.value + "eye-close.svg",
list: baseImage.value + "grid.svg",
arrow: baseImage.value + "arrow-right.svg",
arrowGray: baseImage.value + "arrow-right-gray.svg",
apply: "/static/navImg/nav-jinjian.svg",
merchant: "/static/navImg/nav-shangdian.svg",
setUp: "/static/iconImg/setting.svg",
mch: baseImage.value + "store.svg",
})
const indexData = ref({})
const otherData = ref({})
const vdata = reactive({
amount: 0,
isPassword: true,
isList: false,
mchAllCount: 0,
mchTodayAddCount: 0,
userImg: "",
userName: "",
userId: "",
isA: false, //动画
isS: false,
selectFlge: 0, //时间选择框标志符
startDate: "", //开始时间
endDate: "", //结束时间
selectList: [
{ index: 0, value: "today", text: "今天" },
{ index: 1, value: "yesterday", text: "昨天" },
{ index: 2, value: "week", text: "近7天" },
{ index: 3, value: "mounth", text: "近30天" },
{ index: 4, value: "customer", text: "自定义" },
],
searchObj: {
isApp: true,
queryDateRange: "today",
},
staticObj: {
isApp: true,
queryDateRange: "today",
countType: 1,
agentNo: "",
},
mchCount: {},
})
const withdrawalPopup = ref()
onLoad(() => {
vdata.startDate = `${getDay(0, "-")} 00:00`
vdata.endDate = `${getDay(0, "-")} 23:59`
})
onShow(() => {
$getUserInfo().then(({ bizData }) => {
vdata.userImg = bizData.avatarUrl
vdata.userName = bizData.realname
vdata.userId = bizData.sysUserId
})
getStatistics(vdata.staticObj)
})
const getStatistics = (staticObj) => {
$statistics(staticObj).then(({ bizData }) => {
otherData.value = bizData
vdata.mchCount = bizData.mchCount
vdata.orderCount = bizData.orderCount
vdata.agentCount = bizData.agentCount
indexData.value = bizData.orderCount
})
}
const onSelsct = (index) => {
vdata.selectFlge = index
switch (index) {
case 0:
vdata.startDate = `${getDay(0, "-")} 00:00`
vdata.endDate = `${getDay(0, "-")} 23:59`
vdata.staticObj.queryDateRange = "today"
getStatistics(vdata.staticObj)
break
case 1:
vdata.startDate = `${getDay(-1, "-")} 00:00`
vdata.endDate = `${getDay(-1, "-")} 23:59`
vdata.staticObj.queryDateRange = "yesterday"
getStatistics(vdata.staticObj)
break
case 2:
vdata.startDate = `${getDay(-7, "-")} 00:00`
vdata.endDate = `${getDay(0, "-")} 23:59`
vdata.staticObj.queryDateRange = "near2now_7"
getStatistics(vdata.staticObj)
break
case 3:
vdata.startDate = `${getDay(-30, "-")} 00:00`
vdata.endDate = `${getDay(0, "-")} 23:59`
vdata.staticObj.queryDateRange = "near2now_30"
getStatistics(vdata.staticObj)
break
case 4:
if (!vdata.isA) {
vdata.isA = true
}
vdata.startDate = `${getDay(0, "-")} 00:00`
vdata.endDate = `${getDay(0, "-")} 23:59`
break
}
}
//时间选择器确定
const confirm = (e) => {
vdata.startDate = e.value
vdata.selectFlge = 4
// vdata.staticObj.queryDateRange = `customDate_${vdata.startDate}:00_${vdata.endDate}:59`
// getStatistics(vdata.staticObj)
}
const confirmEnd = (e) => {
vdata.endDate = e.value
vdata.selectFlge = 4
vdata.staticObj.queryDateRange = `customDate_${vdata.startDate}:00_${vdata.endDate}:59`
getStatistics(vdata.staticObj)
}
const onClose = () => {
vdata.isA = !vdata.isA
}
function toPage(path) {
if (path === "applicationManagement") {
// 获取进件列表的颜色 和 icon,给下一个页面用,因为异步请求的原因,所以在这里进行处理
let iconList = ref([])
$getPayConfigIfcodes("CURRENT", "agentApplyment", "").then(({ bizData }) => {
bizData.forEach((item) => {
iconList.value.push([item.bgColor, item.ifCode, item.icon])
})
uni.navigateTo({
url: `/pageApply/applyList?iconList=${JSON.stringify(iconList.value)}`,
})
})
return
}
uni.navigateTo({
url: `../../pageWork/${path}/${path}`,
})
}
let isShowSun = ref(false)
// 切换函数 睁眼闭眼 与 管理工具排列
function switchButton(sign) {
if (sign === "eye") {
vdata.isPassword = !vdata.isPassword
if (!vdata.isPassword) {
isShowSun.value = true
imageInfo.eyeClose = "../../static/workImg/eye-open.svg"
} else {
isShowSun.value = false
imageInfo.eyeClose = "../../static/workImg/eye-close.svg"
}
} else if (sign === "format") {
vdata.isList = !vdata.isList
if (!vdata.isList) {
imageInfo.list = "../../static/workImg/grid.svg"
} else {
imageInfo.list = "../../static/workImg/list.svg"
}
}
}
function toTabPage(path) {
uni.switchTab({
url: `../${path}/${path}`,
})
}
function goSetAccount() {
uni.navigateTo({
url: "../../pageWork/setUp/setUp",
})
}
</script>
<style>
page {
background: #f5f6fc;
}
</style>
<style lang="scss" scoped>
.content {
.animation-close {
transition: height 0.5s;
}
.animation {
transform: rotate(-180deg);
}
.select {
padding: 10rpx 10rpx;
border-radius: 10rpx;
background: rgba(57, 129, 255, 0.1);
font-weight: 500;
color: #3981ff;
}
box-sizing: border-box;
// padding: 0 50rpx;
image {
display: block;
}
.head,
.banner-box,
.title,
.entrances-body {
box-sizing: border-box;
padding: 0 50rpx;
}
.head {
display: flex;
width: 100%;
height: 90rpx;
margin: 30rpx 0 50rpx 0;
.head-image {
width: 90rpx;
height: 90rpx;
border-radius: 20rpx;
overflow: hidden;
//margin-right: 10rpx;
flex-shrink: 0;
image {
width: 100%;
height: 100%;
}
}
.head-rignt {
display: flex;
width: 100%;
justify-content: space-between;
align-items: center;
margin-left: 10rpx;
.head-text {
display: flex;
flex-direction: column;
.head-title {
font-size: 30rpx;
font-weight: 700;
color: #292f46;
}
.head-id {
font-size: 22rpx;
color: #adacb3;
}
}
.head-set {
width: 40rpx;
height: 40rpx;
image {
width: 100%;
height: 100%;
}
}
}
}
.light {
background: #3981ff !important;
}
.title {
display: flex;
align-items: center;
justify-content: space-between;
width: 100%;
height: 40rpx;
margin: 50rpx 0 30rpx 10rpx;
text {
font-size: 28rpx;
font-weight: 700;
}
image {
width: 40rpx;
height: 40rpx;
}
}
.grid-box {
/* 九宫格 */
display: flex;
flex-wrap: wrap;
.entrance-box {
position: relative;
width: 33.33% !important;
height: 200rpx !important;
box-sizing: border-box !important;
justify-content: center !important;
align-items: center !important;
.left {
flex-direction: column !important;
image {
margin: 0 auto 22rpx auto !important;
}
}
.right {
image {
display: none !important;
}
}
.grid-border {
display: block !important;
position: absolute;
right: 0;
width: 2rpx;
height: 200rpx;
background: #f0f1f7;
}
}
}
.entrances {
border-radius: 20rpx;
overflow: hidden;
.entrance-box {
display: flex;
justify-content: space-between;
padding-left: 30rpx;
height: 110rpx;
background: #fff;
position: relative;
.left {
display: flex;
align-items: center;
image {
margin-right: 20rpx;
width: 50rpx;
height: 50rpx;
}
text {
color: #797b80;
font-size: 27rpx;
font-weight: 500;
}
}
.right {
display: flex;
align-items: center;
justify-content: flex-end;
padding-right: 30rpx;
image {
width: 40rpx;
height: 40rpx;
}
}
.border {
position: absolute;
bottom: 0;
right: 0;
width: 550rpx;
height: 2rpx;
background: #f0f1f7;
}
.grid-border {
display: none;
}
}
}
.roll-links {
width: 100%;
height: 650rpx;
.swiper {
width: 100%;
height: 500rpx;
position: relative;
box-sizing: border-box;
.position-item {
position: absolute;
left: -160rpx;
top: 0;
}
.first-item,
.second-item,
.more {
position: relative;
border-radius: 20rpx;
height: 500rpx;
overflow: hidden;
image {
position: absolute;
top: 0;
left: 0;
width: 100%;
height: 100%;
}
.swiper-text-box {
position: relative;
width: 100%;
height: 100%;
z-index: 9;
box-sizing: border-box;
padding: 50rpx 0 0 50rpx;
.swiper-text {
display: flex;
flex-direction: column;
margin-bottom: 40rpx;
.swiper-title {
display: block;
color: rgba(255, 255, 255, 0.5);
font-size: 25rpx;
margin-bottom: 15rpx;
}
.swiper-amount {
font-size: 40rpx;
font-weight: 700;
color: #ffffff;
}
}
}
}
.first-item {
width: 500rpx;
margin-left: 50rpx;
}
.second-item {
width: 570rpx;
display: flex;
image {
width: 325rpx;
border-radius: 20rpx;
}
.more {
width: 330rpx;
display: flex;
flex-direction: column;
align-items: center;
justify-content: center;
background: #fff;
text {
color: #797b80;
}
}
}
}
}
.header {
box-sizing: border-box;
//height: 335rpx;
width: 650rpx;
background-color: #ffffff;
border-radius: 20rpx;
margin: 20rpx auto;
margin-bottom: 0;
overflow: hidden;
.date-filter {
box-sizing: border-box;
height: 90rpx;
width: 100%;
// background-color: #18BC37;
//border-bottom: 2rpx solid #FAFBFC;
display: flex;
justify-content: space-between;
align-items: center;
padding-left: 20rpx;
padding-right: 20rpx;
padding-top: 20rpx;
// padding-bottom: 20rpx;
.date {
//width: 92rpx;
//height: 53rpx;
display: flex;
justify-content: center;
align-items: center;
padding: 10rpx 10rpx;
}
.close {
height: 60rpx;
width: 60rpx;
// background-color: #007AFF;
//transform: rotate(180deg);
image {
height: 60rpx;
width: 60rpx;
transition: transform 0.5s;
}
display: flex;
flex-direction: row;
justify-content: center;
align-items: center;
}
}
.time-picker {
box-sizing: border-box;
width: 610rpx;
height: 72rpx;
border-radius: 10rpx;
background: #f5f6fc;
margin: 36rpx auto;
display: flex;
justify-content: space-between;
align-items: center;
padding-left: 20rpx;
padding-right: 20rpx;
font-size: 25rpx;
overflow: hidden;
}
}
.statistics {
box-sizing: border-box;
overflow: hidden;
width: 650rpx;
height: 368rpx;
border-radius: 20rpx;
background: #3981ff;
border-radius: 20rpx 20rpx 0 0;
margin: 0 auto;
display: flex;
flex-direction: column;
padding: 50rpx 35rpx 50rpx 35rpx;
.amount {
height: 40rpx;
font-weight: 500;
font-size: 23rpx;
color: rgba(255, 255, 255, 0.6);
}
.money {
// background-color: #18BC37;
display: flex;
align-items: center;
font-weight: bold;
font-size: 70rpx;
color: #fff;
padding: 10rpx 0 50rpx 0;
}
.other {
height: 100rpx;
width: 100%;
// background-color: #18BC37;
display: flex;
justify-content: space-between;
.deal-amount {
height: 85%;
width: 30%;
//background: #555500;
display: flex;
flex-direction: column;
justify-content: space-between;
align-items: flex-start;
font-weight: 500;
font-size: 23rpx;
color: rgba(255, 255, 255, 0.6);
}
.refund {
@extend .deal-amount;
}
.refund-amount {
@extend .deal-amount;
}
}
}
.footer {
height: 1rpx;
width: 100%;
margin-top: 30rpx;
}
}
</style>