xiongzhu 4 anni fa
parent
commit
5648839f7b

+ 1 - 4
src/main/java/com/izouma/awesomeAdmin/web/TestClassController.java

@@ -1,6 +1,4 @@
 package com.izouma.awesomeAdmin.web;
-
-import com.izouma.awesomeAdmin.annotations.OperLog;
 import com.izouma.awesomeAdmin.domain.TestClass;
 import com.izouma.awesomeAdmin.service.TestClassService;
 import com.izouma.awesomeAdmin.dto.PageQuery;
@@ -22,11 +20,10 @@ import java.util.List;
 @AllArgsConstructor
 public class TestClassController extends BaseController {
     private TestClassService testClassService;
-    private TestClassRepo    testClassRepo;
+    private TestClassRepo testClassRepo;
 
     //@PreAuthorize("hasRole('ADMIN')")
     @PostMapping("/save")
-    @OperLog("测试操作")
     public TestClass save(@RequestBody TestClass record) {
         if (record.getId() != null) {
             TestClass orig = testClassRepo.findById(record.getId()).orElseThrow(new BusinessException("无记录"));

+ 1 - 1
src/main/resources/genjson/TestClass.json

@@ -1 +1 @@
-{"tableName":"TestClass","className":"TestClass","remark":"测试","genTable":true,"genClass":true,"genList":true,"genForm":true,"genRouter":true,"javaPath":"/Users/drew/Projects/Java/awesome-admin-v2/src/main/java/com/izouma/awesomeAdmin","viewPath":"/Users/drew/Projects/Java/awesome-admin-v2/src/main/vue/src/views","routerPath":"/Users/drew/Projects/Java/awesome-admin-v2/src/main/vue/src","resourcesPath":"/Users/drew/Projects/Java/awesome-admin-v2/src/main/resources","dataBaseType":"Mysql","fields":[{"name":"name","modelName":"name","remark":"name","showInList":true,"showInForm":true,"formType":"singleLineText"}],"readTable":false,"dataSourceCode":"dataSource","genJson":"","subtables":[],"update":false,"basePackage":"com.izouma.awesomeAdmin","tablePackage":"com.izouma.awesomeAdmin.domain.TestClass"}
+{"tableName":"TestClass","className":"TestClass","remark":"测试","genTable":true,"genClass":true,"genList":true,"genForm":true,"genRouter":false,"javaPath":"/Users/drew/Projects/Java/awesome-admin-v2/src/main/java/com/izouma/awesomeAdmin","viewPath":"/Users/drew/Projects/Java/awesome-admin-v2/src/main/vue/src/views","routerPath":"/Users/drew/Projects/Java/awesome-admin-v2/src/main/vue/src","resourcesPath":"/Users/drew/Projects/Java/awesome-admin-v2/src/main/resources","dataBaseType":"Mysql","fields":[{"name":"name","modelName":"name","remark":"name","showInList":true,"showInForm":true,"formType":"singleLineText"}],"readTable":false,"dataSourceCode":"dataSource","genJson":"","subtables":[],"update":false,"basePackage":"com.izouma.awesomeAdmin","tablePackage":"com.izouma.awesomeAdmin.domain.TestClass"}

+ 3 - 3
src/main/resources/templates/EditViewTemplate.ftl

@@ -1,11 +1,11 @@
 <template>
     <div class="edit-view">
         <page-title>
-            <el-button @click="$router.go(-1)">取消</el-button>
-            <el-button @click="onDelete" :loading="$store.state.fetchingData" type="danger" v-if="formData.id">
+            <el-button @click="$router.go(-1)" :disabled="saving">取消</el-button>
+            <el-button @click="onDelete" :disabled="saving" type="danger" v-if="formData.id">
                 删除
             </el-button>
-            <el-button @click="onSave" :loading="$store.state.fetchingData" type="primary">保存</el-button>
+            <el-button @click="onSave" :loading="saving" type="primary">保存</el-button>
         </page-title>
         <div class="edit-view__content-wrapper">
             <div class="edit-view__content-section">

+ 4 - 4
src/main/resources/templates/ListViewTemplate.ftl

@@ -1,10 +1,10 @@
 <template>
     <div  class="list-view">
         <page-title>
-            <el-button @click="addRow" type="primary" icon="el-icon-plus" :loading="downloading" class="filter-item">
+            <el-button @click="addRow" type="primary" icon="el-icon-plus" :disabled="fetchingData || downloading" class="filter-item">
                 新增
             </el-button>
-            <el-button @click="download" icon="el-icon-upload2" :loading="downloading" class="filter-item">
+            <el-button @click="download" icon="el-icon-upload2" :loading="downloading" :disabled="fetchingData" class="filter-item">
                 导出
             </el-button>
         </page-title>
@@ -23,7 +23,7 @@
                   header-row-class-name="table-header-row"
                   header-cell-class-name="table-header-cell"
                   row-class-name="table-row" cell-class-name="table-cell"
-                  :height="tableHeight">
+                  :height="tableHeight" v-loading="fetchingData">
             <el-table-column v-if="multipleMode" align="center" type="selection"
                              width="50">
             </el-table-column>
@@ -65,7 +65,7 @@
                     label="操作"
                     align="center"
                     fixed="right"
-                    min-width="150">
+                    width="150">
                 <template slot-scope="{row}">
                     <#list model.subtables as subtable>
                         <el-button @click="$router.push({path:'/${subtable.subCode}List',query:{column:row.${subtable.column}+',${subtable.subColumn}'}})" type="primary" size="small" plain>${subtable.name}

+ 5 - 1
src/main/vue/src/mixins/pageableTable.js

@@ -8,7 +8,8 @@ export default {
             tableData: [],
             sort: {},
             sortStr: '',
-            tableHeight: 200
+            tableHeight: 200,
+            fetchingData: false
         };
     },
     created() {
@@ -46,9 +47,11 @@ export default {
                     data = { ...data, ...mergeData };
                 }
             }
+            this.fetchingData = true;
             this.$http
                 .post(this.url, data, { body: 'json' })
                 .then(res => {
+                    this.fetchingData = false;
                     this.tableData = res.content;
                     this.totalPages = res.totalPages;
                     this.totalElements = res.totalElements;
@@ -57,6 +60,7 @@ export default {
                     }
                 })
                 .catch(e => {
+                    this.fetchingData = false;
                     console.log(e);
                     this.$message.error(e.error);
                 });

+ 251 - 233
src/main/vue/src/views/GenCodeEdit.vue

@@ -1,262 +1,280 @@
 <template>
     <div v-loading="loading" element-loading-text="拼命加载中" class="edit-view">
-        <el-form :model="formData" :rules="rules" ref="form" label-width="50px" label-position="right" size="mini">
-            <el-form-item prop="tableName" label="表名">
-                <el-select
-                    placeholder="表名"
-                    clearable
-                    filterable
-                    v-model="formData.tableName"
-                    @change="changeTableName"
-                    class="filter-item"
+        <div class="edit-view__content-wrapper">
+            <div class="edit-view__content-section">
+                <el-form
+                    :model="formData"
+                    :rules="rules"
+                    ref="form"
+                    label-width="50px"
+                    label-position="right"
+                    size="mini"
                 >
-                    <el-option
-                        v-for="item in tableList"
-                        :label="item.name"
-                        :value="item.name"
-                        :key="item.name"
-                    ></el-option>
-                </el-select>
-            </el-form-item>
+                    <el-form-item prop="tableName" label="表名">
+                        <el-select
+                            placeholder="表名"
+                            clearable
+                            filterable
+                            v-model="formData.tableName"
+                            @change="changeTableName"
+                            class="filter-item"
+                        >
+                            <el-option
+                                v-for="item in tableList"
+                                :label="item.name"
+                                :value="item.name"
+                                :key="item.name"
+                            ></el-option>
+                        </el-select>
+                    </el-form-item>
 
-            <el-form-item prop="className" label="类名">
-                <el-input v-model="formData.className" style="width: 400px;"> </el-input>
-            </el-form-item>
+                    <el-form-item prop="className" label="类名">
+                        <el-input v-model="formData.className" style="width: 400px;"> </el-input>
+                    </el-form-item>
 
-            <el-form-item prop="tablePackage" label="包名">
-                <el-input v-model="formData.tablePackage" style="width: 400px;"> </el-input>
-            </el-form-item>
+                    <el-form-item prop="tablePackage" label="包名">
+                        <el-input v-model="formData.tablePackage" style="width: 400px;"> </el-input>
+                    </el-form-item>
 
-            <el-form-item prop="remark" label="描述">
-                <el-input v-model="formData.remark" style="width: 400px;"> </el-input>
-            </el-form-item>
+                    <el-form-item prop="remark" label="描述">
+                        <el-input v-model="formData.remark" style="width: 400px;"> </el-input>
+                    </el-form-item>
 
-            <el-form-item label="目录">
-                {{ formData.javaPath }}<br />
-                {{ formData.viewPath }}<br />
-                {{ formData.routerPath }}<br />
-                {{ formData.resourcesPath }}
-            </el-form-item>
+                    <el-form-item label="目录">
+                        {{ formData.javaPath }}<br />
+                        {{ formData.viewPath }}<br />
+                        {{ formData.routerPath }}<br />
+                        {{ formData.resourcesPath }}
+                    </el-form-item>
 
-            <el-form-item prop="genCode" label="生成">
-                <el-checkbox v-model="formData.genClass" label="类"> </el-checkbox>
-                <el-checkbox v-model="formData.genList" label="列表"> </el-checkbox>
-                <el-checkbox v-model="formData.genForm" label="表单"> </el-checkbox>
-                <el-checkbox v-model="formData.genRouter" label="路由"> </el-checkbox>
-            </el-form-item>
-            <el-form-item prop="fields" label="数据">
-                <el-tabs value="1" type="border-card">
-                    <el-tab-pane label="字段" name="1">
-                        <el-table :data="fields">
-                            <el-table-column prop="name" label="字段名" width="200" align="center">
-                                <template slot-scope="{ row }">
-                                    <el-input v-model="row.name"></el-input>
-                                </template>
-                            </el-table-column>
-                            <el-table-column prop="remark" label="描述" align="center" width="200">
-                                <template slot-scope="{ row }">
-                                    <el-input v-model="row.remark"></el-input>
-                                </template>
-                            </el-table-column>
-                            <el-table-column width="130" align="center">
-                                <template slot-scope="{ row, column, $index }">
-                                    <el-button @click="moveUp($index)" type="text">上移</el-button>
-                                    <el-button @click="moveDown($index)" type="text">下移</el-button>
-                                    <el-button @click="removeField($index)" type="text">删除</el-button>
-                                </template>
-                            </el-table-column>
-                        </el-table>
-                        <el-button @click="addField" type="text" icon="el-icon-plus">添加</el-button>
-                    </el-tab-pane>
-                    <el-tab-pane label="页面属性" name="2">
-                        <el-table :data="editableFields">
-                            <el-table-column prop="name" label="字段" width="200"> </el-table-column>
-                            <el-table-column prop="showInList" label="列表" width="50" align="center">
-                                <template slot-scope="{ row }">
-                                    <el-checkbox v-model="row.showInList"> </el-checkbox>
-                                </template>
-                            </el-table-column>
-                            <el-table-column prop="showInForm" label="表单" width="50" align="center">
-                                <template slot-scope="{ row }">
-                                    <el-checkbox
-                                        v-model="row.showInForm"
-                                        :disabled="row.primaryKey && !formData.readTable"
-                                    >
-                                    </el-checkbox>
-                                </template>
-                            </el-table-column>
-                            <!-- <el-table-column prop="sortable" label="排序" width="50" align="center">
+                    <el-form-item prop="genCode" label="生成">
+                        <el-checkbox v-model="formData.genClass" label="类"> </el-checkbox>
+                        <el-checkbox v-model="formData.genList" label="列表"> </el-checkbox>
+                        <el-checkbox v-model="formData.genForm" label="表单"> </el-checkbox>
+                        <el-checkbox v-model="formData.genRouter" label="路由"> </el-checkbox>
+                    </el-form-item>
+                    <el-form-item prop="fields" label="数据">
+                        <el-tabs value="1" type="border-card">
+                            <el-tab-pane label="字段" name="1">
+                                <el-table :data="fields">
+                                    <el-table-column prop="name" label="字段名" width="200" align="center">
+                                        <template slot-scope="{ row }">
+                                            <el-input v-model="row.name"></el-input>
+                                        </template>
+                                    </el-table-column>
+                                    <el-table-column prop="remark" label="描述" align="center" width="200">
+                                        <template slot-scope="{ row }">
+                                            <el-input v-model="row.remark"></el-input>
+                                        </template>
+                                    </el-table-column>
+                                    <el-table-column width="130" align="center">
+                                        <template slot-scope="{ row, column, $index }">
+                                            <el-button @click="moveUp($index)" type="text">上移</el-button>
+                                            <el-button @click="moveDown($index)" type="text">下移</el-button>
+                                            <el-button @click="removeField($index)" type="text">删除</el-button>
+                                        </template>
+                                    </el-table-column>
+                                </el-table>
+                                <el-button @click="addField" type="text" icon="el-icon-plus">添加</el-button>
+                            </el-tab-pane>
+                            <el-tab-pane label="页面属性" name="2">
+                                <el-table :data="editableFields">
+                                    <el-table-column prop="name" label="字段" width="200"> </el-table-column>
+                                    <el-table-column prop="showInList" label="列表" width="50" align="center">
+                                        <template slot-scope="{ row }">
+                                            <el-checkbox v-model="row.showInList"> </el-checkbox>
+                                        </template>
+                                    </el-table-column>
+                                    <el-table-column prop="showInForm" label="表单" width="50" align="center">
+                                        <template slot-scope="{ row }">
+                                            <el-checkbox
+                                                v-model="row.showInForm"
+                                                :disabled="row.primaryKey && !formData.readTable"
+                                            >
+                                            </el-checkbox>
+                                        </template>
+                                    </el-table-column>
+                                    <!-- <el-table-column prop="sortable" label="排序" width="50" align="center">
                                 <template slot-scope="{row}">
                                     <el-checkbox v-model="row.sortable"></el-checkbox>
                                 </template>
                             </el-table-column> -->
-                            <el-table-column prop="formType" label="表单类型" width="150" align="center">
-                                <template slot-scope="{ row }">
-                                    <el-select v-model="row.formType">
-                                        <el-option
-                                            v-for="item in formTypes"
-                                            :label="item.label"
-                                            :value="item.value"
-                                            :key="item.value"
-                                        ></el-option>
-                                    </el-select>
-                                </template>
-                            </el-table-column>
-                            <el-table-column prop="apiFlag" label="接口" width="300" align="center">
-                                <template slot-scope="{ row }">
-                                    <el-radio
-                                        v-model="row.apiFlag"
-                                        label="1"
-                                        :disabled="row.formType !== 'select' && row.formType !== 'multiSelect'"
-                                    >
-                                        枚举
-                                    </el-radio>
-                                    <el-radio
-                                        v-model="row.apiFlag"
-                                        label="2"
-                                        :disabled="row.formType !== 'select' && row.formType !== 'multiSelect'"
-                                    >
-                                        接口
-                                    </el-radio>
-                                </template>
-                            </el-table-column>
-                            <el-table-column prop="optionsValue" label="选项" min-width="150" align="center">
-                                <template slot-scope="{ row }">
-                                    <el-input
-                                        class="code"
-                                        v-model="row.optionsValue"
-                                        autosize
-                                        v-if="
-                                            row.apiFlag === '1' &&
-                                                (row.formType === 'select' || row.formType === 'multiSelect')
-                                        "
-                                    >
-                                        <el-button slot="append" type="text" @click="editOptions(row)">编辑 </el-button>
-                                    </el-input>
-                                    <el-input
-                                        class="code"
-                                        :value="optionsInfo(row)"
-                                        disabled
-                                        v-if="
-                                            (row.apiFlag === '2' || row.apiFlag === '3') &&
-                                                (row.formType === 'select' || row.formType === 'multiSelect')
-                                        "
-                                    >
-                                        <el-button slot="append" type="text" @click="editSelectField(row)"
-                                            >编辑
-                                        </el-button>
-                                    </el-input>
-                                </template>
-                            </el-table-column>
-                            <!-- <el-table-column prop="searchMethod" label="搜索方式" width="150" align="center">
+                                    <el-table-column prop="formType" label="表单类型" width="150" align="center">
+                                        <template slot-scope="{ row }">
+                                            <el-select v-model="row.formType">
+                                                <el-option
+                                                    v-for="item in formTypes"
+                                                    :label="item.label"
+                                                    :value="item.value"
+                                                    :key="item.value"
+                                                ></el-option>
+                                            </el-select>
+                                        </template>
+                                    </el-table-column>
+                                    <el-table-column prop="apiFlag" label="接口" width="300" align="center">
+                                        <template slot-scope="{ row }">
+                                            <el-radio
+                                                v-model="row.apiFlag"
+                                                label="1"
+                                                :disabled="row.formType !== 'select' && row.formType !== 'multiSelect'"
+                                            >
+                                                枚举
+                                            </el-radio>
+                                            <el-radio
+                                                v-model="row.apiFlag"
+                                                label="2"
+                                                :disabled="row.formType !== 'select' && row.formType !== 'multiSelect'"
+                                            >
+                                                接口
+                                            </el-radio>
+                                        </template>
+                                    </el-table-column>
+                                    <el-table-column prop="optionsValue" label="选项" min-width="150" align="center">
+                                        <template slot-scope="{ row }">
+                                            <el-input
+                                                class="code"
+                                                v-model="row.optionsValue"
+                                                autosize
+                                                v-if="
+                                                    row.apiFlag === '1' &&
+                                                        (row.formType === 'select' || row.formType === 'multiSelect')
+                                                "
+                                            >
+                                                <el-button slot="append" type="text" @click="editOptions(row)"
+                                                    >编辑
+                                                </el-button>
+                                            </el-input>
+                                            <el-input
+                                                class="code"
+                                                :value="optionsInfo(row)"
+                                                disabled
+                                                v-if="
+                                                    (row.apiFlag === '2' || row.apiFlag === '3') &&
+                                                        (row.formType === 'select' || row.formType === 'multiSelect')
+                                                "
+                                            >
+                                                <el-button slot="append" type="text" @click="editSelectField(row)"
+                                                    >编辑
+                                                </el-button>
+                                            </el-input>
+                                        </template>
+                                    </el-table-column>
+                                    <!-- <el-table-column prop="searchMethod" label="搜索方式" width="150" align="center">
                                 <template slot-scope="{row}">
                                     <el-select v-model="row.searchMethod">
                                         <el-option v-for="item in searchMethods" :label="item" :value="item" :key="item"></el-option>
                                     </el-select>
                                 </template>
                             </el-table-column> -->
-                        </el-table>
-                    </el-tab-pane>
-                    <el-tab-pane label="表单校验" name="3">
-                        <el-table :data="fields">
-                            <el-table-column prop="name" label="字段" width="200"> </el-table-column>
-                            <!-- <el-table-column prop="logicalKey" label="逻辑关键字"
+                                </el-table>
+                            </el-tab-pane>
+                            <el-tab-pane label="表单校验" name="3">
+                                <el-table :data="fields">
+                                    <el-table-column prop="name" label="字段" width="200"> </el-table-column>
+                                    <!-- <el-table-column prop="logicalKey" label="逻辑关键字"
                                              width="100" align="center">
                                 <template slot-scope="{row}">
                                     <el-checkbox v-model="row.logicalKey">
                                     </el-checkbox>
                                 </template>
                             </el-table-column> -->
-                            <el-table-column prop="required" label="必填" width="50" align="center">
-                                <template slot-scope="{ row }">
-                                    <el-checkbox v-model="row.required"> </el-checkbox>
-                                </template>
-                            </el-table-column>
-                            <el-table-column prop="validate" label="校验" width="50" align="center">
-                                <template slot-scope="{ row }">
-                                    <el-checkbox v-model="row.validate"> </el-checkbox>
-                                </template>
-                            </el-table-column>
-                            <el-table-column prop="minLength" label="最短" min-width="80" align="center">
-                                <template slot-scope="{ row }">
-                                    <el-input v-model.number="row.minLength"> </el-input>
-                                </template>
-                            </el-table-column>
-                            <el-table-column prop="maxLength" label="最长" min-width="80" align="center">
-                                <template slot-scope="{ row }">
-                                    <el-input v-model.number="row.maxLength"> </el-input>
-                                </template>
-                            </el-table-column>
-                            <el-table-column prop="min" label="最小值" min-width="80" align="center">
-                                <template slot-scope="{ row }">
-                                    <el-input v-model="row.min"></el-input>
-                                </template>
-                            </el-table-column>
-                            <el-table-column prop="max" label="最大值" min-width="80" align="center">
-                                <template slot-scope="{ row }">
-                                    <el-input v-model="row.max"></el-input>
-                                </template>
-                            </el-table-column>
-                            <el-table-column prop="validatorType" label="校验类型" min-width="150" align="center">
-                                <template slot-scope="{ row }">
-                                    <el-select v-model="row.validatorType" clearable>
-                                        <el-option
-                                            v-for="item in validatorTypes"
-                                            :label="item.label"
-                                            :value="item.value"
-                                            :key="item.value"
-                                        ></el-option>
-                                    </el-select>
-                                </template>
-                            </el-table-column>
-                        </el-table>
-                    </el-tab-pane>
-                    <el-tab-pane label="子表" name="4">
-                        <el-table :data="subtables">
-                            <el-table-column prop="name" label="控件名" width="150" align="center">
-                                <template slot-scope="{ row }">
-                                    <el-input v-model="row.name"></el-input>
-                                </template>
-                            </el-table-column>
+                                    <el-table-column prop="required" label="必填" width="50" align="center">
+                                        <template slot-scope="{ row }">
+                                            <el-checkbox v-model="row.required"> </el-checkbox>
+                                        </template>
+                                    </el-table-column>
+                                    <el-table-column prop="validate" label="校验" width="50" align="center">
+                                        <template slot-scope="{ row }">
+                                            <el-checkbox v-model="row.validate"> </el-checkbox>
+                                        </template>
+                                    </el-table-column>
+                                    <el-table-column prop="minLength" label="最短" min-width="80" align="center">
+                                        <template slot-scope="{ row }">
+                                            <el-input v-model.number="row.minLength"> </el-input>
+                                        </template>
+                                    </el-table-column>
+                                    <el-table-column prop="maxLength" label="最长" min-width="80" align="center">
+                                        <template slot-scope="{ row }">
+                                            <el-input v-model.number="row.maxLength"> </el-input>
+                                        </template>
+                                    </el-table-column>
+                                    <el-table-column prop="min" label="最小值" min-width="80" align="center">
+                                        <template slot-scope="{ row }">
+                                            <el-input v-model="row.min"></el-input>
+                                        </template>
+                                    </el-table-column>
+                                    <el-table-column prop="max" label="最大值" min-width="80" align="center">
+                                        <template slot-scope="{ row }">
+                                            <el-input v-model="row.max"></el-input>
+                                        </template>
+                                    </el-table-column>
+                                    <el-table-column
+                                        prop="validatorType"
+                                        label="校验类型"
+                                        min-width="150"
+                                        align="center"
+                                    >
+                                        <template slot-scope="{ row }">
+                                            <el-select v-model="row.validatorType" clearable>
+                                                <el-option
+                                                    v-for="item in validatorTypes"
+                                                    :label="item.label"
+                                                    :value="item.value"
+                                                    :key="item.value"
+                                                ></el-option>
+                                            </el-select>
+                                        </template>
+                                    </el-table-column>
+                                </el-table>
+                            </el-tab-pane>
+                            <el-tab-pane label="子表" name="4">
+                                <el-table :data="subtables">
+                                    <el-table-column prop="name" label="控件名" width="150" align="center">
+                                        <template slot-scope="{ row }">
+                                            <el-input v-model="row.name"></el-input>
+                                        </template>
+                                    </el-table-column>
 
-                            <el-table-column prop="column" label="主表字段" width="150" align="center">
-                                <template slot-scope="{ row }">
-                                    <el-input v-model="row.column"></el-input>
-                                </template>
-                            </el-table-column>
+                                    <el-table-column prop="column" label="主表字段" width="150" align="center">
+                                        <template slot-scope="{ row }">
+                                            <el-input v-model="row.column"></el-input>
+                                        </template>
+                                    </el-table-column>
 
-                            <el-table-column prop="subColumn" label="子表字段" width="150" align="center">
-                                <template slot-scope="{ row }">
-                                    <el-input v-model="row.subColumn"> </el-input>
-                                </template>
-                            </el-table-column>
-                            <el-table-column prop="subCode" label="子表类" width="150" align="center">
-                                <template slot-scope="{ row }">
-                                    <el-select v-model="row.subCode" clearable>
-                                        <el-option
-                                            v-for="item in subCodes"
-                                            :label="item.className"
-                                            :value="item.className"
-                                            :key="item.className"
-                                        ></el-option>
-                                    </el-select>
-                                </template>
-                            </el-table-column>
-                            <el-table-column width="60" align="center">
-                                <template slot-scope="{ row, column, $index }">
-                                    <el-button @click="removeSubtable($index)" type="text">删除</el-button>
-                                </template>
-                            </el-table-column>
-                        </el-table>
-                        <el-button @click="addSubtable" type="text" icon="el-icon-plus">添加</el-button>
-                    </el-tab-pane>
-                </el-tabs>
-            </el-form-item>
-            <el-form-item>
-                <el-button @click="onSave" :loading="$store.state.fetchingData" type="primary">保存</el-button>
-                <el-button @click="$router.go(-1)">取消</el-button>
-            </el-form-item>
-        </el-form>
+                                    <el-table-column prop="subColumn" label="子表字段" width="150" align="center">
+                                        <template slot-scope="{ row }">
+                                            <el-input v-model="row.subColumn"> </el-input>
+                                        </template>
+                                    </el-table-column>
+                                    <el-table-column prop="subCode" label="子表类" width="150" align="center">
+                                        <template slot-scope="{ row }">
+                                            <el-select v-model="row.subCode" clearable>
+                                                <el-option
+                                                    v-for="item in subCodes"
+                                                    :label="item.className"
+                                                    :value="item.className"
+                                                    :key="item.className"
+                                                ></el-option>
+                                            </el-select>
+                                        </template>
+                                    </el-table-column>
+                                    <el-table-column width="60" align="center">
+                                        <template slot-scope="{ row, column, $index }">
+                                            <el-button @click="removeSubtable($index)" type="text">删除</el-button>
+                                        </template>
+                                    </el-table-column>
+                                </el-table>
+                                <el-button @click="addSubtable" type="text" icon="el-icon-plus">添加</el-button>
+                            </el-tab-pane>
+                        </el-tabs>
+                    </el-form-item>
+                    <el-form-item>
+                        <el-button @click="onSave" :loading="$store.state.fetchingData" type="primary">保存</el-button>
+                        <el-button @click="$router.go(-1)">取消</el-button>
+                    </el-form-item>
+                </el-form>
+            </div>
+        </div>
 
         <el-dialog title="接口选项" :visible.sync="showApiSelectDialog">
             <el-form :model="selectField" label-position="right" label-width="80px">

+ 8 - 6
src/main/vue/src/views/TestClassEdit.vue

@@ -1,11 +1,11 @@
 <template>
     <div class="edit-view">
         <page-title>
-            <el-button @click="$router.go(-1)">取消</el-button>
-            <el-button @click="onDelete" :loading="$store.state.fetchingData" type="danger" v-if="formData.id">
+            <el-button @click="$router.go(-1)" :disabled="saving">取消</el-button>
+            <el-button @click="onDelete" :disabled="saving" type="danger" v-if="formData.id">
                 删除
             </el-button>
-            <el-button @click="onSave" :loading="$store.state.fetchingData" type="primary">保存</el-button>
+            <el-button @click="onSave" :loading="saving" type="primary">保存</el-button>
         </page-title>
         <div class="edit-view__content-wrapper">
             <div class="edit-view__content-section">
@@ -22,11 +22,13 @@
                         <el-input v-model="formData.name"></el-input>
                     </el-form-item>
                     <el-form-item class="form-submit">
-                        <el-button @click="onSave" :loading="saving" size="small" type="primary">保存 </el-button>
-                        <el-button @click="onDelete" :disabled="saving" size="small" type="danger" v-if="formData.id">
+                        <el-button @click="onSave" :loading="saving" type="primary">
+                            保存
+                        </el-button>
+                        <el-button @click="onDelete" :disabled="saving" type="danger" v-if="formData.id">
                             删除
                         </el-button>
-                        <el-button @click="$router.go(-1)" :disabled="saving" size="small">取消</el-button>
+                        <el-button @click="$router.go(-1)" :disabled="saving">取消</el-button>
                     </el-form-item>
                 </el-form>
             </div>

+ 16 - 3
src/main/vue/src/views/TestClassList.vue

@@ -1,10 +1,22 @@
 <template>
     <div class="list-view">
         <page-title>
-            <el-button @click="addRow" type="primary" icon="el-icon-plus" :loading="downloading" class="filter-item">
+            <el-button
+                @click="addRow"
+                type="primary"
+                icon="el-icon-plus"
+                :disabled="fetchingData || downloading"
+                class="filter-item"
+            >
                 新增
             </el-button>
-            <el-button @click="download" icon="el-icon-upload2" :loading="downloading" class="filter-item">
+            <el-button
+                @click="download"
+                icon="el-icon-upload2"
+                :loading="downloading"
+                :disabled="fetchingData"
+                class="filter-item"
+            >
                 导出
             </el-button>
         </page-title>
@@ -28,11 +40,12 @@
             row-class-name="table-row"
             cell-class-name="table-cell"
             :height="tableHeight"
+            v-loading="fetchingData"
         >
             <el-table-column v-if="multipleMode" align="center" type="selection" width="50"> </el-table-column>
             <el-table-column prop="id" label="ID" width="100"> </el-table-column>
             <el-table-column prop="name" label="name"> </el-table-column>
-            <el-table-column label="操作" align="center" fixed="right" min-width="150">
+            <el-table-column label="操作" align="center" fixed="right" width="150">
                 <template slot-scope="{ row }">
                     <el-button @click="editRow(row)" type="primary" size="mini" plain>编辑</el-button>
                     <el-button @click="deleteRow(row)" type="danger" size="mini" plain>删除</el-button>