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