|
@@ -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;
|
|
|
- }
|
|
|
+
|
|
|
}
|
|
|
}
|
|
|
|