From 8e18e77747072321448f17164eafd428766a5d82 Mon Sep 17 00:00:00 2001 From: xujl <2585081818@qq.com> Date: Tue, 28 Apr 2026 16:02:20 +0800 Subject: [PATCH] =?UTF-8?q?=E5=BC=80=E5=8F=91=E4=BA=86=E5=A4=9A=E8=A7=92?= =?UTF-8?q?=E8=89=B2=E7=99=BB=E5=BD=95=E5=8A=9F=E8=83=BD=EF=BC=9A=E5=AE=9E?= =?UTF-8?q?=E7=8E=B0=E4=BA=86=E6=99=AE=E9=80=9A=E7=94=A8=E6=88=B7=E3=80=81?= =?UTF-8?q?=E4=BC=81=E4=B8=9A=E7=94=A8=E6=88=B7=E5=92=8C=E7=AE=A1=E7=90=86?= =?UTF-8?q?=E5=91=98=E5=8F=AF=E4=BB=A5=E5=88=86=E5=88=AB=E9=80=9A=E8=BF=87?= =?UTF-8?q?=E4=B8=8D=E5=90=8C=E5=85=A5=E5=8F=A3=E7=99=BB=E5=BD=95=E7=B3=BB?= =?UTF-8?q?=E7=BB=9F=EF=BC=8C=E5=B9=B6=E4=B8=94=E6=94=AF=E6=8C=81=E7=94=A8?= =?UTF-8?q?=E8=B4=A6=E5=8F=B7=E3=80=81=E9=82=AE=E7=AE=B1=E6=88=96=E6=89=8B?= =?UTF-8?q?=E6=9C=BA=E5=8F=B7=E7=99=BB=E5=BD=95=E3=80=82=20=E5=BC=80?= =?UTF-8?q?=E5=8F=91=E4=BA=86=E6=9D=83=E9=99=90=E5=88=86=E9=85=8D=E5=8A=9F?= =?UTF-8?q?=E8=83=BD=EF=BC=9A=E5=AE=9E=E7=8E=B0=E4=BA=86=E4=B8=80=E4=B8=AA?= =?UTF-8?q?=E5=8F=AF=E4=BB=A5=E5=9C=A8=E5=90=8E=E5=8F=B0=E5=8B=BE=E9=80=89?= =?UTF-8?q?=E9=A1=B5=E9=9D=A2=E7=9A=84=E5=8A=9F=E8=83=BD=EF=BC=8C=E9=80=9A?= =?UTF-8?q?=E8=BF=87=E7=BB=99=E8=A7=92=E8=89=B2=E5=8B=BE=E9=80=89=E8=8F=9C?= =?UTF-8?q?=E5=8D=95=EF=BC=8C=E5=B0=B1=E8=83=BD=E7=9B=B4=E6=8E=A5=E6=8E=A7?= =?UTF-8?q?=E5=88=B6=E4=B8=8D=E5=90=8C=E8=BA=AB=E4=BB=BD=E7=9A=84=E4=BA=BA?= =?UTF-8?q?=E7=99=BB=E5=BD=95=E5=90=8E=E8=83=BD=E7=9C=8B=E5=88=B0=E5=93=AA?= =?UTF-8?q?=E4=BA=9B=E9=A1=B5=E9=9D=A2=E3=80=82=20=E5=BC=80=E5=8F=91?= =?UTF-8?q?=E4=BA=86=E5=AE=9E=E5=90=8D=E8=AE=A4=E8=AF=81=E5=8A=9F=E8=83=BD?= =?UTF-8?q?=EF=BC=9A=E5=AE=9E=E7=8E=B0=E4=BA=86=E4=BC=81=E4=B8=9A=E5=8F=AF?= =?UTF-8?q?=E4=BB=A5=E6=8F=90=E4=BA=A4=E8=90=A5=E4=B8=9A=E6=89=A7=E7=85=A7?= =?UTF-8?q?=E8=AE=A4=E8=AF=81=EF=BC=8C=E4=B8=AA=E4=BA=BA=E5=8F=AF=E4=BB=A5?= =?UTF-8?q?=E6=8F=90=E4=BA=A4=E8=BA=AB=E4=BB=BD=E8=AF=81=E4=BB=B6=E5=92=8C?= =?UTF-8?q?=E6=8A=80=E8=83=BD=E8=AE=A4=E8=AF=81=E7=9A=84=E5=8A=9F=E8=83=BD?= =?UTF-8?q?=EF=BC=8C=E7=AE=A1=E7=90=86=E5=91=98=E5=9C=A8=E5=90=8E=E5=8F=B0?= =?UTF-8?q?=E5=8F=AF=E4=BB=A5=E8=BF=9B=E8=A1=8C=E5=AE=A1=E6=A0=B8=E3=80=82?= =?UTF-8?q?=20=E5=BC=80=E5=8F=91=E4=BA=86=E4=BB=BB=E5=8A=A1=E5=A4=A7?= =?UTF-8?q?=E5=8E=85=E5=8A=9F=E8=83=BD=EF=BC=9A=E5=AE=9E=E7=8E=B0=E4=BA=86?= =?UTF-8?q?=E4=BC=81=E4=B8=9A=E5=8F=AF=E4=BB=A5=E5=8F=91=E5=B8=83=E9=9C=80?= =?UTF-8?q?=E8=A6=81=E5=81=9A=E7=9A=84=E4=BB=BB=E5=8A=A1=EF=BC=8C=E4=B8=AA?= =?UTF-8?q?=E4=BA=BA=E7=94=A8=E6=88=B7=E8=83=BD=E5=9C=A8=E4=BB=BB=E5=8A=A1?= =?UTF-8?q?=E5=A4=A7=E5=8E=85=E9=87=8C=E7=9C=8B=E5=88=B0=E8=BF=99=E4=BA=9B?= =?UTF-8?q?=E4=BB=BB=E5=8A=A1=EF=BC=8C=E5=B9=B6=E4=B8=94=E5=8F=AF=E4=BB=A5?= =?UTF-8?q?=E7=82=B9=E5=87=BB=E7=94=B3=E8=AF=B7=E6=8E=A5=E5=8D=95=EF=BC=8C?= =?UTF-8?q?=E5=A4=A7=E5=AE=B6=E9=83=BD=E8=83=BD=E7=9C=8B=E5=88=B0=E4=BB=BB?= =?UTF-8?q?=E5=8A=A1=E6=98=AF=E2=80=9C=E8=BF=9B=E8=A1=8C=E4=B8=AD=E2=80=9D?= =?UTF-8?q?=E8=BF=98=E6=98=AF=E2=80=9C=E5=B7=B2=E5=AE=8C=E6=88=90=E2=80=9D?= =?UTF-8?q?=E7=8A=B6=E6=80=81=E3=80=82=20=E5=BC=80=E5=8F=91=E4=BA=86?= =?UTF-8?q?=E4=B8=93=E5=AE=B6=E5=BA=93=E4=B8=8E=E9=82=80=E7=BA=A6=E5=8A=9F?= =?UTF-8?q?=E8=83=BD=EF=BC=9A=E5=AE=9E=E7=8E=B0=E4=BA=86=E4=BC=81=E4=B8=9A?= =?UTF-8?q?=E5=8F=AF=E4=BB=A5=E5=8E=BB=E4=B8=93=E5=AE=B6=E5=BA=93=E9=87=8C?= =?UTF-8?q?=E6=90=9C=E7=B4=A2=E5=90=88=E9=80=82=E7=9A=84=E4=BA=BA=E6=89=8D?= =?UTF-8?q?=EF=BC=8C=E5=B9=B6=E4=B8=94=E5=8F=AF=E4=BB=A5=E7=9B=B4=E6=8E=A5?= =?UTF-8?q?=E7=BB=99=E4=BB=96=E4=BB=AC=E5=8F=91=E9=80=81=E5=B7=A5=E4=BD=9C?= =?UTF-8?q?=E9=82=80=E7=BA=A6=E3=80=82=20=E5=BC=80=E5=8F=91=E4=BA=86?= =?UTF-8?q?=E5=B9=B3=E5=8F=B0=E6=95=B0=E6=8D=AE=E5=A4=A7=E5=B1=8F=E5=B1=95?= =?UTF-8?q?=E7=A4=BA=E5=8A=9F=E8=83=BD=EF=BC=9A=E5=AE=9E=E7=8E=B0=E4=BA=86?= =?UTF-8?q?=E5=9C=A8=E9=A6=96=E9=A1=B5=E5=92=8C=E5=90=84=E8=87=AA=E7=9A=84?= =?UTF-8?q?=E5=B7=A5=E4=BD=9C=E5=8F=B0=E9=A1=B5=E9=9D=A2=EF=BC=8C=E5=B1=95?= =?UTF-8?q?=E7=A4=BA=E4=BB=BB=E5=8A=A1=E6=95=B0=E9=87=8F=E3=80=81=E6=94=B6?= =?UTF-8?q?=E7=9B=8A=E9=87=91=E9=A2=9D=E7=AD=89=E6=A0=B8=E5=BF=83=E6=95=B0?= =?UTF-8?q?=E6=8D=AE=E7=9A=84=E6=A6=82=E8=A7=88=E9=9D=A2=E6=9D=BF=E3=80=82?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .env.example | 9 + .gitignore | 8 + README.md | 20 + index.html | 13 + metadata.json | 6 + package-lock.json | 5660 +++++++++++++++++ package.json | 49 + scratch/replace_alerts.py | 26 + src/App.vue | 18 + src/api/certifications.ts | 40 + src/api/enterprise.ts | 25 + src/api/index.ts | 62 + src/api/reservations.ts | 47 + src/api/system.ts | 58 + src/api/tasks.ts | 70 + src/api/users.ts | 50 + src/components/common/SlideVerify.vue | 90 + .../enterprise/EnterpriseProfileDrawer.vue | 138 + src/components/expert/ExpertProfileDrawer.vue | 189 + src/components/user/UserTasksDrawer.vue | 111 + src/env.d.ts | 7 + src/index.css | 1 + src/layouts/AdminLayout.vue | 358 ++ src/layouts/EnterpriseLayout.vue | 403 ++ src/layouts/MainLayout.vue | 454 ++ src/main.ts | 17 + src/router/index.ts | 387 ++ src/stores/auth.ts | 90 + src/stores/system.ts | 48 + src/stores/tasks.ts | 85 + src/types/enums.ts | 57 + src/views/AnnouncementsView.vue | 105 + src/views/ForgotPasswordView.vue | 160 + src/views/HomeView.vue | 327 + src/views/LoginView.vue | 84 + src/views/RegisterView.vue | 172 + src/views/ScreenView.vue | 190 + src/views/admin/AdminModelListView.vue | 156 + src/views/admin/AdminReservationView.vue | 172 + src/views/admin/AdminTaskListView.vue | 332 + src/views/admin/AnnouncementsView.vue | 264 + src/views/admin/CertificationListView.vue | 346 + src/views/admin/DashboardView.vue | 365 ++ src/views/admin/DeletedUsersView.vue | 110 + src/views/admin/EnterpriseCertListView.vue | 276 + src/views/admin/EnterpriseListView.vue | 721 +++ src/views/admin/LoginView.vue | 120 + src/views/admin/OPCUsersListView.vue | 369 ++ src/views/admin/PermissionListView.vue | 167 + src/views/admin/ReservationConfigView.vue | 109 + src/views/admin/RoleListView.vue | 318 + src/views/admin/SkillManageView.vue | 140 + src/views/admin/UserListView.vue | 951 +++ src/views/enterprise/DashboardView.vue | 334 + src/views/enterprise/InvitationsView.vue | 197 + src/views/enterprise/LoginView.vue | 114 + src/views/enterprise/ModelsView.vue | 212 + src/views/enterprise/OPCUsersView.vue | 343 + src/views/enterprise/ProfileView.vue | 221 + src/views/enterprise/RegisterView.vue | 277 + src/views/enterprise/TaskApplicationsView.vue | 133 + src/views/enterprise/TaskCreateView.vue | 293 + src/views/enterprise/TaskDetailView.vue | 563 ++ src/views/enterprise/TaskListView.vue | 233 + src/views/enterprise/TeamView.vue | 173 + src/views/enterprise/UserSettingsView.vue | 185 + src/views/enterprise/VerificationView.vue | 187 + src/views/user/DashboardView.vue | 501 ++ src/views/user/InvitationsView.vue | 256 + src/views/user/ProfileView.vue | 523 ++ src/views/user/ReservationView.vue | 153 + src/views/user/certification/ApplyView.vue | 371 ++ src/views/user/certification/StatusView.vue | 85 + src/views/user/models/ApiKeyListView.vue | 93 + src/views/user/models/ModelMarketView.vue | 142 + src/views/user/tasks/MyApplicationsView.vue | 262 + src/views/user/tasks/MyTasksView.vue | 262 + src/views/user/tasks/TaskApplyView.vue | 124 + src/views/user/tasks/TaskDetailView.vue | 354 ++ src/views/user/tasks/TaskMarketView.vue | 166 + tsconfig.json | 20 + tsconfig.node.json | 10 + vite.config.ts | 26 + 83 files changed, 21363 insertions(+) create mode 100644 .env.example create mode 100644 .gitignore create mode 100644 README.md create mode 100644 index.html create mode 100644 metadata.json create mode 100644 package-lock.json create mode 100644 package.json create mode 100644 scratch/replace_alerts.py create mode 100644 src/App.vue create mode 100644 src/api/certifications.ts create mode 100644 src/api/enterprise.ts create mode 100644 src/api/index.ts create mode 100644 src/api/reservations.ts create mode 100644 src/api/system.ts create mode 100644 src/api/tasks.ts create mode 100644 src/api/users.ts create mode 100644 src/components/common/SlideVerify.vue create mode 100644 src/components/enterprise/EnterpriseProfileDrawer.vue create mode 100644 src/components/expert/ExpertProfileDrawer.vue create mode 100644 src/components/user/UserTasksDrawer.vue create mode 100644 src/env.d.ts create mode 100644 src/index.css create mode 100644 src/layouts/AdminLayout.vue create mode 100644 src/layouts/EnterpriseLayout.vue create mode 100644 src/layouts/MainLayout.vue create mode 100644 src/main.ts create mode 100644 src/router/index.ts create mode 100644 src/stores/auth.ts create mode 100644 src/stores/system.ts create mode 100644 src/stores/tasks.ts create mode 100644 src/types/enums.ts create mode 100644 src/views/AnnouncementsView.vue create mode 100644 src/views/ForgotPasswordView.vue create mode 100644 src/views/HomeView.vue create mode 100644 src/views/LoginView.vue create mode 100644 src/views/RegisterView.vue create mode 100644 src/views/ScreenView.vue create mode 100644 src/views/admin/AdminModelListView.vue create mode 100644 src/views/admin/AdminReservationView.vue create mode 100644 src/views/admin/AdminTaskListView.vue create mode 100644 src/views/admin/AnnouncementsView.vue create mode 100644 src/views/admin/CertificationListView.vue create mode 100644 src/views/admin/DashboardView.vue create mode 100644 src/views/admin/DeletedUsersView.vue create mode 100644 src/views/admin/EnterpriseCertListView.vue create mode 100644 src/views/admin/EnterpriseListView.vue create mode 100644 src/views/admin/LoginView.vue create mode 100644 src/views/admin/OPCUsersListView.vue create mode 100644 src/views/admin/PermissionListView.vue create mode 100644 src/views/admin/ReservationConfigView.vue create mode 100644 src/views/admin/RoleListView.vue create mode 100644 src/views/admin/SkillManageView.vue create mode 100644 src/views/admin/UserListView.vue create mode 100644 src/views/enterprise/DashboardView.vue create mode 100644 src/views/enterprise/InvitationsView.vue create mode 100644 src/views/enterprise/LoginView.vue create mode 100644 src/views/enterprise/ModelsView.vue create mode 100644 src/views/enterprise/OPCUsersView.vue create mode 100644 src/views/enterprise/ProfileView.vue create mode 100644 src/views/enterprise/RegisterView.vue create mode 100644 src/views/enterprise/TaskApplicationsView.vue create mode 100644 src/views/enterprise/TaskCreateView.vue create mode 100644 src/views/enterprise/TaskDetailView.vue create mode 100644 src/views/enterprise/TaskListView.vue create mode 100644 src/views/enterprise/TeamView.vue create mode 100644 src/views/enterprise/UserSettingsView.vue create mode 100644 src/views/enterprise/VerificationView.vue create mode 100644 src/views/user/DashboardView.vue create mode 100644 src/views/user/InvitationsView.vue create mode 100644 src/views/user/ProfileView.vue create mode 100644 src/views/user/ReservationView.vue create mode 100644 src/views/user/certification/ApplyView.vue create mode 100644 src/views/user/certification/StatusView.vue create mode 100644 src/views/user/models/ApiKeyListView.vue create mode 100644 src/views/user/models/ModelMarketView.vue create mode 100644 src/views/user/tasks/MyApplicationsView.vue create mode 100644 src/views/user/tasks/MyTasksView.vue create mode 100644 src/views/user/tasks/TaskApplyView.vue create mode 100644 src/views/user/tasks/TaskDetailView.vue create mode 100644 src/views/user/tasks/TaskMarketView.vue create mode 100644 tsconfig.json create mode 100644 tsconfig.node.json create mode 100644 vite.config.ts diff --git a/.env.example b/.env.example new file mode 100644 index 0000000..7a550fe --- /dev/null +++ b/.env.example @@ -0,0 +1,9 @@ +# GEMINI_API_KEY: Required for Gemini AI API calls. +# AI Studio automatically injects this at runtime from user secrets. +# Users configure this via the Secrets panel in the AI Studio UI. +GEMINI_API_KEY="MY_GEMINI_API_KEY" + +# APP_URL: The URL where this applet is hosted. +# AI Studio automatically injects this at runtime with the Cloud Run service URL. +# Used for self-referential links, OAuth callbacks, and API endpoints. +APP_URL="MY_APP_URL" diff --git a/.gitignore b/.gitignore new file mode 100644 index 0000000..5a86d2a --- /dev/null +++ b/.gitignore @@ -0,0 +1,8 @@ +node_modules/ +build/ +dist/ +coverage/ +.DS_Store +*.log +.env* +!.env.example diff --git a/README.md b/README.md new file mode 100644 index 0000000..090aba2 --- /dev/null +++ b/README.md @@ -0,0 +1,20 @@ +
{{ task.description }}
+为什么无法删除该用户?
+该用户当前仍有进行中的任务(作为发布方或接单专家)。为保证系统数据流转的完整性,必须先强制取消以下所有关联任务,才能安全注销该用户账号。
++ ✦ {{ user.bio }} +
+ +第一时间掌握平台动态、政策解读与功能上新。
+{{ item.content?.replace(/[#*`_~>\-\[\]()!]/g, '').substring(0, 150) }}
+Password Recovery
+请输入您注册时使用的邮箱,我们将向您发送重置验证码。
+您现在可以使用新密码登录系统了。
++ CorpScale 为数字化时代的专业个人提供从基建、合规到全球任务对接的一站式服务,让您以“一人公司”模式高效运作。 +
+驱动您的个体增长引擎
+{{ feature.description }}
+
+ 从专家到实体
只需三个简单的步伐
+
+ 我们简化的入驻流程确保您能以最快速度获得专业工具包并开始创造价值。 +
++ {{ step.description }} +
+社区公告与
品牌中心
OPC Talent Hub Access
+开启您的一人公司智能之旅
+Global OPC Opportunity Stream
+REAL-TIME
+Live Global Task Stream
+{{ task.company }}
+Estimate Budget
+{{ task.budget }}
+{{ stat }}
+新增、编辑或配置平台内可用的组件服务模型
+管理会议室、工位、门禁等可预约资源
+管理所有企业与管理员发布的任务,可进行推荐、下架和删除操作
+{{ task.description }}
+
+
处理待审核的专家入驻请求
++ 账号: {{ currentCert.user_detail?.username || '—' }} + 昵称: {{ currentCert.user_detail.nickname }} +
+{{ currentCert.reject_reason }}
+欢迎回来,{{ user?.nickname || user?.username || '管理员' }}。以下是平台运营数据概览。
+已删除的用户数据保留在此,支持恢复操作
+处理待审核的企业入驻认证申请
+{{ currentEnterprise.credit_code || '无统一社会信用代码' }}
+Admin Control Center
+管理平台已认证的高质量专家资产
+管理系统所有的菜单、页面按钮与底层接口权限
+设置物理空间资源的使用费率
+管理系统角色,配置不同角色可访问的功能页面
+{{ role.description || '暂无描述' }}
+
+
@{{ selectedUserDetail.username }}
+{{ selectedUserDetail.bio }}
+管理您发送给 OPC 专家的定向邀约
+请在工作时间内联系,并确认已查阅任务细节。
+{{ selectedInv?.message || '邀请您参与我们的任务。' }}
+{{ msg.content }}
+Corporate Partner Access Portal
+{{ models.length }} 款商用模型在线
+{{ model.desc }}
+联系我们团队获取量身定做的 AI 解决方案
+请妥善保管该凭证。一旦丢失需重新申请并吊销旧凭证。
+{{ generatedKey }}
+ 发掘并邀约顶尖认证专家为您工作
+查看和管理企业资料
+Enterprise Onboarding
+建议尺寸: 200x200,支持透明底 PNG
+移除Logo
+{{ isUploading ? '正在上传...' : '点击上传营业执照' }}
+PDF / JPG / PNG (最大 10MB)
+请确认以下信息无误后提交
+Task #{{ taskId }} · 共 {{ applications.length }} 条申请
+"{{ app.cover_letter }}"
+为 OPC 专家创建新的合作机会
+Task #{{ taskId }}
+"{{ app.cover_letter }}"
+{{ msg.content }}
+{{ record.note || '无附加说明' }}
+ +{{ task.description }}
+ +查看和管理企业内所有成员发布的招募任务
+管理企业内部员工账号
+管理您在企业工作台的个人显示信息
+完成认证后可享受全功能算力支持
+{{ isUploading ? '正在上传...' : '上传营业执照扫描件' }}
+PDF, JPG or PNG (最大 10MB)
+请核对您的企业信息,一旦提交后在审核期间将无法修改。
+ +{{ ann.content?.replace(/[#*`_~>\-\[\]()!]/g, '').substring(0, 60) }}
+管理企业发来的项目邀请
++ {{ inv.inviter_name || '招募专员' }}: {{ inv.message || '邀请您参与我们的任务。' }} +
+请在工作时间内联系,并确认已查阅任务细节。
+{{ selectedInv?.message || '邀请您参与我们的任务。' }}
+{{ msg.content }}
+为什么需要上传真实照片?
+为保障平台交易安全,您的面部特征将用于后续提现、大额交易或敏感操作时的人脸验证对比。
+请上传一张近期、清晰、五官可见的正面免冠照片,支持 JPG/PNG 格式。
++ 您的 OPC 专家认证申请已进入人工复核阶段,预计 24 小时内完成。 + 恭喜!您已正式成为 OPC 认证专家。 + 很抱歉,您的申请未通过审核。原因:{{ certData.reject_reason || '资料不全' }}。 +
+ +预定线下会议室或开通园区门禁权限
+{{ item.description }}
+ +完成认证即可解锁高阶平台专属任务与更高的报酬倍率
+点击上传人脸正面照
+JPG / PNG,不超过 5MB
+您的身份信息已录入区块链节点,无需再次采集人脸
+您申请的所有模型访问凭证
+{{ row.token_value }}
+ 加速您的业务数字化、智能化进程
+{{ model.description }}
+{{ generatedKey }}
+ 管理所有投递的任务申请
+正在执行和交付中的任务
+正在申请任务
+ID: {{ taskSummary.id }} • 预估报酬 ¥{{ taskSummary.budget_min }} - {{ taskSummary.budget_max }}
+{{ task.description }}
+ +{{ msg.content }}
+以上记录为邀约阶段双方的沟通备忘,仅供查阅不支持修改。
+{{ record.note }}
+ + ++ {{ userApplication?.status === 'DELIVERED' ? '您已提交过成果。如需修改成果,可以再次提交覆盖。' : '任务执行完成后,请提交您的最终成果和结项说明,供企业验收。' }} +
+请确认您已了解项目需求并具备相关专业技能。
++ {{ statusDescription }} +
+请在工作时间内联系,并说明您是该任务的承接者。
+