Browse Source

首页应用跳转

zhongxiaoyu 3 years ago
parent
commit
4ba5f4cef9

+ 16 - 16
src/views/authorityManagement/components/authorityAppAdd.vue

@@ -1,7 +1,7 @@
 <!--
  * @Author: your name
  * @Date: 2021-11-29 09:18:04
- * @LastEditTime: 2022-03-25 16:35:08
+ * @LastEditTime: 2022-03-26 19:03:31
  * @LastEditors: your name
  * @Description: 新增/编辑应用
  * @FilePath: \Foshan4A2.0\src\views\authorityManagement\components\addApp.vue
@@ -30,8 +30,8 @@
         >
           <div class="flex">
             <el-form-item
-              prop="name"
               label="应用名称"
+              prop="name"
             >
               <el-input
                 v-model.trim="form.name"
@@ -41,7 +41,7 @@
             <el-form-item
               label="请求类型"
               prop="type"
-              :required="true"
+              :rules="{ required: true, message: '选择请求类型', trigger: ['change', 'blur'] }"
             >
               <el-select
                 v-model="form.type"
@@ -59,9 +59,9 @@
               </el-select>
             </el-form-item>
             <el-form-item
-              prop="app"
               label="参数类型"
-              :required="form.type === 2"
+              prop="app"
+              :rules="{ required: form.type === 2, message: '请选择参数类型', trigger: ['change', 'blur'] }"
             >
               <el-select
                 v-model="form.app"
@@ -81,9 +81,9 @@
             </el-form-item>
           </div>
           <el-form-item
+            label="应用地址"
             prop="url"
             class="url"
-            label="应用地址"
           >
             <el-input
               v-model.trim="form.url"
@@ -148,6 +148,7 @@
                 <el-form-item
                   label="参数描述"
                   :prop="'domains.' + index + '.InputComment'"
+                  :rules="{ required: true, message: '请输入参数描述', trigger: ['change', 'blur'] }"
                 >
                   <el-input
                     v-model.trim="domain.InputComment"
@@ -190,22 +191,20 @@
                 <el-form-item
                   label="参数位置"
                   :prop="'domains.' + index + '.AppInputSite'"
+                  :rules="{ required: true, message: '请选择参数位置', trigger: ['change', 'blur'] }"
                 >
                   <el-select
                     v-model="domain.AppInputSite"
                     placeholder="参数位置"
-                    :disabled="typeFlag"
                   >
+                    <!-- <el-option
+                      label="header"
+                      value="header"
+                    /> -->
                     <el-option
-                      v-if="form.type === 1"
                       label="url"
                       value="url"
                     />
-                    <el-option
-                      v-if="form.type === 2"
-                      label="header"
-                      value="header"
-                    />
                     <el-option
                       v-if="form.type === 2"
                       label="body"
@@ -313,7 +312,7 @@ export default {
         {
           AppInputName: '',
           InputComment: '',
-          AppInputType: 'string',
+          AppInputType: '',
           AppInputSite: 'url',
           InputValue: ''
         }
@@ -407,7 +406,7 @@ export default {
         this.domains.push({
           AppInputName: '',
           InputComment: '',
-          AppInputType: 'string',
+          AppInputType: '',
           AppInputSite: 'url',
           InputValue: ''
         })
@@ -427,13 +426,14 @@ export default {
         this.typeFlag = true
         this.form.app = ''
         datas.forEach(item => {
-          item.AppInputType = 'string'
+          item.AppInputType = ''
           item.AppInputSite = 'url'
         })
       } else {
         this.typeFlag = false
         this.form.app = 'application/json'
         datas.forEach(item => {
+          item.AppInputType = 'string'
           item.AppInputSite = 'body'
         })
       }

+ 21 - 21
src/views/authorityManagement/components/authorityAppEdit.vue

@@ -1,7 +1,7 @@
 <!--
  * @Author: your name
  * @Date: 2021-11-29 09:18:04
- * @LastEditTime: 2022-03-25 20:30:02
+ * @LastEditTime: 2022-03-26 19:00:09
  * @LastEditors: your name
  * @Description: 新增/编辑应用
  * @FilePath: \Foshan4A2.0\src\views\authorityManagement\components\addApp.vue
@@ -51,7 +51,7 @@
             <el-form-item
               label="请求类型"
               prop="type"
-              :required="true"
+              :rules="{ required: true, message: '选择请求类型', trigger: ['change', 'blur'] }"
             >
               <el-select
                 v-model="form.type"
@@ -71,7 +71,7 @@
             <el-form-item
               label="参数类型"
               prop="app"
-              :required="form.type === 2"
+              :rules="{ required: form.type === 2, message: '请选择参数类型', trigger: ['change', 'blur'] }"
             >
               <el-select
                 v-model="form.app"
@@ -91,9 +91,9 @@
             </el-form-item>
           </div>
           <el-form-item
-            class="url"
-            prop="url"
             label="应用地址"
+            prop="url"
+            class="url"
           >
             <el-input
               v-model.trim="form.url"
@@ -158,6 +158,7 @@
                 <el-form-item
                   label="参数描述"
                   :prop="'domains.' + index + '.InputComment'"
+                  :rules="{ required: true, message: '请输入参数描述', trigger: ['change', 'blur'] }"
                 >
                   <el-input
                     v-model.trim="domain.InputComment"
@@ -200,22 +201,20 @@
                 <el-form-item
                   label="参数位置"
                   :prop="'domains.' + index + '.AppInputSite'"
+                  :rules="{ required: true, message: '请选择参数位置', trigger: ['change', 'blur'] }"
                 >
                   <el-select
                     v-model="domain.AppInputSite"
                     placeholder="参数位置"
-                    :disabled="typeFlag"
                   >
+                    <!-- <el-option
+                      label="header"
+                      value="header"
+                    /> -->
                     <el-option
-                      v-if="form.type === 1"
                       label="url"
                       value="url"
                     />
-                    <el-option
-                      v-if="form.type === 2"
-                      label="header"
-                      value="header"
-                    />
                     <el-option
                       v-if="form.type === 2"
                       label="body"
@@ -315,18 +314,18 @@ export default {
           {
             validator: lengthValidator,
             max: 256,
-            message: "长度在 1到 256 个字符",
-            trigger: ["change", "blur"],
-          },
+            message: '长度在 1到 256 个字符',
+            trigger: ['change', 'blur']
+          }
         ],
         app: [
           {
             validator: lengthValidator,
             max: 32,
-            message: "长度在 1 到 32 个字符",
-            trigger: ["change", "blur"],
-          },
-        ],
+            message: '长度在 1 到 32 个字符',
+            trigger: ['change', 'blur']
+          }
+        ]
       },
       // radio: 1,
       AppId: null,
@@ -488,7 +487,7 @@ export default {
         this.domains.push({
           AppInputName: '',
           InputComment: '',
-          AppInputType: 'string',
+          AppInputType: '',
           AppInputSite: 'url',
           InputValue: ''
         })
@@ -509,13 +508,14 @@ export default {
         this.typeFlag = true
         this.form.app = ''
         datas.forEach(item => {
-          item.AppInputType = 'string'
+          item.AppInputType = ''
           item.AppInputSite = 'url'
         })
       } else {
         this.typeFlag = false
         this.form.app = 'application/json'
         datas.forEach(item => {
+          item.AppInputType = 'string'
           item.AppInputSite = 'body'
         })
       }

+ 135 - 72
src/views/dashboard/index.vue

@@ -1,7 +1,7 @@
 <!--
  * @Author: your name
  * @Date: 2021-10-14 17:17:53
- * @LastEditTime: 2022-03-25 20:23:30
+ * @LastEditTime: 2022-03-26 19:05:06
  * @LastEditors: your name
  * @Description: In User Settings Edit
  * @FilePath: \Foshan4A\src\views\dashboard\index.vue
@@ -11,59 +11,63 @@
     <!--分类信息-->
     <div class="flex-wrap tu-fl">
       <div
-        v-for="(item, index) in flList"
-        :key="index"
+        v-for="item in flList"
+        :key="item.appId"
         class="fl-list"
       >
-        <el-dropdown
-          class="flex"
-          @click="toApp(item)"
-        >
-          <div class="fl-list-img">
-            <template v-if="item.logo">
-              <img
-                :alt="item.appName"
-                :src="item.logo"
-              >
-            </template>
-            <template v-else>
-              <img
-                src="../../assets/index/log_default.png"
-                :alt="item.appName"
-              >
-            </template>
-          </div>
-          <div class="fl-list-title flex1">{{ item.appName }}</div>
-          <el-dropdown-menu
-            v-if="item.params.length > 1"
-            slot="dropdown"
+        <template v-if="item.params.length > 1">
+          <el-dropdown
+            placement="bottom-start"
+            @command="handleCommand"
+          >
+            <div class="flex">
+              <div class="fl-list-img">
+                <template v-if="item.logo">
+                  <img
+                    :alt="item.appName"
+                    :src="item.logo"
+                  >
+                </template>
+                <template v-else>
+                  <img
+                    src="../../assets/index/log_default.png"
+                    :alt="item.appName"
+                  >
+                </template>
+              </div>
+              <div class="fl-list-title flex1">{{ item.appName }}</div>
+            </div>
+            <el-dropdown-menu slot="dropdown">
+              <el-dropdown-item
+                v-for="(p, i) in item.params"
+                :key="i"
+                :command="{ item, index: i}"
+              >{{ Object.entries(p).map(arr => arr[1].comment).join(' ') }}</el-dropdown-item>
+            </el-dropdown-menu>
+          </el-dropdown>
+        </template>
+        <template v-else>
+          <div
+            class="flex"
+            @click="toApp(item)"
           >
-            <el-dropdown-item
-              v-for="(p, i) in item.params"
-              :key="i"
-            >{{ Object.entries(p).map(arr => `${arr[0]}=${arr[1]}`).join(' ') }}</el-dropdown-item>
-          </el-dropdown-menu>
-        </el-dropdown>
-        <!-- <div
-          class="flex fl-list"
-          @click="toApp(item)"
-        >
-          <div class="fl-list-img">
-            <template v-if="item.logo">
-              <img
-                :alt="item.appName"
-                :src="item.logo"
-              >
-            </template>
-            <template v-else>
-              <img
-                src="../../assets/index/log_default.png"
-                :alt="item.appName"
-              >
-            </template>
+            <div class="fl-list-img">
+              <template v-if="item.logo">
+                <img
+                  :alt="item.appName"
+                  :src="item.logo"
+                >
+              </template>
+              <template v-else>
+                <img
+                  src="../../assets/index/log_default.png"
+                  :alt="item.appName"
+                >
+              </template>
+            </div>
+            <div class="fl-list-title flex1">{{ item.appName }}</div>
           </div>
-          <div class="fl-list-title flex1">{{ item.appName }}</div>
-        </div> -->
+        </template>
       </div>
     </div>
     <!--切换和搜索-->
@@ -83,8 +87,8 @@
             @change="handleChange"
           >
             <el-option
-              v-for="(item, index) in routes"
-              :key="index"
+              v-for="item in routes"
+              :key="item.path"
               :label="item.meta.title"
               :value="item.path"
             />
@@ -215,36 +219,56 @@ export default {
         })
         if (result.code === 0 && result.returnData.length) {
           this.flList = result.returnData.map(item => {
-            const params = []
+            const map = {}
+            let params = []
             item.inputs?.length &&
               item.inputs.forEach(input => {
                 const key = input.AppInputName
-                const value = input.InputValue
+                const site = input.AppInputSite
+                const type = input.AppInputType
+                const value = input.InputValue === 'loginName' ? 'userName' : input.InputValue
+                const comment = input.InputComment || '无'
                 if ((key ?? '') !== '' && (value ?? '') !== '') {
-                  if (params.length) {
-                    if (Object.hasOwnProperty.call(params[0], key)) {
-                      const len = Object.entries(params[0]).length
-                      for (let i = 0; i < len; i++) {
-                        const temp = Object.assign({}, params[i])
-                        temp[key] = value
-                        params.push(temp)
-                      }
-                    } else {
-                      params.forEach(param => {
-                        param[key] = value
-                      })
-                    }
-                  } else {
-                    params.push({
-                      [key]: value
+                  if (map[key]?.length) {
+                    map[key].push({
+                      site,
+                      type,
+                      value,
+                      comment
                     })
+                  } else {
+                    map[key] = [
+                      {
+                        site,
+                        type,
+                        value,
+                        comment
+                      }
+                    ]
                   }
                 }
               })
+            for (const [key, arr] of Object.entries(map)) {
+              if (params.length) {
+                const temp = this._.cloneDeep(params)
+                params = []
+                arr.forEach(obj => {
+                  const data = this._.cloneDeep(temp)
+                  data.forEach(item => {
+                    item[key] = obj
+                  })
+                  params.push(...data)
+                })
+              } else {
+                params = arr.map(obj => ({
+                  [key]: obj
+                }))
+              }
+            }
             item.params = params
             return item
           })
-          console.log(this.flList)
+          // console.log(this.flList)
         } else {
           this.$message.error(result.message)
         }
@@ -327,7 +351,46 @@ export default {
         })
     },
     // 应用跳转
-    toApp(item) {
+    handleCommand({ item, index }) {
+      this.toApp(item, index)
+    },
+    toApp(item, index = 0) {
+      if (item.appUrl) {
+        const originParams = item.params.length ? item.params[index] : {}
+        const headers = {}
+        const url = []
+        const params = []
+        Object.entries(originParams).forEach(arr => {
+          switch (arr[1].site) {
+            case 'header':
+              headers[arr[0]] = sessionStorage.getItem(arr[1].value) || ''
+              break
+            case 'url':
+              url.push(`${arr[0]}=${sessionStorage.getItem(arr[1].value) || ''}`)
+              break
+            case 'body':
+              params.push(`${arr[0]}=${sessionStorage.getItem(arr[1].value) || ''}`)
+              break
+            default:
+              break
+          }
+        })
+        const form = document.createElement('form')
+        form.action = item.appUrl + (url.length ? ('?' + url.join('&')) : '')
+        form.target = '_blank'
+        form.method = parseInt(item.requestType) === 1 ? 'get' : 'post'
+        form.style.display = 'none'
+        for (let i = 0; i < params.length; i++) {
+          const input = document.createElement('input')
+          const map = params[i].split('=')
+          input.name = map[0]
+          input.value = map[1]
+          form.appendChild(input)
+        }
+        document.body.appendChild(form)
+        form.submit()
+        document.body.removeChild(form)
+      }
       // if (item.appUrl) {
       //   window.open(item.appUrl)
       //   const datas = item.inputs