houyaf 3 lat temu
rodzic
commit
4caf413c7d
42 zmienionych plików z 767 dodań i 386 usunięć
  1. 5 5
      plop-templates/module/prompt.js
  2. 14 0
      src/api/apps/appPermitApi.ts
  3. 5 5
      src/api/database/dbTypeApi.ts
  4. 1 0
      src/assets/styles/globals.scss
  5. 6 0
      src/router/index.ts
  6. 4 4
      src/router/modules/biz.ts
  7. 94 0
      src/router/modules/module.ts
  8. 11 1
      src/router/routes.ts
  9. 2 0
      src/utils/tool.ts
  10. 43 47
      src/views/app_center/app_store/components/App.vue
  11. 1 1
      src/views/app_center/app_store/index.vue
  12. 19 22
      src/views/app_center/cat/components/AppCat.vue
  13. 10 4
      src/views/app_center/cat/index.vue
  14. 50 50
      src/views/app_center/permit/components/Permit.vue
  15. 70 43
      src/views/app_center/permit/index.vue
  16. 2 2
      src/views/biz/biz/index.vue
  17. 1 1
      src/views/biz/oam/components/ObjectOAM.vue
  18. 10 6
      src/views/biz/oam/index.vue
  19. 1 1
      src/views/biz/rule/index.vue
  20. 27 0
      src/views/customer/ent/index.vue
  21. 27 0
      src/views/customer/org/index.vue
  22. 27 0
      src/views/customer/partner/index.vue
  23. 0 6
      src/views/database/data/index.vue
  24. 18 22
      src/views/database/type/components/DbType.vue
  25. 16 8
      src/views/database/type/index.vue
  26. 27 0
      src/views/job/job/index.vue
  27. 27 0
      src/views/job/job_class/index.vue
  28. 18 22
      src/views/system/position/components/Position.vue
  29. 13 7
      src/views/system/position/index.vue
  30. 18 22
      src/views/system/role/components/Role.vue
  31. 12 4
      src/views/system/role/index.vue
  32. 18 22
      src/views/system/setting/ent_cat/components/EntCat.vue
  33. 1 3
      src/views/system/setting/ent_cat/index.vue
  34. 18 22
      src/views/system/setting/group_cat/components/GroupCat.vue
  35. 11 3
      src/views/system/setting/group_cat/index.vue
  36. 18 22
      src/views/system/setting/partner_cat/components/PartnerCat.vue
  37. 12 4
      src/views/system/setting/partner_cat/index.vue
  38. 18 22
      src/views/system/setting/task_cat/components/TaskCat.vue
  39. 11 5
      src/views/system/setting/task_cat/index.vue
  40. 27 0
      src/views/workflow/def/index.vue
  41. 27 0
      src/views/workflow/example/index.vue
  42. 27 0
      src/views/workflow/ins/index.vue

+ 5 - 5
plop-templates/module/prompt.js

@@ -53,7 +53,7 @@ module.exports = {
       {
         type: 'add',
         path: `${data.path}/{{snakeCase name}}/list.vue`,
-        templateFile: 'plop-templates/module/list.hbs',
+        templateFile: 'plop-templates/workflow/list.hbs',
         data: {
           relativePath,
           componentName: `${relativePath} ${data.name} list`,
@@ -63,7 +63,7 @@ module.exports = {
       {
         type: 'add',
         path: `${data.path}/{{snakeCase name}}/detail.vue`,
-        templateFile: 'plop-templates/module/detail.hbs',
+        templateFile: 'plop-templates/workflow/detail.hbs',
         data: {
           componentName: `${relativePath} ${data.name} detail`,
         },
@@ -71,7 +71,7 @@ module.exports = {
       {
         type: 'add',
         path: `${data.path}/{{snakeCase name}}/components/DetailForm/index.vue`,
-        templateFile: 'plop-templates/module/form.hbs',
+        templateFile: 'plop-templates/workflow/form.hbs',
         data: {
           relativePath,
           moduleName: data.name,
@@ -80,7 +80,7 @@ module.exports = {
       {
         type: 'add',
         path: `${data.path}/{{snakeCase name}}/components/FormMode/index.vue`,
-        templateFile: 'plop-templates/module/mode.hbs',
+        templateFile: 'plop-templates/workflow/mode.hbs',
       },
     ]
     if (data.isMock) {
@@ -88,7 +88,7 @@ module.exports = {
       actions.push({
         type: 'add',
         path: pathArr.join('/') === '' ? 'src/mock/{{snakeCase name}}.ts' : `src/mock/${pathArr.join('.')}.{{snakeCase name}}.ts`,
-        templateFile: 'plop-templates/module/mock.hbs',
+        templateFile: 'plop-templates/workflow/mock.hbs',
         data: {
           relativePath,
           moduleName: data.name,

+ 14 - 0
src/api/apps/appPermitApi.ts

@@ -28,6 +28,20 @@ export function getAppPermitById(appId: number, roleId: number, permitId: number
 }
 
 /**
+ * 根据Id获取App Permit
+ * @param appId
+ * @param roleId
+ * @param permitId
+ * @returns
+ */
+export function getAppPermitListById(appId: number, roleId: number) {
+  return apiRequest({
+    url: `/app/permit/${appId}/${roleId}`,
+    method: 'GET',
+  })
+}
+
+/**
  * 添加App Permit
  * @param data
  * @returns

+ 5 - 5
src/api/database/dbTypeApi.ts

@@ -7,7 +7,7 @@ import apiRequest from '@/network/http/apiRequest'
  */
 export function getDbTypeByList(data: any) {
   return apiRequest({
-    url: '/database/type',
+    url: '/db/type',
     method: 'GET',
     params: data,
   })
@@ -20,7 +20,7 @@ export function getDbTypeByList(data: any) {
  */
 export function getDbTypeById(dbTypeId: number) {
   return apiRequest({
-    url: `/database/type/${dbTypeId}`,
+    url: `/db/type/${dbTypeId}`,
     method: 'GET',
   })
 }
@@ -32,7 +32,7 @@ export function getDbTypeById(dbTypeId: number) {
  */
 export function createDbType(data: any) {
   return apiRequest({
-    url: '/database/type/add',
+    url: '/db/type/add',
     method: 'POST',
     data,
   })
@@ -45,7 +45,7 @@ export function createDbType(data: any) {
  */
 export function updateDbType(data: any) {
   return apiRequest({
-    url: '/database/type/update',
+    url: '/db/type/update',
     method: 'PUT',
     data,
   })
@@ -58,7 +58,7 @@ export function updateDbType(data: any) {
  */
 export function deleteDbTypeById(dbTypeId: number) {
   return apiRequest({
-    url: `/database/type/${dbTypeId}`,
+    url: `/db/type/${dbTypeId}`,
     method: 'DELETE',
   })
 }

+ 1 - 0
src/assets/styles/globals.scss

@@ -25,6 +25,7 @@
   // 标签页最大最小宽度,两个宽度为同一数值时,则为固定宽度,反之将宽度设置为 unset 则为自适应
   --g-tabbar-tab-max-width: 125px;
   --g-tabbar-tab-min-width: 125px;
+  --el-menu-item-height: 48px;
 }
 
 // 明暗模式 CSS 变量

+ 6 - 0
src/router/index.ts

@@ -86,14 +86,17 @@ router.beforeEach(async (to, from, next) => {
     else {
       // 复原固定标签页
       settingsStore.settings.tabbar.enable && tabbarStore.recoveryStorage(userStore.account)
+
       // 生成动态路由
       switch (settingsStore.settings.app.routeBaseOn) {
         case 'frontend':
           await routeStore.generateRoutesAtFront(asyncRoutes)
           break
+
         case 'backend':
           await routeStore.generateRoutesAtBack()
           break
+
         case 'filesystem':
           await routeStore.generateRoutesAtFilesystem(asyncRoutesByFilesystem)
           // 文件系统生成的路由,需要手动生成导航数据
@@ -101,6 +104,7 @@ router.beforeEach(async (to, from, next) => {
             case 'frontend':
               await menuStore.generateMenusAtFront()
               break
+
             case 'backend':
               await menuStore.generateMenusAtBack()
               break
@@ -180,6 +184,7 @@ router.afterEach((to, from) => {
             keepAliveStore.remove(componentName)
           }
           break
+
         case 'object':
           if (!from.meta.cache.includes(to.name as string)) {
             keepAliveStore.remove(componentName)
@@ -194,6 +199,7 @@ router.afterEach((to, from) => {
               keepAliveStore.remove(componentName)
             }
             break
+
           case 'object':
             if (from.meta.noCache.includes(to.name as string)) {
               keepAliveStore.remove(componentName)

+ 4 - 4
src/router/modules/biz.ts

@@ -9,7 +9,7 @@ const routes: RouteRecordRaw[] = [
     redirect: '/biz/index',
     name: 'biz_index',
     meta: {
-      title: '务模型',
+      title: '务模型',
       icon: 'bx:bxs-component',
     },
     children: [
@@ -18,7 +18,7 @@ const routes: RouteRecordRaw[] = [
         name: 'biz_object_list',
         component: () => import('@/views/biz/biz/index.vue'),
         meta: {
-          title: '务对象',
+          title: '务对象',
           sidebar: false,
           breadcrumb: false,
           activeMenu: '/biz',
@@ -56,7 +56,7 @@ const routes: RouteRecordRaw[] = [
     redirect: '/biz/rule/index',
     name: 'rule',
     meta: {
-      title: '业务规则',
+      title: '操作规则',
       icon: 'ep:promotion',
     },
     children: [
@@ -65,7 +65,7 @@ const routes: RouteRecordRaw[] = [
         name: 'ruleList',
         component: () => import('@/views/biz/rule/index.vue'),
         meta: {
-          title: '业务规则',
+          title: '操作规则',
           sidebar: false,
           breadcrumb: false,
           activeMenu: '/biz/rule',

+ 94 - 0
src/router/modules/module.ts

@@ -0,0 +1,94 @@
+import type { RouteRecordRaw } from 'vue-router'
+
+const Layout = () => import('@/layouts/index.vue')
+
+const routes: RouteRecordRaw[] = [
+  {
+    path: '/customer',
+    component: Layout,
+    redirect: '/customer/ent',
+    name: 'customer',
+    meta: {
+      title: '客户管理',
+      icon: 'ep:avatar',
+      permit: 'system_customer',
+    },
+    children: [
+      {
+        path: 'ent',
+        component: () => import('@/views/customer/ent/index.vue'),
+        name: 'customer_ent',
+        meta: { title: '企业单位' },
+      },
+      {
+        path: 'org',
+        component: () => import('@/views/customer/org/index.vue'),
+        name: 'customer_org',
+        meta: { title: '政府机构' },
+      },
+      {
+        path: 'partner',
+        component: () => import('@/views/customer/partner/index.vue'),
+        name: 'customer_partner',
+        meta: { title: '合作伙伴' },
+      },
+    ],
+  },
+  {
+    path: '/workflow',
+    component: Layout,
+    redirect: '/workflow/ins',
+    name: 'workflow',
+    meta: {
+      title: '工作流程',
+      icon: 'ep:postcard',
+      permit: 'system_workflow',
+    },
+    children: [
+      {
+        path: 'def',
+        component: () => import('@/views/workflow/def/index.vue'),
+        name: 'workflow_def',
+        meta: { title: '流程定义' },
+      },
+      {
+        path: 'ins',
+        component: () => import('@/views/workflow/ins/index.vue'),
+        name: 'workflow_ins',
+        meta: { title: '流程实例' },
+      },
+      {
+        path: 'example',
+        component: () => import('@/views/workflow/example/index.vue'),
+        name: 'workflow_example',
+        meta: { title: '流程示例' },
+      },
+    ],
+  },
+  {
+    path: '/job',
+    component: Layout,
+    redirect: '/job/index',
+    name: 'job',
+    meta: {
+      title: '系统作业',
+      icon: 'ep:alarm-clock',
+      permit: 'system_job',
+    },
+    children: [
+      {
+        path: 'index',
+        component: () => import('@/views/job/job/index.vue'),
+        name: 'system_job_def',
+        meta: { title: '作业调度' },
+      },
+      {
+        path: 'class',
+        component: () => import('@/views/job/job_class/index.vue'),
+        name: 'system_job_class',
+        meta: { title: '作业类' },
+      },
+    ],
+  },
+]
+export default routes

+ 11 - 1
src/router/routes.ts

@@ -8,6 +8,7 @@ import ApiEntries from './modules/api'
 import ModelEntries from './modules/model'
 import BizEntries from './modules/biz'
 import AppCenterEntries from '@/router/modules/app.center'
+import ModuleEntries from './modules/module'
 import type { Route } from '#/global'
 import useSettingsStore from '@/store/modules/settings'
 
@@ -126,7 +127,7 @@ const asyncRoutes: Route.recordMainRaw[] = [
   },
   {
     meta: {
-      title: '务',
+      title: '务',
       icon: 'ep:element-plus',
     },
     children: [
@@ -144,6 +145,15 @@ const asyncRoutes: Route.recordMainRaw[] = [
   },
   {
     meta: {
+      title: '功能',
+      icon: 'ic:twotone-auto-awesome',
+    },
+    children: [
+      ...ModuleEntries,
+    ],
+  },
+  {
+    meta: {
       title: '应用',
       icon: 'ep:menu',
     },

+ 2 - 0
src/utils/tool.ts

@@ -476,6 +476,7 @@ export function getQuarterEndDate() {
   const quarterStartDate = new Date(nowYear, quarterEndMonth, getMonthDays(quarterEndMonth))
   return formatDate(quarterStartDate)
 }
+
 // 平级转树结构
 /* treeArr 基础数据
    * id 唯一id
@@ -493,6 +494,7 @@ export function packageTreeData(params: { data: any; id?: any; parentId?: any; c
     return !fatherItem[parentId]
   })
 }
+
 // 根据根id处理树结构
 export function getNestedChildren(arr: any = [], parent_id = 'parent_id', id = 'id', parent: any = 0) {
   const res: any[] = []

+ 43 - 47
src/views/app_center/app_store/components/App.vue

@@ -103,51 +103,47 @@ defineExpose({
 </script>
 
 <template>
-  <div>
-    <el-dialog v-model="state.dialogVisible" :title="state.title" width="600px" :close-on-click-modal="false" append-to-body destroy-on-close>
-      <div v-loading="state.loading">
-        <el-form ref="formRef" :model="state.formData" :rules="formRules" label-width="120px" label-suffix=":">
-          <el-form-item label="标题" prop="appTitle">
-            <el-input v-model="state.formData.appTitle" />
-          </el-form-item>
-
-          <el-form-item label="分类" prop="appCatTitle">
-            <el-input v-model="state.formData.appCatTitle" readonly />
-          </el-form-item>
-
-          <el-form-item label="编码" prop="appCode">
-            <el-input v-model="state.formData.appCode" />
-          </el-form-item>
-
-          <el-form-item label="地址" prop="appUrl">
-            <el-input v-model="state.formData.appUrl" />
-          </el-form-item>
-
-          <el-form-item label="LOGO">
-            <el-image
-              style="width: 50px; height: 50px;border-radius:50%;"
-              :src="state.formData.appLogo"
-              :preview-src-list="[state.formData.appLogo]"
-            />
-          </el-form-item>
-          <el-form-item label="参数" prop="appParam">
-            <el-input v-model="state.formData.appParam" />
-          </el-form-item>
-
-          <el-form-item label="描述">
-            <el-input v-model="state.formData.appDesc" type="textarea" />
-          </el-form-item>
-        </el-form>
-      </div>
-
-      <template #footer>
-        <el-button size="large" @click="onCancel">
-          取消
-        </el-button>
-        <el-button type="primary" size="large" @click="onSubmit">
-          保存
-        </el-button>
-      </template>
-    </el-dialog>
-  </div>
+  <el-drawer v-model="state.dialogVisible" :title="state.title" size="30%">
+    <el-form ref="formRef" :model="state.formData" :rules="formRules" label-width="120px" label-suffix=":">
+      <el-form-item label="标题" prop="appTitle">
+        <el-input v-model="state.formData.appTitle" />
+      </el-form-item>
+
+      <el-form-item label="分类" prop="appCatTitle">
+        <el-input v-model="state.formData.appCatTitle" readonly />
+      </el-form-item>
+
+      <el-form-item label="编码" prop="appCode">
+        <el-input v-model="state.formData.appCode" />
+      </el-form-item>
+
+      <el-form-item label="地址" prop="appUrl">
+        <el-input v-model="state.formData.appUrl" />
+      </el-form-item>
+
+      <el-form-item label="LOGO">
+        <el-image
+          style="width: 50px; height: 50px;border-radius:50%;"
+          :src="state.formData.appLogo"
+          :preview-src-list="[state.formData.appLogo]"
+        />
+      </el-form-item>
+      <el-form-item label="参数" prop="appParam">
+        <el-input v-model="state.formData.appParam" />
+      </el-form-item>
+
+      <el-form-item label="描述">
+        <el-input v-model="state.formData.appDesc" type="textarea" />
+      </el-form-item>
+    </el-form>
+
+    <template #footer>
+      <el-button size="large" @click="onCancel">
+        取消
+      </el-button>
+      <el-button type="primary" size="large" @click="onSubmit">
+        保存
+      </el-button>
+    </template>
+  </el-drawer>
 </template>

+ 1 - 1
src/views/app_center/app_store/index.vue

@@ -81,7 +81,7 @@ onMounted(() => {
       </template>
 
       <el-button-group>
-        <el-button type="primary" size="large" plain @click="onAppPublish">
+        <el-button type="primary" size="large" @click="onAppPublish">
           <template #icon>
             <el-icon>
               <svg-icon name="ep:plus" />

+ 19 - 22
src/views/app_center/cat/components/AppCat.vue

@@ -92,28 +92,25 @@ defineExpose({
 </script>
 
 <template>
-  <div>
-    <el-dialog v-model="state.dialogVisible" :title="state.title" width="600px" :close-on-click-modal="false" append-to-body destroy-on-close>
-      <div v-loading="state.loading">
-        <el-form ref="formRef" :model="state.formData" :rules="formRules" label-width="120px" label-suffix=":">
-          <el-form-item label="分类名称" prop="appCatTitle">
-            <el-input v-model="state.formData.appCatTitle" placeholder="请输入标题" />
-          </el-form-item>
+  <el-drawer v-model="state.dialogVisible" :title="state.title" width="600px" :close-on-click-modal="false" append-to-body destroy-on-close>
+    <el-form ref="formRef" :model="state.formData" :rules="formRules" label-width="120px" label-suffix=":">
+      <el-form-item label="分类名称" prop="appCatTitle">
+        <el-input v-model="state.formData.appCatTitle" placeholder="请输入标题" />
+      </el-form-item>
 
-          <el-form-item label="简要说明" prop="appCatDesc">
-            <el-input v-model="state.formData.appCatDesc" type="textarea" rows="10" placeholder="请输入简要说明" />
-          </el-form-item>
-        </el-form>
-      </div>
+      <el-form-item label="简要说明" prop="appCatDesc">
+        <el-input v-model="state.formData.appCatDesc" type="textarea" rows="10" placeholder="请输入简要说明" />
+      </el-form-item>
+    </el-form>
 
-      <template #footer>
-        <el-button size="large" @click="onCancel">
-          取消
-        </el-button>
-        <el-button type="primary" size="large" @click="onSubmit">
-          保存
-        </el-button>
-      </template>
-    </el-dialog>
-  </div>
+
+    <template #footer>
+      <el-button size="large" @click="onCancel">
+        取消
+      </el-button>
+      <el-button type="primary" size="large" @click="onSubmit">
+        保存
+      </el-button>
+    </template>
+  </el-drawer>
 </template>

+ 10 - 4
src/views/app_center/cat/index.vue

@@ -28,8 +28,6 @@ onMounted(() => {
   getDataList()
 })
 
-function onCreate() {}
-
 function onAppCatAdd() {
   appCatRef.value.showAddModel()
 }
@@ -76,9 +74,17 @@ function onAppCatDel(row: any) {
       <el-table v-loading="state.loading" class="list-table" :data="state.dataList" border stripe highlight-current-row height="100%">
         <el-table-column type="index" label="序号" width="60" header-align="center" align="center" />
 
-        <el-table-column prop="appCatTitle" label="名称" header-align="center" align="center" width="200" />
+        <el-table-column prop="appCatTitle" label="名称" header-align="center" align="center" width="200">
+          <template #default="scope">
+            <span>{{ scope.row.appCatTitle }}</span>
+          </template>
+        </el-table-column>
 
-        <el-table-column prop="appCatDesc" label="说明" />
+        <el-table-column prop="appCatDesc" label="说明">
+          <template #default="scope">
+            <span>{{ scope.row.appCatDesc }}</span>
+          </template>
+        </el-table-column>
 
         <el-table-column label="操作" width="250" align="center" fixed="right">
           <template #default="scope">

+ 50 - 50
src/views/app_center/permit/components/Permit.vue

@@ -1,7 +1,7 @@
 <route lang="yaml">
 meta:
   enabled: false
-    </route>
+</route>
 
 <script lang="ts" setup>
 import { ElMessage } from 'element-plus'
@@ -12,8 +12,8 @@ const emit = defineEmits(['success'])
 const formRef = ref<FormInstance>()
 const formRules = ref<FormRules>({
   permitTitle: [{ required: true, message: '请输入标题', trigger: 'blur' }],
-  permitDesc: [{ required: true, message: '请输入说明', trigger: 'blur' }],
   permitCode: [{ required: true, message: '请输入编码', trigger: 'blur' }],
+  permitDesc: [{ required: false, message: '请输入说明', trigger: 'blur' }],
 })
 
 const state = reactive({
@@ -28,8 +28,9 @@ const state = reactive({
     permitTitle: '',
     permitCode: '',
     permitDesc: '',
-    sortNo: undefined,
-    parentId: undefined,
+    sortNo: 1,
+    rootId: 0,
+    parentId: 0,
   },
   actionType: 1,
 })
@@ -77,23 +78,25 @@ function resetFormData() {
     permitTitle: '',
     permitCode: '',
     permitDesc: '',
-    sortNo: undefined,
-    parentId: undefined,
+    sortNo: 1,
+    rootId: 0,
+    parentId: 0,
   }
 }
 
 defineExpose({
   showAddModel(appId: undefined, roleId: undefined) {
     resetFormData()
-    state.title = '新增'
+    state.title = '新增权限'
     state.actionType = 1
     state.dialogVisible = true
     state.formData.appId = appId
     state.formData.roleId = roleId
+    state.formData.sortNo = 1
   },
   showEditModel(appId: number, roleId: number, permitId: number) {
     resetFormData()
-    state.title = '编辑'
+    state.title = '编辑权限'
     state.actionType = 2
     state.dialogVisible = true
     getData(appId, roleId, permitId)
@@ -103,46 +106,43 @@ defineExpose({
 </script>
 
 <template>
-  <div>
-    <el-dialog v-model="state.dialogVisible" :title="state.title" width="600px" :close-on-click-modal="false" append-to-body destroy-on-close>
-      <div v-loading="state.loading">
-        <el-form ref="formRef" :model="state.formData" :rules="formRules" label-width="120px" label-suffix=":">
-          <el-form-item label="标题" prop="permitTitle">
-            <el-input v-model="state.formData.permitTitle" />
-          </el-form-item>
-
-          <el-form-item label="分类" prop="appCatTitle">
-            <el-radio-group v-model="state.formData.permitType">
-              <el-radio :label="0">
-                分组
-              </el-radio>
-              <el-radio :label="1">
-                授权
-              </el-radio>
-            </el-radio-group>
-          </el-form-item>
-
-          <el-form-item label="编码" prop="permitCode">
-            <el-input v-model="state.formData.permitCode" />
-          </el-form-item>
-          <el-form-item label="排序">
-            <el-input v-model="state.formData.sortNo" type="number" min="1" />
-          </el-form-item>
-
-          <el-form-item label="描述" prop="permitDesc">
-            <el-input v-model="state.formData.permitDesc" type="textarea" />
-          </el-form-item>
-        </el-form>
-      </div>
-
-      <template #footer>
-        <el-button size="large" @click="onCancel">
-          取消
-        </el-button>
-        <el-button type="primary" size="large" @click="onSubmit">
-          保存
-        </el-button>
-      </template>
-    </el-dialog>
-  </div>
+  <el-drawer v-model="state.dialogVisible" :title="state.title" size="30%">
+    <el-form ref="formRef" :model="state.formData" :rules="formRules" label-width="120px" label-suffix=":">
+      <el-form-item label="标题" prop="permitTitle">
+        <el-input v-model="state.formData.permitTitle" />
+      </el-form-item>
+
+      <el-form-item label="分类" prop="appCatTitle">
+        <el-radio-group v-model="state.formData.permitType">
+          <el-radio :label="1">
+            权限
+          </el-radio>
+          <el-radio :label="0">
+            分组
+          </el-radio>
+        </el-radio-group>
+      </el-form-item>
+
+      <el-form-item label="编码" prop="permitCode">
+        <el-input v-model="state.formData.permitCode" />
+      </el-form-item>
+
+      <el-form-item label="描述" prop="permitDesc">
+        <el-input v-model="state.formData.permitDesc" type="textarea" rows="5"/>
+      </el-form-item>
+
+      <el-form-item label="排序">
+        <el-input v-model="state.formData.sortNo" type="number" min="1" />
+      </el-form-item>
+    </el-form>
+
+    <template #footer>
+      <el-button size="large" @click="onCancel">
+        取消
+      </el-button>
+      <el-button type="primary" size="large" @click="onSubmit">
+        保存
+      </el-button>
+    </template>
+  </el-drawer>
 </template>

+ 70 - 43
src/views/app_center/permit/index.vue

@@ -5,7 +5,7 @@ meta:
 
 <script lang="ts" setup name="AppRolePermit">
 import Permit from './components/Permit.vue'
-import { getAppPermitByList } from '@/api/apps/appPermitApi'
+import { getAppPermitListById } from '@/api/apps/appPermitApi'
 import { getRoleByList } from '@/api/system/roleApi'
 import useSettingsStore from '@/store/modules/settings'
 
@@ -20,7 +20,7 @@ interface TreeNode {
   label: string
   roleId: number
   isLeaf: boolean
-  children?: TreeNode[]
+  children?: any[]
 }
 
 const state = reactive({
@@ -28,6 +28,7 @@ const state = reactive({
   curRoleId: 0,
   roles: [] as TreeNode[],
   permitList: [],
+  permitTreeData: [] as any[],
   search: {
     appId,
     roleId: 0,
@@ -37,15 +38,31 @@ const state = reactive({
 
 const roleTreeRef = ref()
 
+function tranListToTreeData(list: any[], rootValue: number): any[] {
+  const arr: any[] = []
+  list.forEach((item) => {
+    if (item.parentId === rootValue) {
+      // 找到之后 就要去找 item 下面有没有子节点
+      const children = tranListToTreeData(list, item.permitId)
+      if (children.length) {
+        // 如果children的长度大于0 说明找到了子节点
+        item.children = children
+      }
+      arr.push(item) // 将内容加入到数组中
+    }
+  })
+  return arr
+}
+
 // 查询Permit列表
-const getPermitData = async () => {
+const getAppRolePermitData = async () => {
   const curRoleId = state.curRoleId
   if (curRoleId > 0) {
-    state.search.roleId = curRoleId
     state.loading = true
-    const { data } = await getAppPermitByList(state.search)
+    const { data } = await getAppPermitListById(appId, state.curRoleId)
     state.loading = false
     state.permitList = data
+    state.permitTreeData = tranListToTreeData(data, 0)
   }
 }
 
@@ -55,7 +72,7 @@ const getRoleData = async () => {
   const { data } = await getRoleByList({})
   if (data && data.length > 0) {
     state.curRoleId = data[0].roleId
-    await getPermitData()
+    await getAppRolePermitData()
     const children: TreeNode[] = []
     data.forEach((item: any) => {
       return children.push({
@@ -80,48 +97,58 @@ const getRoleData = async () => {
 
 const onTreeNodeClick = async (node: TreeNode) => {
   state.curRoleId = node.roleId
-  await getPermitData()
+  await getAppRolePermitData()
 }
+
 const permitTableRef = ref()
 const permitRef = ref()
 
 const onPermitAdd = () => {
   permitRef.value.showAddModel(appId, state.curRoleId)
 }
-// 返回列表页
-function goBack() {
-  if (settingsStore.settings.tabbar.enable && settingsStore.settings.tabbar.mergeTabsBy !== 'activeMenu') {
-    tabbar.close({ name: 'appStore' })
-  }
-  else {
-    router.push({ name: 'appStore' })
-  }
-}
 
 const onAddSub = (row: any) => {
   window.console.log(row)
 }
+
 const onEdit = (row: { appId: any; roleId: any; permitId: any }) => {
   const { appId, roleId, permitId } = row
   permitRef.value.showEditModel(appId, roleId, permitId)
 }
+
 const onDelete = (row: any) => {
   window.console.log(row)
 }
+
 const onUp = (row: any) => {
   window.console.log(row)
 }
 const onDown = (row: any) => {
   window.console.log(row)
 }
+
 // 组件处理成功回调
 const onSuccess = () => {
+  getAppRolePermitData()
+}
 
+const onSearch = () => {
+  getAppRolePermitData()
 }
 
 onMounted(() => {
   getRoleData()
 })
+
+// 返回列表页
+function goBack() {
+  if (settingsStore.settings.tabbar.enable && settingsStore.settings.tabbar.mergeTabsBy !== 'activeMenu') {
+    tabbar.close({ name: 'appStore' })
+  }
+  else {
+    router.push({ name: 'appStore' })
+  }
+}
 </script>
 
 <template>
@@ -138,7 +165,7 @@ onMounted(() => {
     </page-header>
 
     <div class="page-main">
-      <LayoutContainer hide-left-side-toggle>
+      <LayoutContainer left-side-width="250px" hide-left-side-toggle>
         <template #leftSide>
           <el-scrollbar class="tree">
             <ElTree ref="roleTreeRef" :data="state.roles" default-expand-all node-key="roleId" @node-click="onTreeNodeClick">
@@ -146,7 +173,7 @@ onMounted(() => {
                 <div class="custom-tree-node">
                   <div class="label" :title="node.label">
                     <el-icon v-if="data.isLeaf" size="16px" style="margin-right: 5px;">
-                      <svg-icon name="uim:box" />
+                      <svg-icon name="ep:avatar" />
                     </el-icon>
                     <div class="text">
                       {{ data.label }}
@@ -161,8 +188,8 @@ onMounted(() => {
         <div class="container">
           <tool-bar>
             <template #right>
-              <el-input v-model="state.search.keywords" placeholder="请输入关键词筛选字典项" clearable style="width: 200px;" />
-              <el-button style="margin-left: 10px;" @click="getPermitData">
+              <el-input v-model="state.search.keywords" placeholder="请输入关键词筛选" clearable style="width: 200px;" />
+              <el-button style="margin-left: 10px;" @click="onSearch">
                 <template #icon>
                   <el-icon>
                     <svg-icon name="i-ep:search" />
@@ -179,17 +206,20 @@ onMounted(() => {
               </el-button>
             </template>
           </tool-bar>
-          <el-table ref="permitTableRef" v-loading="state.loading" class="list-table" :data="state.permitList" border stripe highlight-current-row height="100%">
-            <el-table-column type="selection" width="50" align="center" />
+          <el-table
+            ref="permitTableRef"
+            v-loading="state.loading"
+            class="list-table"
+            :data="state.permitTreeData"
+            row-key="permitId"
+            default-expand-all
+            size="small"
+            border stripe highlight-current-row
+            height="100%"
+          >
             <el-table-column type="index" align="center" label="序号" width="70" />
 
-            <el-table-column label="权限ID" width="100px">
-              <template #default="{ row }">
-                <span>{{ row.permitId }}</span>
-              </template>
-            </el-table-column>
-
-            <el-table-column label="权限名称" width="200px">
+            <el-table-column label="权限名称" width="250px">
               <template #default="{ row }">
                 <span>{{ row.permitTitle }}</span>
               </template>
@@ -201,9 +231,10 @@ onMounted(() => {
               </template>
             </el-table-column>
 
-            <el-table-column label="默认" header-align="center" align="center" width="80">
+            <el-table-column label="类型" header-align="center" align="center" width="80">
               <template #default="{ row }">
-                <span>{{ row.isHome }}</span>
+                <span v-if="row.permitType === 0"><el-tag>分组</el-tag></span>
+                <span v-else><el-tag>权限</el-tag></span>
               </template>
             </el-table-column>
 
@@ -219,19 +250,17 @@ onMounted(() => {
               </template>
             </el-table-column>
 
-            <el-table-column label="操作" width="400" header-align="center" align="right">
+            <el-table-column label="操作" width="160" header-align="center" align="center">
               <template #default="{ row }">
-                <el-button v-if="row.permitType === 0" size="small" type="primary" icon="el-icon-plus" @click="onAddSub(row)">
+                <el-button v-if="row.permitType === 0" size="small" type="primary" @click="onAddSub(row)">
                   添加
                 </el-button>
-                <el-button size="small" type="success" icon="el-icon-edit" @click="onEdit(row)">
+                <el-button size="small" type="success" @click="onEdit(row)">
                   修改
                 </el-button>
-                <el-button size="small" type="danger" icon="el-icon-delete" @click="onDelete(row)">
+                <el-button size="small" type="danger" @click="onDelete(row)">
                   删除
                 </el-button>
-                <el-button size="small" type="info" icon="el-icon-top" @click="onUp(row)" />
-                <el-button size="small" type="info" icon="el-icon-bottom" @click="onDown(row)" />
               </template>
             </el-table-column>
           </el-table>
@@ -243,13 +272,11 @@ onMounted(() => {
 </template>
 
 <style lang="scss" scoped>
-.container {
-  height: 100%;
-  display: flex;
-  flex-direction: column;
-}
-
 .absolute-container {
+  .page-header {
+    margin-bottom: 0;
+  }
+
   :deep(.left-side) {
     display: flex;
     flex-direction: column;

+ 2 - 2
src/views/biz/biz/index.vue

@@ -66,7 +66,7 @@ const getBizData = async () => {
   })
   state.treeData = [
     {
-      label: '务模型库',
+      label: '务模型库',
       isLeaf: false,
       bizId: -1,
       children,
@@ -190,7 +190,7 @@ const onObjectDelete = (row: any) => {
 
 <template>
   <div class="absolute-container">
-    <tool-header title="务模型">
+    <tool-header title="务模型">
       <template #right>
         <el-button v-waves.float type="primary" @click="onBizAdd">
           <template #icon>

+ 1 - 1
src/views/biz/oam/components/ObjectOAM.vue

@@ -160,7 +160,7 @@ defineExpose({
           <el-input v-model="state.formData.sqlStatement" type="textarea" rows="5" placeholder="请输入SQL" />
         </el-form-item>
 
-        <el-form-item v-if="state.formData.oamType === 3" label="Count" prop="sqlCount">
+        <el-form-item v-if="state.formData.oamType === 7" label="Count" prop="sqlCount">
           <el-input v-model="state.formData.sqlCount" type="textarea" rows="5" placeholder="请输入SQL" />
         </el-form-item>
 

+ 10 - 6
src/views/biz/oam/index.vue

@@ -78,7 +78,7 @@ const getObjectData = async () => {
   state.loading = false
 }
 
-const getObjectOAMData = async () => {
+const getObjectOAMInfo = async () => {
   const curOamId = state.curOamId
   if (curOamId > 0) {
     state.loading = true
@@ -111,10 +111,17 @@ const getOAMTree = async () => {
     nextTick(() => {
       leftTreeRef.value.setCurrentKey(data[0].oamId)
     })
-    await getObjectOAMData()
+    await getObjectOAMInfo()
   }
 }
 
+const getObjectOAMData = async () => {
+  await getObjectOAMInfo()
+  bizObjectOAMParamsListRef.value?.showData(state.curOamId)
+  bizObjectOAMRuleListRef.value?.showData(state.curOamId)
+  bizObjectOAMMappingListRef.value?.showData(state.curOamId)
+}
+
 onMounted(() => {
   getObjectData()
   getOAMTree()
@@ -125,9 +132,6 @@ const onTreeNodeClick = async (node: TreeNode) => {
   if (node.isLeaf) {
     state.curOamId = node.oamId
     await getObjectOAMData()
-    bizObjectOAMParamsListRef.value?.showData(state.curOamId)
-    bizObjectOAMRuleListRef.value?.showData(state.curOamId)
-    bizObjectOAMMappingListRef.value?.showData(state.curOamId)
   }
 }
 
@@ -310,7 +314,7 @@ function goBack() {
         </div>
       </LayoutContainer>
     </div>
-    <ObjectOAMComponent ref="objectOAMRef" @success="getOAMTree" />
+    <ObjectOAMComponent ref="objectOAMRef" @success="getObjectOAMData" />
   </div>
 </template>
 

+ 1 - 1
src/views/biz/rule/index.vue

@@ -27,7 +27,7 @@ onMounted(() => {
 
 <template>
   <div class="absolute-container">
-    <tool-header title="业务规则" />
+    <tool-header title="操作规则" />
 
     <page-main>
       <tool-bar>

+ 27 - 0
src/views/customer/ent/index.vue

@@ -0,0 +1,27 @@
+<route lang="yaml">
+meta:
+  enabled: false
+</route>
+
+<script lang="ts" setup>
+const value = ref(true)
+const value1 = ref(true)
+const value2 = ref(true)
+const value3 = ref(false)
+</script>
+
+<template>
+  <div>
+    <page-header title="开关" />
+    <page-main title="基础用法" class="demo">
+      <el-switch v-model="value" active-color="#13ce66" inactive-color="#ff4949" />
+    </page-main>
+    <page-main title="文字描述" class="demo">
+      <el-switch v-model="value1" active-text="按月付费" inactive-text="按年付费" />
+    </page-main>
+    <page-main title="禁用状态" class="demo">
+      <el-switch v-model="value2" disabled style="margin-right: 10px;" />
+      <el-switch v-model="value3" disabled />
+    </page-main>
+  </div>
+</template>

+ 27 - 0
src/views/customer/org/index.vue

@@ -0,0 +1,27 @@
+<route lang="yaml">
+meta:
+  enabled: false
+</route>
+
+<script lang="ts" setup>
+const value = ref(true)
+const value1 = ref(true)
+const value2 = ref(true)
+const value3 = ref(false)
+</script>
+
+<template>
+  <div>
+    <page-header title="开关" />
+    <page-main title="基础用法" class="demo">
+      <el-switch v-model="value" active-color="#13ce66" inactive-color="#ff4949" />
+    </page-main>
+    <page-main title="文字描述" class="demo">
+      <el-switch v-model="value1" active-text="按月付费" inactive-text="按年付费" />
+    </page-main>
+    <page-main title="禁用状态" class="demo">
+      <el-switch v-model="value2" disabled style="margin-right: 10px;" />
+      <el-switch v-model="value3" disabled />
+    </page-main>
+  </div>
+</template>

+ 27 - 0
src/views/customer/partner/index.vue

@@ -0,0 +1,27 @@
+<route lang="yaml">
+meta:
+  enabled: false
+</route>
+
+<script lang="ts" setup>
+const value = ref(true)
+const value1 = ref(true)
+const value2 = ref(true)
+const value3 = ref(false)
+</script>
+
+<template>
+  <div>
+    <page-header title="开关" />
+    <page-main title="基础用法" class="demo">
+      <el-switch v-model="value" active-color="#13ce66" inactive-color="#ff4949" />
+    </page-main>
+    <page-main title="文字描述" class="demo">
+      <el-switch v-model="value1" active-text="按月付费" inactive-text="按年付费" />
+    </page-main>
+    <page-main title="禁用状态" class="demo">
+      <el-switch v-model="value2" disabled style="margin-right: 10px;" />
+      <el-switch v-model="value3" disabled />
+    </page-main>
+  </div>
+</template>

+ 0 - 6
src/views/database/data/index.vue

@@ -152,12 +152,6 @@ const onSearch = () => {
 </template>
 
 <style lang="scss" scoped>
-.container {
-  height: 100%;
-  display: flex;
-  flex-direction: column;
-}
-
 .absolute-container {
   :deep(.left-side) {
     display: flex;

+ 18 - 22
src/views/database/type/components/DbType.vue

@@ -92,28 +92,24 @@ defineExpose({
 </script>
 
 <template>
-  <div>
-    <el-dialog v-model="state.dialogVisible" :title="state.title" width="600px" :close-on-click-modal="false" append-to-body destroy-on-close>
-      <div v-loading="state.loading">
-        <el-form ref="formRef" :model="state.formData" :rules="formRules" label-width="120px" label-suffix=":">
-          <el-form-item label="分类名称" prop="dbTypeTitle">
-            <el-input v-model="state.formData.dbTypeTitle" placeholder="请输入标题" />
-          </el-form-item>
+  <el-drawer v-model="state.dialogVisible" :title="state.title" width="600px" :close-on-click-modal="false" append-to-body destroy-on-close>
+    <el-form ref="formRef" :model="state.formData" :rules="formRules" label-width="120px" label-suffix=":">
+      <el-form-item label="分类名称" prop="dbTypeTitle">
+        <el-input v-model="state.formData.dbTypeTitle" placeholder="请输入标题" />
+      </el-form-item>
 
-          <el-form-item label="简要说明" prop="dbTypeDesc">
-            <el-input v-model="state.formData.dbTypeDesc" type="textarea" rows="10" placeholder="请输入简要说明" />
-          </el-form-item>
-        </el-form>
-      </div>
+      <el-form-item label="简要说明" prop="dbTypeDesc">
+        <el-input v-model="state.formData.dbTypeDesc" type="textarea" rows="10" placeholder="请输入简要说明" />
+      </el-form-item>
+    </el-form>
 
-      <template #footer>
-        <el-button size="large" @click="onCancel">
-          取消
-        </el-button>
-        <el-button type="primary" size="large" @click="onSubmit">
-          保存
-        </el-button>
-      </template>
-    </el-dialog>
-  </div>
+    <template #footer>
+      <el-button size="large" @click="onCancel">
+        取消
+      </el-button>
+      <el-button type="primary" size="large" @click="onSubmit">
+        保存
+      </el-button>
+    </template>
+  </el-drawer>
 </template>

+ 16 - 8
src/views/database/type/index.vue

@@ -15,7 +15,7 @@ const state = reactive({
   dataList: [],
 })
 
-const appCatRef = ref()
+const dbTypeRef = ref()
 
 const getDataList = async () => {
   state.loading = true
@@ -29,12 +29,12 @@ onMounted(() => {
 })
 
 function onDbTypeAdd() {
-  appCatRef.value.showAddModel()
+  dbTypeRef.value.showAddModel()
 }
 
 function onDbTypeEdit(row: any) {
-  const appCatId = row.appCatId
-  appCatRef.value.showEditModel(appCatId)
+  const dbTypeId = row.dbTypeId
+  dbTypeRef.value.showEditModel(dbTypeId)
 }
 
 function onDbTypeDel(row: any) {
@@ -59,7 +59,7 @@ function onDbTypeDel(row: any) {
       </template>
 
       <el-button-group>
-        <el-button type="primary" size="large" plain @click="onDbTypeAdd">
+        <el-button type="primary" size="large" @click="onDbTypeAdd">
           <template #icon>
             <el-icon>
               <svg-icon name="ep:plus" />
@@ -74,9 +74,17 @@ function onDbTypeDel(row: any) {
       <el-table v-loading="state.loading" class="list-table" :data="state.dataList" border stripe highlight-current-row height="100%">
         <el-table-column type="index" label="序号" width="60" header-align="center" align="center" />
 
-        <el-table-column prop="dbTypeTitle" label="名称" header-align="center" align="center" width="200" />
+        <el-table-column prop="dbTypeTitle" label="名称" header-align="center" align="center" width="200">
+          <template #default="scope">
+            <span> {{ scope.row.dbTypeTitle }}</span>
+          </template>
+        </el-table-column>
 
-        <el-table-column prop="dbTypeDesc" label="说明" />
+        <el-table-column prop="dbTypeDesc" label="说明">
+          <template #default="scope">
+            <span>{{ scope.row.dbTypeDesc }}</span>
+          </template>
+        </el-table-column>
 
         <el-table-column label="操作" width="250" align="center" fixed="right">
           <template #default="scope">
@@ -90,7 +98,7 @@ function onDbTypeDel(row: any) {
         </el-table-column>
       </el-table>
     </page-main>
-    <DbType ref="appCatRef" @success="getDataList" />
+    <DbType ref="dbTypeRef" @success="getDataList" />
   </div>
 </template>
 

+ 27 - 0
src/views/job/job/index.vue

@@ -0,0 +1,27 @@
+<route lang="yaml">
+meta:
+  enabled: false
+</route>
+
+<script lang="ts" setup>
+const value = ref(true)
+const value1 = ref(true)
+const value2 = ref(true)
+const value3 = ref(false)
+</script>
+
+<template>
+  <div>
+    <page-header title="开关" />
+    <page-main title="基础用法" class="demo">
+      <el-switch v-model="value" active-color="#13ce66" inactive-color="#ff4949" />
+    </page-main>
+    <page-main title="文字描述" class="demo">
+      <el-switch v-model="value1" active-text="按月付费" inactive-text="按年付费" />
+    </page-main>
+    <page-main title="禁用状态" class="demo">
+      <el-switch v-model="value2" disabled style="margin-right: 10px;" />
+      <el-switch v-model="value3" disabled />
+    </page-main>
+  </div>
+</template>

+ 27 - 0
src/views/job/job_class/index.vue

@@ -0,0 +1,27 @@
+<route lang="yaml">
+meta:
+  enabled: false
+</route>
+
+<script lang="ts" setup>
+const value = ref(true)
+const value1 = ref(true)
+const value2 = ref(true)
+const value3 = ref(false)
+</script>
+
+<template>
+  <div>
+    <page-header title="开关" />
+    <page-main title="基础用法" class="demo">
+      <el-switch v-model="value" active-color="#13ce66" inactive-color="#ff4949" />
+    </page-main>
+    <page-main title="文字描述" class="demo">
+      <el-switch v-model="value1" active-text="按月付费" inactive-text="按年付费" />
+    </page-main>
+    <page-main title="禁用状态" class="demo">
+      <el-switch v-model="value2" disabled style="margin-right: 10px;" />
+      <el-switch v-model="value3" disabled />
+    </page-main>
+  </div>
+</template>

+ 18 - 22
src/views/system/position/components/position.vue → src/views/system/position/components/Position.vue

@@ -92,28 +92,24 @@ defineExpose({
 </script>
 
 <template>
-  <div>
-    <el-dialog v-model="state.dialogVisible" :title="state.title" width="600px" :close-on-click-modal="false" append-to-body destroy-on-close>
-      <div v-loading="state.loading">
-        <el-form ref="formRef" :model="state.formData" :rules="formRules" label-width="120px" label-suffix=":">
-          <el-form-item label="岗位名称" prop="positionName">
-            <el-input v-model="state.formData.positionName" placeholder="请输入标题" />
-          </el-form-item>
+  <el-drawer v-model="state.dialogVisible" :title="state.title" width="600px" :close-on-click-modal="false" append-to-body destroy-on-close>
+    <el-form ref="formRef" :model="state.formData" :rules="formRules" label-width="120px" label-suffix=":">
+      <el-form-item label="岗位名称" prop="positionName">
+        <el-input v-model="state.formData.positionName" placeholder="请输入标题" />
+      </el-form-item>
 
-          <el-form-item label="简要说明" prop="positionDesc">
-            <el-input v-model="state.formData.positionDesc" type="textarea" rows="10" placeholder="请输入标题" />
-          </el-form-item>
-        </el-form>
-      </div>
+      <el-form-item label="简要说明" prop="positionDesc">
+        <el-input v-model="state.formData.positionDesc" type="textarea" rows="10" placeholder="请输入标题" />
+      </el-form-item>
+    </el-form>
 
-      <template #footer>
-        <el-button size="large" @click="onCancel">
-          取消
-        </el-button>
-        <el-button type="primary" size="large" @click="onSubmit">
-          保存
-        </el-button>
-      </template>
-    </el-dialog>
-  </div>
+    <template #footer>
+      <el-button size="large" @click="onCancel">
+        取消
+      </el-button>
+      <el-button type="primary" size="large" @click="onSubmit">
+        保存
+      </el-button>
+    </template>
+  </el-drawer>
 </template>

+ 13 - 7
src/views/system/position/index.vue

@@ -1,6 +1,6 @@
-<script lang="ts" setup name="roleIndex">
+<script lang="ts" setup name="positionIndex">
 import { ElMessage, ElMessageBox } from 'element-plus'
-import Position from './components/position.vue'
+import Position from './components/Position.vue'
 import { deletePositionById, getPositionByList } from '@/api/system/positionApi'
 
 const state = reactive({
@@ -28,8 +28,6 @@ onMounted(() => {
   getDataList()
 })
 
-function onCreate() {}
-
 function onPositionAdd() {
   positionRef.value.showAddModel()
 }
@@ -61,7 +59,7 @@ function onPositionDel(row: any) {
       </template>
 
       <el-button-group>
-        <el-button type="primary" size="large" plain @click="onPositionAdd">
+        <el-button type="primary" size="large" @click="onPositionAdd">
           <template #icon>
             <el-icon>
               <svg-icon name="ep:plus" />
@@ -76,9 +74,17 @@ function onPositionDel(row: any) {
       <el-table v-loading="state.loading" class="list-table" :data="state.dataList" border stripe highlight-current-row height="100%">
         <el-table-column type="index" label="序号" width="60" header-align="center" align="center" />
 
-        <el-table-column prop="positionName" label="名称" header-align="center" align="center" width="200" />
+        <el-table-column prop="positionName" label="名称" header-align="center" align="center" width="200">
+          <template #default="scope">
+            <span>{{ scope.row.positionName }}</span>
+          </template>
+        </el-table-column>
 
-        <el-table-column prop="positionDesc" label="说明" />
+        <el-table-column prop="positionDesc" label="说明">
+          <template #default="scope">
+            <span>{{ scope.row.positionDesc }}</span>
+          </template>
+        </el-table-column>
 
         <el-table-column label="操作" width="250" align="center" fixed="right">
           <template #default="scope">

+ 18 - 22
src/views/system/role/components/Role.vue

@@ -91,28 +91,24 @@ defineExpose({
 </script>
 
 <template>
-  <div>
-    <el-dialog v-model="state.dialogVisible" :title="state.title" width="600px" :close-on-click-modal="false" append-to-body destroy-on-close>
-      <div v-loading="state.loading">
-        <el-form ref="formRef" :model="state.formData" :rules="formRules" label-width="120px" label-suffix=":">
-          <el-form-item label="角色名称" prop="roleName">
-            <el-input v-model="state.formData.roleName" placeholder="请输入标题" />
-          </el-form-item>
+  <el-drawer v-model="state.dialogVisible" :title="state.title" width="600px" :close-on-click-modal="false" append-to-body destroy-on-close>
+    <el-form ref="formRef" :model="state.formData" :rules="formRules" label-width="120px" label-suffix=":">
+      <el-form-item label="角色名称" prop="roleName">
+        <el-input v-model="state.formData.roleName" placeholder="请输入标题" />
+      </el-form-item>
 
-          <el-form-item label="简要说明" prop="roleDesc">
-            <el-input v-model="state.formData.roleDesc" type="textarea" rows="10" placeholder="请输入标题" />
-          </el-form-item>
-        </el-form>
-      </div>
+      <el-form-item label="简要说明" prop="roleDesc">
+        <el-input v-model="state.formData.roleDesc" type="textarea" rows="10" placeholder="请输入标题" />
+      </el-form-item>
+    </el-form>
 
-      <template #footer>
-        <el-button size="large" @click="onCancel">
-          取消
-        </el-button>
-        <el-button type="primary" size="large" @click="onSubmit">
-          保存
-        </el-button>
-      </template>
-    </el-dialog>
-  </div>
+    <template #footer>
+      <el-button size="large" @click="onCancel">
+        取消
+      </el-button>
+      <el-button type="primary" size="large" @click="onSubmit">
+        保存
+      </el-button>
+    </template>
+  </el-drawer>
 </template>

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

@@ -61,7 +61,7 @@ function onRoleDel(row: any) {
       </template>
 
       <el-button-group>
-        <el-button type="primary" size="large" plain @click="onRoleAdd">
+        <el-button type="primary" size="large" @click="onRoleAdd">
           <template #icon>
             <el-icon>
               <svg-icon name="ep:plus" />
@@ -76,11 +76,19 @@ function onRoleDel(row: any) {
       <el-table v-loading="state.loading" class="list-table" :data="state.dataList" border stripe highlight-current-row height="100%">
         <el-table-column type="index" label="序号" width="60" header-align="center" align="center" />
 
-        <el-table-column prop="roleName" label="名称" header-align="center" align="center" width="200" />
+        <el-table-column prop="roleName" label="名称" header-align="center" align="center" width="200">
+          <template #default="scope">
+            <span>{{ scope.row.roleName }}</span>
+          </template>
+        </el-table-column>
 
-        <el-table-column prop="roleDesc" label="说明" />
+        <el-table-column prop="roleDesc" label="说明">
+          <template #default="scope">
+            <span>{{ scope.row.roleDesc }}</span>
+          </template>
+        </el-table-column>
 
-        <el-table-column label="操作" width="250" align="center" fixed="right">
+        <el-table-column label="操作" width="150" align="center" fixed="right">
           <template #default="scope">
             <el-button type="primary" size="small" plain @click="onRoleEdit(scope.row)">
               编辑

+ 18 - 22
src/views/system/setting/ent_cat/components/EntCat.vue

@@ -92,28 +92,24 @@ defineExpose({
 </script>
 
 <template>
-  <div>
-    <el-dialog v-model="state.dialogVisible" :title="state.title" width="600px" :close-on-click-modal="false" append-to-body destroy-on-close>
-      <div v-loading="state.loading">
-        <el-form ref="formRef" :model="state.formData" :rules="formRules" label-width="120px" label-suffix=":">
-          <el-form-item label="分类名称" prop="entCatTitle">
-            <el-input v-model="state.formData.entCatTitle" placeholder="请输入标题" />
-          </el-form-item>
+  <el-drawer v-model="state.dialogVisible" :title="state.title" width="600px" :close-on-click-modal="false" append-to-body destroy-on-close>
+    <el-form ref="formRef" :model="state.formData" :rules="formRules" label-width="120px" label-suffix=":">
+      <el-form-item label="分类名称" prop="entCatTitle">
+        <el-input v-model="state.formData.entCatTitle" placeholder="请输入标题" />
+      </el-form-item>
 
-          <el-form-item label="简要说明" prop="entCatDesc">
-            <el-input v-model="state.formData.entCatDesc" type="textarea" rows="10" placeholder="请输入简要说明" />
-          </el-form-item>
-        </el-form>
-      </div>
+      <el-form-item label="简要说明" prop="entCatDesc">
+        <el-input v-model="state.formData.entCatDesc" type="textarea" rows="10" placeholder="请输入简要说明" />
+      </el-form-item>
+    </el-form>
 
-      <template #footer>
-        <el-button size="large" @click="onCancel">
-          取消
-        </el-button>
-        <el-button type="primary" size="large" @click="onSubmit">
-          保存
-        </el-button>
-      </template>
-    </el-dialog>
-  </div>
+    <template #footer>
+      <el-button size="large" @click="onCancel">
+        取消
+      </el-button>
+      <el-button type="primary" size="large" @click="onSubmit">
+        保存
+      </el-button>
+    </template>
+  </el-drawer>
 </template>

+ 1 - 3
src/views/system/setting/ent_cat/index.vue

@@ -28,8 +28,6 @@ onMounted(() => {
   getDataList()
 })
 
-function onCreate() {}
-
 function onEntCatAdd() {
   entCatRef.value.showAddModel()
 }
@@ -61,7 +59,7 @@ function onEntCatDel(row: any) {
       </template>
 
       <el-button-group>
-        <el-button type="primary" size="large" plain @click="onEntCatAdd">
+        <el-button type="primary" size="large" @click="onEntCatAdd">
           <template #icon>
             <el-icon>
               <svg-icon name="ep:plus" />

+ 18 - 22
src/views/system/setting/group_cat/components/GroupCat.vue

@@ -92,28 +92,24 @@ defineExpose({
 </script>
 
 <template>
-  <div>
-    <el-dialog v-model="state.dialogVisible" :title="state.title" width="600px" :close-on-click-modal="false" append-to-body destroy-on-close>
-      <div v-loading="state.loading">
-        <el-form ref="formRef" :model="state.formData" :rules="formRules" label-width="120px" label-suffix=":">
-          <el-form-item label="分类名称" prop="groupCatTitle">
-            <el-input v-model="state.formData.groupCatTitle" placeholder="请输入标题" />
-          </el-form-item>
+  <el-drawer v-model="state.dialogVisible" :title="state.title" width="600px" :close-on-click-modal="false" append-to-body destroy-on-close>
+      <el-form ref="formRef" :model="state.formData" :rules="formRules" label-width="120px" label-suffix=":">
+      <el-form-item label="分类名称" prop="groupCatTitle">
+        <el-input v-model="state.formData.groupCatTitle" placeholder="请输入标题" />
+      </el-form-item>
 
-          <el-form-item label="简要说明" prop="groupCatDesc">
-            <el-input v-model="state.formData.groupCatDesc" type="textarea" rows="10" placeholder="请输入简要说明" />
-          </el-form-item>
-        </el-form>
-      </div>
+      <el-form-item label="简要说明" prop="groupCatDesc">
+        <el-input v-model="state.formData.groupCatDesc" type="textarea" rows="10" placeholder="请输入简要说明" />
+      </el-form-item>
+    </el-form>
 
-      <template #footer>
-        <el-button size="large" @click="onCancel">
-          取消
-        </el-button>
-        <el-button type="primary" size="large" @click="onSubmit">
-          保存
-        </el-button>
-      </template>
-    </el-dialog>
-  </div>
+    <template #footer>
+      <el-button size="large" @click="onCancel">
+        取消
+      </el-button>
+      <el-button type="primary" size="large" @click="onSubmit">
+        保存
+      </el-button>
+    </template>
+  </el-drawer>
 </template>

+ 11 - 3
src/views/system/setting/group_cat/index.vue

@@ -61,7 +61,7 @@ function onGroupCatDel(row: any) {
       </template>
 
       <el-button-group>
-        <el-button type="primary" size="large" plain @click="onGroupCatAdd">
+        <el-button type="primary" size="large" @click="onGroupCatAdd">
           <template #icon>
             <el-icon>
               <svg-icon name="ep:plus" />
@@ -76,9 +76,17 @@ function onGroupCatDel(row: any) {
       <el-table v-loading="state.loading" class="list-table" :data="state.dataList" border stripe highlight-current-row height="100%">
         <el-table-column type="index" label="序号" width="60" header-align="center" align="center" />
 
-        <el-table-column prop="groupCatTitle" label="名称" header-align="center" align="center" width="200" />
+        <el-table-column prop="groupCatTitle" label="名称" header-align="center" align="center" width="200">
+          <template #default="scope">
+            <span>{{ scope.row.groupCatTitle }}</span>
+          </template>
+        </el-table-column>
 
-        <el-table-column prop="groupCatDesc" label="说明" />
+        <el-table-column prop="groupCatDesc" label="说明">
+          <template #default="scope">
+            <span>{{ scope.row.groupDesc }}</span>
+          </template>
+        </el-table-column>
 
         <el-table-column label="操作" width="250" align="center" fixed="right">
           <template #default="scope">

+ 18 - 22
src/views/system/setting/partner_cat/components/PartnerCat.vue

@@ -92,28 +92,24 @@ defineExpose({
 </script>
 
 <template>
-  <div>
-    <el-dialog v-model="state.dialogVisible" :title="state.title" width="600px" :close-on-click-modal="false" append-to-body destroy-on-close>
-      <div v-loading="state.loading">
-        <el-form ref="formRef" :model="state.formData" :rules="formRules" label-width="120px" label-suffix=":">
-          <el-form-item label="分类名称" prop="partnerCatTitle">
-            <el-input v-model="state.formData.partnerCatTitle" placeholder="请输入标题" />
-          </el-form-item>
+  <el-drawer v-model="state.dialogVisible" :title="state.title" width="600px" :close-on-click-modal="false" append-to-body destroy-on-close>
+    <el-form ref="formRef" :model="state.formData" :rules="formRules" label-width="120px" label-suffix=":">
+      <el-form-item label="分类名称" prop="partnerCatTitle">
+        <el-input v-model="state.formData.partnerCatTitle" placeholder="请输入标题" />
+      </el-form-item>
 
-          <el-form-item label="简要说明" prop="partnerCatDesc">
-            <el-input v-model="state.formData.partnerCatDesc" type="textarea" rows="10" placeholder="请输入简要说明" />
-          </el-form-item>
-        </el-form>
-      </div>
+      <el-form-item label="简要说明" prop="partnerCatDesc">
+        <el-input v-model="state.formData.partnerCatDesc" type="textarea" rows="10" placeholder="请输入简要说明" />
+      </el-form-item>
+    </el-form>
 
-      <template #footer>
-        <el-button size="large" @click="onCancel">
-          取消
-        </el-button>
-        <el-button type="primary" size="large" @click="onSubmit">
-          保存
-        </el-button>
-      </template>
-    </el-dialog>
-  </div>
+    <template #footer>
+      <el-button size="large" @click="onCancel">
+        取消
+      </el-button>
+      <el-button type="primary" size="large" @click="onSubmit">
+        保存
+      </el-button>
+    </template>
+  </el-drawer>
 </template>

+ 12 - 4
src/views/system/setting/partner_cat/index.vue

@@ -59,7 +59,7 @@ function onPartnerCatDel(row: any) {
       </template>
 
       <el-button-group>
-        <el-button type="primary" size="large" plain @click="onPartnerCatAdd">
+        <el-button type="primary" size="large" @click="onPartnerCatAdd">
           <template #icon>
             <el-icon>
               <svg-icon name="ep:plus" />
@@ -74,11 +74,19 @@ function onPartnerCatDel(row: any) {
       <el-table v-loading="state.loading" class="list-table" :data="state.dataList" border stripe highlight-current-row height="100%">
         <el-table-column type="index" label="序号" width="60" header-align="center" align="center" />
 
-        <el-table-column prop="partnerCatTitle" label="名称" header-align="center" align="center" width="200" />
+        <el-table-column prop="partnerCatTitle" label="名称" header-align="center" align="center" width="200">
+          <template #default="scope">
+            <span>{{ scope.row.partnerCatTitle }}</span>
+          </template>
+        </el-table-column>
 
-        <el-table-column prop="partnerCatDesc" label="说明" />
+        <el-table-column prop="partnerCatDesc" label="说明">
+          <template #default="scope">
+            <span>{{ scope.row.partnerCatDesc }}</span>
+          </template>
+        </el-table-column>
 
-        <el-table-column label="操作" width="250" align="center" fixed="right">
+        <el-table-column label="操作" width="200" align="center" fixed="right">
           <template #default="scope">
             <el-button type="primary" size="small" plain @click="onPartnerCatEdit(scope.row)">
               编辑

+ 18 - 22
src/views/system/setting/task_cat/components/TaskCat.vue

@@ -92,28 +92,24 @@ defineExpose({
 </script>
 
 <template>
-  <div>
-    <el-dialog v-model="state.dialogVisible" :title="state.title" width="600px" :close-on-click-modal="false" append-to-body destroy-on-close>
-      <div v-loading="state.loading">
-        <el-form ref="formRef" :model="state.formData" :rules="formRules" label-width="120px" label-suffix=":">
-          <el-form-item label="分类名称" prop="taskCatTitle">
-            <el-input v-model="state.formData.taskCatTitle" placeholder="请输入标题" />
-          </el-form-item>
+  <el-drawer v-model="state.dialogVisible" :title="state.title" width="600px" :close-on-click-modal="false" append-to-body destroy-on-close>
+    <el-form ref="formRef" :model="state.formData" :rules="formRules" label-width="120px" label-suffix=":">
+      <el-form-item label="分类名称" prop="taskCatTitle">
+        <el-input v-model="state.formData.taskCatTitle" placeholder="请输入标题" />
+      </el-form-item>
 
-          <el-form-item label="简要说明" prop="taskCatDesc">
-            <el-input v-model="state.formData.taskCatDesc" type="textarea" rows="10" placeholder="请输入简要说明" />
-          </el-form-item>
-        </el-form>
-      </div>
+      <el-form-item label="简要说明" prop="taskCatDesc">
+        <el-input v-model="state.formData.taskCatDesc" type="textarea" rows="10" placeholder="请输入简要说明" />
+      </el-form-item>
+    </el-form>
 
-      <template #footer>
-        <el-button size="large" @click="onCancel">
-          取消
-        </el-button>
-        <el-button type="primary" size="large" @click="onSubmit">
-          保存
-        </el-button>
-      </template>
-    </el-dialog>
-  </div>
+    <template #footer>
+      <el-button size="large" @click="onCancel">
+        取消
+      </el-button>
+      <el-button type="primary" size="large" @click="onSubmit">
+        保存
+      </el-button>
+    </template>
+  </el-drawer>
 </template>

+ 11 - 5
src/views/system/setting/task_cat/index.vue

@@ -28,8 +28,6 @@ onMounted(() => {
   getDataList()
 })
 
-function onCreate() {}
-
 function onTaskCatAdd() {
   taskCatRef.value.showAddModel()
 }
@@ -61,7 +59,7 @@ function onTaskCatDel(row: any) {
       </template>
 
       <el-button-group>
-        <el-button type="primary" size="large" plain @click="onTaskCatAdd">
+        <el-button type="primary" size="large" @click="onTaskCatAdd">
           <template #icon>
             <el-icon>
               <svg-icon name="ep:plus" />
@@ -76,9 +74,17 @@ function onTaskCatDel(row: any) {
       <el-table v-loading="state.loading" class="list-table" :data="state.dataList" border stripe highlight-current-row height="100%">
         <el-table-column type="index" label="序号" width="60" header-align="center" align="center" />
 
-        <el-table-column prop="taskCatTitle" label="名称" header-align="center" align="center" width="200" />
+        <el-table-column prop="taskCatTitle" label="名称" header-align="center" align="center" width="200">
+          <template #default="scope">
+            <span>{{ scope.row.taskCatTitle }}</span>
+          </template>
+        </el-table-column>
 
-        <el-table-column prop="taskCatDesc" label="说明" />
+        <el-table-column prop="taskCatDesc" label="说明">
+          <template #default="scope">
+            <span>{{ scope.row.taskCatDesc }}</span>
+          </template>
+        </el-table-column>
 
         <el-table-column label="操作" width="250" align="center" fixed="right">
           <template #default="scope">

+ 27 - 0
src/views/workflow/def/index.vue

@@ -0,0 +1,27 @@
+<route lang="yaml">
+meta:
+  enabled: false
+</route>
+
+<script lang="ts" setup>
+const value = ref(true)
+const value1 = ref(true)
+const value2 = ref(true)
+const value3 = ref(false)
+</script>
+
+<template>
+  <div>
+    <page-header title="开关" />
+    <page-main title="基础用法" class="demo">
+      <el-switch v-model="value" active-color="#13ce66" inactive-color="#ff4949" />
+    </page-main>
+    <page-main title="文字描述" class="demo">
+      <el-switch v-model="value1" active-text="按月付费" inactive-text="按年付费" />
+    </page-main>
+    <page-main title="禁用状态" class="demo">
+      <el-switch v-model="value2" disabled style="margin-right: 10px;" />
+      <el-switch v-model="value3" disabled />
+    </page-main>
+  </div>
+</template>

+ 27 - 0
src/views/workflow/example/index.vue

@@ -0,0 +1,27 @@
+<route lang="yaml">
+meta:
+  enabled: false
+</route>
+
+<script lang="ts" setup>
+const value = ref(true)
+const value1 = ref(true)
+const value2 = ref(true)
+const value3 = ref(false)
+</script>
+
+<template>
+  <div>
+    <page-header title="开关" />
+    <page-main title="基础用法" class="demo">
+      <el-switch v-model="value" active-color="#13ce66" inactive-color="#ff4949" />
+    </page-main>
+    <page-main title="文字描述" class="demo">
+      <el-switch v-model="value1" active-text="按月付费" inactive-text="按年付费" />
+    </page-main>
+    <page-main title="禁用状态" class="demo">
+      <el-switch v-model="value2" disabled style="margin-right: 10px;" />
+      <el-switch v-model="value3" disabled />
+    </page-main>
+  </div>
+</template>

+ 27 - 0
src/views/workflow/ins/index.vue

@@ -0,0 +1,27 @@
+<route lang="yaml">
+meta:
+  enabled: false
+</route>
+
+<script lang="ts" setup>
+const value = ref(true)
+const value1 = ref(true)
+const value2 = ref(true)
+const value3 = ref(false)
+</script>
+
+<template>
+  <div>
+    <page-header title="开关" />
+    <page-main title="基础用法" class="demo">
+      <el-switch v-model="value" active-color="#13ce66" inactive-color="#ff4949" />
+    </page-main>
+    <page-main title="文字描述" class="demo">
+      <el-switch v-model="value1" active-text="按月付费" inactive-text="按年付费" />
+    </page-main>
+    <page-main title="禁用状态" class="demo">
+      <el-switch v-model="value2" disabled style="margin-right: 10px;" />
+      <el-switch v-model="value3" disabled />
+    </page-main>
+  </div>
+</template>