diff --git a/report-core/src/main/resources/db/migration/V1.0.13__update_set.sql b/report-core/src/main/resources/db/migration/V1.0.13__update_set.sql new file mode 100644 index 00000000..37f591bb --- /dev/null +++ b/report-core/src/main/resources/db/migration/V1.0.13__update_set.sql @@ -0,0 +1,14 @@ +use +aj_report; + +-- 增加字段 +ALTER TABLE `gaea_report_data_set` DROP COLUMN `set_type`; +-- 将该字段值全更新为sql +update gaea_report_data_set set set_type = 'sql'; + +-- 字典 +INSERT INTO `gaea_dict`(`id`, `dict_name`, `dict_code`, `remark`, `create_by`, `create_time`, `update_by`, `update_time`, `version`) VALUES (default, '数据集类型', 'SET_TYPE', '数据集类型', 'admin', '2021-11-16 14:43:12', 'admin', '2021-11-16 14:43:12', 1); +INSERT INTO `gaea_dict_item`(`id`, `dict_code`, `item_name`, `item_value`, `item_extend`, `enabled`, `locale`, `remark`, `sort`, `create_by`, `create_time`, `update_by`, `update_time`, `version`) VALUES (default , 'SET_TYPE', 'sql', 'sql', NULL, 1, 'zh', NULL, NULL, 'admin', '2021-11-16 14:43:42', 'admin', '2021-11-16 14:43:42', 1); +INSERT INTO `gaea_dict_item`(`id`, `dict_code`, `item_name`, `item_value`, `item_extend`, `enabled`, `locale`, `remark`, `sort`, `create_by`, `create_time`, `update_by`, `update_time`, `version`) VALUES (default , 'SET_TYPE', 'http', 'http', NULL, 1, 'zh', NULL, NULL, 'admin', '2021-11-16 14:43:51', 'admin', '2021-11-16 14:43:51', 1); + + diff --git a/report-ui/src/views/report/resultset/components/EditDataSet.vue b/report-ui/src/views/report/resultset/components/EditDataSet.vue index 4d747fad..27cb9a4d 100644 --- a/report-ui/src/views/report/resultset/components/EditDataSet.vue +++ b/report-ui/src/views/report/resultset/components/EditDataSet.vue @@ -15,7 +15,7 @@ label-width="130px" > <el-row :gutter="10"> - <el-col :xs="24" :sm="20" :md="8" :lg="8" :xl="8"> + <el-col v-if="this.setType=='sql'" :xs="24" :sm="20" :md="8" :lg="8" :xl="8"> <el-form-item label="数据源" prop="sourceCode"> <el-select v-model.trim="formData.sourceCode" @@ -53,6 +53,9 @@ </el-form-item> </el-col> + + </el-row> + <el-row v-if="this.setType=='sql'" :gutter="10"> <el-col :xs="24" :sm="20" @@ -61,7 +64,7 @@ :xl="22" class="code-mirror-form" > - <el-form-item label="查询SQL或请求体"> + <el-form-item label="查询SQL"> <div class="codemirror"> <monaco-editor v-model.trim="formData.dynSentence" @@ -72,6 +75,25 @@ </el-form-item> </el-col> </el-row> + <el-row v-if="this.setType=='http'"> + <el-form-item label="请求路径"> + <el-input placeholder="请输入请求路径..." v-model="httpForm.apiUrl" class="input-with-select"> + <el-select v-model="httpForm.method" slot="prepend" placeholder="请选择"> + <el-option label="GET" value="GET"></el-option> + <el-option label="POST" value="POST"></el-option> + <el-option label="PUT" value="PUT"></el-option> + <el-option label="DELETE" value="DELETE"></el-option> + </el-select> + </el-input> + </el-form-item> + <el-form-item label="请求头"> + <el-input v-model.trim="httpForm.header" size="mini" placeholder="请输入请求头..."/> + </el-form-item> + <el-form-item label="请求体"> + <el-input v-model.trim="httpForm.body" size="mini" placeholder="请输入请求体..."/> + </el-form-item> + + </el-row> <el-row :gutter="10"> <el-col :xs="24" :sm="20" :md="22" :lg="22" :xl="22"> <el-form label-width="100px" class="demo-ruleForm"> @@ -508,7 +530,13 @@ export default { setName: "", setCode: "" }, - + setType: '', //数据集类型,主要用于区分http addSql addHttp edit + httpForm: { //http数据源相关数据 + apiUrl: '', + method: 'GET', + header: '{"Content-Type":"application/json;charset=UTF-8"}', + body: '', + }, //待删除 dictionaryOptions: [], // 数据源类型 list: null, @@ -541,7 +569,11 @@ export default { mounted() {}, methods: { // 编辑数据集,获取单条数据详情 - async addOrEditDataSet(row) { + async addOrEditDataSet(row, type) { + this.setType = type + if (type == 'http' && row.dynSentence) { + this.httpForm = JSON.parse(row.dynSentence) + } //获取数据源下拉 const { code, data } = await queryAllDataSourceSet(); if (code != "200") return; @@ -636,12 +668,18 @@ export default { // 测试预览 async handleClickTabs(tab, event) { + if (this.setType == 'http') { + //针对http数据源 + console.log("http数据集" + this.httpForm); + this.formData.dynSentence = JSON.stringify(this.httpForm) + } if (tab.paneName == "third") { const params = { sourceCode: this.formData.sourceCode, dynSentence: this.formData.dynSentence, dataSetParamDtoList: this.tableData, - dataSetTransformDtoList: this.itemFilterList + dataSetTransformDtoList: this.itemFilterList, + setType: this.setType }; const { code, data } = await testTransformSet(params); if (code != "200") return; @@ -831,6 +869,12 @@ export default { }); }, async submit(formName) { + if (this.setType == 'http') { + //针对http数据源 + console.log("http数据集" + this.httpForm); + this.formData.dynSentence = JSON.stringify(this.httpForm) + } + this.formData.setType = this.setType this.$refs[formName].validate(async (valid, obj) => { if (valid) { if (this.testMassageCode == 200) { diff --git a/report-ui/src/views/report/resultset/index.vue b/report-ui/src/views/report/resultset/index.vue index cb5aaf4f..82fe522d 100644 --- a/report-ui/src/views/report/resultset/index.vue +++ b/report-ui/src/views/report/resultset/index.vue @@ -1,13 +1,19 @@ <template> <anji-crud ref="listPage" :option="crudOption"> <template v-slot:buttonLeftOnTable> - <el-button - type="primary" - icon="el-icon-plus" - @click="operateDataset('add')" - v-permission="'resultsetManage:insert'" - >新增 - </el-button> + <el-dropdown + placement="bottom" + @command="operateDataset" + > + <el-button type="primary" icon="el-icon-plus"> + 新增 + <i class="el-icon-arrow-down el-icon--right"></i> + </el-button> + <el-dropdown-menu slot="dropdown"> + <el-dropdown-item command="sql">SQL</el-dropdown-item> + <el-dropdown-item command="http">HTTP</el-dropdown-item> + </el-dropdown-menu> + </el-dropdown> </template> <template slot="edit" slot-scope="props"> @@ -15,7 +21,7 @@ type="text" @click="operateDataset('edit', props)" v-permission="'resultsetManage:update'" - >编辑 + >编辑 </el-button> </template> @@ -24,7 +30,7 @@ type="text" @click="dataView(props)" v-permission="'resultsetManage:query'" - >数据预览 + >数据预览 </el-button> </template> <!--自定义的卡片插槽,将在编辑详情页面,出现在底部新卡片--> @@ -95,7 +101,15 @@ export default { }, label: "数据源", field: "sourceCode" - } + }, + { + inputType: "anji-select", //form表单类型 input|input-number|anji-select(传递url或者dictCode)|anji-tree(左侧树)|date|datetime|datetimerange + anjiSelectOption: { + dictCode: "SET_TYPE" + }, + label: "数据集类型", + field: "setType" + }, ], // 操作按钮 buttons: { @@ -143,7 +157,7 @@ export default { editField: "setCode", inputType: "input", rules: [ - { min: 1, max: 50, message: "不超过50个字符", trigger: "blur" } + {min: 1, max: 50, message: "不超过50个字符", trigger: "blur"} ], disabled: false }, @@ -154,7 +168,7 @@ export default { editField: "setName", inputType: "input", rules: [ - { min: 1, max: 100, message: "不超过100个字符", trigger: "blur" } + {min: 1, max: 100, message: "不超过100个字符", trigger: "blur"} ], disabled: false }, @@ -165,7 +179,7 @@ export default { editField: "setDesc", inputType: "input", rules: [ - { min: 1, max: 255, message: "不超过255个字符", trigger: "blur" } + {min: 1, max: 255, message: "不超过255个字符", trigger: "blur"} ], disabled: false }, @@ -176,7 +190,18 @@ export default { editField: "sourceCode", inputType: "input", rules: [ - { min: 1, max: 50, message: "不超过50个字符", trigger: "blur" } + {min: 1, max: 50, message: "不超过50个字符", trigger: "blur"} + ], + disabled: false + }, + { + label: "数据集类型", //数据源编码 + placeholder: "", + field: "setType", + editField: "setType", + inputType: "input", + rules: [ + {min: 1, max: 50, message: "不超过50个字符", trigger: "blur"} ], disabled: false }, @@ -245,16 +270,19 @@ export default { }; }, - created() {}, + created() { + }, methods: { operateDataset(type, prop) { + debugger this.dialogVisibleSetDataSet = true; - if (prop) { + if (prop && prop.msg) { this.dataSet = prop.msg; + type = prop.msg.setType; } else { this.dataSet = {}; } - this.$refs.EditDataSet.addOrEditDataSet(this.dataSet); + this.$refs.EditDataSet.addOrEditDataSet(this.dataSet, type); }, refreshList() { this.$refs.listPage.handleQueryForm("query");