commit build fix.
This commit is contained in:
@@ -6,7 +6,7 @@ buildscript {
|
||||
mavenCentral()
|
||||
}
|
||||
dependencies {
|
||||
classpath 'com.android.tools.build:gradle:8.5.0'
|
||||
classpath 'com.android.tools.build:gradle:8.13.0'
|
||||
classpath "org.jetbrains.kotlin:kotlin-gradle-plugin:$kotlin_version"
|
||||
}
|
||||
}
|
||||
|
||||
2
gradle/wrapper/gradle-wrapper.properties
vendored
2
gradle/wrapper/gradle-wrapper.properties
vendored
@@ -1,6 +1,6 @@
|
||||
distributionBase=GRADLE_USER_HOME
|
||||
distributionPath=wrapper/dists
|
||||
distributionUrl=https\://services.gradle.org/distributions/gradle-8.7-bin.zip
|
||||
distributionUrl=https\://services.gradle.org/distributions/gradle-8.13-bin.zip
|
||||
networkTimeout=10000
|
||||
validateDistributionUrl=true
|
||||
zipStoreBase=GRADLE_USER_HOME
|
||||
|
||||
287
kimi-ui.html
Normal file
287
kimi-ui.html
Normal file
@@ -0,0 +1,287 @@
|
||||
<!DOCTYPE html>
|
||||
<html lang="zh-CN">
|
||||
<head>
|
||||
<meta charset="UTF-8">
|
||||
<meta name="viewport" content="width=device-width,initial-scale=1">
|
||||
<title>XSynergy AR远程协作 – 高保真原型</title>
|
||||
<style>
|
||||
/* ========== 设计变量 ========== */
|
||||
:root{
|
||||
--primary:#0A7CFF;
|
||||
--secondary:#F0F8FF;
|
||||
--accent:#FFD700;
|
||||
--danger:#FF4D4F;
|
||||
--success:#52C41A;
|
||||
--text:#333333;
|
||||
--text-light:#888888;
|
||||
--white:#FFFFFF;
|
||||
--radius:12px;
|
||||
--gap:16px;
|
||||
--font:"Inter","Source Han Sans",system-ui;
|
||||
}
|
||||
*{box-sizing:border-box;font-family:var(--font);}
|
||||
body{margin:0;background:#f5f5f5;color:var(--text);}
|
||||
h1,h2,h3{font-weight:600;margin:0 0 var(--gap);}
|
||||
p{margin:0 0 8px;}
|
||||
.screen{max-width:375px;margin:20px auto;background:var(--white);min-height:812px;
|
||||
border-radius:var(--radius);overflow:hidden;box-shadow:0 4px 20px rgba(0,0,0,.1);}
|
||||
.header,.footer{display:flex;align-items:center;justify-content:space-between;padding:var(--gap);}
|
||||
.header{background:var(--primary);color:var(--white);}
|
||||
.btn{
|
||||
display:inline-flex;align-items:center;justify-content:center;
|
||||
height:48px;padding:0 24px;border-radius:var(--radius);
|
||||
font-size:16px;font-weight:500;cursor:pointer;border:none;
|
||||
}
|
||||
.btn-primary{background:var(--primary);color:var(--white);}
|
||||
.btn-secondary{background:transparent;color:var(--primary);border:1px solid var(--primary);}
|
||||
.btn-danger{background:var(--danger);color:var(--white);}
|
||||
.btn:disabled{background:#bbb;color:#eee;cursor:not-allowed;}
|
||||
.input,textarea{
|
||||
width:100%;padding:14px;border-radius:var(--radius);border:1px solid #ddd;
|
||||
font-size:16px;margin-bottom:var(--gap);
|
||||
}
|
||||
.input:focus{border-color:var(--primary);outline:none;}
|
||||
.tabs{display:flex;border-top:1px solid #eee;background:var(--white);}
|
||||
.tabs .tab{flex:1;text-align:center;padding:12px 0;font-size:12px;color:var(--text-light);}
|
||||
.tabs .tab.active{color:var(--primary);border-top:2px solid var(--primary);}
|
||||
.card{background:var(--white);border-radius:var(--radius);padding:var(--gap);
|
||||
margin-bottom:var(--gap);box-shadow:0 2px 8px rgba(0,0,0,.05);}
|
||||
.mini-avatar{width:32px;height:32px;border-radius:50%;margin-right:6px;}
|
||||
.empty{text-align:center;padding:60px 20px;color:var(--text-light);}
|
||||
.empty svg{width:80px;height:80px;margin-bottom:12px;fill:#ddd;}
|
||||
.loading{display:flex;justify-content:center;padding:40px;}
|
||||
.spinner{width:32px;height:32px;border:4px solid #eee;border-top:4px solid var(--primary);
|
||||
border-radius:50%;animation:spin 1s linear infinite;}
|
||||
@keyframes spin{to{transform:rotate(360deg);}}
|
||||
</style>
|
||||
</head>
|
||||
<body>
|
||||
|
||||
<!-- 1. 登录页 -->
|
||||
<section class="screen" id="login">
|
||||
<div style="padding:60px 24px 0;text-align:center;">
|
||||
<svg width="64" height="64" viewBox="0 0 64 64" fill="var(--primary)">
|
||||
<circle cx="32" cy="32" r="30" stroke-width="4" fill="none"/>
|
||||
<path d="M32 20v24M20 32h24" stroke-width="4"/>
|
||||
</svg>
|
||||
<h2 style="margin-top:12px;">XSynergy</h2>
|
||||
</div>
|
||||
<div style="padding:40px 24px;">
|
||||
<input class="input" type="tel" placeholder="手机号">
|
||||
<div style="display:flex;gap:8px;">
|
||||
<input class="input" type="text" placeholder="验证码" style="flex:1;">
|
||||
<button class="btn btn-secondary" style="width:120px;">获取验证码</button>
|
||||
</div>
|
||||
<button class="btn btn-primary" style="width:100%;">登录</button>
|
||||
<div style="display:flex;justify-content:space-between;margin-top:12px;font-size:12px;">
|
||||
<label><input type="checkbox"> 记住我</label>
|
||||
<span>忘记密码 | SSO登录</span>
|
||||
</div>
|
||||
</div>
|
||||
</section>
|
||||
|
||||
<!-- 2. 主页 / 仪表盘 -->
|
||||
<section class="screen" id="dashboard">
|
||||
<div class="header">
|
||||
<span>你好,张工</span>
|
||||
</div>
|
||||
<div style="padding:var(--gap);">
|
||||
<button class="btn btn-primary" style="width:100%;margin-bottom:12px;">发起协作</button>
|
||||
<div style="display:flex;gap:12px;">
|
||||
<button class="btn btn-secondary" style="flex:1;">加入协作</button>
|
||||
<button class="btn btn-secondary" style="flex:1;">预约协作</button>
|
||||
</div>
|
||||
<h3 style="margin-top:24px;">今日预约</h3>
|
||||
<div class="card">
|
||||
<div style="display:flex;justify-content:space-between;align-items:center;">
|
||||
<div>
|
||||
<strong>设备年检远程指导</strong>
|
||||
<p style="font-size:12px;color:var(--text-light);">14:00-15:00 · 李经理</p>
|
||||
</div>
|
||||
<span style="background:var(--accent);color:#000;font-size:12px;padding:2px 6px;border-radius:4px;">即将开始</span>
|
||||
</div>
|
||||
<button class="btn btn-primary" style="width:100%;margin-top:8px;">立即加入</button>
|
||||
</div>
|
||||
<div class="empty">
|
||||
<svg viewBox="0 0 24 24"><path d="M12 2C6.48 2 2 6.48 2 12s4.48 10 10 10 10-4.48 10-10S17.52 2 12 2zm-2 15l-5-5 1.41-1.41L10 14.17l7.59-7.59L19 8l-9 9z"/></svg>
|
||||
<p>暂无预约会议,发起一个吧!</p>
|
||||
</div>
|
||||
</div>
|
||||
<div class="tabs">
|
||||
<div class="tab active">首页</div>
|
||||
<div class="tab">通讯录</div>
|
||||
<div class="tab">历史记录</div>
|
||||
<div class="tab">我的</div>
|
||||
</div>
|
||||
</section>
|
||||
|
||||
<!-- 3. 协作中界面 -->
|
||||
<section class="screen" id="session">
|
||||
<!-- 背景为摄像头画面 -->
|
||||
<div style="position:relative;width:100%;height:100%;background:url('https://images.unsplash.com/photo-1581833971358-2c8b550f87b3?auto=format&fit=crop&w=800&q=60') center/cover;">
|
||||
<!-- 顶部状态栏 -->
|
||||
<div class="header" style="background:rgba(0,0,0,.35);position:absolute;top:0;left:0;right:0;">
|
||||
<span>00:12:34</span>
|
||||
<button class="btn btn-danger" style="height:32px;padding:0 12px;">挂断</button>
|
||||
</div>
|
||||
<!-- 画中画视频 -->
|
||||
<div style="position:absolute;right:12px;top:60px;width:100px;height:140px;border-radius:var(--radius);overflow:hidden;border:2px solid var(--white);">
|
||||
<img src="https://images.unsplash.com/photo-1507003211169-0a1dd7228f2d?auto=format&fit=crop&w=320&q=60" width="100" height="140">
|
||||
</div>
|
||||
<!-- 底部控制栏 -->
|
||||
<div style="position:absolute;bottom:0;left:0;right:0;background:rgba(0,0,0,.45);display:flex;justify-content:space-around;padding:12px;">
|
||||
<button class="btn" style="background:none;color:#fff;font-size:12px;">🎤</button>
|
||||
<button class="btn" style="background:none;color:#fff;font-size:12px;">📹</button>
|
||||
<button class="btn" style="background:none;color:#fff;font-size:12px;">✏️</button>
|
||||
<button class="btn" style="background:none;color:#fff;font-size:12px;">📤</button>
|
||||
<button class="btn" style="background:none;color:#fff;font-size:12px;">⋯</button>
|
||||
</div>
|
||||
</div>
|
||||
</section>
|
||||
|
||||
<!-- 4. AR标注模式 -->
|
||||
<section class="screen" id="ar">
|
||||
<!-- 背景同上 -->
|
||||
<div style="position:relative;width:100%;height:100%;background:url('https://images.unsplash.com/photo-1581833971358-2c8b550f87b3?auto=format&fit=crop&w=800&q=60') center/cover;">
|
||||
<div style="position:absolute;bottom:0;left:0;right:0;background:rgba(0,0,0,.6);display:flex;justify-content:space-around;padding:12px;">
|
||||
<button class="btn" style="background:none;color:#fff;font-size:12px;">↗️</button>
|
||||
<button class="btn" style="background:none;color:#fff;font-size:12px;">〰️</button>
|
||||
<button class="btn" style="background:none;color:#fff;font-size:12px;">▭</button>
|
||||
<button class="btn" style="background:none;color:#fff;font-size:12px;">🎨</button>
|
||||
<button class="btn" style="background:none;color:#fff;font-size:12px;">🗑️</button>
|
||||
<button class="btn" style="background:none;color:#fff;font-size:12px;">✖️</button>
|
||||
</div>
|
||||
</div>
|
||||
</section>
|
||||
|
||||
<!-- 5. 历史记录页 -->
|
||||
<section class="screen" id="history">
|
||||
<div class="header">
|
||||
<h2 style="margin:0;font-size:18px;">历史记录</h2>
|
||||
<input class="input" placeholder="搜索会议/联系人" style="height:32px;margin:0 0 0 8px;">
|
||||
</div>
|
||||
<div style="padding:var(--gap);">
|
||||
<div class="card">
|
||||
<strong>设备年检远程指导</strong>
|
||||
<p style="font-size:12px;color:var(--text-light);">2025-09-03 · 60分钟</p>
|
||||
<div style="margin:8px 0;">
|
||||
<img class="mini-avatar" src="https://i.pravatar.cc/32?a=1">
|
||||
<img class="mini-avatar" src="https://i.pravatar.cc/32?a=2">
|
||||
<img class="mini-avatar" src="https://i.pravatar.cc/32?a=3">
|
||||
<span style="font-size:12px;color:var(--text-light);">+2</span>
|
||||
</div>
|
||||
<div style="display:flex;gap:12px;">
|
||||
<button class="btn btn-secondary" style="flex:1;font-size:14px;">回放</button>
|
||||
<button class="btn btn-primary" style="flex:1;font-size:14px;">查看纪要</button>
|
||||
</div>
|
||||
</div>
|
||||
<div class="loading"><div class="spinner"></div></div>
|
||||
</div>
|
||||
</section>
|
||||
|
||||
<!-- 6. 通讯录页 -->
|
||||
<section class="screen" id="contacts">
|
||||
<div class="header">
|
||||
<input class="input" placeholder="搜索姓名/部门/职位" style="margin:0;">
|
||||
</div>
|
||||
<div style="padding:var(--gap);">
|
||||
<div class="card" style="padding:8px var(--gap);">
|
||||
<div style="display:flex;justify-content:space-between;align-items:center;">
|
||||
<span>🖥️ 研发中心</span>
|
||||
<span style="font-size:12px;color:var(--text-light);">32人</span>
|
||||
</div>
|
||||
</div>
|
||||
<div class="card" style="padding:8px var(--gap);">
|
||||
<img class="mini-avatar" src="https://i.pravatar.cc/32?a=4">
|
||||
<span>王工 · 前端负责人</span>
|
||||
</div>
|
||||
</div>
|
||||
</section>
|
||||
|
||||
<!-- 7. 预约协作浮层 -->
|
||||
<section class="screen" id="booking">
|
||||
<div class="header">
|
||||
<button class="btn btn-secondary">取消</button>
|
||||
<h2 style="font-size:18px;">预约协作</h2>
|
||||
<button class="btn btn-primary" disabled>完成</button>
|
||||
</div>
|
||||
<div style="padding:var(--gap);">
|
||||
<input class="input" placeholder="会议主题*">
|
||||
<div class="card" style="display:flex;align-items:center;">
|
||||
<span>参会人员*</span>
|
||||
<button style="margin-left:auto;font-size:24px;background:none;border:none;color:var(--primary);">+</button>
|
||||
</div>
|
||||
<input class="input" type="datetime-local" value="2025-09-04T14:00">
|
||||
<input class="input" type="datetime-local" value="2025-09-04T15:00">
|
||||
<textarea class="input" rows="3" placeholder="会议描述(可选)"></textarea>
|
||||
</div>
|
||||
</section>
|
||||
|
||||
<!-- 8. 会议纪要页 -->
|
||||
<section class="screen" id="minutes">
|
||||
<div class="header">
|
||||
<h2 style="margin:0;font-size:18px;">设备年检远程指导</h2>
|
||||
</div>
|
||||
<div style="padding:var(--gap);">
|
||||
<p style="font-size:12px;color:var(--text-light);">2025-09-03 · 60分钟 · 5人</p>
|
||||
<div class="card">
|
||||
<h3>会议摘要</h3>
|
||||
<p>针对A栋机房UPS年检,远程专家指导现场完成电池组检测…</p>
|
||||
</div>
|
||||
<div class="card">
|
||||
<h3>关键决策</h3>
|
||||
<ul style="padding-left:16px;font-size:14px;">
|
||||
<li>更换第3组电池</li>
|
||||
<li>下周三复测</li>
|
||||
</ul>
|
||||
</div>
|
||||
<div class="card">
|
||||
<h3>待办事项</h3>
|
||||
<label style="display:flex;align-items:center;font-size:14px;margin-bottom:6px;">
|
||||
<input type="checkbox" style="margin-right:8px;"> 采购电池组(王工,截止9/10)
|
||||
</label>
|
||||
</div>
|
||||
<div style="display:flex;gap:12px;margin-top:24px;">
|
||||
<button class="btn btn-secondary" style="flex:1;">下载纪要</button>
|
||||
<button class="btn btn-primary" style="flex:1;">播放回放</button>
|
||||
</div>
|
||||
</div>
|
||||
</section>
|
||||
|
||||
<!-- 9. “我的”页面 -->
|
||||
<section class="screen" id="me">
|
||||
<div style="padding:var(--gap);text-align:center;">
|
||||
<img src="https://i.pravatar.cc/80?a=5" style="border-radius:50%;width:80px;height:80px;">
|
||||
<h2 style="margin:8px 0 2px;">张工</h2>
|
||||
<p style="font-size:12px;color:var(--text-light);">研发中心 · 高级工程师</p>
|
||||
</div>
|
||||
<div style="padding:0 var(--gap);">
|
||||
<div class="card" style="padding:12px var(--gap);">个人资料</div>
|
||||
<div class="card" style="padding:12px var(--gap);">设置</div>
|
||||
<div class="card" style="padding:12px var(--gap);">帮助与反馈</div>
|
||||
<div class="card" style="padding:12px var(--gap);">关于我们</div>
|
||||
</div>
|
||||
<div style="padding:var(--gap);">
|
||||
<button class="btn btn-danger" style="width:100%;">退出登录</button>
|
||||
</div>
|
||||
</section>
|
||||
|
||||
<!-- 10. 空/加载/错误状态示例 -->
|
||||
<section class="screen" id="empty">
|
||||
<div class="empty">
|
||||
<svg viewBox="0 0 24 24"><path d="M12 2C6.48 2 2 6.48 2 12s4.48 10 10 10 10-4.48 10-10S17.52 2 12 2zm5 11h-4v4h-2v-4H7v-2h4V7h2v4h4v2z"/></svg>
|
||||
<h3>暂无数据</h3>
|
||||
<p>这里空空如也~</p>
|
||||
</div>
|
||||
</section>
|
||||
|
||||
<section class="screen" id="error">
|
||||
<div class="empty">
|
||||
<svg viewBox="0 0 24 24"><path d="M12 2C6.48 2 2 6.48 2 12s4.48 10 10 10 10-4.48 10-10S17.52 2 12 2zm1 15h-2v-2h2v2zm0-4h-2V7h2v6z"/></svg>
|
||||
<h3>网络连接失败</h3>
|
||||
<button class="btn btn-primary">点击重试</button>
|
||||
</div>
|
||||
</section>
|
||||
|
||||
</body>
|
||||
</html>
|
||||
18
prd.md
18
prd.md
@@ -26,7 +26,7 @@ XSynergy是一款面向企业用户的AR远程协作应用。它通过结合实
|
||||
* **用户故事**:作为一名企业员工,我希望可以通过我的企业账号(如SSO、手机号/验证码)安全地登录APP,以便访问我的协作空间和组织信息。
|
||||
* **功能描述**:
|
||||
1. 支持手机号+验证码登录方式。
|
||||
2. 支持企业单点登录(SSO)。
|
||||
2. 支持企业单点登录(SSO),登录企业LDAP账户。
|
||||
3. 提供“记住我”功能,保持登录状态。
|
||||
4. 包含“忘记密码”流程(针对非SSO用户)。
|
||||
* **验收标准**:用户可以成功登录并进入APP主界面;登录失败时有明确的错误提示。
|
||||
@@ -115,9 +115,11 @@ XSynergy是一款面向企业用户的AR远程协作应用。它通过结合实
|
||||
* **FR-2.4.2 AI知识库查询**
|
||||
* **用户故事**:作为现场人员,在协作过程中,我希望能通过一个对话框,快速查询公司内部知识库(如设备故障手册、标准操作流程),以便快速找到参考信息。
|
||||
* **功能描述**:
|
||||
1. 会议界面提供一个“AI助手”入口,点击或语音激活后弹出对话框。
|
||||
2. 用户输入自然语言问题(如“E-101泵的常见故障代码及解决方案”)。
|
||||
3. AI助手基于后台接入的企业知识库进行检索,并以对话形式返回最相关的答案和文档链接。
|
||||
1. 会议中界面提供一个“AI助手”入口,点击或语音激活后在左侧弹出对话框。
|
||||
2. 提供弹出显示对话框显示,提供“收回”按钮控制对话框隐藏
|
||||
3. 用户输入自然语言问题(如“E-101泵的常见故障代码及解决方案”)。
|
||||
4. AI助手基于后台接入的企业知识库进行检索,并以对话形式返回最相关的答案和文档链接。
|
||||
5. 在底部导航中加入“AI助手”入口,供用户非会议时间使用。
|
||||
* **验收标准**:AI助手能理解用户意图,并从知识库中返回准确、相关的答案。
|
||||
|
||||
### **2.5 其他模块 (Miscellaneous)**
|
||||
@@ -137,6 +139,14 @@ XSynergy是一款面向企业用户的AR远程协作应用。它通过结合实
|
||||
3. 支持按姓名、部门、职位进行搜索。
|
||||
4. 点击人员可查看其联系方式并直接发起协作。
|
||||
* **验收标准**:组织架构数据准确,搜索功能可用,能快速定位到目标同事。
|
||||
* **FR-2.5.3 会议纪要**
|
||||
* **用户故事**:作为一名项目经理或未能参会的人员,我希望能随时查看历史会议的会议纪要,以便了解会议摘要、关键决策、待办事项。
|
||||
* **功能描述**:
|
||||
1. 所有协作会话可以手动开启/关闭AI会议纪要功能。
|
||||
2. 用户可以在“历史记录”中找到过去的会议列表。
|
||||
3. 点击卡片式列表中“会议纪要”按钮,即可打开“会议纪要”页面查看纪要,纪要需完整包含参会人、会议开始时间和结束时间、会议摘要、关键决策、待办事项。
|
||||
4. 纪要页面提供“查看回放”按钮,提供会议回放功能。
|
||||
* **验收标准**:回放内容与实际协作过程完全一致,播放流畅。
|
||||
|
||||
### **3\. 非功能性需求 (Non-Functional Requirements)**
|
||||
|
||||
|
||||
Reference in New Issue
Block a user