浏览代码

feat:“优化部分图标,添加删除优惠码功能”

soobin 1 年之前
父节点
当前提交
2900a8f768
共有 51 个文件被更改,包括 517 次插入461 次删除
  1. 二进制
      src/assets/device/operIcon/alarmClock.png
  2. 二进制
      src/assets/device/operIcon/awake.png
  3. 二进制
      src/assets/device/operIcon/customLogo.png
  4. 二进制
      src/assets/device/operIcon/deletedevice.png
  5. 二进制
      src/assets/device/operIcon/doSugar.png
  6. 二进制
      src/assets/device/operIcon/lock.png
  7. 二进制
      src/assets/device/operIcon/materialMonitor.png
  8. 二进制
      src/assets/device/operIcon/modulation.png
  9. 二进制
      src/assets/device/operIcon/openDoor.png
  10. 二进制
      src/assets/device/operIcon/paramsSet.png
  11. 二进制
      src/assets/device/operIcon/password.png
  12. 二进制
      src/assets/device/operIcon/restart.png
  13. 二进制
      src/assets/device/operIcon/showGoods.png
  14. 二进制
      src/assets/device/operIcon/tuoji.png
  15. 二进制
      src/assets/device/operIcon/viewLogs.png
  16. 二进制
      src/assets/device/searchIcon.png
  17. 26 17
      src/assets/language/en.json
  18. 37 24
      src/assets/language/zh.json
  19. 二进制
      src/assets/navbarLogo/device.png
  20. 二进制
      src/assets/navbarLogo/deviceActive.png
  21. 二进制
      src/assets/navbarLogo/home.png
  22. 二进制
      src/assets/navbarLogo/homeActive.png
  23. 二进制
      src/assets/navbarLogo/ranking.png
  24. 二进制
      src/assets/navbarLogo/rankingActive.png
  25. 二进制
      src/assets/navbarLogo/user.png
  26. 二进制
      src/assets/navbarLogo/userActive.png
  27. 二进制
      src/assets/order/coinPay.png
  28. 7 26
      src/components/NavBar.vue
  29. 5 0
      src/service/device/index.js
  30. 4 0
      src/service/discountCode/index.js
  31. 0 15
      src/styles/accountPer/index.less
  32. 5 22
      src/styles/alarmHistory/index.less
  33. 4 24
      src/styles/device/index.less
  34. 17 26
      src/styles/discountCode/index.less
  35. 1 0
      src/styles/home/index.less
  36. 6 23
      src/styles/merchantManage/index.less
  37. 45 68
      src/styles/orderCenter/index.less
  38. 64 109
      src/styles/robotRanking/index.less
  39. 5 13
      src/styles/taskMessage/index.less
  40. 1 1
      src/utils/dateUtil.js
  41. 13 10
      src/views/accountPer/add.vue
  42. 2 2
      src/views/alarmHistory/index.vue
  43. 47 12
      src/views/device/deviceOper.vue
  44. 28 16
      src/views/device/index.vue
  45. 165 24
      src/views/discountCode/index.vue
  46. 19 2
      src/views/home/index.vue
  47. 2 2
      src/views/merchantManage/index.vue
  48. 7 9
      src/views/orderCenter/index.vue
  49. 6 14
      src/views/robotRanking.vue
  50. 1 1
      src/views/taskMessage/equipment/index.vue
  51. 0 1
      src/views/taskMessage/proportion/index.vue

二进制
src/assets/device/operIcon/alarmClock.png


二进制
src/assets/device/operIcon/awake.png


二进制
src/assets/device/operIcon/customLogo.png


二进制
src/assets/device/operIcon/deletedevice.png


二进制
src/assets/device/operIcon/doSugar.png


二进制
src/assets/device/operIcon/lock.png


二进制
src/assets/device/operIcon/materialMonitor.png


二进制
src/assets/device/operIcon/modulation.png


二进制
src/assets/device/operIcon/openDoor.png


二进制
src/assets/device/operIcon/paramsSet.png


二进制
src/assets/device/operIcon/password.png


二进制
src/assets/device/operIcon/restart.png


二进制
src/assets/device/operIcon/showGoods.png


二进制
src/assets/device/operIcon/tuoji.png


二进制
src/assets/device/operIcon/viewLogs.png


二进制
src/assets/device/searchIcon.png


+ 26 - 17
src/assets/language/en.json

@@ -74,6 +74,7 @@
     "whole": "whole",
     "successfullyModifiedTheAccount": "Successfully modified the account",
     "failedToModifyTheAccount": "Failed to modify the account",
+    "accountNameExists": "Account name exists",
     "accountAddedSuccessfully": "Account added successfully",
     "failedToAddAccount": "Failed to add account",
     "successfullyDeletedTheAccount": "Successfully deleted the account",
@@ -157,7 +158,7 @@
       "selected": "Selected",
       "individual": "individual",
       "cancel": "cancel",
-      "confirmDel": "confirm deletion",
+      "confirmDel": "Confirm deletion",
       "addRule": {
         "title": "Add Rule",
         "editTitle": "Edit Rule",
@@ -338,6 +339,8 @@
     "enableMaterialSucceed": "Enable material successfully",
     "enableMaterialFailed": "Enable material failed",
     "sleepSuccessfully": "Sleep successfully",
+    "Succeed": "Request sent successfully",
+    "Failed": "Request sent failure",
     "open": "open",
     "close": "close",
     "success": "success",
@@ -484,6 +487,7 @@
       "registerButton": "Commit",
       "customLogoSucceed": "Custom logo success"
     },
+    "lockDevice": "Remote lock",
     "deleteDevice": "Delete Machine",
     "viewLogs": "View logs",
     "noPosition": "No positioning",
@@ -542,13 +546,13 @@
     "flowerTypePlace": "Please select the flower type"
   },
   "alarmClockSet": {
-    "monday":"Mon",
-    "tuesday":"Tue",
-    "wednesday":"Wed",
-    "thursday":"Thu",
-    "friday":"Fri",
-    "saturday":"Sat",
-    "sunday":"Sun",
+    "monday": "Mon",
+    "tuesday": "Tue",
+    "wednesday": "Wed",
+    "thursday": "Thu",
+    "friday": "Fri",
+    "saturday": "Sat",
+    "sunday": "Sun",
     "checkedAll": "PickAll"
   },
   "discountCode": {
@@ -565,13 +569,19 @@
     "total": "Total ",
     "discountCodesInTotal": " Discount codes",
     "search": "search",
-    "notUsed": "not used",
+    "notUsed": "Not used",
     "used": "Used",
-    "export": "export",
-    "apply": "apply",
+    "export": "Export",
+    "apply": "Apply",
+    "cancel": "Cancel",
+    "delete": "Delete",
+    "selectAll": "All",
+    "confirmDel": "Confirm deletion",
+    "deletionSucceeded": "Deletion succeeded",
     "discount": "discount",
     "deduction": "deduction",
     "termOfValidity": "Valid until",
+    "affiliatedMerchants": "Business Owner",
     "expired": "(Expired)",
     "validDays": "Valid days",
     "usingTheMachine": "Using the machine",
@@ -654,7 +664,7 @@
       "nextTime": "See it next time",
       "roger": "Do not show again"
     },
-    "week" : {
+    "week": {
       "mon": "Mon",
       "tue": "Tue",
       "wed": "Wed",
@@ -832,8 +842,8 @@
     "bankNo": "Bank No",
     "theTwoPasswordsAreDifferent": "The two passwords are different",
     "modificationSucceeded": "Modification succeeded",
-    "joinpayMch":"JoinpayMch status",
-    "huifuMch":"HuifuMch Status",
+    "joinpayMch": "JoinpayMch status",
+    "huifuMch": "HuifuMch Status",
     "tips": "Remind",
     "autoLogin": "Do you want to switch login?"
   },
@@ -1256,8 +1266,7 @@
     "replaysInSeconds": "Replays in seconds",
     "emailRegistration": "Email",
     "phoneRegistration": "Phone",
-    "twoTypedDiff" : "两次输入的密码不一致"
-
+    "twoTypedDiff": "两次输入的密码不一致"
   },
   "robotRanking": {
     "machineSalesRanking": "Machine sales ranking",
@@ -1450,4 +1459,4 @@
   "Advertising management": "Advertising management",
   "Order Export": "Order Export",
   "Apk management": "Apk management"
-}
+}

+ 37 - 24
src/assets/language/zh.json

@@ -75,12 +75,13 @@
     "successfullyModifiedTheAccount": "修改账号成功",
     "failedToModifyTheAccount": "修改账号失败",
     "accountAddedSuccessfully": "添加账号成功",
+    "accountNameExists": "账号名已存在",
     "failedToAddAccount": "添加账号失败",
     "successfullyDeletedTheAccount": "删除账号成功",
     "failedToDeleteTheAccount": "删除账号失败",
     "accountPermission": "账号权限",
-    "total": "共",
-    "permissions": "条权限",
+    "total": "共 ",
+    "permissions": " 条权限",
     "rolePermissions": "角色权限",
     "add": "子商家",
     "screen": "筛选",
@@ -133,8 +134,8 @@
     "advertisingManagement": "广告管理",
     "requestFailed": "请求失败,点击重新加载",
     "noMore": "没有更多了",
-    "total": "共",
-    "ads": "个广告",
+    "total": "共 ",
+    "ads": " 个广告",
     "advertisingRules": "广告规则",
     "add": "添加",
     "delete": "删除",
@@ -147,8 +148,8 @@
     "delTips": "请先选择需要删除的数据",
     "advertRule": {
       "sysTitle": "广告规则",
-      "total": "共",
-      "rules": "条规则",
+      "total": "共 ",
+      "rules": " 条规则",
       "add": "添加",
       "delete": "删除",
       "push": "推送",
@@ -197,8 +198,8 @@
     "alarmHistory": "报警历史",
     "requestFailed": "请求失败,点击重新加载",
     "noMore": "没有更多了",
-    "common": "共",
-    "recordsTotal": "条记录",
+    "common": "共 ",
+    "recordsTotal": " 条记录",
     "search": "搜索",
     "affiliatedMerchants": "所属商家",
     "equipmentNo": "设备编号",
@@ -237,6 +238,9 @@
     "managementCenter": "设备管理中心",
     "setAlarm": "设置闹钟",
     "equipmentName": "设备名称",
+    "lockCondition": "锁机状态",
+    "lockState": "不可使用,已锁机",
+    "unLockState": "正常使用,未锁机",
     "equipmentNameTips": "暂未设置名称",
     "selectDevice": "选择设备",
     "selectTime": "选择时间",
@@ -335,6 +339,8 @@
     "deleteDeviceFailed": "删除设备失败",
     "enableMaterialSucceed": "启用物料监控成功",
     "enableMaterialFailed": "启用物料监控失败",
+    "Succeed": "请求发送成功",
+    "Failed": "请求发送失败",
     "sleepSuccessfully": "睡眠成功",
     "open": "开启",
     "close": "关闭",
@@ -405,7 +411,7 @@
     "totalNumberOfEquipment": "总设备数",
     "affiliatedMerchants": "所属商家",
     "sleepState": "睡眠状态",
-    "sleeping": "睡眠中zzZ",
+    "sleeping": "睡眠中 zzZ",
     "notSleeping": "未睡眠",
     "sleepDesc": "睡眠描述",
     "SuspendBusiness": "暂停营业",
@@ -467,8 +473,8 @@
     "modifyPricePage": {
       "title": "商品价格调整",
       "equipmentName": "设备名称",
-      "total": "共",
-      "goods": "个商品",
+      "total": "共 ",
+      "goods": " 个商品",
       "batchModify": "批量修改",
       "modify": "修改",
       "submit": "提交",
@@ -500,6 +506,7 @@
       "passwordCheckRequired": "请再次输入密码进行确认",
       "passwordMatch": "两次密码不一致"
     },
+    "lockDevice": "远程锁机",
     "changePassword": "修改机器密码",
     "deleteDevice": "删除设备",
     "viewLogs": "查看日志",
@@ -563,22 +570,28 @@
     "clickQuery": "点击查询",
     "selectFullTime": "选择日期",
     "discountCode": "优惠码",
-    "total": "共",
-    "discountCodesInTotal": "个优惠码",
+    "total": "共 ",
+    "discountCodesInTotal": " 个优惠码",
     "search": "搜索",
     "notUsed": "未使用",
     "used": "已使用",
     "export": "导出",
     "apply": "申请",
+    "delete": "删除",
+    "cancel": "取消",
+    "selectAll": "全选",
+    "confirmDel": "确认删除",
+    "deletionSucceeded": "删除成功",
     "discount": "折扣",
     "deduction": "抵扣",
-    "termOfValidity": "有效期至",
+    "termOfValidity": "有效期",
+    "affiliatedMerchants": "所属商家",
     "expired": "(已过期)",
     "validDays": "有效天数",
     "usingTheMachine": "使用机器",
     "purchaseDiscountCode": "购买优惠码",
-    "numberOfDiscountCodesLabel": "优惠码个数",
-    "numberOfDiscountCodesPlaceholder": "请输入优惠码个数",
+    "numberOfDiscountCodesLabel": "个数",
+    "numberOfDiscountCodesPlaceholder": "请输入个数",
     "aSingleGenerationCannotExceed": "单次生成不能超过200个",
     "pleaseEnterTheValidityPeriod": "请输入有效期",
     "Months": "个月",
@@ -603,8 +616,8 @@
   },
   "distributionSet": {
     "distributionSettings": "分销设置",
-    "total": "共",
-    "leftTitle": "条分销设置",
+    "total": "共 ",
+    "leftTitle": " 条分销设置",
     "rightAdd": "添加设备分销人",
     "equipName": "设备名称",
     "partners": "合作商",
@@ -775,8 +788,8 @@
   },
   "merchantManage": {
     "merchantManagement": "商户管理",
-    "total": "共",
-    "recordsInTotal": "条记录",
+    "total": "共 ",
+    "recordsInTotal": " 条记录",
     "search": "搜索",
     "telephone": "电话",
     "mailbox": "邮箱",
@@ -975,8 +988,8 @@
     "successfullyModifiedRole": "修改角色成功",
     "failedToModifyRole": "修改角色失败",
     "rolePermissionSettings": "角色权限设置",
-    "total": "共",
-    "inTotal": "个",
+    "total": "共 ",
+    "inTotal": " 角色",
     "addTo": "添加权限组",
     "edit": "编辑",
     "delete": "删除",
@@ -1091,8 +1104,8 @@
   },
   "taskMessage": {
     "equipmentInitializationApproval": "设备初始化审批",
-    "total": "共",
-    "recordsInTotal": "条记录",
+    "total": "共 ",
+    "recordsInTotal": " 条记录",
     "search": "搜索",
     "affiliatedMerchants": "所属商家",
     "equipmentNo": "设备编号",

二进制
src/assets/navbarLogo/device.png


二进制
src/assets/navbarLogo/deviceActive.png


二进制
src/assets/navbarLogo/home.png


二进制
src/assets/navbarLogo/homeActive.png


二进制
src/assets/navbarLogo/ranking.png


二进制
src/assets/navbarLogo/rankingActive.png


二进制
src/assets/navbarLogo/user.png


二进制
src/assets/navbarLogo/userActive.png


二进制
src/assets/order/coinPay.png


+ 7 - 26
src/components/NavBar.vue

@@ -35,7 +35,7 @@
   <!-- <div> -->
   <van-tabbar route active-color="#4d6add" inactive-color="#404d74">
     <van-tabbar-item replace to="/home" icon="home-o">{{ $t('navBar.homePage') }}</van-tabbar-item>
-    <van-tabbar-item replace to="/device" icon="setting-o">{{ $t('navBar.deviceInformation')}}</van-tabbar-item>
+    <van-tabbar-item replace to="/device" :dot="hasAlarm" icon="setting-o">{{ $t('navBar.deviceInformation')}}</van-tabbar-item>
     <van-tabbar-item replace to="/robotranking" icon="bar-chart-o">{{ $t('navBar.machineRanking')}}</van-tabbar-item>
     <van-tabbar-item replace to="/user" icon="user-o">{{ $t('navBar.personalCenter') }}</van-tabbar-item>
   </van-tabbar>
@@ -45,17 +45,15 @@
 <script>
 import { onMounted, computed } from "vue";
 import { useStore } from "vuex";
-import homeUrl from "@/assets/navbarLogo/home.png";
-import homeActiveUrl from "@/assets/navbarLogo/homeActive.png";
-import deviceUrl from "@/assets/navbarLogo/device.png";
-import deviceActiveUrl from "@/assets/navbarLogo/deviceActive.png";
-import rankingUrl from "@/assets/navbarLogo/ranking.png";
-import rankingActiveUrl from "@/assets/navbarLogo/rankingActive.png";
-import userUrl from "@/assets/navbarLogo/user.png";
-import userActiveUrl from "@/assets/navbarLogo/userActive.png";
 // import { useRouter } from "vue-router";
 
 export default {
+  props: {
+    hasAlarm: {
+      type: Boolean,
+      default: false
+    }
+  },
   setup() {
     // const router = useRouter()
     const store = useStore();
@@ -70,26 +68,9 @@ export default {
     const count = computed(() => {
       return store.state.cartCount;
     });
-    // const active = ref('home');
-    // router.afterEach(() => {
-    //   console.log("路由1", router.currentRoute.value.name)
-    //   let currentRouteName = router.currentRoute.value.name;
-    //   if (currentRouteName === 'home' || currentRouteName === 'device' || currentRouteName === 'robotranking' || currentRouteName === 'user') {
-    //     active.value = currentRouteName;
-    //   }
-    // })
 
     return {
       count,
-      homeUrl,
-      homeActiveUrl,
-      deviceUrl,
-      deviceActiveUrl,
-      rankingUrl,
-      rankingActiveUrl,
-      userUrl,
-      userActiveUrl,
-      // active,
     };
   },
 };

+ 5 - 0
src/service/device/index.js

@@ -205,4 +205,9 @@ export function uploadLog(params) {
 // 查询日志
 export function queryLog(params) {
     return axios.get(`/SZWL-SERVER/tEquipment/queryLog?${stringToUrl(params)}`);
+}
+
+// 远程锁机
+export function updateLockStatus(params) {
+    return axios.get(`/SZWL-SERVER/tEquipment/updateLockStatus`, { params })
 }

+ 4 - 0
src/service/discountCode/index.js

@@ -13,4 +13,8 @@ export function discountCodeExport(params) {
 // 添加优惠码
 export function addCode(params) {
   return axios.get(`/SZWL-SERVER/tPromoCode/add?${stringToUrl(params)}`);
+}
+// 批量删除优惠码
+export function deleteCode(params) {
+  return axios.post(`/SZWL-SERVER/tPromoCode/deletes`, params)
 }

+ 0 - 15
src/styles/accountPer/index.less

@@ -111,21 +111,6 @@
         }
     }
 
-    .van-switch {
-        width: 38px;
-        height: 18px;
-
-        .van-switch__node {
-            width: 18px;
-            height: 18px;
-        }
-
-        &.van-switch--on .van-switch__node {
-            transform: translate(calc(38px - 18px));
-        }
-
-    }
-
     .van-switch--on {
         background-color: #4d6add;
     }

+ 5 - 22
src/styles/alarmHistory/index.less

@@ -48,30 +48,13 @@
             }
 
             .main5 {
-                width: 39px;
-                height: 16px;
+                width: auto;
+                cursor: pointer;
 
                 .label2 {
-                    width: 14px;
-                    height: 14px;
-                    margin-top: 1px;
-                }
-
-                .TextGroup2 {
-                    height: 16px;
-                    width: 22px;
-
-                    .txt3 {
-                        width: 22px;
-                        height: 16px;
-                        overflow-wrap: break-word;
-                        color: rgba(64, 77, 116, 1);
-                        font-size: 11px;
-                        text-align: center;
-                        white-space: nowrap;
-                        line-height: 16px;
-                        display: block;
-                    }
+                    width: 20px;
+                    height: 20px;
+                    margin-right: 5px;
                 }
             }
         }

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

@@ -40,34 +40,14 @@
         }
 
         .main5 {
-          width: 39px;
-          height: 16px;
-          margin-left: -55px;
+          width: auto;
+          cursor: pointer;
 
           .label2 {
-            width: 18px;
-            height: 18px;
-            margin-top: 1px;
+            width: 20px;
+            height: 20px;
             margin-right: 5px;
           }
-
-          .TextGroup2 {
-            height: 16px;
-            width: 22px;
-
-            .txt3 {
-              width: 22px;
-              height: 16px;
-              overflow-wrap: break-word;
-              color: rgba(64, 77, 116, 1);
-              font-size: 14px;
-              font-family: PingFangSC-Semibold;
-              text-align: center;
-              white-space: nowrap;
-              line-height: 16px;
-              display: block;
-            }
-          }
         }
       }
 

+ 17 - 26
src/styles/discountCode/index.less

@@ -48,30 +48,13 @@
             }
 
             .main5 {
-                width: 39px;
-                height: 16px;
-
+                width: auto;
+                
                 .label2 {
-                    width: 14px;
-                    height: 14px;
-                    margin-top: 1px;
-                }
-
-                .TextGroup2 {
-                    height: 16px;
-                    width: 22px;
-
-                    .txt3 {
-                        width: 22px;
-                        height: 16px;
-                        overflow-wrap: break-word;
-                        color: rgba(64, 77, 116, 1);
-                        font-size: 11px;
-                        text-align: center;
-                        white-space: nowrap;
-                        line-height: 16px;
-                        display: block;
-                    }
+                    width: 20px;
+                    height: 20px;
+                    margin-right: 5px;
+                    cursor: pointer;
                 }
             }
         }
@@ -81,7 +64,7 @@
             height: 50px;
 
             .tabBox {
-                width: 50%;
+                width: 40%;
                 align-items: center;
                 justify-content: space-around;
 
@@ -104,13 +87,14 @@
             }
 
             .buttomBox {
-                width: 50%;
+                width: 60%;
                 justify-content: flex-end;
                 align-items: center;
 
                 // 导出 
                 .buttonItem {
-                    width: 60px;
+                    cursor: pointer;
+                    width: 55px;
                     line-height: 1.6;
                     font-size: 12px;
                     margin-right: 15px;
@@ -171,6 +155,13 @@
                         background-color: #8787a6;
                     }
                 }
+
+                .checkedBox {
+                    position: absolute;
+                    top: 40px;
+                    right: 10%;          
+                }
+
             }
         }
 

+ 1 - 0
src/styles/home/index.less

@@ -112,6 +112,7 @@
       .block5 {
         width: 100%;
         padding: 20px 30px;
+        cursor: pointer;
 
         .topTitle {
           width: 100%;

+ 6 - 23
src/styles/merchantManage/index.less

@@ -59,30 +59,13 @@
             }
 
             .main5 {
-                width: 39px;
-                height: 16px;
-
+                width: auto;
+                
                 .label2 {
-                    width: 14px;
-                    height: 14px;
-                    margin-top: 1px;
-                }
-
-                .TextGroup2 {
-                    height: 16px;
-                    width: 22px;
-
-                    .txt3 {
-                        width: 22px;
-                        height: 16px;
-                        overflow-wrap: break-word;
-                        color: rgba(64, 77, 116, 1);
-                        font-size: 11px;
-                        text-align: center;
-                        white-space: nowrap;
-                        line-height: 16px;
-                        display: block;
-                    }
+                    width: 20px;
+                    height: 20px;
+                    margin-right: 5px;
+                    cursor: pointer;
                 }
             }
         }

+ 45 - 68
src/styles/orderCenter/index.less

@@ -7,90 +7,62 @@
     background-color: #f5f5f5;
 
     .main3 {
-      width: 100%;
+      // width: 100%;
       height: 54px;
       background: rgba(255, 255, 255, 1) url("../../assets/home/line.png") bottom center no-repeat;
       background-size: 100% auto;
       background-color: #f5f5f5;
-      margin-bottom: 21px;
 
-      .outer1 {
+      .group4 {
         width: 100%;
+        height: 17px;
+        padding: 0 14px;
 
-        .group4 {
-          width: 100%;
-          height: 17px;
-          padding: 0 14px;
+        .ImageText1 {
+          height: 16px;
+          margin-top: 1px;
+          width: 87px;
 
-          .ImageText1 {
-            height: 16px;
-            margin-top: 1px;
+          .outer2 {
             width: 87px;
+            height: 16px;
 
-            .outer2 {
-              width: 87px;
-              height: 16px;
+            .block1 {
+              width: 16px;
+              height: 18px;
+              background: url("../../assets/home/titleIcon.png") top center no-repeat;
+              background-size: 100%;
+            }
 
-              .block1 {
-                width: 16px;
-                height: 18px;
-                background: url("../../assets/home/titleIcon.png") top center no-repeat;
-                background-size: 100%;
-              }
+            .TextGroup1 {
+              height: 14px;
+              margin-top: 2px;
+              width: 65px;
 
-              .TextGroup1 {
-                height: 14px;
-                margin-top: 2px;
+              .txt1 {
                 width: 65px;
-
-                .txt1 {
-                  width: 65px;
-                  height: 14px;
-                  overflow-wrap: break-word;
-                  color: rgba(64, 77, 116, 1);
-                  font-size: 15px;
-                  font-family: PingFangSC-Semibold;
-                  text-align: left;
-                  white-space: nowrap;
-                  line-height: 15px;
-                  display: block;
-                }
+                height: 14px;
+                overflow-wrap: break-word;
+                color: rgba(64, 77, 116, 1);
+                font-size: 15px;
+                font-family: PingFangSC-Semibold;
+                text-align: left;
+                white-space: nowrap;
+                line-height: 15px;
+                display: block;
               }
             }
           }
+        }
 
-          .ImageText2 {
-            height: 16px;
-            width: 39px;
-
-            .group5 {
-              width: 39px;
-              height: 16px;
-              margin-left: -13px;
-              .icon2 {
-                width: 18px;
-                height: 18px;
-                margin-right: 5px;
-              }
-
-              .TextGroup2 {
-                height: 16px;
-                width: 22px;
+        .main5 {
+          width: auto;
+          cursor: pointer;
 
-                .txt2 {
-                  width: 22px;
-                  height: 16px;
-                  overflow-wrap: break-word;
-                  color: rgba(64, 77, 116, 1);
-                  font-size: 14px;
-                  font-family: PingFangSC-Semibold;
-                  text-align: center;
-                  white-space: nowrap;
-                  line-height: 16px;
-                  display: block;
-                }
-              }
-            }
+          .label2 {
+            width: 20px;
+            height: 20px;
+            margin-right: 5px;
           }
         }
       }
@@ -543,8 +515,8 @@
 
             .main11 {
               position: absolute;
-              top: 10px;
-              right: 10px;
+              top: 12px;
+              right: 12px;
               width: 60px;
               height: 60px;
 
@@ -553,6 +525,11 @@
                 background-size: 100%;
               }
 
+              &.coinOrderSuccess {
+                background: url('../../assets/order/coinPay.png') top center no-repeat;
+                background-size: 100%;
+              }
+
               &.orderError {
                 background: url('../../assets/order/payError.png') top center no-repeat;
                 background-size: 100%;

+ 64 - 109
src/styles/robotRanking/index.less

@@ -79,28 +79,29 @@ button:active {
     width: 15%;
     height: 16px;
     margin-right: 50px;
+
     .icon2 {
-      width: 18px;
-      height: 18px;
-      margin-right: 5px;
+        width: 18px;
+        height: 18px;
+        margin-right: 5px;
     }
 
     .TextGroup2 {
-      height: 16px;
-      width: 22px;
-
-      .txt3 {
-        width: 22px;
         height: 16px;
-        overflow-wrap: break-word;
-        color: rgba(64, 77, 116, 1);
-        font-size: 14px;
-        font-family: PingFangSC-Semibold;
-        text-align: center;
-        white-space: nowrap;
-        line-height: 16px;
-        display: block;
-      }
+        width: 22px;
+
+        .txt3 {
+            width: 22px;
+            height: 16px;
+            overflow-wrap: break-word;
+            color: rgba(64, 77, 116, 1);
+            font-size: 14px;
+            font-family: PingFangSC-Semibold;
+            text-align: center;
+            white-space: nowrap;
+            line-height: 16px;
+            display: block;
+        }
     }
 }
 
@@ -108,8 +109,8 @@ button:active {
     background-color: #fff;
     width: 100%;
     // height: calc(100vh - 100px);
-    
-    
+
+
     .box1 {
         height: 100%;
         width: 100%;
@@ -244,97 +245,51 @@ button:active {
                 }
 
                 .mod1 {
-                    background-color: rgba(255, 255, 255, 1);
-                    height: 54px;
-                    width: 100%;
 
-                    .block1 {
-                        width: 100%;
-                        height: 33px;
-                        margin-top: 21px;
+                    .section1 {
+                        margin: 15px 15px;
 
-                        .section1 {
-                            width: 100%;
-                            height: 17px;
-                            padding-left: 15px;
-                            padding-right: 15px;
+                        .ImageText1 {
+                            height: 16px;
+                            margin-top: 1px;
+                            width: 55%;
 
-                            .ImageText1 {
+                            .group4 {
+                                width: 40%;
                                 height: 16px;
-                                margin-top: 1px;
-                                width: 55%;
 
-                                .group4 {
-                                    width: 40%;
+                                .layer3 {
+                                    width: 16px;
                                     height: 16px;
-
-                                    .layer3 {
-                                        width: 16px;
-                                        height: 16px;
-                                        margin-right: 5px;
-                                        background: url("../../assets/home/titleIcon.png") top center no-repeat;
-                                        background-size: 100%;
-                                    }
-
-                                    .TextGroup1 {
-                                        height: 14px;
-                                        margin-top: 2px;
-                                        width: auto;
-
-                                        .word3 {
-                                            width: auto;
-                                            height: 14px;
-                                            overflow-wrap: break-word;
-                                            color: rgba(64, 77, 116, 1);
-                                            font-size: 15px;
-                                            font-family: PingFangSC-Semibold;
-                                            text-align: left;
-                                            white-space: nowrap;
-                                            line-height: 15px;
-                                            display: block;
-                                        }
-                                    }
+                                    margin-right: 5px;
+                                    background: url("../../assets/home/titleIcon.png") top center no-repeat;
+                                    background-size: 100%;
                                 }
-                            }
 
-                            .ImageText2 {
-                                height: 16px;
-                                width: 39px;
-
-                                .group5 {
-                                    width: 39px;
-                                    height: 16px;
-
-                                    .icon1 {
-                                        width: 14px;
-                                        height: 14px;
-                                        margin-top: 1px;
-                                    }
-
-                                    .TextGroup2 {
-                                        height: 16px;
-                                        width: 22px;
-
-                                        .word4 {
-                                            width: 22px;
-                                            height: 16px;
-                                            overflow-wrap: break-word;
-                                            color: rgba(64, 77, 116, 1);
-                                            font-size: 11px;
-                                            text-align: center;
-                                            white-space: nowrap;
-                                            line-height: 16px;
-                                            display: block;
-                                        }
-                                    }
+                                .word3 {
+                                    width: auto;
+                                    height: 14px;
+                                    overflow-wrap: break-word;
+                                    color: rgba(64, 77, 116, 1);
+                                    font-size: 15px;
+                                    font-family: PingFangSC-Semibold;
+                                    text-align: left;
+                                    white-space: nowrap;
+                                    line-height: 15px;
+                                    display: block;
                                 }
                             }
                         }
 
-                        .img1 {
-                            width: 100%;
-                            height: 2px;
-                            margin-top: 14px;
+                        .main5 {
+                            width: auto;
+                            cursor: pointer;
+
+                            .label2 {
+                                width: 20px;
+                                height: 20px;
+                                margin-right: 5px;
+                            }
                         }
                     }
                 }
@@ -392,26 +347,26 @@ button:active {
 
     .van-calendar__day--start-end {
         background-color: #4d6add;
-      }
+    }
 
-      .van-calendar__selected-day {
+    .van-calendar__selected-day {
         background-color: #4d6add;
-      }
+    }
 
-      .van-calendar__day--start {
+    .van-calendar__day--start {
         background-color: #4d6add;
-      }
+    }
 
-      .van-calendar__day--middle {
+    .van-calendar__day--middle {
         color: #4d6add;
-      }
+    }
 
-      .van-calendar__day--end {
+    .van-calendar__day--end {
         background-color: #4d6add;
-      }
+    }
 
-      .van-calendar__confirm {
+    .van-calendar__confirm {
         border-color: #4d6add;
         background-color: #4d6add;
-      }
+    }
 }

+ 5 - 13
src/styles/taskMessage/index.less

@@ -135,21 +135,13 @@
       }
 
       .main5 {
-        width: 39px;
-        height: 16px;
+        width: auto;
 
         .label2 {
-          width: 15px;
-          height: 15px;
-        }
-
-        .txt3 {
-          overflow-wrap: break-word;
-          color: rgba(64, 77, 116, 1);
-          font-size: 11px;
-          text-align: center;
-          white-space: nowrap;
-          display: block;
+          width: 20px;
+          height: 20px;
+          margin-right: 5px;
+          cursor: pointer;
         }
       }
     }

+ 1 - 1
src/utils/dateUtil.js

@@ -64,7 +64,7 @@ const dateUtil = {
     // 使用调整后的时间创建一个新的Date对象
     const adjustedDate = new Date(adjustedMilliseconds);
     // 格式化调整后的时间
-    const formattedDate = dateUtil.formateDate(adjustedDate, 'yyyy-MM-dd hh:mm:ss');
+    const formattedDate = dateUtil.formateDate(adjustedDate, 'yyyy/MM/dd hh:mm:ss');
     return formattedDate;
   },
   // isSameWeek(old,now){

+ 13 - 10
src/views/accountPer/add.vue

@@ -4,16 +4,14 @@
     <s-header :name="pageTitle" :noback="false"></s-header>
     <div class="accountPerBox flex-col">
       <van-form @submit="onSubmit">
-        <van-field v-model="username" name="username" :label="$t('accountPer.usernameLabel')"
+        <van-field v-model="username" name="username" :label="$t('accountPer.usernameLabel')" :readonly="isUserName"
           :placeholder="$t('accountPer.usernamePlaceholder')" :rules="[
             { required: true, message: $t('accountPer.usernamePlaceholder') },
           ]" />
         <van-field v-model="password" name="password" type="password" :label="$t('accountPer.passwordLabel')"
-          :placeholder="passwordPlaceholder" 
-          :rules="[
+          :placeholder="passwordPlaceholder" :rules="[
             { required: havePassword, message: $t('accountPer.passwordPlaceholder') },
-          ]"
-          />
+          ]" />
         <van-field v-model="name" name="name" :label="$t('accountPer.nameLabel')"
           :placeholder="$t('accountPer.namePlaceholder')" :rules="[
             { required: true, message: $t('accountPer.namePlaceholder') },
@@ -28,9 +26,9 @@
           <div class="van-cell__title van-field__label">
             <label id="van-field-4-label" for="van-field-4-input">{{ $t("accountPer.setUp") }}:</label>
           </div>
-          <div class="van-cell__value van-field__value">
+          <div class="van-cell__value">
             <div class="van-field__body">
-              <van-switch v-model="isEnabled" class="o-mr-10"/><span>{{
+              <van-switch v-model="isEnabled" size="20px" class="o-mr-10" /><span>{{
                 $t("accountPer.startOrNot")
               }}</span>
             </div>
@@ -75,7 +73,7 @@
 import kSelectPop from "../../components/commom/kSelectPop/index.vue";
 import { onMounted, reactive, toRefs, ref } from "vue";
 import sHeader from "../../components/SimpleHeader";
-import { showFailToast, showSuccessToast } from 'vant';
+import { showFailToast, showSuccessToast, showToast } from 'vant';
 import {
   getSysRoleList,
   getEquipmentList,
@@ -110,6 +108,7 @@ export default {
     };
     const passwordPlaceholder = ref("");
     const havePassword = ref(true);
+    const isUserName = ref(false);
     let addParams = reactive({
       username: "",
       password: "",
@@ -133,6 +132,7 @@ export default {
         accoutPerSet = JSON.parse(accoutPerSet);
         addParams.id = accoutPerSet.id;
         addParams.username = accoutPerSet.username;
+        isUserName.value = true;
         addParams.name = accoutPerSet.name;
         addParams.phone = accoutPerSet.phone;
         addParams.isEnabled = accoutPerSet.isEnabled;
@@ -175,7 +175,7 @@ export default {
           });
         }
         selEquipOptions.value = data.data;
-        if(addParams.equipmentIds != null) {
+        if (addParams.equipmentIds != null) {
           const list = addParams.equipmentIds.split(',');
           const listName = [];
           // 根据id找到对应的name
@@ -220,6 +220,8 @@ export default {
           showSuccessToast(t("accountPer.accountAddedSuccessfully"));
           // router.push("/accountPer");
           router.replace("/accountPer");
+        } else if (data.code === 'A0201') {
+          showToast(t("accountPer.accountNameExists"));
         } else {
           showFailToast(t("accountPer.failedToAddAccount"), data.message);
         }
@@ -291,7 +293,8 @@ export default {
       cofficentForm,
       busiEquipInpClk,
       havePassword,
-      passwordPlaceholder
+      passwordPlaceholder,
+      isUserName
     };
   },
 };

+ 2 - 2
src/views/alarmHistory/index.vue

@@ -17,9 +17,9 @@
           <div class="flex-col">
             <div class="main5 flex-row justify-between" @click="searchClick">
               <img class="label2 o-mr-5" src="../../assets/device/searchIcon.png" />
-              <div class="TextGroup2 flex-col">
+              <!-- <div class="TextGroup2 flex-col">
                 <span class="txt3">{{ $t('alarmHistory.search') }}</span>
-              </div>
+              </div> -->
             </div>
           </div>
         </div>

+ 47 - 12
src/views/device/deviceOper.vue

@@ -30,7 +30,7 @@
         </div>
         <div class="operText">{{ sleepTitle }}</div>
       </div>
-
+      <!-- 开启炉头/设备 -->
       <div class="operItem" @click="openOffFurnace(1)">
         <div class="operIcon">
           <img class="operImg" src="../../assets/device/operIcon/onOff.png" />
@@ -38,6 +38,7 @@
         <div v-if="device.machineType === '1'" class="operText">{{ $t("device.openDevice") }}</div>
         <div v-else class="operText">{{ $t("device.openFurnHead") }}</div>
       </div>
+      <!-- 关闭炉头/设备 -->
       <div class="operItem" @click="openOffFurnace(0)">
         <div class="operIcon">
           <img class="operImg" src="../../assets/device/operIcon/onOff.png" />
@@ -54,12 +55,15 @@
               </div>
               <div class="operText">{{ $t("device.remoteDoorOpening") }}</div>
             </div> -->
+
+      <!-- 远程开门 -->
       <div class="operItem" @click="openDoorFun()">
         <div class="operIcon">
           <img class="operImg" src="../../assets/device/operIcon/openDoor.png" />
         </div>
         <div class="operText">{{ $t("device.remoteDoorOpening") }}</div>
       </div>
+      <!-- 远程做糖 -->
       <div class="operItem" @click="doSugar()">
         <div class="operIcon">
           <img class="operImg" src="../../assets/device/operIcon/doSugar.png" />
@@ -67,6 +71,7 @@
         <div v-if="device.machineType === '1'" class="operText">{{ $t("device.remoteProduction") }}</div>
         <div v-else class="operText">{{ $t("device.remoteSugarMaking") }}</div>
       </div>
+      <!-- 定时开关 -->
       <div class="operItem" @click="alarmClock()">
         <div class="operIcon">
           <img class="operImg" src="../../assets/device/operIcon/alarmClock.png" />
@@ -162,6 +167,13 @@
         </div>
         <div class="operText">{{ $t("device.customLogo.customLogo") }}</div>
       </div>
+      <!-- 远程锁机 -->
+      <div v-if="user.type < 1" class="operItem" @click="lockDevice()">
+        <div class="operIcon">
+          <img class="operImg" src="../../assets/device/operIcon/lock.png" />
+        </div>
+        <div class="operText">{{ $t("device.lockDevice") }}</div>
+      </div>
       <!-- 查看定位 -->
       <!-- <div class="operItem" @click="viewPosiClk()">
         <div class="operIcon">
@@ -200,7 +212,8 @@ import {
   openDoor,
   deviceTuoji,
   delOneDevice,
-  enableMaterial
+  enableMaterial,
+  updateLockStatus,
 } from "../../service/device";
 import { showFailToast, showSuccessToast } from "vant";
 import { useRouter } from "vue-router";
@@ -224,7 +237,7 @@ export default {
         query: { deviceId: device.value.id, name: device.value.name },
       });
     };
-    
+
     // 点击DIY花型
     const diyFlowerClk = () => {
       router.push({
@@ -335,11 +348,6 @@ export default {
       router.push({ path: "paramsSet", query: { deviceId: device.value.id } });
     };
 
-    // 物料监控
-    const materialMonitorClk = () => {
-      operType.value = 7;
-      operCheckShow.value = true;
-    };
     // 跳转 - 添加分销人
     const saveProportionPush = () => {
       router.push({
@@ -359,10 +367,21 @@ export default {
         query: { deviceId: device.value.id, name: device.value.name },
       });
     };
+    // 删除设备
     const deleteDevice = () => {
       operType.value = 6;
       operCheckShow.value = true;
     };
+    // 物料监控
+    const materialMonitorClk = () => {
+      operType.value = 7;
+      operCheckShow.value = true;
+    };
+    // 远程锁机
+    const lockDevice = () => {
+      operType.value = 8;
+      operCheckShow.value = true;
+    };
     // 取消操作
     const operCheckClear = () => {
       operCheckShow.value = false;
@@ -465,10 +484,25 @@ export default {
           showFailToast(t("device.enableMaterialFailed"));
         }
       }
-      // 关闭弹窗
-      show.value = false;
-      // 触发操作完成回调
-      emit("operfinish", true);
+      // 远程锁机
+      if (operType.value === 8) {
+        const { data } = await updateLockStatus({
+          equipmentId: device.value.id,
+          status: device.value.isBlocked ? '0' : '1'
+        });
+        if (data.code === '00000') {
+          showSuccessToast(t("device.Succeed"));
+          operCheckShow.value = false;
+        } else {
+          showFailToast(t("device.Failed"));
+        }
+      }
+      setTimeout(() => {
+        // 关闭弹窗
+        show.value = false;
+        // 触发操作完成回调
+        emit("operfinish", true);
+      }, 2000);
     };
     const isRole = (key) => {
       return user.menuCodeList.filter((type) => key === type).length > 0;
@@ -502,6 +536,7 @@ export default {
       sleepTitle,
       viewLogs,
       deleteDevice,
+      lockDevice,
       // viewPosiClk,
       changePasswordClk,
       sleepIcon,

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

@@ -10,17 +10,16 @@
             <div class="flex-col">
               <div class="flex-row justify-between bd3">
                 <div class="flex-col outer4"></div>
-                <span class="flex-col txt2">{{
-                  $t("device.dataOverview")
-                }}</span>
+                <span class="flex-col txt2">
+                  {{ $t("device.dataOverview") }}</span>
               </div>
             </div>
             <div class="flex-col">
               <div class="main5 flex-row justify-between" @click="searchClick">
                 <img class="label2" src="../../assets/device/searchIcon.png" />
-                <div class="TextGroup2 flex-col">
+                <!-- <div class="TextGroup2 flex-col">
                   <span class="txt3">{{ $t("device.search") }}</span>
-                </div>
+                </div> -->
               </div>
             </div>
           </div>
@@ -75,15 +74,22 @@
                     }"></div>
                   </div>
                 </div>
+                <!-- 所属商家 -->
                 <span class="txt1 o-mt-10">{{ $t("device.affiliatedMerchants") }}:{{
                   item.adminUserName
                 }}</span>
+                <!-- 机器编码 -->
                 <span class="txt1 o-mt-10 kBordBott">{{ $t("device.machineUniqueCode") }}:{{
                   item.clientId
                 }}</span>
+                <!-- 锁机状态 -->
+                <span v-if="user.type < 1" class="txt1 o-mt-10 kBordBott">{{ $t("device.lockCondition") }}:{{
+                  item.isBlocked ? $t("device.lockState") : $t("device.unLockState")
+                }}</span>
                 <div class="contentBottomCon" v-if="item.checkType">
                   <img class="pic1" referrerpolicy="no-referrer" src="../../assets/home/line.png" />
-                  <div class="word4 flex-row justify-between o-ptb-5 kBordBott">
+                  <!-- 睡眠状态 -->
+                  <div class="word4 flex-row justify-between o-ptb-4 kBordBott">
                     <span class="info1 o-ptb-5 kBordBott">{{ $t("device.sleepState") }}:{{
                       item.isSleep
                       ? $t("device.sleeping")
@@ -116,7 +122,8 @@
                   <!-- <span class="txt5 o-ptb-10 kBordBott l-flex-RC"><span>一键重启炉头:</span>
                     <van-button type="primary">重启</van-button>
                   </span> -->
-                  <div class="word4 o-ptb-5">
+                  <!-- 炉头状态 -->
+                  <div class="word4 o-ptb-8">
                     <span class="word3 o-pr-5" v-if="item.machineType == '0' || item.machineType == null">{{
                       $t("device.furnHeadStatus") }}: </span>
                     <span class="word3 o-pr-5" v-else>{{ $t("device.deviceStatus") }}: </span>
@@ -146,35 +153,37 @@
 
                   <!-- 定位: -->
                   <div>
-                    <span v-if="item.latitude" class="txt5 o-ptb-7 kBordBott l-flex-RC">
+                    <span v-if="item.latitude" class="txt5 o-ptb-3 kBordBott l-flex-RC">
                       <span class="info1">{{ $t("device.position") }}:</span>
                       <a class="clickable-link o-ptb-7" @click="viewPosiClk(item)">{{ item.fullName }}</a>
                     </span>
                   </div>
+                  <!-- 机器参数 -->
                   <van-row class="layer5 o-pt-7 kBordBott" justify="space-between"
                     v-if="(item.machineType == '0' || item.machineType == null) && item.equimentType != 'P30'">
-                    <van-col class="word5" style="margin-bottom: 13px;">{{ $t("device.furnaceHeadTemperature") }}:{{
+                    <van-col class="word5" style="margin-bottom: 12px;">{{ $t("device.furnaceHeadTemperature") }}:{{
                       item.furnaceTm
                     }}{{ $t("device.degree") }}</van-col>
-                    <van-col class="word5" style="margin-bottom: 13px;">{{ $t("device.temperatureInCabinet") }}:{{
+                    <van-col class="word5" style="margin-bottom: 12px;">{{ $t("device.temperatureInCabinet") }}:{{
                       item.cabinetTm
                     }}{{ $t("device.degree") }}</van-col>
-                    <van-col class="word5" style="margin-bottom: 13px;">{{ $t("device.humidityInCabinet") }}:{{ item.cabinetHd
+                    <van-col class="word5" style="margin-bottom: 12px;">{{ $t("device.humidityInCabinet") }}:{{
+                      item.cabinetHd
                     }}{{ $t("device.humidity") }}</van-col>
                   </van-row>
                   <van-row class="layer5 o-pt-7 kBordBott" justify="space-between" v-else>
-                    <van-col class="word5" style="margin-bottom: 13px;">{{ $t("device.stirringTemperature") }}:{{
+                    <van-col class="word5" style="margin-bottom: 12px;">{{ $t("device.stirringTemperature") }}:{{
                       item.stirTm
                     }}{{ $t("device.degree") }}</van-col>
-                    <van-col class="word5" style="margin-bottom: 13px;">{{ $t("device.cornGeneratorTemperature") }}:{{
+                    <van-col class="word5" style="margin-bottom: 12px;">{{ $t("device.cornGeneratorTemperature") }}:{{
                       item.cornGeneratorTm
                     }}{{ $t("device.degree") }}</van-col>
-                    <van-col class="word5" style="margin-bottom: 13px;">{{ $t("device.cupQuantity") }}:{{ item.cupQuantity
+                    <van-col class="word5" style="margin-bottom: 12px;">{{ $t("device.cupQuantity") }}:{{ item.cupQuantity
                     }}</van-col>
                   </van-row>
                   <template v-if="item.isMaterialUse === '1' && (item.machineType == '0' || item.machineType == null)">
                     <van-row justify="space-between" class="sugarTxt o-pt-7 kBordBott">
-                      <van-col style="margin-bottom: 15px;">
+                      <van-col style="margin-bottom: 12px;">
                         {{ $t("device.whiteSugar") }}:{{ Format_calcuDecial(item.whiteSugar) }}%
                       </van-col>
                       <van-col>
@@ -183,7 +192,7 @@
                       <van-col>
                         {{ $t("device.yellowSugar") }}:{{ Format_calcuDecial(item.yellowSugar) }}%
                       </van-col>
-                      <van-col style="margin-bottom: 10px;">
+                      <van-col style="margin-bottom: 8px;">
                         {{ $t("device.blueSugar") }}:{{ Format_calcuDecial(item.blueSugar) }}%
                       </van-col>
                     </van-row>
@@ -208,6 +217,7 @@
                       }}</a>
                     </span>
                   </template>
+                  <!-- 最近刷新时间 -->
                   <span class="info1 o-ptb-7 kBordBott">{{ $t("device.lastRefreshTime") }}:{{
                     showDateTime(item.lastUpdateTime)
                   }}</span>
@@ -351,6 +361,7 @@ export default {
     });
     // 初始化页面获取列表
     onMounted(() => {
+      sleepDescBoxShow.value = true;
       init();
       updateDataInterval();
       // window.addEventListener('scroll', handleScroll);
@@ -571,6 +582,7 @@ export default {
       sleepDescBoxShow,
       sleepDescChg,
       backTop,
+      user,
     };
   },
 };

+ 165 - 24
src/views/discountCode/index.vue

@@ -5,7 +5,14 @@
     <div class="discountCodeBox flex-col">
       <van-list v-model:loading="loading" v-model:error="error" :error-text="$t('public.requestFailed')"
         :finished="finished" :finished-text="$t('public.noMore')" offset="300" :immediate-check="false" @load="onLoad">
-        <div class="searchRow flex-row justify-between">
+        <div v-if="isDelete" class="searchRow flex-row justify-between">
+          <div class="l-flex-RC c-text-15 c-text-color c-text-b">
+            {{ $t("advertManage.advertRule.selected") }}
+            {{ selectTotals }}
+            {{ $t("advertManage.advertRule.individual") }}
+          </div>
+        </div>
+        <div v-else class="searchRow flex-row justify-between">
           <div class="flex-col">
             <div class="flex-row justify-between bd3">
               <div class="flex-col outer4"></div>
@@ -16,40 +23,89 @@
           <div class="flex-col">
             <div class="main5 flex-row justify-between" @click="searchClick">
               <img class="label2" src="../../assets/device/searchIcon.png" />
-              <div class="TextGroup2 flex-col">
-                <span class="txt3">{{ $t('discountCode.search') }}</span>
-              </div>
             </div>
           </div>
         </div>
         <div class="tabButtomBox flex-row">
           <div class="tabBox flex-row">
-            <span :class="{ active: isUse === '0' }" @click="setIsUse('0')">{{ $t('discountCode.notUsed') }}</span>
-            <span :class="{ active: isUse === '1' }" @click="setIsUse('1')">{{ $t('discountCode.used') }}</span>
+            <span :class="{ active: isUse === '0' }" @click="setIsUse('0')" style="cursor: pointer;">{{
+              $t('discountCode.notUsed') }}</span>
+            <span :class="{ active: isUse === '1' }" @click="setIsUse('1')" style="cursor: pointer;">{{
+              $t('discountCode.used') }}</span>
+          </div>
+          <div v-if="isDelete" class="buttomBox flex-row">
+            <div @click="cancelClk" class="buttonItem" style="color: #9696b1;">
+              {{ $t("discountCode.cancel") }}
+            </div>
+            <div @click="allClk" class="buttonItem" style="color: #4b6ad1">
+              {{ $t("discountCode.selectAll") }}
+            </div>
+            <div @click="noticeClk" class="buttonItem" style="color: #df5e4c">
+              {{ $t("discountCode.confirmDel") }}
+            </div>
           </div>
-          <div class="buttomBox flex-row">
-            <div class="buttonItem" @click="exportClick()">{{ $t('discountCode.export') }}&gt;</div>
-            <div class="buttonItem" @click="payCode()">{{ $t('discountCode.apply') }}&gt;</div>
+          <div v-else class="buttomBox flex-row">
+            <div class="buttonItem" @click="payCode()" style="color: #4b6ad1">{{ $t('discountCode.apply') }}</div>
+            <div class="buttonItem" @click="isDelete = true">{{ $t('discountCode.delete') }}</div>
+            <div class="buttonItem" @click="exportClick()" style="color: #45be2d">{{ $t('discountCode.export') }}</div>
           </div>
         </div>
         <div class="intervalRow"></div>
         <div class="listBox">
           <div v-for="(item, index) in discountCodeList" :key="index" class="listItem" @click="disCountCodeClick(item)">
             <div class="itemBox">
-              <div class="itemRow"><span class="itemTitle">{{ $t('discountCode.discountCode') }}:&nbsp;</span>{{ item.code
-              }}<span class="itemTitle discount">{{ item.type == '1' ? $t('discountCode.deduction') : $t('discountCode.discount') }}:&nbsp;</span>{{ item.discount }}
+              <div class="itemRow">
+                <span class="itemTitle">
+                  {{ $t('discountCode.discountCode') }}:&nbsp;
+                </span>
+                {{ item.code }}
+                <span class="itemTitle discount">
+                  {{ item.type == '1' ? $t('discountCode.deduction') : $t('discountCode.discount') }}:&nbsp;
+                </span>
+                {{ item.discount }}
+              </div>
+              <div class="itemRow">
+                <span class="itemTitle">
+                  {{ $t('discountCode.creationTime') }}:&nbsp;
+                </span>
+                {{ showDateTime(item.createDate) }}
+              </div>
+              <div class="itemRow" v-if="user.type < 2">
+                <span class="itemTitle">
+                  {{ $t('discountCode.affiliatedMerchants') }}:&nbsp;
+                </span>
+                {{ item.userName }}
+              </div>
+              <div class="itemRow" v-if="item.isUse !== '0'">
+                <span class="itemTitle">
+                  {{ $t('discountCode.usageTime') }}:&nbsp;
+                </span>
+                {{ showDateTime(item.useDate) }}
+              </div>
+              <div class="itemRow">
+                <span class="itemTitle">
+                  {{ $t('discountCode.termOfValidity') }}:&nbsp;
+                </span>{{ showDate(item.lastUseDate) }}
+                <span v-if="item.isUse === '0' && isExpired(item.lastUseDate)">
+                  {{ $t('discountCode.expired') }}
+                </span>
+              </div>
+              <div class="itemRow" v-if="item.isUse !== '0'">
+                <span class="itemTitle">
+                  {{ $t('discountCode.usingTheMachine') }}:&nbsp;
+                </span>
+                {{ item.useBy }}
               </div>
-              <div class="itemRow"><span class="itemTitle">{{ $t('discountCode.creationTime') }}:&nbsp;</span>{{
-                showDateTime(item.createDate) }}</div>
-              <div class="itemRow" v-if="item.isUse !== '0'"><span class="itemTitle">{{ $t('discountCode.usageTime') }}:&nbsp;</span>{{
-                showDateTime(item.useDate) }}</div>
-              <div class="itemRow"><span class="itemTitle">{{ $t('discountCode.termOfValidity') }}:&nbsp;</span>{{
-                showDate(item.lastUseDate) }} <span v-if="item.isUse === '0' && isExpired(item.lastUseDate)">{{ $t('discountCode.expired') }}</span></div>
-              <div class="itemRow" v-if="item.isUse !== '0'"><span class="itemTitle">{{ $t('discountCode.usingTheMachine') }}:&nbsp;</span>{{
-                item.useBy }}</div>
             </div>
-            <div class="tipBox" v-if="item.isUse === '0'">{{ $t('discountCode.notUsed') }}</div>
-            <div class="tipBox isUseTip" v-if="item.isUse === '1'">{{ $t('discountCode.used') }}</div>
+            <div class="tipBox" v-if="item.isUse === '0' && isDelete == false">
+              {{ $t('discountCode.notUsed') }}
+            </div>
+            <div class="tipBox isUseTip" v-if="item.isUse === '1' && isDelete == false">
+              {{ $t('discountCode.used') }}
+            </div>
+            <div v-if="isDelete" class="checkedBox">
+              <van-checkbox v-model="item.checked"></van-checkbox>
+            </div>
           </div>
         </div>
       </van-list>
@@ -59,19 +115,22 @@
 </template>
 
 <script>
-import { onMounted, reactive, toRefs, ref } from "vue";
+import { onMounted, reactive, toRefs, ref, computed } from "vue";
 import sHeader from "@/components/SimpleHeader";
-import { getdiscountCodeList, discountCodeExport } from "@/service/discountCode";
-import { showFailToast } from "vant";
+import { getdiscountCodeList, discountCodeExport, deleteCode } from "@/service/discountCode";
+import { showFailToast, showToast, showConfirmDialog } from "vant";
 import { getLoginUser, $M_ExportFile, styleUrl } from "@/common/js/utils";
 import codeSearch from './codeSearch.vue';
 import dateUtil from "@/utils/dateUtil";
 import { useRouter } from "vue-router";
+import { useI18n } from "vue-i18n";
 
 export default {
   setup() {
+    const { t } = useI18n();
     const router = useRouter();
     const searchRef = ref(null);
+    const user = getLoginUser();
     const loading = ref(false); // 加载状态
     const error = ref(false); // 错误状态
     const finished = ref(false); // 结束翻页状态
@@ -112,8 +171,15 @@ export default {
     const getList = async () => {
       const { data } = await getdiscountCodeList(Object.assign({}, searchParams));
       if (data.code === "00000") {
+        // 加入删除选中状态
+        if (data.data.records.length > 0) {
+          data.data.records.forEach((item) => {
+            item.checked = false;
+          });
+        }
         // 列表值叠加
         discountCodeList.value = discountCodeList.value.concat(data.data.records);
+        // console.log(discountCodeList.value);
         discountCodeTotal.value = data.data.total;
         if (discountCodeList.value.length === data.data.total) { finished.value = true; }
         loading.value = false;
@@ -142,6 +208,75 @@ export default {
       return currentDate > lastUseDateTime;
     });
 
+    // 是否删除状态
+    const isDelete = ref(false); // 选中
+    const selectTotals = computed(() => {
+      let nums = 0;
+      if (discountCodeList.value.length > 0) {
+        discountCodeList.value.forEach((item) => {
+          if (item.checked) {
+            nums++;
+          }
+        });
+      }
+      return nums;
+    });
+    const cancelClk = () => {
+      // 把选中状态去掉
+      if (discountCodeList.value.length > 0) {
+        discountCodeList.value.forEach((item) => {
+          if (item.checked) {
+            item.checked = false;
+          }
+        });
+      }
+      isDelete.value = false;
+    };
+    // 点击全选
+    const allClk = () => {
+      if (discountCodeList.value.length > 0) {
+        discountCodeList.value.forEach((item) => {
+          item.checked = true;
+        });
+      }
+    };
+    // 点击确认删除
+    const noticeClk = () => {
+      if (selectTotals.value < 1) {
+        showToast(t("advertManage.delTips"));
+        return;
+      }
+      showConfirmDialog({
+        title: t('advertManage.delPopTitle'),
+        message: t('advertManage.delPopContent'),
+      })
+        .then(() => {
+          const ids = [];
+          discountCodeList.value.forEach((item) => {
+            if (item.checked) {
+              ids.push(item.id);
+            }
+          });
+          deleteCode(ids).then((res) => {
+            console.log(res);
+            if (res.data.code === '00000') {
+              isDelete.value = false;
+              showToast(t('discountCode.deletionSucceeded'));
+              setTimeout(() => {
+                discountCodeList.value = [];
+                getList();
+              }, 1500);
+            }
+          }).catch(() => {
+            isDelete.value = false;
+            showToast('ERROR');
+          });
+        })
+        .catch(() => {
+          // showToast('ERROR');
+        })
+    };
+
     return {
       searchRef,
       loading,
@@ -160,6 +295,12 @@ export default {
       exportClick,
       payCode,
       isExpired,
+      isDelete,
+      allClk,
+      noticeClk,
+      selectTotals,
+      cancelClk,
+      user,
     };
   },
   components: { sHeader, codeSearch },

+ 19 - 2
src/views/home/index.vue

@@ -12,7 +12,8 @@
       <div class="nameDeviceRow flex-col">
         <span class="txt3">{{ userName }}</span>
         <div class="l-flex-RC">
-          <span class="info3" style="color: #4d6add;">{{ $t("home.totalEquipment") }} : {{ equipStatus.machineTotalNum }}</span>
+          <span class="info3" style="color: #4d6add;">{{ $t("home.totalEquipment") }} : {{ equipStatus.machineTotalNum
+          }}</span>
           <div class="lineCon o-mlr-6"></div>
           <span class="word2" style="color: #07c160;">{{ $t("home.running") }} : {{ equipStatus.machineUseNum }}</span>
         </div>
@@ -112,6 +113,13 @@
       </template>
     </kDialog>
     <!-- <nav-bar></nav-bar> -->
+    <!-- <van-dialog v-model:show="firstLogin" title="标题" show-cancel-button style="">
+      <div style="max-height: 60vh; overflow-y: auto;">
+        <van-image v-model="pic1" src="https://fastly.jsdelivr.net/npm/@vant/assets/apple-3.jpeg"/>
+        <van-image src="https://fastly.jsdelivr.net/npm/@vant/assets/apple-3.jpeg" />
+        <van-image src="https://fastly.jsdelivr.net/npm/@vant/assets/apple-3.jpeg" />
+      </div>
+    </van-dialog> -->
   </div>
 </template>
 
@@ -189,6 +197,13 @@ export default {
     const userName = ref(user.name);
     const sys = ref(null);
 
+    const firstLogin = ref(true);
+    const pic1 = ref([
+      { url: 'https://fastly.jsdelivr.net/npm/@vant/assets/apple-3.jpeg', isImage: true },
+      // Uploader 根据文件后缀来判断是否为图片文件
+      // 如果图片 URL 中不包含类型信息,可以添加 isImage 标记来声明
+    ]);
+
     // 自定义货币符号
     const currencySymbol = ref("¥");
     if (user.currencySymbol) {
@@ -224,7 +239,7 @@ export default {
         ...dateSelect.value,
         // ...typeSelectData,
         adminId: user.id,
-        ifForeign: typeSelectData.ifForeign === '' ? user.ifForeign :  typeSelectData.ifForeign,
+        ifForeign: typeSelectData.ifForeign === '' ? user.ifForeign : typeSelectData.ifForeign,
         payType: typeSelectData.payType,
         clientId: typeSelectData.clientId,
         username: typeSelectData.userName, // 商家
@@ -590,6 +605,8 @@ export default {
       Format_time,
       showDataDiv,
       currencySymbol,
+      firstLogin,
+      pic1
     };
   },
 

+ 2 - 2
src/views/merchantManage/index.vue

@@ -16,9 +16,9 @@
           <div class="flex-col">
             <div class="main5 flex-row justify-between" @click="searchClick">
               <img class="label2" src="../../assets/device/searchIcon.png" />
-              <div class="TextGroup2 flex-col">
+              <!-- <div class="TextGroup2 flex-col">
                 <span class="txt3">{{ $t('merchantManage.search') }}</span>
-              </div>
+              </div> -->
             </div>
           </div>
         </div>

+ 7 - 9
src/views/orderCenter/index.vue

@@ -6,7 +6,7 @@
       <van-list v-model:loading="loading" v-model:error="error" :error-text="$t('public.requestFailed')"
         :finished="finished" :finished-text="$t('public.noMore')" offset="300" :immediate-check="false" @load="onLoad">
         <div class="main3 flex-col justify-center">
-          <div class="outer1 flex-col justify-between">
+          <!-- <div class="outer1 flex-col justify-between"> -->
             <div class="group4 flex-row justify-between">
               <div class="ImageText1 flex-col">
                 <div class="outer2 flex-row justify-between">
@@ -17,17 +17,14 @@
                 </div>
               </div>
               <!-- 订单中心搜索 -->
-              <div class="ImageText2 flex-col" @click="searchClick()">
-                <div class="group5 flex-row justify-between">
-                  <img class="icon2" src="../../assets/order/search.png" />
-                  <div class="TextGroup2 flex-col">
-                    <span class="txt2">{{ $t("common.search") }}</span>
-                  </div>
+              <div class="flex-col" >
+                <div class="main5 flex-row justify-between" @click="searchClick()">
+                  <img class="label2" src="@/assets/device/searchIcon.png" />
                 </div>
               </div>
-            </div>
           </div>
         </div>
+        <img class="img1" referrerpolicy="no-referrer" src="@/assets/line.png" />
         <dateSelectList @update="update($event)"></dateSelectList>
         <typeSelectList @upselectdata="upselectdata($event)"></typeSelectList>
         <div v-if="!noData(salesVolume, salesNumber, orderNumber)" class="o-plr-8 o-pt-15">
@@ -125,7 +122,8 @@
                   </van-card>
                   <div v-if="typeof item.status === 'undefined'" class="main11 flex-col orderSuccess"></div>
                   <div v-else class="main11 flex-col" :class="{
-                    orderSuccess: item.status === 1,
+                    orderSuccess: item.status === 1 && (user.ifForeign == '0' || user.ifForeign == null),
+                    coinOrderSuccess: item.status === 1 && user.ifForeign == '1',
                     orderError: item.status === 0,
                     refunding: item.status === 2,
                     refunded: item.status === 3,

+ 6 - 14
src/views/robotRanking.vue

@@ -5,31 +5,23 @@
       <div class="box3 flex-col">
         <div class="main1 flex-col">
           <div class="mod1 flex-col">
-            <div class="block1 flex-col justify-between">
               <div class="section1 flex-row justify-between">
                 <div class="ImageText1 flex-col">
                   <div class="group4 flex-row justify-between">
                     <div class="layer3 flex-col"></div>
-                    <div class="TextGroup1 flex-col">
-                      <span class="word3">{{
-                        $t("robotRanking.machineSalesRanking")
-                      }}</span>
-                    </div>
+                      <span class="word3 flex-col">
+                        {{ $t("robotRanking.machineSalesRanking") }}
+                      </span>
                   </div>
                 </div>
-                <div @click="noticeClk" class="l-flex-RC o-ml-70">
-                  <div class="group5 flex-row justify-between">
+                <div class="flex-col">
+                  <div @click="noticeClk" class="main5 flex-row justify-between">
                     <img class="label2" src="@/assets/device/searchIcon.png" />
-                    <div class="TextGroup2 flex-col">
-                      <span class="txt3">{{ $t("robotRanking.rankMethod") }}</span>
-                    </div>
                   </div>
                 </div>
               </div>
-              <img class="img1" referrerpolicy="no-referrer"
-                src="../assets/line.png" />
-            </div>
           </div>
+          <img class="img1" referrerpolicy="no-referrer" src="../assets/line.png" />
           <div class="l-f l-flex-e o-plr-15">
             <span class="robotLabelName l-in c-text-13" style="color: #404d74">{{ $t("robotRanking.dailySalesRanking")
             }}:</span>

+ 1 - 1
src/views/taskMessage/equipment/index.vue

@@ -19,7 +19,7 @@
             </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>
+              <!-- <span class="txt3">{{ $t("taskMessage.search") }}</span> -->
             </div>
           </div>
         </div>

+ 0 - 1
src/views/taskMessage/proportion/index.vue

@@ -19,7 +19,6 @@
             }}</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>