|
@@ -2,39 +2,25 @@
|
|
|
<!-- 主页 -->
|
|
|
<div class="homePage flex-col">
|
|
|
<div class="homeBox">
|
|
|
- <s-header
|
|
|
- :name="sys ? sys.title : $t('public.sysName')"
|
|
|
- :noback="true"
|
|
|
- :isFixed="false"
|
|
|
- ></s-header>
|
|
|
+ <s-header :name="sys ? sys.title : $t('public.sysName')" :noback="true" :isFixed="false"></s-header>
|
|
|
<!-- 留言滚动条 -->
|
|
|
<template v-if="noticeContent.title">
|
|
|
- <van-notice-bar
|
|
|
- @click="noticeClk"
|
|
|
- mode="link"
|
|
|
- :scrollable="true"
|
|
|
- color="rgba(64,77,116,1)"
|
|
|
- background="#fff"
|
|
|
- left-icon="volume-o"
|
|
|
- :text="noticeContent.title"
|
|
|
- />
|
|
|
+ <van-notice-bar @click="noticeClk" mode="link" :scrollable="true" color="rgba(64,77,116,1)" background="#fff"
|
|
|
+ left-icon="volume-o" :text="noticeContent.title" />
|
|
|
</template>
|
|
|
<div class="intervalRow"></div>
|
|
|
<div class="nameDeviceRow flex-col">
|
|
|
<span class="txt3">{{ userName }}</span>
|
|
|
<div class="l-flex-RC">
|
|
|
- <span class="info3"
|
|
|
- >{{ equipStatus.machineTotalNum }}
|
|
|
- {{ $t("home.totalEquipment") }}</span
|
|
|
- >
|
|
|
+ <span class="info3">{{ equipStatus.machineTotalNum }}
|
|
|
+ {{ $t("home.totalEquipment") }}</span>
|
|
|
<div class="lineCon o-mlr-6"></div>
|
|
|
- <span class="word2"
|
|
|
- >{{ equipStatus.machineUseNum }} {{ $t("home.running") }}</span
|
|
|
- >
|
|
|
+ <span class="word2">{{ equipStatus.machineUseNum }} {{ $t("home.running") }}</span>
|
|
|
</div>
|
|
|
</div>
|
|
|
+ <!-- 没有数据概览M14权限的人看不到数据概览和ECharts -->
|
|
|
<!-- 数据概览 -->
|
|
|
- <div class="titleBox flex-col">
|
|
|
+ <div v-if="showDataDiv" class="titleBox flex-col">
|
|
|
<div class="layer2 flex-row">
|
|
|
<div class="section5 flex-col"></div>
|
|
|
<div class="TextGroup2 flex-col">
|
|
@@ -43,10 +29,10 @@
|
|
|
</div>
|
|
|
</div>
|
|
|
<!-- 时间选择 -->
|
|
|
- <dateSelectList @update="update($event)"></dateSelectList>
|
|
|
- <typeSelectList :isHome="true" @upselectdata="upselectdata($event)"></typeSelectList>
|
|
|
+ <dateSelectList v-if="showDataDiv" @update="update($event)"></dateSelectList>
|
|
|
+ <typeSelectList v-if="showDataDiv" :isHome="true" @upselectdata="upselectdata($event)"></typeSelectList>
|
|
|
<!-- 订单数据 -->
|
|
|
- <div class="o-plr-8">
|
|
|
+ <div v-if="showDataDiv" class="o-plr-8">
|
|
|
<div class="outer5 flex-col" @click="pushOrderCenter">
|
|
|
<div class="block5 flex-col">
|
|
|
<div class="topTitle flex-row justify-end">
|
|
@@ -78,13 +64,28 @@
|
|
|
</div>
|
|
|
</div>
|
|
|
<!-- 时间 -->
|
|
|
- <div class="c-text-c c-text-18">
|
|
|
+ <div v-if="showDataDiv" class="c-text-c c-text-18">
|
|
|
{{ $M_FormatTime(dateSelect.startDate, 'YYYY-MM-DD') }}--{{ $M_FormatTime(dateSelect.endDate, 'YYYY-MM-DD') }}
|
|
|
</div>
|
|
|
- <div v-if="!noData(salesVolume, salesNumber)">
|
|
|
+ <!-- ECharts
|
|
|
+ <template v-if="showDataDiv && !noData(salesVolume, salesNumber)">
|
|
|
+ <div ref="chartBox" class="Chart1 flex-col"></div>
|
|
|
+ </template>
|
|
|
+ <template v-else>
|
|
|
+ <kNoData v-if="showDataDiv"></kNoData>
|
|
|
+ </template> -->
|
|
|
+
|
|
|
+ <!-- <div> -->
|
|
|
+ <div v-if="showDataDiv && !noData(salesVolume, salesNumber)">
|
|
|
<div ref="chartBox" class="Chart1 flex-col"></div>
|
|
|
</div>
|
|
|
<kNoData v-else></kNoData>
|
|
|
+ <!-- </div> -->
|
|
|
+
|
|
|
+
|
|
|
+
|
|
|
+
|
|
|
+ <!-- 常用工具 -->
|
|
|
<div class="outer9 flex-col justify-center">
|
|
|
<div class="main24 flex-col justify-between">
|
|
|
<div class="ImageText10 flex-col">
|
|
@@ -98,13 +99,8 @@
|
|
|
</div>
|
|
|
</div>
|
|
|
<div class="outer11 flex-row">
|
|
|
- <div
|
|
|
- class="main25 flex-col"
|
|
|
- v-for="(item, index) in pushToolList"
|
|
|
- :key="index"
|
|
|
- @click="pushToolPage(item.value)"
|
|
|
- >
|
|
|
- <img class="mod7 flex-col" :src="showLogo(item.value)"/>
|
|
|
+ <div class="main25 flex-col" v-for="(item, index) in pushToolList" :key="index" @click="pushToolPage(item.value)">
|
|
|
+ <img class="mod7 flex-col" :src="showLogo(item.value)" />
|
|
|
<div class="TextGroup14 flex-col">
|
|
|
<span class="info15" v-html="item.label"></span>
|
|
|
</div>
|
|
@@ -112,19 +108,10 @@
|
|
|
</div>
|
|
|
</div>
|
|
|
<!-- 通知弹窗 -->
|
|
|
- <kDialog
|
|
|
- :dialogTitle="$t('home.notificationPop.notification')"
|
|
|
- :cancelBtnTxt="$t('home.notificationPop.nextTime')"
|
|
|
- :confirmBtnTxt="$t('home.notificationPop.roger')"
|
|
|
- ref="kDialogRef"
|
|
|
- @confirmclk="confirmClk"
|
|
|
- >
|
|
|
+ <kDialog :dialogTitle="$t('home.notificationPop.notification')" :cancelBtnTxt="$t('home.notificationPop.nextTime')"
|
|
|
+ :confirmBtnTxt="$t('home.notificationPop.roger')" ref="kDialogRef" @confirmclk="confirmClk">
|
|
|
<template #content>
|
|
|
- <div
|
|
|
- class="o-w"
|
|
|
- style="max-height: 50vh; overflow-y: auto"
|
|
|
- v-html="noticeContent.note"
|
|
|
- ></div>
|
|
|
+ <div class="o-w" style="max-height: 50vh; overflow-y: auto" v-html="noticeContent.note"></div>
|
|
|
</template>
|
|
|
</kDialog>
|
|
|
<nav-bar></nav-bar>
|
|
@@ -135,13 +122,13 @@
|
|
|
// 导入无数据组件
|
|
|
import kNoData from "../../components/commom/kNoData/index.vue";
|
|
|
import kDialog from "../../components/commom/kDialog/index.vue";
|
|
|
-import {onMounted, ref, nextTick} from "vue";
|
|
|
+import { onMounted, ref, nextTick } from "vue";
|
|
|
import sHeader from "../../components/SimpleHeader";
|
|
|
import navBar from "../../components/NavBar";
|
|
|
import dateSelectList from "../../components/dateSelectList";
|
|
|
import typeSelectList from "../../components/typeSelectList";
|
|
|
-import {getLoginUser, $M_Menus, $M_FormatTime, styleUrl} from "../../common/js/utils";
|
|
|
-import {useRouter} from "vue-router";
|
|
|
+import { getLoginUser, $M_Menus, $M_FormatTime, styleUrl } from "../../common/js/utils";
|
|
|
+import { useRouter } from "vue-router";
|
|
|
import {
|
|
|
getStatistics,
|
|
|
Api_getNotice,
|
|
@@ -149,8 +136,9 @@ import {
|
|
|
Api_getUpdateNotice,
|
|
|
} from "../../service/home";
|
|
|
import dateUtil from "../../utils/dateUtil";
|
|
|
-import {useI18n} from "vue-i18n";
|
|
|
-import {Toast} from "vant";
|
|
|
+import { useI18n } from "vue-i18n";
|
|
|
+import { Toast } from "vant";
|
|
|
+// import { once } from "lodash";
|
|
|
|
|
|
export default {
|
|
|
name: "home",
|
|
@@ -167,7 +155,7 @@ export default {
|
|
|
const equipStatus = ref({});
|
|
|
// 获取设备情况
|
|
|
const getMachineNum = () => {
|
|
|
- Api_postMachineNum({adminId: user.id}).then((res) => {
|
|
|
+ Api_postMachineNum({ adminId: user.id }).then((res) => {
|
|
|
console.log("res", res);
|
|
|
equipStatus.value = res.data.data || {};
|
|
|
});
|
|
@@ -175,12 +163,12 @@ export default {
|
|
|
const noticeContent = ref({});
|
|
|
// 获取公告
|
|
|
const getNotice = () => {
|
|
|
- Api_getNotice({adminId: user.id}).then((res) => {
|
|
|
+ Api_getNotice({ adminId: user.id }).then((res) => {
|
|
|
console.log("res", res);
|
|
|
noticeContent.value = res.data.data || {};
|
|
|
});
|
|
|
};
|
|
|
- const {t} = useI18n();
|
|
|
+ const { t } = useI18n();
|
|
|
// 通知弹窗
|
|
|
const kDialogRef = ref(null);
|
|
|
// 点击通知栏
|
|
@@ -209,7 +197,7 @@ export default {
|
|
|
let chartObj = null;
|
|
|
// 跳转订单中心
|
|
|
const pushOrderCenter = () => {
|
|
|
- router.push({path: "/orderCenter"});
|
|
|
+ router.push({ path: "/orderCenter" });
|
|
|
};
|
|
|
const dateSelect = ref({});
|
|
|
const update = (uDate) => {
|
|
@@ -236,9 +224,9 @@ export default {
|
|
|
username: typeSelectData.userName, // 商家
|
|
|
companyType: typeSelectData.companyType, // 公司平台
|
|
|
equipmentId:
|
|
|
- typeSelectData.equipmentId === "" ? null : typeSelectData.equipmentId,
|
|
|
+ typeSelectData.equipmentId === "" ? null : typeSelectData.equipmentId,
|
|
|
};
|
|
|
- const {data} = await getStatistics(params);
|
|
|
+ const { data } = await getStatistics(params);
|
|
|
if (data.code && data.data) {
|
|
|
salesVolume.value = 0;
|
|
|
salesNumber.value = 0;
|
|
@@ -315,7 +303,7 @@ export default {
|
|
|
{
|
|
|
...data.data.series[0],
|
|
|
type: "bar",
|
|
|
- itemStyle: {color: "#e59a6d"},
|
|
|
+ itemStyle: { color: "#e59a6d" },
|
|
|
name: t("home.productNum"),
|
|
|
label: {
|
|
|
show: true,
|
|
@@ -325,7 +313,7 @@ export default {
|
|
|
{
|
|
|
...data.data.series[1],
|
|
|
type: "bar",
|
|
|
- itemStyle: {color: "#4d6add"},
|
|
|
+ itemStyle: { color: "#4d6add" },
|
|
|
name: t("home.salesAmount"),
|
|
|
label: {
|
|
|
show: true,
|
|
@@ -336,9 +324,9 @@ export default {
|
|
|
};
|
|
|
|
|
|
option.dataZoom[0]["startValue"] =
|
|
|
- data.data.categories[data.data.categories.length - 5];
|
|
|
+ data.data.categories[data.data.categories.length - 5];
|
|
|
option.dataZoom[0]["endValue"] =
|
|
|
- data.data.categories[data.data.categories.length - 1];
|
|
|
+ data.data.categories[data.data.categories.length - 1];
|
|
|
chartObj && chartObj.setOption(option);
|
|
|
//图形宽度随屏幕宽度改变而改变
|
|
|
window.onresize = chartObj.resize;
|
|
@@ -349,22 +337,24 @@ export default {
|
|
|
// 页面初始化
|
|
|
onMounted(() => {
|
|
|
// 加载样式
|
|
|
- styleUrl('home')
|
|
|
+ styleUrl('home');
|
|
|
if (localStorage.getItem("loginSys")) {
|
|
|
const loginSysString = localStorage.getItem("loginSys");
|
|
|
sys.value = JSON.parse(loginSysString);
|
|
|
}
|
|
|
// 设置菜单权限
|
|
|
menuSet();
|
|
|
+ // 设置菜单权限, 只执行一次
|
|
|
+ // once(menuSet);
|
|
|
dateSelect.value = {
|
|
|
chartType: "day",
|
|
|
startDate: dateUtil.formateDate(
|
|
|
- new Date(new Date(new Date().getTime()).setHours(0, 0, 0, 0)),
|
|
|
- "yyyy-MM-dd hh:mm:ss"
|
|
|
+ new Date(new Date(new Date().getTime()).setHours(0, 0, 0, 0)),
|
|
|
+ "yyyy-MM-dd hh:mm:ss"
|
|
|
),
|
|
|
endDate: dateUtil.formateDate(
|
|
|
- new Date(new Date(new Date().getTime()).setHours(23, 59, 59, 59)),
|
|
|
- "yyyy-MM-dd hh:mm:ss"
|
|
|
+ new Date(new Date(new Date().getTime()).setHours(23, 59, 59, 59)),
|
|
|
+ "yyyy-MM-dd hh:mm:ss"
|
|
|
),
|
|
|
};
|
|
|
typeSelectData = {
|
|
@@ -376,20 +366,36 @@ export default {
|
|
|
getNotice();
|
|
|
// 获取设备情况
|
|
|
getMachineNum();
|
|
|
+
|
|
|
});
|
|
|
+
|
|
|
+ const menuList = [];
|
|
|
+
|
|
|
+ const showDataDiv = ref(false);
|
|
|
+
|
|
|
+ const isOrderData = ref(false);
|
|
|
+
|
|
|
// 设置菜单权限
|
|
|
const menuSet = () => {
|
|
|
- const menuList = [];
|
|
|
+
|
|
|
+ // 清空菜单列表
|
|
|
+ menuList.length = 0;
|
|
|
+
|
|
|
// 组合菜单权限
|
|
|
user.menuCodeList.forEach((item) => {
|
|
|
for (const key in $M_Menus) {
|
|
|
- // 除了设备查看M2,数据概况M14,订单退款M16,系统脱机M17不用加在菜单上
|
|
|
+ // 设备管理M1,设备查看M2,订单数据M4,任务消息M6,数据概览M14,订单退款M16,系统脱机M17 这些图标不用加载到底部菜单上
|
|
|
if (
|
|
|
- item === key &&
|
|
|
- (item !== "M2" &&
|
|
|
- item !== "M14" &&
|
|
|
- item !== "M16" &&
|
|
|
- item !== "M17")
|
|
|
+ item === key &&
|
|
|
+ (
|
|
|
+ item !== "M1" &&
|
|
|
+ item !== "M2" && // M2本身就无logo
|
|
|
+ item !== "M4" &&
|
|
|
+ item !== "M6" &&
|
|
|
+ item !== "M14" &&
|
|
|
+ item !== "M16" &&
|
|
|
+ item !== "M17"
|
|
|
+ )
|
|
|
) {
|
|
|
menuList.push({
|
|
|
label: $M_Menus[key],
|
|
@@ -397,17 +403,21 @@ export default {
|
|
|
});
|
|
|
}
|
|
|
}
|
|
|
+
|
|
|
});
|
|
|
+
|
|
|
// 赋值菜单
|
|
|
pushToolList.value = menuList;
|
|
|
- // 查询是否有apk管理
|
|
|
+
|
|
|
+ // 查询是否有apk管理权限
|
|
|
const isApkMan = user.menuCodeList.some((item) => {
|
|
|
return item === "M19";
|
|
|
});
|
|
|
+
|
|
|
// 查询是否有账号权限
|
|
|
- // const isAccount = user.menuCodeList.some((item) => {
|
|
|
- // return item === "M8";
|
|
|
- // });
|
|
|
+ const isAccount = user.menuCodeList.some((item) => {
|
|
|
+ return item === "M8";
|
|
|
+ });
|
|
|
// 如果没有apk管理
|
|
|
if (!isApkMan) {
|
|
|
// 如果是公司人,要把apk添加上去
|
|
@@ -418,71 +428,81 @@ export default {
|
|
|
});
|
|
|
}
|
|
|
}
|
|
|
+
|
|
|
// 如果没有账号权限
|
|
|
- // if (!isAccount) {
|
|
|
- // // 如果是公司人type=0,要把账号权限添加上去
|
|
|
- // if (user.type === 0) {
|
|
|
- // pushToolList.value.push({
|
|
|
- // label: t("home.accountPermission"),
|
|
|
- // value: "M8"
|
|
|
- // });
|
|
|
- // }
|
|
|
- // }
|
|
|
+ if (!isAccount) {
|
|
|
+ // 如果是公司人type=0,要把账号权限添加上去
|
|
|
+ if (user.type === 0) {
|
|
|
+ pushToolList.value.push({
|
|
|
+ label: t("home.accountPermission"),
|
|
|
+ value: "M8"
|
|
|
+ });
|
|
|
+ }
|
|
|
+ }
|
|
|
};
|
|
|
+
|
|
|
// 常用操作跳转页面
|
|
|
const pushToolPage = (index) => {
|
|
|
+ // console.log("常用操作跳转页面menuList >>> " + menuList);
|
|
|
switch (index) {
|
|
|
case "M1":
|
|
|
- router.push({path: "/device"}); // 设备管理
|
|
|
+ router.push({ path: "/device" }); // 设备管理
|
|
|
break;
|
|
|
case "M3":
|
|
|
// router.push({ path: "/distributionSet" });
|
|
|
- router.push({path: "/accountOperation"}); // 账户操作
|
|
|
+ router.push({ path: "/accountOperation" }); // 账户操作
|
|
|
break;
|
|
|
case "M4":
|
|
|
- router.push({path: "/orderCenter"}); // 报警历史
|
|
|
+ router.push({ path: "/orderCenter" }); // 订单数据
|
|
|
break;
|
|
|
case "M5":
|
|
|
- router.push({path: "/advertManage"});
|
|
|
+ router.push({ path: "/advertManage" }); // 广告管理
|
|
|
break;
|
|
|
case "M6":
|
|
|
- router.push({path: "/taskMessage"});
|
|
|
+ router.push({ path: "/taskMessage" });
|
|
|
break;
|
|
|
case "M7":
|
|
|
- router.push({path: "/discountCode"});
|
|
|
+ router.push({ path: "/discountCode" });
|
|
|
break;
|
|
|
case "M8":
|
|
|
- router.push({path: "/accountPer"});
|
|
|
+ router.push({ path: "/accountPer" });
|
|
|
break;
|
|
|
case "M9":
|
|
|
- router.push({path: "/orderExport"});
|
|
|
+ // 同时具备 订单数据M4 权限的人才能使用订单导出功能
|
|
|
+ if (isOrderData.value) {
|
|
|
+ router.push({ path: "/orderExport" });
|
|
|
+ } else {
|
|
|
+ console.log("权限不足,无法跳转");
|
|
|
+ }
|
|
|
break;
|
|
|
case "M10":
|
|
|
- router.push({path: "/subLedgerManage"});
|
|
|
+ router.push({ path: "/subLedgerManage" });
|
|
|
break;
|
|
|
case "M11":
|
|
|
- router.push({path: "/robotranking"});
|
|
|
+ router.push({ path: "/robotranking" });
|
|
|
break;
|
|
|
case "M12":
|
|
|
- router.push({path: "/joinpayMch"});
|
|
|
+ router.push({ path: "/joinpayMch" });
|
|
|
break;
|
|
|
case "M13":
|
|
|
- router.push({path: "/shandeMch"});
|
|
|
+ router.push({ path: "/shandeMch" });
|
|
|
break;
|
|
|
case "M15":
|
|
|
- router.push({path: "/alarmHistory"});
|
|
|
+ router.push({ path: "/alarmHistory" }); // 报警历史
|
|
|
break;
|
|
|
case "M18":
|
|
|
- router.push({path: "/labelMan"});
|
|
|
+ router.push({ path: "/labelMan" });
|
|
|
break;
|
|
|
case "M19":
|
|
|
- router.push({path: "/apkManage"});
|
|
|
+ router.push({ path: "/apkManage" });
|
|
|
break;
|
|
|
case "M20":
|
|
|
- router.push({path: "/merchantManage"});
|
|
|
+ router.push({ path: "/merchantManage" });
|
|
|
break;
|
|
|
}
|
|
|
};
|
|
|
+
|
|
|
+
|
|
|
// 如果是空数据
|
|
|
const noData = (volumes, nums) => {
|
|
|
if (!volumes && !nums) {
|
|
@@ -516,8 +536,10 @@ export default {
|
|
|
showLogo,
|
|
|
dateSelect,
|
|
|
$M_FormatTime,
|
|
|
+ showDataDiv
|
|
|
};
|
|
|
},
|
|
|
+
|
|
|
};
|
|
|
</script>
|
|
|
|