brand: 软件名称从"企业用工专家/TurboHR"统一改为"安职通"

- 登录/注册/忘记密码页标题
- 侧边栏和员工端布局默认名称
- 新手引导欢迎语
- 帮助中心问答
- 验收测试页面标题
- 后端 RAG 知识库
- 部署脚本日志输出

Generated with [Devin](https://devin.ai)

Co-Authored-By: Devin <158243242+devin-ai-integration[bot]@users.noreply.github.com>
This commit is contained in:
selfrelease
2026-08-15 15:29:13 +08:00
parent f523f84c18
commit 456cd91a83
14 changed files with 22 additions and 22 deletions
+1 -1
View File
@@ -109,7 +109,7 @@ const HELP_SEED_DATA: KnowledgeSeed[] = [
{ title: '怎么修改公司信息', content: '在设置页面可以修改公司名称、行业、规模等基本信息。这些信息会影响风险检测的准确性,请如实填写。', source: '使用帮助', category: '系统帮助-通知设置' },
{ title: '可以在手机上使用吗', content: '可以。用手机浏览器打开本网站即可,手机版会自动显示底部导航栏。建议添加到手机桌面像App一样使用。苹果手机Safari打开点击底部分享按钮选择添加到主屏幕。安卓手机Chrome打开点击右上角菜单选择添加到主屏幕。', source: '使用帮助', category: '系统帮助-快速入门' },
{ title: '第一次使用该从哪里开始', content: '建议按以下顺序:1添加员工信息,2填写合同信息,3设置社保基数和比例,4创建发薪批次,5有不懂的随时点帮助图标查看。不用担心填错,所有信息都可以随时修改。', source: '使用帮助', category: '系统帮助-快速入门' },
{ title: '企业用工专家是什么', content: '这是一个帮您管理员工、合同、工资和社保的工具,可以把它理解为一个「人事小助手」,帮您把繁琐的人事工作变得简单。比如记录员工信息、提醒合同到期、计算工资社保、生成法律文档等。', source: '使用帮助', category: '系统帮助-快速入门' },
{ title: '安职通是什么', content: '这是一个帮您管理员工、合同、工资和社保的工具,可以把它理解为一个「人事小助手」,帮您把繁琐的人事工作变得简单。比如记录员工信息、提醒合同到期、计算工资社保、生成法律文档等。', source: '使用帮助', category: '系统帮助-快速入门' },
{ title: '我的数据安全吗', content: '您的数据存储在加密的云端服务器上,只有您本人登录后才能查看。我们不会将您的数据分享给任何第三方。所有敏感信息如证件号码都经过加密存储。', source: '使用帮助', category: '系统帮助-常见问题' },
{ title: '可以导出数据吗', content: '可以。在员工管理页面可以导出员工名单为Excel文件。工资批次也可以导出为Excel方便财务对账。', source: '使用帮助', category: '系统帮助-常见问题' },
{ title: '可以多人同时使用吗', content: '可以。在设置页面可以添加多个HR账号,不同账号可以设置不同权限。比如一个管理员、几个普通HR。', source: '使用帮助', category: '系统帮助-常见问题' },
+3 -3
View File
@@ -1,5 +1,5 @@
#!/bin/bash
# 企业用工专家 一键部署脚本
# 安职通 一键部署脚本
# 部署到 154.8.162.18 -> /var/www/turbohr/ -> https://on.hr8ai.top/
#
# 用法: bash deploy.sh
@@ -342,7 +342,7 @@ verify() {
echo ""
echo "========================================="
echo " 企业用工专家 部署完成!"
echo " 安职通 部署完成!"
echo " 访问地址: https://${DOMAIN}/"
echo " 后端 API: https://${DOMAIN}/api/v1/"
echo " PM2 管理: pm2 list (服务器上)"
@@ -357,7 +357,7 @@ if [ "$1" = "--init" ]; then
IS_INIT=true
fi
log "开始部署 企业用工专家${REMOTE_HOST}"
log "开始部署 安职通${REMOTE_HOST}"
log "域名: ${DOMAIN} 目录: ${REMOTE_DIR}"
echo ""
+1 -1
View File
@@ -4,7 +4,7 @@
<meta charset="UTF-8" />
<link rel="icon" type="image/svg+xml" href="/favicon.svg" />
<meta name="viewport" content="width=device-width, initial-scale=1.0, maximum-scale=1.0, viewport-fit=cover" />
<title>企业用工专家</title>
<title>安职通</title>
</head>
<body>
<div id="root"></div>
+2 -2
View File
@@ -6,7 +6,7 @@
<meta http-equiv="Cache-Control" content="no-cache, no-store, must-revalidate">
<meta http-equiv="Pragma" content="no-cache">
<meta http-equiv="Expires" content="0">
<title>TurboHR 验收测试清单</title>
<title>安职通 验收测试清单</title>
<style>
:root {
--primary: #4f46e5;
@@ -280,7 +280,7 @@ body {
<!-- Header -->
<div class="header">
<h1>TurboHR 验收测试清单</h1>
<h1>安职通 验收测试清单</h1>
<div class="verifier-section">
<label>验收人:</label>
<div class="autocomplete-wrap">
+2 -2
View File
@@ -296,7 +296,7 @@ const categories: HelpCategory[] = [
{
id: 'system-intro',
question: '本系统能帮企业做什么?',
answer: '「企业用工专家」是一站式人力资源管理平台,覆盖员工全生命周期管理,帮助企业高效管理人事业务的同时确保合规运营:\n• 员工管理:入职登记、合同签订、转正调岗、离职解聘\n• 薪税管理:工资计算、个税申报、社保公积金缴纳\n• 考勤管理:排班打卡、加班统计、休假记录、月度报表\n• 合同管理:电子合同、到期提醒、续签流程\n• 风险管控:自动扫描法律风险、合规预警、判赔预测\n• AI 助手:劳动法咨询、智能问答、文档生成',
answer: '「安职通」是一站式人力资源管理平台,覆盖员工全生命周期管理,帮助企业高效管理人事业务的同时确保合规运营:\n• 员工管理:入职登记、合同签订、转正调岗、离职解聘\n• 薪税管理:工资计算、个税申报、社保公积金缴纳\n• 考勤管理:排班打卡、加班统计、休假记录、月度报表\n• 合同管理:电子合同、到期提醒、续签流程\n• 风险管控:自动扫描法律风险、合规预警、判赔预测\n• AI 助手:劳动法咨询、智能问答、文档生成',
},
{
id: 'compliance',
@@ -330,7 +330,7 @@ const categories: HelpCategory[] = [
articles: [
{
id: 'what-is',
question: '「企业用工专家」是什么?',
question: '「安职通」是什么?',
answer: '这是一个帮您管理员工、合同、工资和社保的工具。您可以把它理解为一个「人事小助手」,帮您把繁琐的人事工作变得简单。比如:记录员工信息、提醒合同到期、计算工资社保、生成法律文档等。',
},
{
+1 -1
View File
@@ -95,7 +95,7 @@ export default function OnboardingGuide() {
<div className="fixed inset-0 z-50 flex items-center justify-center bg-black/40">
<div className="bg-white rounded-xl shadow-xl max-w-lg w-full mx-4 overflow-hidden">
<div className="flex items-center justify-between px-5 py-3 border-b border-gray-100">
<h2 className="text-base font-semibold">使</h2>
<h2 className="text-base font-semibold">使</h2>
<button onClick={close} className="text-gray-400 hover:text-gray-600">
<X className="w-5 h-5" />
</button>
@@ -36,7 +36,7 @@ export default function PortalLayout({ children }: { children: React.ReactNode }
<div className="max-w-md mx-auto h-14 flex items-center justify-between px-4">
<div className="flex items-center gap-2 min-w-0">
<Logo className="w-6 h-6 text-primary flex-shrink-0" />
<span className="text-sm font-bold text-gray-900 truncate"></span>
<span className="text-sm font-bold text-gray-900 truncate"></span>
</div>
<div className="flex items-center gap-2 flex-shrink-0">
{employee.name && (
@@ -150,7 +150,7 @@ export default function SidebarNav({ mobileOpen, onClose }: { mobileOpen: boolea
{/* Logo 区 */}
<div className="h-14 flex items-center gap-2 px-4 border-b border-gray-200 shrink-0">
<Logo className="w-5 h-5 text-primary" />
<span className="font-bold text-sm text-gray-900 truncate">{orgData?.name || '企业用工专家'}</span>
<span className="font-bold text-sm text-gray-900 truncate">{orgData?.name || '安职通'}</span>
</div>
{/* 导航菜单 */}
+2 -2
View File
@@ -655,7 +655,7 @@ function handleAcceptanceExport() {
}
const resultMap: Record<string, string> = { pass: '✅通过', fail: '❌失败', partial: '⚠️部分通过', untested: '🚫未测试' }
let md = `# TurboHR 验收测试结果\n\n`
let md = `# 安职通 验收测试结果\n\n`
md += `> **导出时间:** ${new Date().toLocaleString('zh-CN')}\n`
md += `> **验收人数:** ${keys.length}\n\n`
@@ -704,7 +704,7 @@ function handleAcceptanceExport() {
md += `\n`
}
md += `\n---\n*由企业用工专家系统自动生成*\n`
md += `\n---\n*由安职通系统自动生成*\n`
const blob = new Blob([md], { type: 'text/markdown;charset=utf-8' })
const url = URL.createObjectURL(blob)
+1 -1
View File
@@ -61,7 +61,7 @@ export default function ForgotPassword() {
<div className="w-full max-w-sm">
<div className="flex items-center justify-center gap-2 mb-8">
<Logo className="w-8 h-8 text-primary" />
<span className="text-xl font-bold"></span>
<span className="text-xl font-bold"></span>
</div>
<div className="card">
+4 -4
View File
@@ -94,8 +94,8 @@ export default function Login() {
<Logo className="w-7 h-7 text-white" />
</div>
<div>
<div className="text-xl font-bold tracking-tight"></div>
<div className="text-xs text-white/60 mt-0.5">TurboHR · </div>
<div className="text-xl font-bold tracking-tight"></div>
<div className="text-xs text-white/60 mt-0.5"> · </div>
</div>
</div>
@@ -126,7 +126,7 @@ export default function Login() {
{/* 底部版权 */}
<div className="text-xs text-white/40">
© 2026 TurboHR ·
© 2026
</div>
</div>
</div>
@@ -137,7 +137,7 @@ export default function Login() {
{/* 移动端 Logo */}
<div className="flex lg:hidden items-center justify-center gap-2 mb-8">
<Logo className="w-8 h-8 text-primary" />
<span className="text-xl font-bold"></span>
<span className="text-xl font-bold"></span>
</div>
{/* 欢迎语 */}
+1 -1
View File
@@ -52,7 +52,7 @@ export default function Register() {
<div className="w-full max-w-sm">
<div className="flex items-center justify-center gap-2 mb-8">
<Logo className="w-8 h-8 text-primary" />
<span className="text-xl font-bold"></span>
<span className="text-xl font-bold"></span>
</div>
<div className="card">
+1 -1
View File
@@ -42,7 +42,7 @@ export default function AutoLogin() {
<div className="max-w-sm w-full text-center">
<div className="flex flex-col items-center justify-center gap-2 mb-8">
<Logo className="w-10 h-10 text-primary" />
<span className="text-base font-bold text-center"> </span>
<span className="text-base font-bold text-center"> </span>
</div>
{status === 'loading' && (
+1 -1
View File
@@ -64,7 +64,7 @@ export default function PortalLogin() {
<div className="w-full max-w-sm">
<div className="flex flex-col items-center justify-center gap-2 mb-8">
<Logo className="w-10 h-10 text-primary" />
<span className="text-base font-bold text-center"> </span>
<span className="text-base font-bold text-center"> </span>
</div>
<div className="card">