四级帮扶所属区域数据加载方式更改

This commit is contained in:
xuchao
2026-01-10 20:18:09 +08:00
parent 43fb1550e4
commit e6c6d4fa23

View File

@@ -40,8 +40,15 @@
<!-- 所属区域下拉选择 --> <!-- 所属区域下拉选择 -->
<view class="search-item"> <view class="search-item">
<text class="label">所属区域</text> <text class="label">所属区域</text>
<uni-data-picker ref="picker" class="picker" placeholder="请选择所属区域" popup-title="请选择所属区域" :localdata="regions" v-model="formData.deptTags" <uni-data-picker
@change="onchange" > ref="picker"
class="picker"
placeholder="请选择所属区域"
popup-title="请选择所属区域"
:localdata="regions"
v-model="formData.deptTags"
:readonly="isRegionsLoading"
>
</uni-data-picker> </uni-data-picker>
</view> </view>
@@ -202,6 +209,7 @@ const getBackgroundStyle = (imageName) => ({
const trainVideoImgUrl=config.trainVideoImgUrl const trainVideoImgUrl=config.trainVideoImgUrl
const picker = ref(null) const picker = ref(null)
const isRegionsLoading = ref(true);
// 所属区域选项(可根据实际替换为动态数据) // 所属区域选项(可根据实际替换为动态数据)
const regions = ref([]) const regions = ref([])
@@ -235,10 +243,21 @@ onLoad(() => {
$api.myRequest("/system/user/login/user/info", {}, "GET", 9100, { $api.myRequest("/system/user/login/user/info", {}, "GET", 9100, {
Authorization: `Bearer ${uni.getStorageSync("fourLevelLinkage-token")}` Authorization: `Bearer ${uni.getStorageSync("fourLevelLinkage-token")}`
}).then(async (resData) => { }).then(async (resData) => {
try {
// 一次性递归加载完整树状结构
regions.value = await loadLevelData(resData.sysUser.dept.deptId);
isRegionsLoading.value = false;
} catch (error) {
isRegionsLoading.value = false;
uni.showToast({ title: '网络波动,所属区域数据加载失败', icon: 'none' });
}
await loadLevelData(resData.sysUser.dept.deptId); Promise.all([
getDictionary() getDictionary(),
getDataList('refresh'); getDataList('refresh')
]).catch(error => {
console.log('其他数据加载失败:', error);
});
}); });
}else{ }else{
navTo('/packageB/login2'); navTo('/packageB/login2');
@@ -264,96 +283,48 @@ function getTaskTypeLabelByValue(value) {
const item = taskTypeOptions.value.find(item => item.value === String(value)) const item = taskTypeOptions.value.find(item => item.value === String(value))
return item ? item.text : '暂无帮扶类型' return item ? item.text : '暂无帮扶类型'
} }
// 加载某一级的数据parentId 为空表示根) function getRequestHeader() {
async function loadLevelData(parentId,node) { return {
let header = { 'Authorization': uni.getStorageSync('fourLevelLinkage-token'),
'Authorization': uni.getStorageSync('fourLevelLinkage-token'), 'Content-Type': "application/x-www-form-urlencoded"
'Content-Type': "application/x-www-form-urlencoded" };
}; }
let params = { parentId };
try { async function loadLevelData(parentId) {
const resData = await $api.myRequest('/dispatch/dept/list', params, 'get', 9100, header); let header = getRequestHeader();
if(resData.data.length==0){ let params = { parentId };
picker.value.hide()
return
}
const formatted = (resData.data || []).map(item => ({
text: item.deptName,
value: item.tags,
deptId: item.deptId,
children: []
}));
if(node){
injectChildren(parentId, formatted);
}else{
regions.value=formatted
}
} catch (error) {
console.error("加载部门数据失败:", error);
uni.showToast({ title: '加载失败', icon: 'none' });
}
}
// 将子级数据注入到对应的父节点
function injectChildren(parentValue, childrenData) {
const findAndInject = (nodes) => {
for (let node of nodes) {
if (node.deptId === parentValue) {
// 如果 children 已存在且非空,避免重复加载
if (!node.children || node.children.length === 0) {
node.children = childrenData;
}
return true;
}
if (node.children && node.children.length > 0) {
if (findAndInject(node.children)) return true;
}
}
return false;
}
findAndInject(regions.value); try {
// 强制更新 const resData = await $api.myRequest('/dispatch/dept/list', params, 'get', 9100, header);
} const data = resData.data || [];
// 当用户选择时触发注意change 在每级选择后都会触发)
function onchange(e) { const formatted = await Promise.all(data.map(async (item) => {
const selectedValues = e.detail.value; try {
// formData.deptId=selectedValues.map(item => item.value).join(','); // 递归加载子节点
if (selectedValues.length === 0) return; const children = await loadLevelData(item.deptId);
// 获取最后一级选中的 value return {
const lastSelectedValue = selectedValues[selectedValues.length - 1]; text: item.deptName,
// 查找该节点是否有 children如果没有则尝试加载 value: item.tags,
const node = findNodeByValue(regions.value, lastSelectedValue); deptId: item.deptId,
if (node && (!node.children || node.children.length === 0)) { children: children
// 检查接口是否还有下一级(可通过接口返回判断,或先尝试加载) };
// 这里我们直接尝试加载下一级 } catch (error) {
loadLevelData(node.deptId , node); console.log(`加载部门${item.deptName}的子节点失败:`, error);
picker.value.show() // 单个节点加载失败不影响其他节点,返回该节点的基本信息
} return {
} text: item.deptName,
// 工具函数:根据 value 查找节点 value: item.tags,
function findNodeByValue(nodes, value) { deptId: item.deptId,
for (let node of nodes) { children: []
if (node.value === value.value) { };
return node; }
} }));
if (node.children && node.children.length > 0) {
const found = findNodeByValue(node.children, value); return formatted;
if (found) return found; } catch (error) {
} console.log(`加载父节点${parentId}的数据失败:`, error);
} return [];
return null; }
}
function getDeptOptions(){
let header={
'Authorization':uni.getStorageSync('fourLevelLinkage-token'),
'Content-Type': "application/x-www-form-urlencoded"
}
let params={
parentId:''
}
$api.myRequest('/dispatch/dept/list', params,'get',9100,header).then((resData) => {
});
} }
function getDataList(type = 'add') { function getDataList(type = 'add') {
let maxPage=Math.ceil(totalNum.value/pageSize.value) let maxPage=Math.ceil(totalNum.value/pageSize.value)