Ver Fonte

feat:"增加冰淇淋果酱抽取功能,优化冰淇淋屏蔽商品页面"

soobin há 3 meses atrás
pai
commit
c0e2aa7f55

BIN
src/assets/device/operIcon/jam.png


+ 7 - 1
src/assets/language/en.json

@@ -1742,6 +1742,11 @@
     "rateInvalid": "Enter valid value with up to 2 decimal places",
     "update": "Apply Now"
   },
+  "jam": {
+    "forward": "Forward Extraction",
+    "reverse": "Reverse Extraction",
+    "stop": "Emergency Stop"
+  },
   "remote": {
     "C1": "Restart Machine",
     "C2": "Sleep Toggle",
@@ -1771,6 +1776,7 @@
     "C26": "Freshness Mode (Ice Cream)",
     "C27": "Defrost Mode (Ice Cream)",
     "C28": "Edit Payment Method",
-    "C29": "Tax Administration"
+    "C29": "Tax Administration",
+    "C30": "Jam Extraction"
   }
 }

+ 7 - 1
src/assets/language/es.json

@@ -1741,6 +1741,11 @@
         "rateInvalid": "Valor entre 0-100 con 2 decimales",
         "update": "Actualizar ahora"
     },
+    "jam": {
+        "forward": "Extracción Directa",
+        "reverse": "Extracción Inversa",
+        "stop": "Paro de Emergencia"
+    },
     "remote": {
         "C1": "Reiniciar máquina",
         "C2": "Alternar suspensión",
@@ -1770,6 +1775,7 @@
         "C26": "Conservación (Helado)",
         "C27": "Descongelación (Helado)",
         "C28": "Cambiar pago",
-        "C29": "Gestión Tributaria"
+        "C29": "Gestión Tributaria",
+        "C30": "Extracción de Mermelada"
     }
 }

+ 7 - 1
src/assets/language/fr.json

@@ -1772,6 +1772,11 @@
         "rateInvalid": "Valeur entre 0 et 100 (2 décimales max)",
         "update": "Mettre à jour"
     },
+    "jam": {
+        "forward": "Extraction Avant",
+        "reverse": "Extraction Arrière",
+        "stop": "Arrêt d'Urgence"
+    },
     "remote": {
         "C1": "Redémarrer machine",
         "C2": "Mode veille",
@@ -1801,6 +1806,7 @@
         "C26": "Conservation (Glace)",
         "C27": "Décongélation (Glace)",
         "C28": "Modifier paiement",
-        "C29": "Gestion Fiscale"
+        "C29": "Gestion Fiscale",
+        "C30": "Extraction de Confiture"
     }
 }

+ 7 - 1
src/assets/language/ja.json

@@ -1733,6 +1733,11 @@
         "rateInvalid": "0-100の数値を入力(小数点第2位まで)",
         "update": "即時適用"
     },
+    "jam": {
+        "forward": "順方向抽出",
+        "reverse": "逆方向抽出",
+        "stop": "緊急停止"
+    },
     "remote": {
         "C1": "マシン再起動",
         "C2": "スリープ切替",
@@ -1762,6 +1767,7 @@
         "C26": "鮮度保持(アイスクリーム)",
         "C27": "解凍モード(アイスクリーム)",
         "C28": "支払い方法変更",
-        "C29": "税務管理"
+        "C29": "税務管理",
+        "C30": "ジャム抽出"
     }
 }

+ 7 - 1
src/assets/language/pt.json

@@ -1741,6 +1741,11 @@
         "rateInvalid": "Valor entre 0-100 com 2 decimais",
         "update": "Atualizar agora"
     },
+    "jam": {
+        "forward": "Extração Direta",
+        "reverse": "Extração Reversa",
+        "stop": "Parada de Emergência"
+    },
     "remote": {
         "C1": "Reiniciar máquina",
         "C2": "Alternar sono",
@@ -1770,6 +1775,7 @@
         "C26": "Conservação (Sorvete)",
         "C27": "Descongelamento (Sorvete)",
         "C28": "Alterar pagamento",
-        "C29": "Gestão Tributária"
+        "C29": "Gestão Tributária",
+        "C30": "Extração de Geleia"
     }
 }

+ 7 - 1
src/assets/language/ru.json

@@ -1772,6 +1772,11 @@
         "rateInvalid": "Допустимое значение: 0-100 с 2 знаками после запятой",
         "update": "Применить сейчас"
     },
+    "jam": {
+        "forward": "Прямая прокачка",
+        "reverse": "Обратная прокачка",
+        "stop": "Аварийная остановка"
+    },
     "remote": {
         "C1": "Перезагрузка машины",
         "C2": "Переключение сна",
@@ -1801,6 +1806,7 @@
         "C26": "Сохранение свежести (Мороженое)",
         "C27": "Разморозка (Мороженое)",
         "C28": "Изменить оплату",
-        "C29": "Управление налогообложением"
+        "C29": "Управление налогообложением",
+        "C30": "Экстракция джема"
     }
 }

+ 7 - 1
src/assets/language/uk.json

@@ -1742,6 +1742,11 @@
         "rateInvalid": "Допустиме значення: 0-100 з 2 десятковими",
         "update": "Застосувати"
     },
+    "jam": {
+        "forward": "Пряме витягнення",
+        "reverse": "Зворотне витягнення",
+        "stop": "Аварійне зупинення"
+    },
     "remote": {
         "C1": "Перезавантажити пристрій",
         "C2": "Режим сну",
@@ -1771,6 +1776,7 @@
         "C26": "Збереження свіжості (морозиво)",
         "C27": "Розморозка (морозиво)",
         "C28": "Змінити оплату",
-        "C29": "Управління оподаткуванням"
+        "C29": "Управління оподаткуванням",
+        "C30": "Витяг джему"
     }
 }

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

@@ -1742,6 +1742,11 @@
     "rateInvalid": "请输入0-100之间的有效数值(最多两位小数)",
     "update": "立即更新"
   },
+  "jam": {
+    "forward": "正抽",
+    "reverse": "反抽",
+    "stop": "停止"
+  },
   "remote": {
     "C1": "重启设备",
     "C2": "睡眠开关",
@@ -1771,6 +1776,7 @@
     "C26": "保鲜模式(冰淇淋)",
     "C27": "解冻模式(冰淇淋)",
     "C28": "修改支付方式",
-    "C29": "税收管理"
+    "C29": "税收管理",
+    "C30": "果酱抽取"
   }
 }

+ 7 - 0
src/router/index.js

@@ -519,6 +519,13 @@ const router = createRouter({
       component: () => import("@/views/device/returnCoin/index"),
       meta: { index: 1 },
     },
+    // 税收管理
+    {
+      path: "/jam",
+      name: "jam",
+      component: () => import("@/views/device/jam/index"),
+      meta: { index: 1 },
+    },
     // 修改机器密码
     {
       path: "/devicePassword",

+ 10 - 1
src/service/device/index.js

@@ -207,6 +207,11 @@ export function updateProductsShow(params) {
     return axios.post(`/SZWL-SERVER/tProduct/updateProductsShow`, params)
 }
 
+// 新屏蔽/显示商品
+export function newUpdateProductsShow(params) {
+    return axios.post(`/SZWL-SERVER/tProduct/newUpdateProductsShow`, params)
+}
+
 // 远程修改机器密码
 export function updateDevicePassword(params) {
     return axios.post(`/SZWL-SERVER/tEquipment/updatePassword`, params)
@@ -216,7 +221,6 @@ export function updateDevicePassword(params) {
 export function newCustomLogo(params) {
     return axios.get(`/SZWL-SERVER/tLogo/newCustomLogo?${stringToUrl(params)}`, params)
 }
-
 // 日志下载
 export function downloadLog(params) {
     return axios.get(`/SZWL-SERVER/tEquipment/downloadLog?${stringToUrl(params)}`, { responseType: 'blob', timeout: 12000 });
@@ -300,4 +304,9 @@ export function updateTaxStatus(params) {
 // 修改税率
 export function updateTaxRate(params) {
     return axios.post(`/SZWL-SERVER/tEquipment/updateTaxRate`, params)
+}
+
+// 果酱抽取
+export function smokeJam(params) {
+    return axios.post(`/SZWL-SERVER/tEquipment/smokeJam`, params)
 }

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

@@ -60,3 +60,8 @@ export function updateApproveStatus(params) {
 export function altMchSign(params) {
   return axios.get(`/SZWL-SERVER/tJoinpayMch/altMchSign?${stringToUrl(params)}`);
 }
+
+// 查询证照
+export function getPhotos(params) {
+  return axios.get(`/SZWL-SERVER/purse/userLicense?${stringToUrl(params)}`);
+}

+ 135 - 43
src/views/bindBankCard/index.vue

@@ -16,7 +16,10 @@
       <div v-if="currentStep === 0" class="card-section">
         <van-tabs v-model:active="merchantType" title-active-color="#4d6add">
           <!-- 个人商户 -->
-          <van-tab title="个人商户">
+          <van-tab
+            title="个人商户"
+            :disabled="joinPayMchNo != null && merchantType === 1"
+          >
             <div class="upload-card">
               <h3 class="upload-title">
                 <span class="title-decoration"></span>
@@ -56,7 +59,10 @@
           </van-tab>
 
           <!-- 企业商户 -->
-          <van-tab title="企业商户">
+          <van-tab
+            title="企业商户"
+            :disabled="joinPayMchNo != null && merchantType === 0"
+          >
             <div class="upload-card">
               <h3 class="upload-title">
                 <span class="title-decoration"></span>
@@ -245,7 +251,7 @@
               </div>
             </div>
             <van-button
-              v-if="infoStatus != 0"
+              v-if="infoStatus == 2"
               size="small"
               type="primary"
               plain
@@ -270,15 +276,20 @@
               </div>
             </div>
             <van-button
-              v-if="auditStatus != 0"
+              v-if="auditStatus == 3"
               size="small"
               type="primary"
               plain
-              @click="handleReupload"
+              @click="handleInfoReupload"
             >
               上传
             </van-button>
           </div>
+          <!-- 签约说明 -->
+          <div class="sign-notice" v-if="signStatus != 1">
+            <van-icon name="warning" color="#FF9500" />
+            <span>请确认所有状态通过后,点击下方按钮完成签约</span>
+          </div>
 
           <h3 class="upload-title">
             <span class="title-decoration"></span>
@@ -286,7 +297,10 @@
           </h3>
 
           <!-- 签约状态栏 -->
-          <div class="audit-status-bar" :class="signStatusClass">
+          <div
+            class="audit-status-bar"
+            :class="signStatusClass"
+          >
             <div class="status-content">
               <van-icon :name="signStatusIcon" class="status-icon" />
               <div class="status-text">
@@ -294,21 +308,6 @@
                 <p class="sub-text">{{ signStatusSubText }}</p>
               </div>
             </div>
-            <van-button
-              v-if="signStatus != 0"
-              size="small"
-              type="primary"
-              plain
-              @click="handleReupload"
-            >
-              签约
-            </van-button>
-          </div>
-
-          <!-- 签约说明 -->
-          <div class="sign-notice" v-if="signStatus != 1">
-            <van-icon name="warning" color="#FF9500" />
-            <span>请确认所有状态通过后,点击下方按钮完成签约</span>
           </div>
         </div>
       </div>
@@ -325,20 +324,44 @@
       </div>
       <div class="action-buttons">
         <van-button
-          v-if="currentStep > 0"
+          v-if="currentStep > 0 && currentStep < 3"
           round
           class="prev-btn"
           @click="currentStep--"
         >
           上一步
         </van-button>
-        <van-button v-if="currentStep < 3"
+        <van-button
+          v-if="currentStep < 3"
+          round
+          type="primary"
+          class="next-btn"
+          @click="handleNextStep"
+        >
+          下一步
+        </van-button>
+        <van-button
+          v-if="currentStep == 3 && signStatus != 1"
           round
           type="primary"
           class="next-btn"
           @click="handleNextStep"
         >
-          {{ currentStep === 3 ? "立即签约" : "下一步" }}
+          立即签约
+        </van-button>
+        <van-button
+          v-if="
+            currentStep == 3 &&
+            auditStatus == 1 &&
+            infoStatus == 1 &&
+            signStatus == 1
+          "
+          round
+          type="primary"
+          class="next-btn"
+          @click="updateBankCard"
+        >
+          修改银行卡
         </van-button>
       </div>
     </div>
@@ -738,9 +761,11 @@ import {
   uploadPhotos,
   updateApproveStatus,
   altMchSign,
+  getPhotos,
 } from "../../service/purse/index.js";
 import { ref, computed, onMounted } from "vue";
 import dateUtil from "../../utils/dateUtil";
+import router from "../../router";
 
 export default {
   components: { sHeader },
@@ -801,14 +826,7 @@ export default {
         }[infoStatus.value])
     );
 
-    const infoStatusSubText = computed(
-      () =>
-        ({
-          0: "预计3分钟内完成认证",
-          1: "认证信息已验证通过",
-          2: "请重新提交认证材料",
-        }[infoStatus.value])
-    );
+    const infoStatusSubText = ref("");
 
     // 证照审核状态(0: 审核中 1: 通过 2: 未通过)
     const auditStatus = ref(0);
@@ -950,6 +968,7 @@ export default {
           switch (type.name) {
             // 身份证人像面
             case "idCardFront":
+              console.log(idCardFront.value);
               formData.value.name = data.data.name;
               formData.value.idNumber = data.data.idCard;
               break;
@@ -1069,7 +1088,7 @@ export default {
           try {
             const { data } = await createMch(submitParam.value);
             if (data.code === "00000") {
-              currentStep.value++;
+                currentStep.value++;
             } else {
               showToast(data.message);
             }
@@ -1089,7 +1108,6 @@ export default {
       try {
         const { data } = await getJoinPayMch({ adminId: user.id });
         if (data.code === "00000") {
-          // console.log("回显数据", data.data);
           joinPayMchID.value = data.data.id;
           if (data.data.altMchNo != null && data.data.altMchNo != "") {
             joinPayMchNo.value = data.data.altMchNo;
@@ -1119,14 +1137,17 @@ export default {
             case "0":
               // 认证中
               infoStatus.value = 0;
+              infoStatusSubText.value = "预计3分钟内完成认证";
               break;
             case "1":
               // 认证成功
               infoStatus.value = 1;
+              infoStatusSubText.value = "认证信息已验证通过";
               break;
             case "2":
               // 认证失败
               infoStatus.value = 2;
+              infoStatusSubText.value = data.data.bizMsg;
               break;
           }
           // 图片上传状态
@@ -1170,8 +1191,63 @@ export default {
       }
     };
 
+    // 获取图片
+    const getUserLicense = async () => {
+      try {
+        const { data } = await getPhotos({
+          adminId: user.id,
+        });
+        if (data.code === "00000") {
+          console.log("图片", data.data);
+          if (data.data.idCardFront) {
+            idCardFront.value = [
+              {
+                url: "data:image/jpeg;base64," + data.data.idCardFront,
+                isImage: true,
+              },
+            ];
+          }
+          if (data.data.idCardBack) {
+            idCardBack.value = [
+              {
+                url: "data:image/jpeg;base64," + data.data.idCardBack,
+                isImage: true,
+              },
+            ];
+          }
+          if (data.data.bankCard) {
+            bankCard.value = [
+              {
+                url: "data:image/jpeg;base64," + data.data.bankCard,
+                isImage: true,
+              },
+            ];
+          }
+          if (data.data.businessLicense) {
+            businessLicense.value = [
+              {
+                url: "data:image/jpeg;base64," + data.data.businessLicense,
+                isImage: true,
+              },
+            ];
+          }
+          if (data.data.accountLicense) {
+            accountLicense.value = [
+              {
+                url: "data:image/jpeg;base64," + data.data.accountLicense,
+                isImage: true,
+              },
+            ];
+          }
+        }
+      } catch (error) {
+        console.log(error);
+      }
+    };
+
     onMounted(async () => {
       await getMchInfo();
+      await getUserLicense();
     });
 
     const handleNextStep = () => {
@@ -1229,15 +1305,16 @@ export default {
                     if (data.code === "00000") {
                       // 上传成功
                       uploadStatus.value = 1;
-                      currentStep.value++;
+                    } else {
+                      showToast(data.message);
                     }
                   } catch (error) {
                     console.log(error);
                   }
-                } else {
-                  infoStatus.value = 0;
-                  currentStep.value++;
-                }
+                } 
+                infoStatus.value = 0;
+                infoStatusSubText.value = "预计3分钟内完成认证";
+                currentStep.value++;
               } else {
                 showToast(data.message);
               }
@@ -1265,6 +1342,9 @@ export default {
               const { data } = await altMchSign({ id: joinPayMchID.value });
               if (data.code === "00000") {
                 showSuccessToast("签约成功");
+                setTimeout(() => {
+                  router.go(0);
+                }, 1000);
               } else {
                 showFailToast(data.message);
               }
@@ -1288,6 +1368,16 @@ export default {
       }
     };
 
+    // 跳转修改认证信息
+    const handleInfoReupload = () => {
+      currentStep.value = 0;
+    };
+
+    // 修改银行卡
+    const updateBankCard = () => {
+      currentStep.value = 1;
+    };
+
     const handlePrevStep = () => {
       if (currentStep.value > 0) currentStep.value--;
     };
@@ -1374,6 +1464,8 @@ export default {
       idDateConfirm,
       confirmInfo,
       companyDateConfirm,
+      handleInfoReupload,
+      updateBankCard,
 
       // 弹窗
       showConfirmSheet,
@@ -1678,10 +1770,10 @@ export default {
 }
 
 /* 主要内容区域需要添加底部padding防遮挡 */
-.main-content {
-  padding-bottom: 10px;
-  /* 根据实际高度调整 */
-}
+// .main-content {
+//   // padding-bottom: 10px;
+//   /* 根据实际高度调整 */
+// }
 
 /* 动画效果 */
 @keyframes slideUp {

+ 32 - 1
src/views/device/deviceOper.vue

@@ -597,6 +597,25 @@
           <span class="operation-text">{{ $t("remote.C29") }}</span>
         </div>
       </div>
+      <!-- 果酱抽取 -->
+      <div
+        v-if="
+          device.machineType === '2' && controlList.includes('C30')
+        "
+        class="operation-item"
+        @click="jamClk()"
+      >
+        <div class="icon-wrapper">
+          <img
+            class="operation-icon"
+            src="../../assets/device/operIcon/jam.png"
+            alt="jam"
+          />
+        </div>
+        <div class="text-wrapper">
+          <span class="operation-text">{{ $t("remote.C30") }}</span>
+        </div>
+      </div>
     </div>
   </van-dialog>
   <van-dialog
@@ -661,7 +680,7 @@ export default {
     const showGoodsClk = () => {
       router.push({
         path: "showGoods",
-        query: { deviceId: device.value.id, name: device.value.name },
+        query: { deviceId: device.value.id, name: device.value.name, machineType: device.value.machineType },
       });
     };
 
@@ -715,6 +734,17 @@ export default {
         },
       });
     };
+    // 果酱抽取
+    const jamClk = () => {
+      router.push({
+        path: "jam",
+        query: {
+          deviceId: device.value.id,
+          name: device.value.name,
+          clientId: device.value.clientId,
+        },
+      });
+    };
     const { t } = useI18n();
     const user = getLoginUser();
     const router = useRouter();
@@ -1104,6 +1134,7 @@ export default {
       alramCleanClk,
       returnCoinClk,
       taxClk,
+      jamClk,
 
       changePasswordClk,
       sleepIcon,

+ 276 - 0
src/views/device/jam/index.vue

@@ -0,0 +1,276 @@
+<template>
+  <div class="payment-settings">
+    <s-header :name="$t('remote.C30')" :noback="false" />
+
+    <!-- 设备名称标题 -->
+    <div class="device-header">
+      <div class="vertical-indicator"></div>
+      <h3 class="device-name">
+        {{ $t("device.equipmentName") }}:{{ deviceName }}
+      </h3>
+    </div>
+
+    <!-- 果酱抽取卡片 -->
+    <div class="settings-card">
+      <div v-for="jam in jams" :key="jam.id" class="jam-item">
+        <!-- 图片和名称行 -->
+        <div class="jam-main-row">
+          <van-image
+            :src="showSugerPhoto(jam)"
+            width="70"
+            height="70"
+            radius="8"
+            fit="cover"
+            class="jam-image"
+          />
+          <h3 class="jam-title">{{ jam.name }}</h3>
+        </div>
+        <!-- 操作按钮组 -->
+        <div class="jam-actions">
+          <van-button
+            type="primary"
+            size="small"
+            class="action-btn"
+            @click="handleExtract(jam.no, 1)"
+          >
+            {{ $t("jam.forward") }}
+          </van-button>
+          <van-button
+            type="warning"
+            size="small"
+            class="action-btn"
+            @click="handleExtract(jam.no, 2)"
+          >
+            {{ $t("jam.reverse") }}
+          </van-button>
+          <van-button
+            type="danger"
+            size="small"
+            class="action-btn"
+            @click="handleExtract(jam.no, 0)"
+          >
+            {{ $t("jam.stop") }}
+          </van-button>
+        </div>
+      </div>
+    </div>
+  </div>
+</template>
+
+<script>
+import sHeader from "@/components/SimpleHeader";
+import { selectProducts, smokeJam } from "@/service/device/index";
+import { useRoute } from "vue-router";
+import { ref } from "vue";
+import { useI18n } from "vue-i18n";
+import { onMounted } from "vue";
+import { showConfirmDialog, showFailToast, showSuccessToast } from "vant";
+
+export default {
+  components: { sHeader },
+  setup() {
+    const { t } = useI18n();
+    const route = useRoute();
+    const deviceId = ref(route.query.deviceId);
+    const deviceName = ref(route.query.name);
+    const jams = ref([]);
+
+    // 获取商品列表
+    const getList = () => {
+      selectProducts({
+        equipmentId: deviceId.value,
+      }).then((res) => {
+        const { data } = res.data;
+        if (data) {
+          data.forEach((item) => {
+            if (item.no.includes("J")) {
+              jams.value.push(item);
+            }
+          });
+        }
+      });
+    };
+
+    // 商品图片路径处理
+    const showSugerPhoto = (row) => {
+      let imgId = row.no;
+      if (imgId) {
+        return require(`../../../assets/order/spunSugar/goods/${imgId}.png`);
+      }
+      return imgId;
+    };
+
+    // 果酱抽取
+    const handleExtract = (no, status) => {
+      showConfirmDialog({
+        title: t("device.operationConfirmation"),
+        message: t("device.pleaseConfirmAgainWhetherToOperate"),
+      })
+        .then(async () => {
+          const { data } = await smokeJam({
+            equipmentId: deviceId.value,
+            productNo: no,
+            status: status,
+          });
+          if (data.code === "00000") {
+            showSuccessToast(t("device.Succeed"));
+          } else {
+            showFailToast(t("device.Failed"));
+          }
+        })
+        .catch(() => {
+          // on cancel
+          showFailToast(t("device.Failed"));
+        });
+    };
+
+    onMounted(async () => {
+      getList();
+    });
+
+    return {
+      deviceName,
+      showSugerPhoto,
+      handleExtract,
+      jams,
+    };
+  },
+};
+</script>
+
+<style lang="less" scoped>
+@primary-color: #4dc294;
+@warning-color: #ff976a;
+@danger-color: #ee0a24;
+.payment-settings {
+  --payment-bg: #ffffff;
+  --border-color: #ebedf0;
+  --active-color: #4d6add;
+  --text-primary: #323233;
+  --text-secondary: #969799;
+
+  background: #f7f8fa;
+  min-height: 100vh;
+
+  .device-header {
+    display: flex;
+    align-items: center;
+    padding: 12px 15px;
+    background: #fff;
+    margin: 12px 16px;
+    border-radius: 8px;
+    box-shadow: 0 2px 8px rgba(0, 0, 0, 0.05);
+
+    .vertical-indicator {
+      width: 4px;
+      height: 15px;
+      background: var(--active-color, #4d6add);
+      border-radius: 2px;
+      margin-right: 10px;
+    }
+
+    .device-name {
+      margin: 0;
+      font-size: 15px;
+      color: #404d74;
+      font-weight: 550;
+
+      // 长名称处理
+      overflow: hidden;
+      text-overflow: ellipsis;
+      white-space: nowrap;
+      max-width: 70vw;
+    }
+  }
+
+  .settings-card {
+    padding: 16px;
+    margin: 12px 16px;
+    background: #fff;
+    border-radius: 12px;
+    box-shadow: 0 2px 12px rgba(0, 0, 0, 0.05);
+  }
+
+  .jam-item {
+    padding: 16px 0;
+    border-bottom: 1px solid #f5f5f5;
+
+    &:last-child {
+      border-bottom: none;
+    }
+  }
+
+  .jam-main-row {
+    display: flex;
+    align-items: center;
+    gap: 16px;
+    margin-bottom: 12px;
+  }
+
+  .jam-image {
+    border: 1px solid #eee;
+    flex-shrink: 0;
+  }
+
+  .jam-title {
+    font-size: 16px;
+    color: #333;
+    word-break: break-word;
+    line-height: 1.4;
+  }
+
+  .jam-actions {
+    display: flex;
+    justify-content: center;
+    gap: 12px;
+    flex-wrap: wrap;
+
+    .action-btn {
+      min-width: 80px;
+      border-radius: 20px;
+      font-size: 13px;
+      padding: 8px 16px;
+
+      &--primary {
+        background: @primary-color;
+        border-color: @primary-color;
+      }
+
+      &--warning {
+        background: @warning-color;
+        border-color: @warning-color;
+      }
+
+      &--danger {
+        background: @danger-color;
+        border-color: @danger-color;
+      }
+    }
+  }
+
+  @media (max-width: 480px) {
+    .jam-main-row {
+      gap: 12px;
+    }
+
+    .jam-image {
+      width: 50px;
+      height: 50px;
+    }
+
+    .jam-title {
+      font-size: 14px;
+    }
+
+    .jam-actions {
+      gap: 8px;
+
+      .action-btn {
+        min-width: 70px;
+        font-size: 12px;
+        padding: 6px 12px;
+      }
+    }
+  }
+}
+</style>

+ 16 - 8
src/views/device/showGoods/index.vue

@@ -65,7 +65,7 @@
 
 <script>
 // 导入接口
-import { selectProducts, updateProductsShow } from "@/service/device/index";
+import { selectProducts, updateProductsShow, newUpdateProductsShow } from "@/service/device/index";
 import sHeader from "@/components/SimpleHeader";
 import { ref, reactive } from "@vue/reactivity";
 import { onMounted } from "@vue/runtime-core";
@@ -95,6 +95,7 @@ export default {
     const switchStates = ref([]);
     // 设备名称
     const equipmentName = ref("");
+    const machineType = ref(route.query.machineType || "");
 
     // 刚进页面
     onMounted(() => {
@@ -117,14 +118,20 @@ export default {
           if (data.length > 0) {
             // 是否修改状态
             data.forEach((item) => {
-              if (item.showType == null || item.showType == 0) {
-                switchStates.value.push(true);
-              } else {
-                switchStates.value.push(false);
+              if (item.no != "I01") {
+                if (item.showType == null || item.showType == 0) {
+                  switchStates.value.push(true);
+                } else {
+                  switchStates.value.push(false);
+                }
               }
             });
           }
-          tableData.value = data;
+          data.forEach((item) => {
+            if (item.no != "I01") {
+              tableData.value.push(item);
+            }
+          });
         }
       });
     };
@@ -151,12 +158,13 @@ export default {
         console.log(tableData.value);
         var products = tableData.value;
         var list = JSON.stringify(products);
-        updateProductsShow({
+        machineType.value === '2'? newUpdateProductsShow({
+          productList: list,
+        }) : updateProductsShow({
           productList: list,
         })
           .then((res) => {
             console.log(res.data.message);
-            // Toast();
             showDialog({
               message: t("device.modificationSucceeded"),
             }).then(() => {