mirror of
https://gitee.com/bootx/dax-pay-ui.git
synced 2025-09-07 20:58:11 +00:00
feat axios支持下载文件. 代码生成模块,权限资源编辑, 查询器支持回车出发查询
This commit is contained in:
@@ -8,6 +8,7 @@
|
|||||||
:field="field"
|
:field="field"
|
||||||
:md="defaultItemMd"
|
:md="defaultItemMd"
|
||||||
:query-params="queryParams"
|
:query-params="queryParams"
|
||||||
|
@enterQuery="query"
|
||||||
/>
|
/>
|
||||||
<a-col :md="defaultItemMd" :sm="24">
|
<a-col :md="defaultItemMd" :sm="24">
|
||||||
<a-space>
|
<a-space>
|
||||||
|
34
src/components/Bootx/Query/Query.ts
Normal file
34
src/components/Bootx/Query/Query.ts
Normal file
@@ -0,0 +1,34 @@
|
|||||||
|
// 数字
|
||||||
|
export const NUMBER = 'number'
|
||||||
|
// 字符串
|
||||||
|
export const STRING = 'string'
|
||||||
|
// 布尔
|
||||||
|
export const BOOLEAN = 'boolean'
|
||||||
|
// 日期
|
||||||
|
export const DATE = 'date'
|
||||||
|
// 时间
|
||||||
|
export const TIME = 'time'
|
||||||
|
// 日期时间
|
||||||
|
export const DATE_TIME = 'date_time'
|
||||||
|
// 列表
|
||||||
|
export const LIST = 'list'
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 查询属性
|
||||||
|
*/
|
||||||
|
export interface QueryField {
|
||||||
|
//类型
|
||||||
|
type: 'number' | 'string' | 'boolean' | 'date' | 'time' | 'date_time' | 'list'
|
||||||
|
// 提示
|
||||||
|
placeholder?: string
|
||||||
|
// 字段名称
|
||||||
|
field: string
|
||||||
|
// 显示名称
|
||||||
|
name: string
|
||||||
|
// 精度
|
||||||
|
precision?: number | null
|
||||||
|
// 查询列表
|
||||||
|
selectList?: Array<unknown> | null
|
||||||
|
// 时间格式化
|
||||||
|
format?: string | null
|
||||||
|
}
|
@@ -3,6 +3,7 @@
|
|||||||
<a-form-item :label="field.name">
|
<a-form-item :label="field.name">
|
||||||
<!-- 文本输入 -->
|
<!-- 文本输入 -->
|
||||||
<a-input
|
<a-input
|
||||||
|
@keyup.enter="query"
|
||||||
allowClear
|
allowClear
|
||||||
v-if="field.type === STRING"
|
v-if="field.type === STRING"
|
||||||
:placeholder="field.placeholder ? field.placeholder : '请输入查询值'"
|
:placeholder="field.placeholder ? field.placeholder : '请输入查询值'"
|
||||||
@@ -28,7 +29,7 @@
|
|||||||
v-else-if="field.type === LIST"
|
v-else-if="field.type === LIST"
|
||||||
:placeholder="field.placeholder ? field.placeholder : '请选择查询值'"
|
:placeholder="field.placeholder ? field.placeholder : '请选择查询值'"
|
||||||
v-model:value="queryParams[field.field]"
|
v-model:value="queryParams[field.field]"
|
||||||
:options="field.list"
|
:options="field.selectList"
|
||||||
/>
|
/>
|
||||||
<!-- 日期 -->
|
<!-- 日期 -->
|
||||||
<a-date-picker
|
<a-date-picker
|
||||||
@@ -36,7 +37,7 @@
|
|||||||
v-else-if="field.type === DATE"
|
v-else-if="field.type === DATE"
|
||||||
style="width: 100%"
|
style="width: 100%"
|
||||||
:placeholder="field.placeholder ? field.placeholder : '请选择日期'"
|
:placeholder="field.placeholder ? field.placeholder : '请选择日期'"
|
||||||
:valueFormat="queryParams.format ? queryParams.format : 'yyyy-MM-DD'"
|
:valueFormat="field.format ? field.format : 'yyyy-MM-DD'"
|
||||||
v-model:value="queryParams[field.field]"
|
v-model:value="queryParams[field.field]"
|
||||||
/>
|
/>
|
||||||
<!-- 时间 -->
|
<!-- 时间 -->
|
||||||
@@ -45,7 +46,7 @@
|
|||||||
v-else-if="field.type === TIME"
|
v-else-if="field.type === TIME"
|
||||||
style="width: 100%"
|
style="width: 100%"
|
||||||
:placeholder="field.placeholder ? field.placeholder : '请选择时间'"
|
:placeholder="field.placeholder ? field.placeholder : '请选择时间'"
|
||||||
:valueFormat="queryParams.format ? queryParams.format : 'HH:mm:ss'"
|
:valueFormat="field.format ? field.format : 'HH:mm:ss'"
|
||||||
v-model:value="queryParams[field.field]"
|
v-model:value="queryParams[field.field]"
|
||||||
/>
|
/>
|
||||||
<!-- 日期时间 -->
|
<!-- 日期时间 -->
|
||||||
@@ -55,7 +56,7 @@
|
|||||||
v-else-if="field.type === DATE_TIME"
|
v-else-if="field.type === DATE_TIME"
|
||||||
style="width: 100%"
|
style="width: 100%"
|
||||||
:placeholder="field.placeholder ? field.placeholder : '请选择日期时间'"
|
:placeholder="field.placeholder ? field.placeholder : '请选择日期时间'"
|
||||||
:valueFormat="queryParams.format ? queryParams.format : 'yyyy-MM-DD HH:mm:ss'"
|
:valueFormat="field.format ? field.format : 'yyyy-MM-DD HH:mm:ss'"
|
||||||
v-model:value="queryParams[field.field]"
|
v-model:value="queryParams[field.field]"
|
||||||
/>
|
/>
|
||||||
<!-- 默认文本输入 -->
|
<!-- 默认文本输入 -->
|
||||||
@@ -70,7 +71,8 @@
|
|||||||
</template>
|
</template>
|
||||||
|
|
||||||
<script lang="ts" setup>
|
<script lang="ts" setup>
|
||||||
import { BOOLEAN, DATE, DATE_TIME, LIST, NUMBER, QueryField, STRING, TIME } from './SuperQueryCode'
|
import { BOOLEAN, DATE, DATE_TIME, LIST, NUMBER, QueryField, STRING, TIME } from './Query'
|
||||||
|
const emits = defineEmits(['enterQuery'])
|
||||||
const props = withDefaults(
|
const props = withDefaults(
|
||||||
defineProps<{
|
defineProps<{
|
||||||
// 查询字段属性
|
// 查询字段属性
|
||||||
@@ -84,6 +86,9 @@
|
|||||||
md: 6,
|
md: 6,
|
||||||
},
|
},
|
||||||
)
|
)
|
||||||
|
function query() {
|
||||||
|
emits('enterQuery')
|
||||||
|
}
|
||||||
</script>
|
</script>
|
||||||
|
|
||||||
<style scoped></style>
|
<style scoped></style>
|
||||||
|
@@ -1,20 +0,0 @@
|
|||||||
// 数字
|
|
||||||
export const NUMBER = 'number'
|
|
||||||
// 字符串
|
|
||||||
export const STRING = 'string'
|
|
||||||
// 布尔
|
|
||||||
export const BOOLEAN = 'boolean'
|
|
||||||
// 日期
|
|
||||||
export const DATE = 'date'
|
|
||||||
// 时间
|
|
||||||
export const TIME = 'time'
|
|
||||||
// 日期时间
|
|
||||||
export const DATE_TIME = 'date_time'
|
|
||||||
// 列表
|
|
||||||
export const LIST = 'list'
|
|
||||||
|
|
||||||
export interface QueryField {
|
|
||||||
type: string
|
|
||||||
placeholder: string
|
|
||||||
field: string
|
|
||||||
}
|
|
@@ -31,21 +31,24 @@ const transform: AxiosTransform = {
|
|||||||
* @description: 处理响应数据。如果数据不是预期格式,可直接抛出错误
|
* @description: 处理响应数据。如果数据不是预期格式,可直接抛出错误
|
||||||
*/
|
*/
|
||||||
transformResponseHook: (res: AxiosResponse<Result>, options: RequestOptions) => {
|
transformResponseHook: (res: AxiosResponse<Result>, options: RequestOptions) => {
|
||||||
const { t } = useI18n()
|
|
||||||
const { isTransformResponse, isReturnNativeResponse } = options
|
|
||||||
|
|
||||||
// 不进行任何处理,直接返回
|
// 不进行任何处理,直接返回
|
||||||
// 用于页面代码可能需要直接获取code,data,message这些信息时开启
|
// 用于页面代码可能需要直接获取code,data,message这些信息时开启
|
||||||
// if (!isTransformResponse) {
|
// if (!isTransformResponse) {
|
||||||
// return res.data
|
// return res.data
|
||||||
// }
|
// }
|
||||||
// 错误的时候返回
|
// 错误的时候返回
|
||||||
// 获取请求头重的数据
|
const contentType = res.headers['content-type']
|
||||||
const rawData = res.data
|
const rawData = res.data
|
||||||
|
// 获取请求头的数据
|
||||||
if (!rawData) {
|
if (!rawData) {
|
||||||
// return '[HTTP] Request has no return value';
|
|
||||||
throw new Error('请求出错,请稍候重试')
|
throw new Error('请求出错,请稍候重试')
|
||||||
}
|
}
|
||||||
|
// 下载流处理
|
||||||
|
if (contentType === 'application/octet-stream') {
|
||||||
|
return rawData
|
||||||
|
}
|
||||||
|
|
||||||
|
// 接收的通常是json的数据
|
||||||
// 这里 code,data,message为 后台统一的字段,需要在 types.ts内修改为项目自己的接口返回格式
|
// 这里 code,data,message为 后台统一的字段,需要在 types.ts内修改为项目自己的接口返回格式
|
||||||
const { code, msg, traceId } = rawData
|
const { code, msg, traceId } = rawData
|
||||||
|
|
||||||
@@ -75,9 +78,9 @@ const transform: AxiosTransform = {
|
|||||||
// errorMessageMode=‘modal’的时候会显示modal错误弹窗,而不是消息提示,用于一些比较重要的错误
|
// errorMessageMode=‘modal’的时候会显示modal错误弹窗,而不是消息提示,用于一些比较重要的错误
|
||||||
// errorMessageMode='none' 一般是调用时明确表示不希望自动弹出错误提示
|
// errorMessageMode='none' 一般是调用时明确表示不希望自动弹出错误提示
|
||||||
if (options.errorMessageMode === 'modal') {
|
if (options.errorMessageMode === 'modal') {
|
||||||
createErrorModal({ title: t('sys.api.errorTip'), content: timeoutMsg })
|
createErrorModal({ title: '错误提示', content: timeoutMsg || '请求出错,请稍候重试' })
|
||||||
} else if (options.errorMessageMode === 'message') {
|
} else if (options.errorMessageMode === 'message') {
|
||||||
createMessage.error(timeoutMsg)
|
createMessage.error(timeoutMsg || '请求出错,请稍候重试')
|
||||||
}
|
}
|
||||||
console.error('TraceId:', traceId)
|
console.error('TraceId:', traceId)
|
||||||
throw new Error(timeoutMsg || '请求出错,请稍候重试')
|
throw new Error(timeoutMsg || '请求出错,请稍候重试')
|
||||||
|
67
src/views/modules/develop/codegen/CodeGen.api.ts
Normal file
67
src/views/modules/develop/codegen/CodeGen.api.ts
Normal file
@@ -0,0 +1,67 @@
|
|||||||
|
import { defHttp } from '/@/utils/http/axios'
|
||||||
|
import { PageResult, Result } from '/#/axios'
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 分页
|
||||||
|
*/
|
||||||
|
export const page = (params) => {
|
||||||
|
return defHttp.get<Result<PageResult<DatabaseTable>>>({
|
||||||
|
url: '/gen/table/page',
|
||||||
|
params: params,
|
||||||
|
})
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 获取表相关的代码生成参数信息
|
||||||
|
*/
|
||||||
|
export function getTableGenParam(tableName) {
|
||||||
|
return defHttp.get<Result<TableGenParam>>({
|
||||||
|
url: '/gen/table/getTableGenParam',
|
||||||
|
params: { tableName },
|
||||||
|
})
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 预览
|
||||||
|
*/
|
||||||
|
export function codeGenPreview(obj) {
|
||||||
|
return defHttp.get<Result<DatabaseTable>>({
|
||||||
|
url: '/gen/code/codeGenPreview',
|
||||||
|
data: obj,
|
||||||
|
})
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 下载
|
||||||
|
*/
|
||||||
|
export function genCodeZip(obj) {
|
||||||
|
return defHttp.post({
|
||||||
|
url: '/gen/code/genCodeZip',
|
||||||
|
responseType: 'blob',
|
||||||
|
data: obj,
|
||||||
|
})
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 表信息
|
||||||
|
*/
|
||||||
|
export interface DatabaseTable {
|
||||||
|
// 表名
|
||||||
|
tableName: string
|
||||||
|
// 引擎类型
|
||||||
|
engine: string
|
||||||
|
// 表表述
|
||||||
|
tableComment: string
|
||||||
|
// 创建时间
|
||||||
|
createTime: string
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 代码生成相关参数信息
|
||||||
|
*/
|
||||||
|
export interface TableGenParam {
|
||||||
|
// 实体类名称(大驼峰)
|
||||||
|
entityName: string
|
||||||
|
// 功能模块名称(全小写)
|
||||||
|
module: string
|
||||||
|
}
|
145
src/views/modules/develop/codegen/CodeGenForm.vue
Normal file
145
src/views/modules/develop/codegen/CodeGenForm.vue
Normal file
@@ -0,0 +1,145 @@
|
|||||||
|
<template>
|
||||||
|
<a-drawer title="代码生成参数配置" width="50%" :visible="visible" :destroyOnClose="true" :maskClosable="false" @close="handleCancel">
|
||||||
|
<a-form ref="formRef" :model="form" :rules="rules" :label-col="labelCol" :wrapper-col="wrapperCol">
|
||||||
|
<a-form-item label="功能模块名称" name="module">
|
||||||
|
<a-row>
|
||||||
|
<a-col :span="18">
|
||||||
|
<a-input v-model:value="form.module" />
|
||||||
|
</a-col>
|
||||||
|
<a-col :span="6">
|
||||||
|
<a-button style="width: 100%" @click="genParams">生成其他参数</a-button>
|
||||||
|
</a-col>
|
||||||
|
</a-row>
|
||||||
|
</a-form-item>
|
||||||
|
<a-form-item label="基础包名称" name="basePack">
|
||||||
|
<a-input v-model:value="form.basePack" />
|
||||||
|
</a-form-item>
|
||||||
|
<a-form-item label="实体类名称" name="entityName">
|
||||||
|
<a-input v-model:value="form.entityName" />
|
||||||
|
</a-form-item>
|
||||||
|
<a-form-item label="vue版本" name="vueVersion">
|
||||||
|
<a-select v-model:value="form.vueVersion" :default-value="form.vueVersion" style="width: 100%" placeholder="选择vue版本">
|
||||||
|
<!-- <a-select-option key="v2">Vue2</a-select-option>-->
|
||||||
|
<a-select-option key="v3">Vue3</a-select-option>
|
||||||
|
</a-select>
|
||||||
|
</a-form-item>
|
||||||
|
<a-form-item label="基类" name="baseEntity">
|
||||||
|
<a-select v-model:value="form.baseEntity" :default-value="form.baseEntity" style="width: 100%" placeholder="选择基类">
|
||||||
|
<a-select-option key="MpBaseEntity">MpBaseEntity</a-select-option>
|
||||||
|
<a-select-option key="MpDelEntity">MpDelEntity</a-select-option>
|
||||||
|
<a-select-option key="MpCreateEntity">MpCreateEntity</a-select-option>
|
||||||
|
<a-select-option key="MpIdEntity">MpIdEntity</a-select-option>
|
||||||
|
</a-select>
|
||||||
|
</a-form-item>
|
||||||
|
<a-form-item label="创建人" name="author">
|
||||||
|
<a-input v-model:value="form.author" />
|
||||||
|
</a-form-item>
|
||||||
|
<template v-if="genPackFlag">
|
||||||
|
<a-form-item label="请求地址" name="baseEntity">
|
||||||
|
<a-input v-model:value="form.requestPath" />
|
||||||
|
</a-form-item>
|
||||||
|
<a-form-item label="接口文件目录" name="vueApiPath">
|
||||||
|
<a-input v-model:value="form.vueApiPath" />
|
||||||
|
</a-form-item>
|
||||||
|
<a-form-item label="core包路径" name="corePack">
|
||||||
|
<a-input v-model:value="form.corePack" />
|
||||||
|
</a-form-item>
|
||||||
|
<a-form-item label="dto包路径" name="dtoPack">
|
||||||
|
<a-input v-model:value="form.dtoPack" />
|
||||||
|
</a-form-item>
|
||||||
|
<a-form-item label="参数包路径" name="paramPack">
|
||||||
|
<a-input v-model:value="form.paramPack" />
|
||||||
|
</a-form-item>
|
||||||
|
</template>
|
||||||
|
</a-form>
|
||||||
|
<div class="drawer-button">
|
||||||
|
<a-button key="cancel" @click="handleCancel">取消</a-button>
|
||||||
|
<a-button key="forward" type="primary" :disabled="!genPackFlag" @click="handleOk">生成</a-button>
|
||||||
|
</div>
|
||||||
|
</a-drawer>
|
||||||
|
</template>
|
||||||
|
|
||||||
|
<script lang="ts" setup>
|
||||||
|
import { getTableGenParam } from './CodeGen.api'
|
||||||
|
import { $ref } from 'vue/macros'
|
||||||
|
import { nextTick } from 'vue'
|
||||||
|
import useFormEdit from '/@/hooks/bootx/useFormEdit'
|
||||||
|
import { FormInstance } from 'ant-design-vue/lib/form'
|
||||||
|
|
||||||
|
const { labelCol, wrapperCol, visible } = useFormEdit()
|
||||||
|
|
||||||
|
const form = $ref({
|
||||||
|
basePack: 'cn.bootx',
|
||||||
|
module: '',
|
||||||
|
tableName: '',
|
||||||
|
entityName: '',
|
||||||
|
baseEntity: 'MpBaseEntity',
|
||||||
|
vueVersion: 'v3',
|
||||||
|
corePack: '',
|
||||||
|
paramPack: '',
|
||||||
|
dtoPack: '',
|
||||||
|
controllerPack: '',
|
||||||
|
requestPath: '',
|
||||||
|
vueApiPath: '',
|
||||||
|
author: 'xxm',
|
||||||
|
})
|
||||||
|
const rules = {}
|
||||||
|
|
||||||
|
let genType = $ref('down' as 'down' | 'preview')
|
||||||
|
let genPackFlag = $ref(false)
|
||||||
|
let formRef = $ref<FormInstance>()
|
||||||
|
|
||||||
|
const emits = defineEmits(['down', 'preview'])
|
||||||
|
|
||||||
|
function show(tableName, type: 'down' | 'preview') {
|
||||||
|
visible.value = true
|
||||||
|
form.tableName = tableName
|
||||||
|
genType = type
|
||||||
|
genPackFlag = false
|
||||||
|
getGenConfigParam()
|
||||||
|
}
|
||||||
|
// 确定
|
||||||
|
function handleOk() {
|
||||||
|
formRef.validate().then(() => {
|
||||||
|
emits(genType, form)
|
||||||
|
})
|
||||||
|
}
|
||||||
|
/**
|
||||||
|
* 获取代码生成配置信息
|
||||||
|
*/
|
||||||
|
async function getGenConfigParam() {
|
||||||
|
// 获取功能模块名称
|
||||||
|
const { data } = await getTableGenParam(form.tableName)
|
||||||
|
form.entityName = data.entityName
|
||||||
|
form.module = data.module
|
||||||
|
}
|
||||||
|
/**
|
||||||
|
* 生成代码生成参数参数
|
||||||
|
*/
|
||||||
|
function genParams() {
|
||||||
|
const { basePack, module } = form
|
||||||
|
// 包名
|
||||||
|
form.corePack = `${basePack}.core.${module}`
|
||||||
|
form.paramPack = `${basePack}.param.${module}`
|
||||||
|
form.dtoPack = `${basePack}.dto.${module}`
|
||||||
|
form.controllerPack = `${basePack}.controller`
|
||||||
|
|
||||||
|
form.requestPath = `/${module}`
|
||||||
|
form.vueApiPath = `/api/${module}`
|
||||||
|
genPackFlag = true
|
||||||
|
}
|
||||||
|
function handleCancel() {
|
||||||
|
resetForm()
|
||||||
|
visible.value = false
|
||||||
|
}
|
||||||
|
function resetForm() {
|
||||||
|
nextTick(() => {
|
||||||
|
formRef.resetFields()
|
||||||
|
})
|
||||||
|
}
|
||||||
|
defineExpose({
|
||||||
|
show,
|
||||||
|
})
|
||||||
|
</script>
|
||||||
|
|
||||||
|
<style scoped></style>
|
93
src/views/modules/develop/codegen/CodeGenList.vue
Normal file
93
src/views/modules/develop/codegen/CodeGenList.vue
Normal file
@@ -0,0 +1,93 @@
|
|||||||
|
<template>
|
||||||
|
<div>
|
||||||
|
<div class="m-3 p-3 pt-5 bg-white">
|
||||||
|
<b-query v-model="model.queryParam" :fields="fields" :default-item-md="8" @query="queryPage" @reset="resetQueryParams" />
|
||||||
|
</div>
|
||||||
|
<div class="m-3 p-3 bg-white">
|
||||||
|
<vxe-toolbar ref="xToolbar" custom zoom :refresh="{ query: queryPage }" />
|
||||||
|
<vxe-table ref="xTable" row-id="id" :loading="loading" :data="pagination.records">
|
||||||
|
<vxe-column type="seq" title="序号" width="60" />
|
||||||
|
<vxe-column field="tableName" title="表名称" />
|
||||||
|
<vxe-column field="engine" title="引擎类型" />
|
||||||
|
<vxe-column field="tableComment" title="表表述" />
|
||||||
|
<vxe-column field="createTime" title="创建时间" />
|
||||||
|
<vxe-column fixed="right" width="120" :showOverflow="false" title="操作">
|
||||||
|
<template #default="{ row }">
|
||||||
|
<!-- <a href="javascript:" @click="previewShow(row)">预览</a>-->
|
||||||
|
<!-- <a-divider type="vertical" />-->
|
||||||
|
<a href="javascript:" @click="generateShow(row)">生成</a>
|
||||||
|
</template>
|
||||||
|
</vxe-column>
|
||||||
|
</vxe-table>
|
||||||
|
<vxe-pager
|
||||||
|
:loading="loading"
|
||||||
|
:current-page="pagination.current"
|
||||||
|
:page-size="pagination.size"
|
||||||
|
:total="pagination.total"
|
||||||
|
@page-change="handleTableChange"
|
||||||
|
/>
|
||||||
|
<code-gen-form ref="codeGenForm" @down="generate" @preview="preview" />
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</template>
|
||||||
|
|
||||||
|
<script lang="ts" setup>
|
||||||
|
import CodeGenForm from './CodeGenForm.vue'
|
||||||
|
import { QueryField, STRING } from '/@/components/Bootx/Query/Query'
|
||||||
|
import useTablePage from '/@/hooks/bootx/useTablePage'
|
||||||
|
import { $ref } from 'vue/macros'
|
||||||
|
import { VxeTableInstance, VxeToolbarInstance } from 'vxe-table'
|
||||||
|
import { onMounted } from 'vue'
|
||||||
|
import { codeGenPreview, genCodeZip, page } from './CodeGen.api'
|
||||||
|
import { downloadByData } from '/@/utils/file/download'
|
||||||
|
import BQuery from '/@/components/Bootx/Query/BQuery.vue'
|
||||||
|
|
||||||
|
const { handleTableChange, resetQueryParams, pageQueryResHandel, pagination, pages, model, loading } = useTablePage(queryPage)
|
||||||
|
|
||||||
|
const fields = [
|
||||||
|
// { field: 'tableName', type: STRING, name: '名称', placeholder: '请输入表名称' },
|
||||||
|
// { field: 'tableComment', type: STRING, name: '描述', placeholder: '请输入表描述' },
|
||||||
|
] as QueryField[]
|
||||||
|
|
||||||
|
let xTable = $ref<VxeTableInstance>()
|
||||||
|
let xToolbar = $ref<VxeToolbarInstance>()
|
||||||
|
let codeGenForm = $ref<any>()
|
||||||
|
|
||||||
|
onMounted(() => {
|
||||||
|
vxeBind()
|
||||||
|
queryPage()
|
||||||
|
})
|
||||||
|
function vxeBind() {
|
||||||
|
xTable.connect(xToolbar)
|
||||||
|
}
|
||||||
|
|
||||||
|
// 分页查询
|
||||||
|
function queryPage() {
|
||||||
|
loading.value = true
|
||||||
|
page({
|
||||||
|
...model.queryParam,
|
||||||
|
...pages,
|
||||||
|
}).then(({ data }) => {
|
||||||
|
pageQueryResHandel(data)
|
||||||
|
})
|
||||||
|
}
|
||||||
|
|
||||||
|
// 预览代码
|
||||||
|
function preview(from) {
|
||||||
|
codeGenPreview(from).then((res) => {
|
||||||
|
console.log(res.data)
|
||||||
|
})
|
||||||
|
}
|
||||||
|
// 打开预览
|
||||||
|
function generateShow(record) {
|
||||||
|
codeGenForm.show(record.tableName, 'down')
|
||||||
|
}
|
||||||
|
// 生成代码
|
||||||
|
function generate(from) {
|
||||||
|
genCodeZip(from).then((response) => {
|
||||||
|
downloadByData(response, from.tableName + '.zip')
|
||||||
|
})
|
||||||
|
}
|
||||||
|
</script>
|
||||||
|
|
||||||
|
<style scoped></style>
|
5
src/views/modules/develop/codegen/CodeGenPreview.vue
Normal file
5
src/views/modules/develop/codegen/CodeGenPreview.vue
Normal file
@@ -0,0 +1,5 @@
|
|||||||
|
<template> </template>
|
||||||
|
|
||||||
|
<script lang="ts" setup></script>
|
||||||
|
|
||||||
|
<style scoped></style>
|
@@ -65,7 +65,7 @@
|
|||||||
import useTablePage from '/@/hooks/bootx/useTablePage'
|
import useTablePage from '/@/hooks/bootx/useTablePage'
|
||||||
import ClientEdit from './ClientEdit.vue'
|
import ClientEdit from './ClientEdit.vue'
|
||||||
import BQuery from '/@/components/Bootx/Query/BQuery.vue'
|
import BQuery from '/@/components/Bootx/Query/BQuery.vue'
|
||||||
import { STRING } from '/@/components/Bootx/Query/SuperQueryCode'
|
import { STRING } from '/@/components/Bootx/Query/Query'
|
||||||
import { FormEditType } from '/@/enums/formTypeEnum'
|
import { FormEditType } from '/@/enums/formTypeEnum'
|
||||||
import { useMessage } from '/@/hooks/web/useMessage'
|
import { useMessage } from '/@/hooks/web/useMessage'
|
||||||
import { $ref } from 'vue/macros'
|
import { $ref } from 'vue/macros'
|
||||||
|
@@ -73,7 +73,7 @@
|
|||||||
import BQuery from '/@/components/Bootx/Query/BQuery.vue'
|
import BQuery from '/@/components/Bootx/Query/BQuery.vue'
|
||||||
import { FormEditType } from '/@/enums/formTypeEnum'
|
import { FormEditType } from '/@/enums/formTypeEnum'
|
||||||
import { useMessage } from '/@/hooks/web/useMessage'
|
import { useMessage } from '/@/hooks/web/useMessage'
|
||||||
import { STRING } from '/@/components/Bootx/Query/SuperQueryCode'
|
import { STRING } from '/@/components/Bootx/Query/Query'
|
||||||
import { $ref } from 'vue/macros'
|
import { $ref } from 'vue/macros'
|
||||||
import { VxeTableInstance, VxeToolbarInstance } from 'vxe-table'
|
import { VxeTableInstance, VxeToolbarInstance } from 'vxe-table'
|
||||||
|
|
||||||
|
@@ -16,7 +16,7 @@ export const menuTree = (clientCode: string) => {
|
|||||||
* 获取单条
|
* 获取单条
|
||||||
*/
|
*/
|
||||||
export const get = (id) => {
|
export const get = (id) => {
|
||||||
return defHttp.get<Result<Menu>>({
|
return defHttp.get<Result<Menu | Resource>>({
|
||||||
url: '/perm/menu/findById',
|
url: '/perm/menu/findById',
|
||||||
params: { id },
|
params: { id },
|
||||||
})
|
})
|
||||||
@@ -25,7 +25,7 @@ export const get = (id) => {
|
|||||||
/**
|
/**
|
||||||
* 添加
|
* 添加
|
||||||
*/
|
*/
|
||||||
export const add = (obj: Menu) => {
|
export const add = (obj: Menu | Resource) => {
|
||||||
return defHttp.post({
|
return defHttp.post({
|
||||||
url: '/perm/menu/add',
|
url: '/perm/menu/add',
|
||||||
data: obj,
|
data: obj,
|
||||||
@@ -35,7 +35,7 @@ export const add = (obj: Menu) => {
|
|||||||
/**
|
/**
|
||||||
* 更新
|
* 更新
|
||||||
*/
|
*/
|
||||||
export const update = (obj: Menu) => {
|
export const update = (obj: Menu | Resource) => {
|
||||||
return defHttp.post({
|
return defHttp.post({
|
||||||
url: '/perm/menu/update',
|
url: '/perm/menu/update',
|
||||||
data: obj,
|
data: obj,
|
||||||
|
@@ -142,7 +142,7 @@
|
|||||||
if ([FormEditType.Edit, FormEditType.Show].includes(editType)) {
|
if ([FormEditType.Edit, FormEditType.Show].includes(editType)) {
|
||||||
confirmLoading.value = true
|
confirmLoading.value = true
|
||||||
get(id).then(({ data }) => {
|
get(id).then(({ data }) => {
|
||||||
form = data
|
form = data as Menu
|
||||||
confirmLoading.value = false
|
confirmLoading.value = false
|
||||||
})
|
})
|
||||||
// 新增
|
// 新增
|
||||||
@@ -162,7 +162,7 @@
|
|||||||
// 复制
|
// 复制
|
||||||
const { data } = await get(id)
|
const { data } = await get(id)
|
||||||
delete data.id
|
delete data.id
|
||||||
form = data
|
form = data as Menu
|
||||||
confirmLoading.value = false
|
confirmLoading.value = false
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@@ -1,20 +1,37 @@
|
|||||||
<template>
|
<template>
|
||||||
<a-modal :title="title" :width="720" :visible="visible" :maskClosable="false" @cancel="handleCancel">
|
<basic-modal :loading="confirmLoading" v-bind="$attrs" :title="title" :visible="visible" :mask-closable="showable" @cancel="handleCancel">
|
||||||
<a-spin :spinning="confirmLoading" />
|
<a-form class="small-from-item" :model="form" ref="formRef" :rules="rules" :label-col="labelCol" :wrapper-col="wrapperCol">
|
||||||
|
<a-form-item label="主键" :hidden="true">
|
||||||
|
<a-input v-model:value="form.id" :disabled="showable" />
|
||||||
|
</a-form-item>
|
||||||
|
<a-form-item label="编码" name="permCode">
|
||||||
|
<a-input v-model:value="form.permCode" :disabled="showable" placeholder="请输入编码" />
|
||||||
|
</a-form-item>
|
||||||
|
<a-form-item label="名称" name="title">
|
||||||
|
<a-input v-model:value="form.title" :disabled="showable" placeholder="请输入名称" />
|
||||||
|
</a-form-item>
|
||||||
|
<a-form-item label="是否有效" name="effect">
|
||||||
|
<a-switch :disabled="showable" checkedChildren="是" unCheckedChildren="否" v-model:checked="form.effect" />
|
||||||
|
</a-form-item>
|
||||||
|
<a-form-item label="说明" name="remark">
|
||||||
|
<a-textarea v-model:value="form.remark" :disabled="showable" placeholder="请输入说明" />
|
||||||
|
</a-form-item>
|
||||||
|
</a-form>
|
||||||
<template #footer>
|
<template #footer>
|
||||||
<a-button key="cancel" @click="handleCancel">取消</a-button>
|
<a-button key="cancel" @click="handleCancel">取消</a-button>
|
||||||
<a-button v-if="!showable" key="forward" :loading="confirmLoading" type="primary" @click="handleOk">保存</a-button>
|
<a-button v-if="!showable" key="forward" :loading="confirmLoading" type="primary" @click="handleOk">保存</a-button>
|
||||||
</template>
|
</template>
|
||||||
</a-modal>
|
</basic-modal>
|
||||||
</template>
|
</template>
|
||||||
|
|
||||||
<script lang="ts" setup>
|
<script lang="ts" setup>
|
||||||
import useFormEdit from '/@/hooks/bootx/useFormEdit'
|
import useFormEdit from '/@/hooks/bootx/useFormEdit'
|
||||||
import { FormEditType } from '/@/enums/formTypeEnum'
|
import { FormEditType } from '/@/enums/formTypeEnum'
|
||||||
import { FormInstance } from 'ant-design-vue/lib/form'
|
import { FormInstance, Rule } from 'ant-design-vue/lib/form'
|
||||||
import { $ref } from 'vue/macros'
|
import { $ref } from 'vue/macros'
|
||||||
import { nextTick } from 'vue'
|
import { nextTick } from 'vue'
|
||||||
import { add, get, update } from '/@/views/modules/system/loginType/LoginType.api'
|
import { add, get, Resource, update } from './Menu.api'
|
||||||
|
import { BasicModal } from '/@/components/Modal/'
|
||||||
|
|
||||||
const { initFormModel, handleCancel, search, labelCol, wrapperCol, title, confirmLoading, visible, editable, showable, formEditType } =
|
const { initFormModel, handleCancel, search, labelCol, wrapperCol, title, confirmLoading, visible, editable, showable, formEditType } =
|
||||||
useFormEdit()
|
useFormEdit()
|
||||||
@@ -28,15 +45,21 @@
|
|||||||
menuType: 2,
|
menuType: 2,
|
||||||
sortNo: 0,
|
sortNo: 0,
|
||||||
remark: '',
|
remark: '',
|
||||||
})
|
} as Resource)
|
||||||
|
const rules = {
|
||||||
|
title: [{ required: true, message: '请输入权限名称', trigger: ['blur', 'change'] }],
|
||||||
|
permCode: [{ required: true, message: '请输入权限编码', trigger: ['blur', 'change'] }],
|
||||||
|
effect: [{ required: true, message: '' }],
|
||||||
|
} as Record<string, Rule[]>
|
||||||
const formRef: FormInstance = $ref()
|
const formRef: FormInstance = $ref()
|
||||||
|
|
||||||
// 事件
|
// 事件
|
||||||
const emits = defineEmits(['ok'])
|
const emits = defineEmits(['ok'])
|
||||||
// 入口
|
// 入口
|
||||||
function init(id, editType: FormEditType) {
|
function init(id, editType: FormEditType, clientCode) {
|
||||||
initFormModel(id, editType)
|
initFormModel(id, editType)
|
||||||
resetForm()
|
resetForm()
|
||||||
|
form.clientCode = clientCode
|
||||||
getInfo(id, editType)
|
getInfo(id, editType)
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -45,7 +68,7 @@
|
|||||||
if ([FormEditType.Edit, FormEditType.Show].includes(editType)) {
|
if ([FormEditType.Edit, FormEditType.Show].includes(editType)) {
|
||||||
confirmLoading.value = true
|
confirmLoading.value = true
|
||||||
get(id).then(({ data }) => {
|
get(id).then(({ data }) => {
|
||||||
form.value = data
|
form = data as Resource
|
||||||
confirmLoading.value = false
|
confirmLoading.value = false
|
||||||
})
|
})
|
||||||
} else {
|
} else {
|
||||||
@@ -57,9 +80,9 @@
|
|||||||
formRef.validate().then(async () => {
|
formRef.validate().then(async () => {
|
||||||
confirmLoading.value = true
|
confirmLoading.value = true
|
||||||
if (formEditType.value === FormEditType.Add) {
|
if (formEditType.value === FormEditType.Add) {
|
||||||
await add(form.value)
|
await add(form)
|
||||||
} else if (formEditType.value === FormEditType.Edit) {
|
} else if (formEditType.value === FormEditType.Edit) {
|
||||||
await update(form.value)
|
await update(form)
|
||||||
}
|
}
|
||||||
confirmLoading.value = false
|
confirmLoading.value = false
|
||||||
handleCancel()
|
handleCancel()
|
||||||
|
@@ -97,7 +97,7 @@
|
|||||||
import BQuery from '/@/components/Bootx/Query/BQuery.vue'
|
import BQuery from '/@/components/Bootx/Query/BQuery.vue'
|
||||||
import { FormEditType } from '/@/enums/formTypeEnum'
|
import { FormEditType } from '/@/enums/formTypeEnum'
|
||||||
import { useMessage } from '/@/hooks/web/useMessage'
|
import { useMessage } from '/@/hooks/web/useMessage'
|
||||||
import { STRING } from '/@/components/Bootx/Query/SuperQueryCode'
|
import { STRING } from '/@/components/Bootx/Query/Query'
|
||||||
import Icon from '/@/components/Icon/src/Icon.vue'
|
import Icon from '/@/components/Icon/src/Icon.vue'
|
||||||
|
|
||||||
// 使用hooks
|
// 使用hooks
|
||||||
|
@@ -56,7 +56,7 @@
|
|||||||
import { FormEditType } from '/@/enums/formTypeEnum'
|
import { FormEditType } from '/@/enums/formTypeEnum'
|
||||||
import { useMessage } from '/@/hooks/web/useMessage'
|
import { useMessage } from '/@/hooks/web/useMessage'
|
||||||
import { $ref } from 'vue/macros'
|
import { $ref } from 'vue/macros'
|
||||||
import { STRING } from '/@/components/Bootx/Query/SuperQueryCode'
|
import { QueryField, STRING } from '/@/components/Bootx/Query/Query'
|
||||||
|
|
||||||
// 使用hooks
|
// 使用hooks
|
||||||
const { handleTableChange, pageQueryResHandel, resetQueryParams, pagination, pages, model, loading } = useTablePage(queryPage)
|
const { handleTableChange, pageQueryResHandel, resetQueryParams, pagination, pages, model, loading } = useTablePage(queryPage)
|
||||||
@@ -65,7 +65,7 @@
|
|||||||
const fields = [
|
const fields = [
|
||||||
{ field: 'code', type: STRING, name: '角色编号', placeholder: '请输入角色编码' },
|
{ field: 'code', type: STRING, name: '角色编号', placeholder: '请输入角色编码' },
|
||||||
{ field: 'name', type: STRING, name: '角色名称', placeholder: '请输入角色名称' },
|
{ field: 'name', type: STRING, name: '角色名称', placeholder: '请输入角色名称' },
|
||||||
]
|
] as QueryField[]
|
||||||
let xTable = $ref<VxeTableInstance>()
|
let xTable = $ref<VxeTableInstance>()
|
||||||
let xToolbar = $ref<VxeToolbarInstance>()
|
let xToolbar = $ref<VxeToolbarInstance>()
|
||||||
|
|
||||||
|
@@ -50,7 +50,7 @@
|
|||||||
import { FormInstance, Rule } from 'ant-design-vue/lib/form'
|
import { FormInstance, Rule } from 'ant-design-vue/lib/form'
|
||||||
import { FormEditType } from '/@/enums/formTypeEnum'
|
import { FormEditType } from '/@/enums/formTypeEnum'
|
||||||
import { BasicModal } from '/@/components/Modal'
|
import { BasicModal } from '/@/components/Modal'
|
||||||
import { STRING } from '/@/components/Bootx/Query/SuperQueryCode'
|
import { STRING } from '/@/components/Bootx/Query/Query'
|
||||||
import { existsByCode, existsByCodeNotId, existsByName, existsByNameNotId } from '/@/views/modules/system/role/Role.api'
|
import { existsByCode, existsByCodeNotId, existsByName, existsByNameNotId } from '/@/views/modules/system/role/Role.api'
|
||||||
|
|
||||||
const {
|
const {
|
||||||
|
@@ -57,7 +57,7 @@
|
|||||||
import BQuery from '/@/components/Bootx/Query/BQuery.vue'
|
import BQuery from '/@/components/Bootx/Query/BQuery.vue'
|
||||||
import { FormEditType } from '/@/enums/formTypeEnum'
|
import { FormEditType } from '/@/enums/formTypeEnum'
|
||||||
import { useMessage } from '/@/hooks/web/useMessage'
|
import { useMessage } from '/@/hooks/web/useMessage'
|
||||||
import { STRING } from '/@/components/Bootx/Query/SuperQueryCode'
|
import { STRING } from '/@/components/Bootx/Query/Query'
|
||||||
|
|
||||||
// 使用hooks
|
// 使用hooks
|
||||||
const { handleTableChange, pageQueryResHandel, resetQueryParams, pagination, pages, model, loading } = useTablePage(queryPage)
|
const { handleTableChange, pageQueryResHandel, resetQueryParams, pagination, pages, model, loading } = useTablePage(queryPage)
|
||||||
|
Reference in New Issue
Block a user