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: "", }, url: { type: String, value: "", } }, data: { hidden: true, agencyLoading: false, gridInfo: {}, // 可选区域 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() { const { gridIdList, gridInfo } = this.getSelectedGrid() if (gridIdList.length === 0 && Object.keys(gridInfo).length === 0) { return wx.showToast({ title: '未选择网格或组织', icon: 'none', duration: 1500 }) } 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 = [], gridInfo = {}; 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); gridInfo = item if (!data.selectedAll) { gridNameList = [item.gridName]; } } }); data.subAgencyGridList.forEach((item) => { if (item.selected) { gridInfo = item gridNameList = [item.agencyName]; } fn(item, needName); }); if (data.selected) { gridInfo = data gridNameList = [data.agencyName]; } }; fn(agencyGridList); // console.log('selectedstartgridInfo', gridInfo, agencyGridList); return { gridIdList, gridInfo, 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; } else item.selected = false }); obj.selected = false obj.subAgencyGridList.forEach((item) => { item.selected = false 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) { // console.log('selectedstart', obj.selected, obj); obj.selected = !obj.selected; // let selectedAll = false; // const fn2 = (obj, selectedAll) => { // obj.gridList.forEach((item) => { // item.selected = selectedAll; // }); // obj.subAgencyGridList.forEach((item) => { // fn2(item, selectedAll); // }); // }; // fn2(obj, selectedAll); // console.log('selected', obj.selected, obj); } else obj.selected = false obj.gridList.forEach((item) => { item.selected = false }); obj.subAgencyGridList.forEach((item) => { // item.selected = false 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 = []; } if (gridIdList.indexOf(obj.agencyId) !== -1) { obj.selected = true; } 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) => { if (gridIdList.indexOf(item.agencyId) !== -1) { item.selected = true; } else { item.selected = false; } fn(item); }); }; fn(obj); return obj; }, // 初始化接口数据,过滤空组织 iniAgencyDataFilterNoneAgency(obj) { // 初始化数据:添加"网格是否选中"字段 const { url } = this.data const fn = (obj) => { obj.isNone = true; if (obj.gridList.length > 0) { obj.isNone = false; } if (url) 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; }, formatArrObj(arr) { // console.log('obj', obj); let arr1 = [] if (arr && arr.length > 0) { arr1 = arr.map(item => { return { ...item, isOpt: true, gridList: [], subAgencyGridList: this.formatArrObj(item.subAgencyList) } }) } return arr1 }, // 获取当前组织信息 async getAgencyData() { this.setData({ agencyLoading: true, }); let { url } = this.data const _url = url || "data/aggregator/org/staffagencygridlist"; const { data: { data: { code, data }, }, msg, } = await wxRequestPost( _url, {}, { // isMock: true, // isQuiet: true } ); this.setData({ agencyLoading: false, }); if (msg === "success" && code === 0) { let agencyGridList = {} // console.log('agencyGridListobj', obj); if (url) { let obj = { ...data, isOpt: true, subAgencyGridList: this.formatArrObj(data.subAgencyList) } agencyGridList = { ...obj } } else agencyGridList = data.agencyGridList || data; // agencyGridList = data.agencyGridList || data; let agencyGridList1 = this.iniAgencyDataAddSelected({...agencyGridList}); let agencyGridList2 = this.iniAgencyDataFilterNoneAgency({...agencyGridList1}); let agencyGridList3 = this.computeSelectedAll({...agencyGridList2}); this.setData({ agencyGridList: agencyGridList3, }); } }, }, });