Explorar o código

feat:“同步2024.10.21“

soobin hai 10 meses
pai
achega
5521f7251b

+ 27 - 9
src/App.vue

@@ -4,10 +4,10 @@
       <transition :name="transitionName">
         <!-- 缓存组件,但是进入编辑页面就会有问题 -->
         <!-- <keep-alive include="device,deviceSet,role"><component :is="Component" /></keep-alive> -->
-        <component :is="Component" v-if="!$route.meta.keepAlive" />
+        <component :is="Component" :key="$route.name" v-if="!$route.meta.keepAlive" />
       </transition>
       <keep-alive>
-        <component :is="Component" v-if="$route.meta.keepAlive" />
+        <component :is="Component" :key="$route.name" v-if="$route.meta.keepAlive" />
       </keep-alive>
     </router-view>
     <nav-bar v-if="tabType"></nav-bar>
@@ -47,16 +47,16 @@ export default {
       next();
     });
 
-    router.afterEach(()=>{
+    router.afterEach(() => {
       let currentRouteName = router.currentRoute.value.name;
       if (currentRouteName === 'home' || currentRouteName === 'device' || currentRouteName === 'robotranking' || currentRouteName === 'user') {
         tabType.value = true;
-      } else { 
+      } else {
         tabType.value = false;
       }
     })
 
-    return { ...toRefs(state),tabType };
+    return { ...toRefs(state), tabType };
   },
   components: { navBar }
 };
@@ -90,12 +90,20 @@ export default {
   //   line-height: 38px;
   //   padding-left: 6px;
   // }
-  .van-field__body {
-    border: 1px solid #dddde8;
-    border-radius: 2px;
+  // .van-field__body {
+  //   border: 1px solid #dddde8;
+  //   border-radius: 2px;
+  //   height: 38px;
+  //   line-height: 38px;
+  //   padding-left: 6px;
+  // }
+
+  .van-field__control {
     height: 38px;
     line-height: 38px;
-    padding-left: 6px;
+    padding: 6px;
+    border-radius: 1px;
+    border: 1px solid #dddde8;
   }
 }
 
@@ -120,6 +128,16 @@ p {
     width: 70px;
     text-align: center;
   }
+
+  .van-nav-bar__title {
+    color: #404d74;
+    font-size: 15px;
+    font-weight: 600;
+  }
+
+  .van-nav-bar .van-icon {
+    color: #404d74;
+  }
 }
 
 html {

BIN=BIN
src/assets/device/operIcon/alarmClean.png


BIN=BIN
src/assets/device/operIcon/coin.png


+ 25 - 0
src/assets/language/en.json

@@ -248,6 +248,8 @@
   "device": {
     "managementCenter": "Machine Management Center",
     "whole": "All",
+    "powerOn": "Open",
+    "abnormal": "Abnormalities",
     "group": "Group management",
     "addGroup": "Add Group",
     "setAlarm": "Set alarm",
@@ -542,6 +544,20 @@
     "position": "Position",
     "viewPositioning": "View positioning",
     "restartAndroid": "Restart touch screen",
+    "alarmClean": "Machine clean",
+    "returnCoin": "Coin return",
+    "returnCoinPage": {
+      "amount": "Amount",
+      "returnCoinRecord": "Return record",
+      "returnCoinBtn": "Coin return",
+      "tipsContent": "Confirm the refund?",
+      "applyTime": "Application time",
+      "status":"Return status",
+      "returnCoinSuccess": "Successful",
+      "returnCoinFailed": "Failed",
+      "waiting": "Wait for machine response",
+      "reason": "Cause of failure"
+    },
     "refrigeration": "Refrigeration mode",
     "keepFresh": "Fresh-keeping mode",
     "stir": "Stirring mode",
@@ -1556,6 +1572,15 @@
     "content": "Do you want to switch?",
     "successfully": "Successfully sent, please wait a few seconds and re-enter"
   },
+  "alarmClean": {
+    "openCleanFunction": "Machine cleaning function: ON",
+    "closeCleanFunction": "Machine cleaning function: OFF",
+    "openStatus": "Machine clean reminder function switch status: ON",
+    "closeStatus": "Machine clean reminder function switch status: OFF",
+    "tips": "Remind",
+    "content": "Do you want to switch?",
+    "successfully": "Successfully sent, please wait a few seconds and re-enter"
+  },
   "Account operation": "Account operation",
   "Discount code": "Discount code",
   "Alarm history": "Alarm history",

+ 25 - 0
src/assets/language/ja.json

@@ -248,6 +248,8 @@
     "device": {
         "managementCenter": "デバイス管理センター",
         "whole": "全体",
+        "powerOn": "営業中",
+        "abnormal": "異常",
         "group": "グループ管理",
         "addGroup": "グループの追加",
         "setAlarm": "アラーム設定",
@@ -564,6 +566,20 @@
         "position": "位置情報",
         "viewPositioning": "位置情報を見る",
         "restartAndroid": "画面を再起動",
+        "alarmClean": "機器洗浄",
+        "returnCoin": "硬貨を払い戻す",
+        "returnCoinPage": {
+            "amount": "数です",
+            "returnCoinRecord": "申請記録です",
+            "returnCoinBtn": "硬貨を払い戻す",
+            "tipsContent": "払い戻しコインの確認です?",
+            "applyTime": "申し込み期間です",
+            "status": "コイン返却状態です",
+            "returnCoinSuccess": "成功です",
+            "returnCoinFailed": "失敗です",
+            "waiting": "機械の応答を待ちます",
+            "reason": "失敗の原因です"
+        },
         "refrigeration": "冷却モードです",
         "keepFresh": "鮮度保持モードです",
         "stir": "撹拌モードです",
@@ -1595,6 +1611,15 @@
         "content": "スイッチを切り替えますか?",
         "successfully": "送信に成功しました。数秒待ってから再入力してください"
     },
+    "alarmClean": {
+        "openCleanFunction": "洗浄機能です:オン",
+        "closeCleanFunction": "洗浄機能です:オフ",
+        "openStatus": "装置のクリーニングリマインダースイッチの状態:オン",
+        "closeStatus": "装置のクリーニングリマインダースイッチの状態:オフ",
+        "tips": "リマインダー",
+        "content": "スイッチを切り替えますか?",
+        "successfully": "送信成功、数秒後に再度確認してください"
+    },
     "账户操作": "アカウント操作",
     "优惠码": "プロモーションコード",
     "报警历史": "アラーム履歴",

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

@@ -253,6 +253,8 @@
   "device": {
     "managementCenter": "设备管理中心",
     "whole": "全部",
+    "powerOn": "营业中",
+    "abnormal": "异常",
     "group": "分组管理",
     "addGroup": "添加分组",
     "setAlarm": "设置闹钟",
@@ -567,6 +569,20 @@
     "position": "定位",
     "viewPositioning": "查看定位",
     "restartAndroid": "重启触摸屏",
+    "alarmClean": "设备清洗",
+    "returnCoin": "远程退币",
+    "returnCoinPage": {
+      "amount": "退币数量",
+      "returnCoinRecord": "退币记录",
+      "returnCoinBtn": "申请退币",
+      "tipsContent": "确认退币?",
+      "applyTime": "申请时间",
+      "status": "退币状态",
+      "returnCoinSuccess": "成功",
+      "returnCoinFailed": "失败",
+      "waiting": "等待机器响应",
+      "reason": "失败原因"
+    },
     "refrigeration": "制冷模式",
     "keepFresh": "保鲜模式",
     "stir": "搅拌模式",
@@ -1605,6 +1621,15 @@
     "content": "是否切换开关?",
     "successfully": "发送成功,请等待几秒后重新进入查看"
   },
+  "alarmClean": {
+    "openCleanFunction": "设备清洗功能:开启",
+    "closeCleanFunction": "设备清洗功能:关闭",
+    "openStatus": "设备清洗提醒开关状态:开启",
+    "closeStatus": "设备清洗提醒开关状态:关闭",
+    "tips": "提醒",
+    "content": "是否切换开关?",
+    "successfully": "发送成功,请等待几秒后重新进入查看"
+  },
   "wechat": {
     "headerName": "绑定微信"
   },

+ 11 - 3
src/components/NavBar.vue

@@ -4,8 +4,8 @@
     <van-tabbar-item replace to="/home" icon="wap-home">{{ $t('navBar.homePage') }}</van-tabbar-item>
     <van-tabbar-item v-if="isDeviceData" replace to="/device" :dot="hasAlarm" icon="setting-o">{{
       $t('navBar.deviceInformation') }}</van-tabbar-item>
-    <van-tabbar-item replace to="/robotranking" icon="label">{{
-      $t('navBar.machineRanking') }}</van-tabbar-item>
+    <van-tabbar-item v-if="isRankingData" replace to="/robotranking" icon="bar-chart-o">{{ $t('navBar.machineRanking')
+      }}</van-tabbar-item>
     <van-tabbar-item replace to="/user" icon="contact">{{ $t('navBar.personalCenter') }}</van-tabbar-item>
   </van-tabbar>
 </template>
@@ -31,10 +31,18 @@ export default {
       return store.state.cartCount;
     });
 
+    // 机器排行权限
+    const isRankingData = computed(() => {
+      return user.menuCodeList.some((item) => {
+        return item === "M11";
+      });
+    });
+
 
     return {
       count,
-      isDeviceData
+      isDeviceData,
+      isRankingData
     };
   },
 };

+ 8 - 4
src/components/SimpleHeader.vue

@@ -1,13 +1,14 @@
 <template>
-  <div class="block">
+  <!-- <div class="block">
     <header class="simple-header van-hairline--bottom" :style="{ position: isFixed ? 'fixed' : 'relative' }">
       <i v-if="!isback" class="nbicon nbfanhui" @click="goBack"></i>
-      <!-- <i v-else>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</i> -->
       <i v-else></i>
       <div class="simple-header-name">{{ name }}</div>
       <i class="nbicon nbmore moreIcon"></i>
     </header>
-  </div>
+  </div> -->
+  <van-nav-bar v-if="!isback" :title="name" left-arrow @click-left="onClickLeft"/>
+  <van-nav-bar v-else :title="name" />
 </template>
 
 <script>
@@ -52,9 +53,12 @@ export default {
       }
       ctx.emit('callback')
     }
+    const onClickLeft = () => history.back();
+
     return {
       goBack,
-      isback
+      isback,
+      onClickLeft,
     }
   }
 }

+ 12 - 7
src/components/commom/kTimezone/index.vue

@@ -26,13 +26,18 @@ export default {
         };
 
         const options = ref([
-            { text: '上海', value: 'Asia/Shanghai' },
-            { text: '東京', value: 'Asia/Tokyo' },
-            { text: 'NewYork', value: 'America/New_York' },
-            { text: 'Paris', value: 'Europe/Paris' },
-            { text: 'London', value: 'Europe/London' },
-            { text: 'Madrid', value: 'Europe/Madrid' },
-            { text: 'São Paulo', value: 'America/Sao_Paulo' },
+            { text: '上海(UTC+8)', value: 'Asia/Shanghai' },
+            { text: '東京(UTC+9)', value: 'Asia/Tokyo' },
+            { text: 'NewYork(UTC-5)', value: 'America/New_York' },
+            { text: 'Paris(UTC+1)', value: 'Europe/Paris' },
+            { text: 'London(UTC+0)', value: 'Europe/London' },
+            { text: 'Madrid(UTC+1)', value: 'Europe/Madrid' },
+            { text: 'São Paulo(UTC-3)', value: 'America/Sao_Paulo' },
+            { text: 'Vancouver(UTC-8)', value: 'America/Vancouver' },
+            { text: 'Edmonton(UTC-7)', value: 'America/Edmonton' },
+            { text: 'Winnipeg(UTC-6)', value: 'America/Winnipeg' },
+            { text: 'Toronto(UTC-5)', value: 'America/Toronto' },
+            { text: 'Moncton(UTC-4)', value: 'America/Moncton' }
         ]);
 
 

+ 12 - 39
src/components/dateSelectList/index.vue

@@ -24,13 +24,8 @@
         </van-popup>
         <!-- 按月统计 -->
         <van-popup v-model:show="monthDateShow" position="bottom">
-          <van-picker-group :title="$t('dateSelectList.monthDate')"
-            :tabs="[$t('dateSelectList.monthStartDate'), $t('dateSelectList.monthEndDate')]"
-            :next-step-text="$t('dateSelectList.nextStep')" @confirm="monthDateConfirm" @cancel="monthDateCancel"
-            position="bottom">
-            <van-date-picker v-model="monthStartDate" :min-date="minDate" :columns-type="monthDateType" />
-            <van-date-picker v-model="monthEndDate" :min-date="minDate" :columns-type="monthDateType" />
-          </van-picker-group>
+          <van-date-picker v-model="monthDate" :title="$t('dateSelectList.monthDate')" :min-date="minDate" :max-date="maxDate" @confirm="monthDateConfirm" @cancel="monthDateCancel"
+            :columns-type="monthDateType" />
         </van-popup>
       </div>
     </div>
@@ -42,7 +37,7 @@ import { ref } from "vue";
 import dateUtil from "../../utils/dateUtil";
 import { styleUrl } from "../../common/js/utils";
 import { getLoginUser } from "@/common/js/utils";
-import { showToast } from "vant";
+// import { showToast } from "vant";
 import { useI18n } from 'vue-i18n';
 
 
@@ -53,7 +48,8 @@ export default {
     // 加载样式
     styleUrl('dateSelectList');
     const { t } = useI18n();
-    const minDate = new Date(2018, 1, 1);
+    const minDate = new Date(2022, 0, 1);
+    const maxDate = new Date();
     const user = getLoginUser();
     // 时间类型
     const timeType = ref("0");
@@ -160,16 +156,13 @@ export default {
             dateUtil.formateDate(endTime, "yyyy-MM-dd") + " 23:59:59";
         } else {
           // 按月统计
-          params.chartType = "year";
-          startTime = new Date(monthStartDate.value[0] + '-' + monthStartDate.value[1] + '-01');
-          endTime = new Date(monthEndDate.value[0] + '-' + monthEndDate.value[1] + '-01');
-          console.log("startTime", startTime);
-          console.log("endTime", endTime);
-          endTime.setMonth(endTime.getMonth() + 1);
+          params.chartType = "month";
+          startTime = new Date(monthDate.value[0] + '-' + monthDate.value[1] + '-01');
+          endTime = new Date(monthDate.value[0], monthDate.value[1], 0);
           params.startDate =
             dateUtil.formateDate(startTime, "yyyy-MM-dd") + " 00:00:00";
           params.endDate =
-            dateUtil.formateDate(endTime, "yyyy-MM-dd") + " 00:00:00";
+            dateUtil.formateDate(endTime, "yyyy-MM-dd") + " 23:59:59";
           timeTypeShow.value = false;
         }
       }
@@ -201,35 +194,16 @@ export default {
     // 获取当前时间的月份(注意,月份是从0开始的,所以要加1)
     const currentMonth = currentDate.getMonth() + 1;
     const monthDateShow = ref(false);
-    const monthStartDate = ref([currentYear, currentMonth]);
-    const monthEndDate = ref([currentYear, currentMonth]);
+    const monthDate = ref([currentYear, currentMonth]);
     const monthDateType = ['year', 'month'];
     const monthDateConfirm = () => {
-      console.log('monthStartDate', monthStartDate.value);
-      console.log('monthEndDate', monthEndDate.value);
-      const date1 = new Date(monthStartDate.value[0] + '-' + monthStartDate.value[1] + '-01');
-      const date2 = new Date(monthEndDate.value[0] + '-' + monthEndDate.value[1] + '-01');
-      // 将日期对象转换为毫秒数
-      const time1 = date1.getTime();
-      const time2 = date2.getTime();
-      // 计算时间跨度的绝对值
-      const timeDiff = Math.abs(time1 - time2);
-      // 计算半年的毫秒数(假设半年为 365 天的一半)
-      const halfYearInMilliseconds = 365 * 24 * 60 * 60 * 1000 / 2;
-      if (timeDiff > halfYearInMilliseconds) {
-        showToast(t('dateSelectList.monthTip1'));
-        return;
-      }
-      if (date1 > date2) {
-        showToast(t('dateSelectList.monthTip2'));
-        return;
-      }
       monthDateShow.value = false;
       outputDate();
     }
     const monthDateCancel = () => { monthDateShow.value = false; }
     return {
       minDate,
+      maxDate,
       timeType,
       timeChange,
       calendarShow,
@@ -239,11 +213,10 @@ export default {
       timeTypeConfirm,
       timeTypeCancel,
       monthDateShow,
-      monthStartDate,
       monthDateType,
-      monthEndDate,
       monthDateConfirm,
       monthDateCancel,
+      monthDate,
     };
   },
 };

+ 15 - 1
src/router/index.js

@@ -281,7 +281,7 @@ const router = createRouter({
       path: "/merchantManage",
       name: "merchantManage",
       component: () => import("@/views/merchantManage/index"),
-      meta: { index: 1 },
+      meta: { index: 1, keepAlive: true },
     },
     {
       path: "/merchantSet",
@@ -434,6 +434,20 @@ const router = createRouter({
       component: () => import("@/views/device/diyFlower/index"),
       meta: { index: 1 },
     },
+    // 设备清洗提醒
+    {
+      path: "/alarmClean",
+      name: "alarmClean",
+      component: () => import("@/views/device/alarmClean/index"),
+      meta: { index: 1 },
+    },
+    // 远程退币
+    {
+      path: "/returnCoin",
+      name: "returnCoin",
+      component: () => import("@/views/device/returnCoin/index"),
+      meta: { index: 1 },
+    },
     // 修改机器密码
     {
       path: "/devicePassword",

+ 135 - 50
src/service/device/index.js

@@ -1,233 +1,318 @@
-import axios from '../../utils/axios';
-import { stringToUrl } from '@/common/js/utils';
-
+import axios from "../../utils/axios";
+import { stringToUrl } from "@/common/js/utils";
 
 // 获取设备列表
 export function getDeviceList(params) {
-    return axios.post(`/SZWL-SERVER/tEquipment/findList?${stringToUrl(params)}`, params);
+  return axios.post(
+    `/SZWL-SERVER/tEquipment/findList?${stringToUrl(params)}`,
+    params
+  );
 }
 
 // 获取设备详情
 export function getDeviceDetal(params) {
-    return axios.post(`/SZWL-SERVER/tEquipment/findById?${stringToUrl(params)}`, params);
+  return axios.post(
+    `/SZWL-SERVER/tEquipment/findById?${stringToUrl(params)}`,
+    params
+  );
 }
 
 // 修改设备详情
 export function updateDevice(params) {
-    return axios.post(`/SZWL-SERVER/tEquipment/update?${stringToUrl(params)}`, params);
+  return axios.post(
+    `/SZWL-SERVER/tEquipment/update?${stringToUrl(params)}`,
+    params
+  );
 }
 
 // 获取花型种类下拉列表
 export function getGoodsNumber(params) {
-    return axios.get(`/SZWL-SERVER/tGoodsData/getGoodsNumber?${stringToUrl(params)}`);
+  return axios.get(
+    `/SZWL-SERVER/tGoodsData/getGoodsNumber?${stringToUrl(params)}`
+  );
 }
 
 // 消除报警
 export function eliminate(params) {
-    return axios.post(`/SZWL-SERVER/tEquipment/eliminate?${stringToUrl(params)}`, params);
+  return axios.post(
+    `/SZWL-SERVER/tEquipment/eliminate?${stringToUrl(params)}`,
+    params
+  );
 }
 
 // 重启炉头/开启关闭炉头
 export function setFurnace(params) {
-    return axios.post(`/SZWL-SERVER/tEquipment/onOff?${stringToUrl(params)}`, params);
+  return axios.post(
+    `/SZWL-SERVER/tEquipment/onOff?${stringToUrl(params)}`,
+    params
+  );
 }
 
 // 雪糕机机器复位
 export function machineReset(params) {
-    return axios.post(`/SZWL-SERVER/tEquipment/machineReset?${stringToUrl(params)}`, params);
+  return axios.post(
+    `/SZWL-SERVER/tEquipment/machineReset?${stringToUrl(params)}`,
+    params
+  );
 }
 
 // 睡眠
 export function sleepEquipment(params) {
-    return axios.post(`/SZWL-SERVER/tEquipment/sleep?${stringToUrl(params)}`, params);
+  return axios.post(
+    `/SZWL-SERVER/tEquipment/sleep?${stringToUrl(params)}`,
+    params
+  );
 }
 
 // 远程开门
 export function openDoor(params) {
-    return axios.post(`/SZWL-SERVER/tEquipment/openDoor?${stringToUrl(params)}`, params);
+  return axios.post(
+    `/SZWL-SERVER/tEquipment/openDoor?${stringToUrl(params)}`,
+    params
+  );
 }
 
 // 新版远程开门,包含内门外门
 export function Api_openDoor(params) {
-    return axios.get(`/SZWL-SERVER/tEquipment/openDoors`, { params })
+  return axios.get(`/SZWL-SERVER/tEquipment/openDoors`, { params });
 }
 
 // 系统脱机
 export function deviceTuoji(params) {
-    return axios.post(`/SZWL-SERVER/tEquipment/tuoji?${stringToUrl(params)}`, params);
+  return axios.post(
+    `/SZWL-SERVER/tEquipment/tuoji?${stringToUrl(params)}`,
+    params
+  );
 }
 
 // 音量调解
 export function updateVolume(params) {
-    return axios.post(`/SZWL-SERVER/tEquipment/updateVolume?${stringToUrl(params)}`, params);
+  return axios.post(
+    `/SZWL-SERVER/tEquipment/updateVolume?${stringToUrl(params)}`,
+    params
+  );
 }
 
 // 获取商品下拉列表
 export function selectProducts(params) {
-    return axios.get(`/SZWL-SERVER/tProduct/selectProducts?${stringToUrl(params)}`);
+  return axios.get(
+    `/SZWL-SERVER/tProduct/selectProducts?${stringToUrl(params)}`
+  );
 }
 
 // 远程做糖
 export function doSugar(params) {
-    return axios.get(`/SZWL-SERVER/tSugarDo/doSugar?${stringToUrl(params)}`);
+  return axios.get(`/SZWL-SERVER/tSugarDo/doSugar?${stringToUrl(params)}`);
 }
 
 // 查询做糖状态
 export function selectSugarStatus(params) {
-    return axios.get(`/SZWL-SERVER/tSugarDo/selectSugarStatus?${stringToUrl(params)}`);
+  return axios.get(
+    `/SZWL-SERVER/tSugarDo/selectSugarStatus?${stringToUrl(params)}`
+  );
 }
 
 // 今日做糖列表
 export function selectSugarList(params) {
-    return axios.get(`/SZWL-SERVER/tSugarDo/selectSugarList?${stringToUrl(params)}`);
+  return axios.get(
+    `/SZWL-SERVER/tSugarDo/selectSugarList?${stringToUrl(params)}`
+  );
 }
 
 // 查询定时开关列表
 export function getAlaramClockList(params) {
-    return axios.get(`/SZWL-SERVER/tAlarmClock/list?${stringToUrl(params)}`);
+  return axios.get(`/SZWL-SERVER/tAlarmClock/list?${stringToUrl(params)}`);
 }
 
 // 新增闹钟
 export function addAlaramClock(params) {
-    return axios.post(`/SZWL-SERVER/tAlarmClock/add?${stringToUrl(params)}`, params);
+  return axios.post(
+    `/SZWL-SERVER/tAlarmClock/add?${stringToUrl(params)}`,
+    params
+  );
 }
 
 // 删除闹钟
 export function deleteAlaramClock(params) {
-    return axios.post(`/SZWL-SERVER/tAlarmClock/delete?${stringToUrl(params)}`, params);
+  return axios.post(
+    `/SZWL-SERVER/tAlarmClock/delete?${stringToUrl(params)}`,
+    params
+  );
 }
 
 // 闹钟回显
 export function getAlaramClock(params) {
-    return axios.post(`/SZWL-SERVER/tAlarmClock/selectOne?${stringToUrl(params)}`, params);
+  return axios.post(
+    `/SZWL-SERVER/tAlarmClock/selectOne?${stringToUrl(params)}`,
+    params
+  );
 }
 
 // 修改闹钟
 export function alaramClockUpdate(params) {
-    return axios.post(`/SZWL-SERVER/tAlarmClock/updata`, params);
+  return axios.post(`/SZWL-SERVER/tAlarmClock/updata`, params);
 }
 
 // 获取旗下的机器
 export function getListEquipment(params) {
-    return axios.get(`/SZWL-SERVER/tEquipment/listEquipment?${stringToUrl(params)}`)
+  return axios.get(
+    `/SZWL-SERVER/tEquipment/listEquipment?${stringToUrl(params)}`
+  );
 }
 
 // 设备充值
 export function rechargeAjax(params) {
-    return axios.get(`/SZWL-SERVER/tOrder/equipmentPay?${stringToUrl(params)}`)
+  return axios.get(`/SZWL-SERVER/tOrder/equipmentPay?${stringToUrl(params)}`);
 }
 
 // 获取参数设置
 export function getParameters(params) {
-    return axios.post(`/SZWL-SERVER/tParameters/getParameters`, params)
+  return axios.post(`/SZWL-SERVER/tParameters/getParameters`, params);
 }
 
 // 修改参数设置
 export function updateParameters(params) {
-    return axios.post(`/SZWL-SERVER/tParameters/updateParameters`, params)
+  return axios.post(`/SZWL-SERVER/tParameters/updateParameters`, params);
 }
 
 // 修改湿度区间参数
 export function humidityParameters(params) {
-    return axios.post(`/SZWL-SERVER/tEquipment/humidityParameters`, params)
+  return axios.post(`/SZWL-SERVER/tEquipment/humidityParameters`, params);
 }
 
 // 启用物料监控
 export function enableMaterial(params) {
-    return axios.post(`/SZWL-SERVER/tParameters/enableMaterial`, params)
+  return axios.post(`/SZWL-SERVER/tParameters/enableMaterial`, params);
 }
 
 // 分销人回显
 export function getProportion(params) {
-    return axios.post(`/SZWL-SERVER/tProportion/getOne?${stringToUrl(params)}`)
+  return axios.post(`/SZWL-SERVER/tProportion/getOne?${stringToUrl(params)}`);
 }
 
 // 提交审批或修改
 export function saveProportion(params) {
-    return axios.post(`/SZWL-SERVER/tProportion/save`, params)
+  return axios.post(`/SZWL-SERVER/tProportion/save`, params);
 }
 
 // 单个/批量修改商品价格
 export function Api_getUpdaProdPrice(params) {
-    return axios.get(`/SZWL-SERVER/tProduct/updateProduct`, { params })
+  return axios.get(`/SZWL-SERVER/tProduct/updateProduct`, { params });
 }
 
 // 一键补料
 export function Api_getReplenishment(params) {
-    return axios.get(`/SZWL-SERVER/tEquipment/buliao`, { params })
+  return axios.get(`/SZWL-SERVER/tEquipment/buliao`, { params });
 }
 
 // 远程
 export function Api_getTApkInfo_updateApk(params) {
-    return axios.get(`/SZWL-SERVER/tApkInfo/updateApk`, { params })
+  return axios.get(`/SZWL-SERVER/tApkInfo/updateApk`, { params });
 }
 
 // 修改优惠码开关状态
 export function Api_getDiscCodeStatus(params) {
-    return axios.get(`/SZWL-SERVER/tEquipment/updateCouponStatus`, { params })
+  return axios.get(`/SZWL-SERVER/tEquipment/updateCouponStatus`, { params });
 }
 
 // 修改睡眠描述
 export function changeSleepDesc(params) {
-    return axios.get(`/SZWL-SERVER/tEquipmentDesc/updateSleepDesc`, { params })
+  return axios.get(`/SZWL-SERVER/tEquipmentDesc/updateSleepDesc`, { params });
 }
 
 // 删除设备
 export function delOneDevice(params) {
-    return axios.post(`/SZWL-SERVER/tEquipmentDeleted/delOneDevice`, params)
+  return axios.post(`/SZWL-SERVER/tEquipmentDeleted/delOneDevice`, params);
 }
 
 // 屏蔽/显示商品
 export function updateProductsShow(params) {
-    return axios.post(`/SZWL-SERVER/tProduct/updateProductsShow`, params)
+  return axios.post(`/SZWL-SERVER/tProduct/updateProductsShow`, params);
 }
 
 // 远程修改机器密码
 export function updateDevicePassword(params) {
-    return axios.post(`/SZWL-SERVER/tEquipment/updatePassword`, params)
+  return axios.post(`/SZWL-SERVER/tEquipment/updatePassword`, params);
 }
 
 // 定制Logo
 export function customLogo(params) {
-    return axios.post(`/SZWL-SERVER/tLogo/customLogo`, params)
+  return axios.post(`/SZWL-SERVER/tLogo/customLogo`, params);
 }
 
 // 日志下载
 export function downloadLog(params) {
-    return axios.get(`/SZWL-SERVER/tEquipment/downloadLog?${stringToUrl(params)}`, { responseType: 'blob', timeout: 12000 });
+  return axios.get(
+    `/SZWL-SERVER/tEquipment/downloadLog?${stringToUrl(params)}`,
+    { responseType: "blob", timeout: 12000 }
+  );
 }
 
 // 获取DIY花型列表信息
 export function selectDIYFlowers(params) {
-    return axios.get(`/SZWL-SERVER/tEquipment/selectDIYFlowers?${stringToUrl(params)}`);
+  return axios.get(
+    `/SZWL-SERVER/tEquipment/selectDIYFlowers?${stringToUrl(params)}`
+  );
 }
 
 // 修改DIY花型功能开关状态
 export function updateDIYFlowerStatus(params) {
-    return axios.get(`/SZWL-SERVER/tEquipment/updateDIYFlowerStatus?${stringToUrl(params)}`);
+  return axios.get(
+    `/SZWL-SERVER/tEquipment/updateDIYFlowerStatus?${stringToUrl(params)}`
+  );
 }
 
 // 修改DIY花型的形状或是否显示
 export function updateDIYProductShow(params) {
-    return axios.post(`/SZWL-SERVER/tEquipment/updateDIYProductShow`, params);
+  return axios.post(`/SZWL-SERVER/tEquipment/updateDIYProductShow`, params);
+}
+
+// 获取设备清洗提醒开关状态
+export function getAlarmClean(clientId) {
+  return axios.get(`/SZWL-SERVER/tAlarmClean/getAlarmClean/${clientId}`);
+}
+
+// 修改设备清洗提醒开关状态
+export function updateAlarmCleanStatus(params) {
+  return axios.post(`/SZWL-SERVER/tAlarmClean/updateAlarmCleanStatus`, params);
 }
 
 // 日志上传
 export function uploadLog(params) {
-    return axios.get(`/SZWL-SERVER/tEquipment/uploadLog?${stringToUrl(params)}`);
+  return axios.get(`/SZWL-SERVER/tEquipment/uploadLog?${stringToUrl(params)}`);
 }
 
 // 查询日志
 export function queryLog(params) {
-    return axios.get(`/SZWL-SERVER/tEquipment/queryLog?${stringToUrl(params)}`);
+  return axios.get(`/SZWL-SERVER/tEquipment/queryLog?${stringToUrl(params)}`);
 }
 
 // 重启触摸屏
 export function restartScreen(params) {
-    return axios.get(`/SZWL-SERVER/tEquipment/openScreen`, { params })
+  return axios.get(`/SZWL-SERVER/tEquipment/openScreen`, { params });
 }
 
 // 远程切换雪糕机工作模式
 export function changeWorkingMode(params) {
-    return axios.get(`/SZWL-SERVER/tEquipment/updateWorkingMode`, { params })
-}
+  return axios.get(`/SZWL-SERVER/tEquipment/updateWorkingMode`, { params });
+}
+
+// 修改清洗提醒
+export function changeCleanFunction(params) {
+  return axios.get(`/SZWL-SERVER/tEquipmentDesc/updateCleanFunction`, { params })
+}
+
+// 获取机器开关机状态
+export function getOnOffStatus(params) {
+  return axios.post(`/SZWL-SERVER/tEquipment/onOffStatus?${stringToUrl(params)}`, params)
+}
+
+// 获取当天远程退币申请记录
+export function getReturnCoinList(params) {
+  return axios.get(`/SZWL-SERVER/returnCoinRecord/list`, { params })
+}
+
+// 提交远程退币申请
+export function applyReturnCoin(params) {
+  return axios.post(`/SZWL-SERVER/returnCoinRecord/apply`, params)
+}

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

@@ -427,19 +427,21 @@
                 background-size: 100%;
               }
 
-              .c-text-14 {
+              .c-text-12 {
                 display: inline-block;
                 /* 将行内文本转为块级元素 */
                 padding: 5px 8px;
                 /* 添加内边距 */
                 background-color: #df5e4c;
-                border-radius: 14px;
+                border-radius: 15px;
                 /* 添加圆角效果 */
                 color: #fff;
                 /* 设置文本颜色 */
                 cursor: pointer;
                 /* 设置光标样式 */
               }
+
+              
               .l-flex-RC {
                 margin-left: 10px;
                 margin-right: 10px;

+ 0 - 4
src/styles/login/index.less

@@ -1,8 +1,4 @@
 .login {
-  display: flex;
-  flex-wrap: wrap;
-  flex-direction: row;
-  align-content: flex-start;
 
   .loginLogoBox {
     width: 100%;

+ 1 - 1
src/styles/user/index.less

@@ -6,7 +6,7 @@
     // padding-bottom: 50px;
 
 
-    .simple-header {
+    .van-nav-bar {
         background: transparent;
     }
 

+ 16 - 0
src/views/advertManage/adSet.vue

@@ -202,6 +202,22 @@ export default {
         id: "330en",
       },
       {
+        name: "P10",
+        id: "P10",
+      },
+      {
+        name: "P10en",
+        id: "P10en",
+      },
+      {
+        name: "P20",
+        id: "P20",
+      },
+      {
+        name: "P20en",
+        id: "P20en",
+      },
+      {
         name: "P30",
         id: "P30",
       },

+ 16 - 0
src/views/advertManage/advertRule/add1.vue

@@ -286,6 +286,22 @@ export default {
         id: "330en",
       },
       {
+        name: "P10",
+        id: "P10",
+      },
+      {
+        name: "P10en",
+        id: "P10en",
+      },
+      {
+        name: "P20",
+        id: "P20",
+      },
+      {
+        name: "P20en",
+        id: "P20en",
+      },
+      {
         name: "P30",
         id: "P30",
       },

+ 16 - 0
src/views/advertManage/advertRule/screen.vue

@@ -125,6 +125,22 @@ export default {
         id: "330en",
       },
       {
+        name: "P10",
+        id: "P10",
+      },
+      {
+        name: "P10en",
+        id: "P10en",
+      },
+      {
+        name: "P20",
+        id: "P20",
+      },
+      {
+        name: "P20en",
+        id: "P20en",
+      },
+      {
         name: "P30",
         id: "P30",
       },

+ 16 - 0
src/views/apkManage/add.vue

@@ -201,6 +201,22 @@ export default {
         id: "280en",
       },
       {
+        name: "P10ch",
+        id: "P10ch",
+      },
+      {
+        name: "P10en",
+        id: "P10en",
+      },
+      {
+        name: "P20ch",
+        id: "P20ch",
+      },
+      {
+        name: "P20en",
+        id: "P20en",
+      },
+      {
         name: "P30ch",
         id: "P30ch",
       },

+ 158 - 0
src/views/device/alarmClean/index.vue

@@ -0,0 +1,158 @@
+<template>
+    <div class="showGoodsIdx">
+        <s-header :name="$t('device.alarmClean')" :noback="false"></s-header>
+        <div class="headerCon kBordBott o-plr-10 o-ptb-16 l-flex-RC">
+            <div class="line o-mr-6"></div>
+            <div>
+                <span class="c-color c-text-14">{{ $t('device.showGoodsPage.equipmentName') }}:</span>
+                <span class="c-text-color c-text-14">{{ equipmentName }}</span>
+            </div>
+        </div>
+        <van-cell center
+            :title="cleanFunction == true ? $t('alarmClean.openCleanFunction') : $t('alarmClean.closeCleanFunction')" size="large"
+            title-style="color: #404d74;">
+            <template #right-icon>
+                <van-switch :model-value="cleanFunction" @update:model-value="cleanFunctionStatus" size="24" />
+            </template>
+        </van-cell>
+        <van-cell v-if="showCheckBtn" center
+            :title="checked ? $t('alarmClean.openStatus') : $t('alarmClean.closeStatus')" size="large"
+            title-style="color: #404d74;">
+            <template #right-icon>
+                <van-switch :model-value="checked" @update:model-value="updateStatus" size="24" />
+            </template>
+        </van-cell>
+
+    </div>
+</template>
+
+<script>
+// 导入接口
+import { updateAlarmCleanStatus, getAlarmClean, changeCleanFunction } from '@/service/device/index';
+import sHeader from "@/components/SimpleHeader";
+import { ref } from "@vue/reactivity";
+import { onMounted } from '@vue/runtime-core';
+import { useRoute, useRouter } from 'vue-router';
+import { showConfirmDialog, showFailToast, showToast } from 'vant';
+import { useI18n } from "vue-i18n";
+import { styleUrl } from '../../../common/js/utils';
+export default {
+    components: {
+        sHeader
+    },
+    setup() {
+        // 引入语言
+        const { t } = useI18n();
+        // 路由
+        const route = useRoute();
+        const router = useRouter();
+
+        const switchStates = ref([]);
+
+        const equipmentId = ref('');
+        const equipmentName = ref('');
+        const clientId = ref('');
+        const checked = ref(true);
+        const showCheckBtn = ref(true);
+
+        const cleanFunction = ref(false);
+
+        // 刚进页面
+        onMounted(() => {
+            // 加载样式
+            styleUrl('showGoods');
+            equipmentId.value = route.query.deviceId || "";
+            const name = route.query.name || "";
+            clientId.value = route.query.clientId || "";
+            cleanFunction.value = route.query.cleanFunction || false;
+            if (equipmentId) {
+                equipmentName.value = name;
+            }
+            getList(clientId.value);
+
+        });
+
+        // 获取清洗提醒开关状态
+        const getList = async (clientId) => { // 声明为异步函数
+            try {
+                const { data } = await getAlarmClean(clientId); // 使用await等待异步函数执行完毕并返回结果
+                // 处理获取到的data
+                console.log("data>>>", data);
+                if (data.data === null) {
+                    showCheckBtn.value = false;
+                } else {
+                    if (data.code === '00000') {
+                        if (data.data.status === '0') {
+                            checked.value = false;
+                        }
+                    }
+                }
+            } catch (error) {
+                console.error('Error fetching data:', error);
+            }
+        }
+
+        const cleanFunctionStatus = (newValue) => {
+            const params = {
+                equipmentId: equipmentId.value,
+                cleanFunction: newValue ? '1' : '0',
+            };
+            showConfirmDialog({
+                title: t('alramClean.tips'),
+                message: t('alramClean.content'),
+            }).then(async () => {
+                const { data } = await changeCleanFunction(params);
+                if (data.code) {
+                    // checked.value = newValue;
+                    showToast(t('alramClean.successfully'));
+                    setTimeout(() => {
+                        router.go(-1);
+                    }, 1500);
+                } else {
+                    showFailToast(data.message);
+                }
+            }).catch((error) => {
+                console.log(error);
+            });
+        }
+        const updateStatus = (newValue) => {
+            const params = {
+                clientId: clientId.value,
+                status: newValue ? '1' : '0',
+            };
+            showConfirmDialog({
+                title: t('alarmClean.tips'),
+                message: t('alarmClean.content'),
+            }).then(async () => {
+                console.log("params.clientId>>>", params.clientId);
+                console.log("params.status>>>", params.status);
+                const { data } = await updateAlarmCleanStatus(params);
+                console.log("updateData>>>", data);
+                if (data.code) {
+                    // checked.value = newValue;
+                    showToast(t('alarmClean.successfully'));
+                    setTimeout(() => {
+                        router.go(-1);
+                    }, 1500);
+                } else {
+                    showFailToast(data.message);
+                }
+            }).catch((error) => {
+                console.log(error);
+            });
+        }
+
+        return {
+            equipmentName,
+            switchStates,
+            checked,
+            updateStatus,
+            showCheckBtn,
+            cleanFunction,
+            cleanFunctionStatus
+        };
+    },
+};
+</script>
+
+<style lang="less" scoped></style>

+ 33 - 0
src/views/device/deviceOper.vue

@@ -205,6 +205,22 @@
         </div>
         <div class="operText">{{ $t("device.viewPositioning") }}</div>
       </div> -->
+      <!-- 设备清洗提醒 -->
+      <div class="operItem" v-if="device.machineType === '0' || device.machineType === null" @click="alramCleanClk()">
+        <div class="operIcon">
+          <img class="operImg" src="../../assets/device/operIcon/alarmClean.png" />
+        </div>
+        <div class="operText">{{ $t("device.alarmClean") }}</div>
+      </div>
+      <!-- 远程退币 -->
+      <div class="operItem"
+        v-if="(device.machineType === '0' || device.machineType === null) && (user.ifForeign == 1 || user.type == 0)"
+        @click="returnCoinClk()">
+        <div class="operIcon">
+          <img class="operImg" src="../../assets/device/operIcon/coin.png" />
+        </div>
+        <div class="operText">{{ $t("device.returnCoin") }}</div>
+      </div>
 
     </div>
   </van-dialog>
@@ -271,6 +287,21 @@ export default {
         query: { deviceId: device.value.id, name: device.value.name, diyFlowerStatus: device.value.diyFlowerStatus, flower: device.value.flowers },
       });
     };
+    // 点击设备清洗提醒
+    const alarmCleanClk = () => {
+      router.push({
+        path: "alarmClean",
+        query: { deviceId: device.value.id, name: device.value.name, clientId: device.value.clientId, cleanFunction: device.value.cleanFunction },
+      });
+    };
+    
+    // 点击远程退币
+    const returnCoinClk = () => {
+      router.push({
+        path: "returnCoin",
+        query: { deviceId: device.value.id, name: device.value.name, clientId: device.value.clientId },
+      });
+    };
     const { t } = useI18n();
     const user = getLoginUser();
     const router = useRouter();
@@ -609,6 +640,8 @@ export default {
       materialIcon,
       materialMonitorClk,
       updateWorkingMode,
+      alarmCleanClk,
+      returnCoinClk,
     };
   },
   components: {},

+ 0 - 14
src/views/device/deviceSet.vue

@@ -195,20 +195,6 @@
         </template>
         <!-- 花型种类 -->
         <template v-if="isAdmind && machineType === '0'">
-          <!-- <van-field readonly :label="`${$t('device.flowerType')}`" placeholder="">
-            <template #input>
-              <div class="van-cell__value van-field__value radioBox">
-                <van-radio-group v-model="deviceDetal.flowers" direction="horizontal">
-                  <van-radio name="18" icon-size="16px">18</van-radio>
-                  <van-radio name="22" icon-size="16px">22</van-radio>
-                  <van-radio name="26" icon-size="16px">26</van-radio>
-                  <van-radio name="30" icon-size="16px">30</van-radio>
-                  <van-radio name="42" icon-size="16px">42</van-radio>
-                  <van-radio name="60" icon-size="16px">60</van-radio>
-                </van-radio-group>
-              </div>
-            </template>
-          </van-field> -->
           <van-field v-model="deviceDetal.flowers" is-link readonly :label="$t('device.flowerType')" placeholder="选择花型种类"
             @click="showFlowerPicker = true" />
         </template>

+ 29 - 22
src/views/device/index.vue

@@ -56,6 +56,10 @@
             </van-tab>
             <van-tab v-for="item in labelList" :name="item.id" :key="item" :title="item.name">
             </van-tab>
+            <van-tab :title="$t('device.powerOn')" name="ON">
+            </van-tab>
+            <van-tab :title="$t('device.abnormal')" name="ABNORMAL">
+            </van-tab>
           </van-tabs>
           <div class="section1 flex-col">
             <div class="outer1 flex-col o-plr-15">
@@ -74,32 +78,35 @@
                 </div>
                 <span class="txt1 o-mt-10">{{ $t("device.machineUniqueCode") }}:{{ item.clientId }}</span>
                 <!--机器参数-->
-                <span v-if="(item.machineType == '0' || item.machineType == null) && item.equimentType != 'P30'"
-                  class="txt1 o-mt-10">
-                  {{ $t("device.temperatureInCabinet") + ':' + item.cabinetTm
+                <span v-if="item.machineType == '0' || item.machineType == null" class="txt1 o-mt-10" :style="{
+        color: item.furnaceTm <= 100 && item.eqeStatus == 1 ? '#ff0033' : '',
+        fontSize: item.furnaceTm <= 100 && item.eqeStatus == 1 ? '0.5rem' : ''
+      }">
+                  {{ $t("device.furnaceHeadTemperature") + ':' + (item.furnaceTm ? item.furnaceTm : '0') +
+        $t("device.degree")
+                  }}
+                </span>
+                <span v-if="item.machineType == '0' || item.machineType == null" class="txt1 o-mt-10">
+                  {{ $t("device.temperatureInCabinet") + ':' + (item.cabinetTm ? item.cabinetTm : '0')
         + $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
+                <span v-if="item.machineType == '0' || item.machineType == null" class="txt1 o-mt-10">
+                  {{ $t("device.humidityInCabinet") + ':' + (item.cabinetHd ? item.cabinetHd : '0')
         + $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 v-if="item.machineType == '1'" class="txt1 o-mt-10">
+                  {{ $t("device.cornGeneratorTemperature") + ':' + (item.cabinetTm ? item.cabinetTm : '0') +
+        $t("device.degree")
+                  }}
                 </span>
-                <span v-if="item.machineType == '1' && item.equimentType == 'P30'" class="txt1 o-mt-10">
-                  {{ $t("device.cornGeneratorTemperature") + ':' + (item.cabinetTm ? item.cabinetTm : '0') + $t("device.degree") }}
+                <span v-if="item.machineType == '1' && item.equimentType != 'P10'" class="txt1 o-mt-10">
+                  {{ $t("device.stirringTemperature") + ':' + (item.cabinetHd ? item.cabinetHd : '0') +
+        $t("device.degree") }}
                 </span>
-                <span v-if="item.machineType == '1' && item.equimentType == 'P30'" class="txt1 o-mt-10">
-                  {{ $t("device.stirringTemperature") + ':' + (item.cabinetHd ? item.cabinetHd : '0') + $t("device.degree") }}
-                </span>
-                <span v-if="item.machineType == '1' && item.equimentType == 'P30' && (item.furnaceTm && item.furnaceTm != '-1')" class="txt1 o-mt-10">
+                <span v-if="item.machineType == '1' && (item.furnaceTm && item.furnaceTm != '-1')" class="txt1 o-mt-10">
                   {{ $t("device.cupQuantity") + ':' + item.furnaceTm }}
                 </span>
-                <span v-if="item.machineType == '1' && item.equimentType == 'P30' && item.furnaceSp" class="txt1 o-mt-10">
+                <span v-if="item.machineType == '1' && item.furnaceSp" class="txt1 o-mt-10">
                   {{ $t("device.bucketWeight") + ':' + item.furnaceSp + $t("device.weight") }}
                 </span>
                 <img v-if="item.checkType" class="pic1" referrerpolicy="no-referrer" src="../../assets/home/line.png" />
@@ -225,15 +232,15 @@
                   </div>
                   <div class="editDeviceBtnCon l-flex-center o-mt-10">
                     <div class="l-flex-RC" @click="deviceSet(item)">
-                      <span class="c-text-14">{{
+                      <span class="c-text-12">{{
         $t("device.editDevice")
       }}</span>
                       <div class="box2 flex-col"></div>
                     </div>
                     <div class="l-flex-RC o-ml-30" @click="deviceOprShow(item)">
-                      <span class="c-text-14">{{
+                      <span class="c-text-12">{{
         $t("device.commonOperations")
-                        }}</span>
+      }}</span>
                       <div class="box2 flex-col"></div>
                     </div>
                   </div>
@@ -647,7 +654,7 @@ export default {
     const restartHead = (id, msg) => {
       showConfirmDialog({
         title: t('user.tips'),
-        message: msg ? msg: t('device.restartFurnaceHeadTips'),
+        message: msg ? msg : t('device.restartFurnaceHeadTips'),
       }).then(async () => {
         const { data } = await setFurnace({
           equipmentId: id,

+ 150 - 0
src/views/device/returnCoin/index.vue

@@ -0,0 +1,150 @@
+<template>
+    <div class="showGoodsIdx">
+        <s-header :name="$t('device.returnCoin')" :noback="false"></s-header>
+        <div class="headerCon kBordBott o-plr-10 o-ptb-16 l-flex-RC">
+            <div class="line o-mr-6"></div>
+            <div>
+                <span class="c-color c-text-14">{{ $t('device.showGoodsPage.equipmentName') }}:</span>
+                <span class="c-text-color c-text-14">{{ equipmentName }}</span>
+            </div>
+
+        </div>
+        <div class="">
+            <van-field name="stepper" :label="$t('device.returnCoinPage.amount')" class="l-flex-RC">
+                <template #input>
+                    <van-stepper v-model="amount" max="50"/>
+                </template>
+                <template #button>
+                    <van-button size="small" type="primary" @click="applyReturnCoinClk()">{{ $t('device.returnCoinPage.returnCoinBtn')
+                        }}</van-button>
+                </template>
+            </van-field>
+        </div>
+        <van-cell :title="$t('device.returnCoinPage.returnCoinRecord')" icon="points"/>
+        <div class="outer2 flex-col" v-for="item in recordList" :key="item.id">
+            <div class="word">{{ $t('device.returnCoinPage.applyTime') }}:{{ showTime(item.createDate) }}</div>
+            <div class="word">{{ $t('device.returnCoinPage.amount') }}:{{ item.amount }}</div>
+            <div class="word">{{ $t('device.returnCoinPage.status') }}:{{ item.status == 1 ? $t('device.returnCoinPage.returnCoinSuccess') : (item.status == 2 ? $t('device.returnCoinPage.returnCoinFailed') : $t('device.returnCoinPage.waiting')) }}</div>
+            <div class="word" v-if="item.status == 2">{{ $t('device.returnCoinPage.reason') }}:{{ item.reason}}</div>
+        </div>
+
+    </div>
+</template>
+
+<script>
+// 导入接口
+import { applyReturnCoin, getReturnCoinList } from '@/service/device/index';
+import sHeader from "@/components/SimpleHeader";
+import { ref } from "@vue/reactivity";
+import { onMounted } from '@vue/runtime-core';
+import { useRoute, useRouter } from 'vue-router';
+import { showConfirmDialog, showFailToast, showToast } from 'vant';
+import { useI18n } from "vue-i18n";
+import { getLoginUser, styleUrl } from '../../../common/js/utils';
+import dateUtil from "../../../utils/dateUtil";
+export default {
+    components: {
+        sHeader
+    },
+    setup() {
+        // 引入语言
+        const { t } = useI18n();
+        // 路由
+        const route = useRoute();
+        const router = useRouter();
+        const amount = ref(1);
+        const user = getLoginUser();
+        const equipmentId = ref('');
+        const equipmentName = ref('');
+        const clientId = ref('');
+        const activeNames = ref(['1']);
+        const recordList = ref([]);
+        // 刚进页面
+        onMounted(() => {
+            // 加载样式
+            styleUrl('showGoods');
+            equipmentId.value = route.query.deviceId || "";
+            const name = route.query.name || "";
+            clientId.value = route.query.clientId || "";
+            if (equipmentId) {
+                equipmentName.value = name;
+            }
+            getList(clientId.value);
+
+        });
+
+        // 获取退币记录
+        const getList = async () => { // 声明为异步函数
+            try {
+                const { data } = await getReturnCoinList({equipmentId: equipmentId.value}); // 使用await等待异步函数执行完毕并返回结果
+                // 处理获取到的data
+                recordList.value = data.data;
+            } catch (error) {
+                console.error('Error fetching data:', error);
+            }
+        }
+
+        // 格式化时间
+        const showTime = (time) => {
+            return dateUtil.timeZoneDate(new Date(dateUtil.formateDate(new Date(time), "yyyy/MM/dd hh:mm:ss")));
+        }
+
+
+        // 退币申请
+        const applyReturnCoinClk = () => {
+            const params = {
+                equipmentId: equipmentId.value,
+                amount: amount.value,
+                adminId: user.id
+            };
+            showConfirmDialog({
+                title: t('alramClean.tips'),
+                message: t('device.returnCoinPage.tipsContent'),
+            }).then(async () => {
+                const { data } = await applyReturnCoin(params);
+                console.log("data>>>", data);
+                if (data.code) {
+                    showToast(t('alramClean.successfully'));
+                    setTimeout(() => {
+                        router.go(-1);
+                    }, 1500);
+                } else {
+                    showFailToast(data.message);
+                }
+            }).catch((error) => {
+                console.log(error);
+            });
+        }
+
+        return {
+            equipmentName,
+            applyReturnCoinClk,
+            amount,
+            activeNames,
+            recordList,
+            showTime
+        };
+    },
+};
+</script>
+
+<style lang="less" scoped>
+
+.van-cell {
+    font-size: 20px !important;
+}
+.outer2 {
+    box-shadow: 1px 2px 5px 3px rgba(70, 95, 198, 0.14);
+    background-color: rgba(255, 255, 255, 1);
+    border-radius: 4px;
+    margin: 20px 30px;
+    margin-bottom: 20px;
+    padding: 10px 20px;
+
+    .word {
+        font-size: 14px;
+        padding: 3px 0;
+        line-height: 20px;
+    }
+}
+</style>

+ 1 - 3
src/views/login.vue

@@ -1,9 +1,7 @@
 <template>
   <!-- 登录 -->
   <div class="login">
-    <s-header
-        :name="sys ? sys.title : sysTitle"
-    ></s-header>
+    <s-header :name="sys ? sys.title : sysTitle" :noback="true"></s-header>
     <div class="loginLogoBox l-re">
       <div class="loginLogo">
         <img :src="logoName" alt="Logo">

+ 1 - 1
src/views/robotRanking.vue

@@ -153,7 +153,7 @@
         @confirm="yearPopConfirm" @cancel="yearShow = false" />
     </van-popup>
   </div>
-  <div v-else class="noPermission" style="display: flex; justify-content: center;">
+  <div v-else class="noPermission" style="justify-content: center;">
     <div class="box1 flex-col" style="text-align: center;">
       <s-header :name="$t('robotRanking.machineSalesRanking')" :noback="true" :isFixed="false"></s-header>
       <view>

+ 4 - 0
src/views/settlement/index.vue

@@ -519,6 +519,10 @@ export default {
         value: "03080000",
       },
       {
+        text: '广州银行',
+        value: "03134401",
+      },
+      {
         text: '其他,请咨询售后人员',
         value: "",
       },

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

@@ -102,7 +102,7 @@
               <div class="itemRow" style="display: flex; justify-content: flex-end">
                 <span v-if="item.checkType === '0' && user.type > 1" style="color: #FFA500"> {{ $t('taskMessage.toBeApproved') }}</span>
                 <span v-if="item.checkType === '1'" style="color: #1989fa"> {{ $t('taskMessage.adopt') }}</span>
-                <span v-if="item.checkType === '2'" style="color: #ff0000"> {{ $t('taskMessage.cancel') }}</span>
+                <span v-if="item.checkType === '2'" style="color: #ff0033"> {{ $t('taskMessage.cancel') }}</span>
                 <span v-if="item.checkType === '3'" style="color: #ff0000"> {{ $t('taskMessage.fail') }}</span>
               </div>
             </div>