Files
zsw-jx-store/src/subPages/merchantChild/orderRealTime/orderRealTime.ts
2025-12-08 11:23:42 +08:00

455 lines
14 KiB
TypeScript
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
/**
* 营业数据
*/
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
}
}