Переглянути джерело

Merge branch 'new_web2.0' of http://39.108.172.131:3000/Shannon_mu/SmartCommunity into new_web2.0

D4THYL3\long 3 роки тому
батько
коміт
0bd50c3fe0
30 змінених файлів з 1926 додано та 222 видалено
  1. 1 1
      accessControlSystem/src/config/env.production.js
  2. 1 1
      energyManagement/src/config/env.production.js
  3. 1 0
      login/package.json
  4. 1 1
      login/src/config/env.development.js
  5. 4 3
      login/src/config/env.production.js
  6. 1 0
      operationSupport/src/assets/css/public-style.scss
  7. 15 0
      operationSupport/src/components/common/alertModal.vue
  8. 19 4
      operationSupport/src/components/common/uploadList.vue
  9. 1 1
      operationSupport/src/config/env.development.js
  10. 1 1
      operationSupport/src/config/env.production.js
  11. 92 20
      operationSupport/src/views/businessManagement/contractManagement/index.vue
  12. 279 127
      operationSupport/src/views/businessManagement/contractManagement/stepPage/add.vue
  13. 187 24
      operationSupport/src/views/businessManagement/contractManagement/stepPage/details.vue
  14. 241 0
      operationSupport/src/views/businessManagement/contractManagement/stepPage/firstStep.vue
  15. 60 0
      operationSupport/src/views/businessManagement/contractManagement/stepPage/lastStep.vue
  16. 172 0
      operationSupport/src/views/businessManagement/contractManagement/stepPage/renewal.vue
  17. 162 0
      operationSupport/src/views/businessManagement/contractManagement/stepPage/rentWithdrawal.vue
  18. 174 0
      operationSupport/src/views/businessManagement/contractManagement/stepPage/stepTwo.vue
  19. 32 14
      operationSupport/src/views/businessManagement/enterpriseManagement/index.vue
  20. 9 8
      operationSupport/src/views/businessManagement/enterpriseManagement/stepPage/add.vue
  21. 125 7
      operationSupport/src/views/businessManagement/enterpriseManagement/stepPage/details.vue
  22. 63 0
      operationSupport/src/views/businessManagement/enterpriseManagement/stepPage/householdTable.vue
  23. 245 0
      operationSupport/src/views/businessManagement/enterpriseManagement/stepPage/style.scss
  24. 3 2
      operationSupport/src/views/businessManagement/rentalAndSale/index.vue
  25. 2 2
      operationSupport/src/views/newWorkBench/components/collectionRate.vue
  26. 27 2
      operationSupport/src/views/parkingLotAdministration/parkingSpaceList.vue
  27. 3 2
      operationSupport/src/views/patrolManagement/popups/scheduling.vue
  28. 2 0
      operationSupport/src/views/payService/billingRules/index.vue
  29. 2 1
      operationSupport/src/views/payService/collection/stepPage/add.vue
  30. 1 1
      userCenter/src/config/env.production.js

+ 1 - 1
accessControlSystem/src/config/env.production.js

@@ -9,7 +9,7 @@ module.exports = {
   edition: "production",
   Env: "prod", // // 测试环境 dev |  正式环境 prod
   baseUrl: "http://114.135.61.186:21020/sc-login/", // 项目地址
-  baseApi: "http://114.135.61.186:21020", // 本地api请求地址
+  baseApi: "http://14.29.248.135:8888", // 本地api请求地址
   baseMapApi: "http://114.135.61.186:21020", // arcgis API
   baseImgApi: "http://114.135.61.186:21020", // 图片api请求地址
   baseExcelApi: "http://114.135.61.186:21020", // excel请求地址

+ 1 - 1
energyManagement/src/config/env.production.js

@@ -9,7 +9,7 @@ module.exports = {
   edition: "production",
   Env: "prod", // // 测试环境 dev |  正式环境 prod
   baseUrl: "http://114.135.61.186:21020/sc-energyMg/", // 项目地址
-  baseApi: "http://114.135.61.186:21020", // 本地api请求地址
+  baseApi: "http://14.29.248.135:8888", // 本地api请求地址
   baseMapApi: "http://114.135.61.186:21020", // arcgis API
   baseImgApi: "http://114.135.61.186:21020", // 图片api请求地址
   baseExcelApi: "http://114.135.61.186:21020", // excel请求地址

+ 1 - 0
login/package.json

@@ -8,6 +8,7 @@
     "dev-sit": "vue-cli-service serve --mode sit",
     "dev-production": "vue-cli-service serve --mode production",
     "build-sit": "vue-cli-service build --mode sit",
+    "build-production": "vue-cli-service build --mode production",
     "build": "vue-cli-service build"
   },
   "dependencies": {

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

@@ -7,7 +7,7 @@
  */
 module.exports = {
   edition: "development",
-  Env: "prod", // 测试环境 dev |  正式环境 prod
+  Env: "dev", // 测试环境 dev |  正式环境 prod
   // baseUrl: "http://114.135.61.188:18093/login/login", // 项目地址
   // baseApi: "http://10.0.0.62:8081", // 本地api请求地址
   // baseImgApi: "http://114.135.61.187:38082", // 图片api请求地址

+ 4 - 3
login/src/config/env.production.js

@@ -8,9 +8,10 @@
 module.exports = {
   edition: "production",
   Env: "prod", // 商用环境: prod   |   演示环境: demo
-  baseUrl: "http://114.135.61.188:18093/login/", // 项目地址
-  baseApi: "http://114.135.61.187:38081", // 本地api请求地址
-  baseImgApi: "http://114.135.61.187:38082", // 图片api请求地址
+  baseUrl: "http://14.29.248.135:8888/sc-login/login", // 项目地址
+  baseApi: "http://14.29.248.135:8888", // 本地api请求地址
+  baseImgApi: "http://14.29.248.135:8888", // 图片api请求地址
+  loginUrl: "http://14.29.248.135:8888/sc-login/login", // 项目地址
 
   upload: {
     imageSize: 5, // MB

+ 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;

+ 15 - 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> -->
@@ -104,6 +108,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() {
@@ -154,6 +166,9 @@ export default {
                 border: 1px solid #0eaeff;
                 color: #0eaeff;
             }
+            .dialog-footer .previousStep {
+                float: left;
+            }
             .el-button--primary {
                 background-color: #0eaeff;
                 // border-color: #0eaeff;

+ 19 - 4
operationSupport/src/components/common/uploadList.vue

@@ -1,8 +1,9 @@
 <template>
     <div class="clickUpload">
-        <div class="clickUpText" v-for="item in uploadArr" :key="item">
+        <div class="clickUpText" :class="!typeVideo(item) && !typeIcon(item) ? 'fileName' : ''" v-for="item in uploadArr" :key="item">
             <video v-if="typeVideo(item)" :src="item"></video>
-            <img v-else class="dataImg" :src="item" />
+            <img v-else-if="typeIcon(item)" class="dataImg" :src="item" />
+            <div v-else>{{ item }}</div>
         </div>
         <div class="clickUpText" v-if="uploadArr.length < limit">
             <div class="addImg" @click="clickFile"><i class="el-icon-plus ashText"></i></div>
@@ -23,7 +24,7 @@
 </template>
 <script>
 export default {
-    name:'bzUpload',
+    name: 'bzUpload',
     data() {
         return {
             token: {
@@ -40,6 +41,10 @@ export default {
             type: String,
             default: 'img,video'
         },
+        className: {
+            type: Boolean,
+            default: false
+        },
         name: {
             type: String,
             default: 'file'
@@ -80,6 +85,11 @@ export default {
             let videoType = ['mp4'];
             return videoType.includes(type);
         },
+        typeIcon(str) {
+            let type = str.slice(str.lastIndexOf('.') + 1, str.length);
+            let imgType = ['png', 'jpeg', 'jpg'];
+            return imgType.includes(type);
+        },
         clickFile() {
             this.$refs['upload'].$children[0].$refs.input.click();
         }
@@ -90,7 +100,7 @@ export default {
 .clickUpload {
     display: flex;
     .clickUpText {
-        height:60px;
+        height: 60px;
         width: 80px;
         border: 1px solid #e0e1e3;
         box-sizing: border-box;
@@ -117,5 +127,10 @@ export default {
             height: 100%;
         }
     }
+    .fileName {
+        height: initial !important;
+        width: initial !important;
+        border: none;
+    }
 }
 </style>

+ 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请求地址

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

@@ -9,7 +9,7 @@ module.exports = {
   edition: "production",
   Env: "prod", // // 测试环境 dev |  正式环境 prod
   baseUrl: "http://114.135.61.186:21020/sc-login/", // 项目地址
-  baseApi: "http://114.135.61.186:21020", // 本地api请求地址
+  baseApi: "http://14.29.248.135:8888", // 本地api请求地址
   baseMapApi: "http://114.135.61.186:21020", // arcgis API
   baseImgApi: "http://114.135.61.186:21020", // 图片api请求地址
   baseExcelApi: "http://114.135.61.186:21020", // excel请求地址

+ 92 - 20
operationSupport/src/views/businessManagement/contractManagement/index.vue

@@ -21,9 +21,9 @@
                 <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="导出">
+                <!-- <el-tooltip class="item" effect="light" placement="bottom" content="导出">
                     <i class="zoniot_font zoniot-icon-daochu2" @click="exportExcel"></i>
-                </el-tooltip>
+                </el-tooltip> -->
             </div>
         </div>
         <div class="roles-wrap">
@@ -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();
+            });
         }
     }
 };

+ 279 - 127
operationSupport/src/views/businessManagement/contractManagement/stepPage/add.vue

@@ -1,154 +1,163 @@
 <template>
-    <el-form ref="form" :model="formData" :rules="formRules" label-width="110px">
-        <div class="formContent-item_title">合同信息</div>
-        <el-col :span="12"
-            ><el-form-item label="合同编号" prop="name">
-                <el-input v-model="formData.name" disabled placeholder="请输入合同编号"></el-input> </el-form-item
-        ></el-col>
-        <el-col :span="12">
-            <el-form-item label="合同类型" prop="abbreviate">
-                <el-radio v-model="formData.contactGender" :label="1">租赁合同</el-radio></el-form-item
-            ></el-col
-        >
-        <div class="formContent-item_title">客户信息</div>
-        <el-col :span="24"
-            ><el-form-item label="客户类型" prop="name">
-                <el-radio v-model="formData.contactGender" :label="1">企业</el-radio>
-                <el-radio v-model="formData.contactGender" :label="2">个人</el-radio>
-            </el-form-item></el-col
-        >
-        <div class="formContent-item_title">物业信息</div>
-        <el-col :span="8"
-            ><el-form-item label="所属社区" prop="name">
-                <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="name">
-                <el-date-picker
-                    v-model="times"
-                    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="name">
-                <el-date-picker
-                    v-model="times"
-                    value-format="yyyy-MM-dd"
-                    type="date"
-                    range-separator="至"
-                    placeholder="选择日期"
-                    @change="effectiveDateToggle"
-                    :editable="false"
-                ></el-date-picker> </el-form-item
-        ></el-col>
-        <div class="formContent-item_title">合同附件</div>
-    </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: {
-                name: '',
-                abbreviate: '',
-                creditCode: '',
-                industry: '',
-                economicType: '',
-                legalPerson: '',
-                legalPersonPhone: '',
-                address: '',
-                businessLicense: '',
-                contactName: '',
-                contactPhone: '',
-                contactIdCard: '',
-                contactGender: 1
+                contractNo: '',
+                filePath: '',
+                contractType: 0,
+                customerType: null,
+                communityId: '',
+                signTime: '',
+                startTime: '',
+                endTime: '',
+                customerName: '',
+                customerPhone: '',
+                customerAddress: '',
+                contractHouseDtoList: []
+            },
+
+            //租赁规则
+            rules: {
+                ruleId: '',
+                enable: 1,
+                earnestMoney: '',
+                freeTime: ''
             },
+            contractPlanDtos: [],
+            chargeCycle: '',
+            times: [],
+            timesTwo: [],
             pictureArr: [],
+            relationTable: {},
             formRules: {
-                name: [this.$valid.inputRequired('企业名称')],
-                abbreviate: [this.$valid.inputRequired('企业简称')],
-                creditCode: [this.$valid.inputRequired('信用代码')],
-                industry: [this.$valid.selectRequired('所属行业')],
-                economicType: [this.$valid.selectRequired('经济类型')],
-                legalPerson: [this.$valid.inputRequired('企业法人')],
-                legalPersonPhone: [this.$valid.patternPhone('法人手机')],
-                contactName: [this.$valid.inputRequired('联系人姓名')],
-                contactPhone: [this.$valid.patternPhone('联系人手机')],
-                contactIdCard: [this.$valid.inputRequired('联系人身份证')]
-            },
-            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 '到期';
+                customerName: [this.$valid.inputRequired('客户名称')],
+                customerPhone: [this.$valid.inputRequired('客户手机')],
+                customerAddress: [this.$valid.inputRequired('联系地址')],
+                communityId: [this.$valid.selectRequired('社区')],
+                signTime: [this.$valid.selectRequired('签订时间')],
+                startTime: this.$valid.custome({
+                    validator(rule, value, cb) {
+                        const rl = rule;
+                        if (!value) {
+                            rl.message = '请选择合同时间';
+                            cb(new Error());
+                        } else {
+                            cb();
                         }
                     }
-                },
-                {
-                    label: '建筑面积',
-                    prop: 'startTime'
-                }
-            ]
+                })
+            },
+            //多选
+            idsObj: [],
+            //社区
+            communityArr: [],
+            //社区树
+            communityTree: [],
+            //楼栋树
+            communityTreeArr: [],
+            //楼栋ids
+            communityTreeIds: [],
+            tableArr: [],
+            defaultProps: {
+                multiple: true,
+                emitPath: false,
+                value: 'value', // 唯一标识
+                label: 'name', // 标签显示
+                children: 'children' // 子级
+            },
+            loadings: false
         };
     },
     watch: {
         pictureArr(val) {
-            this.formData.businessLicense = val.join();
+            this.formData.filePath = val.join();
         }
     },
     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);
@@ -179,11 +188,88 @@ export default {
                     }
                 })
                 .catch(() => {});
+        },
+        effectiveDateToggle(e) {
+            this.formData.startTime = `${!!e ? e[0] : ''}`;
+            this.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.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 = true;
+                        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;
+            }
+        },
+        randomPassword() {
+            let sun = 15;
+            let randomNumber = [];
+            for (let numb = 0; numb < sun; numb++) {
+                randomNumber.push(parseInt(Math.ceil(Math.random() * sun)));
+            }
+            this.formData.contractNo = randomNumber.toString().replace(/,/g, '');
         }
     },
     created() {
-        const { todo, data, communityArr } = this.params;
+        this.randomPassword();
+        const { todo, data, communityArr, communityTree } = this.params;
         this.communityArr = communityArr;
+        this.communityTree = communityTree;
         if (todo !== 'add') {
             this.findDetali(data.id);
         }
@@ -194,8 +280,74 @@ export default {
 .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;
 }
+.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>

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

@@ -1,39 +1,202 @@
 <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 class="blockCl">
+                <el-col :span="8">
+                    <el-form-item label="合同附件:"> {{ formData.filePath }} </el-form-item></el-col
+                >
+                <el-col :span="8">
+                    <el-form-item label="企业营业执照:" label-width="110px"> {{ formData.businessLicense }} </el-form-item></el-col
+                >
+            </div>
+        </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>
+        <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>
+    </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 :className="true"  :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>

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

@@ -0,0 +1,174 @@
+<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;
+                }
+            });
+        },
+        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>

+ 32 - 14
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">
@@ -28,12 +32,19 @@
                 >
                     <template slot-scope="scope" slot="opt">
                         <div class="opt">
-                            <el-tooltip effect="light" placement="bottom" content="编辑">
-                                <i class="zoniot_font zoniot-icon-bianji" @click="addOrEdit('edit', scope.row)"></i>
-                            </el-tooltip>
-                            <el-tooltip effect="light" placement="bottom" content="详情">
-                                <i class="zoniot_font zoniot-icon-xiangqing" @click="lookDetail(scope.row)"></i>
-                            </el-tooltip>
+                            <template v-if="!!params">
+                                <el-tooltip effect="light" placement="bottom" content="关联">
+                                    <i class="zoniot_font zoniot-icon-guanlian" @click="relation(scope.row)"></i>
+                                </el-tooltip>
+                            </template>
+                            <template v-else>
+                                <el-tooltip effect="light" placement="bottom" content="编辑">
+                                    <i class="zoniot_font zoniot-icon-bianji" @click="addOrEdit('edit', scope.row)"></i>
+                                </el-tooltip>
+                                <el-tooltip effect="light" placement="bottom" content="详情">
+                                    <i class="zoniot_font zoniot-icon-xiangqing" @click="lookDetail(scope.row)"></i>
+                                </el-tooltip>
+                            </template>
                         </div>
                     </template>
                 </zz-table>
@@ -48,6 +59,7 @@ import list from '@utils/list.js';
 import lookDetail from './stepPage/details.vue';
 export default {
     mixins: [list],
+    props: ['params'],
     components: {
         lookDetail
     },
@@ -93,7 +105,8 @@ export default {
             ],
             mixins_post: 'get',
             industryArr: [],
-            economicTypeArr: []
+            economicTypeArr: [],
+            objRow: {}
         };
     },
     created() {
@@ -133,9 +146,14 @@ export default {
         exportExcel() {
             this.__exportExcel('/sc-community/enterprise/excel', this.mixins_query);
         },
-        lookDetail() {
+        lookDetail(row) {
+            this.objRow = row;
             this.isLook = false;
         },
+        relation(row) {
+            this.params.callback(row);
+            this.$emit('close');
+        },
         getindustry(type, resolve) {
             this.$http
                 .postForm('/sc-community/enterprise/option', { type: type })

+ 9 - 8
operationSupport/src/views/businessManagement/enterpriseManagement/stepPage/add.vue

@@ -1,12 +1,12 @@
 <template>
-    <el-form ref="form" :model="formData" :rules="formRules" label-width="110px">
+    <el-form ref="form" :model="formData" :rules="formRules" label-width="80px">
         <div class="formContent-item_title">客户信息</div>
         <el-col :span="8"
             ><el-form-item label="企业名称" prop="name">
                 <el-input v-model="formData.name" clearable placeholder="请输入企业名称"></el-input> </el-form-item
         ></el-col>
         <el-col :span="8">
-            <el-form-item label="企业简称" prop="abbreviate">
+            <el-form-item label="企业简称" >
                 <el-input v-model="formData.abbreviate" clearable placeholder="请输入企业简称"></el-input> </el-form-item
         ></el-col>
         <el-col :span="8"
@@ -39,7 +39,7 @@
                 ></el-input> </el-form-item
         ></el-col>
         <el-col :span="16"
-            ><el-form-item label="注册地址详情">
+            ><el-form-item label="注册地址详情"  label-width="110px">
                 <el-input v-model="formData.address" clearable placeholder="请输入注册地址详情"></el-input></el-form-item
         ></el-col>
         <el-col :span="8"
@@ -48,11 +48,11 @@
 
         <div class="formContent-item_title">联系人信息</div>
         <el-col :span="8"
-            ><el-form-item label="联系人姓名" prop="contactName">
+            ><el-form-item label="联系人姓名" prop="contactName" label-width="90px">
                 <el-input v-model="formData.contactName" clearable placeholder="请输入联系人姓名"></el-input></el-form-item
         ></el-col>
         <el-col :span="8"
-            ><el-form-item label="联系人手机" prop="contactPhone">
+            ><el-form-item label="联系人手机" prop="contactPhone"  label-width="100px">
                 <el-input
                     v-model="formData.contactPhone"
                     clearable
@@ -61,7 +61,7 @@
                 ></el-input></el-form-item
         ></el-col>
         <el-col :span="8"
-            ><el-form-item label="联系人身份证" prop="contactIdCard">
+            ><el-form-item label="联系人身份证" prop="contactIdCard"  label-width="100px">
                 <el-input
                     v-model="formData.contactIdCard"
                     clearable
@@ -70,7 +70,7 @@
                 ></el-input></el-form-item
         ></el-col>
         <el-col :span="8"
-            ><el-form-item label="性别">
+            ><el-form-item label="性别"  label-width="90px">
                 <el-radio v-model="formData.contactGender" :label="1">男</el-radio>
                 <el-radio v-model="formData.contactGender" :label="0">女</el-radio>
             </el-form-item></el-col
@@ -100,7 +100,7 @@ export default {
             pictureArr: [],
             formRules: {
                 name: [this.$valid.inputRequired('企业名称')],
-                abbreviate: [this.$valid.inputRequired('企业简称')],
+                // abbreviate: [this.$valid.inputRequired('企业简称')],
                 creditCode: [this.$valid.inputRequired('信用代码')],
                 industry: [this.$valid.selectRequired('所属行业')],
                 economicType: [this.$valid.selectRequired('经济类型')],
@@ -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;
 }

+ 125 - 7
operationSupport/src/views/businessManagement/enterpriseManagement/stepPage/details.vue

@@ -1,24 +1,121 @@
 <template>
     <div class="scheduling">
         <div class="search">
+            <div class="titleHade">{{fromData.name}}</div>
             <div class="search-icon">
                 <el-tooltip effect="light" placement="bottom" content="返回">
                     <i class="zoniot_font zoniot-icon-fanhui" @click="goback()"></i>
                 </el-tooltip>
             </div>
         </div>
+        <div class="content">
+            <div class="tages">
+                <div v-for="(item, index) in tabs" :key="index" class="tages-list" :class="tabsIndex === index ? 'active' : ''">
+                    <span @click="toggleTab(index)">{{ item.lable }}</span>
+                </div>
+            </div>
+            <div class="content-item" v-show="tabsIndex == 0">
+                <div class="formContent-item_title">基础信息</div>
+
+                <div class="widthFlex">
+                    <household-table :tableName="tableArr.left" :tabData="fromData"></household-table>
+                    <household-table :tableName="tableArr.right" :tabData="fromData"></household-table>
+                </div>
+                <div class="formContent-item_title">联系人信息</div>
+                <div class="widthFlex">
+                    <household-table :tableName="tableArrBottom.left" :tabData="fromData"></household-table>
+                    <household-table :tableName="tableArrBottom.right" :tabData="fromData"></household-table>
+                </div>
+            </div>
+            <div class="content-item" v-show="tabsIndex == 1">
+                <div class="formContent-item_title">合同列表</div>
+            </div>
+        </div>
     </div>
 </template>
 <script>
+import householdTable from './householdTable.vue';
 export default {
+    components: { householdTable },
     data() {
+        var _this = this;
         return {
-            monthValue: '',
-            findUser: [],
-            thisObj: {},
-            calendarData: [],
-            indexThis: 0,
-            trueArr: [] //已有设置时间集合
+            tabsIndex: 0,
+            fromData: {},
+            tabs: [
+                {
+                    lable: '企业信息'
+                },
+                {
+                    lable: '合同信息'
+                }
+            ],
+            tableArr: {
+                left: [
+                    {
+                        lable: '企业名称',
+                        prop: 'name'
+                    },
+                    {
+                        lable: '信用代码',
+                        prop: 'creditCode'
+                    },
+                    {
+                        lable: '经济类型',
+                        prop: 'economicType',
+                        typeArray: _this.$parent.economicTypeArr
+                    },
+                    {
+                        lable: '法人手机',
+                        prop: 'legalPersonPhone'
+                    }
+                ],
+                right: [
+                    {
+                        lable: '企业简称',
+                        prop: 'abbreviate'
+                    },
+                    {
+                        lable: '所属行业',
+                        prop: 'industry',
+                        typeArray: _this.$parent.industryArr
+                    },
+                    {
+                        lable: '企业法人',
+                        prop: 'legalPerson'
+                    },
+                    {
+                        lable: '注册地址',
+                        prop: 'address'
+                    }
+                ]
+            },
+            tableArrBottom: {
+                left: [
+                    {
+                        lable: '联系人姓名',
+                        prop: 'contactName'
+                    },
+                    {
+                        lable: '联系人身份证',
+                        prop: 'contactIdCard'
+                    }
+                ],
+                right: [
+                    {
+                        lable: '联系人手机',
+                        prop: 'contactPhone'
+                    },
+                    {
+                        lable: '性别',
+                        prop: 'contactGender',
+                        typeArray: [
+                            { type: 1, lable: '男' },
+                            { type: 0, lable: '女' }
+                        ]
+                    }
+                ]
+            }
         };
     },
     filters: {
@@ -29,11 +126,32 @@ export default {
     methods: {
         goback() {
             this.$emit('initPage');
+        },
+        toggleTab(index) {
+            this.tabsIndex = index;
+        },
+        getDetail() {
+            this.$http
+                .get('/sc-community/enterprise/find/' + this.$parent.objRow.id)
+                .then(({ status, msg, data }) => {
+                    this.fromData = data;
+                })
+                .catch(() => {});
         }
     },
-    created() {},
+    created() {
+        this.getDetail();
+    },
     mounted() {}
 };
 </script>
 <style scoped lang='scss'>
+@import './style.scss';
+.titleHade{
+    line-height: rem(30);
+    display:inline-block;
+    font-size: 24px;
+    font-weight: 600;
+    color: #424656;
+}
 </style>

+ 63 - 0
operationSupport/src/views/businessManagement/enterpriseManagement/stepPage/householdTable.vue

@@ -0,0 +1,63 @@
+<template>
+    <div class="item-table">
+        <div class="table-list" v-for="item in tableNames" :key="item">
+            <div class="lable">{{ item.lable }}</div>
+            <div class="text" v-if="!!item.typeArray">{{ tabDatas[item.prop] | matchingVal(item.typeArray) }}</div>
+            <div class="text" v-else>{{ tabDatas[item.prop] || ' --' }}</div>
+        </div>
+    </div>
+</template>
+<script>
+import Vue from 'vue';
+let _this = this;
+export default {
+    name: 'householdTable',
+    data() {
+        return {};
+    },
+    props: {
+        tableName: {
+            type: Array
+        },
+        tabData: {
+            type: Object
+        }
+    },
+    filters: {
+        matchingVal(val, arr) {
+            let v = '--';
+            let newDa;
+            if (!!val) {
+                try {
+                    v = '';
+                    newDa = val.split(':');
+                    newDa.forEach((item, index) => {
+                        v += item + arr[index].lable;
+                    });
+                } catch (e) {}
+
+                arr.forEach((item) => {
+                    if (!!item.code && item.code === val) {
+                        v = item.name;
+                    } else if (item.type === val) {
+                        v = item.lable;
+                    }
+                });
+            }
+            return v;
+        }
+    },
+    computed: {
+        tableNames() {
+            return this.tableName;
+        },
+        tabDatas() {
+            return this.tabData;
+        },
+    },
+    created() {}
+};
+</script>
+<style lang='scss' scoped >
+@import './style.scss';
+</style>

+ 245 - 0
operationSupport/src/views/businessManagement/enterpriseManagement/stepPage/style.scss

@@ -0,0 +1,245 @@
+@import "@assets/css/public-style.scss";
+.formContent {
+  display: flex;
+  justify-content: space-between;
+  padding: 20px 20px 0 20px;
+  background: white;
+  .formContent-item {
+    width: calc((100% / 3) - 80px);
+    // width: calc((100vw / 3) - 80px);
+    .formContent-formList {
+      display: flex;
+      justify-content: space-between;
+    }
+    .block-title {
+      width: 200px;
+      height: 80px;
+      background: #ffffff;
+      border-radius: 2px;
+      border: 1px solid #e0e1e3;
+      position: relative;
+      .floor {
+        margin: 16px 0 0 0;
+        // text-align: center;
+        font-weight: 600;
+        font-size: 16px;
+      }
+      .remove {
+        color: $mainBgColor;
+        font-size: 12px;
+        cursor: pointer;
+      }
+      .list-title {
+        margin-left: 20px;
+        position: relative;
+        z-index: 2;
+        // white-space: nowrap;
+      }
+
+      img {
+        &.bg-img {
+          position: absolute;
+          right: 0;
+          top: 0;
+          width: 100px;
+        }
+        &.bg-imgIoc {
+          position: absolute;
+          right: 20px;
+          top: 28px;
+          width: 24px;
+        }
+      }
+    }
+    .addHouse {
+      margin-bottom: 25px;
+    }
+    .add-block {
+      width: 80px;
+      height: 80px;
+      background: #ffffff;
+      border-radius: 2px;
+      border: 1px solid #e0e1e3;
+      position: relative;
+      cursor: pointer;
+      & > img {
+        width: 16px;
+        height: 16px;
+        position: absolute;
+        top: 50%;
+        left: 50%;
+        transform: translate(-50%, -50%);
+      }
+    }
+    .addCat {
+      & > div {
+        float: left;
+        margin-right: 20px;
+        margin-bottom: 20px;
+      }
+    }
+  }
+}
+// .formContent-item_title {
+//   font-size: 14px;
+//   position: relative;
+//   margin-left: 14px;
+//   margin-bottom: 20px;
+//   &::before {
+//     position: absolute;
+//     left: -14px;
+//     top: 4px;
+//     width: 4px;
+//     height: 12px;
+//     border-radius: 2px;
+//     display: block;
+//     background: $mainBgColor;
+//     content: " ";
+//   }
+// }
+.buttons {
+  text-align: right;
+  background: white;
+  padding: 0 20px 20px 0;
+}
+.top-title {
+  padding: 20px;
+  background: white;
+  margin-bottom: 20px;
+  position: relative;
+  h1 {
+    font-size: 30px;
+    line-height: 42px;
+    .titleType {
+      font-size: 14px;
+      width: 68px;
+      height: 30px;
+      border-radius: 2px;
+      text-align: center;
+      line-height: 30px;
+      vertical-align: middle;
+      color: $mainTextColor;
+      border: 1px solid $mainBgColor;
+      font-weight: normal;
+      margin-left: 20px;
+      display: inline-block;
+    }
+  }
+  .right {
+    position: absolute;
+    right: 20px;
+    top: 20px;
+  }
+  .text {
+    margin-top: 10px;
+    font-size: 12px;
+    color: #747d87;
+    span {
+      margin-right: 40px;
+    }
+  }
+}
+
+.content {
+  background: white;
+  .tages {
+    display: flex;
+    padding: 15px 20px;
+    border-bottom: 1px solid #ddd;
+    .tages-list {
+      margin-right: 40px;
+      position: relative;
+      cursor: pointer;
+      &.active {
+        color: $mainTextColor;
+        &::before {
+          position: absolute;
+          left: 0px;
+          bottom: -15px;
+          width: 100%;
+          height: 2px;
+          background: $mainBgColor;
+          content: " ";
+        }
+      }
+    }
+  }
+  .content-item {
+    padding: 30px 20px 20px 20px;
+    .widthFlex {
+      display: flex;
+      margin-bottom: 20px;
+      .item-table {
+        width: 100%;
+        border: 1px solid #e0e1e3;
+        &:first-of-type {
+          border-right: none;
+        }
+        .table-list {
+          display: flex;
+          line-height: 40px;
+
+          border-bottom: 1px solid #e0e1e3;
+          &:last-of-type {
+            border-bottom: none;
+          }
+          .lable {
+            width: 200px;
+            background: #f8fcff;
+            padding-left: 20px;
+            box-sizing: border-box;
+            border-right: 1px solid #e0e1e3;
+          }
+          .text {
+            flex: 1;
+            padding-left: 20px;
+            box-sizing: border-box;
+          }
+        }
+      }
+    }
+  }
+}
+
+.clickUpload {
+  width: 130px;
+  height: 182px;
+  background: #f8fcff;
+  border-radius: 4px;
+  border: 1px solid #e0e1e3;
+  position: relative;
+  z-index: 1000;
+  text-align: center;
+  overflow: hidden;
+  font-size: 12px;
+  cursor: pointer;
+  color: #e0e1e3;
+  .mini-upload {
+    position: absolute;
+    z-index: 0;
+  }
+}
+.clickUpText {
+  height: 100%;
+  width: 100%;
+  pointer-events: none;
+  position: absolute;
+  background: #f8fcff;
+  z-index: 1;
+  img.bg-img {
+    width: 52px;
+    margin-top: 46px;
+    margin-bottom: 12px;
+  }
+  img.dataImg {
+    width: 100%;
+    height: 100%;
+    object-fit: cover;
+  }
+}
+.show-required-icon-star {
+  &:before {
+    content: "*";
+    color: #f56c6c;
+  }
+}

+ 3 - 2
operationSupport/src/views/businessManagement/rentalAndSale/index.vue

@@ -92,12 +92,13 @@ export default {
         },
         rwNumber(row, fh) {
             let SoldNumer = row.houseNumber - row.unSaleNums;
+
             let Sold = 0;
             if (SoldNumer !== 0) {
-                Sold = row.houseNumber / SoldNumer;
+                Sold = SoldNumer / row.houseNumber;
             }
             if (!!fh) {
-                return Math.floor(Sold * 100) / 100 + '%';
+                return Math.floor(Sold * 100)  + '%';
             } else {
                 return SoldNumer;
             }

+ 2 - 2
operationSupport/src/views/newWorkBench/components/collectionRate.vue

@@ -14,7 +14,7 @@
                         :clearable="false"
                     >
                     </el-date-picker>
-                    <div>
+                    <div style="display: flex; justify-content: space-between">
                         <el-select
                             v-model="mixins_query.communityId"
                             placeholder="所有社区"
@@ -174,7 +174,7 @@ export default {
     }
     .model-title {
         .saveColumn-select {
-            width: calc(50% - 5px);
+            width: calc(50% - 10px);
         }
         .saveColumn-select-time {
             width: 100%;

+ 27 - 2
operationSupport/src/views/parkingLotAdministration/parkingSpaceList.vue

@@ -16,9 +16,25 @@
             </el-select>
             <el-button type="primary" @click="mixins_search" class="search-btn" icon="el-icon-search">查询 </el-button>
             <div class="search-icon">
-                <el-tooltip class="item" effect="light" placement="bottom" content="新增">
+                <template>
+                    <el-dropdown type="primary" @command="addCommand">
+                        <span class="zoniot_font zoniot-icon-tianjia2"></span>
+                        <el-dropdown-menu slot="dropdown" hide-on-click="false" class="device-search-dropdown">
+                            <el-dropdown-item command="add">单个添加</el-dropdown-item>
+                            <el-dropdown-item command="batchAdd">
+                                <div class="upload_div">
+                                    <xk-upload class="upload_class" @callback="mixins_search" :params="{ importType: 'PARKING' }">
+                                        <span class="upload_text" slot="content">批量添加</span>
+                                    </xk-upload>
+                                </div>
+                            </el-dropdown-item>
+                            <el-dropdown-item command="template">下载模板</el-dropdown-item>
+                        </el-dropdown-menu>
+                    </el-dropdown>
+                </template>
+                <!-- <el-tooltip class="item" effect="light" placement="bottom" content="新增">
                     <i class="zoniot_font zoniot-icon-tianjia2" @click="addOrEdit('add')"></i>
-                </el-tooltip>
+                </el-tooltip> -->
                 <el-tooltip class="item" effect="light" placement="bottom" content="删除">
                     <i class="zoniot_font zoniot-icon-shanchu2" @click="deleteRow"></i>
                 </el-tooltip>
@@ -206,6 +222,15 @@ export default {
         },
         selectionChange(val) {
             this.selectRow = val;
+        },
+        addCommand(command) {
+            if (command === 'add') {
+                this.addOrEdit('add');
+            }
+            if (command === 'template') {
+                this.__exportExcel('/sc-community/excel/download/template', { importType: 'PARKING' });
+                return;
+            }
         }
     },
     mounted() {},

+ 3 - 2
operationSupport/src/views/patrolManagement/popups/scheduling.vue

@@ -159,8 +159,8 @@ export default {
                 let time = new Date(timeArr[0], Number(timeArr[1]), 0);
                 this.getShiftInformation({
                     patrolRouteId: this.thisObj.id,
-                    startTime: `${timeArr[0]}-${timeArr[1]}-01`,
-                    endTime: `${timeArr[0]}-${timeArr[1]}-${time.getDate()}`
+                    startTime: `${timeArr[0]}-${timeArr[1]}-01 00:00:00`,
+                    endTime: `${timeArr[0]}-${timeArr[1]}-${time.getDate()} 23:59:59`
                 });
             });
         },
@@ -173,6 +173,7 @@ export default {
         getShiftInformation(obj) {
             this.$http.post('/sc-community/patrolRoute/getShiftInformation', obj).then(({ data, status, msg }) => {
                 if (!!data) {
+                    this.calendarData = [];
                     let calendarData = [],
                         trueArr = [];
                     for (let inx in data) {

+ 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">

+ 2 - 1
operationSupport/src/views/payService/collection/stepPage/add.vue

@@ -17,7 +17,7 @@
                 <el-option label="支付宝" :value="2"></el-option>
             </el-select>
         </template>
-        <template slot="authFile">
+        <template slot="authFile" >
             <el-input v-model="formData.authFile" disabled placeholder="请上传授权文件">
                 <i slot="suffix" class="zoniot_font zoniot-icon-shangchuan1" @click="QueryClick"></i>
             </el-input>
@@ -173,6 +173,7 @@ export default {
     created() {
         if (this.params.todo == 'edit') {
             Object.assign(this.formData, this.params.data);
+           this.formCols[0].splice(this.formCols[0].length-1,1) 
         }
     }
 };

+ 1 - 1
userCenter/src/config/env.production.js

@@ -9,7 +9,7 @@ module.exports = {
   edition: "production",
   Env: "prod", // // 测试环境 dev |  正式环境 prod
   baseUrl: "http://114.135.61.188:18093/sc-system/", // 项目地址
-  baseApi: "http://114.135.61.187:38081", // 本地api请求地址
+  baseApi: "http://14.29.248.135:8888", // 本地api请求地址
   baseMapApi: "http://114.135.61.187:38082", // arcgis API
   baseImgApi: "http://114.135.61.187:38082", // 图片api请求地址
   baseExcelApi: "http://114.135.61.187:38082", // excel请求地址