Преглед изворни кода

Merge branch 'feature-sun' into sunzee-test

Ritchie пре 1 година
родитељ
комит
2d2db993d5

BIN
src/assets/home/machineSales.png


+ 10 - 3
src/assets/language/en.json

@@ -460,7 +460,6 @@
     "notSleeping": "Not sleeping",
     "lastRefreshTime": "Recent refresh time",
     "machineUniqueCode": "Machine Code",
-    "furnaceHeadTemperature": "Furnace head temperature",
     "stirringTemperature": "Temperature two",
     "cornGeneratorTemperature": "Temperature one",
     "cupQuantity": "Cup quantity",
@@ -469,8 +468,9 @@
     "outsideTm": "Outside temperature",
     "outsidehd": "Humidity outside cabinet",
     "noData": "No data available",
-    "temperatureInCabinet": "Temperature in cabinet",
-    "humidityInCabinet": "Humidity in cabinet",
+    "furnaceHeadTemperature": "Furnace temp",
+    "temperatureInCabinet": "Cabinet temp",
+    "humidityInCabinet": "Cabinet humidity",
     "showGoods": "Block or display goods",
     "diyFlower": "DIY flower",
     "editCheck": "Are you sure about the change?",
@@ -706,6 +706,13 @@
     "numberOfOrders": "Order quantity",
     "salesAmount": "Sales amount",
     "commonTools": "Common tools",
+    "coins": "Coins",
+    "bills": "PaperMoney",
+    "coinsBills": "Cash",
+    "creditCard": "CreditCard",
+    "electronicPayment": "PayOnline",
+    "migrationInstructions": "Common Tools have been moved to the Personal Center",
+    "machineSales": "Machine sales",
     "deviceManagement": "Machine management",
     "discountCode": "discountCode",
     "distributionSettings": "distributionSettings",

+ 9 - 2
src/assets/language/ja.json

@@ -298,7 +298,7 @@
         "to": "に",
         "attention": "(注意:桁数が正しくない場合、更新によりマシンに異常が発生する可能性があります)",
         "submitUpdates": "更新を提出",
-        "nameLength":"装置名は25文字以内です",
+        "nameLength": "装置名は25文字以内です",
         "modificationSucceeded": "変更に成功",
         "existsFailed": "デバイス名はすでに存在します",
         "editFailed": "変更に失敗",
@@ -653,7 +653,7 @@
         "days": "日",
         "type": "タイプ",
         "deductionRoll": "クーポン",
-        "discount2": "割引",     
+        "discount2": "割引",
         "deductionPriceLabdel": "控除価格",
         "deductionPricePlaceholder": "控除価格を入力してください",
         "enterNumber": "数字を入力",
@@ -707,6 +707,13 @@
         "numberOfOrders": "注文数",
         "salesAmount": "売上高",
         "commonTools": "一般ツール",
+        "coins": "コイン",
+        "bills": "紙幣",
+        "coinsBills": "現金",
+        "creditCard": "クレジットカード",
+        "electronicPayment": "オンライン支払い",
+        "migrationInstructions": "【常用ツール】は【個人センター】に移動しました。",
+        "machineSales": "機械販売",
         "deviceManagement": "装置管理",
         "discountCode": "割引コード",
         "distributionSettings": "分配設定",

+ 7 - 0
src/assets/language/zh.json

@@ -720,6 +720,13 @@
     "numberOfOrders": "订单数",
     "salesAmount": "销售额",
     "commonTools": "常用工具",
+    "coins": "硬币",
+    "bills": "纸币",
+    "coinsBills": "现金",
+    "creditCard": "信用卡",
+    "electronicPayment": "电子支付",
+    "migrationInstructions": "【常用工具】已迁移至【个人中心】",
+    "machineSales": "机器销售额",
     "deviceManagement": "设备管理",
     "discountCode": "优惠码",
     "distributionSettings": "分销设置",

+ 7 - 0
src/router/index.js

@@ -400,6 +400,13 @@ const router = createRouter({
       component: () => import("@/views/orderExport/index"),
       meta: { index: 1 },
     },
+    // 常用工具
+    {
+      path: "/commonTools",
+      name: "commonTools",
+      component: () => import("@/views/commonTools/index"),
+      meta: { index: 1 },
+    },
     // 任务消息
     {
       path: "/taskMessage",

+ 4 - 0
src/service/home.js

@@ -28,4 +28,8 @@ export function Api_postMachineNum(params) {
 // 查询是否有设备报警
 export function getIsAlarm(params) {
     return axios.get(`/SZWL-SERVER/tAlarmRecord/isAlarm?${stringToUrl(params)}`);
+}
+// 查询设备销售情况
+export function Api_getEquipmentPageStatistics(params) {
+    return axios.post(`/ORDER-SERVER/tOrder/getEquipmentPageStatistics?${stringToUrl(params)}`, params)
 }

+ 52 - 0
src/styles/commonTools/index.less

@@ -0,0 +1,52 @@
+.commonToolsPage {
+    width: 100%;
+  
+    .commonToolsBox {
+      width: 100%;
+      height: calc(100% - 60px);
+      overflow: auto;
+      
+      .outer11 {
+        width: 90%;
+        flex-wrap: wrap;
+        margin: 5%;
+  
+        .main25 {
+          width: 33%;
+          height: 3rem;
+          justify-content: space-around;
+  
+          // margin: 0 26px 27px 0;
+          // margin-bottom: 27px;
+          /*        &:nth-last-child(-n + 5) {
+            margin-bottom: 0;
+          } */
+  
+          .mod7 {
+            height: 50px;
+            width: 50px;
+            margin: 0 auto;
+            align-items: center;
+            justify-content: center;
+  
+          }
+  
+          .TextGroup14 {
+            width: 100%;
+  
+            .info15 {
+              width: 100%;
+              // height: 14px;
+              overflow-wrap: break-word;
+              color: rgba(135, 135, 166, 1);
+              font-size: 14px;
+              text-align: center;
+              // white-space: nowrap;
+              line-height: 15px;
+              display: block;
+            }
+          }
+        }
+      }
+    }
+  }

+ 4 - 2
src/styles/device/index.less

@@ -390,7 +390,6 @@
             }
 
             .editDeviceBtnCon {
-
               .box2 {
                 width: 10px;
                 height: 0.5rem;
@@ -398,7 +397,6 @@
                 background-size: 100%;
                 // margin-top: 0.2rem;
               }
-
               .c-text-14 {
                 display: inline-block;
                 /* 将行内文本转为块级元素 */
@@ -412,6 +410,10 @@
                 cursor: pointer;
                 /* 设置光标样式 */
               }
+              .l-flex-RC {
+                margin-left: 10px;
+                margin-right: 10px;
+              }
             }
 
             .bd8 {

+ 33 - 4
src/styles/home/index.less

@@ -1,5 +1,6 @@
 .homePage {
   width: 100%;
+
   .homeBox {
     height: 100%;
     width: 100%;
@@ -114,6 +115,7 @@
       background-size: 100% 100%;
       // width: 100%;
       // margin-top: 0.5rem;
+      // padding: 0.15rem 0.2rem;
       padding: 15px 15px;
 
 
@@ -321,7 +323,7 @@
 
     .Chart1 {
       background-color: rgba(255, 255, 255, 1);
-      height: 350px;
+      height: 200px;
       width: 100%;
     }
 
@@ -338,7 +340,7 @@
         .ImageText10 {
           // height: 14px;
           // margin-left: 20px;
-          width: 2.2rem;
+          width: 2.5rem;
 
           .wrap2 {
             // width: 78px;
@@ -348,9 +350,9 @@
               // z-index: 2;
               position: relative;
               width: 0.35rem;
-              height: 0.4rem;
+              height: 0.45rem;
               border: 2px rgba(128, 150, 236, 1);
-              background: url("../../assets/home/commonTools.png") center no-repeat;
+              background: url("../../assets/home/machineSales.png") center no-repeat;
               background-size: 100%;
             }
 
@@ -376,6 +378,33 @@
       }
     }
 
+    .machineSaleBox {
+      background-color: #e7e7e7;
+      border-radius: 15px;
+      box-shadow: 0 2px 4px rgba(0, 0, 0, 0.1); /* 阴影效果 */
+      padding: 5px 5px;
+
+      .contentWord {
+        padding: 10px 10px;
+        color: rgba(64, 77, 116, 1);
+        font-size: 13px;
+        text-align: left;
+        flex-wrap: wrap; 
+        line-height: 13px;
+        display: flex;
+        align-items: center;
+      }
+
+      .layer5 {
+        padding: 5px 10px;
+        .word5 {
+          color: rgba(64, 77, 116, 1);
+          font-size: 0.375rem;
+        }
+      }
+
+    }
+
     .outer11 {
       width: 90%;
       flex-wrap: wrap;

+ 11 - 0
src/styles/user/index.less

@@ -161,6 +161,17 @@
                     height: 100%;
                     position: relative;
 
+                    &.commonToolsIcon::after {
+                        content: "";
+                        position: absolute;
+                        background: #fff url("../../assets/home/commonTools.png") top center no-repeat;
+                        background-size: 100%;
+                        width: 0.55rem;
+                        height: 0.55rem;
+                        right: 0.2rem;
+                        top: 0.45rem;
+                    }
+
                     &.taskMessageIcon::after {
                         content: "";
                         position: absolute;

+ 221 - 0
src/views/commonTools/index.vue

@@ -0,0 +1,221 @@
+<template>
+    <!-- 常用工具 -->
+    <div class="commonToolsPage flex-col">
+        <s-header :name="$t('home.commonTools')" :noback="false"></s-header>
+        <div class="commonToolsBox flex-col">
+            <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="TextGroup14 flex-col">
+                        <!-- <span class="info15" v-html="item.label"></span> -->
+                        <span class="info15">{{ $t(item.label) }}</span>
+                    </div>
+                </div>
+            </div>
+        </div>
+    </div>
+</template>
+
+
+<script>
+import { onMounted, reactive } from 'vue';
+import sHeader from "@/components/SimpleHeader";
+import { useRouter } from "vue-router";
+import { getLoginUser, styleUrl, $M_Menus } from "../../common/js/utils";
+import { useI18n } from "vue-i18n";
+
+export default {
+    components: { sHeader },
+    setup() {
+        const router = useRouter();
+        const user = getLoginUser();
+        const pushToolList = reactive([]);
+        const menuList = [];
+
+        const { t } = useI18n();
+        // 赋值菜单
+        pushToolList.value = menuList;
+
+        // 设置菜单权限
+        const menuSet = () => {
+
+            // 清空菜单列表
+            // menuList.length = 0;
+            pushToolList.length = 0;
+
+            // 组合菜单权限
+            user.menuCodeList.forEach((item) => {
+                for (const key in $M_Menus) {
+                    // 设备管理M1,设备查看M2,订单数据M4,任务消息M6,销售排行M11,数据概览M14,订单退款M16,系统脱机M17 这些图标不用加载到底部菜单上
+                    if (
+                        item === key &&
+                        (
+                            item !== "M1" &&
+                            item !== "M2" && // M2本身就无logo
+                            item !== "M4" &&
+                            item !== "M6" &&
+                            item !== "M11" &&
+                            item !== "M14" &&
+                            item !== "M16" &&
+                            item !== "M17"
+                        )
+                    ) {
+                        menuList.push({
+                            label: $M_Menus[key],
+                            value: item
+                        });
+                    }
+                }
+
+            });
+
+
+            // 赋值菜单
+            // pushToolList.value = menuList;
+            pushToolList.push(...menuList);
+
+            // 查询是否有apk管理权限
+            const isApkMan = user.menuCodeList.some((item) => {
+                return item === "M19";
+            });
+
+            // 查询是否有账号权限
+            const isAccount = user.menuCodeList.some((item) => {
+                return item === "M8";
+            });
+
+            // 查询是否有订单数据权限
+            // isOrderData.value = user.menuCodeList.some((item) => {
+            //     return item === "M4";
+            // })
+
+            // 查询是否有订单导出权限
+            // const isOrderExport = user.menuCodeList.some((item) => {
+            //   return item === "M9";
+            // })
+
+            // 查询是否有数据概览权限
+            // const isDataOverview = user.menuCodeList.some((item) => {
+            //     return item === "M14";
+            // })
+
+            // 如果没有apk管理
+            if (!isApkMan) {
+                // 如果是公司人,要把apk添加上去
+                // if (user.type === 0 || user.type === 1) {
+                //   pushToolList.value.push({
+                //     label: t("home.apkMan"),
+                //     value: "M19"
+                //   });
+                // }
+            }
+
+            // 如果没有账号权限
+            if (!isAccount) {
+                //  如果是公司人type=0,要把账号权限添加上去
+                if (user.type === 0) {
+                    pushToolList.value.push({
+                        label: t("home.accountPermission"),
+                        value: "M8"
+                    });
+                }
+            }
+
+            // 子商家以上级别,默认可以看到订单详情
+            // if (user.type === 0 || user.type === 2) {
+            //     showDataDiv.value = true;
+            // } else {
+            //     // 如果有数据概览权限 和 订单数据权限
+            //     if (isDataOverview && isOrderData.value) {
+            //         showDataDiv.value = true;
+            //     }
+            // }
+
+        };
+
+        // 常用操作跳转页面
+        const pushToolPage = (index) => {
+            // console.log("常用操作跳转页面menuList >>> " + menuList);
+            switch (index) {
+                case "M1":
+                    router.push({ path: "/device" }); // 设备管理
+                    break;
+                case "M3":
+                    // router.push({ path: "/distributionSet" });
+                    router.push({ path: "/accountOperation" }); // 账户操作
+                    break;
+                case "M4":
+                    router.push({ path: "/orderCenter" }); // 订单数据
+                    break;
+                case "M5":
+                    router.push({ path: "/advertManage" }); // 广告管理
+                    break;
+                case "M6":
+                    router.push({ path: "/taskMessage" });
+                    break;
+                case "M7":
+                    router.push({ path: "/discountCode" });
+                    break;
+                case "M8":
+                    router.push({ path: "/accountPer" });
+                    break;
+                case "M9":
+                    router.push({ path: "/orderExport" });
+                    break;
+                case "M10":
+                    router.push({ path: "/subLedgerManage" });
+                    break;
+                case "M11":
+                    router.push({ path: "/robotranking" });
+                    break;
+                case "M12":
+                    router.push({ path: "/joinpayMch" });
+                    break;
+                case "M13":
+                    router.push({ path: "/shandeMch" });
+                    break;
+                case "M15":
+                    router.push({ path: "/alarmHistory" }); // 报警历史
+                    break;
+                case "M18":
+                    router.push({ path: "/labelMan" });
+                    break;
+                case "M19":
+                    router.push({ path: "/apkManage" });
+                    break;
+                case "M20":
+                    router.push({ path: "/merchantManage" });
+                    break;
+            }
+        };
+
+        // 显示logo
+        const showLogo = (url) => {
+            return require(`../../assets/home/${url}.png`);
+        };
+
+        // 初始化页面获取列表
+        onMounted(async () => {
+            styleUrl('commonTools');
+            // 设置菜单权限
+            menuSet();
+        });
+        const pushPageList = (url) => {
+            router.push(url);
+        }
+        return {
+            pushToolList,
+            pushPageList,
+            user,
+            pushToolPage,
+            // showDataDiv,
+            showLogo,
+        };
+    }
+};
+</script>
+
+<style lang="less" scoped>
+@import "../../common/style/common.less";
+</style>

+ 63 - 28
src/views/device/index.vue

@@ -70,22 +70,51 @@
                   <div v-if="!item.hasTodayAlarm" class="layer2 o-mr-5"
                     :class="{ deviceOn: item.eqeStatus === 1, layerLeft: item.hasTodayAlarm, }"></div>
                 </div>
-                <!-- 所属商家 -->
-                <span class="txt1 o-mt-10">{{ $t("device.affiliatedMerchants") }}:{{ item.adminUserName }}</span>
                 <!-- 机器编码 -->
                 <span class="txt1 o-mt-10">{{ $t("device.machineUniqueCode") }}:{{ item.clientId }}</span>
                 <!-- 锁机状态 -->
                 <span v-if="user.type < 1" class="txt1 o-mt-10">
-                  {{ $t("device.lockCondition") }}:{{ item.isBlocked ? $t("device.lockState") : $t("device.unLockState")
-                  }}
+                  {{ $t("device.lockCondition") }}:{{ item.isBlocked ? $t("device.lockState") : $t("device.unLockState") }}
+                </span>
+                <!-- 温湿度 -->
+                <!-- <span v-if="(item.machineType == '0' || item.machineType == null) && item.equimentType != 'P30'"
+                  class="txt1 o-mt-10">
+                  <van-col class="word5" style="">{{ $t("device.furnaceHeadTemperature") + ':' +
+                    item.furnaceTm
+                    + $t("device.degree") }}</van-col>
+                  <van-col class="word5" style="">{{ '&nbsp;' + $t("device.temperatureInCabinet") + ':' + item.cabinetTm
+                    + $t("device.degree") }}</van-col>
+                  <van-col class="word5" style="">{{ '&nbsp;' + $t("device.humidityInCabinet") + ':' + item.cabinetHd
+                    + $t("device.humidity") }}</van-col>
+                </span> -->
+                <span v-if="(item.machineType == '0' || item.machineType == null) && item.equimentType != 'P30'"
+                  class="txt1 o-mt-10">
+                  {{ $t("device.temperatureInCabinet") + ':' + item.cabinetTm
+                    + $t("device.degree") }}
+                </span>
+                <span v-if="(item.machineType == '0' || item.machineType == null) && item.equimentType != 'P30'"
+                  class="txt1 o-mt-10">
+                  {{ $t("device.humidityInCabinet") + ':' + item.cabinetHd
+                    + $t("device.humidity") }}
+                </span>
+                <span v-if="(item.machineType == '0' || item.machineType == null) && item.equimentType != 'P30'"
+                  class="txt1 o-mt-10">
+                  {{ $t("device.furnaceHeadTemperature") + ':' +
+                    item.furnaceTm
+                    + $t("device.degree") }}
                 </span>
                 <img v-if="item.checkType" class="pic1" referrerpolicy="no-referrer" src="../../assets/home/line.png" />
                 <div class="contentBottomCon" v-if="item.checkType">
+
+                  <!-- 所属商家 -->
+                  <!-- <span class="txt1 o-mt-10">{{ $t("device.affiliatedMerchants") }}:{{ item.adminUserName }}</span> -->
+                  <div class="contentWord kBordBott">{{ $t("device.affiliatedMerchants") }}:{{ item.adminUserName }}
+                  </div>
                   <!-- 睡眠状态 -->
                   <div class="contentWord kBordBott">
                     <span class="o-mr-10">{{ $t("device.sleepState") }}:{{ item.isSleep ? $t("device.sleeping") :
-        $t("device.notSleeping") }}</span>
-                    <van-switch :model-value="item.isSleep"  size="23px" @click="changeSleep(item)" />
+                      $t("device.notSleeping") }}</span>
+                    <van-switch :model-value="item.isSleep" size="23px" @click="changeSleep(item)" />
                   </div>
                   <!-- 睡眠描述 -->
                   <div v-if="item.isSleep" class="contentWord kBordBott">
@@ -114,7 +143,7 @@
                   <div class="contentWord kBordBott" v-if="item.machineType == null || item.machineType == '0'">
                     <span>
                       {{ (item.machineType == '0' || item.machineType == null) ? $t("device.furnHeadStatus") :
-        $t("device.deviceStatus") }}:
+                        $t("device.deviceStatus") }}:
                       {{ item.eqeStatus === 1 ? $t("device.opened") : $t("device.closed") }}
                     </span>
                     <div class="o-ml-10">
@@ -145,8 +174,9 @@
                     <span>{{ $t("device.position") }}:</span>
                     <a class="clickable-link" @click="viewPosiClk(item)">{{ item.fullName }}</a>
                   </span>
+
                   <!-- 机器参数 -->
-                  <van-row class="layer5 kBordBott" justify="space-between"
+                  <!-- <van-row class="layer5 kBordBott" justify="space-between"
                     v-if="(item.machineType == '0' || item.machineType == null) && item.equimentType != 'P30'">
                     <van-col class="word5" style="">{{ $t("device.furnaceHeadTemperature") }}:{{
         item.furnaceTm
@@ -157,14 +187,16 @@
                     <van-col class="word5" style="">{{ $t("device.humidityInCabinet") }}:{{
         item.cabinetHd
       }}{{ $t("device.humidity") }}</van-col>
-                  </van-row>
+                  </van-row> -->
+
+
                   <van-row class="layer5 kBordBott" justify="space-between" v-if="item.machineType == '1'">
                     <van-col class="word5" style="">{{ $t("device.cornGeneratorTemperature") }}:{{
-        item.cabinetTm
-      }}{{ $t("device.degree") }}</van-col>
+                      item.cabinetTm
+                    }}{{ $t("device.degree") }}</van-col>
                     <van-col class="word5" style="">{{ $t("device.stirringTemperature") }}:{{
-        item.cabinetHd
-      }}{{ $t("device.degree") }}</van-col>
+                      item.cabinetHd
+                    }}{{ $t("device.degree") }}</van-col>
                     <van-col class="word5" style="">{{ $t("device.cupQuantity") }}:{{ item.furnaceTm
                       }}</van-col>
                   </van-row>
@@ -185,8 +217,8 @@
                     </van-row>
                     <div class="sugarTxt kBordBott">
                       <span>{{ $t("device.stick") }}:{{
-        Format_calcuDecial(item.stick)
-      }}%</span>
+                        Format_calcuDecial(item.stick)
+                      }}%</span>
                     </div>
                     <van-row gutter="20" class="sugarTxt kBordBott">
                       <van-col>
@@ -200,7 +232,7 @@
                     <span class="contentWord kBordBott">
                       <span class="l-flex-RC">{{ $t("device.oneKeyFeed") }}:
                         <van-button class="replenishment" @click="replenishmentClk(item)" type="primary">{{
-        $t("device.replenishment") }}
+                          $t("device.replenishment") }}
                         </van-button>
                       </span>
                       <!-- <a class="replenishment" @click="replenishmentClk(item)">{{ $t("device.replenishment")
@@ -209,20 +241,20 @@
                   </template>
                   <!-- 最近刷新时间 -->
                   <span class="contentWord kBordBott">{{ $t("device.lastRefreshTime") }}:{{
-        showDateTime(item.lastUpdateTime)
-      }}</span>
+                    showDateTime(item.lastUpdateTime)
+                  }}</span>
                   <!-- 音量 -->
                   <span v-if="item.machineType != '2'" class="contentWord kBordBott">{{ $t("device.volume") }}:{{
-        item.volume }}</span>
+                    item.volume }}</span>
                   <!-- 报警内容 -->
                   <div class="contentWord kBordBott l-flex-LC justify-space-between">
                     <span>{{ $t("device.alarmContent") }}:</span>
                     <!-- <div class="l-flex-RC"> -->
                     <span class="word3">{{
-        item.alarmList && item.alarmList[0] && item.alarmList[0].alarmContent
-          ? showDateTime(item.alarmList[0].occurrenceTime) + " " + item.alarmList[0].alarmContent
-          : $t("device.alarmContentNoData")
-      }}
+                      item.alarmList && item.alarmList[0] && item.alarmList[0].alarmContent
+                        ? showDateTime(item.alarmList[0].occurrenceTime) + " " + item.alarmList[0].alarmContent
+                        : $t("device.alarmContentNoData")
+                    }}
                     </span>
                     <van-button v-if="item.alarmList && item.alarmList[0] && item.alarmList[0].alarmContent"
                       style="flex-shrink: 0; margin: 0;" type="primary" color="#07c160"
@@ -230,16 +262,19 @@
                     <!-- </div> -->
                   </div>
                   <div class="editDeviceBtnCon l-flex-center o-mt-10">
+                    <!-- 详细信息 -->
                     <div class="l-flex-RC" @click="deviceSet(item)">
                       <span class="c-text-14">{{
-        $t("device.editDevice")
-      }}</span>
+                        $t("device.editDevice")
+                      }}</span>
                       <div class="box2 flex-col"></div>
                     </div>
+
+                    <!-- 远程操作 -->
                     <div class="l-flex-RC" @click="deviceOprShow(item)">
                       <span class="c-text-14">{{
                         $t("device.commonOperations")
-                        }}</span>
+                      }}</span>
                       <div class="box2 flex-col"></div>
                     </div>
                   </div>
@@ -249,7 +284,7 @@
                   <div class="l-flex-RC">
                     <span class="info2 o-mr-2">{{
                       item.checkType ? $t("device.stow") : $t("device.seeMore")
-                      }}</span>
+                    }}</span>
                     <div class="group2 flex-col" :class="{ checkType: item.checkType }"></div>
                   </div>
                 </div>
@@ -524,7 +559,7 @@ export default {
           equipmentId: row.id
         });
         if (data.code) {
-          showSuccessToast(t("device.sentSuccessfully")); 
+          showSuccessToast(t("device.sentSuccessfully"));
           setTimeout(() => {
             // router.go(0);
             init();

+ 144 - 45
src/views/home/index.vue

@@ -5,8 +5,8 @@
       <s-header :name="sys ? sys.title : sysTitle" :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" style="font-size: 0.375rem;"
-          left-icon="volume-o" :text="noticeContent.title" />
+        <van-notice-bar @click="noticeClk" mode="link" :scrollable="true" color="rgba(64,77,116,1)" background="#fff"
+          style="font-size: 0.375rem;" left-icon="volume-o" :text="noticeContent.title" />
       </template>
       <div class="intervalRow"></div>
       <div class="nameDeviceRow flex-col">
@@ -36,34 +36,34 @@
       <div v-if="showDataDiv" class="o-plr-8 o-pt-10">
         <div class="salesData flex-col" @click="pushOrderCenter">
           <!-- <div class="block5 flex-col"> -->
-            <div class="topTitle flex-row justify-end">
-              <span class="txt10">{{ $t("home.orderData") }}</span>
-              <div class="layer4 flex-col"></div>
-            </div>
-            <div class="salesDataBox flex-row">
-              <div class="dataGroup flex-col">
-                <div class="dataGroupBox flex-row justify-center">
-                  <!-- 首页 - 订单数据 - 收入总额¥ -->
-                  <!-- <span class="word8">&yen;</span> -->
-                  <span class="currencySymbol">{{ currencySymbol }}</span>
-                  <span class="dataNum">{{ salesVolume.toFixed(2) }}</span>
-                </div>
-                <span class="dataText">{{ $t("home.totalIncome") }}</span>
+          <div class="topTitle flex-row justify-end">
+            <span class="txt10">{{ $t("home.orderData") }}</span>
+            <div class="layer4 flex-col"></div>
+          </div>
+          <div class="salesDataBox flex-row">
+            <div class="dataGroup flex-col">
+              <div class="dataGroupBox flex-row justify-center">
+                <!-- 首页 - 订单数据 - 收入总额¥ -->
+                <!-- <span class="word8">&yen;</span> -->
+                <span class="currencySymbol">{{ currencySymbol }}</span>
+                <span class="dataNum">{{ salesVolume.toFixed(2) }}</span>
               </div>
-              <div class="dataGroup flex-col">
-                <div class="dataGroupBox flex-col justify-between">
-                  <span class="dataNum">{{ salesNumber }}</span>
-                  <span class="dataText">{{ $t("home.productNum") }}</span>
-                </div>
+              <span class="dataText">{{ $t("home.totalIncome") }}</span>
+            </div>
+            <div class="dataGroup flex-col">
+              <div class="dataGroupBox flex-col justify-between">
+                <span class="dataNum">{{ salesNumber }}</span>
+                <span class="dataText">{{ $t("home.productNum") }}</span>
               </div>
-              <div class="dataGroup flex-col">
-                <div class="dataGroupBox flex-col justify-between">
-                  <span class="dataNum">{{ orderNumber }}</span>
-                  <span class="dataText">{{ $t("home.numberOfOrders") }}</span>
-                </div>
+            </div>
+            <div class="dataGroup flex-col">
+              <div class="dataGroupBox flex-col justify-between">
+                <span class="dataNum">{{ orderNumber }}</span>
+                <span class="dataText">{{ $t("home.numberOfOrders") }}</span>
               </div>
             </div>
           </div>
+        </div>
         <!-- </div> -->
       </div>
       <!-- 时间 -->
@@ -83,29 +83,58 @@
       </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">
-            <div class="wrap2 flex-row justify-between">
-              <div class="outer10 flex-col"></div>
-              <div class="TextGroup13 flex-col">
-                <span class="txt13">{{ $t("home.commonTools") }}</span>
+
+      <div v-if="user.ifForeign === '1'">
+        <!-- 机器销售额 -->
+        <div class="outer9 flex-col justify-center">
+          <div class="main24 flex-col justify-between">
+            <div class="ImageText10 flex-col">
+              <div class="wrap2 flex-row justify-between">
+                <div class="outer10 flex-col"></div>
+                <div class="TextGroup13 flex-col">
+                  <span class="txt13">{{ $t("home.machineSales") }}</span>
+                </div>
               </div>
             </div>
           </div>
         </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="TextGroup14 flex-col">
-            <!-- <span class="info15" v-html="item.label"></span> -->
-            <span class="info15">{{ $t(item.label) }}</span>
+        <!-- 各支付方式总额 -->
+        <van-list offset="100" :immediate-check="false">
+          <div v-for="item in combinedList" :key="item" class="o-pb-20">
+            <div>
+              <van-cell-group inset class="machineSaleBox">
+                <!-- 设备名称 -->
+                <div class="contentWord kBordBott">{{ item.machineName }}
+                </div>
+                <!-- <van-row class="layer5" justify="space-between">
+            <van-col span="12">总销售额: {{ item.totalSales }}</van-col>
+            <van-col span="12">总现金: {{ item.totalCash }}</van-col>
+          </van-row> -->
+                <van-row class="layer5" justify="space-between">
+                  <!-- 硬币 -->
+                  <van-col span="8">{{ $t("home.coins") }}: {{ item.coins }}</van-col>
+                  <!-- 纸币 -->
+                  <van-col span="8">{{ $t("home.bills") }}: {{ item.bills }}</van-col>
+                  <!-- 硬币+纸币 -->
+                  <van-col span="8">{{ $t("home.coinsBills") }}: {{ item.coinsBills }}</van-col>
+                  <!-- 信用卡 -->
+                  <van-col span="8">{{ $t("home.creditCard") }}: {{ item.creditCard }}</van-col>
+                  <!-- 电子支付 -->
+                  <van-col span="8">{{ $t("home.electronicPayment") }}: {{ item.electronicPayment }}</van-col>
+                </van-row>
+              </van-cell-group>
+            </div>
           </div>
-        </div>
+        </van-list>
       </div>
+      <div v-else style="text-align: center;">
+        <div><br><br></div>
+        {{ $t("home.migrationInstructions") }}
+        
+      </div>
+
+
+
     </div>
     <!-- 通知弹窗 -->
     <kDialog :dialogTitle="$t('home.notificationPop.notification')" :cancelBtnTxt="$t('home.notificationPop.nextTime')"
@@ -156,7 +185,6 @@ import kNoData from "../../components/commom/kNoData/index.vue";
 import kDialog from "../../components/commom/kDialog/index.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 typeDownMenu from "../../components/typeDownMenu";
@@ -168,10 +196,11 @@ import {
   Api_postMachineNum,
   Api_getUpdateNotice,
   getIsAlarm,
+  Api_getEquipmentPageStatistics,
 } from "../../service/home";
 import dateUtil from "../../utils/dateUtil";
 import { useI18n } from "vue-i18n";
-import { showToast } from "vant";
+import { showFailToast, showToast } from "vant";
 import RobotIcon from '@/assets/home/robot.png';
 import { getLocal, setLocal, navigatorLanguage } from "@/common/js/utils";
 
@@ -255,11 +284,13 @@ export default {
     const update = (uDate) => {
       dateSelect.value = uDate;
       getStatisticsFun();
+      getMachineNameListFunc()
     };
     let typeSelectData = {};
     const upselectdata = (uSData) => {
       typeSelectData = uSData;
       getStatisticsFun();
+      getMachineNameListFunc()
     };
     const salesVolume = ref(0);
     const salesNumber = ref(0);
@@ -331,10 +362,12 @@ export default {
               },
             },
             grid: {
+              top: '10%',
               left: "3%",
               right: "4%",
               bottom: "10%",
               containLabel: true,
+              height: 'auto',
             },
             legend: {
               bottom: 0,
@@ -471,8 +504,64 @@ export default {
       }
 
       getTitleFunc();
+
+      if (user) {
+        getMachineNameListFunc();
+      }
+
     });
 
+    const finished = ref(false);
+    const loading = ref(true);
+
+
+    // 设备销售数据 
+    const combinedList = ref([]); // 设备销额集合
+
+
+    const getMachineNameListFunc = async () => {
+
+      combinedList.value = [];
+      const searchParams = {
+        adminId: user.id,
+        ...dateSelect.value,
+      }
+      try {
+        const { data } = await Api_getEquipmentPageStatistics(Object.assign({}, searchParams));
+        if (data.code === "00000" && data.data) {
+
+          for (let i = 0; i < data.data.categories.length; i++) {
+            const machineNameVal = data.data.categories[i];  // 设备名称
+            const coinsVal = data.data.series[0].data[i];  // 硬币销额
+            const billsVal = data.data.series[1].data[i];  // 纸币销额
+            const coinsBillsVal = data.data.series[2].data[i];  // 硬币+纸币销额
+            const creditCardVal = data.data.series[3].data[i];  // 信用卡销额
+            const electronicPaymentVal = data.data.series[4].data[i];  // 电子支付销额
+
+
+            const machineSalesData = {
+              // totalSales: totalSalesVal,
+              // totalCash: totalCashVal,
+              machineName: machineNameVal,
+              coins: coinsVal,
+              bills: billsVal,
+              coinsBills: coinsBillsVal,
+              creditCard: creditCardVal,
+              electronicPayment: electronicPaymentVal
+            }
+
+            combinedList.value.push(machineSalesData);
+          }
+
+        } else {
+          showFailToast(data.message);
+        }
+      } catch (error) {
+        console.log("error", error);
+        console.error("Error", error)
+      }
+    }
+
     const getTitleFunc = async () => {
       const currentDomain = window.location.href;
       // const currentDomain = window.location.hostname;
@@ -662,7 +751,7 @@ export default {
     };
 
     // const aiDialog = showDialog();
-    const offset = ref({ x: Math.floor(window.innerWidth * 0.8), y: Math.floor(window.innerHeight * 0.7) });
+    const offset = ref({ x: Math.floor(window.innerWidth * 0.8), y: Math.floor(window.innerHeight * 0.75) });
 
     const popupVisible = ref(false);
     // const token = getLocal("token");
@@ -696,6 +785,7 @@ export default {
     // };
 
     return {
+      user,
       userName,
       update,
       upselectdata,
@@ -734,6 +824,15 @@ export default {
       offset,
       isShowRobot,
       sysTitle,
+      finished,
+      loading,
+      // machineName,
+      // coins,
+      // bills,
+      // coinsBills,
+      // creditCard,
+      // electronicPayment,
+      combinedList
     };
   },
 

+ 14 - 8
src/views/taskMessage/equipment/index.vue

@@ -4,30 +4,36 @@
     <s-header :name="$t('taskMessage.taskMessage')" :noback="false"></s-header>
     <div class="taskMessageBox flex-col">
       <van-list v-model:loading="loading" v-model:error="error" :error-text="$t('common.reqFailClkReload')"
-        :finished="finished" :finished-text="$t('common.noMoreTxt')" offset="300" :immediate-check="false" @load="onLoad">
+        :finished="finished" :finished-text="$t('common.noMoreTxt')" offset="300" :immediate-check="false"
+        @load="onLoad">
         <div class="searchRow flex-row justify-between">
           <div class="flex-col">
             <div class="flex-row justify-between bd3">
               <div class="flex-col outer4 equipmentIcon"></div>
               <span class="flex-col txt2">{{ $t("taskMessage.total")
-              }}<span class="discountNumber">{{ alarmHistoryTotal }}</span>{{ $t("taskMessage.recordsInTotal") }}</span>
+                }}<span class="discountNumber">{{ alarmHistoryTotal }}</span>{{ $t("taskMessage.recordsInTotal")
+                }}</span>
             </div>
           </div>
+
           <div class="l-flex-RC">
+            <!-- 查看待审批的申请 -->
             <div @click="reviewedClk" class="label3 o-mr-30">
               {{ $t("taskMessage.toViewAppro") }}
             </div>
+            <!-- 搜索图片 -->
             <div @click="noticeClk" class="main5 l-flex-RC">
               <img class="label2 o-mr-5" src="../../../assets/device/searchIcon.png" />
-              <!-- <span class="txt3">{{ $t("taskMessage.search") }}</span> -->
             </div>
           </div>
+          
         </div>
         <div class="listBox">
           <div v-for="(item, index) in alarmHistoryList" :key="index" class="listItem">
             <div class="itemBox">
               <div class="itemRow">
-                <span class="itemTitle">{{ $t("taskMessage.affiliatedMerchants") }}:&nbsp;</span>{{ item.adminUserName }}
+                <span class="itemTitle">{{ $t("taskMessage.affiliatedMerchants") }}:&nbsp;</span>{{ item.adminUserName
+                }}
               </div>
               <div class="itemRow">
                 <span class="itemTitle">{{ $t("taskMessage.equipmentNo") }}:&nbsp;</span>{{ item.clientId }}
@@ -45,7 +51,8 @@
                   showDateTime(item.createDate) }}
               </div>
               <div class="itemRow" v-if="item.statusType !== 1">
-                <span class="itemTitle">{{ $t("taskMessage.approvalTime") }}:&nbsp;</span>{{ showDateTime(item.modifyDate)
+                <span class="itemTitle">{{ $t("taskMessage.approvalTime") }}:&nbsp;</span>{{
+                  showDateTime(item.modifyDate)
                 }}
               </div>
               <div v-if="item.statusType === 1 && isOper" class="itemRow"
@@ -92,7 +99,7 @@
             " :label="$t('taskMessage.equipmentInit.searchPop.equipmentNo')" />
           <van-field clearable v-model="searchForm.managementSystemID" :placeholder="$t('taskMessage.equipmentInit.searchPop.managementSystemIDPlace')
             " :label="$t('taskMessage.equipmentInit.searchPop.managementSystemID')
-    " />
+              " />
           <van-field clearable v-model="searchForm.merchantName" :placeholder="$t('taskMessage.equipmentInit.searchPop.merchantNamePlace')
             " :label="$t('taskMessage.equipmentInit.searchPop.merchantName')" />
           <van-field @click-input="busiInpClk" readonly clearable v-model="searchForm.stateName"
@@ -325,5 +332,4 @@ export default {
 
 <style lang="less" scoped>
 @import "../../../common/style/common.less";
-</style>
-  
+</style>

+ 13 - 5
src/views/user.vue

@@ -36,9 +36,9 @@
                     <template #right-icon>
                       <div class="l-flex-RC">
                         <van-icon v-if="fieldValue" @click="
-        fieldValue = '';
-      accountDetail.areaId = '';
-      " class="o-mr-6" name="clear" />
+                          fieldValue = '';
+                        accountDetail.areaId = '';
+                        " class="o-mr-6" name="clear" />
                         <van-icon @click="fieldValueInpClk" name="arrow-down" />
                       </div>
                     </template>
@@ -136,7 +136,7 @@
 
                 <template #button>
                   <van-button type="primary" @click="mailboxChg(cofficentForm.currencySymbol, 5)">{{
-        $t("user.confirmLog") }}
+                    $t("user.confirmLog") }}
                   </van-button>
                 </template>
               </van-field>
@@ -156,7 +156,7 @@
 
                   <template #button>
                     <van-button type="primary" @click="mailboxChg(diyPassword, 6)">{{
-        $t("user.confirmLog") }}
+                      $t("user.confirmLog") }}
                     </van-button>
                   </template>
                 </van-field>
@@ -214,6 +214,14 @@
           <span class="baseText">{{ $t("user.commonOperations") }}</span>
         </div>
         <div class="operListBox">
+          <!-- 常用工具 -->
+          <div class="taskListRow flex-col" @click="pushPageList('/commonTools')">
+            <div class="taskIcon commonToolsIcon"></div>
+            <div class="taskRight">
+              <div class="taskTitle">{{ $t("home.commonTools") }}</div>
+            </div>
+          </div>
+
           <!-- 任务消息 -->
           <div v-if="roleCheck()" class="taskListRow flex-col" @click="pushPageList('/taskMessage')">
             <div class="taskIcon taskMessageIcon"></div>