diff --git a/frontend/index.html b/frontend/index.html
new file mode 100644
index 0000000..ebac447
--- /dev/null
+++ b/frontend/index.html
@@ -0,0 +1,197 @@
+
+
+
+
+ amis admin
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/frontend/pages/question.json b/frontend/pages/question.json
new file mode 100644
index 0000000..4d6c1e5
--- /dev/null
+++ b/frontend/pages/question.json
@@ -0,0 +1,152 @@
+{
+ "type": "page",
+ "body": [
+ {
+ "title": "查询条件",
+ "type": "form",
+ "target": "dataTable",
+ "body": [
+ {
+ "type": "input-text",
+ "name": "keyword",
+ "label": "关键字:"
+ }
+ ],
+ "submitText": "搜索"
+ },
+ {
+ "type": "crud",
+ "name": "dataTable",
+ "api": {
+ "method": "post",
+ "url": "/api/car/amis/list",
+ "data": {
+ "page": "${page}",
+ "size": "${perPage}",
+ "keyword": "$keyword"
+ }
+ },
+ "mode": "cards",
+ "data": {
+ "answerMap": [
+ "",
+ "",
+ "",
+ "",
+ "A",
+ "B",
+ "C",
+ "D",
+ "E",
+ "F",
+ "G",
+ "H"
+ ]
+ },
+ "columnsCount": 1,
+ "card": {
+ "body": [
+ {
+ "name": "id",
+ "label": "id",
+ "hidden": true
+ },
+ {
+ "name": "question_id",
+ "label": "题目id",
+ "hidden": true
+ },
+ {
+ "name": "keywords",
+ "label": "关键字",
+ "hidden": true
+ },
+ {
+ "name": "answer",
+ "label": "答案",
+
+ "type": "tpl",
+ "tpl": "<%= data.answerMap.filter((_,index)=>{return (data.answer).toString(2).split('').reverse()[index] == '1'}) %>"
+
+ },
+ {
+ "name": "question",
+ "label": "题目"
+ },
+ {
+ "name": "media_content",
+ "label": "图片",
+ "width": "400px",
+ "height": "300px",
+ "type": "image",
+ "enlargeAble": true,
+ "hiddenOn": "this.media_content == 'None'"
+ },
+ {
+ "name": "option_a",
+ "label": "A",
+ "hiddenOn": "this.option_a.length == 0"
+ },
+ {
+ "name": "option_b",
+ "label": "B",
+ "hiddenOn": "this.option_b.length == 0"
+ },
+ {
+ "name": "option_c",
+ "label": "C",
+ "hiddenOn": "this.option_c.length == 0"
+ },
+ {
+ "name": "option_d",
+ "label": "D",
+ "hiddenOn": "this.option_d.length == 0"
+ },
+ {
+ "name": "option_e",
+ "label": "E",
+ "hiddenOn": "this.option_e.length == 0"
+ },
+ {
+ "name": "option_f",
+ "label": "F",
+ "hiddenOn": "this.option_f.length == 0"
+ },
+ {
+ "name": "option_g",
+ "label": "G",
+ "hiddenOn": "this.option_g.length == 0"
+ },
+ {
+ "name": "option_h",
+ "label": "H",
+ "hiddenOn": "this.option_h.length == 0"
+ },
+ {
+ "name": "explain",
+ "label": "解析",
+ "body": "$explain"
+ },
+ {
+ "name": "illiteracy_explain",
+ "label": "相关规定"
+ },
+ {
+ "name": "knack",
+ "label": "窍门"
+ },
+ {
+ "name": "concise_explain",
+ "label": "简单解析"
+ },
+ {
+ "name": "wrong_rate",
+ "label": "错误率",
+ "type": "tpl",
+ "tpl": "${wrong_rate * 100}%"
+ }
+ ]
+ }
+ }
+ ]
+}
diff --git a/frontend/pages/site.json b/frontend/pages/site.json
new file mode 100644
index 0000000..bd4c660
--- /dev/null
+++ b/frontend/pages/site.json
@@ -0,0 +1,23 @@
+{
+ "status": 0,
+ "msg": "",
+ "data": {
+ "pages": [
+ {
+ "label": "Home",
+ "url": "/",
+ "redirect": "/index"
+ },
+ {
+ "label": "题库",
+ "children": [
+ {
+ "label": "题库",
+ "url": "/index",
+ "schemaApi": "get:/pages/question.json"
+ }
+ ]
+ }
+ ]
+ }
+}
diff --git a/frontend/public/logo.png b/frontend/public/logo.png
new file mode 100644
index 0000000..c9ea77e
Binary files /dev/null and b/frontend/public/logo.png differ
diff --git a/frontend/x-pages/console.json b/frontend/x-pages/console.json
new file mode 100644
index 0000000..cb7a8a9
--- /dev/null
+++ b/frontend/x-pages/console.json
@@ -0,0 +1,5 @@
+{
+ "type": "page",
+ "title": "Dashboard",
+ "body": "body..."
+}
diff --git a/frontend/x-pages/crud-advance.json b/frontend/x-pages/crud-advance.json
new file mode 100644
index 0000000..cd94597
--- /dev/null
+++ b/frontend/x-pages/crud-advance.json
@@ -0,0 +1,274 @@
+{
+ "type": "page",
+ "title": "复杂表单",
+ "subTitle": "展示表格编辑、联动等等",
+ "body": [
+ {
+ "type": "form",
+ "mode": "horizontal",
+ "title": "",
+ "affixFooter": true,
+ "api": "https://3xsw4ap8wah59.cfc-execute.bj.baidubce.com/api/amis-mock/form/save",
+ "actions": [
+ {
+ "label": "保存",
+ "type": "submit",
+ "level": "success"
+ }
+ ],
+ "controls": [
+ {
+ "type": "fieldSet",
+ "title": "基本配置",
+ "controls": [
+ {
+ "type": "text",
+ "label": "任务名称",
+ "name": "title",
+ "size": "md",
+ "required": true
+ },
+
+ {
+ "type": "textarea",
+ "label": "任务描述",
+ "name": "description",
+ "size": "md"
+ },
+
+ {
+ "label": "任务频率",
+ "type": "radios",
+ "name": "repeat",
+ "inline": true,
+ "value": "none",
+ "required": true,
+ "options": [
+ {
+ "label": "不重复",
+ "value": "none"
+ },
+
+ {
+ "label": "每天",
+ "value": "day"
+ },
+
+ {
+ "label": "每周",
+ "value": "week"
+ },
+
+ {
+ "label": "每月",
+ "value": "month"
+ }
+ ]
+ },
+
+ {
+ "label": "每天几点",
+ "type": "select",
+ "name": "time",
+ "multiple": true,
+ "required": true,
+ "extractValue": true,
+ "visibleOn": "this.repeat == \"day\"",
+ "inline": true,
+ "options": [
+ {"value": 0, "label": "0:00"},
+ {"value": 1, "label": "1:00"},
+ {"value": 2, "label": "2:00"},
+ {"value": 3, "label": "3:00"},
+ {"value": 4, "label": "4:00"},
+ {"value": 5, "label": "5:00"},
+ {"value": 6, "label": "6:00"},
+ {"value": 7, "label": "7:00"},
+ {"value": 8, "label": "8:00"},
+ {"value": 9, "label": "9:00"},
+ {"value": 10, "label": "10:00"},
+ {"value": 11, "label": "11:00"},
+ {"value": 12, "label": "12:00"},
+ {"value": 13, "label": "13:00"},
+ {"value": 14, "label": "14:00"},
+ {"value": 15, "label": "15:00"},
+ {"value": 16, "label": "16:00"},
+ {"value": 17, "label": "17:00"},
+ {"value": 18, "label": "18:00"},
+ {"value": 19, "label": "19:00"},
+ {"value": 20, "label": "20:00"},
+ {"value": 21, "label": "21:00"},
+ {"value": 22, "label": "22:00"},
+ {"value": 23, "label": "23:00"}
+ ]
+ },
+
+ {
+ "label": "每周几执行",
+ "type": "button-group",
+ "name": "weekdays",
+ "size": "md",
+ "visibleOn": "this.repeat == \"week\"",
+ "clearable": true,
+ "multiple": true,
+ "required": true,
+ "extractValue": true,
+ "maxLength": 7,
+ "options": [
+ {
+ "label": "周一",
+ "value": "0"
+ },
+
+ {
+ "label": "周二",
+ "value": "1"
+ },
+
+ {
+ "label": "周三",
+ "value": "2"
+ },
+
+ {
+ "label": "周四",
+ "value": "3"
+ },
+
+ {
+ "label": "周五",
+ "value": "4"
+ },
+
+ {
+ "label": "周六",
+ "value": "5"
+ },
+
+ {
+ "label": "周日",
+ "value": "6"
+ }
+ ]
+ },
+
+ {
+ "label": "每月几号执行",
+ "type": "list",
+ "name": "monthday",
+ "size": "md",
+ "visibleOn": "this.repeat == \"month\"",
+ "required": true,
+ "maxLength": 31,
+ "clearable": true,
+ "multiple": true,
+ "extractValue": true,
+ "options": [
+ {"value": 0, "label": "01"},
+ {"value": 1, "label": "02"},
+ {"value": 2, "label": "03"},
+ {"value": 3, "label": "04"},
+ {"value": 4, "label": "05"},
+ {"value": 5, "label": "06"},
+ {"value": 6, "label": "07"},
+ {"value": 7, "label": "08"},
+ {"value": 8, "label": "09"},
+ {"value": 9, "label": "10"},
+ {"value": 10, "label": "11"},
+ {"value": 11, "label": "12"},
+ {"value": 12, "label": "13"},
+ {"value": 13, "label": "14"},
+ {"value": 14, "label": "15"},
+ {"value": 15, "label": "16"},
+ {"value": 16, "label": "17"},
+ {"value": 17, "label": "18"},
+ {"value": 18, "label": "19"},
+ {"value": 19, "label": "20"},
+ {"value": 20, "label": "21"},
+ {"value": 21, "label": "22"},
+ {"value": 22, "label": "23"},
+ {"value": 23, "label": "24"},
+ {"value": 24, "label": "25"},
+ {"value": 25, "label": "26"},
+ {"value": 26, "label": "27"},
+ {"value": 27, "label": "28"},
+ {"value": 28, "label": "29"},
+ {"value": 29, "label": "30"},
+ {"value": 30, "label": "31"}
+ ]
+ }
+ ]
+ },
+
+ {
+ "type": "fieldSet",
+ "title": "其他信息",
+ "collapsable": true,
+ "controls": [
+ {
+ "type": "combo",
+ "name": "admins",
+ "label": "用户列表",
+ "value": [""],
+ "description": "请输入用户信息,不要重复。",
+ "multiple": true,
+ "inline": true,
+ "controls": [
+ {
+ "type": "text",
+ "name": "name",
+ "unique": true
+ },
+
+ {
+ "type": "select",
+ "name": "perm",
+ "value": "read",
+ "options": [
+ {
+ "label": "可读",
+ "value": "read"
+ },
+
+ {
+ "label": "可写",
+ "value": "write"
+ }
+ ]
+ }
+ ]
+ },
+ {
+ "label": "新增一行",
+ "type": "button",
+ "actionType": "add",
+ "target": "thetable",
+ "level": "info"
+ },
+ {
+ "name": "thetable",
+ "type": "table",
+ "label": "任务参数",
+ "editable": true,
+ "addable": true,
+ "removable": true,
+ "columns": [
+ {
+ "label": "参数名",
+ "name": "key",
+ "quickEdit": true
+ },
+
+ {
+ "label": "参数值",
+ "name": "value",
+ "quickEdit": true
+ }
+ ]
+ }
+ ]
+ }
+ ]
+ }
+ ]
+}
diff --git a/frontend/x-pages/crud-edit.json b/frontend/x-pages/crud-edit.json
new file mode 100644
index 0000000..c5144b0
--- /dev/null
+++ b/frontend/x-pages/crud-edit.json
@@ -0,0 +1,64 @@
+{
+ "type": "page",
+ "title": "修改 ${params.id}",
+ "remark": null,
+ "toolbar": [
+ {
+ "type": "button",
+ "actionType": "link",
+ "link": "/crud/list",
+ "label": "返回列表"
+ }
+ ],
+ "body": [
+ {
+ "type": "form",
+ "initApi": "https://3xsw4ap8wah59.cfc-execute.bj.baidubce.com/api/amis-mock/sample/${params.id}",
+ "api": "https://3xsw4ap8wah59.cfc-execute.bj.baidubce.com/api/amis-mock/sample/$id",
+ "redirect": "/crud/list",
+ "controls": [
+ {
+ "type": "text",
+ "name": "engine",
+ "label": "Engine",
+ "required": true
+ },
+ {
+ "type": "divider"
+ },
+ {
+ "type": "text",
+ "name": "browser",
+ "label": "Browser",
+ "required": true
+ },
+ {
+ "type": "divider"
+ },
+ {
+ "type": "text",
+ "name": "platform",
+ "label": "Platform(s)",
+ "required": true
+ },
+ {
+ "type": "divider"
+ },
+ {
+ "type": "text",
+ "name": "version",
+ "label": "Engine version"
+ },
+ {
+ "type": "divider"
+ },
+ {
+ "type": "select",
+ "name": "grade",
+ "label": "CSS grade",
+ "options": ["A", "B", "C", "D", "X"]
+ }
+ ]
+ }
+ ]
+}
diff --git a/frontend/x-pages/crud-list.json b/frontend/x-pages/crud-list.json
new file mode 100644
index 0000000..2be14d9
--- /dev/null
+++ b/frontend/x-pages/crud-list.json
@@ -0,0 +1,149 @@
+{
+ "type": "page",
+ "title": "列表",
+ "remark": null,
+ "name": "page-demo",
+ "toolbar": [
+ {
+ "type": "button",
+ "actionType": "link",
+ "link": "/crud/new",
+ "label": "新增",
+ "primary": true
+ }
+ ],
+ "body": [
+ {
+ "type": "crud",
+ "name": "sample",
+ "api": "https://3xsw4ap8wah59.cfc-execute.bj.baidubce.com/api/amis-mock/sample",
+ "filter": {
+ "title": "",
+ "mode": "inline",
+ "wrapWithPanel": false,
+ "submitText": "",
+ "controls": [
+ {
+ "type": "text",
+ "name": "keywords",
+ "placeholder": "通过关键字搜索",
+ "addOn": {
+ "label": "搜索",
+ "type": "submit",
+ "className": "btn-success"
+ },
+ "clearable": true
+ }
+ ],
+ "className": "m-b-sm"
+ },
+ "bulkActions": [
+ {
+ "label": "批量修改",
+ "type": "button",
+ "actionType": "dialog",
+ "level": "primary",
+ "dialog": {
+ "title": "批量编辑",
+ "name": "sample-bulk-edit",
+ "body": {
+ "type": "form",
+ "api": "https://3xsw4ap8wah59.cfc-execute.bj.baidubce.com/api/amis-mock/sample/bulkUpdate2",
+ "controls": [
+ {
+ "type": "text",
+ "name": "engine",
+ "label": "Engine"
+ }
+ ]
+ }
+ }
+ },
+ {
+ "label": "批量删除",
+ "type": "button",
+ "level": "danger",
+ "actionType": "ajax",
+ "api": "delete:https://3xsw4ap8wah59.cfc-execute.bj.baidubce.com/api/amis-mock/sample/$ids",
+ "confirmText": "确定要批量删除?"
+ }
+ ],
+ "columns": [
+ {
+ "name": "engine",
+ "label": "Rendering engine",
+ "sortable": true
+ },
+ {
+ "name": "id",
+ "label": "ID",
+ "width": 20,
+ "sortable": true
+ },
+ {
+ "name": "browser",
+ "label": "Browser",
+ "sortable": true
+ },
+ {
+ "name": "platform",
+ "label": "Platform(s)",
+ "sortable": true
+ },
+ {
+ "name": "version",
+ "label": "Engine version"
+ },
+ {
+ "name": "grade",
+ "label": "CSS grade"
+ },
+ {
+ "type": "operation",
+ "label": "操作",
+ "width": "",
+ "buttons": [
+ {
+ "type": "button-group",
+ "buttons": [
+ {
+ "type": "button",
+ "label": "查看",
+ "level": "primary",
+ "actionType": "link",
+ "link": "/crud/${id}"
+ },
+ {
+ "type": "button",
+ "label": "修改",
+ "level": "info",
+ "actionType": "link",
+ "link": "/crud/${id}/edit"
+ },
+ {
+ "type": "button",
+ "label": "删除",
+ "level": "danger",
+ "actionType": "ajax",
+ "confirmText": "您确认要删除?",
+ "api": "delete:https://3xsw4ap8wah59.cfc-execute.bj.baidubce.com/api/amis-mock/sample/$id"
+ }
+ ]
+ }
+ ],
+ "placeholder": "-",
+ "fixed": "right"
+ }
+ ],
+ "affixHeader": true,
+ "columnsTogglable": "auto",
+ "placeholder": "暂无数据",
+ "tableClassName": "table-db table-striped",
+ "headerClassName": "crud-table-header",
+ "footerClassName": "crud-table-footer",
+ "toolbarClassName": "crud-table-toolbar",
+ "combineNum": 0,
+ "bodyClassName": "panel-default"
+ }
+ ]
+}
diff --git a/frontend/x-pages/crud-new.json b/frontend/x-pages/crud-new.json
new file mode 100644
index 0000000..49bf000
--- /dev/null
+++ b/frontend/x-pages/crud-new.json
@@ -0,0 +1,69 @@
+{
+ "type": "page",
+ "title": "新增",
+ "remark": null,
+ "toolbar": [
+ {
+ "type": "button",
+ "actionType": "link",
+ "link": "/crud/list",
+ "label": "返回列表"
+ }
+ ],
+ "body": [
+ {
+ "title": "",
+ "type": "form",
+ "redirect": "/crud/list",
+ "name": "sample-edit-form",
+ "api": "https://3xsw4ap8wah59.cfc-execute.bj.baidubce.com/api/amis-mock/sample",
+ "controls": [
+ {
+ "type": "text",
+ "name": "engine",
+ "label": "Engine",
+ "required": true,
+ "inline": false,
+ "description": "",
+ "descriptionClassName": "help-block",
+ "placeholder": "",
+ "addOn": null
+ },
+ {
+ "type": "divider"
+ },
+ {
+ "type": "text",
+ "name": "browser",
+ "label": "Browser",
+ "required": true
+ },
+ {
+ "type": "divider"
+ },
+ {
+ "type": "text",
+ "name": "platform",
+ "label": "Platform(s)",
+ "required": true
+ },
+ {
+ "type": "divider"
+ },
+ {
+ "type": "text",
+ "name": "version",
+ "label": "Engine version"
+ },
+ {
+ "type": "divider"
+ },
+ {
+ "type": "text",
+ "name": "grade",
+ "label": "CSS grade"
+ }
+ ]
+ }
+ ]
+}
diff --git a/frontend/x-pages/crud-view.json b/frontend/x-pages/crud-view.json
new file mode 100644
index 0000000..3469520
--- /dev/null
+++ b/frontend/x-pages/crud-view.json
@@ -0,0 +1,65 @@
+{
+ "type": "page",
+ "title": "查看详情 ${params.id}",
+ "remark": null,
+ "toolbar": [
+ {
+ "type": "button",
+ "actionType": "link",
+ "link": "/crud/list",
+ "label": "返回列表"
+ }
+ ],
+ "body": [
+ {
+ "type": "form",
+ "initApi": "https://3xsw4ap8wah59.cfc-execute.bj.baidubce.com/api/amis-mock/sample/${params.id}",
+ "controls": [
+ {
+ "type": "static",
+ "name": "engine",
+ "label": "Engine"
+ },
+ {
+ "type": "divider"
+ },
+ {
+ "type": "static",
+ "name": "browser",
+ "label": "Browser"
+ },
+ {
+ "type": "divider"
+ },
+ {
+ "type": "static",
+ "name": "platform",
+ "label": "Platform(s)"
+ },
+ {
+ "type": "divider"
+ },
+ {
+ "type": "static",
+ "name": "version",
+ "label": "Engine version"
+ },
+ {
+ "type": "divider"
+ },
+ {
+ "type": "static",
+ "name": "grade",
+ "label": "CSS grade"
+ },
+ {
+ "type": "divider"
+ },
+ {
+ "type": "html",
+ "html": "添加其他 Html 片段 需要支持变量替换(todo).
"
+ }
+ ]
+ }
+ ]
+}
diff --git a/frontend/x-pages/editor.json b/frontend/x-pages/editor.json
new file mode 100644
index 0000000..a6bb29c
--- /dev/null
+++ b/frontend/x-pages/editor.json
@@ -0,0 +1,18 @@
+{
+ "type": "page",
+ "title": "代码编辑器",
+ "subTitle": "使用的monaco-editor,用到了 worker, 如果控制台没有报错,说明一起正常。",
+ "body": [
+ {
+ "type": "form",
+ "controls": [
+ {
+ "type": "editor",
+ "name": "js",
+ "label": "Javascript",
+ "size": "md"
+ }
+ ]
+ }
+ ]
+}
diff --git a/frontend/x-pages/excel.json b/frontend/x-pages/excel.json
new file mode 100644
index 0000000..bd1cbf6
--- /dev/null
+++ b/frontend/x-pages/excel.json
@@ -0,0 +1,50 @@
+{
+ "type": "page",
+ "body": {
+ "type": "crud",
+ "syncLocation": false,
+ "api": "https://3xsw4ap8wah59.cfc-execute.bj.baidubce.com/api/amis-mock/sample",
+ "headerToolbar": [
+ {
+ "type": "export-csv",
+ "label": "全量导出 CSV",
+ "api": "https://3xsw4ap8wah59.cfc-execute.bj.baidubce.com/api/amis-mock/sample"
+ },
+ {
+ "type": "export-excel",
+ "label": "全量导出 Excel",
+ "api": "https://3xsw4ap8wah59.cfc-execute.bj.baidubce.com/api/amis-mock/sample"
+ }
+ ],
+ "columns": [
+ {
+ "name": "id",
+ "label": "ID"
+ },
+ {
+ "name": "engine",
+ "label": "Rendering engine"
+ },
+ {
+ "name": "browser",
+ "label": "Browser"
+ },
+ {
+ "name": "platform",
+ "label": "Platform(s)"
+ },
+ {
+ "name": "version",
+ "label": "Engine version"
+ },
+ {
+ "name": "grade",
+ "label": "CSS grade",
+ "type": "mapping",
+ "map": {
+ "*": "${grade}"
+ }
+ }
+ ]
+ }
+}
\ No newline at end of file
diff --git a/frontend/x-pages/form-basic.json b/frontend/x-pages/form-basic.json
new file mode 100644
index 0000000..7040b9c
--- /dev/null
+++ b/frontend/x-pages/form-basic.json
@@ -0,0 +1,241 @@
+{
+ "type": "page",
+ "title": "基础表单",
+ "subTitle": "展示一些常规的表单,包括验证、提示等等",
+ "body": [
+ {
+ "type": "form",
+ "mode": "horizontal",
+ "title": "常规表单示例",
+ "affixFooter": true,
+ "api": "https://3xsw4ap8wah59.cfc-execute.bj.baidubce.com/api/amis-mock/form/save",
+ "actions": [
+ {
+ "label": "保存",
+ "type": "submit",
+ "level": "success"
+ }
+ ],
+ "controls": [
+ {
+ "label": " 标题",
+ "type": "text",
+ "placeholder": "请输入标题",
+ "description": "请输入一个能吸引眼球的标题",
+ "name": "title",
+ "size": "md"
+ },
+
+ {
+ "label": "编号",
+ "required": true,
+ "type": "text",
+ "placeholder": "请输入编号",
+ "name": "b",
+ "size": "md",
+ "validations": {
+ "matchRegexp": "/^\\w{4}-\\w{4}-\\w{4}$/"
+ },
+ "validationErrors": {
+ "matchRegexp": "您输入的内容格式不对,请按提示输入!"
+ },
+ "hint": "输入范例:xxxx-xxxx-xxxx"
+ },
+
+ {
+ "label": "置顶",
+ "type": "switch",
+ "name": "c",
+ "inline": true,
+ "labelRemark": "开启后将置顶这条数据!"
+ },
+
+ {
+ "label": "活动时间",
+ "type": "date-range",
+ "name": "range",
+ "size": "md",
+ "remark": "这是一个字段时间范围"
+ },
+
+ {
+ "label": "日期范围",
+ "type": "group",
+ "controls": [
+ {
+ "type": "date",
+ "size": "md",
+ "name": "start",
+ "mode": "inline",
+ "maxDate": "${end}"
+ },
+
+ {
+ "label": "到",
+ "type": "date",
+ "size": "md",
+ "name": "end",
+ "inputClassName": "m-l-sm",
+ "mode": "inline",
+ "minDate": "${start}",
+ "remark": "这是两个字段的时间范围"
+ }
+ ]
+ },
+
+ {
+ "label": "浏览器",
+ "type": "button-group",
+ "name": "browser",
+ "value": "chrome",
+ "options": [
+ {
+ "label": "Chrome",
+ "value": "chrome"
+ },
+
+ {
+ "label": "火狐",
+ "value": "firefox"
+ },
+
+ {
+ "label": "IE",
+ "value": "ie"
+ }
+ ]
+ },
+
+ {
+ "type": "list",
+ "name": "taocan",
+ "label": "套餐选择",
+ "options": [
+ {
+ "value": 1,
+ "body": " 套餐:C01
CPU:2核
内存:1GB
SSD盘:10GB
"
+ },
+ {
+ "value": 2,
+ "body": " 套餐:C02
CPU:4核
内存:4GB
SSD盘:20GB
"
+ },
+ {
+ "value": 3,
+ "disabled": true,
+ "body": " 套餐:C03
CPU:8核
内存:8GB
SSD盘:50GB
"
+ }
+ ]
+ },
+
+ {
+ "label": "最爱周几",
+ "type": "select",
+ "name": "select",
+ "size": "md",
+ "clearable": true,
+ "options": [
+ {
+ "label": "周一",
+ "value": "0"
+ },
+
+ {
+ "label": "周二",
+ "value": "1"
+ },
+
+ {
+ "label": "周三",
+ "value": "2"
+ },
+
+ {
+ "label": "周四",
+ "value": "3"
+ },
+
+ {
+ "label": "周五",
+ "value": "4"
+ },
+
+ {
+ "label": "周六",
+ "value": "5"
+ },
+
+ {
+ "label": "周日",
+ "value": "6"
+ }
+ ]
+ },
+
+ {
+ "label": "休息日",
+ "type": "list",
+ "name": "freeday",
+ "value": ["5", "6"],
+ "multiple": true,
+ "extractValue": true,
+ "options": [
+ {
+ "label": "周一",
+ "value": "0"
+ },
+
+ {
+ "label": "周二",
+ "value": "1"
+ },
+
+ {
+ "label": "周三",
+ "value": "2"
+ },
+
+ {
+ "label": "周四",
+ "value": "3"
+ },
+
+ {
+ "label": "周五",
+ "value": "4"
+ },
+
+ {
+ "label": "周六",
+ "value": "5"
+ },
+
+ {
+ "label": "周日",
+ "value": "6"
+ }
+ ]
+ },
+
+ {
+ "label": "人数",
+ "type": "number",
+ "name": "num",
+ "size": "md",
+ "value": 10
+ },
+
+ {
+ "label": "比率",
+ "type": "range",
+ "name": "percent"
+ },
+
+ {
+ "label": "简介",
+ "type": "textarea",
+ "name": "textarea"
+ }
+ ]
+ }
+ ]
+}
diff --git a/frontend/x-pages/jsonp.js b/frontend/x-pages/jsonp.js
new file mode 100644
index 0000000..9612fb8
--- /dev/null
+++ b/frontend/x-pages/jsonp.js
@@ -0,0 +1,12 @@
+(function() {
+ const response = {
+ data: {
+ type: "page",
+ title: "标题",
+ body: "this result is from jsonp"
+ },
+ status: 0
+ }
+
+ window.jsonpCallback && window.jsonpCallback(response);
+})();
diff --git a/frontend/x-pages/pageA.json b/frontend/x-pages/pageA.json
new file mode 100644
index 0000000..f2921c5
--- /dev/null
+++ b/frontend/x-pages/pageA.json
@@ -0,0 +1,177 @@
+{
+ "type": "page",
+ "toolbar": [
+ {
+ "type": "form",
+ "panelClassName": "mb-0",
+ "title": "",
+ "body": [
+ {
+ "type": "select",
+ "label": "区域",
+ "name": "businessLineId",
+ "selectFirst": true,
+ "mode": "inline",
+ "options": [
+ "北京",
+ "上海"
+ ],
+ "checkAll": false
+ },
+ {
+ "label": "时间范围",
+ "type": "input-date-range",
+ "name": "dateRange",
+ "inline": true,
+ "value": "-1month,+0month",
+ "inputFormat": "YYYY-MM-DD",
+ "format": "YYYY-MM-DD",
+ "closeOnSelect": true,
+ "clearable": false
+ }
+ ],
+ "actions": [],
+ "mode": "inline",
+ "target": "mainPage",
+ "submitOnChange": true,
+ "submitOnInit": true
+ }
+ ],
+ "body": [
+ {
+ "type": "table",
+ "title": "表格1",
+ "source": "$rows",
+ "columns": [
+ {
+ "name": "engine",
+ "label": "Engine"
+ },
+ {
+ "name": "version",
+ "label": "Version"
+ }
+ ]
+ },
+ {
+ "type": "grid",
+ "columns": [
+ {
+ "type": "panel",
+ "className": "h-full",
+ "body": {
+ "type": "tabs",
+ "tabs": [
+ {
+ "title": "消费趋势",
+ "tab": [
+ {
+ "type": "chart",
+ "config": {
+ "title": {
+ "text": "消费趋势"
+ },
+ "tooltip": {},
+ "xAxis": {
+ "type": "category",
+ "boundaryGap": false,
+ "data": [
+ "一月",
+ "二月",
+ "三月",
+ "四月",
+ "五月",
+ "六月"
+ ]
+ },
+ "yAxis": {},
+ "series": [
+ {
+ "name": "销量",
+ "type": "line",
+ "areaStyle": {
+ "color": {
+ "type": "linear",
+ "x": 0,
+ "y": 0,
+ "x2": 0,
+ "y2": 1,
+ "colorStops": [
+ {
+ "offset": 0,
+ "color": "rgba(84, 112, 197, 1)"
+ },
+ {
+ "offset": 1,
+ "color": "rgba(84, 112, 197, 0)"
+ }
+ ],
+ "global": false
+ }
+ },
+ "data": [
+ 5,
+ 20,
+ 36,
+ 10,
+ 10,
+ 20
+ ]
+ }
+ ]
+ }
+ }
+ ]
+ },
+ {
+ "title": "账户余额",
+ "tab": "0"
+ }
+ ]
+ }
+ },
+ {
+ "type": "panel",
+ "className": "h-full",
+ "body": [
+ {
+ "type": "chart",
+ "config": {
+ "title": {
+ "text": "使用资源占比"
+ },
+ "series": [
+ {
+ "type": "pie",
+ "data": [
+ {
+ "name": "BOS",
+ "value": 70
+ },
+ {
+ "name": "CDN",
+ "value": 68
+ },
+ {
+ "name": "BCC",
+ "value": 48
+ },
+ {
+ "name": "DCC",
+ "value": 40
+ },
+ {
+ "name": "RDS",
+ "value": 32
+ }
+ ]
+ }
+ ]
+ }
+ }
+ ]
+ }
+ ]
+ }
+ ]
+ }
\ No newline at end of file
diff --git a/frontend/x-pages/site.json b/frontend/x-pages/site.json
new file mode 100644
index 0000000..f853737
--- /dev/null
+++ b/frontend/x-pages/site.json
@@ -0,0 +1,126 @@
+{
+ "status": 0,
+ "msg": "",
+ "data": {
+ "pages": [
+ {
+ "label": "Home",
+ "url": "/",
+ "redirect": "/index/1"
+ },
+ {
+ "label": "示例",
+ "children": [
+ {
+ "label": "表格",
+ "schemaApi": "get:/pages/excel.json"
+ },
+ {
+ "label": "页面A",
+ "url": "index",
+ "schema": {
+ "type": "page",
+ "title": "页面A",
+ "body": "页面A"
+ },
+ "children": [
+ {
+ "label": "页面A-1",
+ "schemaApi": "get:/pages/pageA.json"
+ },
+ {
+ "label": "页面A-2",
+ "url": "2",
+ "schema": {
+ "type": "page",
+ "title": "页面A-2",
+ "body": "页面A-2"
+ }
+ },
+ {
+ "label": "页面A-3",
+ "url": "3",
+ "schema": {
+ "type": "page",
+ "title": "页面A-3",
+ "body": "页面A-3"
+ }
+ }
+ ]
+ },
+ {
+ "label": "页面B",
+ "schema": {
+ "type": "page",
+ "title": "页面B",
+ "body": "页面B"
+ }
+ },
+ {
+ "label": "页面C",
+ "schema": {
+ "type": "page",
+ "title": "页面C",
+ "body": "页面C"
+ }
+ },
+ {
+ "label": "列表示例",
+ "url": "/crud",
+ "rewrite": "/crud/list",
+ "icon": "fa fa-cube",
+ "children": [
+ {
+ "label": "列表",
+ "url": "/crud/list",
+ "icon": "fa fa-list",
+ "schemaApi": "get:/pages/crud-list.json"
+ },
+ {
+ "label": "新增",
+ "url": "/crud/new",
+ "icon": "fa fa-plus",
+ "schemaApi": "get:/pages/crud-new.json"
+ },
+ {
+ "label": "查看",
+ "url": "/crud/:id",
+ "schemaApi": "get:/pages/crud-view.json"
+ },
+ {
+ "label": "修改",
+ "url": "/crud/:id/edit",
+ "schemaApi": "get:/pages/crud-edit.json"
+ }
+ ]
+ }
+ ]
+ },
+ {
+ "label": "分组2",
+ "children": [
+ {
+ "label": "用户管理",
+ "schema": {
+ "type": "page",
+ "title": "用户管理",
+ "body": "页面C"
+ }
+ },
+ {
+ "label": "外部链接",
+ "link": "http://baidu.gitee.io/amis"
+ },
+ {
+ "label": "部门管理",
+ "schemaApi": "https://3xsw4ap8wah59.cfc-execute.bj.baidubce.com/api/amis-mock/mock2/service/form?tpl=tpl3"
+ },
+ {
+ "label": "jsonp 返回示例",
+ "schemaApi": "jsonp:/pages/jsonp.js?callback=jsonpCallback"
+ }
+ ]
+ }
+ ]
+ }
+}
diff --git a/frontend/x-pages/wizard.json b/frontend/x-pages/wizard.json
new file mode 100644
index 0000000..11ed771
--- /dev/null
+++ b/frontend/x-pages/wizard.json
@@ -0,0 +1,105 @@
+{
+ "type": "page",
+ "title": "表单向导",
+ "subTitle": "可以通过表单向导,将一个超长的表单页面拆分成多个步骤,一步一步指引用户完成。",
+ "body": [
+ {
+ "type": "wizard",
+ "actionFinishLabel": "确认",
+ "api": "https://3xsw4ap8wah59.cfc-execute.bj.baidubce.com/api/amis-mock/saveWizard",
+ "steps": [
+ {
+ "title": "填写活动信息",
+ "controls": [
+ {
+ "type": "text",
+ "name": "title",
+ "label": "活动标题",
+ "required": true,
+ "size": "md"
+ },
+
+ {
+ "type": "date",
+ "name": "date",
+ "label": "举办时间",
+ "size": "md"
+ },
+
+ {
+ "type": "number",
+ "name": "num",
+ "label": "参与人数",
+ "value": 10,
+ "size": "md"
+ }
+ ]
+ },
+
+ {
+ "title": "填写赞助商信息",
+ "controls": [
+ {
+ "type": "text",
+ "name": "company",
+ "label": "公司名称",
+ "required": true,
+ "size": "md"
+ },
+
+ {
+ "type": "text",
+ "name": "money",
+ "label": "赞助金额",
+ "addOn": {
+ "type": "text",
+ "label": "¥"
+ },
+ "size": "md"
+ }
+ ]
+ },
+
+ {
+ "title": "确认",
+ "mode": "horizontal",
+ "horizontal": {
+ "leftFixed": "sm"
+ },
+ "controls": [
+ {
+ "type": "static",
+ "name": "company",
+ "label": "活动标题",
+ "labelClassName": "text-muted"
+ },
+ {
+ "type": "static-date",
+ "name": "date",
+ "label": "举办时间",
+ "labelClassName": "text-muted"
+ },
+ {
+ "type": "static",
+ "name": "num",
+ "label": "参与人数",
+ "labelClassName": "text-muted"
+ },
+ {
+ "type": "static",
+ "name": "company",
+ "label": "公司名称",
+ "labelClassName": "text-muted"
+ },
+ {
+ "type": "static",
+ "name": "money",
+ "label": "赞助金额",
+ "labelClassName": "text-muted"
+ }
+ ]
+ }
+ ]
+ }
+ ]
+}
diff --git a/handler/car.py b/handler/car.py
index 32ea668..75aa63d 100644
--- a/handler/car.py
+++ b/handler/car.py
@@ -5,7 +5,7 @@ import logger
from db.mysql import database
from model.car.dto.list import ListDto
from orm.jiakaobaodian import JiaKaoBaoDian
-from utils.common import response
+from utils.common import response, amis_response
from utils.model import model_list
router = APIRouter(tags=["Car"], prefix="/api/car")
@@ -36,3 +36,15 @@ def get_list(dto: ListDto, db: Session = Depends(database)):
"size": size,
"total": total
})
+
+
+@router.post("/amis/list", summary="amis 题目列表")
+def amis_get_list(dto: ListDto, db: Session = Depends(database)):
+ result = get_list(dto, db)['data']
+
+ return amis_response({
+ "rows": result['data'],
+ "page": result['page'],
+ "size": result['size'],
+ "total": result['total']
+ })
diff --git a/main.py b/main.py
index 5d7e1f4..7ed0526 100644
--- a/main.py
+++ b/main.py
@@ -1,7 +1,10 @@
+import os.path
+
import logger
import uvicorn
-from fastapi import FastAPI, APIRouter
+from fastapi import FastAPI
from fastapi.middleware.cors import CORSMiddleware
+from fastapi.staticfiles import StaticFiles
from handler import car, health
# 禁用 redoc
@@ -18,6 +21,9 @@ app.add_middleware(
app.include_router(health.router)
app.include_router(car.router)
+frontend = os.path.join(os.path.dirname(__file__), "frontend")
+app.mount("/", StaticFiles(directory=frontend, html=True))
+
@app.on_event("startup")
async def startup():
diff --git a/utils/common.py b/utils/common.py
index 624f68b..c5276d0 100644
--- a/utils/common.py
+++ b/utils/common.py
@@ -19,3 +19,15 @@ def response(data: any, code=200, msg="OK"):
"data": data,
"msg": msg,
}
+
+
+def amis_response(data: any, code=0, msg="OK"):
+ return {
+ "status": code,
+ "data": data,
+ "msg": msg,
+ }
+
+
+def response_to_amis_response(_response):
+ return amis_response(_response['data'], 0 if _response['code'] == 200 else _response['code'], _response['msg'])