webman迁移-优化

This commit is contained in:
2026-03-18 15:10:40 +08:00
parent ea77c7b3a1
commit e2ae55319e
70 changed files with 1278 additions and 137 deletions

View File

@@ -88,12 +88,13 @@ function createAxios<Data = any, T = ApiPromise<Data>>(axiosConfig: AxiosRequest
}
}
// 自动携带token
// 自动携带token和语言(确保每次请求使用当前语言,后端据此返回对应语言的 remark 等)
if (config.headers) {
const token = adminInfo.getToken()
if (token) (config.headers as anyObj).batoken = token
const userToken = options.anotherToken || userInfo.getToken()
if (userToken) (config.headers as anyObj)['ba-user-token'] = userToken
;(config.headers as anyObj)['think-lang'] = useConfig().lang.defaultLang
}
return config

View File

@@ -96,6 +96,7 @@
:block-help="t('crud.crud.For quick combination code generation location, please fill in the relative path')"
:input-attr="{
onChange: onTableChange,
onInput: debouncedOnRelativePathInput,
}"
/>
<FormItem
@@ -680,10 +681,10 @@
import { useTemplateRefsList } from '@vueuse/core'
import type { FormItemRule, MessageHandler, TimelineItemProps } from 'element-plus'
import { ElMessage, ElMessageBox, ElNotification } from 'element-plus'
import { cloneDeep, isEmpty, range } from 'lodash-es'
import { cloneDeep, debounce, isEmpty, range } from 'lodash-es'
import type { SortableEvent } from 'sortablejs'
import Sortable from 'sortablejs'
import { nextTick, onMounted, reactive, useTemplateRef } from 'vue'
import { nextTick, onMounted, reactive, useTemplateRef, watch } from 'vue'
import { useI18n } from 'vue-i18n'
import { generate, generateCheck, getFileData, parseFieldData, postLogStart, uploadCompleted, uploadLog } from '/@/api/backend/crud'
import { getDatabaseConnectionListUrl, getTableFieldList, getTableListUrl } from '/@/api/common'
@@ -816,7 +817,7 @@ const state: {
primaryTableAlias: '',
},
},
showHeaderSeniorConfig: false,
showHeaderSeniorConfig: true,
confirmGenerate: {
show: false,
menu: false,
@@ -1562,20 +1563,33 @@ onMounted(() => {
})
/**
* 修改表名
* @param val 新表名
* 修改表名(失焦时校验,路径填充由 watch 统一触发避免重复请求)
*/
const onTableNameChange = (val: string) => {
if (!val) return (state.error.tableName = '')
if (/^[a-z_][a-z0-9_]*$/.test(val)) {
state.error.tableName = ''
onTableChange(val)
} else {
state.error.tableName = t('crud.crud.Use lower case underlined for table names')
}
tableDesignChangeInit()
}
/** 相对路径输入时防抖触发路径填充 */
const debouncedOnRelativePathInput = debounce((val: string) => {
if (val) onTableChange(val)
}, 400)
/** 监听表名变化,统一防抖触发路径填充(唯一入口,避免 watch + onInput 重复请求) */
watch(
() => state.table.name,
debounce((val: string) => {
if (val && /^[a-z_][a-z0-9_]*$/.test(val)) {
onTableChange(val)
}
}, 400)
)
const tableDesignChangeInit = () => {
state.table.rebuild = 'No'
state.table.designChange = []
@@ -1587,17 +1601,22 @@ const tableDesignChangeInit = () => {
*/
const onTableChange = (val: string) => {
if (!val) return
getFileData(val, state.table.isCommonModel).then((res) => {
state.table.modelFile = res.data.modelFile
state.table.controllerFile = res.data.controllerFile
state.table.validateFile = res.data.validateFile
state.table.webViewsDir = res.data.webViewsDir
state.table.generateRelativePath = val.replaceAll('/', '\\')
})
getFileData(val, state.table.isCommonModel)
.then((res) => {
state.table.modelFile = res.data.modelFile
state.table.controllerFile = res.data.controllerFile
state.table.validateFile = res.data.validateFile
state.table.webViewsDir = res.data.webViewsDir
state.table.generateRelativePath = val.replaceAll('/', '\\')
})
.catch(() => {
// 接口失败时静默处理避免重复弹窗axios 已统一处理错误提示)
})
}
const onChangeCommonModel = () => {
onTableChange(state.table.generateRelativePath)
const table = state.table.name || state.table.generateRelativePath?.replace(/\\/g, '/')
if (table) onTableChange(table)
}
const onJoinTableChange = () => {