This commit is contained in:
wtq
2025-11-13 14:42:30 +08:00
commit 7d879ff3bc
349 changed files with 54558 additions and 0 deletions

View File

@@ -0,0 +1,455 @@
/**
* 营业数据
*/
import { onLoad } from "@dcloudio/uni-app";
import { getStorage } from "@/utils/storage";
import toast from "@/utils/toast";
import { computed, onBeforeUnmount, ref } from "vue";
import { store } from '@/store'
import useGlobalFunc from "@/composables/useGlobalFunc";
import { clearList, timeFormatD } from "@/utils/tools";
import configCms from "@/utils/configCms"
import merchant from '@/api/https/merchant'
export default function orderRealTime() {
const { globGetToDay } = useGlobalFunc()
const { singleCalcPrice } = useGlobalFunc()
/*************************************************
* 接收参数
*/
const isNotQuote = ref<boolean>(true)
const isZero = ref<boolean>(true)
const isUpperfif = ref<boolean>(true)
onLoad((options) => {
_vendorPayPercentage.value = options!._vendorPayPercentage
isNotQuote.value = JSON.parse(options!.isNotQuote)
isZero.value = JSON.parse(options!.isZero)
isUpperfif.value = JSON.parse(options!.isUpperfif)
})
/**
* 获取平台数据-平台名称
*/
onLoad(async () => {
await getPlatformList()
await tabClick(0)
await getFromTime() // 获取营业概况数据
await getToDay() // 获取今日数据
})
/*************************************************
* 平台列表数据
*/
const vendorArr = ref<Array<AnyObject>>([
{
vendorID: -1,
vendorStoreName: '全部'
}
])
/*************************************************
* 切换平台更新数据
*/
const pickValue = ref<string>('0') // 代码高亮
async function handleVendorChange(e: AnyObject) {
pickValue.value = e.detail.value
await changeStatus(active.value)
await getFromTime() // 获取营业概况数据
await getToDay() // 获取今日数据
}
/*************************************************
* 获取今日数据
*/
const toDaySaleInfo = ref<AnyObject>({})
async function getToDay() {
let fromTime = `${timeFormatD()} 00:00:00`;
let toTime = `${timeFormatD()} 23:59:59`;
let data = {
storeIDs: `[${parseInt(getStorage("storeID"))}]`,
fromTime,
toTime,
statuss:JSON.stringify([110])
};
let toDay = await globGetToDay(data)
if (!toDay) toDay = []
toDaySaleInfo.value = filterSaleInfo(toDay)
}
/*************************************************
* 分时间段获取营业数据-营业概况
*/
const saleInfo = ref<AnyObject>({})
async function getFromTime() {
uni.vibrateShort({})
let data = {
storeIDs: `[${parseInt(getStorage("storeID"))}]`,
fromTime: `${fromTime.value} 00:00:00`,
toTime: `${toTime.value} 23:59:59`,
statuss:JSON.stringify([110]) // 只统计已完成的订单,不包含取消单
}
let toDay = await globGetToDay(data)
if (!toDay) toDay = []
saleInfo.value = filterSaleInfo(toDay)
}
/*************************************************
* 过滤今日营业数据
*/
const isAllplatfrom = ref<boolean>(true)
const checkVendorID = ref<number>(0)
function filterSaleInfo(arr: Array<AnyObject>) {
let vendorID = vendorArr.value[+pickValue.value].vendorID
checkVendorID.value = vendorID
let actualPayPrice = 0
let realEarningPrice = 0
let earningPrice = 0
let shopPrice = 0
let count = 0
let cancelCount = 0
let afsPrice = 0
let afsCount = 0
let waybillTipMoney = 0
let distanceFreightMoney = 0
let actualFee = 0
let serverFee = 0 // 报价门店,管理费
// 全部
if (vendorID === -1) {
arr.forEach((item) => {
waybillTipMoney += item.waybillTipMoney
serverFee += item.serverFee
if (item.status === 110) {
distanceFreightMoney += item.distanceFreightMoney
realEarningPrice += item.platformSettlement
earningPrice += item.earningPrice
shopPrice += item.shopPrice
count += item.count
actualPayPrice += item.actualPayPrice
actualFee += item.actualFee
} else if (item.status === 115) {
cancelCount += item.count
} else if (item.status < 0) {
afsPrice += item.earningPrice
afsCount += item.count
}
})
isAllplatfrom.value = true
} else {
// 走平台过滤
arr.forEach((item) => {
waybillTipMoney += item.waybillTipMoney
serverFee += item.serverFee
if (item.status === 110 && item.vendorID === vendorID) {
distanceFreightMoney += item.distanceFreightMoney
realEarningPrice += item.platformSettlement
earningPrice += item.earningPrice
shopPrice += item.shopPrice
count += item.count
actualPayPrice += item.actualPayPrice
actualFee += +item.actualFee
}
if (item.status === 115 && item.vendorID === vendorID) {
cancelCount += item.count
}
if (item.status < 0 && item.vendorID === vendorID) {
afsPrice += item.earningPrice
afsCount += item.count
}
})
isAllplatfrom.value = false
}
actualFee = +(actualFee / 100).toFixed(2)
return {
actualPayPrice,
earningPrice,
shopPrice,
count,
cancelCount,
afsPrice,
afsCount,
waybillTipMoney,
distanceFreightMoney,
realEarningPrice,
actualFee,
serverFee
}
}
/*************************************************
* 获取门店信息
*/
const _vendorPayPercentage = ref<number>(0)
async function getStoreVendorMaps(vendorID: number) {
let data = {
storeID: getStorage('storeID'),
vendorID: vendorID
}
let res = await merchant.get_store_vendor_maps(data)
if (res.code == 0) {
let data = res.data
_vendorPayPercentage.value = data[0].vendorPayPercentage
} else {
_vendorPayPercentage.value = 0
}
}
/*************************************************
* 平台名称
*/
async function getPlatformList() {
let data = {
storeID: getStorage('storeID')
}
let platformRes = await merchant.get_stores(data)
if (platformRes.code == 0) {
let serveInfo:AnyObject = configCms.serveInfo
let storeData = platformRes.data.stores[0]
storeData.StoreMaps.forEach((element: AnyObject) => {
vendorArr.value.push({
vendorID: element.vendorID,
vendorStoreName: `${serveInfo.vendorName[element.vendorID] ? serveInfo.vendorName[element.vendorID] : '未知平台'}`,
vendorPayPercentage: element.vendorPayPercentage
})
});
} else {
toast('平台数据异常', 2)
}
}
/**
* 打开说明窗口
*/
function explain() {
uni.jxAlert({
title: '说明',
content: `实际收入: 从当日0时到当前时间的实际获得不再扣点已扣除售后退款\r\n 有效订单: 统计时间内,已支付订单中未被取消的订单数量。\r\n取消订单: 统计时间内,取消订单的数量。\r\n订单取消率: 取消订单/(有效订单 + 取消订单)`,
})
}
/*************************************************
* 营业状况筛选列表
*/
const tabArr = ref<Array<string>>(["昨日", "近7日", "近30日", "自定义"])
/*************************************************
* 营业概况筛选
*/
const active = ref<number>(0)
const fromTime = ref('')
const toTime = ref('')
async function tabClick(index: number) {
switch (index) {
case 0:
fromTime.value = `${timeFormatD(+new Date().getTime() - 1000 * 60 * 60 * 24)}`
toTime.value = `${timeFormatD(+new Date().getTime() - 1000 * 60 * 60 * 24)}`
break
case 1:
fromTime.value = `${timeFormatD(+new Date().getTime() - 1000 * 60 * 60 * 24 * 6)}`
toTime.value = timeFormatD()
break
case 2:
fromTime.value = `${timeFormatD(+new Date().getTime() - 1000 * 60 * 60 * 24 * 29)}`
toTime.value = timeFormatD()
break
case 3:
fromTime.value = `${timeFormatD(+new Date().getTime() - 1000 * 60 * 60 * 24 * 6)}`
toTime.value = timeFormatD()
break
}
if (active.value == index) return
active.value = index
await changeStatus(active.value)
await getFromTime() // 营业概况数据
}
/*************************************************
* 自定义开始日期
*/
function fnChangeFrom(e: AnyObject) {
fromTime.value = e.detail.value
}
// 自定义结束时间
function fnChangeTo(e: AnyObject) {
toTime.value = e.detail.value
}
/*************************************************
* 实际收益
*/
const isPointStore = computed(() => {
return store.getters['storeInfo/isPointStore']
})
const price = computed(() => {
if (isYesterday.value) {
if (saleInfo.value.count) {
//订单量不为0
//单平台
let calcData = {
vendorPayPercentage: _vendorPayPercentage.value,
actualPayPrice: saleInfo.value.actualPayPrice,
shopPrice: saleInfo.value.shopPrice,
isPointStore: isPointStore.value,
earningPrice: saleInfo.value.earningPrice,
}
return singleCalcPrice(calcData)
} else {
//订单量为0
return 0
}
} else if (!isYesterday.value) {
if (isPointStore.value) {
//扣点
return saleInfo.value.realEarningPrice
? (saleInfo.value.realEarningPrice / 100).toFixed(2)
: 0
} else {
//报价
return saleInfo.value.shopPrice
? (saleInfo.value.shopPrice / 100).toFixed(2)
: 0
// console.log(saleInfo.value.earningPrice,'11111111',saleInfo.value)
// console.log('eeeeeeee')
// return saleInfo.value.earningPrice
// ? (saleInfo.value.earningPrice / 100).toFixed(2)
// : 0
}
}
})
/*************************************************
* 结算类型
*/
const vendortitle = computed(() => {
if (isYesterday.value) {
if (isPointStore.value) {
return '实际支付'
} else {
if (
_vendorPayPercentage.value != 0 &&
_vendorPayPercentage.value < 50
) {
//扣点
return '实际支付'
} else {
//报价
return '实际收入'
}
}
} else {
if (isPointStore.value) {
//扣点
return '平台结算'
} else {
//报价
return '实际收入'
}
}
})
/*************************************************
* 获取判断条件
*/
const isYesterday = ref<boolean>(true)
async function changeStatus(index: number) {
await getStoreVendorMaps(checkVendorID.value)
index == 0 ? (isYesterday.value = true) : (isYesterday.value = false)
}
/*************************************************
* 配送小费
*/
const waybillTipMoney = computed(() => {
return saleInfo.value.waybillTipMoney
? (saleInfo.value.waybillTipMoney / 100).toFixed(2)
: '0.00'
})
/*************************************************
* 扣点:远距离配送费
* 报价:服务费
*/
const distanceFreightMoney = computed(() => {
if(isPointStore.value){
// 扣点
return saleInfo.value.distanceFreightMoney
? (saleInfo.value.distanceFreightMoney / 100).toFixed(2)
: '0.00'
}else{
// 报价
return saleInfo.value.serverFee
? (saleInfo.value.serverFee / 100).toFixed(2)
: '0.00'
}
})
/*************************************************
* 售后退款
*/
const afsPrice = computed(() => {
return saleInfo.value.afsPrice
? (saleInfo.value.afsPrice / 100).toFixed(2)
: '0.00'
})
/*************************************************
* 收尾工作
*/
onBeforeUnmount(() => {
clearList()
})
return {
vendorArr, // 平台列表
handleVendorChange, // 切换平台
explain, // 今日订单说明窗口
tabArr, // 营业概况选择列表
active, // 列表高亮
tabClick, // 营业概况筛选
fromTime, // 开始时间
toTime, // 结束时间
saleInfo, // 今日概况数据
fnChangeFrom, // 自定义开始时间
fnChangeTo, // 自定义结束时间
pickValue, // 平台内容
getFromTime, // 查询订单
toDaySaleInfo, // 今日订单数据
isAllplatfrom,
isNotQuote,
_vendorPayPercentage,
isZero,
isUpperfif,
price,
vendortitle,
waybillTipMoney,
distanceFreightMoney,
afsPrice,
isPointStore
}
}