Sfoglia il codice sorgente

fix:"优化忘记修改密码功能"

soobin 1 settimana fa
parent
commit
d6bb804f2a
42 ha cambiato i file con 965 aggiunte e 2017 eliminazioni
  1. 1 1
      package.json
  2. 2 2
      public/version.json
  3. 5 1
      src/assets/language/en.json
  4. 5 1
      src/assets/language/es.json
  5. 5 1
      src/assets/language/fr.json
  6. 5 1
      src/assets/language/ja.json
  7. 5 1
      src/assets/language/pt.json
  8. 5 1
      src/assets/language/ru.json
  9. 5 1
      src/assets/language/uk.json
  10. 5 1
      src/assets/language/zh.json
  11. 6 13
      src/router/index.js
  12. 10 8
      src/service/device/index.js
  13. 2 3
      src/service/forgetPassword.js
  14. 308 38
      src/views/changePassword.vue
  15. 148 32
      src/views/device/customLogo.vue
  16. 73 17
      src/views/device/deviceOper.vue
  17. 45 16
      src/views/device/devicePassword/index.vue
  18. 37 11
      src/views/device/deviceSet.vue
  19. 16 14
      src/views/device/doSugar.vue
  20. 8 12
      src/views/device/goodsMan/index.vue
  21. 1 1
      src/views/device/index.vue
  22. 13 13
      src/views/device/jam/index.vue
  23. 14 16
      src/views/device/maintenance/index.vue
  24. 7 15
      src/views/device/modifyPrice/index.vue
  25. 8 9
      src/views/device/modulation.vue
  26. 7 9
      src/views/device/openDoor.vue
  27. 9 12
      src/views/device/paramsSet/index.vue
  28. 8 10
      src/views/device/paramsSet/paramsSetInfo.vue
  29. 38 34
      src/views/device/payInfo/index.vue
  30. 72 71
      src/views/device/payment/index.vue
  31. 6 8
      src/views/device/returnCoin/index.vue
  32. 0 142
      src/views/device/saveProportion/index.less
  33. 0 210
      src/views/device/saveProportion/index.vue
  34. 6 9
      src/views/device/showGoods/index.vue
  35. 0 8
      src/views/device/tagSet/index.vue
  36. 15 15
      src/views/device/tax/index.vue
  37. 9 9
      src/views/device/toDaySugarList.vue
  38. 13 16
      src/views/device/viewLogs/index.vue
  39. 17 7
      src/views/distributionSet/detail.vue
  40. 5 55
      src/views/forgetPassword.vue
  41. 21 12
      src/views/purse/index.vue
  42. 0 1161
      src/views/settlement/index.vue

+ 1 - 1
package.json

@@ -1,6 +1,6 @@
 {
   "name": "shenze-vue3-app",
-  "version": "1.5.807",
+  "version": "1.5.813",
   "private": true,
   "scripts": {
     "start": "vue-cli-service serve",

+ 2 - 2
public/version.json

@@ -1,5 +1,5 @@
 {
-  "version": "1.5.807",
-  "timestamp": "2025-08-07T15:34:19.125",
+  "version": "1.5.813",
+  "timestamp": "2025-08-13T08:56:02.372",
   "commitHash": "dev-build"
 }

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

@@ -1397,7 +1397,11 @@
     "passwordCheckRequired": "Required",
     "registerButton": "Submit",
     "inconsistentPasswords": "Mismatch",
-    "pwdEditSucess": "Password Changed"
+    "pwdEditSucess": "Password changed",
+    "passwordMismatch": "Passwords don't match",
+    "weak": "Weak",
+    "medium": "Medium",
+    "strong": "Strong"
   },
   "forgetPassword": {
     "header": "Forgot Password",

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

@@ -1396,7 +1396,11 @@
         "passwordCheckRequired": "Requerido",
         "registerButton": "Guardar",
         "inconsistentPasswords": "Las contraseñas no coinciden",
-        "pwdEditSucess": "Contraseña actualizada"
+        "pwdEditSucess": "Contraseña actualizada",
+        "passwordMismatch": "Las contraseñas no coinciden",
+        "weak": "Débil",
+        "medium": "Media",
+        "strong": "Fuerte"
     },
     "forgetPassword": {
         "header": "Recuperar contraseña",

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

@@ -1427,7 +1427,11 @@
         "passwordCheckRequired": "Confirmation requise",
         "registerButton": "Soumettre",
         "inconsistentPasswords": "Mots de passe différents",
-        "pwdEditSucess": "Mot de passe modifié"
+        "pwdEditSucess": "Mot de passe modifié",
+        "passwordMismatch": "Les mots de passe ne correspondent pas",
+        "weak": "Faible",
+        "medium": "Moyen",
+        "strong": "Fort"
     },
     "forgetPassword": {
         "header": "Mot de passe oublié",

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

@@ -1390,7 +1390,11 @@
         "passwordCheckRequired": "確認のためもう一度パスワードを入力してください",
         "registerButton": "登録",
         "inconsistentPasswords": "二回入力したパスワードが一致しません、正しいパスワードを確認してください",
-        "pwdEditSucess": "パスワード変更に成功"
+        "pwdEditSucess": "パスワード変更済み",
+        "passwordMismatch": "パスワードが一致しません",
+        "weak": "弱い",
+        "medium": "中",
+        "strong": "強い"
     },
     "forgetPassword": {
         "header": "パスワードを忘れた場合",

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

@@ -1396,7 +1396,11 @@
         "passwordCheckRequired": "Confirme a senha",
         "registerButton": "Salvar",
         "inconsistentPasswords": "Senhas não coincidem",
-        "pwdEditSucess": "Senha atualizada"
+        "pwdEditSucess": "Senha alterada",
+        "passwordMismatch": "As senhas não correspondem",
+        "weak": "Fraca",
+        "medium": "Média",
+        "strong": "Forte"
     },
     "forgetPassword": {
         "header": "Recuperar Senha",

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

@@ -1427,7 +1427,11 @@
         "passwordCheckRequired": "Обязательное поле",
         "registerButton": "Сохранить",
         "inconsistentPasswords": "Пароли не совпадают",
-        "pwdEditSucess": "Пароль изменён"
+        "pwdEditSucess": "Пароль изменён",
+        "passwordMismatch": "Пароли не совпадают",
+        "weak": "Слабый",
+        "medium": "Средний",
+        "strong": "Надёжный"
     },
     "forgetPassword": {
         "header": "Восстановление пароля",

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

@@ -1397,7 +1397,11 @@
         "passwordCheckRequired": "Підтвердьте пароль",
         "registerButton": "Зберегти",
         "inconsistentPasswords": "Паролі не збігаються",
-        "pwdEditSucess": "Пароль змінено"
+        "pwdEditSucess": "Пароль змінено",
+        "passwordMismatch": "Паролі не збігаються",
+        "weak": "Слабкий",
+        "medium": "Середній",
+        "strong": "Сильний"
     },
     "forgetPassword": {
         "header": "Відновлення пароля",

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

@@ -1406,7 +1406,11 @@
     "passwordCheckRequired": "请再次输入密码进行确认",
     "registerButton": "提交",
     "inconsistentPasswords": "两次密码不一致,请确认密码正确",
-    "pwdEditSucess": "密码修改成功"
+    "pwdEditSucess": "密码修改成功",
+    "passwordMismatch": "两次输入的密码不一致",
+    "weak": "弱",
+    "medium": "中",
+    "strong": "强"
   },
   "forgetPassword": {
     "header": "忘记密码",

+ 6 - 13
src/router/index.js

@@ -182,12 +182,12 @@ const router = createRouter({
       meta: { index: 1 },
     },
     // 添加分销人
-    {
-      path: "/saveProportion",
-      name: "saveProportion",
-      component: () => import("@/views/device/saveProportion/index.vue"),
-      meta: { index: 1 },
-    },
+    // {
+    //   path: "/saveProportion",
+    //   name: "saveProportion",
+    //   component: () => import("@/views/device/saveProportion/index.vue"),
+    //   meta: { index: 1 },
+    // },
     // 设备充值
     {
       path: "/recharge",
@@ -211,13 +211,6 @@ const router = createRouter({
     },
     // 结算账号
     {
-      path: "/settlement",
-      name: "settlement",
-      component: () => import("@/views/settlement/index"),
-      meta: { index: 1 },
-    },
-    // 结算账号
-    {
       path: "/joinPayBind",
       name: "joinPayBind",
       component: () => import("@/views/bindBankCard/joinPayBind.vue"),

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

@@ -31,7 +31,7 @@ export function getGoodsNumber(params) {
 
 // 修改设备详情
 export function updateDevice(params) {
-  return axios.post(`/SZWL-SERVER/tEquipment/update`, params);
+  return axios.post(`/SZWL-SERVER/tEquipment/updateInfo`, params);
 }
 
 // 消除报警
@@ -252,7 +252,7 @@ export function Api_getDiscCodeStatus(params) {
 
 // 修改睡眠描述
 export function changeSleepDesc(params) {
-  return axios.get(`/SZWL-SERVER/tEquipmentDesc/updateSleepDesc`, { params });
+  return axios.post(`/SZWL-SERVER/tEquipment/sleepDesc`, params);
 }
 
 // 删除设备
@@ -281,11 +281,8 @@ export function updateDevicePassword(params) {
 }
 
 // 修改Logo
-export function newCustomLogo(params) {
-  return axios.get(
-    `/SZWL-SERVER/tLogo/newCustomLogo?${stringToUrl(params)}`,
-    params
-  );
+export function pushLogo(params) {
+  return axios.post(`/SZWL-SERVER/tEquipment/pushLogo`, params);
 }
 // 日志下载
 export function downloadLog(params) {
@@ -343,7 +340,7 @@ export function queryLog(params) {
 
 // 远程锁机
 export function updateLockStatus(params) {
-  return axios.get(`/SZWL-SERVER/tEquipment/updateLockStatus`, { params });
+  return axios.post(`/SZWL-SERVER/tEquipment/block`, params);
 }
 
 // 重启触摸屏
@@ -427,3 +424,8 @@ export function updateProductInfo(params) {
 export function batchUpdatePrice(params) {
   return axios.post(`/SZWL-SERVER/tEquipment/batchUpdatePrice`, params);
 }
+
+// 推送商品
+export function pushGoods(params) {
+  return axios.post(`/SZWL-SERVER/tEquipment/pushGoods`, params);
+}

+ 2 - 3
src/service/forgetPassword.js

@@ -1,12 +1,11 @@
 import axios from '../utils/axios'
-import { stringToUrl } from '@/common/js/utils';
 
 // 发送验证码
 export function sentForgetCode(params) {
-  return axios.post(`/SZWL-SERVER/tMessageCode/sentForgetCode?${stringToUrl(params)}`, params);
+  return axios.post(`/SZWL-SERVER/tAdmin/sentForgetCode`, params);
 }
 
 // 注册
 export function checkForgetCode(params) {
-  return axios.post(`/SZWL-SERVER/tMessageCode/checkForgetCode?ifForeign=${params.ifForeign}&phoneOrEmail=${params.phoneOrEmail}&code=${params.code}`, params);
+  return axios.post(`/SZWL-SERVER/tAdmin/checkForgetCode`, params);
 }

+ 308 - 38
src/views/changePassword.vue

@@ -1,37 +1,90 @@
 <template>
-  <!-- 修改密码 -->
-  <div class="changePassword flex-col">
-    <s-header :name="$t('changePassword.changePassword')" :noback="false"></s-header>
-    <div class="changePasswordFormBox">
-      <van-form @submit="changePasswordSubmit">
-        <van-field v-model="password" name="password" type="password" :label="$t('changePassword.passwordLabel')"
+  <div class="change-password-page">
+    <!-- 自定义头部 -->
+    <s-header
+      :name="$t('changePassword.changePassword')"
+      :noback="false"
+      class="password-header"
+    />
+
+    <!-- 密码修改表单 -->
+    <div class="password-form-container">
+      <van-form @submit="changePasswordSubmit" class="password-form">
+        <!-- 新密码输入 -->
+        <van-field
+          v-model="password"
+          name="password"
+          type="password"
+          clearable
+          center
+          :label="$t('changePassword.passwordLabel')"
           :placeholder="$t('changePassword.passwordPlaceholder')"
-          :rules="[
-            { required: true, message: $t('changePassword.passwordRequired') },
-            { pattern: /^(?=.*[a-zA-Z])(?=.*\d).{10,}$/, message: $t('register.passwordPattern') }
-          ]" />
-        <br>
-        <van-field v-model="passwordCheck" name="passwordCheck" type="password"
-          :label="$t('changePassword.passwordCheckLabel')" :placeholder="$t('changePassword.passwordCheckPlaceholder')"
-          :rules="[{ required: true, message: $t('changePassword.passwordCheckRequired') }]" />
-        <van-button round type="primary" class="register" native-type="submit">{{ $t('changePassword.registerButton') }}
-        </van-button>
+          :rules="passwordRules"
+        >
+          <template #left-icon>
+            <van-icon name="lock" class="field-icon" />
+          </template>
+        </van-field>
+
+        <!-- 密码强度指示器 -->
+        <div class="password-strength">
+          <div
+            class="strength-bar"
+            :class="{
+              weak: passwordStrength === 1,
+              medium: passwordStrength === 2,
+              strong: passwordStrength === 3,
+            }"
+          ></div>
+          <div class="strength-text">
+            {{ passwordStrengthText }}
+          </div>
+        </div>
+
+        <!-- 确认密码输入 -->
+        <van-field
+          v-model="passwordCheck"
+          name="passwordCheck"
+          type="password"
+          clearable
+          center
+          :label="$t('changePassword.passwordCheckLabel')"
+          :placeholder="$t('changePassword.passwordCheckPlaceholder')"
+          :rules="passwordCheckRules"
+        >
+          <template #left-icon>
+            <van-icon name="lock" class="field-icon" />
+          </template>
+        </van-field>
+
+        <!-- 提交按钮 -->
+        <div class="form-actions">
+          <van-button
+            round
+            block
+            type="primary"
+            native-type="submit"
+            class="submit-button"
+            :disabled="!isFormValid"
+          >
+            {{ $t("changePassword.registerButton") }}
+          </van-button>
+        </div>
       </van-form>
     </div>
   </div>
 </template>
 
 <script>
-import md5 from 'js-md5';
-import { ref } from 'vue';
-import { showToast, showFailToast } from 'vant';
+import md5 from "js-md5";
+import { ref } from "vue";
+import { showToast, showFailToast } from "vant";
 import sHeader from "@/components/SimpleHeader";
 import { useRouter, useRoute } from "vue-router";
-// import { useRouter } from "vue-router";
-import { updatePassword } from '@/service/changePassword';
-import { useI18n } from 'vue-i18n';
+import { updatePassword } from "@/service/changePassword";
+import { useI18n } from "vue-i18n";
 import { getLoginUser } from "@/common/js/utils";
-import { styleUrl } from '../common/js/utils';
+import { computed } from "vue";
 
 export default {
   setup() {
@@ -40,32 +93,87 @@ export default {
     const router = useRouter();
     const route = useRoute();
     const user = getLoginUser();
-    const password = ref('');
-    const passwordCheck = ref('');
+    const password = ref("");
+    const passwordCheck = ref("");
     // 加载样式
-    styleUrl('changePassword');
     // 验证-表单
     const changePasswordSubmit = async () => {
-      if (password.value !== passwordCheck.value) {
-        showFailToast(t('changePassword.inconsistentPasswords'));
-        return false;
-      }
       const { data } = await updatePassword({
         username: route.query.name || user.username,
-        // username: user.username,
-        password: md5(password.value)
+        password: md5(password.value),
       });
-      if (data.code === '00000') {
-        showToast(t('changePassword.pwdEditSucess'));
-        router.push({ path: '/login' });
+      if (data.code === "00000") {
+        showToast(t("changePassword.pwdEditSucess"));
+        router.push({ path: "/login" });
       } else {
         showFailToast(data.message);
       }
     };
+
+    // 密码强度计算
+    const passwordStrength = computed(() => {
+      if (!password.value) return 0;
+
+      let strength = 0;
+
+      // 长度得分
+      if (password.value.length >= 10) strength++;
+
+      // 复杂度得分
+      const hasLetter = /[a-zA-Z]/.test(password.value);
+      const hasNumber = /\d/.test(password.value);
+      const hasSpecialChar = /[^a-zA-Z0-9]/.test(password.value);
+
+      if (hasLetter && hasNumber) strength++;
+      if (hasSpecialChar) strength++;
+
+      return Math.min(strength, 3);
+    });
+
+    // 密码强度文本
+    const passwordStrengthText = computed(() => {
+      const texts = [
+        "",
+        t("changePassword.weak"),
+        t("changePassword.medium"),
+        t("changePassword.strong"),
+      ];
+      return texts[passwordStrength.value];
+    });
+
+    // 表单验证规则
+    const passwordRules = [
+      { required: true, message: t("changePassword.passwordRequired") },
+      {
+        pattern: /^(?=.*[a-zA-Z])(?=.*\d).{10,}$/,
+        message: t("register.passwordPattern"),
+      },
+    ];
+
+    const passwordCheckRules = [
+      { required: true, message: t('changePassword.passwordCheckRequired') },
+      {
+        validator: (value) => value === password.value,
+        message: t('changePassword.passwordMismatch')
+      }
+    ];
+
+    // 表单是否有效
+    const isFormValid = computed(() => {
+      return password.value && passwordCheck.value && 
+             password.value === passwordCheck.value &&
+             passwordRules[1].pattern.test(password.value);
+    });
+
     return {
       password,
       passwordCheck,
-      changePasswordSubmit
+      changePasswordSubmit,
+      passwordStrength,
+      passwordStrengthText,
+      passwordRules,
+      passwordCheckRules,
+      isFormValid,
     };
   },
   components: { sHeader },
@@ -73,5 +181,167 @@ export default {
 </script>
 
 <style lang="less" scoped>
-@import "../common/style/mixin";
-</style>
+@primary-color: #4d6add;
+@text-dark: #333;
+@text-light: #666;
+@border-color: #e4e7ec;
+@weak-color: #ff4444;
+@medium-color: #ff9800;
+@strong-color: #4caf50;
+
+.change-password-page {
+  min-height: 100vh;
+  background-color: #f5f7fa;
+  padding-bottom: 20px;
+}
+
+.password-header {
+  box-shadow: 0 2px 8px rgba(0, 0, 0, 0.05);
+}
+
+.password-form-container {
+  padding: 20px;
+}
+
+.password-form {
+  background-color: #fff;
+  border-radius: 12px;
+  padding: 20px;
+  box-shadow: 0 4px 12px rgba(0, 0, 0, 0.03);
+
+  .van-field {
+    margin-bottom: 15px;
+    background-color: #f9fbfe;
+    border-radius: 8px;
+    padding: 12px 16px;
+
+    :deep(.van-field__label) {
+      font-weight: 500;
+      color: @text-dark;
+    }
+
+    .field-icon {
+      color: @primary-color;
+      font-size: 18px;
+      margin-right: 10px;
+    }
+  }
+}
+
+.password-strength {
+  margin-bottom: 20px;
+  padding: 0 5px;
+
+  .strength-bar {
+    height: 5px;
+    border-radius: 3px;
+    background-color: #e0e0e0;
+    margin-bottom: 5px;
+    position: relative;
+    overflow: hidden;
+
+    &::after {
+      content: "";
+      position: absolute;
+      left: 0;
+      top: 0;
+      height: 100%;
+      transition: width 0.3s ease;
+    }
+
+    &.weak::after {
+      width: 33%;
+      background-color: @weak-color;
+    }
+
+    &.medium::after {
+      width: 66%;
+      background-color: @medium-color;
+    }
+
+    &.strong::after {
+      width: 100%;
+      background-color: @strong-color;
+    }
+  }
+
+  .strength-text {
+    font-size: 12px;
+    text-align: right;
+    color: @text-light;
+
+    .weak & {
+      color: @weak-color;
+    }
+    .medium & {
+      color: @medium-color;
+    }
+    .strong & {
+      color: @strong-color;
+    }
+  }
+}
+
+.form-actions {
+  margin-top: 25px;
+
+  .submit-button {
+    height: 44px;
+    background: linear-gradient(to right, #36d1dc, #5b86e5);
+    border: none;
+    font-weight: 500;
+
+    &:disabled {
+      background: #c4c4c4;
+      opacity: 0.7;
+    }
+  }
+}
+
+.password-requirements {
+  background-color: #f0f7ff;
+  border-radius: 8px;
+  padding: 15px;
+  margin-top: 25px;
+
+  .requirements-title {
+    display: flex;
+    align-items: center;
+    font-size: 14px;
+    font-weight: 500;
+    color: @primary-color;
+    margin-bottom: 10px;
+
+    .info-icon {
+      margin-right: 8px;
+      font-size: 16px;
+    }
+  }
+
+  .requirements-list {
+    padding-left: 24px;
+    margin: 0;
+
+    li {
+      font-size: 13px;
+      color: @text-light;
+      line-height: 1.6;
+      margin-bottom: 8px;
+
+      &:last-child {
+        margin-bottom: 0;
+      }
+    }
+  }
+}
+
+@media (max-width: 480px) {
+  .password-form-container {
+    padding: 15px;
+  }
+
+  .password-form {
+    padding: 15px;
+  }
+}
+</style>

+ 148 - 32
src/views/device/customLogo.vue

@@ -1,80 +1,196 @@
 <template>
-  <!--  修改logo  -->
-  <div class="viewLogsPage flex-col">
-    <s-header :name="$t('device.customLogo.customLogo')" :noback="false"></s-header>
-    <div class="block2 flex-row justify-between">
-      <div class="block3 flex-col"></div>
-      <span class="info2">{{ $t('device.equipmentName') }}:{{ deviceDetail ? deviceDetail.name : '' }}</span>
+  <div class="custom-logo-page">
+    <!-- 自定义头部 -->
+    <s-header :name="$t('device.customLogo.customLogo')" :noback="false" />
+
+    <!-- 设备信息 -->
+    <div class="device-header">
+      <van-icon name="desktop-o" class="icon" />
+      <h3 class="device-name">
+        {{ equipmentName }}
+      </h3>
     </div>
-    <div class="wrap1 flex-col o-pt-15">
-      <van-field v-model="logoNumber" type="digit" :label="$t('device.customLogo.logoLabel')"
-        :placeholder="$t('device.customLogo.logoPlaceholder')"
-        :rules="[{ required: true, message: $t('device.customLogo.logoRequired') }]"></van-field>
 
-      <van-button round :disabled="logoNumber === ''" type="primary" class="volumeChangeButton" @click="submitChange">{{
-        $t('device.customLogo.registerButton') }}</van-button>
+    <!-- 主内容区 -->
+    <div class="content-container">
+      <van-form @submit="submitChange">
+        <!-- 输入框 -->
+        <van-field
+          v-model="logoNumber"
+          type="digit"
+          clearable
+          center
+          :label="$t('device.customLogo.logoLabel')"
+          :placeholder="$t('device.customLogo.logoPlaceholder')"
+        />
+
+        <!-- 操作按钮 -->
+        <div class="form-actions">
+          <van-button
+            round
+            block
+            type="primary"
+            native-type="submit"
+            class="submit-button"
+            :disabled="logoNumber === ''"
+          >
+            {{ $t("device.customLogo.registerButton") }}
+          </van-button>
+        </div>
+      </van-form>
     </div>
   </div>
 </template>
 
 <script>
-import { defineComponent, onMounted, ref } from 'vue';
+import { defineComponent, onMounted, ref } from "vue";
 import sHeader from "@/components/SimpleHeader.vue";
-import { newCustomLogo, getDeviceDetal } from "@/service/device";
+import { pushLogo, getDeviceDetal } from "@/service/device";
 import { showFailToast, showSuccessToast } from "vant";
-import { useRoute } from "vue-router";
+import { useRoute, useRouter } from "vue-router";
 import { useI18n } from "vue-i18n";
-import { styleUrl } from "../../common/js/utils";
 
 export default defineComponent({
   setup() {
     const { t } = useI18n();
     const route = useRoute();
-    const logoNumber = ref('');
+    const router = useRouter();
+    const logoNumber = ref("");
     const deviceId = route.query.deviceId;
+    const equipmentName = ref(route.query.name);
     const deviceDetail = ref(null);
 
-
     // 初始化页面获取列表
     onMounted(async () => {
       // 加载样式
-      styleUrl('viewLogs');
       await getDeviceDetailFun();
-      console.log(deviceDetail.value.name);
     });
 
     const getDeviceDetailFun = async () => {
       const { data } = await getDeviceDetal({ id: deviceId });
-      if (data.code === '00000') {
+      if (data.code === "00000") {
         deviceDetail.value = data.data;
-      } else { showFailToast(data.message); }
-    }
+      } else {
+        showFailToast(data.message);
+      }
+    };
 
     // 定制Logo
     const submitChange = async () => {
-      // console.log('提交:${logoNumber.value}', deviceId, logoNumber.value);
-      const { data } = await newCustomLogo({
+      const { data } = await pushLogo({
         id: deviceId,
-        logoNumber: logoNumber.value
-      })
+        logoNumber: logoNumber.value,
+      });
       if (data.code === "00000") {
-        showSuccessToast(t('device.modificationSucceeded'));
+        showSuccessToast(t("device.modificationSucceeded"));
+        setTimeout(() => {
+          router.go(-1);
+        }, 1500);
       } else {
         showFailToast(data.message);
       }
-    }
+    };
 
     return {
       deviceDetail,
       logoNumber,
       submitChange,
-    }
+      equipmentName,
+    };
   },
   components: { sHeader },
-
 });
 </script>
 
 <style lang="less" scoped>
-@import "../../common/style/common";
+@primary-color: #4d6add;
+@text-dark: #333;
+@text-light: #666;
+@border-color: #e4e7ec;
+
+.custom-logo-page {
+  min-height: 100vh;
+  background-color: #f5f7fa;
+  padding-bottom: 20px;
+}
+
+// 设备信息样式
+.device-info {
+  background-color: #fff;
+  padding: 15px;
+  margin-top: 1px;
+  display: flex;
+  align-items: center;
+  box-shadow: 0 2px 8px rgba(0, 0, 0, 0.03);
+
+  .icon {
+    font-size: 18px;
+    color: @primary-color;
+    margin-right: 10px;
+  }
+
+  .device-name {
+    font-size: 16px;
+    font-weight: 500;
+    color: @text-dark;
+  }
+}
+
+.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);
+
+  .icon {
+    font-size: 18px;
+    color: @primary-color;
+    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;
+  }
+}
+
+// 主内容区样式
+.content-container {
+  background-color: #fff;
+  border-radius: 12px;
+  margin: 15px;
+  overflow: hidden;
+  box-shadow: 0 4px 12px rgba(0, 0, 0, 0.03);
+  padding: 20px;
+}
+
+// 表单样式
+.van-form {
+  .form-actions {
+    margin-top: 25px;
+  }
+
+  .submit-button {
+    height: 44px;
+    background: linear-gradient(to right, #36d1dc, #5b86e5);
+    border: none;
+    font-weight: 500;
+
+    &:disabled {
+      background: #c4c4c4;
+      opacity: 0.7;
+    }
+  }
+}
 </style>

+ 73 - 17
src/views/device/deviceOper.vue

@@ -691,7 +691,12 @@ export default {
     const modifyPriceClk = () => {
       router.push({
         path: "modifyPrice",
-        query: { deviceId: device.value.id, name: device.value.name },
+        query: {
+          deviceId: device.value.id,
+          name: device.value.name
+            ? device.value.name
+            : device.value.clientId.slice(-6),
+        },
       });
     };
     // 点击支付方式
@@ -700,8 +705,10 @@ export default {
         path: "payment",
         query: {
           deviceId: device.value.id,
-          name: device.value.name,
           payment: device.value.paymentType,
+          name: device.value.name
+            ? device.value.name
+            : device.value.clientId.slice(-6),
         },
       });
     };
@@ -711,8 +718,10 @@ export default {
         path: "showGoods",
         query: {
           deviceId: device.value.id,
-          name: device.value.name,
           machineType: device.value.machineType,
+          name: device.value.name
+            ? device.value.name
+            : device.value.clientId.slice(-6),
         },
       });
     };
@@ -723,10 +732,12 @@ export default {
         path: "diyFlower",
         query: {
           deviceId: device.value.id,
-          name: device.value.name,
           diyFlowerStatus: device.value.diyFlowerStatus,
           flower: device.value.flowers,
           clientId: device.value.clientId,
+          name: device.value.name
+            ? device.value.name
+            : device.value.clientId.slice(-6),
         },
       });
     };
@@ -737,9 +748,11 @@ export default {
         path: "alramClean",
         query: {
           deviceId: device.value.id,
-          name: device.value.name,
           clientId: device.value.clientId,
           cleanFunction: device.value.cleanFunction,
+          name: device.value.name
+            ? device.value.name
+            : device.value.clientId.slice(-6),
         },
       });
     };
@@ -750,8 +763,10 @@ export default {
         path: "returnCoin",
         query: {
           deviceId: device.value.id,
-          name: device.value.name,
           clientId: device.value.clientId,
+          name: device.value.name
+            ? device.value.name
+            : device.value.clientId.slice(-6),
         },
       });
     };
@@ -762,8 +777,10 @@ export default {
         path: "tax",
         query: {
           deviceId: device.value.id,
-          name: device.value.name,
           clientId: device.value.clientId,
+          name: device.value.name
+            ? device.value.name
+            : device.value.clientId.slice(-6),
         },
       });
     };
@@ -773,8 +790,10 @@ export default {
         path: "jam",
         query: {
           deviceId: device.value.id,
-          name: device.value.name,
           clientId: device.value.clientId,
+          name: device.value.name
+            ? device.value.name
+            : device.value.clientId.slice(-6),
         },
       });
     };
@@ -784,8 +803,10 @@ export default {
         path: "maintenance",
         query: {
           deviceId: device.value.id,
-          name: device.value.name,
           clientId: device.value.clientId,
+          name: device.value.name
+            ? device.value.name
+            : device.value.clientId.slice(-6),
         },
       });
     };
@@ -795,8 +816,10 @@ export default {
         path: "payInfo",
         query: {
           deviceId: device.value.id,
-          name: device.value.name,
           clientId: device.value.clientId,
+          name: device.value.name
+            ? device.value.name
+            : device.value.clientId.slice(-6),
         },
       });
     };
@@ -804,7 +827,12 @@ export default {
     const goodsManClk = () => {
       router.push({
         path: "goodsMan",
-        query: { deviceId: device.value.id, name: device.value.name },
+        query: {
+          deviceId: device.value.id,
+          name: device.value.name
+            ? device.value.name
+            : device.value.clientId.slice(-6),
+        },
       });
     };
     const { t } = useI18n();
@@ -889,6 +917,9 @@ export default {
         query: {
           deviceId: device.value.id,
           machineType: device.value.machineType,
+          name: device.value.name
+            ? device.value.name
+            : device.value.clientId.slice(-6),
         },
       });
     };
@@ -896,18 +927,36 @@ export default {
     const viewLogs = () => {
       router.push({
         path: "viewLogs",
-        query: { deviceId: device.value.id, name: device.value.name },
+        query: {
+          deviceId: device.value.id,
+          name: device.value.name
+            ? device.value.name
+            : device.value.clientId.slice(-6),
+        },
       });
     };
     // 定制logo
     const customLogo = () => {
-      router.push({ path: "customLogo", query: { deviceId: device.value.id } });
+      router.push({
+        path: "customLogo",
+        query: {
+          deviceId: device.value.id,
+          name: device.value.name
+            ? device.value.name
+            : device.value.clientId.slice(-6),
+        },
+      });
     };
     // 音量调节
     const modulation = () => {
       router.push({
         path: "modulation",
-        query: { deviceId: device.value.id, name: device.value.name },
+        query: {
+          deviceId: device.value.id,
+          name: device.value.name
+            ? device.value.name
+            : device.value.clientId.slice(-6),
+        },
       });
     };
     // 远程做糖
@@ -917,6 +966,9 @@ export default {
         query: {
           deviceId: device.value.id,
           machineType: device.value.machineType,
+          name: device.value.name
+            ? device.value.name
+            : device.value.clientId.slice(-6),
         },
       });
     };
@@ -935,7 +987,9 @@ export default {
         query: {
           deviceId: device.value.id,
           machineType: device.value.machineType,
-          name: device.value.name,
+          name: device.value.name
+            ? device.value.name
+            : device.value.clientId.slice(-6),
         },
       });
     };
@@ -958,8 +1012,10 @@ export default {
         path: "devicePassword",
         query: {
           deviceId: device.value.id,
-          name: device.value.name,
           equimentType: device.value.equimentType,
+          name: device.value.name
+            ? device.value.name
+            : device.value.clientId.slice(-6),
         },
       });
     };
@@ -1086,7 +1142,7 @@ export default {
       // 远程锁机
       if (operType.value === 8) {
         const { data } = await updateLockStatus({
-          equipmentId: device.value.id,
+          id: device.value.id,
           status: device.value.isBlocked ? "0" : "1",
         });
         if (data.code === "00000") {

+ 45 - 16
src/views/device/devicePassword/index.vue

@@ -5,11 +5,9 @@
     <!-- 设备信息卡片 -->
     <div class="device-card">
       <div class="device-header">
-        <div class="header-indicator"></div>
+        <van-icon name="desktop-o" class="icon" />
         <h3 class="device-name">
-          {{ $t("device.devicePasswordPage.equipmentName") }}:{{
-            equipmentName
-          }}
+          {{ equipmentName }}
         </h3>
       </div>
     </div>
@@ -38,7 +36,14 @@
                   :placeholder="
                     $t('device.devicePasswordPage.passwordPlaceholder')
                   "
-                  :rules="[{ validator, message: $t('device.devicePasswordPage.passwordPlaceholder') }]"
+                  :rules="[
+                    {
+                      validator,
+                      message: $t(
+                        'device.devicePasswordPage.passwordPlaceholder'
+                      ),
+                    },
+                  ]"
                   class="password-field"
                 >
                   <template #left-icon>
@@ -52,7 +57,14 @@
                   :placeholder="
                     $t('device.devicePasswordPage.passwordCheckRequired')
                   "
-                  :rules="[{ validator, message: $t('device.devicePasswordPage.passwordPlaceholder') }]"
+                  :rules="[
+                    {
+                      validator,
+                      message: $t(
+                        'device.devicePasswordPage.passwordPlaceholder'
+                      ),
+                    },
+                  ]"
                   class="password-field"
                 >
                   <template #left-icon>
@@ -70,7 +82,14 @@
                   :placeholder="
                     $t('device.devicePasswordPage.passwordPlaceholder')
                   "
-                  :rules="[{ validator, message: $t('device.devicePasswordPage.passwordPlaceholder') }]"
+                  :rules="[
+                    {
+                      validator,
+                      message: $t(
+                        'device.devicePasswordPage.passwordPlaceholder'
+                      ),
+                    },
+                  ]"
                   class="password-field"
                 >
                   <template #left-icon>
@@ -84,7 +103,14 @@
                   :placeholder="
                     $t('device.devicePasswordPage.passwordCheckRequired')
                   "
-                  :rules="[{ validator, message: $t('device.devicePasswordPage.passwordPlaceholder') }]"
+                  :rules="[
+                    {
+                      validator,
+                      message: $t(
+                        'device.devicePasswordPage.passwordPlaceholder'
+                      ),
+                    },
+                  ]"
                   class="password-field"
                 >
                   <template #left-icon>
@@ -123,7 +149,12 @@ import sHeader from "@/components/SimpleHeader";
 import { ref, reactive } from "@vue/reactivity";
 import { onMounted } from "@vue/runtime-core";
 import { useRoute, useRouter } from "vue-router";
-import { showNotify, showConfirmDialog, showFailToast, showSuccessToast } from "vant";
+import {
+  showNotify,
+  showConfirmDialog,
+  showFailToast,
+  showSuccessToast,
+} from "vant";
 import { useI18n } from "vue-i18n";
 export default {
   components: {
@@ -216,7 +247,7 @@ export default {
               showFailToast(res.data.message);
             }
           });
-        } else {   
+        } else {
           updateDevicePassword({
             equipmentId: passwordForm.equipmentId,
             adminPwd: passwordForm.adminPwd,
@@ -278,12 +309,10 @@ export default {
     display: flex;
     align-items: center;
 
-    .header-indicator {
-      width: 3px;
-      height: 20px;
-      background: @primary-color;
-      margin-right: 12px;
-      border-radius: 2px;
+    .icon {
+      font-size: 18px;
+      color: @primary-color;
+      margin-right: 10px;
     }
 
     .device-name {

+ 37 - 11
src/views/device/deviceSet.vue

@@ -163,13 +163,18 @@
         <van-field
           v-if="machineType === '0' || machineType === '1'"
           v-model="deviceDetal.flowers"
-          is-link
           readonly
           :label="machineType === '1' ? '口味种类' : $t('device.flowerType')"
           :placeholder="machineType === '1' ? '选择口味种类' : '选择花型种类'"
           @click="clickFlowerPicker"
           class="form-item"
-        />
+        >
+         <!-- <template #button>
+           <van-button size="small" type="primary" @click="pushFlower">{{
+             $t("advertManage.push")
+           }}</van-button>
+         </template> -->
+        </van-field>
 
         <van-field
           readonly
@@ -262,7 +267,7 @@
         v-model="selectedFlower"
         :columns="flowerColumns"
         @cancel="showFlowerPicker = false"
-        @confirm="onFlowerConfirm"
+        @confirm="pushFlower"
       />
     </van-popup>
   </div>
@@ -290,6 +295,7 @@ import {
   Api_getDiscCodeStatus,
   getGoodsNumber,
   pushAppUpdate,
+  pushGoods,
 } from "@/service/device/index";
 import {
   showFailToast,
@@ -569,6 +575,31 @@ export default {
         }, 1000);
       });
     };
+    // 推送花型
+    const pushFlower = ({ selectedOptions }) => { 
+      deviceDetal.value.flowers = selectedOptions[0].text;
+      showConfirmDialog({
+        title: "提醒",
+        message: "确认推送?",
+      }).then(async () => {
+        const { data } = await pushGoods({
+          id: deviceDetal.value.id,
+          flowers: deviceDetal.value.flowers,
+        });
+        if (data.code === "00000") {
+          // showSuccessToast("推送成功");
+          showFlowerPicker.value = false;
+          showToast({
+            message: "推送成功,\n修改花型后需要重新设置价格",
+            duration: 3000,
+            forbidClick: true,
+          });
+          setTimeout(() => {
+            router.go(-1);
+          }, 3500);
+        }
+      })
+    };
     // 点击优惠券开关
     const couponStatusChg = (couponStatus) => {
       Api_getDiscCodeStatus({
@@ -603,10 +634,10 @@ export default {
         duration: 0,
         forbidClick: true,
         message:
-          "提示:\n请确认PLC版本支持修改的花型,避免出现程序错乱,导致客诉!!!倒计时 5 S",
+          "提示:\n请确认PLC版本支持修改的花型,避免出现程序错乱,导致客诉!!!倒计时 3 S",
       });
 
-      let second = 5;
+      let second = 4;
       const timer = setInterval(() => {
         second--;
         if (second) {
@@ -618,12 +649,6 @@ export default {
         }
       }, 1000);
 
-      // showToast({
-      //   message: "提示:\n是否确认过PLC版本支持该花型,避免出现程序错乱,导致客诉!!!",
-      //   duration: 3000,
-      //   forbidClick: true
-      // })
-      // showFlowerPicker.value = true;
     };
     return {
       deviceDetal,
@@ -641,6 +666,7 @@ export default {
       updateUrlClk,
       mqttUrl,
       mqttUrlClk,
+      pushFlower,
       confirmClk,
       kDialogRef,
       couponStatusChg,

+ 16 - 14
src/views/device/doSugar.vue

@@ -5,9 +5,9 @@
     <!-- 设备信息卡片 -->
     <div class="device-card">
       <div class="device-header">
-        <div class="header-indicator"></div>
+        <van-icon name="desktop-o" class="icon" />
         <h3 class="device-name">
-          {{ $t("device.equipmentName") }}:{{ deviceDetal?.name || "-" }}
+          {{ equipmentName }}
         </h3>
       </div>
     </div>
@@ -180,6 +180,7 @@ export default {
     const route = useRoute();
     const router = useRouter();
     const deviceId = route.query.deviceId;
+    const equipmentName = ref(route.query.name);
     const machineType = route.query.machineType;
     const deviceDetal = ref(null);
     const show = ref(false);
@@ -297,13 +298,8 @@ export default {
       }
     };
     const submitDoSugar = async () => {
-      if (fieldValue.value === "") {
-        showToast(t("device.pleaseSelectAPattern"));
-        return;
-      }
       const makeCodes = ref([1, 0, 0]);
       doSugartData.value = null;
-      doSugartType.value = true;
 
       if (machineType == "2") {
         fieldValue.value = "";
@@ -339,6 +335,11 @@ export default {
           );
           fieldValue.value = iceName.value + "(" + fieldValue.value + ")";
         }
+      } else {
+        if (fieldValue.value === "") {
+          showToast(machineType == "1" ? t('device.pleaseSelectTaste') : t("device.pleaseSelectAPattern"));
+          return;
+        }
       }
       showConfirmDialog({
         title: t("user.tips"),
@@ -353,6 +354,7 @@ export default {
               productNo: productNo.value,
             }).then((data) => {
               if (data.data.code == "00000") {
+                doSugartType.value = true;
                 doSugartData.value = data.data.data;
                 setTimeout(() => {
                   doSugartType.value = false;
@@ -369,6 +371,7 @@ export default {
               productNo: productNo.value,
             }).then((data) => {
               if (data.data.code == "00000") {
+                doSugartType.value = true;
                 doSugartData.value = data.data.data;
                 setTimeout(() => {
                   doSugartType.value = false;
@@ -409,7 +412,7 @@ export default {
     const pushToDaySugarList = async () => {
       router.push({
         path: "toDaySugarList",
-        query: { deviceId: deviceId, clientId: deviceDetal.value.clientId },
+        query: { deviceId: deviceId, clientId: deviceDetal.value.clientId, name: equipmentName.value },
       });
     };
 
@@ -431,6 +434,7 @@ export default {
       jamData,
       crushData,
       showPopPhoto,
+      equipmentName,
     };
   },
   components: { sHeader },
@@ -458,12 +462,10 @@ export default {
     display: flex;
     align-items: center;
 
-    .header-indicator {
-      width: 3px;
-      height: 20px;
-      background: @primary-color;
-      margin-right: 12px;
-      border-radius: 2px;
+    .icon {
+      font-size: 18px;
+      color: @primary-color;
+      margin-right: 10px;
     }
 
     .device-name {

+ 8 - 12
src/views/device/goodsMan/index.vue

@@ -5,11 +5,9 @@
       <!-- 设备信息卡片 -->
       <div class="device-card">
         <div class="device-header">
-          <div class="header-indicator"></div>
+          <van-icon name="desktop-o" class="icon" />
           <h3 class="device-name">
-            {{ $t("device.modifyPricePage.equipmentName") }}:{{
-              equipmentName
-            }}
+            {{ equipmentName }}
           </h3>
         </div>
       </div>
@@ -184,7 +182,7 @@ export default {
     // 修改商品信息提交参数
     const params = ref();
     // 点击确定按钮
-    const confirmClk = async() => {
+    const confirmClk = async () => {
       if (!cofficentForm.price) {
         showToast(t("device.modifyPricePage.batchPricePlace"));
         return;
@@ -293,7 +291,7 @@ export default {
         console.log(error);
       }
     };
-    
+
     return {
       cofficentForm,
       tableData,
@@ -347,12 +345,10 @@ export default {
     display: flex;
     align-items: center;
 
-    .header-indicator {
-      width: 3px;
-      height: 20px;
-      background: @primary-color;
-      margin-right: 12px;
-      border-radius: 2px;
+    .icon {
+      font-size: 18px;
+      color: #4d6add;
+      margin-right: 10px;
     }
 
     .device-name {

+ 1 - 1
src/views/device/index.vue

@@ -967,7 +967,7 @@ export default {
         showToast(t("device.sleepDescPlace"));
       } else {
         const { data } = await changeSleepDesc({
-          equipmentId: id,
+          id: id,
           sleepDesc,
         });
         if (data.code === "00000") {

+ 13 - 13
src/views/device/jam/index.vue

@@ -3,12 +3,14 @@
     <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="device-card">
+        <div class="device-header">
+          <van-icon name="desktop-o" class="icon" />
+          <h3 class="device-name">
+            {{ equipmentName }}
+          </h3>
+        </div>
+      </div>
 
     <!-- 果酱抽取卡片 -->
     <div class="settings-card">
@@ -72,7 +74,7 @@ export default {
     const { t } = useI18n();
     const route = useRoute();
     const deviceId = ref(route.query.deviceId);
-    const deviceName = ref(route.query.name);
+    const equipmentName = ref(route.query.name);
     const jams = ref([]);
 
     // 获取商品列表
@@ -129,7 +131,7 @@ export default {
     });
 
     return {
-      deviceName,
+      equipmentName,
       showSugerPhoto,
       handleExtract,
       jams,
@@ -161,11 +163,9 @@ export default {
     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;
+    .icon {
+      font-size: 18px;
+      color: #4d6add;
       margin-right: 10px;
     }
 

+ 14 - 16
src/views/device/maintenance/index.vue

@@ -5,11 +5,11 @@
 
     <div class="content-container">
       <!-- 设备信息卡片 -->
-      <div class="device-card" v-if="name">
+      <div class="device-card">
         <div class="device-header">
-          <div class="header-indicator"></div>
+          <van-icon name="desktop-o" class="icon" />
           <h3 class="device-name">
-            {{ $t("device.equipmentName") }}:{{ name }}
+            {{ equipmentName }}
           </h3>
         </div>
       </div>
@@ -316,7 +316,7 @@ export default {
       deviceDetail: null,
       loading: false,
       finished: false,
-      name: route.query.name
+      equipmentName: route.query.name
         ? route.query.name
         : route.query.clientId.slice(-6),
       list: [],
@@ -360,9 +360,9 @@ export default {
 
     // 状态选项
     const statusOptions = [
-    { value: "", label: t('maintenance.status.all') },
-      { value: 1, label: t('maintenance.status.resolved') },
-      { value: 2, label: t('maintenance.status.unresolved') },
+      { value: "", label: t("maintenance.status.all") },
+      { value: 1, label: t("maintenance.status.resolved") },
+      { value: 2, label: t("maintenance.status.unresolved") },
     ];
 
     const columnsType = ["year", "month", "day"];
@@ -449,11 +449,11 @@ export default {
       getStatusText(status) {
         switch (status) {
           case 1:
-            return t('maintenance.status.resolved');
+            return t("maintenance.status.resolved");
           case 2:
-            return t('maintenance.status.unresolved');
+            return t("maintenance.status.unresolved");
           default:
-            return t('maintenance.status.unknown');
+            return t("maintenance.status.unknown");
         }
       },
     };
@@ -530,12 +530,10 @@ export default {
       display: flex;
       align-items: center;
 
-      .header-indicator {
-        width: 3px;
-        height: 16px;
-        background: #4e6bdd;
-        border-radius: 2px;
-        margin-right: 8px;
+      .icon {
+        font-size: 18px;
+        color: #4d6add;
+        margin-right: 10px;
       }
 
       .device-name {

+ 7 - 15
src/views/device/modifyPrice/index.vue

@@ -5,11 +5,9 @@
       <!-- 设备信息卡片 -->
       <div class="device-card">
         <div class="device-header">
-          <div class="header-indicator"></div>
+          <van-icon name="desktop-o" class="icon" />
           <h3 class="device-name">
-            {{ $t("device.modifyPricePage.equipmentName") }}:{{
-              equipmentName
-            }}
+            {{ equipmentName }}
           </h3>
         </div>
       </div>
@@ -23,11 +21,7 @@
             <span class="highlight">{{ tableData.length }}</span>
             {{ $t("device.modifyPricePage.goods") }}
           </div>
-          <van-button
-            icon="edit"
-            @click="noticeClk"
-            class="batch-btn"
-          >
+          <van-button icon="edit" @click="noticeClk" class="batch-btn">
             {{ $t("device.modifyPricePage.batchModify") }}
           </van-button>
         </div>
@@ -277,12 +271,10 @@ export default {
     display: flex;
     align-items: center;
 
-    .header-indicator {
-      width: 3px;
-      height: 20px;
-      background: @primary-color;
-      margin-right: 12px;
-      border-radius: 2px;
+    .icon {
+      font-size: 18px;
+      color: @primary-color;
+      margin-right: 10px;
     }
 
     .device-name {

+ 8 - 9
src/views/device/modulation.vue

@@ -5,9 +5,11 @@
     <!-- 设备信息卡片 -->
     <div class="device-card">
       <div class="device-header">
-        <div class="header-indicator"></div>
+        <van-icon name="desktop-o" class="icon" />
         <h3 class="device-name">
-          {{ $t("device.modifyPricePage.equipmentName") }}:{{ equipmentName }}
+          {{
+            equipmentName
+          }}
         </h3>
       </div>
     </div>
@@ -48,7 +50,6 @@ import { useRoute, useRouter } from "vue-router";
 import { getDeviceDetal, updateVolume } from "@/service/device";
 import { showFailToast, showConfirmDialog, showSuccessToast } from "vant";
 import { useI18n } from "vue-i18n";
-// import { styleUrl } from "../../common/js/utils";
 
 export default {
   setup() {
@@ -130,12 +131,10 @@ export default {
     display: flex;
     align-items: center;
 
-    .header-indicator {
-      width: 3px;
-      height: 20px;
-      background: @primary-color;
-      margin-right: 12px;
-      border-radius: 2px;
+    .icon {
+      font-size: 18px;
+      color: @primary-color;
+      margin-right: 10px;
     }
 
     .device-name {

+ 7 - 9
src/views/device/openDoor.vue

@@ -5,11 +5,9 @@
 
     <!-- 设备名称标题 -->
     <div class="device-header">
-      <div class="vertical-indicator"></div>
+      <van-icon name="desktop-o" class="icon" />
       <h3 class="device-name">
-        {{ $t("device.equipmentName") }}:{{
-          deviceDetal ? deviceDetal.name : ""
-        }}
+        {{ equipmentName }}
       </h3>
     </div>
 
@@ -171,6 +169,7 @@ export default {
     const deviceId = route.query.deviceId;
     const machineType = route.query.machineType;
     const deviceDetal = ref({});
+    const equipmentName = ref(route.query.name);
     const { t } = useI18n();
 
     // 初始化页面获取列表
@@ -293,6 +292,7 @@ export default {
       banPaperChg,
       materialChg,
       machineType,
+      equipmentName,
       user,
     };
   },
@@ -332,11 +332,9 @@ export default {
   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;
+  .icon {
+    font-size: 18px;
+    color: @theme-color;
     margin-right: 10px;
   }
 

+ 9 - 12
src/views/device/paramsSet/index.vue

@@ -5,11 +5,9 @@
     <!-- 设备信息卡片 -->
     <div class="device-card">
       <div class="device-header">
-        <div class="header-indicator"></div>
+        <van-icon name="desktop-o" class="icon" />
         <h3 class="device-name">
-          {{ $t("device.equipmentName") }}:{{
-            name || $t("device.equipmentNameTips")
-          }}
+          {{ equipmentName }}
         </h3>
       </div>
     </div>
@@ -57,7 +55,7 @@ export default {
     const route = useRoute();
     const deviceId = route.query.deviceId;
     const machineType = route.query.machineType;
-    const name = route.query.name;
+    const equipmentName = route.query.name;
     const deviceDetal = ref();
     // 初始化页面获取列表
     onMounted(async () => {
@@ -115,6 +113,7 @@ export default {
           type: number,
           deviceId: route.query.deviceId,
           machineType: route.query.machineType,
+          name: equipmentName,
         },
       });
     };
@@ -125,7 +124,7 @@ export default {
       menuItems,
       handleMenuItemClick,
       getIconPath,
-      name,
+      equipmentName,
     };
   },
 };
@@ -152,12 +151,10 @@ export default {
     display: flex;
     align-items: center;
 
-    .header-indicator {
-      width: 3px;
-      height: 20px;
-      background: @primary-color;
-      margin-right: 12px;
-      border-radius: 2px;
+    .icon {
+      font-size: 18px;
+      color: @primary-color;
+      margin-right: 10px;
     }
 
     .device-name {

+ 8 - 10
src/views/device/paramsSet/paramsSetInfo.vue

@@ -6,11 +6,9 @@
       <!-- 设备信息卡片 -->
       <div class="device-card">
         <div class="device-header">
-          <div class="header-indicator"></div>
+          <van-icon name="desktop-o" class="icon" />
           <h3 class="device-name">
-            {{ $t("device.equipmentName") }}:{{
-              deviceDetal.name || $t("device.equipmentNameTips")
-            }}
+            {{ equipmentName }}
           </h3>
         </div>
       </div>
@@ -165,6 +163,7 @@ export default {
     const isChange = ref(false);
     const howLong = ref([]);
     const interval = ref("");
+    const equipmentName = route.query.name;
 
     const monitoringParams = ref([
       {
@@ -394,6 +393,7 @@ export default {
       checkBtn,
       monitoringParams,
       presets,
+      equipmentName,
     };
   },
 };
@@ -428,12 +428,10 @@ export default {
     display: flex;
     align-items: center;
 
-    .header-indicator {
-      width: 3px;
-      height: 20px;
-      background: @primary-color;
-      margin-right: 12px;
-      border-radius: 2px;
+    .icon {
+      font-size: 18px;
+      color: @primary-color;
+      margin-right: 10px;
     }
 
     .device-name {

+ 38 - 34
src/views/device/payInfo/index.vue

@@ -4,11 +4,13 @@
     <s-header :name="$t('remote.C32')" :noback="false" />
 
     <!-- 设备名称标题 -->
-    <div class="device-header">
-      <div class="vertical-indicator"></div>
-      <h3 class="device-name">
-        {{ $t("device.equipmentName") }}:{{ deviceName }}
-      </h3>
+    <div class="device-card">
+      <div class="device-header">
+        <van-icon name="desktop-o" class="icon" />
+        <h3 class="device-name">
+          {{ equipmentName }}
+        </h3>
+      </div>
     </div>
 
     <!-- 商户信息表单 -->
@@ -25,11 +27,11 @@
                 class="config-input"
                 :border="false"
                 :rules="[
-                {
-                  required: true,
-                  message: 'merchant_id',
-                },
-              ]"
+                  {
+                    required: true,
+                    message: 'merchant_id',
+                  },
+                ]"
               />
             </div>
           </div>
@@ -47,11 +49,11 @@
                 type="password"
                 :border="false"
                 :rules="[
-                {
-                  required: true,
-                  message: 'secret_code',
-                },
-              ]"
+                  {
+                    required: true,
+                    message: 'secret_code',
+                  },
+                ]"
               />
             </div>
           </div>
@@ -68,11 +70,11 @@
                 class="config-input"
                 :border="false"
                 :rules="[
-                {
-                  required: true,
-                  message: 'product_ability_code',
-                },
-              ]"
+                  {
+                    required: true,
+                    message: 'product_ability_code',
+                  },
+                ]"
               />
             </div>
           </div>
@@ -89,11 +91,11 @@
                 class="config-input"
                 :border="false"
                 :rules="[
-                {
-                  required: true,
-                  message: 'area_code',
-                },
-              ]"
+                  {
+                    required: true,
+                    message: 'area_code',
+                  },
+                ]"
               />
             </div>
           </div>
@@ -101,7 +103,12 @@
       </div>
       <!-- 提交按钮 -->
       <div class="submit-footer">
-        <van-button round type="primary" class="submit-btn" native-type="submit">
+        <van-button
+          round
+          type="primary"
+          class="submit-btn"
+          native-type="submit"
+        >
           <template #icon>
             <van-icon name="success" class="btn-icon" />
           </template>
@@ -109,7 +116,6 @@
         </van-button>
       </div>
     </van-form>
-
   </div>
 </template>
 
@@ -129,7 +135,7 @@ export default {
     const route = useRoute();
     const router = useRouter();
     const deviceId = ref(route.query.clientId);
-    const deviceName = ref(route.query.name);
+    const equipmentName = ref(route.query.name);
 
     // 配置数据
     const configData = ref({
@@ -179,7 +185,7 @@ export default {
     };
 
     return {
-      deviceName,
+      equipmentName,
       handleSubmit,
       configData,
     };
@@ -216,11 +222,9 @@ export default {
   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;
+  .icon {
+    font-size: 18px;
+    color: #4d6add;
     margin-right: 10px;
   }
 

+ 72 - 71
src/views/device/payment/index.vue

@@ -3,11 +3,13 @@
     <s-header :name="$t('remote.C28')" :noback="false" />
 
     <!-- 设备名称标题 -->
-    <div class="device-header">
-      <div class="vertical-indicator"></div>
-      <h3 class="device-name">
-        {{ $t("device.equipmentName") }}:{{ deviceName }}
-      </h3>
+    <div class="device-card">
+      <div class="device-header">
+        <van-icon name="desktop-o" class="icon" />
+        <h3 class="device-name">
+          {{ equipmentName }}
+        </h3>
+      </div>
     </div>
 
     <!-- 支付方式列表 -->
@@ -59,73 +61,74 @@
 <script>
 import sHeader from "@/components/SimpleHeader";
 import { showConfirmDialog, showSuccessToast, showFailToast } from "vant";
-import { useRoute, useRouter } from 'vue-router';
+import { useRoute, useRouter } from "vue-router";
 import { ref, reactive } from "vue";
-import { useI18n } from 'vue-i18n';
+import { useI18n } from "vue-i18n";
 import { onMounted } from "vue";
 import { updatePayment } from "@/service/device/index";
 
 export default {
-    components: { sHeader },
-    setup() {
-        const { t } = useI18n();
-        const route = useRoute();
-        const router = useRouter();
-        const deviceId = ref(route.query.deviceId);
-        const deviceName = ref(route.query.name);
-        const activeZ1 = ref(false);
-        const activeZ2 = ref(false);
-        const activeZ3 = ref(false);
-
-        onMounted(() => {
-            console.log(route.query.payment)
-            if (route.query.payment) {
-                const payment = route.query.payment.split(',')
-                if (payment.includes('Z1')) activeZ1.value = true
-                if (payment.includes('Z2')) activeZ2.value = true
-                if (payment.includes('Z3')) activeZ3.value = true
-            }
+  components: { sHeader },
+  setup() {
+    const { t } = useI18n();
+    const route = useRoute();
+    const router = useRouter();
+    const deviceId = ref(route.query.deviceId);
+    const equipmentName = ref(route.query.name);
+    const activeZ1 = ref(false);
+    const activeZ2 = ref(false);
+    const activeZ3 = ref(false);
+
+    onMounted(() => {
+      console.log(route.query.payment);
+      if (route.query.payment) {
+        const payment = route.query.payment.split(",");
+        if (payment.includes("Z1")) activeZ1.value = true;
+        if (payment.includes("Z2")) activeZ2.value = true;
+        if (payment.includes("Z3")) activeZ3.value = true;
+      }
+    });
+
+    const handleSubmit = () => {
+      showConfirmDialog({
+        title: t("device.operationConfirmation"),
+        message: t("device.pleaseConfirmAgainWhetherToOperate"),
+      })
+        .then(async () => {
+          // on confirm
+          const activePayments = [];
+          if (activeZ1.value) activePayments.push("Z1");
+          if (activeZ2.value) activePayments.push("Z2");
+          if (activeZ3.value) activePayments.push("Z3");
+          const result = activePayments.join(",");
+          const params = reactive({
+            id: deviceId.value,
+            paymentType: result,
+          });
+          const { data } = await updatePayment(params);
+          if (data.code === "00000") {
+            showSuccessToast(t("device.modificationSucceeded"));
+            setTimeout(() => {
+              router.go(-1);
+            }, 2000);
+          } else {
+            showFailToast(data.message);
+          }
+        })
+        .catch(() => {
+          // on cancel
         });
-
-        const handleSubmit = () => {
-            showConfirmDialog({
-                title: t('device.operationConfirmation'),
-                message: t('device.pleaseConfirmAgainWhetherToOperate'),
-            }).then(async() => {
-                // on confirm
-                const activePayments = [];
-                if (activeZ1.value) activePayments.push("Z1");
-                if (activeZ2.value) activePayments.push("Z2");
-                if (activeZ3.value) activePayments.push("Z3");
-                const result = activePayments.join(',')
-                const params = reactive({
-                    id: deviceId.value,
-                    paymentType: result,
-                });
-                const { data } = await updatePayment(params);
-                if (data.code === "00000") {
-                    showSuccessToast(t('device.modificationSucceeded'));
-                    setTimeout(() => {
-                        router.go(-1);
-                    }, 2000);
-                } else {
-                    showFailToast(data.message);
-                }
-            }).catch(() => {
-                // on cancel
-            });
-        }
-
-
-        return {
-            deviceName,
-            activeZ1,
-            activeZ2,
-            activeZ3,
-            handleSubmit
-        }
-    }
-}
+    };
+
+    return {
+      equipmentName,
+      activeZ1,
+      activeZ2,
+      activeZ3,
+      handleSubmit,
+    };
+  },
+};
 </script>
 
 <style lang="less" scoped>
@@ -148,11 +151,9 @@ export default {
     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;
+    .icon {
+      font-size: 18px;
+      color: var(--active-color);
       margin-right: 10px;
     }
 

+ 6 - 8
src/views/device/returnCoin/index.vue

@@ -6,9 +6,9 @@
       <!-- 设备信息卡片 -->
       <div class="device-card">
         <div class="device-header">
-          <div class="header-indicator"></div>
+          <van-icon name="desktop-o" class="icon" />
           <h3 class="device-name">
-            {{ $t("device.showGoodsPage.equipmentName") }}:{{ equipmentName }}
+            {{ equipmentName }}
           </h3>
         </div>
       </div>
@@ -271,12 +271,10 @@ export default {
     display: flex;
     align-items: center;
 
-    .header-indicator {
-      width: 3px;
-      height: 20px;
-      background: @primary-color;
-      margin-right: 12px;
-      border-radius: 2px;
+    .icon {
+      font-size: 18px;
+      color: #4d6add;
+      margin-right: 10px;
     }
 
     .device-name {

+ 0 - 142
src/views/device/saveProportion/index.less

@@ -1,142 +0,0 @@
-.paramsSetPage {
-  position: relative;
-  width: 100%;
-  overflow: hidden;
-
-  .paramsSetBox {
-    width: 100%;
-    height: calc(100vh - 44px);
-    overflow: auto;
-    overflow-x: hidden;
-    .deleteSpan {
-      padding: 0 1em;
-      color: #df5e4c;
-    }
-    .addSpan { color: #4d6add; }
-    .addRow { height: 3em; line-height: 3em; text-align: center; }
-    .vanInputRow {
-      position: relative;
-      &::after{
-        position: absolute;
-        box-sizing: border-box;
-        content: " ";
-        pointer-events: none;
-        right: var(--van-padding-md);
-        bottom: 0;
-        left: var(--van-padding-md);
-        border-bottom: 0.02667rem solid var(--van-cell-border-color);
-        transform: scaleY(.5);
-      }
-      :deep(.van-cell) {
-        &::after{ display: none; }
-      }
-    }
-
-    .wrap2 {
-      width: 100%;
-      height: 54px;
-      background-color: #fff;
-      justify-content: center;
-      position: relative;
-      .outer1 {
-        width: 162px;
-        height: 20px;
-        margin: 0 0 0 15px;
-
-        .block1 {
-          background-color: rgba(128, 150, 236, 1);
-          border-radius: 2px;
-          width: 4px;
-          height: 12px;
-          margin-top: 4px;
-        }
-
-        .txt2 {
-          width: 150px;
-          height: 20px;
-          overflow-wrap: break-word;
-          color: rgba(64, 77, 116, 1);
-          font-size: 14px;
-          font-family: PingFangSC-Medium;
-          text-align: left;
-          white-space: nowrap;
-          line-height: 20px;
-          display: block;
-        }
-      }
-
-      .pic2 {
-        z-index: 26;
-        position: absolute;
-        left: 0;
-        top: 53px;
-        width: 375px;
-        height: 2px;
-      }
-    }
-    .list{
-      width: 100%;
-      height: 54px;
-      padding: 0 15px;
-      display: flex;
-      justify-content: space-between;
-      align-items: center;
-      position: relative;
-      .title {
-        display: flex;
-        .icon {
-          width: 24px;
-          padding-right: 10px;
-        }
-        .word3 {
-          display: block;
-          width: 78px;
-          height: 13px;
-          overflow-wrap: break-word;
-          color: rgba(64, 77, 116, 1);
-          font-size: 13px;
-          text-align: left;
-          white-space: nowrap;
-          line-height: 13px;
-        }
-        .section4 {
-          position: relative;
-          width: 18px;
-          height: 19px;
-          margin-right: 10px;
-          background: url(../../../assets/device/currency1.png) 100% no-repeat;
-
-          .main4 {
-            z-index: 34;
-            position: absolute;
-            left: 12px;
-            top: -1px;
-            width: 4px;
-            height: 4px;
-            background: url(../../../assets/device/currency2.png) 100% no-repeat;
-          }
-        }
-      }
-      .outer2 {
-        width: 6px;
-        height: 12px;
-        background: url('../../../assets/right.png') top center no-repeat;
-        background-size: 100%;
-        margin-top: 4px;
-      }
-    }
-    :deep(.van-cell) { align-items: center; }
-    :deep(.van-field__control) {
-      width: 60%;
-      border: 1px solid var(--van-border-color);
-      padding: 0.2em 0;
-    }
-    :deep(.updataButton){
-      background-color: transparent;
-      color: var(--van-button-primary-background-color);
-      padding: 0 0.5em;
-      border-radius: 50px;
-    }
-  }
-}
-

+ 0 - 210
src/views/device/saveProportion/index.vue

@@ -1,210 +0,0 @@
-<template>
-  <!-- 添加分销人 -->
-  <div class="paramsSetPage flex-col">
-    <s-header :name="$t('device.addDistributor')" :noback="false"></s-header>
-    <div class="paramsSetBox mod1 flex-col">
-      <van-form @submit="updateAdFun">
-        <van-field
-          v-model="adInfo.clientId"
-          name="clientId"
-          :label="`${$t('device.addDistributor')}:`"
-          :placeholder="$t('device.equipmentNoPlaceholder')"
-          :rules="[{ required: true, message: $t('device.equipmentNoPlaceholder') }]"
-        />
-
-        <van-field
-          v-model="adInfo.adminProportion"
-          name="adminProportion"
-          :label="`${$t('device.proportionOfPlatformDistributionLabel')}:`"
-          :placeholder="$t('device.proportionOfPlatformDistributionPlaceholder')"
-          :rules="[{ required: true, message: $t('device.proportionOfPlatformDistributionPlaceholder') }]"
-        >
-          <template #button>%</template>
-        </van-field>
-
-        <van-field
-          v-model="adInfo.proportion"
-          name="proportion"
-          :label="`${$t('device.merchantDistributionProportionLabel')}:`"
-          :placeholder="$t('device.merchantDistributionProportionPlaceholder')"
-          :rules="[{ required: true, message: $t('device.merchantDistributionProportionPlaceholder') }]"
-        >
-          <template #button>%</template>
-        </van-field>
-        <div class="vanInputRow" v-if='adInfo.type >= 1'>
-          <van-field
-            v-model="adInfo.agencyName"
-            name="agencyName"
-            :label="`${$t('device.accountNoOfDistributorLabel')}:`"
-            :placeholder="$t('device.accountNoOfDistributorPlaceholder')"
-          />
-          <van-field
-            v-model="adInfo.agencyProportion"
-            name="agencyProportion"
-            :label="`${$t('device.distributionProportionLabel')}:`"
-            :placeholder="$t('device.distributionProportionPlaceholder')"
-          >
-            <template #button>%</template>
-          </van-field>
-        </div>
-        <div class="vanInputRow" v-if='adInfo.type >= 2'>
-          <van-field
-            v-model="adInfo.merchantName"
-            name="merchantName"
-            :label="`${$t('device.accountNoOfDistributorLabel')}:`"
-            :placeholder="$t('device.accountNoOfDistributorPlaceholder')"
-          />
-          <van-field
-            v-model="adInfo.merchantProportion"
-            name="merchantProportion"
-            :label="`${$t('device.distributionProportionLabel')}:`"
-            :placeholder="$t('device.distributionProportionPlaceholder')"
-          >
-            <template #button>%<span class="deleteSpan" @click="delectType()"><van-icon name="delete-o" />{{$t('device.delete')}}</span></template>
-          </van-field>
-        </div>
-        <div class="vanInputRow" v-if='adInfo.type === 3'>
-          <van-field
-            v-model="adInfo.personageName"
-            name="personageName"
-            :label="`${$t('device.accountNoOfDistributorLabel')}:`"
-            :placeholder="$t('device.accountNoOfDistributorPlaceholder')"
-          />
-          <van-field
-            v-model="adInfo.personageProportion"
-            name="personageProportion"
-            :label="`${$t('device.distributionProportionLabel')}:`"
-            :placeholder="$t('device.distributionProportionPlaceholder')"
-          >
-            <template #button>%<span class="deleteSpan" @click="delectType()"><van-icon name="delete-o" />{{$t('device.delete')}}</span></template>
-          </van-field>
-        </div>
-        <div class="vanInputRow addRow" v-if='adInfo.type < 3'>
-          <span class="addSpan" @click="addType()"><van-icon name="plus" />{{$t('device.continueToAddDistributors')}}</span>
-        </div>
-        <van-row justify="space-around" style="padding: 1em">
-          <van-button
-            span="5"
-            round
-            type="primary"
-            style="height: 2em; padding: 0 2em"
-            native-type="submit"
-            >{{$t('device.submitForApproval')}}</van-button
-          >
-        </van-row>
-      </van-form>
-    </div>
-  </div>
-</template>
-<script>
-import { onMounted, ref } from 'vue';
-import sHeader from "@/components/SimpleHeader";
-import { useRoute, useRouter } from 'vue-router';
-import { getDeviceDetal, getProportion, saveProportion } from '@/service/device';
-import { showFailToast, showSuccessToast } from 'vant';
-import { getLoginUser } from "@/common/js/utils";
-
-export default {
-  components: { sHeader },
-  setup() {
-    const user = getLoginUser();
-    const route = useRoute();
-    const router = useRouter();
-    const deviceId = route.query.deviceId;
-    const deviceDetal = ref(null);
-    const adInfo = ref({
-        adminId: user.id, // 当前登录账户的id
-        clientId: '', // 设备编号
-        type: 0, // 分销的人数
-        proportion: 99, // 该商户自己的分销比例
-        adminProportion: 1, // 平台的分账比例
-        agencyName: '', // 分账人的账号
-        agencyProportion: '', // 分账人的比例
-
-        merchantName: '', // 分账人的账号
-        merchantProportion: '', // 分账人的比例
-
-        personageName: '', // 分账人的账号
-        personageProportion: '', // 分账人的比例
-        
-    });
-    // 初始化页面获取列表
-    onMounted(async () => { getDeviceDetalFun(); });
-    // 获取设备列表数据
-    const getDeviceDetalFun = async () => {
-      const { data } = await getDeviceDetal({id : deviceId});
-      if (data.code === '00000') {
-        deviceDetal.value = data.data;
-        adInfo.value.clientId = deviceDetal.value.clientId;
-        getProportionFun();
-      } else { showFailToast(data.message); }
-    }
-    const getProportionFun = async () => {
-      const { data } = await getProportion({ adminId: user.id, clientId: deviceDetal.value.clientId });
-      if (data.code === '00000') {
-        adInfo.value.id = data.data.id;
-        adInfo.value.type = data.data.type;
-        adInfo.value.proportion = data.data.proportion;
-        adInfo.value.agencyName = data.data.agencyName;
-        adInfo.value.agencyProportion = data.data.agencyProportion;
-        adInfo.value.merchantName = data.data.merchantName;
-        adInfo.value.merchantProportion = data.data.merchantProportion;
-        adInfo.value.personageName = data.data.personageName;
-        adInfo.value.personageProportion = data.data.personageProportion;
-        adInfo.value.adminProportion = data.data.adminProportion;
-        if (adInfo.value.personageName !== '' && adInfo.value.personageProportion !== '') {
-          adInfo.value.type++;
-        }
-        if (adInfo.value.merchantName !== '' && adInfo.value.merchantProportion !== '') {
-          adInfo.value.type++;
-        }
-        if (adInfo.value.agencyName !== '' && adInfo.value.agencyProportion !== '') {
-          adInfo.value.type++;
-        }
-      } else { showFailToast(data.message); }
-    }
-    const delectType = () => { adInfo.value.type--; }
-    const addType = () => { adInfo.value.type++; }
-    const updateAdFun = async () => {
-      const params = {};
-      params.id =  adInfo.value.id;
-      params.adminId = adInfo.value.adminId;
-      params.clientId = adInfo.value.clientId;
-      params.proportion = adInfo.value.proportion;
-      params.adminProportion = adInfo.value.adminProportion;
-      params.type = 0;
-      if (adInfo.value.personageName !== '' && adInfo.value.personageProportion !== '') {
-        params.personageName = adInfo.value.personageName;
-        params.personageProportion = adInfo.value.personageProportion;
-        params.type++;
-      }
-      if (adInfo.value.merchantName !== '' && adInfo.value.merchantProportion !== '') {
-        params.merchantName = adInfo.value.merchantName;
-        params.merchantProportion = adInfo.value.merchantProportion;
-        params.type++;
-      }
-      if (adInfo.value.agencyName !== '' && adInfo.value.agencyProportion !== '') {
-        params.agencyName = adInfo.value.agencyName;
-        params.agencyProportion = adInfo.value.agencyProportion;
-        params.type++;
-      }
-      const { data } = await saveProportion(params);
-      if (data.code === '00000') {
-        showSuccessToast(data.data);
-        router.back();
-      } else { showFailToast(data.message); }
-      console.log('updateAdFun', data);
-    };
-    return {
-      adInfo,
-      delectType,
-      addType,
-      updateAdFun
-    };
-  },
-};
-</script>
-<style lang="less" scoped>
-  @import "../../../common/style/common";
-  @import "./index.less";
-</style>

+ 6 - 9
src/views/device/showGoods/index.vue

@@ -11,8 +11,7 @@
       <div class="device-card">
         <div class="device-info">
           <h3 class="device-name">
-            <div class="vertical-indicator"></div>
-            {{ $t("device.showGoodsPage.equipmentName") }}:
+            <van-icon name="desktop-o" class="icon" />
             <span class="highlight">{{ equipmentName }}</span>
           </h3>
           <div class="goods-count">
@@ -239,13 +238,11 @@ export default {
   margin: 0 0 8px;
   color: #404d74;
 
-  .vertical-indicator {
-    width: 4px;
-    height: 15px;
-    background: var(--active-color, #4d6add);
-    border-radius: 2px;
-    margin-right: 10px;
-  }
+  .icon {
+      font-size: 18px;
+      color: var(--primary-color);
+      margin-right: 10px;
+    }
 }
 
 .highlight {

+ 0 - 8
src/views/device/tagSet/index.vue

@@ -4,19 +4,11 @@
     <div class="o-p-10">
       <div class="l-flex-between">
         <div class="c-border o-ptb-10 o-plr-12 l-flex-RC l-flex-w o-w" style="padding-bottom: 0;min-height: 36px; width: 70%;">
-          <!-- @click="noticeClk({ item, index }, 1)" -->
           <div class="c-border l-flex-RC o-p-3 c-color-f o-mr-10 o-mb-10"
             style="background: #e59a6d; border: 1px solid #e59a6d" v-for="(item, index) in tagList" :key="index">
             <span class="o-mr-3">{{ item.name }}</span>
             <van-icon @click.stop="delTag(item, index)" name="clear" />
           </div>
-          <!-- <div
-            class="c-border l-flex-RC o-p-3 o-mb-10"
-            @click="noticeClk(null, 2)"
-          >
-            <van-icon name="add" />
-            <span class="o-mr-3">{{ $t("device.tagSet.tag") }}</span>
-          </div> -->
         </div>
         <div @click="submitClk" class="submitBtn o-ml-10">
           <van-button round type="primary">{{

+ 15 - 15
src/views/device/tax/index.vue

@@ -3,11 +3,13 @@
     <s-header :name="$t('remote.C29')" :noback="false" />
 
     <!-- 设备名称标题 -->
-    <div class="device-header">
-      <div class="vertical-indicator"></div>
-      <h3 class="device-name">
-        {{ $t("device.equipmentName") }}:{{ deviceName }}
-      </h3>
+    <div class="device-card">
+      <div class="device-header">
+        <van-icon name="desktop-o" class="icon" />
+        <h3 class="device-name">
+          {{ equipmentName }}
+        </h3>
+      </div>
     </div>
 
     <!-- 税收设置卡片 -->
@@ -81,11 +83,11 @@ export default {
     const { t } = useI18n();
     const route = useRoute();
     const deviceId = ref(route.query.deviceId);
-    const deviceName = ref(route.query.name);
+    const equipmentName = ref(route.query.name);
     const deviceDetal = ref(null);
 
     const taxStatus = ref(false);
-    const taxRate = ref(100.00);
+    const taxRate = ref(100.0);
 
     onMounted(async () => {
       await getDeviceInfo();
@@ -125,7 +127,7 @@ export default {
         });
     };
 
-    const changeTaxRate = async() => {
+    const changeTaxRate = async () => {
       showConfirmDialog({
         title: t("device.operationConfirmation"),
         message: t("device.pleaseConfirmAgainWhetherToOperate"),
@@ -145,7 +147,7 @@ export default {
     };
 
     return {
-      deviceName,
+      equipmentName,
       taxStatus,
       taxRate,
       handleSubmit,
@@ -174,12 +176,10 @@ export default {
     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;
+    
+    .icon {
+      font-size: 18px;
+      color: #4d6add;
       margin-right: 10px;
     }
 

+ 9 - 9
src/views/device/toDaySugarList.vue

@@ -4,11 +4,11 @@
     <s-header :name="$t('device.todaysSugarList')" :noback="false"></s-header>
 
     <div class="content-container">
-      <div class="device-card" v-if="deviceDetail">
+      <div class="device-card" v-if="equipmentName">
         <div class="device-header">
-          <div class="header-indicator"></div>
+          <van-icon name="desktop-o" class="icon" />
           <h3 class="device-name">
-            {{ $t("device.equipmentName") }}:{{ deviceDetail?.name || "-" }}
+            {{ equipmentName }}
           </h3>
         </div>
       </div>
@@ -223,6 +223,7 @@ export default {
     const route = useRoute();
     const deviceId = route.query.deviceId;
     const clientId = route.query.clientId;
+    const equipmentName = route.query.name;
     const deviceDetail = ref(null);
     const loading = ref(false);
     const finished = ref(false);
@@ -454,6 +455,7 @@ export default {
       handleStartConfirm,
       handleEndConfirm,
       handleExport,
+      equipmentName,
     };
   },
   components: {
@@ -485,12 +487,10 @@ export default {
       display: flex;
       align-items: center;
 
-      .header-indicator {
-        width: 3px;
-        height: 20px;
-        background: #4d6add;
-        margin-right: 12px;
-        border-radius: 2px;
+      .icon {
+        font-size: 18px;
+        color: #4d6add;
+        margin-right: 10px;
       }
 
       .device-name {

+ 13 - 16
src/views/device/viewLogs/index.vue

@@ -3,11 +3,13 @@
     <s-header :name="$t('device.viewLogs')" :noback="false" />
 
     <!-- 设备名称标题 -->
-    <div class="device-header">
-      <div class="vertical-indicator"></div>
-      <h3 class="device-name">
-        {{ $t("device.equipmentName") }}:{{ deviceName }}
-      </h3>
+    <div class="device-card">
+      <div class="device-header">
+        <van-icon name="desktop-o" class="icon" />
+        <h3 class="device-name">
+          {{ equipmentName }}
+        </h3>
+      </div>
     </div>
 
     <!-- 操作卡片 -->
@@ -111,18 +113,15 @@ import { $M_ExportFile } from "@/common/js/utils";
 import { showFailToast, showToast } from "vant";
 import { useRoute } from "vue-router";
 import dateUtil from "@/utils/dateUtil";
-// import { styleUrl } from "../../../common/js/utils";
-// import {useI18n} from "vue-i18n";
 
 export default {
   components: {
     sHeader,
   },
   setup() {
-    // const { t } = useI18n();
     const route = useRoute();
     const deviceId = route.query.deviceId;
-    const deviceName = ref("");
+    const equipmentName = ref("");
     const deviceDetail = ref(null);
     const showPicker = ref(false);
     const downloading = ref(false);
@@ -154,7 +153,7 @@ export default {
     onMounted(async () => {
       // 加载样式
       await getDeviceDetailFun();
-      deviceName.value = route.query.name;
+      equipmentName.value = route.query.name;
     });
 
     // 选择时间
@@ -311,7 +310,7 @@ export default {
       fileName,
       message,
       channelType,
-      deviceName,
+      equipmentName,
     };
   },
 };
@@ -339,11 +338,9 @@ export default {
   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;
+  .icon {
+    font-size: 18px;
+    color: #4d6add;
     margin-right: 10px;
   }
 

+ 17 - 7
src/views/distributionSet/detail.vue

@@ -7,12 +7,9 @@
       <div class="detail-container">
         <!-- 客户ID输入区域 -->
         <div class="input-section">
+          <van-icon name="desktop-o" class="icon" />
           <template v-if="clientId">
-            <van-field
-              disabled
-              v-model="cofficentForm.clientId"
-              :label="$t('distributionSet.addDist.clientId')"
-            />
+            <van-field disabled v-model="cofficentForm.clientId" />
           </template>
           <template v-else>
             <van-field
@@ -47,7 +44,7 @@
         <!-- 信息展示区域 -->
         <div class="info-section">
           <div class="section-title">
-            <van-icon name="todo-list-o" size="20" />
+            <van-icon name="todo-list-o" size="22" class="section-icon" />
             {{
               proportionCheck
                 ? $t("distributionSet.addDist.pendingRecord")
@@ -547,10 +544,18 @@ export default {
 }
 
 .input-section {
-  padding: 10px;
+  padding: 5px;
+  display: flex;
+  align-items: center;
 
   border-bottom: 1px solid @border-color;
 
+  .icon {
+    font-size: 18px;
+    color: @primary-color;
+    margin-right: 10px;
+  }
+
   .field-icons {
     display: flex;
     gap: 8px;
@@ -570,6 +575,11 @@ export default {
 .info-section {
   padding: 16px;
 
+  .section-icon {
+    color: @primary-color;
+    margin-right: 10px;
+  }
+
   .section-title {
     padding: 12px 0;
     font-weight: 500;

+ 5 - 55
src/views/forgetPassword.vue

@@ -8,21 +8,6 @@
 
       <!-- 找回密码表单 -->
       <van-form @submit="forgetPasswordSubmit" class="password-form">
-        <!-- 用户名输入 -->
-        <van-field
-          v-model="username"
-          name="username"
-          :placeholder="$t('forgetPassword.usernamePlaceholder')"
-          :rules="[
-            { required: true, message: $t('forgetPassword.usernameRequired') },
-          ]"
-          label=""
-          class="form-field"
-        >
-          <template #left-icon>
-            <van-icon name="user-o" size="20" class="field-icon" />
-          </template>
-        </van-field>
 
         <!-- 选择找回方式 -->
         <div class="recovery-methods">
@@ -47,18 +32,6 @@
             </van-radio>
 
             <van-radio
-              name="2"
-              shape="square"
-              icon-size="20"
-              checked-color="@theme-color"
-            >
-              <div class="radio-option">
-                <van-icon name="envelop-o" size="20" class="radio-icon" />
-                <span>{{ $t("forgetPassword.emailChina") }}</span>
-              </div>
-            </van-radio>
-
-            <van-radio
               name="1"
               shape="square"
               icon-size="20"
@@ -66,7 +39,7 @@
             >
               <div class="radio-option">
                 <van-icon name="envelop-o" size="20" class="radio-icon" />
-                <span>{{ $t("forgetPassword.emailAbroad") }}</span>
+                <span>{{ $t("forgetPassword.email") }}</span>
               </div>
             </van-radio>
           </van-radio-group>
@@ -91,9 +64,9 @@
           </van-field>
         </div>
 
-        <div class="contact-input" v-if="ifForeign === '2'">
+        <div class="contact-input" v-else>
           <p class="method-title">
-            {{ $t("forgetPassword.emailWordSpanChina") }}
+            {{ $t("forgetPassword.emailRequired") }}
           </p>
           <van-field
             v-model="email"
@@ -110,23 +83,6 @@
           </van-field>
         </div>
 
-        <div class="contact-input" v-if="ifForeign === '1'">
-          <p class="method-title">{{ $t("forgetPassword.emailWordSpan") }}</p>
-          <van-field
-            v-model="email"
-            name="email"
-            :placeholder="$t('forgetPassword.emailPlaceholder')"
-            :rules="[
-              { required: true, message: $t('forgetPassword.emailRequired') },
-            ]"
-            class="form-field"
-          >
-            <template #left-icon>
-              <van-icon name="envelop-o" size="20" class="field-icon" />
-            </template>
-          </van-field>
-        </div>
-
         <!-- 验证码输入 -->
         <div class="verification-code">
           <van-field
@@ -178,7 +134,6 @@ import { sentForgetCode, checkForgetCode } from "@/service/forgetPassword";
 
 export default {
   setup() {
-    const username = ref(""); // 用户名
     const ifForeign = ref("0"); // 手机号&邮箱状态
     const email = ref(""); // 邮箱
     const phone = ref(""); // 手机号
@@ -190,14 +145,11 @@ export default {
     // 发送验证码
     const seedVerCode = async () => {
       const { data } = await sentForgetCode({
-        username: username.value,
-        ifForeign: ifForeign.value,
         phoneOrEmail: ifForeign.value === "0" ? phone.value : email.value,
-        hostName: "Sunzee",
       });
       if (data.code === "00000") {
         showToast("验证码发送成功");
-        verCodeTime.time = 3 * 60;
+        verCodeTime.time = 60;
         verCodeTimeInterval();
       } else {
         showFailToast(data.message);
@@ -216,7 +168,6 @@ export default {
     // 验证-表单
     const forgetPasswordSubmit = async () => {
       const { data } = await checkForgetCode({
-        ifForeign: ifForeign.value,
         phoneOrEmail: ifForeign.value === "0" ? phone.value : email.value,
         code: code.value,
       });
@@ -224,7 +175,7 @@ export default {
         showToast("校验成功");
         router.push({
           path: "/changepassword",
-          query: { name: username.value },
+          query: { name: data.data },
         });
       } else {
         showFailToast(data.message);
@@ -247,7 +198,6 @@ export default {
 
     return {
       ...toRefs(verCodeTime),
-      username,
       ifForeign,
       phone,
       email,

+ 21 - 12
src/views/purse/index.vue

@@ -2,7 +2,7 @@
   <div class="wallet-page">
     <!-- 导航栏 -->
     <s-header name="我的钱包" :noback="false" :isBorder="false"></s-header>
-    
+
     <div class="wallet-content">
       <!-- 新增提示栏 -->
       <van-notice-bar
@@ -94,7 +94,11 @@
         <div class="bank-cards">
           <!-- 已绑卡状态 -->
           <div class="bank-card" v-if="hasBankCard">
-            <div @click="jumpTo(user.payPlatform === '1'? '/huifuBind': '/joinPayBind')">
+            <div
+              @click="
+                jumpTo(user.payPlatform === '1' ? '/huifuBind' : '/joinPayBind')
+              "
+            >
               <div class="card-header">
                 <van-icon name="card" size="20" />
                 <span>已绑定</span>
@@ -113,7 +117,13 @@
           </div>
 
           <!-- 未绑卡状态 -->
-          <div class="bank-card empty-state" @click="jumpTo(user.payPlatform === '1'? '/huifuBind': '/joinPayBind')" v-else>
+          <div
+            class="bank-card empty-state"
+            @click="
+              jumpTo(user.payPlatform === '1' ? '/huifuBind' : '/joinPayBind')
+            "
+            v-else
+          >
             <div class="empty-content">
               <p class="empty-title">尚未绑定银行卡</p>
               <p class="empty-desc">绑定后可享受快捷支付服务</p>
@@ -182,7 +192,12 @@ import {
 } from "@/service/huifuMch";
 import { getLoginUser } from "../../common/js/utils";
 import { useRouter } from "vue-router";
-import { showConfirmDialog, showFailToast, showSuccessToast, showToast } from "vant";
+import {
+  showConfirmDialog,
+  showFailToast,
+  showSuccessToast,
+  showToast,
+} from "vant";
 import { useI18n } from "vue-i18n";
 
 export default {
@@ -263,7 +278,7 @@ export default {
           message: "提现需要先绑定银行卡,是否立即绑定?",
           confirmButtonColor: "#4d6add",
         }).then(() => {
-          router.push("/settlement");
+          router.push(user.payPlatform === "1" ? "/huifuBind" : "/joinPayBind");
         });
         return;
       }
@@ -271,13 +286,7 @@ export default {
         bankCardInfo.value.settMode === 1 ||
         bankCardInfo.value.settType === 1
       ) {
-        showConfirmDialog({
-          title: "未开启手动提现",
-          message: "当前银行卡已开启自动结算,是否切换成手动提现?",
-          confirmButtonColor: "#4d6add",
-        }).then(() => {
-          router.push("/settlement");
-        });
+        showToast("当前银行卡为自动结算,请先切换成手动提现");
         return;
       }
 

File diff suppressed because it is too large
+ 0 - 1161
src/views/settlement/index.vue