From f34f5322ffa898b42ce4467af9916c9e73deb4f9 Mon Sep 17 00:00:00 2001
From: rk <94314517@qq.com>
Date: 星期一, 22 九月 2025 17:01:27 +0800
Subject: [PATCH] Merge remote-tracking branch 'origin/master'

---
 frontWuhu/src/api/business/applicationInfo.js                    |    6 
 frontWuhu/src/utils/request.js                                   |    2 
 frontWuhu/src/router/index.js                                    |    2 
 frontWuhu/src/views/business/serverProvider.vue                  |    2 
 frontWuhu/src/views/system/menu.vue                              |    4 
 frontWuhu/src/views/business/serviceProviderResources.vue        |  115 ++++++--
 frontWuhu/src/components/business/OperaDetailsBWindow.vue        |  199 ++++++++++++++
 frontWuhu/src/api/business/serverProvider.js                     |    5 
 frontWuhu/src/components/Protocol.vue                            |    8 
 frontWuhu/src/views/business/appHall.vue                         |  307 +++++++++++++++++++++
 frontWuhu/src/views/business/applicationInfo.vue                 |   31 -
 frontWuhu/src/assets/images/bg_yingyong.png                      |    0 
 frontWuhu/src/components/business/OperaDetailsAWindow.vue        |   64 +++-
 frontWuhu/src/components/common/RichEditor.vue                   |   11 
 frontWuhu/src/views/business/demandRecord.vue                    |   61 ++--
 frontWuhu/src/components/business/OperaServerProviderWindow.vue  |    2 
 frontWuhu/.env.development                                       |    3 
 frontWuhu/src/components/business/OperaApplicationInfoWindow.vue |   10 
 18 files changed, 726 insertions(+), 106 deletions(-)

diff --git a/frontWuhu/.env.development b/frontWuhu/.env.development
index 5652e89..60e8a48 100644
--- a/frontWuhu/.env.development
+++ b/frontWuhu/.env.development
@@ -8,7 +8,8 @@
 # VVUE_APP_API_BASE_URL='http://192.168.0.102:10031'
 
 # 浠诲悍鏈湴
-VUE_APP_API_BASE_URL='http://192.168.1.54:10031'
+# VUE_APP_API_BASE_URL='http://192.168.1.54:10031'
+VUE_APP_API_BASE_URL = 'http://wuhu.dtkey.cn/hfznzzzd'
 
 #鐒︽澗鏈湴
 # VUE_APP_API_BASE_URL='http://192.168.0.36:10011'
diff --git a/frontWuhu/src/api/business/applicationInfo.js b/frontWuhu/src/api/business/applicationInfo.js
index 27153ce..a5aec13 100644
--- a/frontWuhu/src/api/business/applicationInfo.js
+++ b/frontWuhu/src/api/business/applicationInfo.js
@@ -34,3 +34,9 @@
 export function deleteById (id) {
   return request.get(`/business/applicationInfo/delete/${id}`)
 }
+
+// 鏍规嵁ID鏌ヨ
+export function getById (id) {
+  return request.get(`/business/applicationInfo/${id}`)
+}
+
diff --git a/frontWuhu/src/api/business/serverProvider.js b/frontWuhu/src/api/business/serverProvider.js
index 3198732..caa125c 100644
--- a/frontWuhu/src/api/business/serverProvider.js
+++ b/frontWuhu/src/api/business/serverProvider.js
@@ -35,4 +35,7 @@
   return request.get(`/business/serverProvider/delete/${id}`)
 }
 
-
+// 鏍规嵁ID鏌ヨ
+export function getById (id) {
+  return request.get(`/business/serverProvider/${id}`)
+}
diff --git a/frontWuhu/src/assets/images/bg_yingyong.png b/frontWuhu/src/assets/images/bg_yingyong.png
new file mode 100644
index 0000000..bdcfe89
--- /dev/null
+++ b/frontWuhu/src/assets/images/bg_yingyong.png
Binary files differ
diff --git a/frontWuhu/src/components/Protocol.vue b/frontWuhu/src/components/Protocol.vue
index 6a1fa4a..2073a7c 100644
--- a/frontWuhu/src/components/Protocol.vue
+++ b/frontWuhu/src/components/Protocol.vue
@@ -47,7 +47,11 @@
     open(title, target) {
       this.title = title
       this.visible = true
-      this.getProtocl()
+      if (target) {
+        this.content = target
+      } else {
+        this.getProtocl()
+      }
     },
     getProtocl() {
       companyUserRules()
@@ -59,7 +63,7 @@
           this.$message.error(e)
         })
     },
-    
+
   },
 }
 </script>
diff --git a/frontWuhu/src/components/business/OperaApplicationInfoWindow.vue b/frontWuhu/src/components/business/OperaApplicationInfoWindow.vue
index 9457ead..0a370c2 100644
--- a/frontWuhu/src/components/business/OperaApplicationInfoWindow.vue
+++ b/frontWuhu/src/components/business/OperaApplicationInfoWindow.vue
@@ -29,7 +29,7 @@
         <el-input type="textarea" :autosize="{ minRows: 12, maxRows: 6 }" v-model="form.introduction" placeholder="璇疯緭鍏ュ簲鐢ㄧ畝浠�" v-trim/>
       </el-form-item>
       <el-form-item label="搴旂敤璇︽儏" prop="details">
-        <el-input v-model="form.details" placeholder="璇疯緭鍏ュ簲鐢ㄨ鎯�" v-trim/>
+        <RichEditor :content="{ content: form.details }" @edit="form.details = $event" :max-length="0" />
       </el-form-item>
     </el-form>
   </GlobalWindow>
@@ -40,10 +40,11 @@
 import GlobalWindow from '@/components/common/GlobalWindow'
 import UploadAvatarImage from '@/components/common/UploadAvatarImage'
 import { fetchList } from '@/api/business/serverProvider'
+import RichEditor from '@/components/common/RichEditor'
 export default {
   name: 'OperaApplicationInfoWindow',
   extends: BaseOpera,
-  components: { GlobalWindow, UploadAvatarImage },
+  components: { GlobalWindow, UploadAvatarImage, RichEditor },
   data () {
     return {
       // 琛ㄥ崟鏁版嵁
@@ -92,6 +93,8 @@
       this.visible = true
       // 鏂板缓
       if (target == null) {
+        this.file.imgurl = ''
+        this.file.imgurlfull = ''
         this.$nextTick(() => {
           this.$refs.form.resetFields()
           this.form[this.configData['field.id']] = null
@@ -103,6 +106,9 @@
         for (const key in this.form) {
           this.form[key] = target[key]
         }
+        setTimeout(() => {
+          this.form.details = target.details
+        }, 500)
         this.file.imgurl = target.logo
         this.file.imgurlfull = target.fullLog
       })
diff --git a/frontWuhu/src/components/business/OperaDetailsAWindow.vue b/frontWuhu/src/components/business/OperaDetailsAWindow.vue
index ba99539..4f2ee33 100644
--- a/frontWuhu/src/components/business/OperaDetailsAWindow.vue
+++ b/frontWuhu/src/components/business/OperaDetailsAWindow.vue
@@ -3,18 +3,36 @@
     :title="title"
     :visible.sync="visible"
     :confirm-working="isWorking"
-    @confirm="confirm"
+    :withFooter="false"
   >
-    <div class="com">
+    <div class="com" v-if="info">
       <div class="com_image">
-        <img src="../../assets/images/zhuce_ic_qiye@2x.png" />
+        <img :src="info.fullLog" />
       </div>
       <div class="com_info">
-        <div class="com_info_title">澶у攼铻嶅悎鐗╄仈绉戞妧鏃犻敗鏈夐檺鍏徃</div>
+        <div class="com_info_title">{{info.name}}</div>
         <div class="com_info_list">
           <div class="com_info_list_item">
             <div class="com_info_list_item_label">琛屼笟绫诲埆锛�</div>
-            <div class="com_info_list_item_val">鐢靛瓙浜у搧鍙婅蒋浠�</div>
+            <div class="com_info_list_item_val">{{info.industryName}}</div>
+          </div>
+          <div class="com_info_list_item">
+            <div class="com_info_list_item_label">鏈嶅姟鍟嗘槦绾э細</div>
+            <div class="com_info_list_item_val">
+              <el-rate v-model="info.starLevel" :colors="['#FF934D','#FF934D','#FF934D']" disabled text-color="#ff9900"></el-rate>
+            </div>
+          </div>
+          <div class="com_info_list_item">
+            <div class="com_info_list_item_label">鑱旂郴浜猴細</div>
+            <div class="com_info_list_item_val">{{info.linkName}}</div>
+          </div>
+          <div class="com_info_list_item">
+            <div class="com_info_list_item_label">鑱旂郴鏂瑰紡锛�</div>
+            <div class="com_info_list_item_val">{{info.linkPhone}}</div>
+          </div>
+          <div class="com_info_list_item">
+            <div class="com_info_list_item_label">浼佷笟浠嬬粛锛�</div>
+            <div class="com_info_list_item_val">{{info.introduction}}</div>
           </div>
         </div>
       </div>
@@ -25,20 +43,24 @@
 <script>
 import BaseOpera from '@/components/base/BaseOpera'
 import GlobalWindow from '@/components/common/GlobalWindow'
+import { getById } from '@/api/business/serverProvider'
 export default {
   name: 'OperaDemandRecordWindow',
   extends: BaseOpera,
   components: { GlobalWindow },
   data () {
     return {
-      form: {}
+      value: 4,
+      info: null
     }
   },
-  created () {
-    this.config({
-      api: '/business/demandRecord',
-      'field.id': 'id'
-    })
+  methods: {
+    async open (title, id) {
+      this.title = title
+      this.info = await getById(id)
+      this.visible = true
+
+    }
   }
 }
 </script>
@@ -53,6 +75,13 @@
       flex-shrink: 0;
       background: #F4F7FC;
       margin-right: 30px;
+      display: flex;
+      align-items: center;
+      justify-content: center;
+      overflow: hidden;
+      img {
+        width: 100%;
+      }
     }
     .com_info {
       flex: 1;
@@ -62,6 +91,7 @@
         font-weight: 600;
         font-size: 26px;
         color: #222222;
+        margin-bottom: 20px;
       }
       .com_info_list {
         display: flex;
@@ -69,12 +99,18 @@
         .com_info_list_item {
           width: 100%;
           display: flex;
-          align-items: center;
+          margin-bottom: 30px;
           .com_info_list_item_label {
-
+            font-weight: 400;
+            font-size: 16px;
+            color: #666666;
+            flex-shrink: 0;
           }
           .com_info_list_item_val {
-            
+            flex: 1;
+            font-weight: 400;
+            font-size: 16px;
+            color: #333333;
           }
         }
       }
diff --git a/frontWuhu/src/components/business/OperaDetailsBWindow.vue b/frontWuhu/src/components/business/OperaDetailsBWindow.vue
new file mode 100644
index 0000000..59b2fcd
--- /dev/null
+++ b/frontWuhu/src/components/business/OperaDetailsBWindow.vue
@@ -0,0 +1,199 @@
+<template>
+  <GlobalWindow
+    :title="title"
+    :visible.sync="visible"
+    :confirm-working="isWorking"
+    :withFooter="false"
+  >
+    <div class="com" v-if="info">
+      <div class="com_image">
+        <img :src="info.fullLog" />
+      </div>
+      <div class="com_info">
+        <div class="com_info_title">{{info.name}}</div>
+        <div class="list_item_cate">
+          <div class="list_item_cate_row" v-for="(item, index) in info.lablesList" :key="index">{{item}}</div>
+        </div>
+        <div class="com_info_text1">鏈嶅姟鍟嗭細{{info.serverName}}</div>
+        <div class="com_info_text">{{info.introduction}}</div>
+        <div class="com_info_btn" @click="openT" v-if="[1, 2].includes(userInfo.type)">鑱旂郴鎴戜滑</div>
+        <div class="com_info_x"></div>
+        <div class="com_info_content" v-html="info.details"></div>
+      </div>
+      <el-dialog
+        title="鑱旂郴鎴戜滑"
+        :destroy-on-close="true"
+        :visible.sync="show"
+        :close-on-click-modal="false"
+        :modal-append-to-body="false"
+        width="500px">
+        <el-form :model="formData" label-position="right" :rules="rules" ref="ruleForm">
+          <el-form-item label="鑱旂郴浜�" prop="name">
+            <el-input v-model="formData.name"></el-input>
+          </el-form-item>
+          <el-form-item label="鑱旂郴鐢佃瘽" prop="phone">
+            <el-input type="number" v-model="formData.phone" maxlength="11"></el-input>
+          </el-form-item>
+          <el-form-item label="绠�瑕佹弿杩�" prop="description">
+            <el-input v-model="formData.description"></el-input>
+          </el-form-item>
+        </el-form>
+        <span slot="footer" class="dialog-footer">
+          <el-button @click="show = false">鍙� 娑�</el-button>
+          <el-button type="primary" @click="submit">纭� 瀹�</el-button>
+        </span>
+      </el-dialog>
+    </div>
+  </GlobalWindow>
+</template>
+
+<script>
+import BaseOpera from '@/components/base/BaseOpera'
+import GlobalWindow from '@/components/common/GlobalWindow'
+import { getById } from '@/api/business/applicationInfo'
+import { create } from '@/api/business/demandRecord'
+import { mapState } from 'vuex'
+export default {
+  name: 'OperaDemandRecordWindow',
+  extends: BaseOpera,
+  components: { GlobalWindow },
+  computed: {
+    ...mapState(['userInfo'])
+  },
+  data () {
+    return {
+      form: {},
+      formData: {
+        name: '',
+        phone: '',
+        description: ''
+      },
+      rules: {
+        name: [
+          { required: true, message: '璇疯緭鍏�', trigger: 'blur' }
+        ],
+        phone: [
+          { required: true, message: '璇疯緭鍏�', trigger: 'blur' }
+        ]
+      },
+      show: false,
+      info: null
+    }
+  },
+  methods: {
+    async open (title, id) {
+      this.title = title
+      this.info = await getById(id)
+      this.info.lablesList = this.info.lables.split(',') || []
+      this.visible = true
+    },
+    openT() {
+      this.formData.name = ''
+      this.formData.phone = ''
+      this.formData.description = ''
+      this.show = true
+    },
+    submit() {
+      this.$refs.ruleForm.validate((valid) => {
+        if (valid) {
+          create({
+            applicationId: this.info.id,
+            linkName: this.formData.name,
+            linkPhone: this.formData.phone,
+            details: this.formData.description
+          }).then(res => {
+            this.$message.success('鎻愪氦鎴愬姛锛�')
+            this.show = false
+          })
+        } else {
+          return false;
+        }
+      });
+    }
+  }
+}
+</script>
+
+<style lang="scss" scoped>
+  .com {
+    width: 100%;
+    display: flex;
+    .com_image {
+      width: 140px;
+      height: 140px;
+      flex-shrink: 0;
+      background: #F4F7FC;
+      margin-right: 30px;
+      display: flex;
+      align-items: center;
+      justify-content: center;
+      overflow: hidden;
+      img {
+        width: 100%;
+      }
+    }
+    .com_info {
+      flex: 1;
+      display: flex;
+      flex-direction: column;
+      .com_info_title {
+        font-weight: 600;
+        font-size: 26px;
+        color: #222222;
+      }
+      .com_info_text1 {
+        font-weight: 400;
+        font-size: 13px;
+        color: #666666;
+        margin-top: 15px;
+      }
+      .com_info_text {
+        font-weight: 400;
+        font-size: 16px;
+        color: #666666;
+        margin-top: 15px;
+      }
+      .com_info_btn {
+        width: 96px;
+        height: 36px;
+        line-height: 36px;
+        text-align: center;
+        font-weight: 400;
+        font-size: 14px;
+        color: #FFFFFF;
+        background: #216EEE;
+        border-radius: 2px;
+        cursor: pointer;
+        margin-top: 15px;
+      }
+      .com_info_x {
+        width: 100%;
+        height: 1px;
+        margin: 20px 0;
+        background-color: #DFE2E8;
+      }
+      .com_info_content {
+        width: 100%;
+      }
+      .list_item_cate {
+        width: 100%;
+        display: flex;
+        align-items: center;
+        margin-top: 12px;
+        .list_item_cate_row {
+          padding: 5px 8px;
+          box-sizing: border-box;
+          background: rgba(33,110,238,0.1);
+          border-radius: 2px;
+          font-weight: 400;
+          font-size: 12px;
+          color: #216EEE;
+          margin-right: 10px;
+          &:last-child {
+            margin-right: 0 !important;
+          }
+        }
+      }
+    }
+  }
+</style>
diff --git a/frontWuhu/src/components/business/OperaServerProviderWindow.vue b/frontWuhu/src/components/business/OperaServerProviderWindow.vue
index 7576be2..f94413a 100644
--- a/frontWuhu/src/components/business/OperaServerProviderWindow.vue
+++ b/frontWuhu/src/components/business/OperaServerProviderWindow.vue
@@ -105,6 +105,8 @@
       this.visible = true
       // 鏂板缓
       if (target == null) {
+        this.file.imgurlfull = ''
+        this.file.imgurl = ''
         this.$nextTick(() => {
           this.$refs.form.resetFields()
           this.form[this.configData['field.id']] = null
diff --git a/frontWuhu/src/components/common/RichEditor.vue b/frontWuhu/src/components/common/RichEditor.vue
index 1acf8cc..fee81d5 100644
--- a/frontWuhu/src/components/common/RichEditor.vue
+++ b/frontWuhu/src/components/common/RichEditor.vue
@@ -16,7 +16,7 @@
     />
   </div>
 </template>
- 
+
 <script>
 import { Editor, Toolbar } from '@wangeditor/editor-for-vue'
 export default {
@@ -129,7 +129,7 @@
               console.log(`${file.name} 涓婁紶鍑洪敊`, err, res)
             },
           },
-          
+
         }
       },
       mode: 'default', // or 'simple'
@@ -145,19 +145,20 @@
       this.editor = Object.seal(editor)
     },
     onChange (editor) {
+      console.log('editor', editor)
       // debugger
       this.$emit('edit', this.content.content)
       // this.value = this.html
       // console.log(this.content);
     },
-   
+
     // onBlur (editor) {
     //   console.log('onBlur', editor)
     //   this.$emit('edit', this.html)
     // },
   },
-  
+
 }
 </script>
 
-<style src="@wangeditor/editor/dist/css/style.css"></style>
\ No newline at end of file
+<style src="@wangeditor/editor/dist/css/style.css"></style>
diff --git a/frontWuhu/src/router/index.js b/frontWuhu/src/router/index.js
index ed074b2..dacc38f 100644
--- a/frontWuhu/src/router/index.js
+++ b/frontWuhu/src/router/index.js
@@ -67,7 +67,7 @@
 router.beforeEach((to, from, next) => {
   if (to.path === '/business/screen') {
     // window.open('http://localhost:8080/#/maturity')
-    window.open('http://106.14.20.42/screen/#/maturity')
+    window.open(process.env.VUE_APP_SCREENURL2)
     next({ name: from.name })
     return
   }
diff --git a/frontWuhu/src/utils/request.js b/frontWuhu/src/utils/request.js
index 0b411f9..c7d2098 100644
--- a/frontWuhu/src/utils/request.js
+++ b/frontWuhu/src/utils/request.js
@@ -3,6 +3,7 @@
 import pkg from '../../package'
 import { trim } from './util'
 import cache from '../plugins/cache'
+import { Message } from 'element-ui'
 
 axios.defaults.headers.common['Content-Type'] = 'application/json;charset=UTF-8'
 const axiosInstance = axios.create({
@@ -64,6 +65,7 @@
   }
   // 涓氬姟澶辫触
   if (!response.data.success) {
+    Message.error(response.data.message)
     return Promise.reject(response.data)
   }
   return response.data.data
diff --git a/frontWuhu/src/views/business/appHall.vue b/frontWuhu/src/views/business/appHall.vue
new file mode 100644
index 0000000..3e83f47
--- /dev/null
+++ b/frontWuhu/src/views/business/appHall.vue
@@ -0,0 +1,307 @@
+<template>
+    <div class="box">
+        <div class="box_head">
+            <div class="box_head_title">搴旂敤澶у巺</div>
+            <div class="box_head_info">鍙戝姏浼佷笟杩愯惀鈥滅爺浜т緵閿�鏈嶁�滃叧閿幆鑺傦紝姹囬泦澶氬浼樿川鏈嶅姟鍟嗭紝鎻愪緵绮鹃�夊簲鐢ㄤ笌鏈嶅姟</div>
+            <div class="box_head_search">
+                <div class="left">
+                    <div class="box_head_search_input">
+                        <input type="text" v-model="applicationInfo" placeholder="杈撳叆搴旂敤鍚嶇О/鏈嶅姟鍟嗗悕绉版悳绱�">
+                        <img src="../../assets/images/ic_clear@2x.png" v-if="applicationInfo" @click="clearText" />
+                    </div>
+                    <div class="box_head_search_btn" @click="search">鏌ヨ</div>
+                </div>
+            </div>
+        </div>
+        <div class="box_cate">
+            <div class="list" v-if="list.length > 0">
+                <div class="list_item" v-for="(item, index) in list" :key="index">
+                    <div class="list_item_image">
+                        <img :src="item.fullLog" alt="" />
+                    </div>
+                    <div class="list_item_title">{{item.name}}</div>
+                    <div class="list_item_cate" v-if="item.lables">
+                        <div class="list_item_cate_row" v-for="(child, i) in item.lablesList" :key="i">{{child}}</div>
+                    </div>
+                    <div class="list_item_company">鏈嶅姟鍟嗭細{{item.serverName}}</div>
+                    <div class="list_item_info">{{item.introduction}}</div>
+                    <div class="list_item_btn" @click="$refs.operaDetailsBWindow.open('搴旂敤璇︽儏', item.id)">鏌ョ湅璇︽儏</div>
+                </div>
+                <div class="list_zw"></div>
+                <div class="list_zw"></div>
+            </div>
+            <div class="list" v-else>
+                <div class="list_wu">鏃犳暟鎹�</div>
+            </div>
+            <div class="pagination">
+                <el-pagination
+                    v-if="list.length > 0"
+                    @current-change="handleCurrentChange"
+                    :current-page="page"
+                    :page-sizes="[12, 24, 36, 48]"
+                    :page-size="12"
+                    layout="total, prev, pager, next, jumper"
+                    :total="total">
+                </el-pagination>
+                <div class="pagination_info">Copyright 漏 2022 - 2023 鏅鸿兘鍒堕�犺瘖鏂患鍚堟湇鍔″钩鍙�. All Rights Reserved.  鐗堟潈鎵�鏈�</div>
+            </div>
+        </div>
+        <!--    璇︽儏    -->
+        <OperaDetailsBWindow ref="operaDetailsBWindow" @success="" />
+    </div>
+</template>
+
+<script>
+  import OperaDetailsBWindow from '@/components/business/OperaDetailsBWindow'
+  import { fetchList } from '@/api/business/applicationInfo'
+  export default {
+    name: 'serviceProviderResources',
+    components: { OperaDetailsBWindow },
+    data() {
+      return {
+        applicationInfo: '',
+        value: 3,
+        page: 1,
+        total: 0,
+        list: []
+      }
+    },
+    created () {
+      this.getList()
+    },
+    methods: {
+      search() {
+        this.page = 1
+        this.getList()
+      },
+      handleCurrentChange(e) {
+        this.page = e
+        this.getList()
+      },
+      clearText() {
+        this.applicationInfo = ''
+      },
+      getList() {
+        fetchList({
+          capacity: 12,
+          page: this.page,
+          model: {
+            applicationInfo: this.applicationInfo,
+            status: 0
+          }
+        }).then(res => {
+          res.records.forEach((item) => {
+            item.lablesList = item.lables.split(',') || []
+          })
+          this.list = res.records
+          this.total = res.total
+        })
+      }
+    }
+  }
+</script>
+
+<style lang="scss" scoped>
+    .box {
+        width: 100%;
+        .box_head {
+            width: 100%;
+            height: 264px;
+            padding: 36px 50px;
+            box-sizing: border-box;
+            background-image: url("../../assets/images/bg_yingyong.png");
+            background-repeat: no-repeat;
+            background-size: cover;
+            display: flex;
+            flex-direction: column;
+            .box_head_title {
+                font-weight: 600;
+                font-size: 40px;
+                color: #216EEE;
+            }
+            .box_head_info {
+                font-weight: 400;
+                font-size: 16px;
+                color: #333333;
+                margin-top: 14px;
+            }
+            .box_head_search {
+                width: 100%;
+                display: flex;
+                align-items: center;
+                justify-content: space-between;
+                margin-top: 36px;
+                .left {
+                    display: flex;
+                    align-items: center;
+                    .box_head_search_input {
+                        width: 360px;
+                        height: 48px;
+                        padding: 0 15px;
+                        box-sizing: border-box;
+                        background: rgba(255,255,255,0.72);
+                        border-radius: 2px;
+                        margin-right: 10px;
+                        display: flex;
+                        align-items: center;
+                        img {
+                            width: 20px;
+                            height: 20px;
+                            flex-shrink: 0;
+                            cursor: pointer;
+                        }
+                        input {
+                            flex: 1;
+                            height: 100%;
+                            margin-right: 15px;
+                            font-weight: 400;
+                            font-size: 14px;
+                            color: #222222;
+                            border: none;
+                            outline: none;
+                            background: rgba(0,0,0,0);
+                            &::-webkit-input-placeholder {
+                                color: #999999;
+                                font-size: 14px;
+                                font-weight: 400;
+                            }
+                        }
+                    }
+                    .box_head_search_btn {
+                        width: 68px;
+                        height: 48px;
+                        line-height: 48px;
+                        text-align: center;
+                        background: #216EEE;
+                        border-radius: 2px;
+                        font-weight: 600;
+                        font-size: 15px;
+                        color: #FFFFFF;
+                        cursor: pointer;
+                    }
+                }
+            }
+        }
+        .box_cate {
+            width: 100%;
+            padding: 0 20px;
+            box-sizing: border-box;
+            position: relative;
+            top: -30px;
+            left: 0;
+            z-index: 9;
+            .list {
+                width: 100%;
+                display: flex;
+                align-items: center;
+                flex-wrap: wrap;
+                justify-content: space-between;
+                .list_wu {
+                    width: 100%;
+                    text-align: center;
+                    margin: 50px 0;
+                    font-size: 14px;
+                    color: #666666;
+                }
+                .list_zw {
+                    width: 24%;
+                    height: 0;
+                }
+                .list_item {
+                    width: 24%;
+                    height: 317px;
+                    padding: 20px 30px;
+                    box-sizing: border-box;
+                    display: flex;
+                    flex-direction: column;
+                    align-items: center;
+                    justify-content: space-between;
+                    background: #FFFFFF;
+                    border-radius: 8px;
+                    margin-bottom: 1%;
+                    .list_item_btn {
+                        font-weight: 400;
+                        font-size: 14px;
+                        color: #FFFFFF;
+                        width: 96px;
+                        height: 36px;
+                        line-height: 36px;
+                        text-align: center;
+                        background: #216EEE;
+                        border-radius: 2px;
+                        cursor: pointer;
+                    }
+                    .list_item_image {
+                        width: 70px;
+                        height: 70px;
+                        display: flex;
+                        align-items: center;
+                        justify-content: center;
+                        overflow: hidden;
+                        img {
+                            width: 100%;
+                        }
+                    }
+                    .list_item_title {
+                        font-weight: 600;
+                        font-size: 18px;
+                        color: #222222;
+                    }
+                    .list_item_cate {
+                        width: 100%;
+                        display: flex;
+                        align-items: center;
+                        justify-content: center;
+                        .list_item_cate_row {
+                            padding: 5px 8px;
+                            box-sizing: border-box;
+                            background: rgba(33,110,238,0.1);
+                            border-radius: 2px;
+                            font-weight: 400;
+                            font-size: 12px;
+                            color: #216EEE;
+                            margin-right: 10px;
+                            &:last-child {
+                                margin-right: 0 !important;
+                            }
+                        }
+                    }
+                    .list_item_company {
+                        width: 100%;
+                        text-align: center;
+                        font-weight: 400;
+                        font-size: 12px;
+                        color: #666666;
+                    }
+                    .list_item_info {
+                        width: 100%;
+                        text-align: center;
+                        display: -webkit-box;
+                        -webkit-box-orient: vertical;
+                        -webkit-line-clamp: 2; /* 闄愬埗鏂囨湰涓�2琛� */
+                        overflow: hidden;
+                        font-weight: 400;
+                        font-size: 12px;
+                        color: #999999;
+                    }
+                }
+            }
+            .pagination {
+                width: 100%;
+                display: flex;
+                align-items: center;
+                flex-direction: column;
+                justify-content: center;
+                margin-top: 20px;
+                .pagination_info {
+                    width: 100%;
+                    text-align: center;
+                    font-weight: 400;
+                    font-size: 12px;
+                    color: #828D9E;
+                    margin-top: 30px;
+                }
+            }
+        }
+    }
+</style>
diff --git a/frontWuhu/src/views/business/applicationInfo.vue b/frontWuhu/src/views/business/applicationInfo.vue
index 93d8bf0..f5fc3c1 100644
--- a/frontWuhu/src/views/business/applicationInfo.vue
+++ b/frontWuhu/src/views/business/applicationInfo.vue
@@ -5,12 +5,11 @@
       <el-form-item label="搴旂敤鍚嶇О" prop="name">
         <el-input v-model="searchForm.name" placeholder="璇疯緭鍏ュ簲鐢ㄥ悕绉�" @keypress.enter.native="search"></el-input>
       </el-form-item>
-      <el-form-item label="鏈嶅姟鍟嗗悕绉�" prop="serverId">
-        <el-input v-model="searchForm.serverId" placeholder="璇疯緭鍏ユ湇鍔″晢鍚嶇О" @keypress.enter.native="search"></el-input>
+      <el-form-item label="鏈嶅姟鍟嗗悕绉�" prop="serverName">
+        <el-input v-model="searchForm.serverName" placeholder="璇疯緭鍏ユ湇鍔″晢鍚嶇О" @keypress.enter.native="search"></el-input>
       </el-form-item>
       <section>
         <el-button type="primary" @click="search">鎼滅储</el-button>
-        <el-button type="primary" :loading="isWorking.export" v-permissions="['business:applicationinfo:exportExcel']" @click="exportExcel">瀵煎嚭</el-button>
         <el-button @click="reset">閲嶇疆</el-button>
       </section>
     </el-form>
@@ -38,7 +37,11 @@
         <el-table-column prop="serverName" label="鏈嶅姟鍟�" min-width="100px"></el-table-column>
         <el-table-column prop="lables" label="鏍囩" min-width="100px"></el-table-column>
         <el-table-column prop="introduction" label="绠�浠�" min-width="100px"></el-table-column>
-        <el-table-column prop="details" label="璇︽儏" min-width="100px"></el-table-column>
+        <el-table-column prop="details" label="璇︽儏" min-width="100px">
+          <template slot-scope="{row}">
+            <el-button type="text" @click="$refs.protocol.open('璇︽儏', row.details || '<p></p>')">鐐瑰嚮鏌ョ湅</el-button>
+          </template>
+        </el-table-column>
         <el-table-column label="鐘舵��" min-width="100px">
           <template slot-scope="{row}">
             <el-switch
@@ -72,6 +75,7 @@
     </template>
     <!-- 鏂板缓/淇敼 -->
     <OperaApplicationInfoWindow ref="operaApplicationInfoWindow" @success="handlePageChange"/>
+    <Protocol ref="protocol"/>
   </TableLayout>
 </template>
 
@@ -81,28 +85,17 @@
 import Pagination from '@/components/common/Pagination'
 import OperaApplicationInfoWindow from '@/components/business/OperaApplicationInfoWindow'
 import { updateStatus } from '@/api/business/applicationInfo'
+import Protocol from "@/components/Protocol.vue";
 export default {
   name: 'ApplicationInfo',
   extends: BaseTable,
-  components: { TableLayout, Pagination, OperaApplicationInfoWindow },
+  components: { TableLayout, Pagination, OperaApplicationInfoWindow, Protocol },
   data () {
     return {
       // 鎼滅储
       searchForm: {
-        id: '',
-        creator: '',
-        createDate: '',
-        editor: '',
-        editDate: '',
-        isdeleted: '',
-        status: '',
-        remark: '',
-        serverId: '',
-        name: '',
-        logo: '',
-        lables: '',
-        introduction: '',
-        details: ''
+        serverName: '',
+        name: ''
       }
     }
   },
diff --git a/frontWuhu/src/views/business/demandRecord.vue b/frontWuhu/src/views/business/demandRecord.vue
index b987280..e6b762f 100644
--- a/frontWuhu/src/views/business/demandRecord.vue
+++ b/frontWuhu/src/views/business/demandRecord.vue
@@ -2,14 +2,22 @@
   <TableLayout :permissions="['business:demandrecord:query']">
     <!-- 鎼滅储琛ㄥ崟 -->
     <el-form ref="searchForm" slot="search-form" :model="searchForm" label-width="100px" inline>
-      <el-form-item label="搴旂敤鍚嶇О" prop="applicationId">
-        <el-input v-model="searchForm.applicationId" placeholder="璇疯緭鍏ュ簲鐢ㄥ悕绉�" @keypress.enter.native="search"></el-input>
+      <el-form-item label="搴旂敤鍚嶇О" prop="applicationName">
+        <el-input v-model="searchForm.applicationName" placeholder="璇疯緭鍏ュ簲鐢ㄥ悕绉�" @keypress.enter.native="search"></el-input>
       </el-form-item>
       <el-form-item label="闇�姹傛彁鍑鸿��" prop="linkName">
-        <el-input v-model="searchForm.linkName" placeholder="璇疯緭鍏ヨ仈绯讳汉濮撳悕" @keypress.enter.native="search"></el-input>
+        <el-input v-model="searchForm.linkName" placeholder="璇疯緭鍏ラ渶姹傛彁鍑鸿�呭鍚�" @keypress.enter.native="search"></el-input>
       </el-form-item>
       <el-form-item label="鎻愪氦鏃堕棿" prop="createDate">
-        <el-date-picker v-model="searchForm.createDate" value-format="yyyy-MM-dd" placeholder="璇烽�夋嫨鎻愪氦鏃堕棿" @change="search"/>
+          <el-date-picker
+              v-model="time"
+              type="daterange"
+              range-separator="鑷�"
+              @change="getTime"
+              value-format="yyyy-MM-dd"
+              start-placeholder="寮�濮嬫棩鏈�"
+              end-placeholder="缁撴潫鏃ユ湡">
+          </el-date-picker>
       </el-form-item>
       <section>
         <el-button type="primary" @click="search">鎼滅储</el-button>
@@ -27,23 +35,12 @@
         :data="tableData.list"
         stripe
       >
-        <el-table-column prop="applicationId" label="搴旂敤鍚嶇О" min-width="100px"></el-table-column>
-        <el-table-column prop="companyId" label="闇�姹備紒涓�" min-width="100px"></el-table-column>
+        <el-table-column prop="applicationName" label="搴旂敤鍚嶇О" min-width="100px"></el-table-column>
+        <el-table-column prop="companyName" label="闇�姹備紒涓�" min-width="100px"></el-table-column>
         <el-table-column prop="linkName" label="鑱旂郴浜哄鍚�" min-width="100px"></el-table-column>
         <el-table-column prop="linkPhone" label="鑱旂郴浜虹數璇�" min-width="100px"></el-table-column>
         <el-table-column prop="details" label="鎻忚堪" min-width="100px"></el-table-column>
         <el-table-column prop="createDate" label="鎻愪氦鏃堕棿" min-width="100px"></el-table-column>
-        <el-table-column
-          v-if="containPermissions(['business:demandrecord:update', 'business:demandrecord:delete'])"
-          label="鎿嶄綔"
-          min-width="120"
-          fixed="right"
-        >
-          <template slot-scope="{row}">
-            <el-button type="text" @click="$refs.operaDemandRecordWindow.open('缂栬緫闇�姹傝褰�', row)" icon="el-icon-edit" v-permissions="['business:demandrecord:update']">缂栬緫</el-button>
-            <el-button type="text" @click="deleteById(row)" icon="el-icon-delete" v-permissions="['business:demandrecord:delete']">鍒犻櫎</el-button>
-          </template>
-        </el-table-column>
       </el-table>
       <pagination
         @size-change="handleSizeChange"
@@ -70,20 +67,12 @@
     return {
       // 鎼滅储
       searchForm: {
-        id: '',
-        creator: '',
-        createDate: '',
-        editor: '',
-        editDate: '',
-        isdeleted: '',
-        status: '',
-        remark: '',
-        applicationId: '',
-        companyId: '',
+        applicationName: '',
         linkName: '',
-        linkPhone: '',
-        details: ''
-      }
+        startDate: '',
+        endDate: ''
+      },
+      time: []
     }
   },
   created () {
@@ -94,6 +83,18 @@
       'field.main': 'id'
     })
     this.search()
+  },
+  methods: {
+    getTime(e) {
+      if (e && e.length > 0) {
+        this.searchForm.startDate = e[0]
+        this.searchForm.endDate = e[1]
+      } else {
+        this.searchForm.startDate = ''
+        this.searchForm.endDate = ''
+      }
+      this.search()
+    }
   }
 }
 </script>
diff --git a/frontWuhu/src/views/business/serverProvider.vue b/frontWuhu/src/views/business/serverProvider.vue
index 6dbf31f..23643c5 100644
--- a/frontWuhu/src/views/business/serverProvider.vue
+++ b/frontWuhu/src/views/business/serverProvider.vue
@@ -17,7 +17,7 @@
       </el-form-item>
       <section>
         <el-button type="primary" @click="search">鎼滅储</el-button>
-        <el-button type="primary" :loading="isWorking.export" v-permissions="['business:serverprovider:exportExcel']" @click="exportExcel">瀵煎嚭</el-button>
+<!--        <el-button type="primary" :loading="isWorking.export" v-permissions="['business:serverprovider:exportExcel']" @click="exportExcel">瀵煎嚭</el-button>-->
         <el-button @click="reset">閲嶇疆</el-button>
       </section>
     </el-form>
diff --git a/frontWuhu/src/views/business/serviceProviderResources.vue b/frontWuhu/src/views/business/serviceProviderResources.vue
index 53d9c11..d371552 100644
--- a/frontWuhu/src/views/business/serviceProviderResources.vue
+++ b/frontWuhu/src/views/business/serviceProviderResources.vue
@@ -9,37 +9,43 @@
                         <input type="text" v-model="name" placeholder="杈撳叆鏈嶅姟鍟嗗悕绉版悳绱�">
                         <img src="../../assets/images/ic_clear@2x.png" v-if="name" @click="clearText" />
                     </div>
-                    <div class="box_head_search_btn">鏌ヨ</div>
+                    <div class="box_head_search_btn" @click="search">鏌ヨ</div>
                 </div>
                 <div class="right">
                     <img src="../../assets/images/ic_fuwushang@2x.png" alt="" />
-                    <span class="right_name">鏈嶅姟鍟嗘�绘暟锛�</span>
-                    <span class="right_num">220</span>
+                    <span class="right_name">鏈嶅姟鍟嗘�绘暟锛�<span class="right_num">{{total}}</span></span>
                 </div>
             </div>
         </div>
         <div class="box_cate">
             <div class="cate">
                 <div class="cate_label">琛屼笟鍒嗙被锛�</div>
-                <div class="cate_val">
-                    <div :class="index === 0 ? 'cate_val_row active' : 'cate_val_row'" v-for="(item, index) in cateList" :key="index">{{item}}</div>
+                <div class="cate_val" :style="{ height: open ? 'auto' : '30px' }">
+                    <div :class="cateId === item.id ? 'cate_val_row active' : 'cate_val_row'" v-for="(item, index) in cateList" :key="index" @click="select(item.id)">{{item.name}}</div>
                 </div>
-                <div class="cate_dwon">
-                    <span>灞曞紑</span>
-                    <i class="el-icon-arrow-down"></i>
+                <div class="cate_dwon" @click="open = !open">
+                    <template v-if="open">
+                        <span>鏀惰捣</span>
+                        <i class="el-icon-arrow-up"></i>
+                    </template>
+                    <template v-else>
+                        <span>灞曞紑</span>
+                        <i class="el-icon-arrow-down"></i>
+                    </template>
                 </div>
             </div>
-            <div class="list">
-                <div class="list_item" v-for="(item, index) in 6" :key="index" @click="$refs.operaDetailsAWindow.open('鏈嶅姟鍟嗚鎯�')">
+            <div class="list" v-if="list.length > 0">
+                <div class="list_item" v-for="(item, index) in list" :key="index" @click="$refs.operaDetailsAWindow.open('鏈嶅姟鍟嗚鎯�', item.id)">
                     <div class="list_item_image">
-                        <img src="../../assets/images/zhuce_ic_qiye@2x.png" alt="" />
+                        <img :src="item.fullLog" alt="" />
                     </div>
-                    <div class="list_item_title">瀹夊窘璞嗙背绉戞妧鏈夐檺鍏徃</div>
-                    <div class="list_item_info">瀹夊窘璞嗙背绉戞妧鏈夐檺鍏徃浠ヨ蒋浠跺紑鍙戙�佷汉宸ユ櫤鑳藉簲鐢ㄥ紑鍙戜负鏍稿績...</div>
+                    <div class="list_item_title">{{item.name}}</div>
+                    <div class="list_item_info">{{item.introduction}}</div>
                     <div class="list_item_divide">
                         <el-rate
-                            v-model="value"
+                            v-model="item.starLevel"
                             disabled
+                            :colors="['#FF934D','#FF934D','#FF934D']"
                             text-color="#ff9900">
                         </el-rate>
                     </div>
@@ -47,14 +53,18 @@
                 <div class="list_zw"></div>
                 <div class="list_zw"></div>
             </div>
+            <div class="list" v-else>
+                <div class="list_wu">鏃犳暟鎹�</div>
+            </div>
             <div class="pagination">
                 <el-pagination
+                    v-if="list.length > 0"
                     @current-change="handleCurrentChange"
-                    :current-page="currentPage"
-                    :page-sizes="[10, 20, 30, 40]"
-                    :page-size="10"
+                    :current-page="page"
+                    :page-sizes="[12, 24, 36, 48]"
+                    :page-size="12"
                     layout="total, prev, pager, next, jumper"
-                    :total="50">
+                    :total="total">
                 </el-pagination>
                 <div class="pagination_info">Copyright 漏 2022 - 2023 鏅鸿兘鍒堕�犺瘖鏂患鍚堟湇鍔″钩鍙�. All Rights Reserved.  鐗堟潈鎵�鏈�</div>
             </div>
@@ -66,25 +76,60 @@
 
 <script>
     import OperaDetailsAWindow from '@/components/business/OperaDetailsAWindow'
+    import { list } from '@/api/business/labels'
+    import { fetchList } from '@/api/business/serverProvider'
   export default {
     name: 'serviceProviderResources',
     components: { OperaDetailsAWindow },
     data() {
       return {
         name: '',
-        value: 5,
-        cateList: ['鍏ㄩ儴','鏂版潗鏂�','鍏朵粬','鏂板瀷骞虫澘鏄剧ず','鐢熺墿鍖昏嵂','椋熷搧鍔犲伐','鍐堕噾','姹借溅宸ヤ笟','杞诲伐绾虹粐','瑁呭鍒堕��','鍖栧伐','鐢靛瓙浜у搧鍙婅蒋浠�','鐢熶骇鎬ф湇鍔′笟','鑺傝兘鐜繚','瀹跺叿鍒堕�犺涓�']
+        value: 3,
+        page: 1,
+        cateId: '',
+        total: 0,
+        cateList: [],
+        list: [],
+        open: false
       }
+    },
+    created () {
+      this.getAll()
+      this.getList()
     },
     methods: {
       handleCurrentChange(e) {
-        console.log(e)
-      },
-      currentPage(e) {
-        console.log(e)
+        this.page = e
+        this.getList()
       },
       clearText() {
         this.name = ''
+      },
+      async getAll() {
+        this.cateList = await list({ type: 1, isdeleted: 0 })
+        this.cateList.unshift({ name: '鍏ㄩ儴', id: '' })
+      },
+      select(id) {
+        this.cateId = id
+        this.page = 1
+        this.getList()
+      },
+      search() {
+        this.page = 1
+        this.getList()
+      },
+      getList() {
+        fetchList({
+          capacity: 12,
+          page: this.page,
+          model: {
+            industryId: this.cateId,
+            name: this.name
+          }
+        }).then(res => {
+          this.list = res.records
+          this.total = res.total
+        })
       }
     }
   }
@@ -100,7 +145,7 @@
             box-sizing: border-box;
             background-image: url("../../assets/images/bg_fuwushang.png");
             background-repeat: no-repeat;
-            background-size: 100% 100%;
+            background-size: cover;
             display: flex;
             flex-direction: column;
             .box_head_title {
@@ -170,9 +215,7 @@
                     }
                 }
                 .right {
-                    width: 173px;
-                    height: 48px;
-                    padding: 0 15px;
+                    padding: 15px;
                     box-sizing: border-box;
                     background: #FFFFFF;
                     border-radius: 2px;
@@ -180,10 +223,13 @@
                     align-items: center;
                     justify-content: space-between;
                     img {
+                        flex-shrink: 0;
                         width: 16px;
                         height: 16px;
+                        margin-right: 6px;
                     }
                     .right_name {
+                        flex: 1;
                         font-weight: 400;
                         font-size: 15px;
                         color: #333333;
@@ -210,6 +256,13 @@
                 align-items: center;
                 flex-wrap: wrap;
                 justify-content: space-between;
+                .list_wu {
+                    width: 100%;
+                    text-align: center;
+                    margin: 50px 0;
+                    font-size: 14px;
+                    color: #666666;
+                }
                 .list_zw {
                     width: 24%;
                     height: 0;
@@ -225,6 +278,7 @@
                     justify-content: space-between;
                     background: #FFFFFF;
                     border-radius: 8px;
+                    cursor: pointer;
                     margin-bottom: 1%;
                     .list_item_image {
                         width: 70px;
@@ -244,6 +298,7 @@
                     }
                     .list_item_info {
                         width: 100%;
+                        text-align: center;
                         white-space: nowrap;
                         overflow: hidden;
                         text-overflow: ellipsis;
@@ -273,6 +328,7 @@
                     display: flex;
                     align-items: center;
                     flex-wrap: wrap;
+                    overflow: hidden;
                     .active {
                         background: #216EEE !important;
                         border-radius: 2px !important;
@@ -297,6 +353,9 @@
                         font-size: 12px;
                         color: #216EEE;
                     }
+                    .el-icon-arrow-up {
+                        color: #216EEE;
+                    }
                     .el-icon-arrow-down {
                         color: #216EEE;
                     }
diff --git a/frontWuhu/src/views/system/menu.vue b/frontWuhu/src/views/system/menu.vue
index b71fa84..d15254f 100644
--- a/frontWuhu/src/views/system/menu.vue
+++ b/frontWuhu/src/views/system/menu.vue
@@ -16,11 +16,11 @@
         row-key="id"
         stripe
         border
-        
+
         @selection-change="handleSelectionChange"
       >
         <el-table-column type="selection" width="55" align="center" fixed="left"></el-table-column>
-        <el-table-column prop="name" label="鑿滃崟鍚嶇О"  fixed="left" align="center" min-width="160px"></el-table-column>
+        <el-table-column prop="name" label="鑿滃崟鍚嶇О"  fixed="left" min-width="160px"></el-table-column>
         <el-table-column prop="icon" label="鍥炬爣" align="center" min-width="80px" class-name="table-column-icon">
           <template slot-scope="{row}">
             <i v-if="row.icon != null && row.icon !== ''" :class="{[row.icon]: true}"></i>

--
Gitblit v1.9.3