xiaohaizhao пре 2 месеци
родитељ
комит
97610b21f2
2 измењених фајлова са 55 додато и 39 уклоњено
  1. 2 2
      App.vue
  2. 53 37
      pages/select/accessories.vue

+ 2 - 2
App.vue

@@ -14,8 +14,8 @@ export default {
 				if (res.code == 1) {
 					uni.removeStorageSync('siteP');
 					uni.setStorageSync("siteP", res.data)
-					let currentPages = getCurrentPages()[getCurrentPages().length - 1];
-					if (currentPages.route == 'pages/login/login') uni.redirectTo({
+					let currentPages = getCurrentPages().pop();
+					if (currentPages.route == 'pages/login/login' || currentPages.$page.fullPath == "/pages/login/login") uni.redirectTo({
 						url: '/pages/index/index',
 					});
 				}

+ 53 - 37
pages/select/accessories.vue

@@ -16,25 +16,44 @@
     </My_listbox>
     <view v-else class="bom">
         <view class="left">
-
             <view class="class1" :class="active.class1 == index ? 'class1active' : ''" @click="changeClass1(index)"
                 v-for="(item, index) in bomList" :key="item.plm_bomid" hover-class="navigator-hover">
                 {{ item.bomname }}
             </view>
-
         </view>
 
         <view class="right">
-            <view class="select" v-if="bomList[active.class1].subdep.length">
-                <up-select v-model:current="active.class2" :label="bomList[active.class1].subdep[active.class2].bomname"
-                    :options="bomList[active.class1].subdep" @select="selectClass2" labelName="bomname" />
-                <up-select v-if="bomList[active.class1].subdep[active.class2].subdep.length"
-                    v-model:current="active.class3"
-                    :label="bomList[active.class1].subdep[active.class2].subdep[active.class3].bomname"
-                    :options="bomList[active.class1].subdep[active.class2].subdep" @select="selectClass3"
-                    labelName="bomname" />
-            </view>
-
+            <My_listbox v-if="isBom" ref="listBox" :pullDown="false">
+                <up-collapse :value="collapse1" @change="changeCollapse1($event)">
+                    <up-collapse-item :ref="el => {
+                        if (el) {
+                            collapseRefs['collapse' + item.plm_bomid] = el
+                        }
+                    }" :cellCustomStyle="{
+                        backgroundColor: '#fff',
+                    }" v-for="item in bomList[active.class1].subdep" :key="item.plm_bomid" :title="item.bomname"
+                        :name="item.plm_bomid">
+                        <up-collapse @change="changeCollapse($event, item.plm_bomid)" v-if="item.subdep.length"
+                            :name="item.plm_bomid">
+                            <up-collapse-item :cellCustomStyle="{
+                                backgroundColor: '#fff',
+                            }" :ref="el => {
+                                if (el) {
+                                    collapseRefs['collapse' + item.plm_bomid] = el
+                                }
+                            }" v-for="item1 in bomList[active.class1].subdep[active.class2].subdep"
+                                :key="item1.plm_bomid" :title="item1.bomname" :name="item1.plm_bomid">
+                                <showList v-if="item1.items.length" size="small" :result="resultIds" :list='item1.items'
+                                    @onClick="onSelect" />
+                            </up-collapse-item>
+                        </up-collapse>
+
+                        <showList v-if="item.items.length" size="small" :result="resultIds" :list='item.items'
+                            @onClick="onSelect" />
+                    </up-collapse-item>
+                </up-collapse>
+                <view style="height: 200rpx;" />
+            </My_listbox>
         </view>
     </view>
     <view class="footer">
@@ -43,10 +62,25 @@
 </template>
 
 <script setup>
-import { ref, reactive, getCurrentInstance, computed } from 'vue';
+import { ref, reactive, getCurrentInstance, nextTick } from 'vue';
 import { onLoad } from '@dcloudio/uni-app';
 import showList from "./accessoriesList.vue";
 
+const collapseRefs = ref({})
+const collapse1 = ref([])
+
+function changeCollapse1(e) {
+    collapse1.value = e.filter(v => v.status == 'open').map(v => v.name)
+}
+
+function changeCollapse(e, id) {
+    setTimeout(() => {
+        nextTick(() => {
+            collapseRefs.value['collapse' + id].init()
+        });
+    }, 300);
+}
+
 const { $Http } = getCurrentInstance().proxy;
 const listBox = ref(null);
 const isBom = ref(false);
@@ -105,16 +139,6 @@ onLoad((options) => {
     })
 })
 
-function selectClass2(index) {
-    console.log(index)
-    active.class2 = index;
-    active.class3 = 0;
-}
-
-function selectClass3(index) {
-    active.class3 = index;
-}
-
 const bomList = ref([
     {
         "bom": [
@@ -763,17 +787,18 @@ function processBomData(originalData) {
 
     // 2. 递归处理节点
     const processNode = (node) => {
+        node.items = node.items || [];
+        node.subdep = node.subdep || [];
+        if (node.items.length == 0 && node.subdep.length == 0) return null;
         // 创建新节点副本
         const newNode = { ...node };
         // 处理子节点
-        if (node.subdep && node.subdep.length > 0) {
-            newNode.subdep = node.subdep.map(subNode => processNode(subNode));
-        }
+        if (node.subdep.length) newNode.subdep = node.subdep.map(subNode => processNode(subNode)).filter(subNode => subNode !== null);
         return newNode;
     };
 
     // 3. 处理所有一级分类节点
-    return topLevelNodes.map(node => processNode(node));
+    return topLevelNodes.map(node => processNode(node)).filter(node => node !== null);
 }
 
 
@@ -828,7 +853,6 @@ function getList(init = false) {
     .left {
         width: 250rpx;
         background: #fff;
-        margin-right: 20rpx;
         flex-shrink: 0;
 
         .class1 {
@@ -862,15 +886,7 @@ function getList(init = false) {
     .right {
         flex: 1;
 
-        .select {
-            display: flex;
-            justify-content: space-around;
-            align-items: center;
-            height: 90rpx;
-            width: 100%;
-            background: #fff;
-            padding-right: 30rpx;
-        }
+
     }
 }