mcfxkh-Web/src/models/_/ws.js

139 lines
3.2 KiB
JavaScript
Raw Normal View History

2025-05-19 14:26:18 +08:00
import CachePromise from '../../utils/cachepromise';
import { httpget } from "../../utils/request";
import apiurl from "../apiurl";
import { Wata1Promise, Wata2Promise, Wata3Promise } from './base';
function sortWsTree(roots) {
const result = roots.sort((a, b) => {
const lenA = a.children ? a.children.length : 0;
const lenB = b.children ? b.children.length : 0;
return lenB - lenA;
});
for (const elem of roots) {
elem.children = sortWsTree(elem.children);
}
return result;
}
export const WsDataPromise = new CachePromise(
() => httpget(apiurl.ws.list).then(({ data }) => data).catch(() => null), 0);
export async function wsDataEx() {
const dataList = await WsDataPromise.get();
if (!dataList) {
return {};
}
const dataMap = {};
const ws2WataMap = {};
dataList.forEach(o => { dataMap[o.WSCD] = o; o.parents = []; });
dataList.forEach(o => {
let c = o;
while (c.PWSCD) {
if (c.WSCD === c.PWSCD || !dataMap[c.PWSCD]) {
console.log(JSON.stringify(c));
break;
}
if (o.parents.length > 5) {
break;
}
o.parents.push(c.PWSCD);
c = dataMap[c.PWSCD];
}
});
dataList.forEach((o) => {
if (o.WSTP !== 5) {
return;
}
let curObj = o;
let tryNumber = 10; // 避免死循环
while (curObj && curObj.PWSCD && --tryNumber) {
ws2WataMap[curObj.PWSCD] = ws2WataMap[curObj.PWSCD] || [];
ws2WataMap[curObj.PWSCD].push(o.WSCD);
curObj = dataMap[curObj.PWSCD];
}
});
return { dataMap, ws2WataMap, dataList };
}
export async function wsDataTree() {
const wsList = await WsDataPromise.get();
if (!wsList) {
return [];
}
const dataList = wsList
.map(({ WSCD, WSTP, NAME, PWSCD }) => ({ pId: PWSCD, WSCD, key: WSCD, title: NAME || WSCD, children: [], WSTP }));
const dataMap = {};
dataList.forEach((o) => {
dataMap[o.WSCD] = o;
});
dataList.forEach((o) => {
dataMap[o.pId] && dataMap[o.pId].children.push(o);
});
let rootList = dataList.filter(o => o.WSTP === 1);
if (rootList && rootList.length > 0) {
rootList = sortWsTree(rootList);
}
return rootList;
}
export const WsDataExPromise = new CachePromise(wsDataEx, 0);
export const WsDataTreePromise = new CachePromise(wsDataTree, 0);
export async function wataGet(wscd) {
const { data } = await httpget(apiurl.ws.wataGet, { wscd }) || {};
return data;
}
export async function wataUGet(index, WSCD) {
const wataulistPromise = [null, Wata1Promise, Wata2Promise, Wata3Promise][index];
if (!wataulistPromise) {
return null;
}
const data = await wataulistPromise.get();
if (!data) {
return null;
}
const feature = data?.features?.find(o => o.properties.WSCD === WSCD);
if (!feature) {
return null;
}
return { ...feature.properties, geometry: feature.geometry };
}
export async function wsStatIndex(wscd) {
const { data } = await httpget(apiurl.ws.statIndex, { wscd }) || {};
if (!data) {
//message.error('取得小流域统计列表失败');
return;
}
return data;
}
export async function wsStat(type, wscd) {
const { data } = await httpget(apiurl.ws.stat, { type, wscd }) || {};
if (!data) {
//message.error('取得小流域统计列表失败');
return;
}
return data;
}