Răsfoiți Sursa

子表逻辑

suochencheng 7 ani în urmă
părinte
comite
a89353d9e1

+ 2 - 2
src/main/java/com/izouma/awesomeadmin/dao/CommonQueryMapper.xml

@@ -8,7 +8,7 @@
 
 
         SELECT * FROM ${record.tableName}
         SELECT * FROM ${record.tableName}
         <where>
         <where>
-            and (del_flag = 'N' or del_flag = 0)
+            and (del_flag = 'N' or del_flag = '0')
 
 
             <if test="record.advancedQuery != null and !&quot;&quot;.equals(record.advancedQuery)">
             <if test="record.advancedQuery != null and !&quot;&quot;.equals(record.advancedQuery)">
                 <foreach item="item" index="index" collection="record.advancedQuery.split('_;')">
                 <foreach item="item" index="index" collection="record.advancedQuery.split('_;')">
@@ -76,7 +76,7 @@
 
 
         SELECT * FROM ${tableName}
         SELECT * FROM ${tableName}
         <where>
         <where>
-            and (del_flag = 'N' or del_flag = 0)
+            and (del_flag = 'N' or del_flag = '0')
             <if test="advancedQuery != null and !&quot;&quot;.equals(advancedQuery)">
             <if test="advancedQuery != null and !&quot;&quot;.equals(advancedQuery)">
                 <foreach item="item" index="index" collection="advancedQuery.split('_;')">
                 <foreach item="item" index="index" collection="advancedQuery.split('_;')">
                     <choose>
                     <choose>

+ 12 - 0
src/main/java/com/izouma/awesomeadmin/dao/QueryConfigMapper.xml

@@ -12,6 +12,7 @@
         <result column="data_source_code" property="dataSourceCode" jdbcType="VARCHAR"/>
         <result column="data_source_code" property="dataSourceCode" jdbcType="VARCHAR"/>
         <result column="config_json" property="configJson" jdbcType="VARCHAR"/>
         <result column="config_json" property="configJson" jdbcType="VARCHAR"/>
         <result column="type_flag" property="typeFlag" jdbcType="VARCHAR"/>
         <result column="type_flag" property="typeFlag" jdbcType="VARCHAR"/>
+        <result column="sub_json" property="subJson" jdbcType="VARCHAR"/>
     </resultMap>
     </resultMap>
     <sql id="Base_Column_List">
     <sql id="Base_Column_List">
         <trim suffixOverrides=",">
         <trim suffixOverrides=",">
@@ -35,6 +36,8 @@
 
 
             type_flag,
             type_flag,
 
 
+            sub_json,
+
         </trim>
         </trim>
     </sql>
     </sql>
     <select id="selectByPrimaryKey" resultMap="BaseResultMap" parameterType="java.lang.Integer">
     <select id="selectByPrimaryKey" resultMap="BaseResultMap" parameterType="java.lang.Integer">
@@ -81,6 +84,9 @@
             <if test="typeFlag!= null">
             <if test="typeFlag!= null">
                 type_flag,
                 type_flag,
             </if>
             </if>
+            <if test="subJson!= null">
+                sub_json,
+            </if>
         </trim>
         </trim>
         <trim prefix="values (" suffix=")" suffixOverrides=",">
         <trim prefix="values (" suffix=")" suffixOverrides=",">
             <if test="id != null">
             <if test="id != null">
@@ -113,6 +119,9 @@
             <if test="typeFlag != null">
             <if test="typeFlag != null">
                 #{typeFlag,jdbcType=VARCHAR},
                 #{typeFlag,jdbcType=VARCHAR},
             </if>
             </if>
+            <if test="subJson != null">
+                #{subJson,jdbcType=VARCHAR},
+            </if>
         </trim>
         </trim>
     </insert>
     </insert>
     <update id="updateByPrimaryKeySelective" parameterType="com.izouma.awesomeadmin.model.QueryConfig">
     <update id="updateByPrimaryKeySelective" parameterType="com.izouma.awesomeadmin.model.QueryConfig">
@@ -148,6 +157,9 @@
             <if test="typeFlag != null">
             <if test="typeFlag != null">
                 type_flag= #{typeFlag,jdbcType=VARCHAR},
                 type_flag= #{typeFlag,jdbcType=VARCHAR},
             </if>
             </if>
+            <if test="subJson != null">
+                sub_json= #{subJson,jdbcType=VARCHAR},
+            </if>
         </set>
         </set>
         where id = #{id,jdbcType=INTEGER}
         where id = #{id,jdbcType=INTEGER}
     </update>
     </update>

+ 10 - 0
src/main/java/com/izouma/awesomeadmin/model/GenCode.java

@@ -105,6 +105,8 @@ public class GenCode {
 
 
     private String typeFlag;
     private String typeFlag;
 
 
+    private List<Subtable> subtables;
+
 
 
     public List<TableField> getFields() {
     public List<TableField> getFields() {
         return fields;
         return fields;
@@ -281,5 +283,13 @@ public class GenCode {
     public void setTypeFlag(String typeFlag) {
     public void setTypeFlag(String typeFlag) {
         this.typeFlag = typeFlag;
         this.typeFlag = typeFlag;
     }
     }
+
+    public List<Subtable> getSubtables() {
+        return subtables;
+    }
+
+    public void setSubtables(List<Subtable> subtables) {
+        this.subtables = subtables;
+    }
 }
 }
 
 

+ 23 - 0
src/main/java/com/izouma/awesomeadmin/model/QueryConfig.java

@@ -33,6 +33,13 @@ public class QueryConfig {
 
 
     private String typeFlag;
     private String typeFlag;
 
 
+    private List<Subtable> subtables;
+
+    /**
+     * 子表json
+     */
+    private String subJson;
+
     public Integer getId() {
     public Integer getId() {
         return this.id;
         return this.id;
     }
     }
@@ -136,5 +143,21 @@ public class QueryConfig {
     public void setTypeFlag(String typeFlag) {
     public void setTypeFlag(String typeFlag) {
         this.typeFlag = typeFlag;
         this.typeFlag = typeFlag;
     }
     }
+
+    public List<Subtable> getSubtables() {
+        return subtables;
+    }
+
+    public void setSubtables(List<Subtable> subtables) {
+        this.subtables = subtables;
+    }
+
+    public String getSubJson() {
+        return subJson;
+    }
+
+    public void setSubJson(String subJson) {
+        this.subJson = subJson;
+    }
 }
 }
 
 

+ 55 - 0
src/main/java/com/izouma/awesomeadmin/model/Subtable.java

@@ -0,0 +1,55 @@
+package com.izouma.awesomeadmin.model;
+
+
+import com.fasterxml.jackson.annotation.JsonAutoDetect;
+import com.fasterxml.jackson.annotation.JsonInclude;
+
+/**
+ * table_field 实体类
+ * Fri May 04 13:38:24 CST 2018  Suo Chen Cheng
+ */
+@JsonAutoDetect
+@JsonInclude(JsonInclude.Include.NON_NULL)
+public class Subtable {
+
+    private String name;
+
+    private String column;
+
+    private String subColumn;
+
+    private String subCode;
+
+    public String getName() {
+        return name;
+    }
+
+    public void setName(String name) {
+        this.name = name;
+    }
+
+    public String getColumn() {
+        return column;
+    }
+
+    public void setColumn(String column) {
+        this.column = column;
+    }
+
+    public String getSubColumn() {
+        return subColumn;
+    }
+
+    public void setSubColumn(String subColumn) {
+        this.subColumn = subColumn;
+    }
+
+    public String getSubCode() {
+        return subCode;
+    }
+
+    public void setSubCode(String subCode) {
+        this.subCode = subCode;
+    }
+}
+

+ 0 - 1
src/main/java/com/izouma/awesomeadmin/service/impl/CommonQueryServiceImpl.java

@@ -195,7 +195,6 @@ public class CommonQueryServiceImpl implements CommonQueryService {
             if ("SqlServer".equals(databaseType)) {
             if ("SqlServer".equals(databaseType)) {
                 foo = CommonQuerySqlServerMapper.class.getAnnotation(DataSource.class);
                 foo = CommonQuerySqlServerMapper.class.getAnnotation(DataSource.class);
             }
             }
-
             //获取注解实例的 value 属性值
             //获取注解实例的 value 属性值
             String value = foo.value();
             String value = foo.value();
             //打印该值
             //打印该值

+ 2 - 0
src/main/java/com/izouma/awesomeadmin/web/QueryConfigController.java

@@ -85,6 +85,7 @@ public class QueryConfigController extends BaseController {
 
 
         Gson gson = new Gson();
         Gson gson = new Gson();
         record.setConfigJson(gson.toJson(record.getFields()));
         record.setConfigJson(gson.toJson(record.getFields()));
+        record.setSubJson(gson.toJson(record.getSubtables()));
 
 
         boolean num = queryConfigService.createQueryConfig(record);
         boolean num = queryConfigService.createQueryConfig(record);
         if (num) {
         if (num) {
@@ -102,6 +103,7 @@ public class QueryConfigController extends BaseController {
 
 
         Gson gson = new Gson();
         Gson gson = new Gson();
         record.setConfigJson(gson.toJson(record.getFields()));
         record.setConfigJson(gson.toJson(record.getFields()));
+        record.setSubJson(gson.toJson(record.getSubtables()));
 
 
         boolean num = queryConfigService.updateQueryConfig(record);
         boolean num = queryConfigService.updateQueryConfig(record);
         if (num) {
         if (num) {

+ 31 - 12
src/main/resources/templates/FormTemplate.vm

@@ -6,17 +6,17 @@
                 #if(${field.showInForm})
                 #if(${field.showInForm})
                     #if(${field.formType}=="singleLineText")
                     #if(${field.formType}=="singleLineText")
             <el-form-item prop="${field.modelName}" label="${field.remark}">
             <el-form-item prop="${field.modelName}" label="${field.remark}">
-                <el-input v-model="formData.${field.modelName}"></el-input>
+                <el-input v-model="formData.${field.modelName}" :disabled="'${field.modelName}'==subColumn"></el-input>
             </el-form-item>
             </el-form-item>
                     #end
                     #end
                     #if(${field.formType}=="textarea")
                     #if(${field.formType}=="textarea")
             <el-form-item prop="${field.modelName}" label="${field.remark}">
             <el-form-item prop="${field.modelName}" label="${field.remark}">
-                <el-input type="textarea" v-model="formData.${field.modelName}"></el-input>
+                <el-input type="textarea" v-model="formData.${field.modelName}" :disabled="'${field.modelName}'==subColumn"></el-input>
             </el-form-item>
             </el-form-item>
                     #end
                     #end
                     #if(${field.formType}=="number")
                     #if(${field.formType}=="number")
             <el-form-item prop="${field.modelName}" label="${field.remark}">
             <el-form-item prop="${field.modelName}" label="${field.remark}">
-                <el-input type="number" v-model="formData.${field.modelName}"></el-input>
+                <el-input type="number" v-model="formData.${field.modelName}" :disabled="'${field.modelName}'==subColumn"></el-input>
             </el-form-item>
             </el-form-item>
                     #end
                     #end
                     #if(${field.formType}=="date")
                     #if(${field.formType}=="date")
@@ -27,7 +27,8 @@
                                 v-model="formData.${field.modelName}"
                                 v-model="formData.${field.modelName}"
                                 type="date"
                                 type="date"
                                 value-format="timestamp"
                                 value-format="timestamp"
-                                placeholder="选择日期">
+                                placeholder="选择日期"
+                                :disabled="'${field.modelName}'==subColumn">
                         </el-date-picker>
                         </el-date-picker>
                     </div>
                     </div>
                 </template>
                 </template>
@@ -41,7 +42,8 @@
                                             v-model="formData.${field.modelName}"
                                             v-model="formData.${field.modelName}"
                                             type="datetime"
                                             type="datetime"
                                             value-format="timestamp"
                                             value-format="timestamp"
-                                            placeholder="选择日期">
+                                            placeholder="选择日期"
+                                            :disabled="'${field.modelName}'==subColumn">
                                     </el-date-picker>
                                     </el-date-picker>
                                 </div>
                                 </div>
                             </template>
                             </template>
@@ -50,7 +52,7 @@
                     #if(${field.formType}=="select")
                     #if(${field.formType}=="select")
             <el-form-item prop="${field.modelName}" label="${field.remark}">
             <el-form-item prop="${field.modelName}" label="${field.remark}">
                 <template>
                 <template>
-                    <el-select v-model="formData.${field.modelName}" clearable  placeholder="请选择">
+                    <el-select v-model="formData.${field.modelName}" clearable  placeholder="请选择" :disabled="'${field.modelName}'==subColumn">
                         <el-option
                         <el-option
                                 v-for="item in ${field.modelName}Options"
                                 v-for="item in ${field.modelName}Options"
                                 :key="item.value"
                                 :key="item.value"
@@ -64,7 +66,7 @@
                     #if(${field.formType}=="multiSelect")
                     #if(${field.formType}=="multiSelect")
             <el-form-item prop="${field.modelName}" label="${field.remark}">
             <el-form-item prop="${field.modelName}" label="${field.remark}">
                 <template>
                 <template>
-                    <el-select v-model="formData.${field.modelName}" multiple clearable placeholder="请选择">
+                    <el-select v-model="formData.${field.modelName}" multiple clearable placeholder="请选择" :disabled="'${field.modelName}'==subColumn">
                         <el-option
                         <el-option
                                 v-for="item in ${field.modelName}Options"
                                 v-for="item in ${field.modelName}Options"
                                 :key="item.value"
                                 :key="item.value"
@@ -77,12 +79,12 @@
                     #end
                     #end
                     #if(${field.formType}=="singleImage")
                     #if(${field.formType}=="singleImage")
              <el-form-item prop="${field.modelName}" label="${field.remark}">
              <el-form-item prop="${field.modelName}" label="${field.remark}">
-                 <single-upload v-model="formData.${field.modelName}"></single-upload>
+                 <single-upload v-model="formData.${field.modelName}" :disabled="'${field.modelName}'==subColumn"></single-upload>
              </el-form-item>
              </el-form-item>
                     #end
                     #end
                     #if(${field.formType}=="multiImage")
                     #if(${field.formType}=="multiImage")
             <el-form-item prop="${field.modelName}" label="${field.remark}">
             <el-form-item prop="${field.modelName}" label="${field.remark}">
-                <multi-upload v-model="formData.${field.modelName}"></multi-upload>
+                <multi-upload v-model="formData.${field.modelName}" :disabled="'${field.modelName}'==subColumn"></multi-upload>
             </el-form-item>
             </el-form-item>
                     #end
                     #end
                     #if(${field.formType}=="fileUpload")
                     #if(${field.formType}=="fileUpload")
@@ -92,7 +94,7 @@
                         action="../assets/uploadFile"
                         action="../assets/uploadFile"
                         :on-change="handleChange"
                         :on-change="handleChange"
                         :file-list="fileList3">
                         :file-list="fileList3">
-                    <el-button size="small" type="primary">点击上传</el-button>
+                    <el-button size="small" type="primary" :disabled="'${field.modelName}'==subColumn" >点击上传</el-button>
                     <div slot="tip" class="el-upload__tip">只能上传jpg/png文件 ,且不超过500kb</div>
                     <div slot="tip" class="el-upload__tip">只能上传jpg/png文件 ,且不超过500kb</div>
                 </el-upload>
                 </el-upload>
             </el-form-item>
             </el-form-item>
@@ -104,7 +106,8 @@
                         :load="loadNode"
                         :load="loadNode"
                         lazy
                         lazy
                         show-checkbox
                         show-checkbox
-                        @check-change="handleCheckChange">
+                        @check-change="handleCheckChange"
+                        :disabled="'${field.modelName}'==subColumn">
                 </el-tree>
                 </el-tree>
             </el-form-item>
             </el-form-item>
                     #end
                     #end
@@ -113,7 +116,8 @@
                 <el-switch
                 <el-switch
                         v-model="formData.${field.modelName}"
                         v-model="formData.${field.modelName}"
                         active-color="#13ce66"
                         active-color="#13ce66"
-                        inactive-color="#ff4949">
+                        inactive-color="#ff4949"
+                        :disabled="'${field.modelName}'==subColumn">
                 </el-switch>
                 </el-switch>
             </el-form-item>
             </el-form-item>
                     #end
                     #end
@@ -132,6 +136,11 @@
 
 
     export default {
     export default {
         created() {
         created() {
+            if (this.${esc.d}route.query.column) {
+                this.subColumn = this.${esc.d}route.query.column.split(',')[1];
+                this.subValue = this.${esc.d}route.query.column.split(',')[0];
+            }
+
             if (this.${esc.d}route.query.id) {
             if (this.${esc.d}route.query.id) {
                 this.${esc.d}http.get({
                 this.${esc.d}http.get({
                     url: '/${display.uncapitalize($model.className)}/getOne',
                     url: '/${display.uncapitalize($model.className)}/getOne',
@@ -154,8 +163,16 @@
                         #end
                         #end
 
 
                         this.formData = res.data;
                         this.formData = res.data;
+
+                    if (this.${esc.d}route.query.column) {
+                        this.formData[this.subColumn] = this.subValue;
+                    }
                     }
                     }
                 })
                 })
+            }else {
+                if (this.${esc.d}route.query.column) {
+                    this.formData[this.subColumn] = this.subValue;
+                }
             }
             }
 
 
             #foreach($field in $model.fields)
             #foreach($field in $model.fields)
@@ -241,6 +258,8 @@
         #end
         #end
         #end
         #end
     #end
     #end
+            subColumn: '',
+            subValue: '',
         }
         }
         },
         },
         methods: {
         methods: {

+ 23 - 10
src/main/resources/templates/ListTemplate.vm

@@ -15,7 +15,7 @@
             <el-button @click="showTableSortDialog = !showTableSortDialog" type="primary" size="small"
             <el-button @click="showTableSortDialog = !showTableSortDialog" type="primary" size="small"
                        icon="el-icon-sort" class="filter-item">排序
                        icon="el-icon-sort" class="filter-item">排序
             </el-button>
             </el-button>
-            <el-button @click="${esc.d}router.push('/${display.uncapitalize($model.className)}')" type="primary"
+            <el-button @click="${esc.d}router.push({path:'/${display.uncapitalize($model.className)}',query:{column:${esc.d}route.query.column}})" type="primary"
                        size="small" icon="el-icon-edit"
                        size="small" icon="el-icon-edit"
                        class="filter-item">添加
                        class="filter-item">添加
             </el-button>
             </el-button>
@@ -94,13 +94,17 @@
                     min-width="150"
                     min-width="150"
             >
             >
                 <template slot-scope="scope">
                 <template slot-scope="scope">
+        #foreach($subtable in $model.subtables)
+            <el-button @click="${esc.d}router.push({path:'/${subtable.subCode}s',query:{column:scope.row.${subtable.column}+',${subtable.subColumn}'}})" type="primary" size="small" plain>${subtable.name}
+            </el-button>
+        #end
                     <el-button @click="editRow(scope.row)" type="primary" size="mini" plain>编辑</el-button>
                     <el-button @click="editRow(scope.row)" type="primary" size="mini" plain>编辑</el-button>
                     <el-button @click="deleteRow(scope.row)" type="danger" size="mini" plain>删除</el-button>
                     <el-button @click="deleteRow(scope.row)" type="danger" size="mini" plain>删除</el-button>
                 </template>
                 </template>
             </el-table-column>
             </el-table-column>
         </el-table>
         </el-table>
         <div class="pagination-wrapper">
         <div class="pagination-wrapper">
-            <div class="multiple-mode-wrapper">
+            <div class="multiple-mode-wrapper" v-if="0">
                 <el-button size="small" v-if="!multipleMode" @click="toggleMultipleMode(true)">批量编辑</el-button>
                 <el-button size="small" v-if="!multipleMode" @click="toggleMultipleMode(true)">批量编辑</el-button>
                 <el-button-group v-else>
                 <el-button-group v-else>
                     <el-button size="small" @click="operation1">批量操作1</el-button>
                     <el-button size="small" @click="operation1">批量操作1</el-button>
@@ -278,15 +282,23 @@
                 this.getData();
                 this.getData();
             },
             },
             getData() {
             getData() {
+
+                var data = {
+                    currentPage: this.currentPage,
+                    pageNumber: this.pageSize,
+                    searchKey: this.filter1,
+                    advancedQuery: this.advancedQuerySearchKey,
+                    orderByStr: this.orderByStr,
+                }
+
+                if (this.${esc.d}route.query.column) {
+                    var tempColumn = this.${esc.d}route.query.column;
+                    data[tempColumn.split(',')[1]] = tempColumn.split(',')[0];
+                }
+
                 this.${esc.d}http.get({
                 this.${esc.d}http.get({
                     url: '/${display.uncapitalize($model.className)}/page',
                     url: '/${display.uncapitalize($model.className)}/page',
-                    data: {
-                        currentPage: this.currentPage,
-                        pageNumber: this.pageSize,
-                        searchKey: this.filter1,
-                        advancedQuery: this.advancedQuerySearchKey,
-                        orderByStr: this.orderByStr,
-                    }
+                    data: data
                 }).then(res => {
                 }).then(res => {
                     if (res.success) {
                     if (res.success) {
                         this.totalNumber = res.data.page.totalNumber;
                         this.totalNumber = res.data.page.totalNumber;
@@ -308,7 +320,8 @@
                 this.${esc.d}router.push({
                 this.${esc.d}router.push({
                     path: '/${display.uncapitalize($model.className)}',
                     path: '/${display.uncapitalize($model.className)}',
                     query: {
                     query: {
-                        id: row.id
+                        id: row.id,
+                        column: this.${esc.d}route.query.column,
                     }
                     }
                 })
                 })
             },
             },

+ 49 - 27
src/main/vue/src/pages/CommonQuery.vue

@@ -5,40 +5,44 @@
             <template v-for="item in tableColumns">
             <template v-for="item in tableColumns">
 
 
                 <el-form-item :prop="item.name" :label="item.remark">
                 <el-form-item :prop="item.name" :label="item.remark">
+                    <template v-if="item.name!=subColumn">
 
 
-                    <template v-if="item.formType=='date'">
-                        <div class="block">
-                            <el-date-picker v-model="formData[item.name]" type="date" value-format="timestamp" placeholder="选择日期">
-                            </el-date-picker>
-                        </div>
-                    </template>
+                        <template v-if="item.formType=='date'">
+                            <div class="block">
+                                <el-date-picker v-model="formData[item.name]" type="date" value-format="timestamp" placeholder="选择日期">
+                                </el-date-picker>
+                            </div>
+                        </template>
 
 
-                    <template v-else-if="item.formType=='datetime'">
-                        <div class="block">
-                            <el-date-picker v-model="formData[item.name]" type="datetime" value-format="timestamp" placeholder="选择时间">
-                            </el-date-picker>
-                        </div>
-                    </template>
+                        <template v-else-if="item.formType=='datetime'">
+                            <div class="block">
+                                <el-date-picker v-model="formData[item.name]" type="datetime" value-format="timestamp" placeholder="选择时间">
+                                </el-date-picker>
+                            </div>
+                        </template>
 
 
-                    <template v-else-if="item.formType=='select'">
+                        <template v-else-if="item.formType=='select'">
 
 
-                        <el-select v-model="formData[item.name]" clearable placeholder="请选择">
-                            <el-option v-for="optionItem in selectOptions[item.name]" :key="optionItem" :label="optionItem" :value="optionItem">
-                            </el-option>
-                        </el-select>
+                            <el-select v-model="formData[item.name]" clearable placeholder="请选择">
+                                <el-option v-for="optionItem in selectOptions[item.name]" :key="optionItem" :label="optionItem" :value="optionItem">
+                                </el-option>
+                            </el-select>
 
 
-                    </template>
+                        </template>
 
 
-                    <template v-else-if="item.formType=='multiSelect'">
-                        <el-select v-model="formData[item.name]" multiple clearable placeholder="请选择">
-                            <el-option v-for="optionItem in selectOptions[item.name]" :key="optionItem" :label="optionItem" :value="optionItem">
-                            </el-option>
-                        </el-select>
-                    </template>
+                        <template v-else-if="item.formType=='multiSelect'">
+                            <el-select v-model="formData[item.name]" multiple clearable placeholder="请选择">
+                                <el-option v-for="optionItem in selectOptions[item.name]" :key="optionItem" :label="optionItem" :value="optionItem">
+                                </el-option>
+                            </el-select>
+                        </template>
 
 
-                    <single-upload v-else-if="item.formType=='singleImage'" v-model="formData[item.name]"></single-upload>
+                        <single-upload v-else-if="item.formType=='singleImage'" v-model="formData[item.name]"></single-upload>
 
 
-                    <el-input v-else v-model="formData[item.name]"></el-input>
+                        <el-input v-else v-model="formData[item.name]"></el-input>
+
+                    </template>
+                    <el-input v-else v-model="formData[item.name]" disabled></el-input>
 
 
                 </el-form-item>
                 </el-form-item>
 
 
@@ -58,6 +62,11 @@ import zh from 'date-fns/locale/zh_cn'
 
 
 export default {
 export default {
     created() {
     created() {
+
+        if (this.$route.query.column) {
+            this.subColumn = this.$route.query.column.split(',')[1];
+            this.subValue = this.$route.query.column.split(',')[0];
+        }
         this.getTableBase();
         this.getTableBase();
 
 
 
 
@@ -76,6 +85,8 @@ export default {
             tableName: '',
             tableName: '',
             modules: [],
             modules: [],
             dataSourceCode: '',
             dataSourceCode: '',
+            subColumn: '',
+            subValue: '',
         }
         }
     },
     },
     methods: {
     methods: {
@@ -163,9 +174,19 @@ export default {
                         });
                         });
 
 
                         this.formData = res.data;
                         this.formData = res.data;
+                        if (this.$route.query.column) {
+                            this.formData[this.subColumn] = this.subValue;
+                        }
                     }
                     }
                 })
                 })
+            } else {
+                if (this.$route.query.column) {
+                    this.formData[this.subColumn] = this.subValue;
+                }
             }
             }
+
+
+
         },
         },
         getTableBase() {
         getTableBase() {
 
 
@@ -288,7 +309,8 @@ export default {
                         data: {
                         data: {
                             tableName: this.tableName,
                             tableName: this.tableName,
                             primaryKey: this.$route.query.id,
                             primaryKey: this.$route.query.id,
-                            databasetype: this.databasetype
+                            databasetype: this.databasetype,
+                            dataSourceCode: this.dataSourceCode
                         }
                         }
                     })
                     })
                 }).then(() => {
                 }).then(() => {

+ 53 - 4
src/main/vue/src/pages/CommonQuerys.vue

@@ -10,7 +10,7 @@
             <el-button v-if="isModulesShow('query')" @click="showAdvancedQueryDialog = !showAdvancedQueryDialog" type="primary" size="small" icon="el-icon-search" class="filter-item">高级查询
             <el-button v-if="isModulesShow('query')" @click="showAdvancedQueryDialog = !showAdvancedQueryDialog" type="primary" size="small" icon="el-icon-search" class="filter-item">高级查询
             </el-button>
             </el-button>
 
 
-            <el-button v-if="isModulesShow('add')" @click="$router.push({path:'/commonQuery',query:{code:$route.query.code}})" type="primary" size="small" icon="el-icon-edit" class="filter-item">添加
+            <el-button v-if="isModulesShow('add')" @click="$router.push({path:'/commonQuery',query:{code:$route.query.code,column:$route.query.column}})" type="primary" size="small" icon="el-icon-edit" class="filter-item">添加
             </el-button>
             </el-button>
 
 
             <el-dropdown trigger="click" size="medium" class="table-column-filter">
             <el-dropdown trigger="click" size="medium" class="table-column-filter">
@@ -44,7 +44,13 @@
             </template>
             </template>
             <el-table-column label="操作" align="center" fixed="right" v-if="isModulesShow('edit')">
             <el-table-column label="操作" align="center" fixed="right" v-if="isModulesShow('edit')">
                 <template slot-scope="scope">
                 <template slot-scope="scope">
-                    <el-button @click="editRow(scope.row)" type="primary" size="mini" plain>编辑</el-button>
+
+                    <template v-for="subtable in subtables">
+                        <el-button @click="$router.push({path:'/commonQuerys',query:{code:subtable.subCode,column:scope.row[subtable.column]+','+subtable.subColumn}})" type="primary" size="small" plain>{{subtable.name}}
+                        </el-button>
+                    </template>
+                    <el-button v-if="isModulesShow('edit')" @click="editRow(scope.row)" type="primary" size="mini" plain>编辑</el-button>
+                    <el-button v-if="isModulesShow('del')" @click="deleteRow(scope.row)" type="danger" size="mini" plain>删除</el-button>
                 </template>
                 </template>
             </el-table-column>
             </el-table-column>
         </el-table>
         </el-table>
@@ -136,7 +142,8 @@ export default {
             searchColumn: '',
             searchColumn: '',
             orderByStr: '',
             orderByStr: '',
             modules: [],
             modules: [],
-            dataSourceCode: 'dataSource'
+            dataSourceCode: 'dataSource',
+            subtables: [],
 
 
         }
         }
     },
     },
@@ -154,6 +161,9 @@ export default {
             this.filter1 = '';
             this.filter1 = '';
             this.advancedQuerySearchKey = '';
             this.advancedQuerySearchKey = '';
             this.orderByStr = '';
             this.orderByStr = '';
+            this.subtables = [];
+
+
 
 
             this.$http.get({
             this.$http.get({
                 url: '/queryConfig/getOne',
                 url: '/queryConfig/getOne',
@@ -197,6 +207,10 @@ export default {
                             this.tableColumns.push(element);
                             this.tableColumns.push(element);
                         });
                         });
 
 
+                        if (res.data.subJson) {
+
+                            this.subtables = JSON.parse(res.data.subJson)
+                        }
 
 
 
 
 
 
@@ -235,6 +249,16 @@ export default {
             }
             }
 
 
 
 
+            if (this.$route.query.column) {
+                var tempColumn = this.$route.query.column;
+                var tempSearchKey = 'AND' + '_,' + tempColumn.split(',')[1] + '_,' + '=' + '_,' + tempColumn.split(',')[0];
+                if (this.advancedQuerySearchKey) {
+                    this.advancedQuerySearchKey = this.advancedQuerySearchKey + '_;' + tempSearchKey;
+                } else {
+                    this.advancedQuerySearchKey = tempSearchKey;
+                }
+            }
+
 
 
             this.$http.get({
             this.$http.get({
                 url: '/commonQuery/page',
                 url: '/commonQuery/page',
@@ -341,11 +365,36 @@ export default {
                 path: '/commonQuery',
                 path: '/commonQuery',
                 query: {
                 query: {
                     id: row.id || row.ID,
                     id: row.id || row.ID,
-                    code: this.$route.query.code
+                    code: this.$route.query.code,
+                    column: this.$route.query.column,
                 }
                 }
             })
             })
         },
         },
 
 
+        deleteRow(row) {
+            this.$alert('删除将无法恢复,确认要删除么?', '警告', { type: 'error' }).then(() => {
+                return this.$http.post({
+                    url: '/commonQuery/del',
+                    data: {
+                        tableName: this.tableName,
+                        primaryKey: row.id || row.ID,
+                        databasetype: this.databasetype,
+                        dataSourceCode: this.dataSourceCode,
+                    }
+                })
+            }).then(() => {
+                this.$message.success('删除成功');
+                this.getData();
+            }).catch(action => {
+                if (action === 'cancel') {
+                    this.$message.info('删除取消');
+                } else {
+                    this.$message.error('删除失败');
+                }
+            })
+        },
+
+
     },
     },
     watch: {
     watch: {
         $route() {
         $route() {

+ 62 - 2
src/main/vue/src/pages/GenCode.vue

@@ -140,7 +140,7 @@
                             </el-table-column> -->
                             </el-table-column> -->
                             <el-table-column prop="formType" label="表单类型" width="150" align="center">
                             <el-table-column prop="formType" label="表单类型" width="150" align="center">
                                 <template slot-scope="{row}">
                                 <template slot-scope="{row}">
-                                    <el-select v-model="row.formType" >
+                                    <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-option v-for="item in formTypes" :label="item.label" :value="item.value" :key="item.value"></el-option>
                                     </el-select>
                                     </el-select>
                                 </template>
                                 </template>
@@ -152,7 +152,7 @@
                             </el-table-column>
                             </el-table-column>
                             <el-table-column prop="optionsValue" label="选项" min-width="150" align="center">
                             <el-table-column prop="optionsValue" label="选项" min-width="150" align="center">
                                 <template slot-scope="{row}">
                                 <template slot-scope="{row}">
-                                    <el-input type="textarea" v-model="row.optionsValue"  :disabled="row.formType!='select'&&row.formType!='multiSelect'"></el-input>
+                                    <el-input type="textarea" v-model="row.optionsValue" :disabled="row.formType!='select'&&row.formType!='multiSelect'"></el-input>
                                 </template>
                                 </template>
                             </el-table-column>
                             </el-table-column>
                             <!-- <el-table-column prop="searchMethod" label="搜索方式" width="150" align="center">
                             <!-- <el-table-column prop="searchMethod" label="搜索方式" width="150" align="center">
@@ -207,6 +207,41 @@
                             </el-table-column>
                             </el-table-column>
                         </el-table>
                         </el-table>
                     </el-tab-pane>
                     </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="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)" size="small" 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-tabs>
 
 
             </el-form-item>
             </el-form-item>
@@ -240,6 +275,7 @@ export default {
                     this.fields = this.formData.fields;
                     this.fields = this.formData.fields;
                     this.formData.id = res.data.id;
                     this.formData.id = res.data.id;
                     this.formData.genRouter = false;
                     this.formData.genRouter = false;
+                    this.subtables = this.formData.subtables;
                 }
                 }
             }).catch(e => this.loading = false)
             }).catch(e => this.loading = false)
         }
         }
@@ -272,6 +308,13 @@ export default {
                 this.datasourceInfoList = this.MysqlDataSourceInfos;
                 this.datasourceInfoList = this.MysqlDataSourceInfos;
             }
             }
         });
         });
+        this.$http.get({
+            url: '/genCode/all'
+        }).then(res => {
+            if (res.success) {
+                this.subCodes = res.data;
+            }
+        });
 
 
 
 
         this.getDatabaseTables();
         this.getDatabaseTables();
@@ -356,6 +399,7 @@ export default {
                 readTable: false,
                 readTable: false,
                 dataSourceCode: 'dataSource',
                 dataSourceCode: 'dataSource',
                 className: '',
                 className: '',
+                subtables: [],
 
 
             },
             },
             fields: [
             fields: [
@@ -396,6 +440,8 @@ export default {
             },
             },
             datasourceInfoList: [],
             datasourceInfoList: [],
             tableList: [],
             tableList: [],
+            subtables: [],
+            subCodes: [],
         }
         }
     },
     },
     computed: {
     computed: {
@@ -418,6 +464,7 @@ export default {
         submit() {
         submit() {
 
 
             this.formData.fields = this.fields;
             this.formData.fields = this.fields;
+            this.formData.subtables = this.subtables;
             this.formData.javaPath = this.formData.rootPath + this.formData.javaPathRelative;
             this.formData.javaPath = this.formData.rootPath + this.formData.javaPathRelative;
             this.formData.viewPath = this.formData.rootPath + this.formData.viewPathRelative;
             this.formData.viewPath = this.formData.rootPath + this.formData.viewPathRelative;
             this.formData.routerPath = this.formData.rootPath + this.formData.routerPathRelative;
             this.formData.routerPath = this.formData.rootPath + this.formData.routerPathRelative;
@@ -517,6 +564,19 @@ export default {
                 }
                 }
             })
             })
         },
         },
+        addSubtable() {
+            this.subtables.push({
+                name: '',
+                column: '',
+                subColumn: '',
+                subCode: '',
+            });
+        },
+        removeSubtable(i) {
+            if (this.subtables.length > 0) {
+                this.subtables.splice(i, 1);
+            }
+        },
 
 
     }
     }
 }
 }

+ 65 - 2
src/main/vue/src/pages/QueryConfig.vue

@@ -141,6 +141,41 @@
                             </el-table-column>
                             </el-table-column>
                         </el-table>
                         </el-table>
                     </el-tab-pane>
                     </el-tab-pane>
+                    <el-tab-pane label="子表" name="3">
+                        <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="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="子表Code" width="150" align="center">
+                                <template slot-scope="{row}">
+                                    <el-select v-model="row.subCode" clearable>
+                                        <el-option v-for="item in subCodes" :label="item.code" :value="item.code" :key="item.code"></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)" size="small" 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-tabs>
             </el-form-item>
             </el-form-item>
 
 
@@ -188,6 +223,12 @@ export default {
 
 
                     this.tablecolumnsFields = JSON.parse(res.data.configJson);
                     this.tablecolumnsFields = JSON.parse(res.data.configJson);
 
 
+                    this.subtables = [];
+                    if (res.data.subJson) {
+
+                        this.subtables = JSON.parse(res.data.subJson);
+                    }
+
                 }
                 }
             })
             })
         }
         }
@@ -211,6 +252,14 @@ export default {
             }
             }
         });
         });
 
 
+        this.$http.get({
+            url: '/queryConfig/all'
+        }).then(res => {
+            if (res.success) {
+                this.subCodes = res.data;
+            }
+        });
+
 
 
         this.getDatabaseTables();
         this.getDatabaseTables();
 
 
@@ -277,7 +326,8 @@ export default {
             },
             },
             datasourceInfoList: [],
             datasourceInfoList: [],
             tableList: [],
             tableList: [],
-
+            subtables: [],
+            subCodes: [],
 
 
         }
         }
     },
     },
@@ -297,7 +347,7 @@ export default {
 
 
             if (this.tablecolumnsFields.length > 0) {
             if (this.tablecolumnsFields.length > 0) {
 
 
-
+                this.formData.subtables = this.subtables;
                 this.formData.fields = this.tablecolumnsFields;
                 this.formData.fields = this.tablecolumnsFields;
                 this.formData.configJson = '';
                 this.formData.configJson = '';
                 var data = JSON.parse(JSON.stringify(this.formData));;
                 var data = JSON.parse(JSON.stringify(this.formData));;
@@ -396,6 +446,19 @@ export default {
                 }
                 }
             })
             })
         },
         },
+        addSubtable() {
+            this.subtables.push({
+                name: '',
+                column: '',
+                subColumn: '',
+                subCode: '',
+            });
+        },
+        removeSubtable(i) {
+            if (this.subtables.length > 0) {
+                this.subtables.splice(i, 1);
+            }
+        },
     }
     }
 }
 }
 </script>
 </script>

+ 1 - 1
src/main/vue/src/pages/QueryConfigs.vue

@@ -46,7 +46,7 @@
             </el-table-column>
             </el-table-column>
         </el-table>
         </el-table>
         <div class="pagination-wrapper">
         <div class="pagination-wrapper">
-            <div class="multiple-mode-wrapper">
+            <div class="multiple-mode-wrapper" v-if="0">
                 <el-button size="small" v-if="!multipleMode" @click="toggleMultipleMode(true)">批量编辑</el-button>
                 <el-button size="small" v-if="!multipleMode" @click="toggleMultipleMode(true)">批量编辑</el-button>
                 <el-button-group v-else>
                 <el-button-group v-else>
                     <el-button size="small" @click="operation1">批量操作1</el-button>
                     <el-button size="small" @click="operation1">批量操作1</el-button>

+ 20 - 5
src/main/vue/src/pages/TestAaa.vue

@@ -3,7 +3,7 @@
         <el-form :model="formData" :rules="rules" ref="form" label-width="80px" label-position="right" size="small" style="max-width: 500px;">
         <el-form :model="formData" :rules="rules" ref="form" label-width="80px" label-position="right" size="small" style="max-width: 500px;">
             <el-form-item prop="testName" label="名称">
             <el-form-item prop="testName" label="名称">
                 <template>
                 <template>
-                    <el-select v-model="formData.testName" clearable placeholder="请选择">
+                    <el-select v-model="formData.testName" clearable placeholder="请选择" :disabled="'testName'==subColumn">
                         <el-option v-for="item in testNameOptions" :key="item.value" :label="item.label" :value="item.value">
                         <el-option v-for="item in testNameOptions" :key="item.value" :label="item.label" :value="item.value">
                         </el-option>
                         </el-option>
                     </el-select>
                     </el-select>
@@ -11,26 +11,26 @@
             </el-form-item>
             </el-form-item>
             <el-form-item prop="remark" label="嗯嗯">
             <el-form-item prop="remark" label="嗯嗯">
                 <template>
                 <template>
-                    <el-select v-model="formData.remark" clearable placeholder="请选择">
+                    <el-select v-model="formData.remark" clearable placeholder="请选择" :disabled="'remark'==subColumn">
                         <el-option v-for="item in remarkOptions" :key="item.value" :label="item.label" :value="item.value">
                         <el-option v-for="item in remarkOptions" :key="item.value" :label="item.label" :value="item.value">
                         </el-option>
                         </el-option>
                     </el-select>
                     </el-select>
                 </template>
                 </template>
             </el-form-item>
             </el-form-item>
             <el-form-item prop="imageUrl" label="图片">
             <el-form-item prop="imageUrl" label="图片">
-                <single-upload v-model="formData.imageUrl"></single-upload>
+                <single-upload v-model="formData.imageUrl" :disabled="'imageUrl'==subColumn"></single-upload>
             </el-form-item>
             </el-form-item>
             <el-form-item prop="testTime" label="时间">
             <el-form-item prop="testTime" label="时间">
                 <template>
                 <template>
                     <div class="block">
                     <div class="block">
-                        <el-date-picker v-model="formData.testTime" type="date" value-format="timestamp" placeholder="选择日期">
+                        <el-date-picker v-model="formData.testTime" type="date" value-format="timestamp" placeholder="选择日期" :disabled="'testTime'==subColumn">
                         </el-date-picker>
                         </el-date-picker>
                     </div>
                     </div>
                 </template>
                 </template>
             </el-form-item>
             </el-form-item>
             <el-form-item prop="multiSelect" label="多选">
             <el-form-item prop="multiSelect" label="多选">
                 <template>
                 <template>
-                    <el-select v-model="formData.multiSelect" multiple clearable placeholder="请选择">
+                    <el-select v-model="formData.multiSelect" multiple clearable placeholder="请选择" :disabled="'multiSelect'==subColumn">
                         <el-option v-for="item in multiSelectOptions" :key="item.value" :label="item.label" :value="item.value">
                         <el-option v-for="item in multiSelectOptions" :key="item.value" :label="item.label" :value="item.value">
                         </el-option>
                         </el-option>
                     </el-select>
                     </el-select>
@@ -49,6 +49,11 @@ import formValidator from '../formValidator'
 
 
 export default {
 export default {
     created() {
     created() {
+        if (this.$route.query.column) {
+            this.subColumn = this.$route.query.column.split(',')[1];
+            this.subValue = this.$route.query.column.split(',')[0];
+        }
+
         if (this.$route.query.id) {
         if (this.$route.query.id) {
             this.$http.get({
             this.$http.get({
                 url: '/testAaa/getOne',
                 url: '/testAaa/getOne',
@@ -67,8 +72,16 @@ export default {
 
 
 
 
                     this.formData = res.data;
                     this.formData = res.data;
+
+                    if (this.$route.query.column) {
+                        this.formData[this.subColumn] = this.subValue;
+                    }
                 }
                 }
             })
             })
+        } else {
+            if (this.$route.query.column) {
+                this.formData[this.subColumn] = this.subValue;
+            }
         }
         }
 
 
 
 
@@ -123,6 +136,8 @@ export default {
             testNameOptions: [{ label: '??', value: '??' }, { label: '??', value: '??' }, { label: '??', value: '??' }],
             testNameOptions: [{ label: '??', value: '??' }, { label: '??', value: '??' }, { label: '??', value: '??' }],
             remarkOptions: [],
             remarkOptions: [],
             multiSelectOptions: [],
             multiSelectOptions: [],
+            subColumn: '',
+            subValue: '',
         }
         }
     },
     },
     methods: {
     methods: {

+ 335 - 269
src/main/vue/src/pages/TestAaas.vue

@@ -1,22 +1,25 @@
 <template>
 <template>
     <div>
     <div>
         <div class="filters-container">
         <div class="filters-container">
-
+        
             <el-input placeholder="关键字" size="small" v-model="filter1" clearable class="filter-item"></el-input>
             <el-input placeholder="关键字" size="small" v-model="filter1" clearable class="filter-item"></el-input>
             <el-button @click="searchData" type="primary" size="small" icon="el-icon-search" class="filter-item">搜索
             <el-button @click="searchData" type="primary" size="small" icon="el-icon-search" class="filter-item">搜索
             </el-button>
             </el-button>
-            <el-button @click="showAdvancedQueryDialog = !showAdvancedQueryDialog" type="primary" size="small" icon="el-icon-search" class="filter-item">高级查询
+            <el-button @click="showAdvancedQueryDialog = !showAdvancedQueryDialog" type="primary" size="small"
+                       icon="el-icon-search" class="filter-item">高级查询
             </el-button>
             </el-button>
-            <el-button @click="showTableSortDialog = !showTableSortDialog" type="primary" size="small" icon="el-icon-sort" class="filter-item">排序
+            <el-button @click="showTableSortDialog = !showTableSortDialog" type="primary" size="small"
+                       icon="el-icon-sort" class="filter-item">排序
             </el-button>
             </el-button>
-            <el-button @click="$router.push('/testAaa')" type="primary" size="small" icon="el-icon-edit" class="filter-item">添加
+            <el-button @click="$router.push({path:'/testAaa',query:{column:$route.query.column}})" type="primary"
+                       size="small" icon="el-icon-edit"
+                       class="filter-item">添加
             </el-button>
             </el-button>
             <el-button @click="exportExcel" type="primary" size="small" icon="el-icon-share" class="filter-item">导出EXCEL
             <el-button @click="exportExcel" type="primary" size="small" icon="el-icon-share" class="filter-item">导出EXCEL
             </el-button>
             </el-button>
             <el-dropdown trigger="click" size="medium" class="table-column-filter">
             <el-dropdown trigger="click" size="medium" class="table-column-filter">
                 <span>
                 <span>
-                    筛选数据
-                    <i class="el-icon-arrow-down el-icon--right"></i>
+                  筛选数据<i class="el-icon-arrow-down el-icon--right"></i>
                 </span>
                 </span>
                 <el-dropdown-menu slot="dropdown" class="table-column-filter-wrapper">
                 <el-dropdown-menu slot="dropdown" class="table-column-filter-wrapper">
                     <el-checkbox v-for="item in tableColumns" :key="item.value" v-model="item.show">{{item.label}}
                     <el-checkbox v-for="item in tableColumns" :key="item.value" v-model="item.show">{{item.label}}
@@ -24,43 +27,85 @@
                 </el-dropdown-menu>
                 </el-dropdown-menu>
             </el-dropdown>
             </el-dropdown>
         </div>
         </div>
-        123456
-        <el-table :data="tableData" :height="tableHeight" row-key="id" ref="table">
-            <el-table-column v-if="multipleMode" align="center" type="selection" width="50">
-            </el-table-column>
-            <el-table-column type="index" min-width="50" align="center">
-            </el-table-column>
-
-            <el-table-column v-if="isColumnShow('id')" prop="id" label="id" min-width="100">
-            </el-table-column>
-
-            <el-table-column v-if="isColumnShow('testName')" prop="testName" label="名字" min-width="100">
+        <el-table
+                :data="tableData"
+                :height="tableHeight"
+                row-key="id"
+                ref="table">
+            <el-table-column
+                    v-if="multipleMode"
+                    align="center"
+                    type="selection"
+                    width="50">
             </el-table-column>
             </el-table-column>
-
-            <el-table-column v-if="isColumnShow('remark')" prop="remark" label="备注" min-width="100">
+            <el-table-column
+                    type="index"
+                    min-width="50"
+                    align="center">
             </el-table-column>
             </el-table-column>
-
-            <el-table-column v-if="isColumnShow('imageUrl')" prop="imageUrl" label="图片" min-width="100">
-                <template slot-scope="{row}">
-                    <img :src="row.imageUrl" @click="showImg(row.imageUrl)" style="width: 100px;height: 100px;vertical-align: middle;" />
-                </template>
-
-            </el-table-column>
-
-            <el-table-column v-if="isColumnShow('testTime')" prop="testTime" label="时间" :formatter="DateFormatter" min-width="100">
-            </el-table-column>
-
-            <el-table-column v-if="isColumnShow('multiSelect')" prop="multiSelect" label="多选" min-width="100">
-            </el-table-column>
-            <el-table-column label="操作" align="center" fixed="right" min-width="150">
+                            
+                                            <el-table-column
+                                v-if="isColumnShow('id')"
+                                prop="id"
+                                label="id"
+                                min-width="100">
+                        </el-table-column>
+                                                                                            
+                                            <el-table-column
+                                v-if="isColumnShow('testName')"
+                                prop="testName"
+                                label="名称"
+                                min-width="100">
+                        </el-table-column>
+                                                                
+                                            <el-table-column
+                                v-if="isColumnShow('remark')"
+                                prop="remark"
+                                label="嗯嗯"
+                                min-width="100">
+                        </el-table-column>
+                                                                
+                                            <el-table-column
+                                v-if="isColumnShow('imageUrl')"
+                                prop="imageUrl"
+                                label="图片"
+                                min-width="100">
+                            <template slot-scope="{row}">
+                                <img :src="row.imageUrl" @click="showImg(row.imageUrl)" style="width: 100px;height: 100px;vertical-align: middle;" />
+                            </template>
+
+                        </el-table-column>
+                                                                    
+                                            <el-table-column
+                                v-if="isColumnShow('testTime')"
+                                prop="testTime"
+                                label="时间"
+                                :formatter="DateFormatter"
+                                min-width="100">
+                        </el-table-column>
+                                                                
+                                            <el-table-column
+                                v-if="isColumnShow('multiSelect')"
+                                prop="multiSelect"
+                                label="多选"
+                                min-width="100">
+                        </el-table-column>
+                                                            <el-table-column
+                    label="操作"
+                    align="center"
+                    fixed="right"
+                    min-width="150"
+            >
                 <template slot-scope="scope">
                 <template slot-scope="scope">
-                    <el-button @click="editRow(scope.row)" type="primary" size="mini" plain>编辑</el-button>
+                    <el-button @click="$router.push({path:'/TestBbbs',query:{column:scope.row.testName+',nameAaa'}})" type="primary" size="small" plain>子表bbb
+            </el-button>
+                            <el-button @click="editRow(scope.row)" type="primary" size="mini" plain>编辑</el-button>
                     <el-button @click="deleteRow(scope.row)" type="danger" size="mini" plain>删除</el-button>
                     <el-button @click="deleteRow(scope.row)" type="danger" size="mini" plain>删除</el-button>
                 </template>
                 </template>
             </el-table-column>
             </el-table-column>
         </el-table>
         </el-table>
         <div class="pagination-wrapper">
         <div class="pagination-wrapper">
-            <div class="multiple-mode-wrapper">
+            <div class="multiple-mode-wrapper" v-if="0">
                 <el-button size="small" v-if="!multipleMode" @click="toggleMultipleMode(true)">批量编辑</el-button>
                 <el-button size="small" v-if="!multipleMode" @click="toggleMultipleMode(true)">批量编辑</el-button>
                 <el-button-group v-else>
                 <el-button-group v-else>
                     <el-button size="small" @click="operation1">批量操作1</el-button>
                     <el-button size="small" @click="operation1">批量操作1</el-button>
@@ -68,7 +113,15 @@
                     <el-button size="small" @click="toggleMultipleMode(false)">取消</el-button>
                     <el-button size="small" @click="toggleMultipleMode(false)">取消</el-button>
                 </el-button-group>
                 </el-button-group>
             </div>
             </div>
-            <el-pagination background @size-change="pageSizeChange" @current-change="currentPageChange" :current-page="currentPage" :page-sizes="[10, 20, 30, 40, 50]" :page-size="pageSize" layout="total, sizes, prev, pager, next, jumper" :total="totalNumber">
+            <el-pagination
+                    background
+                    @size-change="pageSizeChange"
+                    @current-change="currentPageChange"
+                    :current-page="currentPage"
+                    :page-sizes="[10, 20, 30, 40, 50]"
+                    :page-size="pageSize"
+                    layout="total, sizes, prev, pager, next, jumper"
+                    :total="totalNumber">
             </el-pagination>
             </el-pagination>
         </div>
         </div>
         <el-dialog title="高级查询" :visible.sync="showAdvancedQueryDialog">
         <el-dialog title="高级查询" :visible.sync="showAdvancedQueryDialog">
@@ -89,14 +142,16 @@
                     <template slot-scope="{row}">
                     <template slot-scope="{row}">
                         <el-select v-model="row.name">
                         <el-select v-model="row.name">
 
 
-                            <el-option v-for="item in advancedQueryColumns" :label="item.label" :value="item.value" :key="item.value"></el-option>
+                            <el-option v-for="item in advancedQueryColumns" :label="item.label" :value="item.value"
+                                       :key="item.value"></el-option>
                         </el-select>
                         </el-select>
                     </template>
                     </template>
                 </el-table-column>
                 </el-table-column>
                 <el-table-column prop="searchMethod" label="搜索方式" width="150" align="center">
                 <el-table-column prop="searchMethod" label="搜索方式" width="150" align="center">
                     <template slot-scope="{row}">
                     <template slot-scope="{row}">
                         <el-select v-model="row.searchMethod">
                         <el-select v-model="row.searchMethod">
-                            <el-option v-for="item in searchMethods" :label="item" :value="item" :key="item"></el-option>
+                            <el-option v-for="item in searchMethods" :label="item" :value="item"
+                                       :key="item"></el-option>
                         </el-select>
                         </el-select>
                     </template>
                     </template>
                 </el-table-column>
                 </el-table-column>
@@ -126,7 +181,8 @@
                     <template slot-scope="{row}">
                     <template slot-scope="{row}">
                         <el-select v-model="row.name">
                         <el-select v-model="row.name">
 
 
-                            <el-option v-for="item in advancedQueryColumns" :label="item.label" :value="item.value" :key="item.value"></el-option>
+                            <el-option v-for="item in advancedQueryColumns" :label="item.label" :value="item.value"
+                                       :key="item.value"></el-option>
                         </el-select>
                         </el-select>
                     </template>
                     </template>
                 </el-table-column>
                 </el-table-column>
@@ -160,269 +216,279 @@
     </div>
     </div>
 </template>
 </template>
 <script>
 <script>
-import { mapState } from 'vuex'
-import { format } from 'date-fns'
-import zh from 'date-fns/locale/zh_cn'
-
-export default {
-    created() {
-        this.getData();
-    },
-    data() {
-        return {
-            totalNumber: 0,
-            totalPage: 10,
-            currentPage: 1,
-            pageSize: 20,
-            tableData: [],
-            filter1: '',
-            filter2: '',
-            tableColumns: [
-                {
-                    label: 'id',
-                    value: 'id',
-                    show: true
-                },
-                {
-                    label: '名字',
-                    value: 'testName',
-                    show: true
-                },
-                {
-                    label: '备注',
-                    value: 'remark',
-                    show: true
-                },
-                {
-                    label: '图片',
-                    value: 'imageUrl',
-                    show: true
-                },
-                {
-                    label: '时间',
-                    value: 'testTime',
-                    show: true
-                },
-                {
-                    label: '多选',
-                    value: 'multiSelect',
-                    show: true
-                },
-            ],
-            multipleMode: false,
-            showAdvancedQueryDialog: false,
-            advancedQueryFields: [],
-            showTableSortDialog: false,
-            tableSortFields: [],
-            searchMethods: ['=', '!=', '>', '>=', '<', '<=', 'like'],
-            advancedQueryColumns: [
-                {
-                    label: 'id',
-                    value: 'id'
-                },
-                {
-                    label: '名字',
-                    value: 'test_name'
-                },
-                {
-                    label: '备注',
-                    value: 'remark'
-                },
-                {
-                    label: '图片',
-                    value: 'image_url'
-                },
-                {
-                    label: '时间',
-                    value: 'test_time'
-                },
-                {
-                    label: '多选',
-                    value: 'multi_select'
-                },
-            ],
-            advancedQuerySearchKey: '',
-            orderByStr: '',
-            imgSrc: '',
-            imageDialogVisible: false,
-        }
-    },
-    computed: {
-        ...mapState(['tableHeight']),
-        selection() {
-            return this.$refs.table.selection.map(i => i.id);
-        }
-    },
-    methods: {
-        pageSizeChange(size) {
-            this.currentPage = 1;
-            this.pageSize = size;
+    import {mapState} from 'vuex'
+    import {format} from 'date-fns'
+    import zh from 'date-fns/locale/zh_cn'
+
+    export default {
+        created() {
             this.getData();
             this.getData();
         },
         },
-        currentPageChange(page) {
-            this.currentPage = page;
-            this.getData();
+        data() {
+            return {
+                totalNumber: 0,
+                totalPage: 10,
+                currentPage: 1,
+                pageSize: 20,
+                tableData: [],
+                filter1: '',
+                filter2: '',
+                tableColumns: [
+                                                                        {
+                                label: 'id',
+                                value: 'id',
+                                show: true
+                            },
+                                                                                                                                            {
+                                label: '名称',
+                                value: 'testName',
+                                show: true
+                            },
+                                                                                                {
+                                label: '嗯嗯',
+                                value: 'remark',
+                                show: true
+                            },
+                                                                                                {
+                                label: '图片',
+                                value: 'imageUrl',
+                                show: true
+                            },
+                                                                                                {
+                                label: '时间',
+                                value: 'testTime',
+                                show: true
+                            },
+                                                                                                {
+                                label: '多选',
+                                value: 'multiSelect',
+                                show: true
+                            },
+                                                            ],
+                multipleMode: false,
+                showAdvancedQueryDialog: false,
+                advancedQueryFields: [],
+                showTableSortDialog: false,
+                tableSortFields: [],
+                searchMethods: ['=', '!=', '>', '>=', '<', '<=', 'like'],
+                advancedQueryColumns: [
+                                                                        {
+                                label: 'id',
+                                value: 'id'
+                            },
+                                                                                                                                            {
+                                label: '名称',
+                                value: 'test_name'
+                            },
+                                                                                                {
+                                label: '嗯嗯',
+                                value: 'remark'
+                            },
+                                                                                                {
+                                label: '图片',
+                                value: 'image_url'
+                            },
+                                                                                                {
+                                label: '时间',
+                                value: 'test_time'
+                            },
+                                                                                                {
+                                label: '多选',
+                                value: 'multi_select'
+                            },
+                                                            ],
+                advancedQuerySearchKey: '',
+                orderByStr: '',
+                imgSrc: '',
+                imageDialogVisible: false,
+            }
         },
         },
-        getData() {
-            this.$http.get({
-                url: '/testAaa/page',
-                data: {
+        computed: {
+            ...mapState(['tableHeight']),
+            selection() {
+                return this.$refs.table.selection.map(i => i.id);
+            }
+        },
+        methods: {
+            pageSizeChange(size) {
+                this.currentPage = 1;
+                this.pageSize = size;
+                this.getData();
+            },
+            currentPageChange(page) {
+                this.currentPage = page;
+                this.getData();
+            },
+            getData() {
+
+                var data = {
                     currentPage: this.currentPage,
                     currentPage: this.currentPage,
                     pageNumber: this.pageSize,
                     pageNumber: this.pageSize,
                     searchKey: this.filter1,
                     searchKey: this.filter1,
                     advancedQuery: this.advancedQuerySearchKey,
                     advancedQuery: this.advancedQuerySearchKey,
                     orderByStr: this.orderByStr,
                     orderByStr: this.orderByStr,
                 }
                 }
-            }).then(res => {
-                if (res.success) {
-                    this.totalNumber = res.data.page.totalNumber;
-                    this.tableData = res.data.pp;
+
+                if (this.$route.query.column) {
+                    var tempColumn = this.$route.query.column;
+                    data[tempColumn.split(',')[1]] = tempColumn.split(',')[0];
                 }
                 }
-            })
-        },
-        isColumnShow(column) {
-            var row = this.tableColumns.find(i => i.value === column);
-            return row ? row.show : false;
-        },
-        toggleMultipleMode(multipleMode) {
-            this.multipleMode = multipleMode;
-            if (!multipleMode) {
-                this.$refs.table.clearSelection();
-            }
-        },
-        editRow(row) {
-            this.$router.push({
-                path: '/testAaa',
-                query: {
-                    id: row.id
+
+                this.$http.get({
+                    url: '/testAaa/page',
+                    data: data
+                }).then(res => {
+                    if (res.success) {
+                        this.totalNumber = res.data.page.totalNumber;
+                        this.tableData = res.data.pp;
+                    }
+                })
+            },
+            isColumnShow(column) {
+                var row = this.tableColumns.find(i => i.value === column);
+                return row ? row.show : false;
+            },
+            toggleMultipleMode(multipleMode) {
+                this.multipleMode = multipleMode;
+                if (!multipleMode) {
+                    this.$refs.table.clearSelection();
                 }
                 }
-            })
-        },
-        operation1() {
-            this.$notify({
-                title: '提示',
-                message: this.selection
-            });
-        },
-        operation2() {
-            this.$message('操作2');
-        },
-        addField() {
-            this.advancedQueryFields.push({
-                link: 'AND',
-                name: '',
-                searchMethod: '=',
-                value: '',
-            });
-        },
-        removeField(i) {
-            if (this.advancedQueryFields.length > 0) {
-                this.advancedQueryFields.splice(i, 1);
-            }
-        },
-        advancedQuery() {
+            },
+            editRow(row) {
+                this.$router.push({
+                    path: '/testAaa',
+                    query: {
+                        id: row.id,
+                        column: this.$route.query.column,
+                    }
+                })
+            },
+            operation1() {
+                this.$notify({
+                    title: '提示',
+                    message: this.selection
+                });
+            },
+            operation2() {
+                this.$message('操作2');
+            },
+            addField() {
+                this.advancedQueryFields.push({
+                    link: 'AND',
+                    name: '',
+                    searchMethod: '=',
+                    value: '',
+                });
+            },
+            removeField(i) {
+                if (this.advancedQueryFields.length > 0) {
+                    this.advancedQueryFields.splice(i, 1);
+                }
+            },
+            advancedQuery() {
 
 
-            this.advancedQuerySearchKey = '';
+                this.advancedQuerySearchKey = '';
 
 
-            if (this.advancedQueryFields.length > 0) {
+                if (this.advancedQueryFields.length > 0) {
 
 
-                var templist = [];
+                    var templist = [];
 
 
-                this.advancedQueryFields.forEach(item => {
-                    if (item.link && item.name && item.searchMethod && item.value) {
-                        var tempItem = item.link + '_,' + item.name + '_,' + item.searchMethod + '_,' + item.value;
-                        templist.push(tempItem);
-                    }
-                })
+                    this.advancedQueryFields.forEach(item => {
+                        if (item.link && item.name && item.searchMethod && item.value) {
+                            var tempItem = item.link + '_,' + item.name + '_,' + item.searchMethod + '_,' + item.value;
+                            templist.push(tempItem);
+                        }
+                    })
 
 
-                if (templist.length > 0) {
+                    if (templist.length > 0) {
 
 
-                    this.advancedQuerySearchKey = templist.join('_;');
+                        this.advancedQuerySearchKey = templist.join('_;');
+                    }
                 }
                 }
-            }
 
 
-            this.getData();
-            this.showAdvancedQueryDialog = false;
-        },
-        addSortField() {
-            this.tableSortFields.push({
-                name: '',
-                order: 'asc',
-            });
-        },
-        removeSortField(i) {
-            if (this.tableSortFields.length > 0) {
-                this.tableSortFields.splice(i, 1);
-            }
-        },
-        tableSortQuery() {
+                this.getData();
+                this.showAdvancedQueryDialog = false;
+            },
+            addSortField() {
+                this.tableSortFields.push({
+                    name: '',
+                    order: 'asc',
+                });
+            },
+            removeSortField(i) {
+                if (this.tableSortFields.length > 0) {
+                    this.tableSortFields.splice(i, 1);
+                }
+            },
+            tableSortQuery() {
 
 
-            this.orderByStr = '';
+                this.orderByStr = '';
 
 
-            if (this.tableSortFields.length > 0) {
+                if (this.tableSortFields.length > 0) {
 
 
-                var templist = [];
+                    var templist = [];
 
 
-                this.tableSortFields.forEach(item => {
-                    if (item.name && item.order) {
-                        var tempItem = item.name + '_,' + item.order;
-                        templist.push(tempItem);
-                    }
-                })
+                    this.tableSortFields.forEach(item => {
+                        if (item.name && item.order) {
+                            var tempItem = item.name + '_,' + item.order;
+                            templist.push(tempItem);
+                        }
+                    })
 
 
-                if (templist.length > 0) {
+                    if (templist.length > 0) {
 
 
-                    this.orderByStr = templist.join('_;');
+                        this.orderByStr = templist.join('_;');
+                    }
                 }
                 }
-            }
 
 
-            this.getData();
-            this.showTableSortDialog = false;
-        },
-        exportExcel() {
-            window.location.href = this.$baseUrl + "/testAaa/exportExcel?searchKey="
-                + this.filter1 + "&advancedQuery=" + this.advancedQuerySearchKey + "&orderByStr=" + this.orderByStr;
-        },
-        searchData() {
-            this.currentPage = 1;
-            this.getData();
-        },
-        deleteRow(row) {
-            this.$alert('删除将无法恢复,确认要删除么?', '警告', { type: 'error' }).then(() => {
-                return this.$http.post({
-                    url: '/testAaa/del',
-                    data: { id: row.id }
-                })
-            }).then(() => {
-                this.$message.success('删除成功');
                 this.getData();
                 this.getData();
-            }).catch(action => {
-                if (action === 'cancel') {
-                    this.$message.info('删除取消');
-                } else {
-                    this.$message.error('删除失败');
+                this.showTableSortDialog = false;
+            },
+            exportExcel() {
+                window.location.href = this.$baseUrl + "/testAaa/exportExcel?searchKey="
+                        + this.filter1 + "&advancedQuery=" + this.advancedQuerySearchKey+"&orderByStr=" + this.orderByStr;
+            },
+            searchData() {
+                this.currentPage = 1;
+                this.getData();
+            },
+            deleteRow(row) {
+                this.$alert('删除将无法恢复,确认要删除么?', '警告', {type: 'error'}).then(() => {
+                    return this.$http.post({
+                        url: '/testAaa/del',
+                        data: {id: row.id}
+                    })
+                }).then(() => {
+                    this.$message.success('删除成功');
+                    this.getData();
+                }).catch(action => {
+                    if (action === 'cancel') {
+                        this.$message.info('删除取消');
+                    } else {
+                        this.$message.error('删除失败');
+                    }
+                })
+            },
+            DateTimeFormatter(row, column, cellValue) {
+                if (cellValue) {
+                    return format(cellValue, 'YYYY/MM/DD HH:mm', {locale: zh})
                 }
                 }
-            })
-        },
-        DateTimeFormatter(row, column, cellValue) {
-            if (cellValue) {
-                return format(cellValue, 'YYYY/MM/DD HH:mm', { locale: zh })
-            }
 
 
-        },
-        DateFormatter(row, column, cellValue) {
-            if (cellValue) {
-                return format(cellValue, 'YYYY/MM/DD', { locale: zh })
-            }
+            },
+            DateFormatter(row, column, cellValue) {
+                if (cellValue) {
+                    return format(cellValue, 'YYYY/MM/DD', {locale: zh})
+                }
 
 
-        },
-        showImg(img) {
-            this.imgSrc = img;
-            this.imageDialogVisible = true;
-        },
+            },
+            showImg(img) {
+                this.imgSrc = img;
+                this.imageDialogVisible = true;
+            },
 
 
+        }
     }
     }
-}
 </script>
 </script>
 <style lang="less" scoped>
 <style lang="less" scoped>
+
 </style>
 </style>

+ 33 - 15
src/main/vue/src/pages/TestBbb.vue

@@ -3,18 +3,18 @@
         <el-form :model="formData" :rules="rules" ref="form" label-width="80px" label-position="right" size="small"
         <el-form :model="formData" :rules="rules" ref="form" label-width="80px" label-position="right" size="small"
                  style="max-width: 500px;">
                  style="max-width: 500px;">
                                                                                                                     <el-form-item prop="nameAaa" label="名称1">
                                                                                                                     <el-form-item prop="nameAaa" label="名称1">
-                <el-input v-model="formData.nameAaa"></el-input>
+                <el-input v-model="formData.nameAaa" :disabled="'nameAaa'==subColumn"></el-input>
             </el-form-item>
             </el-form-item>
-                                                                                                                                                                                                                                                                                                        <el-form-item prop="nameBbb" label="名称2">
-                <el-input v-model="formData.nameBbb"></el-input>
+                                                                                                                                                                                                                                                                                                                            <el-form-item prop="nameBbb" label="名称2">
+                <el-input v-model="formData.nameBbb" :disabled="'nameBbb'==subColumn"></el-input>
             </el-form-item>
             </el-form-item>
-                                                                                                                                                                                                                                                                                                        <el-form-item prop="nameCcc" label="名称3">
-                <el-input v-model="formData.nameCcc"></el-input>
+                                                                                                                                                                                                                                                                                                                            <el-form-item prop="nameCcc" label="名称3">
+                <el-input v-model="formData.nameCcc" :disabled="'nameCcc'==subColumn"></el-input>
             </el-form-item>
             </el-form-item>
-                                                                                                                                                                                                                                                                                                        <el-form-item prop="nameDdd" label="名称4">
-                <el-input v-model="formData.nameDdd"></el-input>
+                                                                                                                                                                                                                                                                                                                            <el-form-item prop="nameDdd" label="名称4">
+                <el-input v-model="formData.nameDdd" :disabled="'nameDdd'==subColumn"></el-input>
             </el-form-item>
             </el-form-item>
-                                                                                                                                                                                                                                                                    <el-form-item>
+                                                                                                                                                                                                                                                                                        <el-form-item>
                 <el-button @click="onSave" :loading="$store.state.fetchingData" type="primary">保存</el-button>
                 <el-button @click="onSave" :loading="$store.state.fetchingData" type="primary">保存</el-button>
                 <el-button @click="onDelete" v-if="formData.id" type="danger">删除</el-button>
                 <el-button @click="onDelete" v-if="formData.id" type="danger">删除</el-button>
                 <el-button @click="$router.go(-1)">取消</el-button>
                 <el-button @click="$router.go(-1)">取消</el-button>
@@ -27,6 +27,11 @@
 
 
     export default {
     export default {
         created() {
         created() {
+            if (this.$route.query.column) {
+                this.subColumn = this.$route.query.column.split(',')[1];
+                this.subValue = this.$route.query.column.split(',')[0];
+            }
+
             if (this.$route.query.id) {
             if (this.$route.query.id) {
                 this.$http.get({
                 this.$http.get({
                     url: '/testBbb/getOne',
                     url: '/testBbb/getOne',
@@ -35,11 +40,22 @@
                     }
                     }
                 }).then(res => {
                 }).then(res => {
                     if (res.success) {
                     if (res.success) {
+
+                                                                                                                                                                                                                                                                                                                                                
                         this.formData = res.data;
                         this.formData = res.data;
+
+                    if (this.$route.query.column) {
+                        this.formData[this.subColumn] = this.subValue;
+                    }
                     }
                     }
                 })
                 })
+            }else {
+                if (this.$route.query.column) {
+                    this.formData[this.subColumn] = this.subValue;
+                }
             }
             }
-        },
+
+                                                                                                                                                                                            },
         data() {
         data() {
             return {
             return {
                 saving: false,
                 saving: false,
@@ -47,17 +63,19 @@
                 rules: {
                 rules: {
                                                                                                         nameAaa:
                                                                                                         nameAaa:
                     [
                     [
-                        {required: true, message: '请输入 名称1', trigger: 'blur'},
-                                            ],
+                                                {required: true, message: '请输入 名称1', trigger: 'blur'},
+                                                                    ],
                                                                 nameBbb:
                                                                 nameBbb:
                     [
                     [
-                        {required: true, message: '请输入 名称2', trigger: 'blur'},
-                                            ],
+                                                {required: true, message: '请输入 名称2', trigger: 'blur'},
+                                                                    ],
                                                                 nameCcc:
                                                                 nameCcc:
                     [
                     [
-                        {required: true, message: '请输入 名称3', trigger: 'blur'},
-                                            ],
+                                                {required: true, message: '请输入 名称3', trigger: 'blur'},
+                                                                    ],
                                                                 },
                                                                 },
+                                                            subColumn: '',
+            subValue: '',
         }
         }
         },
         },
         methods: {
         methods: {

+ 124 - 21
src/main/vue/src/pages/TestBbbs.vue

@@ -3,22 +3,13 @@
         <div class="filters-container">
         <div class="filters-container">
 
 
             <el-input placeholder="关键字" size="small" v-model="filter1" clearable class="filter-item"></el-input>
             <el-input placeholder="关键字" size="small" v-model="filter1" clearable class="filter-item"></el-input>
-            <!--<el-select placeholder="性别" size="small" v-model="filter2" clearable class="filter-item">
-                <el-option
-                        label="女"
-                        value="item1">
-                </el-option>
-                <el-option
-                        label="男"
-                        value="item2">
-                </el-option>
-            </el-select>-->
             <el-button @click="searchData" type="primary" size="small" icon="el-icon-search" class="filter-item">搜索
             <el-button @click="searchData" type="primary" size="small" icon="el-icon-search" class="filter-item">搜索
             </el-button>
             </el-button>
             <el-button @click="showAdvancedQueryDialog = !showAdvancedQueryDialog" type="primary" size="small" icon="el-icon-search" class="filter-item">高级查询
             <el-button @click="showAdvancedQueryDialog = !showAdvancedQueryDialog" type="primary" size="small" icon="el-icon-search" class="filter-item">高级查询
             </el-button>
             </el-button>
-
-            <el-button @click="$router.push('/testBbb')" type="primary" size="small" icon="el-icon-edit" class="filter-item">添加
+            <el-button @click="showTableSortDialog = !showTableSortDialog" type="primary" size="small" icon="el-icon-sort" class="filter-item">排序
+            </el-button>
+            <el-button @click="$router.push({path:'/testBbb',query:{column:$route.query.column}})" type="primary" size="small" icon="el-icon-edit" class="filter-item">添加
             </el-button>
             </el-button>
             <el-button @click="exportExcel" type="primary" size="small" icon="el-icon-share" class="filter-item">导出EXCEL
             <el-button @click="exportExcel" type="primary" size="small" icon="el-icon-share" class="filter-item">导出EXCEL
             </el-button>
             </el-button>
@@ -38,12 +29,16 @@
             </el-table-column>
             </el-table-column>
             <el-table-column type="index" min-width="50" align="center">
             <el-table-column type="index" min-width="50" align="center">
             </el-table-column>
             </el-table-column>
+
             <el-table-column v-if="isColumnShow('nameAaa')" prop="nameAaa" label="名称1" min-width="100">
             <el-table-column v-if="isColumnShow('nameAaa')" prop="nameAaa" label="名称1" min-width="100">
             </el-table-column>
             </el-table-column>
+
             <el-table-column v-if="isColumnShow('nameBbb')" prop="nameBbb" label="名称2" min-width="100">
             <el-table-column v-if="isColumnShow('nameBbb')" prop="nameBbb" label="名称2" min-width="100">
             </el-table-column>
             </el-table-column>
+
             <el-table-column v-if="isColumnShow('nameCcc')" prop="nameCcc" label="名称3" min-width="100">
             <el-table-column v-if="isColumnShow('nameCcc')" prop="nameCcc" label="名称3" min-width="100">
             </el-table-column>
             </el-table-column>
+
             <el-table-column v-if="isColumnShow('nameDdd')" prop="nameDdd" label="名称4" min-width="100">
             <el-table-column v-if="isColumnShow('nameDdd')" prop="nameDdd" label="名称4" min-width="100">
             </el-table-column>
             </el-table-column>
             <el-table-column label="操作" align="center" fixed="right" min-width="150">
             <el-table-column label="操作" align="center" fixed="right" min-width="150">
@@ -54,7 +49,7 @@
             </el-table-column>
             </el-table-column>
         </el-table>
         </el-table>
         <div class="pagination-wrapper">
         <div class="pagination-wrapper">
-            <div class="multiple-mode-wrapper">
+            <div class="multiple-mode-wrapper" v-if="0">
                 <el-button size="small" v-if="!multipleMode" @click="toggleMultipleMode(true)">批量编辑</el-button>
                 <el-button size="small" v-if="!multipleMode" @click="toggleMultipleMode(true)">批量编辑</el-button>
                 <el-button-group v-else>
                 <el-button-group v-else>
                     <el-button size="small" @click="operation1">批量操作1</el-button>
                     <el-button size="small" @click="operation1">批量操作1</el-button>
@@ -112,10 +107,51 @@
             </span>
             </span>
         </el-dialog>
         </el-dialog>
 
 
+        <el-dialog title="排序" :visible.sync="showTableSortDialog">
+            <el-button @click="addSortField" type="text" icon="el-icon-plus">添加</el-button>
+            <el-table :data="tableSortFields">
+
+                <el-table-column prop="name" label="字段" align="center">
+                    <template slot-scope="{row}">
+                        <el-select v-model="row.name">
+
+                            <el-option v-for="item in advancedQueryColumns" :label="item.label" :value="item.value" :key="item.value"></el-option>
+                        </el-select>
+                    </template>
+                </el-table-column>
+                <el-table-column prop="order" label="排序" align="center">
+                    <template slot-scope="{row}">
+                        <el-select v-model="row.order">
+                            <el-option label="降序" value="desc">
+                            </el-option>
+                            <el-option label="升序" value="asc">
+                            </el-option>
+                        </el-select>
+                    </template>
+                </el-table-column>
+                <el-table-column width="60" align="center">
+                    <template slot-scope="{ row, column, $index }">
+                        <el-button @click="removeSortField($index)" size="small" type="text">删除</el-button>
+                    </template>
+                </el-table-column>
+            </el-table>
+
+            <span slot="footer" class="dialog-footer">
+
+                <el-button @click="tableSortQuery" :loading="$store.state.fetchingData">确定</el-button>
+            </span>
+        </el-dialog>
+
+        <el-dialog title="查看图片" :visible.sync="imageDialogVisible" size="small">
+            <img width="100%" :src="imgSrc" alt="">
+        </el-dialog>
+
     </div>
     </div>
 </template>
 </template>
 <script>
 <script>
 import { mapState } from 'vuex'
 import { mapState } from 'vuex'
+import { format } from 'date-fns'
+import zh from 'date-fns/locale/zh_cn'
 
 
 export default {
 export default {
     created() {
     created() {
@@ -155,6 +191,8 @@ export default {
             multipleMode: false,
             multipleMode: false,
             showAdvancedQueryDialog: false,
             showAdvancedQueryDialog: false,
             advancedQueryFields: [],
             advancedQueryFields: [],
+            showTableSortDialog: false,
+            tableSortFields: [],
             searchMethods: ['=', '!=', '>', '>=', '<', '<=', 'like'],
             searchMethods: ['=', '!=', '>', '>=', '<', '<=', 'like'],
             advancedQueryColumns: [
             advancedQueryColumns: [
                 {
                 {
@@ -175,6 +213,9 @@ export default {
                 },
                 },
             ],
             ],
             advancedQuerySearchKey: '',
             advancedQuerySearchKey: '',
+            orderByStr: '',
+            imgSrc: '',
+            imageDialogVisible: false,
         }
         }
     },
     },
     computed: {
     computed: {
@@ -194,14 +235,23 @@ export default {
             this.getData();
             this.getData();
         },
         },
         getData() {
         getData() {
+
+            var data = {
+                currentPage: this.currentPage,
+                pageNumber: this.pageSize,
+                searchKey: this.filter1,
+                advancedQuery: this.advancedQuerySearchKey,
+                orderByStr: this.orderByStr,
+            }
+
+            if (this.$route.query.column) {
+                var tempColumn = this.$route.query.column;
+                data[tempColumn.split(',')[1]] = tempColumn.split(',')[0];
+            }
+
             this.$http.get({
             this.$http.get({
                 url: '/testBbb/page',
                 url: '/testBbb/page',
-                data: {
-                    currentPage: this.currentPage,
-                    pageNumber: this.pageSize,
-                    searchKey: this.filter1,
-                    advancedQuery: this.advancedQuerySearchKey,
-                }
+                data: data
             }).then(res => {
             }).then(res => {
                 if (res.success) {
                 if (res.success) {
                     this.totalNumber = res.data.page.totalNumber;
                     this.totalNumber = res.data.page.totalNumber;
@@ -223,7 +273,8 @@ export default {
             this.$router.push({
             this.$router.push({
                 path: '/testBbb',
                 path: '/testBbb',
                 query: {
                 query: {
-                    id: row.id
+                    id: row.id,
+                    column: this.$route.query.column,
                 }
                 }
             })
             })
         },
         },
@@ -273,8 +324,44 @@ export default {
             this.getData();
             this.getData();
             this.showAdvancedQueryDialog = false;
             this.showAdvancedQueryDialog = false;
         },
         },
+        addSortField() {
+            this.tableSortFields.push({
+                name: '',
+                order: 'asc',
+            });
+        },
+        removeSortField(i) {
+            if (this.tableSortFields.length > 0) {
+                this.tableSortFields.splice(i, 1);
+            }
+        },
+        tableSortQuery() {
+
+            this.orderByStr = '';
+
+            if (this.tableSortFields.length > 0) {
+
+                var templist = [];
+
+                this.tableSortFields.forEach(item => {
+                    if (item.name && item.order) {
+                        var tempItem = item.name + '_,' + item.order;
+                        templist.push(tempItem);
+                    }
+                })
+
+                if (templist.length > 0) {
+
+                    this.orderByStr = templist.join('_;');
+                }
+            }
+
+            this.getData();
+            this.showTableSortDialog = false;
+        },
         exportExcel() {
         exportExcel() {
-            window.location.href = this.$baseUrl + "/testBbb/exportExcel?searchKey=" + this.filter1 + "&advancedQuery=" + this.advancedQuerySearchKey
+            window.location.href = this.$baseUrl + "/testBbb/exportExcel?searchKey="
+                + this.filter1 + "&advancedQuery=" + this.advancedQuerySearchKey + "&orderByStr=" + this.orderByStr;
         },
         },
         searchData() {
         searchData() {
             this.currentPage = 1;
             this.currentPage = 1;
@@ -297,6 +384,22 @@ export default {
                 }
                 }
             })
             })
         },
         },
+        DateTimeFormatter(row, column, cellValue) {
+            if (cellValue) {
+                return format(cellValue, 'YYYY/MM/DD HH:mm', { locale: zh })
+            }
+
+        },
+        DateFormatter(row, column, cellValue) {
+            if (cellValue) {
+                return format(cellValue, 'YYYY/MM/DD', { locale: zh })
+            }
+
+        },
+        showImg(img) {
+            this.imgSrc = img;
+            this.imageDialogVisible = true;
+        },
 
 
     }
     }
 }
 }