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