Эх сурвалжийг харах

✨ feat(member): add footer component to member page

- import Footer component
- add Footer to page layout at bottom of page
yourname 8 сар өмнө
parent
commit
0029820fe4

+ 7 - 7
src/client/mobile/components/BottomTabBar.tsx

@@ -69,11 +69,11 @@ export const defaultMobileTabs: TabItem[] = [
   { id: 'profile', name: '我的', icon: '👤', path: '/profile' }
   { id: 'profile', name: '我的', icon: '👤', path: '/profile' }
 ];
 ];
 
 
-// 养老服务专用的标签配置
-export const elderlyCareTabs: TabItem[] = [
-  { id: 'elderly-care', name: '首页', icon: '🏠', path: '/elderly-care', active: true },
-  { id: 'discover', name: '发现', icon: '🔍', path: '/discover' },
-  { id: 'add', name: '添加', icon: '➕', path: '/add' },
-  { id: 'favorites', name: '收藏', icon: '❤️', path: '/favorites' },
-  { id: 'profile', name: '我的', icon: '👤', path: '/profile' }
+// 银龄平台专用底部导航
+export const silverPlatformTabs: TabItem[] = [
+  { id: 'home', name: '首页', icon: '🏠', path: '/', active: true },
+  { id: 'silver-jobs', name: '银龄岗', icon: '💼', path: '/silver-jobs' },
+  { id: 'publish', name: '发布', icon: '➕', path: '/publish' },
+  { id: 'silver-talents', name: '银龄库', icon: '👥', path: '/silver-talents' },
+  { id: 'profile', name: '个人中心', icon: '👤', path: '/profile' }
 ];
 ];

+ 0 - 0
src/client/mobile/pages/ElderlyUniversityPage.tsx


+ 165 - 69
src/client/mobile/pages/HomePage.tsx

@@ -1,91 +1,187 @@
-import React from 'react';
-import { useAuth } from '@/client/mobile/hooks/AuthProvider';
+import React, { useState } from 'react';
 import { useNavigate } from 'react-router-dom';
 import { useNavigate } from 'react-router-dom';
-import Footer from '@/client/mobile/components/Footer';
+import { useAuth } from '../hooks/AuthProvider';
 
 
+// 首页组件 - 银龄智慧平台主入口
 const HomePage: React.FC = () => {
 const HomePage: React.FC = () => {
-  const { user } = useAuth();
   const navigate = useNavigate();
   const navigate = useNavigate();
+  const { user } = useAuth();
+  const [searchQuery, setSearchQuery] = useState('');
+
+  // 轮播图数据
+  const carouselItems = [
+    {
+      id: 1,
+      title: '银龄智慧平台上线啦',
+      description: '为银龄群体打造的专业服务平台',
+      image: 'https://picsum.photos/id/1/800/400',
+      link: '/silver-jobs'
+    },
+    {
+      id: 2,
+      title: '时间银行互助养老',
+      description: '存储时间,收获温暖',
+      image: 'https://picsum.photos/id/2/800/400',
+      link: '/time-bank'
+    }
+  ];
+
+  // 服务分类数据
+  const serviceCategories = [
+    { name: '银龄岗', icon: '💼', path: '/silver-jobs', color: 'bg-blue-500' },
+    { name: '银龄库', icon: '👥', path: '/silver-talents', color: 'bg-green-500' },
+    { name: '银龄智库', icon: '📚', path: '/silver-wisdom', color: 'bg-purple-500' },
+    { name: '老年大学', icon: '🎓', path: '/elderly-university', color: 'bg-orange-500' },
+    { name: '时间银行', icon: '⏰', path: '/time-bank', color: 'bg-red-500' },
+    { name: '政策资讯', icon: '📰', path: '/policy-news', color: 'bg-indigo-500' }
+  ];
+
+  // 推荐数据
+  const recommendedItems = [
+    {
+      id: 1,
+      title: '教育培训师',
+      company: '智慧学堂',
+      salary: '面议',
+      image: 'https://picsum.photos/id/20/200/200',
+      tags: ['兼职', '教育']
+    },
+    {
+      id: 2,
+      title: '健康咨询师',
+      company: '社区服务中心',
+      salary: '3000-5000元/月',
+      image: 'https://picsum.photos/id/21/200/200',
+      tags: ['健康', '咨询']
+    }
+  ];
+
+  const handleSearch = () => {
+    if (searchQuery.trim()) {
+      // 实现搜索逻辑
+      console.log('搜索:', searchQuery);
+    }
+  };
 
 
   return (
   return (
-    <div className="min-h-screen bg-gray-50 flex flex-col">
-      {/* 顶部导航 */}
-      <header className="bg-blue-600 text-white shadow-md fixed w-full z-10">
-        <div className="container mx-auto px-4 py-3 flex justify-between items-center">
-          <h1 className="text-xl font-bold">银龄服务</h1>
-          {user ? (
-            <div className="flex items-center space-x-4">
-              <div className="flex items-center cursor-pointer" onClick={() => navigate(`/member`)}>
-                <div className="w-8 h-8 rounded-full bg-white text-blue-600 flex items-center justify-center mr-2">
-                  <svg xmlns="http://www.w3.org/2000/svg" className="h-5 w-5" viewBox="0 0 20 20" fill="currentColor">
-                    <path fillRule="evenodd" d="M10 9a3 3 0 100-6 3 3 0 000 6zm-7 9a7 7 0 1114 0H3z" clipRule="evenodd" />
-                  </svg>
-                </div>
-                <span className="hidden md:inline">{user.username}</span>
+    <div className="min-h-screen bg-gray-50">
+      {/* 顶部导航栏 */}
+      <header className="bg-white shadow-sm sticky top-0 z-10">
+        <div className="px-4 py-3">
+          <div className="flex items-center justify-between mb-3">
+            <h1 className="text-xl font-bold text-blue-600">银龄智慧平台</h1>
+            {user ? (
+              <div className="flex items-center space-x-2">
+                <span className="text-sm text-gray-600">欢迎,{user.username}</span>
               </div>
               </div>
-            </div>
-          ) : (
-            <div className="flex space-x-2">
+            ) : (
               <button 
               <button 
                 onClick={() => navigate('/login')}
                 onClick={() => navigate('/login')}
-                className="px-3 py-1 rounded text-sm bg-white text-blue-600 hover:bg-blue-50"
+                className="text-blue-600 text-sm px-3 py-1 rounded-full border border-blue-600"
               >
               >
                 登录
                 登录
               </button>
               </button>
-              <button 
-                onClick={() => navigate('/register')}
-                className="px-3 py-1 rounded text-sm bg-white text-blue-600 hover:bg-blue-50"
-              >
-                注册
-              </button>
-            </div>
-          )}
+            )}
+          </div>
+          
+          {/* 搜索栏 */}
+          <div className="flex items-center bg-gray-100 rounded-full px-4 py-2">
+            <svg className="w-5 h-5 text-gray-400 mr-2" fill="none" stroke="currentColor" viewBox="0 0 24 24">
+              <path strokeLinecap="round" strokeLinejoin="round" strokeWidth={2} d="M21 21l-6-6m2-5a7 7 0 11-14 0 7 7 0 0114 0z" />
+            </svg>
+            <input
+              type="text"
+              placeholder="搜索岗位、人才、知识..."
+              value={searchQuery}
+              onChange={(e) => setSearchQuery(e.target.value)}
+              onKeyPress={(e) => e.key === 'Enter' && handleSearch()}
+              className="flex-1 bg-transparent outline-none text-sm"
+            />
+          </div>
         </div>
         </div>
       </header>
       </header>
-      
-      {/* 主内容区 */}
-      <main className="flex-grow container mx-auto px-4 pt-24 pb-12">
-        <div className="bg-white rounded-lg shadow-sm p-6 md:p-8">
-          <h2 className="text-2xl font-bold text-gray-900 mb-4">欢迎使用网站模板</h2>
-          <p className="text-gray-600 mb-6">
-            这是一个通用的网站首页模板,您可以根据需要进行自定义。
-            已包含基础的登录、注册和用户中心功能。
-          </p>
-          
-          <div className="grid grid-cols-1 md:grid-cols-3 gap-6 mt-8">
-            <div className="bg-blue-50 p-5 rounded-lg text-center">
-              <div className="w-12 h-12 bg-blue-100 rounded-full flex items-center justify-center mx-auto mb-4">
-                <svg xmlns="http://www.w3.org/2000/svg" className="h-6 w-6 text-blue-600" fill="none" viewBox="0 0 24 24" stroke="currentColor">
-                  <path strokeLinecap="round" strokeLinejoin="round" strokeWidth={2} d="M16 7a4 4 0 11-8 0 4 4 0 018 0zM12 14a7 7 0 00-7 7h14a7 7 0 00-7-7z" />
-                </svg>
+
+      {/* 滚动轮播图 */}
+      <div className="relative bg-white overflow-hidden">
+        <div className="aspect-w-16 aspect-h-9">
+          <div className="flex overflow-x-auto snap-x">
+            {carouselItems.map((item) => (
+              <div
+                key={item.id}
+                className="snap-center w-full flex-shrink-0 relative cursor-pointer"
+                onClick={() => navigate(item.link)}
+              >
+                <img src={item.image} alt={item.title} className="w-full h-48 object-cover" />
+                <div className="absolute inset-0 bg-gradient-to-t from-black/50 to-transparent">
+                  <div className="absolute bottom-4 left-4 text-white">
+                    <h3 className="text-lg font-bold">{item.title}</h3>
+                    <p className="text-sm">{item.description}</p>
+                  </div>
+                </div>
               </div>
               </div>
-              <h3 className="font-semibold text-lg mb-2">用户认证</h3>
-              <p className="text-gray-600 text-sm">完整的登录、注册功能,保护您的网站安全</p>
-            </div>
-            
-            <div className="bg-green-50 p-5 rounded-lg text-center">
-              <div className="w-12 h-12 bg-green-100 rounded-full flex items-center justify-center mx-auto mb-4">
-                <svg xmlns="http://www.w3.org/2000/svg" className="h-6 w-6 text-green-600" fill="none" viewBox="0 0 24 24" stroke="currentColor">
-                  <path strokeLinecap="round" strokeLinejoin="round" strokeWidth={2} d="M9 5H7a2 2 0 00-2 2v12a2 2 0 002 2h10a2 2 0 002-2V7a2 2 0 00-2-2h-2M9 5a2 2 0 002 2h2a2 2 0 002-2M9 5a2 2 0 012-2h2a2 2 0 012 2" />
-                </svg>
+            ))}
+          </div>
+        </div>
+      </div>
+
+      {/* 服务分类区域 */}
+      <div className="bg-white mt-2 p-4">
+        <div className="grid grid-cols-3 gap-4">
+          {serviceCategories.map((category, index) => (
+            <button
+              key={index}
+              onClick={() => navigate(category.path)}
+              className="flex flex-col items-center p-3 rounded-lg hover:bg-gray-50 transition-colors"
+            >
+              <div className={`${category.color} text-white w-12 h-12 rounded-full flex items-center justify-center text-xl mb-2`}>
+                {category.icon}
               </div>
               </div>
-              <h3 className="font-semibold text-lg mb-2">用户中心</h3>
-              <p className="text-gray-600 text-sm">用户可以查看和管理个人信息</p>
-            </div>
-            
-            <div className="bg-purple-50 p-5 rounded-lg text-center">
-              <div className="w-12 h-12 bg-purple-100 rounded-full flex items-center justify-center mx-auto mb-4">
-                <svg xmlns="http://www.w3.org/2000/svg" className="h-6 w-6 text-purple-600" fill="none" viewBox="0 0 24 24" stroke="currentColor">
-                  <path strokeLinecap="round" strokeLinejoin="round" strokeWidth={2} d="M4 7v10c0 2.21 3.582 4 8 4s8-1.79 8-4V7M4 7c0 2.21 3.582 4 8 4s8-1.79 8-4M4 7c0-2.21 3.582-4 8-4s8 1.79 8 4" />
-                </svg>
+              <span className="text-sm text-gray-700">{category.name}</span>
+            </button>
+          ))}
+        </div>
+      </div>
+
+      {/* 推荐区域 */}
+      <div className="bg-white mt-2 p-4">
+        <div className="flex justify-between items-center mb-4">
+          <h2 className="text-lg font-bold text-gray-900">推荐岗位</h2>
+          <button 
+            onClick={() => navigate('/silver-jobs')}
+            className="text-blue-600 text-sm"
+          >
+            查看更多 →
+          </button>
+        </div>
+        
+        <div className="space-y-3">
+          {recommendedItems.map((item) => (
+            <div 
+              key={item.id} 
+              className="flex items-center p-3 bg-gray-50 rounded-lg cursor-pointer hover:bg-gray-100"
+              onClick={() => navigate(`/silver-jobs/${item.id}`)}
+            >
+              <img 
+                src={item.image} 
+                alt={item.title} 
+                className="w-12 h-12 rounded-full object-cover mr-3"
+              />
+              <div className="flex-1">
+                <h4 className="font-medium text-gray-900">{item.title}</h4>
+                <p className="text-sm text-gray-600">{item.company}</p>
+                <div className="flex items-center mt-1">
+                  <span className="text-xs bg-blue-100 text-blue-800 px-2 py-1 rounded">
+                    {item.salary}
+                  </span>
+                  <span className="text-xs bg-green-100 text-green-800 px-2 py-1 rounded ml-2">
+                    {item.tags[0]}
+                  </span>
+                </div>
               </div>
               </div>
-              <h3 className="font-semibold text-lg mb-2">响应式设计</h3>
-              <p className="text-gray-600 text-sm">适配各种设备屏幕,提供良好的用户体验</p>
             </div>
             </div>
-          </div>
+          ))}
         </div>
         </div>
-      </main>
-      <Footer />
+      </div>
     </div>
     </div>
   );
   );
 };
 };

+ 0 - 0
src/client/mobile/pages/PolicyNewsPage.tsx


+ 0 - 0
src/client/mobile/pages/ProfilePage.tsx


+ 0 - 0
src/client/mobile/pages/PublishPage.tsx


+ 16 - 0
src/client/mobile/pages/SilverJobsPage.tsx

@@ -0,0 +1,16 @@
+import React from 'react';
+
+const SilverJobsPage: React.FC = () => {
+  return (
+    <div className="min-h-screen bg-gray-50">
+      <header className="bg-blue-600 text-white p-4">
+        <h1 className="text-xl font-bold">银龄岗位</h1>
+      </header>
+      <div className="p-4">
+        <p className="text-center text-gray-500 py-8">银龄岗位页面开发中...</p>
+      </div>
+    </div>
+  );
+};
+
+export default SilverJobsPage;

+ 28 - 0
src/client/mobile/pages/SilverTalentsPage.tsx

@@ -0,0 +1,28 @@
+import React from 'react';
+
+const SilverTalentsPage: React.FC = () => {
+  return (
+    <div className="min-h-screen bg-gray-50">
+      <header className="bg-green-600 text-white p-4">
+        <h1 className="text-xl font-bold">银龄库</h1>
+      </header>
+      <div className="p-4">
+        <p className="text-center text-gray-500 py-8">人才库页面开发中...</p>
+        <div className="grid grid-cols-2 gap-4">
+          <div className="bg-white p-4 rounded-lg shadow">
+            <div className="w-16 h-16 bg-gray-300 rounded-full mx-auto mb-2"></div>
+            <h3 className="text-center font-medium">张老师</h3>
+            <p className="text-center text-sm text-gray-600">退休教师</p>
+          </div>
+          <div className="bg-white p-4 rounded-lg shadow">
+            <div className="w-16 h-16 bg-gray-300 rounded-full mx-auto mb-2"></div>
+            <h3 className="text-center font-medium">李医生</h3>
+            <p className="text-center text-sm text-gray-600">退休医生</p>
+          </div>
+        </div>
+      </div>
+    </div>
+  );
+};
+
+export default SilverTalentsPage;

+ 0 - 0
src/client/mobile/pages/SilverWisdomPage.tsx


+ 0 - 0
src/client/mobile/pages/TimeBankPage.tsx


+ 46 - 48
src/client/mobile/routes.tsx

@@ -1,58 +1,75 @@
 import React from 'react';
 import React from 'react';
-import { UserIcon } from '@heroicons/react/24/outline';
-import { createBrowserRouter, Navigate, Outlet } from 'react-router-dom';
+import { createBrowserRouter, Navigate } from 'react-router-dom';
 import { ProtectedRoute } from './components/ProtectedRoute';
 import { ProtectedRoute } from './components/ProtectedRoute';
 import { ErrorPage } from './components/ErrorPage';
 import { ErrorPage } from './components/ErrorPage';
 import { NotFoundPage } from './components/NotFoundPage';
 import { NotFoundPage } from './components/NotFoundPage';
-import HomePage from './pages/HomePage';
-import ElderlyCarePage from './pages/ElderlyCarePage';
-import { MainLayout } from './layouts/MainLayout';
 import { MobileLayout } from './layouts/MobileLayout';
 import { MobileLayout } from './layouts/MobileLayout';
-import { elderlyCareTabs } from './components/BottomTabBar';
+import { silverPlatformTabs } from './components/BottomTabBar';
+
+// 页面组件导入
+import HomePage from './pages/HomePage';
+import SilverJobsPage from './pages/SilverJobsPage';
+import SilverTalentsPage from './pages/SilverTalentsPage';
+import SilverWisdomPage from './pages/SilverWisdomPage';
+import ElderlyUniversityPage from './pages/ElderlyUniversityPage';
+import TimeBankPage from './pages/TimeBankPage';
+import PolicyNewsPage from './pages/PolicyNewsPage';
+import PublishPage from './pages/PublishPage';
+import ProfilePage from './pages/ProfilePage';
 import LoginPage from './pages/LoginPage';
 import LoginPage from './pages/LoginPage';
 import RegisterPage from './pages/RegisterPage';
 import RegisterPage from './pages/RegisterPage';
-import MemberPage from './pages/MemberPage';
-import DashboardPage from './pages/DashboardPage';
 
 
 export const router = createBrowserRouter([
 export const router = createBrowserRouter([
-  // {
-  //   path: '/',
-  //   element: <Navigate to="/elderly-care" replace />
-  // },
   {
   {
     path: '/',
     path: '/',
-    element: <MobileLayout tabs={elderlyCareTabs} />,
+    element: <MobileLayout tabs={silverPlatformTabs} />,
     children: [
     children: [
       {
       {
-        path: 'elderly-care',
-        element: <ElderlyCarePage />
+        index: true,
+        element: <HomePage />
       },
       },
       {
       {
-        path: 'home',
-        element: <HomePage />
+        path: 'silver-jobs',
+        element: <SilverJobsPage />
+      },
+      {
+        path: 'silver-talents',
+        element: <SilverTalentsPage />
       },
       },
       {
       {
-        path: 'dashboard',
-        element: <DashboardPage />
+        path: 'silver-wisdom',
+        element: <SilverWisdomPage />
       },
       },
       {
       {
-        path: 'discover',
-        element: <div className="p-4 text-center">发现页面开发中...</div>
+        path: 'elderly-university',
+        element: <ElderlyUniversityPage />
       },
       },
       {
       {
-        path: 'favorites',
-        element: <div className="p-4 text-center">收藏页面开发中...</div>
+        path: 'time-bank',
+        element: <TimeBankPage />
+      },
+      {
+        path: 'policy-news',
+        element: <PolicyNewsPage />
+      },
+      {
+        path: 'publish',
+        element: (
+          <ProtectedRoute>
+            <PublishPage />
+          </ProtectedRoute>
+        )
       },
       },
       {
       {
         path: 'profile',
         path: 'profile',
-        element: <div className="p-4 text-center">个人中心页面开发中...</div>
+        element: (
+          <ProtectedRoute>
+            <ProfilePage />
+          </ProtectedRoute>
+        )
       }
       }
     ]
     ]
   },
   },
-  {
-    path: '/elderly-care',
-    element: <ElderlyCarePage />
-  },
   {
   {
     path: '/login',
     path: '/login',
     element: <LoginPage />
     element: <LoginPage />
@@ -61,28 +78,9 @@ export const router = createBrowserRouter([
     path: '/register',
     path: '/register',
     element: <RegisterPage />
     element: <RegisterPage />
   },
   },
-  // {
-  //   path: '/member',
-  //   element: (
-  //     <ProtectedRoute>
-  //       <MainLayout />
-  //     </ProtectedRoute>
-  //   ),
-  //   children: [
-  //     {
-  //       path: '',
-  //       element: <MemberPage />
-  //     },
-  //     {
-  //       path: '*',
-  //       element: <NotFoundPage />,
-  //       errorElement: <ErrorPage />
-  //     },
-  //   ],
-  // },
   {
   {
     path: '*',
     path: '*',
     element: <NotFoundPage />,
     element: <NotFoundPage />,
     errorElement: <ErrorPage />
     errorElement: <ErrorPage />
-  },
+  }
 ]);
 ]);

+ 132 - 0
银龄平台移动端及平台端.md

@@ -0,0 +1,132 @@
+银龄智慧平台功能设计方案(小程序端 + 后台)
+一、小程序端(前端)功能设计
+(一)顶部区域:查询  搜索  移动端 
+(二)滚动band区域:混动轮播 
+(三)服务类型分类区域:银龄岗    银龄库   银龄智库    老年大学  时间银行   政策资讯    左右滑动   点击每个按钮,点击每个按钮进入到对应详情页面。
+1.银龄岗: 展示企业招聘岗位、企业简介、岗位需求标签;
+2.银龄库:展示个人核心信息(头像、认证状态、积分)、求职需求、专业技能、个人履历。
+3.银龄智库: 按照类型知识库,支持知识上传,审批、分类标签;支持按照分类、人员、时间、热度、下载量查询。
+4.时间银行:时间银行介绍  滚动案例(积累人员,累计积分,时间,日期,支持点赞   点评);介绍:基于 “互助循环、积分兑换” 的核心逻辑,时间银行作为银龄智慧平台的核心模块,旨在通过数字化手段记录老年群体的服务付出与需求兑换,构建联动的互助养老生态。
+)
+5. 老年大学:每个学校包含学校简介,师资力量,课程介绍。支持按照课程 学校名称 师资力量 课程查询。
+6.政策资讯:咨询展示,咨询详情,显示阅读量。
+(四)推荐服务:默认 银龄库 人员排列,支持智能推荐模式,按照距离排序  时间排序,积分排序
+如果是求职人员,推荐匹配岗位,如果没有匹配的,默认按照时间顺序排列。
+如果是企业,推荐匹配人员,如果没有匹配的,默认按照时间顺序排列。
+(五)移动端底部:包含  首页   银龄岗   发布   银龄库  个人中心;
+1.个人中心
+
+聚焦 “个人信息管理 + 权益服务”,包含四大核心功能:
+
+(1)基础信息
+◦内容:个人基本资料(姓名、年龄、联系方式等)、健康状态、隐私设置、认证。
+
+(2)我的技能
+◦内容:技能标签(如 “教育辅导”“医疗护理”“农业技术” 等)、工作经历可视化展示、技能认证证书(如乐龄工坊培训结业证)。
+
+◦关联:技能标签与岗位匹配算法联动,提升智能推荐精准度。
+(3)我的积分
+◦内容:时间银行 积分余额、积分流水(获取 / 消费记录)、积分等级(如 “白银 / 黄金会员”),时间银行记录:以时间为轴线做成类似回忆录的 支持上传照片串联起来,默认是以服务时间和时间。
+
+◦场景:积分可兑换商品(本地超市 / 药店合作,文档 2)、服务(如康复理疗)、公益捐赠(纳入 “公益积分池”,文档 2),后期跟主程序打通进行兑换,保留保留接口。
+
+前端小程序 通过注册的方式获取信息,注册信息包括 昵称 手机号码  密码  角色(企业/政府/社区/平台机构、银龄人员)
+
+二# 《PC 后台平台功能设计:全面支撑移动端功能落地》
+
+基于移动端小程序功能设计,PC 后台平台需聚焦 “数据管理、内容审核、规则配置、用户运营” 四大核心目标,支撑移动端全场景功能落地。以下是 PC 后台平台功能设计方案:
+
+### **一、平台架构总览**
+PC 后台采用 “模块化 + 权限隔离” 设计,包含 **7 大核心模块**:系统管理、用户管理、内容管理、业务管理、积分管理、数据中心、接口管理。各模块与移动端功能一一对应,确保数据联动与流程闭环。
+
+### **二、核心模块功能设计**
+#### **模块一:系统管理(基础支撑)**
+聚焦 “平台配置 + 权限控制”,保障系统稳定运行。
+
+1.  **基础配置**
+*   平台信息:设置平台名称、logo、版权信息、移动端底部导航文案 / 图标自定义(支持替换 “首页 / 银龄岗 / 发布 / 银龄库 / 个人中心” 图标)。
+*   全局参数:配置搜索默认筛选条件(如移动端顶部搜索默认展示 “岗位 + 人员” 结果)、轮播图刷新频率、推荐算法基础阈值(如岗位匹配度≥60% 触发推荐)。
+1.  **权限管理**
+*   角色配置:预设 “超级管理员(全权限)、审核员(内容审核)、运营员(数据监控)、商户专员(积分兑换)” 角色,支持自定义角色权限(如审核员仅能操作内容审核,无数据修改权限)。
+*   账号管理:创建 / 禁用后台账号,关联角色,记录操作日志(如 “谁在何时审核了某岗位”)。
+#### **模块二:用户管理(用户全生命周期管控)**
+对应移动端 “个人中心”“银龄库”“银龄岗(企业端)”,管理个人用户与企业用户数据。
+1.  **个人用户管理**
+*   用户列表:展示所有个人用户基础信息(姓名、年龄、认证状态、注册时间等),支持按 “认证状态(未认证 / 已认证)、技能标签、积分等级” 筛选,可查看用户详情(跳转至 “用户档案页”)。
+*   用户档案页:
+    *   基础信息:查看 / 编辑用户基本资料(姓名、联系方式等)、健康状态(支持手动录入体检报告)、隐私设置(强制开启 / 关闭某隐私项,如 “隐藏年龄”)、认证记录(查看身份证 / 技能证书审核材料,支持驳回 / 通过认证)。
+    *   技能与履历:查看用户技能标签(如 “教育辅导”)、工作经历(可视化时间轴)、技能证书(支持下载 / 驳回证书图片),可手动添加技能标签(用于特殊场景匹配)。
+1.  **企业用户管理**
+*   企业列表:展示企业名称、规模、认证状态、发布岗位数,支持按 “行业、地区” 筛选。
+*   企业详情:查看企业简介、营业执照等认证材料(支持审核认证)、发布的岗位记录,可禁用企业账号(同步下架其所有岗位)。
+#### **模块三:内容管理(前端展示内容管控)**
+对应移动端 “滚动 band 区域”“服务类型分类”“政策资讯”,管理前端所有展示内容。
+1.  **轮播图管理**
+*   支持上传 / 删除 / 编辑混动轮播图(设置跳转链接,如点击轮播图跳转至 “银龄岗首页”),可排序(拖拽调整展示顺序)、设置生效时间(定时上线 / 下线)。
+1.  **服务分类管理**
+*   分类配置:管理 “银龄岗 / 银龄库 / 银龄智库 / 时间银行 / 老年大学 / 政策资讯”6 大分类的名称、图标、详情页模板(支持自定义详情页头部文案)。
+*   分类排序:配置移动端左右滑动的展示顺序。
+1.  **政策资讯管理**
+*   资讯发布:支持富文本编辑(上传图片、视频),设置资讯分类(如 “养老政策 / 就业政策”)、发布时间,关联阅读量统计(实时展示移动端阅读数据)。
+*   资讯审核:用户投稿资讯需经后台审核(支持 “通过 / 驳回 + 驳回理由”),审核通过后同步至移动端。
+1.  **老年大学管理**
+*   学校管理:录入 / 编辑学校信息(简介、地址、联系方式),上传师资力量照片 / 简介,关联课程列表。
+*   课程管理:创建课程(名称、时长、内容简介、授课师资),设置课程标签(如 “书法 / 健康养生”),支持按 “课程 / 学校名称 / 师资” 配置搜索筛选规则。
+#### **模块四:业务管理(核心场景流程管控)**
+对应移动端 “银龄岗”“银龄库”“银龄智库”“推荐服务”,管理核心业务流程。
+1.  **银龄岗管理(企业招聘)**
+*   企业岗位管理:查看企业发布的岗位列表(岗位名称、需求标签、发布时间),支持审核(审核岗位合法性,如是否涉及虚假信息)、编辑(修改岗位需求标签)、下架(违规岗位强制下架)。
+*   岗位标签管理:配置标准化岗位需求标签(如 “全职 / 兼职”“薪资范围”“技能要求”),企业发布岗位时仅能选择预设标签(提升匹配精准度)。
+1.  **银龄库管理(个人求职)**
+*   求职信息管理:查看个人用户发布的求职需求(期望岗位、薪资、可工作时间),关联个人核心信息(头像、认证状态、积分)、专业技能、履历,支持按 “技能标签 / 求职状态” 筛选。
+*   匹配记录查看:展示岗位与求职人员的自动匹配记录(匹配度、推荐时间),支持手动干预匹配结果(如优先推荐某人员)。
+1.  **银龄智库管理**
+*   知识库分类:创建知识库类型(如 “医疗健康 / 农业技术”),配置分类标签(支持多级分类)。
+*   知识内容管理:审核用户上传的知识(文档、视频),标记 “通过 / 驳回”,支持按 “分类 / 人员 / 时间 / 热度 / 下载量” 配置查询筛选逻辑(如热度 = 下载量 + 点赞数),查看知识下载量、分享量数据。
+
+1.  **推荐服务配置**
+*   推荐规则设置:配置智能推荐算法参数(如技能标签匹配权重 60%、距离权重 30%、积分权重 10%),区分 “求职人员(推荐岗位)”“企业(推荐人员)” 的推荐逻辑。
+*   排序规则配置:设置 “距离排序(基于用户定位)、时间排序(最新发布优先)、积分排序(高积分优先)” 的计算逻辑,支持手动切换默认排序方式。
+#### **模块五:时间银行与积分管理**
+对应移动端 “时间银行”“个人中心 - 我的积分”,管理积分体系与时间银行记录。
+1.  **时间银行管理**
+*   案例管理:审核用户提交的滚动案例(积累人员、积分、时间、日期),支持 “通过 / 驳回”,配置案例在移动端的展示排序(如按时间倒序),查看案例的点赞、点评数据。
+*   时间轴记录管理:查看用户上传的时间银行回忆录(服务时间、照片、文字描述),支持审核照片(违规照片驳回并删除),按时间轴导出用户服务记录。
+1.  **积分管理**
+*   积分规则配置:设置积分获取方式(如 “服务 1 小时 = 10 积分”“发布知识 = 5 积分”)、消费场景(如 “兑换商品 = 扣 20 积分”“捐赠 = 扣 10 积分”),支持动态调整规则(调整后同步至移动端)。
+*   积分流水管理:查看全量用户的积分流水(获取 / 消费记录),支持按 “用户 / 时间 / 类型” 筛选,导出流水报表。
+*   积分等级设置:配置等级体系(如 “白银会员:0-500 积分;黄金会员:501-2000 积分”),设置等级权益(如黄金会员优先匹配岗位)。
+*   商户与兑换管理:录入合作商户信息(超市 / 药店名称、地址、可兑换商品 / 服务),关联兑换积分值,查看商户兑换记录(某商户某商品被兑换次数)。
+*   公益积分池管理:查看用户捐赠的积分总额,记录积分池用途(如 “用于购买养老物资”),支持导出捐赠明细。
+#### **模块六:个人中心关联管理**
+对应移动端 “个人中心” 四大核心功能,管理个人信息与权益服务数据。
+1.  **基础信息管理**
+*   个人资料审核:查看用户提交的基本资料(姓名、年龄、联系方式)、健康状态(如体检报告),审核认证材料(身份证、健康证明),支持修改隐私设置(如强制开启 “仅好友可见联系方式”)。
+1.  **技能与履历管理**
+*   技能标签管理:维护标准化技能标签库(如 “教育辅导”“医疗护理”),支持添加新标签(关联岗位匹配算法,新增标签后自动同步至匹配逻辑)。
+*   技能证书管理:审核用户上传的技能认证证书(如培训结业证),标记 “已认证” 证书(认证后在移动端高亮展示)。
+1.  **时间银行记录审核**
+*   审核用户上传的服务照片(确保真实有效),查看时间轴回忆录的串联逻辑(按服务时间自动排序),支持手动调整时间轴顺序。
+
+#### **模块七:数据中心(运营决策支撑)**
+
+对应移动端全场景数据统计,提供可视化分析工具。
+1.  **核心数据看板**
+*   用户数据:总用户数、日活 / 月活用户、个人 / 企业用户占比、认证率。
+*   业务数据:岗位发布数、求职需求数、岗位匹配成功数、银龄智库知识总量、时间银行积分总余额。
+*   流量数据:各服务分类的访问量(如银龄岗访问占比)、政策资讯阅读量 TOP10。
+1.  **明细报表**
+
+*   导出用户增长报表、积分流水报表、岗位匹配报表等,支持按 “日 / 周 / 月” 筛选。
+#### **模块八:接口管理(扩展性支撑)**
+
+预留与外部系统的对接接口,支持后期功能扩展:
+*   积分兑换接口:对接本地超市 / 药店系统(同步商品库存、兑换记录)、主程序系统(支持积分跨平台兑换)。
+*   公益积分池接口:对接公益平台(同步捐赠记录、积分池使用明细)。
+### **三、核心流程示例(以 “岗位发布 - 匹配 - 积分获取” 为例)**
+1.  企业在移动端发布岗位→PC 后台审核(业务管理 - 银龄岗)→审核通过后上线;
+2.  个人用户在移动端完善技能标签→后台技能标签与岗位标签自动匹配(业务管理 - 匹配记录)→移动端推荐服务展示匹配结果;
+3.  个人用户通过岗位服务获得积分→PC 后台自动记录积分流水(积分管理 - 流水)→同步至移动端 “我的积分”。
+通过以上设计,PC 后台可全面支撑移动端功能落地,同时通过数据管理与规则配置,提升平台运营效率与用户体验。
+> (注:文档部分内容可能由 AI 生成)
+>

+ 279 - 0
银龄平台移动端重构技术方案.md

@@ -0,0 +1,279 @@
+# 银龄平台移动端重构技术方案
+
+## 项目概述
+将现有的通用移动端模板重构为银龄智慧平台专用移动端,完全匹配方案框架需求。
+
+## 重构内容清单
+
+### 1. 路由结构重构
+```typescript
+// 新的路由配置 src/client/mobile/routes.tsx
+银龄平台路由结构:
+├── / (首页) - 综合入口页面
+├── /silver-jobs (银龄岗) - 企业招聘
+├── /silver-talents (银龄库) - 人才展示
+├── /silver-wisdom (银龄智库) - 知识库
+├── /elderly-university (老年大学) - 教育机构
+├── /time-bank (时间银行) - 积分系统
+├── /policy-news (政策资讯) - 政策公告
+├── /publish (发布) - 内容发布中心
+├── /profile (个人中心) - 用户管理
+├── /login - 登录页面
+├── /register - 注册页面
+└── /auth/* - 认证相关路由
+```
+
+### 2. 底部导航重构
+```typescript
+// 底部标签栏配置 src/client/mobile/components/BottomTabBar.tsx
+银龄平台底部导航:
+[
+  { id: 'home', name: '首页', icon: '🏠', path: '/' },
+  { id: 'silver-jobs', name: '银龄岗', icon: '💼', path: '/silver-jobs' },
+  { id: 'publish', name: '发布', icon: '➕', path: '/publish' },
+  { id: 'silver-talents', name: '银龄库', icon: '👥', path: '/silver-talents' },
+  { id: 'profile', name: '个人中心', icon: '👤', path: '/profile' }
+]
+```
+
+### 3. 核心页面创建
+
+#### 3.1 首页 (HomePage)
+**功能模块**:
+- 顶部区域:查询搜索功能
+- 滚动轮播图:展示重要信息
+- 服务类型分类:银龄岗、银龄库、银龄智库、老年大学、时间银行、政策资讯
+- 推荐服务区域:智能推荐人才/岗位
+- 快捷入口导航
+
+#### 3.2 银龄岗页面 (SilverJobsPage)
+**功能特性**:
+- 企业招聘岗位列表
+- 企业简介展示
+- 岗位需求标签筛选
+- 按距离、时间、薪资排序
+- 岗位详情页
+- 企业认证标识
+
+#### 3.3 银龄库页面 (SilverTalentsPage)
+**功能特性**:
+- 个人核心信息卡片(头像、认证状态、积分)
+- 求职需求展示
+- 专业技能标签
+- 个人履历时间轴
+- 人才搜索筛选
+- 认证标识系统
+
+#### 3.4 银龄智库页面 (SilverWisdomPage)
+**功能特性**:
+- 知识库分类浏览
+- 支持知识上传入口
+- 分类标签系统
+- 多维度查询(分类、人员、时间、热度、下载量)
+- 知识详情页
+- 下载/收藏功能
+
+#### 3.5 老年大学页面 (ElderlyUniversityPage)
+**功能特性**:
+- 学校列表展示
+- 学校简介详情
+- 师资力量介绍
+- 课程列表展示
+- 课程详情页
+- 搜索功能(按课程、学校、师资)
+
+#### 3.6 时间银行页面 (TimeBankPage)
+**功能特性**:
+- 时间银行介绍页面
+- 滚动案例展示
+- 积分系统展示
+- 服务记录时间轴
+- 积分兑换入口
+- 点赞点评功能
+
+#### 3.7 政策资讯页面 (PolicyNewsPage)
+**功能特性**:
+- 政策资讯列表
+- 资讯详情页面
+- 阅读量统计
+- 分类浏览
+- 分享功能
+
+#### 3.8 发布页面 (PublishPage)
+**功能特性**:
+- 多类型发布入口
+- 岗位发布(企业)
+- 求职发布(个人)
+- 知识分享发布
+- 服务记录发布
+- 资讯投稿
+
+#### 3.9 个人中心页面 (ProfilePage)
+**四大核心功能**:
+1. **基础信息管理**
+   - 个人资料编辑
+   - 健康状态记录
+   - 隐私设置
+   - 认证状态管理
+
+2. **我的技能**
+   - 技能标签管理
+   - 工作经历展示
+   - 技能证书上传
+   - 认证证书展示
+
+3. **我的积分**
+   - 积分余额展示
+   - 积分流水记录
+   - 积分等级展示
+   - 时间银行记录时间轴
+
+4. **权益服务**
+   - 积分兑换
+   - 服务预约
+   - 公益捐赠
+
+### 4. 用户认证系统增强
+```typescript
+// 用户角色系统
+用户角色定义:
+- 银龄人员 (elderly) - 求职个人
+- 企业用户 (enterprise) - 招聘企业
+- 政府机构 (government) - 监管部门
+- 社区组织 (community) - 社区服务
+- 平台机构 (platform) - 平台运营
+
+注册信息扩展:
+- 昵称
+- 手机号码
+- 密码
+- 角色选择
+- 认证材料上传
+```
+
+### 5. 智能推荐系统
+```typescript
+推荐算法配置:
+- 求职人员:技能标签匹配岗位
+- 企业用户:岗位要求匹配人才
+- 排序规则:距离、时间、积分权重
+- 默认排序:时间倒序
+```
+
+### 6. 技术实现规范
+
+#### 6.1 响应式设计
+- 移动端优先设计
+- 适配各种屏幕尺寸
+- 触摸友好的交互设计
+- 大字体适合银龄群体
+
+#### 6.2 性能优化
+- 图片懒加载
+- 分页加载
+- 缓存策略
+- 网络状态处理
+
+#### 6.3 无障碍设计
+- 高对比度配色
+- 大按钮设计
+- 语音辅助支持
+- 简化操作流程
+
+### 7. 数据结构设计
+
+#### 7.1 用户数据结构
+```typescript
+interface UserProfile {
+  id: number;
+  username: string;
+  role: 'elderly' | 'enterprise' | 'government' | 'community' | 'platform';
+  avatar?: string;
+  certification: 'pending' | 'approved' | 'rejected';
+  points: number;
+  level: 'bronze' | 'silver' | 'gold';
+  skills: string[];
+  experience: WorkExperience[];
+  privacy: PrivacySettings;
+}
+```
+
+#### 7.2 岗位数据结构
+```typescript
+interface JobPost {
+  id: number;
+  title: string;
+  company: CompanyInfo;
+  requirements: string[];
+  salaryRange: string;
+  location: Location;
+  tags: string[];
+  publishedAt: Date;
+  views: number;
+  applications: number;
+}
+```
+
+#### 7.3 人才数据结构
+```typescript
+interface TalentProfile {
+  id: number;
+  name: string;
+  age: number;
+  avatar?: string;
+  certification: boolean;
+  skills: string[];
+  experience: string[];
+  jobPreferences: JobPreferences;
+  points: number;
+  lastActive: Date;
+}
+```
+
+### 8. 开发实施步骤
+
+#### 阶段1:基础框架 (1-2天)
+1. 重构路由结构
+2. 创建页面组件骨架
+3. 重构底部导航栏
+
+#### 阶段2:核心功能 (3-4天)
+4. 实现首页功能
+5. 开发银龄岗页面
+6. 开发银龄库页面
+
+#### 阶段3:扩展功能 (2-3天)
+7. 开发银龄智库页面
+8. 开发老年大学页面
+9. 开发时间银行页面
+10. 开发政策资讯页面
+
+#### 阶段4:完善优化 (2-3天)
+11. 完善个人中心
+12. 实现发布功能
+13. 集成智能推荐
+14. 响应式优化
+
+### 9. 测试要点
+- 多角色用户测试
+- 不同屏幕适配测试
+- 网络状态测试
+- 性能测试
+- 无障碍测试
+
+### 10. 部署建议
+- 采用渐进式部署
+- 灰度发布策略
+- 用户反馈收集
+- 持续迭代优化
+
+## 实施请求
+
+由于架构师模式只能编辑Markdown文件,需要切换到代码模式来实施上述技术方案。建议采用以下步骤:
+
+1. 切换到代码模式
+2. 按阶段逐步重构
+3. 每阶段完成后进行测试
+4. 最终集成测试
+
+请确认是否切换到代码模式开始实施?