Jelajahi Sumber

Merge branch 'v5.0.0dev' of https://gitee.com/ZhongBangKeJi/CRMEB into v5.0.0dev

evoxwht 2 tahun lalu
induk
melakukan
14a6c12b2d
39 mengubah file dengan 294 tambahan dan 160 penghapusan
  1. 12 4
      crmeb/app/adminapi/controller/v1/setting/SystemMenus.php
  2. 1 1
      crmeb/app/model/system/SystemRouteCate.php
  3. 1 1
      crmeb/app/services/system/SystemRouteCateServices.php
  4. 1 1
      crmeb/public/admin/index.html
  5. 1 0
      crmeb/public/admin/system_static/css/chunk-06565fa8.f33e8737.css
  6. 1 0
      crmeb/public/admin/system_static/css/chunk-0e1bff56.0499104f.css
  7. 1 0
      crmeb/public/admin/system_static/css/chunk-1b2bad82.65d216aa.css
  8. 1 0
      crmeb/public/admin/system_static/css/chunk-27331629.2437fd16.css
  9. 1 0
      crmeb/public/admin/system_static/css/chunk-33dc3354.eae4755a.css
  10. 1 0
      crmeb/public/admin/system_static/css/chunk-472197e0.1a216cc5.css
  11. 1 0
      crmeb/public/admin/system_static/css/chunk-53a4d7e3.7f74963c.css
  12. 1 0
      crmeb/public/admin/system_static/css/chunk-55df0dc3.e15adb10.css
  13. 1 0
      crmeb/public/admin/system_static/css/chunk-5c905c73.95b96584.css
  14. 1 0
      crmeb/public/admin/system_static/css/chunk-731d0dcd.79ec1310.css
  15. 1 0
      crmeb/public/admin/system_static/css/chunk-b12df032.4bb3bb3c.css
  16. 1 0
      crmeb/public/admin/system_static/css/chunk-cc93a18a.b92164ea.css
  17. 1 0
      crmeb/public/admin/system_static/js/app.31344de0.js
  18. 1 0
      crmeb/public/admin/system_static/js/chunk-06565fa8.f863be28.js
  19. 1 0
      crmeb/public/admin/system_static/js/chunk-0e1bff56.b928e897.js
  20. 1 0
      crmeb/public/admin/system_static/js/chunk-1b2bad82.f4303a78.js
  21. 1 0
      crmeb/public/admin/system_static/js/chunk-27331629.2e9f2283.js
  22. 1 0
      crmeb/public/admin/system_static/js/chunk-2d21da46.6c4bd930.js
  23. 1 0
      crmeb/public/admin/system_static/js/chunk-33dc3354.59bdb4de.js
  24. 1 0
      crmeb/public/admin/system_static/js/chunk-472197e0.51c6144a.js
  25. 1 0
      crmeb/public/admin/system_static/js/chunk-53a4d7e3.e1dfb597.js
  26. 7 0
      crmeb/public/admin/system_static/js/chunk-55df0dc3.828e7e2f.js
  27. 1 0
      crmeb/public/admin/system_static/js/chunk-5c905c73.4c6e2192.js
  28. 1 0
      crmeb/public/admin/system_static/js/chunk-731d0dcd.18a5f1aa.js
  29. 1 0
      crmeb/public/admin/system_static/js/chunk-b12df032.5dd38b51.js
  30. 1 0
      crmeb/public/admin/system_static/js/chunk-cc93a18a.d7369fa2.js
  31. 6 3
      template/admin/src/layout/navBars/breadcrumb/user.vue
  32. 7 1
      template/admin/src/pages/kefu/mobile/chat_list.vue
  33. 124 124
      template/admin/src/pages/setting/systemMenus/index.vue
  34. 1 1
      template/admin/src/pages/setting/systemOutInterface/index.vue
  35. 84 16
      template/admin/src/pages/system/backendRouting/debugging.vue
  36. 7 2
      template/admin/src/pages/system/backendRouting/index.vue
  37. 1 1
      template/admin/src/pages/system/backendRouting/request.js
  38. 13 4
      template/admin/src/pages/system/codeGeneration/index.vue
  39. 4 1
      template/admin/src/store/module/app.js

+ 12 - 4
crmeb/app/adminapi/controller/v1/setting/SystemMenus.php

@@ -13,6 +13,7 @@ namespace app\adminapi\controller\v1\setting;
 
 use app\adminapi\controller\AuthController;
 use app\services\system\SystemMenusServices;
+use app\services\system\SystemRouteCateServices;
 use app\services\system\SystemRouteServices;
 use think\facade\App;
 use think\facade\Route;
@@ -274,14 +275,21 @@ class SystemMenus extends AuthController
     public function ruleList()
     {
         //获取所有的路由
-        $ruleList = app()->make(SystemRouteServices::class)->selectList(['app_name' => 'adminapi'], 'name,path,method,type,id')->toArray();
+        $ruleList = app()->make(SystemRouteCateServices::class)->selectList(['app_name' => 'adminapi'], 'id,name', 0, 0, 'id asc,sort desc', ['children'])->toArray();
         $menuApiList = $this->services->getColumn(['auth_type' => 2, 'is_del' => 0], "concat(`api_url`,'_',lower(`methods`)) as rule");
         if ($menuApiList) $menuApiList = array_column($menuApiList, 'rule');
         $list = [];
         foreach ($ruleList as $item) {
-            if ($item['type'] || !in_array($item['path'] . '_' . strtolower($item['method']), $menuApiList)) {
-                $item['real_name'] = $item['name'] ?? '';
-                $item['method'] = strtoupper($item['method']);
+            $children = [];
+            foreach ($item['children'] as $value) {
+                if ($value['type'] || !in_array($value['path'] . '_' . strtolower($value['method']), $menuApiList)) {
+                    $value['real_name'] = $value['name'] ?? '';
+                    $value['method'] = strtoupper($value['method']);
+                    $children[] = $value;
+                }
+            }
+            if ($children) {
+                $item['children'] = $children;
                 $list[] = $item;
             }
         }

+ 1 - 1
crmeb/app/model/system/SystemRouteCate.php

@@ -39,6 +39,6 @@ class SystemRouteCate extends BaseModel
      */
     public function children()
     {
-        return $this->hasMany(SystemRoute::class, 'cate_id', 'id')->field(['id', 'cate_id', 'name', 'path', 'method'])->order('add_time desc');
+        return $this->hasMany(SystemRoute::class, 'cate_id', 'id')->field(['id', 'type', 'cate_id', 'name', 'name as real_name', 'path', 'method'])->order('add_time desc');
     }
 }

+ 1 - 1
crmeb/app/services/system/SystemRouteCateServices.php

@@ -103,7 +103,7 @@ class SystemRouteCateServices extends BaseServices
         }
         $options = $this->dao->selectList(['app_name' => $appName], 'name as label,id as value,id,pid')->toArray();
         $rule = [
-            FormBuilder::cascader('path', '上级分类', $path)->data(get_tree_children($options)),
+//            FormBuilder::cascader('path', '上级分类', $path)->data(get_tree_children($options)),
             FormBuilder::input('name', '分类名称', $cateInfo['name'] ?? '')->required(),
             FormBuilder::number('sort', '排序', (int)($cateInfo['sort'] ?? 0)),
             FormBuilder::hidden('app_name', $appName)

File diff ditekan karena terlalu besar
+ 1 - 1
crmeb/public/admin/index.html


File diff ditekan karena terlalu besar
+ 1 - 0
crmeb/public/admin/system_static/css/chunk-06565fa8.f33e8737.css


File diff ditekan karena terlalu besar
+ 1 - 0
crmeb/public/admin/system_static/css/chunk-0e1bff56.0499104f.css


File diff ditekan karena terlalu besar
+ 1 - 0
crmeb/public/admin/system_static/css/chunk-1b2bad82.65d216aa.css


File diff ditekan karena terlalu besar
+ 1 - 0
crmeb/public/admin/system_static/css/chunk-27331629.2437fd16.css


File diff ditekan karena terlalu besar
+ 1 - 0
crmeb/public/admin/system_static/css/chunk-33dc3354.eae4755a.css


File diff ditekan karena terlalu besar
+ 1 - 0
crmeb/public/admin/system_static/css/chunk-472197e0.1a216cc5.css


File diff ditekan karena terlalu besar
+ 1 - 0
crmeb/public/admin/system_static/css/chunk-53a4d7e3.7f74963c.css


File diff ditekan karena terlalu besar
+ 1 - 0
crmeb/public/admin/system_static/css/chunk-55df0dc3.e15adb10.css


File diff ditekan karena terlalu besar
+ 1 - 0
crmeb/public/admin/system_static/css/chunk-5c905c73.95b96584.css


+ 1 - 0
crmeb/public/admin/system_static/css/chunk-731d0dcd.79ec1310.css

@@ -0,0 +1 @@
+.tableBox[data-v-3b385f76] .ivu-table-header table{border:none!important}

File diff ditekan karena terlalu besar
+ 1 - 0
crmeb/public/admin/system_static/css/chunk-b12df032.4bb3bb3c.css


File diff ditekan karena terlalu besar
+ 1 - 0
crmeb/public/admin/system_static/css/chunk-cc93a18a.b92164ea.css


File diff ditekan karena terlalu besar
+ 1 - 0
crmeb/public/admin/system_static/js/app.31344de0.js


File diff ditekan karena terlalu besar
+ 1 - 0
crmeb/public/admin/system_static/js/chunk-06565fa8.f863be28.js


File diff ditekan karena terlalu besar
+ 1 - 0
crmeb/public/admin/system_static/js/chunk-0e1bff56.b928e897.js


File diff ditekan karena terlalu besar
+ 1 - 0
crmeb/public/admin/system_static/js/chunk-1b2bad82.f4303a78.js


File diff ditekan karena terlalu besar
+ 1 - 0
crmeb/public/admin/system_static/js/chunk-27331629.2e9f2283.js


File diff ditekan karena terlalu besar
+ 1 - 0
crmeb/public/admin/system_static/js/chunk-2d21da46.6c4bd930.js


File diff ditekan karena terlalu besar
+ 1 - 0
crmeb/public/admin/system_static/js/chunk-33dc3354.59bdb4de.js


File diff ditekan karena terlalu besar
+ 1 - 0
crmeb/public/admin/system_static/js/chunk-472197e0.51c6144a.js


File diff ditekan karena terlalu besar
+ 1 - 0
crmeb/public/admin/system_static/js/chunk-53a4d7e3.e1dfb597.js


File diff ditekan karena terlalu besar
+ 7 - 0
crmeb/public/admin/system_static/js/chunk-55df0dc3.828e7e2f.js


File diff ditekan karena terlalu besar
+ 1 - 0
crmeb/public/admin/system_static/js/chunk-5c905c73.4c6e2192.js


File diff ditekan karena terlalu besar
+ 1 - 0
crmeb/public/admin/system_static/js/chunk-731d0dcd.18a5f1aa.js


File diff ditekan karena terlalu besar
+ 1 - 0
crmeb/public/admin/system_static/js/chunk-b12df032.5dd38b51.js


File diff ditekan karena terlalu besar
+ 1 - 0
crmeb/public/admin/system_static/js/chunk-cc93a18a.d7369fa2.js


+ 6 - 3
template/admin/src/layout/navBars/breadcrumb/user.vue

@@ -198,12 +198,15 @@ export default {
                 instance.confirmButtonLoading = true;
                 instance.confirmButtonText = this.$t('message.user.logOutExit');
                 AccountLogout().then((res) => {
-                  this.$Message.success('您已成功退出');
-                  this.$router.replace({ path: `${settings.routePre}/login` });
+                  this.$router.replace({ name: 'login' });
+                  this.$store.commit('clearAll');
+                  localStorage.clear();
+                  sessionStorage.clear();
                   removeCookies('token');
                   removeCookies('expires_time');
                   removeCookies('uuid');
-                  // window.location.reload()
+                  this.$Message.success('您已成功退出');
+                  // this.$router.replace({ path: `${settings.routePre}/login` });
                   done();
                   setTimeout(() => {
                     instance.confirmButtonLoading = false;

+ 7 - 1
template/admin/src/pages/kefu/mobile/chat_list.vue

@@ -331,8 +331,14 @@ export default {
   },
 };
 </script>
-
+<style>
+html,
+body {
+  font-size: 50px;
+}
+</style>
 <style scoped lang="stylus">
+
 .chat-list {
     display: flex;
     flex-direction: column;

+ 124 - 124
template/admin/src/pages/setting/systemMenus/index.vue

@@ -2,11 +2,11 @@
   <div>
     <Card :bordered="false" dis-hover class="ivu-mt">
       <Form
-        ref="roleData"
-        :model="roleData"
-        :label-width="labelWidth"
-        :label-position="labelPosition"
-        @submit.native.prevent
+          ref="roleData"
+          :model="roleData"
+          :label-width="labelWidth"
+          :label-position="labelPosition"
+          @submit.native.prevent
       >
         <Row type="flex" :gutter="24">
           <Col v-bind="grid">
@@ -19,29 +19,30 @@
           </Col>
           <Col v-bind="grid">
             <FormItem label="按钮名称:" prop="status2" label-for="status2">
-              <Input v-model="roleData.keyword" search enter-button placeholder="请输入按钮名称" @on-search="getData" />
+              <Input v-model="roleData.keyword" search enter-button placeholder="请输入按钮名称" @on-search="getData"/>
             </FormItem>
           </Col>
         </Row>
         <Row type="flex">
           <Col v-bind="grid">
             <Button v-auth="['setting-system_menus-add']" type="primary" @click="menusAdd('添加规则')" icon="md-add"
-              >添加规则</Button
+            >添加规则
+            </Button
             >
           </Col>
         </Row>
       </Form>
       <vxe-table
-        :border="false"
-        class="vxeTable mt25"
-        highlight-hover-row
-        highlight-current-row
-        :loading="loading"
-        ref="xTable"
-        header-row-class-name="false"
-        :tree-config="tabconfig"
-        :data="tableData"
-        row-id="id"
+          :border="false"
+          class="vxeTable mt25"
+          highlight-hover-row
+          highlight-current-row
+          :loading="loading"
+          ref="xTable"
+          header-row-class-name="false"
+          :tree-config="tabconfig"
+          :data="tableData"
+          row-id="id"
       >
         <vxe-table-column field="id" title="ID" tooltip min-width="70"></vxe-table-column>
         <vxe-table-column field="menu_name" tree-node title="按钮名称" min-width="200"></vxe-table-column>
@@ -55,12 +56,12 @@
         <vxe-table-column field="flag" title="规则状态" min-width="120">
           <template v-slot="{ row }">
             <i-switch
-              v-model="row.is_show"
-              :value="row.is_show"
-              :true-value="1"
-              :false-value="0"
-              @on-change="onchangeIsShow(row)"
-              size="large"
+                v-model="row.is_show"
+                :value="row.is_show"
+                :true-value="1"
+                :false-value="0"
+                @on-change="onchangeIsShow(row)"
+                size="large"
             >
               <span slot="open">显示</span>
               <span slot="close">隐藏</span>
@@ -71,63 +72,62 @@
           <template v-slot="{ row, index }">
             <span v-auth="['setting-system_menus-add']">
               <a @click="addRoute(row)" v-if="row.auth_type === 1">添加权限</a>
-              <Divider type="vertical" v-if="row.auth_type === 1" />
+              <Divider type="vertical" v-if="row.auth_type === 1"/>
               <a @click="addE(row, '添加子菜单')" v-if="row.auth_type === 1">添加子菜单</a>
               <!-- <a @click="addE(row, '添加规则')" v-else>添加规则</a> -->
             </span>
-            <Divider type="vertical" v-if="row.auth_type === 1" />
+            <Divider type="vertical" v-if="row.auth_type === 1"/>
             <a @click="edit(row, '编辑')">编辑</a>
-            <Divider type="vertical" />
+            <Divider type="vertical"/>
             <a @click="del(row, '删除规则')">删除</a>
           </template>
         </vxe-table-column>
       </vxe-table>
     </Card>
     <menus-from
-      :formValidate="formValidate"
-      :titleFrom="titleFrom"
-      @getList="getList"
-      @changeMenu="getMenusUnique"
-      ref="menusFrom"
-      @clearFrom="clearFrom"
+        :formValidate="formValidate"
+        :titleFrom="titleFrom"
+        @getList="getList"
+        @changeMenu="getMenusUnique"
+        ref="menusFrom"
+        @clearFrom="clearFrom"
     ></menus-from>
     <Modal
-      v-model="ruleModal"
-      scrollable
-      width="1100"
-      title="权限列表"
-      @on-ok="addRouters"
-      @on-cancel="ruleModal = false"
-      @on-visible-change="modalchange"
+        v-model="ruleModal"
+        scrollable
+        width="1100"
+        title="权限列表"
+        @on-ok="addRouters"
+        @on-cancel="ruleModal = false"
+        @on-visible-change="modalchange"
     >
       <div class="search-rule">
         <Alert>基础接口,可多选,并且添加后不会再展示出现;删除权限后才会出现;公共接口,可多选,并且添加后会继续展示;</Alert>
         <Input
-          class="mr10"
-          v-model="searchRule"
-          placeholder="输入关键词搜索"
-          clearable
-          style="width: 300px"
-          ref="search"
-          @on-enter="searchRules"
-          @on-clear="searchRules"
+            class="mr10"
+            v-model="searchRule"
+            placeholder="输入关键词搜索"
+            clearable
+            style="width: 300px"
+            ref="search"
+            @on-enter="searchRules"
+            @on-clear="searchRules"
         />
         <Button class="mr10" type="primary" @click="searchRules">搜索</Button>
         <Button @click="init">重置</Button>
       </div>
 
       <Tabs v-model="routeType" @on-click="changTab">
-        <TabPane label="公共接口" name="1"></TabPane>
-        <TabPane label="基础接口" name="0"></TabPane>
+        <TabPane :label="item.name" :name="''+index" v-for="(item,index) in foundationList"></TabPane>
       </Tabs>
       <div class="rule">
         <div
-          class="rule-list"
-          v-show="!arrs.length || arrs.includes(item.id)"
-          :class="{ 'select-rule': seletRouteIds.includes(item.id) }"
-          v-for="(item, index) in routeType == 1 ? foundationList : openList"
-          :key="index"
-          @click="selectRule(item)"
+            class="rule-list"
+            v-show="!arrs.length || arrs.includes(item.id)"
+            :class="{ 'select-rule': seletRouteIds.includes(item.id) }"
+            v-for="(item, index) in children"
+            :key="index"
+            @click="selectRule(item)"
         >
           <div>接口名称:{{ item.real_name }}</div>
           <div>请求方式:{{ item.method }}</div>
@@ -139,7 +139,7 @@
 </template>
 
 <script>
-import { mapState } from 'vuex';
+import {mapState} from 'vuex';
 import {
   getTable,
   menusDetailsApi,
@@ -151,13 +151,14 @@ import {
 } from '@/api/systemMenus';
 import formCreate from '@form-create/iview';
 import menusFrom from './components/menusFrom';
-import { formatFlatteningRoutes } from '@/libs/system';
+import {formatFlatteningRoutes} from '@/libs/system';
 
 export default {
   name: 'systemMenus',
   data() {
     return {
-      tabconfig: { children: 'children', reserve: true, accordion: true },
+      children: [],
+      tabconfig: {children: 'children', reserve: true, accordion: true},
       spinShow: false,
       ruleModal: false,
       searchRule: '',
@@ -179,7 +180,7 @@ export default {
       formValidate: {},
       titleFrom: '',
       modalTitleSs: '',
-      routeType: '1',
+      routeType: '0',
       arrs: [],
       foundationList: [], // 基础接口列表
       openList: [], // 公开接口列表
@@ -188,7 +189,7 @@ export default {
       menusId: 0, // 选中分类id
     };
   },
-  components: { menusFrom, formCreate: formCreate.$form() },
+  components: {menusFrom, formCreate: formCreate.$form()},
   computed: {
     ...mapState('admin/layout', ['isMobile']),
     labelWidth() {
@@ -213,13 +214,13 @@ export default {
         menus: this.seletRoute,
       };
       menusBatch(data)
-        .then((res) => {
-          console.log(res);
-          this.getData();
-        })
-        .catch((res) => {
-          this.$Message.error(res.msg);
-        });
+          .then((res) => {
+            console.log(res);
+            this.getData();
+          })
+          .catch((res) => {
+            this.$Message.error(res.msg);
+          });
     },
     selectRule(data) {
       if (this.seletRouteIds.includes(data.id)) {
@@ -238,14 +239,16 @@ export default {
       }
     },
     changTab(name) {
-      console.log(name);
+      this.routeType = name;
+      let index = parseInt(name)
+      this.children = this.foundationList[index] ? this.foundationList[index].children : []
       this.searchRules();
     },
     // 搜索规则
     searchRules() {
       if (this.searchRule.trim()) {
         this.arrs = [];
-        let arr = this.routeType == 1 ? this.foundationList : this.openList;
+        let arr = this.foundationList;
         for (var i = 0; i < arr.length; i++) {
           if (arr[i].real_name.indexOf(this.searchRule) !== -1) {
             this.arrs.push(arr[i].id);
@@ -257,23 +260,19 @@ export default {
     },
     addRoute(row) {
       this.menusId = row.id;
+      this.routeType = '0';
       this.getRuleList();
     },
-    modalchange() {},
+    modalchange() {
+    },
     // 获取权限列表
     getRuleList() {
       getRuleList().then((res) => {
-        this.foundationList = [];
+        this.foundationList = res.data;
+        this.children = this.foundationList[0] ? this.foundationList[0].children : []
         this.openList = [];
         this.seletRouteIds = [];
         this.seletRoute = [];
-        res.data.map((e) => {
-          if (e.type) {
-            this.foundationList.push(e);
-          } else {
-            this.openList.push(e);
-          }
-        });
         this.ruleModal = true;
       });
     },
@@ -284,13 +283,13 @@ export default {
         is_show: row.is_show,
       };
       isShowApi(data)
-        .then(async (res) => {
-          this.$Message.success(res.msg);
-          this.$store.dispatch('menus/getMenusNavList');
-        })
-        .catch((res) => {
-          this.$Message.error(res.msg);
-        });
+          .then(async (res) => {
+            this.$Message.success(res.msg);
+            this.$store.dispatch('menus/getMenusNavList');
+          })
+          .catch((res) => {
+            this.$Message.error(res.msg);
+          });
     },
     // 请求列表
     getList() {
@@ -308,20 +307,20 @@ export default {
       let pid = row.id.toString();
       if (pid) {
         menusDetailsApi(row.id)
-          .then(async (res) => {
-            this.formValidate.path = res.data.path;
-            this.formValidate.path.push(row.id);
-            this.formValidate.pid = pid;
-            this.$refs.menusFrom.modals = true;
-            this.$refs.menusFrom.valids = false;
-            this.titleFrom = title;
-            this.formValidate.auth_type = 1;
-            this.formValidate.is_show = 0;
-            this.formValidate.is_show_path = 0;
-          })
-          .catch((res) => {
-            this.$Message.error(res.msg);
-          });
+            .then(async (res) => {
+              this.formValidate.path = res.data.path;
+              this.formValidate.path.push(row.id);
+              this.formValidate.pid = pid;
+              this.$refs.menusFrom.modals = true;
+              this.$refs.menusFrom.valids = false;
+              this.titleFrom = title;
+              this.formValidate.auth_type = 1;
+              this.formValidate.is_show = 0;
+              this.formValidate.is_show_path = 0;
+            })
+            .catch((res) => {
+              this.$Message.error(res.msg);
+            });
       } else {
         this.formValidate.pid = pid;
         this.$refs.menusFrom.modals = true;
@@ -348,25 +347,25 @@ export default {
       };
 
       this.$modalSure(delfromData)
-        .then((res) => {
-          this.$Message.success(res.msg);
-          this.getData();
-          this.$store.dispatch('menus/getMenusNavList');
-        })
-        .catch((res) => {
-          this.$Message.error(res.msg);
-        });
+          .then((res) => {
+            this.$Message.success(res.msg);
+            this.getData();
+            this.$store.dispatch('menus/getMenusNavList');
+          })
+          .catch((res) => {
+            this.$Message.error(res.msg);
+          });
     },
     // 规则详情
     menusDetails(id) {
       menusDetailsApi(id)
-        .then(async (res) => {
-          this.formValidate = res.data;
-          this.$refs.menusFrom.modals = true;
-        })
-        .catch((res) => {
-          this.$Message.error(res.msg);
-        });
+          .then(async (res) => {
+            this.formValidate = res.data;
+            this.$refs.menusFrom.modals = true;
+          })
+          .catch((res) => {
+            this.$Message.error(res.msg);
+          });
     },
     // 编辑
     edit(row, title, index) {
@@ -404,14 +403,14 @@ export default {
       this.loading = true;
       this.roleData.is_show = this.roleData.is_show || '';
       getTable(this.roleData)
-        .then(async (res) => {
-          this.tableData = res.data;
-          this.loading = false;
-        })
-        .catch((res) => {
-          this.loading = false;
-          this.$Message.error(res.msg);
-        });
+          .then(async (res) => {
+            this.tableData = res.data;
+            this.loading = false;
+          })
+          .catch((res) => {
+            this.loading = false;
+            this.$Message.error(res.msg);
+          });
     },
     getMenusUnique() {
       getMenusUnique().then((res) => {
@@ -429,7 +428,7 @@ export default {
       const cacheList = [];
       arr.forEach((v) => {
         if (v && v.meta && v.meta.keepAlive) {
-          newArr.push({ ...v });
+          newArr.push({...v});
           cacheList.push(v.name);
           this.$store.dispatch('keepAliveNames/setCacheKeepAlive', cacheList);
         }
@@ -446,10 +445,11 @@ export default {
 
 <style scoped lang="scss">
 .vxeTable {
-  >>> .vxe-table--header-wrapper {
+  > > > .vxe-table--header-wrapper {
     background: #fff !important;
   }
 }
+
 .rule {
   display: flex;
   flex-wrap: wrap;

+ 1 - 1
template/admin/src/pages/setting/systemOutInterface/index.vue

@@ -90,7 +90,7 @@
               {{ formValidate.name }}
             </div>
             <div>
-              <Button type="primary" class="submission mr20" @click="debugging()">调试</Button>
+              <!-- <Button type="primary" class="submission mr20" @click="debugging()">调试</Button> -->
               <Button v-if="formValidate.id" type="primary" class="submission mr20" @click="isEdit = !isEdit">{{
                 isEdit ? '返回' : '编辑'
               }}</Button>

+ 84 - 16
template/admin/src/pages/system/backendRouting/debugging.vue

@@ -42,7 +42,15 @@
           </vxe-column>
           <vxe-column field="type" title="类型" width="120" :edit-render="{}">
             <template #default="{ row }">
-              <vxe-select v-model="row.type" transfer>
+              <vxe-select
+                v-model="row.type"
+                transfer
+                @change="
+                  (val) => {
+                    handleChange(val, row, 'xTable');
+                  }
+                "
+              >
                 <vxe-option
                   v-for="item in typeList"
                   :key="item.value"
@@ -64,7 +72,11 @@
           </vxe-column>
           <vxe-column title="操作" width="120">
             <template #default="{ row }">
-              <vxe-button type="text" v-if="row.type === 'array'" status="primary" @click="insertRow(row, 'xTable')"
+              <vxe-button
+                type="text"
+                v-if="['array', 'object'].includes(row.type)"
+                status="primary"
+                @click="insertRow(row, 'xTable')"
                 >插入</vxe-button
               >
               <vxe-button type="text" status="primary" @click="removeRow(row, 'xTable')">删除</vxe-button>
@@ -98,7 +110,15 @@
           </vxe-column>
           <vxe-column field="type" title="类型" width="120" :edit-render="{}">
             <template #default="{ row }">
-              <vxe-select v-model="row.type" transfer>
+              <vxe-select
+                v-model="row.type"
+                transfer
+                @change="
+                  (val) => {
+                    handleChange(val, row, 'yTable');
+                  }
+                "
+              >
                 <vxe-option
                   v-for="item in typeList"
                   :key="item.value"
@@ -120,7 +140,11 @@
           </vxe-column>
           <vxe-column title="操作" width="120">
             <template #default="{ row }">
-              <vxe-button type="text" v-if="row.type === 'array'" status="primary" @click="insertRow(row, 'yTable')"
+              <vxe-button
+                type="text"
+                v-if="['array', 'object'].includes(row.type)"
+                status="primary"
+                @click="insertRow(row, 'yTable')"
                 >插入</vxe-button
               >
               <vxe-button type="text" status="primary" @click="removeRow(row, 'yTable')">删除</vxe-button>
@@ -154,7 +178,15 @@
           </vxe-column>
           <vxe-column field="type" title="类型" width="200" :edit-render="{}">
             <template #default="{ row }">
-              <vxe-select v-model="row.type" transfer>
+              <vxe-select
+                v-model="row.type"
+                transfer
+                @change="
+                  (val) => {
+                    handleChange(val, row, 'zTable');
+                  }
+                "
+              >
                 <vxe-option
                   v-for="item in typeList"
                   :key="item.value"
@@ -166,7 +198,11 @@
           </vxe-column>
           <vxe-column title="操作" width="100">
             <template #default="{ row }">
-              <vxe-button type="text" v-if="row.type === 'array'" status="primary" @click="insertRow(row, 'zTable')"
+              <vxe-button
+                type="text"
+                v-if="['array', 'object'].includes(row.type)"
+                status="primary"
+                @click="insertRow(row, 'zTable')"
                 >插入</vxe-button
               >
               <vxe-button type="text" status="primary" @click="removeRow(row, 'zTable')">删除</vxe-button>
@@ -267,6 +303,21 @@ export default {
   },
   mounted() {},
   methods: {
+    async handleChange(e, row, type) {
+      console.log(type, row);
+      if (e.value !== 'array' && e.value !== 'object') {
+        if (row.children.length) {
+          let arr = this.$refs[type].getTableData().tableData;
+          let id = row.children[0].parentId;
+          const $table = this.$refs[type];
+          for (let i = 0; i < arr.length; i++) {
+            if (arr[i].parentId == id) {
+              await $table.remove(arr[i]);
+            }
+          }
+        }
+      }
+    },
     insertCopy() {
       this.$copyText(this.codes)
         .then((message) => {
@@ -277,8 +328,6 @@ export default {
         });
     },
     async requestData() {
-      console.log(this.$refs.xTable.getTableData().tableData);
-      console.log(this.filtersData((await this.$refs.xTable.getTableData().tableData) || []));
       let url, method, params, body, headers;
       url = this.interfaceData.app_name + '/' + this.interfaceData.path;
       method = this.interfaceData.method;
@@ -286,7 +335,6 @@ export default {
       body = this.filtersData((await this.$refs.yTable.getTableData().tableData) || []);
       let h = this.filtersData((await this.$refs.zTable.getTableData().tableData) || []);
       let h1 = this.filtersData((await this.$refs.zaTable.getTableData().tableData) || []);
-      console.log(this.interfaceData, h, h1);
       headers = {
         ...h,
         ...h1,
@@ -308,8 +356,16 @@ export default {
           if (!e.parentId) {
             for (let i in e) {
               if (i == 'attribute') {
-                console.log(e);
-                if (e.type !== 'array') {
+                console.log(e.type);
+                if (e.type === 'object') {
+                  let obj = {};
+
+                  e.children.map((item, index) => {
+                    obj = this.filtersObj(item, 1);
+                  });
+                  console.log(obj, 'objobjobj');
+                  x[e[i]] = obj;
+                } else if (e.type !== 'array') {
                   x[e[i]] = e.value || '';
                 } else {
                   let arr = [];
@@ -327,12 +383,25 @@ export default {
         console.log(error);
       }
     },
-    filtersObj(obj) {
+    // type 1 为obj属性
+    filtersObj(obj, type) {
       let x = {};
       for (let i in obj) {
         if (i == 'attribute') {
-          if (obj.type !== 'array') {
-            x[obj[i]] = obj.value || '';
+          console.log(obj, 'obj111');
+          if (obj.type === 'object') {
+            let oj = {};
+            obj.children.map((item, index) => {
+              oj[obj.attribute] = this.filtersObj(item);
+            });
+            console.log(oj, 'oj');
+            x = oj;
+          } else if (obj.type !== 'array') {
+            if (type) {
+              x[obj.attribute] = obj.value || '';
+            } else {
+              x[obj[i]] = obj.value || '';
+            }
           } else {
             let arr = [];
             obj.children.map((item, index) => {
@@ -346,8 +415,7 @@ export default {
     },
     changeTab(name) {
       if (name === 'Header') {
-        console.log(this.interfaceData.headerData);
-        if (!this.interfaceData.headerData) {
+        if (!this.$refs.zTable.getTableData().tableData.length) {
           this.insertEvent('zTable', {
             attribute: 'Content-Type',
             value: 'application/x-www-form-urlencoded',

+ 7 - 2
template/admin/src/pages/system/backendRouting/index.vue

@@ -470,6 +470,10 @@ export default {
           value: 'array',
           label: 'Array',
         },
+        {
+          value: 'object',
+          label: 'Object',
+        },
         {
           value: 'number',
           label: 'Number',
@@ -530,7 +534,7 @@ export default {
           this.methodColor = '#49cc90';
         } else if (method == 'PUT') {
           this.methodColor = '#fca130';
-        } else if (method == 'DELETE') {
+        } else if (method == 'DEL' || method == 'DELETE') {
           this.methodColor = '#f93e3e';
         }
       },
@@ -567,7 +571,7 @@ export default {
         return '#49cc90';
       } else if (method == 'PUT') {
         return '#fca130';
-      } else if (method == 'DELETE') {
+      } else if (method == 'DEL' || method == 'DELETE') {
         return '#f93e3e';
       }
     },
@@ -1070,6 +1074,7 @@ export default {
 
     .text-area {
       white-space: pre-wrap;
+      word-break: break-word;
     }
   }
 

+ 1 - 1
template/admin/src/pages/system/backendRouting/request.js

@@ -66,7 +66,7 @@ service.interceptors.response.use(
     }
   },
   (error) => {
-    return Promise.reject(error);
+    // return Promise.reject(error);
   },
 );
 export default service;

+ 13 - 4
template/admin/src/pages/system/codeGeneration/index.vue

@@ -1,5 +1,5 @@
 <template>
-  <div>
+  <div class="code-wapper">
     <div class="i-layout-page-header header-title">
       <div class="fl_header">
         <router-link :to="{ path: $routeProStr + '/system/code_generation_list' }"
@@ -31,7 +31,7 @@
         <StorageLoc :storage="formItem.storage" />
       </Card>
     </div>
-    <Card :bordered="false" dis-hover class="btn">
+    <Card :bordered="false" class="btn">
       <Button class="mr20" @click="beforeTab">上一步</Button>
       <Button type="primary" @click="nextTab">{{ currentTab == 1 ? '提交' : '下一步' }}</Button>
     </Card>
@@ -92,7 +92,10 @@ export default {
           if (this.$refs.Foundation.tableField.length)
             for (let i = 0; i < this.$refs.Foundation.tableField.length; i++) {
               const el = this.$refs.Foundation.tableField[i];
-              if (['addSoftDelete','addTimestamps'].indexOf(el.field_type)=== -1 && (!el.field || !el.field_type || !el.comment)) {
+              if (
+                ['addSoftDelete', 'addTimestamps'].indexOf(el.field_type) === -1 &&
+                (!el.field || !el.field_type || !el.comment)
+              ) {
                 return this.$Message.warning('请完善sql表数据');
               }
             }
@@ -144,13 +147,19 @@ export default {
 .ivu-steps .ivu-steps-title {
   line-height: 26px;
 }
+.code-wapper {
+  padding-bottom: 90px;
+}
 .btn {
   position: fixed;
   bottom: 10px;
+  height: 80px;
   display: flex;
   justify-content: center;
   align-items: center;
-  width: 85%;
+  width: 88.7%;
+  background-color: rgba(255, 255, 255, 0.6);
+  backdrop-filter: blur(4px);
 }
 .tab-1 {
   padding-bottom: 100px;

+ 4 - 1
template/admin/src/store/module/app.js

@@ -77,7 +77,7 @@ export default {
     },
     addTag(state, { route, type = 'unshift' }) {
       let router = getRouteTitleHandled(route);
-      console.log(router,'routerrouterrouter')
+      console.log(router, 'routerrouterrouter');
       if (!routeHasExist(state.tagNavList, router)) {
         if (type === 'push') state.tagNavList.push(router);
         else {
@@ -97,6 +97,9 @@ export default {
     setHasReadErrorLoggerStatus(state, status = true) {
       state.hasReadErrorPage = status;
     },
+    clearAll(state) {
+      state.tagNavList = [];
+    },
   },
   actions: {
     addErrorLog({ commit, rootState }, info) {