Commit b04db3d6d87b7d01c6dc37c20d02b3b416933b85
1 parent
45d20355
升级 highlight 插件的版本
Showing
6 changed files
with
117 additions
and
20 deletions
ruoyi-ui/package.json
| @@ -44,7 +44,7 @@ | @@ -44,7 +44,7 @@ | ||
| 44 | "element-ui": "2.14.1", | 44 | "element-ui": "2.14.1", |
| 45 | "file-saver": "2.0.4", | 45 | "file-saver": "2.0.4", |
| 46 | "fuse.js": "6.4.3", | 46 | "fuse.js": "6.4.3", |
| 47 | - "highlight.js": "10.4.1", | 47 | + "highlight.js": "9.18.5", |
| 48 | "js-beautify": "1.13.0", | 48 | "js-beautify": "1.13.0", |
| 49 | "js-cookie": "2.2.1", | 49 | "js-cookie": "2.2.1", |
| 50 | "jsencrypt": "3.0.0-rc.1", | 50 | "jsencrypt": "3.0.0-rc.1", |
ruoyi-ui/src/api/tool/codegen.js
0 → 100644
ruoyi-ui/src/main.js
| @@ -21,8 +21,8 @@ import Pagination from "@/components/Pagination"; | @@ -21,8 +21,8 @@ import Pagination from "@/components/Pagination"; | ||
| 21 | // 自定义表格工具扩展 | 21 | // 自定义表格工具扩展 |
| 22 | import RightToolbar from "@/components/RightToolbar" | 22 | import RightToolbar from "@/components/RightToolbar" |
| 23 | // 代码高亮插件 | 23 | // 代码高亮插件 |
| 24 | -import hljs from 'highlight.js' | ||
| 25 | -import 'highlight.js/styles/github-gist.css' | 24 | +// import hljs from 'highlight.js' |
| 25 | +// import 'highlight.js/styles/github-gist.css' | ||
| 26 | import {DICT_TYPE, getDictDataLabel, getDictDatas} from "@/utils/dict"; | 26 | import {DICT_TYPE, getDictDataLabel, getDictDatas} from "@/utils/dict"; |
| 27 | 27 | ||
| 28 | // 全局方法挂载 | 28 | // 全局方法挂载 |
| @@ -57,7 +57,7 @@ Vue.component('Pagination', Pagination) | @@ -57,7 +57,7 @@ Vue.component('Pagination', Pagination) | ||
| 57 | Vue.component('RightToolbar', RightToolbar) | 57 | Vue.component('RightToolbar', RightToolbar) |
| 58 | 58 | ||
| 59 | Vue.use(permission) | 59 | Vue.use(permission) |
| 60 | -Vue.use(hljs.vuePlugin); | 60 | +// Vue.use(hljs.vuePlugin); |
| 61 | 61 | ||
| 62 | /** | 62 | /** |
| 63 | * If you don't want to use mock-server | 63 | * If you don't want to use mock-server |
ruoyi-ui/src/views/tool/gen/editTable.vue
| @@ -90,7 +90,8 @@ | @@ -90,7 +90,8 @@ | ||
| 90 | <el-option label="单选框" value="radio" /> | 90 | <el-option label="单选框" value="radio" /> |
| 91 | <el-option label="复选框" value="checkbox" /> | 91 | <el-option label="复选框" value="checkbox" /> |
| 92 | <el-option label="日期控件" value="datetime" /> | 92 | <el-option label="日期控件" value="datetime" /> |
| 93 | - <el-option label="上传控件" value="uploadImage" /> | 93 | + <el-option label="图片上传" value="imageUpload" /> |
| 94 | + <el-option label="文件上传" value="fileUpload" /> | ||
| 94 | <el-option label="富文本控件" value="editor" /> | 95 | <el-option label="富文本控件" value="editor" /> |
| 95 | </el-select> | 96 | </el-select> |
| 96 | </template> | 97 | </template> |
| @@ -112,7 +113,7 @@ | @@ -112,7 +113,7 @@ | ||
| 112 | </el-table> | 113 | </el-table> |
| 113 | </el-tab-pane> | 114 | </el-tab-pane> |
| 114 | <el-tab-pane label="生成信息" name="genInfo"> | 115 | <el-tab-pane label="生成信息" name="genInfo"> |
| 115 | - <gen-info-form ref="genInfo" :info="info" :menus="menus"/> | 116 | + <gen-info-form ref="genInfo" :info="info" :tables="tables" :menus="menus"/> |
| 116 | </el-tab-pane> | 117 | </el-tab-pane> |
| 117 | </el-tabs> | 118 | </el-tabs> |
| 118 | <el-form label-width="100px"> | 119 | <el-form label-width="100px"> |
| @@ -143,6 +144,8 @@ export default { | @@ -143,6 +144,8 @@ export default { | ||
| 143 | activeName: "cloum", | 144 | activeName: "cloum", |
| 144 | // 表格的高度 | 145 | // 表格的高度 |
| 145 | tableHeight: document.documentElement.scrollHeight - 245 + "px", | 146 | tableHeight: document.documentElement.scrollHeight - 245 + "px", |
| 147 | + // 表信息 | ||
| 148 | + tables: [], | ||
| 146 | // 表列信息 | 149 | // 表列信息 |
| 147 | cloumns: [], | 150 | cloumns: [], |
| 148 | // 字典信息 | 151 | // 字典信息 |
| @@ -160,6 +163,7 @@ export default { | @@ -160,6 +163,7 @@ export default { | ||
| 160 | getGenTable(tableId).then(res => { | 163 | getGenTable(tableId).then(res => { |
| 161 | this.cloumns = res.data.rows; | 164 | this.cloumns = res.data.rows; |
| 162 | this.info = res.data.info; | 165 | this.info = res.data.info; |
| 166 | + this.tables = res.data.tables; | ||
| 163 | }); | 167 | }); |
| 164 | /** 查询字典下拉列表 */ | 168 | /** 查询字典下拉列表 */ |
| 165 | getDictOptionselect().then(response => { | 169 | getDictOptionselect().then(response => { |
| @@ -167,7 +171,7 @@ export default { | @@ -167,7 +171,7 @@ export default { | ||
| 167 | }); | 171 | }); |
| 168 | /** 查询菜单下拉列表 */ | 172 | /** 查询菜单下拉列表 */ |
| 169 | getMenuTreeselect().then(response => { | 173 | getMenuTreeselect().then(response => { |
| 170 | - this.menus = this.handleTree(response.data, "id"); | 174 | + this.menus = this.handleTree(response.data, "menuId"); |
| 171 | }); | 175 | }); |
| 172 | } | 176 | } |
| 173 | }, | 177 | }, |
ruoyi-ui/src/views/tool/gen/genInfoForm.vue
| @@ -4,9 +4,10 @@ | @@ -4,9 +4,10 @@ | ||
| 4 | <el-col :span="12"> | 4 | <el-col :span="12"> |
| 5 | <el-form-item prop="tplCategory"> | 5 | <el-form-item prop="tplCategory"> |
| 6 | <span slot="label">生成模板</span> | 6 | <span slot="label">生成模板</span> |
| 7 | - <el-select v-model="info.tplCategory"> | 7 | + <el-select v-model="info.tplCategory" @change="tplSelectChange"> |
| 8 | <el-option label="单表(增删改查)" value="crud" /> | 8 | <el-option label="单表(增删改查)" value="crud" /> |
| 9 | <el-option label="树表(增删改查)" value="tree" /> | 9 | <el-option label="树表(增删改查)" value="tree" /> |
| 10 | + <el-option label="主子表(增删改查)" value="sub" /> | ||
| 10 | </el-select> | 11 | </el-select> |
| 11 | </el-form-item> | 12 | </el-form-item> |
| 12 | </el-col> | 13 | </el-col> |
| @@ -126,8 +127,8 @@ | @@ -126,8 +127,8 @@ | ||
| 126 | </span> | 127 | </span> |
| 127 | <el-select v-model="info.treeCode" placeholder="请选择"> | 128 | <el-select v-model="info.treeCode" placeholder="请选择"> |
| 128 | <el-option | 129 | <el-option |
| 129 | - v-for="column in info.columns" | ||
| 130 | - :key="column.columnName" | 130 | + v-for="(column, index) in info.columns" |
| 131 | + :key="index" | ||
| 131 | :label="column.columnName + ':' + column.columnComment" | 132 | :label="column.columnName + ':' + column.columnComment" |
| 132 | :value="column.columnName" | 133 | :value="column.columnName" |
| 133 | ></el-option> | 134 | ></el-option> |
| @@ -144,8 +145,8 @@ | @@ -144,8 +145,8 @@ | ||
| 144 | </span> | 145 | </span> |
| 145 | <el-select v-model="info.treeParentCode" placeholder="请选择"> | 146 | <el-select v-model="info.treeParentCode" placeholder="请选择"> |
| 146 | <el-option | 147 | <el-option |
| 147 | - v-for="column in info.columns" | ||
| 148 | - :key="column.columnName" | 148 | + v-for="(column, index) in info.columns" |
| 149 | + :key="index" | ||
| 149 | :label="column.columnName + ':' + column.columnComment" | 150 | :label="column.columnName + ':' + column.columnComment" |
| 150 | :value="column.columnName" | 151 | :value="column.columnName" |
| 151 | ></el-option> | 152 | ></el-option> |
| @@ -162,8 +163,47 @@ | @@ -162,8 +163,47 @@ | ||
| 162 | </span> | 163 | </span> |
| 163 | <el-select v-model="info.treeName" placeholder="请选择"> | 164 | <el-select v-model="info.treeName" placeholder="请选择"> |
| 164 | <el-option | 165 | <el-option |
| 165 | - v-for="column in info.columns" | ||
| 166 | - :key="column.columnName" | 166 | + v-for="(column, index) in info.columns" |
| 167 | + :key="index" | ||
| 168 | + :label="column.columnName + ':' + column.columnComment" | ||
| 169 | + :value="column.columnName" | ||
| 170 | + ></el-option> | ||
| 171 | + </el-select> | ||
| 172 | + </el-form-item> | ||
| 173 | + </el-col> | ||
| 174 | + </el-row> | ||
| 175 | + <el-row v-show="info.tplCategory == 'sub'"> | ||
| 176 | + <h4 class="form-header">关联信息</h4> | ||
| 177 | + <el-col :span="12"> | ||
| 178 | + <el-form-item> | ||
| 179 | + <span slot="label"> | ||
| 180 | + 关联子表的表名 | ||
| 181 | + <el-tooltip content="关联子表的表名, 如:sys_user" placement="top"> | ||
| 182 | + <i class="el-icon-question"></i> | ||
| 183 | + </el-tooltip> | ||
| 184 | + </span> | ||
| 185 | + <el-select v-model="info.subTableName" placeholder="请选择" @change="subSelectChange"> | ||
| 186 | + <el-option | ||
| 187 | + v-for="(table, index) in tables" | ||
| 188 | + :key="index" | ||
| 189 | + :label="table.tableName + ':' + table.tableComment" | ||
| 190 | + :value="table.tableName" | ||
| 191 | + ></el-option> | ||
| 192 | + </el-select> | ||
| 193 | + </el-form-item> | ||
| 194 | + </el-col> | ||
| 195 | + <el-col :span="12"> | ||
| 196 | + <el-form-item> | ||
| 197 | + <span slot="label"> | ||
| 198 | + 子表关联的外键名 | ||
| 199 | + <el-tooltip content="子表关联的外键名, 如:user_id" placement="top"> | ||
| 200 | + <i class="el-icon-question"></i> | ||
| 201 | + </el-tooltip> | ||
| 202 | + </span> | ||
| 203 | + <el-select v-model="info.subTableFkName" placeholder="请选择"> | ||
| 204 | + <el-option | ||
| 205 | + v-for="(column, index) in subColumns" | ||
| 206 | + :key="index" | ||
| 167 | :label="column.columnName + ':' + column.columnComment" | 207 | :label="column.columnName + ':' + column.columnComment" |
| 168 | :value="column.columnName" | 208 | :value="column.columnName" |
| 169 | ></el-option> | 209 | ></el-option> |
| @@ -185,6 +225,10 @@ export default { | @@ -185,6 +225,10 @@ export default { | ||
| 185 | type: Object, | 225 | type: Object, |
| 186 | default: null | 226 | default: null |
| 187 | }, | 227 | }, |
| 228 | + tables: { | ||
| 229 | + type: Array, | ||
| 230 | + default: null | ||
| 231 | + }, | ||
| 188 | menus: { | 232 | menus: { |
| 189 | type: Array, | 233 | type: Array, |
| 190 | default: [] | 234 | default: [] |
| @@ -192,6 +236,7 @@ export default { | @@ -192,6 +236,7 @@ export default { | ||
| 192 | }, | 236 | }, |
| 193 | data() { | 237 | data() { |
| 194 | return { | 238 | return { |
| 239 | + subColumns: [], | ||
| 195 | rules: { | 240 | rules: { |
| 196 | tplCategory: [ | 241 | tplCategory: [ |
| 197 | { required: true, message: "请选择生成模板", trigger: "blur" } | 242 | { required: true, message: "请选择生成模板", trigger: "blur" } |
| @@ -212,6 +257,11 @@ export default { | @@ -212,6 +257,11 @@ export default { | ||
| 212 | }; | 257 | }; |
| 213 | }, | 258 | }, |
| 214 | created() {}, | 259 | created() {}, |
| 260 | + watch: { | ||
| 261 | + 'info.subTableName': function(val) { | ||
| 262 | + this.setSubTableColumns(val); | ||
| 263 | + } | ||
| 264 | + }, | ||
| 215 | methods: { | 265 | methods: { |
| 216 | /** 转换菜单数据结构 */ | 266 | /** 转换菜单数据结构 */ |
| 217 | normalizer(node) { | 267 | normalizer(node) { |
| @@ -219,10 +269,31 @@ export default { | @@ -219,10 +269,31 @@ export default { | ||
| 219 | delete node.children; | 269 | delete node.children; |
| 220 | } | 270 | } |
| 221 | return { | 271 | return { |
| 222 | - id: node.id, | ||
| 223 | - label: node.name, | 272 | + id: node.menuId, |
| 273 | + label: node.menuName, | ||
| 224 | children: node.children | 274 | children: node.children |
| 225 | }; | 275 | }; |
| 276 | + }, | ||
| 277 | + /** 选择子表名触发 */ | ||
| 278 | + subSelectChange(value) { | ||
| 279 | + this.info.subTableFkName = ''; | ||
| 280 | + }, | ||
| 281 | + /** 选择生成模板触发 */ | ||
| 282 | + tplSelectChange(value) { | ||
| 283 | + if(value !== 'sub') { | ||
| 284 | + this.info.subTableName = ''; | ||
| 285 | + this.info.subTableFkName = ''; | ||
| 286 | + } | ||
| 287 | + }, | ||
| 288 | + /** 设置关联外键 */ | ||
| 289 | + setSubTableColumns(value) { | ||
| 290 | + for (var item in this.tables) { | ||
| 291 | + const name = this.tables[item].tableName; | ||
| 292 | + if (value === name) { | ||
| 293 | + this.subColumns = this.tables[item].columns; | ||
| 294 | + break; | ||
| 295 | + } | ||
| 296 | + } | ||
| 226 | } | 297 | } |
| 227 | } | 298 | } |
| 228 | }; | 299 | }; |
ruoyi-ui/src/views/tool/gen/index.vue
| @@ -32,7 +32,7 @@ | @@ -32,7 +32,7 @@ | ||
| 32 | ></el-date-picker> | 32 | ></el-date-picker> |
| 33 | </el-form-item> | 33 | </el-form-item> |
| 34 | <el-form-item> | 34 | <el-form-item> |
| 35 | - <el-button type="cyan" icon="el-icon-search" size="mini" @click="handleQuery">搜索</el-button> | 35 | + <el-button type="primary" icon="el-icon-search" size="mini" @click="handleQuery">搜索</el-button> |
| 36 | <el-button icon="el-icon-refresh" size="mini" @click="resetQuery">重置</el-button> | 36 | <el-button icon="el-icon-refresh" size="mini" @click="resetQuery">重置</el-button> |
| 37 | </el-form-item> | 37 | </el-form-item> |
| 38 | </el-form> | 38 | </el-form> |
| @@ -41,6 +41,7 @@ | @@ -41,6 +41,7 @@ | ||
| 41 | <el-col :span="1.5"> | 41 | <el-col :span="1.5"> |
| 42 | <el-button | 42 | <el-button |
| 43 | type="primary" | 43 | type="primary" |
| 44 | + plain | ||
| 44 | icon="el-icon-download" | 45 | icon="el-icon-download" |
| 45 | size="mini" | 46 | size="mini" |
| 46 | @click="handleGenTable" | 47 | @click="handleGenTable" |
| @@ -50,6 +51,7 @@ | @@ -50,6 +51,7 @@ | ||
| 50 | <el-col :span="1.5"> | 51 | <el-col :span="1.5"> |
| 51 | <el-button | 52 | <el-button |
| 52 | type="info" | 53 | type="info" |
| 54 | + plain | ||
| 53 | icon="el-icon-upload" | 55 | icon="el-icon-upload" |
| 54 | size="mini" | 56 | size="mini" |
| 55 | @click="openImportTable" | 57 | @click="openImportTable" |
| @@ -59,6 +61,7 @@ | @@ -59,6 +61,7 @@ | ||
| 59 | <el-col :span="1.5"> | 61 | <el-col :span="1.5"> |
| 60 | <el-button | 62 | <el-button |
| 61 | type="success" | 63 | type="success" |
| 64 | + plain | ||
| 62 | icon="el-icon-edit" | 65 | icon="el-icon-edit" |
| 63 | size="mini" | 66 | size="mini" |
| 64 | :disabled="single" | 67 | :disabled="single" |
| @@ -69,6 +72,7 @@ | @@ -69,6 +72,7 @@ | ||
| 69 | <el-col :span="1.5"> | 72 | <el-col :span="1.5"> |
| 70 | <el-button | 73 | <el-button |
| 71 | type="danger" | 74 | type="danger" |
| 75 | + plain | ||
| 72 | icon="el-icon-delete" | 76 | icon="el-icon-delete" |
| 73 | size="mini" | 77 | size="mini" |
| 74 | :disabled="multiple" | 78 | :disabled="multiple" |
| @@ -80,7 +84,7 @@ | @@ -80,7 +84,7 @@ | ||
| 80 | </el-row> | 84 | </el-row> |
| 81 | 85 | ||
| 82 | <el-table v-loading="loading" :data="tableList" @selection-change="handleSelectionChange"> | 86 | <el-table v-loading="loading" :data="tableList" @selection-change="handleSelectionChange"> |
| 83 | - <el-table-column type="selection" width="55"></el-table-column> | 87 | + <el-table-column type="selection" align="center" width="55"></el-table-column> |
| 84 | <el-table-column label="序号" type="index" width="50" align="center"> | 88 | <el-table-column label="序号" type="index" width="50" align="center"> |
| 85 | <template slot-scope="scope"> | 89 | <template slot-scope="scope"> |
| 86 | <span>{{(queryParams.pageNum - 1) * queryParams.pageSize + scope.$index + 1}}</span> | 90 | <span>{{(queryParams.pageNum - 1) * queryParams.pageSize + scope.$index + 1}}</span> |
| @@ -165,7 +169,7 @@ | @@ -165,7 +169,7 @@ | ||
| 165 | :name="key.substring(key.lastIndexOf('/')+1,key.indexOf('.vm'))" | 169 | :name="key.substring(key.lastIndexOf('/')+1,key.indexOf('.vm'))" |
| 166 | :key="key" | 170 | :key="key" |
| 167 | > | 171 | > |
| 168 | - <highlightjs autodetect :code="value" /> | 172 | + <pre><code class="hljs" v-html="highlightedCode(value, key)"></code></pre> |
| 169 | </el-tab-pane> | 173 | </el-tab-pane> |
| 170 | </el-tabs> | 174 | </el-tabs> |
| 171 | </el-dialog> | 175 | </el-dialog> |
| @@ -177,6 +181,15 @@ | @@ -177,6 +181,15 @@ | ||
| 177 | import { listTable, previewTable, delTable, genCode, synchDb } from "@/api/tool/gen"; | 181 | import { listTable, previewTable, delTable, genCode, synchDb } from "@/api/tool/gen"; |
| 178 | import importTable from "./importTable"; | 182 | import importTable from "./importTable"; |
| 179 | import { downLoadZip } from "@/utils/zipdownload"; | 183 | import { downLoadZip } from "@/utils/zipdownload"; |
| 184 | +// 代码高亮插件 | ||
| 185 | +import hljs from "highlight.js/lib/highlight"; | ||
| 186 | +import "highlight.js/styles/github-gist.css"; | ||
| 187 | +hljs.registerLanguage("java", require("highlight.js/lib/languages/java")); | ||
| 188 | +hljs.registerLanguage("xml", require("highlight.js/lib/languages/xml")); | ||
| 189 | +hljs.registerLanguage("html", require("highlight.js/lib/languages/xml")); | ||
| 190 | +hljs.registerLanguage("vue", require("highlight.js/lib/languages/xml")); | ||
| 191 | +hljs.registerLanguage("javascript", require("highlight.js/lib/languages/javascript")); | ||
| 192 | +hljs.registerLanguage("sql", require("highlight.js/lib/languages/sql")); | ||
| 180 | 193 | ||
| 181 | export default { | 194 | export default { |
| 182 | name: "Gen", | 195 | name: "Gen", |
| @@ -290,6 +303,13 @@ export default { | @@ -290,6 +303,13 @@ export default { | ||
| 290 | this.preview.open = true; | 303 | this.preview.open = true; |
| 291 | }); | 304 | }); |
| 292 | }, | 305 | }, |
| 306 | + /** 高亮显示 */ | ||
| 307 | + highlightedCode(code, key) { | ||
| 308 | + const vmName = key.substring(key.lastIndexOf("/") + 1, key.indexOf(".vm")); | ||
| 309 | + var language = vmName.substring(vmName.indexOf(".") + 1, vmName.length); | ||
| 310 | + const result = hljs.highlight(language, code || "", true); | ||
| 311 | + return result.value || ' '; | ||
| 312 | + }, | ||
| 293 | // 多选框选中数据 | 313 | // 多选框选中数据 |
| 294 | handleSelectionChange(selection) { | 314 | handleSelectionChange(selection) { |
| 295 | this.ids = selection.map(item => item.tableId); | 315 | this.ids = selection.map(item => item.tableId); |
| @@ -318,4 +338,4 @@ export default { | @@ -318,4 +338,4 @@ export default { | ||
| 318 | } | 338 | } |
| 319 | } | 339 | } |
| 320 | }; | 340 | }; |
| 321 | -</script> | ||
| 322 | \ No newline at end of file | 341 | \ No newline at end of file |
| 342 | +</script> |