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.
277 lines
6.7 KiB
277 lines
6.7 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: "",
|
|
},
|
|
},
|
|
|
|
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,
|
|
});
|
|
}
|
|
},
|
|
},
|
|
});
|
|
|