Files
Agent-n8n/doc/订单班文档资料/智能开发/附件项目/index.html
Yep_Q 9ab8cf48ab feat: 完成12个订单班AI Agent架构设计
完成内容:
- 创建AI Agent架构设计文档,定义100+专业Agent
- 创建orderClasses.json统一配置文件
- 每个订单班配置7-9个专业Agent
- 定义4种Agent协作模式:串行、并行、主从、迭代
- 文档和资源重新组织整理

🤖 Generated with Claude Code

Co-Authored-By: Claude <noreply@anthropic.com>
2025-09-28 15:57:17 +08:00

341 lines
11 KiB
HTML
Executable File
Raw Blame History

This file contains invisible Unicode characters

This file contains invisible Unicode characters that are indistinguishable to humans but may be processed differently by a computer. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<link rel="stylesheet" href="./assets/font-awesome/css/all.min.css">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>GemDesign</title>
<script src="./assets/javascript/vue.global.js"></script>
<style>
* {
margin: 0;
padding: 0;
font-size: 14px;
}
body {
height: 100vh;
margin: 0; /* 去掉默认的边距 */
padding: 0; /* 去掉默认的内边距 */
display: flex; /* 使用 flexbox 布局 */
flex-direction: column; /* 垂直排列内容 */
min-height: 100vh; /* 确保 body 至少占满视口高度 */
font-size: 14px;
}
body #app{
height: 100%;
}
.iframePC {
width: 100%; /* 设置 iframe 宽度为 100% */
border: none; /* 去掉边框 */
height: 100%;
}
.ai-tag {
width: 208px;
height: 40px;
padding-right: 12px;
border-radius: 6px;
background: #171313;
display: flex;
align-items: center;
justify-content: center;
cursor: pointer;
position: fixed;
right: 20px;
bottom: 28px;
z-index: 9999;
}
.ai-tag .custom-text-prefix {
font-weight: 400;
font-size: 12px;
line-height: 24px;
font-family: Source Han Sans CN, Source Han Sans CN;
text-align: left;
font-style: normal;
color: #ADB5C1;
text-transform: none;
line-height: 38px;
}
.ai-tag .custom-text-sufix {
font-weight: 700;
font-size: 12px;
line-height: 24px;
font-family: Source Han Sans CN, Source Han Sans CN;
text-align: left;
font-style: normal;
color: #FFFFFF;
text-transform: none;
line-height: 38px;
}
.ai-tag img.img-logo {
width: 22px;
margin: 0 6px;
}
.ai-tag img.ai-tag-close {
width: 8px;
position: absolute;
top: 6px;
right: 6px;
object-fit: none;
}
</style>
<style>
/* app样式 */
.preview-suitable-app{
height: 100%;
width: 100%;
display: flex;
align-items: center;
justify-content: center;
}
.preview-suitable-content-app{
height: calc(100% - 12px);
display: flex;
align-items: center;
justify-content: center;
}
.app-border{
position: relative;
border-radius: 30px 30px 30px 30px;
border: 4px solid rgb(51, 51, 51);
overflow:hidden;
}
.preview-suitable-app iframe{
height: 100%;
width: 100%;
border: none; /* 去掉边框 */
}
.preview-web{
width: 100%;
height: 100%;
display: flex;
justify-content:center;
align-items: center;
overflow: hidden;
}
.preview-web iframe{
flex-shrink: 0
}
</style>
<style>
/* 页面顶部样式 */
.w-70px{
width: 70px;
}
.w-140px{
width: 140px;
}
.w-260px{
width: 260px;
}
.h-28px{
height: 28px;
}
.h-48px{
height: 48px;
}
.h-40px{
height: 40px;
}
.h-32px{
height: 32px;
}
.page-top{
color: #333333;
}
.appName{
font-size: 16px;
margin-right: 30px;
}
.previewList{
width: 140px;
overflow: hidden !important;
text-overflow: ellipsis;
white-space: nowrap;
}
.previewList .first-option {
position: relative;
}
.previewList .first-option:after {
content: '';
width: 100%;
height: 1px;
position: absolute;
bottom: -3px;
left: 0;
background-color: #dbdbdb;
}
.previewList .option-item:hover {
background-color: #3C8EFF;
}
.previewList .option-item.selected {
background-color: #3C8EFF;
}
/* 全局下拉框样式重置 */
select.previewList {
padding: 5px 11px;
}
select.previewList option {
margin-bottom: 5px;
}
/* 禁用焦点样式 */
select option:focus {
outline: none !important;
background-color: transparent !important;
}
select.previewList option:checked,
select.previewList option:checked:focus {
}
.tool-right {
display: flex;
align-items: center;
gap: 16px;
margin-right: 20px;
}
.ml-16px {
margin-left: 16px;
}
.ml-10px {
margin-left: 10px;
}
.mr-10px {
margin-right: 10px;
}
.page{
height: calc(100% - 48px);
}
.page.preview{
height: 100%;
}
.page-content{
background: #F2F3F6;
}
/* 页面列表 */
.page-left{
font-size: 12px;
line-height: 16px;
color: #333333;
}
.tree-menu {
height: calc( 100% - 40px) ;
overflow: auto;
}
.tip {
position: fixed;
bottom: 30px;
left: 50%;
transform: translateX(-50%);
width: 410px;
height: 46px;
display: flex;
align-items: center;
justify-content: center;
background: #FFFFFF;
box-shadow: 0px 0px 20px 0px rgba(163,170,190,0.3);
border-radius: 200px 200px 200px 200px;
font-size: 14px;
color: #3D3D3D;
gap: 10px;
}
</style>
<script src="./assets/css/tailwindcss.css"></script>
<script src="./assets/javascript/tool.js"></script>
<script src="./assets/javascript/initData.js"></script>
</head>
<body>
<div id="app">
<div class="page-top" v-if="!isPreview">
<div class="flex justify-between items-center border-b h-48px">
<div class="flex items-center">
<h1 class="appName ml-16px font-bold">{{appName}}</h1>
<p style="line-height: 16px;">当前页面:{{pageName}}</p>
</div>
<div class="flex items-center">
<span class="mr-[8px] text-[#666666]">尺寸:</span>
<select class="mr-[8px] rounded previewList w-140px h-28px outline-none bg-[#F3F3F3] pl-[7px] pr-[11px] text-[13px]" v-model="previewSize">
<option :class="`option-item w-[140px] text-[13px] h-[26px] mb-[5px] px-[6px] hover:bg-[#0000000a] ${!index && 'first-option' || ''} ${'selected'&& previewSize === opt.value||'' }`" v-for="(opt, index) in previewSizeOptions" :key="opt.value" :value="opt.value" :w="opt.w" :h="opt.h">{{opt.label}}</option>
</select>
<input type="text" @change="changeAutoSize" :disabled="!(previewSize==='auto')" v-model="previewSizeW" class="rounded text-center outline-none w-70px h-28px bg-[#F3F3F3]">
<span>×</span>
<input type="text" @bur="changeAutoSize" :disabled="!(previewSize==='auto')" v-model="previewSizeH" class="rounded text-center outline-none w-70px h-28px bg-[#F3F3F3]">
</div>
<div class="tool-right">
<img @click="toPreview" src="./assets/img/show.png" alt="">
<img @click="changeCurrentIndex(-1)" :src="currentIndex === 0 ? './assets/img/left-not.png' : './assets/img/left-on.png'" alt="">
<img @click="changeCurrentIndex(1)" :src="currentIndex === pageList.length - 1 ? './assets/img/right-not.png': './assets/img/right-on.png'" alt="">
</div>
</div>
</div>
<div :class="['page', 'flex', {'preview': isPreview || !appName}]">
<div class="page-left flex-[0_0_197px] border-r" v-if="!isPreview && appName">
<div class="border-b h-40px flex items-center">
<h2 class="ml-12px px-4 font-black">页面列表</h2>
</div>
<div class="tree-menu px-[10px] pt-[10px]">
<tree-node
v-for="(node, index) in treeData"
:key="node.id"
:node="node"
@node-click="handleChangePage"
:selectId="pageUuid" >
</tree-node>
</div>
</div>
<div class="page-content" :style="{width:!isPreview && appName ? 'calc(100vw - 197px)': '100%', padding: appName && !isPreview ? '5px' : '', background:pageType === 'app'?'#ffffff':'#F2F3F6'}">
<div v-if="pageType === 'app'" class="preview-suitable-app">
<div class="preview-suitable-content-app">
<div class="app-border">
<div :style="{width:previewSizeW+'px',height:previewSizeH+'px'}">
<template v-if="isHtml">
<iframe @load="loadHtmlIframe" id="iframeApp" style="border: none;"></iframe>
</template>
<template v-else>
<iframe id="vueIframeApp" style="border: none;" :src="url" @load="vueIfameloaded"></iframe>
</template>
</div>
</div>
</div>
</div>
<div v-else class="preview-web">
<template v-if="isHtml">
<iframe id="iframe" @load="loadHtmlIframe" :style="{width:previewSizeW+'px',height:previewSizeH+'px'}" class="iframePC" style="border: none;"></iframe>
</template>
<template v-else>
<iframe id="vueIframeWeb" :style="{width:previewSizeW+'px',height:previewSizeH+'px'}" :src="url" @load="vueIfameloaded"></iframe>></iframe>
</template>
</div>
<div class="ai-tag">
<span class="custom-text-prefix">Designed by</span>
<img id="dynamicLogo" class="img-logo" src="./assets/img/ai-tag-design-img.png"/>
<span id="dynamicText" class="custom-text-sufix">GemDesign</span>
<img class="ai-tag-close" src="./assets/img/ai-tag-close.png"/>
</div>
</div>
</div>
<div v-if="isPreview && isShowTip" class="tip">
<p>按Esc键显示操作面板</p>
<img src="./assets/img/left-esc.png" alt="">
<img src="./assets/img/right-esc.png" alt="">
<p>可切换页面</p>
</div>
</div>
<script src="./assets/javascript/index.js"></script>
<script>
window.addEventListener('load', function() {
document.querySelector('.ai-tag img.ai-tag-close')?.addEventListener('click', (e) => {
e.stopPropagation()
document.querySelector('.ai-tag').style.display = 'none'
})
document.querySelector('.ai-tag')?.addEventListener('click', () => {
window.open(`${window.location.origin}/#/?ci=fx`)
})
});
</script>
</body>
</html>