Kaynağa Gözat

合同管理

Shannon_mu 3 yıl önce
ebeveyn
işleme
9abfb6ac84

+ 1 - 0
operationSupport/src/assets/css/public-style.scss

@@ -35,6 +35,7 @@ $base_fontSize: 100;
   position: relative;
   margin-left: 14px;
   margin-bottom: 20px;
+  font-family: PingFangSC-Medium, PingFang SC;
   &::before {
     position: absolute;
     left: -14px;

+ 13 - 0
operationSupport/src/components/common/alertModal.vue

@@ -39,11 +39,15 @@
         </div>
         <!-- </div> -->
         <span slot="footer" class="dialog-footer" v-if="!modal.fullscreen || modal.showFooter">
+            <el-button @click="previousStep(modal.id)" type="primary" class="previousStep" v-if="modal.previousStepButton"
+                >上一步</el-button
+            >
             <el-button @click="alertReset(modal.id)" class="reset" v-if="modal.showResetButton">重置</el-button>
             <el-button @click="close" class="reset" v-if="!modal.showCancelButton">{{ modal.cancelButtonText || '取消' }}</el-button>
             <el-button type="primary" v-if="!modal.showConfirmButton" @click="submit(modal.id)">{{
                 modal.confirmButtonText || '保存'
             }}</el-button>
+            <el-button @click="nextStep(modal.id)" type="primary" class="nextStep" v-if="modal.nextStepButton">下一步</el-button>
         </span>
     </el-dialog>
     <!-- </transition> -->
@@ -69,6 +73,7 @@ export default {
     data() {
         return {
             // modal:{}
+            
         };
     },
     computed: {
@@ -104,6 +109,14 @@ export default {
         submit(id) {
             const component = this.$refs[id];
             component.submit && component.submit();
+        },
+        previousStep(id) {
+            const component = this.$refs[id];
+            component.previousStep && component.previousStep();
+        },
+        nextStep(id) {
+            const component = this.$refs[id];
+            component.nextStep && component.nextStep();
         }
     },
     created() {

+ 1 - 1
operationSupport/src/config/env.development.js

@@ -11,7 +11,7 @@ module.exports = {
 
     baseUrl: 'http://114.135.61.186:21020/sc-operation/', // 项目地址
 
-    baseApi: 'http://114.135.61.186:21012/', // 本地api请求地址
+    baseApi: 'http://192.168.110.4:8082/', // 本地api请求地址
     baseMapApi: 'http://114.135.61.187:38082', // arcgis API
     baseImgApi: 'http://192.168.110.4:8082/', // 图片api请求地址
     baseExcelApi: 'http://114.135.61.187:38082', // excel请求地址

+ 90 - 18
operationSupport/src/views/businessManagement/contractManagement/index.vue

@@ -38,12 +38,25 @@
             >
                 <template slot-scope="scope" slot="opt">
                     <div class="opt">
-                        <el-tooltip effect="light" placement="bottom" content="编辑">
+                        <!-- <el-tooltip effect="light" placement="bottom" content="编辑">
                             <i class="zoniot_font zoniot-icon-bianji" @click="addOrEdit('edit', scope.row)"></i>
-                        </el-tooltip>
+                        </el-tooltip> -->
+
                         <el-tooltip effect="light" placement="bottom" content="详情">
                             <i class="zoniot_font zoniot-icon-xiangqing" @click="lookDetail(scope.row)"></i>
                         </el-tooltip>
+                        <el-tooltip effect="light" placement="bottom" content="续期">
+                            <i class="zoniot_font zoniot-icon-xuqi" @click="renewal(scope.row)"></i>
+                        </el-tooltip>
+
+                        <el-tooltip effect="light" placement="bottom" content="退租">
+                            <i
+                                class="zoniot_font zoniot-icon-tuifang redText"
+                                v-if="scope.row.contractStatus !== 2"
+                                @click="rentWithdrawal(scope.row)"
+                            ></i>
+                            <i class="zoniot_font zoniot-icon-tuifang ashText" v-else></i>
+                        </el-tooltip>
                     </div>
                 </template>
             </zz-table>
@@ -90,7 +103,8 @@ export default {
                         } else if (val == 2) {
                             return '个人';
                         }
-                    }
+                    },
+                    width: '100'
                 },
                 {
                     label: '合同类型',
@@ -107,7 +121,7 @@ export default {
                         if (val == 0) {
                             return '已签约';
                         } else if (val == 1) {
-                            return '已签约';
+                            return '生效中';
                         } else if (val == 2) {
                             return '到期';
                         }
@@ -123,25 +137,21 @@ export default {
                 },
                 {
                     label: '合同到期天数',
-                    prop: 'contactPhone'
+                    prop: 'endTime'
                 },
                 {
                     label: '操作',
-                    slot: 'opt'
+                    slot: 'opt',
+                    width: '180'
                 }
             ],
-            mixins_post: 'post'
+            mixins_post: 'post',
+            CommunityTree: []
         };
     },
     created() {
-        // new Promise((resolve) => {
-        //     this.getindustry('industry', resolve);
-        //     this.getindustry('economicType', resolve);
-        // }).then(() => {
-        //     this.mixins_dataUrl = '/sc-community/contract/page';
-        //     this.mixins_search();
-        // });
         this.getorgTree();
+        this.getCommunityArr();
         this.mixins_dataUrl = '/sc-community/contract/page';
         this.mixins_search();
     },
@@ -157,6 +167,14 @@ export default {
 
                 .catch(function () {});
         },
+        getCommunityArr() {
+            this.$http
+                .get('/sc-community/assets/tree/community/find')
+                .then(({ data }) => {
+                    this.CommunityTree = data;
+                })
+                .catch(function () {});
+        },
         effectiveDateToggle(va) {
             let arr = va;
             if (!arr) {
@@ -178,10 +196,15 @@ export default {
                     props: {
                         data,
                         todo,
-                        communityArr:this.communityArr,
+                        communityArr: this.communityArr,
+                        communityTree: this.CommunityTree,
                         callback: resolve
                     },
-                    title: title
+                    title: title,
+                    showIndex: 0,
+                    previousStepButton: false,
+                    showConfirmButton: true,
+                    nextStepButton: true
                 });
             }).then(() => {
                 this.mixins_search();
@@ -190,8 +213,57 @@ export default {
         exportExcel() {
             this.__exportExcel('/sc-community/enterprise/excel', this.mixins_query);
         },
-        lookDetail() {
-            this.isLook = false;
+        lookDetail(row) {
+            new Promise((resolve) => {
+                this.$store.dispatch('addPopup', {
+                    url: '/businessManagement/contractManagement/stepPage/details.vue',
+                    width: '850px',
+                    height: '600px',
+                    props: {
+                        row,
+                        callback: resolve
+                    },
+                    title: '合同详情',
+                    hideStar: true,
+                    showCancelButton: true,
+                    showConfirmButton: true
+                });
+            }).then(() => {
+                this.mixins_search();
+            });
+        },
+        rentWithdrawal(row) {
+            new Promise((resolve) => {
+                this.$store.dispatch('addPopup', {
+                    url: '/businessManagement/contractManagement/stepPage/rentWithdrawal.vue',
+                    width: '850px',
+                    height: '600px',
+                    props: {
+                        row,
+                        callback: resolve
+                    },
+                    title: '退租',
+                    hideStar: true
+                });
+            }).then(() => {
+                this.mixins_search();
+            });
+        },
+        renewal(row) {
+            new Promise((resolve) => {
+                this.$store.dispatch('addPopup', {
+                    url: '/businessManagement/contractManagement/stepPage/renewal.vue',
+                    width: '850px',
+                    height: '600px',
+                    props: {
+                        row,
+                        callback: resolve
+                    },
+                    title: '续租'
+                });
+            }).then(() => {
+                this.mixins_search();
+            });
         }
     }
 };

+ 220 - 124
operationSupport/src/views/businessManagement/contractManagement/stepPage/add.vue

@@ -1,83 +1,44 @@
 <template>
-    <el-form ref="form" :model="formData" :rules="formRules" label-width="90px">
-        <div class="formContent-item_title">合同信息</div>
-        <el-col :span="12"
-            ><el-form-item label="合同编号" prop="contractNo" required>
-                <el-input v-model="formData.contractNo" disabled placeholder="请输入合同编号"></el-input> </el-form-item
-        ></el-col>
-        <el-col :span="12">
-            <el-form-item label="合同类型" prop="contractType" required>
-                <el-radio v-model="formData.contractType" :label="0">租赁合同</el-radio></el-form-item
-            ></el-col
-        >
-        <div class="formContent-item_title">客户信息</div>
-        <el-col :span="24"
-            ><el-form-item label="客户类型" required>
-                <el-radio v-model="formData.customerType" :label="1">企业</el-radio>
-                <el-radio v-model="formData.customerType" :label="2">个人</el-radio>
-
-                <el-button type="primary" v-if="formData.customerType == 1" @click="relation">关联企业</el-button>
-            </el-form-item></el-col
-        >
-        <template v-if="formData.customerType == 2">
-            <el-col :span="8"
-                ><el-form-item label="客户名称" prop="customerName">
-                    <el-input v-model="formData.customerName" placeholder="请输入客户名称"></el-input> </el-form-item
-            ></el-col>
-            <el-col :span="8"
-                ><el-form-item label="客户手机" prop="customerPhone">
-                    <el-input v-model="formData.customerPhone" placeholder="请输入客户手机"></el-input> </el-form-item
-            ></el-col>
-            <el-col :span="8"
-                ><el-form-item label="联系地址" prop="customerAddress">
-                    <el-input v-model="formData.customerAddress" placeholder="请输入联系地址"></el-input> </el-form-item
-            ></el-col>
-        </template>
-
-        <div class="formContent-item_title">物业信息</div>
-        <el-col :span="8"
-            ><el-form-item label="所属社区" prop="communityId">
-                <el-select v-model="formData.communityId" placeholder="请选择所属社区" clearable>
-                    <el-option v-for="(item, index) in communityArr" :key="index" :label="item.communityName" :value="item.id"></el-option>
-                </el-select> </el-form-item
-        ></el-col>
-        <zz-table :cols="cols" :settings="{ stripe: true }" :data="mixins_list"></zz-table>
-        <div class="formContent-item_title">合同周期</div>
-        <el-col :span="12"
-            ><el-form-item label="合同时间" prop="startTime">
-                <el-date-picker
-                    v-model="times"
-                    class="timeWidth"
-                    value-format="yyyy-MM-dd HH:mm:ss"
-                    type="daterange"
-                    range-separator="至"
-                    start-placeholder="开始日期"
-                    end-placeholder="结束日期"
-                    @change="effectiveDateToggle"
-                    :editable="false"
-                ></el-date-picker> </el-form-item
-        ></el-col>
-        <el-col :span="12"
-            ><el-form-item label="签订时间" prop="signTime">
-                <el-date-picker
-                    v-model="formData.signTime"
-                    value-format="yyyy-MM-dd HH:mm:ss"
-                    type="date"
-                    range-separator="至"
-                    placeholder="选择日期"
-                    :editable="false"
-                ></el-date-picker> </el-form-item
-        ></el-col>
-        <div class="formContent-item_title">合同附件</div>
-        <el-form-item label="合同附件"> <bz-upload type="img" :uploadArr="pictureArr" :limit="1"></bz-upload> </el-form-item>
-    </el-form>
+    <div>
+        <el-form ref="form" :model="formData" :rules="formRules" label-width="90px"></el-form>
+        <div class="steps">
+            <div class="steps-item active">
+                <div class="circularText"><span>1</span></div>
+                <div>基本信息</div>
+                <div class="steps-item-line" :class="showIndex > 0 ? 'active' : ''"></div>
+            </div>
+            <div class="steps-item" :class="showIndex > 0 ? 'active' : ''">
+                <div class="circularText"><span>2</span></div>
+                <div>金额条款</div>
+                <div class="steps-item-line" :class="showIndex > 1 ? 'active' : ''"></div>
+            </div>
+            <div class="steps-item" :class="showIndex > 1 ? 'active' : ''">
+                <div class="circularText"><span>3</span></div>
+                <div>收款计划</div>
+            </div>
+        </div>
+        <first-step v-if="showIndex == 0" ref="firststepRef"></first-step>
+        <step-two ref="steptwoRef" v-else-if="showIndex == 1"></step-two>
+        <last-step v-else></last-step>
+    </div>
 </template>
 <script >
+import firstStep from './firstStep.vue';
+import stepTwo from './stepTwo.vue';
+import lastStep from './lastStep.vue';
+
 export default {
     props: ['params'],
+    components: {
+        firstStep,
+        stepTwo,
+        lastStep
+    },
     data() {
         return {
+            showIndex: 0,
             formData: {
+                contractNo: '662816181',
                 filePath: '',
                 contractType: 0,
                 customerType: 1,
@@ -87,10 +48,23 @@ export default {
                 endTime: '',
                 customerName: '',
                 customerPhone: '',
-                customerAddress: ''
+                customerAddress: '',
+                contractHouseDtoList: []
+            },
+
+            //租赁规则
+            rules: {
+                ruleId: '',
+                enable: 1,
+                earnestMoney: '',
+                freeTime: ''
             },
+            contractPlanDtos: [],
+            chargeCycle: '',
             times: [],
+            timesTwo: [],
             pictureArr: [],
+            relationTable: {},
             formRules: {
                 customerName: [this.$valid.inputRequired('客户名称')],
                 customerPhone: [this.$valid.inputRequired('客户手机')],
@@ -109,53 +83,25 @@ export default {
                     }
                 })
             },
+            //多选
+            idsObj: [],
+            //社区
             communityArr: [],
-            cols: [
-                {
-                    label: '所属社区',
-                    prop: 'contractNo'
-                },
-                {
-                    label: '楼栋',
-                    prop: 'customerName'
-                },
-                {
-                    label: '单元',
-                    prop: 'customerType',
-                    format(val) {
-                        if (val == 1) {
-                            return '企业';
-                        } else if (val == 2) {
-                            return '个人';
-                        }
-                    }
-                },
-                {
-                    label: '楼层',
-                    prop: 'contractType'
-                },
-                {
-                    label: '房间号',
-                    prop: 'houseName'
-                },
-                {
-                    label: '房屋类型',
-                    prop: 'contractStatus',
-                    format(val) {
-                        if (val == 0) {
-                            return '已签约';
-                        } else if (val == 1) {
-                            return '已签约';
-                        } else if (val == 2) {
-                            return '到期';
-                        }
-                    }
-                },
-                {
-                    label: '建筑面积',
-                    prop: 'startTime'
-                }
-            ]
+            //社区树
+            communityTree: [],
+            //楼栋树
+            communityTreeArr: [],
+            //楼栋ids
+            communityTreeIds: [],
+            tableArr: [],
+            defaultProps: {
+                multiple: true,
+                emitPath: false,
+                value: 'value', // 唯一标识
+                label: 'name', // 标签显示
+                children: 'children' // 子级
+            },
+            loadings: false
         };
     },
     watch: {
@@ -164,13 +110,54 @@ export default {
         }
     },
     methods: {
+        findTreeIds(va) {
+            this.tableArr = [];
+            va.map((item, index) => {
+                this.getfindTreeIds(item);
+            });
+        },
+        getfindTreeIds(id) {
+            this.loadings = true;
+            this.$http
+                .post('/sc-community/assets/house/page', {
+                    id: id,
+                    pageNum: 1,
+                    pageSize: 1
+                })
+                .then(({ data, status, msg }) => {
+                    if (0 === status) {
+                        this.tableArr.push(data.list[0]);
+                        this.loadings = false;
+                    } else {
+                        this.$message.error(msg);
+                    }
+                })
+                .catch(() => {});
+        },
+        communityChange(val) {
+            this.communityTree.map((item) => {
+                if (item.id == val) {
+                    this.communityTreeArr = item.children;
+                }
+            });
+        },
         submit() {
+            let installData = this.formData;
+
+            let installObj = JSON.parse(JSON.stringify(this.idsObj));
+            installObj.map((item, index) => {
+                delete item.thisArr;
+                delete item.timesTwo;
+                delete item.increasingYear;
+                delete item.increasingPercentage;
+            });
+            installData.contractHouseDtoList = installObj;
+
             this.$refs.form.validate((valid) => {
                 if (valid) {
                     var loading = this.$loading();
-                    let installData = this.formData;
                     this.$http
-                        .post(`/sc-community/enterprise/${this.params.todo == 'add' ? 'add' : 'edit'}`, installData)
+                        .post(`/sc-community/contract/${this.params.todo == 'add' ? 'add' : 'edit'}`, installData)
                         .then(({ status, msg }) => {
                             if (status == 0) {
                                 this.$message.success(msg);
@@ -211,20 +198,69 @@ export default {
                 this.$store.dispatch('addPopup', {
                     url: '/businessManagement/enterpriseManagement/index.vue',
                     width: '850px',
-                    height: '600px',
+                    height: '400px',
                     props: {
                         callback: resolve
                     },
+                    hideStar: true,
                     title: '关联企业'
                 });
             }).then((res) => {
-                debugger;
+                this.relationTable = res;
             });
+        },
+        nextStep() {
+            // 0  取消 下一步 ,1 取消 上一步 下一步 ,2 确认 取消 上一步
+            if (this.$store.getters['getPopups'][0].showIndex == 0) {
+                this.$refs.firststepRef.$refs.form.validate((valid) => {
+                    if (valid) {
+                        this.$store.getters['getPopups'][0].showIndex++;
+                        this.showIndex++;
+                        this.$store.getters['getPopups'][0].nextStepButton = false;
+                        this.$store.getters['getPopups'][0].previousStepButton = true;
+                        this.$store.getters['getPopups'][0].showConfirmButton = true;
+                    }
+                });
+            } else if (this.$store.getters['getPopups'][0].showIndex == 1) {
+                this.$store.getters['getPopups'][0].showIndex++;
+                this.showIndex++;
+                this.$refs.steptwoRef.getList();
+                // 第二流程 下一步
+                this.$store.getters['getPopups'][0].nextStepButton = false;
+                this.$store.getters['getPopups'][0].showConfirmButton = false;
+                this.$store.getters['getPopups'][0].previousStepButton = true;
+            }
+
+            // if (this.$store.getters['getPopups'][0].showIndex == 1) {
+            //     this.$store.getters['getPopups'][0].nextStepButton = true;
+            //     this.$store.getters['getPopups'][0].previousStepButton = true;
+            //     this.$store.getters['getPopups'][0].showConfirmButton = true;
+            // } else if (this.$store.getters['getPopups'][0].showIndex == 2) {
+            //     this.$refs.steptwoRef.getList();
+            //     // 第二流程 下一步
+            //     this.$store.getters['getPopups'][0].nextStepButton = false;
+            //     this.$store.getters['getPopups'][0].showConfirmButton = false;
+            //     this.$store.getters['getPopups'][0].previousStepButton = true;
+            // }
+        },
+        previousStep() {
+            this.$store.getters['getPopups'][0].showIndex--;
+            this.showIndex--;
+            if (this.$store.getters['getPopups'][0].showIndex == 0) {
+                this.$store.getters['getPopups'][0].nextStepButton = true;
+                this.$store.getters['getPopups'][0].previousStepButton = false;
+                this.$store.getters['getPopups'][0].showConfirmButton = true;
+            } else if (this.$store.getters['getPopups'][0].showIndex == 1) {
+                this.$store.getters['getPopups'][0].nextStepButton = true;
+                this.$store.getters['getPopups'][0].previousStepButton = true;
+                this.$store.getters['getPopups'][0].showConfirmButton = true;
+            }
         }
     },
     created() {
-        const { todo, data, communityArr } = this.params;
+        const { todo, data, communityArr, communityTree } = this.params;
         this.communityArr = communityArr;
+        this.communityTree = communityTree;
         if (todo !== 'add') {
             this.findDetali(data.id);
         }
@@ -238,6 +274,9 @@ export default {
 .timeWidth {
     width: 100%;
 }
+.mrbt20 {
+    margin-bottom: 20px;
+}
 /deep/ .el-date-editor .el-range-separator {
     padding: 0;
 }
@@ -245,4 +284,61 @@ export default {
 /deep/ .el-input__inner {
     font-size: 12px;
 }
+.steps {
+    display: flex;
+    justify-content: space-between;
+    color: #dbdbdb;
+    .steps-item {
+        display: flex;
+        line-height: 36px;
+        position: relative;
+        margin-bottom: 24px;
+        .circularText {
+            height: 36px;
+            width: 36px;
+            display: inline-block;
+            line-height: 36px;
+            border-radius: 50%;
+            position: relative;
+            text-align: center;
+            margin-right: 10px;
+            color: #dbdbdb;
+            span {
+                position: absolute;
+                top: 50%;
+                left: 50%;
+                transform: translate(-50%, -50%);
+                display: inline-block;
+
+                background: #f8fcff;
+                height: 28px;
+                width: 28px;
+                line-height: 28px;
+                border-radius: 50%;
+            }
+        }
+        .steps-item-line {
+            position: absolute;
+            left: 130px;
+            top: 50%;
+            width: 200px;
+            height: 2px;
+            background: #f8fcff;
+            border-radius: 2px;
+            &.active {
+                background: #0eaeff;
+            }
+        }
+        &.active {
+            color: #424656;
+            .circularText {
+                background: #b5e6ff;
+                color: white;
+                span {
+                    background: #0eaeff;
+                }
+            }
+        }
+    }
+}
 </style>

+ 179 - 24
operationSupport/src/views/businessManagement/contractManagement/stepPage/details.vue

@@ -1,39 +1,194 @@
 <template>
-    <div class="scheduling">
-        <div class="search">
-            <div class="search-icon">
-                <el-tooltip effect="light" placement="bottom" content="返回">
-                    <i class="zoniot_font zoniot-icon-fanhui" @click="goback()"></i>
-                </el-tooltip>
+    <el-form :model="formData" label-width="85px">
+        <div class="formContent-item_title blockCl">基本信息</div>
+        <div>
+            <el-col :span="8">
+                <el-form-item label="合同编号:"> {{ formData.contractNo }} </el-form-item>
+            </el-col>
+            <el-col :span="8">
+                <el-form-item label="合同类型:"> 租赁合同 </el-form-item>
+            </el-col>
+            <div class="blockCl">
+                <el-col :span="8">
+                    <el-form-item label="客户类型:"> {{ formData.customerType == 1 ? '企业' : '个人' }} </el-form-item></el-col
+                >
+                <el-col :span="8">
+                    <el-form-item label="客户名称:"> {{ formData.customerName }} </el-form-item></el-col
+                >
+                <el-col :span="8">
+                    <el-form-item label="企业法人:" label-width="110px"> {{ formData.customerName }} </el-form-item></el-col
+                >
             </div>
+
+            <div class="blockCl">
+                <el-col :span="8">
+                    <el-form-item label="法人手机:"> {{ formData.customerPhone }} </el-form-item></el-col
+                >
+                <el-col :span="8">
+                    <el-form-item label="联系人:"> {{ formData.customerName }} </el-form-item></el-col
+                >
+                <el-col :span="8">
+                    <el-form-item label="联系人手机:" label-width="110px"> {{ formData.customerPhone }} </el-form-item></el-col
+                >
+            </div>
+
+            <el-col :span="8">
+                <el-form-item label="合同时间:">
+                    {{ this.$moment(new Date(formData.startTime)).format('YYYY-MM-DD') }} 至
+                    {{ this.$moment(new Date(formData.endTime)).format('YYYY-MM-DD') }}
+                </el-form-item>
+            </el-col>
+            <el-col :span="8">
+                <el-form-item label="签订时间:">{{ this.$moment(new Date(formData.signTime)).format('YYYY-MM-DD') }}</el-form-item>
+            </el-col>
+        </div>
+
+        <div class="formContent-item_title blockCl">金额条款</div>
+        <div class="deTitle">房屋信息</div>
+        <el-table :data="formData.contractHouseVos" style="width: 100%" class="mrbt20">
+            <el-table-column prop="communityName" label="所属社区"> </el-table-column>
+            <el-table-column prop="buildingName" label="楼栋"> </el-table-column>
+            <el-table-column prop="unitName" label="单元"> </el-table-column>
+            <el-table-column prop="floorNumber" label="楼层"> </el-table-column>
+            <el-table-column prop="roomNumber" label="房间号"> </el-table-column>
+            <el-table-column label="房屋类型">
+                <template slot-scope="scope">{{ scope.row.buildingType == 1 ? '住宅' : '商业' }}</template>
+            </el-table-column>
+            <el-table-column prop="buildingArea" label="建筑面积">
+                <template slot-scope="scope">{{
+                    !!scope.row.buildingArea ? scope.row.buildingArea + '㎡' : '-'
+                }}</template></el-table-column
+            >
+        </el-table>
+        <div class="deTitle">租金信息</div>
+        <div v-for="(item, index) in formData.contractHouseVos" :key="index">
+            <el-table :data="tableArr" style="width: 100%" class="mrbt20">
+                <el-table-column prop="chargeName" label="费用名称"> </el-table-column>
+                <el-table-column label="计费方式" width="100">
+                    <template slot-scope="scope">
+                        <span v-if="scope.row.chargeMode === 1">固定收费 </span>
+                        <span v-if="scope.row.chargeMode === 2">价格*面积收费</span>
+                        <span v-if="scope.row.chargeMode === 3">阶梯计费 </span>
+                        <span v-if="scope.row.chargeMode === 4">单价*用量</span>
+                    </template>
+                </el-table-column>
+                <el-table-column label="单价"></el-table-column>
+                <el-table-column label="月租金">
+                    <template slot-scope="scope">
+                        {{ scope.row.chargePrice }}
+                    </template>
+                </el-table-column>
+                <el-table-column prop="roomNumber" label="计费周期">
+                    <template slot-scope="scope"> {{ scope.row.chargeCycle || 0 }} 个月 </template>
+                </el-table-column>
+                <el-table-column prop="buildingTypeDict" label="滞纳金标准" width="180">
+                    <template slot-scope="scope"> 欠费{{ scope.row.arrearsDays }}天后,收{{ scope.row.lateFee || 0 }} ‰滞纳金 </template>
+                </el-table-column>
+                <el-table-column prop="buildingArea" label="递增规则" width="180">
+                    <template slot-scope="scope">
+                        {{ scope.row.increasingYear }}年后,每年递增 {{ scope.row.increasingPercentage || 0 }} %
+                    </template></el-table-column
+                >
+            </el-table>
+            <el-form-item label="免租期:"> {{ ruleText(item.freeTime) }} </el-form-item>
+            <el-form-item label="租赁保证金:"> {{ item.earnestMoney }} </el-form-item>
+        </div>
+        <div class="formContent-item_title blockCl">收款计划</div>
+        <div v-for="(item, index) in formData.contractHouseVos" :key="index">
+            <div class="deTitle">保证金</div>
+            <el-table :data="[item]" style="width: 100%" class="mrbt20">
+                <el-table-column label="期数"> 第1期</el-table-column>
+                <el-table-column label="应收日期">{{ $moment(new Date(formData.startTime)).format('YYYY-MM-DD') }} </el-table-column>
+                <el-table-column label="应收金额(元) ">{{ item.earnestMoney }} </el-table-column>
+            </el-table>
+            <div class="deTitle">租金</div>
+            <el-table :data="item.planVos" style="width: 100%" class="mrbt20">
+                <el-table-column prop="period" label="期数">
+                    <template slot-scope="scope"> 第 {{ scope.row.period || '' }}期 </template>
+                </el-table-column>
+                <el-table-column label="应收日期" prop="amount"></el-table-column>
+                <el-table-column label="计费周期" prop="cycle"> </el-table-column>
+                <el-table-column prop="rent" label="租金(元)"> </el-table-column>
+                <el-table-column prop="amount" label="应收金额(元)"> </el-table-column>
+            </el-table>
         </div>
-    </div>
+    </el-form>
 </template>
-<script>
+<script >
 export default {
+    props: ['params'],
     data() {
         return {
-            monthValue: '',
-            findUser: [],
-            thisObj: {},
-            calendarData: [],
-            indexThis: 0,
-            trueArr: [] //已有设置时间集合
+            formData: {
+                remark: '',
+                contractHouseVos: []
+            },
+            ruleIdObj: {},
+            tableArr: [],
+            tegyArr: []
         };
     },
-    filters: {
-        dateNewType(val) {
-            return val.getDate();
-        }
-    },
     methods: {
-        goback() {
-            this.$emit('initPage');
+        getTegy() {
+            this.$http
+                .get('/sc-charge/scChargeStrategy/page', { pageNum: 1, pageSize: 15, chargeType: 8 })
+                .then(({ data }) => {
+                    this.tegyArr = data.list;
+                })
+                .catch(function () {});
+        },
+        findDetali(id, resolve) {
+            this.$http
+                .get('/sc-community/contract/find/' + id)
+                .then(({ data, status, msg }) => {
+                    if (0 === status) {
+                        if (data !== null) {
+                            Object.assign(this.formData, data);
+                        }
+                        resolve && resolve(data);
+                    } else {
+                        this.$message.error(msg);
+                    }
+                })
+                .catch(() => {});
+        },
+        ruleText(val) {
+            if (!!val) {
+                let res = /###/;
+                val.replace(res, '至');
+                return val;
+            }
         }
     },
-    created() {},
-    mounted() {}
+    created() {
+        this.getTegy();
+        const { row } = this.params;
+        new Promise((resolve) => {
+            this.findDetali(row.id, resolve);
+        }).then((data) => {
+            this.ruleIdObj = data.contractHouseVos[0];
+            this.tegyArr.map((item) => {
+                if (item.id == this.ruleIdObj.ruleId) {
+                    this.tableArr.push(item);
+                }
+            });
+        });
+    }
 };
 </script>
-<style scoped lang='scss'>
+<style lang="scss" scoped>
+.blockCl {
+    clear: both;
+}
+/deep/ .el-form-item__label,
+/deep/ .el-form-item__content,
+/deep/ .el-input__inner {
+    font-size: 12px;
+}
+.mrbt20 {
+    margin: 20px 0;
+}
+/deep/ .el-table th {
+    background: #f8fcff !important;
+}
 </style>

+ 241 - 0
operationSupport/src/views/businessManagement/contractManagement/stepPage/firstStep.vue

@@ -0,0 +1,241 @@
+<template>
+    <el-form ref="form" :model="$parent.formData" :rules="$parent.formRules" label-width="90px">
+        <div class="formContent-item_title">合同信息</div>
+        <el-col :span="12"
+            ><el-form-item label="合同编号" prop="contractNo" required>
+                <el-input v-model="$parent.formData.contractNo" disabled placeholder="请输入合同编号"></el-input> </el-form-item
+        ></el-col>
+        <el-col :span="12">
+            <el-form-item label="合同类型" prop="contractType" required>
+                <el-radio v-model="$parent.formData.contractType" :label="0">租赁合同</el-radio></el-form-item
+            ></el-col
+        >
+        <div class="formContent-item_title">客户信息</div>
+        <el-col :span="24"
+            ><el-form-item label="客户类型" required>
+                <el-radio v-model="$parent.formData.customerType" :label="1">企业</el-radio>
+                <el-radio v-model="$parent.formData.customerType" :label="2">个人</el-radio>
+
+                <el-button type="primary" v-if="$parent.formData.customerType == 1" @click="relation">关联企业</el-button>
+            </el-form-item></el-col
+        >
+        <template v-if="$parent.formData.customerType == 2">
+            <el-col :span="8"
+                ><el-form-item label="客户名称" prop="customerName">
+                    <el-input v-model="$parent.formData.customerName" placeholder="请输入客户名称"></el-input> </el-form-item
+            ></el-col>
+            <el-col :span="8"
+                ><el-form-item label="客户手机" prop="customerPhone">
+                    <el-input
+                        v-model="$parent.formData.customerPhone"
+                        placeholder="请输入客户手机"
+                        maxlength="11"
+                    ></el-input> </el-form-item
+            ></el-col>
+            <el-col :span="8"
+                ><el-form-item label="联系地址" prop="customerAddress">
+                    <el-input v-model="$parent.formData.customerAddress" placeholder="请输入联系地址"></el-input> </el-form-item
+            ></el-col>
+        </template>
+        <el-table
+            :data="[$parent.relationTable]"
+            style="width: 100%"
+            v-if="$parent.formData.customerType == 1 && !!$parent.relationTable.name"
+            class="mrbt20"
+        >
+            <el-table-column prop="name" label="企业名称"> </el-table-column>
+            <el-table-column prop="legalPerson" label="企业法人"> </el-table-column>
+            <el-table-column prop="legalPersonPhone" label="法人手机"> </el-table-column>
+            <el-table-column prop="contactName" label="联系人姓名"> </el-table-column>
+            <el-table-column prop="contactPhone" label="联系人手机"> </el-table-column>
+        </el-table>
+
+        <div class="formContent-item_title">物业信息</div>
+        <el-col :span="12"
+            ><el-form-item label="所属社区" prop="communityId">
+                <el-select v-model="$parent.formData.communityId" placeholder="请选择所属社区" clearable @change="communityChange">
+                    <el-option
+                        v-for="(item, index) in $parent.communityArr"
+                        :key="index"
+                        :label="item.communityName"
+                        :value="item.id"
+                    ></el-option>
+                </el-select> </el-form-item
+        ></el-col>
+        <el-col :span="12">
+            <el-form-item label="房屋信息">
+                <el-cascader
+                    :options="$parent.communityTreeArr"
+                    v-model="$parent.communityTreeIds"
+                    :props="defaultProps"
+                    collapse-tags
+                    @change="findTreeIds"
+                    clearable
+                ></el-cascader>
+            </el-form-item>
+        </el-col>
+        <el-table :data="$parent.tableArr" style="width: 100%" class="mrbt20" v-loading="loadings">
+            <el-table-column prop="communityName" label="所属社区"> </el-table-column>
+            <el-table-column prop="buildingName" label="楼栋"> </el-table-column>
+            <el-table-column prop="unitName" label="单元"> </el-table-column>
+            <el-table-column prop="floorNumber" label="楼层"> </el-table-column>
+            <el-table-column prop="roomNumber" label="房间号"> </el-table-column>
+            <el-table-column prop="buildingTypeDict" label="房屋类型"> </el-table-column>
+            <el-table-column prop="buildingArea" label="建筑面积">
+                <template slot-scope="scope">{{
+                    !!scope.row.buildingArea ? scope.row.buildingArea + '㎡' : '-'
+                }}</template></el-table-column
+            >
+        </el-table>
+        <div class="formContent-item_title">合同周期</div>
+        <el-col :span="12"
+            ><el-form-item label="合同时间" prop="startTime">
+                <el-date-picker
+                    v-model="$parent.times"
+                    class="timeWidth"
+                    value-format="yyyy-MM-dd"
+                    type="daterange"
+                    range-separator="至"
+                    start-placeholder="开始日期"
+                    end-placeholder="结束日期"
+                    @change="effectiveDateToggle"
+                    :editable="false"
+                ></el-date-picker> </el-form-item
+        ></el-col>
+        <el-col :span="12"
+            ><el-form-item label="签订时间" prop="signTime">
+                <el-date-picker
+                    v-model="$parent.formData.signTime"
+                    value-format="yyyy-MM-dd"
+                    type="date"
+                    placeholder="选择日期"
+                    :editable="false"
+                ></el-date-picker> </el-form-item
+        ></el-col>
+        <div class="formContent-item_title">合同附件</div>
+        <el-form-item label="合同附件"> <bz-upload type="img" :uploadArr="$parent.pictureArr" :limit="1"></bz-upload> </el-form-item>
+    </el-form>
+</template>
+<script>
+export default {
+    data() {
+        return {
+            formData: {
+                filePath: '',
+                contractType: 0,
+                customerType: 1,
+                communityId: '',
+                signTime: '',
+                startTime: '',
+                endTime: '',
+                customerName: '',
+                customerPhone: '',
+                customerAddress: ''
+            },
+            times: [],
+            pictureArr: [],
+            relationTable: {},
+
+            //社区
+            communityArr: [],
+            //社区树
+            communityTree: [],
+            //楼栋树
+            communityTreeArr: [],
+            //楼栋ids
+            communityTreeIds: [],
+            tableArr: [],
+            defaultProps: {
+                multiple: true,
+                // emitPath: false,
+                value: 'value', // 唯一标识
+                label: 'name', // 标签显示
+                children: 'children' // 子级
+            },
+            loadings: false
+        };
+    },
+    methods: {
+        findTreeIds(va) {
+            this.$parent.tableArr = [];
+            let idsObj = [];
+            va.map((item, index) => {
+                idsObj.push({ houseId: item[item.length - 1], enable: 1, earnestMoney: '', freeTime: '', contractPlanDtos: [] });
+                this.getfindTreeIds(item[item.length - 1]);
+            });
+            this.$parent.idsObj = idsObj;
+        },
+        getfindTreeIds(id) {
+            this.loadings = true;
+            this.$http
+                .post('/sc-community/assets/house/page', {
+                    id: id,
+                    pageNum: 1,
+                    pageSize: 1
+                })
+                .then(({ data, status, msg }) => {
+                    if (0 === status) {
+                        this.$parent.tableArr.push(data.list[0]);
+                        this.loadings = false;
+                    } else {
+                        this.$message.error(msg);
+                    }
+                })
+                .catch(() => {});
+        },
+        communityChange(val) {
+            this.$parent.communityTree.map((item) => {
+                if (item.id == val) {
+                    this.$parent.communityTreeArr = item.children;
+                }
+            });
+        },
+        effectiveDateToggle(e) {
+            this.$parent.formData.startTime = `${!!e ? e[0] : ''}`;
+            this.$parent.formData.endTime = `${!!e ? e[1] : ''}`;
+        },
+        relation() {
+            new Promise((resolve) => {
+                this.$store.dispatch('addPopup', {
+                    url: '/businessManagement/enterpriseManagement/index.vue',
+                    width: '850px',
+                    height: '400px',
+                    props: {
+                        callback: resolve
+                    },
+                    hideStar: true,
+                    title: '关联企业'
+                });
+            }).then((res) => {
+                this.$parent.relationTable = res;
+                this.$parent.formData.customerPhone = res.contactPhone;
+                this.$parent.formData.customerAddress = res.address;
+                this.$parent.formData.customerName = res.contactName;
+                this.$parent.formData.companyId = res.id;
+            });
+        }
+    },
+    created() {
+        this.communityArr = this.$parent.communityArr;
+        this.communityTree = this.$parent.communityTree;
+    }
+};
+</script>
+<style lang="scss" scoped>
+.formContent-item_title {
+    clear: both;
+}
+.timeWidth {
+    width: 100%;
+}
+.mrbt20 {
+    margin-bottom: 20px;
+}
+/deep/ .el-date-editor .el-range-separator {
+    padding: 0;
+}
+/deep/ .el-form-item__label,
+/deep/ .el-input__inner {
+    font-size: 12px;
+}
+</style>

+ 60 - 0
operationSupport/src/views/businessManagement/contractManagement/stepPage/lastStep.vue

@@ -0,0 +1,60 @@
+<template>
+    <el-form ref="form" :model="$parent.formData" :rules="$parent.formRules" label-width="90px">
+        <div class="formContent-item_title">收款计划</div>
+        <el-table :data="$parent.tableArr" style="width: 100%" class="mrbt20">
+            <el-table-column prop="communityName" label="所属社区"> </el-table-column>
+            <el-table-column prop="buildingName" label="楼栋"> </el-table-column>
+            <el-table-column prop="unitName" label="单元"> </el-table-column>
+            <el-table-column prop="floorNumber" label="楼层"> </el-table-column>
+            <el-table-column prop="roomNumber" label="房间号"> </el-table-column>
+            <el-table-column prop="buildingTypeDict" label="房屋类型"> </el-table-column>
+            <el-table-column prop="buildingArea" label="建筑面积">
+                <template slot-scope="scope">{{
+                    !!scope.row.buildingArea ? scope.row.buildingArea + '㎡' : '-'
+                }}</template></el-table-column
+            >
+        </el-table>
+        <div v-for="(item, index) in $parent.idsObj" :key="index">
+            <div class="formContent-item_title">租赁保证金</div>
+            <el-table :data="[item]" style="width: 100%" class="mrbt20">
+                <el-table-column label="期数"> 第1期</el-table-column>
+                <el-table-column label="应收日期">{{ $moment(new Date($parent.formData.startTime)).format('YYYY-MM-DD') }}</el-table-column>
+                <el-table-column label="应收金额(元)">{{ item.earnestMoney }} </el-table-column>
+            </el-table>
+            <div class="formContent-item_title">租金</div>
+            <el-table :data="item.contractPlanDtos" style="width: 100%" class="mrbt20">
+                <el-table-column prop="period" label="期数">
+                    <template slot-scope="scope"> 第 {{ scope.row.period || '' }}期 </template>
+                </el-table-column>
+                <el-table-column label="应收日期" prop="amount"></el-table-column>
+                <el-table-column label="计费周期" prop="cycle"> </el-table-column>
+                <el-table-column prop="rent" label="租金(元)"> </el-table-column>
+                <el-table-column prop="amount" label="应收金额(元)"> </el-table-column>
+            </el-table>
+        </div>
+    </el-form>
+</template>
+<script>
+export default {
+    data() {
+        return {};
+    },
+    methods: {},
+    created() {}
+};
+</script>
+<style lang="scss" scoped>
+.formContent-item_title {
+    clear: both;
+}
+.mrbt20 {
+    margin-bottom: 20px;
+}
+/deep/ .el-date-editor .el-range-separator {
+    padding: 0;
+}
+/deep/ .el-form-item__label,
+/deep/ .el-input__inner {
+    font-size: 12px;
+}
+</style>

+ 172 - 0
operationSupport/src/views/businessManagement/contractManagement/stepPage/renewal.vue

@@ -0,0 +1,172 @@
+<template>
+    <el-form :model="formData" :rules="ruleForm" ref="form" label-width="85px">
+        <div class="formContent-item_title">合同信息</div>
+
+        <div>
+            <el-col :span="12">
+                <el-form-item label="合同编号:"> {{ formData.contractNo }} </el-form-item>
+            </el-col>
+            <el-col :span="12">
+                <el-form-item label="合同时间:">
+                    {{ !!formData.startTime ? this.$moment(new Date(formData.startTime)).format('YYYY-MM-DD') : '-' }} 至
+                    {{ !!formData.endTime ? this.$moment(new Date(formData.endTime)).format('YYYY-MM-DD') : '-' }}
+                </el-form-item>
+            </el-col>
+            <el-form-item label="续期至" prop="endTimes" label-width="75px">
+                <el-date-picker
+                    v-model="formData.endTimes"
+                    value-format="yyyy-MM-dd"
+                    type="date"
+                    range-separator="至"
+                    placeholder="选择日期"
+                    :editable="false"
+                ></el-date-picker>
+            </el-form-item>
+        </div>
+        <div class="formContent-item_title blockCl">租金信息</div>
+        <el-col :span="12">
+            <el-form-item label="租金规则" label-width="75px" required>
+                <el-select v-model="formData.ruleId" placeholder="请选择租金规则" disabled>
+                    <el-option v-for="(item, index) in tegyArr" :key="index" :label="item.chargeName" :value="item.id"></el-option>
+                </el-select>
+            </el-form-item>
+        </el-col>
+        <el-table :data="tableArr" style="width: 100%" class="mrbt20">
+            <el-table-column prop="chargeName" label="费用名称"> </el-table-column>
+            <el-table-column label="计费方式" width="100">
+                <template slot-scope="scope">
+                    <span v-if="scope.row.chargeMode === 1">固定收费 </span>
+                    <span v-if="scope.row.chargeMode === 2">价格*面积收费</span>
+                    <span v-if="scope.row.chargeMode === 3">阶梯计费 </span>
+                    <span v-if="scope.row.chargeMode === 4">单价*用量</span>
+                </template>
+            </el-table-column>
+            <el-table-column label="单价"></el-table-column>
+            <el-table-column label="月租金">
+                <template slot-scope="scope">
+                    {{ scope.row.chargePrice }}
+                </template>
+            </el-table-column>
+            <el-table-column prop="roomNumber" label="计费周期">
+                <template slot-scope="scope"> {{ scope.row.chargeCycle || 0 }} 个月 </template>
+            </el-table-column>
+            <el-table-column prop="buildingTypeDict" label="滞纳金标准" width="180">
+                <template slot-scope="scope"> 欠费{{ scope.row.arrearsDays }}天后,收{{ scope.row.lateFee || 0 }} ‰滞纳金 </template>
+            </el-table-column>
+            <el-table-column prop="buildingArea" label="递增规则" width="180">
+                <template slot-scope="scope">
+                    {{ scope.row.increasingYear }}年后,每年递增 {{ scope.row.increasingPercentage || 0 }} %
+                </template></el-table-column
+            >
+        </el-table>
+    </el-form>
+</template>
+<script >
+export default {
+    props: ['params'],
+    data() {
+        return {
+            formData: {
+                endTimes: '',
+                ruleId: ''
+            },
+            ruleForm: {
+                endTimes: this.$valid.custome({
+                    validator(rule, value, cb) {
+                        const rl = rule;
+                        if (!value) {
+                            rl.message = '请选择时间';
+                            cb(new Error());
+                        } else {
+                            cb();
+                        }
+                    }
+                })
+            },
+            tableArr: [],
+            tegyArr: []
+        };
+    },
+    methods: {
+        submit() {
+            this.$refs.form.validate((valid) => {
+                if (valid) {
+                    let installData = { endTime: this.formData.endTimes, id: this.formData.id };
+                    var loading = this.$loading();
+                    this.$http
+                        .post(`/sc-community/contract/leaseRenewal`, 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();
+                        });
+                }
+            });
+        },
+        findDetali(id, resolve) {
+            this.$http
+                .get('/sc-community/contract/find/' + id)
+                .then(({ data, status, msg }) => {
+                    if (0 === status) {
+                        if (data !== null) {
+                            Object.assign(this.formData, data);
+                            this.formData.endTimes = '';
+                        }
+                        resolve && resolve(data);
+                    } else {
+                        this.$message.error(msg);
+                    }
+                })
+                .catch(() => {});
+        },
+        getTegy() {
+            this.$http
+                .get('/sc-charge/scChargeStrategy/page', { pageNum: 1, pageSize: 15, chargeType: 8 })
+                .then(({ data }) => {
+                    this.tegyArr = data.list;
+                })
+                .catch(function () {});
+        }
+    },
+    created() {
+        const { row } = this.params;
+        new Promise((resolve) => {
+            this.getTegy();
+            this.findDetali(row.id, resolve);
+        }).then((data) => {
+            data.contractHouseVos.map((item, index) => {
+                this.formData.ruleId = item.ruleId;
+            });
+            this.tegyArr.map((item) => {
+                if (item.id == this.formData.ruleId) {
+                    this.tableArr.push(item);
+                }
+            });
+        });
+    }
+};
+</script>
+<style lang="scss" scoped>
+.blockCl {
+    clear: both;
+}
+/deep/ .el-form-item__label,
+/deep/ .el-form-item__content,
+/deep/ .el-input__inner {
+    font-size: 12px;
+}
+.mrbt20 {
+    margin: 20px 0;
+}
+/deep/ .el-table th {
+    background: #f8fcff !important;
+}
+</style>

+ 162 - 0
operationSupport/src/views/businessManagement/contractManagement/stepPage/rentWithdrawal.vue

@@ -0,0 +1,162 @@
+<template>
+    <el-form :model="formData" label-width="85px">
+        <div class="formContent-item_title">基本信息</div>
+        <div class="deTitle">房屋信息</div>
+        <el-table :data="formData.contractHouseVos" style="width: 100%" class="mrbt20">
+            <el-table-column prop="communityName" label="所属社区"> </el-table-column>
+            <el-table-column prop="buildingName" label="楼栋"> </el-table-column>
+            <el-table-column prop="unitName" label="单元"> </el-table-column>
+            <el-table-column prop="floorNumber" label="楼层"> </el-table-column>
+            <el-table-column prop="roomNumber" label="房间号"> </el-table-column>
+            <el-table-column  label="房屋类型">
+                <template slot-scope="scope">{{ scope.row.buildingType == 1 ? '住宅' : '商业' }}</template>
+            </el-table-column>
+            <el-table-column prop="buildingArea" label="建筑面积">
+                <template slot-scope="scope">{{
+                    !!scope.row.buildingArea ? scope.row.buildingArea + '㎡' : '-'
+                }}</template></el-table-column
+            >
+        </el-table>
+
+        <div>
+            <el-col :span="8">
+                <el-form-item label="合同编号:"> {{ formData.contractNo }} </el-form-item>
+            </el-col>
+            <el-col :span="8">
+                <el-form-item label="合同类型:"> 租赁合同 </el-form-item>
+            </el-col>
+            <div class="blockCl">
+                <el-col :span="8">
+                    <el-form-item label="客户类型:"> {{ formData.customerType == 1 ? '企业' : '个人' }} </el-form-item></el-col
+                >
+                <el-col :span="8">
+                    <el-form-item label="客户名称:"> {{ formData.customerName }} </el-form-item></el-col
+                >
+                <el-col :span="8">
+                    <el-form-item label="企业法人:" label-width="110px"> {{ formData.customerName }} </el-form-item></el-col
+                >
+            </div>
+
+            <div class="blockCl">
+                <el-col :span="8">
+                    <el-form-item label="法人手机:"> {{ formData.customerPhone }} </el-form-item></el-col
+                >
+                <el-col :span="8">
+                    <el-form-item label="联系人:"> {{ formData.customerName }} </el-form-item></el-col
+                >
+                <el-col :span="8">
+                    <el-form-item label="联系人手机:" label-width="110px"> {{ formData.customerPhone }} </el-form-item></el-col
+                >
+            </div>
+
+            <el-col :span="8">
+                <el-form-item label="合同时间:">
+                    {{ this.$moment(new Date(formData.startTime)).format('YYYY-MM-DD') }} 至
+                    {{ this.$moment(new Date(formData.endTime)).format('YYYY-MM-DD') }}
+                </el-form-item>
+            </el-col>
+            <el-col :span="8">
+                <el-form-item label="签订时间:">{{ this.$moment(new Date(formData.signTime)).format('YYYY-MM-DD') }}</el-form-item>
+            </el-col>
+        </div>
+        <div class="formContent-item_title blockCl">退租信息</div>
+        <el-form-item label="退租原因" label-width="75px">
+            <el-input type="textarea" :rows="4" placeholder="请输入退租原因" v-model="formData.remark" maxlength="200" show-word-limit>
+            </el-input>
+        </el-form-item>
+    </el-form>
+</template>
+<script >
+export default {
+    props: ['params'],
+    data() {
+        return {
+            formData: {
+                remark: '',
+                contractHouseVos: []
+            },
+            tableArr: []
+        };
+    },
+    methods: {
+        submit() {
+            // let installData = this.formData;
+            let installData = { contractStatus: 2, id: this.formData.id, remark: this.formData.remark, userId: this.formData.userId };
+            var loading = this.$loading();
+            this.$http
+                .post(`/sc-community/contract/quitLease`, 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();
+                });
+        },
+        //房屋信息
+        getfindTreeIds(id) {
+            this.$http
+                .post('/sc-community/assets/house/page', {
+                    id: id,
+                    pageNum: 1,
+                    pageSize: 1
+                })
+                .then(({ data, status, msg }) => {
+                    if (0 === status) {
+                        this.tableArr.push(data.list[0]);
+                    } else {
+                        this.$message.error(msg);
+                    }
+                })
+                .catch(() => {});
+        },
+        findDetali(id, resolve) {
+            this.$http
+                .get('/sc-community/contract/find/' + id)
+                .then(({ data, status, msg }) => {
+                    if (0 === status) {
+                        if (data !== null) {
+                            Object.assign(this.formData, data);
+                        }
+                        resolve && resolve(data);
+                    } else {
+                        this.$message.error(msg);
+                    }
+                })
+                .catch(() => {});
+        }
+    },
+    created() {
+        const { row } = this.params;
+        new Promise((resolve) => {
+            this.findDetali(row.id, resolve);
+        }).then((data) => {
+            // data.contractHouseVos.map((item, index) => {
+            //     this.getfindTreeIds(item.houseId);
+            // });
+        });
+    }
+};
+</script>
+<style lang="scss" scoped>
+.blockCl {
+    clear: both;
+}
+/deep/ .el-form-item__label,
+/deep/ .el-form-item__content,
+/deep/ .el-input__inner {
+    font-size: 12px;
+}
+.mrbt20 {
+    margin: 20px 0;
+}
+/deep/ .el-table th {
+    background: #f8fcff !important;
+}
+</style>

+ 175 - 0
operationSupport/src/views/businessManagement/contractManagement/stepPage/stepTwo.vue

@@ -0,0 +1,175 @@
+<template>
+    <el-form ref="form" :model="$parent.formData" :rules="$parent.formRules" label-width="90px">
+        <div class="formContent-item_title">房屋信息</div>
+
+        <el-table :data="$parent.tableArr" style="width: 100%" class="mrbt20">
+            <el-table-column prop="communityName" label="所属社区"> </el-table-column>
+            <el-table-column prop="buildingName" label="楼栋"> </el-table-column>
+            <el-table-column prop="unitName" label="单元"> </el-table-column>
+            <el-table-column prop="floorNumber" label="楼层"> </el-table-column>
+            <el-table-column prop="roomNumber" label="房间号"> </el-table-column>
+            <el-table-column prop="buildingTypeDict" label="房屋类型"> </el-table-column>
+            <el-table-column prop="buildingArea" label="建筑面积">
+                <template slot-scope="scope">{{
+                    !!scope.row.buildingArea ? scope.row.buildingArea + '㎡' : '-'
+                }}</template></el-table-column
+            >
+        </el-table>
+        <div v-for="(item, index) in $parent.idsObj" :key="index">
+            <el-form-item label="租金规则" :rules="rulesFun('租金规则', item.ruleId)">
+                <el-select v-model="item.ruleId" placeholder="请选择租金规则" clearable @change="ruleIdChange(index, item.ruleId)">
+                    <el-option v-for="(item, index) in tegyArr" :key="index" :label="item.chargeName" :value="item.id"></el-option>
+                </el-select>
+            </el-form-item>
+            <el-table :data="item.thisArr" style="width: 100%" class="mrbt20">
+                <el-table-column prop="chargeName" label="费用名称"> </el-table-column>
+                <el-table-column label="计费方式">
+                    <template slot-scope="scope">
+                        <span v-if="scope.row.chargeMode === 1">固定收费 </span>
+                        <span v-if="scope.row.chargeMode === 2">价格*面积收费</span>
+                        <span v-if="scope.row.chargeMode === 3">阶梯计费 </span>
+                        <span v-if="scope.row.chargeMode === 4">单价*用量</span>
+                    </template>
+                </el-table-column>
+                <el-table-column label="单价"> </el-table-column>
+                <el-table-column label="月租金">
+                    <template slot-scope="scope">
+                        {{ scope.row.chargePrice }}
+                    </template>
+                </el-table-column>
+                <el-table-column prop="roomNumber" label="计费周期">
+                    <template slot-scope="scope"> {{ scope.row.chargeCycle || 0 }} 个月 </template>
+                </el-table-column>
+                <el-table-column prop="buildingTypeDict" label="滞纳金标准">
+                    <template slot-scope="scope"> 欠费{{ scope.row.arrearsDays }}天后,收{{ scope.row.lateFee || 0 }} ‰滞纳金 </template>
+                </el-table-column>
+                <el-table-column prop="buildingArea" label="递增规则">
+                    <template slot-scope="scope">
+                        {{ scope.row.increasingYear }}年后,每年递增 {{ scope.row.increasingPercentage || 0 }} %
+                    </template></el-table-column
+                >
+            </el-table>
+            <el-col :span="13">
+                <el-form-item label="免租期">
+                    <el-date-picker
+                        v-model="item.timesTwo"
+                        class="timeWidth"
+                        value-format="yyyy-MM"
+                        type="daterange"
+                        range-separator="至"
+                        start-placeholder="开始日期"
+                        end-placeholder="结束日期"
+                        @change="effectiveDateToggle(item, item.timesTwo)"
+                        :editable="false"
+                    ></el-date-picker>
+                </el-form-item>
+            </el-col>
+            <el-col :span="12"
+                ><el-form-item label="租赁保证金">
+                    <el-input v-model="item.earnestMoney" placeholder="请输入租赁保证金"></el-input> </el-form-item
+            ></el-col>
+            <el-col :span="12"
+                ><el-form-item label="租赁保证金是否抵扣第一期租金:" label-width="220px">
+                    <el-radio v-model="item.enable" :label="1">是</el-radio>
+                    <el-radio v-model="item.enable" :label="2">否</el-radio>
+                </el-form-item></el-col
+            >
+        </div>
+    </el-form>
+</template>
+<script>
+export default {
+    data() {
+        return {
+            times: [],
+            tegyArr: [],
+            formRules: {}
+        };
+    },
+    methods: {
+        rulesFun(name, val) {
+            return {
+                required: true,
+                message: `${name}不能为空`,
+                trigger: 'change',
+                validator(rule, value, cb) {
+                    if (!val) {
+                        cb(new Error());
+                    } else {
+                        cb();
+                    }
+                }
+            };
+        },
+        effectiveDateToggle(item, val) {
+            item.freeTime = `${!!val ? val[0] : ''}###${!!val ? val[1] : ''}`;
+        },
+        ruleIdChange(index, id) {
+            this.tegyArr.map((item) => {
+                if (item.id == id) {
+                    this.$parent.idsObj[index].thisArr = [item];
+                    this.$parent.idsObj[index].chargePrice = item.chargePrice;
+                    this.$parent.idsObj[index].cycle = item.chargeCycle;
+                    this.$parent.idsObj[index].increasingPercentage = item.increasingPercentage;
+                    this.$parent.idsObj[index].increasingYear = item.increasingYear;
+                }
+            });
+            this.$store.getters['getPopups'][0].nextStepButton = false;
+        },
+        getList() {
+            const { formData, idsObj } = this.$parent;
+            let arrs = [];
+            idsObj.map((item) => {
+                arrs.push({
+                    amount: item.chargePrice,
+                    cycle: item.cycle,
+                    earnestMoney: item.earnestMoney,
+                    enable: item.enable,
+                    endTime: formData.endTime,
+                    takeEffectDate: formData.startTime,
+                    freeTime: item.freeTime,
+                    houseId: item.houseId,
+                    increasingPercentage: item.increasingPercentage,
+                    increasingYear: item.increasingYear
+                });
+            });
+            this.$http
+                .post('/sc-community/contract/getPlans', arrs)
+                .then(({ data }) => {
+                    idsObj.map((item) => {
+                        item.contractPlanDtos = data[item.houseId];
+                        //   item.chargeCycle = data[item.houseId].cycle
+                    });
+                    console.log(idsObj);
+                })
+                .catch(function () {});
+        },
+        getTegy() {
+            this.$http
+                .get('/sc-charge/scChargeStrategy/page', { pageNum: 1, pageSize: 15, chargeType: 8 })
+                .then(({ data }) => {
+                    this.tegyArr = data.list;
+                })
+                .catch(function () {});
+        }
+    },
+    created() {
+        this.getTegy();
+    }
+};
+</script>
+<style lang="scss" scoped>
+.formContent-item_title {
+    clear: both;
+}
+.mrbt20 {
+    margin-bottom: 20px;
+}
+/deep/ .el-date-editor .el-range-separator {
+    padding: 0;
+}
+/deep/ .el-form-item__label,
+/deep/ .el-input__inner {
+    font-size: 12px;
+}
+</style>

+ 15 - 7
operationSupport/src/views/businessManagement/enterpriseManagement/index.vue

@@ -3,17 +3,21 @@
         <template v-if="isLook">
             <div class="search">
                 <el-input placeholder="输入企业名称" class="search-input" clearable v-model="mixins_query.name"></el-input>
-                <el-select v-model="mixins_query.industry" placeholder="请选择所属行业" clearable>
-                    <el-option v-for="(item, index) in industryArr" :key="index" :label="item.name" :value="item.code"></el-option>
-                </el-select>
+                <template v-if="!params">
+                    <el-select v-model="mixins_query.industry" placeholder="请选择所属行业" clearable>
+                        <el-option v-for="(item, index) in industryArr" :key="index" :label="item.name" :value="item.code"></el-option>
+                    </el-select>
+                </template>
                 <el-button type="primary" class="search-btn" @click="mixins_search" icon="el-icon-search">查询 </el-button>
                 <div class="search-icon">
                     <el-tooltip class="item" effect="light" placement="bottom" content="新增">
                         <i class="zoniot_font zoniot-icon-tianjia2" @click="addOrEdit('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>
+                    <template v-if="!params">
+                        <el-tooltip class="item" effect="light" placement="bottom" content="导出">
+                            <i class="zoniot_font zoniot-icon-daochu2" @click="exportExcel"></i>
+                        </el-tooltip>
+                    </template>
                 </div>
             </div>
             <div class="roles-wrap">
@@ -30,7 +34,7 @@
                         <div class="opt">
                             <template v-if="!!params">
                                 <el-tooltip effect="light" placement="bottom" content="关联">
-                                    <i class="zoniot_font zoniot-icon-xiangqing" @click="lookDetail(scope.row)"></i>
+                                    <i class="zoniot_font zoniot-icon-guanlian" @click="relation(scope.row)"></i>
                                 </el-tooltip>
                             </template>
                             <template v-else>
@@ -144,6 +148,10 @@ export default {
         lookDetail() {
             this.isLook = false;
         },
+        relation(row) {
+            this.params.callback(row);
+            this.$emit('close');
+        },
         getindustry(type, resolve) {
             this.$http
                 .postForm('/sc-community/enterprise/option', { type: type })

+ 1 - 0
operationSupport/src/views/businessManagement/enterpriseManagement/stepPage/add.vue

@@ -174,6 +174,7 @@ export default {
     clear: both;
 }
 /deep/ .el-form-item__label,
+/deep/ .el-form-item__content,
 /deep/ .el-input__inner {
     font-size: 12px;
 }

+ 2 - 0
operationSupport/src/views/payService/billingRules/index.vue

@@ -12,6 +12,8 @@
                 <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-button type="primary" class="search-btn" @click="mixins_search" icon="el-icon-search">查询 </el-button>
             <div class="search-icon">