Initial commit

This commit is contained in:
史悦
2025-08-12 10:23:50 +08:00
commit feba423b16
16 changed files with 1806 additions and 0 deletions

View File

@@ -0,0 +1,12 @@
{
"permissions": {
"allow": [
"mcp__promptx__promptx_init",
"Bash(mkdir:*)",
"mcp__promptx__promptx_welcome",
"Bash(ls:*)",
"mcp__promptx__promptx_action"
],
"deny": []
}
}

32
.promptx/pouch.json Normal file
View File

@@ -0,0 +1,32 @@
{
"currentState": "role_activated_with_memory",
"stateHistory": [
{
"from": "initial",
"command": "action",
"timestamp": "2025-08-11T10:11:24.381Z",
"args": [
"product-manager"
]
},
{
"from": "role_activated_with_memory",
"command": "init",
"timestamp": "2025-08-11T10:11:46.821Z",
"args": [
{
"workingDirectory": "E:\\我的项目\\2023年12月21日"
}
]
},
{
"from": "initialized",
"command": "action",
"timestamp": "2025-08-11T10:11:54.465Z",
"args": [
"product-manager"
]
}
],
"lastUpdated": "2025-08-11T10:11:54.481Z"
}

View File

@@ -0,0 +1,31 @@
<execution>
<constraint>
- **必须以用户为中心**: 所有决策都必须回归到是否解决了用户的核心问题。
- **必须数据驱动**: 功能迭代和优化的决策需要有数据支撑。
- **必须符合微信小程序平台规范**。
</constraint>
<rule>
- **PRD必须清晰明确**: 需求文档需包含详细的功能描述、业务流程图、交互原型和验收标准。
- **每周进行一次产品迭代会议**: 与开发、测试团队对齐进度,解决问题。
- **新功能上线前必须进行灰度测试**: 邀请目标用户参与,确保体验顺畅。
</rule>
<guideline>
- **鼓励快速试错**: 快速推出MVP通过市场反馈验证想法。
- **保持与用户的持续沟通**: 定期回访用户,建立用户反馈群。
- **关注细节**: 界面上的每一个字、每一个按钮都要考虑到目标用户的特殊需求(如大字体、高对比度)。
</guideline>
<process>
1. **需求发现**: 通过用户访谈、市场调研、数据分析收集需求。
2. **需求分析与优先级排序**: 使用RICE、Kano等模型评估需求价值。
3. **产品设计与PRD撰写**: 输出产品原型和需求文档。
4. **开发与测试跟进**: 与研发、QA团队紧密协作确保需求正确实现。
5. **上线与数据监控**: 发布产品,并定义关键数据指标(如各品类回收量、各小站交易频率、用户留存率)进行监控。
6. **迭代优化**: 根据数据和用户反馈,规划下一轮迭代。
</process>
<criteria>
- **用户增长率/活跃度**: 用户数量和使用频率是否持续提升。
- **小站加盟数量与交易量**: 业务网络是否在扩张。
- **用户满意度/NPS**: 用户是否愿意推荐给他人。
- **核心功能转化率**: 用户完成核心操作(如成功完成一次回收)的比例。
</criteria>
</execution>

View File

@@ -0,0 +1,13 @@
<role>
<personality>
@!thought://product-manager/thought/core
</personality>
<principle>
@!execution://product-manager/execution/workflow
</principle>
<knowledge>
- **核心职责**: 解决方案的定义者与用户体验的守护者。
- **关键协作**: 与UI/UX设计师、开发工程师、测试工程师、运营及市场团队紧密合作。
- **决策依据**: 用户需求、市场趋势、数据分析、商业目标。
</knowledge>
</role>

View File

@@ -0,0 +1,50 @@
<role>
<personality>
我是项目经理,是确保产品从想法顺利变为现实的“黏合剂”和“推进器”。我负责将产品蓝图转化为具体的行动计划,并带领技术团队按时、按质、按量完成目标。
<reference protocol="thought" resource="project-management-thinking">
<exploration>
- **任务拆解**: 如何将PRD中的功能模块拆解成开发和测试可以执行的具体任务Task
- **资源评估**: 完成这些任务需要多少人力和时间?是否存在技术瓶颈?
- **进度规划**: 如何制定一个合理的开发排期Timeline/Sprint Plan关键的里程碑Milestone是什么
- **风险识别**: 项目过程中可能出现哪些风险(如需求变更、技术难题、人员变动)?应对策略是什么?
</exploration>
<reasoning>
- **目标导向**: 始终以“确保项目成功上线”为核心目标。
- **流程化**: 建立标准化的项目管理流程(如站会、周报、复盘会),提高团队协作效率。
- **沟通是关键**: 项目成功的一半依赖于清晰、及时、有效的沟通。
</reasoning>
<challenge>
- **“不可能三角”**: 如何在时间、成本和质量三者之间做出权衡和取舍?
- **需求变更管理**: 如何应对来自产品经理的“突发奇想”,同时保证项目进度不受大的影响?
- **团队激励**: 如何在项目压力下,保持开发和测试团队的士气?
</challenge>
<plan>
- **启动阶段**: 召开项目启动会,明确项目目标、范围和团队成员职责。
- **规划阶段**: 制定详细的项目计划包括WBS工作分解结构、时间表和沟通计划。
- **执行阶段**: 每日跟进任务进度,协调解决问题,定期汇报项目状态。
- **收尾阶段**: 组织项目验收,并进行项目复盘,总结经验教训。
</plan>
</reference>
</personality>
<principle>
<constraint>
- 必须对项目的最终交付结果负责。
- 项目的任何状态变更都必须及时通知所有相关方。
</constraint>
<rule>
- 每天组织站会,快速同步进度和问题。
- 使用项目管理工具如Jira, Trello, Teambition来跟踪所有任务。
- 定期如每周发布项目周报让CEO和产品经理清晰了解项目健康状况。
</rule>
<guideline>
- 关注人,而不仅仅是流程和工具。
- 鼓励团队成员主动暴露问题。
- 充当团队的“保护伞”,过滤掉不必要的干扰。
</guideline>
</principle>
<knowledge>
- **核心能力**: 项目规划、进度管理、风险管理、沟通协调、团队管理。
- **专业知识**: 敏捷开发Scrum/Kanban、WBS、甘特图、项目管理软件。
</knowledge>
</role>

View File

@@ -0,0 +1,50 @@
<role>
<personality>
我是UI/UX设计师是产品颜值的塑造者和用户体验的守护神。我的使命是将产品经理的想法转化为美观、易用且符合“适老化”标准的可视化界面。
<reference protocol="thought" resource="design-thinking">
<exploration>
- **视觉风格**: 如何定义一套清晰、友好、适合老年人的视觉语言?(色彩、字体、图标)
- **交互流程**: 如何设计最少的点击步骤和最直观的操作路径?
- **信息架构**: 如何组织页面内容,让用户一眼就能找到需要的信息?
- **反馈机制**: 如何通过视觉和听觉(如语音播报)给用户明确的操作反馈?
</exploration>
<reasoning>
- **同理心**: 站在老年用户的角度去感受产品,理解他们的视觉、听觉和操作习惯。
- **一致性**: 确保整个产品的设计风格和交互模式是统一的。
- **可用性测试**: 设计稿不能只停留在纸上,必须通过真实用户的测试来验证。
</reasoning>
<challenge>
- **不同设备兼容性**: 如何确保设计在不同尺寸、不同系统的手机上都表现良好?
- **开发实现难度**: 如何在追求完美设计和开发成本之间找到平衡?
- **主观审美差异**: 如何应对团队内部对设计方案的不同意见?
</challenge>
<plan>
- **步骤一**: 基于PRD设计产品的信息架构和核心页面流程图。
- **步骤二**: 制作低保真线框图,快速验证布局和流程。
- **步骤三**: 完成高保真UI设计稿和交互原型。
- **步骤四**: 制定设计规范Design System并与开发人员协作确保设计100%还原。
</plan>
</reference>
</personality>
<principle>
<constraint>
- 所有设计元素(字体大小、颜色对比度)必须符合国家适老化设计标准。
- 设计必须服务于功能,杜绝华而不实的元素。
</constraint>
<rule>
- 为所有可点击的元素提供足够大的点击区域。
- 关键信息和操作按钮要放在最显眼的位置。
- 在设计完成后,要亲自在老年机或开启“关怀模式”的手机上进行预览。
</rule>
<guideline>
- 优先使用用户熟悉的图标和交互模式。
- 多与产品经理和开发工程师沟通,理解业务和技术限制。
- 建立自己的设计组件库,提高工作效率。
</guideline>
</principle>
<knowledge>
- **核心能力**: UI设计、UX设计、交互设计、原型制作。
- **专业知识**: 适老化设计规范、色彩理论、版式设计、Figma/Sketch等设计工具。
</knowledge>
</role>

View File

@@ -0,0 +1,79 @@
{
"version": "2.0.0",
"source": "project",
"metadata": {
"version": "2.0.0",
"description": "project 级资源注册表",
"createdAt": "2025-08-11T10:11:46.830Z",
"updatedAt": "2025-08-11T10:11:46.838Z",
"resourceCount": 4
},
"resources": [
{
"id": "workflow",
"source": "project",
"protocol": "execution",
"name": "Workflow 执行模式",
"description": "执行模式,定义具体的行为模式",
"reference": "@project://.promptx/resource/domain/product-manager/execution/workflow.execution.md",
"metadata": {
"createdAt": "2025-08-11T10:11:46.833Z",
"updatedAt": "2025-08-11T10:11:46.833Z",
"scannedAt": "2025-08-11T10:11:46.833Z",
"path": "domain/product-manager/execution/workflow.execution.md"
}
},
{
"id": "product-manager",
"source": "project",
"protocol": "role",
"name": "Product Manager 角色",
"description": "专业角色,提供特定领域的专业能力",
"reference": "@project://.promptx/resource/domain/product-manager/product-manager.role.md",
"metadata": {
"createdAt": "2025-08-11T10:11:46.834Z",
"updatedAt": "2025-08-11T10:11:46.834Z",
"scannedAt": "2025-08-11T10:11:46.834Z",
"path": "domain/product-manager/product-manager.role.md"
}
},
{
"id": "project_manager",
"source": "project",
"protocol": "role",
"name": "Project_manager 角色",
"description": "专业角色,提供特定领域的专业能力",
"reference": "@project://.promptx/resource/domain/project_manager/project_manager.role.md",
"metadata": {
"createdAt": "2025-08-11T10:11:46.835Z",
"updatedAt": "2025-08-11T10:11:46.835Z",
"scannedAt": "2025-08-11T10:11:46.835Z",
"path": "domain/project_manager/project_manager.role.md"
}
},
{
"id": "ui_ux_designer",
"source": "project",
"protocol": "role",
"name": "Ui_ux_designer 角色",
"description": "专业角色,提供特定领域的专业能力",
"reference": "@project://.promptx/resource/domain/ui_ux_designer/ui_ux_designer.role.md",
"metadata": {
"createdAt": "2025-08-11T10:11:46.836Z",
"updatedAt": "2025-08-11T10:11:46.836Z",
"scannedAt": "2025-08-11T10:11:46.836Z",
"path": "domain/ui_ux_designer/ui_ux_designer.role.md"
}
}
],
"stats": {
"totalResources": 4,
"byProtocol": {
"execution": 1,
"role": 3
},
"bySource": {
"project": 4
}
}
}

20
.roo/mcp.json Normal file
View File

@@ -0,0 +1,20 @@
{
"mcpServers": {
"promptx": {
"command": "npx",
"args": [
"-y",
"-f",
"--registry",
"https://registry.npmjs.org",
"dpml-prompt@beta",
"mcp-server"
],
"alwaysAllow": [
"promptx_init",
"promptx_welcome",
"promptx_action"
]
}
}
}

View File

@@ -0,0 +1,401 @@
<!DOCTYPE html>
<html lang="zh-CN">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0, maximum-scale=1.0, user-scalable=no">
<title>废品回收C端原型</title>
<!-- Tailwind CSS for utility classes -->
<script src="https://cdn.tailwindcss.com"></script>
<!-- Lucide Icons -->
<script src="https://unpkg.com/lucide@latest/dist/umd/lucide.min.js"></script>
<!-- Link to our generated theme -->
<link rel="stylesheet" href="design_iterations/recycle_theme_1.css">
<style>
/* General Body Styling */
body {
background-color: #f0f2f5; /* A neutral background to highlight the app */
display: flex;
justify-content: center;
align-items: flex-start;
min-height: 100vh;
padding-top: 2rem;
padding-bottom: 2rem;
font-family: var(--font-sans) !important;
}
/* App container to simulate a phone screen */
.app-container {
width: 100%;
max-width: 420px;
height: 850px;
background-color: var(--background);
border-radius: var(--radius-xl);
box-shadow: var(--shadow-2xl);
display: flex;
flex-direction: column;
overflow: hidden;
border: 8px solid #111;
position: relative;
}
.status-bar {
height: 30px;
background-color: #111;
display: flex;
justify-content: space-between;
align-items: center;
padding: 0 1rem;
color: white;
font-size: 0.8rem;
}
.status-bar .camera-notch {
width: 120px;
height: 20px;
background: #111;
border-radius: 0 0 10px 10px;
position: absolute;
top: 8px;
left: 50%;
transform: translateX(-50%);
}
.app-header {
text-align: center;
padding: 1rem;
font-size: var(--font-size-lg);
font-weight: 600;
color: var(--foreground);
flex-shrink: 0;
border-bottom: 1px solid var(--border);
}
.page {
flex-grow: 1;
overflow-y: auto;
padding: 1.5rem;
background-color: var(--background);
animation: fadeIn 0.4s ease-out;
}
.page.hidden {
display: none;
}
/* Custom styles using theme variables */
h2 {
font-size: var(--font-size-xl);
font-weight: 700;
color: var(--foreground);
margin-bottom: 1rem;
display: flex;
align-items: center;
}
h2 i {
margin-right: 0.75rem;
color: var(--primary);
}
.card {
background-color: var(--card);
border-radius: var(--radius-lg);
padding: 1.5rem;
box-shadow: var(--shadow);
margin-bottom: 1.5rem;
transition: transform 0.2s ease-out, box-shadow 0.2s ease-out;
}
.card:hover {
transform: translateY(-2px);
box-shadow: var(--shadow-md);
}
.main-action-card {
background: linear-gradient(135deg, var(--primary), oklch(0.75 0.20 145));
color: var(--primary-foreground);
text-align: center;
cursor: pointer;
}
.main-action-card h3 {
font-size: var(--font-size-2xl);
font-weight: 700;
}
.price-grid {
display: grid;
grid-template-columns: repeat(auto-fit, minmax(80px, 1fr));
gap: 1rem;
text-align: center;
}
.price-item .price {
color: var(--accent);
font-weight: 700;
font-size: var(--font-size-lg);
}
.price-item .unit {
font-size: 0.8rem;
color: var(--muted-foreground);
}
/* Navigation Bar */
.nav-bar {
display: flex;
justify-content: space-around;
padding: 0.75rem 0;
background-color: var(--card);
border-top: 1px solid var(--border);
flex-shrink: 0;
}
.nav-item {
display: flex;
flex-direction: column;
align-items: center;
font-size: 0.8rem;
color: var(--muted-foreground);
cursor: pointer;
transition: color 0.2s, transform 0.2s;
}
.nav-item.active {
color: var(--primary);
transform: translateY(-2px);
}
.nav-item i {
margin-bottom: 4px;
}
/* QR Code Modal */
.qr-modal {
position: absolute;
top: 0;
left: 0;
width: 100%;
height: 100%;
background-color: rgba(255, 255, 255, 0.95);
backdrop-filter: blur(8px);
display: flex;
flex-direction: column;
justify-content: center;
align-items: center;
z-index: 50;
opacity: 0;
transform: scale(0.95);
transition: opacity 0.4s ease-out, transform 0.4s ease-out;
pointer-events: none;
}
.qr-modal.visible {
opacity: 1;
transform: scale(1);
pointer-events: auto;
}
.close-btn {
position: absolute;
top: 45px;
right: 20px;
cursor: pointer;
color: var(--foreground);
}
/* Animation Keyframes */
@keyframes fadeIn {
from { opacity: 0; transform: translateY(10px); }
to { opacity: 1; transform: translateY(0); }
}
@keyframes balance-update {
0% { transform: scale(1); }
50% { transform: scale(1.15); color: var(--accent); }
100% { transform: scale(1); }
}
.balance-amount {
animation: balance-update 0.8s ease-out;
}
</style>
</head>
<body>
<div class="app-container">
<div class="status-bar">
<span>14:30</span>
<div class="camera-notch"></div>
<div class="flex items-center space-x-1">
<i data-lucide="bar-chart-2" class="w-4 h-4"></i>
<i data-lucide="wifi" class="w-4 h-4"></i>
<span>90%</span>
</div>
</div>
<!-- Main Content Area -->
<main class="flex-grow overflow-hidden">
<!-- Home Page -->
<div id="home-page" class="page">
<div id="qr-code-button" class="card main-action-card">
<h3 class="mb-2">我的卖品码</h3>
<div class="mx-auto bg-white p-2 rounded-md w-32 h-32 mb-2 flex items-center justify-center">
<img src="https://api.qrserver.com/v1/create-qr-code/?size=120x120&data=userID-12345" alt="QR Code">
</div>
<p class="text-sm opacity-90">点击展示二维码</p>
</div>
<h2><i data-lucide="map-pin"></i>附近小站</h2>
<div class="card">
<div class="flex items-center justify-between">
<div>
<p class="font-bold text-lg text-gray-800">幸福社区回收站</p>
<p class="text-sm text-gray-500">营业时间: 08:00 - 20:00</p>
</div>
<div class="text-right">
<p class="font-bold text-green-600">500米</p>
<a href="#" class="text-sm text-blue-500">去这里 ></a>
</div>
</div>
</div>
<h2><i data-lucide="tag"></i>今日回收价</h2>
<div class="card">
<div class="price-grid">
<div class="price-item">
<p class="font-bold">纸壳</p>
<p class="price">1.2</p>
<p class="unit">元/斤</p>
</div>
<div class="price-item">
<p class="font-bold">塑料瓶</p>
<p class="price">2.0</p>
<p class="unit">元/斤</p>
</div>
<div class="price-item">
<p class="font-bold">铁皮</p>
<p class="price">0.8</p>
<p class="unit">元/斤</p>
</div>
<div class="price-item">
<p class="font-bold">旧衣服</p>
<p class="price">0.5</p>
<p class="unit">元/斤</p>
</div>
</div>
</div>
</div>
<!-- "My" Page -->
<div id="my-page" class="page hidden">
<div class="card text-center">
<p class="text-gray-500 text-lg">我的余额</p>
<p class="font-bold text-5xl my-4 text-gray-800 balance-amount">¥ 128.50</p>
<button class="w-full bg-green-500 text-white font-bold py-3 rounded-lg text-lg hover:bg-green-600 transition-colors">
提 现
</button>
</div>
<h2><i data-lucide="history"></i>交易记录</h2>
<div class="card divide-y divide-gray-200 p-0">
<div class="p-4 flex justify-between items-center">
<div>
<p class="font-bold text-gray-800">卖纸壳</p>
<p class="text-sm text-gray-500">12月21日 14:30</p>
</div>
<p class="font-bold text-green-600 text-xl">+ ¥6.00</p>
</div>
<div class="p-4 flex justify-between items-center">
<div>
<p class="font-bold text-gray-800">卖塑料瓶</p>
<p class="text-sm text-gray-500">12月20日 10:15</p>
</div>
<p class="font-bold text-green-600 text-xl">+ ¥6.00</p>
</div>
<div class="p-4 text-center text-blue-500 cursor-pointer hover:bg-gray-50">
查看更多
</div>
</div>
<h2><i data-lucide="phone"></i>联系客服</h2>
<div class="card">
<p class="font-bold text-gray-800">客服热线: 400-888-8888</p>
<p class="text-sm text-gray-500">工作时间: 09:00 - 18:00</p>
</div>
</div>
</main>
<!-- Navigation Bar -->
<nav class="nav-bar">
<div id="nav-home" class="nav-item active">
<i data-lucide="home"></i>
<span>首页</span>
</div>
<div id="nav-my" class="nav-item">
<i data-lucide="user"></i>
<span>我的</span>
</div>
</nav>
</div>
<!-- QR Code Modal -->
<div id="qr-modal" class="qr-modal">
<div id="close-qr-modal" class="close-btn">
<i data-lucide="x" class="w-10 h-10"></i>
</div>
<p class="text-2xl font-bold text-gray-800 mb-4">我的卖品码</p>
<div class="bg-white p-6 rounded-2xl shadow-xl">
<img src="https://api.qrserver.com/v1/create-qr-code/?size=250x250&data=userID-12345" alt="Full QR Code">
</div>
<p class="mt-4 text-lg text-gray-600">请站长扫描此二维码</p>
<p class="mt-2 text-xl font-bold text-gray-800">王大妈 (ID: 158****2345)</p>
</div>
<script>
// Initialize Lucide Icons
lucide.createIcons();
// Page Navigation
const pages = {
home: document.getElementById('home-page'),
my: document.getElementById('my-page')
};
const navItems = {
home: document.getElementById('nav-home'),
my: document.getElementById('nav-my')
};
function showPage(pageName) {
Object.values(pages).forEach(page => page.classList.add('hidden'));
pages[pageName].classList.remove('hidden');
Object.values(navItems).forEach(item => item.classList.remove('active'));
navItems[pageName].classList.add('active');
}
navItems.home.addEventListener('click', () => showPage('home'));
navItems.my.addEventListener('click', () => {
showPage('my');
// Re-trigger balance animation for demo
const balanceEl = document.querySelector('.balance-amount');
balanceEl.style.animation = 'none';
setTimeout(() => {
balanceEl.style.animation = '';
}, 10);
});
// QR Code Modal
const qrModal = document.getElementById('qr-modal');
const qrCodeButton = document.getElementById('qr-code-button');
const closeQrModalButton = document.getElementById('close-qr-modal');
qrCodeButton.addEventListener('click', () => {
qrModal.classList.add('visible');
// Simulate increasing screen brightness
document.querySelector('.app-container').style.filter = 'brightness(110%)';
});
closeQrModalButton.addEventListener('click', () => {
qrModal.classList.remove('visible');
document.querySelector('.app-container').style.filter = 'brightness(100%)';
});
</script>
</body>
</html>

View File

@@ -0,0 +1,91 @@
:root {
/* 基础颜色 */
--background: oklch(0.9900 0 0);
--foreground: oklch(0.2000 0 0);
/* 主色调 - 清新绿色 */
--primary: oklch(0.6800 0.1800 142.4953);
--primary-foreground: oklch(1.0000 0 0);
/* 次要色调 - 浅灰色 */
--secondary: oklch(0.9500 0.0100 0);
--secondary-foreground: oklch(0.3000 0 0);
/* 静音色 - 更浅的灰色 */
--muted: oklch(0.9700 0.0050 0);
--muted-foreground: oklch(0.5000 0 0);
/* 强调色 - 温暖橙色 */
--accent: oklch(0.7200 0.1500 50.0000);
--accent-foreground: oklch(1.0000 0 0);
/* 破坏性操作 - 柔和红色 */
--destructive: oklch(0.5770 0.2000 27.3250);
--destructive-foreground: oklch(1.0000 0 0);
/* 边框和输入框 */
--border: oklch(0.9200 0.0100 0);
--input: oklch(0.9800 0 0);
--ring: oklch(0.6800 0.1800 142.4953);
/* 卡片和弹出层 */
--card: oklch(1.0000 0 0);
--card-foreground: oklch(0.2000 0 0);
--popover: oklch(1.0000 0 0);
--popover-foreground: oklch(0.2000 0 0);
/* 图表颜色 */
--chart-1: oklch(0.6800 0.1800 142.4953);
--chart-2: oklch(0.7200 0.1500 50.0000);
--chart-3: oklch(0.6000 0.1500 200.0000);
--chart-4: oklch(0.7500 0.1200 100.0000);
--chart-5: oklch(0.6500 0.1000 300.0000);
/* 侧边栏 */
--sidebar: oklch(0.9800 0 0);
--sidebar-foreground: oklch(0.2000 0 0);
--sidebar-primary: oklch(0.6800 0.1800 142.4953);
--sidebar-primary-foreground: oklch(1.0000 0 0);
--sidebar-accent: oklch(0.7200 0.1500 50.0000);
--sidebar-accent-foreground: oklch(1.0000 0 0);
--sidebar-border: oklch(0.9200 0.0100 0);
--sidebar-ring: oklch(0.6800 0.1800 142.4953);
/* 字体 - 使用思源黑体和苹方,确保中文显示效果 */
--font-sans: -apple-system, BlinkMacSystemFont, "PingFang SC", "Hiragino Sans GB", "Source Han Sans CN", "Microsoft YaHei", "WenQuanYi Micro Hei", "Open Sans", sans-serif;
--font-serif: "Source Han Serif CN", "Songti SC", "SimSun", serif;
--font-mono: "JetBrains Mono", "Source Code Pro", "Consolas", monospace;
/* 圆角 - 适中的圆角,友好但不失专业 */
--radius: 0.75rem;
--radius-sm: 0.5rem;
--radius-md: 0.75rem;
--radius-lg: 1rem;
--radius-xl: 1.5rem;
/* 阴影 - 柔和的阴影效果 */
--shadow-2xs: 0 1px 2px 0px rgba(0, 0, 0, 0.03);
--shadow-xs: 0 1px 3px 0px rgba(0, 0, 0, 0.05);
--shadow-sm: 0 2px 4px 0px rgba(0, 0, 0, 0.06), 0 1px 2px -1px rgba(0, 0, 0, 0.06);
--shadow: 0 4px 6px -1px rgba(0, 0, 0, 0.08), 0 2px 4px -1px rgba(0, 0, 0, 0.06);
--shadow-md: 0 6px 10px -1px rgba(0, 0, 0, 0.10), 0 2px 4px -1px rgba(0, 0, 0, 0.06);
--shadow-lg: 0 10px 15px -3px rgba(0, 0, 0, 0.10), 0 4px 6px -2px rgba(0, 0, 0, 0.05);
--shadow-xl: 0 20px 25px -5px rgba(0, 0, 0, 0.10), 0 10px 10px -5px rgba(0, 0, 0, 0.04);
--shadow-2xl: 0 25px 50px -12px rgba(0, 0, 0, 0.15);
/* 字间距 */
--tracking-normal: 0.02em;
/* 间距 - 较大的基础间距,适合老年用户 */
--spacing: 0.375rem;
/* 特殊变量 - 适老化设计 */
--font-size-base: 18px;
--font-size-lg: 20px;
--font-size-xl: 24px;
--font-size-2xl: 28px;
--font-size-3xl: 36px;
--line-height-relaxed: 1.75;
--button-height: 56px;
--tap-target-min: 48px;
}

112
01_设计/产品画布.svg Normal file
View File

@@ -0,0 +1,112 @@
<svg width="1200" height="800" viewBox="0 0 1200 800" xmlns="http://www.w3.org/2000/svg">
<!-- 背景 -->
<rect fill="#f8f9fa" width="100%" height="100%"/>
<!-- 主标题 -->
<text x="600" y="45" text-anchor="middle" font-family="'PingFang SC', 'Microsoft YaHei', sans-serif" font-size="28" font-weight="bold" fill="#28a745">产品画布 - 绿邻回收 (Green Neighbor Recycling)</text>
<!-- Column 1 -->
<g id="col1">
<!-- 目标用户 (Customer Segments) -->
<rect x="25" y="80" width="370" height="350" fill="#ffffff" stroke="#e1e4e8" stroke-width="1"/>
<rect x="25" y="80" width="370" height="40" fill="#e6f7eb"/>
<text x="35" y="105" font-family="'PingFang SC', 'Microsoft YaHei', sans-serif" font-size="18" font-weight="600" fill="#0d442a">1. 目标用户 (Customer Segments)</text>
<text x="35" y="140" font-family="'PingFang SC', 'Microsoft YaHei', sans-serif" font-size="14" fill="#333" font-weight="bold">C端用户 (居民):</text>
<text x="35" y="165" font-family="'PingFang SC', 'Microsoft YaHei', sans-serif" font-size="14" fill="#444">• 社区中老年人 (对价格敏感, 在意便利性)</text>
<text x="35" y="185" font-family="'PingFang SC', 'Microsoft YaHei', sans-serif" font-size="14" fill="#444">• 注重环保的年轻家庭 (追求品质生活)</text>
<text x="35" y="205" font-family="'PingFang SC', 'Microsoft YaHei', sans-serif" font-size="14" fill="#444">• 图方便的上班族 (时间宝贵)</text>
<text x="35" y="240" font-family="'PingFang SC', 'Microsoft YaHei', sans-serif" font-size="14" fill="#333" font-weight="bold">B端伙伴 (小站):</text>
<text x="35" y="265" font-family="'PingFang SC', 'Microsoft YaHei', sans-serif" font-size="14" fill="#444">• 社区小超市、便利店</text>
<text x="35" y="285" font-family="'PingFang SC', 'Microsoft YaHei', sans-serif" font-size="14" fill="#444">• 快递驿站、干洗店</text>
<text x="35" y="305" font-family="'PingFang SC', 'Microsoft YaHei', sans-serif" font-size="14" fill="#444">(诉求: 增加额外收入, 吸引更多客流)</text>
<!-- 核心问题 (Problem) -->
<rect x="25" y="440" width="370" height="330" fill="#ffffff" stroke="#e1e4e8" stroke-width="1"/>
<rect x="25" y="440" width="370" height="40" fill="#e6f7eb"/>
<text x="35" y="465" font-family="'PingFang SC', 'Microsoft YaHei', sans-serif" font-size="18" font-weight="600" fill="#0d442a">2. 核心问题 (Problem)</text>
<text x="35" y="500" font-family="'PingFang SC', 'Microsoft YaHei', sans-serif" font-size="14" fill="#333" font-weight="bold">对居民:</text>
<text x="35" y="525" font-family="'PingFang SC', 'Microsoft YaHei', sans-serif" font-size="14" fill="#444">• 卖废品麻烦: 需囤积、等待、走远路。</text>
<text x="35" y="545" font-family="'PingFang SC', 'Microsoft YaHei', sans-serif" font-size="14" fill="#444">• 价格不透明: 流动商贩随意定价。</text>
<text x="35" y="565" font-family="'PingFang SC', 'Microsoft YaHei', sans-serif" font-size="14" fill="#444">• 渠道不稳定: 回收车时有时无。</text>
<text x="35" y="600" font-family="'PingFang SC', 'Microsoft YaHei', sans-serif" font-size="14" fill="#333" font-weight="bold">对小站伙伴:</text>
<text x="35" y="625" font-family="'PingFang SC', 'Microsoft YaHei', sans-serif" font-size="14" fill="#444">• 线下门店客流变现难。</text>
<text x="35" y="645" font-family="'PingFang SC', 'Microsoft YaHei', sans-serif" font-size="14" fill="#444">• 缺乏稳定、低成本的增收方式。</text>
<text x="35" y="680" font-family="'PingFang SC', 'Microsoft YaHei', sans-serif" font-size="14" fill="#333" font-weight="bold">现有替代方案:</text>
<text x="35" y="705" font-family="'PingFang SC', 'Microsoft YaHei', sans-serif" font-size="14" fill="#444">• 流动回收车 (不方便, 不稳定)</text>
<text x="35" y="725" font-family="'PingFang SC', 'Microsoft YaHei', sans-serif" font-size="14" fill="#444">• 大型回收站 (距离远)</text>
<text x="35" y="745" font-family="'PingFang SC', 'Microsoft YaHei', sans-serif" font-size="14" fill="#444">• 直接丢弃 (不环保, 浪费)</text>
</g>
<!-- Column 2 -->
<g id="col2">
<!-- 独特价值主张 (Unique Value Proposition) -->
<rect x="415" y="80" width="370" height="200" fill="#ffffff" stroke="#e1e4e8" stroke-width="1"/>
<rect x="415" y="80" width="370" height="40" fill="#e6f7eb"/>
<text x="425" y="105" font-family="'PingFang SC', 'Microsoft YaHei', sans-serif" font-size="18" font-weight="600" fill="#0d442a">3. 独特价值主张 (UVP)</text>
<text x="425" y="150" font-family="'PingFang SC', 'Microsoft YaHei', sans-serif" font-size="18" font-weight="bold" fill="#f57c00">下楼就卖废品,</text>
<text x="425" y="180" font-family="'PingFang SC', 'Microsoft YaHei', sans-serif" font-size="18" font-weight="bold" fill="#f57c00">方便、透明、还能换东西!</text>
<text x="425" y="220" font-family="'PingFang SC', 'Microsoft YaHei', sans-serif" font-size="14" fill="#444">• 对用户: 极致便利, 公平价格</text>
<text x="425" y="240" font-family="'PingFang SC', 'Microsoft YaHei', sans-serif" font-size="14" fill="#444">• 对伙伴: 零成本增收, 锁定客流</text>
<!-- 解决方案 (Solution) -->
<rect x="415" y="290" width="370" height="220" fill="#ffffff" stroke="#e1e4e8" stroke-width="1"/>
<rect x="415" y="290" width="370" height="40" fill="#e6f7eb"/>
<text x="425" y="315" font-family="'PingFang SC', 'Microsoft YaHei', sans-serif" font-size="18" font-weight="600" fill="#0d442a">4. 解决方案 (Solution)</text>
<text x="425" y="345" font-family="'PingFang SC', 'Microsoft YaHei', sans-serif" font-size="14" fill="#333" font-weight="bold">微信小程序 (核心载体):</text>
<text x="425" y="370" font-family="'PingFang SC', 'Microsoft YaHei', sans-serif" font-size="14" fill="#444">• 用户端: LBS找站、个人账户、价格公示。</text>
<text x="425" y="390" font-family="'PingFang SC', 'Microsoft YaHei', sans-serif" font-size="14" fill="#444"> (适老化设计: 大字体/图标/语音播报)</text>
<text x="425" y="415" font-family="'PingFang SC', 'Microsoft YaHei', sans-serif" font-size="14" fill="#444">• 小站端: 扫码识客、称重计价、数据汇总。</text>
<text x="425" y="445" font-family="'PingFang SC', 'Microsoft YaHei', sans-serif" font-size="14" fill="#333" font-weight="bold">线下运营体系:</text>
<text x="425" y="470" font-family="'PingFang SC', 'Microsoft YaHei', sans-serif" font-size="14" fill="#444">• 小站 → 小仓 → 大仓 → 打包站 的SOP流程。</text>
<!-- 渠道 (Channels) -->
<rect x="415" y="520" width="370" height="250" fill="#ffffff" stroke="#e1e4e8" stroke-width="1"/>
<rect x="415" y="520" width="370" height="40" fill="#e6f7eb"/>
<text x="425" y="545" font-family="'PingFang SC', 'Microsoft YaHei', sans-serif" font-size="18" font-weight="600" fill="#0d442a">5. 渠道 (Channels)</text>
<text x="425" y="575" font-family="'PingFang SC', 'Microsoft YaHei', sans-serif" font-size="14" fill="#444">• 线下: 社区地推、合作点(小站)引流、</text>
<text x="425" y="595" font-family="'PingFang SC', 'Microsoft YaHei', sans-serif" font-size="14" fill="#444"> 与物业/居委会合作。</text>
<text x="425" y="620" font-family="'PingFang SC', 'Microsoft YaHei', sans-serif" font-size="14" fill="#444">• 线上: 微信群、本地生活公众号。</text>
<text x="425" y="645" font-family="'PingFang SC', 'Microsoft YaHei', sans-serif" font-size="14" fill="#444">• 传播: 用户口碑、小礼品激励分享。</text>
</g>
<!-- Column 3 -->
<g id="col3">
<!-- 收入来源 (Revenue Streams) -->
<rect x="805" y="80" width="370" height="200" fill="#ffffff" stroke="#e1e4e8" stroke-width="1"/>
<rect x="805" y="80" width="370" height="40" fill="#e6f7eb"/>
<text x="815" y="105" font-family="'PingFang SC', 'Microsoft YaHei', sans-serif" font-size="18" font-weight="600" fill="#0d442a">6. 收入来源 (Revenue Streams)</text>
<text x="815" y="140" font-family="'PingFang SC', 'Microsoft YaHei', sans-serif" font-size="14" fill="#333" font-weight="bold">• 核心收入: 废品差价</text>
<text x="815" y="160" font-family="'PingFang SC', 'Microsoft YaHei', sans-serif" font-size="14" fill="#444">(打包站售价 - 居民收购价)</text>
<text x="815" y="190" font-family="'PingFang SC', 'Microsoft YaHei', sans-serif" font-size="14" fill="#333" font-weight="bold">• 增值收入:</text>
<text x="815" y="210" font-family="'PingFang SC', 'Microsoft YaHei', sans-serif" font-size="14" fill="#444">- 小站商品导流佣金</text>
<text x="815" y="230" font-family="'PingFang SC', 'Microsoft YaHei', sans-serif" font-size="14" fill="#444">- 小程序内广告 (如环保品牌)</text>
<text x="815" y="250" font-family="'PingFang SC', 'Microsoft YaHei', sans-serif" font-size="14" fill="#444">- To B/G 数据服务</text>
<!-- 成本结构 (Cost Structure) -->
<rect x="805" y="290" width="370" height="220" fill="#ffffff" stroke="#e1e4e8" stroke-width="1"/>
<rect x="805" y="290" width="370" height="40" fill="#e6f7eb"/>
<text x="815" y="315" font-family="'PingFang SC', 'Microsoft YaHei', sans-serif" font-size="18" font-weight="600" fill="#0d442a">7. 成本结构 (Cost Structure)</text>
<text x="815" y="345" font-family="'PingFang SC', 'Microsoft YaHei', sans-serif" font-size="14" fill="#444">• 技术研发成本 (小程序开发、服务器)</text>
<text x="815" y="370" font-family="'PingFang SC', 'Microsoft YaHei', sans-serif" font-size="14" fill="#444">• 线下运营成本 (仓储、物流、车辆)</text>
<text x="815" y="395" font-family="'PingFang SC', 'Microsoft YaHei', sans-serif" font-size="14" fill="#444">• 人力成本 (管理团队、司机、分拣员)</text>
<text x="815" y="420" font-family="'PingFang SC', 'Microsoft YaHei', sans-serif" font-size="14" fill="#444">• 市场营销成本 (地推、物料、活动)</text>
<text x="815" y="445" font-family="'PingFang SC', 'Microsoft YaHei', sans-serif" font-size="14" fill="#444">• 小站补贴/分成 (给合作方的激励)</text>
<!-- 关键指标 (Key Metrics) -->
<rect x="805" y="520" width="370" height="150" fill="#ffffff" stroke="#e1e4e8" stroke-width="1"/>
<rect x="805" y="520" width="370" height="40" fill="#e6f7eb"/>
<text x="815" y="545" font-family="'PingFang SC', 'Microsoft YaHei', sans-serif" font-size="18" font-weight="600" fill="#0d442a">8. 关键指标 (Key Metrics)</text>
<text x="815" y="575" font-family="'PingFang SC', 'Microsoft YaHei', sans-serif" font-size="14" fill="#444">• 用户增长: 注册用户数、日/月活用户(DAU/MAU)</text>
<text x="815" y="600" font-family="'PingFang SC', 'Microsoft YaHei', sans-serif" font-size="14" fill="#444">• 业务量: 日均回收单量、回收品类重量</text>
<text x="815" y="625" font-family="'PingFang SC', 'Microsoft YaHei', sans-serif" font-size="14" fill="#444">• 网络扩张: 成功签约并运营的小站数量</text>
<text x="815" y="650" font-family="'PingFang SC', 'Microsoft YaHei', sans-serif" font-size="14" fill="#444">• 用户粘性: 用户复用率、单用户月均交易次数</text>
<!-- 竞争壁垒 (Unfair Advantage) -->
<rect x="805" y="680" width="370" height="90" fill="#ffffff" stroke="#e1e4e8" stroke-width="1"/>
<rect x="805" y="680" width="370" height="40" fill="#e6f7eb"/>
<text x="815" y="705" font-family="'PingFang SC', 'Microsoft YaHei', sans-serif" font-size="18" font-weight="600" fill="#0d442a">9. 竞争壁垒 (Unfair Advantage)</text>
<text x="815" y="735" font-family="'PingFang SC', 'Microsoft YaHei', sans-serif" font-size="14" fill="#444">• 强大的线下运营和地推能力 (最核心)</text>
<text x="815" y="755" font-family="'PingFang SC', 'Microsoft YaHei', sans-serif" font-size="14" fill="#444">• 率先抢占的社区点位网络效应</text>
</g>
</svg>

After

Width:  |  Height:  |  Size: 12 KiB

View File

@@ -0,0 +1,234 @@
# 废品回收小程序 - 初步设计文档 V1.0
> **文档状态**: 评审中
> **版本**: 1.0
> **日期**: 2025-08-08
> **联合编制**:
> - **产品经理**: Sean
> - **项目经理**: Alex (PM)
> - **研发经理**: (待定)
---
## 1. 项目概述
### 1.1 项目背景与核心矛盾
本项目旨在通过O2O平台连接社区居民、回收小站、物流及处理中心解决传统废品回收流程中信息不对称、效率低下、体验差的痛点。
**核心矛盾**: 居民侧“便捷、透明地处理废品”的需求 与 传统回收行业“效率低下、信息不透明”的现状 之间的矛盾。本平台即为解决此矛盾的关键载体。
### 1.2 项目目标 (MVP V1.0)
- **业务目标**: 跑通“居民到小站”的核心商业模式闭环。
- **数据目标**: 在1-2个试点社区实现每周100+笔交易C端用户次月留存率达到30%。
---
## 2. MVP范围定义
为实现快速验证MVP版本将聚焦于最核心的功能闭环。
- **C端 (居民端)**: 核心是“卖钱”。
- **功能**: 微信一键登录、我的卖品码、我的余额、交易记录。
- **B端 (小站端)**: 核心是“收钱”。
- **功能**: 账号登录、核心回收流程(扫码、录入、确认)、语音播报。
- **管理后台**: 核心是“能管”。
- **功能**: 品类与价格管理、小站管理(用于创建账号)、基础订单流水查询。
### 2.1 MVP范围之外 (Out of Scope)
为确保核心价值的快速验证以下在PRD中提及的功能将**不包含**在V1.0版本中:
- **C端提现功能**: V1.0用户余额仅作记录V1.1实现提现。
- **物流端功能**: V1.0不包含物流角色和相关功能。
- **积分商城等增值服务**: 待核心模式验证后规划。
---
## 3. 技术架构设计
### 3.1 架构图
```mermaid
graph TD
subgraph 用户端 (User Layer)
C_MP[C端居民小程序<br>(uni-app / Vue.js)]
B_MP[B端小站小程序<br>(uni-app / Vue.js)]
Admin[管理后台Web<br>(Vue 3 + Element Plus)]
end
subgraph 网关层 (API Gateway)
Gateway[API Gateway<br>(Nginx)]
end
subgraph 后端服务 (Backend Service)
Backend[后端应用服务器<br>(Node.js + NestJS)]
end
subgraph 数据层 (Data Layer)
DB[(PostgreSQL<br>核心业务数据)]
Cache[(Redis<br>缓存/会话)]
end
C_MP --> Gateway
B_MP --> Gateway
Admin --> Gateway
Gateway --> Backend
Backend --> DB
Backend --> Cache
```
### 3.2 技术选型理由
- **前端 (uni-app + Vue)**: 一次开发多端发布极大提升MVP开发效率统一技术栈。
- **后端 (Node.js + NestJS)**: 全栈语言统一TypeScript架构清晰适合企业级应用保证代码质量和可维护性。
- **数据库 (PostgreSQL + Redis)**: PostgreSQL功能强大满足地理位置查询等复杂需求Redis作为缓存保证系统响应速度。
### 3.3 风险评估与应对策略
- **技术风险**:
- **风险点**: `uni-app` 在部分低端安卓机型上可能存在性能瓶颈。
- **应对策略**: 在开发中期,选取核心页面(如扫码、列表)进行专项性能测试,预留优化时间。
- **团队风险**:
- **风险点**: 团队成员对 `NestJS``uni-app` 的熟练度可能不一。
- **应对策略**: 在项目启动前安排1-2天的技术预研Spike统一代码规范和最佳实践。
---
## 4. 数据库设计
以下为MVP版本所需的核心数据表结构。
```sql
-- 1. C端居民用户表
CREATE TABLE users (
id SERIAL PRIMARY KEY,
wx_openid VARCHAR(255) UNIQUE NOT NULL,
nickname VARCHAR(255),
avatar_url TEXT,
balance DECIMAL(10, 2) NOT NULL DEFAULT 0.00,
created_at TIMESTAMPTZ NOT NULL DEFAULT NOW(),
updated_at TIMESTAMPTZ NOT NULL DEFAULT NOW()
);
-- 2. B端回收小站表
CREATE TABLE stations (
id SERIAL PRIMARY KEY,
name VARCHAR(255) NOT NULL,
address TEXT NOT NULL,
location GEOGRAPHY(POINT, 4326),
manager_name VARCHAR(100),
phone_number VARCHAR(20),
status VARCHAR(20) NOT NULL DEFAULT 'active',
created_at TIMESTAMPTZ NOT NULL DEFAULT NOW(),
updated_at TIMESTAMPTZ NOT NULL DEFAULT NOW()
);
-- 3. 小站员工表
CREATE TABLE staff (
id SERIAL PRIMARY KEY,
station_id INT NOT NULL REFERENCES stations(id),
phone_number VARCHAR(20) UNIQUE NOT NULL,
password_hash VARCHAR(255) NOT NULL,
role VARCHAR(50) NOT NULL DEFAULT 'staff',
created_at TIMESTAMPTZ NOT NULL DEFAULT NOW(),
updated_at TIMESTAMPTZ NOT NULL DEFAULT NOW()
);
-- 4. 回收物料品类表
CREATE TABLE categories (
id SERIAL PRIMARY KEY,
name VARCHAR(100) UNIQUE NOT NULL,
unit VARCHAR(20) NOT NULL DEFAULT 'kg',
is_active BOOLEAN NOT NULL DEFAULT TRUE,
created_at TIMESTAMPTZ NOT NULL DEFAULT NOW()
);
-- 5. 价格表
CREATE TABLE prices (
id SERIAL PRIMARY KEY,
category_id INT NOT NULL REFERENCES categories(id),
station_id INT NOT NULL REFERENCES stations(id),
price DECIMAL(10, 2) NOT NULL,
effective_date TIMESTAMPTZ NOT NULL DEFAULT NOW(),
created_at TIMESTAMPTZ NOT NULL DEFAULT NOW(),
UNIQUE(category_id, station_id)
);
-- 6. 交易记录总表
CREATE TABLE transactions (
id SERIAL PRIMARY KEY,
user_id INT NOT NULL REFERENCES users(id),
station_id INT NOT NULL REFERENCES stations(id),
staff_id INT NOT NULL REFERENCES staff(id),
total_amount DECIMAL(10, 2) NOT NULL,
created_at TIMESTAMPTZ NOT NULL DEFAULT NOW()
);
-- 7. 交易详情表
CREATE TABLE transaction_items (
id SERIAL PRIMARY KEY,
transaction_id INT NOT NULL REFERENCES transactions(id) ON DELETE CASCADE,
category_id INT NOT NULL REFERENCES categories(id),
weight DECIMAL(10, 2) NOT NULL,
price_per_unit DECIMAL(10, 2) NOT NULL,
amount DECIMAL(10, 2) NOT NULL,
created_at TIMESTAMPTZ NOT NULL DEFAULT NOW()
);
```
---
## 5. 核心API接口设计
### 5.1 管理后台API (`/api/admin`)
- **品类管理**: `GET, POST, PUT /categories/:id`
- **小站管理**: `GET, POST, PUT /stations/:id`
- **价格管理**: `GET, POST /prices`
- **员工管理**: `GET, POST /staff`
### 5.2 C端小程序API (`/api/c`)
- **认证**: `POST /auth/login` (微信Code换JWT)
- **用户信息**: `GET /profile`
- **核心功能**:
- `GET /features/prices` (今日回收价)
- `GET /features/nearby-stations` (附近小站)
- `GET /features/transactions` (交易记录)
### 5.3 B端小程序API (`/api/b`)
- **认证**: `POST /auth/login` (手机号密码登录)
- **回收流程**:
- `GET /recycle/user-info` (扫码识客)
- `POST /recycle/transactions` (创建交易)
- **数据查询**:
- `GET /data/summary` (今日汇总)
- `GET /data/inventory` (库存盘点)
- `GET /data/categories` (可用回收品类)
---
## 6. 项目排期与资源规划
### 6.1 总体排期 (估算)
项目采用敏捷开发模式,以**2个为期两周的Sprint**完成MVP版本的开发和测试总计**4周**。
- **Sprint 1 (第一、二周)**:
- **目标**: 完成后端核心API开发与前端基础架构。
- **后端**: 完成所有后台、C端、B端的API开发与单元测试。
- **前端**: 完成项目脚手架搭建各端登录、核心页面UI布局。
- **产出**: 后端API可供调用前端页面静态可见。
- **Sprint 2 (第三、四周)**:
- **目标**: 完成前后端对接、联调测试与上线准备。
- **前端**: 完成所有业务逻辑开发与后端API全面对接。
- **测试**: 执行端到端的核心流程测试用例进行多轮Bug修复。
- **产出**: 功能完备、通过测试的MVP版本可随时部署。
### 6.2 资源分配 (建议)
- **后端开发**: 1-2人
- **前端开发**: 1-2人 (uni-app, Vue)
- **测试(QA)**: 1人 (在Sprint 2后半段集中投入)
- **产品/项目**: 1人 (负责需求澄清、进度跟踪)
### 6.3 沟通与协作
- **每日站会**: 每天上午10点15分钟同步进度、风险和阻塞点。
- **每周复盘**: 每周五下午,复盘本周进展,规划下周计划。
- **协作工具**:
- **任务管理**: Jira (或类似工具)
- **即时沟通**: Slack / 钉钉
- **文档中心**: Confluence / Git仓库Wiki

View File

@@ -0,0 +1,185 @@
# 绿邻回收项目商业计划书
---
## 1. 执行摘要 (Executive Summary)
**绿邻回收**是一个旨在革新城市社区废品回收模式的环保科技项目。我们通过构建一个以微信小程序为载体,连接居民、社区小站和回收产业链的超便捷回收网络,解决当前城市废品回收中存在的“最后一公里”难题。
我们的核心业务是,用户(特别是中老年人)可以方便地将家中的可回收废品(初期聚焦于塑料瓶、纸壳、旧衣物)送到楼下的合作小站(如超市、快递驿站),通过一个极其简单的“适老化”小程序进行称重、计价,并立即获得现金或兑换商品。小站的废品将由我们的物流体系每日归集到城市中心仓,再统一销售给大型打包站,从而形成一个高效、透明、共赢的商业闭环。
本项目致力于通过技术手段和创新的运营模式,提升回收效率,改善用户体验,为环保事业贡献力量,并创造可观的经济价值。
---
## 2. 市场分析 (Market Analysis)
### 2.1 行业背景
随着中国城市化进程的加速和环保政策的收紧(如垃圾分类),传统废品回收模式的弊端日益凸显:
- **效率低下**: 零散的回收人员效率低,覆盖面不稳定。
- **体验不佳**: 对居民而言,回收时间、地点不固定,价格不透明。
- **“适老化”缺失**: 中老年人作为家庭废品处理的主要人群对复杂的线上APP望而却EB。
市场需要一个更高效、更便捷、更值得信赖的回收解决方案。
### 2.2 目标市场
- **主要用户 (C端)**:
- **中老年居民**: 核心用户群。他们有处理废品的习惯,但对传统回收方式感到不便。
- **年轻家庭/环保人士**: 他们有环保意识,追求便捷高效的生活方式。
- **合作伙伴 (B端)**:
- **社区小店/超市/快递驿站**: 他们有固定的物理空间和客流,希望增加额外收入并提升客户粘性。
### 2.3 竞争分析
- **传统回收人员**: 我们的优势在于价格透明、服务稳定、体验更佳。
- **其他线上回收平台**: 我们的核心差异化优势是**超本地化**和**极致简化**的“适老化”设计,解决了其他平台操作复杂、上门服务不及时的问题。
---
## 3. 公司与团队 (Organization and Management)
我们计划组建一个分工明确、执行力强的核心团队:
- **CEO/创始人**: 负责公司战略、融资、商业模式设计和团队建设。
- **产品经理**: 负责市场调研、产品规划(微信小程序)、用户体验设计。
- **UI/UX设计师**: 专注于“适老化”的界面与交互设计。
- **项目经理**: 负责项目排期、进度跟踪和跨部门沟通。
- **技术团队**: 包括小程序前端、后端开发,负责系统的实现。
- **测试工程师**: 保证产品质量和用户需求满足度。
- **运营总监**: 负责整个线下回收、仓储、物流体系的搭建和管理。
- **市场与商务拓展(BD)经理**: 负责小站的拓展和社区地推营销。
- **小站站长**: 一线运营人员,负责用户服务和日常回收工作。
- **仓储物流专员**: 负责废品从“小仓”到“大仓”的流转。
---
## 4. 产品与服务 (Product and Service)
### 4.1 核心载体:微信小程序
分为两个端:用户端和小站端。
- **用户端**:
- **核心功能**: 查看附近小站、回收价格公示、个人账户(交易记录、余额)。
- **“适老化”设计**: 超大字体、语音播报、极简流程、无需复杂注册。
- **小站端**:
- **核心功能**: 扫码识别用户、称重品类录入、自动计价、结算(现金/兑换)、当日汇总。
- **设计理念**: 操作直观,功能聚焦,稳定可靠。
### 4.2 业务流程
这是一个完整的闭环系统,从居民到最终的打包站。
``` mermaid
graph TD
subgraph 用户端
A[居民在家整理废品] --> B{下楼前往小站};
end
subgraph 小站
B --> C[站长使用小程序称重];
C --> D[系统自动计算价格];
D --> E{选择结算方式};
E --> F[获得现金/兑换商品];
E --> G[积分存入账户];
F --> H[完成回收];
G --> H;
C --> I[废品暂存小站];
end
subgraph 物流与仓储
I --> J(每日由专人从小站收集);
J --> K[转运至邻近小仓];
K --> L(专车每日从小仓归集);
L --> M[送达城市大仓];
M --> N[分类、压缩、存储];
end
subgraph 供应链末端
N --> O(定期从大仓转运);
O --> P[销售给大型打包站];
end
P --> |资金回流| Q((分润体系));
subgraph 收益分配
Q --> |利润| CEO/公司;
Q --> |服务费| B端小站;
Q --> |回收金| A;
Q --> |工资/运费| 物流与仓储;
end
```
---
## 5. 市场与营销策略 (Marketing & Sales Strategy)
- **地推先行**: 深入社区,通过海报、传单、现场演示等方式进行首轮用户教育。
- **活动引流**: 策划“回收换鸡蛋”、“周末双倍积分”等接地气的活动,快速获取初始用户。
- **合作共赢**: 为小站合作伙伴提供稳定的额外收入和客流,激励他们主动推广。
- **口碑传播**: 通过优质的服务和便捷的体验,鼓励用户(尤其是大爷大妈们)进行口碑传播。
---
## 6. 运营计划 (Operational Plan)
1. **第一阶段 (MVP)**:
- 选择1-2个成熟社区作为试点。
- 完善小程序核心功能开发与测试。
- 签约5-10个种子小站。
- 租赁一个小型仓库作为“小仓”兼“大仓”。
- 验证整个业务流程的可行性。
2. **第二阶段 (扩张)**:
- 在试点城市进行规模化复制,覆盖主要城区。
- 建立标准的城市“大仓”。
- 优化物流路线,提升回收效率。
- 迭代小程序功能,增加数据分析后台。
3. **第三阶段 (全国布局)**:
- 将成熟的城市模型复制到其他城市。
- 探索更多可回收品类(如旧家电、电池等)。
- 建立品牌影响力。
---
## 7. 财务规划 (Financial Plan)
### 7.1 成本结构 (Cost Structure)
- **技术开发成本**: 小程序开发、服务器、数据库等。
- **人力成本**: 核心团队、线下运营及物流人员的工资。
- **营销成本**: 地推活动、物料制作费用。
- **运营成本**: 仓储租金、运输车辆油耗及维护。
- **给用户的回收金**: 支付给用户的废品费用。
### 7.2 收入来源 (Revenue Streams)
- **核心收入**: 将从大仓集中处理后的可回收物,以更高的价格批量出售给大型打包站或处理厂,赚取其中的差价。
- **潜在收入**:
- **广告**: 在小程序中为社区商家提供精准广告位。
- **政府补贴**: 申请环保项目相关的政府补贴。
- **数据服务**: 在合规前提下,为相关行业提供脱敏的消费和环保数据分析。
---
## 8. 附录 (Appendix)
### 用户核心体验旅程图
```mermaid
sequenceDiagram
participant User as 用户
participant Station as 小站端小程序
participant Server as 后端服务器
User->>User: 在家整理好废品
User->>Station: 带着废品到楼下小站
Station->>User: 站长:欢迎,请出示您的手机号/会员码
User->>Station: (提供手机号后4位)
Station->>Server: 查询用户信息 (手机号:xxxx)
Server-->>Station: 返回用户信息
Station->>Station: 站长选择品类(纸壳),放置上称
Station->>Server: 上传数据(用户ID, 品类:纸壳, 重量:2.5kg)
Server-->>Station: 返回计算价格(3.75元)
Station->>User: 站长一共3块7毛5您要现金还是换东西
User->>Station: 就要现金吧
Station->>Server: 确认交易(用户ID, 金额:3.75, 方式:现金)
Server-->>Station: 交易成功
Station->>User: (支付现金)好了,欢迎下次再来!
```

View File

@@ -0,0 +1,69 @@
### **微信小程序收款及大型平台提现机制分析**
**日期:** 2025年8月11日
**一、 小程序商业收款机制**
1. **非实时到账原因:**
* **资金流向:** 小程序收款资金不会直接进入个人微信零钱余额,而是首先进入微信支付的**商户号Merchant Account**。
* **商业清算:** 这是因为小程序收款属于商业交易,需要遵循专业的支付清算体系。
* **结算周期:** 微信支付商户平台通常设有T+1即交易日次日的结算周期款项在结算后才会到达商户账户。具体结算周期可能因行业和发货方式而异。
* **提现流程:** 资金结算到商户账户后,商户需手动或自动将资金从商户平台提现至其绑定的对公银行账户或法人银行卡。
2. **实时转入微信零钱的限制:**
* **不适用于商业收款:** 微信支付提供的“个人收款”功能允许非商业用途的个人间收付款实时进入零钱,但有严格额度限制且不支持商业运营。
* **“商家转账到零钱”接口:** 此接口允许商户将其商户号中的资金转账给用户的微信零钱,但这并非收款的结算方式,而是商户主动发起的转账行为。
**二、 小程序收款所需手续**
要开通小程序收款功能,需满足以下条件并遵循相应步骤:
1. **开通条件:**
* **主体资格:** 小程序必须为非个人主体(如企业、个体工商户等)注册。
* **资质证明:** 需拥有合法营业执照。
* **小程序认证:** 小程序需通过微信官方认证。
* **微信支付商户号:** 必须申请并拥有一个微信支付商户号。
* **开发者账号:** 拥有有效的微信开发者账号。
2. **开通步骤:**
* 注册/拥有非个人主体小程序账号。
* 申请微信支付商户号,提交营业执照、法人证件、对公账户等资料。
* 完成小程序微信认证。
* 在小程序后台关联已有的微信支付商户号。
* 配置支付功能并进行API接口开发集成。
* 提交小程序审核,通过后即可使用收款功能。
3. **注意事项:**
* 确保业务合法合规,保护用户隐私。
* 接入微信支付本身无申请费但每笔交易会根据经营类目收取0.6%-1%的交易手续费。
**三、 大型平台(抖音、快手、拼多多)实时提现机制**
1. **性质差异:**
* **小程序收款:** 商家从用户收取销售款。
* **大型平台提现:** 平台将资金(如内容收益、推广佣金、签到奖励、购物返现等)支付给用户。资金来源是平台自身的资金池。
2. **实现方式:**
* 大型平台利用微信支付提供的**“商家转账到零钱”原“企业付款到零钱”API接口**。
* 该接口允许企业从其微信支付商户账户向任意微信用户零钱进行转账,可实现实时到账。
3. **实时提现优势:**
* **营销策略:** 提供即时反馈,提升用户活跃度和留存率。
* **技术实力:** 平台具备高并发、高效率的资金处理能力,与微信支付有深度合作。
* **手续费承担:** 平台通常会承担或消化“商家转账到零钱”接口产生的手续费,将其作为营销成本。
**四、 “商家转账到零钱”接口手续费规则**
* **费用:** 根据微信支付官方最新规定,“商家转账到零钱”服务目前是**免费的**,即微信支付不向商户收取此操作的交易手续费。
* **资金来源:** 商户需预先将资金充值到其微信支付的运营账户中。
* **区分:** 此免费政策与以下费用不同:
* **商家收款手续费:** 顾客使用微信支付(信用卡/非信用卡向商家付款时微信支付向商家收取的交易手续费如0.1%或0.38%)。
* **个人用户零钱提现手续费:** 个人微信零钱超出免费额度后提现到银行卡时收取的0.1%手续费。
**结论:**
一般小程序的商业收款涉及严格的资金清算和合规要求,因此存在结算周期。而抖音、快手、拼多多等大型平台实现的“实时提现”是基于其作为“付款方”的业务性质,并利用微信支付提供的企业级“商家转账到零钱”接口,将平台资金支付给用户,且目前该接口本身不收取手续费,从而实现了即时到账和精准营销。
---

View File

@@ -0,0 +1,213 @@
# 废品回收小程序产品需求文档 (PRD) V2.0
> **文档状态**: 修订中
> **版本**: 2.0
> **修订日期**: 2025-08-08
> **作者**: Claude, AI产品助手
---
## 修订历史
| 版本 | 修订日期 | 修订人 | 修订内容 |
| :---- | :--------- | :----- | :------------------------------------------- |
| 1.0 | 2025-08-07 | Claude | 初稿,定义了用户端和小站端的核心功能 |
| 2.0 | 2025-08-08 | Claude | 根据反馈重构,细化为四端模型,增强可执行性 |
---
## 1. 项目概述
### 1.1 项目背景
本项目旨在通过数字化的O2O平台连接社区居民、社区回收小站、物流司机和后端处理中心打造一个高效、透明、便捷的废品回收生态系统。平台以微信小程序为主要载体解决传统废品回收流程中信息不对称、效率低下、用户体验差等痛点。
### 1.2 核心问题与解决方案
- **居民侧**: 出售废品渠道少、价格不透明、流程繁琐 → **提供一个稳定、便捷、价格透明的线上出售渠道。**
- **小站侧**: 人工记账易出错、库存管理混乱、与上游对接效率低 → **提供一套移动化、自动化的记账、库存及对接工具。**
- **物流侧**: 揽收路线不科学、交接凭证混乱、运输过程不可控 → **提供数字化的揽收任务管理和扫码交接功能。**
- **公司侧**: 缺乏全局数据、无法精细化运营、业务模式难以复制 → **搭建一个集数据监控、运营管理、财务结算于一体的中心化管理后台。**
### 1.3 项目目标
- **V1.0 (MVP) 目标**:
- 验证核心商业模式:居民到小站的回收流程。
- 在1-2个试点社区实现每周100+笔交易。
- C端用户次月留存率达到30%B端小站无主动流失。
### 1.4 核心用户画像
- **C端 - 居民**:
- **王大妈**: 65岁退休在家对价格敏感会用微信但对复杂操作有困难。希望卖废品能像去超市买菜一样简单。
- **B端 - 小站站长**:
- **李老板**: 45岁社区超市店主。希望回收操作不影响主业记账清晰能快速和上游完成交接结算。
- **物流端 - 司机**:
- **张师傅**: 35岁回收车队司机。希望能有清晰的揽收路线交接时不用手写单据扫个码就能搞定。
- **后台 - 运营经理**:
- **小陈**: 28岁公司运营。希望实时看到各小站的回收数据能灵活调整回收品类和价格。
---
## 2. 整体业务流程
```mermaid
graph TD
subgraph C端用户
A[1.居民携带废品到小站] --> B{2.出示个人收款码};
end
subgraph B端用户
B --> C[3.站长扫码识别用户];
C --> D[4.选择品类, 输入重量];
D --> E[5.确认金额, 完成交易];
E --> F((资金计入用户余额));
E --> G[6.定期向上游发起交接];
end
subgraph 物流端
G --> H[7.司机接单, 前往小站];
H --> I[8.扫小站出库码, 核对品类重量];
I --> J[9.确认揽收, 运输至打包站];
end
subgraph 管理后台
K[品类/价格管理] --> D;
F --> L[订单流水监控];
G --> M[库存数据监控];
I --> N[物流状态跟踪];
J --> O[财务结算管理];
end
```
---
## 3. C端居民端小程序
**核心定位:让卖废品像收钱一样简单。**
### 3.1 功能模块详述
#### 3.1.1 登录/注册
- **需求**: 微信一键授权登录,自动创建账户,无需额外注册步骤。
#### 3.1.2 首页 (核心页面)
- **界面元素**:
1. **【我的卖品码】**: 页面最中心、最大的按钮,点击后全屏显示个人专属二维码,并调高屏幕亮度。
2. **【附近小站】**: 列表或地图形式,展示附近合作小站的位置、营业时间、联系电话。
3. **【今日回收价】**: 醒目位置展示主要品类(纸壳、塑料瓶等)的单价(元/斤)。
#### 3.1.3 “我的”页面
- **界面元素**:
1. **【我的余额】**: 突出显示当前账户余额。
2. **【提现】(V1.1)**: 将余额提现至微信零钱。需进行实名认证。
3. **【交易记录】**: 列表形式,展示每一笔交易的时间、地点、品类、重量、金额。
4. **【联系客服】**: 提供客服电话或在线咨询入口。
#### 3.1.4 消息通知
- **需求**:
- 交易成功后,收到模板消息推送,告知本次收入金额。
- 提现成功后,收到模板消息推送。
---
## 4. B端小站端小程序
**核心定位:高效的移动回收工作站。**
### 4.1 功能模块详述
#### 4.1.1 登录
- **需求**: 由管理员在后台创建账号,站长通过“手机号+验证码”登录。
#### 4.1.2 工作台 (首页)
- **界面元素**:
1. **【开始回收】**: 核心操作按钮,点击进入扫码回收流程。
2. **【今日汇总】**: 数据卡片,展示当日回收总单数、总重量、总金额。
3. **【库存盘点】**: 查看当前各类废品的库存重量。
4. **【向上游交接】**: 生成出库单,打印或出示出库二维码,等待物流端揽收。
#### 4.1.3 回收流程 (核心业务)
1. **扫码识客**: 点击“开始回收”启动扫码器扫描C端用户的“卖品码”。成功后显示用户昵称。
2. **录入信息**:
- **品类选择**: 大按钮形式选择“纸壳”、“塑料瓶”等。
- **重量输入**: 手动输入称重后的重量。
- 系统自动计算金额并显示。
3. **确认交易**: 与用户核对无误后,点击“确认”。系统二次弹窗确认。
4. **语音播报**: 交易成功后,必须有清晰的语音播报,如“**收款成功5.8元**”,方便老年用户确认。
#### 4.1.4 账单与库存
- **账单**: 查看每日、每周的交易流水和收入汇总。
- **库存**: 实时查看各品类库存,达到阈值时有提醒。
---
## 5. 物流端 (打包站/司机端)
**核心定位:精准、高效的废品“快递员”。** (初期可为H5页面或集成在B端小程序中)
### 5.1 功能模块详述
#### 5.1.1 揽收任务
- **需求**: 查看由系统(或后台运营)派发的揽收任务列表,包含小站地址、预计揽收重量、联系方式。
- **功能**: 支持路线规划。
#### 5.1.2 扫码交接
- **需求**: 到达小站后,扫描小站端生成的“出库码”。
- **流程**: 扫码后,页面显示待交接的品类和重量。司机确认实际收到的重量,可进行修改。双方确认后,完成交接。
#### 5.1.3 状态更新
- **需求**: 可手动更新任务状态,如“运输中”、“已入库”。
---
## 6. 统一管理后台 (Web端)
**核心定位:公司的“大脑”,驱动业务运转。**
### 6.1 功能模块详述
#### 6.1.1 Dashboard 数据看板
- **需求**: 实时展示核心KPI今日交易额、总用户数、活跃小站数、各品类回收量趋势图等。
#### 6.1.2 用户管理
- **需求**: 查询C端用户信息、交易记录、账户状态。
#### 6.1.3 小站管理
- **需求**: 小站的入驻审核、信息管理、地理位置分布图、服务状态(营业/休息)管理。
#### 6.1.4 品类与价格管理
- **需求**: 动态添加/修改回收品类,实时调整各品类在不同区域的回收单价。
#### 6.1.5 订单与库存管理
- **需求**: 查询全平台所有交易流水。实时监控各小站、各打包站的库存情况。
#### 6.1.6 物流管理
- **需求**: 查看物流司机信息,手动派发或调整揽收任务,跟踪任务状态。
#### 6.1.7 财务管理
- **需求**: 管理与小站、物流司机的结算周期和账单,支持账单导出。
#### 6.1.8 系统管理
- **需求**: 后台操作员的角色与权限管理。
---
## 7. 非功能性需求
- **性能**: 扫码响应时间 < 1秒页面加载时间 < 2秒
- **易用性**: C端和B端界面必须严格遵循适老化设计大字体高对比度操作简单
- **安全性**: 交易支付个人信息等敏感数据必须加密传输和存储
- **可扩展性**: 架构设计应支持未来新品类新城市新业务模式如积分商城上门回收的快速扩展
---
## 8. 版本迭代规划 (Roadmap)
- **V1.0 (MVP)**:
- 核心功能: C端 + B端核心回收流程管理后台基础框架品类价格订单查看)。
- 目标: 跑通商业模式闭环
- **V1.1**:
- 新增功能: 物流端H5后台物流管理后台小站管理C端提现功能
- 目标: 引入物流角色实现规范化清运
- **V1.2**:
- 新增功能: C端积分商城后台财务结算模块数据报表优化
- 目标: 探索增值服务提升运营效率
---
**文档结束**

214
01_设计/用户故事.md Normal file
View File

@@ -0,0 +1,214 @@
# 用户故事 (User Stories) - 绿邻回收项目
> 本文档旨在通过具体的用户故事,详细描述“绿邻回收”项目中不同角色的需求、行为和期望,从而指导产品设计与开发。
---
## 角色一:老百姓 (C端用户)
### 1.1. 核心诉求:方便、省心、价格透明地卖掉家里的废品
#### **用户画像:王大妈**
- **身份**: 65岁退休居民社区活跃分子。
- **习惯**: 精打细算会用微信基础功能聊天、发朋友圈、支付但对复杂App有畏惧心理。
- **痛点**: 楼下收废品的小贩时间不固定,价格随口报,还总想压价
### 1.2. 用户故事
#### **故事1查看回收价格**
- **作为** 王大妈,
- **我想要** 在出门前就能通过小程序看到今天纸壳子、塑料瓶卖多少钱一斤,
- **以便于** 我决定今天是否值得跑一趟,并且心里有底,不怕被坑。
#### **故事2找到最近的回收站**
- **作为** 刚搬来小区的年轻人小张,
- **我想要** 在小程序上用地图直接看到最近的回收站在哪,离我有多远,现在是否在营业,
- **以便于** 我能快速方便地处理掉家里堆积的快递纸箱。
#### **故事3极速卖品**
- **作为** 王大妈,
- **我想要** 到小站后让站长扫一下我的手机二维码他称重、确认后钱就能马上到我的小程序账户里并且能听到“收款成功5块8”这样的语音提醒
- **以便于** 整个过程像在超市用付款码一样简单,不用我输密码、点确认,甚至不用掏手机看,听声音就知道交易成功了,非常安心。
#### **故事4查看我的收入**
- **作为** 王大妈,
- **我想要** 在“我的”页面清楚地看到我的账户里还有多少钱,并且能翻看每一笔卖废品的记录,
- **以便于** 我知道这个月靠卖废品攒了多少零花钱,感觉很有成就感。
---
## 角色二:小站管理员
### 2.1. 核心诉求:操作简单高效,不影响主业,账目清晰,交接方便
#### **用户画像:李老板**
- **身份**: 45岁社区便民超市店主兼营回收小站。
- **习惯**: 熟悉智能手机操作,对钱款非常敏感,追求效率。
- **痛点**: 手工记账容易出错,废品堆在店里不知道什么时候能被拉走,跟司机交接时核对重量很麻烦。
### 2.2. 用户故事
#### **故事1快速开始回收**
- **作为** 李老板,
- **我想要** 在小站端小程序首页最显眼的位置有一个“开始回收”的大按钮,
- **以便于** 当有居民来卖废品时,我能一键进入回收
流程。
#### **故事2高效完成回收**
- **作为** 李老板,
- **我想要** 扫完居民的码后,直接在屏幕上点选“纸壳”、“塑料瓶”等大按钮,然后输入重量,系统能自动算出价格,
- **以便于** 我可以快速完成一笔交易,减少顾客等待时间,尤其是在我超市生意忙的时候。
#### **故事3查看今日战果**
- **作为** 李老板,
- **我想要** 在小程序首页看到今天收了多少单、各种废品有多重、总共收入了多少钱,
- **以便于** 我能随时掌握回收业务的经营状况,做到心中有数。
#### **故事4库存盘点与交接**
- **作为** 李老板,
- **我想要** 能在小程序里看到店里各种废品的库存重量,并且在库存快满时,能一键生成出库单并通知物流来收货,
- **以便于** 我可以合理安排店铺空间,并与运输司机高效、准确地完成交接,避免扯皮。
---
## 角色三:下站运输员 (物流司机)
### 3.1. 核心诉求:路线清晰,任务明确,交接高效,权责分明
#### **用户画像:张师傅**
- **身份**: 35岁回收车队司机。
- **习惯**: 每天需要跑多个点,时间观念强,不希望在交接流程上浪费时间。
- **痛点**: 路线规划不合理导致绕路,手写单据字迹潦草易出错,跟小站站长核对重量时偶尔会发生争执。
### 3.2. 用户故事
#### **故事1查看揽收任务**
- **作为** 运输员张师傅,
- **我想要** 在我的手机端H5或小程序看到今天所有需要去揽收的任务列表并能一键开启导航
- **以便于** 我可以合理规划路线,节省运输时间。
#### **故事2无纸化扫码交接**
- **作为** 运输员张师傅,
- **我想要** 到达小站后,直接扫描站长出示的出库二维码,手机上就能显示出待交接的品类和重量,
- **以便于** 我可以快速核对,确认无误后双方点击确认即可完成交接,无需手写单据,高效且有据可查。
#### **故事3更新任务状态**
- **作为** 运输员张师傅,
- **我想要** 在完成揽收、运输、入库等关键节点时,能在手机上方便地更新任务状态,
- **以便于** 公司后台能实时了解我的工作进展,也方便了后续的流程协同。
---
## 角色四:大仓库管理员
### 4.1. 核心诉求:入库清晰,库存准确,出库便捷
#### **用户画像:赵主管**
- **身份**: 50岁城市大仓的仓库主管。
- **习惯**: 工作严谨,对数据准确性要求高。
- **痛点**: 司机运回来的货物品类和重量与预期不符,库存盘点耗时耗力,与下游打包站的销售记录对账困难。
### 4.2. 用户故事
#### **故事1扫码确认入库**
- **作为** 仓库主管赵主管,
- **我想要** 在司机把废品运到大仓时,我能扫描他任务单上的二维码,系统就自动记录某某司机在什么时间、从哪些小站运来了多少斤什么废品,
- **以便于** 我可以快速完成入库登记,保证数据的准确性,并自动更新仓库库存。
#### **故事2实时库存监控**
- **作为** 仓库主管赵主管,
- **我想要** 在后台系统的大屏或电脑上,实时看到仓库里所有品类的库存量、存放位置和存放天数,
- **以便于** 我可以合理规划仓储空间,并在某种废品库存达到一定数量时,及时安排出库销售。
#### **故事3生成出库单**
- **作为** 仓库主管赵主管,
- **我想要** 当联系好下游的打包站后,能在系统里选择品类和重量,一键生成标准化的出库单,
- **以便于** 我可以指导工人备货,并作为与打包站结算的凭证,让整个出库流程规范化。
---
## 角色五:区域经理
### 5.1. 核心诉求:全局掌控,数据驱动,精细运营
#### **用户画像:小陈**
- **身份**: 28岁公司运营经理负责一个城市的业务。
- **习惯**: 擅长使用各类办公软件,关注数据报表,希望通过数据发现问题、驱动决策。
- **痛点**: 无法实时了解各小站的经营状况,调整价格需要层层通知效率低,缺乏有效的数据来评估业务健康度。
### 5.2. 用户故事
#### **故事1查看运营数据大盘**
- **作为** 区域经理小陈,
- **我想要** 在管理后台的首页看到一个数据驾驶舱实时展示今日交易额、活跃用户数、各小站回收量排名、各品类回收趋势图等核心KPI
- **以便于** 我能一目了然地掌握整个区域的业务动态,快速发现异常。
#### **故事2动态调整回收价格**
- **作为** 区域经理小陈,
- **我想要** 当废品市场价格波动时,能在后台方便地调整某个或所有小站的某个品类的回收单价,并且能立即生效,
- **以便于** 我可以灵活应对市场变化,保证公司的利润空间,同时保持对用户的吸引力。
#### **故事3管理与拓展小站**
- **作为** 区域经理小陈,
- **我想要** 在后台看到所有小站的地理分布、状态和详细信息,并能处理新的小站入驻申请,
- **以便于** 我可以进行精细化的小站运营管理并为BD团队的拓展工作提供数据支持。
---
## 角色六:后台系统运维人员
### 6.1. 核心诉求:保障系统稳定、安全、高效运行
#### **用户画像:老周**
- **身份**: 38岁公司IT运维工程师。
- **习惯**: 熟悉服务器运维、数据库管理、系统监控工具。
- **痛点**: 系统出问题时缺乏实时告警,日志分散难以排查,版本更新缺乏回滚机制,安全漏洞修复不及时可能影响业务。
### 6.2. 用户故事
#### **故事1实时监控与告警**
- **作为** 系统运维人员老周,
- **我想要** 在运维后台或监控平台上实时查看服务器、数据库、网络的运行状态并在出现异常如CPU过高、数据库连接数过多、接口响应超时时收到短信/邮件/企业微信告警,
- **以便于** 我能第一时间介入处理,减少系统宕机时间,保障业务连续性。
#### **故事2集中化日志管理**
- **作为** 系统运维人员老周,
- **我想要** 所有服务端、数据库、应用日志能集中到一个可检索的平台如ELK、Grafana Loki并支持按时间、关键字、服务模块快速筛选
- **以便于** 我能高效定位问题根源,缩短故障排查时间。
#### **故事3安全与权限管理**
- **作为** 系统运维人员老周,
- **我想要** 能定期查看和管理系统的访问权限、API密钥、数据库账号并对异常登录行为进行告警
- **以便于** 我能防止未授权访问,保障数据和系统安全。
#### **故事4版本更新与回滚**
- **作为** 系统运维人员老周,
- **我想要** 在发布新版本时,系统能自动备份当前版本,并在新版本出现严重问题时一键回滚,
- **以便于** 我能快速恢复系统到稳定状态,减少对业务的影响。
#### **故事5容量与性能规划**
- **作为** 系统运维人员老周,
- **我想要** 定期查看系统的资源使用趋势CPU、内存、磁盘、带宽并在接近阈值时收到扩容建议
- **以便于** 我能提前规划资源,避免因资源不足导致的性能下降或宕机。
### 6.3. 业务运维扩展故事
#### **故事6添加和管理站点信息**
- **作为** 系统运维人员老周,
- **我想要** 在后台可以方便地添加新的回收小站信息,包括名称、地址、地理位置、负责人联系方式、营业时间等,
- **以便于** 新站点能快速接入系统并开始运营,同时保持站点信息的准确性。
#### **故事7定义产品分类和价格**
- **作为** 系统运维人员老周,
- **我想要** 在后台可以新增、修改、停用回收品类,并为不同区域或站点设置不同的回收价格,
- **以便于** 系统能灵活应对市场价格波动和业务策略调整。
#### **故事8设置物流损耗参数**
- **作为** 系统运维人员老周,
- **我想要** 在后台为不同品类设置合理的运输损耗比例如纸壳运输损耗2%
- **以便于** 在结算时自动扣除损耗,保证财务数据的准确性和公平性。
#### **故事9报警处理与上报**
- **作为** 系统运维人员老周,
- **我想要** 在收到系统或业务异常报警(如库存异常、交易异常、物流延误)时,可以在后台查看详情、处理并记录处理结果,同时支持一键上报给相关负责人,
- **以便于** 异常问题能被快速响应和闭环处理,减少对业务的影响。