366 lines
9.4 KiB
Vue
366 lines
9.4 KiB
Vue
<template>
|
|
<!-- 自定义工作台头部 -->
|
|
<NavBar :count="state.count" :title="'工作台'"></NavBar>
|
|
<view
|
|
class="contaner"
|
|
:style="{
|
|
marginTop: navbarRect.height + navbarRect.top + 'px',
|
|
height: navbarRect.safeHeight + 'px',
|
|
}"
|
|
>
|
|
<!-- 筛选条件 -->
|
|
<view class="time-filter">
|
|
<up-text
|
|
v-for="item in timeList"
|
|
:key="item.id"
|
|
:text="item.name"
|
|
:color="`${
|
|
stateNew.filterTimeValue === item.name ? '#00DCEE' : '#999999'
|
|
}`"
|
|
:size="'32rpx'"
|
|
@click="handleFilter(item)"
|
|
></up-text>
|
|
</view>
|
|
<!-- 数据汇总面板 -->
|
|
<view class="summary">
|
|
<view class="panel" v-for="(item, index) in summaryList" :key="index">
|
|
<image
|
|
:src="`${url}/static/pages/${item.imgUrl}`"
|
|
/>
|
|
<view class="box">
|
|
<view class="num">{{ formatMoney(item.num, 2) }}</view>
|
|
<view class="title">{{ item.title }}</view>
|
|
</view>
|
|
</view>
|
|
</view>
|
|
<!-- 其他核心模块 -->
|
|
<view class="core-content">
|
|
<view>
|
|
<text class="title">收货入库</text>
|
|
<up-grid :border="false">
|
|
<up-grid-item
|
|
v-for="(item, index) in stateNew.receiveList"
|
|
:key="index"
|
|
@click="handleClick(item)"
|
|
>
|
|
<up-badge
|
|
max="99"
|
|
:value="item.num"
|
|
:absolute="true"
|
|
:offset="[10, 10]"
|
|
></up-badge>
|
|
<up-image
|
|
:src="`${url}/static/110/home/${item.icon}`"
|
|
width="184rpx"
|
|
height="162rpx"
|
|
></up-image>
|
|
<view class="name">{{ item.title }}</view>
|
|
</up-grid-item>
|
|
</up-grid>
|
|
</view>
|
|
<view style="margin: 30rpx 0rpx">
|
|
<text class="title title-shipment">出货销售</text>
|
|
<up-grid :border="false">
|
|
<up-grid-item
|
|
v-for="(item, index) in stateNew.shipmentList"
|
|
:key="index"
|
|
@click="handleClick(item)"
|
|
>
|
|
<up-badge
|
|
max="99"
|
|
:value="item.num"
|
|
:absolute="true"
|
|
:offset="[10, 10]"
|
|
></up-badge>
|
|
<up-image
|
|
:src="`${url}/static/110/home/${item.icon}`"
|
|
width="184rpx"
|
|
height="162rpx"
|
|
></up-image>
|
|
<view class="name">{{ item.title }}</view>
|
|
</up-grid-item>
|
|
</up-grid>
|
|
</view>
|
|
</view>
|
|
<!-- <up-empty
|
|
v-if="
|
|
!isShowModule(receiveList.concat(shipmentList)) &&
|
|
!isShowModule(appList)
|
|
"
|
|
mode="permission"
|
|
icon="http://cdn.uviewui.com/uview/empty/permission.png"
|
|
:text="'暂无相关权限, 请联系管理员'"
|
|
>
|
|
</up-empty> -->
|
|
</view>
|
|
|
|
<TabBar />
|
|
</template>
|
|
|
|
<script setup lang="ts">
|
|
import { timeList, homeInitData, url } from "@/utils/data";
|
|
import { useMemberStore } from "@/store/index";
|
|
import {
|
|
MessageApi,
|
|
ProfileApi,
|
|
ReceiveApi,
|
|
ShipmentApi,
|
|
} from "@/services/index";
|
|
import { formatMoney } from "@/utils";
|
|
import { onBackPress, onShow } from "@dcloudio/uni-app";
|
|
import pinia from "@/store";
|
|
import { timeRange } from "@/utils";
|
|
const store = useMemberStore(pinia);
|
|
const navbarRect = reactive({
|
|
height: 42,
|
|
top: 48,
|
|
safeHeight: 500,
|
|
});
|
|
|
|
const getSafeHeight = () => {
|
|
// #ifdef APP-PLUS || MP-WEIXIN
|
|
uni.getSystemInfo({
|
|
success: (res) => {
|
|
navbarRect.safeHeight =
|
|
res.windowHeight - 50 - navbarRect.top - navbarRect.height;
|
|
},
|
|
});
|
|
// #endif
|
|
};
|
|
|
|
const stateNew = reactive({
|
|
filterTimeValue: "本月",
|
|
receiveList: homeInitData.receiveList,
|
|
shipmentList: homeInitData.shipmentList,
|
|
startTime: timeRange(3).startTime + " 00:00:00",
|
|
endTime: timeRange(3).endTime + " 23:59:59",
|
|
});
|
|
const handleFilter = (item: { id: number; name: string }) => {
|
|
stateNew.filterTimeValue = item.name;
|
|
const range = timeRange(item.id);
|
|
stateNew.startTime = range.startTime + " 00:00:00";
|
|
stateNew.endTime = range.endTime + " 23:59:59";
|
|
// 获取数据面板信息
|
|
getSummery();
|
|
};
|
|
|
|
const summaryList = reactive([
|
|
{
|
|
title: "总收货/KG",
|
|
num: 0,
|
|
imgUrl: "01.png",
|
|
},
|
|
{
|
|
title: "收货总支出/元",
|
|
num: 0,
|
|
imgUrl: "02.png",
|
|
},
|
|
{
|
|
title: "总出货/KG",
|
|
num: 0,
|
|
imgUrl: "03.png",
|
|
},
|
|
{
|
|
title: "出货总收入/元",
|
|
num: 0,
|
|
imgUrl: "04.png",
|
|
},
|
|
]);
|
|
const state = reactive({
|
|
count: 0,
|
|
});
|
|
|
|
// H获取数据面板信息
|
|
const getSummery = () => {
|
|
// 收货入库相关信息
|
|
ReceiveApi.countOrderByMonth({
|
|
startTime: stateNew.startTime,
|
|
endTime: stateNew.endTime,
|
|
}).then((res) => {
|
|
if (res.code === 200) {
|
|
const {
|
|
totalReceipt,
|
|
totalExpenditure,
|
|
toBePriced,
|
|
toBeTare,
|
|
audit,
|
|
toBePaid,
|
|
} = res.data;
|
|
summaryList[0].num = totalReceipt;
|
|
summaryList[1].num = totalExpenditure;
|
|
stateNew.receiveList[0].num = toBePriced;
|
|
stateNew.receiveList[1].num = toBeTare;
|
|
stateNew.receiveList[2].num = audit;
|
|
stateNew.receiveList[3].num = toBePaid;
|
|
}
|
|
});
|
|
// 出货相关信息
|
|
ShipmentApi.countOrderByMonth({
|
|
startTime: stateNew.startTime,
|
|
endTime: stateNew.endTime,
|
|
}).then((res) => {
|
|
if (res.code === 200) {
|
|
const {
|
|
totalShipment,
|
|
totalIncome,
|
|
toBeShipped,
|
|
roughWeight,
|
|
shipmentReview,
|
|
toBeSettled,
|
|
} = res.data;
|
|
summaryList[2].num = totalShipment;
|
|
summaryList[3].num = totalIncome;
|
|
stateNew.shipmentList[0].num = toBeShipped;
|
|
stateNew.shipmentList[1].num = roughWeight;
|
|
stateNew.shipmentList[2].num = shipmentReview;
|
|
stateNew.shipmentList[3].num = toBeSettled;
|
|
}
|
|
});
|
|
};
|
|
const init = () => {
|
|
// 消息统计
|
|
MessageApi.getUserNoticeInfoNumVo().then((res: any) => {
|
|
if (res.code === 200) {
|
|
state.count = res.data.unreadNoticeNum;
|
|
}
|
|
});
|
|
// 获取数据面板信息
|
|
getSummery();
|
|
// 重新获取权限
|
|
ProfileApi.getUserInfo().then((res: any) => {
|
|
if (res.code === 200) {
|
|
store.setProfile({ ...res.data, token: store.profile.token });
|
|
}
|
|
});
|
|
};
|
|
const handleClick = (item: any) => {
|
|
uni.navigateTo({
|
|
url: item.path, // 要跳转到的页面路径
|
|
});
|
|
};
|
|
onMounted(() => {
|
|
// #ifdef MP-WEIXIN
|
|
let menuButtonInfo = uni.getMenuButtonBoundingClientRect();
|
|
navbarRect.height = menuButtonInfo.height;
|
|
navbarRect.top = menuButtonInfo.top;
|
|
getSafeHeight();
|
|
// #endif
|
|
// #ifndef MP-WEIXIN
|
|
const systemInfo = uni.getSystemInfoSync();
|
|
navbarRect.safeHeight = (systemInfo.safeArea as any).height;
|
|
getSafeHeight();
|
|
// #endif
|
|
});
|
|
onShow(() => {
|
|
if (store.profile?.token) {
|
|
init();
|
|
} else {
|
|
// 当应用启动时,检查是否已显示过启动页
|
|
if (Boolean(uni.getStorageSync("hasLaunched"))) {
|
|
// 如果已显示过,不再显示启动页
|
|
uni.reLaunch({
|
|
url: "/pagesLogin/login/index",
|
|
});
|
|
} else {
|
|
// 如果未显示过,标记为已显示,并保存到存储
|
|
uni.setStorageSync("hasLaunched", true);
|
|
uni.reLaunch({ url: "/pagesLaunch/index" });
|
|
}
|
|
}
|
|
});
|
|
</script>
|
|
|
|
<style lang="scss" scoped>
|
|
.contaner {
|
|
padding: 17rpx;
|
|
/* #ifdef H5 */
|
|
height: calc(100vh - 67px - 70px) !important;
|
|
/* #endif */
|
|
overflow: auto;
|
|
.time-filter {
|
|
display: flex;
|
|
text-align: center;
|
|
align-items: center;
|
|
justify-content: center;
|
|
padding: 16rpx 130rpx;
|
|
> view {
|
|
justify-content: center;
|
|
}
|
|
}
|
|
|
|
.summary {
|
|
.panel {
|
|
width: 50%;
|
|
display: inline-block;
|
|
height: 155rpx;
|
|
position: relative;
|
|
// background: url('/static/img/01.png');
|
|
image {
|
|
width: 100%;
|
|
height: 100%;
|
|
}
|
|
.box {
|
|
position: absolute;
|
|
padding: 20rpx 0rpx 0rpx 40rpx;
|
|
margin-top: -155rpx;
|
|
.num {
|
|
font-size: 40rpx;
|
|
font-family: Source Han Sans CN;
|
|
font-weight: bold;
|
|
color: #ffffff;
|
|
}
|
|
.title {
|
|
font-size: 24rpx;
|
|
font-family: Source Han Sans CN;
|
|
font-weight: 400;
|
|
color: #ffffff;
|
|
}
|
|
}
|
|
}
|
|
}
|
|
|
|
.core-content {
|
|
padding: 22rpx;
|
|
background: #ffffff;
|
|
box-shadow: 0rpx 0rpx 10rpx 0rpx rgba(5, 68, 37, 0.12);
|
|
border-radius: 13rpx;
|
|
position: relative;
|
|
.title {
|
|
font-size: 28rpx;
|
|
font-family: Source Han Sans CN;
|
|
font-weight: 500;
|
|
color: #000000;
|
|
padding-left: 20rpx;
|
|
&::before {
|
|
content: "";
|
|
position: absolute;
|
|
margin-top: 6px;
|
|
margin-left: -20rpx;
|
|
width: 6rpx;
|
|
height: 26rpx;
|
|
background: #22d594;
|
|
box-shadow: 0rpx 0rpx 10rpx 0rpx rgba(5, 68, 37, 0.12);
|
|
border-radius: 3rpx;
|
|
}
|
|
}
|
|
.title-shipment {
|
|
&::before {
|
|
content: "";
|
|
background: #ff782b;
|
|
}
|
|
}
|
|
.name {
|
|
font-weight: 400;
|
|
font-size: 28rpx;
|
|
color: #000000;
|
|
}
|
|
::v-deep.u-grid-item {
|
|
padding: 22rpx 0rpx 0rpx 0rpx;
|
|
}
|
|
::v-deep.u-badge {
|
|
z-index: 999;
|
|
}
|
|
}
|
|
}
|
|
</style>
|