From a2299a6d4a6f99e9c11132138f5d3e9ec68f03ea Mon Sep 17 00:00:00 2001
From: jiangping <jp@doumee.com>
Date: 星期五, 06 六月 2025 19:19:34 +0800
Subject: [PATCH] 开发更新

---
 admin/src/views/finance/components/bullDetail.vue |  309 +++++++++++++++++++++++++++++++++++++--------------
 1 files changed, 223 insertions(+), 86 deletions(-)

diff --git a/admin/src/views/finance/components/bullDetail.vue b/admin/src/views/finance/components/bullDetail.vue
index 8eec8dd..70cfe50 100644
--- a/admin/src/views/finance/components/bullDetail.vue
+++ b/admin/src/views/finance/components/bullDetail.vue
@@ -1,145 +1,276 @@
 <template>
-  <GlobalWindow :title="'璐﹀崟璇︽儏'" :visible.sync="visible" :confirm-working="isWorking" @close="close"
+  <GlobalWindow :title="'璐﹀崟璇︽儏'" :withFooter="false" :visible.sync="visible" :confirm-working="isWorking" @close="close"
     @confirm="confirm">
-    <div class="home_title">
-      <div class="left">
-        <span class="mr10">浠樻鏂癸細xxx</span>
-        <span class="status">status</span>
+    <div style="width: 100%; position: sticky; top: 0; left: 0; z-index: 999; background: #ffffff;">
+      <div class="home_title">
+        <div class="left">
+          <span class="mr10">{{info.billType === 0 ? '鏀舵鏂�' : '浠樻鏂�'}}锛歿{info.customerName}}</span>
+          <el-tag type="success" v-if="info.status === 0">寮�鍚�</el-tag>
+          <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.id])" v-if="info.isOverdue === 1 && info.billType === 0">鍙戦�佺即璐归�氱煡</el-button>
+          <el-button plain type="primary" v-if="![1].includes(info.payStatus)" @click="$refs.flowingWater.open('鍒涘缓鏀舵敮娴佹按', {
+            billType: returnBillType(),
+            billId: info.id,
+            costType: info.costType,
+            receivableFee: Math.abs(info.needReceivableFee),
+            costTypeName: returnText(info.costType),
+            contractCode: info.contractCode,
+            contractId: info.contractId,
+            startDate: info.startDate,
+            endDate: info.endDate,
+            multifileList: [],
+            date: `${info.startDate} ~ ${info.endDate}`,
+            companyId: info.companyId,
+            companyName: info.companyName,
+            actReceivableFee: Math.abs(info.needReceivableFee),
+            needReceivableFeeCopy: info.needReceivableFee
+          })">鏂板缓鏀舵敮娴佹按</el-button>
+        </div>
       </div>
-      <el-button plain type="primary">鏂板缓鏀舵敮娴佹按</el-button>
-    </div>
-    <div class="remark">
-      <div class="item">
-        <div class="la">璐﹀崟鐘舵��</div>
-        <div class="val">宸茬粨娓�</div>
+      <div class="line"></div>
+      <div class="main">
+        <div class="list" style="background: rgba(0,0,0,0); padding: 0; margin-bottom: 0;">
+          <div class="item" style="flex: 1;">
+            <div class="la">缁撴竻鐘舵��</div>
+            <div class="val" style="margin-top: 10px;" v-if="info.payStatus === 0">寰呮敹娆�</div>
+            <div class="val" style="margin-top: 10px;" v-if="info.payStatus === 1">宸茬粨娓�</div>
+            <div class="val" style="margin-top: 10px;" v-if="info.payStatus === 2">閮ㄥ垎缁撴竻</div>
+            <div class="val" style="margin-top: 10px;" v-if="info.payStatus === 3">寰呬粯娆�</div>
+            <div class="val" style="margin-top: 10px;" v-if="info.payStatus === 4">寰呴��娆�</div>
+            <div class="val" style="margin-top: 10px;" v-if="info.payStatus === 5">宸插叧闂�</div>
+          </div>
+          <div class="item" style="flex: 1;">
+            <div class="la">搴攞{info.billType === 0 ? '鏀�' : '浠�'}}閲戦锛堝厓锛�</div>
+            <div class="val" style="margin-top: 10px;">{{info.receivableFee}}</div>
+          </div>
+          <div class="item" style="flex: 1;">
+            <div class="la">瀹瀧{info.billType === 0 ? '鏀�' : '浠�'}}閲戦锛堝厓锛�</div>
+            <div class="val" style="margin-top: 10px;">{{info.actReceivableFee}}</div>
+          </div>
+          <div class="item" style="flex: 1;">
+            <template v-if="info.billType === 1">
+              <div class="la">闇�浠橀噾棰濓紙鍏冿級</div>
+            </template>
+            <div class="la" v-else>闇�{{info.needReceivableFee > 0 ? '鏀�' : '浠�'}}閲戦锛堝厓锛�</div>
+            <div class="val" style="margin-top: 10px;">{{Math.abs(info.needReceivableFee)}}</div>
+          </div>
+          <div class="item" style="flex: 1;">
+            <div class="la">搴攞{info.billType === 0 ? '鏀�' : '浠�'}}鏃ユ湡</div>
+            <div class="val" style="margin-top: 10px;">{{info.planPayDate}}</div>
+          </div>
+        </div>
       </div>
-    </div>
-    <div class="tabs">
-      <div class="tab" :class="{ active: activeTabs == 0 }" @click="tabsClick(0)">鍚堝悓淇℃伅</div>
-      <div class="tab" :class="{ active: activeTabs == 1 }" @click="tabsClick(1)">鍏宠仈璐﹀崟</div>
-      <div class="tab" :class="{ active: activeTabs == 2 }" @click="tabsClick(2)">鎿嶄綔璁板綍</div>
+      <div class="tabs">
+        <div class="tab" :class="{ active: activeTabs == 0 }" @click="tabsClick(0)">鍩虹淇℃伅</div>
+        <div class="tab" :class="{ active: activeTabs == 2 }" @click="tabsClick(2)">鏀舵敮娴佹按</div>
+      </div>
     </div>
     <div class="main">
       <div class="title">鍩虹淇℃伅</div>
-      <div class="list">
+      <div class="list" style="background: rgba(0,0,0,0); padding: 0;">
         <div class="item">
-          <div class="la">璐﹀崟绫诲瀷</div>
-          <div class="val">{{ info.aaa }}</div>
+          <div class="la">璐圭敤绫诲瀷</div>
+          <div class="val">{{returnText(info.costType)}}</div>
         </div>
         <div class="item">
           <div class="la">璁¤垂鍛ㄦ湡</div>
-          <div class="val">{{ info.aaa }}</div>
+          <div class="val">{{info.startDate}} ~ {{info.endDate}}</div>
         </div>
         <div class="item">
           <div class="la">璐﹀崟閲戦(鍏�)</div>
-          <div class="val">{{ info.aaa }}</div>
+          <div class="val">{{info.totleFee}}</div>
         </div>
         <div class="item">
           <div class="la">璐﹀崟缂栧彿</div>
-          <div class="val">{{ info.aaa }}</div>
+          <div class="val">{{info.code}}</div>
         </div>
         <div class="item">
           <div class="la">鍚堝悓缂栧彿</div>
-          <div class="val">{{ info.aaa }}</div>
+          <div class="val" style="color: #2080f7; cursor: pointer;" @click="handleDetail(info.contractId)">{{info.contractCode}}</div>
         </div>
         <div class="item">
           <div class="la">鍒涘缓鏃堕棿</div>
-          <div class="val">{{ info.aaa }}</div>
+          <div class="val">{{info.createDate}}</div>
         </div>
         <div class="item">
           <div class="la">浠樻鏂�</div>
-          <div class="val">{{ info.aaa }}</div>
+          <div class="val">{{info.customerName}}</div>
         </div>
         <div class="item">
           <div class="la">缁忓姙浜�</div>
-          <div class="val">{{ info.aaa }}</div>
+          <div class="val">{{info.realname}}</div>
         </div>
         <div class="item">
           <div class="la">鎵�灞炲叕鍙�</div>
-          <div class="val">{{ info.aaa }}</div>
+          <div class="val">{{info.companyName}}</div>
         </div>
         <div class="item">
           <div class="la">璐﹀崟澶囨敞</div>
-          <div class="val">{{ info.aaa }}</div>
+          <div class="val">{{info.remark}}</div>
         </div>
+        <div class="item"></div>
+        <div class="item"></div>
       </div>
       <div class="title">鎴挎簮淇℃伅</div>
-      <div class="list">
-        <div class="item">
-          <div class="la">椤圭洰鍚嶇О</div>
-          <div class="val">{{ info.aaa }}</div>
-        </div>
-        <div class="item">
-          <div class="la">妤煎畤鍚嶇О</div>
-          <div class="val">{{ info.aaa }}</div>
-        </div>
-        <div class="item">
-          <div class="la">妤煎眰/鎴垮彿</div>
-          <div class="val">{{ info.aaa }}</div>
-        </div>
-        <div class="item">
-          <div class="la">闈㈢Н</div>
-          <div class="val">{{ info.aaa }}</div>
-        </div>
+      <div class="list" style="background: rgba(0,0,0,0); padding: 0;">
+        <el-table
+          :data="info.ywContractRoomList"
+          border
+          style="width: 100%">
+          <el-table-column
+            prop="projectName"
+            label="椤圭洰鍚嶇О">
+          </el-table-column>
+          <el-table-column
+            prop="floorName"
+            label="妤煎畤鍚嶇О">
+          </el-table-column>
+          <el-table-column
+            label="妤煎眰/鎴垮彿">
+            <template slot-scope="{row}">
+              {{row.buildingName}}/{{row.roomName}}
+            </template>
+          </el-table-column>
+          <el-table-column
+            label="闈㈢Н">
+            <template slot-scope="{row}">
+              {{row.area}}銕�
+            </template>
+          </el-table-column>
+        </el-table>
       </div>
-      <div class="title">绉熷淇℃伅</div>
-      <div class="list">
-        <div class="item">
-          <div class="la">绉熷</div>
-          <div class="val">{{ info.aaa }}</div>
-        </div>
-        <div class="item">
-          <div class="la">缁忓姙浜�</div>
-          <div class="val">{{ info.aaa }}</div>
-        </div>
+      <div class="title">鏀舵敮娴佹按</div>
+      <div class="list" style="background: rgba(0,0,0,0); padding: 0;">
+        <el-table
+          :data="info.ywContractRevenueList"
+          border
+          style="width: 100%">
+          <el-table-column
+            label="娴佹按绫诲瀷">
+            <template slot-scope="{row}">
+              <span v-if="row.revenueType === 0">鏀跺叆</span>
+              <span v-if="row.revenueType === 1">鏀嚭</span>
+            </template>
+          </el-table-column>
+          <el-table-column
+            prop="customerName"
+            label="瀵规柟鍗曚綅鍚嶇О">
+          </el-table-column>
+          <el-table-column
+            label="璐圭敤绫诲瀷">
+            <template slot-scope="{row}">
+              <span v-if="row.payType === 0">鐜伴噾</span>
+              <span v-if="row.payType === 1">缃戦摱杞处</span>
+              <span v-if="row.payType === 2">POS鏈�</span>
+              <span v-if="row.payType === 3">鏀粯瀹�</span>
+              <span v-if="row.payType === 4">寰俊</span>
+              <span v-if="row.payType === 5">杞处鏀エ</span>
+              <span v-if="row.payType === 6">鍏朵粬</span>
+            </template>
+          </el-table-column>
+          <el-table-column
+            prop="actPayDate"
+            label="鍏ヨ处鏃ユ湡">
+          </el-table-column>
+          <el-table-column
+            prop="actReceivableFee"
+            label="鍙戠敓棰�">
+          </el-table-column>
+          <el-table-column
+            prop="createDate"
+            label="鍒涘缓鏃堕棿">
+          </el-table-column>
+          <el-table-column
+            prop="remark"
+            label="澶囨敞">
+          </el-table-column>
+        </el-table>
       </div>
-      <div class="title">绉熻祦鏉℃</div>
-      <div class="list">
-        <div class="item">
-          <div class="la">鎶奸噾閲戦</div>
-          <div class="val">{{ info.aaa }}</div>
-        </div>
-        <div class="item">
-          <div class="la">浠樻鏂瑰紡</div>
-          <div class="val">{{ info.aaa }}</div>
-        </div>
-        <div class="item">
-          <div class="la">鍏嶇鏈�</div>
-          <div class="val">{{ info.aaa }}</div>
-        </div>
-      </div>
-      <el-table :data="info.list" stripe>
-        <el-table-column prop="" label="寮�濮嬫棩鏈�" min-width="100" show-overflow-tooltip />
-        <el-table-column prop="" label="缁撴潫鏃ユ湡" min-width="100" show-overflow-tooltip />
-        <el-table-column prop="" label="鍚堝悓鍗曚环" min-width="100" show-overflow-tooltip />
-        <el-table-column prop="" label="浠樻鎻愬墠澶╂暟" min-width="100" show-overflow-tooltip />
-      </el-table>
     </div>
+    <!--  鍒涘缓娴佹按  -->
+    <FlowingWater ref="flowingWater" @success="getDetails" @refresh="Refresh" />
+    <!--  鍚堝悓璇︽儏  -->
+    <ContractDetail ref="ContractDetailRef" />
+    <!--  鍙戦�佺即璐归�氱煡  -->
+    <Call ref="call" />
   </GlobalWindow>
 </template>
 
 <script>
 import GlobalWindow from '@/components/common/GlobalWindow'
 import BaseOpera from '@/components/base/BaseOpera'
+import FlowingWater from './flowingWater'
+import Call from './call'
+import ContractDetail from '../../contract/components/contractDetail'
+import { getYwContractBillById } from '@/api/contract'
 export default {
   components: {
-    GlobalWindow
+    GlobalWindow,
+    FlowingWater,
+    ContractDetail,
+    Call
   },
   extends: BaseOpera,
   data() {
     return {
       id: '',
-      visible: true,
+      visible: false,
       activeTabs: '',
-      info: {}
+      info: {},
+      tableData: []
     }
   },
   methods: {
+    open (title, id) {
+      this.title = title
+      this.id = id
+      this.getDetails()
+    },
+    handleDetail (id) {
+      this.$refs.ContractDetailRef.open('鍚堝悓璇︽儏', id)
+    },
+    getDetails () {
+      getYwContractBillById(this.id)
+        .then(res => {
+          this.info = res
+          this.visible = true
+        })
+    },
+    returnBillType () {
+      if (this.info.payStatus === 0) {
+        return 0
+      } else if (this.info.payStatus === 2) {
+        return this.info.billType
+      } else if ([3,4].includes(this.info.payStatus)) {
+        return 1
+      }
+    },
+    Refresh () {
+      this.$emit('success')
+    },
     tabsClick(val) {
       this.activeTabs = val
     },
-    getDetail() {
-
+    returnText (e) {
+      if (e === 0) {
+        return '绉熻祦璐�'
+      } else if (e === 1) {
+        return '鐗╀笟璐�'
+      } else if (e === 2) {
+        return '绉熻祦鎶奸噾'
+      } else if (e === 3) {
+        return '鐗╀笟鎶奸噾'
+      } else if (e === 4) {
+        return '姘寸數璐�'
+      } else if (e === 5) {
+        return '鏉傞」璐�'
+      } else if (e === 6) {
+        return '鍏朵粬'
+      } else if (e === 7) {
+        return '淇濊瘉閲�'
+      }
     }
   }
 }
@@ -201,6 +332,12 @@
   }
 }
 
+.line {
+  width: 100%;
+  margin: 15px 0;
+  border-bottom: 1px dashed #eaeaea;
+}
+
 .main {
   .title {
     font-weight: 500;
@@ -212,18 +349,18 @@
   .list {
     display: flex;
     flex-wrap: wrap;
-    background: #F7F7F7;
+    /*background: #F7F7F7;*/
     border-radius: 2px;
-    padding: 15px 20px;
+    padding: 0 20px;
     margin-bottom: 20px;
 
     .item {
-      width: 25%;
-      margin-bottom: 16px;
+      flex: 25%;
+      margin-bottom: 20px;
 
       .la {
         color: #7f7f7f;
-        margin-top: 2px;
+        margin-bottom: 5px;
       }
     }
   }

--
Gitblit v1.9.3