增加自动化代码选择业务库功能,增加无边框页面功能。 (#1264)

* feat:增加无边框页面路由

* 更改基础页面文字说明

* 修复安装插件路径穿越漏洞

* 添加业务库数据库选择功能

Co-authored-by: dzwvip <dzwvip@qq.com>
Co-authored-by: znonymous <fly1029@yeah.net>
This commit is contained in:
奇淼(piexlmax
2022-10-23 21:04:17 +08:00
committed by GitHub
parent 525b3a0da9
commit 05f8ae2aae
15 changed files with 283 additions and 45 deletions

View File

@@ -24,10 +24,11 @@ export const createTemp = (data) => {
// @Produce application/json
// @Success 200 {string} string "{"success":true,"data":{},"msg":"创建成功"}"
// @Router /autoCode/getDatabase [get]
export const getDB = () => {
export const getDB = (params) => {
return service({
url: '/autoCode/getDB',
method: 'get'
method: 'get',
params
})
}

View File

@@ -5,6 +5,7 @@ import { defineStore } from 'pinia'
import { ref } from 'vue'
const routerListArr = []
const notLayoutRouterArr = []
const keepAliveRoutersArr = []
const formatRouter = (routes, routeMap) => {
@@ -14,9 +15,16 @@ const formatRouter = (routes, routeMap) => {
}
item.meta.btns = item.btns
item.meta.hidden = item.hidden
routeMap[item.name] = item
if (item.children && item.children.length > 0) {
formatRouter(item.children, routeMap)
if (item.meta.defaultMenu === true) {
notLayoutRouterArr.push({
...item,
path: `/${item.path}`,
})
} else {
routeMap[item.name] = item
if (item.children && item.children.length > 0) {
formatRouter(item.children, routeMap)
}
}
})
}
@@ -72,6 +80,9 @@ export const useRouterStore = defineStore('router', () => {
})
formatRouter(asyncRouter, routeMap)
baseRouter[0].children = asyncRouter
if (notLayoutRouterArr.length !== 0) {
baseRouter.push(...notLayoutRouterArr)
}
baseRouter.push({
path: '/:catchAll(.*)',
redirect: '/layout/404'

View File

@@ -128,7 +128,7 @@
<template #label>
<div>
<span> 高亮菜单 </span>
<el-tooltip content="注当到达此路由时候指定左侧菜单指定name会处于活跃状态亮起可为空为空则为本路由Name。" placement="bottom" effect="light">
<el-tooltip content="注当到达此路由时候指定左侧菜单指定name会处于活跃状态亮起可为空为空则为本路由Name。" placement="top" effect="light">
<el-icon><QuestionFilled /></el-icon>
</el-tooltip>
</div>
@@ -147,6 +147,21 @@
<el-option :value="true" label="是" />
</el-select>
</el-form-item>
<el-form-item style="width:30%">
<template #label>
<div>
<span> 是否为基础页面 </span>
<el-tooltip content="此项选择为是,则不会展示左侧菜单以及顶部信息。" placement="top" effect="light">
<el-icon><QuestionFilled /></el-icon>
</el-tooltip>
</div>
</template>
<el-select v-model="form.meta.defaultMenu" style="width:100%" placeholder="是否为基础页面">
<el-option :value="false" label="否" />
<el-option :value="true" label="是" />
</el-select>
</el-form-item>
</el-form>
<div>
<el-button

View File

@@ -14,8 +14,29 @@
</div>
</template>
<el-form ref="getTableForm" style="margin-top:24px" :inline="true" :model="dbform" label-width="120px">
<el-form-item label="业务库" prop="selectDBtype">
<template #label>
<el-tooltip content="注需要提前到db-list自行配置多数据库如未配置需配置后重启服务方可使用。此处可选择对应库表可理解为从哪个库选择表" placement="bottom" effect="light">
<div> 业务库 <el-icon><QuestionFilled /></el-icon> </div>
</el-tooltip>
</template>
<el-select v-model="dbform.businessDB" clearable style="width:194px" placeholder="选择业务库" @change="getDbFunc">
<el-option
v-for="item in dbList"
:key="item.aliasName"
:value="item.aliasName"
:label="item.aliasName"
:disabled="item.disable"
>
<div>
<span>{{ item.aliasName }}</span>
<span style="float:right;color:#8492a6;font-size:13px">{{ item.dbName }}</span>
</div>
</el-option>
</el-select>
</el-form-item>
<el-form-item label="数据库名" prop="structName">
<el-select v-model="dbform.dbName" filterable placeholder="请选择数据库" @change="getTableFunc">
<el-select v-model="dbform.dbName" clearable filterable placeholder="请选择数据库" @change="getTableFunc">
<el-option
v-for="item in dbOptions"
:key="item.database"
@@ -214,6 +235,17 @@
<script setup>
import FieldDialog from '@/view/systemTools/autoCode/component/fieldDialog.vue'
import PreviewCodeDialog from '@/view/systemTools/autoCode/component/previewCodeDialg.vue'
import { toUpperCase, toHump, toSQLLine, toLowerCase } from '@/utils/stringFun'
import { createTemp, getDB, getTable, getColumn, preview, getMeta, getPackageApi } from '@/api/autoCode'
import { getDict } from '@/utils/dictionary'
import { ref, getCurrentInstance, reactive, watch } from 'vue'
import { useRoute, useRouter } from 'vue-router'
import { ElMessage } from 'element-plus'
import WarningBar from '@/components/warningBar/warningBar.vue'
import { toRaw } from '@vue/reactivity'
const fieldTemplate = {
fieldName: '',
fieldDesc: '',
@@ -229,22 +261,12 @@ const fieldTemplate = {
fieldSearchType: '',
dictType: ''
}
import FieldDialog from '@/view/systemTools/autoCode/component/fieldDialog.vue'
import PreviewCodeDialog from '@/view/systemTools/autoCode/component/previewCodeDialg.vue'
import { toUpperCase, toHump, toSQLLine, toLowerCase } from '@/utils/stringFun'
import { createTemp, getDB, getTable, getColumn, preview, getMeta, getPackageApi } from '@/api/autoCode'
import { getDict } from '@/utils/dictionary'
import { ref, getCurrentInstance, reactive, watch } from 'vue'
import { useRoute, useRouter } from 'vue-router'
import { ElMessage } from 'element-plus'
import WarningBar from '@/components/warningBar/warningBar.vue'
const route = useRoute()
const router = useRouter()
const activeNames = reactive([])
const preViewCode = ref({})
const dbform = ref({
businessDB: '',
dbName: '',
tableName: ''
})
@@ -439,24 +461,36 @@ const enterForm = async(isPreview) => {
const dbList = ref([])
const dbOptions = ref([])
const getDbFunc = async() => {
const res = await getDB()
dbform.value.dbName = ''
dbform.value.tableName = ''
const res = await getDB({ businessDB: dbform.value.businessDB })
if (res.code === 0) {
dbOptions.value = res.data.dbs
dbList.value = res.data.dbList
}
}
const getTableFunc = async() => {
const res = await getTable({ dbName: dbform.value.dbName })
const res = await getTable({ businessDB: dbform.value.businessDB, dbName: dbform.value.dbName })
if (res.code === 0) {
tableOptions.value = res.data.tables
}
dbform.value.tableName = ''
}
const getColumnFunc = async() => {
const gormModelList = ['id', 'created_at', 'updated_at', 'deleted_at']
const res = await getColumn(dbform.value)
if (res.code === 0) {
let dbtype = ''
if (dbform.value.businessDB !== '') {
const dbtmp = dbList.value.find(item => item.aliasName === dbform.value.businessDB)
console.log(dbtmp)
const dbraw = toRaw(dbtmp)
console.log(dbraw)
dbtype = dbraw.dbtype
}
const tbHump = toHump(dbform.value.tableName)
form.value.structName = toUpperCase(tbHump)
form.value.tableName = dbform.value.tableName
@@ -477,7 +511,7 @@ const getColumnFunc = async() => {
dataType: item.dataType,
fieldJson: fbHump,
dataTypeLong: item.dataTypeLong && item.dataTypeLong.split(',')[0],
columnName: item.columnName,
columnName: dbtype == 'oracle' ? item.columnName.toUpperCase() : item.columnName,
comment: item.columnComment,
require: false,
errorText: '',