From a1d7e81859f554f3a53680cc35f0f49bf1f77098 Mon Sep 17 00:00:00 2001
From: wwf <1971391498@qq.com>
Date: 星期四, 14 五月 2026 14:37:02 +0800
Subject: [PATCH] 导入项目
---
src/views/infra/codegen/components/GenerateInfoForm.vue | 385 +++++++++++++++++++++++++++++++++++++++++++++++++++++++
1 files changed, 385 insertions(+), 0 deletions(-)
diff --git a/src/views/infra/codegen/components/GenerateInfoForm.vue b/src/views/infra/codegen/components/GenerateInfoForm.vue
new file mode 100644
index 0000000..aaf176f
--- /dev/null
+++ b/src/views/infra/codegen/components/GenerateInfoForm.vue
@@ -0,0 +1,385 @@
+<template>
+ <el-form ref="formRef" :model="formData" :rules="rules" label-width="150px">
+ <el-row>
+ <el-col :span="12">
+ <el-form-item label="鐢熸垚妯℃澘" prop="templateType">
+ <el-select v-model="formData.templateType">
+ <el-option
+ v-for="dict in getIntDictOptions(DICT_TYPE.INFRA_CODEGEN_TEMPLATE_TYPE)"
+ :key="dict.value"
+ :label="dict.label"
+ :value="dict.value"
+ />
+ </el-select>
+ </el-form-item>
+ </el-col>
+ <el-col :span="12">
+ <el-form-item label="鍓嶇绫诲瀷" prop="frontType">
+ <el-select v-model="formData.frontType">
+ <el-option
+ v-for="dict in getIntDictOptions(DICT_TYPE.INFRA_CODEGEN_FRONT_TYPE)"
+ :key="dict.value"
+ :label="dict.label"
+ :value="dict.value"
+ />
+ </el-select>
+ </el-form-item>
+ </el-col>
+
+ <el-col :span="12">
+ <el-form-item label="鐢熸垚鍦烘櫙" prop="scene">
+ <el-select v-model="formData.scene">
+ <el-option
+ v-for="dict in getIntDictOptions(DICT_TYPE.INFRA_CODEGEN_SCENE)"
+ :key="dict.value"
+ :label="dict.label"
+ :value="dict.value"
+ />
+ </el-select>
+ </el-form-item>
+ </el-col>
+ <el-col :span="12">
+ <el-form-item>
+ <template #label>
+ <span>
+ 涓婄骇鑿滃崟
+ <el-tooltip content="鍒嗛厤鍒版寚瀹氳彍鍗曚笅锛屼緥濡� 绯荤粺绠$悊" placement="top">
+ <Icon icon="ep:question-filled" />
+ </el-tooltip>
+ </span>
+ </template>
+ <el-tree-select
+ v-model="formData.parentMenuId"
+ :data="menus"
+ :props="menuTreeProps"
+ check-strictly
+ node-key="id"
+ placeholder="璇烽�夋嫨绯荤粺鑿滃崟"
+ />
+ </el-form-item>
+ </el-col>
+
+ <!-- <el-col :span="12">-->
+ <!-- <el-form-item prop="packageName">-->
+ <!-- <span slot="label">-->
+ <!-- 鐢熸垚鍖呰矾寰�-->
+ <!-- <el-tooltip content="鐢熸垚鍦ㄥ摢涓猨ava鍖呬笅锛屼緥濡� com.ruoyi.system" placement="top">-->
+ <!-- <i class="el-icon-question"></i>-->
+ <!-- </el-tooltip>-->
+ <!-- </span>-->
+ <!-- <el-input v-model="formData.packageName" />-->
+ <!-- </el-form-item>-->
+ <!-- </el-col>-->
+
+ <el-col :span="12">
+ <el-form-item prop="moduleName">
+ <template #label>
+ <span>
+ 妯″潡鍚�
+ <el-tooltip
+ content="妯″潡鍚嶏紝鍗充竴绾х洰褰曪紝渚嬪 system銆乮nfra銆乼ool 绛夌瓑"
+ placement="top"
+ >
+ <Icon icon="ep:question-filled" />
+ </el-tooltip>
+ </span>
+ </template>
+ <el-input v-model="formData.moduleName" />
+ </el-form-item>
+ </el-col>
+
+ <el-col :span="12">
+ <el-form-item prop="businessName">
+ <template #label>
+ <span>
+ 涓氬姟鍚�
+ <el-tooltip
+ content="涓氬姟鍚嶏紝鍗充簩绾х洰褰曪紝渚嬪 user銆乸ermission銆乨ict 绛夌瓑"
+ placement="top"
+ >
+ <Icon icon="ep:question-filled" />
+ </el-tooltip>
+ </span>
+ </template>
+ <el-input v-model="formData.businessName" />
+ </el-form-item>
+ </el-col>
+
+ <!-- <el-col :span="12">-->
+ <!-- <el-form-item prop="businessPackage">-->
+ <!-- <span slot="label">-->
+ <!-- 涓氬姟鍖�-->
+ <!-- <el-tooltip content="涓氬姟鍖咃紝鑷畾涔変簩绾х洰褰曘�備緥濡傝锛屾垜浠笇鏈涘皢 dictType 鍜� dictData 褰掔被鎴� dict 涓氬姟" placement="top">-->
+ <!-- <i class="el-icon-question"></i>-->
+ <!-- </el-tooltip>-->
+ <!-- </span>-->
+ <!-- <el-input v-model="formData.businessPackage" />-->
+ <!-- </el-form-item>-->
+ <!-- </el-col>-->
+
+ <el-col :span="12">
+ <el-form-item prop="className">
+ <template #label>
+ <span>
+ 绫诲悕绉�
+ <el-tooltip
+ content="绫诲悕绉帮紙棣栧瓧姣嶅ぇ鍐欙級锛屼緥濡係ysUser銆丼ysMenu銆丼ysDictData 绛夌瓑"
+ placement="top"
+ >
+ <Icon icon="ep:question-filled" />
+ </el-tooltip>
+ </span>
+ </template>
+ <el-input v-model="formData.className" />
+ </el-form-item>
+ </el-col>
+
+ <el-col :span="12">
+ <el-form-item prop="classComment">
+ <template #label>
+ <span>
+ 绫绘弿杩�
+ <el-tooltip content="鐢ㄤ綔绫绘弿杩帮紝渚嬪 鐢ㄦ埛" placement="top">
+ <Icon icon="ep:question-filled" />
+ </el-tooltip>
+ </span>
+ </template>
+ <el-input v-model="formData.classComment" />
+ </el-form-item>
+ </el-col>
+
+ <el-col v-if="formData.genType === '1'" :span="24">
+ <el-form-item prop="genPath">
+ <template #label>
+ <span>
+ 鑷畾涔夎矾寰�
+ <el-tooltip
+ content="濉啓纾佺洏缁濆璺緞锛岃嫢涓嶅~鍐欙紝鍒欑敓鎴愬埌褰撳墠Web椤圭洰涓�"
+ placement="top"
+ >
+ <Icon icon="ep:question-filled" />
+ </el-tooltip>
+ </span>
+ </template>
+ <el-input v-model="formData.genPath">
+ <template #append>
+ <el-dropdown>
+ <el-button type="primary">
+ 鏈�杩戣矾寰勫揩閫熼�夋嫨
+ <i class="el-icon-arrow-down el-icon--right"></i>
+ </el-button>
+ <template #dropdown>
+ <el-dropdown-menu>
+ <el-dropdown-item @click="formData.genPath = '/'">
+ 鎭㈠榛樿鐨勭敓鎴愬熀纭�璺緞
+ </el-dropdown-item>
+ </el-dropdown-menu>
+ </template>
+ </el-dropdown>
+ </template>
+ </el-input>
+ </el-form-item>
+ </el-col>
+ </el-row>
+
+ <!-- 鏍戣〃淇℃伅 -->
+ <el-row v-if="formData.templateType == 2">
+ <el-col :span="24">
+ <h4 class="form-header">鏍戣〃淇℃伅</h4>
+ </el-col>
+ <el-col :span="12">
+ <el-form-item prop="treeParentColumnId">
+ <template #label>
+ <span>
+ 鐖剁紪鍙峰瓧娈�
+ <el-tooltip content="鏍戞樉绀虹殑鐖剁紪鐮佸瓧娈靛悕锛� 濡傦細parent_Id" placement="top">
+ <Icon icon="ep:question-filled" />
+ </el-tooltip>
+ </span>
+ </template>
+ <el-select v-model="formData.treeParentColumnId" placeholder="璇烽�夋嫨">
+ <el-option
+ v-for="(column, index) in props.columns"
+ :key="index"
+ :label="column.columnName + '锛�' + column.columnComment"
+ :value="column.id"
+ />
+ </el-select>
+ </el-form-item>
+ </el-col>
+ <el-col :span="12">
+ <el-form-item prop="treeNameColumnId">
+ <template #label>
+ <span>
+ 鏍戝悕绉板瓧娈�
+ <el-tooltip content="鏍戣妭鐐圭殑鏄剧ず鍚嶇О瀛楁鍚嶏紝 濡傦細dept_name" placement="top">
+ <Icon icon="ep:question-filled" />
+ </el-tooltip>
+ </span>
+ </template>
+ <el-select v-model="formData.treeNameColumnId" placeholder="璇烽�夋嫨">
+ <el-option
+ v-for="(column, index) in props.columns"
+ :key="index"
+ :label="column.columnName + '锛�' + column.columnComment"
+ :value="column.id"
+ />
+ </el-select>
+ </el-form-item>
+ </el-col>
+ </el-row>
+
+ <!-- 涓昏〃淇℃伅 -->
+ <el-row v-if="formData.templateType == 15">
+ <el-col :span="24">
+ <h4 class="form-header">涓昏〃淇℃伅</h4>
+ </el-col>
+ <el-col :span="12">
+ <el-form-item prop="masterTableId">
+ <template #label>
+ <span>
+ 鍏宠仈鐨勪富琛�
+ <el-tooltip content="鍏宠仈涓昏〃锛堢埗琛級鐨勮〃鍚嶏紝 濡傦細system_user" placement="top">
+ <Icon icon="ep:question-filled" />
+ </el-tooltip>
+ </span>
+ </template>
+ <el-select v-model="formData.masterTableId" placeholder="璇烽�夋嫨">
+ <el-option
+ v-for="(table0, index) in tables"
+ :key="index"
+ :label="table0.tableName + '锛�' + table0.tableComment"
+ :value="table0.id"
+ />
+ </el-select>
+ </el-form-item>
+ </el-col>
+ <el-col :span="12">
+ <el-form-item prop="subJoinColumnId">
+ <template #label>
+ <span>
+ 瀛愯〃鍏宠仈鐨勫瓧娈�
+ <el-tooltip content="瀛愯〃鍏宠仈鐨勫瓧娈碉紝 濡傦細user_id" placement="top">
+ <Icon icon="ep:question-filled" />
+ </el-tooltip>
+ </span>
+ </template>
+ <el-select v-model="formData.subJoinColumnId" placeholder="璇烽�夋嫨">
+ <el-option
+ v-for="(column, index) in props.columns"
+ :key="index"
+ :label="column.columnName + '锛�' + column.columnComment"
+ :value="column.id"
+ />
+ </el-select>
+ </el-form-item>
+ </el-col>
+ <el-col :span="12">
+ <el-form-item prop="subJoinMany">
+ <template #label>
+ <span>
+ 鍏宠仈鍏崇郴
+ <el-tooltip content="涓昏〃涓庡瓙琛ㄧ殑鍏宠仈鍏崇郴" placement="top">
+ <Icon icon="ep:question-filled" />
+ </el-tooltip>
+ </span>
+ </template>
+ <el-radio-group v-model="formData.subJoinMany" placeholder="璇烽�夋嫨">
+ <el-radio :value="true">涓�瀵瑰</el-radio>
+ <el-radio :value="false">涓�瀵逛竴</el-radio>
+ </el-radio-group>
+ </el-form-item>
+ </el-col>
+ </el-row>
+ </el-form>
+</template>
+<script lang="ts" setup>
+import { DICT_TYPE, getIntDictOptions } from '@/utils/dict'
+import { handleTree } from '@/utils/tree'
+import * as CodegenApi from '@/api/infra/codegen'
+import * as MenuApi from '@/api/system/menu'
+import { PropType } from 'vue'
+
+defineOptions({ name: 'InfraCodegenGenerateInfoForm' })
+
+const message = useMessage() // 娑堟伅寮圭獥
+const props = defineProps({
+ table: {
+ type: Object as PropType<Nullable<CodegenApi.CodegenTableVO>>,
+ default: () => null
+ },
+ columns: {
+ type: Array as unknown as PropType<CodegenApi.CodegenColumnVO[]>,
+ default: () => null
+ }
+})
+
+const formRef = ref()
+const formData = ref({
+ templateType: null,
+ frontType: null,
+ scene: null,
+ moduleName: '',
+ businessName: '',
+ className: '',
+ classComment: '',
+ parentMenuId: null,
+ genPath: '',
+ genType: '',
+ masterTableId: undefined,
+ subJoinColumnId: undefined,
+ subJoinMany: undefined,
+ treeParentColumnId: undefined,
+ treeNameColumnId: undefined
+})
+
+const rules = reactive({
+ templateType: [required],
+ frontType: [required],
+ scene: [required],
+ moduleName: [required],
+ businessName: [required],
+ businessPackage: [required],
+ className: [required],
+ classComment: [required],
+ masterTableId: [required],
+ subJoinColumnId: [required],
+ subJoinMany: [required],
+ treeParentColumnId: [required],
+ treeNameColumnId: [required]
+})
+
+const tables = ref([]) // 琛ㄥ畾涔夊垪琛�
+const menus = ref<any[]>([])
+const menuTreeProps = {
+ label: 'name'
+}
+
+watch(
+ () => props.table,
+ async (table) => {
+ if (!table) return
+ formData.value = table as any
+ // 鍔犺浇琛ㄥ垪琛�
+ if (table.dataSourceConfigId >= 0) {
+ tables.value = await CodegenApi.getCodegenTableList(formData.value.dataSourceConfigId)
+ }
+ },
+ {
+ deep: true,
+ immediate: true
+ }
+)
+
+onMounted(async () => {
+ try {
+ // 鍔犺浇鑿滃崟
+ const resp = await MenuApi.getSimpleMenusList()
+ menus.value = handleTree(resp)
+ } catch {}
+})
+
+defineExpose({
+ validate: async () => unref(formRef)?.validate()
+})
+</script>
--
Gitblit v1.8.0