import { wxRequestPost } from "@utils/promise-wx-api"; import animeBehavior from "@mixins/anime"; let tempReslove = () => {}; const app = getApp(); Component({ behaviors: [animeBehavior], properties: { gridIdList: { type: Array, value: [], }, showName: { type: String, value: "", }, }, data: { hidden: true, agencyLoading: false, // 可选区域 agencyGridList: { // agencyId: "", // agencyName: "", // gridList: [ // { // gridId: "", // gridName: "", // }, // ], // subAgencyGridList: [], }, }, lifetimes: { async attached() { await app.doAfterLogin(); this.getAgencyData(); }, detached() {}, }, methods: { show(needRefresh = false) { this.setData({ hidden: false, }); if (needRefresh) { this.getAgencyData(); } return new Promise((reslove) => { tempReslove = reslove; }); }, async hide() { this.animeFadeOut("#root"); await this.animeFadeOutDown("#wrap"); this.setData({ hidden: true }); }, confirm() { this.hide(); return tempReslove({ type: "confirm", data: this.getSelectedGrid(), }); }, cancel() { this.hide(); return tempReslove({ type: "cancel", data: null, }); }, // 统计获得当前选中的网格 getSelectedGrid() { const { agencyGridList } = this.data; let gridIdList = [], gridNameList = []; const fn = (data, needName = true) => { if (data.selectedAll && !data.isNone && needName) { gridNameList.push(data.agencyName); needName = false; } data.gridList.forEach((item) => { if (item.selected) { gridIdList.push(item.gridId); if (!data.selectedAll) { gridNameList.push(item.gridName); } } }); data.subAgencyGridList.forEach((item) => { fn(item, needName); }); }; fn(agencyGridList); return { gridIdList, showName: gridNameList.join("、"), }; }, // 统计组织是否全选 computeSelectedAll(agencyGridList) { const fn = (obj) => { let selectedAll = true; if (!obj.gridList.every((item) => item.selected)) { selectedAll = false; } obj.subAgencyGridList.forEach((item) => { if (!fn(item)) { selectedAll = false; } }); obj.selectedAll = selectedAll; return selectedAll; }; fn(agencyGridList); return agencyGridList; }, // 切换选中某个网格 shiftSelectGrid(e) { const gridId = e.currentTarget.dataset.gridId || e.detail.gridId; const { agencyGridList } = this.data; const fn = (obj) => { obj.gridList.forEach((item) => { if (item.gridId === gridId) { item.selected = !item.selected; } }); obj.subAgencyGridList.forEach((item) => { fn(item); }); }; fn(agencyGridList); this.computeSelectedAll(agencyGridList); this.setData({ agencyGridList }); }, // 切换全选某个组织 shiftSelectAgency(e) { const agencyId = e.currentTarget.dataset.agencyId || e.detail.agencyId; const { agencyGridList } = this.data; const fn = (obj) => { if (agencyId === obj.agencyId) { let selectedAll = !obj.selectedAll; const fn2 = (obj, selectedAll) => { obj.gridList.forEach((item) => { item.selected = selectedAll; }); obj.subAgencyGridList.forEach((item) => { fn2(item, selectedAll); }); }; fn2(obj, selectedAll); } obj.subAgencyGridList.forEach((item) => { fn(item); }); }; fn(agencyGridList); this.computeSelectedAll(agencyGridList); this.setData({ agencyGridList }); }, // 初始化接口数据,添加属性 iniAgencyDataAddSelected(obj) { const { gridIdList } = this.data; // 初始化数据:添加"网格是否选中"字段 const fn = (obj) => { if (!Array.isArray(obj.gridList)) { obj.gridList = []; } obj.gridList.forEach((item) => { if (gridIdList.indexOf(item.gridId) !== -1) { item.selected = true; } else { item.selected = false; } }); if (!Array.isArray(obj.subAgencyGridList)) { obj.subAgencyGridList = []; } obj.subAgencyGridList.forEach((item) => { fn(item); }); }; fn(obj); return obj; }, // 初始化接口数据,过滤空组织 iniAgencyDataFilterNoneAgency(obj) { // 初始化数据:添加"网格是否选中"字段 const fn = (obj) => { obj.isNone = true; if (obj.gridList.length > 0) { obj.isNone = false; } obj.subAgencyGridList.forEach((item) => { if (!fn(item)) { obj.isNone = false; } }); return obj.isNone; }; fn(obj); // 初始化数据:添加"网格是否选中"字段 const fn2 = (obj) => { obj.subAgencyGridList = obj.subAgencyGridList.filter((item) => { if (!obj.isNone) { fn2(item); } return !obj.isNone; }); }; fn2(obj); return obj; }, // 获取当前组织信息 async getAgencyData() { this.setData({ agencyLoading: true, }); const url = "data/aggregator/org/agencygridlist"; const { data: { data: { code, data }, }, msg, } = await wxRequestPost( url, {}, { // isMock: true, // isQuiet: true } ); this.setData({ agencyLoading: false, }); if (msg === "success" && code === 0) { let agencyGridList = data.agencyGridList || data; agencyGridList = this.iniAgencyDataAddSelected(agencyGridList); agencyGridList = this.iniAgencyDataFilterNoneAgency(agencyGridList); agencyGridList = this.computeSelectedAll(agencyGridList); console.log(agencyGridList); this.setData({ agencyGridList, }); } }, }, });