merchapp/java-mall-app-shop-admin/pages/my/my.vue
2025-07-23 12:11:46 +08:00

477 lines
11 KiB
Vue

<template>
<view class="my-container">
<status-bar
:backgroundColor="'#fff'"
:background="'linear-gradient(to left, #ff3000, #a70300)'"
v-if="true"
></status-bar>
<view class="hander" @click="skipu()">
<view class="hander-left">
<view class="user-img">
<u--image
:src="
dashboardInfo.store_info.store_logo || '../../static/user-img.png'
"
shape="circle"
width="64"
height="64"
></u--image>
</view>
<view class="user-info">
<view class="user-name-block">
<view class="user-name">
{{ dashboardInfo.store_info.store_name }}
</view>
</view>
<view class="user-store-name">
{{ dashboardInfo.store_info.store_grade_name }}
</view>
</view>
</view>
<view class="hander-right">
<view class="right-item kf_item" @click.stop="toServices">
<u-icon
class="icon-shezhi"
custom-prefix="custom-icon-kefu custom-icon"
size="20"
color="#fff"
></u-icon>
<view class="icon-label">官方客服</view>
</view>
<view class="right-item">
<u-icon name="arrow-right" size="18" color="#fff"></u-icon>
</view>
</view>
</view>
<view class="shop_status" :style="{background: shopStatus==1 ? '#D8F1EC' : shopStatus==2 ? '#ffecf2': '#eee'}">
<u-cell-group :border="false">
<u-cell
@click="handleShowTime"
iconStyle="marginRight:6px; color: #279B8B;"
:border="false"
isLink
icon="hourglass-half-fill"
title="营业中"
v-if="shopStatus==1"
></u-cell>
<u-cell
iconStyle="marginRight:6px; color: #fe411b"
:border="false"
isLink
url="/pages/my/shopQRcode/shopQRcode"
icon="hourglass-half-fill"
title="已停业"
v-if="shopStatus==2"
></u-cell>
<u-cell
iconStyle="marginRight:6px; color: #666"
:border="false"
isLink
url="/pages/my/shopQRcode/shopQRcode"
icon="hourglass-half-fill"
title="已打烊"
v-if="shopStatus==3"
></u-cell>
</u-cell-group>
</view>
<view class="myui_card shop-info">
<view class="shop-info-item">
<u-count-to
class="item-value turnover-item turnover-item-num"
:start-val="0"
:end-val="dashboardInfo.order.yestoday_num"
></u-count-to>
<view class="item-label">昨日订单数</view>
</view>
<view class="shop-info-item">
<u-count-to
class="item-value turnover-item turnover-item-num"
:start-val="0"
:end-val="dashboardInfo.order.month_num"
></u-count-to>
<view class="item-label">当月订单数</view>
</view>
<view class="shop-info-item">
<u-count-to
class="item-value turnover-item turnover-item-num"
:start-val="0"
:end-val="dashboardInfo.order.pay_amount"
:decimals="2"
separator=","
></u-count-to>
<view class="item-label">成交总金额</view>
</view>
</view>
<view class="myui_card tool">
<u-cell-group :border="false">
<u-cell
iconStyle="marginRight:6px; color: #62BBAE"
:border="false"
isLink
url="/pages/my/shopQRcode/shopQRcode"
icon="scan"
title="店铺二维码"
></u-cell>
<u-cell
iconStyle="marginRight:6px; color: #62BBAE"
:border="false"
isLink
url="/pages/my/userInfo"
icon="man-add-fill"
title="账号设置"
></u-cell>
<u-cell
iconStyle="marginRight:6px; color: #62BBAE"
:border="false"
isLink
url="/pages/my/printer/printerList"
icon="bookmark-fill"
title="打印设置"
></u-cell>
<u-cell
iconStyle="marginRight:6px; color: #62BBAE"
:border="false"
isLink
url="/pages/my/printer/printerList"
icon="bell-fill"
title="铃声设置"
></u-cell>
<u-cell
iconStyle="marginRight:6px; color: #026bff"
:border="false"
isLink
url="/pages/my/versions"
icon="error-circle-fill"
title="版本信息"
></u-cell>
<u-cell
iconStyle="marginRight:6px; color: #ff695b"
:border="false"
isLink
url="/pages/my/protocol/protocol"
icon="file-text-fill"
title="隐私协议"
></u-cell>
<u-cell
iconStyle="marginRight:6px; color: #fd4d40"
:border="false"
isLink
url="/pages/my/aboutUs/aboutUs"
icon="account-fill"
title="关于小发"
></u-cell>
</u-cell-group>
</view>
<view class="btn_logout">退出登录</view>
<tpfTimeRange
ref="time"
:startDefaultTime="form.info.store_opening_hours"
:endDefaultTime="form.info.store_close_hours"
@timeRange="handleTimeRange"
></tpfTimeRange>
<tabbar tabbarName="my"></tabbar>
</view>
</template>
<script>
import { GetAccountDashboard } from "@/api/user";
import { GetShopBaseInfo } from "@/api/shop";
import statusBar from "@/components/status-bar.vue";
import tabbar from "@/components/tabbar/tabbar.vue";
import tpfTimeRange from "@/components/tpf-time-range/tpf-time-range.vue";
export default {
components: {
statusBar,
tabbar,
tpfTimeRange,
},
data() {
return {
shopStatus: 1,
isBusiness: true,
dashboardInfo: {
data: {},
notice: {},
order: {
yestoday_num: 0,
},
product: {
illegal_num: 0,
normal_num: 0,
off_num: 0,
total_num: 0,
verify_passed_off_num: 0,
verify_refused_num: 0,
verify_waiting_num: 0,
},
return: {
fin_num: 0,
review_num: 0,
total_num: 0,
un_fin_num: 0,
},
store_info: {
store_id: 1,
store_name: "",
},
},
form: {
info: {
store_opening_hours: "00:00",
store_close_hours: "00:00",
},
}
};
},
onShow() {
this.getAccountDashboard();
this.getShopBaseInfo();
},
methods: {
async getShopBaseInfo() {
let res = await GetShopBaseInfo();
if (res && res.status == 200) {
this.form = res.data;
this.form.businessTime =
res.data.info.store_opening_hours +
"-" +
res.data.info.store_close_hours;
}
},
handleTimeRange(e) {
this.form.businessTime = e[0] + e[1];
this.form.store_opening_hours = e[0];
this.form.store_close_hours = e[1];
},
handleShowTime() {
this.$refs["time"].open();
},
async getAccountDashboard() {
let res = await GetAccountDashboard();
if (res && res.status == 200) {
uni.setStorageSync("accountDashboard", res.data);
this.dashboardInfo = res.data;
}
},
skipu() {
uni.navigateTo({
url: "/pages/my/shopInfo",
});
},
toServices() {
// uni.navigateTo({
// url: "/pages/my/shopInfo",
// });
},
},
};
</script>
<style lang="scss">
.my-container {
padding-bottom: 178rpx;
.hander {
position: relative;
padding: 40rpx;
display: flex;
align-items: center;
justify-content: space-between;
height: 186rpx;
// background: #FE411B;
background: linear-gradient(to bottom, #ff695b, #fd4d40);
.hander-left {
display: flex;
align-items: center;
.user-img {
margin-right: 20rpx;
// padding: 12rpx;
// border-radius: 50%;
// border: 2px solid #fff;
}
.user-info {
color: #fff;
.user-name-block {
display: flex;
align-items: center;
font-size: 36rpx;
font-weight: bold;
.user-name {
white-space: nowrap; /* 强制不换行 :ml-search[white-space] */
overflow: hidden; /* 隐藏溢出内容 :ml-search[overflow] */
text-overflow: ellipsis; /* 显示省略号 :ml-search[text-overflow] */
max-width: 120px;
}
}
.user-store-name {
margin-top: 12rpx;
padding: 4rpx 20rpx;
font-size: 24rpx;
color: #ffecf2;
border-radius: 100rpx;
border: 2rpx solid #ffecf2;
display: inline-block;
}
}
}
.hander-right {
display: flex;
font-size: 24rpx;
color: #000;
text-align: center;
color: #fff;
.kf_item{
position: absolute;
right: 48rpx;
top: 24rpx;
}
.right-item {
display: flex;
align-items: center;
justify-content: flex-end;
gap: 10rpx;
}
}
}
.shop-info {
display: flex;
justify-content: space-around;
font-size: 28rpx;
margin: 32rpx 24rpx;
.shop-info-item {
display: flex;
flex-flow: column;
align-items: center;
text-align: center;
.item-value {
color: #222 !important;
margin-bottom: 20rpx;
}
.item-label {
color: #999;
}
}
}
.business-contetn {
margin: 20rpx;
background: #fff;
border-radius: 12rpx;
.title {
padding: 20rpx 32rpx;
font-weight: bold;
}
.business-status {
.status-name {
position: relative;
&::before {
content: "";
display: block;
width: 6px;
height: 6px;
background-color: #5ac725;
position: absolute;
right: 25%;
top: 36%;
border-radius: 50%;
}
}
}
.business-box {
padding: 20rpx 32rpx;
display: flex;
justify-content: space-between;
}
}
.shop_status{
font-size: 28rpx;
}
.tool {
margin: 32rpx 24rpx;
padding-left: 0;
padding-right: 0;
::v-deep .u-cell__body {
padding: 30rpx 16rpx 30rpx 24rpx;
}
}
.btn_logout {
margin: 0 24rpx;
border-radius: 60rpx;
text-align: center;
padding: 20rpx;
font-size: 28rpx;
color: #fe411b;
border: 2rpx solid #fe411b;
// background: #FE411B;
// background: linear-gradient(to right, #fd826f, #FE411B);
}
.fm-content {
margin: 0 24rpx;
.title {
padding: 20rpx 32rpx;
font-weight: bold;
margin-bottom: 40rpx;
}
.fm-list {
padding: 20rpx 32rpx;
display: flex;
.fm-item {
display: flex;
flex-flow: column;
align-items: center;
justify-content: end;
margin-right: 80rpx;
text-align: center;
height: 80rpx;
font-size: 28rpx;
font-weight: bold;
.fm-icon {
height: 60rpx;
margin-bottom: 20rpx;
}
}
}
}
}
</style>