接口文档
接口名称
生成页面代码接口
接口地址
https://admin.scriptecho.cn/api/ai/chat/genPageComplete
请求方式
POST
请求头
参数名 | 值 |
---|---|
Content-Type | application/json |
User-Agent | Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/131.0.0.0 Safari/537.36 |
X-Access-Token | 可在个人信息-Token生成页面配置 |
请求体
{
"projectId": "eb63b8d99d391c3eea858f3b2894f1e8",
"prompt": "",
"imgPrompt": "data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAA40AAAQoCAYAAACuIjvqAAAAAXNSR0IArs4c6QAAAAlwSFlzAAALEAAACxABrSO9dQAAIABJhHfeOo7PfO4TEuSMlIgv4HDoq1YIAvEmjSxyoYXxm8xoHHPh7XuteLxyHTak2JEUNPaw4P+RErECWQsIjVk3j8oRIECAAAECBAgQIEAgrYDQmNZf6QQIECBAgAABAgQIEMhaQGjMunlUjgABAgQIECBAgAABAmkFhMa0/konQIAAAQIECBAgQIBA1gJCY9bNo3IECBAgQIAAAQIECBBIK/A/2oCLBCThvYsAAAAASUVORK5CYII=",
"pageTitle": "TestPage1",
"pageCode": "Tb891",
"modelName": "gpt-4o-mini"
}
请求参数说明
参数名 | 类型 | 必填 | 说明 |
---|---|---|---|
projectId | string | 是 | 项目ID |
prompt | string | 否 | 提示文本提示词 |
imgPrompt | string | 是 | 图像提示(Base64编码) |
pageName | string | 是 | 页面名称 |
pageTitle | string | 是 | 页面标题 |
pageCode | string | 是 | 页面编码,不可重复 |
modelName | string | 是 | 模型名称,支持的模型见模型费用说明 |
响应示例
{
"success": true,
"message": "",
"code": 200,
"result": {
"blockId": "d6fe14d885e4482d802d30a9ca593fec",
"code": "<template>\n<div class=\"container mx-auto p-4\">\n <div class=\"grid grid-cols-12 gap-4\">\n <div class=\"col-start-1 col-span-8 row-start-1 row-span-4 bg-gray-200 shadow\"> <BlockStatus id=\"4bdadd58a5624ce48e03fd3a846a5b4e\" class=\"script-echo-block\" status=\"loading\" />\n </div>\n <div class=\"col-start-9 col-span-4 row-start-1 row-span-4 bg-gray-200 shadow\"> <BlockStatus id=\"02100a9f13a746c19ce26aadf907fbc0\" class=\"script-echo-block\" status=\"loading\" />\n </div>\n <div class=\"col-start-1 col-span-4 row-start-6 row-span-4 bg-gray-200 shadow\"> <BlockStatus id=\"62ec9a5d6d3246b7b0fa65b949da4800\" class=\"script-echo-block\" status=\"loading\" />\n </div>\n <div class=\"col-start-5 col-span-8 row-start-6 row-span-4 bg-gray-200 shadow\"> <BlockStatus id=\"d6fe14d885e4482d802d30a9ca593fec\" class=\"script-echo-block\" status=\"loading\" />\n </div>\n </div>\n</div></template>\n<script setup>\nimport { ref, h } from 'vue';\n\n</script>\n",
"blocks": [
{
"code": "<template>\n <div class=\"w-full p-0 m-0 bg-white\">\n <div class=\"flex justify-between items-center mb-2\">\n <h3 class=\"text-lg font-medium\">Profit Growth</h3>\n <div class=\"flex items-center\">\n <span class=\"text-red-500 font-medium mr-1\">8,550</span>\n <span class=\"text-red-500\">↓25.36%</span>\n </div>\n </div>\n <div class=\"flex justify-end mb-2\">\n <div class=\"flex items-center\">\n <span class=\"inline-block w-3 h-3 rounded-full bg-blue-500 mr-1\"></span>\n <span class=\"text-xs\">Orders</span>\n <span class=\"mx-2 inline-block w-3 h-3 rounded-full bg-purple-300\"></span>\n <span class=\"text-xs\">Sales</span>\n </div>\n </div>\n <div style=\"width: 100%; height: 200px;\">\n <canvas id=\"myChart\"></canvas>\n </div>\n </div>\n</template>\n\n<script lang=\"ts\">\nimport { onMounted, ref, h } from 'vue';\n\n\nimport { Chart, registerables } from 'chart.js';\n\nChart.register(...registerables);\n\n\nexport default {\n setup() {\n onMounted(() => {\n const ctx = document.getElementById('myChart') as HTMLCanvasElement;\n const myChart = new Chart(ctx, {\n type: 'bar',\n data: {\n labels: ['Jan', 'Feb', 'Mar', 'Apr', 'May', 'Jun', 'Jul', 'Aug', 'Sep', 'Oct'],\n datasets: [{\n label: 'Orders',\n data: [10, 50, 35, 28, 38, 78, 32, 10, 50, 60],\n backgroundColor: 'rgba(147, 197, 253, 0.5)',\n },\n {\n label: 'Sales',\n data: [28, 28, 35, 10, 4, 58, 8, 38, 28, 68],\n backgroundColor: 'rgba(216, 191, 216, 0.5)',\n }],\n },\n options: {\n scales: {\n y: {\n beginAtZero: true,\n max: 80,\n ticks: {\n stepSize: 16,\n }\n }\n },\n plugins:{\n legend:{\n display:false\n }\n }\n }\n });\n });\n return {};\n },\n};\n</script>\n",
"name": "ProfitGrowthChart.vue"
},
{
"code": "<template>\n <div class=\"w-full p-0 m-0 bg-white\">\n <div class=\"flex justify-between items-center px-4 py-2\">\n <h2 class=\"text-lg font-medium\">Monthly Earning</h2>\n <div class=\"flex space-x-2\">\n <button class=\"bg-indigo-600 text-white px-3 py-1 rounded-md\">Today</button>\n <button class=\"bg-gray-200 text-gray-700 px-3 py-1 rounded-md\">Week</button>\n <button class=\"bg-gray-200 text-gray-700 px-3 py-1 rounded-md\">Month</button>\n </div>\n </div>\n <div class=\"p-4\">\n <div class=\"relative w-full h-[300px]\">\n <canvas id=\"chart\"></canvas>\n </div>\n </div>\n </div>\n</template>\n\n<script lang=\"tsx\">\nimport { onMounted, ref, h } from 'vue';\n\n\nimport { Chart, registerables } from 'chart.js';\n\nChart.register(...registerables);\n\nexport default {\n setup() {\n const chartData = ref({\n labels: ['2h', '4h', '6h', '8h', '10h', '12h', '14h', '16h', '18h', '20h', '22h', '24h'],\n datasets: [\n {\n label: 'Earning',\n data: [20000, 35000, 30000, 50000, 40000, 55000, 40000, 75000, 30000, 40000, 35000, 60000],\n borderColor: '#6f42c1',\n fill: true,\n backgroundColor: 'rgba(111, 66, 193, 0.1)',\n tension: 0.4\n }\n ]\n });\n const chartOptions = ref({\n responsive: true,\n scales: {\n y: {\n beginAtZero: true,\n ticks: {\n callback: function (value, index, values) {\n return value / 1000 + 'k';\n }\n }\n }\n }\n })\n\n onMounted(() => {\n const ctx = document.getElementById('chart') as HTMLCanvasElement;\n new Chart(ctx, {\n type: 'line',\n data: chartData.value,\n options: chartOptions.value\n });\n });\n\n return {\n chartData,\n chartOptions\n }\n }\n};\n</script>\n\n<style scoped>\n\n</style>\n",
"name": "MonthlyEarningChart.vue"
},
{
"code": "<template>\n <div class=\"w-full bg-white p-0 m-0\">\n <div class=\"flex justify-between items-center px-4 py-2\">\n <div class=\"text-lg font-medium\">Total Earning</div>\n <div class=\"text-sm text-gray-500\">(Last) 10 Months</div>\n </div>\n <div class=\"flex justify-between items-center px-4 py-2\">\n <div class=\"text-3xl font-bold text-green-500\">$8550</div>\n <div class=\"text-sm text-green-500\">个25.36%</div>\n </div>\n <div id=\"chart\" class=\"min-h-[300px]\"></div>\n </div>\n</template>\n\n<script lang=\"ts\" setup>\nimport { onMounted, ref, h } from 'vue';\n\n\nimport * as echarts from 'echarts';\n\nonMounted(() => {\n const chart = echarts.init(document.getElementById('chart'));\n const option = {\n xAxis: {\n type: 'category',\n data: ['Jan', 'Feb', 'Mar', 'Apr', 'May', 'Jun', 'July', 'Aug', 'Sep', 'Oct']\n },\n yAxis: {\n type: 'value',\n axisLabel: {\n formatter: '{value}k'\n }\n },\n series: [\n {\n data: [20000, 38000, 30000, 45000, 35000, 60000, 55000, 70000, 60000, 80000],\n type: 'line',\n lineStyle: {\n color: '#8000ff'\n }\n }\n ]\n };\n chart.setOption(option);\n});\n</script>\n",
"name": "TotalEarningChart.vue"
},
{
"code": "<template>\n <div class=\"w-full p-0 m-0 bg-white\">\n <div class=\"p-4\">\n <h2 class=\"text-xl font-bold mb-4\">Active User</h2>\n <div class=\"flex justify-end mb-4\">\n <v-btn color=\"purple-darken-1\" variant=\"outlined\" class=\"mx-2\">Year</v-btn>\n <v-btn color=\"purple-darken-1\" variant=\"outlined\" class=\"mx-2\">Week</v-btn>\n <v-btn color=\"purple-darken-1\" variant=\"outlined\" class=\"mx-2\">Month</v-btn>\n </div>\n <v-table>\n <thead>\n <tr>\n <th class=\"text-left\">USERNAME NAME</th>\n <th class=\"text-left\">COMPANY</th>\n <th class=\"text-left\">PRODUCT</th>\n <th class=\"text-left\">REVENUE</th>\n <th class=\"text-left\">STATUS</th>\n </tr>\n </thead>\n <tbody>\n <tr v-for=\"user in users\" :key=\"user.name\">\n <td>\n <div class=\"flex items-center\">\n <v-avatar size=\"32\" color=\"grey lighten-2\">\n <span class=\"text-base text-gray-800 font-medium\">{{ user.name.charAt(0) }}</span>\n </v-avatar>\n <span class=\"ml-2\">{{ user.name }}</span>\n </div>\n </td>\n <td>{{ user.company }}</td>\n <td>{{ user.product }}</td>\n <td>{{ user.revenue }}</td>\n <td>{{ user.status }}</td>\n </tr>\n </tbody>\n </v-table>\n </div>\n </div>\n</template>\n\n<script lang=\"ts\" setup>\nimport { ref, h } from 'vue';\n\n\n\nconst users = ref([\n { name: 'Robert Clinton', company: 'Samsung', product: 'Smart Phone', revenue: '$38,536', status: 'Done' },\n { name: 'Michael Johnson', company: 'Asus', product: 'Laptop', revenue: '$20,573', status: 'Done' },\n { name: 'Daniel White', company: 'Google', product: 'Watch', revenue: '$17,457', status: 'Pending' },\n { name: 'Chris Barin', company: 'Apple', product: 'Computer', revenue: '$15,354', status: 'Done' },\n { name: 'Daniel Pink', company: 'Panasonic', product: 'Sunglass', revenue: '$12,354', status: 'Done' },\n]);\n</script>\n",
"name": "ActiveUserTable.vue"
}
],
"pageVersionId": "728b9691c05069a61969c5f66c901480",
"name": "T904.vue",
"pageId": "9d8980bc902ac147e86d166c9f0b9bc6",
"blockVersionId": "1111cee83bdd9afa56e52da983c83c54"
},
"timestamp": 1740565593908
}
响应参数说明
参数名 | 类型 | 说明 |
---|---|---|
success | boolean | 请求是否成功,true 为成功 |
message | string | 响应消息,成功时为空字符串 |
code | int | HTTP 状态码,200 代表请求成功 |
result | object | 响应的具体结果 |
result.blockId | string | 块的唯一标识 |
result.code | string | 生成的 HTML 代码,用于页面布局 |
result.pageVersionId | string | 页面版本的唯一标识 |
result.pageId | string | 页面的唯一标识 |
result.blocks | array | 组件数组,包含多个组件信息 |
result.blocks[].code | string | 组件的 HTML 代码 |
result.blocks[].name | string | 组件的文件名 |
result.name | string | 主组件的文件名 |
result.blockVersionId | string | 块版本的唯一标识 |
timestamp | int | 响应生成的时间戳(毫秒) |