Browse Source

:sparkles: 添加新特性。支持多数据源代码生成

冷冷 6 years ago
parent
commit
6f0e3a9ed7
3 changed files with 211 additions and 17 deletions
  1. 49 3
      src/api/gen/gen.js
  2. 50 1
      src/const/crud/gen/gen.js
  3. 112 13
      src/views/gen/index.vue

+ 49 - 3
src/api/gen/gen.js

@@ -17,7 +17,7 @@
 
 import request from '@/router/axios'
 
-export function fetchList (query) {
+export function fetchList(query) {
   return request({
     url: '/gen/generator/page',
     method: 'get',
@@ -25,14 +25,60 @@ export function fetchList (query) {
   })
 }
 
-export function handleDown (table) {
+export function fetchDsList(query) {
+  return request({
+    url: '/gen/dsconf/page',
+    method: 'get',
+    params: query
+  })
+}
+
+export function fetchSelectDsList() {
+  return request({
+    url: '/gen/dsconf/list',
+    method: 'get'
+  })
+}
+
+export function addObj(obj) {
+  return request({
+    url: '/gen/dsconf/',
+    method: 'post',
+    data: obj
+  })
+}
+
+export function getObj(id) {
+  return request({
+    url: '/gen/dsconf/' + id,
+    method: 'get'
+  })
+}
+
+export function delObj(id) {
+  return request({
+    url: '/gen/dsconf/' + id,
+    method: 'delete'
+  })
+}
+
+export function putObj(obj) {
+  return request({
+    url: '/gen/dsconf/',
+    method: 'put',
+    data: obj
+  })
+}
+
+
+export function handleDown(table) {
   return request({
     url: '/gen/generator/code',
     method: 'post',
     data: table,
     responseType: 'arraybuffer'
   }).then((response) => { // 处理返回的文件流
-    let blob = new Blob([response.data], { type: 'application/zip' })
+    let blob = new Blob([response.data], {type: 'application/zip'})
     let filename = table.tableName + '.zip'
     let link = document.createElement('a')
     link.href = URL.createObjectURL(blob)

+ 50 - 1
src/const/crud/gen/gen.js

@@ -28,7 +28,6 @@ export const tableOption = {
     label: '表名称',
     prop: 'tableName',
     align: 'center',
-    search: true
   }, {
     label: '表注释',
     prop: 'tableComment',
@@ -77,3 +76,53 @@ export const formOption = {
     }
   ]
 }
+
+
+export const tableDsOption = {
+  border: true,
+  index: true,
+  indexLabel: '序号',
+  stripe: true,
+  menuAlign: 'center',
+  align: 'center',
+  column: [
+    {
+      label: '主键',
+      prop: 'id',
+      hide: true,
+      addVisdiplay: false,
+      editVisdiplay: false
+    },
+    {
+      label: '名称',
+      prop: 'name'
+    },
+    {
+      label: 'jdbcUrl',
+      prop: 'url',
+      overHidden: true
+    },
+    {
+      label: '用户名',
+      prop: 'username'
+    },
+    {
+      label: '密码',
+      prop: 'password'
+    },
+    {
+      label: '创建时间',
+      prop: 'createDate',
+      addVisdiplay: false,
+      editVisdiplay: false,
+      overHidden: true
+    },
+    {
+      label: '更新时间',
+      prop: 'updateDate',
+      overHidden: true,
+      addVisdiplay: false,
+      editVisdiplay: false
+    }
+  ]
+}

+ 112 - 13
src/views/gen/index.vue

@@ -18,14 +18,39 @@
 <template>
   <div class="execution">
     <basic-container>
+      <el-row :gutter="20">
+        <el-col :span="6">
+          <div class="grid-content bg-purple">
+            <el-select v-model="q.id" placeholder="请选择数据源">
+              <el-option
+                v-for="item in dataSourceList"
+                :key="item.id"
+                :label="item.name"
+                :value="item.id">
+              </el-option>
+            </el-select>
+          </div>
+        </el-col>
+        <el-col :span="6">
+          <div class="grid-content bg-purple">
+            <el-input v-model="q.tableName" placeholder="表名称"></el-input>
+          </div>
+        </el-col>
+        <el-col :span="6">
+          <div class="grid-content bg-purple">
+            <el-button type="primary" size="small" icon="el-icon-search" @click="search">搜索</el-button>
+            <el-button type="primary" size="small" icon="el-icon-setting" @click="setting" @close="dsBox=false">维护
+            </el-button>
+          </div>
+        </el-col>
+      </el-row>
       <avue-crud ref="crud"
                  :page="page"
                  :data="tableData"
                  :table-loading="tableLoading"
                  :option="tableOption"
                  @on-load="getList"
-                 @refresh-change="refreshChange"
-                 @search-change="searchChange">
+                 @refresh-change="refreshChange">
         <template slot-scope="scope"
                   slot="menu">
           <el-button type="text"
@@ -49,20 +74,40 @@
           </avue-form>
         </div>
       </el-dialog>
+
+      <el-dialog title="数据源管理" :visible.sync="dsBox" width="90%"
+                 :table-loading="tableLoading"
+                 @close="dsBox=false">
+        <avue-crud ref="crud"
+                   :page="dsPage"
+                   :data="tableDsData"
+                   :option="tableDsOption"
+                   @row-update="handleUpdate"
+                   @row-save="handleSave"
+                   @row-del="rowDel"
+                   @refresh-change="refreshDsChange"
+                   @on-load="getDsList">
+        </avue-crud>
+      </el-dialog>
+
     </basic-container>
   </div>
 </template>
 
 <script>
-  import {fetchList, handleDown} from '@/api/gen/gen'
-  import {formOption, tableOption} from '@/const/crud/gen/gen'
+  import {addObj, delObj, fetchDsList, fetchList, fetchSelectDsList, handleDown, putObj} from '@/api/gen/gen'
+  import {formOption, tableDsOption, tableOption} from '@/const/crud/gen/gen'
   import {mapGetters} from 'vuex'
 
   export default {
     name: 'code-generator',
     data() {
       return {
+        dsBox: false,
+        q: {},
+        dataSourceList: [],
         tableData: [],
+        tableDsData: [],
         formData: {},
         box: false,
         page: {
@@ -70,18 +115,23 @@
           currentPage: 1, // 当前页数
           pageSize: 20 // 每页显示多少条
         },
+        dsPage: {
+          total: 0, // 总页数
+          currentPage: 1, // 当前页数
+          pageSize: 20 // 每页显示多少条
+        },
         tableLoading: false,
         tableOption: tableOption,
+        tableDsOption: tableDsOption,
         formOption: formOption
       }
     },
-    created() {
-    },
-    mounted: function () {
-    },
     computed: {
       ...mapGetters(['permissions'])
     },
+    created() {
+      this.getdataSourceList();
+    },
     methods: {
       getList(page, params) {
         this.tableLoading = true
@@ -94,23 +144,72 @@
           this.tableLoading = false
         })
       },
+      rowDel: function (row, index) {
+        this.$confirm('是否确认删除ID为' + row.id, '提示', {
+          confirmButtonText: '确定',
+          cancelButtonText: '取消',
+          type: 'warning'
+        }).then(function () {
+          return delObj(row.id)
+        }).then(data => {
+          this.tableData.splice(index, 1)
+          this.$message.success('删除成功')
+          this.getDsList(this.page)
+        }).catch(function (err) {
+        })
+      },
+      handleUpdate: function (row, index, done) {
+        putObj(row).then(data => {
+          this.tableData.splice(index, 1, Object.assign({}, row))
+          this.$message.success('修改成功')
+          done()
+          this.getDsList(this.page)
+        })
+      },
+      handleSave: function (row, done) {
+        row.qrUrl = undefined
+        addObj(row).then(data => {
+          this.tableData.push(Object.assign({}, row))
+          this.$message.success('添加成功')
+          done()
+          this.getDsList(this.page)
+        })
+      },
+      getDsList(page, params) {
+        fetchDsList(Object.assign({
+          current: page.currentPage,
+          size: page.pageSize
+        }, params)).then(response => {
+          this.tableDsData = response.data.data.records
+          this.dsPage.total = response.data.data.total
+        })
+      },
       handleDown: function (row, index) {
         this.formData.tableName = row.tableName
         this.box = true
       },
-      /**
-       * 刷新回调
-       */
       refreshChange() {
         this.getList(this.page)
       },
-      searchChange(form) {
-        this.getList(this.page, form)
+      refreshDsChange() {
+        this.getDsList(this.page)
       },
       gen(form) {
+        this.formData.id = this.q.id
         handleDown(this.formData).then(() => {
           this.box = true
         })
+      },
+      setting() {
+        this.dsBox = true
+      },
+      search() {
+        this.getList(this.page, this.filterForm(this.q))
+      },
+      getdataSourceList() {
+        fetchSelectDsList().then(response => {
+          this.dataSourceList = response.data.data
+        })
       }
     }
   }