isdata-customer-sdk 0.2.76 → 0.2.77

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -0,0 +1 @@
1
+ {"version":3,"file":"chat.js","sources":["../../node_modules/querystringify/index.js","../../src/api/request.js","../../src/api/portal.js","../../src/api/iframe.js","../../src/api/utils.js","../../src/api/chat/ChatClientMgr.js","../../src/api/chat.js"],"sourcesContent":["'use strict';\n\nvar has = Object.prototype.hasOwnProperty\n , undef;\n\n/**\n * Decode a URI encoded string.\n *\n * @param {String} input The URI encoded string.\n * @returns {String|Null} The decoded string.\n * @api private\n */\nfunction decode(input) {\n try {\n return decodeURIComponent(input.replace(/\\+/g, ' '));\n } catch (e) {\n return null;\n }\n}\n\n/**\n * Attempts to encode a given input.\n *\n * @param {String} input The string that needs to be encoded.\n * @returns {String|Null} The encoded string.\n * @api private\n */\nfunction encode(input) {\n try {\n return encodeURIComponent(input);\n } catch (e) {\n return null;\n }\n}\n\n/**\n * Simple query string parser.\n *\n * @param {String} query The query string that needs to be parsed.\n * @returns {Object}\n * @api public\n */\nfunction querystring(query) {\n var parser = /([^=?#&]+)=?([^&]*)/g\n , result = {}\n , part;\n\n while (part = parser.exec(query)) {\n var key = decode(part[1])\n , value = decode(part[2]);\n\n //\n // Prevent overriding of existing properties. This ensures that build-in\n // methods like `toString` or __proto__ are not overriden by malicious\n // querystrings.\n //\n // In the case if failed decoding, we want to omit the key/value pairs\n // from the result.\n //\n if (key === null || value === null || key in result) continue;\n result[key] = value;\n }\n\n return result;\n}\n\n/**\n * Transform a query string to an object.\n *\n * @param {Object} obj Object that should be transformed.\n * @param {String} prefix Optional prefix.\n * @returns {String}\n * @api public\n */\nfunction querystringify(obj, prefix) {\n prefix = prefix || '';\n\n var pairs = []\n , value\n , key;\n\n //\n // Optionally prefix with a '?' if needed\n //\n if ('string' !== typeof prefix) prefix = '?';\n\n for (key in obj) {\n if (has.call(obj, key)) {\n value = obj[key];\n\n //\n // Edge cases where we actually want to encode the value to an empty\n // string instead of the stringified value.\n //\n if (!value && (value === null || value === undef || isNaN(value))) {\n value = '';\n }\n\n key = encode(key);\n value = encode(value);\n\n //\n // If we failed to encode the strings, we should bail out as we don't\n // want to add invalid strings to the query.\n //\n if (key === null || value === null) continue;\n pairs.push(key +'='+ value);\n }\n }\n\n return pairs.length ? prefix + pairs.join('&') : '';\n}\n\n//\n// Expose the module.\n//\nexports.stringify = querystringify;\nexports.parse = querystring;\n","import axios from \"axios\"\r\nimport qs from \"querystringify\"\r\n\r\nlet apiContextPath = \"\"\r\n// const onlineDevelopmentMode = process.env.VUE_APP_ONLINE_DEVELOPMENT_MODE === \"true\" || process.env.REACT_APP_ONLINE_DEVELOPMENT_MODE === \"true\"\r\n// if (process.env.NODE_ENV === \"development\" && !onlineDevelopmentMode) {\r\n// document.cookie =\r\n// \"token=eyJhbGciOiJIUzI1NiJ9.eyJsb2dpblRpbWVzdGFtcCI6MTY0NjcyMjI2ODY4NSwidXNlcklkIjoiMTIzNDU2Nzg5MCJ9.F8wr84ha-dW18J9wZOQeTXj55mXTdqKfLBeNlNueoLY\"\r\n// document.cookie =\r\n// \"refreshToken=eyJhbGciOiJIUzI1NiJ9.eyJsb2dpblRpbWVzdGFtcCI6MTY0NjcyMjI2ODY4Nn0.TEVE_nopHNZlvSQM_RUZrLcCzkaERiHo8nz0q-ksL3E\"\r\n// document.cookie = \"username=admin\"\r\n// document.cookie = \"windowOnline=true\"\r\n// apiContextPath = \"/api\"\r\n// }\r\nexport const getInstance = (prefix = \"\") => {\r\n if (prefix) {\r\n prefix.startsWith(\"/\") && (prefix = prefix.slice(1, prefix.length))\r\n prefix.endsWith(\"/\") && (prefix = prefix.slice(0, -1))\r\n }\r\n const instance = axios.create({\r\n baseURL: `${apiContextPath}/${prefix ? prefix + \"/\" : \"\"}sdata/rest`,\r\n timeout: 60000,\r\n validateStatus: function(status) {\r\n return status >= 200 && status < 300 // default\r\n },\r\n headers:\r\n (window.location.search && qs.parse(window.location.search).token) ||\r\n window.token\r\n ? { token: qs.parse(window.location.search).token || window.token }\r\n : {}\r\n })\r\n\r\n let oldPost = instance.post;\r\n\r\n instance.post = (url, data, config)=> {\r\n let prefix =window.VITE_SERVICE_BASE_URL || \"\";\r\n if (prefix) {\r\n let newUrl = prefix + url;\r\n return oldPost.call(instance, newUrl, data, config);\r\n }\r\n return oldPost.call(instance, url, data, config);\r\n };\r\n\r\n instance.defaults.headers.post[\"Content-Type\"] = \"application/json\"\r\n\r\n instance.interceptors.response.use(\r\n response => {\r\n let { data } = response\r\n if (typeof data === \"string\") {\r\n data = JSON.parse(data)\r\n }\r\n if (data && data.status !== 200 && !(data instanceof Blob)) {\r\n return Promise.reject(response)\r\n }\r\n if (data instanceof Blob) {\r\n response.data = data\r\n return response\r\n }\r\n\r\n response.data = data && data.result\r\n return response\r\n },\r\n error => {\r\n if (error.response && error.response.status === 401) {\r\n return\r\n }\r\n\r\n return Promise.reject(error.response)\r\n }\r\n )\r\n return instance\r\n}\r\nlet prefixPath = window.prefixPath || \"\"\r\n\r\nexport default getInstance(prefixPath)\r\n","import request from \"./request\";\r\n\r\n/**\r\n * 获取门户应用ID\r\n * @param {*} isPortalAction 是否是门户操作\r\n * 如果是门户操作,则从window.appSdk.getAppId()获取\r\n * 否则从sessionStorage中获取iportal_app_id,如果没有则从appVariables中获取\r\n * @param {*} isPortalAction\r\n * @returns\r\n */\r\nexport const getPoratlAppID = () => {\r\n let portal_app_id = window.sessionStorage.getItem(\"iportal_app_id\");\r\n if (!portal_app_id) {\r\n portal_app_id = getCurrentAppID();\r\n }\r\n return portal_app_id;\r\n};\r\n\r\nexport const getCurrentAppID = () => {\r\n let app_id = window.appSdk.getAppId() || window.localStorage.MobileAppId;\r\n return app_id;\r\n};\r\n\r\n/**\r\n * 取门户应用菜单数据\r\n * @param {*} user_id 用户ID\r\n * @param {*} group_id 组织ID\r\n * @param {*} isPortalAction\r\n * @returns\r\n */\r\nexport const getAppPortalMenuDatas = async (\r\n user_id,\r\n group_id,\r\n isPortalAction,\r\n appVariables\r\n) => {\r\n //获取门户应用ID\r\n let portal_app_id = getPoratlAppID();\r\n //获取当前用户在当前组织下的角色ID\r\n let roleList = await getRoleIDsByUserAndGroupID(\r\n user_id,\r\n portal_app_id,\r\n group_id\r\n );\r\n //获取当前组织下的门户菜单数据\r\n let portalMenuDatas = await getMenuDatasByGroupID(group_id, roleList);\r\n let app_id = window.appSdk.getAppId();\r\n let menuDatas = portalMenuDatas.filter((menuData) => {\r\n // 如果是门户菜单,则直接返回true\r\n // 否则根据app_id和portal_app_id进行过滤\r\n if (isPortalAction) {\r\n return true;\r\n } else {\r\n if (menuData.app_id == portal_app_id) {\r\n return true;\r\n } else {\r\n let types = menuData.children;\r\n let hasTargetMenu = false;\r\n if (types && types.length > 0) {\r\n types.forEach((type) => {\r\n let children = type.children;\r\n if (children && children.length > 0) {\r\n let newTypeChilden = children.filter((child) => {\r\n return child.app_id === app_id;\r\n });\r\n if (newTypeChilden && newTypeChilden.length > 0) {\r\n hasTargetMenu = true;\r\n }\r\n }\r\n });\r\n }\r\n return hasTargetMenu;\r\n }\r\n }\r\n });\r\n return menuDatas;\r\n};\r\n\r\n/**\r\n * 查询当前企业门户菜单信息\r\n * @param id GroupID\r\n *\r\n */\r\nexport const getMenuDatasByGroupID = async (group_id, role_ids) => {\r\n let queryData_groupData = {\r\n param: {\r\n id: group_id,\r\n },\r\n };\r\n let result = await request.post(\r\n `/dataservice/rest/orchestration/getMenuDatasByGroupID`,\r\n queryData_groupData\r\n );\r\n //所有的快捷访问菜单信息\r\n let portalMenuDatas = result.data.resultDatas;\r\n //所有的菜单类型\r\n let menuTypes = result.data.menuTypes;\r\n\r\n result = await request.post(\r\n `/dataservice/rest/orchestration/getPortalDefaultQuickMenus`,\r\n {}\r\n );\r\n\r\n let defaultMenuDatas = result.data.resultDatas;\r\n\r\n let defaultMenuType = result.data.menuTypes;\r\n\r\n let tempMenuDatas = portalMenuDatas.concat(defaultMenuDatas);\r\n\r\n let tempMenuType = menuTypes.concat(defaultMenuType);\r\n\r\n let finalMenuDatas = [];\r\n\r\n let finaMenuTypes = [];\r\n\r\n let tempMap = {};\r\n //缓存所有快捷访问菜单信息\r\n for (const tempData of tempMenuDatas) {\r\n let id = tempData.id;\r\n let isList =tempData.status==\"1\";\r\n // 只缓存启用状态的菜单\r\n if(!tempMap[id]&&isList)\r\n {\r\n finalMenuDatas.push(tempData);\r\n tempMap[id] = tempData;\r\n }\r\n }\r\n let tempTypeMap = {};\r\n //缓存所有菜单类型信息\r\n for (const tempType of tempMenuType) {\r\n let id = tempType.id;\r\n if(!tempTypeMap[id])\r\n {\r\n finaMenuTypes.push(tempType);\r\n tempTypeMap[id] = tempType;\r\n }\r\n }\r\n\r\n //如果有角色ID,则获取对应角色的快捷访问菜单映射信息\r\n if (role_ids && role_ids.length > 0) {\r\n //获取当前角色下对应的角色快捷访问菜单的映射信息(到应用自定义菜单)和快捷访问菜单的信息\r\n result = await getMenuMappingDatasByRoleIDs(role_ids, group_id);\r\n //对应角色的快捷访问菜单映射信息\r\n let quickMenuMappingDatas = result.data.quickMenuMappingDatas || [];\r\n let filterObjectMap = {};\r\n\r\n //缓存所有角色的快捷访问菜单映射信息\r\n for (const data of quickMenuMappingDatas) {\r\n let id = data.menu_mapping_id;\r\n let quickMenuMapping = tempMap[id];\r\n filterObjectMap[id] = quickMenuMapping;\r\n }\r\n //返回基于角色关联关系过滤后的快捷访问菜单信息\r\n return transformPortalData(finalMenuDatas, finaMenuTypes, filterObjectMap);\r\n } else {\r\n return transformPortalData(finalMenuDatas, finaMenuTypes, []);\r\n }\r\n};\r\n\r\n/**\r\n * 查询对应角色的门户快捷菜单映射信息\r\n * @param id GroupID\r\n *\r\n */\r\nexport const getMenuMappingDatasByRoleIDs = async (role_ids, group_id) => {\r\n let queryData_groupData = {\r\n param: {\r\n role_ids: role_ids,\r\n group_id: group_id,\r\n },\r\n };\r\n let result = await request.post(\r\n `/dataservice/rest/orchestration/getQuckMenuMappingsByRoleIDs`,\r\n queryData_groupData\r\n );\r\n //获取菜单数据\r\n return result;\r\n};\r\n\r\n/**\r\n * 校验SSO页面加载是否正确\r\n * @param id GroupID\r\n *\r\n */\r\nexport const validateSSOPageLoaded = async (app_id, appSecret, returnUrl) => {\r\n let queryData_groupData = {\r\n param: {\r\n app_id: app_id,\r\n appSecret: appSecret,\r\n returnUrl: returnUrl,\r\n },\r\n };\r\n let result = await request.post(\r\n `/dataservice/rest/orchestration/validateSSOPageLoaded`,\r\n queryData_groupData\r\n );\r\n let resultCount = result.data.count;\r\n //获取菜单数据\r\n return resultCount;\r\n};\r\n\r\n/**\r\n * 查询对应角色的门户快捷菜单信息\r\n * @param id GroupID\r\n *\r\n */\r\nexport const getRoleIDsByUserAndGroupID = async (user_id, app_id, group_id) => {\r\n let queryData = {\r\n param: {\r\n user_id: user_id,\r\n app_id: app_id,\r\n group_id: group_id,\r\n },\r\n };\r\n let result = await request.post(\r\n `/dataservice/rest/orchestration/getRoleIDsByUserAndGroupID`,\r\n queryData\r\n );\r\n let role_ids = result.data.portal_role_ids;\r\n //获取菜单数据\r\n return role_ids;\r\n};\r\n\r\n/**\r\n * 获取门户知识文档的url\r\n * @param {*} kb_doc_id\r\n * @returns\r\n */\r\nexport const getPortalDocmentInfo = async (kb_doc_id) => {\r\n let queryData = {\r\n param: {\r\n kb_doc_id: kb_doc_id,\r\n },\r\n };\r\n let result = await request.post(\r\n `/dataservice/rest/orchestration/getPortalDocmentInfoByKBID`,\r\n queryData\r\n );\r\n let docInfo = result.data.docInfo;\r\n return docInfo;\r\n};\r\n\r\n// export const getLoginPortalAccountKey = async (loginName,groupID) => {\r\n// let queryData = {\r\n// param: {\r\n// loginData: {\r\n// account: loginName,\r\n// group_id: groupID,\r\n// },\r\n// },\r\n// };\r\n// let result = await request.post(\r\n// `/dataservice/rest/orchestration/getLoginPortalAccountKey`,\r\n// queryData\r\n// );\r\n// return result;\r\n// };\r\n\r\n/**\r\n * 获取该平台菜单同祖先(直至根节点)得其他兄弟菜单\r\n * @param {*} menu_id \r\n * @returns \r\n */\r\nexport const getPlatformBortherMenusByMenuID =async (menu_id,role_ids,group_id) =>{\r\n let queryData_groupData = {\r\n \"param\": {\r\n \"menu_id\": menu_id,\r\n }\r\n };\r\n let result =await request.post(`/dataservice/rest/orchestration/getPlatformBortherMenusByMenuID`,queryData_groupData);\r\n let sysMenuDatas = result.data.menuDatas || [];\r\n \r\n //获取当前角色下对应的角色菜单权限的映射信息\r\n let roleMenuMappingDatas = await getPlatformMenuMappingsByRoleIDs(role_ids, group_id);\r\n let roleMenuMappingMap = {};\r\n for (const mappingData of roleMenuMappingDatas) {\r\n let menu_mapping_id = mappingData.menu_id;\r\n roleMenuMappingMap[menu_mapping_id] = mappingData;\r\n }\r\n let menuMaps = {};\r\n //缓存所有菜单信息\r\n for (const item of sysMenuDatas) {\r\n let id = item.id;\r\n let leaf_flag = item.leaf_flag;\r\n //如果是叶子节点 并且当前菜单ID在角色菜单映射信息中不存在,则跳过\r\n if(leaf_flag===1&&(!roleMenuMappingMap[id])){\r\n continue;\r\n }\r\n // 如果当前菜单ID在角色菜单映射信息中存在,则表示该角色有权限访问该菜单\r\n if (!menuMaps[id]) {\r\n // let icon =item.icon;\r\n let iconClass =\"el-icon-menu\";\r\n // if(icon){\r\n // let obj = JSON.parse(icon);\r\n // iconClass =obj?.url?`#${obj.url}`:\"el-icon-menu\";\r\n // }\r\n let tempItem = {\r\n id: item.id,\r\n index: item.id,\r\n name: item.name,\r\n isSys:true,\r\n iconClass: iconClass,\r\n actionType: item.action_type|| \"1\", // 默认值为1\r\n app_id: item.datapp_id,\r\n menu_id: item.id, \r\n url: item.url||\"\",\r\n children: item.children || [],\r\n sort: item.sort || 0,\r\n };\r\n menuMaps[id] = tempItem;\r\n }\r\n }\r\n for (const item of sysMenuDatas) {\r\n let parent_id = item.parent_id;\r\n if (!parent_id) continue;\r\n let parentItem = menuMaps[parent_id];\r\n if (parentItem) {\r\n let menuItem = menuMaps[item.id];\r\n if(!menuItem){\r\n continue;\r\n }\r\n parentItem.children.push(menuItem);\r\n }\r\n }\r\n let menuDatas = [];\r\n for (const key in menuMaps) {\r\n let item = menuMaps[key];\r\n if (item.children && item.children.length > 0) {\r\n menuDatas.push(item);\r\n let children = item.children;\r\n children.sort((data1, data2) => {\r\n if (Number.isNaN(data1.sort)) return 1;\r\n if (Number.isNaN(data2.sort)) return -1;\r\n return data1.sort - data2.sort;\r\n });\r\n }\r\n }\r\n //如果没有数据,说明只有一级节点父亲\r\n if(menuDatas.length==0){\r\n for (const key in menuMaps) {\r\n let item = menuMaps[key];\r\n if (item) {\r\n menuDatas.push(item);\r\n }\r\n }\r\n }\r\n menuDatas.sort((data1, data2) => {\r\n if (Number.isNaN(data1.sort)) return 1;\r\n if (Number.isNaN(data2.sort)) return -1;\r\n return data1.sort - data2.sort;\r\n });\r\n // console.log(\"getPlatformBortherMenusByMenuID\",menuDatas);\r\n //获取菜单数据\r\n return menuDatas;\r\n};\r\n\r\n\r\n\r\n/**\r\n * 通过角色IDS获取该平台菜单权限映射\r\n * @param {*} menu_id \r\n * @returns \r\n */\r\nexport const getPlatformMenuMappingsByRoleIDs =async (role_ids,app_id) =>{\r\n let queryData_groupData = {\r\n \"param\": {\r\n \"role_ids\": role_ids,\r\n \"app_id\":app_id\r\n }\r\n };\r\n let result =await request.post(`/dataservice/rest/orchestration/getPlatformMenuMappingsByRoleIDs`,queryData_groupData);\r\n let mappingDatas = result.data.mappingDatas;\r\n //获取菜单数据\r\n return mappingDatas;\r\n};\r\n\r\n\r\n/**\r\n * 转换门户菜单数据\r\n * @param {*} datas 所有的快捷菜单访问信息\r\n * @param {*} menuTypes 快捷访问菜单类型\r\n * @param {*} filterObjectMap 角色快捷菜单访问映射信息\r\n * @returns\r\n */\r\nconst transformPortalData = (datas, menuTypes, filterObjectMap) => {\r\n let menuMaps = {};\r\n let menuTypeMaps = {};\r\n let parentMaps = {};\r\n //缓存所有父亲菜单信息\r\n for (let key in filterObjectMap) {\r\n let item = filterObjectMap[key];\r\n if(!item) continue;\r\n let parent_id = item.parent_id;\r\n if (parent_id) {\r\n parentMaps[parent_id] = true;\r\n }\r\n }\r\n //缓存所有菜单信息\r\n for (const data of datas) {\r\n let id = data.id;\r\n let tempMenuData = {\r\n id: id,\r\n index: data.menu_id,\r\n name: data.title,\r\n sort: data.sort,\r\n actionType: data.actionType,\r\n url: data.url,\r\n iconClass: data.image?data.image:data.type == \"4\"?\"\":\"el-icon-menu\",\r\n parent_id: data.parent_id,\r\n children: [],\r\n app_id: data.app_id,\r\n menu_id: data.menu_id,\r\n beyond_type: data.menu_type ? data.menu_type : \"RJVIEW-OTHERS\",\r\n beyond_type_sort: data.menu_type_sort ? data.menu_type_sort : 999,\r\n type:\"MenuItem\",\r\n typeID:data.type,\r\n };\r\n //如果存在快捷菜单映射数据或者是主菜单入口\r\n //如果是主菜单或者存在快捷访问映射或者孩子存在快捷访问映射或者是应用默认的菜单,则纳入到菜单中\r\n if ((filterObjectMap&&filterObjectMap[id]) || data.type == \"4\" || parentMaps[id] || data.is_app_defalut==\"1\") {\r\n //TODO:判断是否有平台系统的menu_id权限,有可能有映射权限,但角色没有平台权限,则不显示\r\n menuMaps[id] = tempMenuData;\r\n }\r\n }\r\n //缓存所有菜单类型信息\r\n for (const menuData of menuTypes) {\r\n let id = menuData.id;\r\n menuTypeMaps[id] = menuData;\r\n }\r\n for (const data of datas) {\r\n let type = data.type;\r\n //5:子菜单入口\r\n if (type == \"5\") {\r\n let tempMenuData = menuMaps[data.id];\r\n //如果没有对应的菜单数据,则跳过\r\n if (!tempMenuData) continue;\r\n let parent_id = data.parent_id;\r\n let tempType = tempMenuData.beyond_type;\r\n // let tempType_sort =tempMenuData.beyond_type_sort;\r\n let tempParentMenu = menuMaps[parent_id];\r\n if (!tempParentMenu) continue;\r\n let parentTypes = tempParentMenu.children;\r\n let parentType = parentTypes.find((tempTypeItem) => {\r\n return tempTypeItem.id == tempType;\r\n });\r\n if (parentType) {\r\n let type_childens = parentType.children;\r\n type_childens.push(tempMenuData);\r\n tempMenuData.typeItem = parentType;\r\n } else {\r\n let menuTypeObj = menuTypeMaps[tempType];\r\n let parentType = menuTypeObj\r\n ? {\r\n id: tempType,\r\n index: tempType,\r\n name: menuTypeObj.title,\r\n children: [],\r\n sort: menuTypeObj.value,\r\n type:\"MenuType\",\r\n }\r\n : {\r\n id: tempType,\r\n index: tempType,\r\n name: \"其他\",\r\n children: [],\r\n sort: 999,\r\n type:\"MenuType\"\r\n };\r\n let type_childens = parentType.children;\r\n type_childens.push(tempMenuData);\r\n parentTypes.push(parentType);\r\n tempMenuData.typeItem = parentType;\r\n }\r\n }\r\n }\r\n const menuList = [];\r\n for (const data of datas) {\r\n let type = data.type;\r\n //4:主菜单入口\r\n if (type == \"4\") {\r\n let tempMenuData = menuMaps[data.id];\r\n //如果没有对应的菜单数据,则跳过\r\n if (!tempMenuData) continue;\r\n let menuTypes = tempMenuData.children;\r\n let count = 0;\r\n for (const menuType of menuTypes) {\r\n let type_childens = menuType.children;\r\n let tempCount = type_childens.length;\r\n count = count + tempCount;\r\n if (tempCount > 0) {\r\n break;\r\n }\r\n }\r\n //如果不是默认菜单,并且没有快捷访问权限,并且孩子没有快捷访问权限,则不显示\r\n if(data.is_app_defalut!=\"1\") {\r\n // 如果没有权限,也没有子菜单时 则跳过\r\n if(filterObjectMap&&!filterObjectMap[data.id]&&count==0) {\r\n continue;\r\n }\r\n }\r\n menuList.push(tempMenuData);\r\n let types = tempMenuData.children;\r\n types.sort((data1, data2) => {\r\n if (Number.isNaN(data1.sort)) return 1;\r\n if (Number.isNaN(data2.sort)) return -1;\r\n return data1.sort - data2.sort;\r\n });\r\n for (let typeItem of types) {\r\n let tempArrys = typeItem.children;\r\n tempArrys.sort((data1, data2) => {\r\n if (Number.isNaN(data1.sort)) return 1;\r\n if (Number.isNaN(data2.sort)) return -1;\r\n return data1.sort - data2.sort;\r\n });\r\n }\r\n }\r\n }\r\n menuList.sort((data1, data2) => {\r\n if (Number.isNaN(data1.sort)) return 1;\r\n if (Number.isNaN(data2.sort)) return -1;\r\n return data1.sort - data2.sort;\r\n });\r\n // console.log(menuList);\r\n return menuList;\r\n};\r\n\r\n/**\r\n * 转换门户用户快捷菜单数据\r\n * @param {*} quickDatas\r\n * @returns\r\n */\r\nexport const transformPortalQuickMenuDatas = (quickDatas,defaultDatas) => {\r\n quickDatas = quickDatas ? quickDatas : [];\r\n defaultDatas = defaultDatas ? defaultDatas : [];\r\n let tempDatas = quickDatas.concat(defaultDatas);\r\n let tempDatasMap = {};\r\n let finalMenuDatas = [];\r\n for (const item of tempDatas) {\r\n let id = item.id;\r\n if(!tempDatasMap[id]) {\r\n tempDatasMap[id] = item;\r\n finalMenuDatas.push(item);\r\n }\r\n }\r\n let quickMenuMaps = {};\r\n for (const data of finalMenuDatas) {\r\n let id = data.id;\r\n let tempMenuData = {\r\n id: id,\r\n label: data.title,\r\n sort: data.sort,\r\n children: [],\r\n parent_id: data.parent_id,\r\n type: data.type,\r\n };\r\n quickMenuMaps[id] = tempMenuData;\r\n }\r\n for (const data of finalMenuDatas) {\r\n let tempMenuData = quickMenuMaps[data.id];\r\n //5:子菜单入口\r\n if (tempMenuData.type == \"5\") {\r\n let parent_id = tempMenuData.parent_id;\r\n let tempParentMenu = quickMenuMaps[parent_id];\r\n if (tempParentMenu) {\r\n let parentChilden = tempParentMenu.children;\r\n parentChilden.push(tempMenuData);\r\n }\r\n }\r\n }\r\n const menuList = [];\r\n for (const data of finalMenuDatas) {\r\n let tempMenuData = quickMenuMaps[data.id];\r\n //4:主菜单入口\r\n if (tempMenuData.type == \"4\") {\r\n menuList.push(tempMenuData);\r\n let tempArrys = tempMenuData.children;\r\n tempArrys.sort((data1, data2) => {\r\n if (Number.isNaN(data1.sort)) return 1;\r\n if (Number.isNaN(data2.sort)) return -1;\r\n return data1.sort - data2.sort;\r\n });\r\n }\r\n }\r\n menuList.sort((data1, data2) => {\r\n if (Number.isNaN(data1.sort)) return 1;\r\n if (Number.isNaN(data2.sort)) return -1;\r\n return data1.sort - data2.sort;\r\n });\r\n return menuList;\r\n};\r\n\r\nexport const transformPortalSystemMenuDatas = (datas) => {\r\n let menuMaps = {};\r\n for (const data of datas) {\r\n let id = data.id;\r\n let tempMenuData = {\r\n id: id,\r\n label: data.name,\r\n sort: data.sort,\r\n icon: data.icon,\r\n children: [],\r\n app_id: data.datapp_id,\r\n parent_id: data.parent_id,\r\n leaf_flag: data.leaf_flag,\r\n };\r\n menuMaps[id] = tempMenuData;\r\n }\r\n for (const data of datas) {\r\n let leaf_flag = data.leaf_flag;\r\n //5:子菜单入口\r\n if (leaf_flag == 1) {\r\n let tempMenuData = menuMaps[data.id];\r\n let parent_id = data.parent_id;\r\n let tempParentMenu = menuMaps[parent_id];\r\n if (tempParentMenu) {\r\n let parentChilden = tempParentMenu.children;\r\n parentChilden.push(tempMenuData);\r\n }\r\n }\r\n }\r\n const menuList = [];\r\n for (const data of datas) {\r\n let leaf_flag = data.leaf_flag;\r\n //4:主菜单入口\r\n if (leaf_flag == 0) {\r\n let tempMenuData = menuMaps[data.id];\r\n menuList.push(tempMenuData);\r\n let tempArrys = tempMenuData.children;\r\n tempArrys.sort((data1, data2) => {\r\n if (Number.isNaN(data1.sort)) return 1;\r\n if (Number.isNaN(data2.sort)) return -1;\r\n return data1.sort - data2.sort;\r\n });\r\n }\r\n }\r\n menuList.sort((data1, data2) => {\r\n if (Number.isNaN(data1.sort)) return 1;\r\n if (Number.isNaN(data2.sort)) return -1;\r\n return data1.sort - data2.sort;\r\n });\r\n return menuList;\r\n};\r\n\r\n/**\r\n * 获取当前用户默认的门户页面ID\r\n *\r\n * 该方法用于获取当前用户在门户中的默认页面ID\r\n * @param {信息} userData\r\n * @returns\r\n */\r\nexport const getCurrentUserPortalPageID = async (userData) => {\r\n let queryData = {\r\n param: {\r\n userData: userData,\r\n },\r\n };\r\n let response = await request.post(\r\n `/dataservice/rest/orchestration/getPortalPageID`,\r\n queryData\r\n );\r\n let portal_id = response.data.portal_id;\r\n return portal_id;\r\n};\r\n\r\n/**\r\n * 获取当前用户默认的门户页面ID\r\n *\r\n * 该方法用于获取当前用户在门户中的默认页面ID\r\n * @param {信息} userData\r\n * @returns\r\n */\r\nexport const getCurrentUserPortalMapping = async (userData) => {\r\n let queryData = {\r\n param: {\r\n userData: userData,\r\n },\r\n };\r\n let response = await request.post(\r\n `/dataservice/rest/orchestration/getPortalMappingInfo`,\r\n queryData\r\n );\r\n let portal_id = response.data.portal_info;\r\n return portal_id;\r\n};\r\n\r\n/**\r\n * 获取当前用户默认的门户页面ID\r\n *\r\n * 该方法用于获取当前用户在门户中的默认页面ID\r\n * @param {信息} userData\r\n * @returns\r\n */\r\nexport const getPortalInfosByID = async (id) => {\r\n let queryData = {\r\n param: {\r\n id: id,\r\n },\r\n };\r\n let response = await request.post(\r\n `/dataservice/rest/orchestration/getPortalInfosByID`,\r\n queryData\r\n );\r\n let portalInfo = response.data.portalInfo;\r\n return portalInfo;\r\n};\r\n\r\n/**\r\n * 通过租户名称模糊匹配获取租户信息\r\n *\r\n * @param {名称信息} name\r\n * @returns\r\n */\r\nexport const getTenetInfoByName = async (name) => {\r\n let queryData = {\r\n param: {\r\n name: name,\r\n },\r\n };\r\n let response = await request.post(\r\n `/dataservice/rest/orchestration/getTenetInfoByName`,\r\n queryData\r\n );\r\n let resultDatas = response.data.resultDatas;\r\n return resultDatas;\r\n};\r\n\r\n/**\r\n * 获取当前用户在门户中的所有映射数据\r\n * @param {信息} data\r\n * @returns\r\n */\r\nexport const getUserAllMappngPortal = (data) => {\r\n let queryData = {\r\n param: {\r\n userData: data,\r\n },\r\n };\r\n return request.post(\r\n `/dataservice/rest/orchestration/getUserAllMappngPortal`,\r\n queryData\r\n );\r\n};\r\n\r\n/**\r\n * 获取用户关联门户关联映射信息\r\n * @param {信息} data\r\n * @returns\r\n */\r\nexport const getPortalUserMappingInfos = async (data) => {\r\n let queryData = {\r\n param: {\r\n operateData: data,\r\n },\r\n };\r\n let responseData = await request.post(\r\n `/dataservice/rest/orchestration/getPortalUserMappingInfos`,\r\n queryData\r\n );\r\n let userMappingData = responseData.data.portalMapping;\r\n return userMappingData;\r\n};\r\n\r\n/**\r\n * 通过页面ID获取页面配置\r\n * @param {信息} data\r\n * @returns\r\n */\r\nexport const getPortalPageConfig = async (pageID) => {\r\n let queryData = {\r\n param: {\r\n id: pageID,\r\n },\r\n };\r\n let pageConfigResponse = await request.post(\r\n `/dataservice/rest/orchestration/getPortalPageConfig`,\r\n queryData\r\n );\r\n let configStr = pageConfigResponse.data.portal_page_config || \"[]\";\r\n return configStr;\r\n};\r\n\r\n/**\r\n * 通过页面ID设置页面配置\r\n * @param {信息} data\r\n * @returns\r\n */\r\nexport const setPortalPageConfig = (configData) => {\r\n let queryData = {\r\n param: configData,\r\n };\r\n return request.post(\r\n `/dataservice/rest/orchestration/setPortalPageConfig`,\r\n queryData\r\n );\r\n};\r\n\r\n/**\r\n * 更新用户选择的门户\r\n * @param {信息} data\r\n * @returns\r\n */\r\nexport const updateUserSelectPortal = (data) => {\r\n let queryData = {\r\n param: {\r\n portalMappingData: data,\r\n },\r\n };\r\n return request.post(\r\n `/dataservice/rest/orchestration/updateUserSelectPortal`,\r\n queryData\r\n );\r\n};\r\n\r\n/**\r\n * 获取当前用户在门户中的默认页面ID\r\n *\r\n * 该方法用于获取当前用户在门户中的默认页面ID\r\n * @param {信息} userData\r\n * @returns\r\n */\r\nexport const getPortalPageMenuID = async (pageID, app_id) => {\r\n let queryData = {\r\n param: {\r\n id: pageID,\r\n appid: app_id,\r\n },\r\n };\r\n let response = await request.post(\r\n `/dataservice/rest/orchestration/getPortalPageMenuID`,\r\n queryData\r\n );\r\n let menu_id = response.data.menu_id;\r\n return menu_id;\r\n};\r\n\r\n// 查询门户映射应用信息\r\n// * @param appID 应用ID\r\n// * @param groupID 集团ID\r\nexport const getMappingAppInfoByID = async (appID, groupID) => {\r\n let queryData = {\r\n param: {\r\n appID: appID,\r\n groupID: groupID,\r\n },\r\n };\r\n let resultData = await request.post(\r\n `/dataservice/rest/orchestration/getPortalMappingAppInfoByID`,\r\n queryData\r\n );\r\n let appInfo = resultData.data.appInfo;\r\n return appInfo;\r\n};\r\n\r\n/**\r\n *\r\n * @returns 获取门户登录页面的公告信息\r\n */\r\nexport const getLoginPageNotices = async (groupID) => {\r\n let queryData = {\r\n param: {\r\n id: \"1005\",\r\n groupID: groupID, // 集团ID\r\n },\r\n };\r\n let resultData = await request.post(\r\n `/dataservice/rest/orchestration/getNoticeInfosByAppTypeID`,\r\n queryData\r\n );\r\n let noticeInfos = resultData.data.resultDatas;\r\n return noticeInfos;\r\n};\r\n\r\n/**\r\n * 获取对应租户的组织的公告信息\r\n * @param {*} groupID \r\n * @returns \r\n */\r\nexport const getPortalNotices = async(groupID) => {\r\n let queryData={\r\n \"param\":{\r\n \"id\":groupID\r\n }\r\n };\r\n let resultData = await request.post(`/dataservice/rest/orchestration/getNoticesInfosByGroupID`, queryData);\r\n return resultData;\r\n}\r\n\r\n/**\r\n * 获取门户单点登录接入Token\r\n * @param {*} appKey\r\n * @param {*} appSecret\r\n * @returns\r\n */\r\nexport const getPortalAccessToken = async (appKey, appSecret) => {\r\n let result = await request.get(\r\n `/appAuth/getAccessToken?appKey=${appKey}&appSecret=${appSecret}`\r\n );\r\n let token = result.data;\r\n return token;\r\n};\r\n\r\n/**\r\n * 通过code和接入Token获取用户身份信息\r\n * @param {*} code\r\n * @param {*} access_token\r\n * @returns\r\n */\r\nexport const getPortalUserInfo = async (code, access_token) => {\r\n let result = await request.get(\r\n `/systhirdapp/user/getUserByCode?code=${code}&access_token=${access_token}`\r\n );\r\n let data = result.data;\r\n return data;\r\n};\r\n\r\n/**\r\n * 通过用户ID,平台类型,租户ID获取用户IM的签名ID\r\n * @param {*} userID\r\n * @param {*} platType\r\n * @param {*} groupID\r\n * @returns\r\n */\r\nexport const getPortalUserSig = async (userID, platType, groupID) => {\r\n let queryData = {\r\n param: {\r\n userID: userID,\r\n im_type: platType,\r\n group_id: groupID,\r\n },\r\n };\r\n let result = await request.post(\r\n `/dataservice/rest/orchestration/getIMUserSigByID`,\r\n queryData\r\n );\r\n let sigID = result.data.userSig;\r\n return sigID;\r\n};\r\n\r\n/**\r\n * 通过租户ID获取门户应用的客户配置\r\n * @param {*} groupID\r\n * @returns\r\n */\r\nexport const getPortalAppCustomConfig = async (groupID) => {\r\n let requestData = {\r\n param: {\r\n groupID: groupID,\r\n },\r\n };\r\n let result = await request.post(\r\n `/dataservice/rest/orchestration/getPortalAppCustomConfig`,\r\n requestData\r\n );\r\n let appInfo = result.data.configInfo;\r\n return appInfo;\r\n};\r\n\r\n/**\r\n * 查询当前企业组织的集团组织ID\r\n * @param id 组织ID\r\n *\r\n */\r\nexport const queryGroupIDByOfficeId = async (id) => {\r\n let queryData_office = {\r\n param: {\r\n id: id,\r\n },\r\n };\r\n let result = await request.post(\r\n `/dataservice/rest/orchestration/getGroupIDByDptID`,\r\n queryData_office\r\n );\r\n let groupDptData = result.data.resultDptData;\r\n let group_id = groupDptData.id;\r\n return group_id;\r\n};\r\n\r\n/**\r\n * 查询app变量\r\n * @param id 组织ID\r\n *\r\n */\r\nexport const queryAppVariable = (name, appVariables) => {\r\n if (appVariables && appVariables.length > 0) {\r\n for (let i = 0; i < appVariables.length; i++) {\r\n if (appVariables[i].name == name) {\r\n return appVariables[i].default_value;\r\n }\r\n }\r\n }\r\n return \"\";\r\n};\r\n\r\nexport const getThirdAppPathByKey = async (appkey, appSecret, groupID) => {\r\n let requestData = {\r\n param: {\r\n appKey: appkey,\r\n appSecret: appSecret,\r\n groupID: groupID,\r\n },\r\n };\r\n let result = await request.post(\r\n `/dataservice/rest/orchestration/getThirdAppPathByKey`,\r\n requestData\r\n );\r\n let path = result.data.path;\r\n return path;\r\n};\r\n\r\nexport const queryAndStoreAppVariable = (name, appVariables) => {\r\n let value = window.sessionStorage.getItem(\"isdata_app_variable_\" + name);\r\n if (!value) {\r\n value = queryAppVariable(name, appVariables);\r\n if (value) {\r\n window.sessionStorage.setItem(\"isdata_app_variable_\" + name, value);\r\n }\r\n }\r\n return value;\r\n};\r\n\r\n/**\r\n * 添加或更新对象使用次数\r\n * @param {信息} data\r\n * @returns\r\n */\r\nexport const addObjectUsedTimes = (data) => {\r\n let queryData = {\r\n param: {\r\n operateData: data,\r\n },\r\n };\r\n return request.post(\r\n `/dataservice/rest/orchestration/addObjectUsedTimes`,\r\n queryData\r\n );\r\n};\r\n\r\n/**\r\n * 获取对象使用次数\r\n * @param {信息} data\r\n * @returns\r\n */\r\nexport const getObjectUseTimes = (data) => {\r\n let queryData = {\r\n param: {\r\n objectInfo: data,\r\n },\r\n };\r\n return request.post(\r\n `/dataservice/rest/orchestration/getObjectUseTimes`,\r\n queryData\r\n );\r\n};\r\n\r\n/**\r\n * 获取组件的页面ID\r\n * @param {信息} data\r\n * @returns\r\n */\r\nexport const getPageIDByComponentID = async (componentID) => {\r\n let queryData = {\r\n param: {\r\n componentID: componentID,\r\n },\r\n };\r\n let response = await request.post(\r\n `/dataservice/rest/orchestration/getPageIDByComponentID`,\r\n queryData\r\n );\r\n let pageID = response.data.page_id;\r\n return pageID;\r\n};\r\n\r\n/**\r\n * 通过账户名获取集团组织映射数据\r\n * @param {*} account\r\n * @returns\r\n */\r\nexport const getGroupMappingsByAccount = async (account) => {\r\n let queryData = {\r\n param: {\r\n account: account,\r\n },\r\n };\r\n let resultData = await request.post(\r\n `/dataservice/rest/orchestration/getGourpMappingsByAccountName`,\r\n queryData\r\n );\r\n let tenetGroupDatas = resultData.data.resultGroups;\r\n return tenetGroupDatas;\r\n};\r\n\r\n/**\r\n * 通过手机号获取集团组织映射数据\r\n * @param {*} phone \r\n * @returns \r\n */\r\nexport const getGourpMappingsByPhoneNumber = async (phone) => {\r\n let queryData = {\r\n param: {\r\n phone: phone,\r\n },\r\n };\r\n let resultData = await request.post(\r\n `/dataservice/rest/orchestration/getGourpMappingsByPhoneNumber`,\r\n queryData\r\n );\r\n let tenetGroupDatas = resultData.data.resultGroups;\r\n return tenetGroupDatas;\r\n};\r\n\r\n/**\r\n * 查询当前企业组织的集团组织ID\r\n * @param id 组织ID\r\n *\r\n */\r\nexport const queryGroupInfosByOfficeId = async (id) => {\r\n let queryData_office = {\r\n param: {\r\n id: id,\r\n },\r\n };\r\n let result = await request.post(\r\n `/dataservice/rest/orchestration/getGroupIDByDptID`,\r\n queryData_office\r\n );\r\n let groupDptData = result.data.resultDptData;\r\n return groupDptData;\r\n};\r\n\r\n/**\r\n * 查询当前企业组织信息\r\n * @param id 组织ID\r\n *\r\n */\r\nexport const getOfficeInfosByIDs = async (group_ids) => {\r\n let queryData_groupData = {\r\n param: {\r\n ids: group_ids,\r\n },\r\n };\r\n let resultData = await request.post(\r\n `/dataservice/rest/orchestration/getOfficeInfosByIDs`,\r\n queryData_groupData\r\n );\r\n let groupDatas = resultData.data.officeInfos;\r\n return groupDatas;\r\n};\r\n\r\n/**\r\n * 查询当前企业组织信息\r\n * @param id 组织ID\r\n *\r\n */\r\nexport const queryOfficeInfosById = async (officeID) => {\r\n let queryData = {\r\n param: {\r\n id: officeID,\r\n },\r\n };\r\n let resultData = await request.post(\r\n `/dataservice/rest/orchestration/getOfficeInfosByID`,\r\n queryData\r\n );\r\n let groupDptData = resultData.data.officeData;\r\n return groupDptData;\r\n};\r\n\r\n/**\r\n * 获取应用信息通过ID\r\n * @param {*} id\r\n * @returns\r\n */\r\nexport const getAPPInfosByID = async (id) => {\r\n let queryData = {\r\n param: {\r\n id: id,\r\n },\r\n };\r\n let resultData = await request.post(\r\n `/dataservice/rest/orchestration/getAPPInfosByID`,\r\n queryData\r\n );\r\n let groupDptData = resultData.data.appInfo;\r\n return groupDptData;\r\n};\r\n\r\nexport const getAllUserInfosByGroupID = async (groupID) => {\r\n let requestData = {\r\n param: {\r\n groupID: groupID,\r\n },\r\n };\r\n let result = await request.post(\r\n `/dataservice/rest/orchestration/getAllUserInfosByGroupID`,\r\n requestData\r\n );\r\n let data = result.data.resultDatas;\r\n return data;\r\n};\r\n\r\nexport const getChildrenOfficeInfosByID = async (officeID) => {\r\n let requestData = {\r\n param: {\r\n officeID: officeID,\r\n },\r\n };\r\n let result = await request.post(\r\n `/dataservice/rest/orchestration/getChildrenOfficeInfosByID`,\r\n requestData\r\n );\r\n let data = result.data.resultDatas;\r\n return data;\r\n};\r\n\r\nexport const getPojectDptsByUserAndGroupID = async (userID, groupID) => {\r\n let requestData = {\r\n param: {\r\n userID: userID,\r\n groupID: groupID,\r\n },\r\n };\r\n let result = await request.post(\r\n `/dataservice/rest/orchestration/getPojectDptsByUserAndGroupID`,\r\n requestData\r\n );\r\n let data = {\r\n dptDatas: result.data.officeDatas,\r\n userMappings: result.data.userMappings,\r\n };\r\n return data;\r\n};\r\n\r\n/**\r\n * 添加IM签名ID映射关系\r\n */\r\nexport const addIMMapping = async (userID, platType, groupID, sigID) => {\r\n let queryData = {\r\n param: {\r\n data: {\r\n userID: userID,\r\n im_type: platType,\r\n group_id: groupID,\r\n userSig: sigID,\r\n },\r\n },\r\n };\r\n let result = await request.post(\r\n `/dataservice/rest/orchestration/addIMMapping`,\r\n queryData\r\n );\r\n let resultData = result.data;\r\n return resultData;\r\n};\r\n\r\nexport const getAIRobotInfos = async (userID, groupID) => {\r\n let requestData = {\r\n param: {\r\n userID: userID,\r\n groupID: groupID,\r\n },\r\n };\r\n let result = await request.post(\r\n `/dataservice/rest/orchestration/getAIRobotInfos`,\r\n requestData\r\n );\r\n let infos = result.data.robotInfos;\r\n return infos;\r\n};\r\n\r\n/**\r\n * 添加IM签名ID映射关系\r\n */\r\nexport const updateIMMapping = async (userID, platType, groupID, sigID) => {\r\n let queryData = {\r\n param: {\r\n userID: userID,\r\n im_type: platType,\r\n groupID: groupID,\r\n userSig: sigID,\r\n },\r\n };\r\n let result = await request.post(\r\n `/dataservice/rest/orchestration/updateIMMapping`,\r\n queryData\r\n );\r\n let resultData = result.data;\r\n return resultData;\r\n};\r\n\r\n/**\r\n * 获取应用自定义数据\r\n * @param {*} appID\r\n * @returns\r\n */\r\nexport const getAppCustomData = async (appID) => {\r\n let requestData = {\r\n param: {\r\n appID: appID,\r\n },\r\n };\r\n let result = await request.post(\r\n `/dataservice/rest/orchestration/getAppCustomData`,\r\n requestData\r\n );\r\n let infos = result.data.customData;\r\n infos = infos ? JSON.parse(infos) : {};\r\n return infos;\r\n};\r\n\r\n/**\r\n * 获取集成应用的信息\r\n * @param {*} appID\r\n * @returns\r\n */\r\nexport const getIntegrateAppInfoByID = async (appID) => {\r\n let requestData = {\r\n param: {\r\n appID: appID,\r\n },\r\n };\r\n let result = await request.post(\r\n `/dataservice/rest/orchestration/getIntegrateAppInfoByID`,\r\n requestData\r\n );\r\n let appInfo = result.data.appInfo;\r\n return appInfo;\r\n};\r\n\r\n// 更新服务器i18n文本\r\nexport const savePortalI18nText=async(key, value,lang,beyondID,i18nType)=>{\r\n let app_id =getPoratlAppID();\r\n let requestData = {\r\n param: {\r\n key: key,\r\n value: value,\r\n appID:app_id,\r\n lang:lang,\r\n beyondID:beyondID,\r\n i18nType:i18nType\r\n },\r\n };\r\n let result = await request.post(\r\n `/dataservice/rest/orchestration/savePortalI18nText`,\r\n requestData\r\n );\r\n let resultData = result.data.resultData;\r\n return resultData;\r\n};\r\n\r\n\r\n// 通过账户名和租户获取手机号\r\nexport const getPhoneNumberByAccountName=async(accountName,groupID)=>{\r\n let requestData = {\r\n param:{\r\n accountName: accountName,\r\n groupID: groupID,\r\n }\r\n };\r\n let result = await request.post(\r\n `/dataservice/rest/orchestration/getPhoneNumberByAccountName`,\r\n requestData\r\n );\r\n let phone = result.data.phone;\r\n return phone;\r\n};\r\n","\r\nexport const addWindowTrustedOrigin = (origin) => {\r\n let SDATA_WINDOW_TRUSTED_ORIGINS = window.SDATA_WINDOW_TRUSTED_ORIGINS;\r\n if (!SDATA_WINDOW_TRUSTED_ORIGINS) window.SDATA_WINDOW_TRUSTED_ORIGINS = [];\r\n if (!SDATA_WINDOW_TRUSTED_ORIGINS.includes(origin)) {\r\n SDATA_WINDOW_TRUSTED_ORIGINS.push(origin);\r\n }\r\n}\r\nexport const removeWindowTrustedOrigin = (origin) => {\r\n let SDATA_WINDOW_TRUSTED_ORIGINS = window.SDATA_WINDOW_TRUSTED_ORIGINS;\r\n if (!SDATA_WINDOW_TRUSTED_ORIGINS) window.SDATA_WINDOW_TRUSTED_ORIGINS = [];\r\n let index = SDATA_WINDOW_TRUSTED_ORIGINS.indexOf(origin); // 查找元素在数组中的索引 \r\n if (index > -1) {\r\n SDATA_WINDOW_TRUSTED_ORIGINS.splice(index, 1); // 删除元素\r\n }\r\n}\r\n\r\nexport const addEventAction = (eventKey, eventAction) => {\r\n let sdataEventActions = window.sdataEventActions;\r\n if (!sdataEventActions) window.sdataEventActions = {};\r\n window.sdataEventActions[eventKey] = eventAction;\r\n}\r\n\r\nexport const removeEventAction = (eventKey) => {\r\n let sdataEventActions = window.sdataEventActions;\r\n if (!sdataEventActions) window.sdataEventActions = {};\r\n delete window.sdataEventActions[eventKey];\r\n}\r\n\r\nexport const initFrameWindowListener = () => {\r\n if(window.isFrameWindowInited) return;\r\n let SDATA_WINDOW_TRUSTED_ORIGINS = window.SDATA_WINDOW_TRUSTED_ORIGINS;\r\n if (!SDATA_WINDOW_TRUSTED_ORIGINS) window.SDATA_WINDOW_TRUSTED_ORIGINS = [];\r\n let sdataEventActions = window.sdataEventActions;\r\n if (!sdataEventActions) window.sdataEventActions = {};\r\n // 监听主页面的消息\r\n window.addEventListener(\"message\", async (event) => {\r\n // 步骤1:验证来源是否在白名单中\r\n const isTrusted = window.SDATA_WINDOW_TRUSTED_ORIGINS.some(\r\n (origin) => event.origin === origin || new RegExp(origin).test(event.origin)\r\n );\r\n if (!isTrusted) {\r\n console.log(\"拒绝非可信源消息:\", event.origin);\r\n return; // 直接终止处理\r\n }\r\n let eventKey = event.data?.eventKey;\r\n if (!eventKey) return;\r\n let eventSourceKey = event.origin;\r\n console.log(`收到${eventSourceKey}页面消息:`, event.data);\r\n if (eventKey === \"sdata_alllife_event_response\") {\r\n let eventOperateKey = event.data.eventOperateKey;\r\n let eventAction = window.sdataEventActions[eventOperateKey];\r\n //删除缓存方法\r\n delete window.sdataEventActions[eventOperateKey];\r\n if(eventAction)\r\n await eventAction(event.data.data,event);\r\n } \r\n else{\r\n let eventAction = window.sdataEventActions[eventKey];\r\n let responseData = {\r\n eventKey: \"sdata_alllife_event_response\",\r\n eventOperateKey: event.data.eventOperateKey,\r\n data: {},\r\n };\r\n if (eventAction) {\r\n let resultData = await eventAction(event.data.data,event);\r\n responseData.data =resultData;\r\n }\r\n event.source.postMessage(responseData, eventSourceKey);\r\n }\r\n });\r\n window.isFrameWindowInited = true;\r\n};\r\n\r\nexport const sendWindowMessage = async (targetWindow, originKey, eventKey, data, callback) => {\r\n let timestamp = new Date().getTime();\r\n let randomNum = Math.floor(Math.random() * 10000) + 1;\r\n let eventOperateKey = `${eventKey}_${timestamp}_${randomNum}`;\r\n addEventAction(eventOperateKey, callback);\r\n let postData = {\r\n eventOperateKey: eventOperateKey,\r\n eventKey: eventKey,\r\n data: data,\r\n };\r\n targetWindow.postMessage(postData, originKey);\r\n};","import request from \"./request\";\r\n\r\n/**\r\n * 查询资产\r\n * @param id 资产ID\r\n *\r\n */\r\nexport const queryAssetById = (id, count = 200) =>\r\n request.post(`/asset/getAssetData?asset_id=${id}&count=${count}`, {\r\n filters: [],\r\n });\r\n\r\n/**\r\n * 获取URL参数值\r\n * @param {} eventName\r\n * @param {*} actionFun\r\n */\r\nexport const getUrlParamValue = (urlStr, paramName) => {\r\n try {\r\n const url = new URL(urlStr);\r\n const value = url.searchParams.get(paramName);\r\n // 如果参数值包含#,则只返回#之前的部分\r\n if (value && value.indexOf(\"#\") !== -1) {\r\n return value.split(\"#\")[0];\r\n }\r\n return value;\r\n } catch (err) {\r\n console.error(\"URL 格式错误:\", err);\r\n return \"\";\r\n }\r\n};\r\n\r\n/**\r\n * 通过 URL 创建 File 对象\r\n * @param {string} url - 文件的网络 URL\r\n * @param {string} [filename] - 自定义文件名(可选,不传则从 URL 提取)\r\n * @returns {Promise<File>} - 返回 Promise 解析为 File 对象\r\n */\r\nexport const createFileFromUrl = async (url, filename) => {\r\n try {\r\n // 1. 发起网络请求获取文件\r\n const response = await fetch(url);\r\n if (!response.ok) {\r\n throw new Error(\r\n `网络请求失败: ${response.status} ${response.statusText}`\r\n );\r\n }\r\n\r\n // 2. 将响应转换为 Blob(保留原始 MIME 类型)\r\n const blob = await response.blob();\r\n\r\n // 3. 确定文件名(若未自定义则从 URL 提取)\r\n const finalFilename = filename || extractFilenameFromUrl(url);\r\n\r\n // 4. 构造 File 对象(Blob + 文件名 + 类型)\r\n return new File([blob], finalFilename, {\r\n type: blob.type, // 使用 Blob 的 MIME 类型(如 image/png)\r\n lastModified: Date.now(), // 可选:设置最后修改时间\r\n });\r\n } catch (error) {\r\n console.error(\"创建 File 失败:\", error);\r\n throw error;\r\n }\r\n};\r\n\r\n/**\r\n * 从 URL 中提取文件名(如 https://example.com/path/image.png → image.png)\r\n * @param {string} url - 文件 URL\r\n * @returns {string} - 提取的文件名\r\n */\r\nexport const extractFilenameFromUrl = (url) => {\r\n try {\r\n const urlObj = new URL(url);\r\n // 从路径中获取最后一个部分(文件名)\r\n return urlObj.pathname.split(\"/\").pop() || \"downloaded_file\";\r\n } catch (e) {\r\n return \"downloaded_file\"; // URL 解析失败时的默认文件名\r\n }\r\n};\r\n\r\n/**\r\n * 提取数组中不在另一个数组中的元素\r\n * @param {*} oldItems 基础比较数组\r\n * @param {*} newItems 被提取检测的数组\r\n * @returns\r\n */\r\nexport const extractNewItems = (oldItems, newItems) => {\r\n return oldItems.filter((item) => !newItems.includes(item));\r\n};\r\n\r\n/**\r\n * 获取远程文件大小(单位:字节)\r\n * @param {string} url - 文件的URL地址\r\n * @returns {Promise<number>} 文件大小(字节),失败时返回-1\r\n */\r\nexport const getFileSize = async (url) => {\r\n try {\r\n // 发送HEAD请求(不下载文件内容)\r\n const response = await fetch(url, {\r\n method: \"GET\",\r\n headers: { Range: \"bytes=0-0\" }, // 仅请求第 1 个字节\r\n });\r\n if (response.status !== 206) throw new Error(\"不支持 Range 请求\");\r\n const contentRange = response.headers.get(\"Content-Range\");\r\n const totalSize = contentRange?.match(/\\/(\\d+)$/)?.[1]; // 解析总大小(如 \"bytes 0-0/1000\" → 1000)\r\n return totalSize ? parseInt(totalSize, 10) : -1;\r\n } catch (error) {\r\n console.error(\"获取文件大小失败:\", error);\r\n return -1; // 返回-1表示失败\r\n }\r\n};\r\n// 获取i18n key\r\nexport const getI18nKey = (text) => {\r\n // 正则表达式匹配 $L{...} 格式\r\n const regex = /\\$L\\{([^}]+)\\}/g;\r\n let match = regex.exec(text);\r\n if (!match) return text;\r\n let key = match[1];\r\n return key;\r\n};\r\n\r\n// 查找最近的具有指定 class 的祖先节点\r\nexport const findClosestAncestorByClass = (element, className) => {\r\n let currentElement = element;\r\n while (currentElement) {\r\n // 检查当前元素是否包含目标 class\r\n if (\r\n currentElement.classList &&\r\n currentElement.classList.contains(className)\r\n ) {\r\n return currentElement;\r\n }\r\n // 向上遍历父节点\r\n currentElement = currentElement.parentElement;\r\n }\r\n // 未找到匹配的祖先节点\r\n return null;\r\n};\r\n\r\nexport const hasUrlParams=(url)=> {\r\n try {\r\n // 浏览器环境\r\n const urlObj = new URL(url, window.location.href);\r\n return urlObj.search.length > 0;\r\n } catch (e) {\r\n // Node.js 环境\r\n return false;\r\n }\r\n}\r\n\r\n/**\r\n * 获取客户端IP\r\n * @returns \r\n */\r\nexport const getClientIp = async() => {\r\n let serverIP = `/ext/getClientIp`;\r\n //\r\n let resultData = await request.post(serverIP);\r\n let ipAddress = resultData?.data?.clientIp;\r\n return ipAddress\r\n}\r\n\r\n/**\r\n * 通用服务方法调用\r\n * @returns \r\n */\r\nexport const doRestPost = async(url,param) => {\r\n let resultData = await request.post(url, param);\r\n return resultData\r\n}\r\n","export class ChatClientMgr {\r\n constructor(params, handler) {\r\n this.handler = handler;\r\n this.actionKey = params.actionKey;\r\n this.appSKID = params.appSKID;\r\n this.imType = params.imType;\r\n this.groupID = params.groupID;\r\n this.userID = params.userID;\r\n this.chatType = params.chatType || 0;\r\n this.singleChatID = params.singleChatID || \"\";\r\n this.customParams =params.customParams || {};\r\n this.chartOrigin = params.chartOrigin;\r\n // console.log(\"ChatClientMgr init:\", this.actionKey);\r\n }\r\n makeKey(key) {\r\n return `${key}-${this.actionKey}`;\r\n }\r\n async init() {\r\n this.handler.addChatListener(\r\n this.makeKey(`sdata_get_access_token`),\r\n async (data) => {\r\n return await this.handler.getPortalAccessToken(data);\r\n }\r\n );\r\n this.handler.addChatListener(\r\n this.makeKey(`sdata_get_portal_user_info`),\r\n async (data) => {\r\n return await this.handler.getPortalUserInfo(data);\r\n }\r\n );\r\n this.handler.addChatListener(\r\n this.makeKey(`sdata_get_portal_user_sig`),\r\n async (data) => {\r\n let userID = data.userID;\r\n let platType = data.im_type;\r\n let groupID = data.group_id;\r\n return await this.handler.getPortalUserSig(userID, platType, groupID);\r\n }\r\n );\r\n this.handler.addChatListener(\r\n this.makeKey(`sdata_add_im_mapping`),\r\n async (data) => {\r\n let userID = data.userID;\r\n let platType = data.im_type;\r\n let userSig = data.userSig;\r\n return await this.handler.addIMMapping(userID, platType, userSig,this.groupID);\r\n }\r\n );\r\n this.handler.addChatListener(\r\n this.makeKey(`sdata_update_im_mapping`),\r\n async (data) => {\r\n return await this.handler.updateIMMapping(data);\r\n }\r\n );\r\n this.handler.addChatListener(\r\n this.makeKey(`sdata_get_users_by_group_id`),\r\n async (data) => {\r\n return await this.handler.getAllUserInfosByGroupID(data);\r\n }\r\n );\r\n this.handler.addChatListener(\r\n this.makeKey(`sdata_get_dpts_by_group_id`),\r\n async (data) => {\r\n return await this.handler.getChildrenOfficeInfosByID(data);\r\n }\r\n );\r\n this.handler.addChatListener(\r\n this.makeKey(`sdata_get_project_dpts_by_user_group_id`),\r\n async (data) => {\r\n return await this.handler.getPojectDptsByUserAndGroupID(data);\r\n }\r\n );\r\n this.handler.addChatListener(\r\n this.makeKey(`sdata_get_ai_robot_infos`),\r\n async (data) => {\r\n let groupID = data.groupID;\r\n let userID = data.userID;\r\n if (\r\n this.userID == userID &&\r\n this.groupID == groupID\r\n ) {\r\n return this.getAIRobotInfos();\r\n }\r\n return [];\r\n }\r\n );\r\n this.handler.addChatListener(this.makeKey(`sdata_get_test_user_sig`), async(data) => {\r\n let sdkAppID = data.SDKAppID;\r\n let userID = data.userID;\r\n let sigIDObject =await this.handler.genTestUserSig({\r\n SDKAppID: sdkAppID,\r\n userID: userID,\r\n });\r\n let sigID = sigIDObject.userSig;\r\n return sigID;\r\n });\r\n this.handler.addChatListener(\r\n this.makeKey(`sdata_send_message_to_chat_server`),\r\n async (data, event) => {\r\n let message = data.message;\r\n let robotID = message.from;\r\n let result = await this.sendMessageToChatServer(robotID, message);\r\n return result;\r\n }\r\n );\r\n this.handler.addChatListener(\r\n this.makeKey(`sdata_close_frame_window`),\r\n async (data, event) => {\r\n return this.handler.closeWindow();\r\n }\r\n );\r\n this.handler.addChatListener(\r\n this.makeKey(`sdata_get_portal_doc_info`),\r\n async (data, event) => {\r\n return this.handler.getPortalDocmentInfo(data);\r\n }\r\n );\r\n this.handler.addChatListener(\r\n this.makeKey(`sdata_chat_aiAgent_event`),\r\n async (data, event) => {\r\n return this.handler.onAIAgentEvent(data,event);\r\n }\r\n );\r\n this.handler.addChatListener(\r\n this.makeKey(`sdata_alllife_event_regist`),\r\n async (data, event) => {\r\n console.log(\"recive chat regist event data:\", data);\r\n this.appSKID = data.appid;\r\n this.imType = data.im_type;\r\n await this.initChatAIs();\r\n let charParams = {\r\n type: this.getChatTypeKey(this.chatType),\r\n singleChatID: this.singleChatID,\r\n customParams:this.customParams\r\n };\r\n this.handler.fireEventToChatWindow(\r\n event,\r\n this.chartOrigin,\r\n this.makeKey(\"sdata_alllife_initChat\"),\r\n charParams,\r\n (result) => {\r\n if (result) {\r\n console.log(\"chat init finished:\", result);\r\n this.handler.onChatInitFinished();\r\n }\r\n }\r\n );\r\n }\r\n );\r\n }\r\n\r\n getChatTypeKey(type){\r\n switch (type) {\r\n case 0:\r\n return \"IM_MULTIPLE_MODE\";\r\n case 1:\r\n return \"IM_SINGLE_MODE\";\r\n case 2:\r\n return \"IM_EMBED_MODE\";\r\n case 3:\r\n return \"IM_MOBILE_MULTIPLE_EMBED_MODE\";\r\n case 4:\r\n return \"IM_MOBILE_SINGLE_EMBED_MODE\";\r\n default:\r\n return \"IM_MULTIPLE_MODE\";\r\n }\r\n }\r\n\r\n async initChatAIs() {\r\n if(window.imClient)\r\n {\r\n this.chatAIClient = window.imClient;\r\n }\r\n else{\r\n\r\n let classDatas = await this.handler.getChatClientClasses();\r\n const { TencentCloudChat, TIMUploadPlugin } = classDatas;\r\n window.imClient =TencentCloudChat.create({\r\n SDKAppID: this.appSKID, // 替换为你的 SDKAppID\r\n storage: {\r\n enable: true, // 启用存储(可选,根据需求)\r\n },\r\n });\r\n window.imClient.registerPlugin({ \"tim-upload-plugin\": TIMUploadPlugin });\r\n window.imClient.on(TencentCloudChat.EVENT.SDK_READY,this.onChatAIReady.bind(this));\r\n window.imClient.charAIs={};\r\n this.chatAIClient = window.imClient;\r\n }\r\n if(!this.chatAIClient.charAIs){\r\n this.chatAIClient.charAIs = {};\r\n }\r\n let robotInfos = await this.handler.getAIRobotInfos(this.userID, this.groupID);\r\n if (robotInfos && robotInfos.length > 0) {\r\n robotInfos.forEach(async (robot) => {\r\n let robotKey = robot.id;\r\n if(!this.chatAIClient.charAIs[robotKey])\r\n {\r\n robot.chatID = robotKey;\r\n let userSig = await this.handler.getPortalUserSig(\r\n robotKey,\r\n this.imType,\r\n this.groupID\r\n );\r\n if (!userSig) {\r\n userSig= await this.generateUserSigAndAdd(robotKey);\r\n }\r\n robot.userSig = userSig;\r\n this.chatAIClient.charAIs[robotKey] = {\r\n robot: robot,\r\n messageCache: [],\r\n };\r\n }\r\n });\r\n }\r\n }\r\n\r\n async generateUserSigAndUpdate(robotKey)\r\n {\r\n let sigIDObject =await this.handler.genTestUserSig({\r\n SDKAppID: this.appSKID,\r\n userID: robotKey,\r\n });\r\n let userSig = sigIDObject.userSig;\r\n if(userSig)\r\n {\r\n await this.chatAIClient.login({\r\n userID: robotKey,\r\n userSig: userSig,\r\n });\r\n await this.chatAIClient.logout();\r\n let data={\r\n userID: robotKey,\r\n userSig: userSig,\r\n im_type: this.imType,\r\n group_id: this.groupID,\r\n }\r\n await this.handler.updateIMMapping(data);\r\n }\r\n return userSig;\r\n }\r\n\r\n async generateUserSigAndAdd(robotKey)\r\n {\r\n let sigIDObject =await this.handler.genTestUserSig({\r\n SDKAppID: this.appSKID,\r\n userID: robotKey,\r\n });\r\n let userSig = sigIDObject.userSig;\r\n if(userSig)\r\n {\r\n await this.chatAIClient.login({\r\n userID: robotKey,\r\n userSig: userSig,\r\n });\r\n await this.chatAIClient.logout();\r\n await this.handler.addIMMapping(robotKey, this.imType, userSig,this.groupID);\r\n }\r\n return userSig;\r\n }\r\n\r\n onChatAIReady(event) {\r\n let robotID = this.chatAIClient.lastRobotID;\r\n let robotInfo = this.getAIRobotInfoByID(robotID);\r\n console.log(`[AI chat] ${robotInfo.name}已经就绪:`, event);\r\n if (this.chatAIClient) {\r\n let messages = this.getAIRobotCacheMessagesByID(robotID);\r\n console.log(`[AI chat] ${robotInfo.name}就绪后查到的缓存信息:`, messages);\r\n console.log(`[AI chat] ${robotInfo.name}所有信息仓:`, this.chatAIClient.charAIs);\r\n if (messages && messages.length > 0) {\r\n const newMessages = [...messages];\r\n messages.splice(0, messages.length);\r\n newMessages.forEach((message) => {\r\n console.log(`[AI chat] ${robotInfo.name}发送缓存消息:`, message);\r\n this.sendMessageToChatServer(robotID, message);\r\n });\r\n }\r\n }\r\n }\r\n\r\n getAIRobotInfos() {\r\n let resultRobots = [];\r\n for (let key in this.chatAIClient.charAIs) {\r\n resultRobots.push(this.chatAIClient.charAIs[key].robot);\r\n }\r\n return resultRobots;\r\n }\r\n\r\n getAIRobotInfoByID(robotID) {\r\n return this.chatAIClient.charAIs[robotID] ? this.chatAIClient.charAIs[robotID].robot : null;\r\n }\r\n\r\n getAIRobotCacheMessagesByID(robotID) {\r\n return this.chatAIClient.charAIs[robotID] ? this.chatAIClient.charAIs[robotID].messageCache : [];\r\n }\r\n\r\n async sendMessageToChatServer(robotID, messageOption) {\r\n let robotInfo = this.getAIRobotInfoByID(robotID);\r\n if (this.chatAIClient.lastRobotID != robotID) {\r\n console.log(`[AI chat]需要新机器人回答,切换到新机器人${robotInfo.name}`);\r\n if (this.chatAIClient.lastRobotID) {\r\n await this.chatAIClient.logout();\r\n }\r\n try\r\n {\r\n await this.chatAIClient.login({\r\n userID: robotID,\r\n userSig: robotInfo.userSig,\r\n });\r\n }\r\n catch(err)\r\n {\r\n console.log(`[AI chat]${robotInfo.name}登录失败`, err);\r\n let code = err.code;\r\n if(code == 70001 )\r\n {\r\n console.log(`[AI chat]${robotInfo.name}UserSig过期,重新生成userSig`);\r\n let newUserSig= await this.generateUserSigAndUpdate(robotID);\r\n try{\r\n await this.chatAIClient.login({\r\n userID: robotID,\r\n userSig: newUserSig,\r\n });\r\n this.sendMessageToChatServer(robotID, messageOption);\r\n return;\r\n }\r\n catch(err)\r\n {\r\n console.log(`[AI chat]${robotInfo.name}重新登录失败`, err);\r\n return;\r\n }\r\n }\r\n }\r\n }\r\n this.chatAIClient.lastRobotID = robotID;\r\n if (this.chatAIClient && this.chatAIClient.isReady()) {\r\n let new_message = await this.chatAIClient.createTextMessage(\r\n messageOption\r\n );\r\n this.chatAIClient.sendMessage(new_message).then(\r\n (res) => {\r\n console.log(`[AI chat]${robotInfo.name}发送信息成功`, res);\r\n },\r\n (err) => {\r\n console.log(`[AI chat]${robotInfo.name}发送失败`, err);\r\n }\r\n );\r\n } else {\r\n let messageCache = this.getAIRobotCacheMessagesByID(robotID);\r\n messageCache.push(messageOption);\r\n console.log(`[AI chat]${robotInfo.name}未就绪,缓存后消息:`, messageCache);\r\n }\r\n }\r\n\r\n converToAIServerParams(message, robotInfo, param) {\r\n let prompt = \"\";\r\n let type = message.type;\r\n switch (type) {\r\n case \"TIMTextElem\":\r\n prompt = message.payload?.text || \"\";\r\n break;\r\n case \"TIMImageElem\":\r\n break;\r\n case \"TIMSoundElem\":\r\n break;\r\n case \"TIMVideoFileElem\":\r\n break;\r\n case \"TIMFileElem\":\r\n break;\r\n default:\r\n break;\r\n }\r\n let cloudCustomData = message.cloudCustomData || {};\r\n let conversation_id = cloudCustomData.conversation_id || \"\";\r\n let params = {\r\n prompt: prompt,\r\n params: param || {},\r\n robotKey: robotInfo.password,\r\n conversation_id: conversation_id || \"\",\r\n userID: message.from || \"\",\r\n };\r\n return params;\r\n }\r\n\r\n abort() {\r\n this.chatAIClient = null;\r\n }\r\n}\r\n","\r\nimport { getPortalAccessToken,\r\n getPortalUserInfo,\r\n getPortalUserSig,\r\n getAIRobotInfos,\r\n getAllUserInfosByGroupID,\r\n getChildrenOfficeInfosByID,\r\n getPojectDptsByUserAndGroupID,\r\n getPortalDocmentInfo,\r\n addIMMapping,\r\n updateIMMapping} from \"./portal\";\r\nimport { sendWindowMessage,addEventAction} from \"./iframe\";\r\nimport {getFileSize} from \"./utils\";\r\nimport request from \"./request\";\r\n\r\nexport const getRobotInfoByID=async(robotID,groupID)=>{\r\n let queryData = {\r\n \"param\": {\r\n \"id\": robotID,\r\n \"groupID\":groupID\r\n }\r\n };\r\n let result =await request.post(`/dataservice/rest/orchestration/getRobotInfoByID`,queryData);\r\n let robotInfo = result.data.robotInfo;\r\n return robotInfo;\r\n}\r\n\r\nexport const getIMHanlder =(customerHanlder) =>{\r\n let handler = {\r\n genTestUserSig: async (data) => {\r\n // return genTestUserSig(data);\r\n },\r\n getChatClientClasses: async () => {\r\n return [];\r\n },\r\n getAIRobotInfos: async (user_id, groupID) => {\r\n return getAIRobotInfos(user_id, groupID);\r\n },\r\n getPortalUserSig: async (robotKey, platType,groupID) => {\r\n return getPortalUserSig(robotKey, platType, groupID);\r\n },\r\n addIMMapping: async (robotKey, platType, userSig,groupID) => {\r\n return addIMMapping(robotKey, platType, groupID, userSig);\r\n },\r\n updateIMMapping: async (data) => {\r\n let robotKey = data.userID;\r\n let platType = data.im_type;\r\n let groupID = data.group_id;\r\n let userSig = data.userSig;\r\n return updateIMMapping(robotKey, platType, groupID, userSig);\r\n },\r\n getPortalAccessToken: async (data) => {\r\n let appKey = data.appKey;\r\n let appSecret = data.appSecret;\r\n return getPortalAccessToken(appKey, appSecret);\r\n },\r\n getPortalUserInfo: async (data) => {\r\n let code = data.code;\r\n let access_token = data.access_token;\r\n return getPortalUserInfo(code, access_token);\r\n },\r\n getAllUserInfosByGroupID: async (data) => {\r\n let groupID = data.groupID;\r\n return getAllUserInfosByGroupID(groupID);\r\n },\r\n getChildrenOfficeInfosByID: async (data) => {\r\n let groupID = data.groupID;\r\n return getChildrenOfficeInfosByID(groupID);\r\n },\r\n getPojectDptsByUserAndGroupID: async (data) => {\r\n let groupID = data.groupID;\r\n let userID = data.userID;\r\n return getPojectDptsByUserAndGroupID(userID, groupID);\r\n },\r\n closeWindow: () => {\r\n // this.visable = false;\r\n return true;\r\n },\r\n addChatListener: async (listenerKey, handler) => {\r\n await addEventAction(listenerKey, handler);\r\n },\r\n fireEventToChatWindow: async (event,chart_origin,key,params,handler) => {\r\n await sendWindowMessage(event.source, chart_origin, key, params, handler);\r\n },\r\n onChatInitFinished: async () => {\r\n // this.chatInitFinish = true;\r\n },\r\n onAIAgentEvent: async (data,event) => {\r\n // this.onAIAgentEvent(data,event);\r\n },\r\n getPortalDocmentInfo: async (data) => {\r\n let kb_doc_id = data.kb_doc_id;\r\n let doc_info = await getPortalDocmentInfo(kb_doc_id);\r\n let urlStr =doc_info?.summary;\r\n if (urlStr) {\r\n let urlObj =JSON.parse(urlStr);\r\n if (urlObj) {\r\n let url = urlObj[0].url;\r\n let home_page = window.smardaten_api_context_path;\r\n let finalUrl = `${home_page}/storage_area/public${url}`;\r\n let fileSize = await getFileSize(finalUrl);\r\n doc_info.fileSize = fileSize;\r\n }\r\n }\r\n return doc_info;\r\n }\r\n };\r\n handler={...handler,...customerHanlder};\r\n return handler;\r\n};\r\n\r\n\r\n\r\nexport * from \"./chat/ChatClientMgr\";"],"names":["querystringify_1","apiContextPath","getInstance","prefix","startsWith","slice","length","endsWith","instance","axios","create","baseURL","timeout","validateStatus","status","headers","window","location","search","qs","parse","token","oldPost","post","url","data","config","VITE_SERVICE_BASE_URL","newUrl","call","defaults","interceptors","response","use","JSON","Blob","Promise","reject","result","error","prefixPath","getPortalDocmentInfo","kb_doc_id","queryData","param","request","docInfo","getPortalAccessToken","appKey","appSecret","get","getPortalUserInfo","code","access_token","getPortalUserSig","userID","platType","groupID","im_type","group_id","sigID","userSig","getAllUserInfosByGroupID","requestData","resultDatas","getChildrenOfficeInfosByID","officeID","getPojectDptsByUserAndGroupID","dptDatas","officeDatas","userMappings","addIMMapping","resultData","getAIRobotInfos","infos","robotInfos","updateIMMapping","addEventAction","eventKey","eventAction","sdataEventActions","sendWindowMessage","targetWindow","originKey","callback","timestamp","Date","getTime","randomNum","Math","floor","random","eventOperateKey","postData","postMessage","getFileSize","fetch","method","Range","Error","contentRange","totalSize","match","parseInt","console","ChatClientMgr","constructor","params","handler","actionKey","appSKID","imType","chatType","singleChatID","customParams","chartOrigin","makeKey","key","init","addChatListener","sdkAppID","SDKAppID","sigIDObject","genTestUserSig","event","message","robotID","from","sendMessageToChatServer","closeWindow","onAIAgentEvent","log","appid","initChatAIs","charParams","type","getChatTypeKey","fireEventToChatWindow","onChatInitFinished","imClient","chatAIClient","classDatas","getChatClientClasses","TencentCloudChat","TIMUploadPlugin","storage","enable","registerPlugin","on","EVENT","SDK_READY","onChatAIReady","bind","charAIs","forEach","robot","robotKey","id","chatID","generateUserSigAndAdd","messageCache","generateUserSigAndUpdate","login","logout","lastRobotID","robotInfo","getAIRobotInfoByID","name","messages","getAIRobotCacheMessagesByID","newMessages","splice","resultRobots","push","messageOption","err","newUserSig","isReady","new_message","createTextMessage","sendMessage","then","res","converToAIServerParams","prompt","payload","text","cloudCustomData","conversation_id","password","abort","getRobotInfoByID","getIMHanlder","customerHanlder","user_id","listenerKey","chart_origin","source","doc_info","urlStr","summary","urlObj","home_page","smardaten_api_context_path","finalUrl","fileSize"],"mappings":"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","x_google_ignoreList":[0]}
@@ -0,0 +1 @@
1
+ {"version":3,"file":"dify.js","sources":["../../node_modules/querystringify/index.js","../../src/api/request.js","../../src/api/portal.js","../../src/api/dify.js"],"sourcesContent":["'use strict';\n\nvar has = Object.prototype.hasOwnProperty\n , undef;\n\n/**\n * Decode a URI encoded string.\n *\n * @param {String} input The URI encoded string.\n * @returns {String|Null} The decoded string.\n * @api private\n */\nfunction decode(input) {\n try {\n return decodeURIComponent(input.replace(/\\+/g, ' '));\n } catch (e) {\n return null;\n }\n}\n\n/**\n * Attempts to encode a given input.\n *\n * @param {String} input The string that needs to be encoded.\n * @returns {String|Null} The encoded string.\n * @api private\n */\nfunction encode(input) {\n try {\n return encodeURIComponent(input);\n } catch (e) {\n return null;\n }\n}\n\n/**\n * Simple query string parser.\n *\n * @param {String} query The query string that needs to be parsed.\n * @returns {Object}\n * @api public\n */\nfunction querystring(query) {\n var parser = /([^=?#&]+)=?([^&]*)/g\n , result = {}\n , part;\n\n while (part = parser.exec(query)) {\n var key = decode(part[1])\n , value = decode(part[2]);\n\n //\n // Prevent overriding of existing properties. This ensures that build-in\n // methods like `toString` or __proto__ are not overriden by malicious\n // querystrings.\n //\n // In the case if failed decoding, we want to omit the key/value pairs\n // from the result.\n //\n if (key === null || value === null || key in result) continue;\n result[key] = value;\n }\n\n return result;\n}\n\n/**\n * Transform a query string to an object.\n *\n * @param {Object} obj Object that should be transformed.\n * @param {String} prefix Optional prefix.\n * @returns {String}\n * @api public\n */\nfunction querystringify(obj, prefix) {\n prefix = prefix || '';\n\n var pairs = []\n , value\n , key;\n\n //\n // Optionally prefix with a '?' if needed\n //\n if ('string' !== typeof prefix) prefix = '?';\n\n for (key in obj) {\n if (has.call(obj, key)) {\n value = obj[key];\n\n //\n // Edge cases where we actually want to encode the value to an empty\n // string instead of the stringified value.\n //\n if (!value && (value === null || value === undef || isNaN(value))) {\n value = '';\n }\n\n key = encode(key);\n value = encode(value);\n\n //\n // If we failed to encode the strings, we should bail out as we don't\n // want to add invalid strings to the query.\n //\n if (key === null || value === null) continue;\n pairs.push(key +'='+ value);\n }\n }\n\n return pairs.length ? prefix + pairs.join('&') : '';\n}\n\n//\n// Expose the module.\n//\nexports.stringify = querystringify;\nexports.parse = querystring;\n","import axios from \"axios\"\r\nimport qs from \"querystringify\"\r\n\r\nlet apiContextPath = \"\"\r\n// const onlineDevelopmentMode = process.env.VUE_APP_ONLINE_DEVELOPMENT_MODE === \"true\" || process.env.REACT_APP_ONLINE_DEVELOPMENT_MODE === \"true\"\r\n// if (process.env.NODE_ENV === \"development\" && !onlineDevelopmentMode) {\r\n// document.cookie =\r\n// \"token=eyJhbGciOiJIUzI1NiJ9.eyJsb2dpblRpbWVzdGFtcCI6MTY0NjcyMjI2ODY4NSwidXNlcklkIjoiMTIzNDU2Nzg5MCJ9.F8wr84ha-dW18J9wZOQeTXj55mXTdqKfLBeNlNueoLY\"\r\n// document.cookie =\r\n// \"refreshToken=eyJhbGciOiJIUzI1NiJ9.eyJsb2dpblRpbWVzdGFtcCI6MTY0NjcyMjI2ODY4Nn0.TEVE_nopHNZlvSQM_RUZrLcCzkaERiHo8nz0q-ksL3E\"\r\n// document.cookie = \"username=admin\"\r\n// document.cookie = \"windowOnline=true\"\r\n// apiContextPath = \"/api\"\r\n// }\r\nexport const getInstance = (prefix = \"\") => {\r\n if (prefix) {\r\n prefix.startsWith(\"/\") && (prefix = prefix.slice(1, prefix.length))\r\n prefix.endsWith(\"/\") && (prefix = prefix.slice(0, -1))\r\n }\r\n const instance = axios.create({\r\n baseURL: `${apiContextPath}/${prefix ? prefix + \"/\" : \"\"}sdata/rest`,\r\n timeout: 60000,\r\n validateStatus: function(status) {\r\n return status >= 200 && status < 300 // default\r\n },\r\n headers:\r\n (window.location.search && qs.parse(window.location.search).token) ||\r\n window.token\r\n ? { token: qs.parse(window.location.search).token || window.token }\r\n : {}\r\n })\r\n\r\n let oldPost = instance.post;\r\n\r\n instance.post = (url, data, config)=> {\r\n let prefix =window.VITE_SERVICE_BASE_URL || \"\";\r\n if (prefix) {\r\n let newUrl = prefix + url;\r\n return oldPost.call(instance, newUrl, data, config);\r\n }\r\n return oldPost.call(instance, url, data, config);\r\n };\r\n\r\n instance.defaults.headers.post[\"Content-Type\"] = \"application/json\"\r\n\r\n instance.interceptors.response.use(\r\n response => {\r\n let { data } = response\r\n if (typeof data === \"string\") {\r\n data = JSON.parse(data)\r\n }\r\n if (data && data.status !== 200 && !(data instanceof Blob)) {\r\n return Promise.reject(response)\r\n }\r\n if (data instanceof Blob) {\r\n response.data = data\r\n return response\r\n }\r\n\r\n response.data = data && data.result\r\n return response\r\n },\r\n error => {\r\n if (error.response && error.response.status === 401) {\r\n return\r\n }\r\n\r\n return Promise.reject(error.response)\r\n }\r\n )\r\n return instance\r\n}\r\nlet prefixPath = window.prefixPath || \"\"\r\n\r\nexport default getInstance(prefixPath)\r\n","import request from \"./request\";\r\n\r\n/**\r\n * 获取门户应用ID\r\n * @param {*} isPortalAction 是否是门户操作\r\n * 如果是门户操作,则从window.appSdk.getAppId()获取\r\n * 否则从sessionStorage中获取iportal_app_id,如果没有则从appVariables中获取\r\n * @param {*} isPortalAction\r\n * @returns\r\n */\r\nexport const getPoratlAppID = () => {\r\n let portal_app_id = window.sessionStorage.getItem(\"iportal_app_id\");\r\n if (!portal_app_id) {\r\n portal_app_id = getCurrentAppID();\r\n }\r\n return portal_app_id;\r\n};\r\n\r\nexport const getCurrentAppID = () => {\r\n let app_id = window.appSdk.getAppId() || window.localStorage.MobileAppId;\r\n return app_id;\r\n};\r\n\r\n/**\r\n * 取门户应用菜单数据\r\n * @param {*} user_id 用户ID\r\n * @param {*} group_id 组织ID\r\n * @param {*} isPortalAction\r\n * @returns\r\n */\r\nexport const getAppPortalMenuDatas = async (\r\n user_id,\r\n group_id,\r\n isPortalAction,\r\n appVariables\r\n) => {\r\n //获取门户应用ID\r\n let portal_app_id = getPoratlAppID();\r\n //获取当前用户在当前组织下的角色ID\r\n let roleList = await getRoleIDsByUserAndGroupID(\r\n user_id,\r\n portal_app_id,\r\n group_id\r\n );\r\n //获取当前组织下的门户菜单数据\r\n let portalMenuDatas = await getMenuDatasByGroupID(group_id, roleList);\r\n let app_id = window.appSdk.getAppId();\r\n let menuDatas = portalMenuDatas.filter((menuData) => {\r\n // 如果是门户菜单,则直接返回true\r\n // 否则根据app_id和portal_app_id进行过滤\r\n if (isPortalAction) {\r\n return true;\r\n } else {\r\n if (menuData.app_id == portal_app_id) {\r\n return true;\r\n } else {\r\n let types = menuData.children;\r\n let hasTargetMenu = false;\r\n if (types && types.length > 0) {\r\n types.forEach((type) => {\r\n let children = type.children;\r\n if (children && children.length > 0) {\r\n let newTypeChilden = children.filter((child) => {\r\n return child.app_id === app_id;\r\n });\r\n if (newTypeChilden && newTypeChilden.length > 0) {\r\n hasTargetMenu = true;\r\n }\r\n }\r\n });\r\n }\r\n return hasTargetMenu;\r\n }\r\n }\r\n });\r\n return menuDatas;\r\n};\r\n\r\n/**\r\n * 查询当前企业门户菜单信息\r\n * @param id GroupID\r\n *\r\n */\r\nexport const getMenuDatasByGroupID = async (group_id, role_ids) => {\r\n let queryData_groupData = {\r\n param: {\r\n id: group_id,\r\n },\r\n };\r\n let result = await request.post(\r\n `/dataservice/rest/orchestration/getMenuDatasByGroupID`,\r\n queryData_groupData\r\n );\r\n //所有的快捷访问菜单信息\r\n let portalMenuDatas = result.data.resultDatas;\r\n //所有的菜单类型\r\n let menuTypes = result.data.menuTypes;\r\n\r\n result = await request.post(\r\n `/dataservice/rest/orchestration/getPortalDefaultQuickMenus`,\r\n {}\r\n );\r\n\r\n let defaultMenuDatas = result.data.resultDatas;\r\n\r\n let defaultMenuType = result.data.menuTypes;\r\n\r\n let tempMenuDatas = portalMenuDatas.concat(defaultMenuDatas);\r\n\r\n let tempMenuType = menuTypes.concat(defaultMenuType);\r\n\r\n let finalMenuDatas = [];\r\n\r\n let finaMenuTypes = [];\r\n\r\n let tempMap = {};\r\n //缓存所有快捷访问菜单信息\r\n for (const tempData of tempMenuDatas) {\r\n let id = tempData.id;\r\n let isList =tempData.status==\"1\";\r\n // 只缓存启用状态的菜单\r\n if(!tempMap[id]&&isList)\r\n {\r\n finalMenuDatas.push(tempData);\r\n tempMap[id] = tempData;\r\n }\r\n }\r\n let tempTypeMap = {};\r\n //缓存所有菜单类型信息\r\n for (const tempType of tempMenuType) {\r\n let id = tempType.id;\r\n if(!tempTypeMap[id])\r\n {\r\n finaMenuTypes.push(tempType);\r\n tempTypeMap[id] = tempType;\r\n }\r\n }\r\n\r\n //如果有角色ID,则获取对应角色的快捷访问菜单映射信息\r\n if (role_ids && role_ids.length > 0) {\r\n //获取当前角色下对应的角色快捷访问菜单的映射信息(到应用自定义菜单)和快捷访问菜单的信息\r\n result = await getMenuMappingDatasByRoleIDs(role_ids, group_id);\r\n //对应角色的快捷访问菜单映射信息\r\n let quickMenuMappingDatas = result.data.quickMenuMappingDatas || [];\r\n let filterObjectMap = {};\r\n\r\n //缓存所有角色的快捷访问菜单映射信息\r\n for (const data of quickMenuMappingDatas) {\r\n let id = data.menu_mapping_id;\r\n let quickMenuMapping = tempMap[id];\r\n filterObjectMap[id] = quickMenuMapping;\r\n }\r\n //返回基于角色关联关系过滤后的快捷访问菜单信息\r\n return transformPortalData(finalMenuDatas, finaMenuTypes, filterObjectMap);\r\n } else {\r\n return transformPortalData(finalMenuDatas, finaMenuTypes, []);\r\n }\r\n};\r\n\r\n/**\r\n * 查询对应角色的门户快捷菜单映射信息\r\n * @param id GroupID\r\n *\r\n */\r\nexport const getMenuMappingDatasByRoleIDs = async (role_ids, group_id) => {\r\n let queryData_groupData = {\r\n param: {\r\n role_ids: role_ids,\r\n group_id: group_id,\r\n },\r\n };\r\n let result = await request.post(\r\n `/dataservice/rest/orchestration/getQuckMenuMappingsByRoleIDs`,\r\n queryData_groupData\r\n );\r\n //获取菜单数据\r\n return result;\r\n};\r\n\r\n/**\r\n * 校验SSO页面加载是否正确\r\n * @param id GroupID\r\n *\r\n */\r\nexport const validateSSOPageLoaded = async (app_id, appSecret, returnUrl) => {\r\n let queryData_groupData = {\r\n param: {\r\n app_id: app_id,\r\n appSecret: appSecret,\r\n returnUrl: returnUrl,\r\n },\r\n };\r\n let result = await request.post(\r\n `/dataservice/rest/orchestration/validateSSOPageLoaded`,\r\n queryData_groupData\r\n );\r\n let resultCount = result.data.count;\r\n //获取菜单数据\r\n return resultCount;\r\n};\r\n\r\n/**\r\n * 查询对应角色的门户快捷菜单信息\r\n * @param id GroupID\r\n *\r\n */\r\nexport const getRoleIDsByUserAndGroupID = async (user_id, app_id, group_id) => {\r\n let queryData = {\r\n param: {\r\n user_id: user_id,\r\n app_id: app_id,\r\n group_id: group_id,\r\n },\r\n };\r\n let result = await request.post(\r\n `/dataservice/rest/orchestration/getRoleIDsByUserAndGroupID`,\r\n queryData\r\n );\r\n let role_ids = result.data.portal_role_ids;\r\n //获取菜单数据\r\n return role_ids;\r\n};\r\n\r\n/**\r\n * 获取门户知识文档的url\r\n * @param {*} kb_doc_id\r\n * @returns\r\n */\r\nexport const getPortalDocmentInfo = async (kb_doc_id) => {\r\n let queryData = {\r\n param: {\r\n kb_doc_id: kb_doc_id,\r\n },\r\n };\r\n let result = await request.post(\r\n `/dataservice/rest/orchestration/getPortalDocmentInfoByKBID`,\r\n queryData\r\n );\r\n let docInfo = result.data.docInfo;\r\n return docInfo;\r\n};\r\n\r\n// export const getLoginPortalAccountKey = async (loginName,groupID) => {\r\n// let queryData = {\r\n// param: {\r\n// loginData: {\r\n// account: loginName,\r\n// group_id: groupID,\r\n// },\r\n// },\r\n// };\r\n// let result = await request.post(\r\n// `/dataservice/rest/orchestration/getLoginPortalAccountKey`,\r\n// queryData\r\n// );\r\n// return result;\r\n// };\r\n\r\n/**\r\n * 获取该平台菜单同祖先(直至根节点)得其他兄弟菜单\r\n * @param {*} menu_id \r\n * @returns \r\n */\r\nexport const getPlatformBortherMenusByMenuID =async (menu_id,role_ids,group_id) =>{\r\n let queryData_groupData = {\r\n \"param\": {\r\n \"menu_id\": menu_id,\r\n }\r\n };\r\n let result =await request.post(`/dataservice/rest/orchestration/getPlatformBortherMenusByMenuID`,queryData_groupData);\r\n let sysMenuDatas = result.data.menuDatas || [];\r\n \r\n //获取当前角色下对应的角色菜单权限的映射信息\r\n let roleMenuMappingDatas = await getPlatformMenuMappingsByRoleIDs(role_ids, group_id);\r\n let roleMenuMappingMap = {};\r\n for (const mappingData of roleMenuMappingDatas) {\r\n let menu_mapping_id = mappingData.menu_id;\r\n roleMenuMappingMap[menu_mapping_id] = mappingData;\r\n }\r\n let menuMaps = {};\r\n //缓存所有菜单信息\r\n for (const item of sysMenuDatas) {\r\n let id = item.id;\r\n let leaf_flag = item.leaf_flag;\r\n //如果是叶子节点 并且当前菜单ID在角色菜单映射信息中不存在,则跳过\r\n if(leaf_flag===1&&(!roleMenuMappingMap[id])){\r\n continue;\r\n }\r\n // 如果当前菜单ID在角色菜单映射信息中存在,则表示该角色有权限访问该菜单\r\n if (!menuMaps[id]) {\r\n // let icon =item.icon;\r\n let iconClass =\"el-icon-menu\";\r\n // if(icon){\r\n // let obj = JSON.parse(icon);\r\n // iconClass =obj?.url?`#${obj.url}`:\"el-icon-menu\";\r\n // }\r\n let tempItem = {\r\n id: item.id,\r\n index: item.id,\r\n name: item.name,\r\n isSys:true,\r\n iconClass: iconClass,\r\n actionType: item.action_type|| \"1\", // 默认值为1\r\n app_id: item.datapp_id,\r\n menu_id: item.id, \r\n url: item.url||\"\",\r\n children: item.children || [],\r\n sort: item.sort || 0,\r\n };\r\n menuMaps[id] = tempItem;\r\n }\r\n }\r\n for (const item of sysMenuDatas) {\r\n let parent_id = item.parent_id;\r\n if (!parent_id) continue;\r\n let parentItem = menuMaps[parent_id];\r\n if (parentItem) {\r\n let menuItem = menuMaps[item.id];\r\n if(!menuItem){\r\n continue;\r\n }\r\n parentItem.children.push(menuItem);\r\n }\r\n }\r\n let menuDatas = [];\r\n for (const key in menuMaps) {\r\n let item = menuMaps[key];\r\n if (item.children && item.children.length > 0) {\r\n menuDatas.push(item);\r\n let children = item.children;\r\n children.sort((data1, data2) => {\r\n if (Number.isNaN(data1.sort)) return 1;\r\n if (Number.isNaN(data2.sort)) return -1;\r\n return data1.sort - data2.sort;\r\n });\r\n }\r\n }\r\n //如果没有数据,说明只有一级节点父亲\r\n if(menuDatas.length==0){\r\n for (const key in menuMaps) {\r\n let item = menuMaps[key];\r\n if (item) {\r\n menuDatas.push(item);\r\n }\r\n }\r\n }\r\n menuDatas.sort((data1, data2) => {\r\n if (Number.isNaN(data1.sort)) return 1;\r\n if (Number.isNaN(data2.sort)) return -1;\r\n return data1.sort - data2.sort;\r\n });\r\n // console.log(\"getPlatformBortherMenusByMenuID\",menuDatas);\r\n //获取菜单数据\r\n return menuDatas;\r\n};\r\n\r\n\r\n\r\n/**\r\n * 通过角色IDS获取该平台菜单权限映射\r\n * @param {*} menu_id \r\n * @returns \r\n */\r\nexport const getPlatformMenuMappingsByRoleIDs =async (role_ids,app_id) =>{\r\n let queryData_groupData = {\r\n \"param\": {\r\n \"role_ids\": role_ids,\r\n \"app_id\":app_id\r\n }\r\n };\r\n let result =await request.post(`/dataservice/rest/orchestration/getPlatformMenuMappingsByRoleIDs`,queryData_groupData);\r\n let mappingDatas = result.data.mappingDatas;\r\n //获取菜单数据\r\n return mappingDatas;\r\n};\r\n\r\n\r\n/**\r\n * 转换门户菜单数据\r\n * @param {*} datas 所有的快捷菜单访问信息\r\n * @param {*} menuTypes 快捷访问菜单类型\r\n * @param {*} filterObjectMap 角色快捷菜单访问映射信息\r\n * @returns\r\n */\r\nconst transformPortalData = (datas, menuTypes, filterObjectMap) => {\r\n let menuMaps = {};\r\n let menuTypeMaps = {};\r\n let parentMaps = {};\r\n //缓存所有父亲菜单信息\r\n for (let key in filterObjectMap) {\r\n let item = filterObjectMap[key];\r\n if(!item) continue;\r\n let parent_id = item.parent_id;\r\n if (parent_id) {\r\n parentMaps[parent_id] = true;\r\n }\r\n }\r\n //缓存所有菜单信息\r\n for (const data of datas) {\r\n let id = data.id;\r\n let tempMenuData = {\r\n id: id,\r\n index: data.menu_id,\r\n name: data.title,\r\n sort: data.sort,\r\n actionType: data.actionType,\r\n url: data.url,\r\n iconClass: data.image?data.image:data.type == \"4\"?\"\":\"el-icon-menu\",\r\n parent_id: data.parent_id,\r\n children: [],\r\n app_id: data.app_id,\r\n menu_id: data.menu_id,\r\n beyond_type: data.menu_type ? data.menu_type : \"RJVIEW-OTHERS\",\r\n beyond_type_sort: data.menu_type_sort ? data.menu_type_sort : 999,\r\n type:\"MenuItem\",\r\n typeID:data.type,\r\n };\r\n //如果存在快捷菜单映射数据或者是主菜单入口\r\n //如果是主菜单或者存在快捷访问映射或者孩子存在快捷访问映射或者是应用默认的菜单,则纳入到菜单中\r\n if ((filterObjectMap&&filterObjectMap[id]) || data.type == \"4\" || parentMaps[id] || data.is_app_defalut==\"1\") {\r\n //TODO:判断是否有平台系统的menu_id权限,有可能有映射权限,但角色没有平台权限,则不显示\r\n menuMaps[id] = tempMenuData;\r\n }\r\n }\r\n //缓存所有菜单类型信息\r\n for (const menuData of menuTypes) {\r\n let id = menuData.id;\r\n menuTypeMaps[id] = menuData;\r\n }\r\n for (const data of datas) {\r\n let type = data.type;\r\n //5:子菜单入口\r\n if (type == \"5\") {\r\n let tempMenuData = menuMaps[data.id];\r\n //如果没有对应的菜单数据,则跳过\r\n if (!tempMenuData) continue;\r\n let parent_id = data.parent_id;\r\n let tempType = tempMenuData.beyond_type;\r\n // let tempType_sort =tempMenuData.beyond_type_sort;\r\n let tempParentMenu = menuMaps[parent_id];\r\n if (!tempParentMenu) continue;\r\n let parentTypes = tempParentMenu.children;\r\n let parentType = parentTypes.find((tempTypeItem) => {\r\n return tempTypeItem.id == tempType;\r\n });\r\n if (parentType) {\r\n let type_childens = parentType.children;\r\n type_childens.push(tempMenuData);\r\n tempMenuData.typeItem = parentType;\r\n } else {\r\n let menuTypeObj = menuTypeMaps[tempType];\r\n let parentType = menuTypeObj\r\n ? {\r\n id: tempType,\r\n index: tempType,\r\n name: menuTypeObj.title,\r\n children: [],\r\n sort: menuTypeObj.value,\r\n type:\"MenuType\",\r\n }\r\n : {\r\n id: tempType,\r\n index: tempType,\r\n name: \"其他\",\r\n children: [],\r\n sort: 999,\r\n type:\"MenuType\"\r\n };\r\n let type_childens = parentType.children;\r\n type_childens.push(tempMenuData);\r\n parentTypes.push(parentType);\r\n tempMenuData.typeItem = parentType;\r\n }\r\n }\r\n }\r\n const menuList = [];\r\n for (const data of datas) {\r\n let type = data.type;\r\n //4:主菜单入口\r\n if (type == \"4\") {\r\n let tempMenuData = menuMaps[data.id];\r\n //如果没有对应的菜单数据,则跳过\r\n if (!tempMenuData) continue;\r\n let menuTypes = tempMenuData.children;\r\n let count = 0;\r\n for (const menuType of menuTypes) {\r\n let type_childens = menuType.children;\r\n let tempCount = type_childens.length;\r\n count = count + tempCount;\r\n if (tempCount > 0) {\r\n break;\r\n }\r\n }\r\n //如果不是默认菜单,并且没有快捷访问权限,并且孩子没有快捷访问权限,则不显示\r\n if(data.is_app_defalut!=\"1\") {\r\n // 如果没有权限,也没有子菜单时 则跳过\r\n if(filterObjectMap&&!filterObjectMap[data.id]&&count==0) {\r\n continue;\r\n }\r\n }\r\n menuList.push(tempMenuData);\r\n let types = tempMenuData.children;\r\n types.sort((data1, data2) => {\r\n if (Number.isNaN(data1.sort)) return 1;\r\n if (Number.isNaN(data2.sort)) return -1;\r\n return data1.sort - data2.sort;\r\n });\r\n for (let typeItem of types) {\r\n let tempArrys = typeItem.children;\r\n tempArrys.sort((data1, data2) => {\r\n if (Number.isNaN(data1.sort)) return 1;\r\n if (Number.isNaN(data2.sort)) return -1;\r\n return data1.sort - data2.sort;\r\n });\r\n }\r\n }\r\n }\r\n menuList.sort((data1, data2) => {\r\n if (Number.isNaN(data1.sort)) return 1;\r\n if (Number.isNaN(data2.sort)) return -1;\r\n return data1.sort - data2.sort;\r\n });\r\n // console.log(menuList);\r\n return menuList;\r\n};\r\n\r\n/**\r\n * 转换门户用户快捷菜单数据\r\n * @param {*} quickDatas\r\n * @returns\r\n */\r\nexport const transformPortalQuickMenuDatas = (quickDatas,defaultDatas) => {\r\n quickDatas = quickDatas ? quickDatas : [];\r\n defaultDatas = defaultDatas ? defaultDatas : [];\r\n let tempDatas = quickDatas.concat(defaultDatas);\r\n let tempDatasMap = {};\r\n let finalMenuDatas = [];\r\n for (const item of tempDatas) {\r\n let id = item.id;\r\n if(!tempDatasMap[id]) {\r\n tempDatasMap[id] = item;\r\n finalMenuDatas.push(item);\r\n }\r\n }\r\n let quickMenuMaps = {};\r\n for (const data of finalMenuDatas) {\r\n let id = data.id;\r\n let tempMenuData = {\r\n id: id,\r\n label: data.title,\r\n sort: data.sort,\r\n children: [],\r\n parent_id: data.parent_id,\r\n type: data.type,\r\n };\r\n quickMenuMaps[id] = tempMenuData;\r\n }\r\n for (const data of finalMenuDatas) {\r\n let tempMenuData = quickMenuMaps[data.id];\r\n //5:子菜单入口\r\n if (tempMenuData.type == \"5\") {\r\n let parent_id = tempMenuData.parent_id;\r\n let tempParentMenu = quickMenuMaps[parent_id];\r\n if (tempParentMenu) {\r\n let parentChilden = tempParentMenu.children;\r\n parentChilden.push(tempMenuData);\r\n }\r\n }\r\n }\r\n const menuList = [];\r\n for (const data of finalMenuDatas) {\r\n let tempMenuData = quickMenuMaps[data.id];\r\n //4:主菜单入口\r\n if (tempMenuData.type == \"4\") {\r\n menuList.push(tempMenuData);\r\n let tempArrys = tempMenuData.children;\r\n tempArrys.sort((data1, data2) => {\r\n if (Number.isNaN(data1.sort)) return 1;\r\n if (Number.isNaN(data2.sort)) return -1;\r\n return data1.sort - data2.sort;\r\n });\r\n }\r\n }\r\n menuList.sort((data1, data2) => {\r\n if (Number.isNaN(data1.sort)) return 1;\r\n if (Number.isNaN(data2.sort)) return -1;\r\n return data1.sort - data2.sort;\r\n });\r\n return menuList;\r\n};\r\n\r\nexport const transformPortalSystemMenuDatas = (datas) => {\r\n let menuMaps = {};\r\n for (const data of datas) {\r\n let id = data.id;\r\n let tempMenuData = {\r\n id: id,\r\n label: data.name,\r\n sort: data.sort,\r\n icon: data.icon,\r\n children: [],\r\n app_id: data.datapp_id,\r\n parent_id: data.parent_id,\r\n leaf_flag: data.leaf_flag,\r\n };\r\n menuMaps[id] = tempMenuData;\r\n }\r\n for (const data of datas) {\r\n let leaf_flag = data.leaf_flag;\r\n //5:子菜单入口\r\n if (leaf_flag == 1) {\r\n let tempMenuData = menuMaps[data.id];\r\n let parent_id = data.parent_id;\r\n let tempParentMenu = menuMaps[parent_id];\r\n if (tempParentMenu) {\r\n let parentChilden = tempParentMenu.children;\r\n parentChilden.push(tempMenuData);\r\n }\r\n }\r\n }\r\n const menuList = [];\r\n for (const data of datas) {\r\n let leaf_flag = data.leaf_flag;\r\n //4:主菜单入口\r\n if (leaf_flag == 0) {\r\n let tempMenuData = menuMaps[data.id];\r\n menuList.push(tempMenuData);\r\n let tempArrys = tempMenuData.children;\r\n tempArrys.sort((data1, data2) => {\r\n if (Number.isNaN(data1.sort)) return 1;\r\n if (Number.isNaN(data2.sort)) return -1;\r\n return data1.sort - data2.sort;\r\n });\r\n }\r\n }\r\n menuList.sort((data1, data2) => {\r\n if (Number.isNaN(data1.sort)) return 1;\r\n if (Number.isNaN(data2.sort)) return -1;\r\n return data1.sort - data2.sort;\r\n });\r\n return menuList;\r\n};\r\n\r\n/**\r\n * 获取当前用户默认的门户页面ID\r\n *\r\n * 该方法用于获取当前用户在门户中的默认页面ID\r\n * @param {信息} userData\r\n * @returns\r\n */\r\nexport const getCurrentUserPortalPageID = async (userData) => {\r\n let queryData = {\r\n param: {\r\n userData: userData,\r\n },\r\n };\r\n let response = await request.post(\r\n `/dataservice/rest/orchestration/getPortalPageID`,\r\n queryData\r\n );\r\n let portal_id = response.data.portal_id;\r\n return portal_id;\r\n};\r\n\r\n/**\r\n * 获取当前用户默认的门户页面ID\r\n *\r\n * 该方法用于获取当前用户在门户中的默认页面ID\r\n * @param {信息} userData\r\n * @returns\r\n */\r\nexport const getCurrentUserPortalMapping = async (userData) => {\r\n let queryData = {\r\n param: {\r\n userData: userData,\r\n },\r\n };\r\n let response = await request.post(\r\n `/dataservice/rest/orchestration/getPortalMappingInfo`,\r\n queryData\r\n );\r\n let portal_id = response.data.portal_info;\r\n return portal_id;\r\n};\r\n\r\n/**\r\n * 获取当前用户默认的门户页面ID\r\n *\r\n * 该方法用于获取当前用户在门户中的默认页面ID\r\n * @param {信息} userData\r\n * @returns\r\n */\r\nexport const getPortalInfosByID = async (id) => {\r\n let queryData = {\r\n param: {\r\n id: id,\r\n },\r\n };\r\n let response = await request.post(\r\n `/dataservice/rest/orchestration/getPortalInfosByID`,\r\n queryData\r\n );\r\n let portalInfo = response.data.portalInfo;\r\n return portalInfo;\r\n};\r\n\r\n/**\r\n * 通过租户名称模糊匹配获取租户信息\r\n *\r\n * @param {名称信息} name\r\n * @returns\r\n */\r\nexport const getTenetInfoByName = async (name) => {\r\n let queryData = {\r\n param: {\r\n name: name,\r\n },\r\n };\r\n let response = await request.post(\r\n `/dataservice/rest/orchestration/getTenetInfoByName`,\r\n queryData\r\n );\r\n let resultDatas = response.data.resultDatas;\r\n return resultDatas;\r\n};\r\n\r\n/**\r\n * 获取当前用户在门户中的所有映射数据\r\n * @param {信息} data\r\n * @returns\r\n */\r\nexport const getUserAllMappngPortal = (data) => {\r\n let queryData = {\r\n param: {\r\n userData: data,\r\n },\r\n };\r\n return request.post(\r\n `/dataservice/rest/orchestration/getUserAllMappngPortal`,\r\n queryData\r\n );\r\n};\r\n\r\n/**\r\n * 获取用户关联门户关联映射信息\r\n * @param {信息} data\r\n * @returns\r\n */\r\nexport const getPortalUserMappingInfos = async (data) => {\r\n let queryData = {\r\n param: {\r\n operateData: data,\r\n },\r\n };\r\n let responseData = await request.post(\r\n `/dataservice/rest/orchestration/getPortalUserMappingInfos`,\r\n queryData\r\n );\r\n let userMappingData = responseData.data.portalMapping;\r\n return userMappingData;\r\n};\r\n\r\n/**\r\n * 通过页面ID获取页面配置\r\n * @param {信息} data\r\n * @returns\r\n */\r\nexport const getPortalPageConfig = async (pageID) => {\r\n let queryData = {\r\n param: {\r\n id: pageID,\r\n },\r\n };\r\n let pageConfigResponse = await request.post(\r\n `/dataservice/rest/orchestration/getPortalPageConfig`,\r\n queryData\r\n );\r\n let configStr = pageConfigResponse.data.portal_page_config || \"[]\";\r\n return configStr;\r\n};\r\n\r\n/**\r\n * 通过页面ID设置页面配置\r\n * @param {信息} data\r\n * @returns\r\n */\r\nexport const setPortalPageConfig = (configData) => {\r\n let queryData = {\r\n param: configData,\r\n };\r\n return request.post(\r\n `/dataservice/rest/orchestration/setPortalPageConfig`,\r\n queryData\r\n );\r\n};\r\n\r\n/**\r\n * 更新用户选择的门户\r\n * @param {信息} data\r\n * @returns\r\n */\r\nexport const updateUserSelectPortal = (data) => {\r\n let queryData = {\r\n param: {\r\n portalMappingData: data,\r\n },\r\n };\r\n return request.post(\r\n `/dataservice/rest/orchestration/updateUserSelectPortal`,\r\n queryData\r\n );\r\n};\r\n\r\n/**\r\n * 获取当前用户在门户中的默认页面ID\r\n *\r\n * 该方法用于获取当前用户在门户中的默认页面ID\r\n * @param {信息} userData\r\n * @returns\r\n */\r\nexport const getPortalPageMenuID = async (pageID, app_id) => {\r\n let queryData = {\r\n param: {\r\n id: pageID,\r\n appid: app_id,\r\n },\r\n };\r\n let response = await request.post(\r\n `/dataservice/rest/orchestration/getPortalPageMenuID`,\r\n queryData\r\n );\r\n let menu_id = response.data.menu_id;\r\n return menu_id;\r\n};\r\n\r\n// 查询门户映射应用信息\r\n// * @param appID 应用ID\r\n// * @param groupID 集团ID\r\nexport const getMappingAppInfoByID = async (appID, groupID) => {\r\n let queryData = {\r\n param: {\r\n appID: appID,\r\n groupID: groupID,\r\n },\r\n };\r\n let resultData = await request.post(\r\n `/dataservice/rest/orchestration/getPortalMappingAppInfoByID`,\r\n queryData\r\n );\r\n let appInfo = resultData.data.appInfo;\r\n return appInfo;\r\n};\r\n\r\n/**\r\n *\r\n * @returns 获取门户登录页面的公告信息\r\n */\r\nexport const getLoginPageNotices = async (groupID) => {\r\n let queryData = {\r\n param: {\r\n id: \"1005\",\r\n groupID: groupID, // 集团ID\r\n },\r\n };\r\n let resultData = await request.post(\r\n `/dataservice/rest/orchestration/getNoticeInfosByAppTypeID`,\r\n queryData\r\n );\r\n let noticeInfos = resultData.data.resultDatas;\r\n return noticeInfos;\r\n};\r\n\r\n/**\r\n * 获取对应租户的组织的公告信息\r\n * @param {*} groupID \r\n * @returns \r\n */\r\nexport const getPortalNotices = async(groupID) => {\r\n let queryData={\r\n \"param\":{\r\n \"id\":groupID\r\n }\r\n };\r\n let resultData = await request.post(`/dataservice/rest/orchestration/getNoticesInfosByGroupID`, queryData);\r\n return resultData;\r\n}\r\n\r\n/**\r\n * 获取门户单点登录接入Token\r\n * @param {*} appKey\r\n * @param {*} appSecret\r\n * @returns\r\n */\r\nexport const getPortalAccessToken = async (appKey, appSecret) => {\r\n let result = await request.get(\r\n `/appAuth/getAccessToken?appKey=${appKey}&appSecret=${appSecret}`\r\n );\r\n let token = result.data;\r\n return token;\r\n};\r\n\r\n/**\r\n * 通过code和接入Token获取用户身份信息\r\n * @param {*} code\r\n * @param {*} access_token\r\n * @returns\r\n */\r\nexport const getPortalUserInfo = async (code, access_token) => {\r\n let result = await request.get(\r\n `/systhirdapp/user/getUserByCode?code=${code}&access_token=${access_token}`\r\n );\r\n let data = result.data;\r\n return data;\r\n};\r\n\r\n/**\r\n * 通过用户ID,平台类型,租户ID获取用户IM的签名ID\r\n * @param {*} userID\r\n * @param {*} platType\r\n * @param {*} groupID\r\n * @returns\r\n */\r\nexport const getPortalUserSig = async (userID, platType, groupID) => {\r\n let queryData = {\r\n param: {\r\n userID: userID,\r\n im_type: platType,\r\n group_id: groupID,\r\n },\r\n };\r\n let result = await request.post(\r\n `/dataservice/rest/orchestration/getIMUserSigByID`,\r\n queryData\r\n );\r\n let sigID = result.data.userSig;\r\n return sigID;\r\n};\r\n\r\n/**\r\n * 通过租户ID获取门户应用的客户配置\r\n * @param {*} groupID\r\n * @returns\r\n */\r\nexport const getPortalAppCustomConfig = async (groupID) => {\r\n let requestData = {\r\n param: {\r\n groupID: groupID,\r\n },\r\n };\r\n let result = await request.post(\r\n `/dataservice/rest/orchestration/getPortalAppCustomConfig`,\r\n requestData\r\n );\r\n let appInfo = result.data.configInfo;\r\n return appInfo;\r\n};\r\n\r\n/**\r\n * 查询当前企业组织的集团组织ID\r\n * @param id 组织ID\r\n *\r\n */\r\nexport const queryGroupIDByOfficeId = async (id) => {\r\n let queryData_office = {\r\n param: {\r\n id: id,\r\n },\r\n };\r\n let result = await request.post(\r\n `/dataservice/rest/orchestration/getGroupIDByDptID`,\r\n queryData_office\r\n );\r\n let groupDptData = result.data.resultDptData;\r\n let group_id = groupDptData.id;\r\n return group_id;\r\n};\r\n\r\n/**\r\n * 查询app变量\r\n * @param id 组织ID\r\n *\r\n */\r\nexport const queryAppVariable = (name, appVariables) => {\r\n if (appVariables && appVariables.length > 0) {\r\n for (let i = 0; i < appVariables.length; i++) {\r\n if (appVariables[i].name == name) {\r\n return appVariables[i].default_value;\r\n }\r\n }\r\n }\r\n return \"\";\r\n};\r\n\r\nexport const getThirdAppPathByKey = async (appkey, appSecret, groupID) => {\r\n let requestData = {\r\n param: {\r\n appKey: appkey,\r\n appSecret: appSecret,\r\n groupID: groupID,\r\n },\r\n };\r\n let result = await request.post(\r\n `/dataservice/rest/orchestration/getThirdAppPathByKey`,\r\n requestData\r\n );\r\n let path = result.data.path;\r\n return path;\r\n};\r\n\r\nexport const queryAndStoreAppVariable = (name, appVariables) => {\r\n let value = window.sessionStorage.getItem(\"isdata_app_variable_\" + name);\r\n if (!value) {\r\n value = queryAppVariable(name, appVariables);\r\n if (value) {\r\n window.sessionStorage.setItem(\"isdata_app_variable_\" + name, value);\r\n }\r\n }\r\n return value;\r\n};\r\n\r\n/**\r\n * 添加或更新对象使用次数\r\n * @param {信息} data\r\n * @returns\r\n */\r\nexport const addObjectUsedTimes = (data) => {\r\n let queryData = {\r\n param: {\r\n operateData: data,\r\n },\r\n };\r\n return request.post(\r\n `/dataservice/rest/orchestration/addObjectUsedTimes`,\r\n queryData\r\n );\r\n};\r\n\r\n/**\r\n * 获取对象使用次数\r\n * @param {信息} data\r\n * @returns\r\n */\r\nexport const getObjectUseTimes = (data) => {\r\n let queryData = {\r\n param: {\r\n objectInfo: data,\r\n },\r\n };\r\n return request.post(\r\n `/dataservice/rest/orchestration/getObjectUseTimes`,\r\n queryData\r\n );\r\n};\r\n\r\n/**\r\n * 获取组件的页面ID\r\n * @param {信息} data\r\n * @returns\r\n */\r\nexport const getPageIDByComponentID = async (componentID) => {\r\n let queryData = {\r\n param: {\r\n componentID: componentID,\r\n },\r\n };\r\n let response = await request.post(\r\n `/dataservice/rest/orchestration/getPageIDByComponentID`,\r\n queryData\r\n );\r\n let pageID = response.data.page_id;\r\n return pageID;\r\n};\r\n\r\n/**\r\n * 通过账户名获取集团组织映射数据\r\n * @param {*} account\r\n * @returns\r\n */\r\nexport const getGroupMappingsByAccount = async (account) => {\r\n let queryData = {\r\n param: {\r\n account: account,\r\n },\r\n };\r\n let resultData = await request.post(\r\n `/dataservice/rest/orchestration/getGourpMappingsByAccountName`,\r\n queryData\r\n );\r\n let tenetGroupDatas = resultData.data.resultGroups;\r\n return tenetGroupDatas;\r\n};\r\n\r\n/**\r\n * 通过手机号获取集团组织映射数据\r\n * @param {*} phone \r\n * @returns \r\n */\r\nexport const getGourpMappingsByPhoneNumber = async (phone) => {\r\n let queryData = {\r\n param: {\r\n phone: phone,\r\n },\r\n };\r\n let resultData = await request.post(\r\n `/dataservice/rest/orchestration/getGourpMappingsByPhoneNumber`,\r\n queryData\r\n );\r\n let tenetGroupDatas = resultData.data.resultGroups;\r\n return tenetGroupDatas;\r\n};\r\n\r\n/**\r\n * 查询当前企业组织的集团组织ID\r\n * @param id 组织ID\r\n *\r\n */\r\nexport const queryGroupInfosByOfficeId = async (id) => {\r\n let queryData_office = {\r\n param: {\r\n id: id,\r\n },\r\n };\r\n let result = await request.post(\r\n `/dataservice/rest/orchestration/getGroupIDByDptID`,\r\n queryData_office\r\n );\r\n let groupDptData = result.data.resultDptData;\r\n return groupDptData;\r\n};\r\n\r\n/**\r\n * 查询当前企业组织信息\r\n * @param id 组织ID\r\n *\r\n */\r\nexport const getOfficeInfosByIDs = async (group_ids) => {\r\n let queryData_groupData = {\r\n param: {\r\n ids: group_ids,\r\n },\r\n };\r\n let resultData = await request.post(\r\n `/dataservice/rest/orchestration/getOfficeInfosByIDs`,\r\n queryData_groupData\r\n );\r\n let groupDatas = resultData.data.officeInfos;\r\n return groupDatas;\r\n};\r\n\r\n/**\r\n * 查询当前企业组织信息\r\n * @param id 组织ID\r\n *\r\n */\r\nexport const queryOfficeInfosById = async (officeID) => {\r\n let queryData = {\r\n param: {\r\n id: officeID,\r\n },\r\n };\r\n let resultData = await request.post(\r\n `/dataservice/rest/orchestration/getOfficeInfosByID`,\r\n queryData\r\n );\r\n let groupDptData = resultData.data.officeData;\r\n return groupDptData;\r\n};\r\n\r\n/**\r\n * 获取应用信息通过ID\r\n * @param {*} id\r\n * @returns\r\n */\r\nexport const getAPPInfosByID = async (id) => {\r\n let queryData = {\r\n param: {\r\n id: id,\r\n },\r\n };\r\n let resultData = await request.post(\r\n `/dataservice/rest/orchestration/getAPPInfosByID`,\r\n queryData\r\n );\r\n let groupDptData = resultData.data.appInfo;\r\n return groupDptData;\r\n};\r\n\r\nexport const getAllUserInfosByGroupID = async (groupID) => {\r\n let requestData = {\r\n param: {\r\n groupID: groupID,\r\n },\r\n };\r\n let result = await request.post(\r\n `/dataservice/rest/orchestration/getAllUserInfosByGroupID`,\r\n requestData\r\n );\r\n let data = result.data.resultDatas;\r\n return data;\r\n};\r\n\r\nexport const getChildrenOfficeInfosByID = async (officeID) => {\r\n let requestData = {\r\n param: {\r\n officeID: officeID,\r\n },\r\n };\r\n let result = await request.post(\r\n `/dataservice/rest/orchestration/getChildrenOfficeInfosByID`,\r\n requestData\r\n );\r\n let data = result.data.resultDatas;\r\n return data;\r\n};\r\n\r\nexport const getPojectDptsByUserAndGroupID = async (userID, groupID) => {\r\n let requestData = {\r\n param: {\r\n userID: userID,\r\n groupID: groupID,\r\n },\r\n };\r\n let result = await request.post(\r\n `/dataservice/rest/orchestration/getPojectDptsByUserAndGroupID`,\r\n requestData\r\n );\r\n let data = {\r\n dptDatas: result.data.officeDatas,\r\n userMappings: result.data.userMappings,\r\n };\r\n return data;\r\n};\r\n\r\n/**\r\n * 添加IM签名ID映射关系\r\n */\r\nexport const addIMMapping = async (userID, platType, groupID, sigID) => {\r\n let queryData = {\r\n param: {\r\n data: {\r\n userID: userID,\r\n im_type: platType,\r\n group_id: groupID,\r\n userSig: sigID,\r\n },\r\n },\r\n };\r\n let result = await request.post(\r\n `/dataservice/rest/orchestration/addIMMapping`,\r\n queryData\r\n );\r\n let resultData = result.data;\r\n return resultData;\r\n};\r\n\r\nexport const getAIRobotInfos = async (userID, groupID) => {\r\n let requestData = {\r\n param: {\r\n userID: userID,\r\n groupID: groupID,\r\n },\r\n };\r\n let result = await request.post(\r\n `/dataservice/rest/orchestration/getAIRobotInfos`,\r\n requestData\r\n );\r\n let infos = result.data.robotInfos;\r\n return infos;\r\n};\r\n\r\n/**\r\n * 添加IM签名ID映射关系\r\n */\r\nexport const updateIMMapping = async (userID, platType, groupID, sigID) => {\r\n let queryData = {\r\n param: {\r\n userID: userID,\r\n im_type: platType,\r\n groupID: groupID,\r\n userSig: sigID,\r\n },\r\n };\r\n let result = await request.post(\r\n `/dataservice/rest/orchestration/updateIMMapping`,\r\n queryData\r\n );\r\n let resultData = result.data;\r\n return resultData;\r\n};\r\n\r\n/**\r\n * 获取应用自定义数据\r\n * @param {*} appID\r\n * @returns\r\n */\r\nexport const getAppCustomData = async (appID) => {\r\n let requestData = {\r\n param: {\r\n appID: appID,\r\n },\r\n };\r\n let result = await request.post(\r\n `/dataservice/rest/orchestration/getAppCustomData`,\r\n requestData\r\n );\r\n let infos = result.data.customData;\r\n infos = infos ? JSON.parse(infos) : {};\r\n return infos;\r\n};\r\n\r\n/**\r\n * 获取集成应用的信息\r\n * @param {*} appID\r\n * @returns\r\n */\r\nexport const getIntegrateAppInfoByID = async (appID) => {\r\n let requestData = {\r\n param: {\r\n appID: appID,\r\n },\r\n };\r\n let result = await request.post(\r\n `/dataservice/rest/orchestration/getIntegrateAppInfoByID`,\r\n requestData\r\n );\r\n let appInfo = result.data.appInfo;\r\n return appInfo;\r\n};\r\n\r\n// 更新服务器i18n文本\r\nexport const savePortalI18nText=async(key, value,lang,beyondID,i18nType)=>{\r\n let app_id =getPoratlAppID();\r\n let requestData = {\r\n param: {\r\n key: key,\r\n value: value,\r\n appID:app_id,\r\n lang:lang,\r\n beyondID:beyondID,\r\n i18nType:i18nType\r\n },\r\n };\r\n let result = await request.post(\r\n `/dataservice/rest/orchestration/savePortalI18nText`,\r\n requestData\r\n );\r\n let resultData = result.data.resultData;\r\n return resultData;\r\n};\r\n\r\n\r\n// 通过账户名和租户获取手机号\r\nexport const getPhoneNumberByAccountName=async(accountName,groupID)=>{\r\n let requestData = {\r\n param:{\r\n accountName: accountName,\r\n groupID: groupID,\r\n }\r\n };\r\n let result = await request.post(\r\n `/dataservice/rest/orchestration/getPhoneNumberByAccountName`,\r\n requestData\r\n );\r\n let phone = result.data.phone;\r\n return phone;\r\n};\r\n","import request from \"./request\";\r\nimport {getPoratlAppID,getAppCustomData} from \"./portal\";\r\n\r\n\r\nexport const sendPostToAIAgent = async(queryData,successCallback,errorCallback) => {\r\n let appid =getPoratlAppID();\r\n let appCustomData = await getAppCustomData(appid);\r\n let aiAgentServerIP =appCustomData?.aiAgentServerIP ||\"\";\r\n if(!aiAgentServerIP){\r\n console.error(\"没有配置AI Agent服务地址,请联系管理员\");\r\n if(errorCallback)errorCallback(\"没有配置AI Agent服务地址,请联系管理员\");\r\n return;\r\n }\r\n let serverUrl = `${aiAgentServerIP}/addAndCleanDocument`;\r\n request.post(serverUrl, JSON.stringify(queryData)).then((res) => {\r\n console.log(\"发送消息成功:\", res);\r\n if(successCallback)successCallback(res);\r\n }).catch((error) => {\r\n console.error(\"发送消息失败:\", error);\r\n if(errorCallback)errorCallback(error);\r\n });\r\n}\r\n\r\nexport const getDifyFileType = (fileType) => {\r\n let typeOptions ={\r\n \"DOCX\":\"document\",\r\n \"TXT\":\"document\",\r\n \"MD\":\"document\",\r\n \"MARKDOWN\":\"document\",\r\n \"MDX\":\"document\",\r\n \"PDF\":\"document\",\r\n \"HTML\":\"document\",\r\n \"XLSX\":\"document\",\r\n \"XLS\":\"document\",\r\n \"VTT\":\"document\",\r\n \"DOC\":\"document\",\r\n \"CSV\":\"document\",\r\n \"EML\":\"document\",\r\n \"MSG\":\"document\",\r\n \"PPTX\":\"document\",\r\n \"PPT\":\"document\",\r\n \"XML\":\"document\",\r\n \"EPUB\":\"document\",\r\n \"JPG\":\"image\",\r\n \"JPEG\":\"image\",\r\n \"PNG\":\"image\",\r\n \"GIF\":\"image\",\r\n \"WEBP\":\"image\",\r\n \"MP3\":\"audio\",\r\n \"M4A\":\"audio\",\r\n \"WAV\":\"audio\",\r\n \"WEBM\":\"audio\",\r\n \"MPGA\":\"audio\",\r\n \"MP4\":\"video\",\r\n \"MOV\":\"video\",\r\n \"MPEG\":\"video\",\r\n }\r\n let key =fileType.toUpperCase();\r\n return typeOptions[key] || \"custom\";\r\n}\r\n"],"names":["querystringify_1","apiContextPath","getInstance","prefix","startsWith","slice","length","endsWith","instance","axios","create","baseURL","timeout","validateStatus","status","headers","window","location","search","qs","parse","token","oldPost","post","url","data","config","VITE_SERVICE_BASE_URL","newUrl","call","defaults","interceptors","response","use","JSON","Blob","Promise","reject","result","error","prefixPath","getPoratlAppID","portal_app_id","sessionStorage","getItem","getCurrentAppID","app_id","appSdk","getAppId","localStorage","MobileAppId","getAppCustomData","appID","requestData","param","request","infos","customData","sendPostToAIAgent","queryData","successCallback","errorCallback","appid","appCustomData","aiAgentServerIP","console","serverUrl","stringify","then","res","log","catch","getDifyFileType","fileType","typeOptions","key","toUpperCase"],"mappings":"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","x_google_ignoreList":[0]}