| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164 | // components/My_categoryListings/index.jsComponent({    /**     * 组件的属性列表     */    properties: {        height: {            type: String,            value: '500'        },        list: {            type: Array,            value: []        }    },    options: {        addGlobalClass: true    },    lifetimes: {        ready() {}    },    /**     * 组件的初始数据     */    data: {        systemIndex: 0, //系统index        portIndex: 0, //选择端口Index        moduleIndex: 0, //选择模块Index        portID: null, //端口ID        leftIntoViewId: null,        rightIntoViewId: null,        heightList: [],        modulesIndex: 0, //模块列表        scrollTop: 0,        checkList: [], //选中列表    },    observers: {        'list': function (list) {            console.log(12)            if (!list.length) return;            let data = list[0].clients[0];            let id = data.modules[0] ? "M" + data.modules[0].systemmoduleid : '';            if (this.data.portID == null) this.setData({                portID: 'S' + data.systemclientid,                leftIntoViewId: id,                rightIntoViewId: id            })            setTimeout(() => {                this.getAppsHeight();            }, 200)        }    },    /**     * 组件的方法列表     */    methods: {        /* 模块选择 */        checkBack(e) {            let list = this.data.checkList,                obj = {                    id: e.target.id - 0,                    arr: JSON.parse(JSON.stringify(e.detail.arr))                };            const index = list.findIndex(v => v.id == obj.id);            if (index == -1) {                list.push(obj)            } else {                list.splice(index, 1, obj)            }            let idList = e.detail.apps.map(v => v.systemappid);            const i = list.findIndex(v => v.id == obj.id);            list[i].arr = list[i].arr.filter(v => idList.includes(v.systemappid));            this.setData({                checkList: list            });            const mIndex = this.data.list[this.data.systemIndex].clients[this.data.portIndex].modules.findIndex(v => v.systemmoduleid == obj.id);            this.setData({                [`list[${this.data.systemIndex}].clients[${this.data.portIndex}].modules[${mIndex}].apps`]: e.detail.apps            })        },        backData() {            let newArr = [];            this.data.checkList.forEach(v => newArr = newArr.concat(v.arr));            return newArr;        },        /* 系统分类 */        changePortID(e) {            const {                dataset            } = e.currentTarget;            this.setData({                portID: e.target.id,                systemIndex: dataset.index,                portIndex: dataset.i,                modulesIndex: 0,                scrollTop: 0            });            setTimeout(() => {                this.getAppsHeight();            }, 300)        },        /* 点击模块分类 */        changeType(e) {            this.setData({                leftIntoViewId: e.target.id,                rightIntoViewId: e.target.id            })        },        getAppsHeight() {            const list = this.data.list[this.data.systemIndex].clients[this.data.portIndex].modules,                that = this;            let heightList = [];            let id = 'M' + list[0].systemmoduleid;            for (let i = 0; i < list.length; i++) {                let query = wx.createSelectorQuery().in(that).select('.' + 'M1' + list[i].systemmoduleid).boundingClientRect();                query.exec(res => {                    if (!res[0]) return this.getAppsHeight();                    heightList.push(res[0])                    if (list.length == heightList.length) {                        this.setData({                            heightList,                            leftIntoViewId: id,                            rightIntoViewId: id                        })                        let MyArr = that.selectAllComponents('.My_group');                        for (let k = 0; k < MyArr.length; k++) {                            MyArr[k].refactorDom();                        }                    }                })            };        },        viewScroll({            detail        }) {            let arr = this.data.heightList, //获取元素信息                id = this.data.leftIntoViewId, //获取当前左侧栏选项                i = arr.findIndex(v => v.id == id), //选项当前在数组中的索引号                scrollTop = detail.scrollTop,                //判断当前索引是不是数组最后一条数据,不是的话拿下一个索引的距顶距离                top = (i + 1 == arr.length) ? arr[i].top - 15 - arr[i].height : arr[i + 1].top - 15 - arr[i + 1].height;            if (scrollTop >= top) {                if (!arr[i + 1]) return;                if (id == arr[i + 1].id) return;                this.setData({                    leftIntoViewId: arr[i + 1].id                })            } else if (scrollTop < top) {                if (!arr[i - 1] || id == arr[0].id) return;                if (scrollTop < Math.abs(arr[i - 1].top - arr[i - 1].height / 2)) this.setData({                    leftIntoViewId: arr[i - 1].id                })            } else {                if (id == arr[1].id) return; //排除第一个            }        },    }})
 |