/**
* initData组件 - 初始化数据组件
* 功能:处理登录后的用户数据初始化,包括社区信息加载、权限加载等
* @param {Object} vc - 框架核心对象
*/
(function (vc) {
vc.extends({
data: {
initDataInfo: {
loginUsers: [], // 登录用户列表,支持多用户选择
pageUrl: '' // 登录后跳转的页面URL
}
},
/**
* 组件初始化方法
* 在组件创建时自动调用,这里为空实现
*/
_initMethod: function () {
},
/**
* 组件事件初始化方法
* 注册组件事件监听器,处理外部事件通知
*/
_initEvent: function () {
// 监听initData组件的loadCommunityInfo事件,用于处理登录后的社区信息加载
vc.on('initData', 'loadCommunityInfo', function (_param) {
// 将参数中的登录用户列表和页面URL保存到组件数据中
$that.initDataInfo.loginUsers = _param.loginUsers;
$that.initDataInfo.pageUrl = _param.url;
// 如果有多个登录用户,打开选择弹框让用户选择
if ($that.initDataInfo.loginUsers.length > 1) {
$that._initOpenModal();
return;
}
// 如果只有一个登录用户,直接初始化用户信息
$that._initLoginUserInfo($that.initDataInfo.loginUsers[0]);
})
},
methods: {
/**
* 初始化打开用户选择弹框
* 当存在多个登录用户时,显示选择界面让用户选择要使用的账号
*/
_initOpenModal: function () {
// 构建用户选择表格的HTML内容
var content = '
';
content += '
';
content += '
';
// 使用layer.open打开用户选择弹框
layer.open({
type: 1, // 1表示页面层
title: '请选择账号', // 弹框标题
content: content, // 弹框内容,即上面构建的HTML
area: ['600px', '400px'], // 弹框大小
btn: ['确定', '取消'], // 弹框按钮
// 确定按钮回调函数
yes: function (index, layero) {
// 获取用户选择的radio按钮
let selected = document.querySelector('input[name="selectedItem"]:checked');
if (selected) {
// 解析选中的值,获取用户信息
let selectedData = JSON.parse(selected.value);
// 初始化选中的用户信息
$that._initLoginUserInfo(selectedData);
} else {
// 如果没有选择,提示用户
vc.toast('请选择');
}
layer.close(index); // 关闭弹框
},
// 取消按钮回调函数
btn2: function (index, layero) {
layer.close(index); // 关闭弹框
}
});
},
/**
* 初始化登录用户信息
* @param {Object} _user - 用户信息对象,包含token等关键信息
*/
_initLoginUserInfo: function (_user) {
// 将用户token保存到缓存中,供其他组件使用
vc.saveData('hc_accessToken', {
token: _user.token
});
// 验证用户是否有权限访问门店
$that._validateHasStore();
},
/**
* 加载社区信息
* 从服务器获取用户所属的社区列表,并设置当前社区
*/
_loadCommunityInfo: function () {
// 请求参数
let param = {
params: {
_uId: 'ccdd00opikookjuhyyttvhnnjuuu', // 用户ID标识
page: 1, // 页码
row: 3 // 每页记录数
}
};
// 调用HTTP API获取社区列表
vc.http.apiGet('/community.listMyEnteredCommunitys',
param,
// 请求成功回调
function (json, res) {
let _json = JSON.parse(json);
// 如果返回码为0,表示请求成功
if (_json.code == 0) {
let _communityInfos = _json.communitys;
// 如果有社区信息,设置当前社区和社区列表
if (_communityInfos && _communityInfos.length > 0) {
vc.setCurrentCommunity(_communityInfos[0]);
vc.setCommunitys(_communityInfos);
} else {
// 如果没有社区信息,提示用户
vc.toast('运营团队未分配小区,请联系运营团队');
return;
}
// 跳转到指定页面
vc.jumpToPage($that.initDataInfo.pageUrl);
}
},
// 请求失败回调
function () {
// 无论失败与否,都跳转到指定页面
vc.jumpToPage($that.initDataInfo.pageUrl);
}
);
},
/**
* 验证用户是否有权限访问门店
* 调用API检查用户所属门店信息
*/
_validateHasStore: function () {
// 请求参数
let param = {
params: {
_uId: 'ccdd00opikookjuhyyttvhnnjuuu' // 用户ID标识
}
};
// 调用HTTP API查询用户所属门店
vc.http.apiGet('/query.store.byuser',
param,
// 请求成功回调
function (json, res) {
if (res.status == 200) {
// 如果请求成功,加载用户权限
$that._loadStaffPrivileges();
} else {
// 如果请求失败,提示错误信息
vc.toast(json);
}
},
// 请求失败回调
function (e, res) {
console.log('请求失败处理', e);
// 提示错误信息
vc.toast(e);
}
);
},
/**
* 加载员工权限
* 获取当前用户的操作权限列表,并保存到缓存中
*/
_loadStaffPrivileges: function (_param) {
// 请求参数
let param = {
params: {
a: 'HC' // 应用标识
}
};
// 发送get请求获取用户权限
vc.http.apiGet('/query.user.privilege',
param,
// 请求成功回调
function (json) {
let _json = JSON.parse(json);
// 提取权限ID列表
let _privilege = [];
_json.datas.forEach(item => {
_privilege.push(item.pId);
});
// 将权限列表保存到缓存中
vc.saveData('hc_staff_privilege', _privilege);
// 加载社区信息
$that._loadCommunityInfo();
},
// 请求失败回调
function () {
console.log('请求失败处理');
});
},
}
});
})(window.vc);