浏览代码

feat:“添加DIY花型功能,优化子商家修改功能”

soobin 1 年之前
父节点
当前提交
0d09bb896d

二进制
src/assets/device/diyFlowers/S01.png


二进制
src/assets/device/diyFlowers/S02.png


二进制
src/assets/device/diyFlowers/S03.png


二进制
src/assets/device/diyFlowers/S04.png


二进制
src/assets/device/diyFlowers/S05.png


二进制
src/assets/device/diyFlowers/S06.png


二进制
src/assets/device/diyFlowers/S07.png


二进制
src/assets/device/diyFlowers/S08.png


二进制
src/assets/device/diyFlowers/S09.png


二进制
src/assets/device/diyFlowers/T01.png


二进制
src/assets/device/diyFlowers/T02.png


二进制
src/assets/device/diyFlowers/T03.png


二进制
src/assets/device/diyFlowers/T04.png


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

@@ -1392,6 +1392,15 @@
     "successfully": "Add successfully",
     "failed": "Add failure"
   },
+  "DIYFlower": {
+    "openStatus": "DIY pattern function switch status: On",
+    "closeStatus": "DIY pattern function switch status: Off",
+    "shape": "Shape",
+    "sugar": "Sugar",
+    "tips": "Remind",
+    "content": "Do you want to switch?",
+    "successfully": "Successfully sent, please wait a few seconds and re-enter"
+  },
   "Account operation": "Account operation",
   "Discount code": "Discount code",
   "Alarm history": "Alarm history",

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

@@ -1408,6 +1408,15 @@
     "successfully": "添加成功",
     "failed": "添加失败"
   },
+  "DIYFlower": {
+    "openStatus": "DIY花型功能开关状态:开启",
+    "closeStatus": "DIY花型功能开关状态:关闭",
+    "shape": "形状",
+    "sugar": "糖",
+    "tips": "提醒",
+    "content": "是否切换开关?",
+    "successfully": "发送成功,请等待几秒后重新进入查看"
+  },
   "账户操作": "账户操作",
   "优惠码": "优惠码",
   "报警历史": "报警历史",

+ 3 - 1
src/main.js

@@ -4,7 +4,7 @@ import {
   AddressList, Field, CellGroup, Cell, SwipeCell, Icon, Stepper, Card, Checkbox, CheckboxGroup, Button, Swipe, SwipeItem,
   PullRefresh, List, Tab, Tabs, SubmitBar, Toast, Skeleton, RadioGroup, Radio, NoticeBar, ActionSheet, Cascader, Col, Row,
   Slider, DatetimePicker, Switch, Calendar, Picker, Uploader, Tag, DropdownMenu, DropdownItem, Notify, ConfigProvider, NavBar,
-  Area, Popover
+  Area, Popover, Collapse, CollapseItem
 } from 'vant';
 import { Image as VanImage } from 'vant';
 import App from './App.vue'
@@ -82,6 +82,8 @@ app.use(ActionBarButton)
   .use(NavBar)
   .use(Area)
   .use(Popover)
+  .use(Collapse)
+  .use(CollapseItem)
   
 
 app.use(router)

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

@@ -175,4 +175,19 @@ export function customLogo(params) {
 // 日志下载
 export function downloadLog(params) {
   return axios.get(`/SZWL-SERVER/tEquipment/downloadLog?${stringToUrl(params)}`,{responseType:'blob', timeout: 12000});
+}
+
+// 获取DIY花型列表信息
+export function selectDIYFlowers(params) {
+    return axios.get(`/SZWL-SERVER/tEquipment/selectDIYFlowers?${stringToUrl(params)}`);
+}
+
+// 修改DIY花型功能开关状态
+export function updateDIYFlowerStatus(params) {
+    return axios.get(`/SZWL-SERVER/tEquipment/updateDIYFlowerStatus?${stringToUrl(params)}`);
+}
+
+// 修改DIY花型的形状或是否显示
+export function updateDIYProductShow(params) {
+    return axios.post(`/SZWL-SERVER/tEquipment/updateDIYProductShow`, params);
 }

+ 19 - 2
src/views/accountPer/add.vue

@@ -11,7 +11,7 @@
         <van-field v-model="password" name="password" type="password" :label="$t('accountPer.passwordLabel')"
           :placeholder="$t('accountPer.passwordPlaceholder')" 
           :rules="[
-            { required: true, message: $t('accountPer.passwordPlaceholder') },
+            { required: havePassword, message: $t('accountPer.passwordPlaceholder') },
           ]"
           />
         <van-field v-model="name" name="name" :label="$t('accountPer.nameLabel')"
@@ -30,7 +30,7 @@
           </div>
           <div class="van-cell__value van-field__value">
             <div class="van-field__body">
-              <van-switch v-model="isEnabled" /><span>{{
+              <van-switch v-model="isEnabled" class="o-mr-10"/><span>{{
                 $t("accountPer.startOrNot")
               }}</span>
             </div>
@@ -108,6 +108,7 @@ export default {
       equipmentIdShow.value = false;
       equipmentIdText.value = selectedOptions[0].text;
     };
+    const havePassword = ref(true);
     let addParams = reactive({
       username: "",
       password: "",
@@ -136,8 +137,10 @@ export default {
         addParams.isEnabled = accoutPerSet.isEnabled;
         addParams.roleList = accoutPerSet.roleList[0];
         addParams.equipmentIds = accoutPerSet.equipmentIds;
+        havePassword.value = false;
       } else {
         pageTitle.value = t("accountPer.addAccount");
+        havePassword.value = true;
       }
       getSysRoleListFun();
       getEquipmentListFun();
@@ -169,6 +172,19 @@ export default {
           });
         }
         selEquipOptions.value = data.data;
+        if(addParams.equipmentIds != null) {
+          const list = addParams.equipmentIds.split(',');
+          const listName = [];
+          // 根据id找到对应的name
+          selEquipOptions.value.forEach(item => {
+            list.forEach(item1 => {
+              if (item.id === item1) {
+                listName.push(item.name);
+              }
+            })
+          })
+          cofficentForm.value.equipmentNames = listName.join(",");
+        }
       } else {
         Toast.fail(data.message);
       }
@@ -271,6 +287,7 @@ export default {
       selEquipConfirm,
       cofficentForm,
       busiEquipInpClk,
+      havePassword
     };
   },
 };

+ 2 - 2
src/views/device/deviceOper.vue

@@ -113,7 +113,7 @@
         <div class="operText">{{ $t("device.showGoods") }}</div>
       </div>
       <!-- DIY花型 -->
-      <!-- <div class="operItem" @click="diyFlowerClk()">
+      <!-- <div class="operItem" v-if="device.equimentType == 'MG320' || device.equimentType == 'MG330'" @click="diyFlowerClk()">
         <div class="operIcon">
           <img class="operImg" src="../../assets/device/operIcon/diyFlower.png" />
         </div>
@@ -213,7 +213,7 @@ export default {
     const diyFlowerClk = () => {
       router.push({
         path: "diyFlower",
-        query: { deviceId: device.value.id, name: device.value.name },
+        query: { deviceId: device.value.id, name: device.value.name, diyFlowerStatus: device.value.diyFlowerStatus, flower: device.value.flowers },
       });
     };
     const { t } = useI18n();

+ 148 - 79
src/views/device/diyFlower/index.vue

@@ -9,57 +9,52 @@
       </div>
     </div>
   </div>
-  <van-cell center title="DIY花型功能开关状态:" size="large" title-style="color: #404d74;">
+  <van-cell center :title="checked ? $t('DIYFlower.openStatus') : $t('DIYFlower.closeStatus')" size="large"
+    title-style="color: #404d74;">
     <template #right-icon>
-      <van-switch v-model="checked" size="24" />
+      <van-switch :model-value="checked" @update:model-value="updateStatus" size="24" />
     </template>
   </van-cell>
-  <!-- <div class="l-flex-between o-m-10">
-    <div>{{ $t('device.modifyPricePage.total') }}{{ tableData.length }}{{ $t('device.modifyPricePage.goods') }}
-    </div>
-  </div>
-  <van-row class="goods o-mlr-8" wrap="true">
-    <van-col v-for="(item, index) in tableData" :key="index" class="goodsCon o-mr-14" span="11">
-      <div class="l-flex-RC">
-        <van-image width="60" height="60" fit="contain" :src="showSugerPhoto(item)" />
-        <span class="o-ml-10" style="word-wrap: break-word; width: 50px;">{{ item.productName }}</span>
-        <van-switch class="o-ml-1" v-model="switchStates[index]" size="20px" active-color="#4dc294"
-          @change="handleChange(index)" />
-      </div>
-      <van-divider :style="{ color: '#1baeae', borderColor: '#1baeae', fontSize: '20px', fontWeight: 500 }" />
-    </van-col>
-  </van-row>
-  <div class="l-flex-center" style="margin: 16px">
+  <van-collapse v-if="checked" v-model="activeNames">
+    <van-collapse-item :title="$t('DIYFlower.shape')" name="1" size="large" title-style="color: #404d74;">
+      <van-row class="goods">
+        <van-col v-for="(item, index) in shapeData" :key="index" class="goodsCon o-mlr-5 o-mb-20" span="11">
+          <div class="l-flex-RC">
+            <van-image width="50" height="50" fit="contain" :src="showSugerPhoto(item)" />
+            <span class="o-ml-10" style="color: #000;word-wrap: break-word; width: 50px;">{{ item.name }}</span>
+            <van-checkbox class="o-ml-10" shape="square" v-model="shapeStates[index]" @change="shapeChange(index)" />
+          </div>
+        </van-col>
+      </van-row>
+    </van-collapse-item>
+    <van-collapse-item :title="$t('DIYFlower.sugar')" name="2" size="large" title-style="color: #404d74;">
+      <van-row class="goods">
+        <van-col v-for="(item, index) in sugarData" :key="index" class="goodsCon o-mlr-5 o-mb-20" span="11">
+          <div class="l-flex-RC">
+            <van-image width="50" height="50" fit="contain" :src="showSugerPhoto(item)" />
+            <span class="o-ml-10" style="color: #000;word-wrap: break-word; width: 50px;">{{ item.name }}</span>
+            <van-checkbox class="o-ml-10" shape="square" v-model="sugarStates[index]" @change="sugarChange(index)" />
+          </div>
+        </van-col>
+      </van-row>
+    </van-collapse-item>
+  </van-collapse>
+  <div class="l-flex-center" v-if="checked" style="margin: 16px">
     <van-button round block class="Btn" type="primary" native-type="submit" @click="updateShowGoods()">
       {{ $t('device.submitAndPushDeviceUpdates') }}
     </van-button>
-  </div> -->
+  </div>
 </template>
 
 <script>
 // 导入接口
-import {
-  selectProducts,
-  updateProductsShow
-} from '@/service/device/index';
+import { selectDIYFlowers, updateDIYFlowerStatus, updateDIYProductShow } from '@/service/device/index';
 import sHeader from "@/components/SimpleHeader";
-import {
-  ref,
-  reactive
-} from "@vue/reactivity";
-import {
-  onMounted
-} from '@vue/runtime-core';
-import {
-  useRoute,
-  useRouter
-} from 'vue-router';
-import {
-  Toast, Dialog
-} from 'vant';
-import {
-  useI18n
-} from "vue-i18n";
+import { ref, reactive } from "@vue/reactivity";
+import { onMounted } from '@vue/runtime-core';
+import { useRoute, useRouter } from 'vue-router';
+import { Dialog, Toast } from 'vant';
+import { useI18n } from "vue-i18n";
 import { styleUrl } from '../../../common/js/utils';
 export default {
   components: {
@@ -67,42 +62,50 @@ export default {
   },
   setup() {
     // 引入语言
-    const {
-      t
-    } = useI18n();
-    // 商品图片路径处理
-    const showSugerPhoto = (row) => {
-      let imgId = row.no;
-      if (imgId) {
-        return require(`../../../assets/order/spunSugar/goods/${imgId}.png`);
-      }
-      return imgId;
-    };
+    const { t } = useI18n();
     // 路由
     const route = useRoute();
     const router = useRouter();
     // 商品数据
-    const tableData = ref([]);
+    const shapeData = ref([]);
+    const sugarData = ref([]);
+
     const switchStates = ref([]);
+    const shapeStates = ref([]);
+    const sugarStates = ref([]);
+
     // 设备名称
     const equipmentName = ref('');
-
+    const checked = ref(false);
     // 刚进页面
     onMounted(() => {
       // 加载样式
       styleUrl('showGoods');
       const id = route.query.deviceId || "";
       const name = route.query.name || "";
-      if (id) {
+      const diyFlowerStatus = route.query.diyFlowerStatus || "";
+
+      if (diyFlowerStatus == "1") {
+        checked.value = true;
         cofficentForm.equipmentId = id;
-        equipmentName.value = name;
         getList();
       }
+      if (id) {
+        equipmentName.value = name;
+      }
 
     });
+    const showSugerPhoto = (row) => {
+      let imgId = row.no;
+      if (imgId) {
+        return require(`../../../assets/device/diyFlowers/${imgId}.png`);
+      }
+      return imgId;
+    };
     // 获取商品列表
     const getList = () => {
-      selectProducts({
+      const flower = route.query.flower || "";
+      selectDIYFlowers({
         equipmentId: cofficentForm.equipmentId
       }).then(res => {
         console.log('res', res)
@@ -113,14 +116,17 @@ 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);
+              flowerNumber(item, flower);
+              if (item.no.includes('T')) {
+                sugarData.value.push(item);
+                if (item.showType == null || item.showType == '0') {
+                  sugarStates.value.push(false);
+                } else {
+                  sugarStates.value.push(true);
+                }
               }
             })
           }
-          tableData.value = data;
         }
       })
     }
@@ -129,18 +135,72 @@ export default {
       equipmentId: '',
     });
 
+    // 判断花型数目
+    const flowerNumber = (item, number) => {
+      var shape = null;
+      if (number == '18') {
+        shape = ['S01', 'S02', 'S03'];
+      } else if (number == '22') {
+        shape = ['S01', 'S02', 'S03', 'S04'];
+      } else if (number == '26') {
+        shape = ['S01', 'S02', 'S03', 'S04', 'S05'];
+      } else if (number == '30') {
+        shape = ['S01', 'S02', 'S03', 'S04', 'S05', 'S06'];
+      } else {
+        shape = ['S01', 'S02', 'S03', 'S04', 'S05', 'S06', 'S07', 'S08', 'S09'];
+      }
+      if (shape.includes(item.no)) {
+        shapeData.value.push(item);
+        if (item.showType == null || item.showType == '0') {
+          shapeStates.value.push(false);
+        } else {
+          shapeStates.value.push(true);
+        }
+      }
+    }
+
     // 更改状态
-    const handleChange = (index) => {
-      // console.log(index);
-      // console.log(switchStates.value[index]);
-      if (switchStates.value[index]) {
-        tableData.value[index].showType = 0;
+    const shapeChange = (index) => {
+      if (shapeStates.value[index]) {
+        shapeData.value[index].showType = 1;
+      } else {
+        shapeData.value[index].showType = 0;
+      }
+      console.log("形状", shapeData.value[index]);
+    };
+    const sugarChange = (index) => {
+      if (sugarStates.value[index]) {
+        sugarData.value[index].showType = 1;
       } else {
-        tableData.value[index].showType = 1;
+        sugarData.value[index].showType = 0;
       }
-      // console.log(tableData.value[index]);
+      console.log("糖", sugarData.value[index]);
     };
 
+    const updateStatus = (newValue) => {
+      const params = {
+        equipmentId: cofficentForm.equipmentId,
+        DIYFlowerStatus: newValue ? '1' : '0',
+      };
+      Dialog.confirm({
+        title: t('DIYFlower.tips'),
+        message: t('DIYFlower.content'),
+      }).then(async () => {
+        const { data } = await updateDIYFlowerStatus(params);
+        if (data.code) {
+          // checked.value = newValue;
+          Toast(t('DIYFlower.successfully'));
+          setTimeout(() => {
+            router.go(-1);
+          }, 1500);
+        } else {
+          Toast.fail(data.message);
+        }
+      }).catch((error) => {
+        console.log(error);
+        Toast.fail(t('device.unknownError'));
+      });
+    }
 
     // 点击提交
     const updateShowGoods = () => {
@@ -148,37 +208,46 @@ export default {
         title: t('device.openRemind'),
         message: t('device.editCheck'),
       }).then(() => {
-        console.log(tableData.value);
-        var products = tableData.value;
+        var products = shapeData.value.concat(sugarData.value);
         var list = JSON.stringify(products);
-        updateProductsShow({
+        console.log(list);
+
+        updateDIYProductShow({
           productList: list
         }).then((res) => {
           console.log(res.data.message);
-          // Toast();
           Dialog.alert({
-            message: t('device.modificationSucceeded'),
+            message: t('DIYFlower.successfully'),
           }).then(() => {
             //返回上一页
             router.go(-1);
           });
-          setTimeout(() => {
-            getList();
-          }, 1000);
+          // setTimeout(() => {
+          //   getList();
+          // }, 1000);
         }).catch((error) => {
           console.log(error);
           Toast.fail(t('device.unknownError'));
         });
       });
     };
+    const activeNames = ref(['1', '2']);
+
     return {
       cofficentForm,
-      tableData,
-      showSugerPhoto,
+      shapeData,
+      sugarData,
       equipmentName,
       updateShowGoods,
       switchStates,
-      handleChange,
+      shapeStates,
+      sugarStates,
+      shapeChange,
+      sugarChange,
+      checked,
+      showSugerPhoto,
+      activeNames,
+      updateStatus
     };
   },
 };

+ 5 - 5
src/views/device/paramsSet/paramsSetInfo.vue

@@ -132,20 +132,20 @@ export default {
         Toast.fail(data.message);
       }
     }
-    const onUpdateValue = async (item, key) => {
+    const onUpdateValue = (item, key) => {
       console.log(item);
       const params = {
         id: deviceId,
         name: item.name,
-        val: item.val === '0' ? '1' : '0',
+        val: item.val == '0' ? '1' : '0',
       };
       Dialog.confirm({
         title: '提醒',
         message: '是否切换开关?',
-      }).then(() => {
-        checked.value[key] = !checked.value[key];
-        const { data } = updateParameters(params);
+      }).then(async () => {
+        const { data } = await updateParameters(params);
         if (data.code) {
+          checked.value[key] = !checked.value[key];
           Toast.success(t('device.modificationSucceeded'));
         } else {
           Toast.fail(data.message);

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

@@ -43,7 +43,8 @@
                 <span class="txt3" v-html="`${$t('merchantManage.creationTime')}:` + Format_time(item.createDate)"></span>
               </div>
               <div class="button-container">
-                <van-button v-if="user.type < 2" class="btn1" round type="success" @click="autoLogin(item.id)">切换登陆</van-button>
+                <van-button v-if="user.type < 2" class="btn1" round type="success"
+                  @click="autoLogin(item.id)">切换登陆</van-button>
                 <van-button class="btn1" round type="primary" @click="merchantSet(item)">详细信息</van-button>
               </div>
             </div>
@@ -121,13 +122,17 @@ export default {
         title: t('merchantManage.tips'),
         message: t('merchantManage.autoLogin'),
       }).then(() => {
-        autoLoginMerchant({ id }).then(res =>{
+        autoLoginMerchant({ id }).then(res => {
           if (res.data.code === "00000") {
             // 获取缓存的语言
             const curLang = localStorage.getItem("curLang");
+            const savedCredentials = localStorage.getItem('savedCredentials');
             // 清空缓存
             localStorage.clear();
             localStorage.setItem("curLang", curLang);
+            if (savedCredentials) {
+              localStorage.setItem('savedCredentials', savedCredentials);
+            }
             setLocal("loginUser", JSON.stringify(res.data.data));
             // console.log('loginUser JSON:', JSON.stringify(data.data));
             Toast.success(t('login.loginSucess'));

+ 3 - 1
src/views/user.vue

@@ -488,7 +488,9 @@ export default {
       // 清空缓存
       localStorage.clear();
       localStorage.setItem("curLang", curLang);
-      localStorage.setItem('savedCredentials', savedCredentials);
+      if (savedCredentials) {
+        localStorage.setItem('savedCredentials', savedCredentials);
+      }
       if (sys.value) {
         setTimeout(() => {
           router.push({