Compare commits

...

269 Commits

Author SHA1 Message Date
cai.pingxiang
fb9b581022 fix router 丢失问题 2025-12-07 17:59:22 +08:00
hehongqiang
40c9f1d189 Merge remote-tracking branch 'origin/master-zsh-2' into feature/20251130-hhq
# Conflicts:
#	src/api/cesource/index.js
#	src/assets/images/project/title-bg.png
#	src/components/Course/courseForm.vue
#	src/components/Course/courseTag.vue
#	src/components/PortalHeader.vue
#	src/router/index.js
#	src/views/portal/case/Detail.vue
#	src/views/portal/case/Index.vue
#	src/views/portal/course/Detail.vue
#	src/views/portal/course/Index.vue
#	src/views/study/coursenew.vue
#	src/views/tag/TagManageList.vue
2025-12-07 15:41:52 +08:00
cai.pingxiang
bc8eaa0eac 测评详情免登 2025-12-05 15:33:40 +08:00
cai.pingxiang
c52173fb70 共享者大会迁移 2025-12-05 14:55:46 +08:00
joshen
738add6f18 Merge branch 'master' into ebiz-uat-2025-11-06 2025-12-04 19:30:29 +08:00
joshen
a7763057c4 Merge remote-tracking branch 'aliyun/20251203-fix-1320' 2025-12-04 17:18:25 +08:00
joshen
421e2b2c51 Merge remote-tracking branch 'aliyun/ebiz-uat-2025-11-06' into ebiz-uat-2025-11-06 2025-12-04 11:07:03 +08:00
zxj
12e91854fe fix:恢复保留其余选择条件的逻辑 2025-12-03 17:46:13 +08:00
zxj
3852a92ab3 fix:返回列表页时先触发校验再执行接口 2025-12-03 17:40:44 +08:00
zxj
56103bbdf6 fix:案例详情页点击搜索返回列表页时触发接口 2025-12-03 17:21:04 +08:00
zxj
d2f3b2d79c fix:解决案例详情页搜索不生效问题 2025-12-03 16:33:23 +08:00
bjzhoujian
4e1940b36f 设置ai弹窗滑动 2025-12-02 10:57:24 +08:00
cai.pingxiang
42713a8685 pc贡献者大会入口免登 2025-11-28 22:33:51 +08:00
joshen
3e344a8374 Merge branch 'master' into ebiz-uat-2025-11-06 2025-11-27 17:58:33 +08:00
joshen
82598dd5e0 Merge branch '20251124-fix-1302' 2025-11-27 17:10:43 +08:00
zxj
da72c156e9 fix:修复案例详情校验携带缓存 2025-11-27 12:19:47 +08:00
joshen
f731bb425f Merge branch '20251124-fix-1302' 2025-11-25 19:09:03 +08:00
zxj
8c2f128578 fix:回滚案例详情校验调整 2025-11-25 18:53:35 +08:00
joshen
f16c6eb157 Merge branch '20251124-fix-1302' 2025-11-25 17:44:58 +08:00
bjzhoujian
6016e00ae8 top设为0 2025-11-25 16:42:48 +08:00
bjzhoujian
7155976f31 样式修改 2025-11-25 16:05:02 +08:00
bjzhoujian
4ca01ba233 阻止冒泡 2025-11-25 15:07:09 +08:00
bjzhoujian
7368fa7a8c 调试回车导致弹窗闪动 2025-11-25 11:57:07 +08:00
joshen
d09cbfac5f Merge remote-tracking branch 'aliyun/ebiz-uat-2025-11-06' into ebiz-uat-2025-11-06 2025-11-25 11:03:24 +08:00
bjzhoujian
fd903d0974 调试回车导致弹窗闪动 2025-11-25 10:06:21 +08:00
dong.ai
42885e0d61 修改标题展示 2025-11-24 18:35:56 +08:00
zxj
0b3b9ad082 fix:请求uapi.boe.com.cn禁用缓存 2025-11-24 17:44:06 +08:00
zxj
38fe538e4e fix:案例详情校验禁用缓存 2025-11-24 16:30:47 +08:00
joshen
052ab0be6f Merge branch '20251121-fix-1298' 2025-11-22 17:51:01 +08:00
zxj
4c453e3974 fix:跳转登录判断是否被嵌入 2025-11-22 14:28:58 +08:00
zxj
47dde458de fix:修复被嵌页面token过期不一致问题 2025-11-21 10:33:35 +08:00
670788339
3701605f7a 标签-精品课程库 课程名称与标签间距调整 2025-11-19 17:59:40 +08:00
670788339
b021be2f6f Merge remote-tracking branch '104/master' into 104-master 2025-11-19 13:37:35 +08:00
670788339
11e34ca335 标签-课程库 课程名称与标签间距调整 2025-11-19 13:37:14 +08:00
joshen
bf20eced9b Merge branch 'master' into ebiz-uat-2025-11-06 2025-11-17 18:58:49 +08:00
670788339
8f2da1c736 取消processStatus setup写法 2025-11-17 18:25:29 +08:00
670788339
322172edec Merge branch 'master-20251023-tag' into merge-20251113-tag
# Conflicts:
#	src/components/Course/courseTag.vue
2025-11-17 13:28:18 +08:00
670788339
c801dc8a3d 精品课导航样式 2025-11-14 10:32:42 +08:00
670788339
838e704ab0 精品课导航样式 2025-11-14 08:58:42 +08:00
670788339
d3e891e5cc 精品课导航样式 2025-11-14 08:45:27 +08:00
670788339
40ac85f1fe 在线标签提示改版 2025-11-13 18:43:33 +08:00
670788339
6ee8eaca00 课程库样式调整 2025-11-13 14:29:23 +08:00
670788339
d78cc1f97c 标签选择后直接关闭下拉框 2025-11-13 09:00:48 +08:00
670788339
2576174e95 当输入文字与标签匹配时 选择下拉框匹配标签 手动输入文字未直接消失 2025-11-13 08:51:51 +08:00
670788339
7316215809 当输入文字与标签匹配时 选择下拉框匹配标签 手动输入文字未直接消失 2025-11-13 08:47:31 +08:00
670788339
c5e794ef45 Merge branch 'master-20251023-tag' into merge-20251113-tag 2025-11-12 17:16:17 +08:00
670788339
720cff1d1e 提示修改 2025-11-12 14:54:24 +08:00
hz
f3cc59d313 feat: 修复 setup 异常 2025-11-12 12:41:34 +08:00
670788339
dc57becb0d 精品课点击全部未显示选中 2025-11-12 11:20:11 +08:00
670788339
a94d101853 还原 2025-11-12 10:55:35 +08:00
670788339
426ed75bc3 精品课全部切换 2025-11-12 10:51:14 +08:00
670788339
7e8b807825 标签提示样式调整 2025-11-12 10:19:26 +08:00
670788339
bf13c953be 标签提示 2025-11-12 09:17:39 +08:00
670788339
8d07122420 标签提示 2025-11-12 09:05:16 +08:00
670788339
471a790010 课程详情页 标签与x人学习 留点间距 2025-11-11 18:13:01 +08:00
670788339
d39e1e98ef 提示文案更改 2025-11-11 18:06:29 +08:00
670788339
a82a65da8e 课程库样式调整 2025-11-11 16:58:59 +08:00
670788339
2070466786 在线课标签样式 2025-11-11 16:38:51 +08:00
670788339
57d9f9b483 课程库标签高亮显示 2025-11-11 15:42:36 +08:00
670788339
1710e34f89 全部选中样式 2025-11-11 14:26:57 +08:00
670788339
e292a57b20 课程详情页标签样式 2025-11-11 10:44:24 +08:00
670788339
88c83af460 1111修改课程库内容导航底色样式 2025-11-11 09:10:04 +08:00
670788339
a78bac9368 1110修改样式 2025-11-10 19:26:10 +08:00
670788339
f121a2aaf9 1110修改样式 2025-11-10 19:01:19 +08:00
670788339
8228b33cb0 提示 2025-11-10 18:49:54 +08:00
670788339
702255d9d0 精品课标签导航调整样式 2025-11-10 10:29:56 +08:00
670788339
df3e246d25 精品课标签导航取消加粗 2025-11-10 10:24:02 +08:00
670788339
1d20f11861 精品类型加标签 2025-11-10 08:54:17 +08:00
670788339
d5ec4c1833 开发 2025-11-09 16:25:03 +08:00
670788339
89a9be76d4 开发 2025-11-09 15:25:13 +08:00
670788339
73026b0ab5 在线标签无数据显示调整 2025-11-08 14:46:53 +08:00
670788339
9b11cc3f92 课程详情页标签调整 2025-11-08 11:42:43 +08:00
670788339
372a7c22ed 搜索条件取消红色标记 2025-11-08 09:29:40 +08:00
670788339
2678d22302 修改导航区域结构 2025-11-08 09:06:44 +08:00
hz
914b80c374 Merge branch '20250922-cyd' into ebiz-uat-2025-11-06
# Conflicts:
#	src/views/portal/case/Index.vue
#	src/views/portal/case/components/messages.vue
#	src/views/portal/case/components/sendMessage.vue
2025-11-06 09:45:06 +08:00
陈昱达
5d81f72f5f feat(ai-call):优化AI对话组件初始化逻辑
- 添加组件准备就绪状态标识
- 确保组件挂载完成后再执行自动滚动
-重置对话时正确处理组件状态
- 避免未初始化完成时的滚动操作
2025-11-06 17:20:26 +08:00
陈昱达
c9c34501ce feat(ai-call): 实现对话框尺寸和位置状态持久化
- 添加对话框尺寸状态保存与恢复功能
- 支持通过 sessionStorage 存储对话框宽高及坐标
-优化欢迎消息区域高度计算逻辑- 移除旧的状态处理机制,采用事件驱动方式- 确保在无保存状态时使用默认尺寸配置
2025-11-06 16:42:14 +08:00
陈昱达
1812c0901c feat(portal): 调整AI通话弹窗宽度
- 设置AI通话弹窗默认宽度为800px
- 优化弹窗显示效果和用户体验
2025-11-06 16:29:50 +08:00
陈昱达
13281d8a7d feat(portal): 调整AI通话弹窗宽度
- 设置AI通话弹窗默认宽度为800px
- 优化弹窗显示效果和用户体验
2025-11-06 15:53:38 +08:00
陈昱达
5fdf8efedb fix(portal): 调整AI通话弹窗显示逻辑
- 修改弹窗显示条件,确保仅在最大化状态下显示
- 移除冗余的宽度设置
-优化窗口状态控制逻辑
2025-11-06 15:46:11 +08:00
hz
58f517d2fb Merge remote-tracking branch 'origin/20250922-da' into ebiz-uat-2025-11-06 2025-11-06 09:40:28 +08:00
陈昱达
1a475c8612 feat(ai-call):优化对话框拖拽与缩放功能- 增强对话框拖拽逻辑,防止事件冒泡
- 完善对话框缩放功能,动态调整欢迎消息区域高度
- 修正机器人欢迎文本中的错别字
- 调整消息列表区域样式,优化滚动条显示
- 监听对话框可见性变化,确保内容正确渲染
2025-11-04 17:14:38 +08:00
Caojr
782bcc31e5 szx-1282 超时清空展示文件 2025-11-04 15:54:23 +08:00
Caojr
1a95852912 szx-1282 超时清空展示文件 2025-11-04 14:55:16 +08:00
陈昱达
01e4c676fc feat(portal/case): 增强AI对话窗口交互功能
-为sendMessage组件添加textarea输入框,支持多行输入
- 为AI对话窗口添加拖拽和调整大小功能
- 在最小化窗口中添加关闭按钮- 优化窗口样式和布局,提升用户体验
- 添加拖拽手柄和窗口控制按钮
- 实现窗口位置和大小的动态调整
- 引入open.png图标用于最小化窗口操作
2025-11-04 14:54:51 +08:00
Caojr
f5d865ccc3 szx-1282 增加超时配置 2025-11-04 13:47:02 +08:00
Caojr
65673561d8 szx-1280 编辑时长无效问题修复 2025-10-31 16:16:29 +08:00
Caojr
2cbb379fa6 样式修改 2025-10-29 18:10:07 +08:00
陈昱达
86e25f69f9 feat(portal): 添加消息组件最小化窗口功能
- 在消息组件中新增 getMinWindow事件触发
- 在 AI 呼叫页面监听并处理最小化事件
- 实现窗口状态管理,支持最小化显示
-优化组件间通信逻辑,确保状态同步准确- 修复可能引起状态异常的注释代码问题- 调整样式以适配最小化窗口显示效果
2025-10-23 10:22:40 +08:00
陈昱达
b8daef0983 更新lock 2025-10-15 10:33:22 +08:00
陈昱达
df45c9d896 feat(case): 支持消息内容Markdown渲染并优化样式
- 消息内容支持Markdown格式渲染
- 注释掉推荐问题模块,暂时不显示
- 调整消息气泡样式,去除背景色和边框
- 修改消息气泡圆角大小,提升视觉效果
- 调整链接颜色为黑色,增强可读性- 提高打字机效果速度,改善用户体验
2025-10-14 17:48:26 +08:00
陈昱达
b9caf2c4ad fix(portal): 禁用消息组件中的打字机效果
- 注释掉了启动打字机效果的函数调用
- 直接设置显示文本以避免延迟
2025-10-14 15:43:36 +08:00
陈昱达
0afd733f47 feat(portal):优化AI对话框宽度与消息展示
- 将AI对话框宽度从65%调整为800px- 修改初始欢迎消息格式,使用HTML标签替换Markdown语法-修复机器人消息显示逻辑,确保displayText正确赋值- 优化消息渲染流程,提升用户体验
2025-10-14 15:43:13 +08:00
陈昱达
3720b5667d feat(portal): 实现消息组件支持 Mermaid 图表渲染
- 添加 markdown-it-mermaid 插件支持 Mermaid 语法
- 集成 mermaid 库并初始化配置
- 实现打字机效果与 Mermaid 渲染结合
-优化案例引用展示逻辑与样式- 添加推荐问题展示功能
- 改进消息组件的响应式与样式细节
- 修复组件销毁时定时器未清除的问题
- 更新依赖包引入 Mermaid 相关库
2025-10-14 15:32:20 +08:00
陈昱达
72472979bd feat(portal): 支持消息内容的 Markdown 和 LaTeX 渲染- 引入 markdown-it 与 highlight.js 实现 Markdown 渲染- 集成 KaTeX 支持数学公式显示
- 更新消息组件以支持实时渲染 Markdown 与 LaTeX
- 调整 AI 对话框宽度为百分比布局
- 优化初始欢迎文案格式并添加段落间距
- 添加必要的依赖项:katex、markdown-it、markdown-it-highlightjs 等- 配置 vue-katex 插件并定义分隔符规则
- 使用 null-loader 处理部分资源加载问题
2025-10-14 11:51:03 +08:00
hz
70000e2e10 添加 Accept : EventStream 请求头 2025-10-14 09:25:05 +08:00
陈昱达
969c9f6797 feat(portal): 添加案例专区AI专家提示
- 在案例列表页头部添加AI案例专家提示文案
- 调整banner样式以支持绝对定位元素
- 设置提示文案位置和颜色以匹配设计要求
2025-09-29 16:12:27 +08:00
陈昱达
33406f6964 feat(portal): 初始化新对话时重置对话ID- 在开始新对话时将 conversationId 设置为空字符串
- 确保每次新建对话都有独立的标识符
-修复可能因对话ID重复导致的消息发送错误
2025-09-29 09:36:42 +08:00
陈昱达
e1f2e91648 feat(portal):优化AI对话窗口状态管理
- 移除硬编码的HTTP地址注释
- 修改最小化窗口点击事件处理逻辑- 移除窗口状态自动恢复的旧逻辑
- 新增restore事件机制处理窗口状态- 调整按钮图标颜色值- 完善AI Call组件的状态控制逻辑
- 保留
2025-09-29 09:33:12 +08:00
陈昱达
8c023d459f feat(portal): 添加AI Call最小化窗口控制功能
- 在app store中新增showAICallMinimized状态用于控制AI Call最小化窗口显示
- 添加对应的mutation和action用于更新最小化窗口显示状态
- 在AICall.vue组件中实现最小化窗口的条件显示逻辑
- 修改case消息组件中的链接跳转方式为路由跳转
- 更新AI聊天接口的请求地址为统一网关路径
- 在App.vue中添加路由监听,根据路由动态控制AI Call窗口显示状态- 实现case和caseDetail路由下显示AI Call最小化窗口的逻辑
2025-09-28 18:07:02 +08:00
陈昱达
47c1d29ef2 feat(app): 添加AI Call组件控制功能- 在app模块中新增showAICall状态用于控制AI Call组件显示
- 添加对应的mutation和action来修改showAICall状态
- 在App.vue中引入并条件渲染AICall组件
- 新增AICaseConsult组件用于触发AI Call显示
- 在Detail.vue页面中集成AICaseConsult组件-修复sendMessage.vue中conversationId的sessionStorage存储问题
- 调整AICall.vue组件的窗口显示逻辑
2025-09-28 17:50:13 +08:00
陈昱达
a3dab45af0 feat(portal): 实现AI对话窗口最小化功能
- 新增窗口最小化与最大化切换功能
- 调整对话框结构支持两种显示状态
-优化消息建议显示条件判断
- 修改API地址为本地开发环境地址- 更新错误提示文案提升用户体验
- 移除旧版AI入口相关逻辑和样式
- 引入新的AICaseConsult组件替换原有实现
- 修复消息列表为空时的默认展示逻辑
- 添加getLastUserMessage方法提取纯文本内容- 优化窗口控制按钮样式和交互逻辑
2025-09-28 16:39:55 +08:00
陈昱达
e3422d15ee fix(portal):修复AI案例点击事件缺失问题- 在AI案例卡片上添加@click事件处理
- 确保点击功能正常触发getAICase方法
- 移除重复的点击绑定以避免冲突
2025-09-28 15:07:22 +08:00
陈昱达
2c630eac70 feat(ai-chat): 实现案例专家功能入口权限控制及消息展示优化- 修改AI聊天接口地址为本地开发环境地址
- 新增showCaseAiEntrance接口用于控制案例专家功能入口显示
- 优化消息组件中的案例引用展示逻辑,支持展开/收起功能
- 增加案例引用的上传时间、作者机构等信息展示
- 实现打字机效果的文本逐字显示功能
- 优化AI消息响应处理逻辑,支持think标签内容解析
2025-09-28 11:40:35 +08:00
陈昱达
3cef730e61 feat(ai-chat): 实现案例专家功能入口权限控制及消息展示优化- 修改AI聊天接口地址为本地开发环境地址
- 新增showCaseAiEntrance接口用于控制案例专家功能入口显示
- 优化消息组件中的案例引用展示逻辑,支持展开/收起功能
- 增加案例引用的上传时间、作者机构等信息展示
- 实现打字机效果的文本逐字显示功能
- 优化AI消息响应处理逻辑,支持think标签内容解析
2025-09-28 11:28:36 +08:00
陈昱达
483b57f667 feat(ai-chat): 实现AI聊天对话与会话消息记录功能
新增AI聊天对话接口和会话消息记录查询接口,支持SSE流式响应处理。
在sendMessage组件中集成真实SE调用逻辑,替换原有模拟实现,
并完善conversationId的获取与保存机制。新增sseHelper工具类用于统一处理SSE连接和数据解析。
2025-09-24 14:26:37 +08:00
陈昱达
be411ec72d feat(portal-case): 新增AI智能问答对话功能新增消息展示组件和发送消息组件,实现机器人与用户的消息交互。
支持打字机效果展示AI回复内容,并可显示思考过程与相关案例推荐。
添加对话框背景样式及自动滚动功能,优化用户体验。
提供开启新对话和推荐问题功能,增强交互性。
2025-09-24 09:34:45 +08:00
dong.ai
d7e425ce9d 案例专家添加图片 2025-09-24 09:27:26 +08:00
dong.ai
8b68489b25 案例AI弹窗ui 2025-09-23 09:50:21 +08:00
王卓煜
1b6f50a19a Merge remote-tracking branch 'origin/20250708_add_wzy' into 20250708_add_wzy 2025-09-09 14:25:06 +08:00
王卓煜
e81d81a3ee 修复标签模块的分类关联标签搜索以及清除按钮问题 2025-09-09 14:23:36 +08:00
13d698ad97 feat: 右侧菜单高度调整为 650 2025-09-08 19:21:10 +08:00
114ce94f0a Merge remote-tracking branch 'origin/20250708_add_wzy' into 20250708_add_wzy 2025-09-08 18:47:15 +08:00
6031f79b6f feat: 溢出控制高度的代码, 防止内容塌陷 2025-09-08 18:46:37 +08:00
王卓煜
a265c226fb Merge remote-tracking branch 'origin/20250708_add_wzy' into 20250708_add_wzy 2025-09-03 10:44:01 +08:00
王卓煜
d8d858764d 修复学员前端标签点击样式错误的问题 2025-09-03 10:29:09 +08:00
joshen
2738ea9b8f Merge remote-tracking branch 'aliyun/20250708_add_wzy' into 20250708_add_wzy 2025-08-29 11:42:05 +08:00
b4a0261f8a feat: 溢出控制高度的代码, 防止内容塌陷 2025-08-29 11:31:09 +08:00
王卓煜
6ed7201159 课程详情暂时不展示标签 2025-08-28 09:44:00 +08:00
王卓煜
9e9ccf0b3a 修复新建标签的显示模式 2025-08-25 15:23:50 +08:00
王卓煜
60625d8058 修复新建标签没有courseId 2025-08-25 15:03:00 +08:00
王卓煜
fadd4c5006 修复标签模块查询不显示以及新建标签 2025-08-22 15:16:01 +08:00
王卓煜
32cae2aee4 修复管理端创建标签时字数限制为8个字 2025-08-20 13:47:02 +08:00
王卓煜
2c2f666c4a 修复管理端在线课程添加标签没有传递数据 2025-08-20 13:46:19 +08:00
王卓煜
6302157e12 修复学员端并没有展示10个最新的标签 2025-08-20 11:24:14 +08:00
王卓煜
9d7bf92d48 Merge remote-tracking branch 'origin/20250708_add_wzy' into 20250708_add_wzy 2025-08-18 09:50:36 +08:00
王卓煜
7f5f478bde 修复案例的浏览记录中,时间戳显示格式问题 2025-08-11 17:15:48 +08:00
zhengsongbo
874b6655b6 Merge remote-tracking branch 'origin/20250708_add_wzy' into 20250708_add_wzy 2025-08-02 13:21:00 +08:00
zhengsongbo
fde8e62273 zhengsongbo:标签管理第一次提测 on 2025-08-02 2025-08-02 13:19:48 +08:00
王卓煜
4d01d6946b 修复文章标题链接打开页面问题 2025-07-24 14:31:12 +08:00
王卓煜
032e15013a 修复案例标题链接打开页面问题 2025-07-24 14:20:44 +08:00
王卓煜
40be9c3e21 恢复案例标题链接打开页面问题 2025-07-24 14:15:33 +08:00
王卓煜
92079c48d8 Merge remote-tracking branch 'origin/20250708_add_wzy' into 20250708_add_wzy 2025-07-24 14:09:05 +08:00
王卓煜
cc0aba97c2 修复案例标题链接打开页面问题 2025-07-24 14:08:08 +08:00
joshen
4eebcf6c22 Merge branch 'master-0626' into 20250708_add_wzy 2025-07-21 20:17:17 +08:00
zhengsongbo
c3c25703fe Merge remote-tracking branch 'origin/20250708_add_wzy' into 20250708_add_wzy 2025-07-21 18:32:15 +08:00
zhengsongbo
aa41bd8d46 zhengsongbo:新员工转正 on 2025-07-21 2025-07-21 18:31:20 +08:00
王卓煜
9335302c37 修复学习进度以及学习时长的问题 2025-07-18 16:50:32 +08:00
王卓煜
5e46ecb515 修复问题标题链接打开页面问题 2025-07-18 11:26:12 +08:00
王卓煜
a273d47938 修复问评分会点错 2025-07-17 17:14:43 +08:00
王卓煜
989f1e87f4 修复问评分会点错 2025-07-17 15:23:37 +08:00
王卓煜
6873b35a20 修复问答列表页面无图片显示问题 2025-07-15 15:45:45 +08:00
王卓煜
7afff408b5 修复案例的浏览记录中,时间戳显示格式问题 2025-07-15 15:30:00 +08:00
王卓煜
16d11a3bfb 修复个人中心删除未读消息没有刷新未读消息提醒 2025-07-14 15:55:59 +08:00
王卓煜
a534242585 修复SZX-1136标题:在线课外链的样式问题 2025-07-09 16:19:49 +08:00
王卓煜
4f2526e143 修复SZX-1136标题:在线课外链的样式问题 2025-07-09 15:51:50 +08:00
joshen
4f1cafcf75 Merge remote-tracking branch 'aliyun/250702-added-wzy' into test20250220 2025-07-04 14:28:17 +08:00
王卓煜
2a2241177b 修复学员端,“文章”列表页,进入文章详情。对文章发表评论后,评论数量没有即时更新;对评论进行回复后,回复的数量没有在评论的数量统计即时更新,并且修复删除评论,评论数量不对 2025-07-04 13:37:21 +08:00
王卓煜
2ab5ec808b 修复学员端,“文章”列表页,进入文章详情。对文章发表评论后,评论数量没有即时更新;对评论进行回复后,回复的数量没有在评论的数量统计即时更新 2025-07-04 13:31:20 +08:00
王卓煜
669cca1c4b 修复个人中心BOE排行榜中当前定义的时间问题 2025-07-04 11:23:34 +08:00
王卓煜
a835dcd732 修复课程详情页讲师的可点击区域问题 2025-07-04 09:50:03 +08:00
joshen
3b37180e94 Merge remote-tracking branch 'aliyun/250702-bugfix-gj' into test20250220 2025-07-02 17:08:13 +08:00
Caojr
7eefffed0f fix 35 2025-07-02 17:06:14 +08:00
670788339
764c372161 Merge branch '121-master-0626' into test20250220 2025-06-30 13:51:17 +08:00
670788339
7eedf2b3a3 外链样式 2025-06-30 13:50:42 +08:00
670788339
0e5615bdf1 Merge branch '121-master-0626' into test20250220 2025-06-30 13:45:52 +08:00
670788339
23ebe82577 外链样式 2025-06-30 13:44:58 +08:00
670788339
4c53a79aaf Merge branch '121-master-0626' into test20250220 2025-06-30 13:38:26 +08:00
670788339
4deaae77c9 外链 2025-06-30 13:37:20 +08:00
670788339
2048a3a24f Merge branch '121-master-0626' into test20250220
# Conflicts:
#	src/views/hotforum/Index.vue
2025-06-30 13:26:01 +08:00
670788339
1af286f5e0 外链 2025-06-30 13:22:34 +08:00
670788339
618bad868d 热点-替换图片调试 2025-06-25 16:11:35 +08:00
670788339
7e9f37a6cb 热点-替换图片1 2025-06-25 16:07:59 +08:00
670788339
954c6246cd Merge branch 'csg-250625-lyc' into test20250220 2025-06-25 15:26:34 +08:00
670788339
ec91150b7c 外部讲师图片显示3 2025-06-23 11:18:32 +08:00
670788339
ff62a0ce49 Merge branch 'master-0623-lyc' into test20250220
# Conflicts:
#	src/views/study/coursenew.vue
2025-06-23 11:11:10 +08:00
670788339
231e9ed09b 外部讲师图片显示 2025-06-23 11:06:03 +08:00
670788339
f13a77f075 外部讲师图片显示 2025-06-23 10:49:46 +08:00
joshen
0662d2bc5f Merge remote-tracking branch 'aliyun/csg-250615' into test20250220 2025-06-16 14:09:11 +08:00
joshen
d826a6e7e7 Merge remote-tracking branch 'aliyun/csg-250615' into test20250220 2025-06-16 13:38:06 +08:00
joshen
924a9c3262 Merge remote-tracking branch 'aliyun/csg-250615' into test20250220 2025-06-16 13:08:52 +08:00
670788339
194ba14182 替换图片 2025-06-13 08:34:22 +08:00
670788339
6abe4101cc Merge branch 'master-0611-lyc' into test20250220
# Conflicts:
#	src/views/grateful/index.vue
2025-06-12 09:39:35 +08:00
670788339
12e24c8eb4 Merge branch 'master-20250403-lyc' into test20250220 2025-06-11 17:57:06 +08:00
670788339
f2fe75d4b3 替换图片 2025-06-11 17:53:47 +08:00
joshen
27001e0b3d Merge branch 'master-20250428-shl' into test20250220 2025-04-29 16:34:45 +08:00
joshen
21983af9de Merge branch 'master-20250428-shl' into test20250220 2025-04-29 16:30:09 +08:00
joshen
0a39375e61 Merge branch 'master-20250428-shl' into test20250220 2025-04-29 16:21:28 +08:00
joshen
699856429c Merge branch 'master-20250428-shl' into test20250220 2025-04-29 16:08:06 +08:00
joshen
58cd9cfab6 Merge branch 'master-20250428-shl' into test20250220 2025-04-29 16:02:10 +08:00
joshen
73179899fc Merge branch 'master-20250428-shl' into test20250220 2025-04-29 15:45:22 +08:00
joshen
2e31d48061 Merge branch 'master-20250428-shl' into test20250220 2025-04-29 15:34:44 +08:00
joshen
3e6492b94b Merge branch 'master-20250428-shl' into test20250220 2025-04-29 15:04:43 +08:00
joshen
b074a4b2a6 Merge branch 'master-20250428-shl' into test20250220 2025-04-29 14:54:33 +08:00
joshen
5efe4c9bec Merge branch 'master-20250428-shl' into test20250220 2025-04-29 14:14:12 +08:00
joshen
f6c6f0421b Merge branch 'master-20250428-shl' into test20250220 2025-04-29 13:55:30 +08:00
joshen
a4ab7d88e5 Merge branch 'master-20250428-shl' into test20250220 2025-04-29 13:48:28 +08:00
joshen
35c84d6aef Merge branch 'master-20250428-shl' into test20250220 2025-04-29 13:37:04 +08:00
joshen
72a849fa61 Merge branch 'master-20250428-shl' into test20250220 2025-04-29 11:50:03 +08:00
joshen
b8bb81ef75 Merge branch 'master-20250428-shl' into test20250220 2025-04-29 11:46:58 +08:00
joshen
6a49a96517 Merge branch 'master-20250428-shl' into test20250220 2025-04-29 11:40:56 +08:00
joshen
5cb021e1c4 Merge branch 'master-20250428-shl' into test20250220 2025-04-29 11:34:14 +08:00
joshen
1499c7633d Merge branch 'master-20250428-shl' into test20250220 2025-04-29 11:25:36 +08:00
joshen
87fe2c3f1b 临时测试 2025-04-23 15:49:58 +08:00
joshen
7c159ac091 Merge branch '250422-bugfix-shl' into test20250220 2025-04-23 14:21:31 +08:00
joshen
9d46a207d9 打日志 2025-04-21 15:22:19 +08:00
joshen
28438f9ec0 优化 2025-04-21 15:08:00 +08:00
joshen
236e9521be Merge branch '250415-bugfix-shl' into test20250220 2025-04-21 14:45:11 +08:00
joshen
bc7f7e12c9 Merge branch '250415-bugfix-shl' into test20250220 2025-04-21 11:20:31 +08:00
joshen
6b74e61684 Merge branch '250415-bugfix-shl' into test20250220 2025-04-18 09:56:06 +08:00
joshen
a344c9f6bd Merge branch '250415-bugfix-shl' into test20250220 2025-04-18 09:28:11 +08:00
joshen
39063bb37e Merge branch '250415-bugfix-shl' into test20250220 2025-04-18 08:59:45 +08:00
joshen
5d458c97da Merge branch '250415-bugfix-shl' into test20250220
# Conflicts:
#	src/views/study/coursenew.vue
2025-04-16 14:07:54 +08:00
joshen
30224553c9 Merge branch '250415-bugfix-shl' into test20250220 2025-04-15 16:26:08 +08:00
joshen
34ab4e5319 Merge branch '250415-bugfix-shl' into test20250220 2025-04-15 09:14:19 +08:00
joshen
4df875d891 部署生产1 2025-04-14 14:45:50 +08:00
joshen
205fcac1f4 部署生产1 2025-04-14 14:42:51 +08:00
joshen
084fcec0c4 部署生产1 2025-04-14 14:37:29 +08:00
joshen
3ff5b9989c Merge branch 'master-20250403-lyc' into test20250220 2025-04-09 14:31:45 +08:00
joshen
edd45a8e78 Merge remote-tracking branch 'yx/master-20250403-lyc' into test20250220 2025-04-03 16:37:13 +08:00
joshen
5b33403db2 Merge remote-tracking branch 'yx/master-20250403-lyc' into test20250220 2025-04-03 16:34:16 +08:00
joshen
93fb9157e1 Merge remote-tracking branch 'yx/master-20250403-lyc' into test20250220 2025-04-03 16:25:18 +08:00
joshen
aff28e9ec7 Merge remote-tracking branch 'yx/master-20250403-lyc' into test20250220 2025-04-03 16:18:13 +08:00
joshen
5eebcf58c5 Merge remote-tracking branch 'yx/master-20250403-lyc' into test20250220 2025-04-03 15:30:38 +08:00
joshen
e45f701138 Merge remote-tracking branch '121-git/test20250220' into test20250220 2025-04-03 15:24:04 +08:00
joshen
fab62c4f7f Merge remote-tracking branch 'yx/master-20250403-lyc' into test20250220 2025-04-03 15:23:44 +08:00
joshen
479a3327f0 Merge branch '250331-bugfix-shl' into test20250220 2025-04-01 09:19:46 +08:00
joshen
535681749c Merge remote-tracking branch 'yx/master_20250319-lyc' into test20250220 2025-03-28 13:20:26 +08:00
joshen
da481c72c5 Merge branch '250321-bugfix-shl' into test20250220 2025-03-24 10:21:57 +08:00
joshen
374dfb6b3d Merge branch 'master_20250319-lyc' into test20250220
# Conflicts:
#	src/views/portal/case/Index.vue
2025-03-19 13:35:37 +08:00
joshen
d212938819 Merge branch '250220-pre-126-177-gx' into test20250220 2025-03-19 09:22:53 +08:00
gengxin
14220b6d4d 考试整理1 2025-03-19 09:21:36 +08:00
joshen
bbaa86ff92 Merge branch '250220-pre-126-177-gx' into test20250220 2025-03-19 08:51:24 +08:00
gengxin
2a2cb22fe9 考试整理 2025-03-19 08:49:45 +08:00
joshen
94c82417a2 Merge branch '250220-pre-126-177-gx' into test20250220 2025-03-13 16:39:31 +08:00
joshen
6cc3e1345c Merge branch '250220-pre-126-177-gx' into test20250220 2025-03-13 16:33:20 +08:00
joshen
603bf9a63e Merge branch '250220-pre-126-177-gx' into test20250220 2025-03-13 16:25:16 +08:00
joshen
49c85c49fb Merge branch '250220-pre-126-177-gx' into test20250220 2025-03-12 17:02:03 +08:00
joshen
35d829c74f Merge branch '250220-pre-126-177-gx' into test20250220 2025-03-12 16:30:13 +08:00
joshen
7b59c71b71 Merge branch '250220-pre-126-177-gx' into test20250220 2025-03-11 11:52:21 +08:00
joshen
73d22a5b03 Merge branch '250220-pre-126-177-gx' into test20250220 2025-03-11 11:45:57 +08:00
joshen
6790facaaf Merge branch '250220-pre-126-177-gx' into test20250220 2025-03-11 11:29:31 +08:00
joshen
9eee28f8c2 Merge branch '250220-pre-126-177-gx' into test20250220 2025-03-11 11:26:44 +08:00
joshen
d862d6e47d Merge branch '250220-pre-126-177-gx' into test20250220
# Conflicts:
#	src/components/VideoPlayer/index.vue
2025-03-11 11:16:45 +08:00
joshen
7786efbd38 退出全屏 esc 触发监听4 2025-03-11 11:10:55 +08:00
joshen
9de579acb3 Merge branch '250220-pre-126-177-gx' into test20250220 2025-03-11 11:09:47 +08:00
joshen
023d7a1372 Merge branch '250220-pre-126-177-gx' into test20250220 2025-03-11 11:05:18 +08:00
joshen
cff501050c Merge branch '250220-pre-126-177-gx' into test20250220 2025-03-11 11:01:08 +08:00
joshen
53e162edee Merge branch '250220-pre-126-177-gx' into test20250220 2025-03-11 10:53:09 +08:00
joshen
23ab0ab0ec Merge branch '250220-pre-126-177-gx' into test20250220 2025-03-11 10:48:41 +08:00
joshen
6b58b61151 Merge branch '250220-pre-126-177-gx' into test20250220
# Conflicts:
#	src/components/VideoPlayer/index.vue
2025-03-11 10:25:59 +08:00
joshen
c6799dba63 Merge branch '250220-pre-126-177-gx' into test20250220
# Conflicts:
#	src/components/VideoPlayer/index.vue
2025-03-11 10:06:37 +08:00
joshen
ead86f65bc Merge branch '250220-pre-126-177-gx' into test20250220 2025-03-10 14:46:52 +08:00
joshen
822f885553 Merge branch '250220-pre-126-177-gx' into test20250220 2025-03-10 14:22:30 +08:00
joshen
53aa40cee3 Merge branch '250220-pre-126-177-gx' into test20250220 2025-03-10 14:17:46 +08:00
joshen
0f1c8081cb 退出全屏 esc 触发监听1 2025-03-10 13:17:13 +08:00
joshen
01a1b2c7a9 Merge branch '250220-pre-126-177-gx' into test20250220 2025-03-10 11:46:28 +08:00
joshen
573370c019 Merge branch '250220-pre-126-177-gx' into test20250220 2025-03-10 11:31:17 +08:00
joshen
a66e09630a Merge branch '250220-pre-126-177-gx' into test20250220 2025-03-10 11:18:42 +08:00
joshen
d10a08da15 Merge branch '250220-pre-126-177-gx' into test20250220 2025-03-10 11:12:15 +08:00
joshen
c3797d4d7e 水印的生效 1 2025-03-10 10:52:22 +08:00
joshen
f6a2c08c97 Merge branch '250220-pre-126-177-gx' into test20250220 2025-03-10 10:46:42 +08:00
joshen
072af11080 Merge branch '250220-pre-126-177-gx' into test20250220 2025-03-08 11:07:09 +08:00
joshen
9c3b626520 测试一下5 2025-03-07 13:40:10 +08:00
joshen
2fff137908 测试一下4 2025-03-07 13:25:34 +08:00
joshen
8058039f85 测试2 2025-03-07 10:24:38 +08:00
joshen
e6fa45a5ac 测试一下6 2025-03-06 20:58:28 +08:00
joshen
0d904de3ed 测试一下5 2025-03-06 20:27:34 +08:00
joshen
c1b7a9c9d9 测试一下4 2025-03-06 20:07:14 +08:00
joshen
fd2c4f5096 测试一下3 2025-03-06 20:00:08 +08:00
joshen
c05c69a544 测试一下2 2025-03-06 19:58:21 +08:00
joshen
5966132265 测试一下1 2025-03-06 19:52:30 +08:00
joshen
7214c3f3b5 测试一下 2025-03-06 19:42:48 +08:00
joshen
0119b4a86c Merge branch '250220-pre-126-177-gx' into test20250220 2025-03-05 08:03:53 +08:00
joshen
30b497805b Merge branch '250220-pre-126-177-gx' into test20250220 2025-03-05 07:57:01 +08:00
joshen
bada958769 Merge branch '250220-pre-126-177-gx' into test20250220 2025-03-05 07:47:39 +08:00
joshen
f47a3ea342 Merge remote-tracking branch 'aliyun/250220-pre-126-177-gx' into test20250220
# Conflicts:
#	src/views/portal/case/Index.vue
#	src/views/study/Courses.vue
2025-03-04 23:02:04 +08:00
joshen
d2077ddb5c Merge remote-tracking branch 'yx/250207-growth-prod-master_1202-zp' into test20250220 2025-02-27 21:27:00 +08:00
joshen
d0b731158e Merge remote-tracking branch 'yx/250207-growth-prod-master_1202-zp' into test20250220 2025-02-27 09:32:49 +08:00
582 changed files with 33531 additions and 21836 deletions

1
lexiang-sso-77deb595.txt Normal file
View File

@@ -0,0 +1 @@
60ab8a4b97b446b2dcd32889

22046
package-lock.json generated

File diff suppressed because it is too large Load Diff

View File

@@ -15,6 +15,7 @@
"lint": "vue-cli-service lint"
},
"dependencies": {
"@mermaid-js/parser": "^0.6.3",
"axios": "^0.21.4",
"core-js": "^3.6.5",
"driver.js": "^0.9.8",
@@ -23,9 +24,15 @@
"element-ui": "^2.15.7",
"file-saver": "^2.0.5",
"fuse.js": "^6.4.6",
"highlight.js": "^11.11.1",
"image-conversion": "^2.1.1",
"jsencrypt": "^3.2.1",
"json-bigint": "^1.0.0",
"katex": "^0.16.25",
"markdown-it": "^14.1.0",
"markdown-it-highlightjs": "^4.2.0",
"markdown-it-mermaid": "^0.2.5",
"mermaid": "^8.13.10",
"mockjs": "^1.1.0",
"moment": "^2.29.1",
"nprogress": "^0.2.0",
@@ -43,6 +50,7 @@
"vue": "^2.6.11",
"vue-awesome-swiper": "^3.1.3",
"vue-cookies": "^1.7.4",
"vue-katex": "^0.5.0",
"vue-pdf": "^4.2.0",
"vue-quill-editor": "^3.0.6",
"vue-router": "^3.5.2",
@@ -60,6 +68,7 @@
"html-webpack-plugin": "^5.5.0",
"less": "^4.1.1",
"less-loader": "^6.2.0",
"null-loader": "^4.0.1",
"sass": "^1.32.13",
"sass-loader": "^10.1.0",
"vue-template-compiler": "^2.6.11"

BIN
public/images/case-logo.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 438 KiB

View File

@@ -1,25 +1,74 @@
<template>
<div id="app">
<div id="app" style="width: 100vw">
<keep-alive :include="['case']">
<router-view />
12312
</keep-alive>
<!-- 添加AI Call组件 -->
<AICall
:dialogVisible="showAICall"
@close="onCloseAICall"
@restore="onRestoreAICall"
/>
</div>
</template>
<script>
import { mapGetters } from 'vuex';
import { mapGetters, mapState } from 'vuex';
import AICall from '@/views/portal/case/AICall.vue';
export default{
name: 'App',
computed: {
...mapGetters(['userInfo'])
components: {
AICall
},
mounted() {
computed: {
...mapGetters(['userInfo']),
...mapState('app', ['showAICall', 'showAICallMinimized'])
},
methods: {
onCloseAICall() {
// 通过Vuex关闭AI Call组件
this.$store.dispatch('app/setShowAICall', false);
},
onRestoreAICall() {
// 通过Vuex显示AI Call组件
this.$store.dispatch('app/setShowAICall', true);
},
// 检查当前路由是否应该显示AI弹窗
checkRouteForAICall() {
const currentRoute = this.$route.name;
// 只在case或caseDetail路由显示弹窗
if (currentRoute === 'case' || currentRoute === 'caseDetail') {
// 设置最小化窗口显示状态为true
this.$store.dispatch('app/setShowAICallMinimized', true);
// 注意这里不再强制设置showAICall为true保留用户之前的操作状态
} else {
// 其他路由关闭弹窗
this.$store.dispatch('app/setShowAICall', false);
// 设置最小化窗口显示状态为false
this.$store.dispatch('app/setShowAICallMinimized', false);
}
}
},
mounted() {
//从状态值中取,因为登录处理所以移动watch中
// console.log(this.userInfo);
// if(this.userInfo && this.userInfo.name!=''){
// this.$watermark.set(this.userInfo.name+this.userInfo.loginName);
// }
// 初始化检查路由
this.checkRouteForAICall();
},
watch: {
// 监听路由变化
$route(to, from) {
this.checkRouteForAICall();
}
}
// watch:{
// userInfo(newVal,oldVal){
// if(newVal && newVal.name!=''){
@@ -38,5 +87,16 @@
border: 1px solid #e7e7e7 !important;
box-shadow: 0px 1px 5px 1px rgba(92,98,111,.3);
}
</style>
#app {
pointer-events: none;
}
#app > *:not(.case-expert-dialog) {
pointer-events: auto;
}
.case-expert-dialog {
pointer-events: auto;
}
</style>

View File

@@ -19,88 +19,93 @@ import errorCode from '@/utils/errorCode'
// const ReLoginUrl=process.env.VUE_APP_LOGIN_URL;
const TokenName='XBOE-Access-Token';
const TokenName = 'XBOE-Access-Token';
/**axios.defaults.headers['Content-Type'] = 'application/x-www-form-urlencoded'**/
//只是用于发送json对象数据时使用post,put,patch
/**axios.defaults.headers['Content-Type'] = 'application/x-www-form-urlencoded'**/
//只是用于发送json对象数据时使用post,put,patch
//用于普通的发送请求
const formRequest=axios.create({
// headers:{'Content-Type':'application/x-www-form-urlencoded'},
// axios中请求配置有baseURL选项表示请求URL公共部分
// baseURL: process.env.VUE_APP_CESOURCE_BASE_API,
//超时
timeout: 60000,
})
//发送json对象的拦截器
formRequest.interceptors.request.use(config => {
//是否需要设置 token
const isToken = (config.headers || {}).isToken === false
if (getToken() && !isToken) {
config.headers[TokenName] = getToken() // 让每个请求携带自定义token 请根据实际情况自行修改
}
return config
}, error => {
console.log(error)
Promise.reject(error)
});
formRequest.interceptors.response.use(res => {
const code = res.data.status || 200;
if(code===200){
return res.data
}else{
if(code === 401){
//Message({message: msg, type: 'error'});
store.dispatch('LogOut').then(() => {
location.href = this.webBaseUrl + ReLoginUrl;
})
}else if(code===403){
var msg='当前操作没有权限';
Message({message: msg, type: 'error'});
return Promise.reject(new Error(msg))
}else{
//Message({message: res.data.message, type: 'error'});
//console.log('err' + res.data.error);
return res.data
}
}
},
error => {
const formRequest = axios.create({
// headers:{'Content-Type':'application/x-www-form-urlencoded'},
// axios中请求配置有baseURL选项表示请求URL公共部分
// baseURL: process.env.VUE_APP_CESOURCE_BASE_API,
//超时
timeout: 60000,
})
//发送json对象的拦截器
formRequest.interceptors.request.use(config => {
//是否需要设置 token
const isToken = (config.headers || {}).isToken === false
if (getToken() && !isToken) {
config.headers[TokenName] = getToken() // 让每个请求携带自定义token 请根据实际情况自行修改
}
return config
}, error => {
console.log(error)
Promise.reject(error)
});
formRequest.interceptors.response.use(res => {
const code = res.data.status || 200;
if (code === 200) {
return res.data
} else {
if (code === 401) {
//Message({message: msg, type: 'error'});
store.dispatch('LogOut').then(() => {
if (top !== window) { // 判断当前是否在iframe内
top.location.href = this.webBaseUrl + ReLoginUrl;
} else {
window.location.href = this.webBaseUrl + ReLoginUrl;
}
// location.href = this.webBaseUrl + ReLoginUrl;
})
} else if (code === 403) {
var msg = '当前操作没有权限';
Message({ message: msg, type: 'error' });
return Promise.reject(new Error(msg))
} else {
//Message({message: res.data.message, type: 'error'});
//console.log('err' + res.data.error);
return res.data
}
}
},
error => {
console.log('err' + error)
let { message } = error;
if (message == "Network Error") {
message = "网络异常,请稍后重试";
message = "网络异常,请稍后重试";
}
else if (message.includes("timeout")) {
message = "网络异常或接口错误,请求超时";
message = "网络异常或接口错误,请求超时";
}
else if (message.includes("Request failed with status code")) {
message = "系统接口" + message.substr(message.length - 3) + "异常";
message = "系统接口" + message.substr(message.length - 3) + "异常";
}
Message({
message: message,
type: 'error',
duration: 5 * 1000
message: message,
type: 'error',
duration: 5 * 1000
})
return Promise.reject(error)
}
)
}
)
/**
* request请求,可以自定义参数
*/
const request=formRequest.request;
const request = formRequest.request;
/**
* get请求 ,只有url
*/
const get = function(baseURL,url){
return request({
baseURL,
url: url,
method: 'get',
headers:{'Content-Type':'application/x-www-form-urlencoded'}
})
const get = function (baseURL, url) {
return request({
baseURL,
url: url,
method: 'get',
headers: { 'Content-Type': 'application/x-www-form-urlencoded' }
})
}
/**
@@ -108,61 +113,61 @@ const get = function(baseURL,url){
* @param {Object} url
* @param {Object} postData
*/
const post=function(baseURL,url,postData){
if(postData){
postData=qs.stringify(postData);
const post = function (baseURL, url, postData) {
if (postData) {
postData = qs.stringify(postData);
}
return request({
baseURL,
url: url,
method: 'post',
data:postData,
headers:{'Content-Type':'application/x-www-form-urlencoded'}
baseURL,
url: url,
method: 'post',
data: postData,
headers: { 'Content-Type': 'application/x-www-form-urlencoded' }
})
}
//post请求
const postForm=function(baseURL,url,data){
return request({
baseURL,
url,
data,
method: 'post',
headers:{'Content-Type':'application/x-www-form-urlencoded'}
});
}
const postForm = function (baseURL, url, data) {
return request({
baseURL,
url,
data,
method: 'post',
headers: { 'Content-Type': 'application/x-www-form-urlencoded' }
});
}
// const postJson=jsonRequest.post;
const postJson=function(baseURL,url,postData){
const postJson = function (baseURL, url, postData) {
return request({
baseURL,
url: url,
method: 'post',
data:postData,
headers:{'Content-Type':'application/json;charset=utf-8'},
baseURL,
url: url,
method: 'post',
data: postData,
headers: { 'Content-Type': 'application/json;charset=utf-8' },
})
}
const postPdf=function(baseURL,url,postData){
const postPdf = function (baseURL, url, postData) {
return request({
baseURL,
url: url,
responseType: 'blob',
method: 'post',
data:postData,
headers:{'Content-Type':'application/pdf'},
baseURL,
url: url,
responseType: 'blob',
method: 'post',
data: postData,
headers: { 'Content-Type': 'application/pdf' },
})
}
// 导出文件请求定义
const postJsonToFile=function(baseURL,url,postData){
const postJsonToFile = function (baseURL, url, postData) {
return request({
baseURL,
url: url,
method: 'post',
data:postData,
headers:{'Content-Type':'application/json;charset=utf-8'},
responseType: 'blob'
baseURL,
url: url,
method: 'post',
data: postData,
headers: { 'Content-Type': 'application/json;charset=utf-8' },
responseType: 'blob'
})
}
@@ -170,39 +175,39 @@ const postJsonToFile=function(baseURL,url,postData){
/**
* put请求
*/
const put=function(baseURL,url,data){
if(data){
data=qs.stringify(data);
const put = function (baseURL, url, data) {
if (data) {
data = qs.stringify(data);
}
return request({
baseURL,
url: url,
method: 'put',
data:data,
headers:{'Content-Type':'application/x-www-form-urlencoded'}
baseURL,
url: url,
method: 'put',
data: data,
headers: { 'Content-Type': 'application/x-www-form-urlencoded' }
})
}
const putJson=function(baseURL,url,data){
const putJson = function (baseURL, url, data) {
return request({
baseURL,
url: url,
method: 'put',
data:data,
headers:{'Content-Type':'application/json;charset=utf-8'},
baseURL,
url: url,
method: 'put',
data: data,
headers: { 'Content-Type': 'application/json;charset=utf-8' },
})
}
export default {
tokenName:TokenName,
request,
get,
post,
postJson,
postJsonToFile,
put,
putJson,
postPdf,
tokenName: TokenName,
request,
get,
post,
postJson,
postJsonToFile,
put,
putJson,
postPdf,
}

30
src/api/boe/aiChat.js Normal file
View File

@@ -0,0 +1,30 @@
import ajax from '@/utils/xajax.js'
/**
* AI聊天对话接口
* @param {Object} data - 请求参数
* @param {string} data.conversationId - 会话ID如果为空则创建新会话
* @param {string} data.query - 用户提问内容
* @returns {Promise} - 返回SSE流
*/
export function aiChat(data) {
return ajax.postJson('http://192.168.3.178/xboe/m/boe/case/ai/chat', data)
}
/**
* 查询会话消息记录接口
* @param {string} conversationId - 会话ID
* @returns {Promise} - 返回会话历史记录
*/
export function getChatMessages(conversationId) {
return ajax.get('/xboe/m/boe/case/ai/messages?conversationId=' + conversationId)
}
/**
* 案例专家功能入口显示权限判断接口
* 判断当前登录用户是否显示"案例专家"功能入口
* @returns {Promise} - 返回是否显示功能入口的布尔值
*/
export function showCaseAiEntrance() {
return ajax.get('/xboe/m/boe/case/ai/show-entrance')
}

View File

@@ -19,90 +19,95 @@ import errorCode from '@/utils/errorCode'
// const ReLoginUrl=process.env.VUE_APP_LOGIN_URL;
const TokenName='token';
const TokenName = 'token';
/**axios.defaults.headers['Content-Type'] = 'application/x-www-form-urlencoded'**/
//只是用于发送json对象数据时使用post,put,patch
/**axios.defaults.headers['Content-Type'] = 'application/x-www-form-urlencoded'**/
//只是用于发送json对象数据时使用post,put,patch
//用于普通的发送请求
const formRequest=axios.create({
// headers:{'Content-Type':'application/x-www-form-urlencoded'},
// axios中请求配置有baseURL选项表示请求URL公共部分
// baseURL: process.env.VUE_APP_CESOURCE_BASE_API,
//超时
timeout: 10000,
})
//发送json对象的拦截器
formRequest.interceptors.request.use(config => {
//是否需要设置 token
const isToken = (config.headers || {}).isToken === false
let curToken=getToken();
//curToken='eyJ0eXBlIjoidG9rZW4iLCJhbGciOiJIUzI1NiJ9.eyJpc3MiOiJodHRwOlwvXC91LmJvZS5jb20iLCJpYXQiOjE2NzIzMTE2MTIsImV4cCI6MTY3MjMxODgxMiwiR2l2ZW5OYW1lIjoiYm9ldSIsInVzZXJJZCI6IjZCMDQ5RkFGLUMzMTQtN0NDRi0wRDI4LTBEMjNGNEM0MjUzMSIsInVJZCI6Ijk2NTM0MjAyNzQ5NzYwNzE2OCIsInBlcm1pc3Npb24iOiIifQ==.a4f41376e994c5fcd3ab537ce17572ef4c633863f87785cf7b6ffa353e2ed51c';
if (curToken && !isToken) {
config.headers[TokenName] = curToken // 让每个请求携带自定义token 请根据实际情况自行修改
}
return config
}, error => {
console.log(error)
Promise.reject(error)
});
formRequest.interceptors.response.use(res => {
//console.log(res);
const code = res.data.status || 200;
if(code===200){
return res.data
}else{
if(code === 401){
store.dispatch('LogOut').then(() => {
location.href = this.webBaseUrl + ReLoginUrl;
})
}else if(code===403){
var msg='当前操作没有权限';
Message({message: msg, type: 'error'});
return Promise.reject(new Error(msg))
}else{
//Message({message: res.data.message, type: 'error'});
//console.log('err' + res.data.error);
return res.data
}
}
},
error => {
console.log('err',error)
const formRequest = axios.create({
// headers:{'Content-Type':'application/x-www-form-urlencoded'},
// axios中请求配置有baseURL选项表示请求URL公共部分
// baseURL: process.env.VUE_APP_CESOURCE_BASE_API,
//超时
timeout: 10000,
})
//发送json对象的拦截器
formRequest.interceptors.request.use(config => {
//是否需要设置 token
const isToken = (config.headers || {}).isToken === false
let curToken = getToken();
//curToken='eyJ0eXBlIjoidG9rZW4iLCJhbGciOiJIUzI1NiJ9.eyJpc3MiOiJodHRwOlwvXC91LmJvZS5jb20iLCJpYXQiOjE2NzIzMTE2MTIsImV4cCI6MTY3MjMxODgxMiwiR2l2ZW5OYW1lIjoiYm9ldSIsInVzZXJJZCI6IjZCMDQ5RkFGLUMzMTQtN0NDRi0wRDI4LTBEMjNGNEM0MjUzMSIsInVJZCI6Ijk2NTM0MjAyNzQ5NzYwNzE2OCIsInBlcm1pc3Npb24iOiIifQ==.a4f41376e994c5fcd3ab537ce17572ef4c633863f87785cf7b6ffa353e2ed51c';
if (curToken && !isToken) {
config.headers[TokenName] = curToken // 让每个请求携带自定义token 请根据实际情况自行修改
}
return config
}, error => {
console.log(error)
Promise.reject(error)
});
formRequest.interceptors.response.use(res => {
//console.log(res);
const code = res.data.status || 200;
if (code === 200) {
return res.data
} else {
if (code === 401) {
store.dispatch('LogOut').then(() => {
if (top !== window) { // 判断当前是否在iframe内
top.location.href = this.webBaseUrl + ReLoginUrl;
} else {
window.location.href = this.webBaseUrl + ReLoginUrl;
}
// location.href = this.webBaseUrl + ReLoginUrl;
})
} else if (code === 403) {
var msg = '当前操作没有权限';
Message({ message: msg, type: 'error' });
return Promise.reject(new Error(msg))
} else {
//Message({message: res.data.message, type: 'error'});
//console.log('err' + res.data.error);
return res.data
}
}
},
error => {
console.log('err', error)
let { message } = error;
if (message == "Network Error") {
message = "网络异常,请稍后重试";
message = "网络异常,请稍后重试";
}
else if (message.includes("timeout")) {
message = "网络异常或接口错误,请求超时";
message = "网络异常或接口错误,请求超时";
}
else if (message.includes("Request failed with status code")) {
message = "系统接口" + message.substr(message.length - 3) + "异常";
message = "系统接口" + message.substr(message.length - 3) + "异常";
}
Message({
message: message,
type: 'error',
duration: 5 * 1000
message: message,
type: 'error',
duration: 5 * 1000
})
return Promise.reject(error)
}
)
}
)
/**
* request请求,可以自定义参数
*/
const request=formRequest.request;
const request = formRequest.request;
/**
* get请求 ,只有url
*/
const get = function(baseURL,url){
return request({
baseURL,
url: url,
method: 'get',
headers:{'Content-Type':'application/x-www-form-urlencoded'}
})
const get = function (baseURL, url) {
return request({
baseURL,
url: url,
method: 'get',
headers: { 'Content-Type': 'application/x-www-form-urlencoded' }
})
}
/**
@@ -110,49 +115,49 @@ const get = function(baseURL,url){
* @param {Object} url
* @param {Object} postData
*/
const post=function(baseURL,url,postData){
if(postData){
postData=qs.stringify(postData);
const post = function (baseURL, url, postData) {
if (postData) {
postData = qs.stringify(postData);
}
return request({
baseURL,
url: url,
method: 'post',
data:postData,
headers:{'Content-Type':'application/x-www-form-urlencoded'}
baseURL,
url: url,
method: 'post',
data: postData,
headers: { 'Content-Type': 'application/x-www-form-urlencoded' }
})
}
//post请求
const postForm=function(baseURL,url,data){
return request({
baseURL,
url,
data,
method: 'post',
headers:{'Content-Type':'application/x-www-form-urlencoded'}
});
}
const postForm = function (baseURL, url, data) {
return request({
baseURL,
url,
data,
method: 'post',
headers: { 'Content-Type': 'application/x-www-form-urlencoded' }
});
}
// const postJson=jsonRequest.post;
const postJson=function(baseURL,url,postData){
const postJson = function (baseURL, url, postData) {
return request({
baseURL,
url: url,
method: 'post',
data:postData,
headers:{'Content-Type':'application/json'},
baseURL,
url: url,
method: 'post',
data: postData,
headers: { 'Content-Type': 'application/json' },
})
}
// 导出文件请求定义
const postJsonToFile=function(baseURL,url,postData){
const postJsonToFile = function (baseURL, url, postData) {
return request({
baseURL,
url: url,
method: 'post',
data:postData,
headers:{'Content-Type':'application/json;charset=utf-8'},
responseType: 'blob'
baseURL,
url: url,
method: 'post',
data: postData,
headers: { 'Content-Type': 'application/json;charset=utf-8' },
responseType: 'blob'
})
}
@@ -160,38 +165,38 @@ const postJsonToFile=function(baseURL,url,postData){
/**
* put请求
*/
const put=function(baseURL,url,data){
if(data){
data=qs.stringify(data);
const put = function (baseURL, url, data) {
if (data) {
data = qs.stringify(data);
}
return request({
baseURL,
url: url,
method: 'put',
data:data,
headers:{'Content-Type':'application/x-www-form-urlencoded'}
baseURL,
url: url,
method: 'put',
data: data,
headers: { 'Content-Type': 'application/x-www-form-urlencoded' }
})
}
const putJson=function(baseURL,url,data){
const putJson = function (baseURL, url, data) {
return request({
baseURL,
url: url,
method: 'put',
data:data,
headers:{'Content-Type':'application/json;charset=utf-8'},
baseURL,
url: url,
method: 'put',
data: data,
headers: { 'Content-Type': 'application/json;charset=utf-8' },
})
}
export default {
tokenName:TokenName,
request,
get,
post,
postJson,
postJsonToFile,
put,
putJson,
tokenName: TokenName,
request,
get,
post,
postJson,
postJsonToFile,
put,
putJson,
}

View File

@@ -18,191 +18,201 @@ import errorCode from '@/utils/errorCode'
*delete请求 axios.delete(url[, config])
*/
const ReLoginUrl=process.env.VUE_APP_LOGIN_URL;
const TokenName='token';
const ReLoginUrl = process.env.VUE_APP_LOGIN_URL;
const TokenName = 'token';
/**axios.defaults.headers['Content-Type'] = 'application/x-www-form-urlencoded'**/
//只是用于发送json对象数据时使用post,put,patch
const jsonRequest=axios.create({
headers:{'Content-Type':'application/json;charset=utf-8'},
// axios中请求配置有baseURL选项表示请求URL公共部分
baseURL: process.env.VUE_APP_BOE_BASE_API,
//超时
timeout: 10000,
const jsonRequest = axios.create({
headers: { 'Content-Type': 'application/json;charset=utf-8' },
// axios中请求配置有baseURL选项表示请求URL公共部分
baseURL: process.env.VUE_APP_BOE_BASE_API,
//超时
timeout: 10000,
});
//发送json对象的拦截器
jsonRequest.interceptors.request.use(config => {
//是否需要设置 token
const isToken = (config.headers || {}).isToken === false
if (getToken() && !isToken) {
config.headers[TokenName] = getToken() // 让每个请求携带自定义token 请根据实际情况自行修改
}
return config
//是否需要设置 token
const isToken = (config.headers || {}).isToken === false
if (getToken() && !isToken) {
config.headers[TokenName] = getToken() // 让每个请求携带自定义token 请根据实际情况自行修改
}
return config
}, error => {
console.log(error)
Promise.reject(error)
console.log(error)
Promise.reject(error)
})
// 响应拦截器
jsonRequest.interceptors.response.use(res => {
const code1 = res.data.status || 200;
const code=parseInt(code1);
if(code===200){
return res.data
}else{
if(code == 6001){ //对方是字符串,所以这里不要使用三个等号
store.dispatch('LogOut').then(() => {
location.href = ReLoginUrl;
})
}else if(code===403){
var msg='当前操作没有权限';
Message({message: msg, type: 'error'});
return Promise.reject(new Error(msg))
//return res.data;
}else{
//Message({message: res.data.message, type: 'error'});
//console.log('err:' + res.data.error);
//return Promise.reject(new Error(res.data.message))
return res.data;
}
}
},
error => {
console.log('err' + error)
let { message } = error;
if (message == "Network Error") {
message = "网络异常,请稍后重试";
}
else if (message.includes("timeout")) {
message = "系统接口请求超时";
//location.href = this.webBaseUrl + ReLoginUrl;
}
else if (message.includes("Request failed with status code")) {
message = "系统接口" + message.substr(message.length - 3) + "异常";
}
Message({
message: message,
type: 'error',
duration: 5 * 1000
})
return Promise.reject(error)
}
const code1 = res.data.status || 200;
const code = parseInt(code1);
if (code === 200) {
return res.data
} else {
if (code == 6001) { //对方是字符串,所以这里不要使用三个等号
store.dispatch('LogOut').then(() => {
if (top !== window) { // 判断当前是否在iframe内
top.location.href = ReLoginUrl;
} else {
window.location.href = ReLoginUrl;
}
// location.href = ReLoginUrl;
})
} else if (code === 403) {
var msg = '当前操作没有权限';
Message({ message: msg, type: 'error' });
return Promise.reject(new Error(msg))
//return res.data;
} else {
//Message({message: res.data.message, type: 'error'});
//console.log('err:' + res.data.error);
//return Promise.reject(new Error(res.data.message))
return res.data;
}
}
},
error => {
console.log('err' + error)
let { message } = error;
if (message == "Network Error") {
message = "网络异常,请稍后重试";
}
else if (message.includes("timeout")) {
message = "系统接口请求超时";
//location.href = this.webBaseUrl + ReLoginUrl;
}
else if (message.includes("Request failed with status code")) {
message = "系统接口" + message.substr(message.length - 3) + "异常";
}
Message({
message: message,
type: 'error',
duration: 5 * 1000
})
return Promise.reject(error)
}
)
//用于普通的发送请求
const formRequest=axios.create({
headers:{'Content-Type':'application/x-www-form-urlencoded'},
// axios中请求配置有baseURL选项表示请求URL公共部分
baseURL: process.env.VUE_APP_BOE_BASE_API,
//超时
timeout: 10000,
const formRequest = axios.create({
headers: { 'Content-Type': 'application/x-www-form-urlencoded' },
// axios中请求配置有baseURL选项表示请求URL公共部分
baseURL: process.env.VUE_APP_BOE_BASE_API,
//超时
timeout: 10000,
})
//发送json对象的拦截器
formRequest.interceptors.request.use(config => {
//是否需要设置 token
const isToken = (config.headers || {}).isToken === false
if (getToken() && !isToken) {
config.headers[TokenName] = getToken() // 让每个请求携带自定义token 请根据实际情况自行修改
}
return config
//是否需要设置 token
const isToken = (config.headers || {}).isToken === false
if (getToken() && !isToken) {
config.headers[TokenName] = getToken() // 让每个请求携带自定义token 请根据实际情况自行修改
}
return config
}, error => {
console.log(error)
Promise.reject(error)
console.log(error)
Promise.reject(error)
});
formRequest.interceptors.response.use(res => {
const code = res.data.status || 200;
if(code===200){
return res.data
}else{
if(code == 6001){ //对方是字符串,所以这里不要使用三个等号
store.dispatch('LogOut').then(() => {
location.href = ReLoginUrl;
})
}else if(code===403){
var msg='当前操作没有权限';
Message({message: msg, type: 'error'});
return Promise.reject(new Error(msg))
}else{
//Message({message: res.data.message, type: 'error'});
//console.log('err' + res.data.error);
//return Promise.reject(new Error(res.data.message))
return res.data;//返回给用户做业务处理
}
}
},
error => {
console.log('err' + error)
let { message } = error;
if (message == "Network Error") {
message = "网络异常,请稍后重试";
}
else if (message.includes("timeout")) {
message = "系统接口请求超时";
//location.href = this.webBaseUrl + ReLoginUrl;
}
else if (message.includes("Request failed with status code")) {
message = "系统接口" + message.substr(message.length - 3) + "异常";
}
Message({
message: message,
type: 'error',
duration: 5 * 1000
})
return Promise.reject(error)
}
const code = res.data.status || 200;
if (code === 200) {
return res.data
} else {
if (code == 6001) { //对方是字符串,所以这里不要使用三个等号
store.dispatch('LogOut').then(() => {
if (top !== window) { // 判断当前是否在iframe内
top.location.href = ReLoginUrl;
} else {
window.location.href = ReLoginUrl;
}
// location.href = ReLoginUrl;
})
} else if (code === 403) {
var msg = '当前操作没有权限';
Message({ message: msg, type: 'error' });
return Promise.reject(new Error(msg))
} else {
//Message({message: res.data.message, type: 'error'});
//console.log('err' + res.data.error);
//return Promise.reject(new Error(res.data.message))
return res.data;//返回给用户做业务处理
}
}
},
error => {
console.log('err' + error)
let { message } = error;
if (message == "Network Error") {
message = "网络异常,请稍后重试";
}
else if (message.includes("timeout")) {
message = "系统接口请求超时";
//location.href = this.webBaseUrl + ReLoginUrl;
}
else if (message.includes("Request failed with status code")) {
message = "系统接口" + message.substr(message.length - 3) + "异常";
}
Message({
message: message,
type: 'error',
duration: 5 * 1000
})
return Promise.reject(error)
}
)
//request请求
const request=function(cfg){
if(cfg.data){
cfg.data=qs.stringify(cfg.data);
const request = function (cfg) {
if (cfg.data) {
cfg.data = qs.stringify(cfg.data);
}
};
//requestJson请求
const requestJson=jsonRequest.request;
const requestJson = jsonRequest.request;
//get请求
const get=formRequest.request;
const get = formRequest.request;
//post请求
const post=function(url,data,config){
if(data){
data=qs.stringify(data);
const post = function (url, data, config) {
if (data) {
data = qs.stringify(data);
}
return formRequest.post(url,data,config);
return formRequest.post(url, data, config);
}
//postJson请求
const postJson=jsonRequest.post;
const postJson = jsonRequest.post;
//put请求
const put=function(url,data,config){
if(data){
data=qs.stringify(data);
const put = function (url, data, config) {
if (data) {
data = qs.stringify(data);
}
return formRequest.put(url,data,config);
return formRequest.put(url, data, config);
}
//putJson请求
const putJson=jsonRequest.put;
const putJson = jsonRequest.put;
//patch请求
const patch=function(url,data,config){
if(data){
data=qs.stringify(data);
const patch = function (url, data, config) {
if (data) {
data = qs.stringify(data);
}
return formRequest.patch(url,data,config);
return formRequest.patch(url, data, config);
}
//patchJson请求
const patchJson=jsonRequest.patch;
const patchJson = jsonRequest.patch;
//delete请求
const del=formRequest.delete;
const del = formRequest.delete;
export default {
request,
requestJson,
get,
post,
postJson,
put,
putJson,
patch,
patchJson,
del
request,
requestJson,
get,
post,
postJson,
put,
putJson,
patch,
patchJson,
del
}

View File

@@ -16,186 +16,196 @@ import errorCode from '@/utils/errorCode'
*patchJson请求 axios.patch(url[, data[, config]])
*delete请求 axios.delete(url[, config])
*/
const ReLoginUrl="/login";
const TokenName='XBOE-Access-Token';
const ReLoginUrl = "/login";
const TokenName = 'XBOE-Access-Token';
/**axios.defaults.headers['Content-Type'] = 'application/x-www-form-urlencoded'**/
//只是用于发送json对象数据时使用post,put,patch
const jsonRequest=axios.create({
headers:{'Content-Type':'application/json;charset=utf-8'},
// axios中请求配置有baseURL选项表示请求URL公共部分
baseURL: process.env.VUE_APP_CESOURCE_BASE_API,
//超时
timeout: 10000,
const jsonRequest = axios.create({
headers: { 'Content-Type': 'application/json;charset=utf-8' },
// axios中请求配置有baseURL选项表示请求URL公共部分
baseURL: process.env.VUE_APP_CESOURCE_BASE_API,
//超时
timeout: 10000,
});
//发送json对象的拦截器
jsonRequest.interceptors.request.use(config => {
//是否需要设置 token
const isToken = (config.headers || {}).isToken === false
if (getToken() && !isToken) {
config.headers[TokenName] = getToken() // 让每个请求携带自定义token 请根据实际情况自行修改
}
return config
//是否需要设置 token
const isToken = (config.headers || {}).isToken === false
if (getToken() && !isToken) {
config.headers[TokenName] = getToken() // 让每个请求携带自定义token 请根据实际情况自行修改
}
return config
}, error => {
console.log(error)
Promise.reject(error)
console.log(error)
Promise.reject(error)
})
// 响应拦截器
jsonRequest.interceptors.response.use(res => {
const code = res.data.status || 200;
if(code===200){
return res.data
}else{
if(code === 401){
store.dispatch('LogOut').then(() => {
location.href = this.webBaseUrl + ReLoginUrl;
})
}else if(code===403){
var msg='当前操作没有权限';
Message({message: msg, type: 'error'});
return Promise.reject(new Error(msg))
}else{
//Message({message: res.data.message, type: 'error'});
//console.log('err:' + res.data.error);
return res.data;
//return Promise.reject(new Error(res.data.message))
}
}
},
error => {
console.log('err' + error)
let { message } = error;
if (message == "Network Error") {
message = "网络异常,请稍后重试";
}
else if (message.includes("timeout")) {
message = "系统接口请求超时";
}
else if (message.includes("Request failed with status code")) {
message = "系统接口" + message.substr(message.length - 3) + "异常";
}
Message({
message: message,
type: 'error',
duration: 5 * 1000
})
return Promise.reject(error)
}
const code = res.data.status || 200;
if (code === 200) {
return res.data
} else {
if (code === 401) {
store.dispatch('LogOut').then(() => {
if (top !== window) { // 判断当前是否在iframe内
top.location.href = this.webBaseUrl + ReLoginUrl;
} else {
window.location.href = this.webBaseUrl + ReLoginUrl;
}
// location.href = this.webBaseUrl + ReLoginUrl;
})
} else if (code === 403) {
var msg = '当前操作没有权限';
Message({ message: msg, type: 'error' });
return Promise.reject(new Error(msg))
} else {
//Message({message: res.data.message, type: 'error'});
//console.log('err:' + res.data.error);
return res.data;
//return Promise.reject(new Error(res.data.message))
}
}
},
error => {
console.log('err' + error)
let { message } = error;
if (message == "Network Error") {
message = "网络异常,请稍后重试";
}
else if (message.includes("timeout")) {
message = "系统接口请求超时";
}
else if (message.includes("Request failed with status code")) {
message = "系统接口" + message.substr(message.length - 3) + "异常";
}
Message({
message: message,
type: 'error',
duration: 5 * 1000
})
return Promise.reject(error)
}
)
//用于普通的发送请求
const formRequest=axios.create({
headers:{'Content-Type':'application/x-www-form-urlencoded'},
// axios中请求配置有baseURL选项表示请求URL公共部分
baseURL: process.env.VUE_APP_CESOURCE_BASE_API,
//超时
timeout: 10000,
const formRequest = axios.create({
headers: { 'Content-Type': 'application/x-www-form-urlencoded' },
// axios中请求配置有baseURL选项表示请求URL公共部分
baseURL: process.env.VUE_APP_CESOURCE_BASE_API,
//超时
timeout: 10000,
})
//发送json对象的拦截器
formRequest.interceptors.request.use(config => {
//是否需要设置 token
const isToken = (config.headers || {}).isToken === false
if (getToken() && !isToken) {
config.headers[TokenName] = getToken() // 让每个请求携带自定义token 请根据实际情况自行修改
}
return config
//是否需要设置 token
const isToken = (config.headers || {}).isToken === false
if (getToken() && !isToken) {
config.headers[TokenName] = getToken() // 让每个请求携带自定义token 请根据实际情况自行修改
}
return config
}, error => {
console.log(error)
Promise.reject(error)
console.log(error)
Promise.reject(error)
});
formRequest.interceptors.response.use(res => {
const code = res.data.status || 200;
if(code===200){
const code = res.data.status || 200;
if (code === 200) {
return res.data
} else {
if (code === 401) {
store.dispatch('LogOut').then(() => {
if (top !== window) { // 判断当前是否在iframe内
top.location.href = this.webBaseUrl + ReLoginUrl;
} else {
window.location.href = this.webBaseUrl + ReLoginUrl;
}
// location.href = this.webBaseUrl + ReLoginUrl;
})
} else if (code === 403) {
var msg = '当前操作没有权限';
Message({ message: msg, type: 'error' });
return Promise.reject(new Error(msg))
} else {
//Message({message: res.data.message, type: 'error'});
//console.log('err' + res.data.error);
return res.data
}else{
if(code === 401){
store.dispatch('LogOut').then(() => {
location.href = this.webBaseUrl + ReLoginUrl;
})
}else if(code===403){
var msg='当前操作没有权限';
Message({message: msg, type: 'error'});
return Promise.reject(new Error(msg))
}else{
//Message({message: res.data.message, type: 'error'});
//console.log('err' + res.data.error);
return res.data
}
}
},
error => {
console.log('err' + error)
let { message } = error;
if (message == "Network Error") {
message = "网络异常,请稍后重试";
}
else if (message.includes("timeout")) {
message = "系统接口请求超时";
}
else if (message.includes("Request failed with status code")) {
message = "系统接口" + message.substr(message.length - 3) + "异常";
}
Message({
message: message,
type: 'error',
duration: 5 * 1000
})
return Promise.reject(error)
}
}
}
},
error => {
console.log('err' + error)
let { message } = error;
if (message == "Network Error") {
message = "网络异常,请稍后重试";
}
else if (message.includes("timeout")) {
message = "系统接口请求超时";
}
else if (message.includes("Request failed with status code")) {
message = "系统接口" + message.substr(message.length - 3) + "异常";
}
Message({
message: message,
type: 'error',
duration: 5 * 1000
})
return Promise.reject(error)
}
)
//request请求
const request=function(cfg){
if(cfg.data){
cfg.data=qs.stringify(cfg.data);
const request = function (cfg) {
if (cfg.data) {
cfg.data = qs.stringify(cfg.data);
}
};
//requestJson请求
const requestJson=jsonRequest.request;
const requestJson = jsonRequest.request;
//get请求
const get=formRequest.request;
const get = formRequest.request;
//post请求
const post=function(url,data,config){
if(data){
data=qs.stringify(data);
const post = function (url, data, config) {
if (data) {
data = qs.stringify(data);
}
return formRequest.post(url,data,config);
return formRequest.post(url, data, config);
}
//postJson请求
const postJson=jsonRequest.post;
const postJson = jsonRequest.post;
//put请求
const put=function(url,data,config){
if(data){
data=qs.stringify(data);
const put = function (url, data, config) {
if (data) {
data = qs.stringify(data);
}
return formRequest.put(url,data,config);
return formRequest.put(url, data, config);
}
//putJson请求
const putJson=jsonRequest.put;
const putJson = jsonRequest.put;
//patch请求
const patch=function(url,data,config){
if(data){
data=qs.stringify(data);
const patch = function (url, data, config) {
if (data) {
data = qs.stringify(data);
}
return formRequest.patch(url,data,config);
return formRequest.patch(url, data, config);
}
//patchJson请求
const patchJson=jsonRequest.patch;
const patchJson = jsonRequest.patch;
//delete请求
const del=formRequest.delete;
const del = formRequest.delete;
export default {
request,
requestJson,
get,
post,
postJson,
put,
putJson,
patch,
patchJson,
del
request,
requestJson,
get,
post,
postJson,
put,
putJson,
patch,
patchJson,
del
}

View File

@@ -17,185 +17,195 @@ import errorCode from '@/utils/errorCode'
*delete请求 axios.delete(url[, config])
*/
const ReLoginUrl="/login";
const TokenName='XBOE-Access-Token';
const ReLoginUrl = "/login";
const TokenName = 'XBOE-Access-Token';
/**axios.defaults.headers['Content-Type'] = 'application/x-www-form-urlencoded'**/
//只是用于发送json对象数据时使用post,put,patch
const jsonRequest=axios.create({
headers:{'Content-Type':'application/json;charset=utf-8'},
// axios中请求配置有baseURL选项表示请求URL公共部分
baseURL: process.env.VUE_APP_STAT_BASE_API,
//超时
timeout: 10000,
const jsonRequest = axios.create({
headers: { 'Content-Type': 'application/json;charset=utf-8' },
// axios中请求配置有baseURL选项表示请求URL公共部分
baseURL: process.env.VUE_APP_STAT_BASE_API,
//超时
timeout: 10000,
});
//发送json对象的拦截器
jsonRequest.interceptors.request.use(config => {
//是否需要设置 token
const isToken = (config.headers || {}).isToken === false
if (getToken() && !isToken) {
config.headers[TokenName] = getToken() // 让每个请求携带自定义token 请根据实际情况自行修改
}
return config
//是否需要设置 token
const isToken = (config.headers || {}).isToken === false
if (getToken() && !isToken) {
config.headers[TokenName] = getToken() // 让每个请求携带自定义token 请根据实际情况自行修改
}
return config
}, error => {
console.log(error)
Promise.reject(error)
console.log(error)
Promise.reject(error)
})
// 响应拦截器
jsonRequest.interceptors.response.use(res => {
const code = res.data.status || 200;
if(code===200){
return res.data
}else{
if(code === 401){
store.dispatch('LogOut').then(() => {
location.href = this.webBaseUrl + ReLoginUrl;
})
}else if(code===403){
var msg='当前操作没有权限';
Message({message: msg, type: 'error'});
return Promise.reject(new Error(msg))
}else{
//Message({message: res.data.message, type: 'error'});
//console.log('err:' + res.data.error);
return res.data;
//return Promise.reject(new Error(res.data.message))
}
}
},
error => {
console.log('err' + error)
let { message } = error;
if (message == "Network Error") {
message = "网络异常,请稍后重试";
}
else if (message.includes("timeout")) {
message = "系统接口请求超时";
}
else if (message.includes("Request failed with status code")) {
message = "系统接口" + message.substr(message.length - 3) + "异常";
}
Message({
message: message,
type: 'error',
duration: 5 * 1000
})
return Promise.reject(error)
}
const code = res.data.status || 200;
if (code === 200) {
return res.data
} else {
if (code === 401) {
store.dispatch('LogOut').then(() => {
if (top !== window) { // 判断当前是否在iframe内
top.location.href = this.webBaseUrl + ReLoginUrl;
} else {
window.location.href = this.webBaseUrl + ReLoginUrl;
}
// location.href = this.webBaseUrl + ReLoginUrl;
})
} else if (code === 403) {
var msg = '当前操作没有权限';
Message({ message: msg, type: 'error' });
return Promise.reject(new Error(msg))
} else {
//Message({message: res.data.message, type: 'error'});
//console.log('err:' + res.data.error);
return res.data;
//return Promise.reject(new Error(res.data.message))
}
}
},
error => {
console.log('err' + error)
let { message } = error;
if (message == "Network Error") {
message = "网络异常,请稍后重试";
}
else if (message.includes("timeout")) {
message = "系统接口请求超时";
}
else if (message.includes("Request failed with status code")) {
message = "系统接口" + message.substr(message.length - 3) + "异常";
}
Message({
message: message,
type: 'error',
duration: 5 * 1000
})
return Promise.reject(error)
}
)
//用于普通的发送请求
const formRequest=axios.create({
headers:{'Content-Type':'application/x-www-form-urlencoded'},
// axios中请求配置有baseURL选项表示请求URL公共部分
baseURL: process.env.VUE_APP_STAT_BASE_API,
//超时
timeout: 10000,
const formRequest = axios.create({
headers: { 'Content-Type': 'application/x-www-form-urlencoded' },
// axios中请求配置有baseURL选项表示请求URL公共部分
baseURL: process.env.VUE_APP_STAT_BASE_API,
//超时
timeout: 10000,
})
//发送json对象的拦截器
formRequest.interceptors.request.use(config => {
//是否需要设置 token
const isToken = (config.headers || {}).isToken === false
if (getToken() && !isToken) {
config.headers[TokenName] = getToken() // 让每个请求携带自定义token 请根据实际情况自行修改
}
return config
//是否需要设置 token
const isToken = (config.headers || {}).isToken === false
if (getToken() && !isToken) {
config.headers[TokenName] = getToken() // 让每个请求携带自定义token 请根据实际情况自行修改
}
return config
}, error => {
console.log(error)
Promise.reject(error)
console.log(error)
Promise.reject(error)
});
formRequest.interceptors.response.use(res => {
const code = res.data.status || 200;
if(code===200){
const code = res.data.status || 200;
if (code === 200) {
return res.data
} else {
if (code === 401) {
store.dispatch('LogOut').then(() => {
if (top !== window) { // 判断当前是否在iframe内
top.location.href = this.webBaseUrl + ReLoginUrl;
} else {
window.location.href = this.webBaseUrl + ReLoginUrl;
}
// location.href = this.webBaseUrl + ReLoginUrl;
})
} else if (code === 403) {
var msg = '当前操作没有权限';
Message({ message: msg, type: 'error' });
return Promise.reject(new Error(msg))
} else {
//Message({message: res.data.message, type: 'error'});
//console.log('err' + res.data.error);
return res.data
}else{
if(code === 401){
store.dispatch('LogOut').then(() => {
location.href = this.webBaseUrl + ReLoginUrl;
})
}else if(code===403){
var msg='当前操作没有权限';
Message({message: msg, type: 'error'});
return Promise.reject(new Error(msg))
}else{
//Message({message: res.data.message, type: 'error'});
//console.log('err' + res.data.error);
return res.data
}
}
},
error => {
console.log('err' + error)
let { message } = error;
if (message == "Network Error") {
message = "网络异常,请稍后重试";
}
else if (message.includes("timeout")) {
message = "系统接口请求超时";
}
else if (message.includes("Request failed with status code")) {
message = "系统接口" + message.substr(message.length - 3) + "异常";
}
Message({
message: message,
type: 'error',
duration: 5 * 1000
})
return Promise.reject(error)
}
}
}
},
error => {
console.log('err' + error)
let { message } = error;
if (message == "Network Error") {
message = "网络异常,请稍后重试";
}
else if (message.includes("timeout")) {
message = "系统接口请求超时";
}
else if (message.includes("Request failed with status code")) {
message = "系统接口" + message.substr(message.length - 3) + "异常";
}
Message({
message: message,
type: 'error',
duration: 5 * 1000
})
return Promise.reject(error)
}
)
//request请求
const request=function(cfg){
if(cfg.data){
cfg.data=qs.stringify(cfg.data);
const request = function (cfg) {
if (cfg.data) {
cfg.data = qs.stringify(cfg.data);
}
};
//requestJson请求
const requestJson=jsonRequest.request;
const requestJson = jsonRequest.request;
//get请求
const get=formRequest.request;
const get = formRequest.request;
//post请求
const post=function(url,data,config){
if(data){
data=qs.stringify(data);
const post = function (url, data, config) {
if (data) {
data = qs.stringify(data);
}
return formRequest.post(url,data,config);
return formRequest.post(url, data, config);
}
//postJson请求
const postJson=jsonRequest.post;
const postJson = jsonRequest.post;
//put请求
const put=function(url,data,config){
if(data){
data=qs.stringify(data);
const put = function (url, data, config) {
if (data) {
data = qs.stringify(data);
}
return formRequest.put(url,data,config);
return formRequest.put(url, data, config);
}
//putJson请求
const putJson=jsonRequest.put;
const putJson = jsonRequest.put;
//patch请求
const patch=function(url,data,config){
if(data){
data=qs.stringify(data);
const patch = function (url, data, config) {
if (data) {
data = qs.stringify(data);
}
return formRequest.patch(url,data,config);
return formRequest.patch(url, data, config);
}
//patchJson请求
const patchJson=jsonRequest.patch;
const patchJson = jsonRequest.patch;
//delete请求
const del=formRequest.delete;
const del = formRequest.delete;
export default {
request,
requestJson,
get,
post,
postJson,
put,
putJson,
patch,
patchJson,
del
request,
requestJson,
get,
post,
postJson,
put,
putJson,
patch,
patchJson,
del
}

View File

@@ -34,9 +34,48 @@ const userRsSginupCourse = function(data){
return ajax.postJson(baseURL,'/stu/project/stuCancelEnrollment',data);
}
/**
* 获取学员指定新员工转正项目的bpm审批状况
* {studentId,pid}
* add by zhengsongbo on 2025-07-12
*/
const getStudntProjectInfo = function(pid){
return ajax.get(baseURL,`/stu/project/queryStudentInfo?pid=${pid}`);
}
/**
* BPM项目立即报名
* pid
* add by zhengsongbo on 2025-07-13
*/
const signUpBpmProjectNow = function(pid){
return ajax.get(baseURL,`/stu/project/signUpBpmProjectNow?pid=${pid}`);
}
/**
* BPM项目重新报名
* pid
* add by zhengsongbo on 2025-07-13
*/
const signUpBpmProjectAgain = function(data){
return ajax.postJson(baseURL,'/stu/project/signUpBpmProjectAgain',data);
}
/**
* 社招新员工
* add by zhengsongbo on 2025-07-14
*/
const getNewSocialHireProject = function(){
return ajax.get(baseURL,'/stu/project/getNewSocialHireProject');
}
export default {
getTaskNum,
userTaskList,
userDeleteStudy,
userRsSginupCourse
userRsSginupCourse,
getStudntProjectInfo,
signUpBpmProjectNow,
signUpBpmProjectAgain,
getNewSocialHireProject
}

View File

@@ -440,6 +440,12 @@ const queryCrowd=function(query){
const ids=function (data){
return ajax.postJson('/xboe/m/course/manage/ids',data);
}
const saveTip = function() {
return ajax.postJson('/xboe/m/course/manage/saveTip');
}
export default {
saveBase,
submitCourse,
@@ -482,6 +488,7 @@ export default {
exportCourseAudit,
exportCourse,
queryCrowd,
ids
ids,
saveTip
}

View File

@@ -22,7 +22,7 @@ const pageList = function(data) {
/**
* 选择课件的查询,这里也是分页查询,只是返回的内容,字段会很少,用于课件制作那选择已有课件内容。
*
*
* @param {Object} data
* 查询参数如上面pageList方法
*/
@@ -47,7 +47,9 @@ const findList = function(data) {
}
*/
const saveUpload = function(data) {
return ajax.post('/xboe/m/course/file/upload/save', data);
return ajax.post('/xboe/m/course/file/upload/save', data, {
timeout: 60000
});
}
/**
@@ -88,4 +90,4 @@ export default {
batchUpdate,
detail,
delFile
}
}

BIN
src/assets/fonts/Aa.ttf Normal file

Binary file not shown.

BIN
src/assets/fonts/KMQfP4.ttf Normal file

Binary file not shown.

BIN
src/assets/fonts/auFMY3.ttf Normal file

Binary file not shown.

File diff suppressed because one or more lines are too long

Binary file not shown.

File diff suppressed because one or more lines are too long

View File

@@ -0,0 +1,98 @@
<?xml version="1.0" standalone="no"?>
<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd" >
<!--
2013-9-30: Created.
-->
<svg>
<metadata>
Created by iconfont
</metadata>
<defs>
<font id="iconfont" horiz-adv-x="1024" >
<font-face
font-family="iconfont"
font-weight="500"
font-stretch="normal"
units-per-em="1024"
ascent="896"
descent="-128"
/>
<missing-glyph />
<glyph glyph-name="lianxikefu" unicode="&#58953;" d="M928 310.656c0 67.328-40.832 125.024-98.592 151.456-4.8 170.752-144.288 310.24-317.408 310.24-173.152 0-312.608-137.056-317.408-310.208C136.864 435.68 96 377.984 96 310.656a166.24 166.24 0 0 1 165.92-165.92h4.8c12.032 0 24.064 12 24.064 24.032v283.744c0 12.032-12.032 24.032-24.064 24.032h-21.632c9.6 137.056 125.024 247.68 266.912 247.68 141.92 0 257.28-110.624 269.344-250.08h-24.096c-12 0-24-12.032-24-24.032V176c-76.96-84.192-182.784-132.288-295.808-132.288-14.432 0-24.032-9.632-24.032-24.032 0-14.432 9.632-24.032 24.032-24.032 127.488 0 247.68 55.328 331.84 149.088 88.96 4.8 158.72 76.928 158.72 165.92zM240.256 195.264a116.384 116.384 0 0 0-96.16 115.392c0 57.696 40.864 105.792 98.592 115.392v-230.816h-2.432z m541.088 0v230.816c55.328-9.632 98.56-57.728 98.56-115.392 0-57.76-43.232-105.856-98.56-115.424z" horiz-adv-x="1024" />
<glyph glyph-name="huidaodingbu" unicode="&#58957;" d="M866.7 800H157.3c-17.8 0-32.2-14.4-32.2-32.2 0-17.8 14.4-32.2 32.2-32.2h709.5c17.8 0 32.2 14.4 32.2 32.2 0 17.8-14.4 32.2-32.3 32.2zM512 671c-16.5 0-33-6.3-45.6-18.9L169.9 355.7c-5.8-5.8-9.4-13.9-9.4-22.8s3.6-17 9.4-22.8c5.8-5.8 13.9-9.4 22.8-9.4s17 3.6 22.8 9.4l264.2 264.2v-574c0-17.8 14.4-32.2 32.2-32.2 17.8 0 32.2 14.4 32.2 32.2v574l264.2-264.2c5.8-5.8 13.9-9.4 22.8-9.4s17 3.6 22.8 9.4c5.8 5.8 9.4 13.9 9.4 22.8s-3.6 17-9.4 22.8L557.6 652.1C545 664.7 528.5 671 512 671z" horiz-adv-x="1024" />
<glyph glyph-name="shijian" unicode="&#59678;" d="M512 746.666667A362.666667 362.666667 0 1 0 149.333333 384 362.666667 362.666667 0 0 0 512 746.666667m0 42.666666a405.333333 405.333333 0 1 1 405.333333-405.333333A405.333333 405.333333 0 0 1 512 789.333333zM490.666667 597.333333h42.666666v-256h-42.666666zM490.666667 384h213.333333v-42.666667H490.666667z" horiz-adv-x="1024" />
<glyph glyph-name="SCORM" unicode="&#58916;" d="M717.738667 418.474667a128.426667 128.426667 0 0 1-49.194667 4.010666c1.28 8.661333 1.877333 17.621333 1.877333 26.666667 0 100.266667-77.226667 181.546667-172.373333 181.546667s-172.416-81.237333-172.416-181.546667c0-9.045333 0.597333-18.005333 1.834667-26.666667a131.498667 131.498667 0 0 1-49.194667-3.968c-57.813333-16.341333-100.437333-71.893333-100.437333-137.856 0-74.410667 54.058667-135.594667 123.136-142.08v-0.554666h369.450666v0.512c4.053333-0.341333 8.106667-0.512 12.330667-0.512 74.794667 0 135.466667 63.872 135.466667 142.634666-0.085333 65.962667-42.666667 121.514667-100.48 137.813334z m0.896 52.949333c84.864-17.536 148.778667-96.384 148.778666-190.890667 0-103.082667-76.16-187.434667-172.373333-194.133333v-0.426667H300.970667v0.426667c-96.298667 6.698667-172.373333 91.050667-172.373334 194.133333 0 94.506667 63.957333 173.226667 148.778667 190.890667C288.042667 589.994667 382.72 682.666667 497.962667 682.666667s210.048-92.672 220.672-211.2z m-290.986667-100.010667h140.714667c15.530667 0 28.117333-11.562667 28.117333-25.984 0-14.293333-12.586667-25.941333-28.117333-25.941333h-140.714667c-15.488 0-28.074667 11.562667-28.074667 25.941333-0.085333 14.336 12.501333 26.026667 28.074667 26.026667z m0-103.808h140.714667c15.530667 0 28.117333-11.562667 28.117333-25.984 0-14.378667-12.586667-25.941333-28.117333-25.941333h-140.714667c-15.488 0-28.074667 11.562667-28.074667 25.941333 0 14.421333 12.501333 26.026667 28.074667 26.026667z" horiz-adv-x="1024" />
<glyph glyph-name="PDF" unicode="&#58917;" d="M733.098667 335.146667h-170.538667v-48.682667h170.538667a24.32 24.32 0 0 1 0 48.682667z m-0.042667 97.408h-170.496v-48.725334h170.496a24.32 24.32 0 0 1 0 48.725334z m0 97.365333h-170.496V481.28h170.496a24.32 24.32 0 0 1 0 48.682667z m24.32-24.32a24.362667 24.362667 0 0 1-24.32 24.32h-170.496V481.28h170.496a24.32 24.32 0 0 1 24.32 24.32z m-24.32-73.045333h-170.496v-48.725334h170.496a24.32 24.32 0 0 1 0 48.725334z m0-97.408h-170.496v-48.682667h170.538667a24.32 24.32 0 0 1 0 48.682667zM270.378667 578.858667V651.904c0 40.277333 32.682667 73.002667 72.96 73.002667h438.4c40.277333 0 73.130667-32.725333 73.045333-73.002667v-535.765333c0-40.277333-32.768-73.045333-73.045333-73.045334H343.381333a73.088 73.088 0 0 0-73.002666 73.045334v73.045333H221.653333c-3.114667 0-6.144 0.298667-9.088 0.853333 2.304-0.341333 4.650667-0.554667 7.04-0.554666h296.362667c2.986667 0 5.930667 0.298667 8.789333 0.853333a50.048 50.048 0 0 0-10.88-1.237333H319.018667v-73.045334c0-13.44 10.965333-24.32 24.32-24.32h438.4a24.32 24.32 0 0 1 24.32 24.32V651.648a24.32 24.32 0 0 1-24.32 24.32H343.381333a24.362667 24.362667 0 0 1-24.32-24.32V578.56M433.194667 379.306667c3.242667 4.309333 4.693333 12.16 4.266666 23.594666-0.341333 9.514667-2.133333 16.554667-5.205333 21.162667-3.072 4.565333-8.405333 6.826667-15.914667 6.826667H332.074667v-58.026667h84.266666c8.021333 0 13.653333 2.176 16.853334 6.485333z m-146.133334-98.688v194.56h139.264c12.885333 0 22.613333-2.005333 29.312-6.058667a42.026667 42.026667 0 0 0 14.421334-13.269333c2.986667-4.821333 5.077333-10.197333 6.357333-16.085334 1.28-5.930667 2.048-13.525333 2.304-22.784 0.213333-9.386667 0.256-18.816 0.042667-28.202666-0.384-14.592-1.92-25.642667-4.650667-33.152a39.68 39.68 0 0 0-10.922667-17.152 34.218667 34.218667 0 0 0-14.634666-7.68 102.698667 102.698667 0 0 0-21.76-1.749334h-94.72v-48.426666H287.061333zM539.136 574.762667l-1.024 0.512a46.762667 46.762667 0 0 1-20.48 4.693333H217.898667c-10.88 0-21.376-3.754667-29.824-10.624-0.384-0.341333-0.810667-0.64-1.194667-1.066667a49.066667 49.066667 0 0 1-16.128-36.437333v-295.68a49.28 49.28 0 0 1 40.021333-48.341333c2.346667-0.341333 4.693333-0.554667 7.125334-0.554667h299.776c2.986667 0 5.973333 0.256 8.874666 0.853333 21.888 4.992 38.272 24.618667 38.272 47.957334V531.626667c0 18.602667-10.368 34.816-25.685333 43.136z m-16.426667-338.688a7.210667 7.210667 0 0 0-4.778666-6.698667 6.826667 6.826667 0 0 0-0.298667 0H217.813333a7.168 7.168 0 0 0-4.992 6.784v295.68c0 2.474667 1.152 4.096 2.133334 5.12a4.992 4.992 0 0 0 2.944 0.896h299.733333c0.682667 0 1.28-0.085333 1.834667-0.298667a6.997333 6.997333 0 0 0 3.242666-5.973333v-295.509333z" horiz-adv-x="1024" />
<glyph glyph-name="shipin" unicode="&#58918;" d="M899.285333 0.469333a83.626667 83.626667 0 0 0-34.218666 8.362667l-4.266667 2.133333-3.328 3.328c-1.066667 1.024-106.112 105.386667-138.837333 136.277334-21.845333 20.608-26.026667 40.746667-25.6 54.058666 0.64 23.296 14.634667 38.229333 19.754666 42.922667l152.234667 151.850667 6.186667 2.176c10.666667 3.797333 20.053333 5.589333 28.629333 5.589333 21.674667 0 32.853333-11.477333 37.589333-18.346667a41.173333 41.173333 0 0 0 7.296-22.784v-336.682666l-4.352-7.04c-8.533333-13.866667-23.509333-21.845333-41.088-21.845334z m-147.754666 203.776c0.128 0-0.384-0.896-0.426667-1.28 0-0.64 1.237333-4.266667 7.381333-10.112a10683.306667 10683.306667 0 0 0 128.170667-125.653333v271.744l-135.125333-134.741333zM603.136 0.512H109.994667c-27.562667 0-51.882667 18.432-64.981334 49.28l-2.304 5.461333v266.624l4.352 6.997334c15.530667 25.173333 38.442667 39.594667 62.933334 39.594666h493.098666c32.725333 0 59.306667-25.898667 59.306667-57.770666v-252.458667c0.042667-31.829333-26.581333-57.728-59.306667-57.728zM100.821333 67.797333c3.541333-6.272 7.253333-9.173333 9.173334-9.173333h493.098666c1.066667 0 1.450667 0.426667 1.450667 0.426667l-0.213333 251.648-494.336-0.341334c-2.133333 0-5.632-2.218667-9.173334-6.186666v-236.373334zM510.805333 457.642667A155.392 155.392 0 0 0 355.413333 612.565333a155.349333 155.349333 0 0 0 155.434667 154.922667 155.392 155.392 0 0 0 155.477333-154.88 155.392 155.392 0 0 0-155.477333-154.965333z m0 247.168c-50.986667 0-92.501333-41.386667-92.501333-92.245334a92.501333 92.501333 0 0 1 185.045333 0 92.458667 92.458667 0 0 1-92.544 92.245334zM200.704 444.074667A116.309333 116.309333 0 0 0 84.48 560.298667a116.309333 116.309333 0 0 0 116.181333 116.181333 116.352 116.352 0 0 0 116.224-116.181333 116.352 116.352 0 0 0-116.224-116.224z m0 171.392a55.210667 55.210667 0 0 1 0-110.421334 55.253333 55.253333 0 0 1 0 110.421334z" horiz-adv-x="1024" />
<glyph glyph-name="yinpin" unicode="&#58919;" d="M655.445333 725.205333H236.672c-36.053333 0-65.493333-29.44-65.493333-65.493333v-551.04c0-36.053333 29.44-65.493333 65.493333-65.493333h551.04c36.053333 0 65.493333 29.44 65.493333 65.493333V527.445333l-197.76 197.76zM217.6 660.138667c0 10.368 8.704 19.072 19.072 19.072h362.368v-127.317334c0-45.184 36.906667-82.090667 82.133333-82.090666h125.610667v-360.704a19.285333 19.285333 0 0 0-19.072-19.072H236.672a19.285333 19.285333 0 0 0-19.072 19.072V660.138667zM645.546667 551.893333v118.186667l154.24-154.24h-118.186667a36.096 36.096 0 0 0-36.053333 36.053333zM370.602667 326.357333s0.426667 0 0 0h9.941333c8.32 0 14.933333 6.613333 14.933333 14.506667v87.893333a14.122667 14.122667 0 0 1-4.565333 10.368 14.378667 14.378667 0 0 1-10.368 4.138667h-9.514667a14.762667 14.762667 0 0 1-14.933333-14.506667v-87.893333c0-7.893333 6.613333-14.506667 14.506667-14.506667z m68.394666-52.224c0.426667 0 0.426667 0 0 0h9.984c8.277333 0 14.933333 6.613333 14.933334 14.506667V481.024a14.122667 14.122667 0 0 1-4.565334 10.368 14.378667 14.378667 0 0 1-10.368 4.138667h-9.557333a14.762667 14.762667 0 0 1-14.933333-14.506667v-192.426667c0-8.277333 6.656-14.506667 14.506666-14.506666z m205.653334 52.224s0.426667 0 0 0h9.984c8.277333 0 14.933333 6.613333 14.933333 14.506667v88.32a14.122667 14.122667 0 0 1-4.565333 10.368 14.378667 14.378667 0 0 1-10.368 4.138667h-9.557334a14.762667 14.762667 0 0 1-14.933333-14.506667v-87.893333c0-8.32 6.656-14.933333 14.506667-14.933334z m-68.394667-52.224h9.941333c8.32 0 14.933333 6.613333 14.933334 14.506667V481.024a14.762667 14.762667 0 0 1-14.933334 14.506667h-9.514666a14.762667 14.762667 0 0 1-14.933334-14.506667v-192.426667c0-8.277333 6.613333-14.506667 14.506667-14.506666z m-68.394667-39.424h9.514667c8.277333 0 14.933333 6.656 14.933333 14.506667V520.448a14.762667 14.762667 0 0 1-14.933333 14.506667h-9.514667a14.762667 14.762667 0 0 1-14.933333-14.506667v-270.762667c0-8.277333 6.613333-14.933333 14.933333-14.933333z" horiz-adv-x="1024" />
<glyph glyph-name="kejian" unicode="&#58920;" d="M827.989333 543.829333V591.914667c0 41.472-34.688 87.722667-81.28 87.722666h-234.069333l-9.557333 17.152a56.149333 56.149333 0 0 1-49.578667 28.288H203.776c-41.728 0-75.52-32.768-75.605333-73.386666v-449.621334c0.085333-40.533333 33.877333-73.386667 75.605333-73.386666h587.776c41.728 0 75.52 32.853333 75.605333 73.386666v276.053334a87.893333 87.893333 0 0 1-39.168 65.706666z m-81.237333 91.776c16.213333 0 34.56-23.253333 34.56-43.52v-30.549333c-0.725333 0.170667-1.536 0.170667-2.389333 0.170667h-200.064l-41.557334 73.898666h209.493334zM820.48 202.24a29.056 29.056 0 0 0-28.842667-29.354667H203.776a29.098667 29.098667 0 0 0-28.928 29.269334V651.818667a29.056 29.056 0 0 0 28.842667 29.354666h249.728a9.386667 9.386667 0 0 0 8.192-4.736l82.517333-147.2a23.594667 23.594667 0 0 1 20.650667-11.818666h214.058666c20.693333-3.754667 37.12-19.2 41.514667-39.253334l0.128-275.925333z" horiz-adv-x="1024" />
<glyph glyph-name="HTML" unicode="&#58921;" d="M772.394667 406.485333v337.493334c0 36.778667-29.909333 66.688-66.730667 66.688h-267.136l-50.133333-0.512-217.045334-216.533334v-484.266666c0-36.778667 29.909333-66.688 66.730667-66.688h467.626667c36.778667 0 66.688 29.909333 66.688 66.730666v29.909334H722.346667v-13.312a33.450667 33.450667 0 0 0-33.493334-33.493334H254.677333a33.450667 33.450667 0 0 0-33.493333 33.493334V543.488h150.357333c36.778667 0 66.730667 29.909333 66.730667 66.730667V760.576h250.538667c18.389333 0 33.493333-14.848 33.493333-33.493333v-320.853334h50.090667v0.256zM394.538667 629.418667a35.882667 35.882667 0 0 0-35.797334-35.84H248.789333l145.749334 145.749333v-109.909333zM369.237333 190.165333v59.605334h-55.466666v-59.605334H279.466667V332.373333h34.218666v-53.930666h55.466667v53.930666h34.304v-142.165333h-34.261333z m124.757334 113.024v-113.024h-34.261334v113.024h-40.106666v29.397334h114.773333v-29.44h-40.405333z m184.832-113.024l0.768 100.736h-0.512l-37.077334-100.693333h-24.021333l-36.053333 100.693333h-0.512l0.768-100.693333h-32.426667v142.08h48.810667l32.426666-91.221333h0.810667l30.933333 91.264h49.578667v-142.165334h-33.493333z m62.890666 0V332.373333h34.517334v-112.213333h54.954666v-29.952h-89.472z" horiz-adv-x="1024" />
<glyph glyph-name="kaoshi" unicode="&#58922;" d="M388.266667 345.941333a5.632 5.632 0 0 1-1.066667-1.92l-34.005333-128.682666a22.528 22.528 0 0 1 5.461333-21.248 20.906667 20.906667 0 0 1 20.48-5.546667l123.776 34.858667c0.213333 0 0.298667-0.170667 0.469333-0.170667a5.248 5.248 0 0 1 3.882667 1.621333l331.008 341.589334c9.856 10.197333 15.232 24.021333 15.232 39.082666 0 17.066667-6.997333 34.133333-19.285333 46.805334l-31.274667 32.298666a64 64 0 0 1-45.354667 19.925334c-14.592 0-27.989333-5.546667-37.888-15.701334l-330.88-341.76c-0.384-0.341333-0.256-0.810667-0.512-1.152z m417.706666 253.952l-32.853333-33.92-53.333333 55.893334 32.426666 33.450666c5.12 5.333333 15.018667 4.565333 20.906667-1.578666l31.274667-32.298667c3.242667-3.285333 5.077333-7.68 5.12-12.288 0-3.626667-1.237333-6.869333-3.541334-9.258667z m-358.826666-259.328l238.933333 246.528 53.333333-55.893333-238.464-246.101333-53.76 55.466666z m-43.52-99.968l17.322666 65.408 46.037334-47.530666-63.36-17.92z m405.162666 223.914667a23.936 23.936 0 0 1-23.637333-23.594667v-319.658666a29.269333 29.269333 0 0 0-29.354667-29.653334H246.613333c-16.213333 0-28.245333 12.970667-28.245333 29.653334V647.338667c0 16.725333 12.074667 29.312 28.245333 29.312h349.44c12.586667 0 22.826667 11.52 22.826667 24.533333 0 12.970667-10.24 24.149333-22.826667 24.149333H243.114667c-39.424 0-72.234667-33.706667-72.234667-74.453333v-533.205333c0-40.746667 32.768-75.008 72.277333-75.008h516.096c39.509333 0 73.088 34.261333 73.088 75.008v323.413333a23.893333 23.893333 0 0 1-23.552 23.466667v-0.042667z" horiz-adv-x="1024" />
<glyph glyph-name="zuoye" unicode="&#58923;" d="M272.682667 0.554667A59.221333 59.221333 0 0 0 213.546667 59.733333V604.842667c0 32.597333 26.538667 59.136 59.136 59.136h84.48l0.085333 1.066666a43.008 43.008 0 0 0 42.666667 41.514667h32.981333l0.085333 0.981333c3.712 34.133333 32.512 59.946667 66.816 59.904 34.346667 0 63.104-25.770667 66.816-59.904l0.085334-0.981333h33.024c22.912 0 42.026667-18.602667 42.666666-41.514667v-1.024h84.565334c15.786667 0 30.634667-6.186667 41.813333-17.365333 11.136-11.093333 17.408-26.112 17.365333-41.813333V59.733333c0-32.64-26.538667-59.178667-59.178666-59.178666H272.682667z m0 612.309333a8.064 8.064 0 0 1-8.021334-8.064V59.733333c0-4.437333 3.584-8.064 8.021334-8.064h454.229333a8.064 8.064 0 0 1 8.064 8.064V604.8a8.064 8.064 0 0 1-8.064 8.064h-84.864l-0.128-0.938667c-3.157333-20.650667-21.333333-36.181333-42.154667-36.181333H399.914667c-20.906667 0-38.997333 15.573333-42.197334 36.181333l-0.085333 0.938667h-84.906667z m127.189333 53.717333a2.773333 2.773333 0 0 1-2.730667-2.730666v-45.397334c0-1.493333 1.237333-2.730667 2.730667-2.730666h199.850667a2.688 2.688 0 0 1 2.730666 2.730666V663.850667a2.773333 2.773333 0 0 1-2.730666 2.730666h-41.813334l-0.298666-0.554666a67.584 67.584 0 0 0-57.813334-33.066667 67.584 67.584 0 0 0-57.813333 33.066667l-0.341333 0.554666h-41.770667z m99.925333 60.842667a27.306667 27.306667 0 1 1 0.085334-54.570667 27.306667 27.306667 0 0 1-0.085334 54.613334zM437.461333 431.146667a12.714667 12.714667 0 0 0-12.757333 12.757333v18.133333c0 7.04 5.717333 12.714667 12.757333 12.714667h218.026667c6.997333 0 12.714667-5.674667 12.714667-12.714667v-18.133333a12.757333 12.757333 0 0 0-12.714667-12.757333h-218.026667zM333.397333 452.992a30.72 30.72 0 1 1 61.44 0 30.72 30.72 0 0 1-61.44 0zM437.461333 300.586667a12.714667 12.714667 0 0 0-12.757333 12.757333v18.133333c0 7.04 5.717333 12.714667 12.757333 12.714667h218.026667c6.997333 0 12.714667-5.674667 12.714667-12.714667v-18.133333a12.757333 12.757333 0 0 0-12.714667-12.757333h-218.026667zM333.397333 322.432a30.72 30.72 0 1 1 61.44 0 30.72 30.72 0 0 1-61.44 0zM437.461333 166.186667a12.714667 12.714667 0 0 0-12.757333 12.757333v18.133333c0 7.04 5.717333 12.714667 12.757333 12.714667h218.026667c6.997333 0 12.714667-5.674667 12.714667-12.714667v-18.133333a12.757333 12.757333 0 0 0-12.714667-12.757333h-218.026667zM333.397333 188.032a30.72 30.72 0 1 1 61.44 0 30.72 30.72 0 0 1-61.44 0z" horiz-adv-x="1024" />
<glyph glyph-name="pinggu" unicode="&#58924;" d="M526.250667 725.034667v-47.957334a4.693333 4.693333 0 0 0 2.176-0.896c0.298667-0.597333 0.512-1.194667 0.810666-1.706666l81.792-166.229334c6.826667-13.781333 19.712-23.381333 34.773334-26.069333l182.826666-32 1.877334-0.256c0.341333 0 0.853333-0.426667 0.938666-0.725333a29.397333 29.397333 0 0 1 0.768-2.773334 4.266667 4.266667 0 0 0-0.853333-4.394666l-130.816-123.306667a47.914667 47.914667 0 0 1-14.250667-43.648l33.28-179.029333v-0.085334c0.256-1.792-1.237333-3.285333-2.133333-4.010666l-0.597333-0.469334a18.261333 18.261333 0 0 0-2.901334 1.109334l-166.229333 83.114666a47.786667 47.786667 0 0 1-42.752 0.085334l-167.552-83.114667c-0.469333-0.213333-0.853333-0.512-1.365333-0.725333-0.128 0-0.512-0.170667-1.109334-0.170667-0.597333 0-1.109333 0.085333-1.194666 0.170667a6.826667 6.826667 0 0 0-2.133334 3.626666v0.085334l34.56 179.114666c3.114667 16.213333-2.261333 32.853333-14.336 44.16L221.013333 440.746667a9.301333 9.301333 0 0 0-1.706666 5.717333c0.512 1.109333 0.981333 1.578667 1.194666 1.792 0.085333 0.085333 0.298667 0.213333 0.896 0.298667 0.896 0.085333 1.792 0.213333 2.56 0.426666L406.912 482.133333c14.933333 2.688 27.733333 12.373333 34.432 25.984L523.093333 674.133333c1.066667 2.133333 2.773333 2.816 3.072 2.816V725.034667h0.128z m0 0c-19.2 0-37.077333-11.52-46.08-29.354667L398.378667 529.408l-182.826667-33.28c-20.48-2.56-35.754667-16.554667-42.154667-35.712-5.12-17.92 0-39.68 14.08-53.76l131.669334-122.88-34.56-179.029333c-3.84-19.2 5.12-39.68 20.48-51.157334 8.576-6.485333 19.285333-9.685333 29.866666-9.685333 8.277333 0 16.469333 2.005333 23.765334 5.888l167.552 83.114667 166.229333-83.114667c7.68-3.797333 16.554667-6.4 24.277333-6.4 11.477333 0 21.76 3.84 29.354667 10.24 15.36 11.477333 24.277333 30.634667 20.48 51.114667l-33.28 179.029333 131.669333 124.074667c14.08 14.08 19.2 34.56 12.8 53.76-5.12 19.2-21.76 33.28-40.96 35.754666l-182.826666 32-81.792 166.186667c-7.594667 17.92-26.794667 29.44-45.952 29.44z" horiz-adv-x="1024" />
<glyph glyph-name="tiaocha" unicode="&#58925;" d="M482.133333 322.133333v6.4c0 17.066667 2.133333 32 10.666667 44.8 6.4 12.8 25.6 32 55.466667 57.6l8.533333 8.533334c8.533333 10.666667 12.8 21.333333 12.8 34.133333 0 17.066667-4.266667 29.866667-14.933333 38.4-10.666667 8.533333-23.466667 14.933333-40.533334 14.933333-21.333333 0-38.4-6.4-46.933333-19.2-8.533333-10.666667-12.8-27.733333-12.8-46.933333v-2.133333c0-12.8-10.666667-25.6-25.6-25.6s-25.6 10.666667-25.6 25.6v2.133333c0 34.133333 10.666667 59.733333 29.866667 81.066667 21.333333 19.2 49.066667 29.866667 85.333333 29.866666 32 0 55.466667-8.533333 74.666667-25.6 19.2-17.066667 29.866667-38.4 29.866666-66.133333 0-23.466667-6.4-42.666667-19.2-57.6-4.266667-4.266667-17.066667-17.066667-40.533333-36.266667-8.533333-6.4-14.933333-14.933333-21.333333-23.466666-4.266667-8.533333-8.533333-19.2-8.533334-29.866667v-12.8c0-12.8-12.8-23.466667-25.6-23.466667s-25.6 10.666667-25.6 25.6c0-2.133333 0 0 0 0zM512 42.666667c-187.733333 0-341.333333 153.6-341.333333 341.333333s153.6 341.333333 341.333333 341.333333 341.333333-153.6 341.333333-341.333333-153.6-341.333333-341.333333-341.333333z m0 49.066666c162.133333 0 292.266667 130.133333 292.266667 292.266667S674.133333 676.266667 512 676.266667 219.733333 546.133333 219.733333 384 349.866667 91.733333 512 91.733333z m-4.266667 177.066667c10.666667 0 19.2-2.133333 25.6-8.533333 6.4-6.4 10.666667-14.933333 10.666667-23.466667 0-10.666667-4.266667-17.066667-10.666667-23.466667-6.4-6.4-14.933333-8.533333-25.6-8.533333s-19.2 4.266667-25.6 10.666667a34.261333 34.261333 0 0 0-10.666666 23.466666c0 10.666667 4.266667 17.066667 10.666666 23.466667 8.533333 2.133333 17.066667 6.4 25.6 6.4z" horiz-adv-x="1024" />
<glyph glyph-name="yishoucang" unicode="&#58947;" d="M670.421333 725.333333a224.256 224.256 0 0 1-158.890666-65.749333A224.042667 224.042667 0 0 1 352.682667 725.333333a224.682667 224.682667 0 0 1-158.890667-383.530666l282.453333-282.410667a49.92 49.92 0 0 1 70.656 0l282.410667 282.453333A224.682667 224.682667 0 0 1 670.421333 725.333333z" horiz-adv-x="1024" />
<glyph glyph-name="shoucang" unicode="&#58949;" d="M670.421333 687.872c50.048 0 96.981333-19.456 132.394667-54.784a186.026667 186.026667 0 0 0 54.826667-132.394667 186.282667 186.282667 0 0 0-54.826667-132.437333l-282.410667-282.282667a12.501333 12.501333 0 0 0-8.874666-3.626666 12.885333 12.885333 0 0 0-8.832 3.626666l-282.325334 282.453334a186.026667 186.026667 0 0 0-54.784 132.394666c0 50.048 19.456 96.981333 54.784 132.394667A186.026667 186.026667 0 0 0 352.853333 688c50.048 0 96.938667-19.456 132.394667-54.784l26.453333-26.453333 26.453334 26.453333a185.941333 185.941333 0 0 0 132.309333 54.656z m0 37.461333a224.256 224.256 0 0 1-158.890666-65.749333A224.042667 224.042667 0 0 1 352.682667 725.333333a224.682667 224.682667 0 0 1-158.890667-383.530666l282.453333-282.410667a49.92 49.92 0 0 1 70.656 0l282.410667 282.453333A224.682667 224.682667 0 0 1 670.421333 725.333333z" horiz-adv-x="1024" />
<glyph glyph-name="kecheng" unicode="&#58950;" d="M256 682.666667a42.666667 42.666667 0 0 1-42.666667-42.666667v-512a42.666667 42.666667 0 0 1 42.666667-42.666667h512a42.666667 42.666667 0 0 1 42.666667 42.666667V640a42.666667 42.666667 0 0 1-42.666667 42.666667H256z m0 42.666666h512a85.333333 85.333333 0 0 0 85.333333-85.333333v-512a85.333333 85.333333 0 0 0-85.333333-85.333333H256a85.333333 85.333333 0 0 0-85.333333 85.333333V640a85.333333 85.333333 0 0 0 85.333333 85.333333zM384 682.666667v-298.666667l85.546667 82.304L552.405333 384V682.666667H384z m29.568-329.386667C386.474667 327.125333 341.333333 346.325333 341.333333 384V682.666667a42.666667 42.666667 0 0 0 42.666667 42.666666h168.405333a42.666667 42.666667 0 0 0 42.666667-42.666666v-298.666667c0-37.973333-45.781333-57.002667-72.704-30.293333l-53.333333 52.906666-55.466667-53.333333z" horiz-adv-x="1024" />
<glyph glyph-name="xunlianying" unicode="&#58951;" d="M256 682.666667a42.666667 42.666667 0 0 1-42.666667-42.666667v-512a42.666667 42.666667 0 0 1 42.666667-42.666667h512a42.666667 42.666667 0 0 1 42.666667 42.666667V640a42.666667 42.666667 0 0 1-42.666667 42.666667H256z m0 42.666666h512a85.333333 85.333333 0 0 0 85.333333-85.333333v-512a85.333333 85.333333 0 0 0-85.333333-85.333333H256a85.333333 85.333333 0 0 0-85.333333 85.333333V640a85.333333 85.333333 0 0 0 85.333333 85.333333zM528.64 393.813333c19.541333 2.816 42.410667 7.082667 68.522667 12.885334l-136.533334 94.378666v-109.312a304.853333 304.853333 0 0 1 67.968 2.090667z m-68.010667-176.853333c0-28.458667-42.666667-28.458667-42.666666 0V541.738667a21.333333 21.333333 0 0 0 33.450666 17.536l209.365334-144.64a21.333333 21.333333 0 0 0-6.912-38.272c-47.445333-11.946667-87.168-20.224-119.296-24.746667a348.16 348.16 0 0 0-73.941334-2.645333v-132.010667zM384 170.666667a21.333333 21.333333 0 1 0 0 42.666666h128a21.333333 21.333333 0 1 0 0-42.666666H384z" horiz-adv-x="1024" />
<glyph glyph-name="pinggu1" unicode="&#58952;" d="M873.130667 485.589333c-17.066667 17.066667-40.106667 21.333333-64 18.432a86.869333 86.869333 0 0 1-56.917334-27.050666l-281.386666-283.050667a23.04 23.04 0 0 1-6.272-11.776l-27.733334-114.005333c-1.536-7.594667-1.962667-12.544 3.413334-17.92a22.784 22.784 0 0 1 20.736-6.272l111.872 29.226666a22.784 22.784 0 0 1 11.648 6.314667l281.386666 283.093333c17.066667 17.066667 20.906667 34.944 25.6 58.666667a67.712 67.712 0 0 1-18.261333 64.341333h-0.085333z m-31.786667-33.322666c17.066667-17.066667 9.856-36.266667-7.082667-53.290667l-5.802666-5.888-47.402667 47.573333 5.802667 5.888c17.066667 17.066667 37.504 22.784 54.4 5.717334h0.085333z m-285.653333-333.738667l-69.077334-24.789333 23.210667 71.082666 238.122667 239.701334 45.866666-46.208-238.122666-239.786667z m207.616 103.424c-12.714667 0-27.050667-10.410667-27.050667-23.082667v-105.557333h-81.834667c-12.714667 0-29.013333-13.653333-29.013333-26.368s16.298667-23.082667 29.013333-23.082667h106.752a23.125333 23.125333 0 0 1 23.04 23.082667v131.925333c0 12.672-16.298667 23.082667-29.013333 23.082667h8.106667z m-387.370667-128.64H219.562667V677.12h515.413333v-141.568a24.149333 24.149333 0 0 1 24.234667-23.082667 24.917333 24.917333 0 0 1 25.002666 23.082667V701.44a23.125333 23.125333 0 0 1-23.04 23.210667H194.56a23.125333 23.125333 0 0 1-22.912-23.210667v-634.453333c0-12.672 10.24-23.04 22.954667-23.082667h181.333333a23.125333 23.125333 0 0 1 23.04 23.082667 26.026667 26.026667 0 0 1-23.04 26.368zM296.746667 329.045333l-39.808 32 112.64 140.16 121.6-99.072 176.810666 172.757334 35.712-36.608-209.493333-204.629334-116.992 95.317334-80.469333-99.925334z" horiz-adv-x="1024" />
<glyph glyph-name="renwu-wancheng" unicode="&#58954;" d="M554.666667 384m-256 0a256 256 0 1 1 512 0 256 256 0 1 1-512 0Z" horiz-adv-x="1066" />
<glyph glyph-name="renwu-daiwancheng" unicode="&#58955;" d="M529.655172 366.344828m-211.862069 0a211.862069 211.862069 0 1 1 423.724138 0 211.862069 211.862069 0 1 1-423.724138 0Z" horiz-adv-x="1024" />
<glyph glyph-name="renwu-jingxingzhong" unicode="&#58956;" d="M532.48 363.52m-245.76 0a245.76 245.76 0 1 1 491.52 0 245.76 245.76 0 1 1-491.52 0ZM532.48 117.76a245.76 245.76 0 1 0 0 491.52 245.76 245.76 0 0 0 0-491.52z m0 28.91776a216.84224 216.84224 0 1 1 0 433.68448 216.84224 216.84224 0 0 1 0-433.68448z" horiz-adv-x="1064" />
<glyph glyph-name="zan" unicode="&#58958;" d="M700.757333 79.232c31.061333 0 61.312 25.429333 66.773334 56.021333l43.008 241.621334c8.448 47.530667-22.826667 84.608-71.04 84.224l-8.618667-0.042667-44.501333-0.298667c-15.914667-0.128-31.829333-0.128-47.786667 0l-26.026667 0.341334 9.642667 24.234666c8.618667 21.589333 18.346667 80.64 18.090667 107.776-0.512 61.482667-26.368 96.682667-58.325334 96.298667-39.253333-0.426667-58.453333-19.754667-58.368-76.714667 0.213333-94.848-85.973333-190.293333-189.482666-189.482666a1021.952 1021.952 0 0 1-17.365334 0h-2.986666c-0.128 0 0.554667-344.405333 0.554666-344.405334 0 0.085333 386.432 0.426667 386.432 0.426667z m-14.549333 417.408l44.373333 0.341333 8.618667 0.042667c70.741333 0.512 119.04-56.832 106.666667-126.464l-43.008-241.621333c-8.490667-47.658667-53.589333-85.589333-102.058667-85.632l-386.304-0.341334a35.925333 35.925333 0 0 0-36.096 35.712l-0.725333 344.405334a35.84 35.84 0 0 0 35.669333 35.968l3.072 0.042666c4.992 0.085333 11.093333 0.085333 17.962667 0 82.645333-0.64 153.472 77.824 153.344 153.514667-0.170667 76.8 34.986667 112 93.824 112.725333 54.869333 0.64 93.994667-52.608 94.634666-131.925333 0.213333-23.978667-5.76-66.346667-13.226666-96.853333l23.253333 0.085333zM206.592 420.053333v-341.205333h19.754667a17.92 17.92 0 0 0 0-35.925333h-33.109334A22.485333 22.485333 0 0 0 170.666667 65.408V433.493333c0 12.416 10.154667 22.442667 22.528 22.442667h32.768a17.92 17.92 0 0 0 0-35.925333h-19.370667z" horiz-adv-x="1024" />
<glyph glyph-name="zan-click" unicode="&#58959;" d="M700.757333 79.232c31.061333 0 61.312 25.429333 66.773334 56.021333l43.008 241.621334c8.448 47.530667-22.826667 84.608-71.04 84.224l-8.618667-0.042667-44.501333-0.298667c-15.914667-0.128-31.829333-0.128-47.786667 0l-26.026667 0.341334 9.642667 24.234666c8.618667 21.589333 18.346667 80.64 18.090667 107.776-0.512 61.482667-26.368 96.682667-58.325334 96.298667-39.253333-0.426667-58.453333-19.754667-58.368-76.714667 0.213333-94.848-85.973333-190.293333-189.482666-189.482666a1021.952 1021.952 0 0 1-17.365334 0h-2.986666c-0.128 0 0.554667-344.405333 0.554666-344.405334 0 0.085333 386.432 0.426667 386.432 0.426667z m-14.549333 417.408l44.373333 0.341333 8.618667 0.042667c70.741333 0.512 119.04-56.832 106.666667-126.464l-43.008-241.621333c-8.490667-47.658667-53.589333-85.589333-102.058667-85.632l-386.304-0.341334a35.925333 35.925333 0 0 0-36.096 35.712l-0.725333 344.405334a35.84 35.84 0 0 0 35.669333 35.968l3.072 0.042666c4.992 0.085333 11.093333 0.085333 17.962667 0 82.645333-0.64 153.472 77.824 153.344 153.514667-0.170667 76.8 34.986667 112 93.824 112.725333 54.869333 0.64 93.994667-52.608 94.634666-131.925333 0.213333-23.978667-5.76-66.346667-13.226666-96.853333l23.253333 0.085333zM206.592 420.053333v-341.205333h19.754667a17.92 17.92 0 0 0 0-35.925333h-33.109334A22.485333 22.485333 0 0 0 170.666667 65.408V433.493333c0 12.416 10.154667 22.442667 22.528 22.442667h32.768a17.92 17.92 0 0 0 0-35.925333h-19.370667z" horiz-adv-x="1024" />
<glyph glyph-name="settings" unicode="&#58960;" d="M382.417455 608.116364a171.566545 171.566545 0 0 0-118.365091-18.338909 318.557091 318.557091 0 0 1-53.806546-85.969455c28.625455-30.114909 44.544-69.632 44.497455-110.638545a160.581818 160.581818 0 0 0-49.477818-115.665455 314.368 314.368 0 0 1 59.252363-99.374545 171.752727 171.752727 0 0 0 127.069091-16.337455 163.793455 163.793455 0 0 0 75.869091-91.415273 334.987636 334.987636 0 0 1 102.958545 2.187637 163.514182 163.514182 0 0 0 78.289455 99.514181 171.613091 171.613091 0 0 0 120.785455 17.82691 317.486545 317.486545 0 0 1 49.710545 88.250181 160.209455 160.209455 0 0 0-42.821818 108.823273c0 40.261818 15.127273 78.056727 41.285818 107.194182a314.135273 314.135273 0 0 1-45.288727 80.709818 171.752727 171.752727 0 0 0-125.486546 16.802909 163.374545 163.374545 0 0 0-79.592727 104.820364 334.615273 334.615273 0 0 1-110.08 0 163.84 163.84 0 0 0-74.798545-88.389818z m26.763636 134.516363a392.704 392.704 0 0 0 211.083636-1.396363 106.868364 106.868364 0 0 1 52.782546-100.398546c35.653818-21.085091 80.477091-20.945455 115.944727 0.372364a369.198545 369.198545 0 0 0 93.835636-164.445091 106.821818 106.821818 0 0 1-49.524363-89.739636c0-36.677818 19.083636-70.795636 50.827636-90.624a366.266182 366.266182 0 0 0-40.541091-98.21091c-15.825455-26.670545-34.909091-51.246545-56.925091-73.30909a113.524364 113.524364 0 0 1-109.474909-0.744728 107.054545 107.054545 0 0 1-55.389091-96.395636 393.262545 393.262545 0 0 0-203.264-4.421818 107.240727 107.240727 0 0 1-55.389091 90.530909 113.524364 113.524364 0 0 1-112.872727-1.163637A369.524364 369.524364 0 0 0 139.636364 298.402909a107.287273 107.287273 0 0 1 58.181818 94.766546 107.054545 107.054545 0 0 1-54.085818 92.578909 373.899636 373.899636 0 0 0 104.122181 167.842909c33.512727-16.802909 73.448727-15.872 106.123637 2.466909a107.287273 107.287273 0 0 1 55.202909 86.574545z m109.335273-444.183272c45.102545 0 81.687273 35.560727 81.687272 79.406545s-36.584727 79.406545-81.687272 79.406545c-45.149091 0-81.687273-35.560727-81.687273-79.406545s36.584727-79.406545 81.687273-79.406545z m0-55.342546c-76.567273 0-138.612364 60.322909-138.612364 134.749091s62.045091 134.749091 138.612364 134.749091c76.520727 0 138.612364-60.322909 138.612363-134.749091s-62.091636-134.749091-138.612363-134.749091z" horiz-adv-x="1024" />
</font>
</defs></svg>

After

Width:  |  Height:  |  Size: 31 KiB

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.8 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 66 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 11 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 14 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 105 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 172 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 111 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 52 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 23 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 5.1 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 5.5 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 5.7 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 62 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 32 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 15 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 7.2 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 86 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 7.7 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 109 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 26 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 87 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 11 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 61 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 495 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 26 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 5.8 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 314 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 6.5 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 4.5 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 8.7 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.4 MiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 62 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 23 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 2.9 MiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 90 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 58 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 2.3 MiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 81 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 24 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 7.7 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 6.6 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 65 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.1 MiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 87 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 20 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 97 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 42 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 9.5 MiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 102 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 511 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 604 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 4.4 MiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 39 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 75 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 250 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 43 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 28 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 347 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 112 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 159 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 6.1 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 2.0 MiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 7.6 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 78 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 249 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 51 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 108 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 21 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 18 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 27 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 478 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 9.2 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 33 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 47 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 57 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 28 KiB

Some files were not shown because too many files have changed in this diff Show More