dedsudiyu 1 rok temu
rodzic
commit
a282dd4279

+ 32 - 1
src/api/commonality/permission.js

@@ -524,4 +524,35 @@ export function iotHardwareOperatingHardware(query) {
     params: query
   })
 }
-
+//连接管理-详情
+export function systemLinkDetail(query) {
+  return request({
+    url: '/system/link/detail',
+    method: 'get',
+    params: query
+  })
+}
+//连接管理-下拉菜单
+export function systemLinkDropList(data) {
+  return request({
+    url: '/system/link/dropList',
+    method: 'post',
+    data: data
+  })
+}
+//post链接调用接口
+export function menuLinkGet(url,query) {
+  return request({
+    url: url,
+    method: 'get',
+    params: query
+  })
+}
+//get链接调用接口
+export function menuLinkPost(url,data) {
+  return request({
+    url: url,
+    method: 'post',
+    data: data
+  })
+}

+ 2 - 30
src/layout/components/Sidebar/SidebarItem.vue

@@ -31,6 +31,7 @@ import { isExternal } from '@/utils/validate'
 import Item from './Item'
 import AppLink from './Link'
 import FixiOSBug from './FixiOSBug'
+import { xmlRequestLink } from "@/utils/menuLink";
 
 export default {
   name: 'SidebarItem',
@@ -58,7 +59,7 @@ export default {
   methods: {
     handleSelect(item) {
       if(item.isFrame){
-        this.xmlRequestSkip(item);
+        xmlRequestLink(item);
       }else{
         //路由跳转
         this.$router.push({
@@ -66,35 +67,6 @@ export default {
         });
       }
     },
-    //链接跳转方法
-    xmlRequestSkip(item){
-      let self = this;
-      if(item.needAuth){
-        let urlText = window.location.href.split('://')[0]+'://';
-        //链接请求跳转
-        let formData = new FormData();
-        item.params.customParameter.forEach((item)=>{
-          formData.append(item.key,item.value);
-        })
-        let xhr = new XMLHttpRequest();
-        xhr.onreadystatechange = function() {
-          if (xhr.readyState === XMLHttpRequest.DONE) {
-            if (xhr.status === 200) {
-              window.open(item.name,item.params.skipType)
-            } else {
-              self.msgError('操作失败,请联系管理员')
-            }
-          }
-        };
-        xhr.open(item.params.reqMethod,urlText+item.params.reqApi);
-        xhr.send(formData)
-      }else{
-        //链接直接跳转
-        // window.open(item.name,'_blank ')
-        //外部链接-暂定为获取当前大屏地址跳转
-        window.open(localStorage.getItem('screenUrl') + '?identity=' + localStorage.getItem('identity'));
-      }
-    },
     hasOneShowingChild(children = [], parent) {
       const showingChildren = children.filter(item => {
         if (item.hidden) {

+ 2 - 30
src/layout/components/TopNav/index.vue

@@ -32,6 +32,7 @@
 <script>
 import { constantRoutes } from "@/router";
 import store from '@/store'
+import { xmlRequestLink } from "@/utils/menuLink";
 
 export default {
   data() {
@@ -154,7 +155,7 @@ export default {
     // 菜单选择事件
     handleSelect(item) {
       if(item.isFrame){
-        this.xmlRequestSkip(item);
+        xmlRequestLink(item);
       }else{
         if(item.children){
           this.currentIndex = item.path;
@@ -186,35 +187,6 @@ export default {
         }
       }
     },
-    //链接跳转方法
-    xmlRequestSkip(item){
-      let self = this;
-      if(item.needAuth){
-        let urlText = window.location.href.split('://')[0]+'://';
-        //链接请求跳转
-        let formData = new FormData();
-        item.params.customParameter.forEach((item)=>{
-          formData.append(item.key,item.value);
-        })
-        let xhr = new XMLHttpRequest();
-        xhr.onreadystatechange = function() {
-          if (xhr.readyState === XMLHttpRequest.DONE) {
-            if (xhr.status === 200) {
-              window.open(item.name,item.params.skipType)
-            } else {
-              self.msgError('操作失败,请联系管理员')
-            }
-          }
-        };
-        xhr.open(item.params.reqMethod,urlText+item.params.reqApi);
-        xhr.send(formData)
-      }else{
-        //链接直接跳转
-        // window.open(item.name,'_blank ')
-        //外部链接-暂定为获取当前大屏地址跳转
-        window.open(localStorage.getItem('screenUrl') + '?identity=' + localStorage.getItem('identity'));
-      }
-    },
     // 当前激活的路由
     activeRoutes(key) {
       let self = this;

+ 1 - 5
src/store/modules/permission.js

@@ -100,7 +100,7 @@ function routeSetData(list,type){
         alwaysShow : !newList[i].visible,
         hidden : !newList[i].visible,
         isFrame : newList[i].isFrame,
-        needAuth : newList[i].needAuth,
+        linkId : newList[i].linkId,
         meta : {
           icon:newList[i].icon?newList[i].icon:'#',
           link:null,
@@ -108,12 +108,8 @@ function routeSetData(list,type){
           title:newList[i].menuName,
         },
         component : newList[i].component,
-        // name : firstToUpper1(newList[i].path),
         name : newList[i].path,
       }
-      if(obj.needAuth){
-        obj.params = JSON.parse(newList[i].params)
-      }
       if(!type){
         obj.redirect = 'noRedirect'
         obj.path = '/'+newList[i].path

+ 235 - 0
src/utils/menuLink.js

@@ -0,0 +1,235 @@
+/**
+ * 依托于链接管理的链接跳转逻辑
+ * Copyright (c) 2024 zc
+ */
+import Cookies from "js-cookie";
+import { Message } from 'element-ui'
+import { systemLinkDetail,menuLinkGet,menuLinkPost } from "@/api/commonality/permission";
+
+export function xmlRequestLink(item) {
+  //查询连接管理-详情
+  systemLinkDetail({linkId:item.linkId}).then(response => {
+    if(!response.data.isAuth&&response.data.authMode != 1){
+      noIsAuthNoCarryLink(response.data);
+    }else if(!response.data.isAuth&&response.data.authMode == 1){
+      noIsAuthCarryLink(response.data);
+    }else if(response.data.isAuth&&response.data.authMode != 1){
+      isAuthNoCarryLink(response.data);
+    }else if(response.data.isAuth&&response.data.authMode == 1){
+      isAuthCarryLink(response.data);
+    }
+  });
+}
+//无验证/无携参-跳转
+export function noIsAuthNoCarryLink(item) {
+  window.open(item.linkUrl,item.skipType?'_blank':'_self');
+}
+//无验证/携参-跳转
+export function noIsAuthCarryLink(item) {
+  let params = JSON.parse(item.params)
+  let argument = '?';
+  params.carryArgument.forEach((item,index)=>{
+    if(item.type == 1){
+      //数据-键值对
+      argument = argument+(index==0?'':'&')+item.key+'='+item.value
+    }else if(item.type == 2){
+      //读取cookie
+      argument = argument+(index==0?'':'&')+item.value+'='+Cookies.get(item.key)
+    }else if(item.type == 3){
+      //读取localStorage
+      argument = argument+(index==0?'':'&')+item.value+'='+localStorage.getItem(item.key)
+    }else if(item.type == 4){
+      //读取sessionStorage
+      argument = argument+(index==0?'':'&')+item.value+'='+sessionStorage.getItem(item.key)
+    }else if(item.type == 5){
+      //生成时间戳-区分13位或者10位
+      if(item.num == '10'){
+        argument = argument+(index==0?'':'&')+item.key+'='+Date.parse(new Date())/1000
+      }else if(item.num == '13'){
+        argument = argument+(index==0?'':'&')+item.key+'='+Date.parse(new Date())
+      }
+    }
+  })
+  window.open(item.linkUrl+argument,item.skipType?'_blank':'_self');
+}
+//验证/无携参-跳转
+export function isAuthNoCarryLink(item) {
+  let params = JSON.parse(item.params)
+  let urlText = window.location.href.split('://')[0]+'://';
+  //链接请求跳转
+  let formData = new FormData();
+  params.requestArgument.forEach((item)=>{
+    if(item.type == 1){
+      //数据-键值对
+      formData.append(item.key,item.value);
+    }else if(item.type == 2){
+      //读取cookie
+      formData.append(item.value,Cookies.get(item.key));
+    }else if(item.type == 3){
+      //读取localStorage
+      formData.append(item.value,localStorage.getItem(item.key));
+    }else if(item.type == 4){
+      //读取sessionStorage
+      formData.append(item.value,sessionStorage.getItem(item.key));
+    }else if(item.type == 5){
+      //生成时间戳-区分13位或者10位
+      if(item.num == '10'){
+        formData.append(item.key,Date.parse(new Date())/1000);
+      }else if(item.num == '13'){
+        formData.append(item.key,Date.parse(new Date()));
+      }
+    }
+  })
+  let xhr = new XMLHttpRequest();
+  xhr.onreadystatechange = function() {
+    if (xhr.readyState === XMLHttpRequest.DONE) {
+      if (xhr.status === 200) {
+        let data = JSON.parse(xhr.response)
+        if(data.code == 200){
+          window.open(item.linkUrl,item.skipType?'_blank':'_self')
+        }else{
+          Message({
+            message: '操作失败,请联系管理员',
+            type: 'error',
+            offset:100
+          })
+        }
+      } else {
+        Message({
+          message: '操作失败,请联系管理员',
+          type: 'error',
+          offset:100
+        })
+      }
+    }
+  };
+  xhr.open(item.reqMethod,urlText+item.reqApi);
+  xhr.send(formData)
+}
+//验证/携参-跳转
+export function isAuthCarryLink(item) {
+  let urlText = window.location.href.split('://')[0]+'://';
+  let params = JSON.parse(item.params)
+  let obj = {};
+  params.requestArgument.forEach((item)=>{
+    if(item.type == 1){
+      //数据-键值对
+      obj[item.key] = item.value;
+    }else if(item.type == 2){
+      //读取cookie
+      obj[item.value] = Cookies.get(item.key);
+    }else if(item.type == 3){
+      //读取localStorage
+      obj[item.value] = localStorage.getItem(item.key);
+    }else if(item.type == 4){
+      //读取sessionStorage
+      obj[item.value] = sessionStorage.getItem(item.key);
+    }else if(item.type == 5){
+      //生成时间戳-区分13位或者10位
+      if(item.num == '10'){
+        obj[item.key] = Date.parse(new Date())/1000;
+        formData.append(item.key,);
+      }else if(item.num == '13'){
+        obj[item.key] = Date.parse(new Date());
+      }
+    }
+  })
+  if(item.reqMethod == 'post'){
+    if(item.paramType == 'JSON'){
+      menuLinkPost(urlText+item.reqApi,obj).then(response => {
+        carryLink(item.linkUrl,item.skipType,params.carryArgument,response.data)
+      })
+    }else if(item.paramType == 'formData'){
+      let formData = new FormData();
+      params.requestArgument.forEach((item)=>{
+        if(item.type == 1){
+          //数据-键值对
+          formData.append(item.key,item.value);
+        }else if(item.type == 2){
+          //读取cookie
+          formData.append(item.value,Cookies.get(item.key));
+        }else if(item.type == 3){
+          //读取localStorage
+          formData.append(item.value,localStorage.getItem(item.key));
+        }else if(item.type == 4){
+          //读取sessionStorage
+          formData.append(item.value,sessionStorage.getItem(item.key));
+        }else if(item.type == 5){
+          //生成时间戳-区分13位或者10位
+          if(item.num == '10'){
+            formData.append(item.key,Date.parse(new Date())/1000);
+          }else if(item.num == '13'){
+            formData.append(item.key,Date.parse(new Date()));
+          }
+        }
+      })
+      let xhr = new XMLHttpRequest();
+      xhr.onreadystatechange = function() {
+        if (xhr.readyState === XMLHttpRequest.DONE) {
+          if (xhr.status === 200) {
+            let data = JSON.parse(xhr.response)
+            if(data.code == 200){
+              carryLink(item.linkUrl,item.skipType,params.carryArgument,data.data)
+            }else{
+              Message({
+                message: '操作失败,请联系管理员',
+                type: 'error',
+                offset:100
+              })
+            }
+          } else {
+            Message({
+              message: '操作失败,请联系管理员',
+              type: 'error',
+              offset:100
+            })
+          }
+        }
+      };
+      xhr.open(item.reqMethod,urlText+item.reqApi);
+      xhr.send(formData)
+    }
+  }else if(item.reqMethod == 'get'){
+    menuLinkGet(urlText+item.reqApi,obj).then(response => {
+      carryLink(item.linkUrl,item.skipType,params.carryArgument,response.data)
+    })
+  }
+}
+//携参跳转
+export function carryLink(linkUrl,skipType,carryArgument,data){
+  let argument = '?';
+  carryArgument.forEach((item,index)=>{
+    if(item.type == 1){
+      //数据-键值对
+      argument = argument+(index==0?'':'&')+item.key+'='+item.value
+    }else if(item.type == 2){
+      //读取cookie
+      argument = argument+(index==0?'':'&')+item.value+'='+Cookies.get(item.key)
+    }else if(item.type == 3){
+      //读取localStorage
+      argument = argument+(index==0?'':'&')+item.value+'='+localStorage.getItem(item.key)
+    }else if(item.type == 4){
+      //读取sessionStorage
+      argument = argument+(index==0?'':'&')+item.value+'='+sessionStorage.getItem(item.key)
+    }else if(item.type == 5){
+      //生成时间戳-区分13位或者10位
+      if(item.num == '10'){
+        argument = argument+(index==0?'':'&')+item.key+'='+Date.parse(new Date())/1000
+      }else if(item.num == '13'){
+        argument = argument+(index==0?'':'&')+item.key+'='+Date.parse(new Date())
+      }
+    }else if (item.type == 6) {
+      if(item.key.indexOf('&&') != -1){
+        let keyList = item.key.split('&&')
+        let keyName = data;
+        keyList.forEach((keyItem)=>{
+          keyName = keyName[keyItem]
+        })
+        argument = argument+(index==0?'':'&')+item.value+'='+keyName;
+      }else{
+        argument = argument+(index==0?'':'&')+item.value+'='+data[item.key]
+      }
+    }
+  })
+  window.open(linkUrl+argument,skipType?'_blank':'_self')
+}

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

@@ -149,7 +149,7 @@
 import Cookies from "js-cookie";
 import { encrypt, decrypt } from '@/utils/jsencrypt'
 import store from '@/store'
-import { authInfo,getCodeImg,initPage,sendCode,getRouters} from "@/api/basicsModules/index";
+import { authInfo,getCodeImg,initPage,sendCode} from "@/api/basicsModules/index";
 import { Encrypt,Decrypt} from '@/utils/secret'
 import { getConfigByType } from "@/api/commonality/permission";
 import { configInfo } from "@/api/commonality/noPermission";

+ 1 - 1
src/views/creditViolation/credit/markconfig/index.vue

@@ -286,7 +286,7 @@ export default {
     /** 查询数据 */
     getList() {
       this.pageType = false;
-      examMarkConfigList({pageNum:"1",pageSize:"1"}).then( response => {
+      examMarkConfigList({page:"1",pageSize:"1"}).then( response => {
         if(response.data.records[0]){
           //修改
           let newObj = JSON.parse(JSON.stringify(response.data.records[0]));

+ 1 - 1
src/views/creditViolation/credit/pointsRecord/creditScoreList.vue

@@ -51,7 +51,7 @@
           v-show="total>0"
           :total="total"
           layout="total, prev, pager, next, sizes, jumper"
-          :page.sync="queryParams.pageNum"
+          :page.sync="queryParams.page"
           :limit.sync="queryParams.pageSize"
           @pagination="getList"
         />

+ 1 - 1
src/views/creditViolation/credit/pointsRecord/index.vue

@@ -58,7 +58,7 @@
                   v-show="total>0"
                   :total="total"
                   layout="total, prev, pager, next, sizes, jumper"
-                  :page.sync="queryParams.pageNum"
+                  :page.sync="queryParams.page"
                   :limit.sync="queryParams.pageSize"
                   @pagination="getList"
       />

+ 2 - 2
src/views/creditViolation/credit/pointsRecord/rewardPointsList.vue

@@ -61,7 +61,7 @@
         v-show="total>0"
         :total="total"
         layout="total, prev, pager, next, sizes, jumper"
-        :page.sync="queryParams.pageNum"
+        :page.sync="queryParams.page"
         :limit.sync="queryParams.pageSize"
         @pagination="getList"
       />
@@ -84,7 +84,7 @@
         showSearch: true,
         // 查询参数
         queryParams: {
-          pageNum: 1,
+          page: 1,
           pageSize:20,
           points: null,
           joinUserId: null,

+ 4 - 4
src/views/creditViolation/credit/violation/index.vue

@@ -109,7 +109,7 @@
                     v-show="total>0"
                     :total="total"
                     layout="total, prev, pager, next, sizes, jumper"
-                    :page.sync="queryParams.pageNum"
+                    :page.sync="queryParams.page"
                     :limit.sync="queryParams.pageSize"
                     @pagination="getList"
         />
@@ -418,7 +418,7 @@ export default {
       title: "",
       // 查询参数
       queryParams: {
-        pageNum: 1,
+        page: 1,
         pageSize:20,
         userName: null,
         searchValue: null,
@@ -788,14 +788,14 @@ export default {
     },
     /** 搜索按钮操作 */
     handleQuery() {
-      this.queryParams.pageNum = 1;
+      this.queryParams.page = 1;
       this.getList();
     },
     /** 重置按钮操作 */
     resetQuery() {
       // this.resetForm("queryForm");
       this.$set(this,'queryParams',{
-        pageNum: 1,
+        page: 1,
         pageSize:20,
       });
       this.handleQuery();

+ 3 - 3
src/views/creditViolation/credit/violation/violationInfo.vue

@@ -81,7 +81,7 @@
         v-show="total>0"
         :total="total"
         layout="total, prev, pager, next, sizes, jumper"
-        :page.sync="queryParams.pageNum"
+        :page.sync="queryParams.page"
         :limit.sync="queryParams.pageSize"
         @pagination="getList"
       />
@@ -104,7 +104,7 @@
         showSearch: true,
         // 查询参数
         queryParams: {
-          pageNum: 1,
+          page: 1,
           pageSize:20,
           overStatus: null,
           semesterId: null,
@@ -166,7 +166,7 @@
       },
       /** 搜索按钮操作 */
       handleQuery() {
-        this.queryParams.pageNum = 1;
+        this.queryParams.page = 1;
         this.getList();
       },
       /** 重置按钮操作 */

+ 24 - 34
src/views/creditViolation/myViolation/violation_my/index.vue

@@ -50,9 +50,13 @@
           </template>
         </el-table-column>
         <el-table-column label="违规原因" align="left" prop="reason"  width="300"/>
-        <el-table-column label="实验室" align="left" prop="laboratoryName" show-overflow-tooltip width="200"/>
-        <el-table-column label="添加人" align="left" prop="createBy" width="140"/>
-        <el-table-column label="创建时间" align="left" prop="createTime" width="200"/>
+        <el-table-column label="实验室" align="left" prop="subjectName" show-overflow-tooltip width="200"/>
+        <el-table-column label="添加人" align="left" prop="createByName" width="140"/>
+        <el-table-column label="创建时间" align="left" prop="createTime" width="200">
+          <template slot-scope="scope">
+            {{parseTime(scope.row.createTime,"{y}-{m}-{d} {h}:{i}")}}
+          </template>
+        </el-table-column>
         <el-table-column label="扣分值" align="left"  prop="deductionVal" width="100"/>
         <el-table-column label="处理方式" align="left"  prop="treatmentMethod" width="200"/>
         <el-table-column label="处理状态" align="left" width="140">
@@ -71,33 +75,18 @@
             </div>
           </template>
         </el-table-column>
-        <el-table-column label="处理截止日期" align="left"  prop="handleDay" width="140"/>
+        <el-table-column label="处理截止日期" align="left"  prop="handleDayTime" width="140">
+          <template slot-scope="scope">
+            {{parseTime(scope.row.handleDayTime,"{y}-{m}-{d}")}}
+          </template>
+        </el-table-column>
         <el-table-column label="信用分" align="left"  prop="creditScore" width="100"/>
-        <!--<el-table-column label="操作" align="left" class-name="small-padding fixed-width" width="160">-->
-        <!--<template slot-scope="scope">-->
-        <!--<div class="button-box">-->
-        <!--<p v-if="scope.row.penaltyType==0" class="table-button-red-120"-->
-        <!--@click="goPage(1,scope.row)"-->
-        <!--&gt;<i class="el-icon-edit-outline"></i>立即学习</p>-->
-        <!--</div>-->
-        <!--<div class="button-box">-->
-        <!--<p v-if="scope.row.testStatus==0" class="table-button-red-120"-->
-        <!--@click="goPage(2,scope.row)"-->
-        <!--&gt;<i class="el-icon-edit-outline"></i>立即做题</p>-->
-        <!--</div>-->
-        <!--<div class="button-box">-->
-        <!--<p v-if="scope.row.practiceStatus==0" class="table-button-red-120"-->
-        <!--@click="goPage(3,scope.row)"-->
-        <!--&gt;<i class="el-icon-edit-outline"></i>立即考试</p>-->
-        <!--</div>-->
-        <!--</template>-->
-        <!--</el-table-column>-->
       </el-table>
       <pagination :page-sizes="[20, 30, 40, 50]"
                   v-show="total>0"
                   :total="total"
                   layout="total, prev, pager, next, sizes, jumper"
-                  :page.sync="queryParams.pageNum"
+                  :page.sync="queryParams.page"
                   :limit.sync="queryParams.pageSize"
                   @pagination="getList"
       />
@@ -130,7 +119,7 @@ export default {
       dateRange: [],
       // 查询参数
       queryParams: {
-        pageNum: 1,
+        page: 1,
         pageSize:20,
         joinUserId: null,
         violationType: null,
@@ -191,16 +180,17 @@ export default {
     /** 查询违规记录列表 */
     getList() {
       this.loading = true;
+      let obj = JSON.parse(JSON.stringify(this.queryParams))
       if(this.dateRange[0]){
-        this.queryParams.beginTime = this.dateRange[0]+'T00:00:00';
-        this.queryParams.endTime = this.dateRange[1]+'T23:59:59';
+        obj.startTime = this.dateRange[0]+'T00:00:00';
+        obj.endTime = this.dateRange[1]+'T23:59:59';
       }else {
-        this.queryParams.beginTime=null;
-        this.queryParams.endTime=null
+        obj.startTime=null;
+        obj.endTime=null
       }
-      examViolationMyList(this.queryParams).then(response => {
-        this.violationList = response.rows;
-        this.total = response.total;
+      examViolationMyList(obj).then(response => {
+        this.violationList = response.data.records;
+        this.total = response.data.total;
         this.loading = false;
       });
     },
@@ -224,7 +214,7 @@ export default {
     },
     /** 搜索按钮操作 */
     handleQuery() {
-      this.queryParams.pageNum = 1;
+      this.queryParams.page = 1;
       this.queryParams.pageSize = 20;
       this.getList();
     },
@@ -233,7 +223,7 @@ export default {
       // this.resetForm("queryForm");
       // this.queryParams = {};
       this.$set(this,'queryParams',{
-        pageNum: 1,
+        page: 1,
         pageSize:20,
         overStatus:"",
         bonusType: '',

+ 4 - 4
src/views/creditViolation/record_my/index.vue

@@ -132,7 +132,7 @@
         v-show="total>0"
         :total="total"
         layout="total, prev, pager, next, sizes, jumper"
-        :page.sync="queryParams.pageNum"
+        :page.sync="queryParams.page"
         :limit.sync="queryParams.pageSize"
         @pagination="getList"
       />
@@ -168,7 +168,7 @@ export default {
       // 查询参数
       queryParams: {
         pointsType:2,
-        pageNum: 1,
+        page: 1,
         pageSize:20,
         bonusType:null
       },
@@ -205,7 +205,7 @@ export default {
     pointsTypeClick(type){
       if(this.queryParams.pointsType != type){
         this.queryParams.pointsType = type;
-        this.queryParams.pageNum = 1;
+        this.queryParams.page = 1;
         this.resetForm("queryForm");
         this.dateRange=[];
         this.getMyPointsLogInfo();
@@ -264,7 +264,7 @@ export default {
     },
     /** 搜索按钮操作 */
     handleQuery() {
-      this.queryParams.pageNum = 1;
+      this.queryParams.page = 1;
       this.getList();
     },
     /** 重置按钮操作 */

+ 460 - 0
src/views/serviceCenter/externalLink/addPage.vue

@@ -0,0 +1,460 @@
+<template>
+  <div class="page-container externalLink-addPage">
+    <div class="page-top-title-box">
+      <p class="page-top-title-name-p">{{dialogForm.linkId?'编辑':'新增'}}</p>
+      <p class="page-top-title-out-p" @click="backPage">返回</p>
+      <p class="page-top-title-add-p" @click="submitForm">提交</p>
+    </div>
+    <div class="content-box scrollbar-box">
+      <el-form :model="dialogForm" class="dialogForm" ref="dialogForm"
+               :rules="rules" style="width:100%;" label-width="110px">
+        <div class="externalLink-dialog-big-box">
+          <div class="externalLink-dialog-left-box">
+            <el-form-item label="名称:" prop="linkName">
+              <el-input
+                maxLength="20"
+                v-model="dialogForm.linkName"
+                placeholder="请输入名称"
+                clearable
+                style="width: 280px"
+              />
+            </el-form-item>
+            <el-form-item label="链接地址:" prop="linkUrl">
+              <el-input
+                maxLength="50"
+                v-model="dialogForm.linkUrl"
+                placeholder="请输入链接地址"
+                clearable
+                style="width: 280px">
+              </el-input>
+            </el-form-item>
+            <el-form-item label="跳转类型:" prop="skipType">
+              <el-radio-group v-model="dialogForm.skipType">
+                <el-radio :label="false" style="width:70px;">当前窗口</el-radio>
+                <el-radio :label="true" style="width:70px;">新窗口</el-radio>
+              </el-radio-group>
+            </el-form-item>
+            <el-form-item label="登录验证:" prop="isAuth">
+              <el-radio-group v-model="dialogForm.isAuth">
+                <el-radio :label="false" style="width:70px;">否</el-radio>
+                <el-radio :label="true" style="width:70px;">是</el-radio>
+              </el-radio-group>
+            </el-form-item>
+            <el-form-item label="认证方式:" prop="authMode">
+              <el-radio-group v-model="dialogForm.authMode">
+                <el-radio :label=0 style="width:70px;">无</el-radio>
+                <el-radio :label=2 style="width:70px;">cookie</el-radio>
+                <el-radio :label=1 style="width:70px;">携参</el-radio>
+              </el-radio-group>
+            </el-form-item>
+            <el-form-item label="请求地址:" prop="reqApi" v-if="dialogForm.isAuth">
+              <el-input
+                maxLength="50"
+                v-model="dialogForm.reqApi"
+                placeholder="请输入请求地址"
+                clearable
+                style="width: 280px">
+                <template slot="prepend">http://</template>
+              </el-input>
+            </el-form-item>
+            <el-form-item label="请求类型:" prop="reqMethod" v-if="dialogForm.isAuth">
+              <el-radio-group v-model="dialogForm.reqMethod">
+                <el-radio label="post" style="width:60px;">POST</el-radio>
+                <el-radio label="get" style="width:60px;">GET</el-radio>
+              </el-radio-group>
+            </el-form-item>
+            <el-form-item label="参数类型:" prop="paramType" v-if="dialogForm.isAuth&&dialogForm.reqMethod == 'post'">
+              <el-radio-group v-model="dialogForm.paramType">
+                <el-radio label="JSON" style="width:60px;">JSON</el-radio>
+                <el-radio label="formData" style="width:60px;">formData</el-radio>
+              </el-radio-group>
+            </el-form-item>
+          </div>
+          <div class="externalLink-dialog-center-box scrollbar-box" v-if="dialogForm.isAuth">
+            <el-form-item label="请求参数:" prop="requestArgument">
+              <div class="for-custom-parameter-max-big-box" v-for="(item,index) in dialogForm.requestArgument" :key="index">
+                <div class="input-box">
+                  <el-select v-model="item.type" placeholder="请选择参数类型" clearable size="small">
+                    <el-option
+                      v-for="dict in requestArgumentOptions"
+                      :key="dict.value"
+                      :label="dict.name"
+                      :value="dict.value"
+                    />
+                  </el-select>
+                  <el-input class="top-border" maxLength="30"
+                            v-model="item.key" :placeholder="item.type == 1 || item.type == 5?'请输入key':'请输入查询key'"/>
+                  <el-input class="top-border" v-if="item.type != 5" maxLength="100"
+                            v-model="item.value" :placeholder="item.type == 1?'请输入value':'请输入提交key'"/>
+                  <el-select class="top-border" v-model="item.num" v-if="item.type == 5" placeholder="请选择时间戳长度" clearable size="small">
+                    <el-option key="10" label="10位时间戳" value="10"/>
+                    <el-option key="13" label="13位时间戳" value="13"/>
+                  </el-select>
+                </div>
+                <div class="del-button-box" @click="delRequestArgument(index)">
+                  <p class="del-button-null"></p>
+                  <p class="del-button el-icon-remove"></p>
+                  <p class="del-button-null"></p>
+                </div>
+              </div>
+              <p class="el-icon-circle-plus-outline add-button" @click="addRequestArgument" v-if="!dialogForm.requestArgument[4]"></p>
+            </el-form-item>
+          </div>
+          <div class="externalLink-dialog-right-box scrollbar-box" v-if="dialogForm.authMode == '1'">
+            <el-form-item label="携带参数:" prop="carryArgument">
+              <div class="for-custom-parameter-max-big-box" v-for="(item,index) in dialogForm.carryArgument" :key="index">
+                <div class="input-box">
+                  <el-select v-model="item.type" placeholder="请选择参数类型" clearable size="small">
+                    <el-option
+                      v-for="dict in carryArgumentOptions"
+                      :key="dict.value"
+                      :label="dict.name"
+                      :value="dict.value"
+                    />
+                  </el-select>
+                  <el-input class="top-border" maxLength="30"
+                            v-model="item.key" :placeholder="item.type == 1 || item.type == 5?'请输入key':'请输入查询key'"/>
+                  <el-input class="top-border" v-if="item.type != 5" maxLength="100"
+                            v-model="item.value" :placeholder="item.type == 1?'请输入value':'请输入提交key'"/>
+                  <el-select class="top-border" v-model="item.num" v-if="item.type == 5" placeholder="请选择时间戳长度" clearable size="small">
+                    <el-option key="10" label="10位时间戳" value="10"/>
+                    <el-option key="13" label="13位时间戳" value="13"/>
+                  </el-select>
+                </div>
+                <div class="del-button-box" @click="delCarryArgument(index)">
+                  <p class="del-button-null"></p>
+                  <p class="del-button el-icon-remove"></p>
+                  <p class="del-button-null"></p>
+                </div>
+              </div>
+              <p class="el-icon-circle-plus-outline add-button" @click="addCarryArgument" v-if="!dialogForm.carryArgument[4]"></p>
+            </el-form-item>
+          </div>
+        </div>
+      </el-form>
+    </div>
+  </div>
+</template>
+
+<script>
+  import { systemLinkAdd,systemLinkUpdate } from "@/api/serviceCenter/index";
+  //import { getDicts } from "@/api/commonality/noPermission";
+  //import { systemUserSelect } from "@/api/commonality/permission";
+  //import { getInfo } from "@/api/basicsModules/index";
+  export default {
+    name: 'addPage',
+    props:{
+      propsData:{},
+    },
+    data(){
+      return{
+        dialogForm:{},
+        rules:{
+          linkName:[
+            { required: true, message: '请输入名称', trigger: 'blur' },
+            { required: true, message: "请输入名称", validator: this.spaceJudgment, trigger: "blur" }
+          ],
+          linkUrl:[
+            { required: true, message: '请输入链接地址', trigger: 'blur' },
+            { required: true, message: "请输入链接地址", validator: this.spaceJudgment, trigger: "blur" }
+          ],
+          skipType:[
+            { required: true, message: '请选择跳转类型', trigger: 'blur' },
+            { required: true, message: "请选择跳转类型", validator: this.spaceJudgment, trigger: "blur" }
+          ],
+          isAuth:[
+            { required: true, message: '请选择登录验证', trigger: 'blur' },
+            { required: true, message: "请选择登录验证", validator: this.spaceJudgment, trigger: "blur" }
+          ],
+          authMode:[
+            { required: true, message: '请选择认证方式', trigger: 'blur' },
+            { required: true, message: "请选择认证方式", validator: this.spaceJudgment, trigger: "blur" }
+          ],
+          reqMethod:[
+            { required: true, message: '请选择请求类型', trigger: 'blur' },
+            { required: true, message: "请选择请求类型", validator: this.spaceJudgment, trigger: "blur" }
+          ],
+          paramType:[
+            { required: true, message: '请选择参数类型', trigger: 'blur' },
+            { required: true, message: "请选择参数类型", validator: this.spaceJudgment, trigger: "blur" }
+          ],
+          reqApi:[
+            { required: true, message: '请输入请求地址', trigger: 'blur' },
+            { required: true, message: "请输入请求地址", validator: this.spaceJudgment, trigger: "blur" }
+          ],
+        },
+        requestArgumentOptions:[
+          {name:'数据',value:'1'},
+          {name:'cookie',value:'2'},
+          {name:'localStorage',value:'3'},
+          {name:'sessionStorage',value:'4'},
+          {name:'timestamp',value:'5'},//13位10位
+        ],
+        carryArgumentOptions:[
+          {name:'数据',value:'1'},
+          {name:'回调数据',value:'6'},
+          {name:'cookie',value:'2'},
+          {name:'localStorage',value:'3'},
+          {name:'sessionStorage',value:'4'},
+          {name:'timestamp',value:'5'},//13位10位
+        ],
+      }
+    },
+    created(){
+      this.initialize();
+    },
+    mounted(){
+
+    },
+    methods:{
+      //初始化
+      initialize(){
+        this.$set(this,'dialogForm',this.propsData);
+      },
+      //新增请求参数
+      addRequestArgument(){
+        this.dialogForm.requestArgument.push({
+          type:'',
+        })
+      },
+      //删除请求参数
+      delRequestArgument(index){
+        this.dialogForm.requestArgument.splice(index,1);
+      },
+      //新增携带参数
+      addCarryArgument(){
+        this.dialogForm.carryArgument.push({
+          type:'',
+          key:'',
+          value:'',
+          num:'',
+        })
+      },
+      //删除携带参数
+      delCarryArgument(index){
+        this.dialogForm.carryArgument.splice(index,1);
+      },
+      //新增接口
+      systemLinkAdd(obj){
+        systemLinkAdd(obj).then(response => {
+          this.msgSuccess(response.message)
+          this.backPage();
+        });
+      },
+      //编辑接口
+      systemLinkUpdate(obj){
+        systemLinkUpdate(obj).then(response => {
+          this.msgSuccess(response.message)
+          this.backPage();
+        });
+      },
+      // 返回按钮
+      backPage(){
+        this.$parent.tableButton(4);
+      },
+      /** 提交按钮 */
+      submitForm() {
+        let self = this;
+        this.$refs["dialogForm"].validate(valid => {
+          if (valid) {
+            //检查请求参数
+            if(this.dialogForm.isAuth){
+              if(!this.dialogForm.requestArgument[0]){
+                this.msgError('请添加请求参数')
+                return
+              }
+              for(let i=0;i<self.dialogForm.requestArgument.length;i++){
+                if(!self.dialogForm.requestArgument[i].type){
+                  this.msgError('请选择第 '+(i+1)+' 条,请求参数的参数类型')
+                  return
+                }else if(self.dialogForm.requestArgument[i].type != 5){
+                  if(!self.dialogForm.requestArgument[i].key){
+                    this.msgError('请输入第 '+(i+1)+self.dialogForm.requestArgument[i].type == 1?' 条,请求参数的key':' 条,请求参数的查询key')
+                    return
+                  }else if(!self.dialogForm.requestArgument[i].value){
+                    this.msgError('请输入第 '+(i+1)+self.dialogForm.requestArgument[i].type == 1?' 条,请求参数的value':' 条,请求参数的提交key')
+                    return
+                  }
+                }else if(self.dialogForm.requestArgument[i].type == 5){
+                  if(!self.dialogForm.requestArgument[i].key){
+                    this.msgError('请输入第 '+(i+1)+' 条,请求参数的key')
+                    return
+                  }else if(!self.dialogForm.requestArgument[i].num){
+                    this.msgError('请选择第 '+(i+1)+' 条,请求参数的时间戳长度')
+                    return
+                  }
+                }
+              }
+            }
+            //检查携带参数
+            if(this.dialogForm.authMode == 1){
+              if(!this.dialogForm.carryArgument[0]){
+                this.msgError('请添加携带参数')
+                return
+              }
+              for(let i=0;i<self.dialogForm.carryArgument.length;i++){
+                if(!self.dialogForm.carryArgument[i].type){
+                  this.msgError('请选择第 '+(i+1)+' 条,携带参数的参数类型')
+                  return
+                }else if(self.dialogForm.carryArgument[i].type != 5){
+                  if(!self.dialogForm.carryArgument[i].key){
+                    this.msgError('请输入第 '+(i+1)+self.dialogForm.carryArgument[i].type == 1?' 条,携带参数的key':' 条,携带参数的查询key')
+                    return
+                  }else if(!self.dialogForm.carryArgument[i].value){
+                    this.msgError('请输入第 '+(i+1)+self.dialogForm.carryArgument[i].type == 1?' 条,携带参数的value':' 条,携带参数的提交key')
+                    return
+                  }
+                }else if(self.dialogForm.carryArgument[i].type == 5){
+                  if(!self.dialogForm.carryArgument[i].key){
+                    this.msgError('请输入第 '+(i+1)+' 条,携带参数的key')
+                    return
+                  }else if(!self.dialogForm.carryArgument[i].num){
+                    this.msgError('请选择第 '+(i+1)+' 条,携带参数的时间戳长度')
+                    return
+                  }
+                }
+              }
+            }
+            //数据处理
+            let requestArgument = [];
+            let carryArgument = [];
+            this.dialogForm.requestArgument.forEach((item)=>{
+              let minObj = {
+                type:item.type
+              }
+              if(item.type != 5){
+                minObj.key = item.key;
+                minObj.value = item.value;
+              }else if(item.type == 5){
+                minObj.key = item.key;
+                minObj.num = item.num;
+              }
+              requestArgument.push(minObj)
+            })
+            this.dialogForm.carryArgument.forEach((item)=>{
+              let minObj = {
+                type:item.type
+              }
+              if(item.type != 5){
+                minObj.key = item.key;
+                minObj.value = item.value;
+              }else if(item.type == 5){
+                minObj.key = item.key;
+                minObj.num = item.num;
+              }
+              carryArgument.push(minObj)
+            })
+            let params = {
+              requestArgument:requestArgument,
+              carryArgument:carryArgument,
+            }
+            let obj = {
+              linkName:this.dialogForm.linkName,
+              linkUrl:this.dialogForm.linkUrl,
+              skipType:this.dialogForm.skipType,
+              isAuth:this.dialogForm.isAuth,
+              authMode:this.dialogForm.authMode,
+              reqApi:this.dialogForm.isAuth?this.dialogForm.reqApi:'',
+              reqMethod:this.dialogForm.isAuth?this.dialogForm.reqMethod:'',
+              paramType:this.dialogForm.reqMethod == 'post'?this.dialogForm.paramType:'',
+              params:JSON.stringify(params),
+            };
+            if(this.dialogForm.linkId){
+              obj.linkId = this.dialogForm.linkId
+              this.systemLinkUpdate(obj);
+            }else{
+              this.systemLinkAdd(obj);
+            }
+          }
+        })
+      }
+    },
+  }
+</script>
+
+<style scoped lang="scss">
+  .externalLink-addPage{
+    .content-box{
+      flex:1;
+      display: flex;
+      overflow: hidden;
+      padding:20px 0;
+      .dialogForm{
+        flex:1;
+        display: flex;
+        overflow: hidden;
+        .externalLink-dialog-big-box{
+          display: flex;
+          flex:1;
+          overflow: hidden;
+          .externalLink-dialog-left-box{
+            padding:20px;
+            width:500px;
+          }
+          .externalLink-dialog-center-box{
+            padding:20px;
+            width:500px;
+            border-left:1px dashed #dedede;
+          }
+          .externalLink-dialog-right-box{
+            padding:20px;
+            width:500px;
+            border-left:1px dashed #dedede;
+          }
+          .for-custom-parameter-max-big-box{
+            display: flex;
+            width:260px;
+            margin-bottom:20px;
+            .input-box{
+              flex:1;
+              border: 1px solid #999;
+              border-right:none;
+              border-top-left-radius:4px;
+              border-bottom-left-radius:4px;
+              .top-border{
+                border-top:1px solid #999;
+              }
+              ::v-deep .el-input--suffix{
+                border:none;
+              }
+              ::v-deep .el-input__inner{
+                border:none;
+              }
+            }
+            .del-button-box{
+              display: flex;
+              flex-direction: column;
+              width:30px;
+              background-color: #FF6666;
+              border:1px solid #FF6666;
+              border-top-right-radius:4px;
+              border-bottom-right-radius:4px;
+              cursor: pointer;
+              .del-button-null{
+                flex:1;
+              }
+              .del-button{
+                line-height:83px;
+                text-align: center;
+                font-size:20px;
+                color:#fff;
+              }
+            }
+          }
+          .add-button{
+            width:260px;
+            height:40px;
+            line-height:40px;
+            text-align: center;
+            font-size:20px;
+            color:#fff;
+            background-color: #0183FA;
+            border:1px solid #0183FA;
+            border-radius:4px;
+            cursor: pointer;
+          }
+        }
+      }
+    }
+  }
+</style>

+ 52 - 413
src/views/serviceCenter/externalLink/index.vue

@@ -5,64 +5,40 @@
       <div class="page-form-title-box">
         <el-form :model="queryParams" class="form-box" ref="queryForm"
                  :inline="true" style="width:100%;">
-          <el-form-item label="" prop="queryParamsData1">
+          <el-form-item label="" prop="searchValue">
             <el-input
               maxLength="30"
-              v-model="queryParams.queryParamsData1"
-              placeholder="请输入"
+              v-model="queryParams.searchValue"
+              placeholder="请输入名称"
               style="width: 200px"
             />
           </el-form-item>
-          <el-form-item label="" prop="queryParamsData2">
-            <el-select v-model="queryParams.queryParamsData2" placeholder="请选择" style="width: 200px">
-              <el-option
-                v-for="dict in optionList"
-                :key="dict.value"
-                :label="dict.label"
-                :value="dict.value"
-              />
-            </el-select>
-          </el-form-item>
-          <el-form-item label="" prop="state">
-            <el-date-picker
-              :clearable="false"
-              v-model="dateRange"
-              size="small"
-              style="width: 240px"
-              value-format="yyyy-MM-dd"
-              type="daterange"
-              range-separator="-"
-              start-placeholder="开始日期"
-              end-placeholder="结束日期"
-            ></el-date-picker>
-          </el-form-item>
           <p class="page-inquire-common-style-button" @click="handleQuery">查询</p>
           <p class="page-reset-common-style-button" @click="resetQuery">重置</p>
           <p class="page-add-common-style-button"
              style="float: right;"
              @click="tableButton(1)"
-             v-hasPermiRouter="['demo:demo:add']"
+             v-hasPermiRouter="['system:link:add']"
           >新增</p>
         </el-form>
       </div>
       <div class="page-content-box">
         <el-table class="table-box" v-loading="loading" border :data="dataList">
-          <el-table-column label="名称" prop="name"  show-overflow-tooltip/>
-          <el-table-column label="内容" prop="content" width="200" show-overflow-tooltip/>
-          <el-table-column label="状态" prop="state" width="100" show-overflow-tooltip>
+          <el-table-column label="名称" prop="linkName"  show-overflow-tooltip/>
+          <el-table-column label="链接地址" prop="linkUrl" width="500" show-overflow-tooltip/>
+          <el-table-column label="跳转方式" prop="skipType" width="120" show-overflow-tooltip>
+            <template slot-scope="scope">
+              <span>{{scope.row.skipType?'新窗口':'当前窗口'}}</span>
+            </template>
+          </el-table-column>
+          <el-table-column label="登录验证" prop="isAuth" width="120" show-overflow-tooltip>
+            <template slot-scope="scope">
+              <span>{{scope.row.isAuth?'是':'否'}}</span>
+            </template>
+          </el-table-column>
+          <el-table-column label="认证方式" prop="authMode" width="120" show-overflow-tooltip>
             <template slot-scope="scope">
-              <el-switch
-                @click.native="tableButton(5,scope.row)"
-                class="switch captcha-img"
-                :active-value="true"
-                :inactive-value="false"
-                active-color="#0183FA"
-                inactive-color="#999"
-                v-model="scope.row.state"
-                active-text="启用"
-                inactive-text="停用"
-                disabled
-              ></el-switch>
+              <span>{{scope.row.authMode==0?'无':(scope.row.authMode==1?'携参':(scope.row.authMode==2?'cookie':''))}}</span>
             </template>
           </el-table-column>
           <el-table-column label="创建时间" prop="createTime" width="200" show-overflow-tooltip>
@@ -70,17 +46,17 @@
               <span>{{ parseTime(scope.row.createTime,"{y}-{m}-{d} {h}:{i}") }}</span>
             </template>
           </el-table-column>
-          <el-table-column label="操作" width="200" show-overflow-tooltip v-if="tableButtonType">
+          <el-table-column label="操作" width="160" show-overflow-tooltip v-if="tableButtonType">
             <template slot-scope="scope">
               <div class="table-button-box">
                 <p class="table-button-null"></p>
                 <p class="table-button-p"
                    @click="tableButton(2,scope.row)"
-                   v-hasPermiRouter="['demo:demo:edit']"
+                   v-hasPermiRouter="['system:link:edit']"
                 >编辑</p>
                 <p class="table-button-p"
                    @click="tableButton(3,scope.row)"
-                   v-hasPermiRouter="['demo:demo:del']"
+                   v-hasPermiRouter="['system:link:del']"
                 >删除</p>
                 <p class="table-button-null"></p>
               </div>
@@ -96,146 +72,20 @@
         />
       </div>
     </div>
-    <el-dialog class="externalLink-dialog" :title="dialogForm.id?'编辑':'新增'"
-               :visible.sync="externalLinkDialogType" v-if="externalLinkDialogType" width="1240px" height="700"
-               append-to-body :close-on-click-modal="false" @close="dialogOff()">
-      <div class="externalLink-dialog-max-big-box">
-        <el-form :model="dialogForm" class="dialogForm" ref="dialogForm"
-                 :rules="rules" style="width:100%;" label-width="100px">
-          <div class="externalLink-dialog-big-box">
-            <div class="externalLink-dialog-left-box">
-              <el-form-item label="名称:" prop="linkName">
-                <el-input
-                  maxLength="20"
-                  v-model="dialogForm.linkName"
-                  placeholder="请输入名称"
-                  clearable
-                  style="width: 280px"
-                />
-              </el-form-item>
-              <el-form-item label="链接地址:" prop="linkUrl">
-                <el-input
-                  maxLength="50"
-                  v-model="dialogForm.linkUrl"
-                  placeholder="请输入链接地址"
-                  clearable
-                  style="width: 280px"
-                />
-              </el-form-item>
-              <el-form-item label="跳转类型:" prop="skipType">
-                <el-radio-group v-model="dialogForm.skipType">
-                  <el-radio :label="false" style="width:70px;">当前窗口</el-radio>
-                  <el-radio :label="true" style="width:70px;">新窗口</el-radio>
-                </el-radio-group>
-              </el-form-item>
-              <el-form-item label="登录验证:" prop="isAuth">
-                <el-radio-group v-model="dialogForm.isAuth">
-                  <el-radio :label="false" style="width:70px;">否</el-radio>
-                  <el-radio :label="true" style="width:70px;">是</el-radio>
-                </el-radio-group>
-              </el-form-item>
-              <el-form-item label="认证方式:" prop="authMode">
-                <el-radio-group v-model="dialogForm.authMode">
-                  <el-radio :label=0 style="width:70px;">无</el-radio>
-                  <el-radio :label=2 style="width:70px;">cookie</el-radio>
-                  <el-radio :label=1 style="width:70px;">携参</el-radio>
-                </el-radio-group>
-              </el-form-item>
-              <el-form-item label="请求地址:" prop="reqApi" v-if="dialogForm.isAuth">
-                <el-input
-                  maxLength="20"
-                  v-model="dialogForm.reqApi"
-                  placeholder="请输入请求地址"
-                  clearable
-                  style="width: 280px"
-                />
-              </el-form-item>
-              <el-form-item label="请求类型:" prop="reqMethod" v-if="dialogForm.isAuth">
-                <el-radio-group v-model="dialogForm.reqMethod">
-                  <el-radio label="post" style="width:60px;">POST</el-radio>
-                  <el-radio label="get" style="width:60px;">GET</el-radio>
-                </el-radio-group>
-              </el-form-item>
-            </div>
-            <div class="externalLink-dialog-center-box scrollbar-box" v-if="dialogForm.isAuth">
-              <el-form-item label="请求参数:" prop="authMode">
-                <div class="for-custom-parameter-max-big-box" v-for="(item,index) in dialogForm.requestArgument" :key="index">
-                  <div class="input-box">
-                    <el-select v-model="item.type" placeholder="请选择参数类型" clearable size="small">
-                      <el-option
-                        v-for="dict in typeOptions"
-                        :key="dict.value"
-                        :label="dict.name"
-                        :value="dict.value"
-                      />
-                    </el-select>
-                    <el-input class="top-border" v-if="item.type != 5" maxLength="20"
-                              v-model="item.key" placeholder="请输入key"/>
-                    <el-input class="top-border" v-if="item.type == 1" maxLength="50"
-                              v-model="item.value" placeholder="请输入value"/>
-                    <el-select class="top-border" v-model="item.num" v-if="item.type == 5" placeholder="请选择时间戳长度" clearable size="small">
-                      <el-option key="10" label="10位时间戳" value="10"/>
-                      <el-option key="13" label="13位时间戳" value="13"/>
-                    </el-select>
-                  </div>
-                  <div class="del-button-box" @click="delRequestArgument(index)">
-                    <p class="del-button-null"></p>
-                    <p class="del-button el-icon-remove"></p>
-                    <p class="del-button-null"></p>
-                  </div>
-                </div>
-                <p class="el-icon-circle-plus-outline add-button" @click="addRequestArgument" v-if="!dialogForm.requestArgument[4]"></p>
-              </el-form-item>
-            </div>
-            <div class="externalLink-dialog-right-box scrollbar-box" v-if="dialogForm.authMode == '1'">
-              <el-form-item label="携带参数:" prop="authMode">
-                <div class="for-custom-parameter-max-big-box" v-for="(item,index) in dialogForm.carryArgument" :key="index">
-                  <div class="input-box">
-                    <el-select v-model="item.type" placeholder="请选择参数类型" clearable size="small">
-                      <el-option
-                        v-for="dict in typeOptions"
-                        :key="dict.value"
-                        :label="dict.name"
-                        :value="dict.value"
-                      />
-                    </el-select>
-                    <el-input class="top-border" v-if="item.type != 5" maxLength="20"
-                              v-model="item.key" placeholder="请输入key"/>
-                    <el-input class="top-border" v-if="item.type == 1"  maxLength="50"
-                              v-model="item.value" placeholder="请输入value"/>
-                    <el-select class="top-border" v-model="item.num" v-if="item.type == 5" placeholder="请选择时间戳长度" clearable size="small">
-                      <el-option key="10" label="10位时间戳" value="10"/>
-                      <el-option key="13" label="13位时间戳" value="13"/>
-                    </el-select>
-                  </div>
-                  <div class="del-button-box" @click="delCarryArgument(index)">
-                    <p class="del-button-null"></p>
-                    <p class="del-button el-icon-remove"></p>
-                    <p class="del-button-null"></p>
-                  </div>
-                </div>
-                <p class="el-icon-circle-plus-outline add-button" @click="addCarryArgument" v-if="!dialogForm.carryArgument[4]"></p>
-              </el-form-item>
-            </div>
-          </div>
-        </el-form>
-      </div>
-      <div slot="footer" class="dialog-footer dialog-footer-box">
-        <p class="dialog-footer-button-null"></p>
-        <p class="dialog-footer-button-info" @click="dialogOff">取消</p>
-        <p class="dialog-footer-button-primary" @click="dialogSubmit">提交</p>
-        <p class="dialog-footer-button-null"></p>
-      </div>
-    </el-dialog>
+    <addPage v-if="pageType == 2" :propsData="propsData"></addPage>
   </div>
 </template>
 <script>
-  import { systemLinkList,systemLinkAdd,systemLinkUpdate,systemLinkDelete } from "@/api/serviceCenter/index";
+  import { systemLinkList,systemLinkDelete, } from "@/api/serviceCenter/index";
+  import addPage from "./addPage.vue";
   export default {
     name: 'index',
+    components: {
+      addPage
+    },
     data () {
       return {
-        tableButtonType:this.hasPermiDom(['demo:demo:detail','demo:demo:edit','demo:demo:del',]),
+        tableButtonType:this.hasPermiDom(['system:link:edit','system:link:del']),
         //页面状态
         pageType:1,
         //页面遮罩
@@ -246,8 +96,7 @@
         queryParams:{
           page:1,
           pageSize:20,
-          queryParamsData1:"",
-          queryParamsData2 :null,
+          searchValue:"",
         },
         //时间数据
         dateRange:[],
@@ -257,50 +106,9 @@
         total:0,
         //组件传参
         propsData:{},
-        //弹窗参数
-        externalLinkDialogType:false,
-        dialogForm:{},
-        rules:{
-          linkName:[
-            { required: true, message: '请输入名称', trigger: 'blur' },
-            { required: true, message: "请输入名称", validator: this.spaceJudgment, trigger: "blur" }
-          ],
-          linkUrl:[
-            { required: true, message: '请输入链接地址', trigger: 'blur' },
-            { required: true, message: "请输入链接地址", validator: this.spaceJudgment, trigger: "blur" }
-          ],
-          skipType:[
-            { required: true, message: '请选择跳转类型', trigger: 'blur' },
-            { required: true, message: "请选择跳转类型", validator: this.spaceJudgment, trigger: "blur" }
-          ],
-          isAuth:[
-            { required: true, message: '请选择登录验证', trigger: 'blur' },
-            { required: true, message: "请选择登录验证", validator: this.spaceJudgment, trigger: "blur" }
-          ],
-          authMode:[
-            { required: true, message: '请选择认证方式', trigger: 'blur' },
-            { required: true, message: "请选择认证方式", validator: this.spaceJudgment, trigger: "blur" }
-          ],
-          reqMethod:[
-            { required: true, message: '请选择请求类型', trigger: 'blur' },
-            { required: true, message: "请选择请求类型", validator: this.spaceJudgment, trigger: "blur" }
-          ],
-          reqApi:[
-            { required: true, message: '请输入请求地址', trigger: 'blur' },
-            { required: true, message: "请输入请求地址", validator: this.spaceJudgment, trigger: "blur" }
-          ],
-        },
-        typeOptions:[
-          {name:'数据',value:'1'},
-          {name:'cookie',value:'2'},
-          {name:'localStorage',value:'3'},
-          {name:'sessionStorage',value:'4'},
-          {name:'timestamp',value:'5'},//13位10位
-        ],
       }
     },
     created () {
-
     },
     mounted () {
       this.getList();
@@ -317,8 +125,7 @@
         this.$set(this,'queryParams',{
           page:1,
           pageSize:20,
-          queryParamsData1:"",
-          queryParamsData2 :null,
+          searchValue:"",
         });
         this.getList();
       },
@@ -337,24 +144,37 @@
         let self = this;
         if(type == 1){
           //新增
-          this.dialogFormReset();
-          this.$set(this,'externalLinkDialogType',true);
+          this.$set(this,'propsData',{
+            linkName:'',
+            linkUrl:'',
+            skipType:false,
+            isAuth:false,
+            reqApi:'',
+            reqMethod:'post',
+            paramType:'JSON',
+            authMode:0,
+            requestArgument:[],
+            carryArgument:[],
+          });
+          this.$set(this,'pageType',2);
         }else if(type == 2){
-          //详情
+          //编辑
           let params = JSON.parse(row.params)
           let obj = {
+            linkId:row.linkId,
             linkName:row.linkName,
             linkUrl:row.linkUrl,
             skipType:row.skipType,
             isAuth:row.isAuth,
             authMode:row.authMode,
+            paramType:row.reqMethod == 'post'?row.paramType:'',
             reqApi:row.isAuth?row.reqApi:'',
             reqMethod:row.isAuth?row.reqMethod:'',
             requestArgument:params.requestArgument,
             carryArgument:params.carryArgument,
           };
-          this.$set(this,'dialogForm',JSON.parse(JSON.stringify(obj)));
-          this.$set(this,'externalLinkDialogType',true);
+          this.$set(this,'propsData',JSON.parse(JSON.stringify(obj)));
+          this.$set(this,'pageType',2);
         }else if(type == 3){
           //删除
           this.$confirm('是否确认删除?', "警告", {
@@ -363,197 +183,16 @@
             type: "warning"
           }).then(function() {
           }).then(() => {
-            systemLinkDelete({id:row.id}).then(response => {
+            systemLinkDelete({linkId:row.linkId}).then(response => {
               self.msgSuccess(response.message)
               self.getList();
             });
           }).catch(() => {});
+        }else if(type == 4){
+          this.$set(this,'pageType',1);
+          self.getList();
         }
       },
-      //弹窗关闭
-      dialogOff(){
-        this.$set(this,'externalLinkDialogType',false);
-      },
-      //提交接口
-      dialogSubmit(){
-        let self = this;
-        this.$refs["dialogForm"].validate(valid => {
-          if (valid) {
-            //检查请求参数
-            if(this.dialogForm.isAuth){
-              if(!this.dialogForm.requestArgument[0]){
-                this.msgError('请添加请求参数')
-                return
-              }
-              for(let i=0;i<self.dialogForm.requestArgument.length;i++){
-                if(!self.dialogForm.requestArgument[i].type){
-                  this.msgError('请选择第 '+(i+1)+' 条,请求参数的参数类型')
-                  return
-                }else if(self.dialogForm.requestArgument[i].type == 1){
-                  if(!self.dialogForm.requestArgument[i].key){
-                    this.msgError('请输入第 '+(i+1)+' 条,请求参数的key')
-                    return
-                  }else if(!self.dialogForm.requestArgument[i].value){
-                    this.msgError('请输入第 '+(i+1)+' 条,请求参数的value')
-                    return
-                  }
-                }else if(self.dialogForm.requestArgument[i].type == 2 ||
-                  self.dialogForm.requestArgument[i].type == 3 ||
-                  self.dialogForm.requestArgument[i].type == 4){
-                  if(!self.dialogForm.requestArgument[i].key){
-                    this.msgError('请输入第 '+(i+1)+' 条,请求参数的key')
-                    return
-                  }
-                }else if(self.dialogForm.requestArgument[i].type == 5){
-                  if(!self.dialogForm.requestArgument[i].num){
-                    this.msgError('请选择第 '+(i+1)+' 条,请求参数的时间戳长度')
-                    return
-                  }
-                }
-              }
-            }
-            //检查携带参数
-            if(this.dialogForm.authMode == 1){
-              if(!this.dialogForm.carryArgument[0]){
-                this.msgError('请添加携带参数')
-                return
-              }
-              for(let i=0;i<self.dialogForm.carryArgument.length;i++){
-                if(!self.dialogForm.carryArgument[i].type){
-                  this.msgError('请选择第 '+(i+1)+' 条,携带参数的参数类型')
-                  return
-                }else if(self.dialogForm.carryArgument[i].type == 1){
-                  if(!self.dialogForm.carryArgument[i].key){
-                    this.msgError('请输入第 '+(i+1)+' 条,携带参数的key')
-                    return
-                  }else if(!self.dialogForm.carryArgument[i].value){
-                    this.msgError('请输入第 '+(i+1)+' 条,携带参数的value')
-                    return
-                  }
-                }else if(self.dialogForm.carryArgument[i].type == 2 ||
-                  self.dialogForm.carryArgument[i].type == 3 ||
-                  self.dialogForm.carryArgument[i].type == 4){
-                  if(!self.dialogForm.carryArgument[i].key){
-                    this.msgError('请输入第 '+(i+1)+' 条,携带参数的key')
-                    return
-                  }
-                }else if(self.dialogForm.carryArgument[i].type == 5){
-                  if(!self.dialogForm.carryArgument[i].num){
-                    this.msgError('请选择第 '+(i+1)+' 条,携带参数的时间戳长度')
-                    return
-                  }
-                }
-              }
-            }
-            //数据处理
-            let requestArgument = [];
-            let carryArgument = [];
-            this.dialogForm.requestArgument.forEach((item)=>{
-              let minObj = {
-                type:item.type
-              }
-              if(item.type == 1){
-                minObj.key = item.key;
-                minObj.value = item.value;
-              }else if(item.type == 2 || item.type == 3 || item.type == 4){
-                minObj.key = item.key;
-              }else if(item.type == 5){
-                minObj.num = item.num;
-              }
-              requestArgument.push(minObj)
-            })
-            this.dialogForm.carryArgument.forEach((item)=>{
-              let minObj = {
-                type:item.type
-              }
-              if(item.type == 1){
-                minObj.key = item.key;
-                minObj.value = item.value;
-              }else if(item.type == 2 || item.type == 3 || item.type == 4){
-                minObj.key = item.key;
-              }else if(item.type == 5){
-                minObj.num = item.num;
-              }
-              carryArgument.push(minObj)
-            })
-            let params = {
-              requestArgument:requestArgument,
-              carryArgument:carryArgument,
-            }
-            let obj = {
-              linkName:this.dialogForm.linkName,
-              linkUrl:this.dialogForm.linkUrl,
-              skipType:this.dialogForm.skipType,
-              isAuth:this.dialogForm.isAuth,
-              authMode:this.dialogForm.authMode,
-              reqApi:this.dialogForm.isAuth?this.dialogForm.reqApi:'',
-              reqMethod:this.dialogForm.isAuth?this.dialogForm.reqMethod:'',
-              params:JSON.stringify(params),
-            };
-            if(this.dialogForm.id){
-              obj.id = this.dialogForm.id
-              this.systemLinkUpdate(obj);
-            }else{
-              this.systemLinkAdd(obj);
-            }
-          }
-        })
-      },
-      //重置弹窗数据
-      dialogFormReset(){
-        this.$set(this,'dialogForm',{
-          linkName:'',
-          linkUrl:'',
-          skipType:false,
-          isAuth:false,
-          reqApi:'',
-          reqMethod:'post',
-          authMode:0,
-          requestArgument:[],
-          carryArgument:[],
-        });
-      },
-      //新增请求参数
-      addRequestArgument(){
-        this.dialogForm.requestArgument.push({
-          type:'',
-        })
-      },
-      //删除请求参数
-      delRequestArgument(index){
-        this.dialogForm.requestArgument.splice(index,1);
-      },
-      //新增携带参数
-      addCarryArgument(){
-        this.dialogForm.carryArgument.push({
-          type:'',
-          key:'',
-          value:'',
-          num:'',
-        })
-      },
-      //删除携带参数
-      delCarryArgument(index){
-        this.dialogForm.carryArgument.splice(index,1);
-      },
-      //新增接口
-      systemLinkAdd(obj){
-        systemLinkAdd(obj).then(response => {
-          this.msgSuccess(response.message)
-          this.$set(this,'externalLinkDialogType',false);
-          this.dialogFormReset();
-          this.getList();
-        });
-      },
-      //编辑接口
-      systemLinkUpdate(obj){
-        systemLinkUpdate(obj).then(response => {
-          this.msgSuccess(response.message)
-          this.$set(this,'externalLinkDialogType',false);
-          this.dialogFormReset();
-          this.getList();
-        });
-      },
     },
   }
 </script>

+ 45 - 140
src/views/systemManagement/menu/index.vue

@@ -169,7 +169,7 @@
             <el-col :span="12" v-if="form.menuType != '2'">
               <el-form-item>
               <span slot="label">
-                <el-tooltip content="选择是链接跳转则路由地址需要以`http(s)://`开头" placement="top">
+                <el-tooltip content="选择是时不在进行路由跳转path自动替换为menuName" placement="top">
                 <i class="el-icon-question" style="color:#999;"></i>
                 </el-tooltip>
                 链接跳转
@@ -180,91 +180,33 @@
                 </el-radio-group>
               </el-form-item>
             </el-col>
-            <el-col :span="12" v-if="form.menuType != '2'">
-              <el-form-item prop="path">
-              <span slot="label">
-                <el-tooltip content="访问的路由地址,如:`user`,如外网地址需内链访问则以`http(s)://`开头" placement="top">
-                <i class="el-icon-question" style="color:#999;"></i>
-                </el-tooltip>
-                路由地址
-              </span>
-                <el-input v-model="form.path" placeholder="请输入路由地址" style="width:180px;"/>
-              </el-form-item>
-            </el-col>
-            <!-- 登录验证 -->
-            <el-col :span="12" v-if="form.menuType != '2' && form.isFrame">
-              <el-form-item>
-              <span slot="label">
-                <el-tooltip content="登录验证选择是则需要填写请求地址-请求类型-请求参数" placement="top">
-                <i class="el-icon-question" style="color:#999;"></i>
-                </el-tooltip>
-                登录验证
-              </span>
-                <el-radio-group v-model="form.needAuth">
-                  <el-radio :label="true" style="width:60px;">是</el-radio>
-                  <el-radio :label="false" style="width:60px;">否</el-radio>
-                </el-radio-group>
-              </el-form-item>
-            </el-col>
-            <!-- 请求地址 -->
-            <el-col :span="12" v-if="form.needAuth && form.isFrame">
-              <el-form-item>
-              <span slot="label">
-                <el-tooltip content="填写登录验证的请求地址,不需要填写`http(s)://`" placement="top">
-                <i class="el-icon-question" style="color:#999;"></i>
-                </el-tooltip>
-                请求地址
-              </span>
-                <el-input v-model="form.reqApi" placeholder="请输入请求地址" style="width:180px;"/>
-              </el-form-item>
-            </el-col>
-            <!-- 请求类型 -->
-            <el-col :span="12" v-if="form.needAuth && form.isFrame">
-              <el-form-item>
-              <span slot="label">
-                <el-tooltip content="选择请求类型" placement="top">
-                <i class="el-icon-question" style="color:#999;"></i>
-                </el-tooltip>
-                请求类型
-              </span>
-                <el-radio-group v-model="form.reqMethod">
-                  <el-radio label="post" style="width:60px;">POST</el-radio>
-                  <el-radio label="get" style="width:60px;">GET</el-radio>
-                </el-radio-group>
-              </el-form-item>
-            </el-col>
-            <!-- 跳转类型 -->
-            <el-col :span="12" v-if="form.needAuth && form.isFrame">
-              <el-form-item>
+            <el-col :span="12" v-if="form.menuType != '2'&&form.isFrame">
+              <el-form-item prop="linkId">
               <span slot="label">
-                <el-tooltip content="选择跳转类型" placement="top">
+                <el-tooltip content="跳转地址可在服务管理下的链接管理中配置" placement="top">
                 <i class="el-icon-question" style="color:#999;"></i>
                 </el-tooltip>
-                跳转类型
+                跳转地址
               </span>
-                <el-radio-group v-model="form.skipType">
-                  <el-radio label="_blank" style="width:60px;">新窗口</el-radio>
-                  <el-radio label="_self" style="width:70px;">当前窗口</el-radio>
-                </el-radio-group>
+                <el-select v-model="form.linkId" placeholder="请选择参数类型" style="width:180px;">
+                  <el-option
+                    v-for="dict in externalOptions"
+                    :key="dict.linkId"
+                    :label="dict.linkName"
+                    :value="dict.linkId"
+                  />
+                </el-select>
               </el-form-item>
             </el-col>
-            <!-- 请求参数 -->
-            <el-col :span="12" v-if="form.needAuth && form.isFrame">
-              <el-form-item>
+            <el-col :span="12" v-if="form.menuType != '2'">
+              <el-form-item prop="path">
               <span slot="label">
-                <el-tooltip content="填写请求参数最多支持5个参数" placement="top">
+                <el-tooltip content="访问的路由地址,如:`user`,如外网地址需内链访问则以`http(s)://`开头" placement="top">
                 <i class="el-icon-question" style="color:#999;"></i>
                 </el-tooltip>
-                请求参数
+                路由地址
               </span>
-                <div class="for-custom-parameter-max-big-box" v-for="(item,index) in form.customParameter" :key="index">
-                  <div class="input-box">
-                    <el-input class="top-input" v-model="item.key" placeholder="请输入key"/>
-                    <el-input class="bottom-input" v-model="item.value" placeholder="请输入value"/>
-                  </div>
-                  <p class="el-icon-remove del-button" @click="delCustomParameter(index)"></p>
-                </div>
-                <p class="el-icon-circle-plus-outline add-button" @click="addCustomParameter" v-if="!form.customParameter[4]"></p>
+                <el-input v-model="form.path" placeholder="请输入路由地址" style="width:180px;"/>
               </el-form-item>
             </el-col>
             <el-col :span="12" v-if="form.menuType == '1' && !form.isFrame">
@@ -367,6 +309,7 @@
 </template>
 
 <script>
+import { systemLinkDropList } from "@/api/commonality/permission";
 import { listMenu, getMenu, delMenu, addMenu, updateMenu } from "@/api/systemManagement/index";
 import Treeselect from "@riophae/vue-treeselect";
 import "@riophae/vue-treeselect/dist/vue-treeselect.css";
@@ -420,26 +363,33 @@ export default {
       // 表单校验
       rules: {
         menuName: [
-          { required: true, message: "菜单名称不能为空", trigger: "blur" },
-          { required: true, message: "菜单名称不能为空", validator: this.spaceJudgment, trigger: "blur" }
+          { required: true, message: "菜单名称不能为空", trigger: "change" },
+          { required: true, message: "菜单名称不能为空", validator: this.spaceJudgment, trigger: "change" }
         ],
         menuType: [
-          { required: true, message: "请选择类型", trigger: "blur" },
-          { required: true, message: "请选择类型", validator: this.spaceJudgment, trigger: "blur" }
+          { required: true, message: "请选择类型", trigger: "change" },
+          { required: true, message: "请选择类型", validator: this.spaceJudgment, trigger: "change" }
         ],
         orderNum: [
-          { required: true, message: "菜单顺序不能为空", trigger: "blur" },
-          { required: true, message: "菜单顺序不能为空", validator: this.spaceJudgment, trigger: "blur" }
+          { required: true, message: "菜单顺序不能为空", trigger: "change" },
+          { required: true, message: "菜单顺序不能为空", validator: this.spaceJudgment, trigger: "change" }
         ],
         path: [
-          { required: true, message: "路由地址不能为空", trigger: "blur" },
-          { required: true, message: "路由地址不能为空", validator: this.spaceJudgment, trigger: "blur" }
+          { required: true, message: "路由地址不能为空", trigger: "change" },
+          { required: true, message: "路由地址不能为空", validator: this.spaceJudgment, trigger: "change" }
         ],
-      }
+        linkId: [
+          { required: true, message: "请选择跳转地址", trigger: "change" },
+          { required: true, message: "请选择跳转地址", validator: this.spaceJudgment, trigger: "change" }
+        ],
+      },
+      //跳转地址列表
+      externalOptions:[],
     };
   },
   created() {
     this.getList();
+    this.systemLinkDropList();
     // this.getDicts("sys_show_hide").then(response => {
     //   this.visibleOptions = response.data;
     // });
@@ -448,6 +398,12 @@ export default {
     // });
   },
   methods: {
+    //获取链接下拉列表
+    systemLinkDropList(){
+      systemLinkDropList({}).then(response => {
+        this.$set(this,'externalOptions',response.data);
+      });
+    },
     //选中上级菜单
     parentSelect(item){
       this.$set(this.form,'menuType','');
@@ -586,13 +542,7 @@ export default {
         menuType: 0,
         orderNum: undefined,
         isFrame: false,
-        needAuth: false,
-        reqApi: '',
-        reqMethod: 'post',
-        customParameter: [
-          {key:'',value:''}
-        ],
-        skipType: '_blank',
+        linkId: null,
         isCache: true,
         visible: true,
         status: true,
@@ -629,25 +579,6 @@ export default {
     handleUpdate(row) {
       this.getTreeselect(row);
       getMenu({menuId:row.menuId}).then(response => {
-        if (response.data.needAuth && response.data.isFrame){
-          if(response.data.params[0]){
-            let obj = JSON.parse(response.data.params)
-            response.data.reqApi = obj.reqApi;
-            response.data.reqMethod = obj.reqMethod;
-            response.data.skipType = obj.skipType;
-            response.data.customParameter = obj.customParameter;
-          }else{
-            response.data.reqApi = '';
-            response.data.reqMethod = 'post';
-            response.data.skipType = '_blank';
-            response.data.customParameter = [{key:'',value:''}];
-          }
-        }else{
-          response.data.reqApi = '';
-          response.data.reqMethod = 'post';
-          response.data.skipType = '_blank';
-          response.data.customParameter = [{key:'',value:''}];
-        }
         this.lookUpParent(3,row);
         this.$set(this,'form',response.data);
         this.open = true;
@@ -659,33 +590,15 @@ export default {
       let self = this;
       this.$refs["form"].validate(valid => {
         if (valid) {
-          let num = 0;
-          if(this.form.needAuth && this.form.isFrame){
-            for(let i=0;i<self.form.customParameter.length;i++){
-              if(!self.form.customParameter[i].key){
-                num++
-                this.msgError('第'+(i+1)+'个参数的key未填写');
-                return
-              }else if(!self.form.customParameter[i].value){
-                num++
-                this.msgError('第'+(i+1)+'个参数的value未填写');
-                return
-              }
-            }
-          }
-          if(num != 0){
-            return
-          }
           // let obj = JSON.parse(JSON.stringify(this.form))
           let obj = {
             menuId: this.form.menuId,
             menuName: this.form.menuName,
             parentId: this.form.parentId,
             orderNum: this.form.orderNum,
-            path: this.form.path,
-            needAuth: this.form.needAuth,
-            params: '',
             isFrame: this.form.isFrame,
+            linkId: this.form.isFrame?this.form.linkId:'',
+            path: this.form.path,
             isCache: this.form.isCache,
             menuType: this.form.menuType,
             visible: this.form.visible,
@@ -694,15 +607,7 @@ export default {
             icon: this.form.icon,
             isRequired: this.form.isRequired
           }
-          obj.component = obj.parentId == 0 && obj.menuType == 0 ? 'Layout':(obj.parentId != 0 && obj.menuType == 0 ?'ParentView':this.form.component);
-          if (obj.needAuth && obj.isFrame){
-            obj.params = JSON.stringify({
-              reqApi:this.form.reqApi,
-              reqMethod:this.form.reqMethod,
-              skipType:this.form.skipType,
-              customParameter:this.form.customParameter,
-            })
-          }
+          obj.component = obj.parentId == 0 && obj.menuType == 0 ? 'Layout':(obj.parentId != 0 && obj.menuType == 0 ?'ParentView':((obj.parentId != 0 && obj.isFrame ?'ParentView':this.form.component)));
           if (obj.menuId != undefined) {
             updateMenu(obj).then(response => {
               this.msgSuccess("修改成功");