Pārlūkot izejas kodu

Merge branch 'V2' of http://47.92.161.104:10080/zq/jp-housekeeper-portal into V2

tomatozq 4 gadi atpakaļ
vecāks
revīzija
53cafb205b
85 mainītis faili ar 2980 papildinājumiem un 378 dzēšanām
  1. 2 2
      .env.development
  2. 1 1
      package.json
  3. 15 0
      src/App.vue
  4. 5 1
      src/api/base/checkinInfo.js
  5. 7 1
      src/api/base/companyInfo.js
  6. 33 1
      src/api/base/companyPayment.js
  7. 5 1
      src/api/base/iconInfo.js
  8. 16 1
      src/api/base/payService.js
  9. 5 1
      src/api/base/personInfo.js
  10. 19 0
      src/api/base/personPopedomIcon.js
  11. 23 0
      src/api/business/billPush.js
  12. 2 2
      src/routers/modules/base.js
  13. 14 1
      src/routers/modules/business.js
  14. 1 1
      src/views/base/activityInfo-list.vue
  15. 1 1
      src/views/base/alarmConfig-list.vue
  16. 1 1
      src/views/base/alarmInfo-alert-list.vue
  17. 1 1
      src/views/base/alarmInfo-fence-list.vue
  18. 2 1
      src/views/base/applicationExamine-list.vue
  19. 2 1
      src/views/base/businessOut-list.vue
  20. 81 31
      src/views/base/checkinInfo-detail.vue
  21. 196 18
      src/views/base/checkinInfo-list.vue
  22. 122 0
      src/views/base/checkinInfo-payment.vue
  23. 1 1
      src/views/base/companyDeviceRelation-list.vue
  24. 13 14
      src/views/base/companyInfo-detail.vue
  25. 34 2
      src/views/base/companyInfo-list.vue
  26. 115 17
      src/views/base/companyPayment-detail.vue
  27. 115 6
      src/views/base/companyPayment-list.vue
  28. 1 1
      src/views/base/companyPosition-list.vue
  29. 4 0
      src/views/base/deviceInfo-list.vue
  30. 1 1
      src/views/base/electricClientInfo-list.vue
  31. 1 1
      src/views/base/electricMeterInfo-list.vue
  32. 1 1
      src/views/base/employeeInfo-list.vue
  33. 1 1
      src/views/base/holidayInfo-list.vue
  34. 1 1
      src/views/base/iconInfo-list.vue
  35. 1 1
      src/views/base/informationInfo-complaint-list.vue
  36. 1 1
      src/views/base/informationInfo-warranty-list.vue
  37. 1 1
      src/views/base/messageInfo-list.vue
  38. 1 1
      src/views/base/messageInfo-send.vue
  39. 1 1
      src/views/base/messageNotice-list.vue
  40. 1 1
      src/views/base/messageReceiver-list.vue
  41. 1 1
      src/views/base/messageReport-list.vue
  42. 1 1
      src/views/base/messageSendCondition-list.vue
  43. 1 1
      src/views/base/mobileBannerInfo-list.vue
  44. 1 1
      src/views/base/ownerInfo-list.vue
  45. 1 1
      src/views/base/parkingApply-list.vue
  46. 1 1
      src/views/base/parkingInfo-list.vue
  47. 10 4
      src/views/base/payService-list.vue
  48. 1 1
      src/views/base/personDeviceLog-list.vue
  49. 1 1
      src/views/base/personDeviceRelation-BoundList.vue
  50. 1 1
      src/views/base/personDeviceRelation-list.vue
  51. 2 0
      src/views/base/personInfo-detail.vue
  52. 7 2
      src/views/base/personInfo-list.vue
  53. 166 0
      src/views/base/personPopedom-icon.vue
  54. 25 8
      src/views/base/personPopedom-list.vue
  55. 0 15
      src/views/base/personRoleInfo-icon.vue
  56. 1 1
      src/views/base/personRoleInfo-list.vue
  57. 1 1
      src/views/base/problemFeedback-list.vue
  58. 1 1
      src/views/base/punchLocation-list.vue
  59. 1 1
      src/views/base/punchRecord-list.vue
  60. 1 1
      src/views/base/rechange-list.vue
  61. 1 1
      src/views/base/rechargeRecord-list.vue
  62. 1 1
      src/views/base/rechargeRecordProperty-list.vue
  63. 1 1
      src/views/base/rechargeRecordWater-list.vue
  64. 1 1
      src/views/base/roomInfo-list.vue
  65. 1 1
      src/views/base/temperatureRecord-list.vue
  66. 1 1
      src/views/base/terminalInfo-list.vue
  67. 1 1
      src/views/base/warningPusher-list.vue
  68. 438 0
      src/views/business/billPush-checkIn-detail.vue
  69. 572 0
      src/views/business/billPush-checkIn-list.vue
  70. 203 44
      src/views/business/billPush-detail-list.vue
  71. 288 102
      src/views/business/billPush-detail.vue
  72. 240 49
      src/views/business/billPush-list.vue
  73. 9 5
      src/views/business/billPush-order-payTime.vue
  74. 115 0
      src/views/business/billPush-qrcode-pay.vue
  75. 2 1
      src/views/business/clockOut-list.vue
  76. 1 1
      src/views/business/fillAttendance-list.vue
  77. 4 0
      src/views/business/requestForLeave-list.vue
  78. 8 0
      src/views/business/workAttendance-list.vue
  79. 4 0
      src/views/old/oldPersonInfo-list.vue
  80. 1 1
      src/views/sys/dataDictionary-list.vue
  81. 1 1
      src/views/sys/menu-list.vue
  82. 1 1
      src/views/sys/permission-list.vue
  83. 1 1
      src/views/sys/role-list.vue
  84. 12 2
      src/views/sys/user-detail.vue
  85. 1 1
      src/views/sys/user-list.vue

+ 2 - 2
.env.development

@@ -1,9 +1,9 @@
 OUT_PUT_DIR=dist/jp-housekeeper-portal
 
 #VUE_APP_BACKEND_URL=http://127.0.0.1:7070/xpgj
-#VUE_APP_BACKEND_URL=http://127.0.0.1:8086/jp-housekeeper-server
+VUE_APP_BACKEND_URL=http://127.0.0.1:8086/jp-housekeeper-server
 #VUE_APP_BACKEND_URL=http://ykt-test.xiaoxinda.com/jp-housekeeper-server
-VUE_APP_BACKEND_URL=http://xpgjapi.xiaoxinda.com
+#VUE_APP_BACKEND_URL=http://xpgjapi.xiaoxinda.com
 
 #手机企业版
 VUE_APP_COMPANY_HEALTH_WECHAT_QY_URL=http://wisdomhousewechat.sudaonline.net/prevention/motemwall.html 

+ 1 - 1
package.json

@@ -16,7 +16,7 @@
     "hls.js": "^0.14.15",
     "js-cookie": "^2.2.1",
     "nprogress": "0.2.0",
-    "qrcodejs2": "^0.0.2",
+    "qrcodejs2": "0.0.2",
     "vue": "^2.6.10",
     "vue-amap": "^0.5.10",
     "vue-quill-editor": "^3.0.6",

+ 15 - 0
src/App.vue

@@ -50,4 +50,19 @@ body{
     margin-bottom: 10px;
   }
 }
+
+.role-permission {
+  .el-transfer-panel {
+    border: 1px solid #ebeef5;
+    border-radius: 4px;
+    overflow: hidden;
+    background: #fff;
+    display: inline-block;
+    vertical-align: middle;
+    width: 320px;
+    -webkit-box-sizing: border-box;
+    box-sizing: border-box;
+    position: relative;
+  }
+}
 </style>

+ 5 - 1
src/api/base/checkinInfo.js

@@ -41,6 +41,10 @@ function batchRemove(idList){
   });
 }
 
+function updateWechatPayOrAliPay(formModel) {
+  return request.post(constant.serverUrl + "/base/checkinInfo/updateWechatPayOrAliPay", formModel);
+}
+
 export default {
-  create,edit,add,update,remove,batchRemove,pageList
+  create,edit,add,update,remove,batchRemove,pageList,updateWechatPayOrAliPay
 }

+ 7 - 1
src/api/base/companyInfo.js

@@ -78,7 +78,13 @@ function treeList() {
   return request.post(constant.serverUrl + "/base/companyInfo/treeList");
 }
 
+function isOpenMobilePayment(formData) {
+  return request.post(constant.serverUrl + "/base/companyInfo/isOpenMobilePayment",formData);
+}
+
+
+
 export default {
   list, create, edit, add, update, remove, batchRemove, pageList, queryBindDeviceList,
-  bindDevice, unbindDevice,loadChildren,treeList
+  bindDevice, unbindDevice,loadChildren,treeList,isOpenMobilePayment
 }

+ 33 - 1
src/api/base/companyPayment.js

@@ -46,7 +46,39 @@ function batchRemove(idList) {
   });
 }
 
+function updateIsOpenWechatOrAlipay(formModel) {
+  return request.post(constant.serverUrl + "/base/companyPaymentInfo/updateIsOpenWechatOrAlipay", formModel);
+}
+
+function loadDetails(formData) {
+  return request.post(constant.serverUrl + "/base/companyPaymentInfo/loadDetails", formData);
+}
+
+function getCompanyList() {
+  return request.post(constant.serverUrl + "/base/companyPaymentInfo/getCompanyList");
+}
+
+function findByCheckInId(formData) {
+  return request.post(constant.serverUrl + "/base/companyPaymentInfo/findByCheckInId",formData);
+}
+
+function setIsDefault(formData) {
+  return request.post(constant.serverUrl + "/base/companyPaymentInfo/setIsDefault",formData);
+}
+
+function findUserByCompanyId() {
+  return request.post(constant.serverUrl + "/base/companyPaymentInfo/findUserByCompanyId");
+}
+
+
+function findPersonByCompanyId() {
+  return request.post(constant.serverUrl + "/base/companyPaymentInfo/findPersonByCompanyId");
+}
+
+
+
 
 export default {
-    create, edit, add, update, remove, batchRemove, pageList,list
+    create, edit, add, update, remove, batchRemove, pageList,list,updateIsOpenWechatOrAlipay,loadDetails,getCompanyList,findByCheckInId,setIsDefault
+    ,findPersonByCompanyId,findUserByCompanyId
 }

+ 5 - 1
src/api/base/iconInfo.js

@@ -49,6 +49,10 @@ function getIconTypeList(){
   return request.post(constant.serverUrl + "/base/iconInfo/getIconTypeList");
 }
 
+function findAll() {
+  return request.post(constant.serverUrl + "/base/iconInfo/list");
+}
+
 export default {
-  pageList,create,edit,add,update,remove,batchRemove,listByRoleId,getIconTypeList
+  pageList,create,edit,add,update,remove,batchRemove,listByRoleId,getIconTypeList,findAll
 }

+ 16 - 1
src/api/base/payService.js

@@ -38,7 +38,22 @@ function remove(id){
   return request.post(constant.serverUrl + "/base/goodsInfo/delete/" + id);
 }
 
+function payServiceList(formData) {
+  return request.post(constant.serverUrl + "/base/goodsInfo/payServiceList", formData, {
+    headers: {
+      "Content-Type": "application/json"
+    }
+  });
+}
+
+function addList(formData) {
+  return request.post(constant.serverUrl + "/base/goodsInfo/addList", formData, {
+    headers: {
+      "Content-Type": "application/json"
+    }
+  });
+}
 
 export default {
-    payServicePageList,goodsTypeList,addPayService,update,editPayService,create,remove
+    payServicePageList,goodsTypeList,addPayService,update,editPayService,create,remove,payServiceList,addList
   }

+ 5 - 1
src/api/base/personInfo.js

@@ -148,9 +148,13 @@ function findByCompanyId(formData) {
   return request.post(constant.serverUrl + "/base/personInfo/findByCompanyId", formData);
 }
 
+function findByCompanyCode() {
+  return request.post(constant.serverUrl + "/base/personInfo/findByCompanyCode");
+}
+
 export default {
   pageList, create, edit, add, update, remove, batchRemove, exportXls,
   enabledFace, enabledCard, enabledApp, enabledGuest, dataSync, enabledFaceList,
   enabledWechatNotice, unbindWechat, lifeRecordList, clearFaceImg, batchClearFaceImg,
-  enabledSync, enabledSyncList, bindWechat,findByCompanyId
+  enabledSync, enabledSyncList, bindWechat,findByCompanyId,findByCompanyCode
 }

+ 19 - 0
src/api/base/personPopedomIcon.js

@@ -0,0 +1,19 @@
+import request from '@/utils/request'
+import constant from '@/constant'
+
+function findRelatedIcon(personPopedomId){
+    return request.get(constant.serverUrl + `/base/personPopedomIcon/findRelatedIcon?personPopedomId=${personPopedomId}`);
+}
+
+function saveRelatedIcon(personPopedomId,idList){
+    var formData = new FormData();
+  
+    formData.append("personPopedomId",personPopedomId);
+    formData.append("idList",idList.join(","));
+  
+    return request.post(constant.serverUrl + "/base/personPopedomIcon/saveRelatedIcon",formData);
+}
+
+export default {
+    findRelatedIcon, saveRelatedIcon
+}

+ 23 - 0
src/api/business/billPush.js

@@ -82,8 +82,31 @@ function editPayTime(id){
   return request.get(constant.serverUrl + "/business/billPush/editPayTime/" + id);
 }
 
+function updateIsOpenWechatOrAlipay(formData){
+  return request.post(constant.serverUrl + "/business/billPush/updateIsOpenWechatOrAlipay/",formData);
+}
+
+function checkInBillpageList(formData){
+  return request.post(constant.serverUrl + "/business/billPush/checkInBillpageList", formData);
+}
+
+function wxQucode(orderId){
+  return request.get(constant.serverUrl + "/wxPay/wxNativePay?orderId="+orderId);
+}
+
+function alipayCode(orderId){
+  return request.get(constant.serverUrl + "/aliPay/tradePrecreatePay?orderId="+orderId);
+}
+
+function invoiceTypeList(){
+  return request.post(constant.serverUrl + "/business/billPush/invoiceTypeList");
+}
+
+
+
 
 
 export default {
     pageList,create,edit,add,update,remove,batchRemove,payServiceList,createGoods,detail,goodsPageList,pushBill,closeBill,updateOrder,createPayTime,editPayTime
+    ,updateIsOpenWechatOrAlipay,checkInBillpageList,wxQucode,alipayCode,invoiceTypeList
   }

+ 2 - 2
src/routers/modules/base.js

@@ -566,9 +566,9 @@ var routers = [
                 component: () => import('@/views/base/companyPayment-list.vue'),
                 meta: {
                         roles: ["admin"],
-                        title: '物业公司收款账户管理'
+                        title: '收款账户管理'
                 }
-        }
+        }, 
 ]
 
 export default routers;

+ 14 - 1
src/routers/modules/business.js

@@ -54,7 +54,7 @@ var routers = [
         {
                 //账单推送管理
                 path: '/business/billPush/list',
-                name: 'business-billPush-list',
+                name: 'businessBillPushList',
                 // route level code-splitting
                 // this generates a separate chunk (about.[hash].js) for this route
                 // which is lazy-loaded when the route is visited.
@@ -64,6 +64,19 @@ var routers = [
                         title: '账单推送管理'
                 }
         },
+        {
+                //租户账单管理
+                path: '/business/billPush/checkIn-list',
+                name: 'businessbillPushCheckInList',
+                // route level code-splitting
+                // this generates a separate chunk (about.[hash].js) for this route
+                // which is lazy-loaded when the route is visited.
+                component: () => import('@/views/business/billPush-checkIn-list.vue'),
+                meta: {
+                        roles: ["admin"],
+                        title: '租户账单管理'
+                }
+        },
 ]
 
 export default routers;

+ 1 - 1
src/views/base/activityInfo-list.vue

@@ -235,7 +235,7 @@ export default {
     },
     sortChange(data) {
       this.field = data.column.field;
-      this.direction = data.order;
+      this.direction = data.order == "ascending" ? "asc" : "desc";
 
       this.changePage(this.pageIndex);
     },

+ 1 - 1
src/views/base/alarmConfig-list.vue

@@ -245,7 +245,7 @@ export default {
     },
     sortChange(data) {
       this.field = data.column.field;
-      this.direction = data.order;
+      this.direction = data.order == "ascending" ? "asc" : "desc";
 
       this.changePage(this.pageIndex);
     },

+ 1 - 1
src/views/base/alarmInfo-alert-list.vue

@@ -165,7 +165,7 @@ export default {
     },
     sortChange(data) {
       this.field = data.column.field;
-      this.direction = data.order;
+      this.direction = data.order == "ascending" ? "asc" : "desc";
 
       this.changePage(this.pageIndex);
     },

+ 1 - 1
src/views/base/alarmInfo-fence-list.vue

@@ -165,7 +165,7 @@ export default {
     },
     sortChange(data) {
       this.field = data.column.field;
-      this.direction = data.order;
+      this.direction = data.order == "ascending" ? "asc" : "desc";
 
       this.changePage(this.pageIndex);
     },

+ 2 - 1
src/views/base/applicationExamine-list.vue

@@ -37,6 +37,7 @@
           <el-select
             v-model="queryModel.applicationRoleId"
             filterable
+            clearable
             placeholder="请选择"
             style="width: 200"
             size="mini"
@@ -385,7 +386,7 @@ export default {
     },
     sortChange(data) {
       this.field = data.column.field;
-      this.direction = data.order;
+      this.direction = data.order == "ascending" ? "asc" : "desc";
 
       this.changePage(this.pageIndex);
     },

+ 2 - 1
src/views/base/businessOut-list.vue

@@ -170,6 +170,7 @@
         width="150"
         show-overflow-tooltip
       ></el-table-column>
+      <el-table-column prop="remark" label="备注" width="120"></el-table-column>
       <el-table-column label="操作" width="100">
         <template slot-scope="{ row }">
           <el-row>
@@ -306,7 +307,7 @@ export default {
     },
     sortChange(data) {
       this.field = data.column.field;
-      this.direction = data.order;
+      this.direction = data.order == "ascending" ? "asc" : "desc";
 
       this.changePage(this.pageIndex);
     },

+ 81 - 31
src/views/base/checkinInfo-detail.vue

@@ -23,9 +23,9 @@
         :label-width="'150px'"
         inline
       >
-        <el-form-item label="楼栋" prop="biulding">
+        <el-form-item label="楼栋" prop="building">
           <el-input
-            v-model="formModel.biulding"
+            v-model="formModel.building"
             placeholder="请输入楼栋"
             style="width: 300px"
           ></el-input>
@@ -37,32 +37,46 @@
             style="width: 300px"
           ></el-input>
         </el-form-item>
-        <el-form-item label="企业名称" prop="name">
+        <!-- <el-form-item label="企业名称" prop="name">
           <el-input
             v-model="formModel.name"
             placeholder="请输入企业名称"
             style="width: 300px"
           ></el-input>
+        </el-form-item> -->
+        <el-form-item label="企业名称" prop="companyId">
+          <el-select-tree
+            :props="companyProps"
+            :options="companyResult"
+            v-model="formModel.companyId"
+            style="width: 300px"
+            size="mediumn"
+          ></el-select-tree>
         </el-form-item>
-        <el-form-item label="法人" prop="artificialPerson">
-          <el-input
+        <el-form-item label="联系人" prop="artificialPerson">
+          <el-select
+            filterable
             v-model="formModel.artificialPerson"
-            placeholder="请输入法人"
             style="width: 300px"
-          ></el-input>
+          >
+            <el-option v-for="person in personResult" 
+              :key="person.id" :value="person.id" :label="person.name">
+            </el-option>
+          </el-select>
         </el-form-item>
-        <el-form-item label="联系电话" prop="artificialPersonPhone">
+        <el-form-item label="法人" prop="boss">
           <el-input
-            v-model="formModel.artificialPersonPhone"
-            placeholder="请输入联系电话"
+            v-model="formModel.boss"
+            placeholder="请输入法人"
             style="width: 300px"
           ></el-input>
         </el-form-item>
-        <el-form-item label="面积" prop="area">
+        <el-form-item label="面积(㎡)" prop="area">
           <el-input
             v-model="formModel.area"
             placeholder="请输入面积"
             style="width: 300px"
+            oninput ="value=value.replace(/[^0-9.]/g,'')"
           ></el-input>
         </el-form-item>
         <el-form-item label="入驻时间" prop="checkinTime">
@@ -81,19 +95,19 @@
             style="width: 300px"
           ></el-input>
       </el-form-item>
-        <el-form-item label="租金" prop="rent">
+        <!-- <el-form-item label="租金" prop="rent">
           <el-input
             v-model="formModel.rent"
             placeholder="请输入租金"
             style="width: 300px"
           ></el-input>
-        </el-form-item>
-        <el-form-item label="缴纳方式" prop="paymentMethod">
+        </el-form-item> -->
+        <!-- <el-form-item label="缴纳方式" prop="paymentMethod">
           <el-select v-model="formModel.paymentMethod" style="width:300px;" clearable>
           <el-option v-for="(item,index) in paymentMethodList" 
           :label="item.name" :value="item.value" :key="index"></el-option>
         </el-select>
-        </el-form-item>
+        </el-form-item> -->
       </el-form>
     </div>
     <span slot="footer" class="dialog-footer">
@@ -108,45 +122,77 @@
 import Constant from "@/constant";
 import checkinInfoApi from "@/api/base/checkinInfo";
 import dataDictionaryApi from "@/api/sys/dataDictionary";
+import companyInfoApi from "@/api/base/companyInfo";
+import personInfoApi from "@/api/base/personInfo";
 import SelectTree from "@/components/SelectTree";
 
 export default {
   props: ["businessKey", "title"],
   data() {
     return {
-      paymentMethodList: [],
       formModel: {},
       ruleValidate: {
         id: [{ required: true, message: "编号不能为空", trigger: "blur" }],
-        biulding: [
+        building: [
           { required: true, message: "楼栋不能为空", trigger: "blur" },
         ],
-        room: [{ required: true, message: "房号不能为空", trigger: "blur" }],
-        name: [
-          { required: true, message: "企业名称不能为空", trigger: "blur" },
-        ],
-        artificialPersonPhone: [
-          { required: true, message: "联系电话不能为空", trigger: "blur" },
+        companyId: [
+          { required: true, message: "企业不能为空", trigger: "blur" },
         ],
-        feeExpirationTime: [
-          { required: true, message: "费用到期时间不能为空", trigger: "blur" },
-        ],
-        contractExpirationTime: [
-          { required: true, message: "合同到期时间不能为空", trigger: "blur" },
+        artificialPerson: [
+          { required: true, message: "联系人不能为空", trigger: "blur" },
         ],
       },
       showDialog: true,
       loading: false,
       submitting: false,
+      paymentMethodList: [],
+      companyResult: [],
+      companyProps: {
+        value: "id",
+        label: "name",
+        children: "children"
+      },
+      personResult: [],
+      personProps: {
+        value: "id",
+        label: "name",
+        children: "children"
+      },
     };
   },
   created() {
+    var self = this;
+
     dataDictionaryApi.findByCatalogName({
       "catalogName" : "缴纳方式"
     }).then(response => {
       var jsonData = response.data;
       this.paymentMethodList = jsonData.data;
     });
+
+    companyInfoApi.list({scope:"all"}).then(function(response) {
+      var jsonData = response.data;
+      if (jsonData.result) {
+        self.companyResult = jsonData.data;
+      }
+    });
+  },
+  watch:{
+    "formModel.companyId": function (val, oldval) {
+      if (val != null && val != "") {
+        var self = this;
+        var formData = new FormData();
+        formData.append("companyId", val);
+
+        personInfoApi.findByCompanyId(formData).then(function(response) {
+          var jsonData = response.data;
+          if (jsonData.result) {
+            self.personResult = jsonData.data;
+          }
+        });
+      }
+    },
   },
   methods: {
     closeDialog() {
@@ -204,6 +250,10 @@ export default {
 
         if (jsonData.result) {
           self.formModel = jsonData.data;
+          
+          //var personId = self.formModel.artificialPerson;
+          //实际保存为personId,但数据库中是varchar类型
+          //self.formModel.artificialPerson = parseInt(personId);
         } else {
           self.$message.error(jsonData.message + "");
         }
@@ -212,8 +262,8 @@ export default {
         self.$message.error(error + "");
       });
   },
-  // components: {
-  //   "el-select-tree": SelectTree
-  // },
+  components: {
+    "el-select-tree": SelectTree
+  },
 };
 </script>

+ 196 - 18
src/views/base/checkinInfo-list.vue

@@ -3,7 +3,7 @@
     <el-breadcrumb separator=">">
       <el-breadcrumb-item :to="{ path: '/' }">首页</el-breadcrumb-item>
       <el-breadcrumb-item>
-        <a href="#">系统管理</a>
+        <a href="#">园区管理</a>
       </el-breadcrumb-item>
       <el-breadcrumb-item>
         <a href="/base/checkinInfo">租户管理</a>
@@ -19,11 +19,11 @@
       inline
       class="demo-form-inline"
     >
-      <el-form-item label="楼栋" prop="biulding">
+      <el-form-item label="楼栋" prop="building">
         <el-input
           type="text"
           size="mini"
-          v-model="queryModel.biulding"
+          v-model="queryModel.building"
         ></el-input>
       </el-form-item>
       <el-form-item label="企业名称" prop="name">
@@ -72,6 +72,14 @@
         @click="handleBatchDelete"
         >删除选中项</el-button
       >
+      <el-button
+        type="primary"
+        size="small"
+        plain
+        icon="el-icon-upload2"
+        @click="batchImportVisible = true"
+        >导入</el-button
+      >
     </el-row>
     <el-table
       :data="tableData"
@@ -83,19 +91,25 @@
     >
       <el-table-column type="selection" width="55"></el-table-column>
       <el-table-column
-        prop="biulding"
+        prop="companyName"
+        label="企业名称"
+        width="180"
+        fixed="left"
+      ></el-table-column>
+      <el-table-column
+        prop="building"
         label="楼栋"
         width="180"
       ></el-table-column>
       <el-table-column prop="room" label="房号" width="180"></el-table-column>
       <el-table-column
-        prop="name"
-        label="企业名称"
+        prop="boss"
+        label="法人"
         width="180"
       ></el-table-column>
       <el-table-column
-        prop="artificialPerson"
-        label="人"
+        prop="artificialPersonN"
+        label="联系人"
         width="180"
       ></el-table-column>
       <el-table-column
@@ -103,7 +117,7 @@
         label="联系电话"
         width="180"
       ></el-table-column>
-      <el-table-column prop="area" label="面积" width="180"></el-table-column>
+      <el-table-column prop="area" label="面积(㎡)" width="180"></el-table-column>
       <el-table-column
         prop="checkinTime"
         label="入驻时间"
@@ -124,14 +138,31 @@
         label="租赁期限"
         width="180"
       ></el-table-column>
-      <el-table-column prop="rent" label="租金" width="180"></el-table-column>
-      <el-table-column
-        prop="paymentMethod"
-        label="缴纳方式"
-        width="180"
-      ></el-table-column>
-      <el-table-column label="操作" fixed="right" width="200">
+      <!-- <el-table-column prop="wechatPay" fixed="right" label="微信支付" width="80">
+          <template slot-scope="{row}">
+              <el-switch
+                  v-model="row.wechatPay"
+                  active-color="#13ce66"
+                  inactive-color="#ff4949"
+                  @change="handlChange(row)">
+              </el-switch>
+          </template>
+      </el-table-column>
+      <el-table-column prop="aliPay" fixed="right" label="支付宝支付" width="90">
+          <template slot-scope="{row}">
+              <el-switch
+                  v-model="row.aliPay"
+                  active-color="#13ce66"
+                  inactive-color="#ff4949"
+                  @change="handlChange(row)">
+              </el-switch>
+          </template>
+      </el-table-column> -->
+      <el-table-column label="操作" fixed="right" width="220">
         <template slot-scope="{ row }">
+          <el-button size="mini" type="primary" @click="handlePayment(row)"
+            >收费项</el-button
+          >
           <el-button size="mini" type="warning" @click="handleEdit(row)"
             >编辑</el-button
           >
@@ -155,14 +186,70 @@
       :title="modalTitle"
       @close="onDetailModalClose"
     ></checkinInfo-detail>
+    <checkinInfo-payment
+      v-if="showModal1"
+      :businessKey="businessKey"
+      :title="modalTitle"
+      @close="onDetailModalClose"
+    ></checkinInfo-payment>
+    <el-dialog
+      title="批量导入租户"
+      :visible.sync="batchImportVisible"
+      :modal-append-to-body="false"
+      style="text-align: left"
+      :close-on-click-modal="false"
+    >
+      <el-form label-width="150px">
+        <el-form-item label="模板下载">
+          <el-link
+            href="http://rccs.oss-cn-hangzhou.aliyuncs.com/smart_school/personInfo/2020/10/%E5%B0%8F%E9%B9%8F%E7%AE%A1%E5%AE%B6%E7%A7%9F%E6%88%B7%E5%AF%BC%E5%85%A5%E6%A8%A1%E6%9D%BF.xls"
+            type="primary"
+            target="_blank"
+            >点击下载模板</el-link
+          >
+        </el-form-item>
+        <el-form-item label="上传文件">
+          <el-upload
+            class="upload-demo"
+            accept=".xls"
+            :action="uploadUrlXls"
+            :headers="headers"
+            :on-preview="handleBatchImportPreview"
+            name="uploadFile"
+            :multiple="true"
+            :limit="1"
+            :on-remove="handleBatchImportRemove"
+            :before-remove="beforeBatchImportRemove"
+            :before-upload="beforeUpload"
+            :on-exceed="handleBatchImportExceed"
+            :on-success="handleBatchImportSuccess"
+            :file-list="batchImportFileList"
+          >
+            <el-button size="small" type="primary" :loading="xlsLoading"
+              >点击上传</el-button
+            >
+            <div slot="tip" class="el-upload__tip">
+              只能上传xls文件,且不超过500kb
+            </div>
+          </el-upload>
+        </el-form-item>
+      </el-form>
+      <div slot="footer" class="dialog-footer">
+        <el-button type="primary" @click="batchImportVisible = false"
+          >关 闭</el-button
+        >
+      </div>
+    </el-dialog>
   </div>
 </template>
 <script>
 import Constant from "@/constant";
 import CheckinInfoDetail from "./checkinInfo-detail";
+import CheckinInfoPayment from "./checkinInfo-payment";
 import checkinInfoApi from "@/api/base/checkinInfo";
 import NProgress from "nprogress"; // progress bar
 import "nprogress/nprogress.css"; // progress bar style
+import { getToken } from "@/utils/auth";
 
 export default {
   data() {
@@ -171,7 +258,7 @@ export default {
     return {
       queryModel: {
         id: "",
-        biulding: "",
+        building: "",
         name: "",
         feeExpirationTime: "",
         contractExpirationTime: "",
@@ -187,8 +274,16 @@ export default {
       pageSizeList: [10, 20, 30],
       multipleSelection: [],
       showModal: false,
+      showModal1: false,
       modalTitle: "",
       businessKey: "",
+      batchImportVisible: false,
+      uploadUrlXls: Constant.serverUrl + "/base/checkinInfo/importXls",
+      batchImportFileList: [],
+      xlsLoading: false,
+      headers: {
+        Authorization: getToken(),
+      },
     };
   },
   methods: {
@@ -204,7 +299,7 @@ export default {
       formData.append("pageSize", self.pageSize);
 
       formData.append("id", self.queryModel.id);
-      formData.append("biulding", self.queryModel.biulding);
+      formData.append("building", self.queryModel.building);
       formData.append("name", self.queryModel.name);
       formData.append("feeExpirationTime", self.queryModel.feeExpirationTime);
       formData.append("contractExpirationTime", self.queryModel.contractExpirationTime);
@@ -262,6 +357,11 @@ export default {
       this.businessKey = record.id;
       this.showModal = true;
     },
+    handlePayment(record) {
+      this.modalTitle = "收费项";
+      this.businessKey = record.id;
+      this.showModal1 = true;
+    },
     handleDelete(record) {
       var self = this;
 
@@ -317,17 +417,95 @@ export default {
     onDetailModalClose(refreshed) {
       //保存成功后回调
       this.showModal = false;
+      this.showModal1 = false;
 
       if (refreshed) {
         this.changePage(this.pageIndex);
       }
     },
+    handlChange(record){
+      var self = this;
+      var formData = new FormData();
+      self.loading = true;
+
+      formData.append("id", record.id);
+      formData.append("wechatPay", !!record.wechatPay);
+      formData.append("aliPay", !!record.aliPay);
+
+      checkinInfoApi.updateWechatPayOrAliPay(formData).then(function (response) {
+          var jsonData = response.data;
+          self.loading = false;
+          if (jsonData.result) {
+              self.changePage(self.pageIndex);
+          }
+          else{
+              self.$message.error(jsonData.message + "");
+          }
+      });
+    },
+    beforeUpload(file, fileList) {
+      //导入前判断
+      var self = this;
+      self.xlsLoading = true;
+      return true;
+    },
+    //批量导入-上传成功
+    handleBatchImportSuccess(response, file, fileList) {
+      var self = this;
+      self.xlsLoading = false;
+      
+      if (response.result) {
+        self.$message.success(response.message);
+        this.batchImportFileList = [];
+        this.changePage(1);
+
+        this.batchImportVisible = false;
+      } else {
+        //this.$message.error(response.message);
+        this.batchImportFileList = [];
+        this.changePage(1);
+
+        if (response.data != null) {
+          //下载有错误信息提示的报表
+          //window.open(response.data);
+          self.$message({
+            showClose: true,
+            dangerouslyUseHTMLString: true,
+            message:
+              response.message +
+              `,<a href="${response.data}" target="_blank">点击下载未导入的数据报表</a>&nbsp;`,
+            duration: 30000,
+          });
+        }
+      }
+    },
+    //批量导入-预览
+    handleBatchImportPreview(file) {
+      console.log(file.url);
+    },
+    //批量导入-移除
+    handleBatchImportRemove(file, fileList) {
+      console.log(file, fileList);
+    },
+    //批量导入-移除前操作
+    beforeBatchImportRemove(file, fileList) {
+      console.log(file, fileList);
+    },
+    //批量导入-文件超出个数限制时的钩子
+    handleBatchImportExceed(files, fileList) {
+      this.$message.warning(
+        `当前限制选择 3 个文件,本次选择了 ${files.length} 个文件,共选择了 ${
+          files.length + fileList.length
+        } 个文件`
+      );
+    },
   },
   mounted: function () {
     this.changePage(1);
   },
   components: {
     "checkinInfo-detail": CheckinInfoDetail,
+    "checkinInfo-payment": CheckinInfoPayment,
   },
 };
 </script>

+ 122 - 0
src/views/base/checkinInfo-payment.vue

@@ -0,0 +1,122 @@
+<style scoped>
+.user-panel {
+  margin: 10px auto;
+}
+</style>
+<template>
+  <el-dialog
+    :visible.sync="showDialog"
+    :title="title"
+    :modal-append-to-body="true"
+    append-to-body
+    :close-on-click-modal="false"
+    style="text-align: left"
+    width="80%"
+    @close="closeDialog"
+  >
+    <div class="user-panel" v-loading="loading">
+      <el-form ref="form" :model="fromModel">
+        <el-table
+              ref="formTable"
+              :data="tableData"
+              v-loading="loading"
+              element-loading-text="拼命加载中"
+              stripe
+          >
+              <el-table-column prop="name" label="收费项目" ></el-table-column>
+              <el-table-column prop="desc" label="收费项目说明" ></el-table-column>
+              <el-table-column label="单价">
+                <template slot-scope="scope">
+                  <el-input v-model="scope.row.unitPrice" oninput ="value=value.replace(/[^0-9.]/g,'')" />
+                </template>
+              </el-table-column>
+              <el-table-column prop="unit" label="单位" ></el-table-column>
+          </el-table>
+      </el-form>
+    </div>
+    <span slot="footer" class="dialog-footer">
+      <el-button @click="closeDialog">取 消</el-button>
+      <el-button type="primary" @click="handleSubmit" :loading="submitting"
+        >确 定</el-button
+      >
+    </span>
+  </el-dialog>
+</template>
+<script>
+import Constant from "@/constant";
+import checkinInfoApi from "@/api/base/checkinInfo";
+import payServiceApi from "@/api/base/payService";
+import SelectTree from "@/components/SelectTree";
+
+export default {
+  props: ["businessKey", "title"],
+  data() {
+    return {
+      fromModel:{},
+      tableData: [],
+      showDialog: true,
+      loading: false,
+      submitting: false,
+    };
+  },
+  created() {
+    var self = this;
+  },
+  methods: {
+    closeDialog() {
+      this.$emit("close", false);
+    },
+    changePage(pageIndex) {
+      var self = this;
+        this.loading = true;
+        var formData = new FormData();
+        formData.append("businessKey", self.businessKey);
+
+        payServiceApi.payServiceList(formData).then(response => {
+            this.loading = false;
+            var jsonData = response.data;
+
+            console.log(jsonData);
+
+            this.tableData = jsonData.data.data;
+            this.totalElements = jsonData.data.recordsTotal;
+        });
+    },
+    handleSubmit() {
+      var self = this;
+      
+      this.$refs["form"].validate((valid) => {
+        if (valid) {
+          (function () {
+            return payServiceApi.addList(self.tableData);
+          })().then(function (response) {
+            var jsonData = response.data;
+
+            if (jsonData.result) {
+              self.$message({
+                message: "保存成功!",
+                type: "success",
+              });
+
+              self.$emit("close", true);
+            } else {
+              self.$message({
+                message: jsonData.message + "",
+                type: "warning",
+              });
+
+              self.$emit("close", false);
+            }
+          });
+        }
+      });
+    },
+  },
+  mounted: function () {
+    this.changePage(1);
+  },
+  components: {
+    // "el-select-tree": SelectTree
+  },
+};
+</script>

+ 1 - 1
src/views/base/companyDeviceRelation-list.vue

@@ -182,7 +182,7 @@ export default {
     },
     sortChange(data) {
       this.field = data.column.field;
-      this.direction = data.order;
+      this.direction = data.order == "ascending" ? "asc" : "desc";
 
       this.changePage(this.pageIndex);
     },

+ 13 - 14
src/views/base/companyInfo-detail.vue

@@ -10,6 +10,7 @@
     :title="title"
     :modal-append-to-body="false"
     style="text-align: left"
+    width="80%"
     @close="closeDialog"
     :close-on-click-modal="false"
   >
@@ -27,9 +28,8 @@
                 :props="props"
                 :options="companyResult"
                 v-model="formModel.parentId"
-                height="200"
                 size="mediumn"
-                width="200"
+                width="400px"
               ></el-select-tree>
             </el-form-item>
           </el-col>
@@ -38,7 +38,7 @@
               <el-input
                 v-model="formModel.sortNo"
                 placeholder="请输入序号"
-                style="width: 200px"
+                style="width: 400px"
               ></el-input>
             </el-form-item>
           </el-col>
@@ -49,16 +49,16 @@
               <el-input
                 v-model="formModel.name"
                 placeholder="请输入单位名称"
-                style="width: 200px"
+                style="width: 400px"
               ></el-input>
             </el-form-item>
           </el-col>
           <el-col :span="12">
-            <el-form-item label="称" prop="shortName">
+            <el-form-item label="称" prop="shortName">
               <el-input
                 v-model="formModel.shortName"
-                placeholder="请输入单位称"
-                style="width: 200px"
+                placeholder="请输入单位称"
+                style="width: 400px"
               ></el-input>
             </el-form-item>
           </el-col>
@@ -78,9 +78,8 @@
                 :props="props"
                 :options="regionData"
                 v-model="formModel.regionId"
-                height="200"
                 size="mediumn"
-                width="200"
+                width="400px"
               ></el-select-tree>
             </el-form-item>
           </el-col>
@@ -91,7 +90,7 @@
                 filterable
                 clearable
                 placeholder="请选择"
-                style="width: 200px"
+                style="width: 400px"
               >
                 <el-option
                   v-for="result in typeData"
@@ -111,7 +110,7 @@
                 filterable
                 clearable
                 placeholder="请选择"
-                style="width: 200px"
+                style="width: 400px"
               >
                 <el-option
                   v-for="result in sceneData"
@@ -129,7 +128,7 @@
                 filterable
                 clearable 
                 placeholder="请选择"
-                style="width: 200px"
+                style="width: 400px"
               >
                 <el-option
                   v-for="result in sceneData"
@@ -148,8 +147,8 @@
                 :props="props"
                 :options="companyResult"
                 v-model="formModel.relationCompanyId"
-                height="200"
-                width="200"
+                size="mediumn"
+                width="400px"
               ></el-select-tree>
             </el-form-item>
           </el-col>

+ 34 - 2
src/views/base/companyInfo-list.vue

@@ -147,7 +147,7 @@
       ></el-table-column>
       <el-table-column
         prop="shortName"
-        label="称"
+        label="称"
         width="120"
       ></el-table-column>
       <el-table-column
@@ -171,6 +171,16 @@
         width="350"
         label="备注"
       ></el-table-column>
+      <el-table-column prop="isMobilePayment"  label="手机支付">
+        <template slot-scope="{row}">
+            <el-switch
+                v-model="row.isMobilePayment"
+                active-color="#13ce66"
+                inactive-color="#ff4949"
+                @change="handlChange(row)">
+            </el-switch>
+        </template>
+      </el-table-column>
       <el-table-column label="操作" width="350" fixed="right">
         <template slot-scope="{ row }">
           <el-row>
@@ -467,7 +477,7 @@ export default {
     },
     sortChange(data) {
       this.field = data.column.field;
-      this.direction = data.order;
+      this.direction = data.order == "ascending" ? "asc" : "desc";
 
       this.changePage(this.pageIndex);
     },
@@ -676,6 +686,28 @@ export default {
         } 个文件`
       );
     },
+
+    handlChange(record){
+
+      var self = this;
+      var formData = new FormData();
+      self.loading = true;
+
+      formData.append("id", record.id);
+      formData.append("isMobilePayment", record.isMobilePayment);
+
+      companyInfoApi.isOpenMobilePayment(formData).then(function (response) {
+          var jsonData = response.data;
+          self.loading = false;
+          if (jsonData.result) {
+              self.changePage(self.pageIndex);
+          }
+          else{
+              self.$message.error(jsonData.message + "");
+          }
+      });
+
+    }
   },
   mounted: function () {},
   components: {

+ 115 - 17
src/views/base/companyPayment-detail.vue

@@ -5,6 +5,7 @@
         :modal-append-to-body="false"
         style="text-align: left"
         @close="closeDialog"
+        width="1000px"
         :close-on-click-modal="false"
       >
       <div class="user-panel" v-loading="loading">
@@ -12,46 +13,103 @@
             ref="form"
             :model="formModel"
             :rules="ruleValidate"
-            :label-width="'180px'"
+            :label-width="'150px'"
             inline
         >
             <el-form-item label="物业公司" prop="companyId">
-                <el-select v-model="formModel.companyId" filterable>
+                <!-- <el-select v-model="formModel.companyId" filterable>
                     <el-option
                         v-for="result in companyList"
                         :key="result.id"
                         :label="result.name"
                         :value="result.id"
                     ></el-option>
-                </el-select>
+                </el-select> -->
+                <el-select-tree
+                    :props="props"
+                    :options="treeData"
+                    v-model="formModel.companyId"
+                    height="200"
+                    style="width: 300px"
+                ></el-select-tree>
             </el-form-item>
             <el-form-item label="账户名称" prop="name">
                 <el-input
                     v-model="formModel.name"
                     placeholder="请输入账户名称"
-                    style="width: 500px"
+                    style="width: 300px"
                 ></el-input>
             </el-form-item>
-            <el-form-item label="微信mchId" prop="mchId">
+            <el-form-item label="结算周期" prop="cycle">
+                <el-input
+                    v-model="formModel.cycle"
+                    placeholder="结算周期"
+                    style="width: 300px"
+                >
+                     <template slot="append">天以内</template>
+                </el-input>
+            </el-form-item>
+            <el-form-item label="微信商户号" prop="mchId">
                 <el-input
                     v-model="formModel.mchId"
                     placeholder="请输入微信mchId"
-                    style="width: 500px"
+                    style="width: 300px"
                 ></el-input>
             </el-form-item>
-            <el-form-item label="微信subMchId" prop="subMchId">
+            <el-form-item label="微信子商户号" prop="subMchId">
                 <el-input
                     v-model="formModel.subMchId"
                     placeholder="请输入微信subMchId"
-                    style="width: 500px"
+                    style="width: 300px"
                 ></el-input>
             </el-form-item>
-            <el-form-item label="支付宝appAuthToken" prop="appAuthToken">
+            <el-form-item label="支付宝令牌" prop="appAuthToken">
                 <el-input
                     v-model="formModel.appAuthToken"
                     placeholder="请输入支付宝appAuthToken"
-                    style="width: 500px"
+                    style="width: 300px"
+                ></el-input>
+            </el-form-item>
+            <el-form-item label="开户名称" prop="bankName">
+                <el-input
+                    v-model="formModel.bankName"
+                    placeholder="请输入开户名称"
+                    style="width: 300px"
                 ></el-input>
+            </el-form-item>
+                        <el-form-item label="开户银行" prop="bank">
+                <el-input
+                    v-model="formModel.bank"
+                    placeholder="请输入开户银行"
+                    style="width: 300px"
+                ></el-input>
+            </el-form-item>
+            <el-form-item label="账号" prop="account">
+                <el-input
+                    v-model="formModel.account"
+                    placeholder="请输入账号"
+                    style="width: 300px"
+                ></el-input>
+            </el-form-item>
+            <el-form-item label="财务人员手机账户" prop="financePersonId">
+                <el-select v-model="formModel.financePersonId" filterable style="width: 300px">
+                    <el-option
+                        v-for="result in personList"
+                        :key="result.id"
+                        :label="result.name + '(' + result.phone + ')'"
+                        :value="result.id"
+                    ></el-option>
+                </el-select>
+            </el-form-item>
+            <el-form-item label="财务人员后台账户" prop="financeUserId">
+                <el-select v-model="formModel.financeUserId" filterable style="width: 300px">
+                    <el-option
+                        v-for="result in userList"
+                        :key="result.id"
+                        :label="result.realName + '(' + result.userName + ')'"
+                        :value="result.id"
+                    ></el-option>
+                </el-select>
             </el-form-item>
 
         </el-form>
@@ -69,30 +127,58 @@
 import Constant from "@/constant";
 import companyPaymentApi from "@/api/base/companyPayment";
 import companyInfoApi from "@/api/base/companyInfo";
+import pageUtil from "@/utils/page";
+import SelectTree from "@/components/SelectTree";
+import NProgress from "nprogress"; // progress bar
+import "nprogress/nprogress.css"; // progress bar style
+import personInfoApi from "@/api/base/personInfo";
 export default {
     props: ["businessKey", "title"],
     data() {
         return {
             ruleValidate: {
-                companyId: [{ required: true, message: "物业公司不能为空", trigger: "blur" }],
+                companyId: [{ required: true, message: "物业公司不能为空", trigger: "change" }],
                 name: [{ required: true, message: "账户名称不能为空", trigger: "blur" }],
-                mchId: [{ required: true, message: "微信mchId不能为空", trigger: "blur" }],
-                subMchId: [{ required: true, message: "微信subMchId不能为空", trigger: "blur" }],
-                appAuthToken: [{ required: true, message: "支付宝appAuthToken不能为空", trigger: "blur" }],
+                cycle: [{ required: true, message: "结算周期不能为空", trigger: "blur" }],
+
             },
             formModel:{
-                companyId:"",
+                companyId:"", 
                 name:"",
                 mchId:"",
                 subMchId:"",
                 appAuthToken:"",
+                financePersonId:"",
+                financeUserId:"",
             },
+            treeData: [],
+            personList:[],
+            userList:[],
             companyList:[],
             showDialog: true,
             loading: false,
             submitting: false,
+            props: {
+                // 配置项(必选)
+                value: "id",
+                label: "name",
+                children: "children"
+            },
         }
     },
+    created() {
+        this.loadTree();
+
+        companyPaymentApi.findPersonByCompanyId().then(response => {
+            var jsonData = response.data;
+            this.personList = jsonData.data;
+        });
+
+        companyPaymentApi.findUserByCompanyId().then(response => {
+            var jsonData = response.data;
+            this.userList = jsonData.data;
+        });
+    },
     methods: {
         closeDialog() {
             this.$emit("close", false);
@@ -105,8 +191,6 @@ export default {
                 (function () {
                     var id = self.formModel.id;
 
-                    alert(JSON.stringify(self.formModel))
-
                     if (id == null || id.length == 0) {
                         return companyPaymentApi.add(self.formModel);
                     } else {
@@ -134,6 +218,17 @@ export default {
                 }
             });
         },
+        loadTree() {
+            companyInfoApi.list().then(resp => {
+                var jsonData = resp.data;
+
+                if (jsonData.result) {
+                this.treeData = jsonData.data;
+                } else {
+                this.$message.error(jsonData.message + "");
+                }
+            });
+        },
     },
     mounted: function () {
         var self = this;
@@ -164,6 +259,9 @@ export default {
             self.$message.error(error + "");
         });
     },
+    components: {
+        "el-select-tree": SelectTree
+    }
 }
 </script>
 <style scoped>

+ 115 - 6
src/views/base/companyPayment-list.vue

@@ -6,7 +6,7 @@
             <a href="#">系统管理</a>
         </el-breadcrumb-item>
         <el-breadcrumb-item>
-            <a href="#">物业公司收款账户管理</a>
+            <a href="#">园区管理</a>
         </el-breadcrumb-item>
         </el-breadcrumb>
         <el-divider></el-divider>
@@ -17,14 +17,20 @@
             class="demo-form-inline"
             >
             <el-form-item label="物业公司" prop="companyId">
-                <el-select size="mini" v-model="queryModel.companyId" filterable>
+                <!-- <el-select size="mini" v-model="queryModel.companyId" filterable>
                     <el-option
                         v-for="result in companyList"
                         :key="result.id"
                         :label="result.name"
                         :value="result.id"
                     ></el-option>
-                </el-select>
+                </el-select> -->
+                <el-select-tree
+                    :props="props"
+                    :options="treeData"
+                    v-model="queryModel.companyId"
+                    height="200"
+                ></el-select-tree>
             </el-form-item>
             <el-form-item label="账户名称" prop="name">
                 <el-input type="text" size="mini" v-model="queryModel.name"></el-input>
@@ -69,14 +75,53 @@
             >
             <el-table-column prop="companyName"  label="物业公司" ></el-table-column>
             <el-table-column prop="name"  label="账户名称" ></el-table-column>
+            <el-table-column prop="cycle"  label="结算周期"  >
+                <template slot-scope="{row}">
+                    {{row.cycle}}天以内
+                </template>
+            </el-table-column>
             <el-table-column prop="mchId"  label="微信mchId" ></el-table-column>
             <el-table-column prop="subMchId"  label="微信subMchId" ></el-table-column>
             <el-table-column prop="appAuthToken"  label="支付宝appAuthToken"  ></el-table-column>
+            <el-table-column prop="bankName"  label="账户名称"  ></el-table-column>
+            <el-table-column prop="bank"  label="开户银行"  ></el-table-column>
+            <el-table-column prop="account"  label="账号"  ></el-table-column>
             <el-table-column prop="createTime"  label="创建时间"  ></el-table-column>
-            <el-table-column label="操作">
+            <el-table-column prop="isDefault"  label="默认账户">
+                <template slot-scope="{row}">
+                    <el-switch
+                        v-model="row.isDefault"
+                        active-color="#13ce66"
+                        inactive-color="#ff4949"
+                        @change="handlChange(row)">
+                    </el-switch>
+                </template>
+            </el-table-column>
+            <!-- <el-table-column prop="isOpenWechat"  label="支持微信支付"  >
+                <template slot-scope="{row}">
+                    <el-switch
+                        v-model="row.isOpenWechat"
+                        active-color="#13ce66"
+                        inactive-color="#ff4949"
+                        @change="handlChange(row)">
+                    </el-switch>
+                </template>
+            </el-table-column>
+            <el-table-column prop="isOpenAlipay"  label="支持支付宝支付"  >
+                <template slot-scope="{row}">
+                    <el-switch
+                        v-model="row.isOpenAlipay"
+                        active-color="#13ce66"
+                        inactive-color="#ff4949"
+                        @change="handlChange(row)">
+                    </el-switch>
+                </template>
+            </el-table-column> -->
+            <el-table-column label="操作" fixed="right" width="180px">
                 <template slot-scope="{row}">
-                <el-button size="mini" type="warning" @click="handleEdit(row)">编辑</el-button>
-                <el-button size="mini" type="danger" @click="handleDelete(row)">删除</el-button>
+                <el-link size="mini" type="primary" @click="handleEdit(row)">编辑</el-link>-
+                <el-link size="mini" type="warning" @click="handleManagePayService(row)">收费项目</el-link>-
+                <el-link size="mini" type="danger" @click="handleDelete(row)">删除</el-link>
                 </template>
             </el-table-column>
         </el-table>
@@ -101,6 +146,10 @@ import Constant from "@/constant";
 import companyPaymentApi from "@/api/base/companyPayment";
 import companyInfoApi from "@/api/base/companyInfo";
 import companyPaymentDetail from "./companyPayment-detail";
+import pageUtil from "@/utils/page";
+import SelectTree from "@/components/SelectTree";
+import NProgress from "nprogress"; // progress bar
+import "nprogress/nprogress.css"; // progress bar style
 export default {
      name: "baseCompanyPayment",
      data() {
@@ -109,6 +158,7 @@ export default {
                 companyId:"",
                 name:"",
             },
+            treeData: [],
             companyList:[],
             loading: false,
             tableData: [],
@@ -119,8 +169,18 @@ export default {
             pageSizeList: [10, 20, 30],
             multipleSelection: [],
             showModal: false,
+            props: {
+                // 配置项(必选)
+                value: "id",
+                label: "name",
+                children: "children"
+            },
          }
     },
+    created() {
+
+        this.loadTree();
+    },
     methods: {
         changePage(pageIndex) {
             var self = this;
@@ -168,6 +228,23 @@ export default {
             this.businessKey = record.id;
             this.showModal = true;
         },
+        handleManagePayService(record) {
+
+            var path = "/base/PayService/list";
+            
+
+            this.$store.dispatch('tagsView/delView', {
+                name: "basePayServiceList",
+                path: path
+            }).then(({ visitedViews }) => {
+                this.$router.push({ 
+                path: path,
+                query:{
+                    companyId: record.companyId
+                }
+                });
+            });
+        },
         onDetailModalClose(refreshed) {
             //保存成功后回调
             this.showModal = false;
@@ -201,10 +278,42 @@ export default {
                 });
             });
         },
+        loadTree() {
+            companyInfoApi.list().then(resp => {
+                var jsonData = resp.data;
+
+                if (jsonData.result) {
+                this.treeData = jsonData.data;
+                } else {
+                this.$message.error(jsonData.message + "");
+                }
+            });
+        },
+        handlChange(record){
+
+            var self = this;
+            var formData = new FormData();
+            self.loading = true;
+
+            formData.append("id", record.id);
+            formData.append("isDefault", record.isDefault);
+
+            companyPaymentApi.setIsDefault(formData).then(function (response) {
+                var jsonData = response.data;
+                self.loading = false;
+                if (jsonData.result) {
+                    self.changePage(self.pageIndex);
+                }
+                else{
+                    self.$message.error(jsonData.message + "");
+                }
+            });
+        }
         
     },
     components: {
         "companyPayment-detail": companyPaymentDetail,
+        "el-select-tree": SelectTree
     },
     mounted() {
         this.changePage(1);

+ 1 - 1
src/views/base/companyPosition-list.vue

@@ -271,7 +271,7 @@ export default {
     },
     sortChange(data) {
       this.field = data.column.field;
-      this.direction = data.order;
+      this.direction = data.order == "ascending" ? "asc" : "desc";
 
       this.changePage(this.pageIndex);
     },

+ 4 - 0
src/views/base/deviceInfo-list.vue

@@ -615,6 +615,10 @@ export default {
           
           if(jsonData.result) {
             if(exportFlag){
+              if(document.location.href.startsWith("https://")){
+                  jsonData.data = jsonData.data.replace("http://","https://");
+              }
+
               //导出
               self.$message({
                 showClose: true,

+ 1 - 1
src/views/base/electricClientInfo-list.vue

@@ -230,7 +230,7 @@ export default {
     },
     sortChange(data) {
       this.field = data.column.field;
-      this.direction = data.order;
+      this.direction = data.order == "ascending" ? "asc" : "desc";
       this.changePage(this.pageIndex);
     },
     handleSelectionChange(val) {

+ 1 - 1
src/views/base/electricMeterInfo-list.vue

@@ -206,7 +206,7 @@ export default {
     },
     sortChange(data) {
       this.field = data.column.field;
-      this.direction = data.order;
+      this.direction = data.order == "ascending" ? "asc" : "desc";
 
       this.changePage(this.pageIndex);
     },

+ 1 - 1
src/views/base/employeeInfo-list.vue

@@ -224,7 +224,7 @@ export default {
     },
     sortChange(data) {
       this.field = data.column.field;
-      this.direction = data.order;
+      this.direction = data.order == "ascending" ? "asc" : "desc";
 
       this.changePage(this.pageIndex);
     },

+ 1 - 1
src/views/base/holidayInfo-list.vue

@@ -141,7 +141,7 @@ export default {
     },
     sortChange(data) {
       this.field = data.column.field;
-      this.direction = data.order;
+      this.direction = data.order == "ascending" ? "asc" : "desc";
 
       this.changePage(this.pageIndex);
     },

+ 1 - 1
src/views/base/iconInfo-list.vue

@@ -265,7 +265,7 @@ export default {
     },
     sortChange(data) {
       this.field = data.column.field;
-      this.direction = data.order;
+      this.direction = data.order == "ascending" ? "asc" : "desc";
 
       this.changePage(this.pageIndex);
     },

+ 1 - 1
src/views/base/informationInfo-complaint-list.vue

@@ -188,7 +188,7 @@ export default {
     },
     sortChange(data) {
       this.field = data.column.field;
-      this.direction = data.order;
+      this.direction = data.order == "ascending" ? "asc" : "desc";
 
       this.changePage(this.pageIndex);
     },

+ 1 - 1
src/views/base/informationInfo-warranty-list.vue

@@ -199,7 +199,7 @@ export default {
     },
     sortChange(data) {
       this.field = data.column.field;
-      this.direction = data.order;
+      this.direction = data.order == "ascending" ? "asc" : "desc";
 
       this.changePage(this.pageIndex);
     },

+ 1 - 1
src/views/base/messageInfo-list.vue

@@ -285,7 +285,7 @@ export default {
     },
     sortChange(data) {
       this.field = data.column.field;
-      this.direction = data.order;
+      this.direction = data.order == "ascending" ? "asc" : "desc";
 
       this.changePage(this.pageIndex);
     },

+ 1 - 1
src/views/base/messageInfo-send.vue

@@ -271,7 +271,7 @@ export default {
     },
     sortChange(data) {
       this.field = data.column.field;
-      this.direction = data.order;
+      this.direction = data.order == "ascending" ? "asc" : "desc";
 
       this.changePage(this.pageIndex);
     },

+ 1 - 1
src/views/base/messageNotice-list.vue

@@ -232,7 +232,7 @@ export default {
     },
     sortChange(data) {
       this.field = data.column.field;
-      this.direction = data.order;
+      this.direction = data.order == "ascending" ? "asc" : "desc";
 
       this.changePage(this.pageIndex);
     },

+ 1 - 1
src/views/base/messageReceiver-list.vue

@@ -275,7 +275,7 @@ export default {
     },
     sortChange(data) {
       this.field = data.column.field;
-      this.direction = data.order;
+      this.direction = data.order == "ascending" ? "asc" : "desc";
 
       this.changePage(this.pageIndex);
     },

+ 1 - 1
src/views/base/messageReport-list.vue

@@ -142,7 +142,7 @@ export default {
     },
     sortChange(data) {
       this.field = data.column.field;
-      this.direction = data.order;
+      this.direction = data.order == "ascending" ? "asc" : "desc";
 
       this.changePage(this.pageIndex);
     },

+ 1 - 1
src/views/base/messageSendCondition-list.vue

@@ -147,7 +147,7 @@ export default {
     },
     sortChange(data) {
       this.field = data.column.field;
-      this.direction = data.order;
+      this.direction = data.order == "ascending" ? "asc" : "desc";
 
       this.changePage(this.pageIndex);
     },

+ 1 - 1
src/views/base/mobileBannerInfo-list.vue

@@ -246,7 +246,7 @@ export default {
     },
     sortChange(data) {
       this.field = data.column.field;
-      this.direction = data.order;
+      this.direction = data.order == "ascending" ? "asc" : "desc";
 
       this.changePage(this.pageIndex);
     },

+ 1 - 1
src/views/base/ownerInfo-list.vue

@@ -238,7 +238,7 @@ export default {
     },
     sortChange(data) {
       this.field = data.column.field;
-      this.direction = data.order;
+      this.direction = data.order == "ascending" ? "asc" : "desc";
 
       this.changePage(this.pageIndex);
     },

+ 1 - 1
src/views/base/parkingApply-list.vue

@@ -194,7 +194,7 @@ export default {
     },
     sortChange(data) {
       this.field = data.column.field;
-      this.direction = data.order;
+      this.direction = data.order == "ascending" ? "asc" : "desc";
 
       this.changePage(this.pageIndex);
     },

+ 1 - 1
src/views/base/parkingInfo-list.vue

@@ -228,7 +228,7 @@ export default {
     },
     sortChange(data) {
       this.field = data.column.field;
-      this.direction = data.order;
+      this.direction = data.order == "ascending" ? "asc" : "desc";
 
       this.changePage(this.pageIndex);
     },

+ 10 - 4
src/views/base/payService-list.vue

@@ -95,16 +95,20 @@ export default {
             totalElements: 0,
             tableHeight: 400,
             pageSizeList: [10,30,50,100],
+            companyId:"",
         }
     },
     methods:{
-        changePage(pageIndex) {
+        changePage(pageIndex,companyId) {
             this.loading = true;
             var formData = new FormData();
 
             formData.append("pageIndex", this.pageIndex);
             formData.append("pageSize", this.pageSize);
 
+            if(companyId!=null){
+                formData.append("companyId", companyId);
+            }
 
             payServiceApi.payServicePageList(formData).then(response => {
                 this.loading = false;
@@ -122,7 +126,7 @@ export default {
             this.pageSize = pageSize;
             
             this.$nextTick(()=>{
-                this.changePage(1);
+                this.changePage(1,this.companyId);
             });
         },
         handleReset(name) {
@@ -135,7 +139,7 @@ export default {
             if (retObj.result) {
                 var retData = retObj.data;
 
-                this.changePage(this.pageIndex);
+                this.changePage(this.pageIndex,this.companyId);
 
             }
         },
@@ -207,7 +211,9 @@ export default {
         
     },
     mounted() {
-        this.changePage(1);
+        var companyId = this.$route.query.companyId;
+        this.companyId = companyId;
+        this.changePage(1,companyId);
     },
     components: {
         "payService-detail": payServiceDetail

+ 1 - 1
src/views/base/personDeviceLog-list.vue

@@ -356,7 +356,7 @@ export default {
     },
     sortChange(data) {
       this.field = data.column.field;
-      this.direction = data.order;
+      this.direction = data.order == "ascending" ? "asc" : "desc";
 
       this.changePage(this.pageIndex);
     },

+ 1 - 1
src/views/base/personDeviceRelation-BoundList.vue

@@ -245,7 +245,7 @@ export default {
     },
     sortChange(data) {
       this.field = data.column.field;
-      this.direction = data.order;
+      this.direction = data.order == "ascending" ? "asc" : "desc";
 
       this.changePage(this.pageIndex);
     },

+ 1 - 1
src/views/base/personDeviceRelation-list.vue

@@ -200,7 +200,7 @@ export default {
     },
     sortChange(data) {
       this.field = data.column.field;
-      this.direction = data.order;
+      this.direction = data.order == "ascending" ? "asc" : "desc";
 
       this.changePage(this.pageIndex);
     },

+ 2 - 0
src/views/base/personInfo-detail.vue

@@ -123,6 +123,7 @@
           <el-col :span="24">
             <el-form-item label="工作状态" prop="workStatus">
               <el-select
+                clearable
                 v-model="formModel.workStatus"
                 filterable
                 placeholder="请选择"
@@ -301,6 +302,7 @@ export default {
         personRoleId: [
           { required: true, message: "请选择身份", trigger: "blur" },
         ],
+        workStatus: [{required: true, message: "工作状态不能为空", trigger: "blur"}]
         // idCard: [
         //   { required: false, message: "身份证不能为空", trigger: "blur" },
         //   {

+ 7 - 2
src/views/base/personInfo-list.vue

@@ -360,10 +360,11 @@
       ></el-table-column>
       <el-table-column label="工作状态" width="120">
         <template slot-scope="{ row }">
-          <span v-if="row.workStatus == 2">外出</span>
+          <span v-if="row.workStatus == 1">工作</span>
+          <span v-else-if="row.workStatus == 2">外出</span>
           <span v-else-if="row.workStatus == 3">出差</span>
           <span v-else-if="row.workStatus == 4">休假</span>
-          <span v-else>工作</span>
+          <span v-else>未设置</span>
         </template>
       </el-table-column>
       <el-table-column
@@ -1267,6 +1268,10 @@ export default {
         var jsonData = response.data;
         if (jsonData.result) {
           if (jsonData.data != null) {
+            if(document.location.href.startsWith("https://")){
+                jsonData.data = jsonData.data.replace("http://","https://");
+            }
+            
             self.$message({
               showClose: true,
               type: "success",

+ 166 - 0
src/views/base/personPopedom-icon.vue

@@ -0,0 +1,166 @@
+<template>
+    <el-dialog
+      :visible.sync="showDialog"
+      :title="title"
+      width="900px"
+      :modal-append-to-body="true"
+      append-to-body
+      style="text-align:left;"
+      @close="closeDialog"
+      :close-on-click-modal="false"
+    >
+    <div class="flex-row">
+      <div class="role-permission">
+          <el-transfer
+          v-model="relatedMenus"
+          :data="menuList"
+          v-loading="loading"
+          filterable
+          target-order="push"
+          :filter-method="filterMethod"
+          filter-placeholder="请输入关键字"
+          :props="{key: 'id',label: 'description'}"
+          :titles="['未分配菜单','已分配菜单']"
+          @right-check-change="rightCheckChange"
+          ></el-transfer>
+      </div>
+      <div class="flex-col">
+        <div>
+          <el-button round size="mini" @click="moveUp">上移</el-button>
+          <div style="height:10px;"></div>
+          <el-button round size="mini" @click="moveDown">下移</el-button>
+        </div>
+      </div>
+    </div>
+    <span slot="footer" class="dialog-footer">
+        <el-button @click="closeDialog">取 消</el-button>
+        <el-button type="primary" @click="handleSubmit" :loading="submitting">确 定</el-button>
+    </span>
+    </el-dialog>
+</template>
+<script>
+import iconApi from "@/api/base/iconInfo";
+import personPopedomIconApi from "@/api/base/personPopedomIcon";
+
+export default {
+  props: ["personPopedomId","title"],
+  data() {
+    return {
+      menuList: [],
+      relatedMenus: [],
+      loading: false,
+      showDialog: true,
+      submitting: false,
+      rightCheckedItems: []
+    };
+  }, 
+  methods: {
+    closeDialog() {
+      this.$emit("close",false);
+    },
+    handleSubmit() {
+      var self = this;
+
+      personPopedomIconApi
+        .saveRelatedIcon(this.personPopedomId,this.relatedMenus)
+        .then(function(response) {
+          var jsonData = response.data;
+          self.submitting = false;
+
+          if (jsonData.result) {
+            self.$message({
+              message: "保存成功!",
+              type: "success"
+            });
+
+            self.$emit("close",true);
+          } else {
+            self.$message({
+              message: jsonData.message + "",
+              type: "warning"
+            });
+
+            self.$emit("close",false);
+          }
+        });
+    },
+    filterMethod(query, item) {
+      return item.description.indexOf(query) > -1;
+    },
+    queryRelatedMenuList() {
+      var self = this;
+
+      self.loading = true;
+
+      self.menuList = [];
+      self.relatedMenus= [];
+
+      iconApi.findAll()
+        .then(response => {
+          var jsonData = response.data;
+
+          self.menuList = jsonData.data.map(item => {
+            return {
+              id: item.id,
+              description: "[" + item.iconTypeName + "]" + item.iconName
+            };
+          });
+
+          return personPopedomIconApi.findRelatedIcon(self.personPopedomId);
+        })
+        .then(response => {
+          var jsonData = response.data;
+
+          self.relatedMenus = jsonData.data.map(item => {
+            return item.iconId;
+          });
+
+          //console.log(self.relatedMenus);
+
+          self.loading = false;
+        });
+    },
+    rightCheckChange(checkedItems) {
+      this.rightCheckedItems = checkedItems;
+    },
+    moveUp() {
+      this.rightCheckedItems.forEach(id=>{
+        var index = this.relatedMenus.indexOf(id);
+
+        if(index>0){
+          console.log(index + "," + id);
+          this.relatedMenus.splice(index,1);
+          this.relatedMenus.splice(index-1,0,id);
+        }
+      })
+    },
+    moveDown() {
+      this.rightCheckedItems.forEach(id=>{
+        var index = this.relatedMenus.indexOf(id);
+
+        if(index<this.relatedMenus.length-1){
+          console.log(index + "," + id);
+          this.relatedMenus.splice(index,1);
+          this.relatedMenus.splice(index+1,0,id);
+        }
+      })
+    }
+  },
+  mounted() {
+    this.queryRelatedMenuList();
+  }
+};
+</script>
+<style lang="scss" scoped>
+.flex-row{
+  display:flex;
+  flex-direction: row;
+}
+
+.flex-col{
+  display: flex;
+  flex-direction: col;
+  justify-content: center; /* 水平居中 */
+  align-items: center;     /* 垂直居中 */
+}
+</style>

+ 25 - 8
src/views/base/personPopedom-list.vue

@@ -114,14 +114,13 @@
             ></el-switch>
           </template>
         </el-table-column>
-        <el-table-column label="操作" width="100">
+        <el-table-column label="操作" width="200">
           <template slot-scope="{ row }">
-            <el-link type="warning" :underline="false" @click="handleEdit(row)"
-              >编辑</el-link
-            >-
-            <el-link type="danger" :underline="false" @click="handleDelete(row)"
-              >删除</el-link
-            >
+            <el-link type="primary" :underline="false" @click="handleAllocMenu(row)">自定义菜单</el-link>
+            -
+            <el-link type="warning" :underline="false" @click="handleEdit(row)">编辑</el-link>
+            -
+            <el-link type="danger" :underline="false" @click="handleDelete(row)">删除</el-link>
           </template>
         </el-table-column>
       </el-table>
@@ -140,12 +139,19 @@
         @close="onDetailModalClose"
         :personId="personId"
       ></personPopedom-detail>
+      <personPopedom-icon
+        v-if="showIconModal"
+        :personPopedomId="businessKey"
+        :title="iconModalTitle"
+        @close="onIconModalClose"
+      ></personPopedom-icon>
     </div>
   </el-dialog>
 </template>
 <script>
 import Constant from "@/constant";
 import PersonPopedomDetail from "./personPopedom-detail";
+import PersonPopedomIcon from "./personPopedom-icon";
 import personPopedomApi from "@/api/base/personPopedom";
 import NProgress from "nprogress"; // progress bar
 import "nprogress/nprogress.css"; // progress bar style
@@ -172,6 +178,8 @@ export default {
       showModal: false,
       modalTitle: "",
       showDialog: true,
+      showIconModal: false,
+      iconModalTitle: ""
     };
   },
   methods: {
@@ -220,7 +228,7 @@ export default {
     },
     sortChange(data) {
       this.field = data.column.field;
-      this.direction = data.order;
+      this.direction = data.order == "ascending" ? "asc" : "desc";
 
       this.changePage(this.pageIndex);
     },
@@ -287,6 +295,9 @@ export default {
         this.changePage(this.pageIndex);
       }
     },
+    onIconModalClose() {
+      this.showIconModal = false;
+    },
     handleReLoad() {
       var self = this;
       self.changePage(self.pageIndex);
@@ -319,12 +330,18 @@ export default {
         }
       });
     },
+    handleAllocMenu(record){
+      this.iconModalTitle = "自定义菜单";
+      this.businessKey = record.id;
+      this.showIconModal = true;
+    }
   },
   mounted: function () {
     this.changePage(1);
   },
   components: {
     "personPopedom-detail": PersonPopedomDetail,
+    "personPopedom-icon": PersonPopedomIcon
   },
 };
 </script>

+ 0 - 15
src/views/base/personRoleInfo-icon.vue

@@ -150,21 +150,6 @@ export default {
 };
 </script>
 <style lang="scss">
-.role-permission {
-  .el-transfer-panel {
-    border: 1px solid #ebeef5;
-    border-radius: 4px;
-    overflow: hidden;
-    background: #fff;
-    display: inline-block;
-    vertical-align: middle;
-    width: 320px;
-    -webkit-box-sizing: border-box;
-    box-sizing: border-box;
-    position: relative;
-  }
-}
-
 .flex-row{
   display:flex;
   flex-direction: row;

+ 1 - 1
src/views/base/personRoleInfo-list.vue

@@ -261,7 +261,7 @@ export default {
     },
     sortChange(data) {
       this.field = data.column.field;
-      this.direction = data.order;
+      this.direction = data.order == "ascending" ? "asc" : "desc";
 
       this.changePage(this.pageIndex);
     },

+ 1 - 1
src/views/base/problemFeedback-list.vue

@@ -223,7 +223,7 @@ export default {
     },
     sortChange(data) {
       this.field = data.column.field;
-      this.direction = data.order;
+      this.direction = data.order == "ascending" ? "asc" : "desc";
 
       this.changePage(this.pageIndex);
     },

+ 1 - 1
src/views/base/punchLocation-list.vue

@@ -293,7 +293,7 @@ export default {
     },
     sortChange(data) {
       this.field = data.column.field;
-      this.direction = data.order;
+      this.direction = data.order == "ascending" ? "asc" : "desc";
 
       this.changePage(this.pageIndex);
     },

+ 1 - 1
src/views/base/punchRecord-list.vue

@@ -257,7 +257,7 @@ export default {
     },
     sortChange(data) {
       this.field = data.column.field;
-      this.direction = data.order;
+      this.direction = data.order == "ascending" ? "asc" : "desc";
 
       this.changePage(this.pageIndex);
     },

+ 1 - 1
src/views/base/rechange-list.vue

@@ -277,7 +277,7 @@ export default {
     },
     sortChange(data) {
       this.field = data.column.field;
-      this.direction = data.order;
+      this.direction = data.order == "ascending" ? "asc" : "desc";
       this.changePage(this.pageIndex);
     },
     handleSelectionChange(val) {

+ 1 - 1
src/views/base/rechargeRecord-list.vue

@@ -323,7 +323,7 @@ export default {
     },
     sortChange(data) {
       this.field = data.column.field;
-      this.direction = data.order;
+      this.direction = data.order == "ascending" ? "asc" : "desc";
 
       this.changePage(this.pageIndex);
     },

+ 1 - 1
src/views/base/rechargeRecordProperty-list.vue

@@ -309,7 +309,7 @@ export default {
     },
     sortChange(data) {
       this.field = data.column.field;
-      this.direction = data.order;
+      this.direction = data.order == "ascending" ? "asc" : "desc";
 
       this.changePage(this.pageIndex);
     },

+ 1 - 1
src/views/base/rechargeRecordWater-list.vue

@@ -325,7 +325,7 @@ export default {
     },
     sortChange(data) {
       this.field = data.column.field;
-      this.direction = data.order;
+      this.direction = data.order == "ascending" ? "asc" : "desc";
 
       this.changePage(this.pageIndex);
     },

+ 1 - 1
src/views/base/roomInfo-list.vue

@@ -186,7 +186,7 @@ export default {
     },
     sortChange(data) {
       this.field = data.column.field;
-      this.direction = data.order;
+      this.direction = data.order == "ascending" ? "asc" : "desc";
 
       this.changePage(this.pageIndex);
     },

+ 1 - 1
src/views/base/temperatureRecord-list.vue

@@ -298,7 +298,7 @@ export default {
     },
     sortChange(data) {
       this.field = data.column.field;
-      this.direction = data.order;
+      this.direction = data.order == "ascending" ? "asc" : "desc";
 
       this.changePage(this.pageIndex);
     },

+ 1 - 1
src/views/base/terminalInfo-list.vue

@@ -170,7 +170,7 @@ export default {
     },
     sortChange(data) {
       this.field = data.column.field;
-      this.direction = data.order;
+      this.direction = data.order == "ascending" ? "asc" : "desc";
 
       this.changePage(this.pageIndex);
     },

+ 1 - 1
src/views/base/warningPusher-list.vue

@@ -272,7 +272,7 @@ export default {
     },
     sortChange(data) {
       this.field = data.column.field;
-      this.direction = data.order;
+      this.direction = data.order == "ascending" ? "asc" : "desc";
 
       this.changePage(this.pageIndex);
     },

+ 438 - 0
src/views/business/billPush-checkIn-detail.vue

@@ -0,0 +1,438 @@
+<template>
+    <el-dialog
+    :visible.sync="showDialog"
+    :title="title"
+    width="70%"
+    :modal-append-to-body="true"
+    style="text-align:left;"
+    @close="closeDialog"
+    :close-on-click-modal="false"
+    append-to-body
+    
+  >
+        <div class="user-panel" v-loading="loading">
+                <el-form ref="form" :model="formModel" label-width="150">
+                    <el-row :gutter="20" >
+                        <el-col :span="8">
+                            <div class="grid-content bg-purple">
+                                <span class="fontText">账单名称</span> 
+                                <span class="data">{{formModel.name}}</span>
+                            </div>
+                        </el-col>
+                        <el-col :span="8">
+                            <span class="fontText">收款方</span> 
+                            <span class="data">{{formModel.payee}}</span>
+                        </el-col>
+                        <el-col :span="8">
+                            <span class="fontText">收款账户</span> 
+                            <span class="data">{{formModel.collectionAccount}}</span>
+                        </el-col>
+                    </el-row>
+                    <el-row :gutter="20" >
+                        <el-col :span="8">
+                            <div class="grid-content bg-purple">
+                                <span class="fontText">缴费单位</span> 
+                                <span class="data">{{formModel.companyName}}</span>
+                            </div>
+                        </el-col>
+                        <el-col :span="8">
+                            <span class="fontText" >推送用户</span> 
+                            <span class="data" >{{formModel.personName}}</span>
+                        </el-col>
+                        <el-col :span="8">
+                            <span class="fontText">推送状态</span> 
+                            <span class="data" v-if="formModel.status=='0'" style="color:#F56C6C">未推送</span>
+                            <span class="data" v-else-if="formModel.status=='1'" style="color:#67C23A">已推送</span>
+                            <span class="data" v-else-if="formModel.status=='2'" style="color:#E6A23C">推送失败</span>
+                            <span class="data" v-else-if="formModel.status=='3'" style="color:#909399">已关闭</span>
+                        </el-col>
+                    </el-row>
+                    <el-row :gutter="20" >
+                        <el-col :span="8">
+                            <div class="grid-content bg-purple">
+                                <span class="fontText">推送时间</span> 
+                                <span class="data">{{formModel.pushTime}}</span>
+                            </div>
+                        </el-col>
+                        <el-col :span="8">
+                            <span class="fontText" >缴费状态</span> 
+                            <span class="data" v-if="formModel.payStatus=='10'" style="color:#F56C6C">未支付</span>
+                            <span class="data" v-if="formModel.payStatus=='15'" style="color:#E6A23C">部分支付</span>
+                            <span class="data" v-else-if="formModel.payStatus=='20'" style="color:#67C23A">已支付</span>
+                            <span class="data" v-else-if="formModel.payStatus=='30'" style="color:#909399">已关闭</span>
+                            <span class="data" v-else-if="formModel.payStatus=='40'" style="color:#909399">已退款</span>
+                        </el-col>
+                        <el-col :span="8">
+                            <span class="fontText">支付方式</span> 
+                            <span class="data">{{formModel.payName}}</span>
+                        </el-col>
+                    </el-row>
+                    <el-row :gutter="20" >
+                        <el-col :span="8">
+                            <div class="grid-content bg-purple">
+                                <span class="fontText">支付时间</span> 
+                                <span class="data">{{formModel.payTime}}</span>
+                            </div>
+                        </el-col>
+                        <el-col :span="8">
+                            <span class="fontText">账单备注</span> 
+                            <span class="data">{{formModel.bak}}</span>
+                        </el-col>
+                        <el-col :span="8">
+                            <span class="fontText">开票类型</span> 
+                            <span class="data">{{formModel.invoiceType}}</span>
+                        </el-col>
+                    </el-row>
+                 </el-form>
+            </div>
+            <el-divider></el-divider>
+            <el-row class="button-group" >
+                <el-button type="success" size="small" v-if="formModel.status=='1'" @click="handleQucodePay(formModel.orderId)">付款码</el-button>
+                <el-button type="success" size="small" plain icon="el-icon-download" @click="exportXls()">导出数据</el-button>
+            </el-row>
+            <el-table :data="tableData" v-loading="loading" stripe  show-summary :summary-method="getSummaries">
+                <el-table-column type="index" label="序号" width="80"></el-table-column>
+                <el-table-column prop="goodsName" label="收费项目"></el-table-column>
+                <el-table-column prop="beginEndTime" label="起止时间" width="300"></el-table-column>
+                <el-table-column prop="num" label="数量" width="300"></el-table-column>
+                <el-table-column prop="standard" label="收费标准(元)"></el-table-column>
+                <el-table-column prop="totalFee" label="收费金额(元)">
+                    <template slot-scope="{row}">
+                        {{fmtMoney(row.totalFee)}}
+                    </template>
+                </el-table-column>
+            </el-table>
+            <el-pagination style="text-align: center;"
+                :current-page.sync="pageIndex"
+                :total="totalElements"
+                :page-sizes="pageSizeList"
+                @current-change="changePage"
+                @size-change="pageSizeChange"
+                layout="total, sizes, prev, pager, next, jumper"
+            ></el-pagination>
+            <billPush-detail
+                v-if="showModal"
+                :businessKey="businessKey"
+                :title="modalTitle"
+                @close="onDetailModalClose"
+            ></billPush-detail>
+            <billPush-order-payTime
+                v-if="showModal2"
+                :businessKey="businessKey"
+                :title="modalTitle2"
+                @close="onDetailModalClose2"
+            ></billPush-order-payTime>
+            <billPush-qrcode-pay
+                v-if="showModal3"
+                :title="modalTitle3"
+                :orderId="orderId"
+                @close="onDetailModalClose3"
+            ></billPush-qrcode-pay>
+
+    </el-dialog>
+</template>
+<script>
+import Constant from "@/constant";
+import billPushApi from "@/api/business/billPush";
+import billPushPersonApi from "@/api/business/billPushPerson";
+import billPushQrcodePay from "./billPush-qrcode-pay";
+export default {
+    props: ["businessKey", "title"],
+    data() {
+        return{
+            formModel:{
+
+            },
+            queryModel: {
+                name: "",
+                status: "",
+                pushTimeRange: ['',''],
+                companyId:"",
+                payService:"",
+            },
+            formModel2:{
+                id:"",
+                payName:"",
+                payTime:"",
+            },
+            payModal:true,
+            payTime:"",
+            tableData:[],
+            pageIndex: 1,
+            pageSize: 10,
+            totalPages: 0,
+            totalElements: 0,
+            pageSizeList: [10, 20, 30],
+            multipleSelection: [],
+            activeName:"first",
+            showDialog: true,
+            loading: false,
+            showModal: false,
+            showModal2:false,
+            showModal3:false,
+            submitting: false,
+            modified: false
+        }
+    },
+    methods:{
+        closeDialog() {
+            this.$emit("close", this.modified);
+        },
+        handleClick(){
+
+        },
+        handleEdit() {
+            this.modalTitle = "编辑";
+            this.operation = "edit";
+            this.businessKey = this.businessKey;
+            this.showModal = true;
+        },
+        changePage(pageIndex,exportFlag) {
+            var self = this;
+            self.loading = true;
+
+            var billPushId = self.businessKey;
+
+            self.pageIndex = pageIndex;
+            var formData = new FormData();
+
+            formData.append("billPushId", billPushId);
+            formData.append("pageIndex", self.pageIndex);
+            
+            
+            if(exportFlag!=null){
+                formData.append("exportFlag", exportFlag);
+                formData.append("pageSize", 10000);
+            }
+            else{
+                formData.append("pageSize", self.pageSize);
+            }
+
+
+            billPushApi.goodsPageList(formData)
+            .then(function(response) {
+                self.loading = false;
+
+                var jsonData = response.data;
+
+                if(jsonData.result) {
+                    if(exportFlag){
+                        if(document.location.href.startsWith("https://")){
+                            jsonData.data = jsonData.data.replace("http://","https://");
+                        }
+                        
+                        //导出
+                        self.$message({
+                            showClose: true,
+                            type: "success",
+                            message: `报表已生成,<a href="${jsonData.data}">请点击链接下载</a>`,
+                            dangerouslyUseHTMLString: true,
+                            duration: 30000
+                        });
+                    }
+                    else{
+                        //分页查看
+                        var page = jsonData.data;
+
+                        self.tableData = page.data;
+                        self.totalPages = page.totalPages;
+                        self.totalElements = page.recordsTotal;
+                    }
+                }
+                else{
+                    self.$message.warning(jsonData.message);
+                }
+
+                // self.tableData = jsonData.data;
+                // self.totalPages = jsonData.totalPages;
+                // self.totalElements = jsonData.recordsTotal;
+            })
+            .catch(error => {
+                self.loading = false;
+                // self.$message.error(error + "");
+            }); 
+        },
+        fmtMoney(value){
+            const num = Number(value);
+            
+            if (!isNaN(num)) {
+                return num.toFixed(2);
+            }
+            else{
+                return num;
+            }
+        },
+        pageSizeChange(pageSize) {
+            this.pageSize = pageSize;
+        },
+        onDetailModalClose(retObj) {
+            //保存成功后回调
+            this.showModal = false;
+            //this.closeDialog();
+            this.modified = retObj;
+            
+            if(retObj){
+                this.changePage(1,false);
+            }
+        },
+        exportXls() {
+            this.changePage(1,true);
+        },
+        getSummaries(param) {
+            const { columns, data } = param;
+            const sums = [];
+            columns.forEach((column, index) => {
+                if (index === 0) {
+                    sums[index] = '合计';
+                    return;
+                }
+                const values = data.map(item => Number(item[column.property]));
+                if (!values.every(value => isNaN(value))) {
+                    sums[5] = values.reduce((prev, curr) => {
+                    const value = Number(curr);
+                    if (!isNaN(value)) {
+                        return prev + curr;
+                    } else {
+                        return prev;
+                    }
+                    }, 0);
+                    
+                    sums[5] = this.fmtMoney(sums[5]);
+                } else {
+                    sums[index] = '';
+                }
+            });
+
+            return sums;
+        },
+        onDetailModalClose2(){
+            //保存成功后回调
+            this.showModal2 = false;
+            var self = this;
+
+            (function() {
+                if (self.businessKey.length == 0) {
+                    return billPushApi.createGoods();
+                } else {
+                    return billPushApi.detail(self.businessKey);
+                }
+            })()
+            .then(response => {
+                var jsonData = response.data;
+                self.loading = false;
+
+                if (jsonData.result) {
+                    self.formModel = jsonData.data;
+                } else {
+                    self.$message.error(jsonData.message + "");
+                }
+            })
+            .catch(error => {
+                self.$message.error(error + "");
+            });
+
+        },
+        handlePayTime(){
+            var self = this;
+
+            var billPushId = self.businessKey;
+
+            this.modalTitle2 = "账单推送详情";
+            this.operation = "detail";
+            this.businessKey = billPushId;
+            this.showModal2 = true;
+        },
+        handlePush(){
+            var self = this;
+
+            self.$confirm("是否确认推送账单?", "提示", {
+            confirmButtonText: "确定",
+            cancelButtonText: "取消",
+            type: "warning"
+            })
+            .then(() => {
+            
+                var formData = new FormData();
+                formData.append("id", self.businessKey);
+
+                billPushApi.pushBill(formData).then((response)=>{
+                    var jsonData = response.data;
+
+                    if (jsonData.result) {
+                        this.changePage(this.pageIndex);
+                        this.$message.success("账单消息推送成功!");
+                    } else {
+                        this.$message.error(jsonData.message + "");
+                    }
+
+                });
+            });
+        },
+        handleQucodePay(orderId){
+            this.modalTitle3 = "付款码";
+            this.operation = "edit";
+            this.orderId = orderId;
+            this.showModal3 = true;
+        },
+        onDetailModalClose3() {
+            this.showModal3 = false;
+        }
+    },
+    components: {
+        "billPush-qrcode-pay":billPushQrcodePay
+    },
+    mounted: function() {
+        var self = this;
+
+        (function() {
+            if (self.businessKey.length == 0) {
+                return billPushApi.createGoods();
+            } else {
+                return billPushApi.detail(self.businessKey);
+            }
+        })()
+        .then(response => {
+            var jsonData = response.data;
+            self.loading = false;
+
+            if (jsonData.result) {
+                self.formModel = jsonData.data;
+            } else {
+                self.$message.error(jsonData.message + "");
+            }
+        })
+        .catch(error => {
+            self.$message.error(error + "");
+        });
+
+        this.changePage(1,false);
+    }
+}
+</script>
+<style scoped>
+.user-panel {
+  margin: 10px auto;
+  margin-left: 20px;
+}
+.data{
+    margin-left: 50px;
+    font-weight:bold
+}
+.el-row {
+margin-bottom: 20px;
+}
+.el-col {
+border-radius: 4px;
+}
+.grid-content {
+border-radius: 4px;
+min-height: 36px;
+}
+.title1{
+    margin-bottom: 40px;
+}
+.title2{
+    margin-top: 40px;
+    margin-bottom: 40px;
+}
+</style>

+ 572 - 0
src/views/business/billPush-checkIn-list.vue

@@ -0,0 +1,572 @@
+<template>
+    <div>
+        <el-breadcrumb separator=">">
+            <el-breadcrumb-item :to="{ path: '/' }">首页</el-breadcrumb-item>
+            <el-breadcrumb-item>
+                <a href="#">系统管理</a>
+            </el-breadcrumb-item>
+            <el-breadcrumb-item>
+                <a href="#">账单推送管理</a>
+            </el-breadcrumb-item>
+            </el-breadcrumb>
+        <el-divider></el-divider>
+        <el-form ref="queryForm" :model="queryModel" inline class="demo-form-inline">
+            <el-form-item label="账单名称" prop="name">
+                <el-input type="text" size="mini" v-model="queryModel.name"></el-input>
+            </el-form-item>
+            <el-form-item label="推送状态" prop="status">
+                <el-select v-model="queryModel.status"  size="mini"  >
+                    <el-option
+                        v-for="status in statusList"
+                        :key="status.id"
+                        :label="status.name"
+                        :value="status.id"
+                    ></el-option>
+                </el-select>
+            </el-form-item>
+            <el-form-item label="缴费状态" prop="payStatus">
+                <el-select v-model="queryModel.payStatus"  size="mini"  >
+                    <el-option
+                        v-for="payStatus in payStatusList"
+                        :key="payStatus.id"
+                        :label="payStatus.name"
+                        :value="payStatus.id"
+                    ></el-option>
+                </el-select>
+            </el-form-item>
+            <el-form-item label="缴费方式" prop="payName">
+                <el-select v-model="queryModel.payName"  size="mini"  >
+                    <el-option
+                        v-for="payName in payNameList"
+                        :key="payName.id"
+                        :label="payName.name"
+                        :value="payName.id"
+                    ></el-option>
+                </el-select>
+            </el-form-item>
+            <el-form-item label="收款账户" prop="collectionAccount">
+                <el-select v-model="queryModel.collectionAccount"  size="mini"  >
+                    <el-option
+                        v-for="collectionAccount in collectionAccountList"
+                        :key="collectionAccount.id"
+                        :label="collectionAccount.name"
+                        :value="collectionAccount.id"
+                    ></el-option>
+                </el-select>
+            </el-form-item>
+            <el-form-item label="推送时间" prop="pushTimeRange">
+                <el-date-picker
+                    v-model="queryModel.pushTimeRange"
+                    type="daterange"
+                    size="mini"
+                    range-separator="至"
+                    start-placeholder="开始时间"
+                    end-placeholder="结束时间"
+                    placeholder="选择时间范围"
+                    value-format="yyyy-MM-dd"
+                    >
+                </el-date-picker>
+            </el-form-item>
+            <el-form-item label="支付时间" prop="payTimeRange">
+                <el-date-picker
+                    v-model="queryModel.payTimeRange"
+                    type="daterange"
+                    size="mini"
+                    range-separator="至"
+                    start-placeholder="开始时间"
+                    end-placeholder="结束时间"
+                    placeholder="选择时间范围"
+                    value-format="yyyy-MM-dd"
+                    >
+                </el-date-picker>
+            </el-form-item>
+
+            <!-- <el-form-item label="收费项目:" prop="payService">
+            <el-select v-model="queryModel.payService"  size="mini">
+                <el-option
+                    v-for="payService in payServiceList"
+                    :key="payService.id"
+                    :label="payService.goodsName"
+                    :value="payService.id"
+                ></el-option>
+            </el-select>
+            </el-form-item> -->
+            <el-form-item>
+                <el-button
+                type="primary"
+                size="mini"
+                icon="ios-search"
+                @click="changePage(1)"
+                :loading="loading"
+                >查询</el-button>&nbsp;
+                <el-button
+                type="info"
+                size="mini"
+                style="margin-left: 8px"
+                @click="handleReset('queryForm')"
+                >重置</el-button>&nbsp;
+            </el-form-item>
+        </el-form>
+        <el-divider></el-divider>
+        <!-- <el-row class="button-group">
+            <el-button
+                type="primary"
+                size="small"
+                plain
+                icon="el-icon-circle-plus"
+                @click="handleAdd"
+                >创建账单</el-button
+            >
+        </el-row> -->
+        <el-table 
+        ref="formTable"
+        :data="tableData" 
+        :height="tableHeight"
+        v-loading="loading" stripe>
+            <el-table-column type="index" label="序号" :index="indexMethod" width="50"></el-table-column>
+            <el-table-column prop="name" label="账单名称" width="180"></el-table-column>
+            <el-table-column prop="companyName" label="缴费单位" width="180"></el-table-column>
+            <el-table-column prop="personName" label="推送用户" width="150">
+                <template slot-scope="{row}">
+                    <div>{{row.personName}}</div>
+                    <div>{{row.phone}}</div>
+                </template>
+            </el-table-column>
+            <el-table-column prop="collectionAccount" label="收款账户" ></el-table-column>
+            <el-table-column prop="totalFee" label="订单总额" ></el-table-column>
+            <el-table-column prop="status" label="账单状态">
+                <template slot-scope="{row}">
+                    <span v-if="row.status=='1'" style="color:#67C23A">已推送</span>
+                    <span v-else-if="row.status=='2'" style="color:#E6A23C">推送失败</span>
+                    <span v-else-if="row.status=='3'" style="color:#909399">已关闭</span>
+                    <span v-else style="color:#F56C6C">未推送</span>
+                </template>
+            </el-table-column>
+            <el-table-column prop="pushTime" label="推送时间"  width="180"></el-table-column>
+            <el-table-column prop="payStatus" label="缴费状态" >
+                <template slot-scope="{row}">
+                    <span v-if="row.payStatus=='10'" style="color:#F56C6C">未支付</span>
+                    <span v-else-if="row.payStatus=='15'" style="color:#E6A23C">部分支付</span>
+                    <span v-else-if="row.payStatus=='20'" style="color:#67C23A">已支付</span>
+                    <span v-else-if="row.payStatus=='30'" style="color:#909399">已关闭</span>
+                    <span v-else-if="row.payStatus=='40'" style="color:#909399">已退款</span>
+                </template>
+            </el-table-column>
+            <el-table-column prop="payTime" label="缴费时间" width="180"></el-table-column>
+            <el-table-column prop="payName" label="支付方式" ></el-table-column>
+            <el-table-column prop="payee" label="收款方" ></el-table-column>
+            <!-- <el-table-column prop="isOpenWechat"  label="支持微信支付"  >
+                <template slot-scope="{row}">
+                    <el-switch
+                        v-model="row.isOpenWechat"
+                        active-color="#13ce66"
+                        inactive-color="#ff4949"
+                        @change="handlChange(row,'0')">
+                    </el-switch>
+                </template>
+            </el-table-column>
+            <el-table-column prop="isOpenAlipay"  label="支持支付宝支付"  >
+                <template slot-scope="{row}">
+                    <el-switch
+                        v-model="row.isOpenAlipay"
+                        active-color="#13ce66"
+                        inactive-color="#ff4949"
+                        @change="handlChange(row,'1')">
+                    </el-switch>
+                </template>
+            </el-table-column> -->
+            <el-table-column label="操作" width="180" fixed="right">
+                <template slot-scope="{row}">
+                   <el-link  type="primary" @click="handleDetailList(row)">查看详情</el-link>
+                </template>
+            </el-table-column>
+        </el-table>
+        <el-pagination
+        :current-page.sync="pageIndex"
+        :total="totalElements"
+        :page-sizes="pageSizeList"
+        @current-change="changePage"
+        @size-change="pageSizeChange"
+        layout="total, sizes, prev, pager, next, jumper"
+        ></el-pagination>
+        <billPush-checkIn-detail
+            v-if="showModal2"
+            :businessKey="businessKey"
+            :parentId="selectedRecord.id"
+            :title="modalTitle2"
+            @close="onDetailModalClose2"
+        ></billPush-checkIn-detail>
+    </div>
+</template>
+<script>
+import Constant from "@/constant";
+import billPushApi from "@/api/business/billPush";
+import companyInfoApi from "@/api/base/companyInfo";
+import companyPaymentApi from "@/api/base/companyPayment";
+import billPushCheckInDetail from "./billPush-checkIn-detail";
+import pageUtil from "@/utils/page";
+
+export default {
+    name: "businessbillPushCheckInList",
+    data() {
+        var self = this;
+
+        return {
+            queryModel: {
+                name:"",
+                companyId:"",
+                status: "",
+                payName:"",
+                collectionAccount:"",
+                pushTimeRange: "",
+                payTimeRange:"",
+                payStatus:"",
+            },
+            treeData: [],
+            loading: false,
+            statusList:[
+                {
+                    id:"0",
+                    name:"未推送",
+                },
+                {
+                    id:"1",
+                    name:"已推送",
+                },
+                {
+                    id:"2",
+                    name:"推送失败",
+                },
+                {      
+                    id:"3",
+                    name:"已关闭",
+                }
+            ],
+            tableData: [],
+            payStatusList:[
+                {
+                    id:"10",
+                    name:"未支付",
+                },
+                {
+                    id:"15",
+                    name:"部分支付",
+                },
+                {
+                    id:"20",
+                    name:"已支付",
+                },
+                {      
+                    id:"30",
+                    name:"已关闭",
+                },
+                {      
+                    id:"40",
+                    name:"已退款",
+                }
+            ],
+            payNameList:[
+                {
+                    id:"wechat",
+                    name:"微信",
+                },
+                {
+                    id:"alipay",
+                    name:"支付宝",
+                },
+                {
+                    id:"cash",
+                    name:"现金",
+                },
+            ],
+            collectionAccountList:[],
+            companyList:[],
+            pageIndex: 1,
+            pageSize: 10,
+            totalPages: 0,
+            totalElements: 0,
+            pageSizeList: [10, 20, 30],
+            multipleSelection: [],
+            showModal: false,
+            showModal2: false,
+            showModal3:false,
+            props: {
+                // 配置项(必选)
+                value: "id",
+                label: "name",
+                children: "children"
+            },
+            tableHeight: 400
+        }
+    },
+    created() {
+
+        companyPaymentApi.list().then((response)=>{
+            var jsonData = response.data;
+            this.collectionAccountList = jsonData.data;
+        });
+
+        setTimeout(()=>{
+            this.tableHeight = pageUtil.autoAdjustHeight(this.$refs.formTable.$el);
+        },1000);
+    },
+    methods: {
+        indexMethod(index) {
+            return (this.pageIndex - 1) * this.pageSize + (index + 1);
+        },
+        changePage(pageIndex) {
+            var self = this;
+
+            self.loading = true;
+
+            self.pageIndex = pageIndex;
+            var formData = new FormData();
+
+            formData.append("pageIndex", self.pageIndex);
+            formData.append("pageSize", self.pageSize);
+
+            formData.append("name", self.queryModel.name);
+            formData.append("status", self.queryModel.status);
+            formData.append("payName", self.queryModel.payName);
+
+            formData.append("collectionAccount", self.queryModel.collectionAccount);
+            formData.append("pushTimeRange", self.queryModel.pushTimeRange);
+            formData.append("payTimeRange", self.queryModel.payTimeRange);
+            formData.append("payStatus", self.queryModel.payStatus);
+
+
+            billPushApi.checkInBillpageList(formData)
+                .then(function(response) {
+                    self.loading = false;
+
+                    var jsonData = response.data.data;
+
+                    self.tableData = jsonData.data;
+                    self.totalPages = jsonData.totalPages;
+                    self.totalElements = jsonData.recordsTotal;
+                })
+                .catch(error => {
+                    self.loading = false;
+                    // self.$message.error(error + "");
+                });
+        },
+        pageSizeChange(pageSize) {
+            this.pageSize = pageSize;
+        },
+        handleAdd(record) {
+            this.modalTitle = "账单信息";
+            this.operation = "add";
+            this.businessKey = "";
+
+            if(record!=null){
+                this.selectedRecord = record;
+            }
+            else{
+                this.selectedRecord = {};
+            }
+
+            this.showModal = true;
+        },
+        loadTree() {
+            companyInfoApi.list().then(resp => {
+                var jsonData = resp.data;
+
+                if (jsonData.result) {
+                this.treeData = jsonData.data;
+                } else {
+                this.$message.error(jsonData.message + "");
+                }
+            });
+        },
+        onDetailModalClose2(retObj) {
+            //保存成功后回调
+            this.showModal2 = false;
+
+            if(retObj){
+                this.changePage(this.pageIndex);
+            }            
+        },
+        handleReset(name) {
+            this.$refs[name].resetFields();
+        },
+        handChange(selVal){
+
+            this.queryModel.payService = "";
+
+            var formData = new FormData();
+            formData.append("companyId", selVal);
+
+            billPushApi.payServiceList(formData).then((response)=>{
+                var jsonData = response.data;
+                this.payServiceList = jsonData.data;
+            });
+        },
+        handleDetailList(record){
+            this.modalTitle2 = "账单推送详情";
+            this.operation = "detail";
+            this.businessKey = record.id;
+            this.selectedRecord = record;
+            this.showModal2 = true;
+        },
+        handlePush(record){
+            var id = record.id;
+
+            this.$confirm("是否确认推送账单?", "提示", {
+            confirmButtonText: "确定",
+            cancelButtonText: "取消",
+            type: "warning"
+            })
+            .then(() => {
+            
+                var formData = new FormData();
+                formData.append("id", id);
+
+                billPushApi.pushBill(formData).then((response)=>{
+                    var jsonData = response.data;
+
+                    if (jsonData.result) {
+                        this.changePage(this.pageIndex);
+                        this.$message.success("账单消息推送成功!");
+                    } else {
+                        this.$message.error(jsonData.message + "");
+                    }
+
+                });
+            });
+        },
+        handleDelete(record) {
+            var self = this;
+
+            self.$confirm("是否确认删除?", "提示", {
+                confirmButtonText: "确定",
+                cancelButtonText: "取消",
+                type: "warning"
+                })
+                .then(() => {
+                billPushApi.remove(record.id).then(function(response) {
+                    var jsonData = response.data;
+
+                    if (jsonData.result) {
+                    var rs = self.loopDelete(self.tableData,record.id);
+
+                    self.$message({
+                        type: "success",
+                        message: "删除成功!"
+                    });
+                    }
+                });
+            });
+        },
+        handleClose(record) {
+            var self = this;
+
+            self.$confirm("是否确认关闭?", "提示", {
+                confirmButtonText: "确定",
+                cancelButtonText: "取消",
+                type: "warning"
+                })
+                .then(() => {
+                billPushApi.closeBill(record.id).then(function(response) {
+                    var jsonData = response.data;
+
+                    if (jsonData.result) {
+                        self.changePage(self.pageIndex);
+                        this.$message.success("关闭成功!");
+                    } else {
+                        this.$message.error(jsonData.message + "");
+                    }
+
+                });
+            });
+        },
+        loopDelete(list,id){
+            var rs = false;
+
+            for(var i=0;i<list.length;i++){
+                if(list[i].id == id){
+                list.splice(i,1);
+                rs = true;
+                break;
+                }
+
+                if(list[i].children!=null){
+                rs = this.loopDelete(list[i].children,id);
+
+                if(rs){
+                    break;
+                }
+                }
+            }
+
+            return rs;
+        }, 
+        handlePayTime(record){
+            var self = this;
+
+            this.modalTitle3 = "账单推送详情";
+            this.operation = "detail";
+            this.businessKey = record.id;
+            this.showModal3 = true;
+        },
+        handlChange(record,type){
+            var self = this;
+
+            var formData = new FormData();
+            self.loading = true;
+
+            formData.append("id", record.id);
+            if(type=="0"){
+                formData.append("isOpen", record.isOpenWechat);
+            }
+            else{
+                formData.append("isOpen", record.isOpenAlipay);
+            }
+            formData.append("type", type);
+
+            billPushApi.updateIsOpenWechatOrAlipay(formData).then(function (response) {
+                var jsonData = response.data;
+                self.loading = false;
+                if (jsonData.result) {
+                    self.changePage(self.pageIndex);
+                }
+                else{
+                    self.$message.error(jsonData.message + "");
+                }
+            });
+
+        }
+    },
+    mounted: function() {
+        this.changePage(1);
+    },
+    components: {
+        "billPush-checkIn-detail":billPushCheckInDetail
+    }
+}
+</script>
+<style lang="scss" scoped>
+.el-breadcrumb {
+  margin: 10px;
+  line-height: 20px;
+}
+
+.el-divider {
+  margin: 5px 0;
+}
+
+.demo-form-inline {
+  margin-left: 10px;
+  text-align: left;
+}
+
+.button-group {
+  margin-left: 10px;
+  text-align: left;
+}
+.link-span{
+    margin-right: 30px;
+}
+.span-view{
+    margin-left: 10px;
+}
+</style>

+ 203 - 44
src/views/business/billPush-detail-list.vue

@@ -42,9 +42,12 @@
                         <el-col :span="8">
                             <span class="fontText">推送状态</span> 
                             <span class="data" v-if="formModel.status=='0'" style="color:#F56C6C">未推送</span>
-                            <span class="data" v-else-if="formModel.status=='1'" style="color:#67C23A">已推送</span>
+                            <span class="data" v-else-if="formModel.status=='1'" style="color:#67C23A">
+                                <span v-if="formModel.payStatus=='20'" style="color:#67C23A">已完成</span>
+                                <span v-else style="color:#67C23A">已推送</span>
+                            </span>
                             <span class="data" v-else-if="formModel.status=='2'" style="color:#E6A23C">推送失败</span>
-                            <span class="data" v-else-if="formModel.status=='3'" style="color:#909399">已关闭</span>
+                            <span class="data" v-else-if="formModel.status=='3'" style="color:#909399">已作废</span>
                         </el-col>
                     </el-row>
                     <el-row :gutter="20" >
@@ -75,20 +78,60 @@
                                 <span class="data">{{formModel.payTime}}</span>
                             </div>
                         </el-col>
-                        <el-col :span="8">
-                            <span class="fontText" >收款人</span> 
-                            <span class="data">{{formModel.payeePerson}}</span>
-                        </el-col>
                         <el-col :span="8">
                             <span class="fontText">账单备注</span> 
                             <span class="data">{{formModel.bak}}</span>
                         </el-col>
+                        <el-col :span="8">
+                            <span class="fontText">开票类型</span> 
+                            <span class="data">{{formModel.invoiceTypeN}}</span>
+                        </el-col>
+                    </el-row>
+                    <el-row :gutter="20" >
+                        <el-col :span="8">
+                            <div class="grid-content bg-purple">
+                                <span class="fontText">是否开票</span> 
+                                <span class="data">
+                                    <el-switch
+                                        v-model="formModel.invoiced"
+                                        active-color="#13ce66"
+                                        inactive-color="#ff4949"
+                                        @change="handleSwitchChange(formModel,'2')">
+                                    </el-switch>
+                                </span>
+                            </div>
+                        </el-col>
+                        <el-col :span="8">
+                            <div class="grid-content bg-purple" v-if="formModel.isMobilePayment">
+                                <span class="fontText">微信支付</span> 
+                                <span class="data">
+                                    <el-switch
+                                        v-model="formModel.isOpenWechat"
+                                        active-color="#13ce66"
+                                        inactive-color="#ff4949"
+                                        @change="handleSwitchChange(formModel,'0')">
+                                    </el-switch>
+                                </span>
+                            </div>
+                        </el-col>
+                        <el-col :span="8" v-if="formModel.isMobilePayment">
+                            <span class="fontText">支付宝支付</span> 
+                            <span class="data">
+                                <el-switch
+                                    v-model="formModel.isOpenAlipay"
+                                    active-color="#13ce66"
+                                    inactive-color="#ff4949"
+                                    @change="handleSwitchChange(formModel,'1')">
+                                </el-switch>
+                            </span>
+                        </el-col>
                     </el-row>
                  </el-form>
             </div>
             <el-divider></el-divider>
-            <el-row class="button-group">
-                <el-button type="success" size="small" plain icon="el-icon-download" @click="exportXls()">导出数据</el-button>
+            <el-row class="button-group" >
+                <el-button type="success" size="small" v-if="formModel.status=='1'" @click="handleQucodePay(formModel.orderId)">付款码</el-button>
+                <el-button type="success" size="small" plain icon="el-icon-download" @click="exportXls()">导出账单</el-button>
                 <el-button
                     type="primary"
                     size="small"
@@ -106,14 +149,27 @@
                     @click="handleEdit" v-else
                     >修改账单</el-button
                 >
+
+                <el-button
+                    type="warning"
+                    size="small"
+                    plain
+                    icon="el-icon-s-promotion"
+                    @click="handlePush(row)"
+                    >推送账单</el-button
+                >
             </el-row>
             <el-table :data="tableData" v-loading="loading" stripe  show-summary :summary-method="getSummaries">
                 <el-table-column type="index" label="序号" width="80"></el-table-column>
                 <el-table-column prop="goodsName" label="收费项目"></el-table-column>
                 <el-table-column prop="beginEndTime" label="起止时间" width="300"></el-table-column>
-                <el-table-column prop="num" label="数量"></el-table-column>
+                <el-table-column prop="num" label="数量" width="300"></el-table-column>
                 <el-table-column prop="standard" label="收费标准(元)"></el-table-column>
-                <el-table-column prop="totalFee" label="收费金额(元)"></el-table-column>
+                <el-table-column prop="totalFee" label="收费金额(元)">
+                    <template slot-scope="{row}">
+                        {{fmtMoney(row.totalFee)}}
+                    </template>
+                </el-table-column>
             </el-table>
             <el-pagination style="text-align: center;"
                 :current-page.sync="pageIndex"
@@ -135,6 +191,12 @@
                 :title="modalTitle2"
                 @close="onDetailModalClose2"
             ></billPush-order-payTime>
+            <billPush-qrcode-pay
+                v-if="showModal3"
+                :title="modalTitle3"
+                :orderId="orderId"
+                @close="onDetailModalClose3"
+            ></billPush-qrcode-pay>
 
     </el-dialog>
 </template>
@@ -144,6 +206,7 @@ import billPushApi from "@/api/business/billPush";
 import billPushPersonApi from "@/api/business/billPushPerson";
 import billPushDetail from "./billPush-detail";
 import billPushOrderPayTime from "./billPush-order-payTime";
+import billPushQrcodePay from "./billPush-qrcode-pay";
 export default {
     props: ["businessKey", "title"],
     data() {
@@ -177,12 +240,14 @@ export default {
             loading: false,
             showModal: false,
             showModal2:false,
+            showModal3:false,
             submitting: false,
+            modified: false
         }
     },
     methods:{
         closeDialog() {
-            this.$emit("close", false);
+            this.$emit("close", this.modified);
         },
         handleClick(){
 
@@ -193,6 +258,12 @@ export default {
             this.businessKey = this.businessKey;
             this.showModal = true;
         },
+        handleQucodePay(orderId){
+            this.modalTitle3 = "付款码";
+            this.operation = "edit";
+            this.orderId = orderId;
+            this.showModal3 = true;
+        },
         changePage(pageIndex,exportFlag) {
             var self = this;
             self.loading = true;
@@ -216,44 +287,57 @@ export default {
 
 
             billPushApi.goodsPageList(formData)
-                .then(function(response) {
-                    self.loading = false;
+            .then(function(response) {
+                self.loading = false;
 
-                    var jsonData = response.data;
+                var jsonData = response.data;
 
-                    if(jsonData.result) {
-                        if(exportFlag){
-                            //导出
-                            self.$message({
-                                showClose: true,
-                                type: "success",
-                                message: `报表已生成,<a href="${jsonData.data}">请点击链接下载</a>`,
-                                dangerouslyUseHTMLString: true,
-                                duration: 30000
-                            });
+                if(jsonData.result) {
+                    if(exportFlag){
+                        if(document.location.href.startsWith("https://")){
+                            jsonData.data = jsonData.data.replace("http://","https://");
                         }
-                        else{
-                            //分页查看
-                            var page = jsonData.data;
 
-                            self.tableData = page.data;
-                            self.totalPages = page.totalPages;
-                            self.totalElements = page.recordsTotal;
-                        }
+                        //导出
+                        self.$message({
+                            showClose: true,
+                            type: "success",
+                            message: `报表已生成,<a href="${jsonData.data}">请点击链接下载</a>`,
+                            dangerouslyUseHTMLString: true,
+                            duration: 30000
+                        });
                     }
                     else{
-                        self.$message.warning(jsonData.message);
+                        //分页查看
+                        var page = jsonData.data;
+
+                        self.tableData = page.data;
+                        self.totalPages = page.totalPages;
+                        self.totalElements = page.recordsTotal;
                     }
+                }
+                else{
+                    self.$message.warning(jsonData.message);
+                }
 
-                    // self.tableData = jsonData.data;
-                    // self.totalPages = jsonData.totalPages;
-                    // self.totalElements = jsonData.recordsTotal;
-                })
-                .catch(error => {
-                    self.loading = false;
-                    // self.$message.error(error + "");
-                });
- 
+                // self.tableData = jsonData.data;
+                // self.totalPages = jsonData.totalPages;
+                // self.totalElements = jsonData.recordsTotal;
+            })
+            .catch(error => {
+                self.loading = false;
+                // self.$message.error(error + "");
+            }); 
+        },
+        fmtMoney(value){
+            const num = Number(value);
+            
+            if (!isNaN(num)) {
+                return num.toFixed(2);
+            }
+            else{
+                return num;
+            }
         },
         pageSizeChange(pageSize) {
             this.pageSize = pageSize;
@@ -262,7 +346,11 @@ export default {
             //保存成功后回调
             this.showModal = false;
             //this.closeDialog();
-             this.changePage(1,false);
+            this.modified = retObj;
+            
+            if(retObj){
+                this.changePage(1,false);
+            }
         },
         exportXls() {
             this.changePage(1,true);
@@ -285,7 +373,8 @@ export default {
                         return prev;
                     }
                     }, 0);
-                    sums[5] ;
+                    
+                    sums[5] = this.fmtMoney(sums[5]);
                 } else {
                     sums[index] = '';
                 }
@@ -320,6 +409,16 @@ export default {
             });
 
         },
+        onDetailModalClose3(retObj) {
+            //保存成功后回调
+            this.showModal3 = false;
+            //this.closeDialog();
+            this.modified = retObj;
+            
+            if(retObj){
+                this.changePage(1,false);
+            }
+        },
         handlePayTime(){
             var self = this;
 
@@ -329,11 +428,71 @@ export default {
             this.operation = "detail";
             this.businessKey = billPushId;
             this.showModal2 = true;
+        },
+        handlePush(){
+            var self = this;
+
+            self.$confirm("是否确认推送账单?", "提示", {
+            confirmButtonText: "确定",
+            cancelButtonText: "取消",
+            type: "warning"
+            })
+            .then(() => {
+            
+                var formData = new FormData();
+                formData.append("id", self.businessKey);
+
+                billPushApi.pushBill(formData).then((response)=>{
+                    var jsonData = response.data;
+
+                    if (jsonData.result) {
+                        this.formModel.status="1";
+                        this.$message.success("账单消息推送成功!");
+                    } else {
+                        this.$message.error(jsonData.message + "");
+                    }
+
+                });
+            });
+        },        
+        handleSwitchChange(record,type){
+            var self = this;
+
+            var formData = new FormData();
+            self.loading = true;
+
+            formData.append("id", self.businessKey);
+
+            if(type=="0"){
+                formData.append("isOpen", record.isOpenWechat);
+            }
+            else if(type=="1"){
+                formData.append("isOpen", record.isOpenAlipay);
+            }
+            else if(type=="2"){
+                formData.append("isOpen", record.invoiced);
+            }
+
+            formData.append("type", type);
+
+            billPushApi.updateIsOpenWechatOrAlipay(formData).then(function (response) {
+                var jsonData = response.data;
+                self.loading = false;
+                if (jsonData.result) {
+                    //self.changePage(self.pageIndex);
+                    self.modified = true;
+                }
+                else{
+                    self.$message.error(jsonData.message + "");
+                }
+            });
+
         }
     },
     components: {
         "billPush-detail": billPushDetail,
-        "billPush-order-payTime":billPushOrderPayTime
+        "billPush-order-payTime":billPushOrderPayTime,
+        "billPush-qrcode-pay":billPushQrcodePay
     },
     mounted: function() {
         var self = this;

+ 288 - 102
src/views/business/billPush-detail.vue

@@ -2,7 +2,7 @@
   <el-dialog
     :visible.sync="showDialog"
     :title="title"
-    width="90%"
+    width="95%"
     :modal-append-to-body="true"
     style="text-align:left;"
     @close="closeDialog"
@@ -17,17 +17,9 @@
         <el-form-item label="收款方:" prop="payee">
           <el-input v-model="formModel.payee" placeholder="请输入收款方" class="input-form-main"></el-input>
         </el-form-item>
-        <el-form-item label="缴费单位:" prop="companyId">
-          <el-select v-model="formModel.companyId" filterable class="input-form-main" @change="handChange">
-            <el-option
-                v-for="company in companyList"
-                :key="company.id"
-                :label="company.name"
-                :value="company.id"
-              ></el-option>
-          </el-select>
-        </el-form-item>
         <el-form-item label="收款账户:" prop="collectionAccountId">
+            <!-- <el-input v-model="formModel.collectionAccountId" style="display:none"></el-input>
+            <el-input v-model="formModel.collectionAccountName" placeholder="请输入收款方" class="input-form-main" readonly="readonly"></el-input> -->
             <el-select v-model="formModel.collectionAccountId"   class="input-form-main" >
                 <el-option
                     v-for="collectionAccount in collectionAccountList"
@@ -37,38 +29,87 @@
                 ></el-option>
             </el-select>
         </el-form-item>
-        <el-form-item label="推送用户:" prop="personId" >
-          <el-select v-model="formModel.personId" class="input-form-main" filterable>
+        <el-form-item label="缴费单位:" prop="checkinInfoId">
+          <el-select v-model="formModel.checkinInfoId" filterable class="input-form-main" @change="handleCompanyChange">
+            <el-option
+                v-for="checkinInfo in companyList"
+                :key="checkinInfo.id"
+                :label="checkinInfo.companyName"
+                :value="checkinInfo.id"
+              ></el-option>
+          </el-select>
+        </el-form-item> 
+        <el-form-item label="推送用户:" prop="personName" >
+        <!--
+            <el-input v-model="formModel.personId" style="display:none"></el-input>
+        -->
+            <el-input v-model="formModel.personName"  class="input-form-main"></el-input> 
+          <!-- <el-select v-model="formModel.personId" class="input-form-main" filterable>
             <el-option
                 v-for="person in personList"
                 :key="person.id"
                 :label="person.name"
                 :value="person.id"
               ></el-option>
-          </el-select>
+          </el-select> -->
         </el-form-item>
         <el-form-item label="备注:" prop="bak">
           <el-input type="textarea" v-model="formModel.bak" placeholder="请输入备注"  class="input-form-main"></el-input>
         </el-form-item>
+        <el-form-item label="开票类型:" prop="invoiceType">
+          <el-select v-model="formModel.invoiceType" filterable class="input-form-main">
+            <el-option
+                v-for="company in invoiceTypeList"
+                :key="company.value"
+                :label="company.name"
+                :value="company.value"
+              ></el-option>
+          </el-select>
+        </el-form-item> 
+        <el-form-item label="微信支付:" prop="isOpenWechat" v-if="formModel.isMobilePayment">
+            <el-switch
+                v-model="formModel.isOpenWechat"
+                active-color="#13ce66"
+                inactive-color="#ff4949"
+                @change="handlChange(row)">
+            </el-switch>
+        </el-form-item>
+        <el-form-item label="支付宝支付:" prop="isOpenAlipay" v-if="formModel.isMobilePayment">
+            <el-switch
+                v-model="formModel.isOpenAlipay"
+                active-color="#13ce66"
+                inactive-color="#ff4949"
+                @change="handlChange(row)">
+            </el-switch>
+        </el-form-item>
 
         <h3>账单信息</h3>
-        <el-table :data="formModel.billPushGoodsList" show-summary :summary-method="getSummaries">
-            <el-table-column type="index" label="序号" width="50"></el-table-column>
-            <el-table-column prop="goodsId" label="收费项目">
-              <template slot-scope="{row}">
-                  <el-form-item>
-                    <el-select v-model="row.goodsId" placeholder="请选择" style="width:150px;">
+        <el-table 
+        class="compact-table"
+        :data="formModel.billPushGoodsList" 
+        show-summary :summary-method="getSummaries">
+            <el-table-column prop="sort" type="index" label="序号" width="50"></el-table-column>
+            <el-table-column prop="goodsId" label="收费项目" width="150">
+              <template slot-scope="scope">
+                  <el-form-item
+                    :prop="'billPushGoodsList.' + scope.$index + '.goodsId'"
+                    :rules="ruleValidate['goodsId']"
+                  >
+                    <el-select 
+                    v-model="scope.row.goodsId" 
+                    placeholder="请选择" 
+                    @change="handGoodsChange(scope)" size="mini">
                         <el-option
                         v-for="result in goodsList"
                         :key="result.id"
-                        :label="result.name"
+                        :label="result.goodsName"
                         :value="result.id"
                         ></el-option>
                     </el-select>
                   </el-form-item>
               </template>
             </el-table-column>
-            <el-table-column prop="beginEndTime" label="起止时间" width="400">
+            <el-table-column prop="beginEndTime" label="起止时间" width="380">
                 <template slot-scope="scope">
                     <el-form-item
                     :prop="'billPushGoodsList.' + scope.$index + '.beginEndTime'"
@@ -82,43 +123,55 @@
                             end-placeholder="结束时间"
                             placeholder="选择时间范围"
                             value-format="yyyy-MM-dd"
+                            size="mini"
                             >
                         </el-date-picker>
                     </el-form-item>
                 </template>
             </el-table-column>
-            <el-table-column prop="numStr" label="数量" width="120">
+            <el-table-column prop="numStr" label="数量"  width="310">
                 <template slot-scope="scope">
                     <el-form-item
-                    :prop="'billPushGoodsList.' + scope.$index + '.numStr'"
-                    :rules="ruleValidate['numStr']"
+                    :prop="'billPushGoodsList.' + scope.$index + '.numStr3'"
+                    :rules="ruleValidate['numStr3']"
                     >
-                    <el-input placeholder="数量" v-model="scope.row.numStr"></el-input>
+                        <template v-if="scope.row.goodTypeId=='7'">
+                            <el-input style="width:85px" placeholder="止码" v-model.number="scope.row.numStr2" @change="handStartChange(scope)" size="mini"></el-input>
+                            -<el-input style="width:85px" placeholder="起码" v-model.number="scope.row.numStr" @change="handStartChange(scope)" size="mini"></el-input>
+                            =<el-input style="width:85px" v-model.number="scope.row.numStr3"  @change="handNumChange(scope)" size="mini"></el-input>
+                        </template>
+                        <template v-else>
+                            <el-input placeholder="数量" v-model.number="scope.row.numStr3"  @change="handNumChange(scope)" size="mini"></el-input>
+                        </template>  
                     </el-form-item>
                 </template>
             </el-table-column>
-            <el-table-column prop="standard" label="收费标准">
+            <el-table-column prop="standard" label="收费标准" width="200">
                 <template slot-scope="scope">
                     <el-form-item
-                    :prop="'billPushGoodsList.' + scope.$index + '.standard'"
-                    :rules="ruleValidate['standard']"
+                    :prop="'billPushGoodsList.' + scope.$index + '.unitPrice'"
+                    :rules="ruleValidate['unitPrice']"
+                    size="mini"
                     >
-                    <el-input placeholder="收费标准" v-model="scope.row.standard"></el-input>
+                        <el-input placeholder="收费标准" v-model="scope.row.unitPrice" @change="handNumChange(scope)" size="mini">
+                            <template slot="append">{{scope.row.unit}}</template>
+                        </el-input>
                     </el-form-item>
                 </template>
             </el-table-column>
-            <el-table-column prop="totalFee" label="合计金额" width="150">
+            <el-table-column prop="totalFee" label="合计金额(元)">
                 <template slot-scope="scope">
                     <el-form-item
                     :prop="'billPushGoodsList.' + scope.$index + '.totalFee'"
-                    :rules="ruleValidate['totalFee']"
+                    :rules="ruleValidate['totalFee']" size="mini"
                     >
-                    <el-input placeholder="合计金额" v-model="scope.row.totalFee"></el-input>
+                    <el-input placeholder="合计金额" :value="scope.row.totalFee" readonly="readonly" size="mini">
+                    </el-input>
                     </el-form-item>
                 </template>
             </el-table-column>
 
-            <el-table-column label="操作" width="200">
+            <el-table-column label="操作" width="100" fixed="right">
               <template slot-scope="{row}">
                 <el-form-item>
                   <i class="el-icon-delete my-font" @click="handleDelete(row)"></i>
@@ -159,36 +212,51 @@ export default {
         return {
             ruleValidate: {
                 name: [{ required: true, message: "账单名称不能为空", trigger: "blur" }],
-                payee: [{ required: true, message: "收款方不能为空", trigger: "blur" }],
-                companyId: [{ required: true, message: "公司不能为空", trigger: "blur" }],
-                collectionAccountId: [{ required: true, message: "请选择收款账户", trigger: "blur" }],
-                payService: [{ required: true, message: "收费项目不能为空", trigger: "blur" }]
+                checkinInfoId: [{ required: true, message: "缴费单位不能为空", trigger: "blur" }],
+                // payService: [{ required: true, message: "收费项目不能为空", trigger: "blur" }],
+                invoiceType: [{ required: true, message: "开票类型不能为空", trigger: "blur" }],
+                personName: [{ required: true, message: "推送用户不能为空", trigger: "blur" }],
+                beginEndTime:[{ required: true, message: "起止时间不能为空", trigger: "blur" }],
+                numStr3:[{ required: true, message: "数量不能为空", trigger: "blur" }],                
+                goodsId:[{ required: true, message: "收费项目未选择", trigger: "blur" }]
             },
             formModel: {
                 name:"",
                 payee:"",
                 companyId:"",
-                payService:"",
+                // payService:"",
                 collectionAccountId:"",
+                collectionAccountName:"",
                 bak:"",
                 billPushGoodsList:[],
                 removeBillPushGoodsList:[],
-                
+                personId:0,
+                personName:"",
+                checkinInfoId:"",
+                isOpenWechat:false,
+                isOpenAlipay:false,
             },
-            beginEndTime:"",
+            beginEndTime: null,
             personList:[],
             goodsList:[],
             collectionAccountList:[],
             payServiceList:[],
             tableData:[],
             companyList:[],
+            invoiceTypeList:[],
             showDialog: true,
             loading: false,
             submitting: false,
+            props: {
+                // 配置项(必选)
+                value: "id",
+                label: "name",
+                children: "children"
+            },
         }
     },
     created() {
-        companyInfoApi.list().then((response)=>{
+        companyPaymentApi.getCompanyList().then((response)=>{
             var jsonData = response.data;
             this.companyList = jsonData.data;
         });
@@ -197,79 +265,103 @@ export default {
             var jsonData = response.data;
             this.collectionAccountList = jsonData.data;
         });
+
+        billPushApi.invoiceTypeList().then((response)=>{
+            var jsonData = response.data;
+            this.invoiceTypeList = jsonData.data;
+        });
     },
     methods: {
         closeDialog() {
-        this.$emit("close", false);
+            this.$emit("close", false);
         },
-        handChange(selVal){
+        handleCompanyChange(newVal){
+            // this.formModel.personName = newVal;
 
-            this.formModel.payService = "";
+            var self = this;
 
             var formData = new FormData();
-            formData.append("companyId", selVal);
+            formData.append("checkinInfoId", newVal);
 
             companyGoodsInfoApi.findByCompanyId(formData).then((response)=>{
                 var jsonData = response.data;
                 this.goodsList = jsonData.data;
             });
 
-            personInfoApi.findByCompanyId(formData).then((response)=>{
+            companyPaymentApi.findByCheckInId(formData).then((response)=>{
                 var jsonData = response.data;
-                this.personList = jsonData.data;
+                this.formModel.personId = jsonData.data.id;
+                this.formModel.checkinInfoId = jsonData.data.checkinInfoId;
+                
+                self.$set(self.formModel, 'personName', jsonData.data.name);
             });
-
         },
         handleSubmit() {
             var self = this;
 
-            var billPushGoodsList = this.formModel.billPushGoodsList;
+            this.$refs["form"].validate(valid => {
+                if (valid) {
+                    //增加转型,避免直接修改formModel
+                    var requestData = JSON.parse(JSON.stringify(self.formModel));
 
-            for(var i=0;i<billPushGoodsList.length;i++){
-                billPushGoodsList[i].sortNo = i+1;
-                billPushGoodsList[i].beginDate = billPushGoodsList[i].beginEndTime[0];
-                billPushGoodsList[i].endDate = billPushGoodsList[i].beginEndTime[1]
-                billPushGoodsList[i].beginEndTime="";
-            }
+                    var billPushGoodsList = requestData.billPushGoodsList;
 
-            var removeBillPushGoodsList = this.formModel.removeBillPushGoodsList;
+                    if(billPushGoodsList.length==0) {
+                        this.$message.warning("收费项目不能为空!");
+                        return;
+                    }
 
-            for(var j=0;j<removeBillPushGoodsList.length;j++){
-                removeBillPushGoodsList[j].sortNo = j+1;
-                removeBillPushGoodsList[j].beginDate = removeBillPushGoodsList[j].beginEndTime[0];
-                removeBillPushGoodsList[j].endDate = removeBillPushGoodsList[j].beginEndTime[1]
-                removeBillPushGoodsList[j].beginEndTime="";
-            }
+                    for(var i=0;i<billPushGoodsList.length;i++){
+                        billPushGoodsList[i].sortNo = i+1;
 
-            this.$refs["form"].validate(valid => {
-                if (valid) {
-                (function() {
-                    var id = self.formModel.id;
-                    
-
-                    if (id == null || id.length == 0) {
-                    return billPushApi.add(self.formModel);
-                    } else {
-                    return billPushApi.update(self.formModel);
+                        if(billPushGoodsList[i].beginEndTime!=null){
+                            billPushGoodsList[i].beginDate = billPushGoodsList[i].beginEndTime[0];
+                            billPushGoodsList[i].endDate = billPushGoodsList[i].beginEndTime[1]
+                            billPushGoodsList[i].beginEndTime=null;
+                        }
+                        
+                        billPushGoodsList[i].standard = billPushGoodsList[i].unitPrice + billPushGoodsList[i].unit;
                     }
-                })().then(function(response) {
-                    var jsonData = response.data;
 
-                    if (jsonData.result) {
-                    self.$message({
-                        message: "保存成功!",
-                        type: "success"
-                    });
+                    var removeBillPushGoodsList = requestData.removeBillPushGoodsList;
 
-                    self.$emit("close", true);
-                    } else {
-                    self.$message({
-                        message: jsonData.message + "",
-                        type: "warning"
-                    });
-                    self.$emit("close", false);
+                    for(var j=0;j<removeBillPushGoodsList.length;j++){
+                        removeBillPushGoodsList[j].sortNo = j+1;
+
+                        if(removeBillPushGoodsList[j].beginEndTime!=null){
+                            removeBillPushGoodsList[j].beginDate = removeBillPushGoodsList[j].beginEndTime[0];
+                            removeBillPushGoodsList[j].endDate = removeBillPushGoodsList[j].beginEndTime[1];
+                            removeBillPushGoodsList[j].beginEndTime=null;
+                        }
                     }
-                });
+
+                    (function() {
+                        var id = requestData.id;
+                        
+                        if (id == null || id.length == 0) {
+                        return billPushApi.add(requestData);
+                        } else {
+                        return billPushApi.update(requestData);
+                        }
+                    })().then(function(response) {
+                        var jsonData = response.data;
+
+                        if (jsonData.result) {
+                            self.$message({
+                                message: "保存成功!",
+                                type: "success"
+                            });
+
+                            self.$emit("close", true);
+                        } else {
+                            self.$message({
+                                message: jsonData.message + "",
+                                type: "warning"
+                            });
+
+                            self.$emit("close", false);
+                        }
+                    });
                 }
             });
         },
@@ -277,9 +369,13 @@ export default {
             this.formModel.billPushGoodsList.push({
                 sortNo: this.formModel.billPushGoodsList.length + 1,
                 goodsId: "",
-                beginEndTime: "",
+                beginEndTime: null,
                 numStr: "",
+                numStr2: "",
+                numStr3: "",
                 totalFee: "",
+                standard: "",
+                unit: ""
             });
         },
         handleInsert(row) {
@@ -289,10 +385,14 @@ export default {
             if(index>=0){
                 billPushGoodsList.splice(index+1,0,{
                     sortNo: index + 2,
-                    name: "",
-                    beginEndTime: "",
+                    goodsId: "",
+                    beginEndTime: null,
                     numStr: "",
+                    numStr2: "",
+                    numStr3: "",
                     totalFee: "",
+                    standard: "",
+                    unit: ""
                 });
             }
         },
@@ -306,28 +406,102 @@ export default {
         getSummaries(param) {
             const { columns, data } = param;
             const sums = [];
+
             columns.forEach((column, index) => {
                 if (index === 0) {
                     sums[index] = '合计';
                     return;
                 }
+                
                 const values = data.map(item => Number(item[column.property]));
+
                 if (!values.every(value => isNaN(value))) {
                     sums[5] = values.reduce((prev, curr) => {
-                    const value = Number(curr);
-                    if (!isNaN(value)) {
-                        return prev + curr;
-                    } else {
-                        return prev;
-                    }
+                        const value = Number(curr);
+                        if (!isNaN(value)) {
+                            return prev + curr;
+                        } else {
+                            return prev;
+                        }
                     }, 0);
-                    sums[5] ;
+
+                    sums[5] = this.fmtMoney(sums[5]);
                 } else {
                     sums[index] = '';
                 }
             });
 
             return sums;
+        },
+        fmtMoney(value){
+            const num = Number(value);
+            
+            if (!isNaN(num)) {
+                return num.toFixed(2);
+            }
+            else{
+                return num;
+            }
+        },
+        handGoodsChange(scope){
+            var row = scope.row;
+            
+            // setTimeout(()=>{                
+            var formData = new FormData();
+            formData.append("id", row.goodsId);
+            formData.append("companyId", this.formModel.companyId);
+
+            companyPaymentApi.loadDetails(formData).then((response)=>{
+                var jsonData = response.data;
+
+                if(jsonData.result){
+                    var data = jsonData.data;
+
+                    // row.standard = data.unitPriceStr;
+                    // row.unit = data.unitPrice;
+                    // row.goodTypeId = data.goodType;
+                    this.$set(row,"standard",data.unitPriceStr);
+                    this.$set(row,"unit",data.unit);
+                    this.$set(row,"unitPrice",data.unitPrice);
+                    this.$set(row,"goodTypeId",data.goodType);
+
+                    //如果是电费会返回起码
+                    this.$set(row,"numStr", data.numStr);
+                }
+            });
+            // },100);
+        },
+        handNumChange(scope){
+            var row = scope.row;
+
+            var num = row.numStr3;
+            var unitPrice = row.unitPrice;
+            var totalFee = num*1*unitPrice*1;
+
+            if(totalFee!=null){
+                this.formModel.billPushGoodsList[scope.$index].totalFee = totalFee.toFixed(2);
+            }
+        },
+        handStartChange(scope){
+            var row = scope.row;
+
+            var num1=row.numStr;
+            var num2=row.numStr2;
+            var unitPrice = row.unitPrice;
+
+            setTimeout(()=>{         
+                if(num1!=null&&num2!=null){
+                    var num3 = num2-num1;
+
+                    this.formModel.billPushGoodsList[scope.$index].numStr3 = num3;
+
+                    var totalFee = num3*1*unitPrice*1;
+
+                    if(totalFee!=null){
+                        this.formModel.billPushGoodsList[scope.$index].totalFee = totalFee.toFixed(2);
+                    }
+                }
+            },100);
         }
     },
     mounted: function() {
@@ -357,8 +531,8 @@ export default {
                     billPushGoodsList[i].beginEndTime = beginEndTime;
                 }
 
-                if(jsonData.data.companyId!=null&&jsonData.data!=""){
-                    this.handChange(jsonData.data.companyId);
+                if(jsonData.data.checkinInfoId!=null&&jsonData.data!=""){
+                    this.handleCompanyChange(jsonData.data.checkinInfoId);
                 }
             } else {
                 self.$message.error(jsonData.message + "");
@@ -370,16 +544,28 @@ export default {
     }
 }
 </script>
-<style>
+<style rel="stylesheet/scss" lang="scss" scoped>
 .input-form-main{
-    width: 500px;
+    width: 300px;
 }
 .link-span{
     margin-right: 20px;
 }
+.el-form-item{
+    margin-bottom: 25px;
+}
 .my-font {
   font-size: 20px;
   cursor: pointer;
   margin-right: 10px;
 }
+.user-panel {
+  margin: 10px auto;
+}
+
+.compact-table{
+    .el-form-item {
+        margin-bottom: 5px;
+    }
+}
 </style>

+ 240 - 49
src/views/business/billPush-list.vue

@@ -3,23 +3,34 @@
         <el-breadcrumb separator=">">
             <el-breadcrumb-item :to="{ path: '/' }">首页</el-breadcrumb-item>
             <el-breadcrumb-item>
-                <a href="#">系统管理</a>
+                <a href="#">园区管理</a>
             </el-breadcrumb-item>
             <el-breadcrumb-item>
                 <a href="#">账单推送管理</a>
             </el-breadcrumb-item>
             </el-breadcrumb>
-        <el-divider></el-divider>
+        <el-divider></el-divider>        
+        <div v-show="queryFormVisible">
         <el-form ref="queryForm" :model="queryModel" inline class="demo-form-inline">
+            <el-form-item label="账单名称" prop="name">
+                <el-input type="text" size="mini" v-model="queryModel.name"></el-input>
+            </el-form-item>
             <el-form-item label="缴费单位" prop="companyId">
-                <el-select v-model="queryModel.companyId"  size="mini" filterable focus="" >
+                <!-- <el-select v-model="queryModel.companyId"  size="mini" filterable focus="" >
                     <el-option
                         v-for="company in companyList"
                         :key="company.id"
                         :label="company.name"
                         :value="company.id"
                     ></el-option>
-                </el-select>
+                </el-select> -->
+                <el-select-tree
+                    size="mini"
+                    :props="props"
+                    :options="treeData"
+                    v-model="queryModel.companyId"
+                    height="200"
+                ></el-select-tree>
             </el-form-item>
             <el-form-item label="推送状态" prop="status">
                 <el-select v-model="queryModel.status"  size="mini"  >
@@ -51,6 +62,12 @@
                     ></el-option>
                 </el-select>
             </el-form-item>
+            <el-form-item label="是否开票" prop="invoiced">
+                <el-select v-model="queryModel.invoiced"  size="mini" clearable>
+                    <el-option label="是" :value="true"></el-option>
+                    <el-option label="否" :value="false"></el-option>
+                </el-select>
+            </el-form-item>
             <el-form-item label="收款账户" prop="collectionAccount">
                 <el-select v-model="queryModel.collectionAccount"  size="mini"  >
                     <el-option
@@ -114,8 +131,16 @@
                 >重置</el-button>&nbsp;
             </el-form-item>
         </el-form>
+        </div>
         <el-divider></el-divider>
         <el-row class="button-group">
+            <el-button
+                type="primary"
+                size="small"
+                plain
+                icon="el-icon-upload2"
+                @click="toggleQueryForm()"
+            >{{queryFormVisible ? '隐藏' : '显示'}}查询面板</el-button>
             <el-button
                 type="primary"
                 size="small"
@@ -125,10 +150,14 @@
                 >创建账单</el-button
             >
         </el-row>
-        <el-table :data="tableData" style="min-height:400px;" v-loading="loading" stripe>
-            <el-table-column type="index" label="序号" width="50"></el-table-column>
-            <el-table-column prop="name" label="账单名称" width="180"></el-table-column>
-            <el-table-column prop="companyName" label="缴费单位" width="180"></el-table-column>
+        <el-table 
+        ref="formTable"
+        :data="tableData" 
+        :height="tableHeight"
+        v-loading="loading" stripe>
+            <el-table-column type="index" label="序号" :index="indexMethod" width="50" fixed="left"></el-table-column>
+            <el-table-column prop="companyName" label="缴费单位" width="120" fixed="left"></el-table-column>
+            <el-table-column prop="name" label="账单名称" width="120"></el-table-column>
             <el-table-column prop="personName" label="推送用户" width="150">
                 <template slot-scope="{row}">
                     <div>{{row.personName}}</div>
@@ -139,9 +168,13 @@
             <el-table-column prop="totalFee" label="订单总额" ></el-table-column>
             <el-table-column prop="status" label="账单状态">
                 <template slot-scope="{row}">
-                    <span v-if="row.status=='1'" style="color:#67C23A">已推送</span>
+                    <span v-if="row.status=='1'" style="color:#67C23A">
+                        <span v-if="row.payStatus=='20'" style="color:#67C23A">已完成</span>
+                        <span v-else style="color:#67C23A">已推送</span>
+                    </span>
                     <span v-else-if="row.status=='2'" style="color:#E6A23C">推送失败</span>
-                    <span v-else-if="row.status=='3'" style="color:#909399">已关闭</span>
+                    <span v-else-if="row.status=='3'" style="color:#909399">已作废</span>
+                    
                     <span v-else style="color:#F56C6C">未推送</span>
                 </template>
             </el-table-column>
@@ -157,18 +190,50 @@
             </el-table-column>
             <el-table-column prop="payTime" label="缴费时间" width="180"></el-table-column>
             <el-table-column prop="payName" label="支付方式" ></el-table-column>
+            <el-table-column prop="invoiced"  label="是否开票">
+                <template slot-scope="{row}">
+                    <el-switch 
+                        v-model="row.invoiced"
+                        active-color="#13ce66"
+                        inactive-color="#ff4949"
+                        @change="handleSwitchChange(row,'2')">
+                    </el-switch>
+                </template>
+            </el-table-column>
             <el-table-column prop="payee" label="收款方" ></el-table-column>
+            <el-table-column prop="isOpenWechat"  label="微信支付">
+                <template slot-scope="{row}">
+                    <el-switch v-if="row.isMobilePayment"
+                        v-model="row.isOpenWechat"
+                        active-color="#13ce66"
+                        inactive-color="#ff4949"
+                        @change="handleSwitchChange(row,'0')">
+                    </el-switch>
+                </template>
+            </el-table-column>
+            <el-table-column prop="isOpenAlipay"  label="支付宝">
+                <template slot-scope="{row}">
+                    <el-switch v-if="row.isMobilePayment"
+                        v-model="row.isOpenAlipay"
+                        active-color="#13ce66"
+                        inactive-color="#ff4949"
+                        @change="handleSwitchChange(row,'1')">
+                    </el-switch>
+                </template>
+            </el-table-column>
             <el-table-column label="操作" width="180" fixed="right">
                 <template slot-scope="{row}">
-
-                    <span class="link-span"><el-link  type="primary" @click="handleDetailList(row)">查看详情</el-link></span>
-                    <el-link  type="primary" @click="handlePush(row)">推送账单</el-link>
-
                     <div>
-                        <span class="link-span"><el-link  type="warning" @click="handleClose(row)">关闭账单</el-link></span>
+                        <span class="link-span"><el-link  type="primary" @click="handleDetailList(row)">查看详情</el-link></span>
+                        <el-link v-if="row.payStatus=='10'"  type="primary" @click="handlePush(row)">推送账单</el-link>
+                    </div>
+                    <div v-if="row.status=='0'">
+                        <span class="link-span"><el-link  type="warning" @click="handleClose(row)">作废账单</el-link></span>
                         <el-link  type="danger" @click="handleDelete(row)">删除账单</el-link>
                     </div>
-                    
+                    <div v-if="row.payStatus=='10'">
+                        <span class="link-span"><el-link  type="primary" @click="handlePayTime(row)">确认收款</el-link></span>
+                    </div>
                 </template>
             </el-table-column>
         </el-table>
@@ -194,6 +259,12 @@
             :title="modalTitle2"
             @close="onDetailModalClose2"
         ></billPush-detail-list>
+        <billPush-order-payTime
+            v-if="showModal3"
+            :businessKey="businessKey"
+            :title="modalTitle3"
+            @close="onDetailModalClose3"
+        ></billPush-order-payTime>
     </div>
 </template>
 <script>
@@ -203,6 +274,12 @@ import companyInfoApi from "@/api/base/companyInfo";
 import companyPaymentApi from "@/api/base/companyPayment";
 import billPushDetail from "./billPush-detail";
 import billPushDetailList from "./billPush-detail-list";
+import billPushOrderPayTime from "./billPush-order-payTime";
+import pageUtil from "@/utils/page";
+import SelectTree from "@/components/SelectTree";
+import NProgress from "nprogress"; // progress bar
+import "nprogress/nprogress.css"; // progress bar style
+
 export default {
     name: "businessBillPushList",
     data() {
@@ -210,6 +287,7 @@ export default {
 
         return {
             queryModel: {
+                name:"",
                 companyId:"",
                 status: "",
                 payName:"",
@@ -217,7 +295,9 @@ export default {
                 pushTimeRange: "",
                 payTimeRange:"",
                 payStatus:"",
+                invoiced: null
             },
+            treeData: [],
             loading: false,
             statusList:[
                 {
@@ -234,7 +314,11 @@ export default {
                 },
                 {      
                     id:"3",
-                    name:"已关闭",
+                    name:"已作废",
+                },
+                {      
+                    id:"4",
+                    name:"已完成",
                 }
             ],
             tableData: [],
@@ -284,21 +368,45 @@ export default {
             multipleSelection: [],
             showModal: false,
             showModal2: false,
+            showModal3:false,
+            props: {
+                // 配置项(必选)
+                value: "id",
+                label: "name",
+                children: "children"
+            },
+            tableHeight: 400,
+            queryFormVisible: true
         }
     },
-    created() {
-        companyInfoApi.list().then((response)=>{
-            var jsonData = response.data;
-            this.companyList = jsonData.data;
-        });
+    created() {        
+        this.loadTree();
+
+        // companyInfoApi.list().then((response)=>{
+        //     var jsonData = response.data;
+        //     this.companyList = jsonData.data;
+        // });
 
         companyPaymentApi.list().then((response)=>{
             var jsonData = response.data;
             this.collectionAccountList = jsonData.data;
         });
 
+        setTimeout(()=>{
+            this.tableHeight = pageUtil.autoAdjustHeight(this.$refs.formTable.$el);
+        },1000);
     },
     methods: {
+        indexMethod(index) {
+            return (this.pageIndex - 1) * this.pageSize + (index + 1);
+        },
+        toggleQueryForm(){
+            this.queryFormVisible = !this.queryFormVisible;
+
+            this.$nextTick(()=>{
+                this.tableHeight = pageUtil.autoAdjustHeight(this.$refs.formTable.$el);
+            });
+        },
         changePage(pageIndex) {
             var self = this;
 
@@ -310,7 +418,11 @@ export default {
             formData.append("pageIndex", self.pageIndex);
             formData.append("pageSize", self.pageSize);
 
-            formData.append("companyId", self.queryModel.companyId);
+            if(self.queryModel.companyId!=null){
+                formData.append("companyId", self.queryModel.companyId);
+            }
+
+            formData.append("name", self.queryModel.name);
             formData.append("status", self.queryModel.status);
             formData.append("payName", self.queryModel.payName);
 
@@ -319,6 +431,9 @@ export default {
             formData.append("payTimeRange", self.queryModel.payTimeRange);
             formData.append("payStatus", self.queryModel.payStatus);
 
+            if(self.queryModel.invoiced!=null){
+                formData.append("invoiced", self.queryModel.invoiced);
+            }
 
             billPushApi.pageList(formData)
                 .then(function(response) {
@@ -352,37 +467,61 @@ export default {
 
             this.showModal = true;
         },
+        loadTree() {
+            companyInfoApi.list().then(resp => {
+                var jsonData = resp.data;
+
+                if (jsonData.result) {
+                this.treeData = jsonData.data;
+                } else {
+                this.$message.error(jsonData.message + "");
+                }
+            });
+        },
         onDetailModalClose(retObj) {
             //保存成功后回调
             this.showModal = false;
 
-            this.changePage(this.pageIndex);
-
-            
+            if(retObj){
+                this.changePage(this.pageIndex);
+            }         
         },
         onDetailModalClose2(retObj) {
             //保存成功后回调
             this.showModal2 = false;
 
-            this.changePage(this.pageIndex);
+            if(retObj){
+                this.changePage(this.pageIndex);
+            }            
+        },
+        onDetailModalClose3(retObj) {
+            //保存成功后回调
+            this.showModal3 = false;
+
+            if (retObj.result) {
+                var retData = retObj.data;
+
+                this.changePage(this.pageIndex);
+
+            }
 
             
         },
         handleReset(name) {
             this.$refs[name].resetFields();
         },
-        handChange(selVal){
+        // handleChange(selVal){
 
-            this.queryModel.payService = "";
+        //     this.queryModel.payService = "";
 
-            var formData = new FormData();
-            formData.append("companyId", selVal);
+        //     var formData = new FormData();
+        //     formData.append("companyId", selVal);
 
-            billPushApi.payServiceList(formData).then((response)=>{
-                var jsonData = response.data;
-                this.payServiceList = jsonData.data;
-            });
-        },
+        //     billPushApi.payServiceList(formData).then((response)=>{
+        //         var jsonData = response.data;
+        //         this.payServiceList = jsonData.data;
+        //     });
+        // },
         handleDetailList(record){
             this.modalTitle2 = "账单推送详情";
             this.operation = "detail";
@@ -392,26 +531,36 @@ export default {
         },
         handlePush(record){
             var id = record.id;
+
+            this.$confirm("是否确认推送账单?", "提示", {
+            confirmButtonText: "确定",
+            cancelButtonText: "取消",
+            type: "warning"
+            })
+            .then(() => {
             
-            var formData = new FormData();
-            formData.append("id", id);
+                var formData = new FormData();
+                formData.append("id", id);
 
-            billPushApi.pushBill(formData).then((response)=>{
-                var jsonData = response.data;
+                billPushApi.pushBill(formData).then((response)=>{
+                    var jsonData = response.data;
 
-                if (jsonData.result) {
-                    this.changePage(this.pageIndex);
-                    this.$message.success("账单消息推送成功!");
-                } else {
-                    this.$message.error(jsonData.message + "");
-                }
+                    //alert(jsonData.result)
 
+                    if (jsonData.result) {
+                        this.changePage(this.pageIndex);
+                        this.$message.success("账单消息推送成功!");
+                    } else {
+                        this.$message.error(jsonData.message + "");
+                    }
+
+                });
             });
         },
         handleDelete(record) {
             var self = this;
 
-            self.$confirm("是否确认删除?", "提示", {
+            self.$confirm("是否确认作废账单?", "提示", {
                 confirmButtonText: "确定",
                 cancelButtonText: "取消",
                 type: "warning"
@@ -425,7 +574,7 @@ export default {
 
                     self.$message({
                         type: "success",
-                        message: "删除成功!"
+                        message: "账单作废成功!"
                     });
                     }
                 });
@@ -474,13 +623,55 @@ export default {
 
             return rs;
         }, 
+        handlePayTime(record){
+            var self = this;
+
+            this.modalTitle3 = "账单推送详情";
+            this.operation = "detail";
+            this.businessKey = record.id;
+            this.showModal3 = true;
+        },
+        handleSwitchChange(record,type){
+            var self = this;
+
+            var formData = new FormData();
+            self.loading = true;
+
+            formData.append("id", record.id);
+
+            if(type=="0"){
+                formData.append("isOpen", record.isOpenWechat);
+            }
+            else if(type=="1"){
+                formData.append("isOpen", record.isOpenAlipay);
+            }
+            else if(type=="2"){
+                formData.append("isOpen", record.invoiced);
+            }
+
+            formData.append("type", type);
+
+            billPushApi.updateIsOpenWechatOrAlipay(formData).then(function (response) {
+                var jsonData = response.data;
+                self.loading = false;
+                if (jsonData.result) {
+                    //self.changePage(self.pageIndex);
+                }
+                else{
+                    self.$message.error(jsonData.message + "");
+                }
+            });
+
+        }
     },
     mounted: function() {
         this.changePage(1);
     },
     components: {
         "billPush-detail": billPushDetail,
-        "billPush-detail-list":billPushDetailList
+        "billPush-detail-list":billPushDetailList,
+        "billPush-order-payTime":billPushOrderPayTime,
+        "el-select-tree": SelectTree
     }
 }
 </script>

+ 9 - 5
src/views/business/billPush-order-payTime.vue

@@ -63,6 +63,10 @@ export default {
                 {
                     id:"cash",
                     name:"现金支付"
+                },
+                {
+                    id:"individual",
+                    name:"个人账户"
                 }
             ],
         }
@@ -108,11 +112,11 @@ export default {
         var self = this;
 
         (function() {
-        if (self.businessKey.length == 0) {
-            return billPushApi.createPayTime(self.businessKey);
-        } else {
-            return billPushApi.editPayTime(self.businessKey);
-        }
+            if (self.businessKey.length == 0) {
+                return billPushApi.createPayTime(self.businessKey);
+            } else {
+                return billPushApi.editPayTime(self.businessKey);
+            }
         })()
         .then(response => {
             var jsonData = response.data;

+ 115 - 0
src/views/business/billPush-qrcode-pay.vue

@@ -0,0 +1,115 @@
+<template>
+    <el-dialog
+    title="付款码"
+    :visible.sync="showDialog"
+    :modal-append-to-body="true"
+    style="text-align: center;"
+    width="43%"
+    @close="closeDialog"
+    append-to-body
+    :close-on-click-modal="false"
+    >
+
+    <el-row :gutter="20">
+        <el-col :span="12" style="text-align:center;">
+            <el-image class="qrcode"  
+            src="http://rccs.oss-cn-hangzhou.aliyuncs.com/jp_housekeeper/img/%E5%BE%AE%E4%BF%A1%E6%94%AF%E4%BB%98.png"
+            fit="contain"
+            ></el-image>
+            <div class="grid-content bg-purple" id="wxQuCode" ref="wxQuCode"></div>
+        </el-col>
+        <el-col :span="12" style="text-align:center;">
+            <el-image  class="qrcode" 
+            src="http://rccs.oss-cn-hangzhou.aliyuncs.com/jp_housekeeper/img/%E6%94%AF%E4%BB%98%E5%AE%9D%E6%94%AF%E4%BB%98.png"
+            fit="contain"
+            ></el-image>
+            <div class="grid-content bg-purple" id="alipayQuCode" ref="alipayQuCode"></div>
+        </el-col>
+    </el-row>
+    </el-dialog>
+</template>
+<script>
+import Constant from "@/constant";
+import billPushApi from "@/api/business/billPush";
+import QRCode from 'qrcodejs2';
+export default {
+    props: ["businessKey", "title","orderId"],
+    data(){
+        return{
+            loading:false,
+            showDialog:true,
+            submitting: false,
+        }
+    },
+    methods:{
+        closeDialog() {
+            this.$emit("close", false);
+        },
+    },
+    mounted: function() {
+        var self = this;
+
+        billPushApi.wxQucode(self.orderId).then((response)=>{
+            var jsonData = response.data;
+
+            if(jsonData.result){
+                var qucode = jsonData.data;
+
+                new QRCode(this.$refs.wxQuCode, {
+                    text: qucode,
+                    width: 200,
+                    height: 200,
+                    colorDark: "#333333", //二维码颜色
+                    colorLight: "#ffffff", //二维码背景色
+                    correctLevel: QRCode.CorrectLevel.L//容错率,L/M/H
+                })
+            }
+            else{
+                self.$message.error(jsonData.message + "");
+            }
+        });
+
+        billPushApi.alipayCode(self.orderId).then((response)=>{
+            var jsonData = response.data;
+
+            if(jsonData.result){
+                var qucode = jsonData.data;
+                new QRCode(this.$refs.alipayQuCode, {
+                    text: qucode,
+                    width: 200,
+                    height: 200,
+                    colorDark: "#333333", //二维码颜色
+                    colorLight: "#ffffff", //二维码背景色
+                    correctLevel: QRCode.CorrectLevel.L//容错率,L/M/H
+                })
+            }
+            else{
+                self.$message.error(jsonData.message + "");
+            }
+        });
+    }
+}
+</script>
+<style scoped>
+  .el-row {
+    margin-bottom: 20px;
+  }
+  .el-col {
+    border-radius: 4px;
+  }
+  .grid-content {
+    border-radius: 4px;
+    min-height: 36px;
+    width: 200px;
+    height:200px;
+    margin:5px auto;
+  }
+  .row-bg {
+    padding: 10px 0;
+  }
+
+  .qrcode{
+      width: 160px;
+      height: 120px;
+  }
+</style>

+ 2 - 1
src/views/business/clockOut-list.vue

@@ -73,6 +73,7 @@
       <el-table-column prop="content" label="内容" width="180" show-overflow-tooltip></el-table-column>
       <el-table-column prop="approvalPersonName" label="审批人" width="120"></el-table-column>
       <el-table-column prop="statusN" label="审批状态" width="80"></el-table-column>
+      <el-table-column prop="remark" label="备注" width="120"></el-table-column>
       <el-table-column prop="createTime" label="创建时间"></el-table-column>
       <el-table-column fixed="right" width="150" label="操作">
         <template slot-scope="{row}">
@@ -255,7 +256,7 @@ export default {
     },
     sortChange(data) {
       this.field = data.column.field;
-      this.direction = data.order;
+      this.direction = data.order == "ascending" ? "asc" : "desc";
 
       this.changePage(this.pageIndex);
     },

+ 1 - 1
src/views/business/fillAttendance-list.vue

@@ -252,7 +252,7 @@ export default {
     },
     sortChange(data) {
       this.field = data.column.field;
-      this.direction = data.order;
+      this.direction = data.order == "ascending" ? "asc" : "desc";
 
       this.changePage(this.pageIndex);
     },

+ 4 - 0
src/views/business/requestForLeave-list.vue

@@ -285,6 +285,10 @@ export default {
 
           if(jsonData.result) {
             if(exportFlag){
+              if(document.location.href.startsWith("https://")){
+                  jsonData.data = jsonData.data.replace("http://","https://");
+              }
+              
               //导出
               self.$message({
                 showClose: true,

+ 8 - 0
src/views/business/workAttendance-list.vue

@@ -439,6 +439,10 @@ export default {
         fontColor = "#11A8CD";
       }
 
+      if(item.workOutRemark!=null){
+        content.push("(" + item.workOutRemark + ")");
+      }
+
       return `<font color='${fontColor}'>` + content.join("") + "</font>";
     },
     handleQuery() {
@@ -495,6 +499,10 @@ export default {
             self.downloadLoading = false;
 
             if (jsonData.result) {
+              if(document.location.href.startsWith("https://")){
+                  jsonData.data = jsonData.data.replace("http://","https://");
+              }
+
               self.$message({
                 type: "success",
                 message: `报表已生成,<a href="${jsonData.data}">请点击链接下载</a>`,

+ 4 - 0
src/views/old/oldPersonInfo-list.vue

@@ -1197,6 +1197,10 @@ export default {
         var jsonData = response.data;
         if (jsonData.result) {
           if (jsonData.data != null) {
+            if(document.location.href.startsWith("https://")){
+                jsonData.data = jsonData.data.replace("http://","https://");
+            }
+
             self.$message({
               showClose: true,
               type: "success",

+ 1 - 1
src/views/sys/dataDictionary-list.vue

@@ -238,7 +238,7 @@ export default {
     },
     sortChange(data) {
       this.field = data.column.field;
-      this.direction = data.order;
+      this.direction = data.order == "ascending" ? "asc" : "desc";
 
       this.changePage(this.pageIndex);
     },

+ 1 - 1
src/views/sys/menu-list.vue

@@ -233,7 +233,7 @@ export default {
     },
     sortChange(data) {
       this.field = data.column.field;
-      this.direction = data.order;
+      this.direction = data.order == "ascending" ? "asc" : "desc";
 
       this.changePage(this.pageIndex);
     },

+ 1 - 1
src/views/sys/permission-list.vue

@@ -194,7 +194,7 @@ export default {
     },
     sortChange(data) {
       this.field = data.column.field;
-      this.direction = data.order;
+      this.direction = data.order == "ascending" ? "asc" : "desc";
 
       this.changePage(this.pageIndex);
     },

+ 1 - 1
src/views/sys/role-list.vue

@@ -211,7 +211,7 @@ export default {
     },
     sortChange(data) {
       this.field = data.column.field;
-      this.direction = data.order;
+      this.direction = data.order == "ascending" ? "asc" : "desc";
 
       this.changePage(this.pageIndex);
     },

+ 12 - 2
src/views/sys/user-detail.vue

@@ -29,14 +29,20 @@
           ></el-input>
         </el-form-item>
         <el-form-item label="所属单位" prop="companyId">
-          <el-select v-model="formModel.companyId" filterable placeholder="请选择" style="width:300px">
+          <!-- <el-select v-model="formModel.companyId" filterable placeholder="请选择" style="width:300px">
             <el-option
               v-for="company in companyResult"
               :key="company.id"
               :label="company.name"
               :value="company.id"
             ></el-option>
-          </el-select>
+          </el-select> -->
+          <el-select-tree
+          size="mediumn"
+          :options="companyResult"
+          v-model="formModel.companyId"
+          width="300px"
+        ></el-select-tree>
         </el-form-item>
         <el-form-item label="分配角色" prop="roles">
           <el-select
@@ -68,6 +74,7 @@
 import Constant from "@/constant";
 import userApi from "@/api/sys/user";
 import roleApi from "@/api/sys/role";
+import SelectTree from "@/components/SelectTree";
 
 export default {
   props: ["businessKey", "title", "companyResult"],
@@ -172,6 +179,9 @@ export default {
         self.$message.error(error + "");
         self.loading = false;
       });
+  },
+  components: {
+    "el-select-tree": SelectTree
   }
 };
 </script>

+ 1 - 1
src/views/sys/user-list.vue

@@ -280,7 +280,7 @@ export default {
     },
     sortChange(data) {
       this.field = data.column.field;
-      this.direction = data.order;
+      this.direction = data.order == "ascending" ? "asc" : "desc";
 
       this.changePage(this.pageIndex);
     },