update: 版本迭代

This commit is contained in:
admin 2024-07-07 09:20:57 +08:00
parent e438c79708
commit 8470b20396
57 changed files with 1986 additions and 849 deletions

View File

@ -104,7 +104,7 @@ const gridList2 = reactive([
isBefore: false,
},
{
name: "货款金额",
name: "实际付款",
enName: "totalPrice",
num: "",
unit: "元",

View File

@ -48,7 +48,7 @@
:text="'暂无相关权限, 请联系管理员'"
>
</up-empty>
<TabBar></TabBar>
<TabBar :select="'统计'"></TabBar>
</template>
<script setup lang="ts">
import Box from "@/components/Box/index.vue";

View File

@ -87,7 +87,7 @@ const gridList1 = reactive<any>([
isBefore: false,
},
{
name: "货款金额",
name: "实际付款",
enName: "balanceTotalPrice",
num: "",
unit: "元",

View File

@ -1,5 +1,5 @@
<template>
<u-popup :show="show" mode="right" :closeable="true" @close="handleClose">
<u-popup :show="show" mode="bottom" :round="10" :closeable="true" @close="handleClose">
<view class="c-dialog-filter">
<view class="title">{{ isShipment ? "出货" : "收货" }}产品</view>
<view class="dialog-product-layout">

View File

@ -0,0 +1,242 @@
<template>
<u-popup :show="show" mode="right" :closeable="true" @close="handleClose">
<view class="c-dialog-filter">
<view class="title">{{isShipment? '客户' : '供应商'}}筛选</view>
<view class="search">
<u-search
:placeholder="`请输入${isShipment? '客户' : '供应商'}名称 / 卡号搜索`"
v-model="keyword"
@search="handleSearch()"
@clear="handleSearch()"
></u-search>
</view>
<view class="dialog-product-layout">
<!-- 自定义索引列表 -->
<view class="address-book-container">
<!-- 左侧通讯录 -->
<scroll-view
class="scroll-container"
:scroll-y="true"
:scroll-into-view="toView"
:scroll-with-animation="true"
>
<view
class="address-book"
v-for="(item, index) in addressBook"
:key="index"
:id="item.name"
>
<view class="address-book-index">{{ item.name }}</view>
<view
class="contact-container"
v-for="(cItem, index) in item.list"
:key="index"
>
<!-- <img
class="contact-img"
src="http://www.lixia.gov.cn/picture/0/s_97b76c734a6f40f8abba95615cbff1e1.jpg"
alt=""
/> -->
<view
class="contact-detail-container"
@click="handleClick(cItem)"
>
<view class="contact-name">{{ cItem.name }}</view>
<view class="contact-address">{{ cItem.cardCode }}</view>
<!-- <view class="contact-phone">{{ item.phone }}</view> -->
</view>
</view>
</view>
</scroll-view>
<!-- 右侧字母导航条 -->
<view class="letter-nav">
<view
class="item"
:class="{ active: toView === item }"
v-for="(item, index) in indexList"
:key="index"
@click="toSelectIndex(item)"
>{{ item }}</view
>
</view>
</view>
</view>
</view>
</u-popup>
</template>
<script setup lang="ts">
import { CustomerApi, SupplierApi } from "@/services";
const props = defineProps<{
show: boolean;
isShipment: boolean;
}>();
const emit = defineEmits(["handleDialog", "changeUser"]);
const handleClose = () => {
emit("handleDialog", false);
};
const keyword = ref("");
const indexList = [
"A",
"B",
"C",
"D",
"E",
"F",
"G",
"H",
"I",
"J",
"K",
"L",
"M",
"N",
"O",
"P",
"Q",
"R",
"S",
"T",
"U",
"V",
"W",
"X",
"Y",
"Z",
"#",
];
const toView = ref("");
const addressBook = ref();
// [
// {
// id: "A",
// data: [
// {
// zh_title: "",
// en_title: "aa",
// address: "910289591",
// phone: "111111",
// },
// {
// zh_title: "",
// en_title: "aaaaa",
// address: "ALL",
// phone: "222222",
// },
// ],
// }
// ];
const toSelectIndex = (item: any) => {
toView.value = item;
};
const handleClick = (item: any) => {
emit("changeUser", item);
emit("handleDialog", false);
};
const handleSearch = () => {
getList();
};
const getList = () => {
if (props.isShipment) {
CustomerApi.getCustomUserListLettera({ name: keyword.value }).then(
(res: any) => {
if (res.code === 200) {
addressBook.value = res.data.reduce((pre: any, curr: any) => {
if (curr.list.length > 0) {
pre.push(curr);
}
return pre;
}, []);
}
}
);
} else {
SupplierApi.getSupplierUserListLettera({ name: keyword.value }).then(
(res: any) => {
if (res.code === 200) {
addressBook.value = res.data.reduce((pre: any, curr: any) => {
if (curr.list.length > 0) {
pre.push(curr);
}
return pre;
}, []);
}
}
);
}
};
watch(
() => props.isShipment,
(newValue, oldValue) => {
getList();
}
);
onMounted(() => {
getList();
});
</script>
<style lang="scss" scoped>
.c-dialog-filter {
width: 95vw;
padding: 25rpx;
.title {
font-weight: 500;
font-size: 32rpx;
color: #000000;
text-align: center;
}
.search {
margin: 30rpx 0px;
}
}
.dialog-product-layout {
height: 80vh;
.address-book-container {
height: 100%;
}
.address-book-index {
font-size: 24rpx;
}
.contact-img {
width: 20px;
height: 20px;
}
.scroll-container {
height: 100%;
}
.letter-nav {
position: fixed;
right: 25rpx;
top: 100px;
font-size: 22rpx;
text-align: center;
.item:hover,
.active {
color: $u-primary;
}
}
.contact-container {
display: flex;
align-items: center;
margin: 2%;
}
.contact-detail-container {
display: flex;
align-items: center;
justify-content: space-between;
width: 80%;
font-size: 22rpx;
.contact-address {
color: rgba(0, 0, 0, 0.65);
}
}
}
</style>

View File

@ -0,0 +1,169 @@
<template>
<u-popup
:show="show"
mode="bottom"
:round="10"
:closeable="true"
@close="handleClose"
>
<view class="c-dialog">
<view class="box"><text>常用时间选择</text></view>
<view class="box-btn">
<text
v-for="(item, index) in state.statusList"
:key="index"
:class="{ active: state.currentStates === item.id }"
@click="handleSelect(item)"
>{{ item.name }}</text
></view
>
<view class="box box-border"
><text>其它时间选择</text
><text class="btn" @click="handleCustom()">自定义</text></view
>
<view v-if="showCalendar">
<view class="line"></view>
<view class="box">
<text @click="showCalendar = false">取消</text>
<text class="btn" @click="confirm()">完成</text>
</view>
<view>{{ state.startTime }} - {{ state.endTime }}</view>
<uni-calendar
:insert="true"
:lunar="true"
:start-date="'2014-1-1'"
:end-date="'2034-1-1'"
:range="true"
@change="handleChangeDate"
color="#00D2E3"
/>
</view>
</view>
</u-popup>
</template>
<script setup lang="ts">
import { formatDate, getCurrentMonthStartAndEnd, getCurrentYearStartAndEnd, timeRange } from "@/utils";
const props = defineProps<{
show: boolean;
}>();
const state = reactive<any>({
startTime: "",
endTime: "",
currentStates: -1,
statusList: [
{
id: 1,
name: "今日",
},
{
id: 2,
name: "昨日",
},
{
id: 3,
name: "本月",
},
{
id: 4,
name: "本年",
},
],
});
const emit = defineEmits(["handleDialog", "changeTime"]);
const handleClose = () => {
emit("handleDialog", false);
};
const handleCustom = () => {
showCalendar.value = true
state.currentStates = -1
}
const handleSelect = (item: any) => {
state.currentStates = item.id;
const range = timeRange(item.id)
state.startTime = range.startTime;
state.endTime = range.endTime
emit("changeTime", {startTime: state.startTime, endTime: state.endTime, name: item.name});
emit("handleDialog", false);
};
const showCalendar = ref(false);
const handleChangeDate = (v: any) => {
const time1 = v.range.before;
const time2 = v.range.after;
if (time1 && time2) {
const date1 = new Date(time1);
const date2 = new Date(time2);
if (date1 < date2) {
state.startTime = formatDate(time1, "{y}-{m}-{d}");
state.endTime = formatDate(time2, "{y}-{m}-{d}");
} else if (date1 > date2) {
state.startTime = formatDate(time2, "{y}-{m}-{d}");
state.endTime = formatDate(time1, "{y}-{m}-{d}");
} else {
state.startTime = formatDate(time1, "{y}-{m}-{d}");
state.endTime = formatDate(time2, "{y}-{m}-{d}");
}
}
};
const confirm = () => {
showCalendar.value = false
emit("changeTime", {startTime: state.startTime, endTime: state.endTime, name: '自定义'});
emit("handleDialog", false);
}
</script>
<style lang="scss" scoped>
::v-deep .u-popup__content {
box-shadow: 0rpx 0rpx 10rpx 0rpx rgba(5, 68, 37, 0.12);
border-radius: 32rpx 32rpx 0rpx 0rpx;
}
.c-dialog {
margin: 65.38rpx 44.87rpx;
font-family: Source Han Sans CN;
font-weight: 500;
font-size: 26rpx;
color: #000000;
.box-btn,
.box {
line-height: 80rpx;
display: flex;
justify-content: space-between;
}
.box-btn {
line-height: 40rpx;
margin-bottom: 30rpx;
text {
font-weight: 400;
font-size: 26rpx;
color: #999999;
width: 140rpx;
background: #ffffff;
border-radius: 6rpx;
border: 1px solid rgba(153, 153, 153, 0.64);
text-align: center;
cursor: pointer;
}
.active {
border-color: $u-primary;
color: $u-primary;
}
}
.btn {
font-weight: 500;
font-size: 26rpx;
color: $u-primary;
}
.box-border {
border-top: 1px solid rgba(233, 233, 233, 0.76);
}
.line {
height: 18rpx;
background: #f8f8f8;
}
}
</style>

View File

@ -0,0 +1,52 @@
<template>
<up-row customStyle="flex-wrap: wrap">
<up-col span="6" v-for="(item, index) in list" :key="index">
<view class="grid-item">
<up-image
:src="item.url"
:mode="'widthFix'"
:width="'100%'"
@click="showImage(index)"
></up-image>
</view>
</up-col>
</up-row>
<view v-if="list.length === 0" style="justify-content: center">
<u-empty mode="data" icon="http://cdn.uviewui.com/uview/empty/data.png">
</u-empty>
</view>
</template>
<script setup lang="ts">
import { PictureApi } from "@/services";
const props = defineProps<{
params: Object;
}>();
let list: any = ref([]);
const showImage = (index: number) => {
uni.previewImage({
urls: list.value.map((item: any) => item.url), //
current: index, //
indicator: "default", //
loop: true,
});
};
if (props.params) {
PictureApi.getAnnex(props.params as any).then((res) => {
if (res.code === 200) {
console.log(props.params);
list.value = res.data;
}
});
}
</script>
<style lang="scss" scoped>
.grid-item {
position: relative;
image {
width: 100% !important;
}
}
</style>

View File

@ -1,153 +1,107 @@
<template>
<!-- 工作台底部菜单 -->
<uni-transition mode-class="fade" :duration="100" :show="true">
<view>
<view class="tabBar">
<view class="tabMenuBox">
<view class="circle-box"></view>
<u-grid :border="false">
<u-grid-item
v-for="(item, listIndex) in tabMenuList"
:key="listIndex"
@click="item.fn"
>
<up-image
:src="`https://backend-common.obs.cn-east-3.myhuaweicloud.com/static/pages/TabMenu/${
item.icon
}${
listIndex !== 1 && currentIndex === listIndex ? '1' : ''
}.png`"
width="33rpx"
height="40rpx"
mode="aspectFill"
class="grid-icon"
></up-image>
<text
class="grid-text"
:class="{ active: currentIndex === listIndex }"
:style="{ color: listIndex === 1 ? '#fff' : '' }"
>{{ item.title }}</text
>
</u-grid-item>
</u-grid>
</view>
</view>
</view>
<up-tabbar
:value="select"
:fixed="true"
:placeholder="true"
:safeAreaInsetBottom="true"
activeColor="#00DCEE"
:border="false"
>
<up-tabbar-item
v-if="state.list.length > 0"
v-for="item in state.list"
:key="item.text"
:text="item.text"
@click="handleClick(item)"
:name="item.text"
>
<template #active-icon>
<image
:src="`/static/img/tabBar/${item.activeIcon}`"
class="custom-img"
></image>
</template>
<template #inactive-icon>
<image
:src="`/static/img/tabBar/${item.icon}`"
class="custom-img"
></image>
</template>
</up-tabbar-item>
</up-tabbar>
</uni-transition>
</template>
<script setup lang="ts">
import { onLoad } from "@dcloudio/uni-app";
const tabMenuList = reactive([
import { onLaunch } from "@dcloudio/uni-app";
const props = withDefaults(
defineProps<{
select: string;
}>(),
{
icon: "statistics",
title: "统计",
fn: () => {
const pages: any = getCurrentPages();
if (
[
"pagesStatistics/index",
"pagesHome/index",
"pagesLogin/profile/index",
].indexOf(pages[pages.length - 1].route) === 0
) {
return;
}
uni.redirectTo({
url: "/pagesStatistics/index", //
});
select: "工作台",
}
);
type tabBar = {
text: string;
icon: string;
activeIcon: string;
path: string;
};
const state = reactive({
list: [
{
text: "工作台",
icon: "home.png",
activeIcon: "home_active.png",
path: "/pagesHome/index",
},
},
{
icon: "home",
title: "工作台",
fn: () => {
const pages: any = getCurrentPages();
if (
[
"pagesStatistics/index",
"pagesHome/index",
"pagesLogin/profile/index",
].indexOf(pages[pages.length - 1].route) === 1
) {
return;
}
uni.redirectTo({
url: "/pagesHome/index", //
});
{
text: "统计",
icon: "count.png",
activeIcon: "count_active.png",
path: "/pagesStatistics/index",
},
},
{
icon: "profile",
title: "我的",
fn: () => {
const pages: any = getCurrentPages();
if (
[
"pagesStatistics/index",
"pagesHome/index",
"pagesLogin/profile/index",
].indexOf(pages[pages.length - 1].route) === 2
) {
return;
}
uni.redirectTo({
url: "/pagesLogin/profile/index", //
});
{
text: "配置",
icon: "config.png",
activeIcon: "config_active.png",
path: "/pagesHome/index1",
},
},
]);
{
text: "我的",
icon: "profile.png",
activeIcon: "profile_active.png",
path: "/pagesLogin/profile/index",
},
],
});
const handleClick = (item: tabBar) => {
uni.reLaunch({
url: item.path, //
});
};
const currentIndex = ref(1);
onLoad(() => {
const pages: any = getCurrentPages();
currentIndex.value = [
"pagesStatistics/index",
"pagesHome/index",
"pagesLogin/profile/index",
].indexOf(pages[pages.length - 1].route);
onLaunch(() => {
//tabBar
uni.hideTabBar();
});
</script>
<style lang="scss" scoped>
.tabBar {
background: url("https://backend-common.obs.cn-east-3.myhuaweicloud.com/static/pages/TabMenu/bg.png");
height: 140rpx;
background-size: cover;
position: fixed;
width: 100%;
bottom: 0px;
.tabMenuBox {
padding-top: 30rpx;
font-size: 26rpx;
font-weight: 400;
color: #999999;
.grid-text {
margin-top: 10rpx;
}
.circle-box {
width: 154rpx;
height: 154rpx;
background: linear-gradient(0deg, #1992ef, #00f6ff);
box-shadow: 0rpx 0rpx 10rpx 0rpx rgba(0, 50, 100, 0.12);
border-radius: 50%;
font-weight: 500;
color: #ffffff;
position: absolute;
margin-top: -49rpx;
margin-left: calc(50% - 78rpx);
}
.normal-box {
width: 150rpx;
height: 150rpx;
text-align: center;
}
}
.active {
color: rgba(0, 220, 238, 1);
}
.custom-img {
width: 35rpx;
height: 35rpx;
}
.u-tabbar {
background: #ffffff;
box-shadow: 0rpx 0rpx 10rpx 0rpx rgba(0, 56, 93, 0.12);
border-radius: 13rpx 13rpx 0rpx 0rpx;
}
::v-deep.u-tabbar__content {
box-shadow: 0rpx 0rpx 10rpx 0rpx rgba(0, 56, 93, 0.12);
border-radius: 13rpx 13rpx 0rpx 0rpx;
}
</style>

View File

@ -18,6 +18,13 @@
"navigationStyle": "custom", //
"navigationBarTitleText": "工作台"
}
},
{
"path": "pagesHome/index1",
"style": {
"navigationStyle": "custom", //
"navigationBarTitleText": "工作台"
}
}
//pageshttps://uniapp.dcloud.io/collocation/pages
],
@ -58,9 +65,8 @@
{
"path": "profile/index",
"style": {
"navigationStyle": "custom",
"navigationStyle": "custom",
"navigationBarTitleText": "个人中心"
}
},
{
@ -106,6 +112,12 @@
"navigationBarTitleText": "付款审核"
}
},
{
"path": "payList",
"style": {
"navigationBarTitleText": "已付款"
}
},
{
"path": "form/pricingForm",
"style": {
@ -178,7 +190,7 @@
{
"path": "index",
"style": {
"navigationStyle": "custom",
"navigationStyle": "custom",
"navigationBarTitleText": "数据统计"
}
},
@ -453,6 +465,27 @@
// ]
// }
],
"tabbar": {
"custom": true, //
"list": [
{
"pagePath": "pagesHome/index",
"text": "工作台"
},
{
"pagePath": "pagesStatistics/index",
"text": "统计"
},
{
"pagePath": "pagesHome/index",
"text": "配置"
},
{
"pagePath": "pagesLogin/profile/index",
"text": "我的"
}
]
},
"globalStyle": {
"navigationBarTextStyle": "black",
"navigationBarTitleText": "智能回收",

View File

@ -162,7 +162,7 @@ const changeProduct = (obj: any) => {
model1.order.maxPrice = obj.maxPrice;
};
//
//
const handleInput = (e: any, item: any) => {
if (
["grossWeight", "tare", "price", "balanceTotalPrice"].indexOf(item.key) > -1
@ -275,7 +275,7 @@ const rules = reactive({
"order.balanceTotalPrice": {
type: "number",
required: true,
message: "货款金额为空或输入错误",
message: "实际付款为空或输入错误",
trigger: ["blur", "change"],
},
});
@ -403,7 +403,7 @@ const formAttrList = reactive<any>([
disabled: true,
},
{
name: "货款金额",
name: "实际付款",
key: "balanceTotalPrice",
type: "input",
required: true,
@ -450,7 +450,7 @@ watch(
}
model1.order.totalPrice =
Math.floor((model1.order.price || 0) * (model1.order.netWeight || 0)) ;
// =
// =
model1.order.balanceTotalPrice = model1.order.totalPrice;
}
);

View File

@ -1,80 +0,0 @@
<template>
<view class="carousel">
<swiper
:circular="true"
:autoplay="true"
:interval="3000"
@change="onChange"
>
<swiper-item v-for="item in list" :key="item.id">
<navigator :url="item.herfUrl" hover-class="none" class="navigator">
<image mode="aspectFill" class="image" :src="item.imgUrl"></image>
</navigator>
</swiper-item>
</swiper>
<!-- 指示点 -->
<view class="indicator">
<text
v-for="(item, index) in list"
:key="item.id"
class="dot"
:class="{ active: index === activeIndex }"
></text>
</view>
</view>
</template>
<script setup lang="ts">
import type { BannerItem } from '@/types/home';
const activeIndex = ref(0)
const onChange: UniHelper.SwiperOnChange = (ev) => {
activeIndex.value = ev.detail.current
}
const props = defineProps<{
list: BannerItem[],
}>()
</script>
<style lang="scss">
:host {
display: block;
height: 280rpx;
}
/* 轮播图 */
.carousel {
// height: 100%;
position: relative;
overflow: hidden;
transform: translateY(0);
background-color: #efefef;
.indicator {
position: absolute;
left: 0;
right: 0;
bottom: 16rpx;
display: flex;
justify-content: center;
.dot {
width: 30rpx;
height: 6rpx;
margin: 0 8rpx;
border-radius: 6rpx;
background-color: rgba(255, 255, 255, 0.4);
}
.active {
background-color: #fff;
}
}
.navigator,
.image {
width: 100%;
height: 100%;
}
}
</style>

View File

@ -8,13 +8,21 @@
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>
<!-- 数据汇总面板 -->
<!-- `url('/static/img/${item.imgUrl}')`, -->
<view class="summary">
<!-- :style="{
'background': 'url(\'/static/img/'+ item.imgUrl +'\')',
backgroundSize: 'cover',
}" -->
<view class="panel" v-for="(item, index) in summaryList" :key="index">
<image
:src="`https://backend-common.obs.cn-east-3.myhuaweicloud.com/static/pages/${item.imgUrl}`"
@ -25,121 +33,55 @@
</view>
</view>
</view>
<view class="data-detail">
<view
class="p-15"
v-if="isShowModule(receiveList) || isShowModule(shipmentList)"
>
<!-- 收货入库 -->
<view v-if="isShowModule(receiveList)">
<text class="title">收货入库</text>
<view class="data-receive">
<up-row justify="flex-start" gutter="10">
<up-col
span="3"
v-for="(item, index) in receiveList"
:key="index"
@click="(item as any).fn()"
:customStyle="{
display: isShowModule([{ title: item.title }]) ? '' : 'none',
}"
>
<view
v-if="isShowModule([{ title: item.title }])"
class="box"
:style="{
backgroundColor: boxStyleList[index].backgroundColor,
borderColor: boxStyleList[index].borderColor,
boxShadow: `0rpx 7rpx 12rpx 0rpx ${boxStyleList[index].shadowColor}`,
}"
>
<view
class="num"
:style="{ color: boxStyleList[index].numColor }"
>
<text>{{ item.num }}</text>
</view>
<view class="desc">
<text>{{ item.title }}</text>
</view>
</view>
</up-col>
</up-row>
</view>
</view>
<!-- 出货入库 -->
<view v-if="isShowModule(shipmentList)">
<text class="title title-shipment">出货销售</text>
<view class="data-shipment">
<up-row justify="flex-start" gutter="10">
<up-col
span="3"
v-for="(item, index) in shipmentList"
:key="index"
@click="(item as any).fn()"
:customStyle="{
display: isShowModule([{ title: item.title }]) ? '' : 'none',
}"
>
<view
v-if="isShowModule([{ title: item.title }])"
class="box"
:style="{
backgroundColor: boxStyleList[index].backgroundColor,
borderColor: boxStyleList[index].borderColor,
boxShadow: `0rpx 7rpx 12rpx 0rpx ${boxStyleList[index].shadowColor}`,
}"
>
<view
class="num"
:style="{ color: boxStyleList[index].numColor }"
>
<text>{{ item.num }}</text>
</view>
<view class="desc">
<text>{{ item.title }}</text>
</view>
</view>
</up-col>
</up-row>
</view>
</view>
</view>
<!-- 线条 -->
<view class="line"> </view>
<!-- 常用应用 -->
<view class="app-list" v-if="isShowModule(appList)">
<view class="name">常用应用</view>
<u-grid :border="false" col="4">
<u-grid-item
v-for="(item, listIndex) in appList"
:key="listIndex"
@click="item.fn"
:customStyle="{
display: isShowModule([{ title: item.title }]) ? '' : 'none',
}"
<!-- 其他核心模块 -->
<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
v-if="isShowModule([{ title: item.title }])"
:src="`https://backend-common.obs.cn-east-3.myhuaweicloud.com/static/pagesHome/${item.icon}`"
width="60rpx"
height="60rpx"
:src="`/static/img/home/${item.icon}`"
width="184rpx"
height="162rpx"
></up-image>
<text
class="grid-text"
v-if="isShowModule([{ title: item.title }])"
>{{ item.title }}</text
>
</u-grid-item>
</u-grid>
<view class="name">{{ item.title }}</view>
</up-grid-item>
</up-grid>
</view>
<view style="margin-top: 30rpx">
<text class="title title-shipment">出货销售</text>
<up-grid :border="false">
<up-grid-item
v-for="(item, index) in stateNew.shipmentList"
:key="index"
>
<up-badge
max="99"
:value="item.num"
:absolute="true"
:offset="[10, 10]"
></up-badge>
<up-image
:src="`/static/img/home/${item.icon}`"
width="184rpx"
height="162rpx"
></up-image>
<view class="name">{{ item.title }}</view>
</up-grid-item>
</up-grid>
</view>
</view>
<!-- 当收货 出货 常用app全部为空 显示暂无权限 -->
<up-empty
<!-- <up-empty
v-if="
!isShowModule(receiveList.concat(shipmentList)) &&
!isShowModule(appList)
@ -148,13 +90,14 @@
icon="http://cdn.uviewui.com/uview/empty/permission.png"
:text="'暂无相关权限, 请联系管理员'"
>
</up-empty>
</up-empty> -->
</view>
<TabBar />
</template>
<script setup lang="ts">
import { timeList, homeInitData } from "@/utils/data";
import { useMemberStore } from "@/store/index";
import {
MessageApi,
@ -179,16 +122,21 @@ const getSafeHeight = () => {
uni.getSystemInfo({
success: (res) => {
navbarRect.safeHeight =
res.windowHeight -
uni.upx2px(80) -
navbarRect.height -
navbarRect.top -
40 -
17;
res.windowHeight - 50 - navbarRect.top - navbarRect.height;
},
});
// #endif
};
const stateNew = reactive({
filterTimeValue: "本月",
receiveList: homeInitData.receiveList,
shipmentList: homeInitData.shipmentList,
});
const handleFilter = (item: { id: number; name: string }) => {
stateNew.filterTimeValue = item.name;
};
const summaryList = reactive([
{
title: "总收货/KG",
@ -211,290 +159,6 @@ const summaryList = reactive([
imgUrl: "04.png",
},
]);
const boxStyleList = reactive([
{
borderColor: "rgba(240, 147, 107, 1)",
backgroundColor: "#FFFAF7",
shadowColor: "rgba(146,44,0,0.2)",
numColor: "rgba(240, 145, 105, 1)",
},
{
borderColor: "rgba(218, 193, 88, 1)",
backgroundColor: "#FFFEF7",
shadowColor: "rgba(138,111,0,0.2)",
numColor: "rgba(217, 193, 88, 1)",
},
{
borderColor: "rgba(88, 173, 232, 1)",
backgroundColor: "#F7FCFF",
shadowColor: "rgba(8, 82, 92, 0.20)",
numColor: "rgba(88, 173, 232, 1)",
},
{
borderColor: "rgba(82, 210, 207, 1)",
backgroundColor: "#F7FFFF",
shadowColor: "rgba(0, 106, 103, 0.20)",
numColor: "rgba(84, 212, 208, 1)",
},
]);
const receiveList = reactive([
{
title: "待定价",
num: 0,
fn: () => {
uni.navigateTo({
url: "/pagesReceive/pricing?scaleStatus=0", //
});
},
},
{
title: "待过皮重",
num: 0,
fn: () => {
uni.navigateTo({
url: "/pagesReceive/pricing?scaleStatus=1", //
});
},
},
{
title: "付款审核",
num: 0,
fn: () => {
uni.navigateTo({
url: "/pagesReceive/payReview?scaleStatus=2", //
});
},
},
{
title: "待支付",
num: 0,
fn: () => {
uni.navigateTo({
url: "/pagesReceive/payReview?scaleStatus=3", //
});
},
},
]);
const shipmentList = reactive([
{
title: "待出货",
num: 0,
fn: () => {
uni.navigateTo({
url: "/pagesShipment/shipmenting?scaleStatus=0", //
});
},
},
{
title: "待过毛重",
num: 0,
fn: () => {
uni.navigateTo({
url: "/pagesShipment/shipmenting?scaleStatus=1", //
});
},
},
{
title: "出货结算",
num: 0,
fn: () => {
uni.navigateTo({
url: "/pagesShipment/shipmentSettlement?scaleStatus=2", //
});
},
},
{
title: "待结算",
num: 0,
fn: () => {
uni.navigateTo({
url: "/pagesShipment/shipmentSettlement?scaleStatus=3", //
});
},
},
]);
const appList = reactive([
{
icon: "01.png",
title: "收货补单",
fn: () => {
uni.navigateTo({
url: "/pagesApp/receiveSpl", //
});
},
},
{
icon: "03.png",
title: "收货明细",
fn: () => {
uni.navigateTo({
url: "/pagesApp/receiveDetail", //
});
},
},
{
icon: "05.png",
title: "收货作废",
fn: () => {
uni.navigateTo({
url: "/pagesApp/receiveCl", //
});
},
},
{
icon: "07.png",
title: "供应商管理",
fn: () => {
uni.navigateTo({
url: "/pagesApp/supplierMgt", //
});
},
},
{
icon: "02.png",
title: "出货补单",
fn: () => {
uni.navigateTo({
url: "/pagesApp/shipmentSpl", //
});
},
},
{
icon: "04.png",
title: "出货明细",
fn: () => {
uni.navigateTo({
url: "/pagesApp/shipmentDetail", //
});
},
},
{
icon: "06.png",
title: "出货作废",
fn: () => {
uni.navigateTo({
url: "/pagesApp/shipmentCl", //
});
},
},
{
icon: "08.png",
title: "客户管理",
fn: () => {
uni.navigateTo({
url: "/pagesApp/customerMgt", //
});
},
},
{
icon: "11.png",
title: "收货产品",
fn: () => {
uni.navigateTo({
url: "/pagesApp/receiveProduct", //
});
},
},
{
icon: "10.png",
title: "收货分类",
fn: () => {
uni.navigateTo({
url: "/pagesApp/receiveType", //
});
},
},
{
icon: "09.png",
title: "出货产品",
fn: () => {
uni.navigateTo({
url: "/pagesApp/shipmentProduct", //
});
},
},
{
icon: "18.png",
title: "出货分类",
fn: () => {
uni.navigateTo({
url: "/pagesApp/shipmentType", //
});
},
},
{
icon: "14.png",
title: "人员管理",
fn: () => {
uni.navigateTo({
url: "/pagesApp/user", //
});
},
},
{
icon: "15.png",
title: "权限管理",
fn: () => {
uni.navigateTo({
url: "/pagesApp/role", //
});
},
},
{
icon: "17.png",
title: "供应商分类",
fn: () => {
uni.navigateTo({
url: "/pagesApp/supplierType", //
});
},
},
{
icon: "16.png",
title: "库存卡管理",
fn: () => {
uni.navigateTo({
url: "/pagesApp/stockCard", //
});
},
},
{
icon: "12.png",
title: "支付明细",
fn: () => {
uni.navigateTo({
url: "/pagesApp/paymentDetail", //
});
},
},
{
icon: "13.png",
title: "收入明细",
fn: () => {
uni.navigateTo({
url: "/pagesApp/incomeDetail", //
});
},
},
]);
// app
const isShowModule = (list: any) => {
let flag = false;
list.forEach((item: any) => {
if (store.profile.menusNameList.indexOf(item.title) > -1) {
flag = true;
return;
}
});
return flag;
};
const state = reactive({
count: 0,
});
@ -518,10 +182,10 @@ const init = () => {
} = res.data;
summaryList[0].num = totalReceipt;
summaryList[1].num = totalExpenditure;
receiveList[0].num = toBePriced;
receiveList[1].num = toBeTare;
receiveList[2].num = audit;
receiveList[3].num = toBePaid;
stateNew.receiveList[0].num = toBePriced;
stateNew.receiveList[1].num = toBeTare;
stateNew.receiveList[2].num = audit;
stateNew.receiveList[3].num = toBePaid;
}
});
//
@ -537,10 +201,10 @@ const init = () => {
} = res.data;
summaryList[2].num = totalShipment;
summaryList[3].num = totalIncome;
shipmentList[0].num = toBeShipped;
shipmentList[1].num = roughWeight;
shipmentList[2].num = shipmentReview;
shipmentList[3].num = toBeSettled;
stateNew.shipmentList[0].num = toBeShipped;
stateNew.shipmentList[1].num = roughWeight;
stateNew.shipmentList[2].num = shipmentReview;
stateNew.shipmentList[3].num = toBeSettled;
}
});
@ -551,6 +215,11 @@ const init = () => {
}
});
};
const handleClick = (item: any) => {
uni.navigateTo({
url: item.path, //
});
};
onMounted(() => {
// #ifdef MP-WEIXIN
let menuButtonInfo = uni.getMenuButtonBoundingClientRect();
@ -590,6 +259,17 @@ onShow(() => {
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%;
@ -621,12 +301,10 @@ onShow(() => {
}
}
.p-15 {
padding: 15rpx;
}
.data-detail {
margin-top: 15rpx;
// box-shadow: 0rpx 0rpx 10rpx 0rpx rgba(5, 68, 37, 0.12);
.core-content {
padding: 22rpx;
background: #ffffff;
box-shadow: 0rpx 0rpx 10rpx 0rpx rgba(5, 68, 37, 0.12);
border-radius: 13rpx;
position: relative;
.title {
@ -653,66 +331,16 @@ onShow(() => {
background: #ff782b;
}
}
.data-receive,
.data-shipment {
margin: 15rpx 15rpx 15rpx;
.box {
width: 141.15rpx;
height: 141.15rpx;
background: #fffaf7;
border: 1px solid #f0936b;
box-shadow: 0rpx 7rpx 12rpx 0rpx rgba(146, 44, 0, 0.2);
border-radius: 26rpx;
text-align: center;
vertical-align: middle;
display: table-cell;
// display: flex;
// align-items: center;
position: relative;
// top: 50%;
// transform: translateY(-50%);
.num {
font-size: 32rpx;
font-family: Source Han Sans CN;
font-weight: bold;
/* #ifdef H5 */
margin-top: 0.7rem;
/* #endif */
}
.desc {
font-size: 26rpx;
font-family: Source Han Sans CN;
font-weight: 400;
color: #000000;
}
}
.name {
font-weight: 400;
font-size: 28rpx;
color: #000000;
}
.data-shipment {
margin-bottom: 21rpx;
::v-deep.u-grid-item {
padding: 22rpx 0rpx 0rpx 0rpx;
}
.line {
height: 18rpx;
background: #f8f8f8;
}
.app-list {
padding: 15rpx;
padding-bottom: 0rpx;
.name {
text-align: center;
font-size: 28rpx;
font-family: Source Han Sans CN;
font-weight: 500;
color: #000000;
margin-bottom: 20rpx;
}
.grid-text {
margin-top: 17rpx;
margin-bottom: 20rpx;
font-size: 26rpx;
}
::v-deep.u-badge {
z-index: 999;
}
}
}

719
src/pagesHome/index1.vue Normal file
View File

@ -0,0 +1,719 @@
<template>
<!-- 自定义工作台头部 -->
<NavBar :count="state.count" :title="'工作台'"></NavBar>
<view
class="contaner"
:style="{
marginTop: navbarRect.height + navbarRect.top + 'px',
height: navbarRect.safeHeight + 'px',
}"
>
<!-- 数据汇总面板 -->
<!-- `url('/static/img/${item.imgUrl}')`, -->
<view class="summary">
<!-- :style="{
'background': 'url(\'/static/img/'+ item.imgUrl +'\')',
backgroundSize: 'cover',
}" -->
<view class="panel" v-for="(item, index) in summaryList" :key="index">
<image
:src="`https://backend-common.obs.cn-east-3.myhuaweicloud.com/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="data-detail">
<view
class="p-15"
v-if="isShowModule(receiveList) || isShowModule(shipmentList)"
>
<!-- 收货入库 -->
<view v-if="isShowModule(receiveList)">
<text class="title">收货入库</text>
<view class="data-receive">
<up-row justify="flex-start" gutter="10">
<up-col
span="3"
v-for="(item, index) in receiveList"
:key="index"
@click="(item as any).fn()"
:customStyle="{
display: isShowModule([{ title: item.title }]) ? '' : 'none',
}"
>
<view
v-if="isShowModule([{ title: item.title }])"
class="box"
:style="{
backgroundColor: boxStyleList[index].backgroundColor,
borderColor: boxStyleList[index].borderColor,
boxShadow: `0rpx 7rpx 12rpx 0rpx ${boxStyleList[index].shadowColor}`,
}"
>
<view
class="num"
:style="{ color: boxStyleList[index].numColor }"
>
<text>{{ item.num }}</text>
</view>
<view class="desc">
<text>{{ item.title }}</text>
</view>
</view>
</up-col>
</up-row>
</view>
</view>
<!-- 出货入库 -->
<view v-if="isShowModule(shipmentList)">
<text class="title title-shipment">出货销售</text>
<view class="data-shipment">
<up-row justify="flex-start" gutter="10">
<up-col
span="3"
v-for="(item, index) in shipmentList"
:key="index"
@click="(item as any).fn()"
:customStyle="{
display: isShowModule([{ title: item.title }]) ? '' : 'none',
}"
>
<view
v-if="isShowModule([{ title: item.title }])"
class="box"
:style="{
backgroundColor: boxStyleList[index].backgroundColor,
borderColor: boxStyleList[index].borderColor,
boxShadow: `0rpx 7rpx 12rpx 0rpx ${boxStyleList[index].shadowColor}`,
}"
>
<view
class="num"
:style="{ color: boxStyleList[index].numColor }"
>
<text>{{ item.num }}</text>
</view>
<view class="desc">
<text>{{ item.title }}</text>
</view>
</view>
</up-col>
</up-row>
</view>
</view>
</view>
<!-- 线条 -->
<view class="line"> </view>
<!-- 常用应用 -->
<view class="app-list" v-if="isShowModule(appList)">
<view class="name">常用应用</view>
<u-grid :border="false" col="4">
<u-grid-item
v-for="(item, listIndex) in appList"
:key="listIndex"
@click="item.fn"
:customStyle="{
display: isShowModule([{ title: item.title }]) ? '' : 'none',
}"
>
<up-image
v-if="isShowModule([{ title: item.title }])"
:src="`https://backend-common.obs.cn-east-3.myhuaweicloud.com/static/pagesHome/${item.icon}`"
width="60rpx"
height="60rpx"
></up-image>
<text
class="grid-text"
v-if="isShowModule([{ title: item.title }])"
>{{ item.title }}</text
>
</u-grid-item>
</u-grid>
</view>
</view>
<!-- 当收货 出货 常用app全部为空 显示暂无权限 -->
<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 { useMemberStore } from "@/store/index";
import {
MessageApi,
ProfileApi,
ReceiveApi,
ShipmentApi,
} from "@/services/index";
import TabBar from "@/components/TabBar/index.vue";
import { formatMoney } from "@/utils";
import { onBackPress, onShow } from "@dcloudio/uni-app";
import pinia from "@/store";
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 -
uni.upx2px(80) -
navbarRect.height -
navbarRect.top -
40 -
17;
},
});
// #endif
};
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 boxStyleList = reactive([
{
borderColor: "rgba(240, 147, 107, 1)",
backgroundColor: "#FFFAF7",
shadowColor: "rgba(146,44,0,0.2)",
numColor: "rgba(240, 145, 105, 1)",
},
{
borderColor: "rgba(218, 193, 88, 1)",
backgroundColor: "#FFFEF7",
shadowColor: "rgba(138,111,0,0.2)",
numColor: "rgba(217, 193, 88, 1)",
},
{
borderColor: "rgba(88, 173, 232, 1)",
backgroundColor: "#F7FCFF",
shadowColor: "rgba(8, 82, 92, 0.20)",
numColor: "rgba(88, 173, 232, 1)",
},
{
borderColor: "rgba(82, 210, 207, 1)",
backgroundColor: "#F7FFFF",
shadowColor: "rgba(0, 106, 103, 0.20)",
numColor: "rgba(84, 212, 208, 1)",
},
]);
const receiveList = reactive([
{
title: "待定价",
num: 0,
fn: () => {
uni.navigateTo({
url: "/pagesReceive/pricing?scaleStatus=0", //
});
},
},
{
title: "待过皮重",
num: 0,
fn: () => {
uni.navigateTo({
url: "/pagesReceive/pricing?scaleStatus=1", //
});
},
},
{
title: "待审核",
num: 0,
fn: () => {
uni.navigateTo({
url: "/pagesReceive/payReview?scaleStatus=2", //
});
},
},
{
title: "待付款",
num: 0,
fn: () => {
uni.navigateTo({
url: "/pagesReceive/payReview?scaleStatus=3", //
});
},
},
]);
const shipmentList = reactive([
{
title: "待出货",
num: 0,
fn: () => {
uni.navigateTo({
url: "/pagesShipment/shipmenting?scaleStatus=0", //
});
},
},
{
title: "待过毛重",
num: 0,
fn: () => {
uni.navigateTo({
url: "/pagesShipment/shipmenting?scaleStatus=1", //
});
},
},
{
title: "出货结算",
num: 0,
fn: () => {
uni.navigateTo({
url: "/pagesShipment/shipmentSettlement?scaleStatus=2", //
});
},
},
{
title: "待结算",
num: 0,
fn: () => {
uni.navigateTo({
url: "/pagesShipment/shipmentSettlement?scaleStatus=3", //
});
},
},
]);
const appList = reactive([
{
icon: "01.png",
title: "收货补单",
fn: () => {
uni.navigateTo({
url: "/pagesApp/receiveSpl", //
});
},
},
{
icon: "03.png",
title: "收货明细",
fn: () => {
uni.navigateTo({
url: "/pagesApp/receiveDetail", //
});
},
},
{
icon: "05.png",
title: "收货作废",
fn: () => {
uni.navigateTo({
url: "/pagesApp/receiveCl", //
});
},
},
{
icon: "07.png",
title: "供应商管理",
fn: () => {
uni.navigateTo({
url: "/pagesApp/supplierMgt", //
});
},
},
{
icon: "02.png",
title: "出货补单",
fn: () => {
uni.navigateTo({
url: "/pagesApp/shipmentSpl", //
});
},
},
{
icon: "04.png",
title: "出货明细",
fn: () => {
uni.navigateTo({
url: "/pagesApp/shipmentDetail", //
});
},
},
{
icon: "06.png",
title: "出货作废",
fn: () => {
uni.navigateTo({
url: "/pagesApp/shipmentCl", //
});
},
},
{
icon: "08.png",
title: "客户管理",
fn: () => {
uni.navigateTo({
url: "/pagesApp/customerMgt", //
});
},
},
{
icon: "11.png",
title: "收货产品",
fn: () => {
uni.navigateTo({
url: "/pagesApp/receiveProduct", //
});
},
},
{
icon: "10.png",
title: "收货分类",
fn: () => {
uni.navigateTo({
url: "/pagesApp/receiveType", //
});
},
},
{
icon: "09.png",
title: "出货产品",
fn: () => {
uni.navigateTo({
url: "/pagesApp/shipmentProduct", //
});
},
},
{
icon: "18.png",
title: "出货分类",
fn: () => {
uni.navigateTo({
url: "/pagesApp/shipmentType", //
});
},
},
{
icon: "14.png",
title: "人员管理",
fn: () => {
uni.navigateTo({
url: "/pagesApp/user", //
});
},
},
{
icon: "15.png",
title: "权限管理",
fn: () => {
uni.navigateTo({
url: "/pagesApp/role", //
});
},
},
{
icon: "17.png",
title: "供应商分类",
fn: () => {
uni.navigateTo({
url: "/pagesApp/supplierType", //
});
},
},
{
icon: "16.png",
title: "库存卡管理",
fn: () => {
uni.navigateTo({
url: "/pagesApp/stockCard", //
});
},
},
{
icon: "12.png",
title: "支付明细",
fn: () => {
uni.navigateTo({
url: "/pagesApp/paymentDetail", //
});
},
},
{
icon: "13.png",
title: "收入明细",
fn: () => {
uni.navigateTo({
url: "/pagesApp/incomeDetail", //
});
},
},
]);
// app
const isShowModule = (list: any) => {
let flag = false;
list.forEach((item: any) => {
if (store.profile.menusNameList.indexOf(item.title) > -1) {
flag = true;
return;
}
});
return flag;
};
const state = reactive({
count: 0,
});
const init = () => {
//
MessageApi.getUserNoticeInfoNumVo().then((res: any) => {
if (res.code === 200) {
state.count = res.data.unreadNoticeNum;
}
});
//
ReceiveApi.countOrderByMonth().then((res) => {
if (res.code === 200) {
const {
totalReceipt,
totalExpenditure,
toBePriced,
toBeTare,
audit,
toBePaid,
} = res.data;
summaryList[0].num = totalReceipt;
summaryList[1].num = totalExpenditure;
receiveList[0].num = toBePriced;
receiveList[1].num = toBeTare;
receiveList[2].num = audit;
receiveList[3].num = toBePaid;
}
});
//
ShipmentApi.countOrderByMonth().then((res) => {
if (res.code === 200) {
const {
totalShipment,
totalIncome,
toBeShipped,
roughWeight,
shipmentReview,
toBeSettled,
} = res.data;
summaryList[2].num = totalShipment;
summaryList[3].num = totalIncome;
shipmentList[0].num = toBeShipped;
shipmentList[1].num = roughWeight;
shipmentList[2].num = shipmentReview;
shipmentList[3].num = toBeSettled;
}
});
//
ProfileApi.getUserInfo().then((res: any) => {
if (res.code === 200) {
store.setProfile({ ...res.data, token: store.profile.token });
}
});
};
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;
.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;
}
}
}
}
.p-15 {
padding: 15rpx;
}
.data-detail {
margin-top: 15rpx;
// 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;
}
}
.data-receive,
.data-shipment {
margin: 15rpx 15rpx 15rpx;
.box {
width: 141.15rpx;
height: 141.15rpx;
background: #fffaf7;
border: 1px solid #f0936b;
box-shadow: 0rpx 7rpx 12rpx 0rpx rgba(146, 44, 0, 0.2);
border-radius: 26rpx;
text-align: center;
vertical-align: middle;
display: table-cell;
// display: flex;
// align-items: center;
position: relative;
// top: 50%;
// transform: translateY(-50%);
.num {
font-size: 32rpx;
font-family: Source Han Sans CN;
font-weight: bold;
/* #ifdef H5 */
margin-top: 0.7rem;
/* #endif */
}
.desc {
font-size: 26rpx;
font-family: Source Han Sans CN;
font-weight: 400;
color: #000000;
}
}
}
.data-shipment {
margin-bottom: 21rpx;
}
.line {
height: 18rpx;
background: #f8f8f8;
}
.app-list {
padding: 15rpx;
padding-bottom: 0rpx;
.name {
text-align: center;
font-size: 28rpx;
font-family: Source Han Sans CN;
font-weight: 500;
color: #000000;
margin-bottom: 20rpx;
}
.grid-text {
margin-top: 17rpx;
margin-bottom: 20rpx;
font-size: 26rpx;
}
}
}
}
</style>

View File

@ -9,23 +9,6 @@
ref="loginForm"
:labelWidth="0"
>
<u-form-item prop="userInfo.dpName" @click="state.isShow = true">
<u-input
v-model="model1.userInfo.dpName"
:placeholder="`请选择基地名称`"
clearable
:customStyle="{}"
border="none"
:disabledColor="''"
:disabled="true"
>
<!-- @change="(e:any) => {handleInput(e, item)}"
@clear="handleClear(item)" -->
</u-input>
<template #right>
<u-icon name="arrow-right" color="#dadbde"></u-icon>
</template>
</u-form-item>
<u-form-item prop="userInfo.userName">
<u-input
v-model="model1.userInfo.userName"
@ -158,7 +141,6 @@ const model1 = reactive({
userInfo: {
userName: "",
password: "",
dpName: "",
},
});
// focus
@ -172,12 +154,6 @@ const checkGroup = reactive({
});
const rules = ref({
"userInfo.dpName": {
type: "string",
required: true,
message: "请选择基地名称",
trigger: ["blur", "change"],
},
"userInfo.userName": {
type: "string",
required: true,
@ -302,7 +278,6 @@ const openDoc = (item: string) => {
const handleSelect = (v: any) => {
state.isShow = false;
state.dpObj = v;
model1.userInfo.dpName = v.name;
store.setChildPath(v.dbIp);
};

View File

@ -49,7 +49,7 @@
</view>
</Box>
<TabBar></TabBar>
<TabBar :select="'我的'"></TabBar>
<SmallModal
:title="'确认退出吗?'"
:content="'退出后将返回至登陆页'"

View File

@ -38,6 +38,7 @@
:disabled="item.disabled || item.type === 'select'"
:disabledColor="item.name === '收货产品' ? '#ffffff' : '#f5f7fa'"
@clear="handleClear(item)"
@blur="item.blur()"
>
<template #suffix>
<text v-if="item.key === 'subtractNum'">
@ -82,6 +83,9 @@
<u-icon name="arrow-right"></u-icon>
</template>
</u-form-item>
<u-form-item :label="'现场照片'" v-if="model1.order.id">
<Photo :params="{'businessId': model1.order.id, orderType: OrderType.Receive, imagesType: ImagesType.Tare}"/>
</u-form-item>
</u-form>
<block
v-for="(item, index) in prePage ? formAttrList1 : formAttrList"
@ -104,14 +108,6 @@
<u-button type="primary" text="保存" @click="save()"></u-button>
</view>
<!-- 供应商选择弹框 -->
<SupplierDialog
ref="supplierDialog"
:show="showDialog.showSupplier"
@handleDialog="(v:boolean) => {handleDialog('showSupplier', v)}"
@changeUser="changeUser"
:isShipment="false"
></SupplierDialog>
<!-- 收货产品弹框 -->
<ProductDialog
:show="showDialog.showProduct"
@ -132,10 +128,10 @@ import {
import _ from "underscore";
import { onLoad, onShow } from "@dcloudio/uni-app";
import { ImagesType, OrderType } from "@/utils/enum";
import SupplierDialog from "../components/SupplierDialog.vue";
import ProductDialog from "../components/ProductDialog.vue";
import ProductDialog from "@/components/Dialog/ProductDialog.vue";
import valid from "@/utils/validate";
import { countDots } from "@/utils";
import Photo from "@/components/Photo/index.vue";
const handleClear = (item: any) => {
(model1.order as any)[item.key] = "";
};
@ -145,7 +141,6 @@ const showDialog = <
[key: string]: boolean;
}
>reactive({
showSupplier: false,
showProduct: false,
});
@ -153,11 +148,6 @@ const handleDialog = (key: string, v: boolean) => {
showDialog[key] = v;
};
const changeUser = (obj: any) => {
model1.order.userName = obj.name; //
model1.order.userId = obj.id; // Id,
};
//
const changeProduct = (obj: any) => {
model1.order.productName = obj.reProductsName; //
@ -232,7 +222,7 @@ const rules = reactive({
"order.userName": {
type: "string",
required: true,
message: "请选择供应商",
message: "请输入供应商",
trigger: ["blur", "change"],
},
"order.productName": {
@ -287,18 +277,12 @@ const formAttrList = reactive<ComType>([
{
name: "供应商",
key: "userName",
type: "select",
type: "input",
unit: "",
childKey: "userSelect",
required: true,
fn: () => {
uni.navigateTo({
url:
"/pagesApp/components/addSupplier?title=编辑供应商&item=" +
model1.order.userId, //
});
uni.hideKeyboard();
fn: () => {},
blur: () => {
updateSupplierUserName();
},
},
{
@ -406,13 +390,11 @@ const formAttrList1 = reactive<ComType>([
{
name: "供应商",
key: "userName",
type: "select",
type: "input",
unit: "",
childKey: "userSelect",
required: true,
fn: () => {
// handleDialog("showSupplier", true);
uni.hideKeyboard();
blur: () => {
updateSupplierUserName();
},
},
{
@ -495,7 +477,7 @@ const formAttrList1 = reactive<ComType>([
disabled: true,
},
{
name: "货款金额",
name: "实际付款",
key: "balanceTotalPrice",
type: "input",
required: true,
@ -550,34 +532,14 @@ watch(
model1.order.netWeight * ((100 - model1.order.subtractNum) / 100);
}
}
// totalPrice
// model1.order.totalPrice =
// Math.round(
// (model1.order.price || 0) * (model1.order.netWeight || 0) * 100
// ) / 100;
// =
// =
if (<number>model1.order.balanceTotalPrice <= 0) {
model1.order.balanceTotalPrice = model1.order.totalPrice;
}
}
);
// SupplierApi.getSupplierUserList({}).then((res) => {
// if (res.code === 200) {
// contrlModalParams.userSelect.list = res.data;
// }
// });
// ReceiveProductApi.getAllReProducts().then((res) => {
// if (res.code === 200) {
// contrlModalParams.productSelect.list = _.map(
// res.data as any,
// function (item: any) {
// return { name: item.reProductsName, ...item };
// }
// );
// }
// });
const handleSelect = (key: string, v: any) => {
contrlModalParams[key].isShow = false;
if (key === "userSelect") {
@ -635,6 +597,17 @@ const handleDelete = (e: any) => {
}
};
const updateSupplierUserName = () => {
const { userId, userName } = model1.order;
SupplierApi.updateSupplierUserName({ id: userId, name: userName }).then(
(res) => {
if (res.code === 200) {
uni.showToast({ title: "供应商名称已更新" });
}
}
);
};
/**
* 点击保存 先执行upload接口
* 上传成功后 保存图片资源 和更新订单数据
@ -701,20 +674,16 @@ const save = () => {
}
check().then((res) => {
if (res) {
//
startSave();
}
});
};
const startSave = () => {
Promise.all(handleUpload()).then((res) => {
console.log("***** 所有文件已经上传成功", res);
if (res.filter((item) => item).length > 0) {
PictureApi.addListAnnex({ annexPos: res.filter((item) => item) }).then(
(res1) => {
console.log(
"***** 关联的内容是",
res.filter((item) => item)
);
if (res1.code === 200) {
console.log("*** 资源文件更新成功");
}

View File

@ -0,0 +1,203 @@
<template>
<view class="search-box">
<view class="search">
<u-search
placeholder="请输入供应商名称"
v-model="keyword"
:focus="true"
bgColor="#fff"
clearable
:showAction="false"
placeholderColor="#C1C1C1"
@search="handleSearch()"
@clear="handleSearch()"
></u-search>
</view>
<view @click="handleCalendar()">
<up-icon name="calendar" size="26"></up-icon>
</view>
</view>
<view class="fullTime" v-if="filterState.startTime">
{{ filterState.startTime }} - {{ filterState.endTime }}
</view>
<view class="card-box">
<page-view
@loadList="
(v) => {
getList(v);
}
"
:noMoreData="pageList.noMoreData"
:list="pageList.list"
:height="ScaleStatus.Paid === currentTab ? 160 : 240"
:isLoading="pageList.isLoading"
>
<block v-for="(item, index) in pageList.list" :key="index">
<view class="c-layout">
</view>
<u-gap
height="10"
bgColor="#f8f8f8"
v-if="index < pageList.list.length - 1"
></u-gap>
</block>
</page-view>
</view>
<!-- 时间弹框 -->
<TimeDialog
ref="timeDialog"
:show="filterState.showTime"
@handleDialog="(v:boolean) => {filterState.showTime = false}"
@changeTime="changeTime"
/>
</template>
<script setup lang="ts">
import { ReceiveApi } from "@/services/index";
import { onLoad } from "@dcloudio/uni-app";
import PageView from "@/components/PageView/index.vue";
import { ScaleStatus } from "@/utils/enum";
import TimeDialog from "@/components/Dialog/TimeDialog.vue";
//
const filterState = reactive({
showTime: false,
startTime: "",
endTime: "",
});
const handleCalendar = () => {
filterState.showTime = true;
};
const changeTime = (obj: any) => {
filterState.startTime = obj.startTime;
filterState.endTime = obj.endTime;
resetPageList();
getList();
};
// scaleStatus
const pageList: PageResult<Order> = reactive({
isLoading: false,
noMoreData: false,
total: 0,
list: [],
pageNum: 1,
pageSize: 10,
});
const keyword = ref("");
const resetPageList = () => {
pageList.noMoreData = false;
pageList.total = 0;
pageList.list = [];
pageList.pageNum = 1;
pageList.pageSize = 10;
};
const currentTab = ref(2);
const handleSearch = () => {
resetPageList();
getList();
};
const getList = (v?: boolean) => {
if (v) {
if (Math.ceil(pageList.total / pageList.pageSize) > pageList.pageNum) {
pageList.pageNum++;
} else {
pageList.noMoreData = true;
return;
}
}
pageList.isLoading = true;
ReceiveApi.getOrderPage({
pageSize: pageList.pageSize,
pageNumber: pageList.pageNum,
scaleStatus: currentTab.value,
userName: keyword.value,
startTime: filterState.startTime ? `${filterState.startTime} 00:00:00` : '',
endTime: filterState.startTime ? `${filterState.endTime} 00:00:00` : '',
}).then((res: any) => {
if (res.code === 200) {
pageList.isLoading = false;
pageList.list = pageList.list.concat(
res.data.list.map((item: any) => {
return { ...item, isChecked: false };
})
);
pageList.total = (res.data as any).total;
}
});
};
onMounted(() => {
getList();
});
onLoad((option) => {
currentTab.value = parseInt((option as any).scaleStatus);
});
</script>
<style lang="scss" scoped>
.search-box {
display: flex;
align-items: center;
justify-content: space-between;
padding: 0rpx 22rpx;
margin-top: 30rpx;
view + view {
margin-left: 22rpx;
}
}
.search {
box-shadow: 0rpx 3rpx 16rpx 5rpx rgba(0, 0, 0, 0.2);
border-radius: 28rpx;
background: rgba(255, 255, 255, 0.86);
margin: 0px auto;
font-weight: 400;
font-size: 26rpx;
color: #c1c1c1;
flex: 1;
> view {
line-height: 60rpx;
text-align: center;
display: flex;
justify-content: center;
}
text {
margin-left: 15rpx;
}
}
.fullTime {
font-size: 26rpx;
padding: 22rpx 22rpx 0rpx 22rpx;
color: #606266;
}
.card-box {
.c-tab {
font-family: Source Han Sans CN;
font-weight: 400;
font-size: 26rpx;
color: #999999;
line-height: 41rpx;
display: flex;
align-items: center;
justify-content: space-around;
border-bottom: 1rpx solid rgba(233, 233, 233, 0.76);
text {
padding: 16rpx;
}
.active {
color: $u-primary;
border-bottom: 5rpx solid $u-primary;
border-radius: 5rpx;
}
}
.c-layout {
}
}
</style>

View File

@ -1,25 +1,29 @@
<template>
<view class="search">
<view v-if="!isShowSearch" @click="isShowSearch = true">
<u-icon color="#C1C1C1" name="search"></u-icon
><text>请输入供应商名称</text>
<view class="search-box">
<view class="search">
<u-search
placeholder="请输入供应商名称"
v-model="keyword"
:focus="true"
bgColor="#fff"
clearable
:showAction="false"
placeholderColor="#C1C1C1"
@search="handleSearch()"
@clear="handleSearch()"
></u-search>
</view>
<u-search
v-else
placeholder="请输入供应商名称"
v-model="keyword"
:focus="true"
bgColor="#fff"
clearable
:showAction="false"
placeholderColor="#C1C1C1"
@search="handleSearch()"
@clear="handleSearch()"
></u-search>
<view @click="handleCalendar()">
<up-icon name="calendar" size="26"></up-icon>
</view>
</view>
<view class="fullTime" v-if="filterState.startTime">
{{ filterState.startTime }} - {{ filterState.endTime }}
</view>
<view class="card-box">
<view class="c-tab">
<!-- <view class="c-tab">
<text
v-for="(item, index) in tabList"
:key="index"
@ -28,7 +32,7 @@
>
{{ item.name }}
</text>
</view>
</view> -->
<page-view
@loadList="
@ -38,12 +42,12 @@
"
:noMoreData="pageList.noMoreData"
:list="pageList.list"
:height="ScaleStatus.Paid === currentTab ? 160 : 240 "
:height="ScaleStatus.Paid === currentTab ? 160 : 240"
:isLoading="pageList.isLoading"
>
<block v-for="(item, index) in pageList.list" :key="index">
<view class="c-layout">
<view style="min-width: 20px;">
<view style="min-width: 20px">
<checkbox
v-if="
ScaleStatus.ToBeReview === currentTab ||
@ -61,8 +65,8 @@
<view>
<text class="number">收货单号{{ item.receiptNumber }}</text>
</view>
<view>
<text class="name">{{ item.userName }}</text>
<view v-if="item.userName">
<text class="name">{{ item.userName }} &nbsp; <text v-if="item.cardNumber">{{ item.cardNumber }}</text></text>
</view>
</view>
</view>
@ -74,9 +78,13 @@
>
</view>
<view class="flex-box">
<!-- 若是等待审核显示预估总价 其他显示货款金额 -->
<text v-if="currentTab === 2">预估总价{{ item.totalPrice || 0 }}</text>
<text v-else>货款金额{{ item.balanceTotalPrice || 0 }}</text>
<!-- 若是等待审核显示预估总价 其他显示实际付款 -->
<text v-if="currentTab === 2"
>预估总价{{ item.totalPrice || 0 }}</text
>
<text v-else
>实际付款{{ item.balanceTotalPrice || 0 }}</text
>
</view>
</view>
<view>
@ -88,8 +96,8 @@
>
<text
v-if="currentTab === 3"
@click="handleReview(item.id as number, 3, '去付')"
></text
@click="handleReview(item.id as number, 3, '去')"
></text
>
<text
v-if="currentTab === 4"
@ -138,12 +146,35 @@
></u-action-sheet>
</block>
<!-- 时间弹框 -->
<TimeDialog
ref="timeDialog"
:show="filterState.showTime"
@handleDialog="(v:boolean) => {filterState.showTime = false}"
@changeTime="changeTime"
/>
</template>
<script setup lang="ts">
import { ReceiveApi } from "@/services/index";
import { onLoad } from "@dcloudio/uni-app";
import PageView from "@/components/PageView/index.vue";
import { ScaleStatus } from "@/utils/enum";
import TimeDialog from "@/components/Dialog/TimeDialog.vue";
//
const filterState = reactive({
showTime: false,
startTime: "",
endTime: "",
});
const handleCalendar = () => {
filterState.showTime = true;
};
const changeTime = (obj: any) => {
filterState.startTime = obj.startTime;
filterState.endTime = obj.endTime;
resetPageList();
getList();
};
const contrlModalParams = reactive<{ [attrName: string]: any }>({
paySelect: {
@ -179,8 +210,7 @@ const pageList: PageResult<Order> = reactive({
pageNum: 1,
pageSize: 10,
});
const keyword = ref('');
const isShowSearch = ref(false);
const keyword = ref("");
const state = reactive<{
[attrName: string]: any;
}>({
@ -219,7 +249,7 @@ const handleTab = (item: any) => {
const handleSearch = () => {
resetPageList();
getList();
}
};
const handleReview = (id: number, scaleStatus: number, title: string) => {
uni.navigateTo({
url:
@ -236,7 +266,7 @@ const handleReviewOrPay = (status: number) => {
updateStatus(ScaleStatus.ToBePay, -1);
} else if (ScaleStatus.ToBePay === status) {
//
contrlModalParams.paySelect.isShow = true
contrlModalParams.paySelect.isShow = true;
}
};
const updateStatus = (status: number, key: number) => {
@ -245,14 +275,16 @@ const updateStatus = (status: number, key: number) => {
.map((item) => {
return { ...item, scaleStatus: status };
});
if(list.length === 0) {
uni.showToast({icon: 'none', title: '请至少选择一个收货单'})
return
if (list.length === 0) {
uni.showToast({ icon: "none", title: "请至少选择一个收货单" });
return;
}
let paramsList:any = list;
let paramsList: any = list;
if (ScaleStatus.Paid === status) {
paramsList = list.map(item => {return {...item, paymentMethod: key}})
paramsList = list.map((item) => {
return { ...item, paymentMethod: key };
});
}
ReceiveApi.updateOrderIn({ orderInPos: paramsList }).then((res) => {
if (res.code === 200) {
@ -269,9 +301,8 @@ const handleSelect = () => {
};
const handleSelect1 = (key: string, v: any) => {
contrlModalParams[key].isShow = false;
//
updateStatus(ScaleStatus.Paid, v.key);
//
updateStatus(ScaleStatus.Paid, v.key);
};
const getList = (v?: boolean) => {
@ -288,8 +319,10 @@ const getList = (v?: boolean) => {
pageSize: pageList.pageSize,
pageNumber: pageList.pageNum,
scaleStatus: currentTab.value,
userName: keyword.value
}).then((res:any) => {
userName: keyword.value,
startTime: filterState.startTime ? `${filterState.startTime} 00:00:00` : '',
endTime: filterState.startTime ? `${filterState.endTime} 00:00:00` : '',
}).then((res: any) => {
if (res.code === 200) {
pageList.isLoading = false;
pageList.list = pageList.list.concat(
@ -305,20 +338,33 @@ onMounted(() => {
getList();
});
onLoad((option) => {
const statusList = ['待定价', '待过皮', '待审核', '待付款','已付款']
currentTab.value = parseInt((option as any).scaleStatus);
uni.setNavigationBarTitle({
title: statusList[currentTab.value],
});
});
</script>
<style lang="scss" scoped>
.search-box {
display: flex;
align-items: center;
justify-content: space-between;
padding: 0rpx 22rpx;
margin-top: 30rpx;
view + view {
margin-left: 22rpx;
}
}
.search {
box-shadow: 0rpx 3rpx 16rpx 5rpx rgba(0, 0, 0, 0.2);
border-radius: 28rpx;
background: rgba(255, 255, 255, 0.86);
width: 80%;
margin: 0px auto;
margin-top: 30rpx;
font-weight: 400;
font-size: 26rpx;
color: #c1c1c1;
flex: 1;
> view {
line-height: 60rpx;
text-align: center;
@ -329,6 +375,11 @@ onLoad((option) => {
margin-left: 15rpx;
}
}
.fullTime {
font-size: 26rpx;
padding: 22rpx 22rpx 0rpx 22rpx;
color: #606266;
}
.card-box {
.c-tab {
font-family: Source Han Sans CN;

View File

@ -1,4 +1,23 @@
<template>
<view class="search">
<u-search
placeholder="请输入供应商"
v-model="stateNew.keywoard"
:showAction="false"
:bgColor="'#fff'"
:borderColor="'rgba(0, 0, 0, 0.1)'"
:placeholderColor="'#C1C1C1'"
@search="handleSearch()"
@clear="handleSearch()"
></u-search>
<view class="btn" @click="stateNew.isShow = true">
{{
stateNew.currentDevice.name === "全部"
? "选择设备"
: stateNew.currentDevice.name
}}
</view>
</view>
<page-view
@loadList="
(v) => {
@ -20,7 +39,7 @@
<text class="number">收货单号{{ item.receiptNumber }}</text>
</view>
<view>
<text class="name">{{ item.userName }}</text>
<text class="name">{{ item.userName }} &nbsp; {{item.cardNumber}}</text>
</view>
</view>
<view>
@ -36,11 +55,12 @@
</view>
</view>
<view>
<text class="desc">时间{{ item.grossTime }}</text>
<text class="desc">时间{{ item.grossTime }}</text>
</view>
<view class="flex-box">
<text>毛重{{ item.grossWeight }}kg</text>
<text
v-if="state.scaleStatus !== 0"
>单价{{
state.scaleStatus === 0 ? "未定价" : item.price + "元/KG"
}}</text
@ -48,14 +68,14 @@
</view>
<view class="btn-box">
<u-button
text="点击作废"
text="作废"
color="#E8E8E8"
:customStyle="{ color: '#999' }"
@click="handleModal(true, item.id as number)"
></u-button>
<u-button
type="primary"
:text="state.scaleStatus === 0 ? '点击定价' : '点击编辑'"
:text="state.scaleStatus === 0 ? '定价' : '编辑'"
@click="pricingDetail(item.id as number)"
></u-button>
</view>
@ -71,13 +91,55 @@
@handleModal="(v:boolean) => {handleModal(v, deleteId)}"
@handleOk="handleOk()"
/>
<block>
<u-action-sheet
:actions="stateNew.deviceList"
:title="'选择设备'"
:show="stateNew.isShow"
@select="(v: any) => handleSelect(v)"
@close="stateNew.isShow = false"
:closeOnClickAction="true"
></u-action-sheet>
</block>
</template>
<script setup lang="ts">
import { ReceiveApi } from "@/services/index";
import { ReceiveApi, DeviceApi } from "@/services/index";
import SmallModal from "@/components/Modal/smallModal.vue";
import PageView from "@/components/PageView/index.vue";
import { onLoad } from "@dcloudio/uni-app";
import { ScaleStatus } from "@/utils/enum";
import { DeviceType, ScaleStatus } from "@/utils/enum";
import _ from "underscore";
const stateNew = reactive<any>({
keywoard: "",
deviceList: [],
isShow: false,
currentDevice: {
name: "全部",
},
});
const handleSearch = () => {
resetPageList();
getList();
};
//
DeviceApi.getDeviceList({ deviceType: DeviceType.Weighbridge }).then(
(res: any) => {
if (res.code === 200) {
stateNew.deviceList = [{ id: 0, name: "全部" }].concat(
_.map(res.data, function (item) {
return { name: item.deviceName, ...item };
})
);
}
}
);
const handleSelect = (v: any) => {
stateNew.currentDevice = v;
};
const pageList: PageResult<Order> = reactive({
isLoading: false,
@ -113,7 +175,7 @@ const pricingDetail = (id: number) => {
ReceiveApi.getDetailById({ id: id }).then((res: any) => {
if (res.code === 200) {
if (res.data.scaleStatus > 1) {
uni.showToast({title : '当前订单已处理'});
uni.showToast({ title: "当前订单已处理" });
resetPageList();
getList();
} else {
@ -138,6 +200,7 @@ const getList = (v?: boolean) => {
pageSize: pageList.pageSize,
pageNumber: pageList.pageNum,
scaleStatus: state.scaleStatus,
userName: stateNew.keywoard,
};
pageList.isLoading = true;
ReceiveApi.getOrderPage(params).then((res) => {
@ -177,6 +240,22 @@ onLoad((option) => {
});
</script>
<style lang="scss" scoped>
.search {
display: flex;
align-items: center;
justify-content: space-between;
margin: 26rpx 26rpx 0rpx 26rpx;
.btn {
background: #00dcee;
border-radius: 24rpx;
border: 1px solid #00dcee;
font-weight: 500;
font-size: 26rpx;
color: #ffffff;
margin-left: 50rpx;
padding: 6rpx 30rpx;
}
}
.card-box {
padding: 38rpx 50rpx;
box-shadow: 0rpx 0rpx 10rpx 0rpx rgba(5, 68, 37, 0.12);

View File

@ -66,14 +66,19 @@
</view>
<view v-if="getIsShow()"></view>
<view v-for="(item, index) in gridList1" :key="index">
<text v-if="item.name">{{ item.name }}</text
<text v-if="item.name"
><text :class="{ bold: item.isBold }">{{ item.name }}</text
></text
><text>
{{ item.isBefore ? item.unit : "" }}
{{ item.num }}
{{ item.isBefore ? "" : item.unit }}
<text :class="{ bold: item.isBold }">
{{ item.isBefore ? item.unit : "" }}
{{ item.num }}
{{ item.isBefore ? "" : item.unit }}
</text>
<text
v-if="
item.name === '货款金额' &&
item.name === '实际付款' &&
ScaleStatus.ToBeReview === state.order.scaleStatus
"
@click="handleEdit()"
@ -154,12 +159,12 @@
showCancelButton
:confirmColor="'#00D2E3'"
:show="isInput"
:title="'修改货款金额'"
:title="'修改实际付款'"
@confirm="handleConfirm"
@cancel="isInput = false"
>
<u-input
placeholder="请输入货款金额"
placeholder="请输入实际付款"
type="number"
v-model="amount"
></u-input>
@ -280,13 +285,15 @@ const gridList1 = reactive([
num: "",
unit: "元",
isBefore: false,
isBold: true,
},
{
name: "货款金额",
name: "实际付款",
enName: "balanceTotalPrice",
num: "",
unit: "元",
isBefore: false,
isBold: true,
},
]);
const getIsShow = () => {
@ -428,7 +435,7 @@ onLoad((option) => {
item.unit = "%";
}
}
if (item.name === "货款金额") {
if (item.name === "实际付款") {
if (state.order[item.enName as string]) {
item.num = state.order[item.enName as string];
} else {
@ -532,6 +539,10 @@ onLoad((option) => {
line-height: 50rpx;
width: max-content;
}
.bold {
font-weight: bold;
}
}
.op-btn {
width: 80%;

View File

@ -78,3 +78,11 @@ export const getSupplierUserListLettera = (data: any) => {
})
}
// 供应商用户修改名称
export const updateSupplierUserName = (data: any) => {
return http({
method: 'POST',
url: '/api/supplier/user/updateSupplierUserName',
data,
})
}

BIN
src/static/img/home/1.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 15 KiB

BIN
src/static/img/home/10.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 21 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 67 KiB

BIN
src/static/img/home/11.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 16 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 50 KiB

BIN
src/static/img/home/12.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 13 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 37 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 47 KiB

BIN
src/static/img/home/2.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 16 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 49 KiB

BIN
src/static/img/home/3.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 15 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 46 KiB

BIN
src/static/img/home/4.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 12 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 36 KiB

BIN
src/static/img/home/5.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 15 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 45 KiB

BIN
src/static/img/home/6.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 13 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 39 KiB

BIN
src/static/img/home/7.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 13 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 39 KiB

BIN
src/static/img/home/8.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 16 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 49 KiB

BIN
src/static/img/home/9.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 15 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 45 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.8 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 4.5 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.8 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 4.6 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.3 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 3.1 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.4 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 2.7 KiB

7
src/types/dto.d.ts vendored Normal file
View File

@ -0,0 +1,7 @@
import type { DeviceType } from "@/utils/enum"
export type DeviceItem = {
id: number
deviceName: string,
deviceType: DeviceType
}

View File

@ -29,7 +29,7 @@ interface Order {
points?: number; //扣点
buckleMiscellaneous?: number; //扣杂
price?: number; //单价
balanceTotalPrice?: number; //结算总价 货款金额
balanceTotalPrice?: number; //结算总价 实际付款
totalPrice?: number; //实际总价 预估价格
weighingMethod?: number; //称重方式0有皮重 1零皮重
multiCategory?: number; //多品类0单品类 1多品类
@ -101,6 +101,8 @@ type PageParams = {
isDeleted?: boolean;
userName?: string; // 供应商名称
receiptNumber?: string;
startTime?:string;
endTime?:string;
};
interface Shipment {

114
src/utils/data.js Normal file
View File

@ -0,0 +1,114 @@
import {ScaleStatus} from './enum'
export const timeList = [
{
id: 1,
name: "昨日",
},
{
id: 2,
name: "今日",
},
{
id: 3,
name: "本周",
},
{
id: 4,
name: "本月",
},
{
id: 5,
name: "本年",
},
];
export const homeInitData = {
receiveList: [
{
id: 1,
title: "待定价",
icon: "1.png",
num: 0,
path: `/pagesReceive/pricing?scaleStatus=${ScaleStatus.ToBePriced}`,
},
{
id: 2,
title: "待过皮重",
icon: "2.png",
num: 0,
path: `/pagesReceive/pricing?scaleStatus=${ScaleStatus.ToBeTare}`,
},
{
id: 3,
title: "待审核",
icon: "3.png",
num: 0,
path: `/pagesReceive/payReview?scaleStatus=${ScaleStatus.ToBeReview}`,
},
{
id: 4,
title: "待付款",
icon: "4.png",
num: 0,
path: `/pagesReceive/payReview?scaleStatus=${ScaleStatus.ToBePay}`,
},
{
id: 5,
title: "已付款",
icon: "5.png",
num: 0,
path: `/pagesReceive/payList?scaleStatus=${ScaleStatus.Paid}`,
},
{
id: 5,
title: "收货补单",
icon: "6.png",
num: 0,
path: "/pagesApp/receiveSpl",
},
],
shipmentList: [
{
id: 1,
title: "待出货",
icon: "7.png",
num: 0,
path: "/pagesReceive/pricing?scaleStatus=0",
},
{
id: 2,
title: "待过毛重",
icon: "8.png",
num: 0,
path: "/pagesReceive/pricing?scaleStatus=0",
},
{
id: 3,
title: "待结算",
icon: "9.png",
num: 0,
path: "/pagesReceive/pricing?scaleStatus=0",
},
{
id: 4,
title: "待收款",
icon: "10.png",
num: 0,
path: "/pagesReceive/pricing?scaleStatus=0",
},
{
id: 5,
title: "已收款",
icon: "11.png",
num: 0,
path: "/pagesReceive/pricing?scaleStatus=0",
},
{
id: 5,
title: "出货补单",
icon: "12.png",
num: 0,
path: "/pagesReceive/pricing?scaleStatus=0",
},
],
};

View File

@ -36,6 +36,7 @@ const obj = {
if (token) {
options.header["x-userToken"] = token;
}
options.header["code"] = 'hoe-cs';
},
};
// 请求拦截器