Shannon_mu 3 роки тому
батько
коміт
9d1ee184c0
29 змінених файлів з 2293 додано та 174 видалено
  1. 1 1
      operationSupport/public/index.html
  2. 2 2
      operationSupport/src/assets/css/public-style.scss
  3. BIN
      operationSupport/src/assets/img/menuicon/icon_tishi_fuxian@2x.png
  4. 23 20
      operationSupport/src/components/common/table.vue
  5. 54 0
      operationSupport/src/views/assetManagement/housPublic.js
  6. 2 11
      operationSupport/src/views/assetManagement/housingManagement/index.vue
  7. 35 19
      operationSupport/src/views/assetManagement/housingManagement/saveEdits.vue
  8. 11 12
      operationSupport/src/views/assetManagement/shopManagement/index.vue
  9. 58 14
      operationSupport/src/views/assetManagement/shopManagement/saveEdits.vue
  10. 0 0
      operationSupport/src/views/businessManagement/InvestmentResources/index.vue
  11. 0 0
      operationSupport/src/views/businessManagement/contractManagement/index.vue
  12. 0 0
      operationSupport/src/views/businessManagement/enterpriseManagement/index.vue
  13. 0 0
      operationSupport/src/views/businessManagement/opportunityManagement/index.vue
  14. 0 0
      operationSupport/src/views/businessManagement/rentalAndSale/index.vue
  15. 8 7
      operationSupport/src/views/payService/billingRules/index.vue
  16. 38 85
      operationSupport/src/views/payService/billingRules/stepPage/newAdd.vue
  17. 92 0
      operationSupport/src/views/payService/billingRules/stepPage/style.scss
  18. 382 0
      operationSupport/src/views/payService/depositManagement/index.vue
  19. 78 0
      operationSupport/src/views/payService/depositManagement/stepPage/add.vue
  20. 158 0
      operationSupport/src/views/payService/depositManagement/stepPage/collections.vue
  21. 133 0
      operationSupport/src/views/payService/depositManagement/stepPage/details.vue
  22. 112 0
      operationSupport/src/views/payService/depositManagement/stepPage/refund.vue
  23. 377 0
      operationSupport/src/views/payService/leaseBill/index.vue
  24. 179 0
      operationSupport/src/views/payService/leaseBill/stepPage/bulk.vue
  25. 160 0
      operationSupport/src/views/payService/leaseBill/stepPage/details.vue
  26. 230 0
      operationSupport/src/views/payService/leaseBill/stepPage/single.vue
  27. 108 0
      operationSupport/src/views/payService/leaseBill/stepPage/temporary.vue
  28. 2 2
      operationSupport/src/views/payService/propertyFee/index.vue
  29. 50 1
      operationSupport/src/views/payService/systemSetup/stepPage/paymentSetup.vue

+ 1 - 1
operationSupport/public/index.html

@@ -14,7 +14,7 @@
   <meta http-equiv="X-UA-Compatible" content="IE=edge">
   <meta name="viewport" content="width=device-width,initial-scale=1,minimum-scale=1,maximum-scale=1,user-scalable=no">
   <link rel="icon" href="<%= BASE_URL %>favicon.ico" type="image/x-icon" />
-  <link rel="stylesheet" href="//at.alicdn.com/t/font_2251662_01meg93yw7ur.css">
+  <link rel="stylesheet" href="//at.alicdn.com/t/font_2251662_7brnwath4i.css">
   <title>智慧社区管理平台</title>
   <meta http-equiv="X-UA-Compatible" content="IE=edge">
   <meta name="viewport" content="initial-scale=1.0, user-scalable=no, width=device-width">

+ 2 - 2
operationSupport/src/assets/css/public-style.scss

@@ -7,10 +7,10 @@ $redColor: #ff7171;
 $ashColor: #dcdcdc;
 
 @function vw($size) {
-  @return ($size/19.2) vw;
+  @return ($size/19.2) * 1vw;
 }
 @function vh($size) {
-  @return ($size/10.8) vh;
+  @return ($size/10.8) * 1vh;
 }
 $base_fontSize: 100;
 @function rem($px) {

BIN
operationSupport/src/assets/img/menuicon/icon_tishi_fuxian@2x.png


+ 23 - 20
operationSupport/src/components/common/table.vue

@@ -90,16 +90,19 @@
                         :disabled="item.format(scope.row[item.prop]).length < 2"
                         :content="item.format(scope.row[item.prop])"
                     >
-                        <p @click="item.click ? item.click() : null">
-                            {{
+                        <p
+                            @click="item.click ? item.click() : null"
+                            v-html="
                                 item.format(scope.row[item.prop], scope.row) ||
                                 (item.format(scope.row[item.prop], scope.row) === 0 ? 0 : item.empty ? '' : '-')
-                            }}
-                        </p>
+                            "
+                        ></p>
                     </el-tooltip>
-                    <p v-else-if="item.format && !isIE" @click="item.click ? item.click() : null">
-                        {{ item.format(scope.row[item.prop]) || (item.format(scope.row[item.prop]) == 0 ? 0 : '-') }}
-                    </p>
+                    <p
+                        v-else-if="item.format && !isIE"
+                        @click="item.click ? item.click() : null"
+                        v-html="item.format(scope.row[item.prop]) || (item.format(scope.row[item.prop]) == 0 ? 0 : '-')"
+                    ></p>
                     <!-- <p
                         v-else-if="item.format && isIE"          
                         class="item" effect="light" placement="top-start"  
@@ -120,13 +123,16 @@
                         :disabled="scope.row[item.prop] && scope.row[item.prop].length < 2"
                         :content="scope.row[item.prop]"
                     >
-                        <p @click="item.click ? item.click() : null">
-                            {{ scope.row[item.prop] || (scope.row[item.prop] === 0 ? 0 : item.empty ? '' : '-') }}
-                        </p>
+                        <p
+                            @click="item.click ? item.click() : null"
+                            v-html="scope.row[item.prop] || (scope.row[item.prop] === 0 ? 0 : item.empty ? '' : '-')"
+                        ></p>
                     </el-tooltip>
-                    <p v-else @click="item.click ? item.click() : null">
-                        {{ scope.row[item.prop] || (scope.row[item.prop] === 0 ? 0 : item.empty ? '' : '-') }}
-                    </p>
+                    <p
+                        v-else
+                        @click="item.click ? item.click() : null"
+                        v-html="scope.row[item.prop] || (scope.row[item.prop] === 0 ? 0 : item.empty ? '' : '-')"
+                    ></p>
                     <!-- <p v-else-if="item.fixToolTip" v-tip.same :data-txt="scope.row[item.prop]" @click="item.click ? item.click() : null">
                         {{ scope.row[item.prop] || (scope.row[item.prop] === 0 ? 0 : item.empty ? '' : '-') }}
                     </p> -->
@@ -452,17 +458,14 @@ export default {
             }
         }
     }
+    /deep/ .el-table-column--selection .cell {
+        padding-left: 0 !important;
+        padding-right: 10px !important;
+    }
     /deep/ .el-table__header .el-table-column--selection {
         .cell {
             padding-left: 0;
         }
-        //  .el-checkbox{
-        //     margin-left:0;
-        //     // margin-right:0;
-        //     &:last-of-type{
-        //         margin-right: 0;
-        //     }
-        // }
     }
 }
 .foot {

+ 54 - 0
operationSupport/src/views/assetManagement/housPublic.js

@@ -0,0 +1,54 @@
+export const residenceTypeArr = {
+  residence: [
+    {
+      label: '高档住宅',
+      value: 1
+    },
+    {
+      label: '普通住宅',
+      value: 2
+    },
+    {
+      label: '公寓',
+      value: 3
+    },
+    {
+      label: '别墅',
+      value: 4
+    },
+    {
+      label: '复式',
+      value: 5
+    },
+  ],
+  shops: [
+    {
+      label: '办公',
+      value: 6
+    },
+    {
+      label: '酒店',
+      value: 7
+    },
+    {
+      label: '厂房',
+      value: 8
+    },
+    {
+      label: '商场',
+      value: 9
+    },
+    {
+      label: '综合体',
+      value: 10
+    },
+    {
+      label: '仓库',
+      value: 11
+    },
+    {
+      label: '广告位',
+      value: 12
+    }
+  ]
+}

+ 2 - 11
operationSupport/src/views/assetManagement/housingManagement/index.vue

@@ -4,7 +4,7 @@
         <div class="content-right" v-if="!showaddDialog">
             <div class="search">
                 <el-input clearable placeholder="房屋号" class="search-input" v-trim v-model="mixins_query.roomNumber"></el-input>
-                <el-select v-model="mixins_query.useStatus" clearable placeholder="请选择社区名称">
+                <el-select v-model="mixins_query.useStatus" clearable placeholder="使用状态">
                     <el-option v-for="item in statusOptions" :label="item.label" :value="item.val" :key="item">{{ item.label }}</el-option>
                 </el-select>
                 <el-button
@@ -130,16 +130,7 @@ export default {
                 },
                 {
                     label: '房屋类型',
-                    prop: 'buildingType',
-                    format(val) {
-                        if (val == 1) {
-                            return '住宅';
-                        } else if (val == 2) {
-                            return '商用';
-                        } else {
-                            return '--';
-                        }
-                    }
+                    prop: 'buildingTypeDict',
                 },
                 {
                     label: '使用状态',

+ 35 - 19
operationSupport/src/views/assetManagement/housingManagement/saveEdits.vue

@@ -27,6 +27,16 @@
                     <el-form-item label="房屋号" prop="roomNumber">
                         <el-input v-model="ruleForm.roomNumber" placeholder="请输入房屋号"></el-input>
                     </el-form-item>
+                    <el-form-item label="住宅类型" prop="residenceType">
+                        <el-select v-model="ruleForm.residenceType" placeholder="请选择住宅类型" class="width100">
+                            <el-option
+                                v-for="(item, index) in residenceTypeArr"
+                                :label="item.label"
+                                :value="item.value"
+                                :key="index"
+                            ></el-option>
+                        </el-select>
+                    </el-form-item>
                     <el-form-item label="房屋编号">
                         <el-input v-model="ruleForm.assetNumber" placeholder="请输入房屋编号"></el-input>
                     </el-form-item>
@@ -80,8 +90,15 @@
                         </el-select>
                     </el-form-item>
 
+                    <el-form-item label="租售类型" prop="salesType">
+                        <el-select v-model="ruleForm.salesType" placeholder="请选择租售类型" class="width100">
+                            <el-option label="可租可售" :value="1"></el-option>
+                            <el-option label="只租" :value="2"></el-option>
+                            <el-option label="只售" :value="3"></el-option>
+                        </el-select>
+                    </el-form-item>
                     <el-form-item label="租售状态" prop="salesStatus">
-                        <el-select v-model="ruleForm.salesStatus" placeholder="请选择装修性质" class="width100">
+                        <el-select v-model="ruleForm.salesStatus" placeholder="请选择租售状态" class="width100">
                             <el-option label="未租售" :value="0"></el-option>
                             <el-option label="已售" :value="1"></el-option>
                             <el-option label="已租" :value="2"></el-option>
@@ -102,19 +119,12 @@
                             <el-option label="豪华装修" :value="5"></el-option>
                         </el-select>
                     </el-form-item>
-                    <el-form-item label="备注信息">
-                        <el-input
-                            type="textarea"
-                            :rows="4"
-                            placeholder="请输入备注信息"
-                            v-model="ruleForm.remarks"
-                            maxlength="300"
-                            show-word-limit
-                        >
-                        </el-input>
-                    </el-form-item>
                 </div>
             </div>
+            <el-form-item label="备注信息">
+                <el-input type="textarea" :rows="4" placeholder="请输入备注信息" v-model="ruleForm.remarks" maxlength="300" show-word-limit>
+                </el-input>
+            </el-form-item>
         </el-form>
         <div style="text-align: right">
             <el-button @click="cancelSaving">取消</el-button>
@@ -123,6 +133,7 @@
     </div>
 </template>
 <script>
+import { residenceTypeArr } from '../housPublic';
 export default {
     props: {
         params: {
@@ -159,16 +170,21 @@ export default {
                 housingType: '', //房屋户型
                 decorateProperties: '', //装修性质
                 salesStatus: '', //租售状态
+                residenceType: '', //商业住户类型
+                salesType: '', //租售类型
                 remarks: '' //备注
             },
             rules: {
-                communityId: [this.$valid.selectRequired('请选择社区')],
-                roomNumber: [{ required: true, message: '请输入房屋号', trigger: 'change' }],
-                buildingId: [this.$valid.selectRequired('请选择楼栋')],
-                floorNumber: [this.$valid.selectRequired('请选择楼层')],
-                buildingType: [this.$valid.selectRequired('请选择房屋类型')],
-                salesStatus: [this.$valid.selectRequired('请选择房屋状态')]
-            }
+                communityId: [this.$valid.selectRequired('社区')],
+                roomNumber: [this.$valid.inputRequired('房屋号')],
+                buildingId: [this.$valid.selectRequired('楼栋')],
+                floorNumber: [this.$valid.selectRequired('楼层')],
+                buildingType: [this.$valid.selectRequired('房屋类型')],
+                residenceType: [this.$valid.selectRequired('住宅类型')],
+                salesStatus: [this.$valid.selectRequired('租售状态')],
+                salesType: [this.$valid.selectRequired('租售类型')]
+            },
+            residenceTypeArr: residenceTypeArr.residence
         };
     },
     components: {},

+ 11 - 12
operationSupport/src/views/assetManagement/shopManagement/index.vue

@@ -4,7 +4,7 @@
         <div class="content-right">
             <div class="search">
                 <el-input clearable placeholder="商铺号" class="search-input" v-trim v-model="mixins_query.roomNumber"></el-input>
-                <el-select v-model="mixins_query.useStatus" clearable placeholder="请选择社区名称">
+                <el-select v-model="mixins_query.useStatus" clearable placeholder="使用状态">
                     <el-option v-for="item in statusOptions" :label="item.label" :value="item.val" :key="item">{{ item.label }}</el-option>
                 </el-select>
                 <el-button
@@ -103,7 +103,7 @@ export default {
                     prop: 'unitName'
                 },
                 {
-                    label: '房屋号',
+                    label: '商铺号',
                     prop: 'roomNumber'
                 },
                 {
@@ -130,16 +130,15 @@ export default {
                 },
                 {
                     label: '房屋类型',
-                    prop: 'buildingType',
-                    format(val) {
-                        if (val == 1) {
-                            return '住宅';
-                        } else if (val == 2) {
-                            return '商用';
-                        } else {
-                            return '--';
-                        }
-                    }
+                    prop: 'buildingTypeDict',
+                },
+                {
+                    label: '商业类型',
+                    prop: 'residenceType'
+                },
+                {
+                    label: '租售状态',
+                    prop: 'salesStatus'
                 },
                 {
                     label: '使用状态',

+ 58 - 14
operationSupport/src/views/assetManagement/shopManagement/saveEdits.vue

@@ -24,13 +24,26 @@
                         </el-select>
                     </el-form-item>
                     <el-form-item label="房屋号" prop="roomNumber">
-                        <el-input v-model="ruleForm.roomNumber"></el-input>
+                        <el-input v-model="ruleForm.roomNumber" placeholder="请输入房屋号"></el-input>
+                    </el-form-item>
+                    <el-form-item label="商业类型" prop="residenceType">
+                        <el-select v-model="ruleForm.residenceType" placeholder="请选择住宅类型" class="width100">
+                            <el-option
+                                v-for="(item, index) in residenceTypeArr"
+                                :label="item.label"
+                                :value="item.value"
+                                :key="index"
+                            ></el-option>
+                        </el-select>
                     </el-form-item>
                     <el-form-item label="房屋编号">
-                        <el-input v-model="ruleForm.assetNumber"></el-input>
+                        <el-input v-model="ruleForm.assetNumber" placeholder="请输入房屋编号"></el-input>
                     </el-form-item>
                     <el-form-item label="使用面积">
-                        <el-input v-model="ruleForm.useArea"></el-input>
+                        <el-input v-model="ruleForm.useArea" placeholder="请输入使用面积"></el-input>
+                    </el-form-item>
+                    <el-form-item label="公摊面积">
+                        <el-input v-model="ruleForm.publicArea" placeholder="请输入公摊面积"></el-input>
                     </el-form-item>
                 </div>
                 <div class="formContent-item">
@@ -60,15 +73,38 @@
                             <el-option label="商用" :value="2"></el-option>
                         </el-select>
                     </el-form-item>
+                    <el-form-item label="租售类型" prop="salesType">
+                        <el-select v-model="ruleForm.salesType" placeholder="请选择租售类型" class="width100">
+                            <el-option label="可租可售" :value="1"></el-option>
+                            <el-option label="只租" :value="2"></el-option>
+                            <el-option label="只售" :value="3"></el-option>
+                        </el-select>
+                    </el-form-item>
+                    <el-form-item label="租售状态" prop="salesStatus">
+                        <el-select v-model="ruleForm.salesStatus" placeholder="请选择租售状态" class="width100">
+                            <el-option label="未租售" :value="0"></el-option>
+                            <el-option label="已售" :value="1"></el-option>
+                            <el-option label="已租" :value="2"></el-option>
+                        </el-select>
+                    </el-form-item>
                     <el-form-item label="建筑面积">
-                        <el-input v-model="ruleForm.buildingArea"></el-input>
+                        <el-input v-model="ruleForm.buildingArea" placeholder="请输入建筑面积"></el-input>
                     </el-form-item>
-                    <el-form-item label="公摊面积">
-                        <el-input v-model="ruleForm.publicArea"></el-input>
+                    <el-form-item label="备注信息">
+                        <el-input
+                            type="textarea"
+                            resize="none"
+                            :rows="3"
+                            v-model="ruleForm.remarks"
+                            maxlength="300"
+                            show-word-limit
+                            placeholder="请输入备注信息"
+                        >
+                        </el-input>
                     </el-form-item>
                 </div>
             </div>
-            <el-row>
+            <!-- <el-row>
                 <el-col :span="12">
                     <el-form-item label="备注信息">
                         <el-input
@@ -83,7 +119,7 @@
                         </el-input>
                     </el-form-item>
                 </el-col>
-            </el-row>
+            </el-row> -->
         </el-form>
         <!-- <div style="text-align: right">
             <el-button type="primary" @click="submitForm('ruleForm')">提交</el-button>
@@ -92,6 +128,7 @@
     </div>
 </template>
 <script>
+import { residenceTypeArr } from '../housPublic';
 export default {
     props: ['params'],
     data() {
@@ -110,15 +147,22 @@ export default {
                 useArea: '', //使用面积
                 buildingArea: '', //建筑面积
                 publicArea: '', //公摊面积
+                salesStatus: '', //租售状态
+                residenceType: '', //商业住户类型
+                salesType: '', //租售类型
                 remarks: '' //备注
             },
             rules: {
-                communityId: [this.$valid.selectRequired('请选择社区')],
-                roomNumber: [{ required: true, message: '请输入房屋号', trigger: 'change' }],
-                buildingId: [this.$valid.selectRequired('请选择楼栋')],
-                floorNumber: [this.$valid.selectRequired('请选择楼层')],
-                buildingType: [this.$valid.selectRequired('请选择房屋类型')]
-            }
+                communityId: [this.$valid.selectRequired('社区')],
+                roomNumber: [this.$valid.inputRequired('房屋号')],
+                buildingId: [this.$valid.selectRequired('楼栋')],
+                floorNumber: [this.$valid.selectRequired('楼层')],
+                buildingType: [this.$valid.selectRequired('房屋类型')],
+                residenceType: [this.$valid.selectRequired('住宅类型')],
+                salesStatus: [this.$valid.selectRequired('租售状态')],
+                salesType: [this.$valid.selectRequired('租售类型')]
+            },
+            residenceTypeArr: residenceTypeArr.shops
         };
     },
     components: {},

+ 0 - 0
operationSupport/src/views/businessManagement/InvestmentResources/index.vue


+ 0 - 0
operationSupport/src/views/businessManagement/contractManagement/index.vue


+ 0 - 0
operationSupport/src/views/businessManagement/enterpriseManagement/index.vue


+ 0 - 0
operationSupport/src/views/businessManagement/opportunityManagement/index.vue


+ 0 - 0
operationSupport/src/views/businessManagement/rentalAndSale/index.vue


+ 8 - 7
operationSupport/src/views/payService/billingRules/index.vue

@@ -100,18 +100,20 @@ export default {
                     label: '费用类型',
                     prop: 'chargeType',
                     format(val) {
-                        if (val == '1') {
+                        if (val == 1) {
                             return '物业费';
-                        } else if (val == '2') {
+                        } else if (val == 2) {
                             return '水费';
-                        } else if (val == '3') {
+                        } else if (val == 3) {
                             return '电费';
-                        } else if (val == '4') {
+                        } else if (val == 4) {
                             return '车位费';
-                        } else if (val == '6') {
+                        } else if (val == 6) {
                             return '卫生费';
-                        } else if (val == '7') {
+                        } else if (val == 7) {
                             return '其他费用';
+                        } else if (val == 8) {
+                            return '租赁费';
                         }
                     }
                 },
@@ -216,7 +218,6 @@ export default {
                     title = '修改收费项目';
                 }
                 this.$store.dispatch('addPopup', {
-                    // url: '/payService/billingRules/stepPage/add.vue',
                     url: '/payService/billingRules/stepPage/newAdd.vue',
                     width: '550px',
                     height: '600px',

+ 38 - 85
operationSupport/src/views/payService/billingRules/stepPage/newAdd.vue

@@ -13,6 +13,7 @@
                 <el-option label="车位费" :value="4"></el-option>
                 <el-option label="卫生费" :value="6"></el-option>
                 <el-option label="其他费用" :value="7"></el-option>
+                <el-option label="租赁费" :value="8"></el-option>
             </el-select>
         </el-form-item>
         <el-form-item label="费用名称" prop="chargeName">
@@ -20,7 +21,7 @@
         </el-form-item>
         <el-form-item label="计费方式" prop="chargeMode">
             <el-select v-model="formData.chargeMode">
-                <template v-if="formData.chargeType == 1">
+                <template v-if="formData.chargeType == 1 || formData.chargeType == 8">
                     <el-option label="固定收费" :value="1"></el-option>
                     <el-option label="价格*面积收费" :value="2"></el-option>
                 </template>
@@ -33,19 +34,21 @@
             </el-select>
         </el-form-item>
         <el-form-item :label="labelActive" prop="chargePrice">
-            <el-input v-model="formData.chargePrice" placeholder="请输入费用名称"></el-input>
+            <div class="form-item-flex">
+                <el-input v-model="formData.chargePrice" placeholder="请输入价格"></el-input>
+            </div>
         </el-form-item>
         <!-- 计费周期除水电费 -->
         <el-form-item label="计费周期" v-if="formData.chargeType !== 2 && formData.chargeType !== 3">
             <div class="form-item-flex">
-                <el-select v-model="formData.chargeCycle" class="select">
+                <el-select v-model="formData.chargeCycle" class="w-50">
                     <el-option :label="item" v-for="item in 12" :value="item" :key="item"></el-option>
                 </el-select>
                 <div class="widthFlex">个月</div>
             </div>
         </el-form-item>
         <!-- 物业费收取滞纳金 -->
-        <el-form-item label="收滞纳金" v-if="formData.chargeType === 1">
+        <el-form-item label="收滞纳金" v-if="formData.chargeType == 1 || formData.chargeType == 8">
             <div class="form-item-flex">
                 <el-input
                     class="input-number"
@@ -73,11 +76,11 @@
                 </el-input>
                 <el-tooltip class="item" effect="light" placement="right">
                     <div slot="content" v-html="lateFeeMsg"></div>
-                    <img src="@/assets/img/menuicon/icon_tishi_zhengchang.png" alt="" />
+                    <img src="@/assets/img/menuicon/icon_tishi_fuxian@2x.png" alt="" />
                 </el-tooltip>
                 <div>欠费时间(>)</div>
                 <el-input
-                    class="input"
+                    class="input110"
                     oninput="value=value.replace(/[^0-9.]/g,'')"
                     v-model="formData.arrearsDays"
                     placeholder="请输入天数"
@@ -85,17 +88,32 @@
             </div>
         </el-form-item>
+        <!-- 租赁费 -->
+        <el-form-item label="递增规则" v-if="formData.chargeType == 8">
+            <div class="form-item-flex">
+                <el-input v-model="formData.increasingYear" class="w150" oninput="value=value.replace(/[^0-9.]/g,'')"> </el-input>
+                <span class="marLR15">年后</span>
+                <el-input
+                    oninput="value=value.replace(/[^0-9.]/g,'')"
+                    class="w150"
+                    v-model="formData.increasingPercentage"
+                    placeholder="每年递增"
+                >
+                </el-input>
+                <span class="marLR15">%</span>
+            </div>
+        </el-form-item>
         <!-- 生成规则除水电费 -->
-        <el-form-item label="生成规则" v-if="formData.chargeType !== 2 && formData.chargeType !== 3">
+        <el-form-item label="生成规则" v-if="formData.chargeType !== 2 && formData.chargeType !== 3 && formData.chargeType !== 8">
             <div class="form-item-flex">
-                <el-select v-model="formData.generationRules">
+                <el-select v-model="formData.generationRules" class="w-50">
                     <el-option label="预生成账单" :value="1"></el-option>
                     <el-option label="后生成账单" :value="2"></el-option>
                 </el-select>
                 <div class="widthFlex">
                     <el-tooltip class="item" effect="light" placement="left">
                         <div slot="content" v-html="rulesFeeMsg"></div>
-                        <img src="@/assets/img/menuicon/icon_tishi_zhengchang.png" alt="" />
+                        <img src="@/assets/img/menuicon/icon_tishi_fuxian@2x.png" alt="" />
                     </el-tooltip>
                 </div>
             </div>
@@ -130,7 +148,9 @@ export default {
                 chargeCycleUnit: 1,
                 generationRules: '',
                 lateFee: 1,
-                remark: ''
+                remark: '',
+                increasingYear: 0,
+                increasingPercentage: ''
             },
             lateFeeMsg: '滞纳金计算规则:</br>月费用*逾期天数*滞纳金标准',
             rulesFeeMsg: `预生成账单:下个月1日,按照设置的计费方式、计费周期,生成后几个月的账单</br>后生成账单:下个月1日,按照设置的计费方式、计费周期,生成前几个月的账单`,
@@ -213,14 +233,19 @@ export default {
                 remark: this.formData.remark,
                 chargePrice: this.formData.chargePrice
             };
-            if (this.formData.chargeType === 1) {
+            if (this.formData.chargeType == 1 || this.formData.chargeType == 8) {
                 installData.lateFee = this.formData.lateFee;
                 installData.arrearsDays = this.formData.arrearsDays;
             }
-            if (this.formData.chargeType !== 2 && this.formData.chargeType !== 3) {
+            if (this.formData.chargeType !== 2 && this.formData.chargeType !== 3 && this.formData.chargeType !== 8) {
                 installData.generationRules = this.formData.generationRules;
                 installData.chargeCycle = this.formData.chargeCycle;
             }
+            if (this.formData.chargeType == 8) {
+                installData.increasingYear = this.formData.increasingYear;
+                installData.increasingPercentage = this.formData.increasingPercentage;
+                installData.chargeCycle = this.formData.chargeCycle;
+            }
             return installData;
         },
         chargeTypeToggle() {
@@ -240,77 +265,5 @@ export default {
 };
 </script>
 <style lang="scss" scoped>
-.just {
-    justify-content: space-between;
-}
-.form-item-flex {
-    display: flex;
-
-    .input {
-        width: 110px;
-        margin: 0 15px 0 12px;
-    }
-    .input-number {
-        width: 110px;
-        /deep/ .el-input__suffix {
-            height: 33px;
-        }
-        /deep/ .el-input--suffix .el-input__inner {
-            padding-right: 50px;
-        }
-        .input-button {
-            line-height: 15px;
-            .button {
-                cursor: pointer;
-                &.no-drop {
-                    cursor: no-drop;
-                    background: #dcdfe6;
-                }
-            }
-            .up {
-                position: absolute;
-                top: 2px;
-                height: 16px;
-                width: 25px;
-                right: -4px;
-                border-radius: 0px 4px 0 0;
-                background: white;
-                border-bottom: 1px solid #dcdfe6;
-                border-left: 1px solid #dcdfe6;
-            }
-            .down {
-                position: absolute;
-                bottom: 1px;
-                height: 16px;
-                width: 25px;
-                right: -4px;
-                background: white;
-                border-radius: 0 0 4px 0;
-                border-top: 1px solid #dcdfe6;
-                border-left: 1px solid #dcdfe6;
-            }
-        }
-    }
-    .input100 {
-        width: 100px;
-    }
-    .select {
-        width: 360px !important;
-    }
-    .el-tooltip {
-        margin: 10px 10px 0 16px;
-        width: 16px;
-        height: 16px;
-    }
-    .widthFlex {
-        flex: 1;
-        text-align: right;
-        white-space: nowrap;
-    }
-    .sunm {
-        width: 15px;
-        text-align: center;
-        cursor: pointer;
-    }
-}
+@import './style.scss';
 </style>

+ 92 - 0
operationSupport/src/views/payService/billingRules/stepPage/style.scss

@@ -0,0 +1,92 @@
+@import "@assets/css/public-style.scss";
+.just {
+  justify-content: space-between;
+}
+.w150 {
+  min-width: 150px;
+  width: rem(150);
+}
+.input110 {
+  width: 110px;
+  margin: 0 15px 0 12px;
+}
+.w-50 {
+  width: calc(100% - 50px) !important;
+}
+.input100 {
+  width: 100px;
+}
+.select {
+  width: vw(360) !important;
+}
+.marLR15 {
+  margin: 0 16px;
+}
+/deep/ .el-form-item__label {
+  min-width: 100px;
+}
+/deep/ .el-form-item__content{
+  margin-left: 100px !important;
+}
+
+.form-item-flex {
+  display: flex;
+  font-size: 12px !important;
+  .input-number {
+    width: 110px;
+    /deep/ .el-input__suffix {
+      height: 33px;
+    }
+    /deep/ .el-input--suffix .el-input__inner {
+      padding-right: 50px;
+    }
+    .input-button {
+      line-height: 15px;
+      .button {
+        cursor: pointer;
+        &.no-drop {
+          cursor: no-drop;
+          background: #dcdfe6;
+        }
+      }
+      .up {
+        position: absolute;
+        top: 2px;
+        height: 16px;
+        width: 25px;
+        right: -4px;
+        border-radius: 0px 4px 0 0;
+        background: white;
+        border-bottom: 1px solid #dcdfe6;
+        border-left: 1px solid #dcdfe6;
+      }
+      .down {
+        position: absolute;
+        bottom: 1px;
+        height: 16px;
+        width: 25px;
+        right: -4px;
+        background: white;
+        border-radius: 0 0 4px 0;
+        border-top: 1px solid #dcdfe6;
+        border-left: 1px solid #dcdfe6;
+      }
+    }
+  }
+
+  .el-tooltip {
+    margin: 10px 30px 0 15px;
+    width: 16px;
+    height: 16px;
+  }
+  .widthFlex {
+    flex: 1;
+    text-align: center;
+    white-space: nowrap;
+  }
+  .sunm {
+    width: 15px;
+    text-align: center;
+    cursor: pointer;
+  }
+}

+ 382 - 0
operationSupport/src/views/payService/depositManagement/index.vue

@@ -0,0 +1,382 @@
+<template>
+    <div class="content main">
+        <organ-tree @organId="currentOrganId"></organ-tree>
+        <div class="content-right">
+            <div class="search">
+                <el-radio-group v-model="chargeStatus" @change="changeRadio"  class="zz-tab-button">
+                    <el-radio-button label="1">未交押金</el-radio-button>
+                    <el-radio-button label="2">已交押金</el-radio-button>
+                </el-radio-group>
+                <el-input
+                    clearable
+                    placeholder="输入客户名称/房间地址"
+                    class="search-input"
+                    v-trim
+                    v-model.trim="mixins_query.likeValue"
+                ></el-input>
+
+                <el-select v-model="mixins_query.depositType" placeholder="押金类型" clearable>
+                    <el-option label="装修押金" :value="1"></el-option>
+                    <el-option label="租赁押金" :value="2"></el-option>
+                </el-select>
+                <el-date-picker
+                    v-model="times"
+                    value-format="yyyy-MM"
+                    type="monthrange"
+                    range-separator="至"
+                    start-placeholder="选择开始日期"
+                    end-placeholder="选择结束日期"
+                    @change="effectiveDateToggle"
+                ></el-date-picker>
+                <el-button class="search-btn" type="primary" @click="mixins_search()" icon="el-icon-search">搜索</el-button>
+                <div class="search-icon">
+                    <el-tooltip
+                        v-show="chargeStatus == 1 && chiData.type === 'room'"
+                        class="item"
+                        effect="light"
+                        placement="bottom"
+                        content="新增押金"
+                    >
+                        <i class="zoniot_font zoniot-icon-tianjia2" @click="add()"></i>
+                    </el-tooltip>
+                    <el-tooltip class="item" effect="light" placement="bottom" content="导出">
+                        <i class="zoniot_font zoniot-icon-daochu2" @click="exportExcel"></i>
+                    </el-tooltip>
+                </div>
+            </div>
+            <zz-table
+                v-if="statusTable"
+                :settings="{ showIndex: true, stripe: true }"
+                :cols="chargeStatus == 1 ? cols : statusCols"
+                :data="mixins_list"
+                :pageset="mixins_pageset"
+                @page-change="pageChange"
+            >
+                <template slot-scope="scope" slot="payBeginTime">
+                    {{ typeTimeTransition(scope.row.payBeginTime, scope.row.payEndTime) }}
+                </template>
+                <template slot-scope="scope" slot="opt">
+                    <div class="opt">
+                        <el-tooltip v-if="chargeStatus == 1" class="item" effect="light" placement="bottom" content="收款">
+                            <i class="zoniot_font zoniot-icon-shoukuan" @click="collections(scope.row)"></i>
+                        </el-tooltip>
+                        <el-tooltip v-if="chargeStatus == 2" class="item" effect="light" placement="bottom" content="详情">
+                            <i class="zoniot_font zoniot-icon-xiangqing" @click="lookDetails(scope.row)"></i>
+                        </el-tooltip>
+                        <el-tooltip v-if="chargeStatus == 2" class="item" effect="light" placement="bottom" content="退款">
+                            <i class="zoniot_font zoniot-icon-tuikuan redText" @click="refund(scope.row)"></i>
+                            <i class="zoniot_font zoniot-icon-tuikuan ashText"></i>
+                        </el-tooltip>
+                    </div>
+                </template>
+            </zz-table>
+        </div>
+    </div>
+</template>
+
+<script>
+import list from '@/utils/list.js';
+
+export default {
+    mixins: [list],
+    name: 'propertyFee',
+    data() {
+        return {
+            currentId: '',
+            cols: [
+                {
+                    label: '订单号',
+                    prop: 'orderNumber'
+                },
+                {
+                    label: '租户/业主',
+                    prop: 'residentName'
+                },
+                {
+                    label: '房屋',
+                    prop: 'assets'
+                },
+                {
+                    label: '押金类型',
+                    prop: 'depositTypeDict'
+                },
+
+                {
+                    label: '应收金额(元)',
+                    prop: 'amount'
+                },
+                {
+                    label: '缴费状态',
+                    prop: 'paymentStatus',
+                    format(val) {
+                        if (val == 1) {
+                            return '<span class="redText">未交费</span>';
+                        } else if (val == 2) {
+                            return '<span class="greenText">已缴费</span>';
+                        }
+                    }
+                },
+                {
+                    label: '操作',
+                    prop: 'id',
+                    slot: 'opt'
+                }
+            ],
+            statusCols: [
+                {
+                    label: '订单号',
+                    prop: 'orderNumber'
+                },
+                {
+                    label: '租户/业主',
+                    prop: 'residentName'
+                },
+                {
+                    label: '房屋',
+                    prop: 'assets'
+                },
+
+                {
+                    label: '费用类型',
+                    prop: 'depositTypeDict'
+                },
+                {
+                    label: '状态',
+                    prop: 'paymentStatus',
+                    format(val) {
+                        if (val == 1) {
+                            return '<span class="redText">未交费</span>';
+                        } else if (val == 2) {
+                            return '<span class="greenText">已缴费</span>';
+                        }
+                    }
+                },
+                {
+                    label: '实收金额(元)',
+                    prop: 'paymentAmount'
+                },
+                {
+                    label: '付款方式',
+                    prop: 'paymentMode',
+                    format(val) {
+                        if (val == 1) {
+                            return '微信';
+                        } else if (val == 2) {
+                            return '支付宝';
+                        } else if (val == 3) {
+                            return '现金';
+                        } else if (val == 5) {
+                            return '其他';
+                        }
+                    }
+                },
+                {
+                    label: '退款状态',
+                    prop: 'refundStatus',
+                    format(val) {
+                        if (val == 1) {
+                            return '<span class="redText">未退款</span>';
+                        } else if (val == 2) {
+                            return '<span class="greenText">已退款</span>';
+                        }
+                    }
+                },
+                {
+                    label: '退款方式',
+                    prop: 'refundMode',
+                    format(val) {
+                        if (val == 1) {
+                            return '微信';
+                        } else if (val == 2) {
+                            return '支付宝';
+                        } else if (val == 3) {
+                            return '现金';
+                        } else if (val == 5) {
+                            return '其他';
+                        }
+                    }
+                },
+                {
+                    label: '退款金额',
+                    prop: 'refundAmount'
+                },
+                {
+                    label: '操作',
+                    prop: 'id',
+                    slot: 'opt'
+                }
+            ],
+            chargeStatus: 1,
+            chiData: {
+                type: '',
+                value: '',
+                address: ''
+            },
+            mixins_post: 'post',
+            thisCommObj: {},
+            times: [],
+            statusTable: true
+        };
+    },
+    methods: {
+        add() {
+            new Promise((resolve) => {
+                this.$store.dispatch('addPopup', {
+                    url: '/payService/depositManagement/stepPage/add.vue',
+                    width: '550px',
+                    height: '300px',
+                    props: {
+                        thisCommObj: this.thisCommObj,
+                        callback: resolve
+                    },
+                    title: '新增押金'
+                });
+            }).then(() => {
+                this.mixins_search();
+            });
+        },
+        refund(row) {
+            new Promise((resolve) => {
+                this.$store.dispatch('addPopup', {
+                    url: '/payService/depositManagement/stepPage/refund.vue',
+                    width: '550px',
+                    height: '400px',
+                    props: {
+                        data: row,
+                        callback: resolve
+                    },
+                    title: '退款'
+                });
+            }).then(() => {
+                this.mixins_search();
+            });
+        },
+        collections(row) {
+            new Promise((resolve) => {
+                this.$store.dispatch('addPopup', {
+                    url: '/payService/depositManagement/stepPage/collections.vue',
+                    width: '615px',
+                    height: '400px',
+                    props: {
+                        data: row,
+                        callback: resolve
+                    },
+                    title: '收款'
+                });
+            }).then(() => {
+                this.mixins_search();
+            });
+        },
+        lookDetails(row) {
+            new Promise((resolve) => {
+                this.$store.dispatch('addPopup', {
+                    url: '/payService/depositManagement/stepPage/details.vue',
+                    width: '615px',
+                    height: '581px',
+                    props: {
+                        data: row,
+                        callback: resolve
+                    },
+                    showConfirmButton: true,
+                    showCancelButton: true,
+                    hideStar: true,
+                    title: '账单详情'
+                });
+            }).then(() => {
+                this.mixins_search();
+            });
+        },
+        currentOrganId(data) {
+            this.currentId = data || '';
+        },
+        changeRadio() {
+            this.statusTable = false;
+            this.$nextTick(() => {
+                this.statusTable = true;
+            });
+            this.mixins_query.paymentStatus = this.chargeStatus;
+            this.mixins_search();
+        },
+        exportExcel() {
+            this.__exportExcel('/sc-charge/deposit/export/excel', this.mixins_query);
+        },
+        typeTimeTransition(start, end) {
+            let text = '';
+            if (!!end) {
+                let f = new Date(start).getMonth(),
+                    l = new Date(end).getMonth();
+                if (f == l) {
+                    text = `${this.$moment(new Date(start)).format('YYYY年M月')}`;
+                } else {
+                    text = `${this.$moment(new Date(start)).format('YYYY年M月')}-${this.$moment(new Date(end)).format('YYYY年M月')}`;
+                }
+            }
+
+            return text;
+        },
+        effectiveDateToggle(va) {
+            let arr = va;
+            if (!arr) {
+                arr = ['', ''];
+            }
+            this.mixins_query.startTime = arr[0];
+            this.mixins_query.endTime = arr[1];
+            // this.mixins_search();
+        }
+    },
+    watch: {
+        currentId(newValue, oldValue) {
+            this.thisCommObj = newValue;
+            this.mixins_query.communityId = '';
+            this.mixins_query.buildingId = '';
+            this.mixins_query.unitName = '';
+            this.mixins_query.houseId = '';
+            if (newValue.type) {
+                let newValueIds = newValue.id.split('-');
+                this.chiData.type = newValue.type;
+                if (newValue.type === 'community') {
+                    this.mixins_query.communityId = newValue.communityId;
+                    this.chiData.value = newValue.communityId;
+                    this.chiData.address = newValue.communityName;
+                } else if (newValue.type === 'building') {
+                    this.mixins_query.communityId = newValue.communityId;
+                    this.mixins_query.buildingId = newValue.buildingId;
+                    this.chiData.value = newValue.buildingId;
+                    this.chiData.address = newValue.communityName + ' ' + newValue.buildingName;
+                } else if (newValue.type === 'unit') {
+                    this.mixins_query.communityId = newValue.communityId;
+                    this.mixins_query.buildingId = newValue.buildingId;
+                    this.mixins_query.unitName = newValue.unitId;
+
+                    this.chiData.value = newValue.buildingId + ':' + newValue.unitId;
+                    this.chiData.address = newValue.communityName + ' ' + newValue.buildingName + ' ' + newValue.unitName;
+                } else if (newValue.type === 'room') {
+                    this.mixins_query.communityId = newValue.communityId;
+                    this.mixins_query.buildingId = newValue.buildingId;
+                    this.mixins_query.unitName = newValue.unitId;
+                    this.mixins_query.houseId = newValue.houseId;
+
+                    this.chiData.value = newValue.houseId;
+                    this.chiData.address =
+                        newValue.communityName + ' ' + newValue.buildingName + ' ' + newValue.unitName + ' ' + newValue.houseName;
+                }
+            }
+            this.mixins_search();
+        }
+    },
+    created() {
+        this.mixins_dataUrl = '/sc-charge/deposit/page'; // 分页查询接口
+        this.mixins_query = {
+            paymentStatus: this.chargeStatus
+        };
+    }
+};
+</script>
+<style lang='scss' scoped >
+@import '@assets/css/public-style.scss';
+.search {
+    .zz-tab-button {
+        margin-right: 20px;
+    }
+}
+</style>

+ 78 - 0
operationSupport/src/views/payService/depositManagement/stepPage/add.vue

@@ -0,0 +1,78 @@
+<template>
+    <el-form ref="form" :model="formData" :rules="formRules" label-width="120px">
+        <el-form-item label="押金类型" prop="depositType">
+            <el-select placeholder="请选择押金类型" v-model="formData.depositType" clearable>
+                <el-option label="装修押金" :value="1"></el-option>
+                <el-option label="租赁押金" :value="2"></el-option>
+            </el-select>
+        </el-form-item>
+        <el-form-item label="金额" prop="amount">
+            <el-input v-model="formData.amount" placeholder="请输入金额"></el-input>
+        </el-form-item>
+        <el-form-item label="应收时间" prop="receivableDate" class="chargeStartTime">
+            <el-date-picker v-model="formData.receivableDate" type="datetime" placeholder="选择应收时间"> </el-date-picker>
+        </el-form-item>
+    </el-form>
+</template>
+<script >
+export default {
+    props: ['params'],
+    data() {
+        return {
+            formData: {
+                depositType: '',
+                receivableDate: '',
+                amount: '',
+                communityId: '',
+                buildingId: '',
+                houseId: '',
+                roomNumber: ''
+            },
+            formRules: {
+                depositType: [this.$valid.selectRequired('押金类型')],
+                amount: [this.$valid.inputRequired('金额')],
+                receivableDate: [this.$valid.selectRequired('应收时间')]
+            }
+        };
+    },
+
+    methods: {
+        submit() {
+            this.$refs.form.validate((valid) => {
+                if (valid) {
+                    var loading = this.$loading();
+                    this.$http
+                        .post('/sc-charge/deposit/add', this.formData)
+                        .then(({ status, msg }) => {
+                            if (status == 0) {
+                                this.$message.success(msg);
+                                this.params.callback();
+                                this.$emit('close');
+                            } else {
+                                this.$message.error(msg);
+                            }
+                            loading.close();
+                        })
+                        .catch(() => {
+                            loading.close();
+                        });
+                }
+            });
+        }
+    },
+    created() {
+        let { communityId, buildingId, houseId, houseName } = this.params.thisCommObj;
+        this.formData.communityId = communityId;
+        this.formData.buildingId = buildingId;
+        this.formData.houseId = houseId;
+        this.formData.roomNumber = houseName;
+    }
+};
+</script>
+<style lang="scss" scoped>
+.chargeStartTime {
+    /deep/ .el-date-editor {
+        width: 100%;
+    }
+}
+</style>

+ 158 - 0
operationSupport/src/views/payService/depositManagement/stepPage/collections.vue

@@ -0,0 +1,158 @@
+<template>
+    <div class="lookDetail">
+        <div class="formContent-item_title">房屋:{{ thisItem.assets }} <br />租户/业主:{{ thisItem.residentName }}</div>
+        <el-form ref="form" :model="formData" :rules="formRules" label-width="90px">
+            <div class="grid">
+                <div>
+                    <div class="mrB20">
+                        <div class="labelText">费用类型:</div>
+                        <span class="contentText">
+                            {{ !!thisItem['depositType'] && !!thisItem['depositType'] == 1 ? '装修押金' : '租赁押金' }}
+                        </span>
+                    </div>
+                    <div class="mrB20">
+                        <div class="labelText">应收时间:</div>
+                        <span class="contentText">{{ thisItem.receivableDate }}</span>
+                    </div>
+                </div>
+                <div>
+                    <div class="mrB20">
+                        <div class="labelText">费用金额(元):</div>
+                        <span class="contentText">{{ thisItem.amount }}</span>
+                    </div>
+                    <div class="mrB20">
+                        <div class="labelText">缴费状态:</div>
+                        <span class="redText">未缴费</span>
+                    </div>
+                </div>
+            </div>
+            <div class="inline">
+                <el-form-item label="支付方式" prop="payType">
+                    <el-select v-model="formData.payType">
+                        <el-option label="微信" :value="1"></el-option>
+                        <el-option label="支付宝" :value="2"></el-option>
+                        <el-option label="现金" :value="3"></el-option>
+                        <el-option label="其他" :value="5"></el-option>
+                    </el-select>
+                </el-form-item>
+                <div>
+                    <div class="labelText">应收金额(元):</div>
+                    <span class="contentText" style="white-space: nowrap">{{ thisItem.amount }}</span>
+                </div>
+                <el-form-item label="实收金额(元)" required
+                    ><el-input oninput="value=value.replace(/[^0-9.]/g,'')" disabled v-model="thisItem.amount"></el-input
+                ></el-form-item>
+            </div>
+
+            <el-form-item label="备注信息">
+                <el-input
+                    type="textarea"
+                    maxlength="100"
+                    v-model="formData.remark"
+                    show-word-limit
+                    resize="none"
+                    rows="3"
+                    placeholder="请输入备注信息"
+                ></el-input>
+            </el-form-item>
+        </el-form>
+    </div>
+</template>
+<script >
+export default {
+    props: ['params'],
+    data() {
+        return {
+            thisItem: {},
+            formData: {
+                payType: '',
+                remark: ''
+            },
+            formRules: {
+                payType: [this.$valid.selectRequired('支付方式')],
+                amount: [this.$valid.inputRequired('实收金额')]
+            }
+        };
+    },
+
+    methods: {
+        submit() {
+            this.$refs.form.validate((valid) => {
+                if (valid) {
+                    var loading = this.$loading();
+                    let { id, amount } = this.thisItem;
+                    let installData = {
+                        paymentMode: this.formData.payType,
+                        remarks: this.formData.remark,
+                        id: id,
+                        amount: amount
+                    };
+                    this.$http
+                        .post('/sc-charge/deposit/collect/money', installData)
+                        .then(({ status, msg }) => {
+                            if (status == 0) {
+                                this.$message.success(msg);
+                                this.params.callback();
+                                this.$emit('close');
+                            } else {
+                                this.$message.error(msg);
+                            }
+                            loading.close();
+                        })
+                        .catch(() => {
+                            loading.close();
+                        });
+                }
+            });
+        },
+        getDatali(id) {
+            this.$http
+                .post('/sc-charge/deposit/find/' + id)
+                .then(({ data, msg, status }) => {
+                    if (status == 0) {
+                        this.thisItem = data;
+                    }
+                })
+                .catch(() => {});
+        }
+    },
+    created() {
+        this.thisItem = this.params.data;
+    }
+};
+</script>
+<style lang="scss" scoped>
+.lookDetail {
+    /deep/ .el-form-item__label,
+    /deep/.el-form-item__content {
+        font-size: 12px;
+        white-space: nowrap;
+    }
+    .formContent-item_title {
+        font-weight: 600;
+    }
+}
+.inline {
+    display: grid;
+    column-gap: 20px;
+    grid-template-columns: repeat(3, minmax(0, 1fr));
+    font-size: 12px;
+}
+.labelText {
+    width: 90px;
+    line-height: 30px;
+    text-align: right;
+    display: inline-block;
+}
+.grid {
+    display: flex;
+    justify-content: space-between;
+    font-size: 12px;
+    & > div {
+        width: 33%;
+    }
+}
+.mrB20 {
+    margin-bottom: 20px;
+}
+</style>

+ 133 - 0
operationSupport/src/views/payService/depositManagement/stepPage/details.vue

@@ -0,0 +1,133 @@
+<template>
+    <div class="lookDetail">
+        <div class="formContent-item_title">房屋:{{ thisItem.assets }} <br />租户/业主:{{ thisItem.residentName }}</div>
+        <el-form ref="form" label-width="100px">
+            <template v-for="(item, index) in formLook">
+                <el-col :span="!!item.col?item.col:12" :key="index">
+                    <el-form-item :label="item.label">
+                        <template v-if="item.slot">
+                            <template v-if="item.slot == 'depositType'">
+                                {{ !!thisItem['depositType'] && !!thisItem['depositType'] == 1 ? '装修押金' : '租赁押金' }}
+                            </template>
+                            <template v-else-if="item.slot == 'paymentMode'">
+                                {{ !!chargeModeValue[thisItem[item.prop]] ? chargeModeValue[thisItem[item.prop]] : '--' }}
+                            </template>
+                            <template v-else-if="item.slot === 'paymentStatus'">
+                                <span v-if="thisItem['paymentStatus'] == 1" class="redText">未缴费</span>
+                                <span v-else class="greenText">已缴费</span>
+                            </template>
+
+                            <template v-else>
+                                {{ thisItem[item.prop] || '--' }}
+                            </template>
+                        </template>
+                        <template v-else>
+                            {{ thisItem[item.prop] || '--' }}
+                        </template>
+                    </el-form-item>
+                </el-col>
+            </template>
+        </el-form>
+    </div>
+</template>
+<script >
+export default {
+    props: ['params'],
+    data() {
+        return {
+            chargeModeValue: {
+                1: '微信',
+                2: '支付宝',
+                3: '现金',
+                5: '其他'
+            },
+            formLook: [
+                {
+                    label: '费用名称:',
+                    prop: 'depositType',
+                    slot: 'depositType'
+                },
+                {
+                    label: '费用金额(元):',
+                    prop: 'amount'
+                },
+                {
+                    label: '缴费状态:',
+                    prop: 'paymentStatus',
+                    slot: 'paymentStatus'
+                },
+                {
+                    label: '支付方式:',
+                    prop: 'paymentMode',
+                    slot: 'paymentMode'
+                },
+                {
+                    label: '收款人:',
+                    prop: 'payee'
+                },
+                {
+                    label: '收款时间:',
+                    prop: 'paymentDate'
+                },
+                {
+                    label: '应收金额(元):',
+                    prop: 'amount'
+                },
+                {
+                    label: '实收金额(元):',
+                    prop: 'paymentAmount'
+                },
+                {
+                    label: '备注:',
+                    prop: 'remarks',
+                    col:24
+                },
+                {
+                    label: '退款人:',
+                    prop: 'payee'
+                },
+                {
+                    label: '退款时间:',
+                    prop: 'refundDate'
+                },
+                {
+                    label: '退款金额(元):',
+                    prop: 'refundAmount'
+                },
+                {
+                    label: '备注:',
+                    prop: 'residentName'
+                }
+            ],
+            thisItem: {}
+        };
+    },
+
+    methods: {
+        getDatali(id) {
+            this.$http
+                .post('/sc-charge/deposit/find/' + id)
+                .then(({ data, msg, status }) => {
+                    if (status == 0) {
+                        this.thisItem = data;
+                    }
+                })
+                .catch(() => {});
+        }
+    },
+    created() {
+        this.thisItem = this.params.data;
+        // this.getDatali(this.params.id);
+    }
+};
+</script>
+<style lang="scss" scoped>
+@import '@assets/css/public-style.scss';
+.lookDetail {
+    /deep/ .el-form-item__label,
+    /deep/.el-form-item__content {
+        font-size: 12px;
+        white-space: nowrap;
+    }
+}
+</style>

+ 112 - 0
operationSupport/src/views/payService/depositManagement/stepPage/refund.vue

@@ -0,0 +1,112 @@
+<template>
+    <div class="lookDetail">
+        <div class="formContent-item_title">房屋:{{ thisItem.assets }} <br />租户/业主:{{ thisItem.residentName }}</div>
+        <el-form ref="form" :model="formData" :rules="formRules" label-width="110px">
+            <el-col :span="12">
+                <el-form-item label="费用类型:">
+                    {{ !!thisItem['depositType'] && !!thisItem['depositType'] == 1 ? '装修押金' : '租赁押金' }}</el-form-item
+                >
+            </el-col>
+            <el-col :span="12">
+                <el-form-item label="费用金额(元):"> {{ thisItem.amount }}</el-form-item>
+            </el-col>
+            <el-col :span="12">
+                <el-form-item label="退款方式" prop="paymentMode">
+                    <el-select v-model="formData.paymentMode" placeholder="请选择退款方式">
+                        <el-option label="微信" :value="1"></el-option>
+                        <el-option label="支付宝" :value="2"></el-option>
+                        <el-option label="现金" :value="3"></el-option>
+                        <el-option label="其他" :value="5"></el-option>
+                    </el-select>
+                </el-form-item>
+            </el-col>
+            <el-col :span="12">
+                <el-form-item label="退款金额(元)" prop="amount"
+                    ><el-input oninput="value=value.replace(/[^0-9.]/g,'')" placeholder="请输入金额" v-model="formData.amount"></el-input
+                ></el-form-item>
+            </el-col>
+            <el-form-item label="备注信息" style="clear: both">
+                <el-input
+                    type="textarea"
+                    maxlength="100"
+                    v-model="formData.remark"
+                    show-word-limit
+                    resize="none"
+                    rows="3"
+                    placeholder="请输入备注信息"
+                ></el-input>
+            </el-form-item>
+        </el-form>
+    </div>
+</template>
+<script >
+export default {
+    props: ['params'],
+    data() {
+        return {
+            thisItem: {},
+            formData: {
+                paymentMode: '',
+                amount: '',
+                remark: '',
+                id: ''
+            },
+            formRules: {
+                paymentMode: [this.$valid.selectRequired('退款方式')],
+                amount: [this.$valid.inputRequired('退款金额')]
+            }
+        };
+    },
+
+    methods: {
+        submit() {
+            this.$refs.form.validate((valid) => {
+                if (valid) {
+                    var loading = this.$loading();
+                    this.$http
+                        .post('/sc-charge/deposit/refund', this.formData)
+                        .then(({ status, msg }) => {
+                            if (status == 0) {
+                                this.$message.success(msg);
+                                this.params.callback();
+                                this.$emit('close');
+                            } else {
+                                this.$message.error(msg);
+                            }
+                            loading.close();
+                        })
+                        .catch(() => {
+                            loading.close();
+                        });
+                }
+            });
+        },
+        getDatali(id) {
+            this.$http
+                .post('/sc-charge/deposit/find/' + id)
+                .then(({ data, msg, status }) => {
+                    if (status == 0) {
+                        this.thisItem = data;
+                    }
+                })
+                .catch(() => {});
+        }
+    },
+    created() {
+        this.thisItem = this.params.data;
+        this.formData.id = this.params.data.id;
+    }
+};
+</script>
+<style lang="scss" scoped>
+.lookDetail {
+    /deep/ .el-form-item__label,
+    /deep/.el-form-item__content {
+        font-size: 12px;
+        white-space: nowrap;
+    }
+    .formContent-item_title {
+        font-weight: 600;
+    }
+}
+</style>

+ 377 - 0
operationSupport/src/views/payService/leaseBill/index.vue

@@ -0,0 +1,377 @@
+<template>
+    <div class="content main">
+        <organ-tree @organId="currentOrganId"></organ-tree>
+        <div class="content-right">
+            <div class="search">
+                <el-radio-group v-model="chargeStatus" @change="changeRadio" class="zz-tab-button">
+                    <el-radio-button label="1">未交账单</el-radio-button>
+                    <el-radio-button label="2">已交账单</el-radio-button>
+                </el-radio-group>
+                <el-input
+                    clearable
+                    placeholder="输入客户名称/房间地址"
+                    class="search-input"
+                    v-trim
+                    v-model.trim="mixins_query.name"
+                ></el-input>
+                <el-date-picker
+                    v-model="times"
+                    value-format="yyyy-MM-DD"
+                    type="daterange"
+                    range-separator="至"
+                    start-placeholder="选择开始日期"
+                    end-placeholder="选择结束日期"
+                    @change="effectiveDateToggle"
+                ></el-date-picker>
+                <el-button class="search-btn" type="primary" @click="mixins_search()" icon="el-icon-search">搜索</el-button>
+                <div class="search-icon">
+                    <!-- <el-tooltip
+                        v-show="chargeStatus == 1 && chiData.type === 'room'"
+                        class="item"
+                        effect="light"
+                        placement="bottom"
+                        content="临时收款"
+                    >
+                        <i class="zoniot_font zoniot-icon-linshishoukuan" @click="collections('temporary')"></i>
+                    </el-tooltip> -->
+                    <el-tooltip v-show="chargeStatus == 1" class="item" effect="light" placement="bottom" content="批量收款">
+                        <i class="zoniot_font zoniot-icon-piliangshoukuan" @click="collections('bulk')"></i>
+                    </el-tooltip>
+                    <el-tooltip class="item" effect="light" placement="bottom" content="导出">
+                        <i class="zoniot_font zoniot-icon-daochu2" @click="exportExcel"></i>
+                    </el-tooltip>
+                </div>
+            </div>
+            <zz-table
+                v-if="statusTable"
+                :settings="{ showCheckbox: chargeStatus == 1, showIndex: chargeStatus == 2, stripe: true }"
+                :cols="chargeStatus == 1 ? cols : statusCols"
+                :data="mixins_list"
+                :pageset="mixins_pageset"
+                @page-change="pageChange"
+                :selectable="selectable"
+                @selection-change="selectionChange"
+            >
+                <template slot-scope="scope" slot="payBeginTime">
+                    {{ typeTimeTransition(scope.row.payBeginTime, scope.row.payEndTime) }}
+                </template>
+
+                <template slot-scope="scope" slot="opt">
+                    <div class="opt">
+                        <el-tooltip v-show="chargeStatus == 1" class="item" effect="light" placement="bottom" content="收款">
+                            <i class="zoniot_font zoniot-icon-shoukuan" @click="collections('single', scope.row)"></i>
+                        </el-tooltip>
+                        <el-tooltip v-show="chargeStatus == 2" class="item" effect="light" placement="bottom" content="详情">
+                            <i class="zoniot_font zoniot-icon-xiangqing" @click="lookDetails(scope.row)"></i>
+                        </el-tooltip>
+                    </div>
+                </template>
+            </zz-table>
+        </div>
+    </div>
+</template>
+
+<script>
+import list from '@/utils/list.js';
+
+export default {
+    mixins: [list],
+    name: 'propertyFee',
+    data() {
+        return {
+            currentId: '',
+            cols: [
+                {
+                    label: '订单号',
+                    prop: 'billNumber'
+                },
+                {
+                    label: '客户',
+                    prop: 'residentName',
+                    width: '100'
+                },
+                {
+                    label: '房屋',
+                    prop: 'assets'
+                },
+
+                {
+                    label: '费用名称',
+                    prop: 'chargeName',
+                    width: '200'
+                },
+                {
+                    label: '计费周期',
+                    prop: 'payBeginTime',
+                    slot: 'payBeginTime',
+                    width: '150'
+                },
+                {
+                    label: '费用金额(元)',
+                    prop: 'amount'
+                },
+                {
+                    label: '滞纳金(元)',
+                    prop: 'lateFee'
+                },
+
+                {
+                    label: '应收金额(元)',
+                    prop: 'receivableAmount'
+                },
+                {
+                    label: '缴费状态',
+                    prop: 'chargeStatusDict'
+                },
+                {
+                    label: '操作',
+                    prop: 'id',
+                    slot: 'opt'
+                }
+            ],
+            statusCols: [
+                {
+                    label: '订单号',
+                    prop: 'billNumber'
+                },
+                {
+                    label: '客户',
+                    prop: 'residentName'
+                },
+                {
+                    label: '租赁房屋',
+                    prop: 'assets'
+                },
+
+                {
+                    label: '费用名称',
+                    prop: 'chargeName',
+                    width: '200'
+                },
+                {
+                    label: '计费周期',
+                    prop: 'payBeginTime',
+                    slot: 'payBeginTime',
+                    width: '150'
+                },
+                {
+                    label: '费用金额(元)',
+                    prop: 'amount'
+                },
+                {
+                    label: '滞纳金(元)',
+                    prop: 'lateFee'
+                },
+
+                {
+                    label: '应收金额(元)',
+                    prop: 'receivableAmount'
+                },
+                {
+                    label: '实收金额(元)',
+                    prop: 'receivedAmount'
+                },
+                {
+                    label: '付款方式',
+                    prop: 'payTypeDict'
+                },
+                {
+                    label: '缴费状态',
+                    prop: 'chargeStatusDict'
+                },
+                {
+                    label: '操作',
+                    prop: 'id',
+                    slot: 'opt'
+                }
+            ],
+            chargeStatus: 1,
+            chiData: {
+                type: '',
+                value: '',
+                address: ''
+            },
+            mixins_post: 'post',
+            selectRow: [],
+            times: [],
+            statusTable: true
+        };
+    },
+    methods: {
+        collections(todo, row) {
+            new Promise((resolve) => {
+                let title = '',
+                    hideStar,
+                    height = '230px',
+                    width = '900px';
+                if (todo == 'temporary') {
+                    title = '设置收费项目';
+                    hideStar = false;
+                    height = '270px';
+                    width = '550px';
+                } else if (todo == 'bulk') {
+                    if (!this.selectRow.length) {
+                        this.$message.error('您尚未选择要收款项,请选择后再操作批量');
+                        return;
+                    }
+                    let tag = false;
+                    this.selectRow.map((item) => {
+                        if (this.selectRow[0].houseId == item.houseId) {
+                            tag = true;
+                        } else {
+                            tag = false;
+                        }
+                    });
+                    if (!tag) {
+                        this.$message.error('选择同一房间后再操作批量');
+                        return;
+                    }
+
+                    title = '批量收款';
+                    hideStar = true;
+                    height = '528px';
+                    width = '900px';
+                } else if (todo == 'single') {
+                    title = '收款';
+                    hideStar = true;
+                    height = '614px';
+                    width = '614px';
+                }
+                this.$store.dispatch('addPopup', {
+                    url: '/payService/propertyFee/stepPage/' + todo + '.vue',
+                    // url: '/payService/propertyFee/stepPage/single.vue',
+                    width: width,
+                    height: height,
+                    props: {
+                        data: row,
+                        selectRow: this.selectRow,
+                        chiData: this.chiData,
+                        tabList: todo,
+                        communityId: this.mixins_query.communityId,
+                        callback: resolve
+                    },
+                    hideStar: hideStar,
+                    title: title
+                });
+            }).then(() => {
+                this.mixins_search();
+            });
+        },
+        lookDetails(row) {
+            new Promise((resolve) => {
+                this.$store.dispatch('addPopup', {
+                    url: '/payService/propertyFee/stepPage/details.vue',
+                    width: '615px',
+                    height: '581px',
+                    props: {
+                        id: row.id,
+                        callback: resolve
+                    },
+                    showConfirmButton: true,
+                    showCancelButton: true,
+                    hideStar: true,
+                    title: '账单详情'
+                });
+            }).then(() => {
+                this.mixins_search();
+            });
+        },
+        selectionChange(val) {
+            this.selectRow = val;
+        },
+        currentOrganId(data) {
+            this.currentId = data || '';
+        },
+        changeRadio() {
+            this.statusTable = false;
+            this.$nextTick(() => {
+                this.statusTable = true;
+            });
+            this.mixins_query.chargeStatus = this.chargeStatus;
+            this.mixins_search();
+        },
+        exportExcel() {
+            this.__exportExcel('/sc-charge/charge/report/export/excel', this.mixins_query);
+        },
+        typeTimeTransition(start, end) {
+            let text = '';
+            if (!!end) {
+                let f = new Date(start).getMonth(),
+                    l = new Date(end).getMonth();
+                if (f == l) {
+                    text = `${this.$moment(new Date(start)).format('YYYY年M月')}`;
+                } else {
+                    text = `${this.$moment(new Date(start)).format('YYYY年M月')}-${this.$moment(new Date(end)).format('YYYY年M月')}`;
+                }
+            }
+
+            return text;
+        },
+        effectiveDateToggle(va) {
+            let arr = va;
+            if (!arr) {
+                arr = ['', ''];
+            }
+            this.mixins_query.startTime = arr[0];
+            this.mixins_query.endTime = arr[1];
+        },
+        selectable(row, index) {
+            return true;
+        }
+    },
+    watch: {
+        currentId(newValue, oldValue) {
+            this.mixins_query.communityId = '';
+            this.mixins_query.buildingId = '';
+            this.mixins_query.unitName = '';
+            this.mixins_query.houseId = '';
+            if (newValue.type) {
+                let newValueIds = newValue.id.split('-');
+                this.chiData.type = newValue.type;
+                if (newValue.type === 'community') {
+                    this.mixins_query.communityId = newValue.communityId;
+                    this.chiData.value = newValue.communityId;
+                    this.chiData.address = newValue.communityName;
+                } else if (newValue.type === 'building') {
+                    this.mixins_query.communityId = newValue.communityId;
+                    this.mixins_query.buildingId = newValue.buildingId;
+                    this.chiData.value = newValue.buildingId;
+                    this.chiData.address = newValue.communityName + ' ' + newValue.buildingName;
+                } else if (newValue.type === 'unit') {
+                    this.mixins_query.communityId = newValue.communityId;
+                    this.mixins_query.buildingId = newValue.buildingId;
+                    this.mixins_query.unitName = newValue.unitId;
+
+                    this.chiData.value = newValue.buildingId + ':' + newValue.unitId;
+                    this.chiData.address = newValue.communityName + ' ' + newValue.buildingName + ' ' + newValue.unitName;
+                } else if (newValue.type === 'room') {
+                    this.mixins_query.communityId = newValue.communityId;
+                    this.mixins_query.buildingId = newValue.buildingId;
+                    this.mixins_query.unitName = newValue.unitId;
+                    this.mixins_query.houseId = newValue.houseId;
+
+                    this.chiData.value = newValue.houseId;
+                    this.chiData.address =
+                        newValue.communityName + ' ' + newValue.buildingName + ' ' + newValue.unitName + ' ' + newValue.houseName;
+                }
+            }
+            this.mixins_search();
+        }
+    },
+    created() {
+        this.mixins_dataUrl = '/sc-charge/charge/bill/page'; // 分页查询接口
+        this.mixins_query = {
+            chargeStatus: this.chargeStatus,
+            chargeType: '8'
+        };
+    }
+};
+</script>
+<style lang='scss' scoped >
+@import '@assets/css/public-style.scss';
+.search {
+    .zz-tab-button {
+        margin-right: 20px;
+    }
+}
+</style>

+ 179 - 0
operationSupport/src/views/payService/leaseBill/stepPage/bulk.vue

@@ -0,0 +1,179 @@
+<template>
+    <div>
+        <div class="formContent-item_title marginNone">{{ chiData.address }}</div>
+        <div class="formContent-item_title noneBef">{{ assets }}</div>
+        <zz-table :settings="{ showIndex: true, stripe: true, hidePagination: true }" :cols="cols" :data="tabList">
+            <template slot-scope="scope" slot="payBeginTime">
+                {{ typeTimeTransition(scope.row.payBeginTime, scope.row.payEndTime) }}
+            </template>
+        </zz-table>
+        <el-form ref="form" :model="formData" :rules="formRules" label-width="110px">
+            <div class="inline">
+                <el-form-item label="支付方式:" prop="payType">
+                    <el-select placeholder="选择支付方式" v-model="formData.payType">
+                        <el-option label="微信" :value="1"></el-option>
+                        <el-option label="支付宝" :value="2"></el-option>
+                        <el-option label="现金" :value="3"></el-option>
+                        <el-option label="其他" :value="5"></el-option>
+                    </el-select>
+                </el-form-item>
+                <el-form-item label="应收金额(元):"> {{ fiterSum(tabList, 'receivableAmount') }}</el-form-item>
+                <el-form-item label="实收金额(元):" required="true"> {{ fiterSum(tabList, 'receivableAmount') }} </el-form-item>
+            </div>
+            <el-form-item label="备注信息:" placeholder="请输入备注信息">
+                <el-input type="textarea" maxlength="100" show-word-limit resize="none" rows="3" v-model="formData.remark"></el-input>
+            </el-form-item>
+        </el-form>
+    </div>
+</template>
+<script >
+export default {
+    props: ['params'],
+    data() {
+        return {
+            cols: [
+                {
+                    label: '订单号',
+                    prop: 'billNumber'
+                },
+                {
+                    label: '费用名称',
+                    prop: 'chargeName',
+                    width: '200'
+                },
+                {
+                    label: '计费日期',
+                    prop: 'payBeginTime',
+                    slot: 'payBeginTime',
+                    width: '150'
+                },
+                {
+                    label: '费用金额(元)',
+                    prop: 'amount'
+                },
+                {
+                    label: '滞纳金(元)',
+                    prop: 'lateFee'
+                },
+
+                {
+                    label: '应收金额(元)',
+                    prop: 'receivableAmount'
+                }
+            ],
+            tabList: [],
+            chiData: {},
+            formData: {
+                payType: '',
+                remark: '',
+                amount: '',
+                billList: [
+                    {
+                        amount: '',
+                        billId: ''
+                    }
+                ]
+            },
+            formRules: {
+                payType: [this.$valid.selectRequired('支付方式')]
+            }
+        };
+    },
+    methods: {
+        fiterSum(arr, val) {
+            let v = null;
+            arr.forEach((item) => {
+                v += Number(item[val]);
+            });
+            return Math.floor(v * 100) / 100;
+            // v.toFixed(2)
+        },
+        submit() {
+            this.$refs.form.validate((valid) => {
+                if (valid) {
+                    let billList = this.tabList.map((item, index) => {
+                        return {
+                            amount: item.amount,
+                            billId: item.id
+                        };
+                    });
+                    let installData = {
+                        payType: this.formData.payType,
+                        remark: this.formData.remark,
+                        billList: billList
+                    };
+                    var loading = this.$loading();
+                    this.$http
+                        .post('/sc-charge/charge/bill/payee', installData)
+                        .then(({ status, msg }) => {
+                            if (status == 0) {
+                                this.$message.success(msg);
+                                this.params.callback();
+                                this.$emit('close');
+                            } else {
+                                this.$message.error(msg);
+                            }
+                            loading.close();
+                        })
+                        .catch(() => {
+                            loading.close();
+                        });
+                }
+            });
+        },
+        getTable(list) {
+            let ids = [];
+            list.map((item) => {
+                ids.push(item.id);
+            });
+            this.$http
+                .post('/sc-charge/charge/bill/findUserBillDetailList', ids)
+                .then((res) => {
+                    this.tabList = res;
+                })
+                .catch(() => {
+                    loading.close();
+                });
+        },
+        typeTimeTransition(start, end) {
+            let text = '';
+            if (!!end) {
+                let f = start.slice(5, 7),
+                    l = end.slice(5, 7);
+                if (Number(f) == Number(l)) {
+                    text = start;
+                } else {
+                    text = `${start.slice(0, 8)}-${end.slice(0, 8)}`;
+                }
+            }
+
+            return text;
+        }
+    },
+    created() {
+        if (this.params.selectRow.length) {
+            this.getTable(this.params.selectRow);
+        }
+
+        this.chiData = this.params.chiData;
+    }
+};
+</script>
+<style lang="scss" scoped>
+.marginNone {
+    margin-bottom: 0;
+}
+.zz-table {
+    margin-bottom: 20px;
+}
+.noneBef {
+    margin-top: 5px;
+    &::before {
+        content: none;
+    }
+}
+.inline {
+    display: flex;
+    justify-content: space-between;
+}
+</style>

+ 160 - 0
operationSupport/src/views/payService/leaseBill/stepPage/details.vue

@@ -0,0 +1,160 @@
+<template>
+    <div class="lookDetail">
+        <div class="formContent-item_title">{{ thisItem.billNumber }}-{{ thisItem.assets }}</div>
+        <el-form ref="form" label-width="110px">
+            <template v-for="(item, index) in formLook">
+                <el-col :span="12" :key="index">
+                    <el-form-item :label="labelType(item.label, item.prop)">
+                        <template v-if="item.slot">
+                            <template v-if="item.slot == 'assetsArea' && thisItem['chargeType'] == 4">
+                                {{ !!thisItem['parkingDetail'] ? thisItem['parkingDetail'] : '--' }}
+                            </template>
+                            <template v-else-if="item.slot == 'chargeMode'">
+                                {{ !!chargeModeValue[thisItem[item.prop]] ? chargeModeValue[thisItem[item.prop]] : '--' }}
+                            </template>
+                            <template v-else-if="item.slot === 'chargeStatus'">
+                                <span v-if="thisItem['chargeStatus'] == 1" class="redText">未缴费</span>
+                                <span v-else class="greenText">已缴费</span>
+                            </template>
+                            <template v-else-if="item.slot === 'payEndTime'">
+                                <div style="white-space: nowrap">{{ thisItem['payBeginTime'] }} - {{ thisItem['payEndTime'] }}</div>
+                            </template>
+
+                            <template v-else>
+                                {{ thisItem[item.prop] || '--' }}
+                            </template>
+                        </template>
+                        <template v-else>
+                            {{ thisItem[item.prop] || '--' }}
+                        </template>
+                    </el-form-item>
+                </el-col>
+            </template>
+        </el-form>
+    </div>
+</template>
+<script >
+export default {
+    props: ['params'],
+    data() {
+        return {
+            chargeModeValue: {
+                1: '固定收费',
+                2: '价格*面积收费',
+                4: '单价*用量'
+            },
+            formLook: [
+                {
+                    label: '费用名称:',
+                    prop: 'chargeName'
+                },
+                {
+                    label: '计费标准:',
+                    prop: 'chargeModeDict'
+                },
+                {
+                    label: '面积(㎡):',
+                    prop: 'assetsArea',
+                    slot: 'assetsArea'
+                },
+                {
+                    label: '单价(元):',
+                    prop: 'chargePrice'
+                },
+                {
+                    label: '费用金额(元):',
+                    prop: 'amount'
+                },
+                {
+                    label: '账期:',
+                    prop: 'paymentDays'
+                },
+                {
+                    label: '账单计费日期:',
+                    prop: 'payEndTime',
+                    slot: 'payEndTime'
+                },
+                {
+                    label: '滞纳金(元):',
+                    prop: 'lateFee'
+                },
+                {
+                    label: '缴费状态:',
+                    prop: 'chargeStatus',
+                    slot: 'chargeStatus'
+                },
+                {
+                    label: '业主:',
+                    prop: 'residentName'
+                },
+                {
+                    label: '业主手机号:',
+                    prop: 'phone'
+                },
+                {
+                    label: '收款人:',
+                    prop: 'payee'
+                },
+                {
+                    label: '收款时间:',
+                    prop: 'chargeDate'
+                },
+                {
+                    label: '应收金额(元):',
+                    prop: 'receivableAmount'
+                },
+                {
+                    label: '实收金额(元):',
+                    prop: 'receivedAmount'
+                }
+            ],
+            thisItem: {}
+        };
+    },
+
+    methods: {
+        getDatali(id) {
+            this.$http
+                .get('/sc-charge/charge/bill/findUserBillDetail', { id: id })
+                .then(({ data, msg, status }) => {
+                    if (status == 0) {
+                        this.thisItem = data;
+                    }
+                })
+                .catch(() => {});
+        },
+        labelType(lab, val) {
+            let type = this.thisItem['chargeType'];
+            if (val == 'assetsArea') {
+                if (type == 2) {
+                    lab = '用量(吨):';
+                } else if (type == 3) {
+                    lab = '用量(度):';
+                } else if (type == 4) {
+                    lab = '车位:';
+                }
+            } else if (val == 'chargePrice') {
+                if (type == 2) {
+                    lab = '价格(元/吨):';
+                } else if (type == 3) {
+                    lab = '价格(元/度):';
+                }
+            }
+            return lab;
+        }
+    },
+    created() {
+        this.getDatali(this.params.id);
+    }
+};
+</script>
+<style lang="scss" scoped>
+@import '@assets/css/public-style.scss';
+.lookDetail {
+    /deep/ .el-form-item__label,
+    /deep/.el-form-item__content {
+        font-size: 12px;
+        white-space: nowrap;
+    }
+}
+</style>

+ 230 - 0
operationSupport/src/views/payService/leaseBill/stepPage/single.vue

@@ -0,0 +1,230 @@
+<template>
+    <div class="lookDetail">
+        <div class="formContent-item_title">{{ chiData.assets }}</div>
+        <el-form ref="form" :model="formData" :rules="formRules" label-width="110px">
+            <template v-for="(item, index) in formLook">
+                <el-col :span="12" :key="index">
+                    <el-form-item :label="labelType(item.label, item.prop)">
+                        <template v-if="item.slot">
+                            <template v-if="item.slot == 'assetsArea' && thisItem['chargeType'] == 4">
+                                {{ !!thisItem['parkingDetail'] ? thisItem['parkingDetail'] : '--' }}
+                            </template>
+                            <template v-else-if="item.slot == 'chargeMode'">
+                                {{ !!chargeModeValue[thisItem[item.prop]] ? chargeModeValue[thisItem[item.prop]] : '--' }}
+                            </template>
+                            <template v-else-if="item.slot == 'chargeStatus'">
+                                <span class="redText">未缴费</span>
+                            </template>
+                            <template v-else-if="item.slot === 'payEndTime'">
+                                <div style="white-space: nowrap">{{ typeTimeTransition(thisItem.payBeginTime, thisItem.payEndTime) }}</div>
+                            </template>
+                            <template v-else>
+                                {{ thisItem[item.prop] || '--' }}
+                            </template>
+                        </template>
+                        <template v-else>
+                            {{ thisItem[item.prop] || '--' }}
+                        </template>
+                    </el-form-item>
+                </el-col>
+            </template>
+            <div class="inline">
+                <el-form-item label="支付方式" prop="payType">
+                    <el-select v-model="formData.payType">
+                        <el-option label="微信" :value="1"></el-option>
+                        <el-option label="支付宝" :value="2"></el-option>
+                        <el-option label="现金" :value="3"></el-option>
+                        <el-option label="其他" :value="5"></el-option>
+                    </el-select>
+                </el-form-item>
+                <el-form-item label="应收金额(元)"
+                    ><div style="white-space: nowrap">{{ thisItem.receivableAmount }}</div></el-form-item
+                >
+                <el-form-item label="实收金额(元)" required
+                    ><el-input oninput="value=value.replace(/[^0-9.]/g,'')" disabled v-model="thisItem.amount"></el-input
+                ></el-form-item>
+            </div>
+
+            <el-form-item label="备注信息" placeholder="请输入备注信息">
+                <el-input type="textarea" maxlength="100" v-model="formData.remark" show-word-limit resize="none" rows="3"></el-input>
+            </el-form-item>
+        </el-form>
+    </div>
+</template>
+<script >
+export default {
+    props: ['params'],
+    data() {
+        return {
+            chargeModeValue: {
+                1: '固定收费',
+                2: '价格*面积收费',
+                4: '单价*用量'
+            },
+            formLook: [
+                {
+                    label: '费用名称:',
+                    prop: 'chargeName'
+                },
+                {
+                    label: '计费方式:',
+                    prop: 'chargeMode',
+                    slot: 'chargeMode'
+                },
+                {
+                    label: '面积(㎡):',
+                    prop: 'assetsArea',
+                    slot: 'assetsArea'
+                },
+                {
+                    label: '价格(元/月):',
+                    prop: 'chargePrice'
+                },
+                {
+                    label: '费用金额(元):',
+                    prop: 'amount'
+                },
+                {
+                    label: '账期:',
+                    prop: 'paymentDays'
+                },
+                {
+                    label: '滞纳金(元):',
+                    prop: 'lateFee'
+                },
+                {
+                    label: '缴费状态:',
+                    prop: 'chargeStatus',
+                    slot: 'chargeStatus'
+                },
+                {
+                    label: '业主:',
+                    prop: 'residentName'
+                },
+                {
+                    label: '业主手机号:',
+                    prop: 'phone'
+                },
+                {
+                    label: '账单计费日期:',
+                    prop: 'payEndTime',
+                    slot: 'payEndTime'
+                }
+            ],
+            thisItem: {},
+            chiData: {},
+            formData: {
+                payType: '',
+                remark: '',
+                amount: '',
+                billList: [
+                    {
+                        amount: '',
+                        billId: ''
+                    }
+                ]
+            },
+            formRules: {
+                payType: [this.$valid.selectRequired('支付方式')],
+                amount: [this.$valid.inputRequired('实收金额')]
+            }
+        };
+    },
+
+    methods: {
+        submit() {
+            this.$refs.form.validate((valid) => {
+                if (valid) {
+                    var loading = this.$loading();
+                    let installData = {
+                        payType: this.formData.payType,
+                        remark: this.formData.remark,
+                        billList: [
+                            {
+                                amount: this.thisItem.amount,
+                                billId: this.thisItem.id
+                            }
+                        ]
+                    };
+                    this.$http
+                        .post('/sc-charge/charge/bill/payee', installData)
+                        .then(({ status, msg }) => {
+                            if (status == 0) {
+                                this.$message.success(msg);
+                                this.params.callback();
+                                this.$emit('close');
+                            } else {
+                                this.$message.error(msg);
+                            }
+                            loading.close();
+                        })
+                        .catch(() => {
+                            loading.close();
+                        });
+                }
+            });
+        },
+        getDatali(id) {
+            this.$http
+                .get('/sc-charge/charge/bill/findUserBillDetail', { id: id })
+                .then(({ data, msg, status }) => {
+                    if (status == 0) {
+                        this.thisItem = data;
+                    }
+                })
+                .catch(() => {});
+        },
+        typeTimeTransition(start, end) {
+            let text = '';
+            if (!!end) {
+                let f = start.slice(5, 7),
+                    l = end.slice(5, 7);
+                if (Number(f) == Number(l)) {
+                    text = start;
+                } else {
+                    text = `${start.slice(0, 8)}-${end.slice(0, 8)}`;
+                }
+            }
+
+            return text;
+        },
+        labelType(lab, val) {
+            let type = this.thisItem['chargeType'];
+            if (val == 'assetsArea') {
+                if (type == 2) {
+                    lab = '用量(吨):';
+                } else if (type == 3) {
+                    lab = '用量(度):';
+                } else if (type == 4) {
+                    lab = '车位:';
+                }
+            } else if (val == 'chargePrice') {
+                if (type == 2) {
+                    lab = '价格(元/吨):';
+                } else if (type == 3) {
+                    lab = '价格(元/度):';
+                }
+            }
+            return lab;
+        }
+    },
+    created() {
+        this.getDatali(this.params.data.id);
+        this.chiData = this.params.data;
+    }
+};
+</script>
+<style lang="scss" scoped>
+.lookDetail {
+    /deep/ .el-form-item__label,
+    /deep/.el-form-item__content {
+        font-size: 12px;
+        white-space: nowrap;
+    }
+}
+.inline {
+    clear: left;
+    display: flex;
+    justify-content: space-between;
+}
+</style>

+ 108 - 0
operationSupport/src/views/payService/leaseBill/stepPage/temporary.vue

@@ -0,0 +1,108 @@
+<template>
+    <el-form ref="form" :model="formData" :rules="formRules" label-width="120px">
+        <el-form-item label="选择收费项目" prop="strategyId">
+            <el-select placeholder="选择收费项目" v-model="formData.strategyId" clearable @change="strategyType">
+                <el-option :label="item.chargeName" :value="item.id" v-for="(item, index) in selectData" :key="index"></el-option>
+            </el-select>
+        </el-form-item>
+        <el-form-item label="收费时间" prop="chargeStartTime" class="chargeStartTime">
+            <el-date-picker
+                v-model="times"
+                @change="effectiveDateToggle"
+                type="monthrange"
+                range-separator="至"
+                value-format="yyyy-MM"
+                start-placeholder="开始月份"
+                end-placeholder="结束月份"
+            >
+            </el-date-picker>
+        </el-form-item>
+        <el-form-item label="用量" v-if="formData.chargeType == 2 || formData.chargeType == 3">
+            <el-input v-model="formData.quantity"></el-input>
+        </el-form-item>
+    </el-form>
+</template>
+<script >
+export default {
+    props: ['params'],
+    data() {
+        return {
+            formData: {
+                assetsId: '',
+                strategyId: '',
+                assetsType: 1,
+                chargeType: '',
+                chargeStartTime: '2021-09',
+                chargeEndTime: '2021-09',
+                quantity:'',
+            },
+            times: [],
+            selectData: [],
+            formRules: {
+                strategyId: [this.$valid.selectRequired('收费项')],
+                chargeStartTime: [this.$valid.selectRequired('收费时间')]
+            }
+        };
+    },
+
+    methods: {
+        submit() {
+            this.$refs.form.validate((valid) => {
+                if (valid) {
+                    var loading = this.$loading();
+                    this.$http
+                        .post('/sc-charge/charge/bill/create', this.formData)
+                        .then(({ status, msg }) => {
+                            if (status == 0) {
+                                this.$message.success(msg);
+                                this.params.callback();
+                                this.$emit('close');
+                            } else {
+                                this.$message.error(msg);
+                            }
+                            loading.close();
+                        })
+                        .catch(() => {
+                            loading.close();
+                        });
+                }
+            });
+        },
+        effectiveDateToggle(va) {
+            let arr = va;
+            if (!arr) {
+                arr = ['', ''];
+            }
+            this.formData.chargeStartTime = arr[0];
+            this.formData.chargeEndTime = arr[1];
+        },
+        getSelect() {
+            this.$http
+                .get('/sc-charge/scChargeStrategy/page?pageNum=1&pageSize=100&communityId='+this.params.communityId)
+                .then(({ data, status, msg }) => {
+                    this.selectData = data.list;
+                })
+                .catch(() => {});
+        },
+        strategyType(id) {
+            this.selectData.find((item) => {
+                if (item.id === id) {
+                    this.formData.chargeType = item.chargeType;
+                }
+            });
+        }
+    },
+    created() {
+        this.getSelect();
+        // this.selectData = this.params.selectData
+        this.formData.assetsId = this.params.chiData.value;
+    }
+};
+</script>
+<style lang="scss" scoped>
+.chargeStartTime {
+    /deep/ .el-date-editor--monthrange.el-input__inner {
+        width: 100%;
+    }
+}
+</style>

+ 2 - 2
operationSupport/src/views/payService/propertyFee/index.vue

@@ -341,8 +341,8 @@ export default {
     created() {
         this.mixins_dataUrl = '/sc-charge/charge/bill/page'; // 分页查询接口
         this.mixins_query = {
-            chargeStatus: this.chargeStatus
-            // chargeType: 1
+            chargeStatus: this.chargeStatus,
+            chargeType: '1,2,3,4,5,6,7'
         };
     }
 };

+ 50 - 1
operationSupport/src/views/payService/systemSetup/stepPage/paymentSetup.vue

@@ -47,7 +47,28 @@
                         <el-checkbox :label="2">微信</el-checkbox>
                     </el-checkbox-group>
                 </el-form-item>
-
+                <el-form-item>
+                    <div class="item-title">
+                        水费预存金额不能大于
+                        <el-input
+                            placeholder="请输入金额"
+                            v-model="formData[8].amount"
+                            oninput="value=value.replace(/[^0-9.]/g,'')"
+                        ></el-input
+                        >元
+                    </div>
+                </el-form-item>
+                <el-form-item>
+                    <div class="item-title">
+                        电费预存金额不能大于
+                        <el-input
+                            placeholder="请输入金额"
+                            v-model="formData[9].amount"
+                            oninput="value=value.replace(/[^0-9.]/g,'')"
+                        ></el-input
+                        >元
+                    </div>
+                </el-form-item>
                 <el-form-item>
                     <div class="item-title">水费收费规则</div>
                     <el-radio-group v-model="formData[4].enable">
@@ -141,6 +162,18 @@ export default {
                     category: 1,
                     enable: null,
                     amount: 1
+                },
+                {
+                    type: 13,
+                    category: 1,
+                    enable: null,
+                    amount: 1
+                },
+                {
+                    type: 14,
+                    category: 1,
+                    enable: null,
+                    amount: 1
                 }
             ],
             initFormData: [
@@ -187,6 +220,18 @@ export default {
                     category: 1,
                     enable: null,
                     amount: 1
+                },
+                {
+                    type: 13,
+                    category: 1,
+                    enable: null,
+                    amount: 1
+                },
+                {
+                    type: 14,
+                    category: 1,
+                    enable: null,
+                    amount: 1
                 }
             ]
         };
@@ -258,6 +303,10 @@ export default {
                                 Object.assign(this.formData[6], item);
                             } else if (item.type == '12') {
                                 Object.assign(this.formData[7], item);
+                            }else if (item.type == '13') {
+                                Object.assign(this.formData[8], item);
+                            }else if (item.type == '14') {
+                                Object.assign(this.formData[9], item);
                             }
                         });
                     }