You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
346 lines
8.9 KiB
346 lines
8.9 KiB
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,
|
|
});
|
|
}
|
|
},
|
|
},
|
|
});
|
|
|