From d3ff748bc6b3452179f50d38ef251b4fee7ce266 Mon Sep 17 00:00:00 2001
From: MrShi <1878285526@qq.com>
Date: 星期一, 08 九月 2025 18:58:04 +0800
Subject: [PATCH] 改bug

---
 frontWuhu/src/api/business/applicationInfo.js                    |   36 +
 frontWuhu/package-lock.json                                      |  160 +++---
 frontWuhu/src/views/business/serverProvider.vue                  |  133 +++++
 frontWuhu/src/components/business/ProjectItem.vue                |    8 
 frontWuhu/src/api/business/labels.js                             |    5 
 frontWuhu/src/api/business/demandRecord.js                       |   26 +
 frontWuhu/src/views/business/serviceProviderResources.vue        |  323 ++++++++++++++
 frontWuhu/src/api/business/serverProvider.js                     |   38 +
 frontWuhu/src/assets/images/bg_fuwushang.png                     |    0 
 frontWuhu/src/views/business/applicationInfo.vue                 |  127 +++++
 frontWuhu/src/components/business/OperaDetailsAWindow.vue        |   83 +++
 frontWuhu/src/views/business/demandRecord.vue                    |   99 ++++
 frontWuhu/src/components/business/OperaServerProviderWindow.vue  |  128 +++++
 frontWuhu/.env.development                                       |    6 
 frontWuhu/src/components/business/OperaDemandRecordWindow.vue    |   81 +++
 frontWuhu/src/components/business/OperaApplicationInfoWindow.vue |  121 +++++
 frontWuhu/src/assets/images/ic_fuwushang@2x.png                  |    0 
 frontWuhu/src/assets/images/ic_clear@2x.png                      |    0 
 18 files changed, 1,284 insertions(+), 90 deletions(-)

diff --git a/frontWuhu/.env.development b/frontWuhu/.env.development
index b28c49a..5652e89 100644
--- a/frontWuhu/.env.development
+++ b/frontWuhu/.env.development
@@ -7,8 +7,8 @@
 # 姹熻悕鏈湴
 # VVUE_APP_API_BASE_URL='http://192.168.0.102:10031'
 
-# 鍒樼纾婃湰鍦�
-# VUE_APP_API_BASE_URL='http://192.168.0.18:10010'
+# 浠诲悍鏈湴
+VUE_APP_API_BASE_URL='http://192.168.1.54:10031'
 
 #鐒︽澗鏈湴
 # VUE_APP_API_BASE_URL='http://192.168.0.36:10011'
@@ -16,7 +16,7 @@
 
 # 娴嬭瘯鏈嶅姟 http://106.14.20.42/test_hfznzz
 
-VUE_APP_API_BASE_URL='http://106.14.20.42/test_hfznzz'
+# VUE_APP_API_BASE_URL='http://106.14.20.42/test_hfznzz'
 
 # VUE_APP_API_BASE_URL='http://106.14.20.42/hfznzzzd/'
 #
diff --git a/frontWuhu/package-lock.json b/frontWuhu/package-lock.json
index 607f062..f43798e 100644
--- a/frontWuhu/package-lock.json
+++ b/frontWuhu/package-lock.json
@@ -1869,6 +1869,63 @@
           "integrity": "sha1-/q7SVZc9LndVW4PbwIhRpsY1IPo=",
           "dev": true
         },
+        "ansi-styles": {
+          "version": "4.3.0",
+          "resolved": "https://registry.npmmirror.com/ansi-styles/-/ansi-styles-4.3.0.tgz",
+          "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==",
+          "dev": true,
+          "optional": true,
+          "requires": {
+            "color-convert": "^2.0.1"
+          }
+        },
+        "chalk": {
+          "version": "4.1.2",
+          "resolved": "https://registry.npmmirror.com/chalk/-/chalk-4.1.2.tgz",
+          "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==",
+          "dev": true,
+          "optional": true,
+          "requires": {
+            "ansi-styles": "^4.1.0",
+            "supports-color": "^7.1.0"
+          }
+        },
+        "color-convert": {
+          "version": "2.0.1",
+          "resolved": "https://registry.npmmirror.com/color-convert/-/color-convert-2.0.1.tgz",
+          "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==",
+          "dev": true,
+          "optional": true,
+          "requires": {
+            "color-name": "~1.1.4"
+          }
+        },
+        "color-name": {
+          "version": "1.1.4",
+          "resolved": "https://registry.npmmirror.com/color-name/-/color-name-1.1.4.tgz",
+          "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==",
+          "dev": true,
+          "optional": true
+        },
+        "has-flag": {
+          "version": "4.0.0",
+          "resolved": "https://registry.npmmirror.com/has-flag/-/has-flag-4.0.0.tgz",
+          "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==",
+          "dev": true,
+          "optional": true
+        },
+        "loader-utils": {
+          "version": "2.0.4",
+          "resolved": "https://registry.npmmirror.com/loader-utils/-/loader-utils-2.0.4.tgz",
+          "integrity": "sha512-xXqpXoINfFhgua9xiqD8fPFHgkoq1mmmpE92WlDbm9rNRd/EbRb+Gqf908T2DMfuHjjJlksiK2RbHVOdD/MqSw==",
+          "dev": true,
+          "optional": true,
+          "requires": {
+            "big.js": "^5.2.2",
+            "emojis-list": "^3.0.0",
+            "json5": "^2.1.2"
+          }
+        },
         "ssri": {
           "version": "8.0.1",
           "resolved": "https://registry.npm.taobao.org/ssri/download/ssri-8.0.1.tgz?cache=0&sync_timestamp=1617826515595&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fssri%2Fdownload%2Fssri-8.0.1.tgz",
@@ -1876,6 +1933,28 @@
           "dev": true,
           "requires": {
             "minipass": "^3.1.1"
+          }
+        },
+        "supports-color": {
+          "version": "7.2.0",
+          "resolved": "https://registry.npmmirror.com/supports-color/-/supports-color-7.2.0.tgz",
+          "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==",
+          "dev": true,
+          "optional": true,
+          "requires": {
+            "has-flag": "^4.0.0"
+          }
+        },
+        "vue-loader-v16": {
+          "version": "npm:vue-loader@16.8.3",
+          "resolved": "https://registry.npmmirror.com/vue-loader/-/vue-loader-16.8.3.tgz",
+          "integrity": "sha512-7vKN45IxsKxe5GcVCbc2qFU5aWzyiLrYJyUuMz4BQLKctCj/fmCa0w6fGiiQ2cLFetNcek1ppGJQDCup0c1hpA==",
+          "dev": true,
+          "optional": true,
+          "requires": {
+            "chalk": "^4.1.0",
+            "hash-sum": "^2.0.0",
+            "loader-utils": "^2.0.0"
           }
         }
       }
@@ -13448,87 +13527,6 @@
           "resolved": "https://registry.npm.taobao.org/hash-sum/download/hash-sum-1.0.2.tgz",
           "integrity": "sha1-M7QHd3VMZDJXPBIMw4CLvRDUfwQ=",
           "dev": true
-        }
-      }
-    },
-    "vue-loader-v16": {
-      "version": "npm:vue-loader@16.8.3",
-      "resolved": "https://registry.npmjs.org/vue-loader/-/vue-loader-16.8.3.tgz",
-      "integrity": "sha512-7vKN45IxsKxe5GcVCbc2qFU5aWzyiLrYJyUuMz4BQLKctCj/fmCa0w6fGiiQ2cLFetNcek1ppGJQDCup0c1hpA==",
-      "dev": true,
-      "optional": true,
-      "requires": {
-        "chalk": "^4.1.0",
-        "hash-sum": "^2.0.0",
-        "loader-utils": "^2.0.0"
-      },
-      "dependencies": {
-        "ansi-styles": {
-          "version": "4.3.0",
-          "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz",
-          "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==",
-          "dev": true,
-          "optional": true,
-          "requires": {
-            "color-convert": "^2.0.1"
-          }
-        },
-        "chalk": {
-          "version": "4.1.2",
-          "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz",
-          "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==",
-          "dev": true,
-          "optional": true,
-          "requires": {
-            "ansi-styles": "^4.1.0",
-            "supports-color": "^7.1.0"
-          }
-        },
-        "color-convert": {
-          "version": "2.0.1",
-          "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz",
-          "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==",
-          "dev": true,
-          "optional": true,
-          "requires": {
-            "color-name": "~1.1.4"
-          }
-        },
-        "color-name": {
-          "version": "1.1.4",
-          "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz",
-          "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==",
-          "dev": true,
-          "optional": true
-        },
-        "has-flag": {
-          "version": "4.0.0",
-          "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz",
-          "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==",
-          "dev": true,
-          "optional": true
-        },
-        "loader-utils": {
-          "version": "2.0.4",
-          "resolved": "https://registry.npmjs.org/loader-utils/-/loader-utils-2.0.4.tgz",
-          "integrity": "sha512-xXqpXoINfFhgua9xiqD8fPFHgkoq1mmmpE92WlDbm9rNRd/EbRb+Gqf908T2DMfuHjjJlksiK2RbHVOdD/MqSw==",
-          "dev": true,
-          "optional": true,
-          "requires": {
-            "big.js": "^5.2.2",
-            "emojis-list": "^3.0.0",
-            "json5": "^2.1.2"
-          }
-        },
-        "supports-color": {
-          "version": "7.2.0",
-          "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz",
-          "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==",
-          "dev": true,
-          "optional": true,
-          "requires": {
-            "has-flag": "^4.0.0"
-          }
         }
       }
     },
diff --git a/frontWuhu/src/api/business/applicationInfo.js b/frontWuhu/src/api/business/applicationInfo.js
new file mode 100644
index 0000000..27153ce
--- /dev/null
+++ b/frontWuhu/src/api/business/applicationInfo.js
@@ -0,0 +1,36 @@
+import request from '../../utils/request'
+
+// 鏌ヨ
+export function fetchList (data) {
+  return request.post('/business/applicationInfo/page', data, {
+    trim: true
+  })
+}
+
+// 瀵煎嚭Excel
+export function exportExcel (data) {
+  return request.post('/business/applicationInfo/exportExcel', data, {
+    trim: true,
+    download: true
+  })
+}
+
+// 鍒涘缓
+export function create (data) {
+  return request.post('/business/applicationInfo/create', data)
+}
+
+// 淇敼
+export function updateById (data) {
+  return request.post('/business/applicationInfo/updateById', data)
+}
+
+// 淇敼鐘舵��
+export function updateStatus (data) {
+  return request.post('/business/applicationInfo/updateStatus', data)
+}
+
+// 鍒犻櫎
+export function deleteById (id) {
+  return request.get(`/business/applicationInfo/delete/${id}`)
+}
diff --git a/frontWuhu/src/api/business/demandRecord.js b/frontWuhu/src/api/business/demandRecord.js
new file mode 100644
index 0000000..4312108
--- /dev/null
+++ b/frontWuhu/src/api/business/demandRecord.js
@@ -0,0 +1,26 @@
+import request from '../../utils/request'
+
+// 鏌ヨ
+export function fetchList (data) {
+  return request.post('/business/demandRecord/page', data, {
+    trim: true
+  })
+}
+
+// 瀵煎嚭Excel
+export function exportExcel (data) {
+  return request.post('/business/demandRecord/exportExcel', data, {
+    trim: true,
+    download: true
+  })
+}
+
+// 鍒涘缓
+export function create (data) {
+  return request.post('/business/demandRecord/create', data)
+}
+
+// 淇敼
+export function updateById (data) {
+  return request.post('/business/demandRecord/updateById', data)
+}
diff --git a/frontWuhu/src/api/business/labels.js b/frontWuhu/src/api/business/labels.js
index 1530b25..8f799ed 100644
--- a/frontWuhu/src/api/business/labels.js
+++ b/frontWuhu/src/api/business/labels.js
@@ -17,6 +17,11 @@
   return request.post('/business/labels/updateById', data)
 }
 
+// 鍒楄〃鏌ヨ
+export function list (data) {
+  return request.post('/business/labels/list', data)
+}
+
 // 鍒犻櫎
 export function deleteById (id) {
   return request.get(`/business/labels/delete/${id}`)
diff --git a/frontWuhu/src/api/business/serverProvider.js b/frontWuhu/src/api/business/serverProvider.js
new file mode 100644
index 0000000..3198732
--- /dev/null
+++ b/frontWuhu/src/api/business/serverProvider.js
@@ -0,0 +1,38 @@
+import request from '../../utils/request'
+
+// 鏌ヨ
+export function fetchList (data) {
+  return request.post('/business/serverProvider/page', data, {
+    trim: true
+  })
+}
+
+// 瀵煎嚭Excel
+export function exportExcel (data) {
+  return request.post('/business/serverProvider/exportExcel', data, {
+    trim: true,
+    download: true
+  })
+}
+
+// 鍒涘缓
+export function create (data) {
+  return request.post('/business/serverProvider/create', data)
+}
+
+// 淇敼
+export function updateById (data) {
+  return request.post('/business/serverProvider/updateById', data)
+}
+
+// 淇敼鐘舵��
+export function updateStatus (data) {
+  return request.post('/business/serverProvider/updateStatus', data)
+}
+
+// 鍒犻櫎
+export function deleteById (id) {
+  return request.get(`/business/serverProvider/delete/${id}`)
+}
+
+
diff --git a/frontWuhu/src/assets/images/bg_fuwushang.png b/frontWuhu/src/assets/images/bg_fuwushang.png
new file mode 100644
index 0000000..51363ec
--- /dev/null
+++ b/frontWuhu/src/assets/images/bg_fuwushang.png
Binary files differ
diff --git a/frontWuhu/src/assets/images/ic_clear@2x.png b/frontWuhu/src/assets/images/ic_clear@2x.png
new file mode 100644
index 0000000..9550b3e
--- /dev/null
+++ b/frontWuhu/src/assets/images/ic_clear@2x.png
Binary files differ
diff --git a/frontWuhu/src/assets/images/ic_fuwushang@2x.png b/frontWuhu/src/assets/images/ic_fuwushang@2x.png
new file mode 100644
index 0000000..4b05b08
--- /dev/null
+++ b/frontWuhu/src/assets/images/ic_fuwushang@2x.png
Binary files differ
diff --git a/frontWuhu/src/components/business/OperaApplicationInfoWindow.vue b/frontWuhu/src/components/business/OperaApplicationInfoWindow.vue
new file mode 100644
index 0000000..9457ead
--- /dev/null
+++ b/frontWuhu/src/components/business/OperaApplicationInfoWindow.vue
@@ -0,0 +1,121 @@
+<template>
+  <GlobalWindow
+    :title="title"
+    :visible.sync="visible"
+    :confirm-working="isWorking"
+    @confirm="confirm"
+  >
+    <el-form :model="form" ref="form" :rules="rules">
+      <el-form-item label="搴旂敤鍚嶇О" prop="name">
+        <el-input v-model="form.name" placeholder="璇疯緭鍏ュ簲鐢ㄥ悕绉�" v-trim/>
+      </el-form-item>
+      <el-form-item label="搴旂敤LOGO" prop="logo">
+        <UploadAvatarImage :uploadData="uploadData" :file="file" @uploadSuccess="getFiles" />
+      </el-form-item>
+      <el-form-item label="鏈嶅姟鍟�" prop="serverId">
+        <el-select v-model="form.serverId" placeholder="璇烽�夋嫨">
+          <el-option
+            v-for="item in server"
+            :key="item.id"
+            :label="item.name"
+            :value="item.id">
+          </el-option>
+        </el-select>
+      </el-form-item>
+      <el-form-item label="搴旂敤鏍囩" prop="lables">
+        <el-input v-model="form.lables" placeholder="璇疯緭鍏ュ簲鐢ㄦ爣绛撅紙澶氫釜浠ヨ嫳鏂�,鍒嗗壊锛�" v-trim/>
+      </el-form-item>
+      <el-form-item label="搴旂敤绠�浠�" prop="introduction">
+        <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/>
+      </el-form-item>
+    </el-form>
+  </GlobalWindow>
+</template>
+
+<script>
+import BaseOpera from '@/components/base/BaseOpera'
+import GlobalWindow from '@/components/common/GlobalWindow'
+import UploadAvatarImage from '@/components/common/UploadAvatarImage'
+import { fetchList } from '@/api/business/serverProvider'
+export default {
+  name: 'OperaApplicationInfoWindow',
+  extends: BaseOpera,
+  components: { GlobalWindow, UploadAvatarImage },
+  data () {
+    return {
+      // 琛ㄥ崟鏁版嵁
+      form: {
+        id: null,
+        serverId: '',
+        name: '',
+        logo: '',
+        lables: '',
+        introduction: '',
+        details: ''
+      },
+      // 楠岃瘉瑙勫垯
+      rules: {
+        name: [
+          { required: true, message: '璇疯緭鍏�', trigger: 'blur' }
+        ],
+        logo: [
+          { required: true, message: '璇蜂笂浼�', trigger: 'blur' }
+        ],
+        serverId: [
+          { required: true, message: '璇烽�夋嫨', trigger: 'blur' }
+        ],
+      },
+      server: [],
+      uploadData: {
+        folder: 'znzz/logo_file',
+        type: 'image'
+      },
+      file: {
+        imgurl: '',
+        imgurlfull: ''
+      },
+    }
+  },
+  created () {
+    this.config({
+      api: '/business/applicationInfo',
+      'field.id': 'id'
+    })
+  },
+  methods: {
+    open (title, target) {
+      this.title = title
+      this.getFetchList()
+      this.visible = true
+      // 鏂板缓
+      if (target == null) {
+        this.$nextTick(() => {
+          this.$refs.form.resetFields()
+          this.form[this.configData['field.id']] = null
+        })
+        return
+      }
+      // 缂栬緫
+      this.$nextTick(() => {
+        for (const key in this.form) {
+          this.form[key] = target[key]
+        }
+        this.file.imgurl = target.logo
+        this.file.imgurlfull = target.fullLog
+      })
+    },
+    getFiles(e) {
+      this.file.imgurl = e.imgurl
+      this.file.imgurlfull = e.imgurlfull
+      this.form.logo = e.imgurl
+    },
+    async getFetchList() {
+      let res = await fetchList({ capacity: 9999, page: 1, model: { status: 0 } })
+      this.server = res.records
+    }
+  }
+}
+</script>
diff --git a/frontWuhu/src/components/business/OperaDemandRecordWindow.vue b/frontWuhu/src/components/business/OperaDemandRecordWindow.vue
new file mode 100644
index 0000000..06f8454
--- /dev/null
+++ b/frontWuhu/src/components/business/OperaDemandRecordWindow.vue
@@ -0,0 +1,81 @@
+<template>
+  <GlobalWindow
+    :title="title"
+    :visible.sync="visible"
+    :confirm-working="isWorking"
+    @confirm="confirm"
+  >
+    <el-form :model="form" ref="form" :rules="rules">
+      <el-form-item label="搴旂敤鍚嶇О" prop="applicationId">
+        <el-select v-model="form.applicationId" placeholder="璇烽�夋嫨">
+          <el-option
+            v-for="item in application"
+            :key="item.id"
+            :label="item.name"
+            :value="item.id">
+          </el-option>
+        </el-select>
+      </el-form-item>
+      <el-form-item label="闇�姹備紒涓�" prop="companyId">
+        <el-select v-model="form.companyId" placeholder="璇烽�夋嫨">
+          <el-option
+            v-for="item in company"
+            :key="item.id"
+            :label="item.name"
+            :value="item.id">
+          </el-option>
+        </el-select>
+      </el-form-item>
+      <el-form-item label="鑱旂郴浜哄鍚�" prop="linkName">
+        <el-input v-model="form.linkName" placeholder="璇疯緭鍏ヨ仈绯讳汉濮撳悕" v-trim/>
+      </el-form-item>
+      <el-form-item label="鑱旂郴浜虹數璇�" prop="linkPhone">
+        <el-input v-model="form.linkPhone" maxlength="11" placeholder="璇疯緭鍏ヨ仈绯讳汉鐢佃瘽" v-trim/>
+      </el-form-item>
+      <el-form-item label="闇�姹傝鏄�" prop="details">
+        <el-input type="textarea" :autosize="{ minRows: 12, maxRows: 6 }" v-model="form.details" placeholder="璇疯緭鍏ラ渶姹傝鏄�" v-trim/>
+      </el-form-item>
+    </el-form>
+  </GlobalWindow>
+</template>
+
+<script>
+import BaseOpera from '@/components/base/BaseOpera'
+import GlobalWindow from '@/components/common/GlobalWindow'
+export default {
+  name: 'OperaDemandRecordWindow',
+  extends: BaseOpera,
+  components: { GlobalWindow },
+  data () {
+    return {
+      // 琛ㄥ崟鏁版嵁
+      form: {
+        id: null,
+        creator: '',
+        createDate: '',
+        editor: '',
+        editDate: '',
+        isdeleted: '',
+        status: '',
+        remark: '',
+        applicationId: '',
+        companyId: '',
+        linkName: '',
+        linkPhone: '',
+        details: ''
+      },
+      // 楠岃瘉瑙勫垯
+      rules: {
+      },
+      application: [],
+      company: []
+    }
+  },
+  created () {
+    this.config({
+      api: '/business/demandRecord',
+      'field.id': 'id'
+    })
+  }
+}
+</script>
diff --git a/frontWuhu/src/components/business/OperaDetailsAWindow.vue b/frontWuhu/src/components/business/OperaDetailsAWindow.vue
new file mode 100644
index 0000000..ba99539
--- /dev/null
+++ b/frontWuhu/src/components/business/OperaDetailsAWindow.vue
@@ -0,0 +1,83 @@
+<template>
+  <GlobalWindow
+    :title="title"
+    :visible.sync="visible"
+    :confirm-working="isWorking"
+    @confirm="confirm"
+  >
+    <div class="com">
+      <div class="com_image">
+        <img src="../../assets/images/zhuce_ic_qiye@2x.png" />
+      </div>
+      <div class="com_info">
+        <div class="com_info_title">澶у攼铻嶅悎鐗╄仈绉戞妧鏃犻敗鏈夐檺鍏徃</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>
+        </div>
+      </div>
+    </div>
+  </GlobalWindow>
+</template>
+
+<script>
+import BaseOpera from '@/components/base/BaseOpera'
+import GlobalWindow from '@/components/common/GlobalWindow'
+export default {
+  name: 'OperaDemandRecordWindow',
+  extends: BaseOpera,
+  components: { GlobalWindow },
+  data () {
+    return {
+      form: {}
+    }
+  },
+  created () {
+    this.config({
+      api: '/business/demandRecord',
+      'field.id': 'id'
+    })
+  }
+}
+</script>
+
+<style lang="scss" scoped>
+  .com {
+    width: 100%;
+    display: flex;
+    .com_image {
+      width: 140px;
+      height: 140px;
+      flex-shrink: 0;
+      background: #F4F7FC;
+      margin-right: 30px;
+    }
+    .com_info {
+      flex: 1;
+      display: flex;
+      flex-direction: column;
+      .com_info_title {
+        font-weight: 600;
+        font-size: 26px;
+        color: #222222;
+      }
+      .com_info_list {
+        display: flex;
+        flex-direction: column;
+        .com_info_list_item {
+          width: 100%;
+          display: flex;
+          align-items: center;
+          .com_info_list_item_label {
+
+          }
+          .com_info_list_item_val {
+            
+          }
+        }
+      }
+    }
+  }
+</style>
diff --git a/frontWuhu/src/components/business/OperaServerProviderWindow.vue b/frontWuhu/src/components/business/OperaServerProviderWindow.vue
new file mode 100644
index 0000000..7576be2
--- /dev/null
+++ b/frontWuhu/src/components/business/OperaServerProviderWindow.vue
@@ -0,0 +1,128 @@
+<template>
+  <GlobalWindow
+    :title="title"
+    :visible.sync="visible"
+    :confirm-working="isWorking"
+    @confirm="confirm"
+  >
+    <el-form :model="form" ref="form" :rules="rules">
+      <el-form-item label="鏈嶅姟鍟嗗悕绉�" prop="name">
+        <el-input v-model="form.name" placeholder="璇疯緭鍏ユ湇鍔″晢鍚嶇О" v-trim/>
+      </el-form-item>
+      <el-form-item label="LOGO鍥剧墖" prop="logo">
+        <UploadAvatarImage :uploadData="uploadData" :file="file" @uploadSuccess="getFiles" />
+      </el-form-item>
+      <el-form-item label="鎵�灞炶涓�" prop="industryId">
+        <el-select v-model="form.industryId" placeholder="璇烽�夋嫨">
+          <el-option
+            v-for="item in industry"
+            :key="item.id"
+            :label="item.name"
+            :value="item.id">
+          </el-option>
+        </el-select>
+      </el-form-item>
+      <el-form-item label="鏈嶅姟鏄熺骇" prop="starLevel">
+        <el-select v-model="form.starLevel" placeholder="璇烽�夋嫨">
+          <el-option
+            v-for="item in 5"
+            :key="item"
+            :label="item + '绾�'"
+            :value="item">
+          </el-option>
+        </el-select>
+      </el-form-item>
+      <el-form-item label="鑱旂郴浜哄鍚�" prop="linkName">
+        <el-input v-model="form.linkName" placeholder="璇疯緭鍏ヨ仈绯讳汉濮撳悕" v-trim/>
+      </el-form-item>
+      <el-form-item label="鑱旂郴浜虹數璇�" prop="linkPhone">
+        <el-input v-model="form.linkPhone" maxlength="11" placeholder="璇疯緭鍏ヨ仈绯讳汉鐢佃瘽" v-trim/>
+      </el-form-item>
+      <el-form-item label="绠�浠�" prop="introduction">
+        <el-input type="textarea" :autosize="{ minRows: 12, maxRows: 6 }" v-model="form.introduction" placeholder="璇疯緭鍏ョ畝浠�" v-trim/>
+      </el-form-item>
+    </el-form>
+  </GlobalWindow>
+</template>
+
+<script>
+import BaseOpera from '@/components/base/BaseOpera'
+import GlobalWindow from '@/components/common/GlobalWindow'
+import UploadAvatarImage from '@/components/common/UploadAvatarImage'
+import { list } from '@/api/business/labels'
+export default {
+  name: 'OperaServerProviderWindow',
+  extends: BaseOpera,
+  components: { GlobalWindow, UploadAvatarImage },
+  data () {
+    return {
+      // 琛ㄥ崟鏁版嵁
+      form: {
+        id: null,
+        name: '',
+        logo: '',
+        industryId: '',
+        starLevel: '',
+        linkName: '',
+        linkPhone: '',
+        introduction: ''
+      },
+      file: {
+        imgurl: '',
+        imgurlfull: ''
+      },
+      // 楠岃瘉瑙勫垯
+      rules: {
+        name: [
+          { required: true, message: '璇疯緭鍏�', trigger: 'blur' }
+        ],
+        logo: [
+          { required: true, message: '璇蜂笂浼�', trigger: 'blur' }
+        ]
+      },
+      uploadData: {
+        folder: 'znzz/logo_file',
+        type: 'image'
+      },
+      industry: []
+    }
+  },
+  created () {
+    this.config({
+      api: '/business/serverProvider',
+      'field.id': 'id'
+    })
+  },
+  methods: {
+    getFiles(e) {
+      this.file.imgurl = e.imgurl
+      this.file.imgurlfull = e.imgurlfull
+      this.form.logo = e.imgurl
+    },
+    open (title, target) {
+      this.title = title
+      this.getAll()
+      this.visible = true
+      // 鏂板缓
+      if (target == null) {
+        this.$nextTick(() => {
+          this.$refs.form.resetFields()
+          this.form[this.configData['field.id']] = null
+        })
+        return
+      }
+      // 缂栬緫
+      this.$nextTick(() => {
+        for (const key in this.form) {
+          this.form[key] = target[key]
+        }
+        this.file.imgurlfull = target.fullLog
+        this.file.imgurl = target.logo
+      })
+    },
+    async getAll() {
+      this.industry = await list({ type: 1, isdeleted: 0 })
+    }
+  }
+}
+</script>
diff --git a/frontWuhu/src/components/business/ProjectItem.vue b/frontWuhu/src/components/business/ProjectItem.vue
index e6b161c..6a4f1db 100644
--- a/frontWuhu/src/components/business/ProjectItem.vue
+++ b/frontWuhu/src/components/business/ProjectItem.vue
@@ -86,13 +86,9 @@
   methods: {
     // 璺宠浆澶у睆
     jumpDP() {
-<<<<<<< .mine
-      window.open(`http://106.14.20.42/screen/#/zhfw/declaration?projectId=${this.id}`)
-||||||| .r53257
-      window.open(`${process.env.VUE_APP_SCREENURL1}?projectId=${this.id}`)
-=======
+      // window.open(`http://106.14.20.42/screen/#/zhfw/declaration?projectId=${this.id}`)
+      // window.open(`${process.env.VUE_APP_SCREENURL1}?projectId=${this.id}`)
       window.open(`${process.env.VUE_APP_SCREENURL1}?projectId=${this.id}&title=${this.projectName}`)
->>>>>>> .r53404
     },
     // 灞曠ず浼佷笟&
     showCompany() {
diff --git a/frontWuhu/src/views/business/applicationInfo.vue b/frontWuhu/src/views/business/applicationInfo.vue
new file mode 100644
index 0000000..93d8bf0
--- /dev/null
+++ b/frontWuhu/src/views/business/applicationInfo.vue
@@ -0,0 +1,127 @@
+<template>
+  <TableLayout :permissions="['business:applicationinfo:query']">
+    <!-- 鎼滅储琛ㄥ崟 -->
+    <el-form ref="searchForm" slot="search-form" :model="searchForm" label-width="100px" inline>
+      <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>
+      <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>
+    <!-- 琛ㄦ牸鍜屽垎椤� -->
+    <template v-slot:table-wrap>
+      <ul class="toolbar" v-permissions="['business:applicationinfo:create']">
+        <li><el-button type="primary" @click="$refs.operaApplicationInfoWindow.open('鏂板缓搴旂敤绠$悊')" icon="el-icon-plus" v-permissions="['business:applicationinfo:create']">鏂板缓</el-button></li>
+      </ul>
+      <el-table
+        v-loading="isWorking.search"
+        :data="tableData.list"
+        stripe
+      >
+        <el-table-column prop="name" label="鍚嶇О" min-width="100px"></el-table-column>
+        <el-table-column label="LOGO" min-width="120px">
+          <template slot-scope="{row}">
+            <el-image
+              v-if="row.fullLog"
+              style="width: 100px; height: 100px"
+              :src="row.fullLog"
+              :preview-src-list="[row.fullLog]">
+            </el-image>
+          </template>
+        </el-table-column>
+        <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 label="鐘舵��" min-width="100px">
+          <template slot-scope="{row}">
+            <el-switch
+              v-model="row.status"
+              @change="changeStatus($event, row.id)"
+              active-color="#13ce66"
+              inactive-color="#ff4949"
+              :active-value="0"
+              :inactive-value="1">
+            </el-switch>
+          </template>
+        </el-table-column>
+        <el-table-column
+          v-if="containPermissions(['business:applicationinfo:update', 'business:applicationinfo:delete'])"
+          label="鎿嶄綔"
+          min-width="120"
+          fixed="right"
+        >
+          <template slot-scope="{row}">
+            <el-button type="text" @click="$refs.operaApplicationInfoWindow.open('缂栬緫搴旂敤绠$悊', row)" icon="el-icon-edit" v-permissions="['business:applicationinfo:update']">缂栬緫</el-button>
+            <el-button type="text" @click="deleteById(row)" icon="el-icon-delete" v-permissions="['business:applicationinfo:delete']">鍒犻櫎</el-button>
+          </template>
+        </el-table-column>
+      </el-table>
+      <pagination
+        @size-change="handleSizeChange"
+        @current-change="handlePageChange"
+        :pagination="tableData.pagination"
+      >
+      </pagination>
+    </template>
+    <!-- 鏂板缓/淇敼 -->
+    <OperaApplicationInfoWindow ref="operaApplicationInfoWindow" @success="handlePageChange"/>
+  </TableLayout>
+</template>
+
+<script>
+import BaseTable from '@/components/base/BaseTable'
+import TableLayout from '@/layouts/TableLayout'
+import Pagination from '@/components/common/Pagination'
+import OperaApplicationInfoWindow from '@/components/business/OperaApplicationInfoWindow'
+import { updateStatus } from '@/api/business/applicationInfo'
+export default {
+  name: 'ApplicationInfo',
+  extends: BaseTable,
+  components: { TableLayout, Pagination, OperaApplicationInfoWindow },
+  data () {
+    return {
+      // 鎼滅储
+      searchForm: {
+        id: '',
+        creator: '',
+        createDate: '',
+        editor: '',
+        editDate: '',
+        isdeleted: '',
+        status: '',
+        remark: '',
+        serverId: '',
+        name: '',
+        logo: '',
+        lables: '',
+        introduction: '',
+        details: ''
+      }
+    }
+  },
+  created () {
+    this.config({
+      module: '搴旂敤绠$悊',
+      api: '/business/applicationInfo',
+      'field.id': 'id',
+      'field.main': 'id'
+    })
+    this.search()
+  },
+  methods: {
+    changeStatus(status, id) {
+      updateStatus({ id, status })
+        .then(res => {
+          this.search()
+        })
+    }
+  }
+}
+</script>
diff --git a/frontWuhu/src/views/business/demandRecord.vue b/frontWuhu/src/views/business/demandRecord.vue
new file mode 100644
index 0000000..b987280
--- /dev/null
+++ b/frontWuhu/src/views/business/demandRecord.vue
@@ -0,0 +1,99 @@
+<template>
+  <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>
+      <el-form-item label="闇�姹傛彁鍑鸿��" prop="linkName">
+        <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-form-item>
+      <section>
+        <el-button type="primary" @click="search">鎼滅储</el-button>
+        <el-button type="primary" :loading="isWorking.export" v-permissions="['business:demandrecord:exportExcel']" @click="exportExcel">瀵煎嚭</el-button>
+        <el-button @click="reset">閲嶇疆</el-button>
+      </section>
+    </el-form>
+    <!-- 琛ㄦ牸鍜屽垎椤� -->
+    <template v-slot:table-wrap>
+<!--      <ul class="toolbar" v-permissions="['business:demandrecord:create']">-->
+<!--        <li><el-button type="primary" @click="$refs.operaDemandRecordWindow.open('鏂板缓闇�姹傝褰�')" icon="el-icon-plus" v-permissions="['business:demandrecord:create']">鏂板缓</el-button></li>-->
+<!--      </ul>-->
+      <el-table
+        v-loading="isWorking.search"
+        :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="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"
+        @current-change="handlePageChange"
+        :pagination="tableData.pagination"
+      >
+      </pagination>
+    </template>
+    <!-- 鏂板缓/淇敼 -->
+    <OperaDemandRecordWindow ref="operaDemandRecordWindow" @success="handlePageChange"/>
+  </TableLayout>
+</template>
+
+<script>
+import BaseTable from '@/components/base/BaseTable'
+import TableLayout from '@/layouts/TableLayout'
+import Pagination from '@/components/common/Pagination'
+import OperaDemandRecordWindow from '@/components/business/OperaDemandRecordWindow'
+export default {
+  name: 'DemandRecord',
+  extends: BaseTable,
+  components: { TableLayout, Pagination, OperaDemandRecordWindow },
+  data () {
+    return {
+      // 鎼滅储
+      searchForm: {
+        id: '',
+        creator: '',
+        createDate: '',
+        editor: '',
+        editDate: '',
+        isdeleted: '',
+        status: '',
+        remark: '',
+        applicationId: '',
+        companyId: '',
+        linkName: '',
+        linkPhone: '',
+        details: ''
+      }
+    }
+  },
+  created () {
+    this.config({
+      module: '闇�姹傝褰�',
+      api: '/business/demandRecord',
+      'field.id': 'id',
+      'field.main': 'id'
+    })
+    this.search()
+  }
+}
+</script>
diff --git a/frontWuhu/src/views/business/serverProvider.vue b/frontWuhu/src/views/business/serverProvider.vue
new file mode 100644
index 0000000..6dbf31f
--- /dev/null
+++ b/frontWuhu/src/views/business/serverProvider.vue
@@ -0,0 +1,133 @@
+<template>
+  <TableLayout :permissions="['business:serverprovider:query']">
+    <!-- 鎼滅储琛ㄥ崟 -->
+    <el-form ref="searchForm" slot="search-form" :model="searchForm" label-width="100px" inline>
+      <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="industryId">
+        <el-select v-model="searchForm.industryId" placeholder="璇烽�夋嫨">
+          <el-option
+            v-for="item in industry"
+            :key="item.id"
+            :label="item.name"
+            :value="item.id">
+          </el-option>
+        </el-select>
+      </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 @click="reset">閲嶇疆</el-button>
+      </section>
+    </el-form>
+    <!-- 琛ㄦ牸鍜屽垎椤� -->
+    <template v-slot:table-wrap>
+      <ul class="toolbar" v-permissions="['business:serverprovider:create']">
+        <li><el-button type="primary" @click="$refs.operaServerProviderWindow.open('鏂板缓鏈嶅姟鍟嗕俊鎭�')" icon="el-icon-plus" v-permissions="['business:serverprovider:create']">鏂板缓</el-button></li>
+      </ul>
+      <el-table
+        v-loading="isWorking.search"
+        :data="tableData.list"
+        stripe
+      >
+        <el-table-column prop="name" label="鏈嶅姟鍟嗗悕绉�" min-width="100px"></el-table-column>
+        <el-table-column label="LOGO" min-width="120px">
+          <template slot-scope="{row}">
+            <el-image
+              v-if="row.fullLog"
+              style="width: 100px; height: 100px"
+              :src="row.fullLog"
+              :preview-src-list="[row.fullLog]">
+            </el-image>
+          </template>
+        </el-table-column>
+        <el-table-column prop="industryName" label="鎵�灞炶涓�" min-width="100px"></el-table-column>
+        <el-table-column label="鏈嶅姟鏄熺骇" min-width="100px">
+          <template slot-scope="{row}">
+            {{row.starLevel}}绾�
+          </template>
+        </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="introduction" label="绠�浠�" min-width="100px"></el-table-column>
+        <el-table-column label="鐘舵��" min-width="100px">
+          <template slot-scope="{row}">
+            <el-switch
+              v-model="row.status"
+              @change="changeStatus($event, row.id)"
+              active-color="#13ce66"
+              inactive-color="#ff4949"
+              :active-value="0"
+              :inactive-value="1">
+            </el-switch>
+          </template>
+        </el-table-column>
+        <el-table-column
+          v-if="containPermissions(['business:serverprovider:update', 'business:serverprovider:delete'])"
+          label="鎿嶄綔"
+          min-width="120"
+          fixed="right"
+        >
+          <template slot-scope="{row}">
+            <el-button type="text" @click="$refs.operaServerProviderWindow.open('缂栬緫鏈嶅姟鍟嗕俊鎭�', row)" icon="el-icon-edit" v-permissions="['business:serverprovider:update']">缂栬緫</el-button>
+            <el-button type="text" @click="deleteById(row)" icon="el-icon-delete" v-permissions="['business:serverprovider:delete']">鍒犻櫎</el-button>
+          </template>
+        </el-table-column>
+      </el-table>
+      <pagination
+        @size-change="handleSizeChange"
+        @current-change="handlePageChange"
+        :pagination="tableData.pagination"
+      >
+      </pagination>
+    </template>
+    <!-- 鏂板缓/淇敼 -->
+    <OperaServerProviderWindow ref="operaServerProviderWindow" @success="handlePageChange"/>
+  </TableLayout>
+</template>
+
+<script>
+import BaseTable from '@/components/base/BaseTable'
+import TableLayout from '@/layouts/TableLayout'
+import Pagination from '@/components/common/Pagination'
+import OperaServerProviderWindow from '@/components/business/OperaServerProviderWindow'
+import { list } from '@/api/business/labels'
+import { updateStatus } from '@/api/business/serverProvider'
+export default {
+  name: 'ServerProvider',
+  extends: BaseTable,
+  components: { TableLayout, Pagination, OperaServerProviderWindow },
+  data () {
+    return {
+      // 鎼滅储
+      searchForm: {
+        name: '',
+        industryId: ''
+      },
+      industry: []
+    }
+  },
+  created () {
+    this.config({
+      module: '鏈嶅姟鍟嗕俊鎭�',
+      api: '/business/serverProvider',
+      'field.id': 'id',
+      'field.main': 'id'
+    })
+    this.search()
+    this.getAll()
+  },
+  methods: {
+    async getAll() {
+      this.industry = await list({ type: 1, isdeleted: 0 })
+    },
+    changeStatus(status, id) {
+      updateStatus({ id, status })
+        .then(res => {
+          this.search()
+        })
+    }
+  }
+}
+</script>
diff --git a/frontWuhu/src/views/business/serviceProviderResources.vue b/frontWuhu/src/views/business/serviceProviderResources.vue
new file mode 100644
index 0000000..53d9c11
--- /dev/null
+++ b/frontWuhu/src/views/business/serviceProviderResources.vue
@@ -0,0 +1,323 @@
+<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="name" placeholder="杈撳叆鏈嶅姟鍟嗗悕绉版悳绱�">
+                        <img src="../../assets/images/ic_clear@2x.png" v-if="name" @click="clearText" />
+                    </div>
+                    <div class="box_head_search_btn">鏌ヨ</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>
+                </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>
+                <div class="cate_dwon">
+                    <span>灞曞紑</span>
+                    <i class="el-icon-arrow-down"></i>
+                </div>
+            </div>
+            <div class="list">
+                <div class="list_item" v-for="(item, index) in 6" :key="index" @click="$refs.operaDetailsAWindow.open('鏈嶅姟鍟嗚鎯�')">
+                    <div class="list_item_image">
+                        <img src="../../assets/images/zhuce_ic_qiye@2x.png" alt="" />
+                    </div>
+                    <div class="list_item_title">瀹夊窘璞嗙背绉戞妧鏈夐檺鍏徃</div>
+                    <div class="list_item_info">瀹夊窘璞嗙背绉戞妧鏈夐檺鍏徃浠ヨ蒋浠跺紑鍙戙�佷汉宸ユ櫤鑳藉簲鐢ㄥ紑鍙戜负鏍稿績...</div>
+                    <div class="list_item_divide">
+                        <el-rate
+                            v-model="value"
+                            disabled
+                            text-color="#ff9900">
+                        </el-rate>
+                    </div>
+                </div>
+                <div class="list_zw"></div>
+                <div class="list_zw"></div>
+            </div>
+            <div class="pagination">
+                <el-pagination
+                    @current-change="handleCurrentChange"
+                    :current-page="currentPage"
+                    :page-sizes="[10, 20, 30, 40]"
+                    :page-size="10"
+                    layout="total, prev, pager, next, jumper"
+                    :total="50">
+                </el-pagination>
+                <div class="pagination_info">Copyright 漏 2022 - 2023 鏅鸿兘鍒堕�犺瘖鏂患鍚堟湇鍔″钩鍙�. All Rights Reserved.  鐗堟潈鎵�鏈�</div>
+            </div>
+        </div>
+        <!--    璇︽儏    -->
+        <OperaDetailsAWindow ref="operaDetailsAWindow" @success="" />
+    </div>
+</template>
+
+<script>
+    import OperaDetailsAWindow from '@/components/business/OperaDetailsAWindow'
+  export default {
+    name: 'serviceProviderResources',
+    components: { OperaDetailsAWindow },
+    data() {
+      return {
+        name: '',
+        value: 5,
+        cateList: ['鍏ㄩ儴','鏂版潗鏂�','鍏朵粬','鏂板瀷骞虫澘鏄剧ず','鐢熺墿鍖昏嵂','椋熷搧鍔犲伐','鍐堕噾','姹借溅宸ヤ笟','杞诲伐绾虹粐','瑁呭鍒堕��','鍖栧伐','鐢靛瓙浜у搧鍙婅蒋浠�','鐢熶骇鎬ф湇鍔′笟','鑺傝兘鐜繚','瀹跺叿鍒堕�犺涓�']
+      }
+    },
+    methods: {
+      handleCurrentChange(e) {
+        console.log(e)
+      },
+      currentPage(e) {
+        console.log(e)
+      },
+      clearText() {
+        this.name = ''
+      }
+    }
+  }
+</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_fuwushang.png");
+            background-repeat: no-repeat;
+            background-size: 100% 100%;
+            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;
+                    }
+                }
+                .right {
+                    width: 173px;
+                    height: 48px;
+                    padding: 0 15px;
+                    box-sizing: border-box;
+                    background: #FFFFFF;
+                    border-radius: 2px;
+                    display: flex;
+                    align-items: center;
+                    justify-content: space-between;
+                    img {
+                        width: 16px;
+                        height: 16px;
+                    }
+                    .right_name {
+                        font-weight: 400;
+                        font-size: 15px;
+                        color: #333333;
+                    }
+                    .right_num {
+                        font-weight: 600;
+                        font-size: 17px;
+                        color: #216EEE;
+                    }
+                }
+            }
+        }
+        .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_zw {
+                    width: 24%;
+                    height: 0;
+                }
+                .list_item {
+                    width: 24%;
+                    height: 208px;
+                    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_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_info {
+                        width: 100%;
+                        white-space: nowrap;
+                        overflow: hidden;
+                        text-overflow: ellipsis;
+                        font-weight: 400;
+                        font-size: 12px;
+                        color: #999999;
+                    }
+                }
+            }
+            .cate {
+                width: 100%;
+                padding: 20px 30px;
+                margin-bottom: 20px;
+                box-sizing: border-box;
+                background: #FFFFFF;
+                border-radius: 8px;
+                display: flex;
+                justify-content: space-between;
+                .cate_label {
+                    flex-shrink: 0;
+                    font-weight: 400;
+                    font-size: 14px;
+                    color: #666666;
+                }
+                .cate_val {
+                    flex: 1;
+                    display: flex;
+                    align-items: center;
+                    flex-wrap: wrap;
+                    .active {
+                        background: #216EEE !important;
+                        border-radius: 2px !important;
+                        color: #FFFFFF !important;
+                    }
+                    .cate_val_row {
+                        padding: 4px 12px;
+                        box-sizing: border-box;
+                        font-weight: 400;
+                        font-size: 14px;
+                        color: #666666;
+                        margin-right: 18px;
+                        cursor: pointer;
+                    }
+                }
+                .cate_dwon {
+                    display: flex;
+                    flex-shrink: 0;
+                    cursor: pointer;
+                    span {
+                        font-weight: 400;
+                        font-size: 12px;
+                        color: #216EEE;
+                    }
+                    .el-icon-arrow-down {
+                        color: #216EEE;
+                    }
+                }
+            }
+            .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>

--
Gitblit v1.9.3