From b417a422c08ceabd31fa7feaba42fd8a7b1e86d2 Mon Sep 17 00:00:00 2001
From: MrShi <1878285526@qq.com>
Date: 星期六, 18 一月 2025 09:14:08 +0800
Subject: [PATCH] 1

---
 admin/src/views/contract/components/pendingBills.vue         |   45 ++++-
 admin/src/api/ywContractBill.js                              |   34 ++++
 admin/src/components/common/GlobalWindow.vue                 |    9 +
 admin/src/views/finance/components/batchCall.vue             |   90 +++++++++++
 admin/src/views/finance/collectionSettings.vue               |   32 ++-
 admin/src/views/finance/overdueBills.vue                     |   33 ++-
 admin/src/api/ywTempConfig.js                                |    7 
 admin/src/views/finance/components/bullDetail.vue            |    2 
 admin/src/views/contract/components/terminationAgreement.vue |   71 +++++---
 admin/src/views/contract/components/contractDetail.vue       |   20 ++
 admin/src/views/finance/components/call.vue                  |   89 ++++++----
 11 files changed, 329 insertions(+), 103 deletions(-)

diff --git a/admin/src/api/ywContractBill.js b/admin/src/api/ywContractBill.js
index be95d5e..024b344 100644
--- a/admin/src/api/ywContractBill.js
+++ b/admin/src/api/ywContractBill.js
@@ -6,3 +6,37 @@
     trim: true
   })
 }
+
+// 鑾峰彇鎵归噺鍌即鏁版嵁
+export function getNoticeCustomerData (data) {
+  return request.post('/visitsAdmin/cloudService/business/ywContractBill/getNoticeCustomerData', data, {
+    trim: true
+  })
+}
+
+// 鍙戦�佸偓缂存暟鎹�
+export function sendNoticeCustomerData (data) {
+  return request.post('/visitsAdmin/cloudService/business/ywContractBill/sendNoticeCustomerData', data, {
+    trim: true
+  })
+}
+
+// 涓嬭浇鍌垂鏂囦欢
+export function downloadCallFeeDoc (data) {
+  return request.post('/visitsAdmin/cloudService/business/ywContractBill/downloadCallFeeDoc', data, {
+    download: true,
+    trim: true
+  })
+}
+
+// 鍙戦�佺煭淇′笌閭欢
+export function sendSmsEmail (data) {
+  return request.post('/visitsAdmin/cloudService/business/ywContractBill/sendSmsEmail', data, {
+    trim: true
+  })
+}
+
+// 鑾峰彇寰呭鐞嗚处鍗�
+export function getWaitDealList (contractId) {
+  return request.get(`/visitsAdmin/cloudService/business/ywContractBill/getWaitDealList?contractId=${contractId}`)
+}
diff --git a/admin/src/api/ywTempConfig.js b/admin/src/api/ywTempConfig.js
index a167130..c0947e0 100644
--- a/admin/src/api/ywTempConfig.js
+++ b/admin/src/api/ywTempConfig.js
@@ -6,3 +6,10 @@
     trim: true
   })
 }
+
+// 鏇存柊閰嶇疆妯℃澘淇℃伅
+export function updTempConfig (data) {
+  return request.post('/visitsAdmin/cloudService/business/ywTempConfig/updTempConfig', data, {
+    trim: true
+  })
+}
diff --git a/admin/src/components/common/GlobalWindow.vue b/admin/src/components/common/GlobalWindow.vue
index b734be2..504f62f 100644
--- a/admin/src/components/common/GlobalWindow.vue
+++ b/admin/src/components/common/GlobalWindow.vue
@@ -22,6 +22,7 @@
       <slot name="footer">
         <el-button v-if="showConfirm" @click="confirm" :loading="confirmWorking" type="primary">{{text}}</el-button>
         <slot name="btns" />
+        <el-button type="primary" v-if="isDownload" @click="downloadFile">涓嬭浇鍌即閫氱煡鍗�</el-button>
         <el-button @click="close">{{ backText }}</el-button>
       </slot>
     </div>
@@ -68,6 +69,11 @@
     visible: {
       type: Boolean,
       required: true
+    },
+    // 鏄惁鏄剧ず涓嬭浇鎸夐挳
+    isDownload: {
+      type: Boolean,
+      required: false
     }
   },
   methods: {
@@ -77,6 +83,9 @@
     close () {
       this.$emit('close')
       this.$emit('update:visible', false)
+    },
+    downloadFile() {
+      this.$emit('downloadFile')
     }
   }
 }
diff --git a/admin/src/views/contract/components/contractDetail.vue b/admin/src/views/contract/components/contractDetail.vue
index 64cb0d9..5683288 100644
--- a/admin/src/views/contract/components/contractDetail.vue
+++ b/admin/src/views/contract/components/contractDetail.vue
@@ -17,8 +17,8 @@
           <el-tag type="info" v-if="info.status === 4">宸查��绉�</el-tag>
         </div>
         <div>
-          <el-button type="primary" @click="$refs.pendingBills.open('寰呭鐞嗚处鍗�')">鏌ョ湅寰呭鐞嗚处鍗�</el-button>
-          <el-button @click="$refs.terminationAgreement.open('閫�绉熷崗璁�')">鏌ョ湅閫�绉熷崗璁�</el-button>
+          <el-button type="primary" @click="$refs.pendingBills.open('寰呭鐞嗚处鍗�', id)" v-if="info.status === 3">鏌ョ湅寰呭鐞嗚处鍗�</el-button>
+          <el-button @click="$refs.terminationAgreement.open('閫�绉熷崗璁�', id)" v-if="[3,4].includes(info.status)">鏌ョ湅閫�绉熷崗璁�</el-button>
           <el-button plain type="danger" v-if="[0, 1, 2].includes(info.status)" @click="refund">閫�绉�</el-button>
         </div>
       </div>
@@ -197,6 +197,13 @@
         v-loading="loading"
         style="width: 100%">
         <el-table-column
+          width="150"
+          label="璐﹀崟缂栧彿">
+          <template slot-scope="{row}">
+            <el-button type="text" @click="openBill(row.id)">{{row.code}}</el-button>
+          </template>
+        </el-table-column>
+        <el-table-column
           label="璐圭敤绫诲瀷">
           <template slot-scope="{row}">
             <span v-if="row.costType === 0">绉熻祦璐�</span>
@@ -327,6 +334,8 @@
     <PendingBills ref="pendingBills" />
     <!--  閫�绉熷崗璁�  -->
     <TerminationAgreement ref="terminationAgreement" />
+    <!--  璐﹀崟璇︽儏  -->
+    <BullDetail ref="bullDetail" />
   </GlobalWindow>
 </template>
 
@@ -336,6 +345,7 @@
 import TerminateLease from './terminateLease'
 import PendingBills from './pendingBills'
 import TerminationAgreement from './terminationAgreement'
+import BullDetail from '../../finance/components/bullDetail'
 import { getById } from '@/api/contract'
 import { fetchList } from '@/api/bill'
 export default {
@@ -343,7 +353,8 @@
     GlobalWindow,
     TerminateLease,
     PendingBills,
-    TerminationAgreement
+    TerminationAgreement,
+    BullDetail
   },
   extends: BaseOpera,
   data() {
@@ -375,6 +386,9 @@
     xiazai (url) {
       window.open(url)
     },
+    openBill(id) {
+      this.$refs.bullDetail.open('璐﹀崟璇︽儏', id)
+    },
     returnUnit (type) {
       switch (type) {
         case 0:
diff --git a/admin/src/views/contract/components/pendingBills.vue b/admin/src/views/contract/components/pendingBills.vue
index 1ecd98f..b694d96 100644
--- a/admin/src/views/contract/components/pendingBills.vue
+++ b/admin/src/views/contract/components/pendingBills.vue
@@ -10,19 +10,19 @@
             <div class="zd_list">
                 <div class="zd_list_row">
                     <span>寰呮敹娆捐处鍗曟暟</span>
-                    <span>2</span>
+                    <span>{{info.inAmount || 0}}</span>
                 </div>
                 <div class="zd_list_row">
                     <span>寰呮敹娆鹃噾棰�</span>
-                    <span>锟�247.00</span>
+                    <span>锟{info.inFee || 0}}</span>
                 </div>
                 <div class="zd_list_row">
                     <span>寰呬粯娆捐处鍗曟暟</span>
-                    <span>3</span>
+                    <span>{{info.payAmount || 0}}</span>
                 </div>
                 <div class="zd_list_row">
                     <span>寰呬粯娆鹃噾棰�</span>
-                    <span>锟�247.00</span>
+                    <span>锟{info.payFee || 0}}</span>
                 </div>
             </div>
             <div class="zd_content">
@@ -30,7 +30,7 @@
                     <span>璐﹀崟</span>
                 </div>
                 <el-table
-                    :data="tableData"
+                    :data="info.ywContractBillList"
                     border
                     style="width: 100%">
                     <el-table-column
@@ -38,27 +38,38 @@
                         label="璐﹀崟缂栧彿">
                     </el-table-column>
                     <el-table-column
-                        prop="name"
                         label="璐圭敤绫诲瀷">
+                        <template slot-scope="{row}">
+                            <span v-if="row.costType === 0">绉熻祦璐�</span>
+                            <span v-if="row.costType === 1">鐗╀笟璐�</span>
+                            <span v-if="row.costType === 2">绉熻祦鎶奸噾</span>
+                            <span v-if="row.costType === 3">鐗╀笟鎶奸噾</span>
+                            <span v-if="row.costType === 4">姘寸數璐�</span>
+                            <span v-if="row.costType === 5">鏉傞」璐�</span>
+                            <span v-if="row.costType === 6">鍏朵粬</span>
+                            <span v-if="row.costType === 7">淇濊瘉閲�</span>
+                        </template>
                     </el-table-column>
                     <el-table-column
-                        prop="address"
                         label="璁¤垂鍛ㄦ湡">
+                        <template slot-scope="{row}">
+                            {{row.startDate}}~{{row.endDate}}
+                        </template>
                     </el-table-column>
                     <el-table-column
-                        prop="address"
+                        prop="receivableFee"
                         label="搴旀敹浠橀噾棰�/鍘熷搴旀敹浠�">
                     </el-table-column>
                     <el-table-column
-                        prop="address"
+                        prop="actReceivableFee"
                         label="瀹炴敹/浠橀噾棰�">
                     </el-table-column>
                     <el-table-column
-                        prop="address"
+                        prop="needReceivableFee"
                         label="闇�鏀�/浠橀噾棰�">
                     </el-table-column>
                     <el-table-column
-                        prop="address"
+                        prop="receivableFee"
                         label="搴旀敹/浠樻棩鏈�">
                     </el-table-column>
                 </el-table>
@@ -70,6 +81,7 @@
 <script>
   import GlobalWindow from '@/components/common/GlobalWindow'
   import BaseOpera from '@/components/base/BaseOpera'
+  import { getWaitDealList } from '@/api/ywContractBill'
   export default {
     name: 'pendingBills',
     components: {
@@ -78,11 +90,18 @@
     extends: BaseOpera,
     data () {
       return {
-        tableData: []
+        info: []
       }
     },
     methods: {
-    
+      open (title, contractId) {
+        this.title = title
+        getWaitDealList(contractId)
+            .then(res => {
+              this.info = res
+              this.visible = true
+            })
+      }
     }
   }
 </script>
diff --git a/admin/src/views/contract/components/terminationAgreement.vue b/admin/src/views/contract/components/terminationAgreement.vue
index 9b02d5c..d9d9280 100644
--- a/admin/src/views/contract/components/terminationAgreement.vue
+++ b/admin/src/views/contract/components/terminationAgreement.vue
@@ -8,40 +8,43 @@
         @confirm="confirm">
         <div class="main">
             <div class="main_head">
-                <span>绉熷锛氫箳涔撶悆淇变箰閮�</span>
-                <span>鍚堝悓缂栧彿锛� 2024-04-001-202405-0019</span>
-            </div>
-            <div class="title">閫�绉熶俊鎭�</div>
-            <div class="list">
-                <div class="item">
-                    <div class="la">閫�绉熺被鍨�</div>
-                    <div class="val">{{ info.code }}</div>
-                </div>
-                <div class="item">
-                    <div class="la">閫�绉熸棩鏈�</div>
-                    <div class="val">{{ info.userName }}</div>
-                </div>
-                <div class="item">
-                    <div class="la">缁忓姙浜�</div>
-                    <div class="val">{{ info.creatorName }}</div>
-                </div>
-                <div class="item">
-                    <div class="la">鍗忚绛捐鏃ユ湡</div>
-                    <div class="val">{{ info.totalArea }}銕�</div>
-                </div>
-                <div class="item">
-                    <div class="la">閫�绉熷師鍥�</div>
-                    <div class="val">{{ info.companyName }}</div>
-                </div>
+                <span>绉熷锛歿{info.renterName}}</span>
+                <span>鍚堝悓缂栧彿锛� {{info.code}}</span>
             </div>
             <div class="title">鎴挎簮淇℃伅</div>
             <div class="list">
-                <el-table :data="roomList" stripe>
+                <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 prop="area" label="闈㈢Н" show-overflow-tooltip></el-table-column>
                 </el-table>
+            </div>
+            <div class="title">閫�绉熶俊鎭�</div>
+            <div class="list">
+                <div class="item">
+                    <div class="la">閫�绉熺被鍨�</div>
+                    <div class="val" v-if="info.btType === 0">鍒版湡閫�绉�</div>
+                    <div class="val" v-if="info.btType === 1">鎹㈡埧閫�绉�</div>
+                    <div class="val" v-if="info.btType === 2">杩濈害閫�绉�</div>
+                    <div class="val" v-if="info.btType === 3">鍗忓晢閫�绉�</div>
+                </div>
+                <div class="item">
+                    <div class="la">閫�绉熸棩鏈�</div>
+                    <div class="val">{{ info.btDate }}</div>
+                </div>
+                <div class="item">
+                    <div class="la">缁忓姙浜�</div>
+                    <div class="val">{{ info.userName }}</div>
+                </div>
+                <div class="item">
+                    <div class="la">鍗忚绛捐鏃ユ湡</div>
+                    <div class="val">{{ info.signDate }}銕�</div>
+                </div>
+                <div class="item">
+                    <div class="la">閫�绉熷師鍥�</div>
+                    <div class="val">{{ info.btInfo }}</div>
+                </div>
             </div>
         </div>
     </GlobalWindow>
@@ -50,6 +53,7 @@
 <script>
   import GlobalWindow from '@/components/common/GlobalWindow'
   import BaseOpera from '@/components/base/BaseOpera'
+  import { getById } from '@/api/contract'
   export default {
     name: "terminationAgreement",
     components: {
@@ -58,12 +62,23 @@
     extends: BaseOpera,
     data() {
       return {
-        roomList: [],
+        id: null,
         info: {}
       }
     },
     methods: {
-    
+      open (title, id) {
+        this.title = title
+        this.id = id
+        this.getData()
+      },
+      getData () {
+        getById(this.id)
+          .then(res => {
+            this.info = res
+            this.visible = true
+          })
+      },
     }
   }
 </script>
diff --git a/admin/src/views/finance/collectionSettings.vue b/admin/src/views/finance/collectionSettings.vue
index 1df43de..9a1ec04 100644
--- a/admin/src/views/finance/collectionSettings.vue
+++ b/admin/src/views/finance/collectionSettings.vue
@@ -5,13 +5,13 @@
                 <el-form ref="form" :model="form" label-width="120px">
                     <el-form-item label="鐭俊妯℃澘">
                         <div style="display: flex; align-items: self-start;">
-                            <el-input type="textarea" rows="5" v-model="form.smsTemp"></el-input>
+                            <el-input type="textarea" rows="5" v-model="form.smsTemp.title"></el-input>
 <!--                            <el-button type="primary" style="margin-left: 10px;">淇濆瓨</el-button>-->
                         </div>
                     </el-form-item>
                     <el-form-item label="閭妯℃澘">
                         <div style="display: flex; align-items: self-start;">
-                            <el-input type="textarea" rows="5" v-model="form.emailTemp"></el-input>
+                            <el-input type="textarea" rows="5" v-model="form.emailTemp.title"></el-input>
 <!--                            <el-button type="primary" style="margin-left: 10px;">淇濆瓨</el-button>-->
                         </div>
                     </el-form-item>
@@ -44,7 +44,7 @@
                         </el-upload>
                     </el-form-item>
                     <el-form-item>
-                        <el-button type="primary" @click="submit">淇濆瓨</el-button>
+                        <el-button type="primary" @click="submit" :disabled="loading" :loading="loading">淇濆瓨</el-button>
                     </el-form-item>
                 </el-form>
             </div>
@@ -56,7 +56,7 @@
 
 <script>
     import templateKeywords from './components/templateKeywords'
-    import { getCallTemp } from '@/api/ywTempConfig'
+    import { getCallTemp, updTempConfig } from '@/api/ywTempConfig'
   export default {
     name: 'collectionSettings',
     data() {
@@ -66,11 +66,12 @@
           folder: 'TEMP_CONFIG'
         },
         form: {
-          emailTemp: '',
-          smsTemp: '',
+          emailTemp: {},
+          smsTemp: {},
           leaseTemp: [],
           otherTemp: []
-        }
+        },
+        loading: false
       }
     },
     components: { templateKeywords },
@@ -79,7 +80,18 @@
     },
     methods: {
       submit() {
-      
+        this.loading = true
+        updTempConfig({
+          emailTemp: this.form.emailTemp,
+          smsTemp: this.form.smsTemp,
+          leaseTemp: this.form.leaseTemp[0],
+          otherTemp: this.form.otherTemp[0]
+        }).then(res => {
+          this.$message.success('鏇存柊鎴愬姛锛�')
+          this.getCallTempVal()
+        }).finally(() => {
+          this.loading = false
+        })
       },
       handleRemove(e) {
         this.form.leaseTemp = []
@@ -98,8 +110,8 @@
       getCallTempVal() {
         getCallTemp({})
             .then(res => {
-              this.form.smsTemp = res.smsTemp.title
-              this.form.emailTemp = res.emailTemp.title
+              this.form.smsTemp = res.smsTemp
+              this.form.emailTemp = res.emailTemp
               this.form.leaseTemp = [{ url: res.leaseTemp.url, name: res.leaseTemp.title }]
               this.form.otherTemp = [{ url: res.otherTemp.url, name: res.otherTemp.title }]
             })
diff --git a/admin/src/views/finance/components/batchCall.vue b/admin/src/views/finance/components/batchCall.vue
new file mode 100644
index 0000000..adeab27
--- /dev/null
+++ b/admin/src/views/finance/components/batchCall.vue
@@ -0,0 +1,90 @@
+<template>
+    <GlobalWindow
+        :title="title"
+        :visible.sync="visible"
+        :isDownload="true"
+        width="100%"
+        @downloadFile="downloadFile"
+        @confirm="confirm">
+        <el-form :model="form" label-position="top" ref="paramRef">
+            <el-form-item label="閫氱煡鏂瑰紡">
+                <el-checkbox-group v-model="form.type">
+                    <el-checkbox label="鐭俊"></el-checkbox>
+                    <el-checkbox label="閭欢"></el-checkbox>
+                </el-checkbox-group>
+            </el-form-item>
+            <el-form-item label="閫氱煡鎺ユ敹浜�">
+                <div style="display: flex; align-items: center; margin-bottom: 10px;" v-for="(item, index) in userList" :key="index">
+                    <span style="margin-right: 15px; font-size: 15px; color: #222222;">{{item.customerName}}</span>
+                    <el-select v-model="item.userId" placeholder="璇烽�夋嫨">
+                        <el-option
+                            v-for="(item, index) in item.memberList"
+                            :key="index"
+                            :label="item.name"
+                            :value="item.id" />
+                    </el-select>
+                </div>
+            </el-form-item>
+        </el-form>
+    </GlobalWindow>
+</template>
+
+<script>
+  import GlobalWindow from '@/components/common/GlobalWindow'
+  import BaseOpera from '@/components/base/BaseOpera'
+  import { getNoticeCustomerData, downloadCallFeeDoc, sendSmsEmail } from '@/api/ywContractBill'
+  export default {
+    name: "batchCall",
+    components: { GlobalWindow },
+    extends: BaseOpera,
+    data() {
+      return {
+        ids: null,
+        form: {
+          type: []
+        },
+        userList: []
+      }
+    },
+    methods: {
+      open (title, ids) {
+        this.title = title
+        this.ids = ids
+        this.form.type = []
+        this.userList = []
+        this.visible = true
+        this.getUser()
+      },
+      downloadFile() {
+        downloadCallFeeDoc(this.ids)
+          .then(response => {
+            this.download(response)
+          })
+          .catch(e => {
+            this.$tip.apiFailed(e)
+          })
+      },
+      getUser() {
+        getNoticeCustomerData(this.ids)
+          .then(res => {
+            this.userList = res
+          })
+      },
+      confirm() {
+        if (this.form.type.length === 0) return this.$message.warning('閫氱煡鏂瑰紡涓嶈兘涓虹┖')
+          let arr = this.userList.map(item => {
+            return {
+              billId: item.billId,
+              sendEmail: this.form.type.includes('閭欢') ? 1 : 0,
+              sendSms: this.form.type.includes('鐭俊') ? 1 : 0,
+              userId: item.userId
+            }
+          })
+          sendSmsEmail(arr).then(res => {
+            this.$message.success('鍙戦�佹垚鍔燂紒')
+            this.visible = false
+          })
+      }
+    }
+  }
+</script>
diff --git a/admin/src/views/finance/components/bullDetail.vue b/admin/src/views/finance/components/bullDetail.vue
index b40909b..976f0a0 100644
--- a/admin/src/views/finance/components/bullDetail.vue
+++ b/admin/src/views/finance/components/bullDetail.vue
@@ -9,7 +9,7 @@
           <el-tag type="info" v-if="info.status === 1">鍏抽棴</el-tag>
         </div>
         <div style="display: flex; align-items: center;">
-          <el-button @click="$refs.call.open('鍙戦�佸偓缂撮�氱煡', info)">鍙戦�佺即璐归�氱煡</el-button>
+          <el-button @click="$refs.call.open('鍙戦�佸偓缂撮�氱煡', [info.id])">鍙戦�佺即璐归�氱煡</el-button>
           <el-button plain type="primary" v-if="![1].includes(info.payStatus)" @click="$refs.flowingWater.open('鍒涘缓鏀舵敮娴佹按', {
             billType: returnBillType(),
             billId: info.id,
diff --git a/admin/src/views/finance/components/call.vue b/admin/src/views/finance/components/call.vue
index d2504cc..2660506 100644
--- a/admin/src/views/finance/components/call.vue
+++ b/admin/src/views/finance/components/call.vue
@@ -1,24 +1,29 @@
 <template>
     <GlobalWindow
-        :title="title"
-        :visible.sync="visible"
-        width="100%"
-        @confirm="confirm">
-        <el-form :model="form" label-position="top" ref="paramRef" :rules="rules">
-            <el-form-item label="閫氱煡鏂瑰紡" prop="type">
+            :title="title"
+            :visible.sync="visible"
+            :isDownload="true"
+            width="100%"
+            @downloadFile="downloadFile"
+            @confirm="confirm">
+        <el-form :model="form" label-position="top" ref="paramRef">
+            <el-form-item label="閫氱煡鏂瑰紡">
                 <el-checkbox-group v-model="form.type">
                     <el-checkbox label="鐭俊"></el-checkbox>
                     <el-checkbox label="閭欢"></el-checkbox>
                 </el-checkbox-group>
             </el-form-item>
-            <el-form-item label="閫氱煡鎺ユ敹浜�" prop="userId">
-                <el-select v-model="form.userId" placeholder="璇烽�夋嫨">
-                    <el-option
-                        v-for="(item, index) in userList"
-                        :key="index"
-                        :label="item.realname"
-                        :value="item.id" />
-                </el-select>
+            <el-form-item label="閫氱煡鎺ユ敹浜�">
+                <div style="display: flex; align-items: center; margin-bottom: 10px;" v-for="(item, index) in userList" :key="index">
+                    <span style="margin-right: 15px; font-size: 15px; color: #222222;">{{item.customerName}}</span>
+                    <el-select v-model="item.userId" placeholder="璇烽�夋嫨">
+                        <el-option
+                                v-for="(item, index) in item.memberList"
+                                :key="index"
+                                :label="item.name"
+                                :value="item.id" />
+                    </el-select>
+                </div>
             </el-form-item>
         </el-form>
     </GlobalWindow>
@@ -27,46 +32,58 @@
 <script>
   import GlobalWindow from '@/components/common/GlobalWindow'
   import BaseOpera from '@/components/base/BaseOpera'
-  import { getUserList } from '@/api/system/user'
+  import { getNoticeCustomerData, downloadCallFeeDoc, sendSmsEmail } from '@/api/ywContractBill'
   export default {
     name: "call",
     components: { GlobalWindow },
     extends: BaseOpera,
     data() {
       return {
-        info: null,
+        ids: null,
         form: {
-          type: [],
-          userId: ''
-        },
-        rules: {
-          type: [{ required: true, message: '璇烽�夋嫨', trigger: 'blur' }],
-          userId: [{ required: true, message: '璇烽�夋嫨', trigger: 'blur' }]
+          type: []
         },
         userList: []
       }
     },
-    created () {
-      this.getUser()
-    },
     methods: {
-      open (title, target) {
+      open (title, ids) {
         this.title = title
-        this.info = target
+        this.ids = ids
+        this.form.type = []
+        this.userList = []
         this.visible = true
+        this.getUser()
       },
-        getUser() {
-          getUserList({})
-            .then(res => {
-              this.userList = res
-            })
-        },
+      downloadFile() {
+        downloadCallFeeDoc(this.ids)
+          .then(response => {
+            this.download(response)
+          })
+          .catch(e => {
+            this.$tip.apiFailed(e)
+          })
+      },
+      getUser() {
+        getNoticeCustomerData(this.ids)
+          .then(res => {
+            this.userList = res
+          })
+      },
       confirm() {
-        this.$refs.paramRef.validate((valid) => {
-          if (!valid) {
-            return
+        if (this.form.type.length === 0) return this.$message.warning('閫氱煡鏂瑰紡涓嶈兘涓虹┖')
+        let arr = this.userList.map(item => {
+          return {
+            billId: item.billId,
+            sendEmail: this.form.type.includes('閭欢') ? 1 : 0,
+            sendSms: this.form.type.includes('鐭俊') ? 1 : 0,
+            userId: item.userId
           }
         })
+        sendSmsEmail(arr).then(res => {
+          this.$message.success('鍙戦�佹垚鍔燂紒')
+          this.visible = false
+        })
       }
     }
   }
diff --git a/admin/src/views/finance/overdueBills.vue b/admin/src/views/finance/overdueBills.vue
index fd8ad9a..41c000b 100644
--- a/admin/src/views/finance/overdueBills.vue
+++ b/admin/src/views/finance/overdueBills.vue
@@ -7,10 +7,14 @@
                 <div class="tab" :class="{ active: billType === 1 }" @click="tabsClick(1)">閫炬湡浠樻璐﹀崟</div>
             </div>
             <div class="btns">
-                <el-button @click="$refs.call.open('鎵归噺鍌即')">鎵归噺鍌即</el-button>
+                <el-button :disabled="ids.length === 0" @click="batchCall">鎵归噺鍌即</el-button>
             </div>
         </div>
-        <el-table v-loading="loading" :data="list" stripe>
+        <el-table v-loading="loading" :data="list" @selection-change="handleSelectionChange" stripe>
+            <el-table-column
+                type="selection"
+                width="55">
+            </el-table-column>
             <el-table-column prop="customerName" label="瀹㈡埛鍚嶇О" min-width="100" show-overflow-tooltip />
             <el-table-column label="鎴块棿" min-width="170" show-overflow-tooltip>
                 <template slot-scope="{row}">
@@ -64,14 +68,14 @@
             </el-table-column>
             <el-table-column label="鐭俊鍙戦�佺姸鎬�" min-width="100" fixed="right" show-overflow-tooltip>
                 <template slot-scope="{row}">
-                    <span v-if="row.status === 0">寮�鍚�</span>
-                    <span v-if="row.status === 1" style="color: red;">鍏抽棴</span>
+                    <span v-if="row.isSendSms === 0">鍚�</span>
+                    <span v-if="row.isSendSms === 1">鏄�</span>
                 </template>
             </el-table-column>
             <el-table-column label="閭欢鍙戦�佺姸鎬�" min-width="100" fixed="right" show-overflow-tooltip>
                 <template slot-scope="{row}">
-                    <span v-if="row.status === 0">寮�鍚�</span>
-                    <span v-if="row.status === 1" style="color: red;">鍏抽棴</span>
+                    <span v-if="row.isSendEmail === 0">鍚�</span>
+                    <span v-if="row.isSendEmail === 1">鏄�</span>
                 </template>
             </el-table-column>
             <el-table-column label="鎿嶄綔" min-width="120" fixed="right">
@@ -86,7 +90,7 @@
         <Edit ref="EditRef" @success="getList" />
         <Detail ref="DetailRef" @success="getList" />
         <BullEditFu ref="BullEditFu" @success="getList" />
-        <Call ref="call" @success="getList" />
+        <BatchCall ref="batchCall" @success="getList" />
     </div>
 </template>
 
@@ -96,7 +100,7 @@
   import Edit from './components/bullEdit.vue'
   import BullEditFu from './components/bullEditFu.vue'
   import Detail from './components/bullDetail.vue'
-  import Call from './components/call.vue'
+  import BatchCall from './components/batchCall.vue'
   import { fetchList } from '@/api/ywContractBill'
   export default {
     components: {
@@ -105,7 +109,7 @@
       Edit,
       Detail,
       BullEditFu,
-      Call
+      BatchCall
     },
     data () {
       return {
@@ -115,6 +119,7 @@
           page: 1,
           total: 0
         },
+        ids: [],
         billType: 0,
         filters: {
           status: 0
@@ -153,6 +158,13 @@
       this.getList()
     },
     methods: {
+      batchCall() {
+        if (!this.ids) return this.$message.warning('璇峰厛閫夋嫨璐﹀崟')
+        this.$refs.batchCall.open('鎵归噺鍌即', this.ids)
+      },
+      handleSelectionChange(e) {
+        this.ids = e.map(item => item.id)
+      },
       addOpen () {
         if (this.billType === 0) {
           this.$refs.EditRef.open('鍒涘缓鏀舵璐﹀崟')
@@ -178,9 +190,6 @@
         }).then(res => {
           this.loading = false
           this.list = res.records || []
-          this.list.forEach(item => {
-            item.statusName = item.status === 1 ? '鎹熷潖' : item.status === 2 ? '鎶ュ簾' : '姝e父'
-          })
           this.pagination.total = res.total || 0
         }, () => {
           this.loading = false

--
Gitblit v1.9.3