zhangjq
2026-01-27 6f51f667ae7b13dca029045c221d0b1722cf98df
public/components/frame/initData/initData.js
@@ -1,31 +1,57 @@
/**
 * initData组件 - 初始化数据组件
 * 功能:处理登录后的用户数据初始化,包括社区信息加载、权限加载等
 * @param {Object} vc - 框架核心对象
 */
(function (vc) {
    vc.extends({
        data: {
            initDataInfo: {
                loginUsers: [],
                pageUrl: ''
                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 = '<div style="padding: 20px;">';
                content += '<table class="layui-table">';
                content += '<thead><tr><th>选择</th><th>账号</th><th>隶属</th><th>角色</th></tr></thead>';
                content += '<tbody>';
                // 遍历登录用户列表,生成表格行
                $that.initDataInfo.loginUsers.forEach(function (item) {
                    content += `<tr>
                    <td><input type="radio" name="selectedItem" value='${JSON.stringify(item)}'></td>
@@ -34,111 +60,157 @@
                    <td>${item.relCdName}</td>
                  </tr>`;
                });
                content += '</tbody></table>';
                content += '</div>';
                // 打开弹框
                // 使用layer.open打开用户选择弹框
                layer.open({
                    type: 1,
                    title: '请选择账号',
                    content: content,
                    area: ['600px', '400px'],
                    btn: ['确定', '取消'],
                    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',
                        page: 1,
                        row: 3
                        _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'
                        _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.jumpToPage(_param.url);
                        // 提示错误信息
                        vc.toast(e);
                    }
                );
            },
            /**
             * 加载员工权限
             * 获取当前用户的操作权限列表,并保存到缓存中
             */
            _loadStaffPrivileges: function (_param) {
                // 请求参数
                let param = {
                    params: {
                        a: 'HC'
                        a: 'HC' // 应用标识
                    }
                };
                //发送get请求
                // 发送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('请求失败处理');
                    });