升级依赖,加入预览详情模板

This commit is contained in:
xiangheng
2024-12-04 00:37:56 +08:00
parent 7b27141d1f
commit c369b3e6f8
12 changed files with 353 additions and 56 deletions

View File

@@ -16,26 +16,26 @@
"dependencies": { "dependencies": {
"@element-plus/icons-vue": "^2.3.1", "@element-plus/icons-vue": "^2.3.1",
"@highlightjs/vue-plugin": "^2.1.0", "@highlightjs/vue-plugin": "^2.1.0",
"@logicflow/core": "^2.0.6", "@logicflow/core": "^2.0.9",
"@logicflow/extension": "^2.0.10", "@logicflow/extension": "^2.0.13",
"@vueuse/core": "^10.11.0", "@vueuse/core": "^12.0.0",
"@wangeditor/editor": "^5.1.23", "@wangeditor/editor": "^5.1.23",
"@wangeditor/editor-for-vue": "^5.1.12", "@wangeditor/editor-for-vue": "^5.1.12",
"axios": "^1.7.7", "axios": "^1.7.8",
"crypto-js": "^4.2.0", "crypto-js": "^4.2.0",
"css-color-function": "^1.3.3", "css-color-function": "^1.3.3",
"dayjs": "^1.11.13", "dayjs": "^1.11.13",
"echarts": "^5.5.1", "echarts": "^5.5.1",
"element-plus": "^2.8.6", "element-plus": "^2.9.0",
"highlight.js": "^11.10.0", "highlight.js": "^11.10.0",
"lodash-es": "^4.17.21", "lodash-es": "^4.17.21",
"nprogress": "^0.2.0", "nprogress": "^0.2.0",
"pinia": "^2.2.1", "pinia": "^2.2.8",
"query-string": "^9.1.0", "query-string": "^9.1.1",
"vform3-builds": "^3.0.10", "vform3-builds": "^3.0.10",
"vue": "^3.5.12", "vue": "^3.5.13",
"vue-clipboard3": "^2.0.0", "vue-clipboard3": "^2.0.0",
"vue-echarts": "^7.0.1", "vue-echarts": "^7.0.3",
"vue-router": "^4.4.5", "vue-router": "^4.4.5",
"vue3-video-play": "^1.3.2", "vue3-video-play": "^1.3.2",
"vuedraggable": "^4.1.0" "vuedraggable": "^4.1.0"
@@ -45,28 +45,28 @@
"@types/lodash-es": "^4.17.12", "@types/lodash-es": "^4.17.12",
"@types/node": "^20.14.2", "@types/node": "^20.14.2",
"@types/nprogress": "^0.2.3", "@types/nprogress": "^0.2.3",
"@vitejs/plugin-vue": "^5.1.4", "@vitejs/plugin-vue": "^5.2.1",
"@vitejs/plugin-vue-jsx": "^4.0.1", "@vitejs/plugin-vue-jsx": "^4.1.1",
"@vue/eslint-config-prettier": "^9.0.0", "@vue/eslint-config-prettier": "^9.0.0",
"@vue/eslint-config-typescript": "^13.0.0", "@vue/eslint-config-typescript": "^13.0.0",
"@vue/tsconfig": "^0.5.1", "@vue/tsconfig": "^0.7.0",
"autoprefixer": "^10.4.20", "autoprefixer": "^10.4.20",
"eslint": "^8.57.0", "eslint": "^8.57.0",
"eslint-plugin-vue": "^9.27.0", "eslint-plugin-vue": "^9.27.0",
"execa": "^9.3.0", "execa": "^9.3.0",
"fs-extra": "^11.2.0", "fs-extra": "^11.2.0",
"postcss": "^8.4.38", "postcss": "^8.4.49",
"prettier": "^3.3.3", "prettier": "^3.4.1",
"rollup-plugin-visualizer": "^5.12.0", "rollup-plugin-visualizer": "^5.12.0",
"sass": "^1.77.8", "sass": "^1.81.1",
"tailwindcss": "^3.4.13", "tailwindcss": "^3.4.15",
"typescript": "~5.6.2", "typescript": "~5.7.2",
"unplugin-auto-import": "^0.18.3", "unplugin-auto-import": "^0.18.6",
"unplugin-vue-components": "^0.27.4", "unplugin-vue-components": "^0.27.5",
"vite": "^5.4.7", "vite": "^6.0.2",
"vite-plugin-compression": "^0.5.1", "vite-plugin-compression": "^0.5.1",
"vite-plugin-style-import": "^2.0.0", "vite-plugin-style-import": "^2.0.0",
"vite-plugin-svg-icons": "^2.0.1", "vite-plugin-svg-icons": "^2.0.1",
"vue-tsc": "^2.1.6" "vue-tsc": "^2.1.10"
} }
} }

View File

@@ -1,6 +1,6 @@
@import 'tailwind.css'; @use 'tailwind.css' as *;
@import 'element.scss'; @use 'element.scss' as *;
@import 'dark.css'; @use 'dark.css' as *;
@import 'var.css'; @use 'var.css' as *;
@import 'public.scss'; @use 'public.scss' as *;

View File

@@ -48,7 +48,7 @@
/> />
</el-select> </el-select>
</el-form-item> </el-form-item>
<el-form-item label="使用SDK" v-if="mode == 'edit'"> <el-form-item label="使用SDK" v-if="mode == 'edit'&&formData.ProjectType=='web'">
<highlight-code :code="code" lang="javascript"></highlight-code> <highlight-code :code="code" lang="javascript"></highlight-code>
</el-form-item> </el-form-item>
</el-form> </el-form>

View File

@@ -37,12 +37,12 @@
/> />
</el-select> </el-select>
</el-form-item> </el-form-item>
<el-form-item label="创建时间" prop="CreateTime" class="w-[430px]"> <!-- <el-form-item label="创建时间" prop="CreateTime" class="w-[430px]">
<daterange-picker <daterange-picker
v-model:startTime="queryParams.CreateTimeStart" v-model:startTime="queryParams.CreateTimeStart"
v-model:endTime="queryParams.CreateTimeEnd" v-model:endTime="queryParams.CreateTimeEnd"
/> />
</el-form-item> </el-form-item> -->
<el-form-item label="更新时间" prop="UpdateTime" class="w-[420px]"> <el-form-item label="更新时间" prop="UpdateTime" class="w-[420px]">
<daterange-picker <daterange-picker
v-model:startTime="queryParams.UpdateTimeStart" v-model:startTime="queryParams.UpdateTimeStart"
@@ -112,18 +112,18 @@
<el-table-column type="selection" width="55" /> <el-table-column type="selection" width="55" />
<el-table-column label="项目uuid" prop="ProjectKey" min-width="130" /> <el-table-column label="项目uuid" prop="ProjectKey" min-width="130" />
<el-table-column label="项目名称" prop="ProjectName" min-width="130" /> <el-table-column label="项目名称" prop="ProjectName" min-width="130" />
<el-table-column label="项目类型" prop="ProjectType" min-width="100"> <el-table-column label="项目类型" prop="ProjectType" width="100">
<template #default="{ row }"> <template #default="{ row }">
<dict-value :options="dictData.project_type" :value="row.ProjectType" /> <dict-value :options="dictData.project_type" :value="row.ProjectType" />
</template> </template>
</el-table-column> </el-table-column>
<el-table-column label="是否启用" prop="Status" min-width="100"> <el-table-column label="是否启用" prop="Status" width="100">
<template #default="{ row }"> <template #default="{ row }">
<dict-value :options="dictData.status" :value="row.Status" /> <dict-value :options="dictData.status" :value="row.Status" />
</template> </template>
</el-table-column> </el-table-column>
<el-table-column label="创建时间" prop="CreateTime" min-width="130" /> <!-- <el-table-column label="创建时间" prop="CreateTime" min-width="130" /> -->
<el-table-column label="更新时间" prop="UpdateTime" min-width="130" /> <el-table-column label="更新时间" prop="UpdateTime" width="180" />
<el-table-column label="操作" width="120" fixed="right"> <el-table-column label="操作" width="120" fixed="right">
<template #default="{ row }"> <template #default="{ row }">
<el-button <el-button

View File

@@ -59,11 +59,11 @@
</template> </template>
</el-table-column> </el-table-column>
<el-table-column label="排序" prop="menuSort" min-width="60" /> <el-table-column label="排序" prop="menuSort" min-width="60" />
<el-table-column <!-- <el-table-column
label="更新时间" label="更新时间"
prop="updateTime" prop="updateTime"
min-width="120" min-width="120"
></el-table-column> ></el-table-column> -->
<el-table-column label="操作" width="160" fixed="right"> <el-table-column label="操作" width="160" fixed="right">
<template #default="{ row }"> <template #default="{ row }">
<el-button <el-button

View File

@@ -28,12 +28,12 @@ admin:{{{.ModuleName }}}:ImportFile
// 列表 // 列表
INSERT INTO x_system_auth_menu (pid, menu_type, menu_name, paths, component, is_cache, is_show, is_disable, create_time, update_time) VALUES (0, 'C', '{{{ .FunctionName }}}', '{{{nameToPath .ModuleName }}}/index', '{{{nameToPath .ModuleName }}}/index', 0, 1, 0, now(), now()); INSERT INTO x_system_auth_menu (pid, menu_type, menu_name, paths, component, is_cache, is_show, is_disable, create_time, update_time) VALUES (0, 'C', '{{{ .FunctionName }}}', '{{{nameToPath .ModuleName }}}/index', '{{{nameToPath .ModuleName }}}/index', 0, 1, 0, now(), now());
INSERT INTO x_system_auth_menu (pid, menu_type, menu_name, perms,is_cache, is_show, is_disable, create_time, update_time) SELECT id, 'A', '{{{ .FunctionName }}}列表','admin:{{{ .ModuleName }}}:list', 0, 1, 0, now(), now() FROM x_system_auth_menu WHERE component='{{{nameToPath .ModuleName }}}/index';
INSERT INTO x_system_auth_menu (pid, menu_type, menu_name, perms,is_cache, is_show, is_disable, create_time, update_time) SELECT id, 'A', '{{{ .FunctionName }}}全部列表','admin:{{{ .ModuleName }}}:listAll', 0, 1, 0, now(), now() FROM x_system_auth_menu WHERE component='{{{nameToPath .ModuleName }}}/index';
INSERT INTO x_system_auth_menu (pid, menu_type, menu_name, perms,is_cache, is_show, is_disable, create_time, update_time) SELECT id, 'A', '{{{ .FunctionName }}}添加','admin:{{{ .ModuleName }}}:add', 0, 1, 0, now(), now() FROM x_system_auth_menu WHERE component='{{{nameToPath .ModuleName }}}/index'; INSERT INTO x_system_auth_menu (pid, menu_type, menu_name, perms,is_cache, is_show, is_disable, create_time, update_time) SELECT id, 'A', '{{{ .FunctionName }}}添加','admin:{{{ .ModuleName }}}:add', 0, 1, 0, now(), now() FROM x_system_auth_menu WHERE component='{{{nameToPath .ModuleName }}}/index';
INSERT INTO x_system_auth_menu (pid, menu_type, menu_name, perms,is_cache, is_show, is_disable, create_time, update_time) SELECT id, 'A', '{{{ .FunctionName }}}编辑','admin:{{{ .ModuleName }}}:edit', 0, 1, 0, now(), now() FROM x_system_auth_menu WHERE component='{{{nameToPath .ModuleName }}}/index'; INSERT INTO x_system_auth_menu (pid, menu_type, menu_name, perms,is_cache, is_show, is_disable, create_time, update_time) SELECT id, 'A', '{{{ .FunctionName }}}编辑','admin:{{{ .ModuleName }}}:edit', 0, 1, 0, now(), now() FROM x_system_auth_menu WHERE component='{{{nameToPath .ModuleName }}}/index';
INSERT INTO x_system_auth_menu (pid, menu_type, menu_name, perms,is_cache, is_show, is_disable, create_time, update_time) SELECT id, 'A', '{{{ .FunctionName }}}删除','admin:{{{ .ModuleName }}}:del', 0, 1, 0, now(), now() FROM x_system_auth_menu WHERE component='{{{nameToPath .ModuleName }}}/index'; INSERT INTO x_system_auth_menu (pid, menu_type, menu_name, perms,is_cache, is_show, is_disable, create_time, update_time) SELECT id, 'A', '{{{ .FunctionName }}}删除','admin:{{{ .ModuleName }}}:del', 0, 1, 0, now(), now() FROM x_system_auth_menu WHERE component='{{{nameToPath .ModuleName }}}/index';
INSERT INTO x_system_auth_menu (pid, menu_type, menu_name, perms,is_cache, is_show, is_disable, create_time, update_time) SELECT id, 'A', '{{{ .FunctionName }}}删除-批量','admin:{{{ .ModuleName }}}:delBatch', 0, 1, 0, now(), now() FROM x_system_auth_menu WHERE component='{{{nameToPath .ModuleName }}}/index'; INSERT INTO x_system_auth_menu (pid, menu_type, menu_name, perms,is_cache, is_show, is_disable, create_time, update_time) SELECT id, 'A', '{{{ .FunctionName }}}删除-批量','admin:{{{ .ModuleName }}}:delBatch', 0, 1, 0, now(), now() FROM x_system_auth_menu WHERE component='{{{nameToPath .ModuleName }}}/index';
INSERT INTO x_system_auth_menu (pid, menu_type, menu_name, perms,is_cache, is_show, is_disable, create_time, update_time) SELECT id, 'A', '{{{ .FunctionName }}}列表','admin:{{{ .ModuleName }}}:list', 0, 1, 0, now(), now() FROM x_system_auth_menu WHERE component='{{{nameToPath .ModuleName }}}/index';
INSERT INTO x_system_auth_menu (pid, menu_type, menu_name, perms,is_cache, is_show, is_disable, create_time, update_time) SELECT id, 'A', '{{{ .FunctionName }}}全部列表','admin:{{{ .ModuleName }}}:listAll', 0, 1, 0, now(), now() FROM x_system_auth_menu WHERE component='{{{nameToPath .ModuleName }}}/index';
INSERT INTO x_system_auth_menu (pid, menu_type, menu_name, perms,is_cache, is_show, is_disable, create_time, update_time) SELECT id, 'A', '{{{ .FunctionName }}}详情','admin:{{{ .ModuleName }}}:detail', 0, 1, 0, now(), now() FROM x_system_auth_menu WHERE component='{{{nameToPath .ModuleName }}}/index'; INSERT INTO x_system_auth_menu (pid, menu_type, menu_name, perms,is_cache, is_show, is_disable, create_time, update_time) SELECT id, 'A', '{{{ .FunctionName }}}详情','admin:{{{ .ModuleName }}}:detail', 0, 1, 0, now(), now() FROM x_system_auth_menu WHERE component='{{{nameToPath .ModuleName }}}/index';
INSERT INTO x_system_auth_menu (pid, menu_type, menu_name, perms,is_cache, is_show, is_disable, create_time, update_time) SELECT id, 'A', '{{{ .FunctionName }}}导出excel','admin:{{{ .ModuleName }}}:ExportFile', 0, 1, 0, now(), now() FROM x_system_auth_menu WHERE component='{{{nameToPath .ModuleName }}}/index'; INSERT INTO x_system_auth_menu (pid, menu_type, menu_name, perms,is_cache, is_show, is_disable, create_time, update_time) SELECT id, 'A', '{{{ .FunctionName }}}导出excel','admin:{{{ .ModuleName }}}:ExportFile', 0, 1, 0, now(), now() FROM x_system_auth_menu WHERE component='{{{nameToPath .ModuleName }}}/index';
INSERT INTO x_system_auth_menu (pid, menu_type, menu_name, perms,is_cache, is_show, is_disable, create_time, update_time) SELECT id, 'A', '{{{ .FunctionName }}}导入excel','admin:{{{ .ModuleName }}}:ImportFile', 0, 1, 0, now(), now() FROM x_system_auth_menu WHERE component='{{{nameToPath .ModuleName }}}/index'; INSERT INTO x_system_auth_menu (pid, menu_type, menu_name, perms,is_cache, is_show, is_disable, create_time, update_time) SELECT id, 'A', '{{{ .FunctionName }}}导入excel','admin:{{{ .ModuleName }}}:ImportFile', 0, 1, 0, now(), now() FROM x_system_auth_menu WHERE component='{{{nameToPath .ModuleName }}}/index';

View File

@@ -0,0 +1,284 @@
<template>
<div class="edit-popup">
<popup
ref="popupRef"
:title="popupTitle"
:async="true"
width="550px"
:clickModalClose="true"
:confirmButtonText="false"
@close="handleClose"
>
<el-form ref="formRef" :model="formData" label-width="84px" :rules="formRules">
{{{- range .Columns }}}
{{{- if .IsEdit }}}
{{{- if ne (toUpperCamelCase .GoField) "Id" }}}
{{{- if and (ne $.Table.TreeParent "") (eq (toUpperCamelCase .GoField) $.Table.TreeParent) }}}
<el-form-item label="{{{ .ColumnComment }}}" prop="{{{ (toUpperCamelCase .GoField) }}}">
<el-tree-select
class="flex-1"
v-model="formData.{{{ (toUpperCamelCase .GoField) }}}"
:data="treeList"
clearable
node-key="{{{ .Table.TreePrimary }}}"
:props="{ label: '{{{ .Table.TreeName }}}', value: '{{{ .Table.TreePrimary }}}', children: 'children' }"
:default-expand-all="true"
placeholder="请选择{{{ .ColumnComment }}}"
check-strictly
disabled
/>
</el-form-item>
{{{- else if eq .HtmlType "input" }}}
<el-form-item label="{{{ .ColumnComment }}}" prop="{{{ (toUpperCamelCase .GoField) }}}">
<span v-text="formData.{{{ (toUpperCamelCase .GoField) }}}"></span>
</el-form-item>
{{{- else if eq .HtmlType "number" }}}
<el-form-item label="{{{ .ColumnComment }}}" prop="{{{ (toUpperCamelCase .GoField) }}}">
<span v-text="formData.{{{ (toUpperCamelCase .GoField) }}}"></span>
</el-form-item>
{{{- else if eq .HtmlType "textarea" }}}
<el-form-item label="{{{ .ColumnComment }}}" prop="{{{ (toUpperCamelCase .GoField) }}}">
<span v-text="formData.{{{ (toUpperCamelCase .GoField) }}}"></span>
</el-form-item>
{{{- else if eq .HtmlType "checkbox" }}}
<el-form-item label="{{{ .ColumnComment }}}" prop="{{{ (toUpperCamelCase .GoField) }}}">
{{{- if ne .DictType "" }}}
<dict-value :options="dictData.{{{ .DictType }}}" :value="formData.{{{ (toUpperCamelCase .GoField) }}}" />
{{!-- <el-checkbox
v-for="(item, index) in dictData.{{{ .DictType }}}"
:key="index"
:label="item.name"
:value="item.value"
:disabled="!item.status"
></el-checkbox> --}}
{{{- else if ne .ListAllApi "" }}}
<dict-value :options="listAllData.{{{pathToName .ListAllApi }}}" :value="formData.{{{ (toUpperCamelCase .GoField) }}}" />
{{!-- <el-checkbox
v-for="(item, index) in listAllData.{{{pathToName .ListAllApi }}}"
:key="index"
:label="item.Id"
:value="item.Id"
></el-checkbox> --}}
{{!-- <el-checkbox></el-checkbox> --}}
{{{- end }}}
</el-form-item>
{{{- else if eq .HtmlType "select" }}}
<el-form-item label="{{{ .ColumnComment }}}" prop="{{{ (toUpperCamelCase .GoField) }}}">
{{!-- <el-select class="flex-1" v-model="formData.{{{ (toUpperCamelCase .GoField) }}}" placeholder="请选择{{{ .ColumnComment }}}"> --}}
{{{- if ne .DictType "" }}}
<dict-value :options="dictData.{{{ .DictType }}}" :value="formData.{{{ (toUpperCamelCase .GoField) }}}" />
{{!-- <el-option
v-for="(item, index) in dictData.{{{ .DictType }}}"
:key="index"
:label="item.name"
{{{- if eq .GoType "int" }}}
:value="parseInt(item.value)"
{{{- else }}}
:value="item.value"
{{{- end }}}
clearable
:disabled="!item.status"
/> --}}
{{{- else if ne .ListAllApi "" }}}
<dict-value :options="listAllData.{{{pathToName .ListAllApi }}}" :value="formData.{{{ (toUpperCamelCase .GoField) }}}" />
{{!-- <el-option
v-for="(item, index) in listAllData.{{{pathToName .ListAllApi }}}"
:key="index"
:label="item.Id"
{{{- if eq .GoType "int" }}}
:value="parseInt(item.Id)"
{{{- else }}}
:value="String(item.Id)"
{{{- end }}}
clearable
/> --}}
{{!-- <el-option label="请选择字典生成" value="" /> --}}
{{{- end }}}
{{!-- </el-select> --}}
</el-form-item>
{{{- else if eq .HtmlType "radio" }}}
<el-form-item label="{{{ .ColumnComment }}}" prop="{{{ (toUpperCamelCase .GoField) }}}">
{{!-- <el-radio-group v-model="formData.{{{ (toUpperCamelCase .GoField) }}}" placeholder="请选择{{{ .ColumnComment }}}"> --}}
{{{- if ne .DictType "" }}}
<dict-value :options="dictData.{{{ .DictType }}}" :value="formData.{{{ (toUpperCamelCase .GoField) }}}" />
{{!-- <el-radio
v-for="(item, index) in dictData.{{{ .DictType }}}"
:key="index"
:label="item.name"
{{{- if eq .GoType "int" }}}
:value="parseInt(item.value)"
{{{- else }}}
:value="item.value"
{{{- end }}}
:disabled="!item.status"
></el-radio> --}}
{{{- else if ne .ListAllApi "" }}}
<dict-value :options="listAllData.{{{pathToName .ListAllApi }}}" :value="formData.{{{ (toUpperCamelCase .GoField) }}}" />
{{!-- <el-radio
v-for="(item, index) in listAllData.{{{ pathToName .ListAllApi }}}"
:key="index"
:label="item.name"
{{{- if eq .GoType "int" }}}
:value="parseInt(item.Id)"
{{{- else }}}
:value="item.Id"
{{{- end }}}
>
{{ item.Id }}
</el-radio> --}}
{{!-- <el-radio label="0"></el-radio> --}}
{{{- end }}}
{{!-- </el-radio-group> --}}
</el-form-item>
{{{- else if eq .HtmlType "datetime" }}}
<el-form-item label="{{{ .ColumnComment }}}" prop="{{{ (toUpperCamelCase .GoField) }}}">
<span v-text="formData.{{{ (toUpperCamelCase .GoField) }}}"></span>
{{!-- <el-date-picker
class="flex-1 !flex"
v-model="formData.{{{ (toUpperCamelCase .GoField) }}}"
type="datetime"
clearable
value-format="YYYY-MM-DD hh:mm:ss"
placeholder="请选择{{{ .ColumnComment }}}"
/> --}}
</el-form-item>
{{{- else if eq .HtmlType "editor" }}}
<el-form-item label="{{{ .ColumnComment }}}" prop="{{{ (toUpperCamelCase .GoField) }}}">
<div v-html="formData.{{{ (toUpperCamelCase .GoField) }}}"></div>
</el-form-item>
{{{- else if eq .HtmlType "imageUpload" }}}
<el-form-item label="{{{ .ColumnComment }}}" prop="{{{ (toUpperCamelCase .GoField) }}}">
<image-contain
:width="40"
:height="40"
:src="formData.{{{ (toUpperCamelCase .GoField) }}}"
:preview-src-list="[formData.{{{ (toUpperCamelCase .GoField) }}}]"
preview-teleported
hide-on-click-modal
/>
</el-form-item>
{{{- end }}}
{{{- end }}}
{{{- end }}}
{{{- end }}}
</el-form>
</popup>
</div>
</template>
<script lang="ts" setup>
import type { FormInstance } from 'element-plus'
import { {{{ if and .Table.TreePrimary .Table.TreeParent }}}{{{ .ModuleName }}}_list_all,{{{ end }}} ,{{{ .ModuleName }}}_detail } from '@/api/{{{nameToPath .ModuleName }}}'
import Popup from '@/components/popup/index.vue'
import feedback from '@/utils/feedback'
import { ref, shallowRef, computed, reactive } from 'vue'
import type { PropType } from 'vue'
defineProps({
dictData: {
type: Object as PropType<Record<string, any[]>>,
default: () => ({})
},
listAllData:{
type: Object as PropType<Record<string, any[]>>,
default: () => ({})
}
})
const emit = defineEmits(['success', 'close'])
const formRef = shallowRef<FormInstance>()
const popupRef = shallowRef<InstanceType<typeof Popup>>()
{{{- if and .Table.TreePrimary .Table.TreeParent }}}
const treeList = ref<any[]>([])
{{{- end }}}
const popupTitle = computed(() => {
return '预览{{{ .FunctionName }}}'
})
const formData = reactive({
{{{- range .Columns }}}
{{{- if eq (toUpperCamelCase .GoField) $.PrimaryKey }}}
{{{ $.PrimaryKey }}}: '',
{{{- else if .IsEdit }}}
{{{- if eq .HtmlType "checkbox" }}}
{{{ (toUpperCamelCase .GoField) }}}: [],
{{{- else if eq .HtmlType "number" }}}
{{{ (toUpperCamelCase .GoField) }}}: null,
{{{- else }}}
{{{ (toUpperCamelCase .GoField) }}}: null,
{{{- end }}}
{{{- end }}}
{{{- end }}}
})
const formRules = {
{{{- range .Columns }}}
{{{- if and .IsEdit }}}
{{{ (toUpperCamelCase .GoField) }}}: [
{
required: {{{- if eq .IsRequired 1}}} true {{{- else}}} false {{{- end }}},
{{{- if or (eq .HtmlType "checkbox") (eq .HtmlType "datetime") (eq .HtmlType "radio") (eq .HtmlType "select") (eq .HtmlType "imageUpload") }}}
message: '请选择{{{ .ColumnComment }}}',
{{{- else }}}
message: '请输入{{{ .ColumnComment }}}',
{{{- end }}}
trigger: ['blur']
}
],
{{{- end }}}
{{{- end }}}
}
const open = () => {
popupRef.value?.open()
}
const setFormData = async (data: Record<string, any>) => {
for (const key in formData) {
if (data[key] != null && data[key] != undefined) {
//@ts-ignore
formData[key] = data[key]
{{{- range .Columns }}}
{{{- if eq .HtmlType "checkbox" }}}
//@ts-ignore
formData.{{{ (toUpperCamelCase .GoField) }}} = String(data.{{{ (toUpperCamelCase .GoField) }}}).split(',')
{{{- end }}}
{{{- end }}}
}
}
}
const getDetail = async (row: Record<string, any>) => {
try {
const data = await {{{ .ModuleName }}}_detail(row.{{{toUpperCamelCase .PrimaryKey }}})
setFormData(data)
} catch (error) {}
}
const handleClose = () => {
emit('close')
}
{{{- if and .Table.TreePrimary .Table.TreeParent }}}
const getLists = async () => {
const data: any = await {{{ .ModuleName }}}_list_all()
const item = { {{{ .Table.TreePrimary }}}: 0, {{{ .Table.TreeName }}}: '顶级', children: [] }
item.children = data
treeList.value.push(item)
}
getLists()
{{{- end }}}
defineExpose({
open,
setFormData,
getDetail
})
</script>

View File

@@ -163,7 +163,7 @@
</template> </template>
<script lang="ts" setup> <script lang="ts" setup>
import type { FormInstance } from 'element-plus' import type { FormInstance } from 'element-plus'
import { {{{ if and .Table.TreePrimary .Table.TreeParent }}}{{{ .ModuleName }}}_lists,{{{ end }}} {{{ .ModuleName }}}_edit, {{{ .ModuleName }}}_add, {{{ .ModuleName }}}_detail } from '@/api/{{{nameToPath .ModuleName }}}' import { {{{ if and .Table.TreePrimary .Table.TreeParent }}}{{{ .ModuleName }}}_list_all,{{{ end }}} {{{ .ModuleName }}}_edit, {{{ .ModuleName }}}_add, {{{ .ModuleName }}}_detail } from '@/api/{{{nameToPath .ModuleName }}}'
import Popup from '@/components/popup/index.vue' import Popup from '@/components/popup/index.vue'
import feedback from '@/utils/feedback' import feedback from '@/utils/feedback'
import { ref, shallowRef, computed, reactive } from 'vue' import { ref, shallowRef, computed, reactive } from 'vue'
@@ -272,7 +272,7 @@ const handleClose = () => {
{{{- if and .Table.TreePrimary .Table.TreeParent }}} {{{- if and .Table.TreePrimary .Table.TreeParent }}}
const getLists = async () => { const getLists = async () => {
const data: any = await {{{ .ModuleName }}}_lists() const data: any = await {{{ .ModuleName }}}_list_all()
const item = { {{{ .Table.TreePrimary }}}: 0, {{{ .Table.TreeName }}}: '顶级', children: [] } const item = { {{{ .Table.TreePrimary }}}: 0, {{{ .Table.TreeName }}}: '顶级', children: [] }
item.children = data item.children = data
treeList.value.push(item) treeList.value.push(item)

View File

@@ -176,8 +176,10 @@ func (tu templateUtil) GetTemplatePaths(genTpl string) []string {
"gocode/service.go.tpl", "gocode/service.go.tpl",
"gocode/route.go.tpl", "gocode/route.go.tpl",
"gocode/controller.go.tpl", "gocode/controller.go.tpl",
"vue/api.ts.tpl", "vue/api.ts.tpl",
"vue/edit.vue.tpl", "vue/edit.vue.tpl",
"vue/details.vue.tpl",
"uniapp/api.ts.tpl", "uniapp/api.ts.tpl",
"uniapp/edit.vue.tpl", "uniapp/edit.vue.tpl",
@@ -233,10 +235,11 @@ func (tu templateUtil) GetFilePaths(tplCodeMap map[string]string, ModuleName str
"gocode/service.go.tpl": strings.Join([]string{"server/admin/", ModuleName, "/", ModuleName, "_service.go"}, ""), //"server/admin/%s/%s_service.go", "gocode/service.go.tpl": strings.Join([]string{"server/admin/", ModuleName, "/", ModuleName, "_service.go"}, ""), //"server/admin/%s/%s_service.go",
"gocode/controller.go.tpl": strings.Join([]string{"server/admin/", ModuleName, "/", ModuleName, "_ctl.go"}, ""), //"server/admin/%s/%s_ctl.go", "gocode/controller.go.tpl": strings.Join([]string{"server/admin/", ModuleName, "/", ModuleName, "_ctl.go"}, ""), //"server/admin/%s/%s_ctl.go",
"vue/api.ts.tpl": strings.Join([]string{"admin/src/api/", GenUtil.NameToPath(ModuleName), ".ts"}, ""), // "admin/src/api/%s.ts", "vue/api.ts.tpl": strings.Join([]string{"admin/src/api/", GenUtil.NameToPath(ModuleName), ".ts"}, ""), // "admin/src/api/%s.ts",
"vue/edit.vue.tpl": strings.Join([]string{"admin/src/views/", GenUtil.NameToPath(ModuleName), "/edit.vue"}, ""), // "admin/src/views/%s/edit.vue", "vue/edit.vue.tpl": strings.Join([]string{"admin/src/views/", GenUtil.NameToPath(ModuleName), "/edit.vue"}, ""), // "admin/src/views/%s/edit.vue",
"vue/index.vue.tpl": strings.Join([]string{"admin/src/views/", GenUtil.NameToPath(ModuleName), "/index.vue"}, ""), // "admin/src/views/%s/index.vue", "vue/details.vue.tpl": strings.Join([]string{"admin/src/views/", GenUtil.NameToPath(ModuleName), "/details.vue"}, ""), // "admin/src/views/%s/details.vue",
"vue/index-tree.vue.tpl": strings.Join([]string{"admin/src/views/", GenUtil.NameToPath(ModuleName), "/index.vue"}, ""), // "admin/src/views/%s/index-tree.vue", "vue/index.vue.tpl": strings.Join([]string{"admin/src/views/", GenUtil.NameToPath(ModuleName), "/index.vue"}, ""), // "admin/src/views/%s/index.vue",
"vue/index-tree.vue.tpl": strings.Join([]string{"admin/src/views/", GenUtil.NameToPath(ModuleName), "/index.vue"}, ""), // "admin/src/views/%s/index-tree.vue",
"uniapp/api.ts.tpl": strings.Join([]string{"x_admin_app/api/", GenUtil.NameToPath(ModuleName), ".ts"}, ""), "uniapp/api.ts.tpl": strings.Join([]string{"x_admin_app/api/", GenUtil.NameToPath(ModuleName), ".ts"}, ""),
"uniapp/edit.vue.tpl": strings.Join([]string{"x_admin_app/pages/", GenUtil.NameToPath(ModuleName), "/edit.vue"}, ""), "uniapp/edit.vue.tpl": strings.Join([]string{"x_admin_app/pages/", GenUtil.NameToPath(ModuleName), "/edit.vue"}, ""),

View File

@@ -42,14 +42,6 @@ func initRouter() *gin.Engine {
}) })
// 设置中间件 // 设置中间件
r.Use(gin.Logger(), middleware.Cors(), middleware.ErrorRecover()) r.Use(gin.Logger(), middleware.Cors(), middleware.ErrorRecover())
r.GET("/api/admin/apiList", middleware.TokenAuth(), func(ctx *gin.Context) {
var path = []string{}
for _, route := range r.Routes() {
// fmt.Printf("%s 127.0.0.1:%v%s\n", route.Method, config.Config.ServerPort, route.Path)
path = append(path, route.Path)
}
response.Result(ctx, response.Success, path)
})
// 演示模式 // 演示模式
if config.Config.DisallowModify { if config.Config.DisallowModify {
@@ -61,7 +53,7 @@ func initRouter() *gin.Engine {
// 注册路由 // 注册路由
apiGroup := r.Group("/api") apiGroup := r.Group("/api")
router.RegisterGroup(apiGroup) router.RegisterGroup(apiGroup, r)
return r return r
} }

View File

@@ -2,14 +2,27 @@ package router
import ( import (
"x_admin/admin/common/captcha" "x_admin/admin/common/captcha"
"x_admin/core/response"
"x_admin/middleware"
"x_admin/router/admin" "x_admin/router/admin"
"github.com/gin-gonic/gin" "github.com/gin-gonic/gin"
) )
func RegisterGroup(rg *gin.RouterGroup) { func RegisterGroup(api *gin.RouterGroup, rootRouter *gin.Engine) {
// 一下路由前缀为/api
admin.RegisterGroup(rg)
captcha.CaptchaRoute(rg) // /api/admin/apiList 获取所有接口
api.GET("/admin/apiList", middleware.TokenAuth(), func(ctx *gin.Context) {
var path = []string{}
for _, route := range rootRouter.Routes() {
// fmt.Printf("%s 127.0.0.1:%v%s\n", route.Method, config.Config.ServerPort, route.Path)
path = append(path, route.Path)
}
response.Result(ctx, response.Success, path)
})
// /api/admin
admin.RegisterGroup(api)
// /api/common/captcha 验证码
captcha.CaptchaRoute(api)
} }

5
x_err_sdk/.vscode/settings.json vendored Normal file
View File

@@ -0,0 +1,5 @@
{
"cSpell.words": [
"adtkcn"
]
}