From f6186d8c2411f8d1d2619be202428db58ec8310a Mon Sep 17 00:00:00 2001
From: MrShi <1878285526@qq.com>
Date: 星期五, 24 一月 2025 13:50:50 +0800
Subject: [PATCH] 1

---
 admin/src/views/contract/components/contractEdit.vue         |   97 ++++++++++--
 admin/src/views/index.vue                                    |  138 ++++++++++++++--
 admin/.env.test                                              |    2 
 admin/src/api/ywWorkDesk.js                                  |   11 +
 admin/package-lock.json                                      |  114 ++++++++++---
 admin/src/components/business/commonFunctions.vue            |  109 +++++++++++++
 admin/src/views/contract/components/terminationAgreement.vue |    6 
 admin/package.json                                           |    2 
 8 files changed, 410 insertions(+), 69 deletions(-)

diff --git a/admin/.env.test b/admin/.env.test
index 335b876..da78780 100644
--- a/admin/.env.test
+++ b/admin/.env.test
@@ -4,7 +4,7 @@
 # VUE_APP_API_URL  = 'http://192.168.5.13/gateway_interface'
 
 # 浠诲悍
-VUE_APP_API_URL  = 'http://192.168.0.146:10010'
+VUE_APP_API_URL  = 'http://192.168.0.133:10010'
 
 # 钀嶅
 # VUE_APP_API_URL  = 'http://192.168.0.108:10010/'
diff --git a/admin/package-lock.json b/admin/package-lock.json
index 51ea93f..9561c6b 100644
--- a/admin/package-lock.json
+++ b/admin/package-lock.json
@@ -410,8 +410,7 @@
     "@babel/helper-string-parser": {
       "version": "7.25.9",
       "resolved": "https://registry.npmjs.org/@babel/helper-string-parser/-/helper-string-parser-7.25.9.tgz",
-      "integrity": "sha512-4A/SCr/2KLd5jrtOMFzaKjVtAei3+2r/NChoBNoZ3EyP/+GlhoaEGoWOZUmFmoITP7zOJyHIMm+DYRd8o3PvHA==",
-      "dev": true
+      "integrity": "sha512-4A/SCr/2KLd5jrtOMFzaKjVtAei3+2r/NChoBNoZ3EyP/+GlhoaEGoWOZUmFmoITP7zOJyHIMm+DYRd8o3PvHA=="
     },
     "@babel/helper-validator-identifier": {
       "version": "7.14.0",
@@ -2046,8 +2045,7 @@
     "@jridgewell/sourcemap-codec": {
       "version": "1.5.0",
       "resolved": "https://registry.npmjs.org/@jridgewell/sourcemap-codec/-/sourcemap-codec-1.5.0.tgz",
-      "integrity": "sha512-gv3ZRaISU3fjPAgNsriBRqGWQL6quFx04YMPW/zD8XMLsU32mhCCbfbO6KZFLjvYpCZ8zyDEgqsgf+PwPaM7GQ==",
-      "dev": true
+      "integrity": "sha512-gv3ZRaISU3fjPAgNsriBRqGWQL6quFx04YMPW/zD8XMLsU32mhCCbfbO6KZFLjvYpCZ8zyDEgqsgf+PwPaM7GQ=="
     },
     "@jridgewell/trace-mapping": {
       "version": "0.3.25",
@@ -3029,7 +3027,6 @@
       "version": "3.5.13",
       "resolved": "https://registry.npmjs.org/@vue/compiler-core/-/compiler-core-3.5.13.tgz",
       "integrity": "sha512-oOdAkwqUfW1WqpwSYJce06wvt6HljgY3fGeM9NcVA1HaYOij3mZG9Rkysn0OHuyUAGMbEbARIpsG+LPVlBJ5/Q==",
-      "dev": true,
       "requires": {
         "@babel/parser": "^7.25.3",
         "@vue/shared": "3.5.13",
@@ -3041,14 +3038,12 @@
         "@babel/helper-validator-identifier": {
           "version": "7.25.9",
           "resolved": "https://registry.npmjs.org/@babel/helper-validator-identifier/-/helper-validator-identifier-7.25.9.tgz",
-          "integrity": "sha512-Ed61U6XJc3CVRfkERJWDz4dJwKe7iLmmJsbOGu9wSloNSFttHV0I8g6UAgb7qnK5ly5bGLPd4oXZlxCdANBOWQ==",
-          "dev": true
+          "integrity": "sha512-Ed61U6XJc3CVRfkERJWDz4dJwKe7iLmmJsbOGu9wSloNSFttHV0I8g6UAgb7qnK5ly5bGLPd4oXZlxCdANBOWQ=="
         },
         "@babel/parser": {
           "version": "7.26.2",
           "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.26.2.tgz",
           "integrity": "sha512-DWMCZH9WA4Maitz2q21SRKHo9QXZxkDsbNZoVD62gusNtNBBqDg9i7uOhASfTfIGNzW+O+r7+jAlM8dwphcJKQ==",
-          "dev": true,
           "requires": {
             "@babel/types": "^7.26.0"
           }
@@ -3057,7 +3052,6 @@
           "version": "7.26.0",
           "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.26.0.tgz",
           "integrity": "sha512-Z/yiTPj+lDVnF7lWeKCIJzaIkI0vYO87dMpZ4bg4TDrFe4XXLFWL1TbXU27gBP3QccxV9mZICCrnjnYlJjXHOA==",
-          "dev": true,
           "requires": {
             "@babel/helper-string-parser": "^7.25.9",
             "@babel/helper-validator-identifier": "^7.25.9"
@@ -3066,8 +3060,7 @@
         "entities": {
           "version": "4.5.0",
           "resolved": "https://registry.npmjs.org/entities/-/entities-4.5.0.tgz",
-          "integrity": "sha512-V0hjH4dGPh9Ao5p0MoRY6BVqtwCjhz6vI5LT8AJ55H+4g9/4vbHx1I54fS0XuclLhDHArPQCiMjDxjaL8fPxhw==",
-          "dev": true
+          "integrity": "sha512-V0hjH4dGPh9Ao5p0MoRY6BVqtwCjhz6vI5LT8AJ55H+4g9/4vbHx1I54fS0XuclLhDHArPQCiMjDxjaL8fPxhw=="
         }
       }
     },
@@ -3075,7 +3068,6 @@
       "version": "3.5.13",
       "resolved": "https://registry.npmjs.org/@vue/compiler-dom/-/compiler-dom-3.5.13.tgz",
       "integrity": "sha512-ZOJ46sMOKUjO3e94wPdCzQ6P1Lx/vhp2RSvfaab88Ajexs0AHeV0uasYhi99WPaogmBlRHNRuly8xV75cNTMDA==",
-      "dev": true,
       "requires": {
         "@vue/compiler-core": "3.5.13",
         "@vue/shared": "3.5.13"
@@ -3085,7 +3077,6 @@
       "version": "3.5.13",
       "resolved": "https://registry.npmjs.org/@vue/compiler-sfc/-/compiler-sfc-3.5.13.tgz",
       "integrity": "sha512-6VdaljMpD82w6c2749Zhf5T9u5uLBWKnVue6XWxprDobftnletJ8+oel7sexFfM3qIxNmVE7LSFGTpv6obNyaQ==",
-      "dev": true,
       "requires": {
         "@babel/parser": "^7.25.3",
         "@vue/compiler-core": "3.5.13",
@@ -3101,14 +3092,12 @@
         "@babel/helper-validator-identifier": {
           "version": "7.25.9",
           "resolved": "https://registry.npmjs.org/@babel/helper-validator-identifier/-/helper-validator-identifier-7.25.9.tgz",
-          "integrity": "sha512-Ed61U6XJc3CVRfkERJWDz4dJwKe7iLmmJsbOGu9wSloNSFttHV0I8g6UAgb7qnK5ly5bGLPd4oXZlxCdANBOWQ==",
-          "dev": true
+          "integrity": "sha512-Ed61U6XJc3CVRfkERJWDz4dJwKe7iLmmJsbOGu9wSloNSFttHV0I8g6UAgb7qnK5ly5bGLPd4oXZlxCdANBOWQ=="
         },
         "@babel/parser": {
           "version": "7.26.2",
           "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.26.2.tgz",
           "integrity": "sha512-DWMCZH9WA4Maitz2q21SRKHo9QXZxkDsbNZoVD62gusNtNBBqDg9i7uOhASfTfIGNzW+O+r7+jAlM8dwphcJKQ==",
-          "dev": true,
           "requires": {
             "@babel/types": "^7.26.0"
           }
@@ -3117,7 +3106,6 @@
           "version": "7.26.0",
           "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.26.0.tgz",
           "integrity": "sha512-Z/yiTPj+lDVnF7lWeKCIJzaIkI0vYO87dMpZ4bg4TDrFe4XXLFWL1TbXU27gBP3QccxV9mZICCrnjnYlJjXHOA==",
-          "dev": true,
           "requires": {
             "@babel/helper-string-parser": "^7.25.9",
             "@babel/helper-validator-identifier": "^7.25.9"
@@ -3127,7 +3115,6 @@
           "version": "8.4.49",
           "resolved": "https://registry.npmjs.org/postcss/-/postcss-8.4.49.tgz",
           "integrity": "sha512-OCVPnIObs4N29kxTjzLfUryOkvZEq+pf8jTF0lg8E7uETuWHA+v7j3c/xJmiqpX450191LlmZfUKkXxkTry7nA==",
-          "dev": true,
           "requires": {
             "nanoid": "^3.3.7",
             "picocolors": "^1.1.1",
@@ -3140,7 +3127,6 @@
       "version": "3.5.13",
       "resolved": "https://registry.npmjs.org/@vue/compiler-ssr/-/compiler-ssr-3.5.13.tgz",
       "integrity": "sha512-wMH6vrYHxQl/IybKJagqbquvxpWCuVYpoUJfCqFZwa/JY1GdATAQ+TgVtgrwwMZ0D07QhA99rs/EAAWfvG6KpA==",
-      "dev": true,
       "requires": {
         "@vue/compiler-dom": "3.5.13",
         "@vue/shared": "3.5.13"
@@ -3210,11 +3196,47 @@
       "integrity": "sha1-zrkktOyzucQ4ccekKaAvhCPmIas=",
       "dev": true
     },
+    "@vue/reactivity": {
+      "version": "3.5.13",
+      "resolved": "https://registry.npmmirror.com/@vue/reactivity/-/reactivity-3.5.13.tgz",
+      "integrity": "sha512-NaCwtw8o48B9I6L1zl2p41OHo/2Z4wqYGGIK1Khu5T7yxrn+ATOixn/Udn2m+6kZKB/J7cuT9DbWWhRxqixACg==",
+      "requires": {
+        "@vue/shared": "3.5.13"
+      }
+    },
+    "@vue/runtime-core": {
+      "version": "3.5.13",
+      "resolved": "https://registry.npmmirror.com/@vue/runtime-core/-/runtime-core-3.5.13.tgz",
+      "integrity": "sha512-Fj4YRQ3Az0WTZw1sFe+QDb0aXCerigEpw418pw1HBUKFtnQHWzwojaukAs2X/c9DQz4MQ4bsXTGlcpGxU/RCIw==",
+      "requires": {
+        "@vue/reactivity": "3.5.13",
+        "@vue/shared": "3.5.13"
+      }
+    },
+    "@vue/runtime-dom": {
+      "version": "3.5.13",
+      "resolved": "https://registry.npmmirror.com/@vue/runtime-dom/-/runtime-dom-3.5.13.tgz",
+      "integrity": "sha512-dLaj94s93NYLqjLiyFzVs9X6dWhTdAlEAciC3Moq7gzAc13VJUdCnjjRurNM6uTLFATRHexHCTu/Xp3eW6yoog==",
+      "requires": {
+        "@vue/reactivity": "3.5.13",
+        "@vue/runtime-core": "3.5.13",
+        "@vue/shared": "3.5.13",
+        "csstype": "^3.1.3"
+      }
+    },
+    "@vue/server-renderer": {
+      "version": "3.5.13",
+      "resolved": "https://registry.npmmirror.com/@vue/server-renderer/-/server-renderer-3.5.13.tgz",
+      "integrity": "sha512-wAi4IRJV/2SAW3htkTlB+dHeRmpTiVIK1OGLWV1yeStVSebSQQOwGwIq0D3ZIoBj2C2qpgz5+vX9iEBkTdk5YA==",
+      "requires": {
+        "@vue/compiler-ssr": "3.5.13",
+        "@vue/shared": "3.5.13"
+      }
+    },
     "@vue/shared": {
       "version": "3.5.13",
       "resolved": "https://registry.npmjs.org/@vue/shared/-/shared-3.5.13.tgz",
-      "integrity": "sha512-/hnE/qP5ZoGpol0a5mDi45bOd7t3tjYJBjsgCsivow7D48cJeV5l05RD82lPqi7gRiphZM37rnhW1l6ZoCNNnQ==",
-      "dev": true
+      "integrity": "sha512-/hnE/qP5ZoGpol0a5mDi45bOd7t3tjYJBjsgCsivow7D48cJeV5l05RD82lPqi7gRiphZM37rnhW1l6ZoCNNnQ=="
     },
     "@vue/web-component-wrapper": {
       "version": "1.3.0",
@@ -5880,6 +5902,11 @@
         }
       }
     },
+    "csstype": {
+      "version": "3.1.3",
+      "resolved": "https://registry.npmmirror.com/csstype/-/csstype-3.1.3.tgz",
+      "integrity": "sha512-M1uQkMl8rQK/szD0LNhtqxIPLpimGm8sOBwU7lLnCpSbTyY3yeU1Vc7l4KT5zT4s/yOxHH5O7tIuuLOCnLADRw=="
+    },
     "currently-unhandled": {
       "version": "0.4.1",
       "resolved": "https://registry.npm.taobao.org/currently-unhandled/download/currently-unhandled-0.4.1.tgz",
@@ -7354,8 +7381,7 @@
     "estree-walker": {
       "version": "2.0.2",
       "resolved": "https://registry.npmjs.org/estree-walker/-/estree-walker-2.0.2.tgz",
-      "integrity": "sha512-Rfkk/Mp/DL7JVje3u18FxFujQlTNR2q6QfMSMB7AvCBx91NGj/ba3kCfza0f6dVDbw7YlRf/nDrn7pQrCCyQ/w==",
-      "dev": true
+      "integrity": "sha512-Rfkk/Mp/DL7JVje3u18FxFujQlTNR2q6QfMSMB7AvCBx91NGj/ba3kCfza0f6dVDbw7YlRf/nDrn7pQrCCyQ/w=="
     },
     "esutils": {
       "version": "2.0.3",
@@ -10448,7 +10474,6 @@
       "version": "0.30.13",
       "resolved": "https://registry.npmjs.org/magic-string/-/magic-string-0.30.13.tgz",
       "integrity": "sha512-8rYBO+MsWkgjDSOvLomYnzhdwEG51olQ4zL5KXnNJWV5MNmrb4rTZdrtkhxjnD/QyZUqR/Z/XDsUs/4ej2nx0g==",
-      "dev": true,
       "requires": {
         "@jridgewell/sourcemap-codec": "^1.5.0"
       }
@@ -11865,8 +11890,7 @@
     "picocolors": {
       "version": "1.1.1",
       "resolved": "https://registry.npmjs.org/picocolors/-/picocolors-1.1.1.tgz",
-      "integrity": "sha512-xceH2snhtb5M9liqDsmEw56le376mTZkEX/jEb/RxNFyegNul7eNslCXP9FDj/Lcu0X8KEyMceP2ntpaHrDEVA==",
-      "dev": true
+      "integrity": "sha512-xceH2snhtb5M9liqDsmEw56le376mTZkEX/jEb/RxNFyegNul7eNslCXP9FDj/Lcu0X8KEyMceP2ntpaHrDEVA=="
     },
     "picomatch": {
       "version": "2.2.3",
@@ -14398,6 +14422,11 @@
         }
       }
     },
+    "sortablejs": {
+      "version": "1.10.2",
+      "resolved": "https://registry.npmmirror.com/sortablejs/-/sortablejs-1.10.2.tgz",
+      "integrity": "sha512-YkPGufevysvfwn5rfdlGyrGjt7/CRHwvRPogD/lC+TnvcN29jDpCifKP+rBqf+LRldfXSTh+0CGLcSg0VIxq3A=="
+    },
     "source-list-map": {
       "version": "2.0.1",
       "resolved": "https://registry.npm.taobao.org/source-list-map/download/source-list-map-2.0.1.tgz",
@@ -14413,8 +14442,7 @@
     "source-map-js": {
       "version": "1.2.1",
       "resolved": "https://registry.npmjs.org/source-map-js/-/source-map-js-1.2.1.tgz",
-      "integrity": "sha512-UXWMKhLOwVKb728IUtQPXxfYU+usdybtUrK/8uGE8CQMvrhOpwvzDBwj0QhSL7MQc7vIsISBG8VQ8+IDQxpfQA==",
-      "dev": true
+      "integrity": "sha512-UXWMKhLOwVKb728IUtQPXxfYU+usdybtUrK/8uGE8CQMvrhOpwvzDBwj0QhSL7MQc7vIsISBG8VQ8+IDQxpfQA=="
     },
     "source-map-resolve": {
       "version": "0.5.3",
@@ -15834,6 +15862,28 @@
       "resolved": "https://registry.nlark.com/vue-router/download/vue-router-3.5.1.tgz?cache=0&sync_timestamp=1620899536020&other_urls=https%3A%2F%2Fregistry.nlark.com%2Fvue-router%2Fdownload%2Fvue-router-3.5.1.tgz",
       "integrity": "sha1-7fPPSQeVLR4Fg+B5I3Igxf9utsk="
     },
+    "vue-simple-calendar": {
+      "version": "7.1.0",
+      "resolved": "https://registry.npmmirror.com/vue-simple-calendar/-/vue-simple-calendar-7.1.0.tgz",
+      "integrity": "sha512-WNbvRVGQQJlStaLPvvpe2ZsB/E1n8eFgUh4hD931ljp2czPA8xT81i4jGD5+jKZT1OHDFpON5mNn0KwO2QC9rA==",
+      "requires": {
+        "vue": "^3.4.15"
+      },
+      "dependencies": {
+        "vue": {
+          "version": "3.5.13",
+          "resolved": "https://registry.npmmirror.com/vue/-/vue-3.5.13.tgz",
+          "integrity": "sha512-wmeiSMxkZCSc+PM2w2VRsOYAZC8GdipNFRTsLSfodVqI9mbejKeXEGr8SckuLnrQPGe3oJN5c3K0vpoU9q/wCQ==",
+          "requires": {
+            "@vue/compiler-dom": "3.5.13",
+            "@vue/compiler-sfc": "3.5.13",
+            "@vue/runtime-dom": "3.5.13",
+            "@vue/server-renderer": "3.5.13",
+            "@vue/shared": "3.5.13"
+          }
+        }
+      }
+    },
     "vue-style-loader": {
       "version": "4.1.3",
       "resolved": "https://registry.npm.taobao.org/vue-style-loader/download/vue-style-loader-4.1.3.tgz",
@@ -15868,6 +15918,14 @@
       "integrity": "sha1-HuO8mhbsv1EYvjNLsV+cRvgvWCU=",
       "dev": true
     },
+    "vuedraggable": {
+      "version": "2.24.3",
+      "resolved": "https://registry.npmmirror.com/vuedraggable/-/vuedraggable-2.24.3.tgz",
+      "integrity": "sha512-6/HDXi92GzB+Hcs9fC6PAAozK1RLt1ewPTLjK0anTYguXLAeySDmcnqE8IC0xa7shvSzRjQXq3/+dsZ7ETGF3g==",
+      "requires": {
+        "sortablejs": "1.10.2"
+      }
+    },
     "vuescroll": {
       "version": "4.17.3",
       "resolved": "https://registry.npm.taobao.org/vuescroll/download/vuescroll-4.17.3.tgz",
diff --git a/admin/package.json b/admin/package.json
index 0efce43..2de3805 100644
--- a/admin/package.json
+++ b/admin/package.json
@@ -33,6 +33,8 @@
     "vue-cropper": "^0.6.5",
     "vue-json-viewer": "^2.2.22",
     "vue-router": "^3.5.1",
+    "vue-simple-calendar": "^7.1.0",
+    "vuedraggable": "^2.24.3",
     "vuescroll": "^4.17.3",
     "vuex": "^3.4.0"
   },
diff --git a/admin/src/api/ywWorkDesk.js b/admin/src/api/ywWorkDesk.js
new file mode 100644
index 0000000..b80e640
--- /dev/null
+++ b/admin/src/api/ywWorkDesk.js
@@ -0,0 +1,11 @@
+import request from '@/utils/request'
+
+// 鑾峰彇蹇嵎鑿滃崟妯″潡淇℃伅
+export function getYwQuickList () {
+  return request.get('/visitsAdmin/cloudService/business/ywWorkDesk/getYwQuickList')
+}
+
+// 鏇存柊蹇嵎妯″潡鏁版嵁
+export function updMyYwQuickModel () {
+  return request.get('/visitsAdmin/cloudService/business/ywWorkDesk/updMyYwQuickModel')
+}
diff --git a/admin/src/components/business/commonFunctions.vue b/admin/src/components/business/commonFunctions.vue
new file mode 100644
index 0000000..084f81f
--- /dev/null
+++ b/admin/src/components/business/commonFunctions.vue
@@ -0,0 +1,109 @@
+<template>
+    <GlobalWindow
+        :title="title"
+        width="60%"
+        :visible.sync="visible"
+        @confirm="confirm"
+    >
+        <div class="Analysis">
+            <span>璇锋牴鎹娇鐢ㄤ範鎯嚜瀹氫箟甯哥敤鍔熻兘锛屾敮鎸佹嫋鍔ㄦ帓</span>
+            <draggable v-model="filterList" chosenClass="chosen" forceFallback="true" group="people" animation="1000">
+                <transition-group class="dra">
+                    <div class="list" v-for="(item, index) in filterList" :key="index">
+                        <div class="list_checkbox">
+                            <el-checkbox v-model="item.checked"> </el-checkbox>
+                        </div>
+                        <img :src="item.path" />
+                        <div class="list_title">{{ item.name }}</div>
+                    </div>
+                </transition-group>
+            </draggable>
+        </div>
+    </GlobalWindow>
+</template>
+
+<script>
+  import BaseOpera from '@/components/base/BaseOpera'
+  import GlobalWindow from '@/components/common/GlobalWindow'
+  import { updMyYwQuickModel } from '@/api/ywWorkDesk'
+  import draggable from 'vuedraggable'
+  export default {
+    name: 'commonFunctions',
+    extends: BaseOpera,
+    components: { GlobalWindow, draggable },
+    data () {
+      return {
+        filterList: []
+      }
+    },
+    methods: {
+      open (title, target) {
+        this.title = title
+        this.filterList = target
+        this.visible = true
+      },
+      confirm () {
+        this.isWorking = true
+        updMyYwQuickModel(this.form)
+          .then(() => {
+            this.visible = false
+            this.$tip.apiSuccess('淇敼鎴愬姛')
+            this.$emit('success')
+          })
+          .finally(() => {
+            this.isWorking = false
+          })
+      }
+    }
+  }
+</script>
+
+<style lang="scss" scoped>
+    .Analysis {
+        width: 100%;
+        margin-top: 20px;
+        display: flex;
+        flex-direction: column;
+        span {
+            font-weight: 400;
+            font-size: 14px;
+            color: #333333;
+            margin-bottom: 20px;
+        }
+        .dra {
+            display: flex;
+            flex-wrap: wrap;
+            justify-content: space-between;
+        }
+        .list {
+            cursor: pointer;
+            display: flex;
+            align-items: center;
+            width: 24%;
+            height: 80px;
+            background: #FFFFFF;
+            border-radius: 8px;
+            border: 1px solid #DFE2E8;
+            margin-bottom: 10px;
+            padding: 0 20px;
+            box-sizing: border-box;
+            position: relative;
+            .list_checkbox {
+                position: absolute;
+                right: 10px;
+                top: 10px;
+            }
+            img {
+                width: 40px;
+                height: 40px;
+                user-select: none;
+                margin-right: 10px;
+            }
+            .list_title {
+                width: 130px;
+                font-size: 11px;
+                user-select: none;
+            }
+        }
+    }
+</style>
diff --git a/admin/src/views/contract/components/contractEdit.vue b/admin/src/views/contract/components/contractEdit.vue
index 84a9fe8..6867919 100644
--- a/admin/src/views/contract/components/contractEdit.vue
+++ b/admin/src/views/contract/components/contractEdit.vue
@@ -178,8 +178,15 @@
           </div>
         </div>
         <el-button style="width: 100%;height: 48px;" type="primary" plain @click="generateZL">鐢熸垚璐﹀崟鏄庣粏</el-button>
+        <div style="width: 100%; text-align: right; margin-bottom: 10px; margin-top: 15px;" v-if="zlList.length > 0">
+          <el-button icon="el-icon-edit" v-if="!isShow" @click="changeEdit(1)">缂栬緫</el-button>
+          <el-popconfirm v-if="isShow" title="鏄惁鏀惧純鎵嬪姩淇敼鎵�濉殑鏁版嵁锛�" @confirm="isShow = false">
+            <el-button slot="reference" style="margin-right: 15px;">鍙栨秷</el-button>
+          </el-popconfirm>
+          <el-button type="primary" v-if="isShow" @click="changeNum(1)">淇濆瓨</el-button>
+        </div>
         <el-table :data="zlList" class="mt20" stripe>
-          <el-table-column label="璐圭敤绫诲瀷" align="center" show-overflow-tooltip>
+          <el-table-column label="璐圭敤绫诲瀷" align="center" :key="Date.now()" show-overflow-tooltip>
             <template slot-scope="{row}">
               <span v-if="row.costType === 0">绉熻祦璐�</span>
               <span v-if="row.costType === 1">鐗╀笟璐�</span>
@@ -191,20 +198,26 @@
               <span v-if="row.costType === 7">淇濊瘉閲�</span>
             </template>
           </el-table-column>
-          <el-table-column label="鏈熸暟" align="center" show-overflow-tooltip>
+          <el-table-column label="鏈熸暟" align="center" :key="Date.now()" show-overflow-tooltip>
             <template slot-scope="{row}">
               <el-tag type="success" v-if="row.sortnum > 0">{{ row.sortnum }}</el-tag>
             </template>
           </el-table-column>
-          <el-table-column label="鍖洪棿" align="center" show-overflow-tooltip>
+          <el-table-column label="鍖洪棿" align="center" :key="Date.now()" show-overflow-tooltip>
             <template slot-scope="{row}">
               {{ row.startDate }} ~ {{ row.endDate }}
             </template>
           </el-table-column>
-          <el-table-column prop="planPayDate" label="浠樻鏃�" align="center" show-overflow-tooltip />
-          <el-table-column label="搴旀敹" align="center" show-overflow-tooltip>
+          <el-table-column prop="planPayDate" label="浠樻鏃�" align="center" :key="Date.now()" show-overflow-tooltip />
+          <el-table-column label="搴旀敹" align="center" :key="Date.now()" show-overflow-tooltip>
             <template slot-scope="{row}">
-              {{ row.receivableFee }}鍏�
+              <span v-if="[2,3].includes(row.costType)">{{ row.totleFee }}鍏�</span>
+              <template v-else>
+                <span v-if="!isShow">{{ row.totleFee }}鍏�</span>
+                <div style="display: flex; align-items: center;" v-if="isShow">
+                  <el-input v-model="row.totleFeeCopy" placeholder="璇疯緭鍏�"></el-input>鍏�
+                </div>
+              </template>
             </template>
           </el-table-column>
         </el-table>
@@ -273,8 +286,15 @@
           </div>
         </div>
         <el-button style="width: 100%;height: 48px;" type="primary" plain @click="generateWY">鐢熸垚璐﹀崟鏄庣粏</el-button>
+        <div style="width: 100%; text-align: right; margin-bottom: 10px; margin-top: 15px;">
+          <el-button icon="el-icon-edit" v-if="!isShow" @click="changeEdit(1)">缂栬緫</el-button>
+          <el-popconfirm v-if="isShow" title="鏄惁鏀惧純鎵嬪姩淇敼鎵�濉殑鏁版嵁锛�" @confirm="isShow = false">
+            <el-button slot="reference" style="margin-right: 15px;">鍙栨秷</el-button>
+          </el-popconfirm>
+          <el-button type="primary" v-if="isShow" @click="changeNum(2)">淇濆瓨</el-button>
+        </div>
         <el-table :data="wyList" class="mt20" stripe>
-          <el-table-column label="璐圭敤绫诲瀷" align="center" show-overflow-tooltip>
+          <el-table-column label="璐圭敤绫诲瀷" align="center" :key="Date.now()" show-overflow-tooltip>
             <template slot-scope="{row}">
               <span v-if="row.costType === 0">绉熻祦璐�</span>
               <span v-if="row.costType === 1">鐗╀笟璐�</span>
@@ -286,20 +306,26 @@
               <span v-if="row.costType === 7">淇濊瘉閲�</span>
             </template>
           </el-table-column>
-          <el-table-column label="鏈熸暟" align="center" show-overflow-tooltip>
+          <el-table-column label="鏈熸暟" align="center" :key="Date.now()" show-overflow-tooltip>
             <template slot-scope="{row}">
               <el-tag type="success" v-if="row.sortnum > 0">{{ row.sortnum }}</el-tag>
             </template>
           </el-table-column>
-          <el-table-column label="鍖洪棿" align="center" show-overflow-tooltip>
+          <el-table-column label="鍖洪棿" align="center" :key="Date.now()" show-overflow-tooltip>
             <template slot-scope="{row}">
               {{ row.startDate }} ~ {{ row.endDate }}
             </template>
           </el-table-column>
-          <el-table-column prop="planPayDate" label="浠樻鏃�" align="center" show-overflow-tooltip />
-          <el-table-column prop="receivableFee" label="搴旀敹" align="center" show-overflow-tooltip>
+          <el-table-column prop="planPayDate" label="浠樻鏃�" :key="Date.now()" align="center" show-overflow-tooltip />
+          <el-table-column label="搴旀敹" :key="Date.now()" align="center" show-overflow-tooltip>
             <template slot-scope="{row}">
-              {{ row.receivableFee }}鍏�
+              <span v-if="[2,3].includes(row.costType)">{{ row.totleFee }}鍏�</span>
+              <template v-else>
+                <span v-if="!isShow">{{ row.totleFee }}鍏�</span>
+                <div style="display: flex; align-items: center;" v-if="isShow">
+                  <el-input v-model="row.totleFeeCopy" placeholder="璇疯緭鍏�"></el-input>鍏�
+                </div>
+              </template>
             </template>
           </el-table-column>
         </el-table>
@@ -309,6 +335,7 @@
         </div>
       </div>
     </div>
+    <div style="width: 100%; height: 50px;"></div>
     <div class="window__footer">
       <slot name="footer">
         <el-button @click="confirm" :loading="confirmWorking" type="primary">{{ activeTabs === 0 ? '涓嬩竴姝�' :
@@ -378,7 +405,6 @@
             advanceDays: ''
           }
         ],
-
 
         wyDeposit: '',
         wyPayType: '',
@@ -450,7 +476,8 @@
       ],
 
 
-      houseLvThree: []
+      houseLvThree: [],
+      isShow: false
     }
   },
   methods: {
@@ -502,6 +529,39 @@
         this.form.roundedUp = 0
         // this.getHouseTree()
       })
+    },
+    changeEdit(type) {
+      if (type === 1) {
+        this.zlList.forEach(item => {
+          item.totleFeeCopy = JSON.parse(JSON.stringify(item.totleFee))
+        })
+        this.isShow = true
+      } else if (type === 2) {
+        this.isShow = false
+      }
+    },
+    changeNum(type) {
+      // 绉熻祦璁$畻
+      if (type === 1) {
+        let num = 0
+        this.zlList.forEach(item => {
+          if (item.costType !== 2) {
+            num += Number(item.totleFeeCopy)
+            item.totleFee = JSON.parse(JSON.stringify(item.totleFeeCopy))
+          }
+        })
+        this.zlPrice = num
+      } else if (type === 2) {
+        let num = 0
+        this.wyList.forEach(item => {
+          if (item.costType !== 3) {
+            num += Number(item.totleFeeCopy)
+            item.totleFee = JSON.parse(JSON.stringify(item.totleFeeCopy))
+          }
+        })
+        this.wyPrice = num
+      }
+      this.isShow = false
     },
     changePayType(e) {
       if (e === 0) {
@@ -653,7 +713,7 @@
     submit() {
       // 璋冪敤鏂板缓鎺ュ彛
       this.isWorking = true
-      create({ ...this.form })
+      create({ ...this.form, ywContractBillDTOList: [...this.wyList, ...this.zlList] })
         .then(res => {
           this.visible = false
           this.$tip.apiSuccess('鍒涘缓鎴愬姛')
@@ -711,8 +771,9 @@
           let zlPrice = 0
           let arr = []
           res.forEach(item => {
+            item.totleFeeCopy = JSON.parse(JSON.stringify(item.totleFee))
             if (item.costType === 0) {
-              zlPrice += item.receivableFee
+              zlPrice += item.totleFee
             }
             arr.push(item)
           })
@@ -728,7 +789,8 @@
           let arr = []
           res.forEach(item => {
             if (item.costType === 1) {
-              zlPrice += item.receivableFee
+              zlPrice += item.totleFee
+              item.totleFeeCopy = JSON.parse(JSON.stringify(item.totleFee))
             }
             arr.push(item)
           })
@@ -817,6 +879,7 @@
       this.activeTabs = val
     },
     ctabsClick(val) {
+      this.isShow = false
       this.cactiveTabs = val
     },
     handleRent() {
diff --git a/admin/src/views/contract/components/terminationAgreement.vue b/admin/src/views/contract/components/terminationAgreement.vue
index d9d9280..835fe12 100644
--- a/admin/src/views/contract/components/terminationAgreement.vue
+++ b/admin/src/views/contract/components/terminationAgreement.vue
@@ -16,7 +16,11 @@
                 <el-table :data="info.roomList" stripe>
                     <el-table-column prop="projectName" label="椤圭洰鍚嶇О" show-overflow-tooltip />
                     <el-table-column prop="buildingName" label="妤煎畤鍚嶇О" show-overflow-tooltip />
-                    <el-table-column prop="buildingName" label="妤煎眰/鎴垮彿" show-overflow-tooltip></el-table-column>
+                    <el-table-column label="妤煎眰/鎴垮彿" show-overflow-tooltip>
+                        <template slot-scope="{row}">
+                            {{row.floorName}}{{row.roomNum}}
+                        </template>
+                    </el-table-column>
                     <el-table-column prop="area" label="闈㈢Н" show-overflow-tooltip></el-table-column>
                 </el-table>
             </div>
diff --git a/admin/src/views/index.vue b/admin/src/views/index.vue
index 3ac4dda..999bd92 100644
--- a/admin/src/views/index.vue
+++ b/admin/src/views/index.vue
@@ -30,15 +30,15 @@
       <div class="main_left_menu">
         <div class="main_left_menu_title">
           <span>甯哥敤鍔熻兘</span>
-          <div class="main_left_menu_title_edit">
+          <div class="main_left_menu_title_edit" @click="$refs.commonFunctions.open('甯哥敤鍔熻兘绠$悊', list)">
             <img src="@/assets/indexIcon/ic_daibangongdan@2x.png" />
             <span>鑷畾涔夊姛鑳�</span>
           </div>
         </div>
         <div class="main_left_menu_list">
-          <div class="list_item" v-for="(item, index) in menu" :key="index">
+          <div class="list_item" v-for="(item, index) in list" :key="index">
             <div class="list_item_left">
-              <img :src="item.icon" />
+              <img :src="item.path" />
               <span>{{item.name}}</span>
             </div>
             <i class="el-icon-arrow-right"></i>
@@ -67,13 +67,33 @@
         </el-select>
       </div>
       <div class="main_right_date">
-        <el-calendar v-model="value" :mark-data="markData"></el-calendar>
+        <el-calendar v-model="value"></el-calendar>
+      </div>
+      <div class="main_right_rc">
+        <div class="main_right_rc_title">褰撴棩鏃ョ▼锛�3锛�</div>
+        <div class="main_right_rc_list">
+          <div class="main_right_rc_list_row" v-for="(item, index) in 5" :key="index">
+            <div class="top">
+              <div class="top_left">
+                <div class="top_left_dian"></div>
+                <div class="top_left_title">鐩樼偣閫氱煡</div>
+              </div>
+              <div class="top_date">2024-12-13 12:53:12</div>
+            </div>
+            <div class="bottom">
+              銆愮洏鐐硅鍒掑悕绉般�戝皢鍦ㄣ��2024-12-1
+            </div>
+          </div>
+        </div>
       </div>
     </div>
+    <CommonFunctions ref="commonFunctions" />
   </div>
 </template>
 
 <script>
+import CommonFunctions from '@/components/business/commonFunctions'
+import { getYwQuickList } from '@/api/ywWorkDesk'
 export default {
   data() {
     return {
@@ -89,25 +109,24 @@
         { name: '璐﹀崟鍒楄〃', icon: require('@/assets/indexIcon/ic_zhangdanliebiao@2x.png') },
         { name: '鏂板鍏ュ簱鍗�', icon: require('@/assets/indexIcon/ic_xinzengruku@2x.png') },
         { name: '鏂板鍑哄簱鍗�', icon: require('@/assets/indexIcon/ic_xinzengchuku@2x.png') },
-        { name: '璧勪骇娓呭崟', icon: require('@/assets/indexIcon/ic_zichan@2x.png') },
+        { name: '鐗╂枡娓呭崟', icon: require('@/assets/indexIcon/ic_zichan@2x.png') },
       ],
-      options: [],
-      value: '',
-      markData: [
-        {
-          date: '2025-01-22', // 鏍囪鐨勬棩鏈�
-          // 鑷畾涔夋爣璁板唴瀹�
-          content: '<div style="color: red;">閲嶈浜嬩欢</div>'
-        },
-        {
-          date: '2025-01-19',
-          content: '鐢熸棩'
-        }
-      ]
+      list: [],
+      value: new Date()
     }
   },
+  components: { CommonFunctions },
+  created () {
+    this.getYwQuickLists()
+  },
   methods: {
-  
+    getYwQuickLists() {
+      getYwQuickList({})
+        .then(res => {
+          console.log(res)
+          this.list = res
+        })
+    }
   }
 }
 </script>
@@ -115,12 +134,12 @@
 <style lang="scss" scoped>
   .main {
     width: 100%;
-    height: calc(100vh - 48px - 56px - 35px);
+    /*height: calc(100vh - 48px - 56px - 35px);*/
     padding: 15px;
     box-sizing: border-box;
     background: #F4F7FC;
     display: flex;
-    align-items: center;
+    align-items: self-start;
     justify-content: space-between;
     .main_left {
       flex: 1;
@@ -199,6 +218,7 @@
             color: #222222;
           }
           .main_left_menu_title_edit {
+            cursor: pointer;
             display: flex;
             align-items: center;
             img {
@@ -266,9 +286,68 @@
         color: #222222;
         margin-bottom: 12px;
       }
+      .main_right_rc {
+        width: 100%;
+        display: flex;
+        flex-direction: column;
+        .main_right_rc_title {
+          font-weight: 500;
+          font-size: 16px;
+          color: #222222;
+          margin-bottom: 15px;
+        }
+        .main_right_rc_list {
+          width: 100%;
+          height: 300px;
+          overflow-y: scroll;
+          .main_right_rc_list_row {
+            width: 100%;
+            padding: 15px;
+            box-sizing: border-box;
+            background: #F4F7FC;
+            border-radius: 2px;
+            margin-bottom: 10px;
+            .top {
+              width: 100%;
+              display: flex;
+              align-items: center;
+              justify-content: space-between;
+              .top_left {
+                display: flex;
+                align-items: center;
+                .top_left_dian {
+                  width: 10px;
+                  height: 10px;
+                  border-radius: 50%;
+                  background: #FF9E00;
+                  margin-right: 10px;
+                }
+                .top_left_title {
+                  font-weight: 500;
+                  font-size: 15px;
+                  color: #222222;
+                }
+              }
+              .top_date {
+                font-weight: 400;
+                font-size: 12px;
+                color: #999999;
+              }
+            }
+            .bottom {
+              font-weight: 400;
+              font-size: 13px;
+              color: #666666;
+              margin-top: 8px;
+            }
+          }
+        }
+      }
       .main_right_date {
         width: 100%;
-        height: 300px;
+        ::v-deep .el-calendar__header {
+          display: none;
+        }
         ::v-deep .el-calendar-table tr td:first-child{
           border: none;
         }
@@ -283,6 +362,21 @@
           align-items: center;
           justify-content: center;
         }
+        ::v-deep thead th {
+          height: 20px;
+          border-bottom: 1px solid #DFE2E8;
+        }
+        ::v-deep.el-calendar-table .el-calendar-day{
+          width: 100%;
+          height: 50px;
+          text-align: center;
+        }
+        ::v-deep .el-calendar-table td.is-selected {
+          background: #3E80EF;
+        }
+        ::v-deep .el-calendar-table .el-calendar-day:hover {
+          background: none;
+        }
       }
     }
   }

--
Gitblit v1.9.3