Browse Source

Merge remote-tracking branch 'origin/master'

suochencheng 7 years ago
parent
commit
415978b6d2

+ 25 - 24
src/main/java/com/izouma/codegenerator/TableGenerator.java

@@ -88,15 +88,16 @@ public class TableGenerator {
 
             Statement stmt = conn.createStatement();
 
-            String sql = "DROP TABLE IF EXISTS " + model.getTableName() + "; create table " + model.getTableName() + "(";
+            StringBuilder sql = new StringBuilder("DROP TABLE IF EXISTS " + model.getTableName() + "; create table " + model.getTableName() + "(");
 
             if ("SqlServer".equals(model.getDataBaseType())) {
-                sql = "IF EXISTS (SELECT * FROM sys.objects where name = '" + model.getTableName() + "')DROP TABLE " + model.getTableName()
-                        + "; create table " + model.getTableName() + "(";
+                sql = new StringBuilder("IF EXISTS (SELECT * FROM sys.objects where name = '" + model.getTableName() + "')DROP TABLE " + model.getTableName()
+                        + "; create table " + model.getTableName() + "(");
             }
 
-
+            List<String> fieldSqlList = new ArrayList<>();
             for (TableField tableField : model.getFields()) {
+                StringBuilder fieldSql = new StringBuilder();
                 if (tableField.getLength() == null) {
                     switch (tableField.getJdbcType()) {
                         case "int":
@@ -128,68 +129,70 @@ public class TableGenerator {
 
                 if ("Mysql".equals(model.getDataBaseType())) {
 
-                    sql += " " + tableField.getName() + " " + tableField.getJdbcType() + "(" + tableField.getLength() + ")";
+                    fieldSql.append(" ").append(tableField.getName()).append(" ").append(tableField.getJdbcType()).append("(").append(tableField.getLength()).append(")");
 
                 } else if ("SqlServer".equals(model.getDataBaseType())) {
                     if ("int".equals(tableField.getJdbcType())) {
 
-                        sql += " " + tableField.getName() + " " + tableField.getJdbcType();
+                        fieldSql.append(" ").append(tableField.getName()).append(" ").append(tableField.getJdbcType());
                     } else {
-                        sql += " " + tableField.getName() + " " + tableField.getJdbcType() + "(" + tableField.getLength() + ")";
+                        fieldSql.append(" ").append(tableField.getName()).append(" ").append(tableField.getJdbcType()).append("(").append(tableField.getLength()).append(")");
                     }
 
                 }
 
 
                 if (tableField.getNotNull()) {
-                    sql += " not null ";
+                    fieldSql.append(" not null ");
                 }
                 if (tableField.getPrimaryKey()) {
-                    sql += " primary key ";
+                    fieldSql.append(" primary key ");
                 }
                 if (tableField.getAutoIncrease()) {
                     if ("Mysql".equals(model.getDataBaseType())) {
 
-                        sql += " auto_increment ";
+                        fieldSql.append(" auto_increment ");
 
                     } else if ("SqlServer".equals(model.getDataBaseType())) {
-                        sql += " identity(1,1) ";
+                        fieldSql.append(" identity(1,1) ");
                     }
 
                 }
                 if (StringUtils.isNotEmpty(tableField.getDefaultValue())) {
                     if ("CURRENT_TIMESTAMP".equals(tableField.getDefaultValue())) {
 
-                        sql += " default " + " " + tableField.getDefaultValue() + " ";
+                        fieldSql.append(" default " + " ").append(tableField.getDefaultValue()).append(" ");
 
                         if ("update_time".equals(tableField.getName())) {
-                            sql += " ON UPDATE CURRENT_TIMESTAMP ";
+                            fieldSql.append(" ON UPDATE CURRENT_TIMESTAMP ");
                         }
 
                     } else {
-                        sql += " default " + "'" + tableField.getDefaultValue() + "'";
+                        if ("bit".equalsIgnoreCase(tableField.getJdbcType())) {
+                            fieldSql.append(" default ").append(tableField.getDefaultValue());
+                        } else {
+                            fieldSql.append(" default '").append(tableField.getDefaultValue()).append("'");
+                        }
                     }
                 }
 
                 if (StringUtils.isNotEmpty(tableField.getRemark())) {
                     if ("Mysql".equals(model.getDataBaseType())) {
-                        sql += " comment " + "'" + tableField.getRemark() + "'";
+                        fieldSql.append(" comment '").append(tableField.getRemark()).append("'");
                     }
                 }
-
-                sql += ",";
+                fieldSqlList.add(fieldSql.toString());
             }
-            String str = sql.substring(0, sql.lastIndexOf(","));
-            String sql1 = str + " )";
+            sql.append(StringUtils.join(fieldSqlList, ",")).append(")");
 
             if (StringUtils.isNotEmpty(model.getRemark())) {
                 if ("Mysql".equals(model.getDataBaseType())) {
-                    sql1 += " comment = " + "'" + model.getRemark() + "'";
+                    sql.append(" comment = '").append(model.getRemark()).append("'");
                 }
             }
 
-            System.out.println(sql1);
-            int result = stmt.executeUpdate(sql1);
+            System.out.println(sql);
+            int result = stmt.executeUpdate(sql.toString());
             if (result != -1) {
                 System.out.println("创建数据表成功");
             }
@@ -199,8 +202,6 @@ public class TableGenerator {
         } finally {
             conn.close();
         }
-
     }
-
 }
 

+ 9 - 3
src/main/resources/templates/FormTemplate.vm

@@ -1,6 +1,6 @@
 <template>
     <div>
-        <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="120px" label-position="right" size="small"
                  style="max-width: 500px;">
             #foreach($field in $model.fields)
                 #if(${field.showInForm})
@@ -115,12 +115,18 @@
             <el-form-item prop="${field.modelName}" label="${field.remark}">
                 <el-switch
                         v-model="formData.${field.modelName}"
-                        active-color="#13ce66"
-                        inactive-color="#ff4949"
                         :disabled="'${field.modelName}'==subColumn">
                 </el-switch>
             </el-form-item>
                     #end
+                    #if(${field.formType}=="richText")
+                        <el-form-item prop="${field.modelName}" label="${field.remark}">
+                            <rich-text
+                                    v-model="formData.${field.modelName}"
+                                    :disabled="'${field.modelName}'==subColumn">
+                            </rich-text>
+                        </el-form-item>
+                    #end
                 #end
             #end
             <el-form-item>

+ 80 - 39
src/main/vue/src/components/RichText.vue

@@ -1,5 +1,6 @@
 <template>
-    <textarea id="tiny" v-model="content"></textarea>
+    <div v-if="disabled" v-html="content" class="preview"></div>
+    <textarea v-else v-model="content" ref="editor" @load="load"></textarea>
 </template>
 <script>
     import axios from 'axios';
@@ -32,61 +33,101 @@
 
     require('./zh_CN');
     export default {
-        props: ['value'],
+        props: ['value', 'disabled'],
         created() {
             this.content = this.value || ''
         },
         mounted() {
-            tinymce.init({
-                selector: '#tiny',
-                skin_url: '/static/skins/lightgray',
-                language: 'zh_CN',
-                menubar: false,
-                branding: false,
-                statusbar: false,
-                height: 300,
-                toolbar: 'undo redo | styleselect bold italic strikethrough forecolor backcolor  | image media link blockquote visualblocks insert | formatselect | alignleft aligncenter alignright alignjustify | bullist numlist outdent indent | removeformat | preview fullscreen code help',
-                plugins: [
-                    'advlist autolink lists link image charmap print preview anchor textcolor',
-                    'searchreplace visualblocks code fullscreen',
-                    'insertdatetime media table contextmenu paste code help imagetools'
-                ],
-                images_upload_url: this.$baseUrl + '/assets/uploadFile',
-                images_upload_handler: function (blobInfo, success, failure) {
-                    let formData = new FormData();
-                    formData.append('file', blobInfo.blob(), blobInfo.filename());
-                    axios.post('/assets/uploadFile', formData).then(res => {
-                        if (res.status === 200) {
-                            if (res.data.success) {
-                                success(res.data.data[0]);
-                                return;
-                            }
-                        }
-                        failure('error');
-                    }).catch(e => {
-                        failure(e);
-                    })
-                },
-                init_instance_callback: editor => {
-                    editor.on('Change MouseOut', e => {
-                        this.content = editor.getContent();
-                    });
-                }
-            });
+            this.initEditor();
+        },
+        destroyed() {
+            this.destroyEditor();
         },
         data() {
             return {
+                editor: null,
                 content: ''
             }
         },
-        methods: {},
+        methods: {
+            load() {
+                console.log(1111)
+            },
+            initEditor() {
+                tinymce.init({
+                    target: this.$refs.editor,
+                    skin_url: '/static/skins/lightgray',
+                    language: 'zh_CN',
+                    menubar: false,
+                    branding: false,
+                    statusbar: false,
+                    height: 300,
+                    toolbar: 'undo redo | styleselect bold italic strikethrough forecolor backcolor  | image media link blockquote visualblocks insert | formatselect | alignleft aligncenter alignright alignjustify | bullist numlist outdent indent | removeformat | preview fullscreen code help',
+                    plugins: [
+                        'advlist autolink lists link image charmap print preview anchor textcolor',
+                        'searchreplace visualblocks code fullscreen',
+                        'insertdatetime media table contextmenu paste code help imagetools'
+                    ],
+                    images_upload_url: this.$baseUrl + '/assets/uploadFile',
+                    images_upload_handler: function (blobInfo, success, failure) {
+                        let formData = new FormData();
+                        formData.append('file', blobInfo.blob(), blobInfo.filename());
+                        axios.post('/assets/uploadFile', formData).then(res => {
+                            if (res.status === 200) {
+                                if (res.data.success) {
+                                    success(res.data.data[0]);
+                                    return;
+                                }
+                            }
+                            failure('error');
+                        }).catch(e => {
+                            failure(e);
+                        })
+                    },
+                    init_instance_callback: editor => {
+                        this.editor = editor;
+                        this.editor.setContent(this.content);
+                        editor.on('Change MouseOut', e => {
+                            this.content = editor.getContent();
+                        });
+                    }
+                });
+            },
+            destroyEditor() {
+                if (this.editor) {
+                    this.editor.destroy();
+                }
+                this.editor = null;
+            }
+        },
         watch: {
             value(val) {
+                if (this.editor) {
+                    this.editor.setContent(val);
+                }
                 this.content = val
             },
             content(val) {
                 this.$emit('input', val)
+            },
+            disabled(val) {
+                if (val) {
+                    this.destroyEditor();
+                } else {
+                    this.$nextTick(() => {
+                        this.initEditor();
+                    })
+                }
             }
         }
     }
 </script>
+<style lang="less" scoped>
+    .preview {
+        height: 300px;
+        overflow: auto;
+        border: 1px solid #ebebeb;
+        background-color: #fbfdff;
+        border-radius: 4px;
+    }
+</style>

+ 7 - 3
src/main/vue/src/entries/admin.js

@@ -1,11 +1,11 @@
 import Vue from 'vue'
-import Main from '../pages/Main'
 import router from '../router'
 import store from '../vuex'
 import ElementUI from 'element-ui'
 import axios from 'axios'
 import MultiUpload from '../components/MultiUpload'
 import SingleUpload from '../components/SingleUpload'
+import RichText from '../components/RichText'
 import VueI18n from 'vue-i18n'
 import VueAMap from 'vue-amap'
 
@@ -26,6 +26,7 @@ Vue.use(ElementUI);
 Vue.use(VueI18n);
 Vue.component('multi-upload', MultiUpload);
 Vue.component('single-upload', SingleUpload);
+Vue.component('rich-text', RichText);
 const baseUrl = process.env.NODE_ENV === 'production' ? '../' : `http://${location.hostname}:8080`;
 Vue.prototype.$baseUrl = baseUrl;
 axios.defaults.withCredentials = true;
@@ -179,6 +180,9 @@ new Vue({
     el: '#app',
     router,
     store,
-    components: {Main},
-    template: '<Main/>'
+    components: {},
+    template:
+        `<keep-alive include="*">
+            <router-view></router-view>
+        </keep-alive>`
 });

+ 0 - 0
src/main/vue/src/pages/App.vue → src/main/vue/src/pages/Admin.vue


+ 0 - 5
src/main/vue/src/pages/Main.vue

@@ -1,5 +0,0 @@
-<template>
-    <keep-alive include="*">
-        <router-view></router-view>
-    </keep-alive>
-</template>

+ 2 - 2
src/main/vue/src/router/index.js

@@ -9,7 +9,7 @@ const router = new Router({
     routes: [
         {
             path: '/',
-            component: () => import('../pages/App'),
+            component: () => import('../pages/Admin'),
             children: [
                 {
                     path: '/',
@@ -302,4 +302,4 @@ router.afterEach((to, from) => {
     window.onresize();
 });
 
-export default router;
+export default router;