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'])