Kaynağa Gözat

账单推送功能修改

yanliming 5 yıl önce
ebeveyn
işleme
cf5b0a76da

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

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

+ 9 - 0
src/api/base/companyPayment.js

@@ -66,10 +66,19 @@ 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,updateIsOpenWechatOrAlipay,loadDetails,getCompanyList,findByCheckInId,setIsDefault
+    ,findPersonByCompanyId,findUserByCompanyId
 }

+ 13 - 1
src/api/business/billPush.js

@@ -86,11 +86,23 @@ 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);
+}
+
 
 
 
 
 export default {
     pageList,create,edit,add,update,remove,batchRemove,payServiceList,createGoods,detail,goodsPageList,pushBill,closeBill,updateOrder,createPayTime,editPayTime
-    ,updateIsOpenWechatOrAlipay
+    ,updateIsOpenWechatOrAlipay,checkInBillpageList,wxQucode,alipayCode
   }

+ 13 - 0
src/routers/modules/business.js

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

+ 32 - 0
src/views/base/companyInfo-list.vue

@@ -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>
@@ -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: {

+ 19 - 2
src/views/base/companyPayment-detail.vue

@@ -88,7 +88,7 @@
                     style="width: 400px"
                 ></el-input>
             </el-form-item>
-            <el-form-item label="财务人员" prop="financePersonId">
+            <el-form-item label="财务人员手机账户" prop="financePersonId">
                 <el-select v-model="formModel.financePersonId" filterable style="width: 400px">
                     <el-option
                         v-for="result in personList"
@@ -98,6 +98,16 @@
                     ></el-option>
                 </el-select>
             </el-form-item>
+            <el-form-item label="财务人员后台账户" prop="financeUserId">
+                <el-select v-model="formModel.financeUserId" filterable style="width: 400px">
+                    <el-option
+                        v-for="result in userList"
+                        :key="result.id"
+                        :label="result.realName"
+                        :value="result.id"
+                    ></el-option>
+                </el-select>
+            </el-form-item>
 
         </el-form>
       </div>
@@ -136,9 +146,11 @@ export default {
                 subMchId:"",
                 appAuthToken:"",
                 financePersonId:"",
+                financeUserId:"",
             },
             treeData: [],
             personList:[],
+            userList:[],
             companyList:[],
             showDialog: true,
             loading: false,
@@ -154,10 +166,15 @@ export default {
     created() {
         this.loadTree();
 
-        personInfoApi.findByCompanyCode().then(response => {
+        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() {

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

@@ -0,0 +1,431 @@
+<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){
+                        //导出
+                        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;
+        },
+    },
+    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>

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

@@ -0,0 +1,569 @@
+<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="序号" 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: {
+        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>

+ 38 - 5
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" >
@@ -79,10 +82,14 @@
                             <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-row :gutter="20" >
                         <el-col :span="8">
-                            <div class="grid-content bg-purple">
+                            <div class="grid-content bg-purple" v-if="formModel.isMobilePayment">
                                 <span class="fontText">微信支付</span> 
                                 <span class="data">
                                     <el-switch
@@ -94,7 +101,7 @@
                                 </span>
                             </div>
                         </el-col>
-                        <el-col :span="8">
+                        <el-col :span="8" v-if="formModel.isMobilePayment">
                             <span class="fontText">支付宝支付</span> 
                             <span class="data">
                                 <el-switch
@@ -110,6 +117,7 @@
             </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-button
                     type="primary"
@@ -170,6 +178,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>
@@ -179,6 +193,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() {
@@ -212,6 +227,7 @@ export default {
             loading: false,
             showModal: false,
             showModal2:false,
+            showModal3:false,
             submitting: false,
             modified: false
         }
@@ -229,6 +245,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;
@@ -370,6 +392,16 @@ export default {
             });
 
         },
+        onDetailModalClose3(retObj) {
+            //保存成功后回调
+            this.showModal3 = false;
+            //this.closeDialog();
+            this.modified = retObj;
+            
+            if(retObj){
+                this.changePage(1,false);
+            }
+        },
         handlePayTime(){
             var self = this;
 
@@ -409,7 +441,8 @@ export default {
     },
     components: {
         "billPush-detail": billPushDetail,
-        "billPush-order-payTime":billPushOrderPayTime
+        "billPush-order-payTime":billPushOrderPayTime,
+        "billPush-qrcode-pay":billPushQrcodePay
     },
     mounted: function() {
         var self = this;

+ 26 - 3
src/views/business/billPush-detail.vue

@@ -38,7 +38,8 @@
                 :value="company.companyId"
               ></el-option>
           </el-select>
-        </el-form-item> <el-form-item label="推送用户:" prop="personId" >
+        </el-form-item> 
+        <el-form-item label="推送用户:" prop="personId" >
         <!--
             <el-input v-model="formModel.personId" style="display:none"></el-input>
         -->
@@ -55,7 +56,17 @@
         <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="isOpenWechat">
+        <el-form-item label="开票类型:" prop="companyId">
+          <el-select v-model="formModel.invoiceType" filterable class="input-form-main">
+            <el-option
+                v-for="company in invoiceTypeList"
+                :key="company.id"
+                :label="company.name"
+                :value="company.id"
+              ></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"
@@ -63,7 +74,7 @@
                 @change="handlChange(row)">
             </el-switch>
         </el-form-item>
-        <el-form-item label="支付宝支付:" prop="isOpenAlipay">
+        <el-form-item label="支付宝支付:" prop="isOpenAlipay" v-if="formModel.isMobilePayment">
             <el-switch
                 v-model="formModel.isOpenAlipay"
                 active-color="#13ce66"
@@ -229,6 +240,18 @@ export default {
             payServiceList:[],
             tableData:[],
             companyList:[],
+            invoiceTypeList:[{
+                id:"0",
+                name:"不开发票"
+            },
+            {
+                id:"1",
+                name:"普通发票"
+            },
+            {
+                id:"2",
+                name:"增值税专用发票"
+            }],
             showDialog: true,
             loading: false,
             submitting: false,

+ 19 - 11
src/views/business/billPush-list.vue

@@ -154,9 +154,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>
@@ -175,7 +179,7 @@
             <el-table-column prop="payee" label="收款方" ></el-table-column>
             <el-table-column prop="isOpenWechat"  label="支持微信支付"  >
                 <template slot-scope="{row}">
-                    <el-switch
+                    <el-switch v-if="row.isMobilePayment"
                         v-model="row.isOpenWechat"
                         active-color="#13ce66"
                         inactive-color="#ff4949"
@@ -185,7 +189,7 @@
             </el-table-column>
             <el-table-column prop="isOpenAlipay"  label="支持支付宝支付"  >
                 <template slot-scope="{row}">
-                    <el-switch
+                    <el-switch v-if="row.isMobilePayment"
                         v-model="row.isOpenAlipay"
                         active-color="#13ce66"
                         inactive-color="#ff4949"
@@ -195,13 +199,13 @@
             </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>
-                        <el-link  type="danger" @click="handleDelete(row)">删除账单</el-link>
+                        <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>
@@ -285,7 +289,11 @@ export default {
                 },
                 {      
                     id:"3",
-                    name:"已关闭",
+                    name:"已作废",
+                },
+                {      
+                    id:"4",
+                    name:"已完成",
                 }
             ],
             tableData: [],

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

@@ -0,0 +1,105 @@
+<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">
+             <el-image class="qucode"  src="http://rccs.oss-cn-hangzhou.aliyuncs.com/jp_housekeeper/img/%E5%BE%AE%E4%BF%A1%E6%94%AF%E4%BB%98.png"></el-image>
+            <div class="grid-content bg-purple" id="wxQuCode" ref="wxQuCode"></div>
+        </el-col>
+        <el-col :span="12">
+            <el-image  class="qucode" 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"></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: 300,
+                    height: 300,
+                    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: 300,
+                    height: 300,
+                    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;
+  }
+  .row-bg {
+    padding: 10px 0;
+  }
+  .qucode{
+      width: 70%;
+      height: 70%;
+  }
+</style>