瀏覽代碼

fix: 更新项目版本

wanggaokun 1 年之前
父節點
當前提交
2dc368c700

+ 2 - 2
README.md

@@ -1,3 +1,3 @@
-# taais-web
+# km-web
 
-前端脚手架
+前端脚手架

+ 11 - 3
package.json

@@ -1,14 +1,22 @@
 {
-  "name": "taais-web",
+  "name": "km-admin",
   "private": true,
-  "version": "1.0.0",
+  "version": "1.2.0",
   "type": "module",
-  "description": "taais-web",
+  "description": "km-admin open source management system",
   "author": {
     "name": "gaokunw",
     "email": "wanggaokun@wo.cn"
   },
   "license": "MIT",
+  "homepage": "https://gitee.com/gaokunw/kimi-web",
+  "repository": {
+    "type": "git",
+    "url": "git@gitee.com:gaokunw/kimi-web.git"
+  },
+  "bugs": {
+    "url": "https://gitee.com/gaokunw/kimi-web/issues"
+  },
   "scripts": {
     "dev": "vite",
     "serve": "vite",

+ 4 - 1
src/api/index.ts

@@ -209,7 +209,10 @@ class RequestHttp {
   delete<T>(url: string, params?: any, _object = {}): Promise<ResultData<T>> {
     return this.service.delete(url, { params, ..._object })
   }
-  download(url: string, params?: object, _object = {}): Promise<BlobPart> {
+  downloadGet(url: string, params?: object, _object = {}): Promise<BlobPart> {
+    return this.service.get(url, { ..._object, responseType: 'blob' })
+  }
+  downloadPost(url: string, params?: object, _object = {}): Promise<BlobPart> {
     return this.service.post(url, params, { ..._object, responseType: 'blob' })
   }
 }

+ 3 - 3
src/api/modules/monitor/logininfor.ts

@@ -41,7 +41,7 @@ export const updateLogininforApi = (data: any) => {
  * @param infoId infoId
  * @returns returns
  */
-export const delLogininforApi = ({ infoId }: { infoId: any }) => {
+export const delLogininforApi = (infoId: any) => {
   return http.delete<any>(`/monitor/logininfor/${infoId}`)
 }
 
@@ -50,7 +50,7 @@ export const delLogininforApi = ({ infoId }: { infoId: any }) => {
  * @returns returns
  */
 export const importTemplateApi = () => {
-  return http.download('/monitor/logininfor/importTemplate', {})
+  return http.downloadPost('/monitor/logininfor/importTemplate', {})
 }
 
 /**
@@ -66,5 +66,5 @@ export const importDataApi = (data: any) => {
  * @returns returns
  */
 export const exportApi = (data: any) => {
-  return http.download('/monitor/logininfor/export', data)
+  return http.downloadPost('/monitor/logininfor/export', data)
 }

+ 3 - 3
src/api/modules/monitor/operlog.ts

@@ -41,7 +41,7 @@ export const updateOperlogApi = (data: any) => {
  * @param operId operId
  * @returns returns
  */
-export const delOperlogApi = ({ operId }: { operId: any }) => {
+export const delOperlogApi = (operId: any) => {
   return http.delete<any>(`/monitor/operlog/${operId}`)
 }
 
@@ -50,7 +50,7 @@ export const delOperlogApi = ({ operId }: { operId: any }) => {
  * @returns returns
  */
 export const importTemplateApi = () => {
-  return http.download('/monitor/operlog/importTemplate', {})
+  return http.downloadPost('/monitor/operlog/importTemplate', {})
 }
 
 /**
@@ -66,5 +66,5 @@ export const importDataApi = (data: any) => {
  * @returns returns
  */
 export const exportApi = (data: any) => {
-  return http.download('/monitor/operlog/export', data)
+  return http.downloadPost('/monitor/operlog/export', data)
 }

+ 2 - 2
src/api/modules/system/dept.ts

@@ -50,7 +50,7 @@ export const delDeptApi = (deptId: any) => {
  * @returns returns
  */
 export const importTemplateApi = () => {
-  return http.download('/system/dept/importTemplate', {})
+  return http.downloadPost('/system/dept/importTemplate', {})
 }
 
 /**
@@ -66,5 +66,5 @@ export const importDataApi = (data: any) => {
  * @returns returns
  */
 export const exportApi = (data: any) => {
-  return http.download('/system/dept/export', data)
+  return http.downloadPost('/system/dept/export', data)
 }

+ 3 - 3
src/api/modules/system/dict.ts

@@ -41,7 +41,7 @@ export const updateDictApi = (data: any) => {
  * @param dictId dictId
  * @returns returns
  */
-export const delDictApi = ({ id }: { id: any }) => {
+export const delDictApi = (id: any) => {
   return http.delete<any>(`/system/dict/type/${id}`)
 }
 
@@ -50,7 +50,7 @@ export const delDictApi = ({ id }: { id: any }) => {
  * @returns returns
  */
 export const importTemplateApi = () => {
-  return http.download('/system/dict/type/importTemplate', {})
+  return http.downloadPost('/system/dict/type/importTemplate', {})
 }
 
 /**
@@ -66,7 +66,7 @@ export const importDataApi = (data: any) => {
  * @returns returns
  */
 export const exportApi = (data: any) => {
-  return http.download('/system/dict/type/export', data)
+  return http.downloadPost('/system/dict/type/export', data)
 }
 
 /**

+ 2 - 2
src/api/modules/system/dictData.ts

@@ -50,7 +50,7 @@ export const updateDataApi = (data: any) => {
  * @param dictCode dictCode
  * @returns returns
  */
-export const delDataApi = ({ id }: { id: any }) => {
+export const delDataApi = (id: any) => {
   return http.delete<any>(`/system/dict/data/${id}`)
 }
 
@@ -59,5 +59,5 @@ export const delDataApi = ({ id }: { id: any }) => {
  * @returns returns
  */
 export const exportApi = (data: any) => {
-  return http.download('/system/dict/data/export', data)
+  return http.downloadPost('/system/dict/data/export', data)
 }

+ 2 - 2
src/api/modules/system/menu.ts

@@ -55,7 +55,7 @@ export const delMenuApi = (menuId: any) => {
  * @returns returns
  */
 export const importTemplateApi = () => {
-  return http.download('/system/menu/importTemplate', {})
+  return http.downloadPost('/system/menu/importTemplate', {})
 }
 
 /**
@@ -71,7 +71,7 @@ export const importDataApi = (data: any) => {
  * @returns returns
  */
 export const exportApi = (data: any) => {
-  return http.download('/system/menu/export', data)
+  return http.downloadPost('/system/menu/export', data)
 }
 
 /**

+ 3 - 3
src/api/modules/system/post.ts

@@ -41,7 +41,7 @@ export const updatePostApi = (data: any) => {
  * @param postId postId
  * @returns returns
  */
-export const delPostApi = ({ postId }: { postId: any }) => {
+export const delPostApi = (postId: any) => {
   return http.delete<any>(`/system/post/${postId}`)
 }
 
@@ -50,7 +50,7 @@ export const delPostApi = ({ postId }: { postId: any }) => {
  * @returns returns
  */
 export const importTemplateApi = () => {
-  return http.download('/system/post/importTemplate', {})
+  return http.downloadPost('/system/post/importTemplate', {})
 }
 
 /**
@@ -66,5 +66,5 @@ export const importDataApi = (data: any) => {
  * @returns returns
  */
 export const exportApi = (data: any) => {
-  return http.download('/system/post/export', data)
+  return http.downloadPost('/system/post/export', data)
 }

+ 3 - 3
src/api/modules/system/role.ts

@@ -41,7 +41,7 @@ export const updateRoleApi = (data: any) => {
  * @param roleId roleId
  * @returns returns
  */
-export const delRoleApi = ({ roleId }: { roleId: any }) => {
+export const delRoleApi = (roleId: any) => {
   return http.delete<any>(`/system/role/${roleId}`)
 }
 
@@ -50,7 +50,7 @@ export const delRoleApi = ({ roleId }: { roleId: any }) => {
  * @returns returns
  */
 export const importTemplateApi = () => {
-  return http.download('/system/role/importTemplate', {})
+  return http.downloadPost('/system/role/importTemplate', {})
 }
 
 /**
@@ -66,5 +66,5 @@ export const importDataApi = (data: any) => {
  * @returns returns
  */
 export const exportApi = (data: any) => {
-  return http.download('/system/role/export', data)
+  return http.downloadPost('/system/role/export', data)
 }

+ 2 - 2
src/api/modules/system/user.ts

@@ -66,7 +66,7 @@ export const changeUserStatus = (data: any) => {
  * @returns returns
  */
 export const importTemplateApi = () => {
-  return http.download('/system/user/importTemplate', {})
+  return http.downloadPost('/system/user/importTemplate', {})
 }
 
 /**
@@ -82,5 +82,5 @@ export const importDataApi = (params: FormData) => {
  * @returns returns
  */
 export const exportApi = (data: any) => {
-  return http.download('/system/user/export', data)
+  return http.downloadPost('/system/user/export', data)
 }

+ 1 - 1
src/api/modules/tool/gen.ts

@@ -87,5 +87,5 @@ export const synchDbApi = (tableName: any) => {
  * @returns returns
  */
 export const batchGenCodeApi = (tableId: any) => {
-  return http.get<any>(`/tool/gen/batchGenCode?tables=${tableId}`)
+  return http.downloadGet(`/tool/gen/batchGenCode?tables=${tableId}`)
 }

+ 26 - 9
src/components/ImportExcel/index.vue

@@ -1,9 +1,13 @@
 <template>
-  <el-dialog v-model="dialogVisible" :title="`导入${parameter.title}`" :destroy-on-close="true" width="580px" draggable>
+  <el-dialog
+    v-model="dialogVisible"
+    :width="parameter.width"
+    :top="parameter.top"
+    :title="`${parameter.title}`"
+    :destroy-on-close="true"
+    draggable
+  >
     <el-form class="drawer-multiColumn-form" label-width="100px">
-      <el-form-item label="模板下载">
-        <el-button type="primary" :icon="Download" @click="downloadTemp"> 点击下载 </el-button>
-      </el-form-item>
       <el-form-item label="文件上传">
         <el-upload
           ref="uploadRef"
@@ -29,14 +33,24 @@
           </slot>
           <template #tip>
             <slot name="tip">
-              <div class="el-upload__tip">请上传 .xls , .xlsx 标准格式文件,文件最大为 {{ parameter.fileSize }}M</div>
+              <div class="el-upload__tip text-center">
+                <el-checkbox v-model="isCover">是否更新已存在的数据</el-checkbox>
+              </div>
+              <div class="el-upload__tip text-center">
+                请上传 .xls , .xlsx 标准格式文件,文件最大为 {{ parameter.fileSize }}M。
+                <el-link
+                  type="primary"
+                  :underline="false"
+                  style="font-size: 12px; vertical-align: baseline"
+                  @click="downloadTemp"
+                >
+                  模板下载
+                </el-link>
+              </div>
             </slot>
           </template>
         </el-upload>
       </el-form-item>
-      <el-form-item label="数据覆盖">
-        <el-switch v-model="isCover" />
-      </el-form-item>
     </el-form>
     <template #footer>
       <span class="dialog-footer">
@@ -50,13 +64,14 @@
 <script setup lang="ts" name="ImportExcel">
 import { ref } from 'vue'
 import { useDownload } from '@/hooks/useDownload'
-import { Download } from '@element-plus/icons-vue'
 import { ElNotification, UploadRequestOptions, UploadRawFile, UploadInstance } from 'element-plus'
 
 export interface ExcelParameterProps {
   title: string // 标题
   fileSize?: number // 上传文件的大小
   limit?: number // 上传文件个数
+  top?: string // 离顶部距离
+  width?: number // 弹框宽度
   multiple?: boolean // 是否支持多选文件
   fileType?: File.ExcelMimeType[] // 上传文件的类型
   tempApi?: (params: any) => Promise<any> // 下载模板的Api
@@ -72,6 +87,8 @@ const dialogVisible = ref(false)
 const parameter = ref<ExcelParameterProps>({
   title: '',
   limit: 1,
+  width: 500,
+  top: '20vh',
   multiple: false,
   fileSize: 5,
   fileType: ['application/vnd.ms-excel', 'application/vnd.openxmlformats-officedocument.spreadsheetml.sheet']

+ 3 - 3
src/components/ProForm/components/Item.vue

@@ -2,7 +2,7 @@
   <component
     :is="elTagNameValue"
     v-bind="item.compOptions"
-    v-model.trim="_formModel[handleProp(item.formItemOptions.prop)]"
+    v-model.trim="_formModel[handleProp(item.prop)]"
     :data="['tree-select'].includes(item.compOptions.elTagName!) ? itemEnum : []"
     :options="['cascader', 'select-v2'].includes(item.compOptions.elTagName!) ? itemEnum : []"
   >
@@ -63,13 +63,13 @@ const _formModel = computed(() => props.formModel)
 const elTagNameValue = computed(() => {
   const val = props.item.compOptions.elTagName
   if ('radio-button' == val) return `el-radio-group`
-  return `el-${val}` || 'input'
+  return `el-${val || 'input'}`
 })
 // 接收 enumMap (el 为 select-v2 需单独处理 enumData)
 const enumMap = inject('enumMap', ref(new Map()))
 const itemEnum = computed(() => {
   // CompAttributes
-  let enumData = enumMap.value.get(props.item.compOptions?.enumKey || props.item.formItemOptions.prop)
+  let enumData = enumMap.value.get(props.item.compOptions?.enumKey || props.item.prop)
   if (!enumData) return []
   // 返回对象类型
   if (props.item.compOptions.elTagName === 'tree-select') {

+ 13 - 20
src/components/ProForm/index.vue

@@ -2,30 +2,25 @@
   <component :is="'el-form'" v-bind="_formOptions" ref="proFormRef" :model="formModel">
     <el-row :gutter="5">
       <template v-for="item in itemsOptions" :key="item.prop">
-        <el-col :span="item.formItemOptions.span || 24" g>
-          <component :is="'el-form-item'" v-bind="item.formItemOptions" v-if="show(item.formItemOptions.show)">
+        <el-col :span="item.span || 24" g>
+          <component :is="'el-form-item'" v-bind="item" v-if="show(item.show)">
             <template #label>
               <el-space :size="4">
-                <span class="label-span">{{ `${item.formItemOptions.label}` }}</span>
+                <span class="label-span">{{ `${item.label}` }}</span>
                 <!-- <el-tooltip :content="item.formItem.label" placement="top" :disabled="isShowTooltip">
                   <span class="label-span" @mouseenter="visibleTooltip">{{ `${item.formItem.label}` }}</span>
                 </el-tooltip> -->
-                <el-tooltip
-                  v-if="item.formItemOptions?.tooltip"
-                  effect="dark"
-                  :content="item.formItemOptions?.tooltip"
-                  placement="top"
-                >
+                <el-tooltip v-if="item?.tooltip" effect="dark" :content="item?.tooltip" placement="top">
                   <i :class="'iconfont icon-yiwen'"></i>
                 </el-tooltip>
               </el-space>
               <span>{{ `${_formOptions.labelSuffix}` }}</span>
             </template>
             <template v-if="item.compOptions.elTagName === 'slot'">
-              <slot :name="item.formItemOptions.prop" :form-model="formModel"></slot>
+              <slot :name="item.prop" :form-model="formModel"></slot>
             </template>
             <template v-if="item.compOptions.elTagName === 'icon'">
-              <SelectIcon v-model:icon-value="formModel[item.formItemOptions.prop]" />
+              <SelectIcon v-model:icon-value="formModel[item.prop]" />
             </template>
             <Item v-else :item="item" :form-model="formModel" />
           </component>
@@ -99,24 +94,24 @@ interface EmitEvent {
   (e: 'cancel'): void
 }
 const enumMap = ref(new Map<string, { [key: string]: any }[]>())
-const setEnumMap = async ({ formItemOptions, compOptions }: ProForm.ItemsOptions) => {
-  const prop = compOptions?.enumKey || formItemOptions?.prop
+const setEnumMap = async ({ prop, compOptions }: ProForm.ItemsOptions) => {
+  const props = compOptions?.enumKey || prop
   const enumValue = compOptions?.enum
   if (!enumValue) return
 
   // 如果当前 enumMap 存在相同的值 return
-  if (enumMap.value.has(prop!) && (typeof enumValue === 'function' || enumMap.value.get(prop!) === enumValue)) return
+  if (enumMap.value.has(props!) && (typeof enumValue === 'function' || enumMap.value.get(props!) === enumValue)) return
 
   // 当前 enum 为静态数据,则直接存储到 enumMap
-  if (typeof enumValue !== 'function') return enumMap.value.set(prop!, unref(enumValue!))
+  if (typeof enumValue !== 'function') return enumMap.value.set(props!, unref(enumValue!))
 
   // 为了防止接口执行慢,而存储慢,导致重复请求,所以预先存储为[],接口返回后再二次存储
-  enumMap.value.set(prop!, [])
+  enumMap.value.set(props!, [])
 
   // 当前 enum 为后台数据需要请求数据,则调用该请求接口,并存储到 enumMap
   let { data } = await enumValue()
 
-  enumMap.value.set(prop!, data)
+  enumMap.value.set(props!, data)
 }
 
 // 注入 enumMap
@@ -134,9 +129,7 @@ watch(
     props.itemsOptions.map((item: ProForm.ItemsOptions) => {
       // 如果类型为checkbox,默认值需要设置一个空数组
       const value = ['checkbox', 'transfer'].includes(item.compOptions.elTagName!) ? [] : ''
-      props.model
-        ? (formModel.value = props.model)
-        : (formModel.value[item.formItemOptions.prop] = item.formItemOptions.value || value)
+      props.model ? (formModel.value = props.model) : (formModel.value[item.prop] = item.value || value)
     })
   },
   { immediate: true }

+ 1 - 1
src/layouts/components/Footer/index.vue

@@ -1,6 +1,6 @@
 <template>
   <div class="footer flx-center">
-    <a href="https://gitee.com/gaokunw/kimi-web" target="_blank"> 2023 © taais web By gaokunw Technology. </a>
+    <a href="https://gitee.com/gaokunw/kimi-web" target="_blank"> 2023 © km-Admin By gaokunw Technology. </a>
   </div>
 </template>
 

+ 11 - 1
src/typings/ProForm.d.ts

@@ -48,7 +48,17 @@ declare namespace ProForm {
   }
 
   interface ItemsOptions {
-    formItemOptions: FormItem // form-item 配置项
+    /** form-item 配置项 */
+    label?: string
+    labelWidth?: string | number // 标签宽度,例如 '50px'。 可以使用 auto。
+    prop: string // prop
+    value?: any // 默认值
+    tooltip?: string // 问号,tooltip提示
+    required?: boolean
+    rules?: FormItemRule[]
+    span?: number // 表单col宽度
+    show?: (params?: any) => Promise<any> | boolean | string // 是否显示 默认显示
+    /** 表单组件配置项 */
     compOptions: CompAttributes // 表单组件配置项
   }
   interface FormItem {

+ 2 - 1
src/utils/index.ts

@@ -291,9 +291,10 @@ export function filterEnum(callValue: any, enumData?: any, fieldNames?: FieldNam
   let filterData: { [key: string]: any } = {}
   // 判断 enumData 是否为数组
   if (Array.isArray(enumData)) filterData = findItemNested(enumData, callValue, value, children)
+
   // 判断是否输出的结果为 tag 类型
   if (type == 'tag') {
-    return filterData?.tagType ? filterData.tagType : ''
+    return filterData?.listClass ? filterData.listClass : 'primary'
   } else {
     return filterData ? filterData[label] : '--'
   }

+ 45 - 81
src/views/index.vue

@@ -79,11 +79,9 @@ const enumData = [
 ]
 let items: ProForm.ItemsOptions[] = [
   {
-    formItemOptions: {
-      label: '单行输入框',
-      prop: 'username',
-      rules: [{ required: true, message: '请选择步长', trigger: 'blur' }]
-    },
+    label: '单行输入框',
+    prop: 'username',
+    rules: [{ required: true, message: '请选择步长', trigger: 'blur' }],
     compOptions: {
       elTagName: 'input',
       clearable: true,
@@ -91,11 +89,9 @@ let items: ProForm.ItemsOptions[] = [
     }
   },
   {
-    formItemOptions: {
-      label: '多行输入框',
-      prop: 'usernames',
-      rules: [{ required: true, message: '请选择步长', trigger: 'blur' }]
-    },
+    label: '多行输入框',
+    prop: 'usernames',
+    rules: [{ required: true, message: '请选择步长', trigger: 'blur' }],
     compOptions: {
       elTagName: 'input',
       type: 'textarea',
@@ -104,12 +100,10 @@ let items: ProForm.ItemsOptions[] = [
     }
   },
   {
-    formItemOptions: {
-      label: '插槽',
-      prop: 'username1',
-      required: true,
-      tooltip: '这是自定义插槽'
-    },
+    label: '插槽',
+    prop: 'username1',
+    required: true,
+    tooltip: '这是自定义插槽',
     compOptions: {
       elTagName: 'slot',
       clearable: true,
@@ -117,65 +111,53 @@ let items: ProForm.ItemsOptions[] = [
     }
   },
   {
-    formItemOptions: {
-      label: '单选',
-      prop: 'sdsds',
-      required: true
-    },
+    label: '单选',
+    prop: 'sdsds',
+    required: true,
     compOptions: {
       elTagName: 'radio-group',
       enum: enumData
     }
   },
   {
-    formItemOptions: {
-      label: '复选',
-      prop: 'sdssssds',
-      required: true
-    },
+    label: '复选',
+    prop: 'sdssssds',
+    required: true,
     compOptions: {
       elTagName: 'checkbox-group',
       enum: enumData
     }
   },
   {
-    formItemOptions: {
-      label: '下拉',
-      prop: 'select',
-      required: true
-    },
+    label: '下拉',
+    prop: 'select',
+    required: true,
     compOptions: {
       elTagName: 'select',
       enum: enumData
     }
   },
   {
-    formItemOptions: {
-      label: '下拉树',
-      prop: 'treeSelect',
-      required: true
-    },
+    label: '下拉树',
+    prop: 'treeSelect',
+    required: true,
     compOptions: {
       elTagName: 'tree-select',
       enum: treeData
     }
   },
   {
-    formItemOptions: {
-      label: '虚拟下拉',
-      prop: 'selectV2',
-      required: true
-    },
+    label: '虚拟下拉',
+    prop: 'selectV2',
+    required: true,
     compOptions: {
       elTagName: 'select-v2',
       enum: optionsData
     }
   },
   {
-    formItemOptions: {
-      label: '级联',
-      prop: 'jilian'
-    },
+    label: '级联',
+    prop: 'jilian',
     compOptions: {
       elTagName: 'cascader',
       enum: treeData,
@@ -185,20 +167,16 @@ let items: ProForm.ItemsOptions[] = [
     }
   },
   {
-    formItemOptions: {
-      label: '日期',
-      prop: 'datePicker'
-    },
+    label: '日期',
+    prop: 'datePicker',
     compOptions: {
       elTagName: 'date-picker',
       type: 'date'
     }
   },
   {
-    formItemOptions: {
-      label: '日期范围',
-      prop: 'datePicker'
-    },
+    label: '日期范围',
+    prop: 'datePicker',
     compOptions: {
       elTagName: 'date-picker',
       type: 'daterange',
@@ -208,66 +186,52 @@ let items: ProForm.ItemsOptions[] = [
     }
   },
   {
-    formItemOptions: {
-      label: '数字框',
-      prop: 'iNumber'
-    },
+    label: '数字框',
+    prop: 'iNumber',
     compOptions: {
       elTagName: 'input-number',
       min: 1
     }
   },
   {
-    formItemOptions: {
-      label: '评分',
-      prop: 'rate'
-    },
+    label: '评分',
+    prop: 'rate',
     compOptions: {
       elTagName: 'rate'
     }
   },
   {
-    formItemOptions: {
-      label: '滑块',
-      prop: 'slider'
-    },
+    label: '滑块',
+    prop: 'slider',
     compOptions: {
       elTagName: 'slider',
       step: 10
     }
   },
   {
-    formItemOptions: {
-      label: '开关',
-      prop: 'switch'
-    },
+    label: '开关',
+    prop: 'switch',
     compOptions: {
       elTagName: 'switch'
     }
   },
   {
-    formItemOptions: {
-      label: '时间选择器',
-      prop: 'timePicker'
-    },
+    label: '时间选择器',
+    prop: 'timePicker',
     compOptions: {
       elTagName: 'time-picker'
     }
   },
   {
-    formItemOptions: {
-      label: '时间下拉',
-      prop: 'timeSelect'
-    },
+    label: '时间下拉',
+    prop: 'timeSelect',
     compOptions: {
       elTagName: 'time-select'
     }
   },
   {
-    formItemOptions: {
-      label: '穿梭框',
-      prop: 'transfer1'
-    },
+    label: '穿梭框',
+    prop: 'transfer1',
     compOptions: {
       elTagName: 'slot'
     }

+ 1 - 1
src/views/login/index.vue

@@ -8,7 +8,7 @@
       <div class="login-form">
         <div class="login-logo">
           <img class="login-icon" src="@/assets/images/logo.svg" alt="" />
-          <h2 class="logo-text">taais</h2>
+          <h2 class="logo-text">KM-Admin</h2>
         </div>
         <LoginForm />
       </div>

+ 10 - 158
src/views/monitor/logininfor/index.vue

@@ -1,38 +1,6 @@
 <template>
   <div class="table-box">
-    <ProTable
-      ref="proTable"
-      :columns="columns"
-      row-key="infoId"
-      :request-api="listLogininforApi"
-      :init-param="initParam"
-      :data-callback="dataCallback"
-    >
-      <!-- 表格 header 按钮 -->
-      <template #tableHeader="scope">
-        <el-button
-          type="primary"
-          v-auth="['monitor:logininfor:add']"
-          :icon="CirclePlus"
-          @click="openDialog(1, '系统访问记录新增')"
-        >
-          新增
-        </el-button>
-        <el-button type="primary" v-auth="['monitor:logininfor:import']" :icon="Upload" plain @click="batchAdd"> 导入 </el-button>
-        <el-button type="primary" v-auth="['monitor:logininfor:export']" :icon="Download" plain @click="downloadFile">
-          导出
-        </el-button>
-        <el-button
-          type="danger"
-          v-auth="['system:user:remove']"
-          :icon="Delete"
-          plain
-          :disabled="!scope.isSelected"
-          @click="batchDelete(scope.selectedListIds)"
-        >
-          批量删除
-        </el-button>
-      </template>
+    <ProTable ref="proTable" :columns="columns" row-key="infoId" :request-api="listLogininforApi" :init-param="initParam">
     </ProTable>
     <FormDialog ref="formDialogRef" />
     <ImportExcel ref="dialogRef" />
@@ -41,24 +9,11 @@
 
 <script setup lang="tsx" name="Logininfor">
 import { ref, reactive } from 'vue'
-import { useHandleData } from '@/hooks/useHandleData'
-import { useDownload } from '@/hooks/useDownload'
-import { ElMessageBox } from 'element-plus'
 import ProTable from '@/components/ProTable/index.vue'
 import ImportExcel from '@/components/ImportExcel/index.vue'
 import FormDialog from '@/components/DialogOld/form.vue'
 import { ProTableInstance, ColumnProps } from '@/components/ProTable/interface'
-import { Delete, Download, Upload, CirclePlus } from '@element-plus/icons-vue'
-import {
-  listLogininforApi,
-  delLogininforApi,
-  addLogininforApi,
-  updateLogininforApi,
-  importTemplateApi,
-  importDataApi,
-  exportApi,
-  getLogininforApi
-} from '@/api/modules/monitor/logininfor'
+import { listLogininforApi } from '@/api/modules/monitor/logininfor'
 import { getDictsApi } from '@/api/modules/system/dictData'
 
 // ProTable 实例
@@ -67,101 +22,48 @@ const proTable = ref<ProTableInstance>()
 // 如果表格需要初始化请求参数,直接定义传给 ProTable (之后每次请求都会自动带上该参数,此参数更改之后也会一直带上,改变此参数会自动刷新表格数据)
 const initParam = reactive({ type: 1 })
 
-// dataCallback 是对于返回的表格数据做处理,如果你后台返回的数据不是 list && total && pageNum && pageSize 这些字段,可以在这里进行处理成这些字段
-const dataCallback = (data: any) => {
-  return data
-}
-
-// 批量删除系统访问记录信息
-const batchDelete = async (id: string[]) => {
-  await useHandleData(delLogininforApi, { id }, '删除所选系统访问记录信息')
-  proTable.value?.clearSelection()
-  proTable.value?.getTableList()
-}
-
-// 导出系统访问记录列表
-const downloadFile = async () => {
-  ElMessageBox.confirm('确认导出系统访问记录数据?', '温馨提示', { type: 'warning' }).then(() =>
-    useDownload(exportApi, '系统访问记录列表', proTable.value?.searchParam)
-  )
-}
-
 // 批量添加系统访问记录
 const dialogRef = ref<InstanceType<typeof ImportExcel> | null>(null)
-const batchAdd = () => {
-  const params = {
-    title: '系统访问记录',
-    tempApi: importTemplateApi,
-    importApi: importDataApi,
-    getTableList: proTable.value?.getTableList
-  }
-  dialogRef.value?.acceptParams(params)
-}
 
 const formDialogRef = ref<InstanceType<typeof FormDialog> | null>(null)
-// 打开弹框的功能
-const openDialog = async (type: number, title: string, row?: any) => {
-  let res = { data: {} }
-  if (row?.infoId) {
-    res = await getLogininforApi(row?.infoId || null)
-  }
-  // 重置表单
-  setFieldList()
-  const params = {
-    title,
-    width: 580,
-    isEdit: type !== 3,
-    fieldList: fieldList,
-    model: type == 1 ? {} : res.data,
-    api: type == 1 ? addLogininforApi : updateLogininforApi,
-    getTableList: proTable.value?.getTableList
-  }
-  formDialogRef.value?.openDialog(params)
-}
 
 // 表格配置项
 const columns = reactive<ColumnProps<any>[]>([
-  { type: 'selection', fixed: 'left', width: 70 },
   { prop: 'infoId', label: '访问ID' },
   {
     prop: 'userName',
     label: '用户账号',
     search: {
       el: 'input'
-    },
-    width: 120
+    }
   },
   {
     prop: 'ipaddr',
     label: '登录IP地址',
     search: {
       el: 'input'
-    },
-    width: 120
+    }
   },
   {
     prop: 'loginLocation',
     label: '登录地点',
     search: {
       el: 'input'
-    },
-    width: 120
+    }
   },
   {
     prop: 'browser',
     label: '浏览器类型',
     search: {
       el: 'input'
-    },
-    width: 120
+    }
   },
   {
     prop: 'os',
     label: '操作系统',
     search: {
       el: 'input'
-    },
-    width: 120
+    }
   },
   {
     prop: 'status',
@@ -174,16 +76,14 @@ const columns = reactive<ColumnProps<any>[]>([
     },
     search: {
       el: 'input'
-    },
-    width: 120
+    }
   },
   {
     prop: 'msg',
     label: '提示消息',
     search: {
       el: 'input'
-    },
-    width: 120
+    }
   },
   {
     prop: 'loginTime',
@@ -191,55 +91,7 @@ const columns = reactive<ColumnProps<any>[]>([
     search: {
       el: 'date-picker',
       props: { type: 'datetimerange', valueFormat: 'YYYY-MM-DD HH:mm:ss' }
-    },
-    width: 120
+    }
   }
 ])
-// 表单配置项
-let fieldList: Form.FieldItem[] = []
-const setFieldList = () => {
-  fieldList = [
-    {
-      label: '用户账号',
-      field: 'userName',
-      placeholder: '请输入用户账号'
-    },
-    {
-      label: '登录IP地址',
-      field: 'ipaddr',
-      placeholder: '请输入登录IP地址'
-    },
-    {
-      label: '登录地点',
-      field: 'loginLocation',
-      placeholder: '请输入登录地点'
-    },
-    {
-      label: '浏览器类型',
-      field: 'browser',
-      placeholder: '请输入浏览器类型'
-    },
-    {
-      label: '操作系统',
-      field: 'os',
-      placeholder: '请输入操作系统'
-    },
-    {
-      label: '登录状态',
-      field: 'status',
-      placeholder: '请输入登录状态'
-    },
-    {
-      label: '提示消息',
-      field: 'msg',
-      placeholder: '请输入提示消息'
-    },
-    {
-      label: '访问时间',
-      field: 'loginTime',
-      type: 'date-picker',
-      placeholder: '请选择访问时间'
-    }
-  ]
-}
 </script>

+ 19 - 250
src/views/monitor/operlog/index.vue

@@ -1,83 +1,15 @@
 <template>
   <div class="table-box">
-    <ProTable
-      ref="proTable"
-      :columns="columns"
-      row-key="operId"
-      :request-api="listOperlogApi"
-      :init-param="initParam"
-      :data-callback="dataCallback"
-    >
-      <!-- 表格 header 按钮 -->
-      <template #tableHeader="scope">
-        <el-button type="primary" v-auth="['monitor:operlog:add']" :icon="CirclePlus" @click="openDialog(1, '操作日志记录新增')">
-          新增
-        </el-button>
-        <el-button type="primary" v-auth="['monitor:operlog:import']" :icon="Upload" plain @click="batchAdd"> 导入 </el-button>
-        <el-button type="primary" v-auth="['monitor:operlog:export']" :icon="Download" plain @click="downloadFile">
-          导出
-        </el-button>
-        <el-button
-          type="danger"
-          v-auth="['system:user:remove']"
-          :icon="Delete"
-          plain
-          :disabled="!scope.isSelected"
-          @click="batchDelete(scope.selectedListIds)"
-        >
-          批量删除
-        </el-button>
-      </template>
-      <!-- 表格操作 -->
-      <template #operation="scope">
-        <el-button
-          type="primary"
-          link
-          :icon="View"
-          v-auth="['monitor:operlog:query']"
-          @click="openDialog(3, '操作日志记录查看', scope.row)"
-        >
-          查看
-        </el-button>
-        <el-button
-          type="primary"
-          link
-          :icon="EditPen"
-          v-auth="['monitor:operlog:edit']"
-          @click="openDialog(2, '操作日志记录编辑', scope.row)"
-        >
-          编辑
-        </el-button>
-        <el-button type="primary" link :icon="Delete" v-auth="['monitor:operlog:remove']" @click="deleteOperlog(scope.row)">
-          删除
-        </el-button>
-      </template>
+    <ProTable ref="proTable" :columns="columns" row-key="operId" :request-api="listOperlogApi" :init-param="initParam">
     </ProTable>
-    <FormDialog ref="formDialogRef" />
-    <ImportExcel ref="dialogRef" />
   </div>
 </template>
 
 <script setup lang="tsx" name="Operlog">
 import { ref, reactive } from 'vue'
-import { useHandleData } from '@/hooks/useHandleData'
-import { useDownload } from '@/hooks/useDownload'
-import { ElMessageBox } from 'element-plus'
 import ProTable from '@/components/ProTable/index.vue'
-import ImportExcel from '@/components/ImportExcel/index.vue'
-import FormDialog from '@/components/DialogOld/form.vue'
 import { ProTableInstance, ColumnProps } from '@/components/ProTable/interface'
-import { Delete, EditPen, Download, Upload, View, CirclePlus } from '@element-plus/icons-vue'
-import {
-  listOperlogApi,
-  delOperlogApi,
-  addOperlogApi,
-  updateOperlogApi,
-  importTemplateApi,
-  importDataApi,
-  exportApi,
-  getOperlogApi
-} from '@/api/modules/monitor/operlog'
+import { listOperlogApi } from '@/api/modules/monitor/operlog'
 
 // ProTable 实例
 const proTable = ref<ProTableInstance>()
@@ -85,179 +17,106 @@ const proTable = ref<ProTableInstance>()
 // 如果表格需要初始化请求参数,直接定义传给 ProTable (之后每次请求都会自动带上该参数,此参数更改之后也会一直带上,改变此参数会自动刷新表格数据)
 const initParam = reactive({ type: 1 })
 
-// dataCallback 是对于返回的表格数据做处理,如果你后台返回的数据不是 list && total && pageNum && pageSize 这些字段,可以在这里进行处理成这些字段
-const dataCallback = (data: any) => {
-  return data
-}
-
-// 删除操作日志记录信息
-const deleteOperlog = async (params: any) => {
-  await useHandleData(delOperlogApi, { id: [params.operId] }, `删除【${params.id}】操作日志记录`)
-  proTable.value?.getTableList()
-}
-
-// 批量删除操作日志记录信息
-const batchDelete = async (id: string[]) => {
-  await useHandleData(delOperlogApi, { id }, '删除所选操作日志记录信息')
-  proTable.value?.clearSelection()
-  proTable.value?.getTableList()
-}
-
-// 导出操作日志记录列表
-const downloadFile = async () => {
-  ElMessageBox.confirm('确认导出操作日志记录数据?', '温馨提示', { type: 'warning' }).then(() =>
-    useDownload(exportApi, '操作日志记录列表', proTable.value?.searchParam)
-  )
-}
-
-// 批量添加操作日志记录
-const dialogRef = ref<InstanceType<typeof ImportExcel> | null>(null)
-const batchAdd = () => {
-  const params = {
-    title: '操作日志记录',
-    tempApi: importTemplateApi,
-    importApi: importDataApi,
-    getTableList: proTable.value?.getTableList
-  }
-  dialogRef.value?.acceptParams(params)
-}
-
-const formDialogRef = ref<InstanceType<typeof FormDialog> | null>(null)
-// 打开弹框的功能
-const openDialog = async (type: number, title: string, row?: any) => {
-  let res = { data: {} }
-  if (row?.operId) {
-    res = await getOperlogApi(row?.operId || null)
-  }
-  // 重置表单
-  setFieldList()
-  const params = {
-    title,
-    width: 580,
-    isEdit: type !== 3,
-    fieldList: fieldList,
-    model: type == 1 ? {} : res.data,
-    api: type == 1 ? addOperlogApi : updateOperlogApi,
-    getTableList: proTable.value?.getTableList
-  }
-  formDialogRef.value?.openDialog(params)
-}
-
 // 表格配置项
 const columns = reactive<ColumnProps<any>[]>([
-  { type: 'selection', fixed: 'left', width: 70 },
   { prop: 'operId', label: '日志主键' },
   {
     prop: 'title',
     label: '模块标题',
     search: {
       el: 'input'
-    },
-    width: 120
+    }
   },
   {
     prop: 'businessType',
     label: '业务类型',
     search: {
       el: 'input'
-    },
-    width: 120
+    }
   },
   {
     prop: 'method',
     label: '方法名称',
     search: {
       el: 'input'
-    },
-    width: 120
+    }
   },
   {
     prop: 'requestMethod',
     label: '请求方式',
     search: {
       el: 'input'
-    },
-    width: 120
+    }
   },
   {
     prop: 'operatorType',
     label: '操作类别',
     search: {
       el: 'input'
-    },
-    width: 120
+    }
   },
   {
     prop: 'operName',
     label: '操作人员',
     search: {
       el: 'input'
-    },
-    width: 120
+    }
   },
   {
     prop: 'deptName',
     label: '部门名称',
     search: {
       el: 'input'
-    },
-    width: 120
+    }
   },
   {
     prop: 'operUrl',
     label: '请求URL',
     search: {
       el: 'input'
-    },
-    width: 120
+    }
   },
   {
     prop: 'operIp',
     label: '主机地址',
     search: {
       el: 'input'
-    },
-    width: 120
+    }
   },
   {
     prop: 'operLocation',
     label: '操作地点',
     search: {
       el: 'input'
-    },
-    width: 120
+    }
   },
   {
     prop: 'operParam',
     label: '请求参数',
     search: {
       el: 'input'
-    },
-    width: 120
+    }
   },
   {
     prop: 'jsonResult',
     label: '返回参数',
     search: {
       el: 'input'
-    },
-    width: 120
+    }
   },
   {
     prop: 'status',
     label: '操作状态',
     search: {
       el: 'input'
-    },
-    width: 120
+    }
   },
   {
     prop: 'errorMsg',
     label: '错误消息',
     search: {
       el: 'input'
-    },
-    width: 120
+    }
   },
   {
     prop: 'operTime',
@@ -265,104 +124,14 @@ const columns = reactive<ColumnProps<any>[]>([
     search: {
       el: 'date-picker',
       props: { type: 'datetimerange', valueFormat: 'YYYY-MM-DD HH:mm:ss' }
-    },
-    width: 120
+    }
   },
   {
     prop: 'costTime',
     label: '消耗时间',
     search: {
       el: 'input'
-    },
-    width: 120
-  },
-  { prop: 'operation', label: '操作', width: 230, fixed: 'right' }
-])
-// 表单配置项
-let fieldList: Form.FieldItem[] = []
-const setFieldList = () => {
-  fieldList = [
-    {
-      label: '模块标题',
-      field: 'title',
-      placeholder: '请输入模块标题'
-    },
-    {
-      label: '业务类型',
-      field: 'businessType',
-      placeholder: '请输入业务类型'
-    },
-    {
-      label: '方法名称',
-      field: 'method',
-      placeholder: '请输入方法名称'
-    },
-    {
-      label: '请求方式',
-      field: 'requestMethod',
-      placeholder: '请输入请求方式'
-    },
-    {
-      label: '操作类别',
-      field: 'operatorType',
-      placeholder: '请输入操作类别'
-    },
-    {
-      label: '操作人员',
-      field: 'operName',
-      placeholder: '请输入操作人员'
-    },
-    {
-      label: '部门名称',
-      field: 'deptName',
-      placeholder: '请输入部门名称'
-    },
-    {
-      label: '请求URL',
-      field: 'operUrl',
-      placeholder: '请输入请求URL'
-    },
-    {
-      label: '主机地址',
-      field: 'operIp',
-      placeholder: '请输入主机地址'
-    },
-    {
-      label: '操作地点',
-      field: 'operLocation',
-      placeholder: '请输入操作地点'
-    },
-    {
-      label: '请求参数',
-      field: 'operParam',
-      placeholder: '请输入请求参数'
-    },
-    {
-      label: '返回参数',
-      field: 'jsonResult',
-      placeholder: '请输入返回参数'
-    },
-    {
-      label: '操作状态',
-      field: 'status',
-      placeholder: '请输入操作状态'
-    },
-    {
-      label: '错误消息',
-      field: 'errorMsg',
-      placeholder: '请输入错误消息'
-    },
-    {
-      label: '操作时间',
-      field: 'operTime',
-      type: 'date-picker',
-      placeholder: '请选择操作时间'
-    },
-    {
-      label: '消耗时间',
-      field: 'costTime',
-      placeholder: '请输入消耗时间'
     }
-  ]
-}
+  }
+])
 </script>

+ 1 - 1
src/views/system/dept/index.vue

@@ -80,7 +80,7 @@ const dataCallback = (res: any) => {
 
 // 删除用户信息
 const deleteDept = async (params: any) => {
-  await useHandleData(delDeptApi, { id: [params.id] }, `删除【${params.deptName}】部门`)
+  await useHandleData(delDeptApi, params.deptId, `删除【${params.deptName}】部门`)
   proTable.value?.getTableList()
 }
 

+ 5 - 8
src/views/system/dict/data.vue

@@ -1,6 +1,6 @@
 <template>
   <div class="table-box">
-    <ProTable ref="proTable" :columns="columns" :request-api="getTableList" :init-param="initParam" :data-callback="dataCallback">
+    <ProTable ref="proTable" :columns="columns" :request-api="getTableList" :init-param="initParam">
       <!-- 表格 header 按钮 -->
       <template #tableHeader="scope">
         <el-button type="primary" v-auth="['system/dict:data:add']" @click="openDialog(1, '字典数据新增')">新增</el-button>
@@ -85,10 +85,7 @@ const listClassOptions = ref([
   { value: 'warning', label: '警告' },
   { value: 'danger', label: '危险' }
 ])
-// dataCallback 是对于返回的表格数据做处理,如果你后台返回的数据不是 list && total && pageNum && pageSize 这些字段,可以在这里进行处理成这些字段
-const dataCallback = (data: any) => {
-  return data
-}
+
 const defaultDictType = ref('')
 const getTableList = async (params: any) => {
   const res = await getDictApi(route.params.dictId)
@@ -98,13 +95,13 @@ const getTableList = async (params: any) => {
 }
 // 删除用户信息
 const deleteDictData = async (params: any) => {
-  await useHandleData(delDataApi, { id: [params.dictId] }, `删除【${params.dictName}】字典数据`)
+  await useHandleData(delDataApi, params.dictCode, `删除【${params.dictName}】字典数据`)
   proTable.value?.getTableList()
 }
 
 // 批量删除用户信息
-const batchDelete = async (id: string[]) => {
-  await useHandleData(delDataApi, { id }, '删除所选字典数据信息')
+const batchDelete = async (ids: string[]) => {
+  await useHandleData(delDataApi, ids, '删除所选字典数据信息')
   proTable.value?.clearSelection()
   proTable.value?.getTableList()
 }

+ 4 - 12
src/views/system/dict/index.vue

@@ -1,6 +1,6 @@
 <template>
   <div class="table-box">
-    <ProTable ref="proTable" :columns="columns" :request-api="listDictApi" :init-param="initParam" :data-callback="dataCallback">
+    <ProTable ref="proTable" :columns="columns" :request-api="listDictApi">
       <!-- 表格 header 按钮 -->
       <template #tableHeader="scope">
         <el-button type="primary" v-auth="['system:dict:add']" @click="openDialog(1, '字典类型新增')">新增</el-button>
@@ -54,23 +54,15 @@ import { getDictsApi } from '@/api/modules/system/dictData'
 // ProTable 实例
 const proTable = ref<ProTableInstance>()
 
-// 如果表格需要初始化请求参数,直接定义传给 ProTable (之后每次请求都会自动带上该参数,此参数更改之后也会一直带上,改变此参数会自动刷新表格数据)
-const initParam = reactive({})
-
-// dataCallback 是对于返回的表格数据做处理,如果你后台返回的数据不是 list && total && pageNum && pageSize 这些字段,可以在这里进行处理成这些字段
-const dataCallback = (data: any) => {
-  return data
-}
-
 // 删除用户信息
 const deleteDict = async (params: any) => {
-  await useHandleData(delDictApi, { id: [params.dictId] }, `删除【${params.dictName}】字典类型`)
+  await useHandleData(delDictApi, params.dictId, `删除【${params.dictName}】字典类型`)
   proTable.value?.getTableList()
 }
 
 // 批量删除用户信息
-const batchDelete = async (id: string[]) => {
-  await useHandleData(delDictApi, { id }, '删除所选字典类型信息')
+const batchDelete = async (ids: string[]) => {
+  await useHandleData(delDictApi, ids, '删除所选字典类型信息')
   proTable.value?.clearSelection()
   proTable.value?.getTableList()
 }

+ 70 - 98
src/views/system/menu/index.vue

@@ -170,24 +170,20 @@ let itemsOptions: ProForm.ItemsOptions[] = []
 const setFieldList = () => {
   itemsOptions = [
     {
-      formItemOptions: {
-        label: '菜单类型',
-        prop: 'menuType',
-        span: 12,
-        rules: [{ required: true, message: '菜单类型不能为空', trigger: 'change' }]
-      },
+      label: '菜单类型',
+      prop: 'menuType',
+      span: 12,
+      rules: [{ required: true, message: '菜单类型不能为空', trigger: 'change' }],
       compOptions: {
         elTagName: 'radio-button',
         enum: menuTypeOptions.value
       }
     },
     {
-      formItemOptions: {
-        label: '菜单状态',
-        prop: 'status',
-        rules: [{ required: true, message: '菜单状态不能为空', trigger: 'change' }],
-        span: 12
-      },
+      label: '菜单状态',
+      prop: 'status',
+      rules: [{ required: true, message: '菜单状态不能为空', trigger: 'change' }],
+      span: 12,
       compOptions: {
         elTagName: 'radio-button',
         enum: () => getDictsApi('sys_normal_disable'),
@@ -196,11 +192,9 @@ const setFieldList = () => {
       }
     },
     {
-      formItemOptions: {
-        label: '上级菜单',
-        rules: [{ required: true, message: '上级菜单不能为空', trigger: 'change' }],
-        prop: 'parentId'
-      },
+      label: '上级菜单',
+      rules: [{ required: true, message: '上级菜单不能为空', trigger: 'change' }],
+      prop: 'parentId',
       compOptions: {
         elTagName: 'tree-select',
         placeholder: '请选择上级菜单',
@@ -210,23 +204,19 @@ const setFieldList = () => {
       }
     },
     {
-      formItemOptions: {
-        label: '菜单名称',
-        prop: 'menuName',
-        span: 12,
-        rules: [{ required: true, message: '菜单名称不能为空', trigger: 'blur' }]
-      },
+      label: '菜单名称',
+      prop: 'menuName',
+      span: 12,
+      rules: [{ required: true, message: '菜单名称不能为空', trigger: 'blur' }],
       compOptions: {
         elTagName: 'input',
         placeholder: '请输入菜单名称'
       }
     },
     {
-      formItemOptions: {
-        label: '显示排序',
-        prop: 'orderNum',
-        span: 12
-      },
+      label: '显示排序',
+      prop: 'orderNum',
+      span: 12,
       compOptions: {
         elTagName: 'input-number',
         min: 0,
@@ -234,27 +224,23 @@ const setFieldList = () => {
       }
     },
     {
-      formItemOptions: {
-        label: '图标',
-        prop: 'icon',
-        show: val => {
-          return val?.menuType !== 'F'
-        }
+      label: '图标',
+      prop: 'icon',
+      show: val => {
+        return val?.menuType !== 'F'
       },
       compOptions: {
         elTagName: 'icon'
       }
     },
     {
-      formItemOptions: {
-        label: '是否外链',
-        prop: 'isFrame',
-        span: 12,
-        show: val => {
-          return val?.menuType !== 'F'
-        },
-        tooltip: '选择是外链则路由地址需要以`http(s)://`开头'
+      label: '是否外链',
+      prop: 'isFrame',
+      span: 12,
+      show: val => {
+        return val?.menuType !== 'F'
       },
+      tooltip: '选择是外链则路由地址需要以`http(s)://`开头',
       compOptions: {
         elTagName: 'radio-button',
         enum: () => getDictsApi('sys_yes_no'),
@@ -264,14 +250,12 @@ const setFieldList = () => {
       }
     },
     {
-      formItemOptions: {
-        label: '显示状态',
-        prop: 'visible',
-        tooltip: '选择隐藏则路由将不会出现在侧边栏,但仍然可以访问',
-        span: 12,
-        show: val => {
-          return val?.menuType !== 'F'
-        }
+      label: '显示状态',
+      prop: 'visible',
+      tooltip: '选择隐藏则路由将不会出现在侧边栏,但仍然可以访问',
+      span: 12,
+      show: val => {
+        return val?.menuType !== 'F'
       },
       compOptions: {
         elTagName: 'radio-button',
@@ -281,44 +265,38 @@ const setFieldList = () => {
       }
     },
     {
-      formItemOptions: {
-        label: '路由地址',
-        rules: [{ required: true, message: '路由地址不能为空', trigger: 'blur' }],
-        prop: 'path',
-        show: val => {
-          return val?.menuType !== 'F'
-        },
-        tooltip: '访问的路由地址,如:`user`,如外网地址需内链访问则以`http(s)://`开头'
+      label: '路由地址',
+      rules: [{ required: true, message: '路由地址不能为空', trigger: 'blur' }],
+      prop: 'path',
+      show: val => {
+        return val?.menuType !== 'F'
       },
+      tooltip: '访问的路由地址,如:`user`,如外网地址需内链访问则以`http(s)://`开头',
       compOptions: {
         elTagName: 'input',
         placeholder: '请输入路由地址'
       }
     },
     {
-      formItemOptions: {
-        label: '路由参数',
-        prop: 'query',
-        show: val => {
-          return val?.menuType !== 'F'
-        },
-        tooltip: '访问路由的默认传递参数,如:`{"id": 1, "name": "taais"}`'
+      label: '路由参数',
+      prop: 'query',
+      show: val => {
+        return val?.menuType !== 'F'
       },
+      tooltip: '访问路由的默认传递参数,如:`{"id": 1, "name": "km"}`',
       compOptions: {
         elTagName: 'input',
         placeholder: '请输入路由地址'
       }
     },
     {
-      formItemOptions: {
-        label: '组件路径',
-        rules: [{ required: true, message: '组件路径不能为空', trigger: 'blur' }],
-        prop: 'component',
-        tooltip: '访问的组件路径,如:`system/user/index`,默认在`views`目录下',
-        span: 12,
-        show: val => {
-          return val?.menuType == 'C'
-        }
+      label: '组件路径',
+      rules: [{ required: true, message: '组件路径不能为空', trigger: 'blur' }],
+      prop: 'component',
+      tooltip: '访问的组件路径,如:`system/user/index`,默认在`views`目录下',
+      span: 12,
+      show: val => {
+        return val?.menuType == 'C'
       },
       compOptions: {
         elTagName: 'input',
@@ -326,15 +304,13 @@ const setFieldList = () => {
       }
     },
     {
-      formItemOptions: {
-        label: '组件名称',
-        rules: [{ required: true, message: '路由名称不能为空', trigger: 'blur' }],
-        prop: 'componentName',
-        tooltip: '组件名称,匹配组件内Name属性,如:User',
-        span: 12,
-        show: val => {
-          return val?.menuType == 'C'
-        }
+      label: '组件名称',
+      rules: [{ required: true, message: '路由名称不能为空', trigger: 'blur' }],
+      prop: 'componentName',
+      tooltip: '组件名称,匹配组件内Name属性,如:User',
+      span: 12,
+      show: val => {
+        return val?.menuType == 'C'
       },
       compOptions: {
         elTagName: 'input',
@@ -342,14 +318,12 @@ const setFieldList = () => {
       }
     },
     {
-      formItemOptions: {
-        label: '权限标识',
-        prop: 'perms',
-        tooltip: '控制器中定义的权限字符,如:system:user:list',
-        span: 12,
-        show: val => {
-          return val?.menuType !== 'M'
-        }
+      label: '权限标识',
+      prop: 'perms',
+      tooltip: '控制器中定义的权限字符,如:system:user:list',
+      span: 12,
+      show: val => {
+        return val?.menuType !== 'M'
       },
       compOptions: {
         elTagName: 'input',
@@ -357,13 +331,11 @@ const setFieldList = () => {
       }
     },
     {
-      formItemOptions: {
-        label: '是否缓存',
-        prop: 'isCache',
-        span: 12,
-        show: val => {
-          return val?.menuType == 'C'
-        }
+      label: '是否缓存',
+      prop: 'isCache',
+      span: 12,
+      show: val => {
+        return val?.menuType == 'C'
       },
       compOptions: {
         elTagName: 'radio-button',

+ 4 - 19
src/views/system/post/index.vue

@@ -1,13 +1,6 @@
 <template>
   <div class="table-box">
-    <ProTable
-      ref="proTable"
-      :columns="columns"
-      row-key="postId"
-      :request-api="listPostApi"
-      :init-param="initParam"
-      :data-callback="dataCallback"
-    >
+    <ProTable ref="proTable" :columns="columns" row-key="postId" :request-api="listPostApi">
       <!-- 表格 header 按钮 -->
       <template #tableHeader="scope">
         <el-button type="primary" v-auth="['system:post:add']" :icon="CirclePlus" @click="openDialog(1, '岗位信息新增')">
@@ -80,23 +73,15 @@ import {
 // ProTable 实例
 const proTable = ref<ProTableInstance>()
 
-// 如果表格需要初始化请求参数,直接定义传给 ProTable (之后每次请求都会自动带上该参数,此参数更改之后也会一直带上,改变此参数会自动刷新表格数据)
-const initParam = reactive({ type: 1 })
-
-// dataCallback 是对于返回的表格数据做处理,如果你后台返回的数据不是 list && total && pageNum && pageSize 这些字段,可以在这里进行处理成这些字段
-const dataCallback = (data: any) => {
-  return data
-}
-
 // 删除岗位信息信息
 const deletePost = async (params: any) => {
-  await useHandleData(delPostApi, { id: [params.postId] }, `删除【${params.id}】岗位信息`)
+  await useHandleData(delPostApi, params.postId, `删除【${params.postId}】岗位信息`)
   proTable.value?.getTableList()
 }
 
 // 批量删除岗位信息信息
-const batchDelete = async (id: string[]) => {
-  await useHandleData(delPostApi, { id }, '删除所选岗位信息信息')
+const batchDelete = async (ids: string[]) => {
+  await useHandleData(delPostApi, ids, '删除所选岗位信息信息')
   proTable.value?.clearSelection()
   proTable.value?.getTableList()
 }

+ 4 - 25
src/views/system/role/authRole.vue

@@ -1,13 +1,6 @@
 <template>
   <div class="table-box">
-    <ProTable
-      ref="proTable"
-      :columns="columns"
-      row-key="roleId"
-      :request-api="listRoleApi"
-      :init-param="initParam"
-      :data-callback="dataCallback"
-    >
+    <ProTable ref="proTable" :columns="columns" row-key="roleId" :request-api="listRoleApi">
       <!-- 表格 header 按钮 -->
       <template #tableHeader="scope">
         <el-button type="primary" v-auth="['system:role:add']" :icon="CirclePlus" @click="openDialog(1, '角色信息新增')">
@@ -80,29 +73,15 @@ import {
 // ProTable 实例
 const proTable = ref<ProTableInstance>()
 
-// 如果表格需要初始化请求参数,直接定义传给 ProTable (之后每次请求都会自动带上该参数,此参数更改之后也会一直带上,改变此参数会自动刷新表格数据)
-const initParam = reactive({ type: 1 })
-
-// dataCallback 是对于返回的表格数据做处理,如果你后台返回的数据不是 list && total && pageNum && pageSize 这些字段,可以在这里进行处理成这些字段
-const dataCallback = (data: any) => {
-  const page = proTable.value!.pageable
-  return {
-    list: data.data,
-    total: data.total,
-    pageNum: page.pageNum,
-    pageSize: page.pageSize
-  }
-}
-
 // 删除角色信息信息
 const deleteRole = async (params: any) => {
-  await useHandleData(delRoleApi, { id: [params.roleId] }, `删除【${params.id}】角色信息`)
+  await useHandleData(delRoleApi, params.roleId, `删除【${params.roleId}】角色信息`)
   proTable.value?.getTableList()
 }
 
 // 批量删除角色信息信息
-const batchDelete = async (id: string[]) => {
-  await useHandleData(delRoleApi, { id }, '删除所选角色信息信息')
+const batchDelete = async (ids: string[]) => {
+  await useHandleData(delRoleApi, ids, '删除所选角色信息信息')
   proTable.value?.clearSelection()
   proTable.value?.getTableList()
 }

+ 56 - 56
src/views/system/role/index.vue

@@ -1,13 +1,6 @@
 <template>
   <div class="table-box">
-    <ProTable
-      ref="proTable"
-      :columns="columns"
-      row-key="roleId"
-      :request-api="listRoleApi"
-      :init-param="initParam"
-      :data-callback="dataCallback"
-    >
+    <ProTable ref="proTable" :columns="columns" row-key="roleId" :request-api="listRoleApi" :init-param="initParam">
       <!-- 表格 header 按钮 -->
       <template #tableHeader="scope">
         <el-button type="primary" v-auth="['system:role:add']" :icon="CirclePlus" @click="openDialog(1, '角色信息新增')">
@@ -31,21 +24,22 @@
         <el-button
           type="primary"
           link
-          :icon="View"
-          v-auth="['system:role:query']"
-          @click="openDialog(3, '角色信息查看', scope.row)"
+          :icon="EditPen"
+          v-auth="['system:role:edit']"
+          @click="openDialog(2, '角色信息编辑', scope.row)"
         >
-          查看
+          编辑
         </el-button>
         <el-button
           type="primary"
           link
-          :icon="EditPen"
-          v-auth="['system:role:edit']"
-          @click="openDialog(2, '角色信息编辑', scope.row)"
+          :icon="View"
+          v-auth="['system:role:query']"
+          @click="openDialog(3, '角色信息查看', scope.row)"
         >
-          编辑
+          查看
         </el-button>
+
         <el-button type="primary" link :icon="Delete" v-auth="['system:role:remove']" @click="deleteRole(scope.row)">
           删除
         </el-button>
@@ -63,7 +57,7 @@ import { useDownload } from '@/hooks/useDownload'
 import { ElMessageBox } from 'element-plus'
 import ProTable from '@/components/ProTable/index.vue'
 import ImportExcel from '@/components/ImportExcel/index.vue'
-import FormDialog from '@/components/DialogOld/form.vue'
+import FormDialog from '@/components/FormDialog/index.vue'
 import { ProTableInstance, ColumnProps } from '@/components/ProTable/interface'
 import { Delete, EditPen, Download, Upload, View, CirclePlus } from '@element-plus/icons-vue'
 import {
@@ -83,20 +77,15 @@ const proTable = ref<ProTableInstance>()
 // 如果表格需要初始化请求参数,直接定义传给 ProTable (之后每次请求都会自动带上该参数,此参数更改之后也会一直带上,改变此参数会自动刷新表格数据)
 const initParam = reactive({ type: 1 })
 
-// dataCallback 是对于返回的表格数据做处理,如果你后台返回的数据不是 list && total && pageNum && pageSize 这些字段,可以在这里进行处理成这些字段
-const dataCallback = (data: any) => {
-  return data
-}
-
 // 删除角色信息信息
 const deleteRole = async (params: any) => {
-  await useHandleData(delRoleApi, { id: [params.roleId] }, `删除【${params.id}】角色信息`)
+  await useHandleData(delRoleApi, params.roleId, `删除编号为【${params.roleId}】角色信息`)
   proTable.value?.getTableList()
 }
 
 // 批量删除角色信息信息
-const batchDelete = async (id: string[]) => {
-  await useHandleData(delRoleApi, { id }, '删除所选角色信息信息')
+const batchDelete = async (ids: string[]) => {
+  await useHandleData(delRoleApi, ids, '删除所选角色信息信息')
   proTable.value?.clearSelection()
   proTable.value?.getTableList()
 }
@@ -128,15 +117,15 @@ const openDialog = async (type: number, title: string, row?: any) => {
     res = await getRoleApi(row?.roleId || null)
   }
   // 重置表单
-  setFieldList()
+  setFormItems()
   const params = {
     title,
     width: 580,
-    isEdit: type !== 3,
-    fieldList: fieldList,
-    model: type == 1 ? {} : res.data,
-    api: type == 1 ? addRoleApi : updateRoleApi,
-    getTableList: proTable.value?.getTableList
+    isEdit: type !== 3, // 是否编辑
+    itemsOptions: formItems,
+    model: type == 1 ? {} : res.data, // 表单数据
+    api: type == 1 ? addRoleApi : updateRoleApi, // 提交api
+    getTableList: proTable.value?.getTableList // 刷新表格
   }
   formDialogRef.value?.openDialog(params)
 }
@@ -183,58 +172,69 @@ const columns = reactive<ColumnProps<any>[]>([
   },
   { prop: 'operation', label: '操作', width: 230, fixed: 'right' }
 ])
-// 表单配置项
-let fieldList: Form.FieldItem[] = []
-const setFieldList = () => {
-  fieldList = [
+
+let formItems: ProForm.ItemsOptions[] = []
+const setFormItems = () => {
+  formItems = [
     {
       label: '角色名称',
-      field: 'roleName',
+      prop: 'roleName',
       rules: [{ required: true, message: '角色名称不能为空', trigger: 'blur' }],
-      placeholder: '请输入角色名称'
+      compOptions: {
+        placeholder: '请输入角色名称'
+      }
     },
     {
       label: '角色权限字符串',
-      field: 'roleKey',
+      prop: 'roleKey',
       rules: [{ required: true, message: '角色权限字符串不能为空', trigger: 'blur' }],
-      placeholder: '请输入角色权限字符串'
+      compOptions: {
+        placeholder: '请输入角色权限字符串'
+      }
     },
     {
       label: '显示顺序',
-      field: 'roleSort',
+      prop: 'roleSort',
       rules: [{ required: true, message: '显示顺序不能为空', trigger: 'blur' }],
-      placeholder: '请输入显示顺序'
+      compOptions: {
+        placeholder: '请输入显示顺序'
+      }
     },
     {
       label: '数据范围',
-      field: 'dataScope',
-      placeholder: '请输入数据范围'
+      prop: 'dataScope',
+      compOptions: {
+        placeholder: '请输入数据范围'
+      }
     },
     {
       label: '菜单树选择项是否关联显示',
-      field: 'menuCheckStrictly',
-      placeholder: '请输入菜单树选择项是否关联显示'
+      prop: 'menuCheckStrictly',
+      compOptions: {
+        placeholder: '请输入菜单树选择项是否关联显示'
+      }
     },
     {
       label: '部门树选择项是否关联显示',
-      field: 'deptCheckStrictly',
-      placeholder: '请输入部门树选择项是否关联显示'
+      prop: 'deptCheckStrictly',
+      compOptions: {
+        placeholder: '请输入部门树选择项是否关联显示'
+      }
     },
     {
       label: '角色状态',
-      field: 'status',
+      prop: 'status',
       rules: [{ required: true, message: '角色状态不能为空', trigger: 'blur' }],
-      placeholder: '请输入角色状态'
-    },
-    {
-      label: '删除标志',
-      field: 'delFlag',
-      placeholder: '请输入删除标志'
+      compOptions: {
+        placeholder: '请输入角色状态'
+      }
     },
     {
       label: '备注',
-      field: 'remark',
-      placeholder: '请输入备注'
+      prop: 'remark',
+      compOptions: {
+        placeholder: '请输入备注'
+      }
     }
   ]
 }

+ 3 - 8
src/views/system/user/index.vue

@@ -13,7 +13,6 @@
         row-key="userId"
         :indent="20"
         :columns="columns"
-        :data-callback="dataCallback"
         :request-api="listUserApi"
         :request-auto="false"
         :init-param="initParam"
@@ -100,10 +99,6 @@ const changeTreeFilter = (val: string) => {
   initParam.deptId = val
 }
 
-const dataCallback = (data: any) => {
-  return data
-}
-
 // 切换用户状态
 const changeStatus = async (row: User.ResUserList) => {
   await useHandleData(
@@ -116,13 +111,13 @@ const changeStatus = async (row: User.ResUserList) => {
 
 // 删除用户信息
 const deleteAccount = async (params: User.ResUserList) => {
-  await useHandleData(delUserApi, { id: [params.id] }, `删除【${params.userName}】用户`)
+  await useHandleData(delUserApi, params.userId, `删除【${params.userName}】用户`)
   proTable.value?.getTableList()
 }
 
 // 批量删除用户信息
-const batchDelete = async (id: string[]) => {
-  await useHandleData(delUserApi, { id }, '删除所选用户信息')
+const batchDelete = async (ids: string[]) => {
+  await useHandleData(delUserApi, ids, '删除所选用户信息')
   proTable.value?.clearSelection()
   proTable.value?.getTableList()
 }

+ 18 - 28
src/views/tool/gen/components/basicInfoForm.vue

@@ -16,12 +16,10 @@ const _formOptions = {
 }
 let items: ProForm.ItemsOptions[] = [
   {
-    formItemOptions: {
-      label: '表名称',
-      prop: 'tableName',
-      span: 12,
-      rules: [{ required: true, message: '表名称不能为空', trigger: 'blur' }]
-    },
+    label: '表名称',
+    prop: 'tableName',
+    span: 12,
+    rules: [{ required: true, message: '表名称不能为空', trigger: 'blur' }],
     compOptions: {
       elTagName: 'input',
       clearable: true,
@@ -29,12 +27,10 @@ let items: ProForm.ItemsOptions[] = [
     }
   },
   {
-    formItemOptions: {
-      label: '表描述',
-      prop: 'tableComment',
-      span: 12,
-      rules: [{ required: true, message: '表描述不能为空', trigger: 'blur' }]
-    },
+    label: '表描述',
+    prop: 'tableComment',
+    span: 12,
+    rules: [{ required: true, message: '表描述不能为空', trigger: 'blur' }],
     compOptions: {
       elTagName: 'input',
       clearable: true,
@@ -42,12 +38,10 @@ let items: ProForm.ItemsOptions[] = [
     }
   },
   {
-    formItemOptions: {
-      label: '实体类名称',
-      prop: 'className',
-      span: 12,
-      rules: [{ required: true, message: '实体类名称不能为空', trigger: 'blur' }]
-    },
+    label: '实体类名称',
+    prop: 'className',
+    span: 12,
+    rules: [{ required: true, message: '实体类名称不能为空', trigger: 'blur' }],
     compOptions: {
       elTagName: 'input',
       clearable: true,
@@ -55,12 +49,10 @@ let items: ProForm.ItemsOptions[] = [
     }
   },
   {
-    formItemOptions: {
-      label: '作者',
-      prop: 'functionAuthor',
-      span: 12,
-      rules: [{ required: true, message: '作者不能为空', trigger: 'blur' }]
-    },
+    label: '作者',
+    prop: 'functionAuthor',
+    span: 12,
+    rules: [{ required: true, message: '作者不能为空', trigger: 'blur' }],
     compOptions: {
       elTagName: 'input',
       clearable: true,
@@ -68,10 +60,8 @@ let items: ProForm.ItemsOptions[] = [
     }
   },
   {
-    formItemOptions: {
-      label: '备注',
-      prop: 'remark'
-    },
+    label: '备注',
+    prop: 'remark',
     compOptions: {
       elTagName: 'input',
       type: 'textarea',

+ 32 - 46
src/views/tool/gen/components/genInfoForm.vue

@@ -47,12 +47,10 @@ let items: ProForm.ItemsOptions[] = []
 const setItem = () => {
   items = [
     {
-      formItemOptions: {
-        label: '生成模板',
-        prop: 'tplCategory',
-        span: 12,
-        rules: [{ required: true, message: '生成模板不能为空', trigger: 'change' }]
-      },
+      label: '生成模板',
+      prop: 'tplCategory',
+      span: 12,
+      rules: [{ required: true, message: '生成模板不能为空', trigger: 'change' }],
       compOptions: {
         elTagName: 'select',
         clearable: true,
@@ -62,13 +60,11 @@ const setItem = () => {
       }
     },
     {
-      formItemOptions: {
-        label: '生成包路径',
-        prop: 'packageName',
-        tooltip: '生成在哪个java包下,例如 com.taais.system',
-        span: 12,
-        rules: [{ required: true, message: '生成包路径不能为空', trigger: 'blur' }]
-      },
+      label: '生成包路径',
+      prop: 'packageName',
+      tooltip: '生成在哪个java包下,例如 com.km.system',
+      span: 12,
+      rules: [{ required: true, message: '生成包路径不能为空', trigger: 'blur' }],
       compOptions: {
         elTagName: 'input',
         clearable: true,
@@ -76,13 +72,11 @@ const setItem = () => {
       }
     },
     {
-      formItemOptions: {
-        label: '生成模块名',
-        prop: 'moduleName',
-        span: 12,
-        tooltip: '可理解为子系统名,例如 system',
-        rules: [{ required: true, message: '生成模块名不能为空', trigger: 'blur' }]
-      },
+      label: '生成模块名',
+      prop: 'moduleName',
+      span: 12,
+      tooltip: '可理解为子系统名,例如 system',
+      rules: [{ required: true, message: '生成模块名不能为空', trigger: 'blur' }],
       compOptions: {
         elTagName: 'input',
         clearable: true,
@@ -90,13 +84,11 @@ const setItem = () => {
       }
     },
     {
-      formItemOptions: {
-        label: '生成业务名',
-        prop: 'businessName',
-        tooltip: '可理解为功能英文名,例如 user',
-        span: 12,
-        rules: [{ required: true, message: '生成业务名不能为空', trigger: 'blur' }]
-      },
+      label: '生成业务名',
+      prop: 'businessName',
+      tooltip: '可理解为功能英文名,例如 user',
+      span: 12,
+      rules: [{ required: true, message: '生成业务名不能为空', trigger: 'blur' }],
       compOptions: {
         elTagName: 'input',
         clearable: true,
@@ -104,13 +96,11 @@ const setItem = () => {
       }
     },
     {
-      formItemOptions: {
-        label: '生成功能名',
-        prop: 'functionName',
-        tooltip: '用作类描述,例如 用户',
-        span: 12,
-        rules: [{ required: true, message: '生成功能名不能为空', trigger: 'blur' }]
-      },
+      label: '生成功能名',
+      prop: 'functionName',
+      tooltip: '用作类描述,例如 用户',
+      span: 12,
+      rules: [{ required: true, message: '生成功能名不能为空', trigger: 'blur' }],
       compOptions: {
         elTagName: 'input',
         clearable: true,
@@ -118,12 +108,10 @@ const setItem = () => {
       }
     },
     {
-      formItemOptions: {
-        label: '上级菜单',
-        prop: 'parentMenuId',
-        span: 10,
-        tooltip: '分配到指定菜单下,例如 系统管理'
-      },
+      label: '上级菜单',
+      prop: 'parentMenuId',
+      span: 10,
+      tooltip: '分配到指定菜单下,例如 系统管理',
       compOptions: {
         elTagName: 'tree-select',
         clearable: true,
@@ -141,12 +129,10 @@ const setItem = () => {
       }
     },
     {
-      formItemOptions: {
-        label: '生成方式',
-        prop: 'functionAuthor',
-        tooltip: '默认为zip压缩包下载,也可以自定义生成路径',
-        span: 12
-      },
+      label: '生成方式',
+      prop: 'functionAuthor',
+      tooltip: '默认为zip压缩包下载,也可以自定义生成路径',
+      span: 12,
       compOptions: {
         elTagName: 'radio-group',
         enum: genTypeData,

+ 5 - 10
src/views/tool/gen/index.vue

@@ -1,6 +1,6 @@
 <template>
   <div class="table-box">
-    <ProTable ref="proTable" :columns="columns" row-key="tableId" :request-api="listTableApi" :data-callback="dataCallback">
+    <ProTable ref="proTable" :columns="columns" row-key="tableId" :request-api="listTableApi">
       <!-- 表格 header 按钮 -->
       <template #tableHeader="scope">
         <el-button
@@ -8,7 +8,7 @@
           v-auth="['tool:gen:code']"
           :disabled="!scope.isSelected"
           :icon="CirclePlus"
-          @click="handleGenTable"
+          @click="handleGenTable()"
         >
           生成
         </el-button>
@@ -109,11 +109,6 @@ let preview = ref({
   activeName: 'domain.java'
 })
 
-// dataCallback 是对于返回的表格数据做处理,如果你后台返回的数据不是 list && total && pageNum && pageSize 这些字段,可以在这里进行处理成这些字段
-const dataCallback = (data: any) => {
-  return data
-}
-
 // 表格弹框提交
 const submitForm = () => {
   proTable.value?.getTableList()
@@ -148,10 +143,10 @@ const batchAdd = () => {
 }
 
 //  生成代码
-const handleGenTable = (_row: { tableId: string }) => {
+const handleGenTable = (_row?: { tableId: string }) => {
   let tableIdArr: any[] | undefined = proTable.value?.selectedList.map(item => item.tableId)
-  let tableIds = _row.tableId || tableIdArr?.join(',')
-  useDownload(batchGenCodeApi, '生成代码', tableIds, false, 'zip', 'taais_web.zip')
+  let tableIds = _row?.tableId || tableIdArr?.join(',')
+  useDownload(batchGenCodeApi, '生成代码', tableIds, false, 'zip', 'km.zip')
 }
 
 // 同步表数据

文件差異過大導致無法顯示
+ 385 - 369
yarn.lock


部分文件因文件數量過多而無法顯示