Sfoglia il codice sorgente

账单推送后台页面

yanliming 5 anni fa
parent
commit
9f864ca1d1

+ 10 - 0
src/api/base/companyGoodsInfo.js

@@ -0,0 +1,10 @@
+import request from '@/utils/request'
+import constant from '@/constant'
+
+function findByCompanyId(formData) {
+  return request.post(constant.serverUrl + "/base/companyGoodsInfo/findByCompanyId", formData);
+}
+
+export default {
+    findByCompanyId
+}

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

@@ -5,6 +5,11 @@ function pageList(formData) {
   return request.post(constant.serverUrl + "/base/companyPaymentInfo/pageList", formData);
 }
 
+function list() {
+  return request.post(constant.serverUrl + "/base/companyPaymentInfo/list");
+}
+
+
 function create() {
   return request.get(constant.serverUrl + "/base/companyPaymentInfo/create");
 }
@@ -43,5 +48,5 @@ function batchRemove(idList) {
 
 
 export default {
-    create, edit, add, update, remove, batchRemove, pageList
+    create, edit, add, update, remove, batchRemove, pageList,list
 }

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

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

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

@@ -9,12 +9,16 @@ function payServiceList(formData){
   return request.post(constant.serverUrl + "/business/billPush/payServiceList", formData);
 }
 
+function goodsPageList(formData){
+  return request.post(constant.serverUrl + "/business/billPush/goodsPageList", formData);
+}
+
 function create(){
   return request.get(constant.serverUrl + "/business/billPush/create");
 }
 
-function createPerson(){
-  return request.get(constant.serverUrl + "/business/billPush/createPerson");
+function createGoods(){
+  return request.get(constant.serverUrl + "/business/billPush/createGoods");
 }
 
 function edit(id){
@@ -53,8 +57,14 @@ function batchRemove(idList){
   });
 }
 
+function pushBill(formData){
+  return request.post(constant.serverUrl + "/business/billPush/pushBill", formData);
+}
 
+function closeBill(id){
+  return request.post(constant.serverUrl + "/business/billPush/closeBill/" + id);
+}
 
 export default {
-    pageList,create,edit,add,update,remove,batchRemove,payServiceList,createPerson,detail
+    pageList,create,edit,add,update,remove,batchRemove,payServiceList,createGoods,detail,goodsPageList,pushBill,closeBill
   }

+ 156 - 198
src/views/business/billPush-detail-list.vue

@@ -2,14 +2,14 @@
     <el-dialog
     :visible.sync="showDialog"
     :title="title"
-    width="95%"
+    width="70%"
     :modal-append-to-body="false"
     style="text-align:left;"
     @close="closeDialog"
     :close-on-click-modal="false"
   >
         <div class="user-panel" v-loading="loading">
-                <el-form ref="form" :model="formModel" >
+                <el-form ref="form" :model="formModel" label-width="150">
                     <el-row :gutter="20" >
                         <el-col :span="8">
                             <div class="grid-content bg-purple">
@@ -18,219 +18,127 @@
                             </div>
                         </el-col>
                         <el-col :span="8">
-                            <span class="fontText">账单备注</span> 
-                            <span class="data">{{formModel.bak}}</span>
+                            <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">{{formModel.payServiceN}}</span>
+                            <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.payee}}</span>
+                                <span class="fontText">支付时间</span> 
+                                <span class="data">{{formModel.payTime}}</span>
                             </div>
                         </el-col>
                         <el-col :span="8">
-                            <span class="fontText" >收款账户</span> 
-                            <span class="data" v-if="formModel.collectionAccount=='1'">物业账户</span>
-                            <span class="data" v-if="formModel.collectionAccount=='2'">企业账户</span>
+                            <span class="fontText" >收款人</span> 
+                            <span class="data">{{formModel.payeePerson}}</span>
                         </el-col>
                         <el-col :span="8">
-                            <span class="fontText">推送时间</span> 
-                            <span class="data">{{formModel.pushTime}}</span>
+                            <span class="fontText">账单备注</span> 
+                            <span class="data">{{formModel.bak}}</span>
                         </el-col>
                     </el-row>
                  </el-form>
             </div>
             <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="phone">
-                    <el-input type="text" size="mini" v-model="queryModel.phone"></el-input>
-                </el-form-item>
-                <el-form-item label="所属单位" prop="unit">
-                    <el-select v-model="queryModel.unit"  size="mini" filterable focus="" >
-
-                    </el-select>
-                </el-form-item>
-                <el-form-item label="推送状态" prop="pushStatus">
-                <el-select v-model="queryModel.pushStatus"  size="mini">
-                </el-select>
-                </el-form-item>
-                <el-form-item label="缴费状态" prop="payService">
-                    <el-select v-model="queryModel.payService"  size="mini">
-                    </el-select>
-                </el-form-item>
-                <el-form-item label="支付方式" prop="payService">
-                    <el-select v-model="queryModel.payService"  size="mini">
-                    </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>
-                    <el-button
+            <el-row class="button-group">
+                <el-button type="success" size="small" plain icon="el-icon-download" @click="exportXls()">导出数据</el-button>
+                <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>
-            <template>
-                <el-tabs v-model="activeName" @tab-click="handleClick">
-                    <el-tab-pane label="全部" name="first">
-                        <el-table :data="tableData" v-loading="loading" stripe>
-                            <el-table-column type="index" label="序号" width="50"></el-table-column>
-                            <el-table-column prop="name" label="姓名"></el-table-column>
-                            <el-table-column prop="phone" label="手机号码"></el-table-column>
-                            <el-table-column prop="unit" label="所属单位"></el-table-column>
-                            <el-table-column prop="unit" label="收费项目"></el-table-column>
-                            <el-table-column prop="unit" label="收费金额"></el-table-column>
-                            <el-table-column prop="unit" label="推送状态"></el-table-column>
-                            <el-table-column prop="unit" label="缴费状态"></el-table-column>
-                            <el-table-column prop="unit" label="支付方式"></el-table-column>
-                            <el-table-column prop="unit" label="支付时间"></el-table-column>
-                            <el-table-column prop="unit" label="操作"></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>
-                    </el-tab-pane>
-                    <el-tab-pane label="已支付" name="second">
-                        <el-table :data="tableData" v-loading="loading" stripe>
-                            <el-table-column type="index" label="序号" width="50"></el-table-column>
-                            <el-table-column prop="name" label="姓名"></el-table-column>
-                            <el-table-column prop="phone" label="手机号码"></el-table-column>
-                            <el-table-column prop="unit" label="所属单位"></el-table-column>
-                            <el-table-column prop="unit" label="收费项目"></el-table-column>
-                            <el-table-column prop="unit" label="收费金额"></el-table-column>
-                            <el-table-column prop="unit" label="推送状态"></el-table-column>
-                            <el-table-column prop="unit" label="缴费状态"></el-table-column>
-                            <el-table-column prop="unit" label="支付方式"></el-table-column>
-                            <el-table-column prop="unit" label="支付时间"></el-table-column>
-                            <el-table-column prop="unit" label="操作"></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>
-                    </el-tab-pane>
-                    <el-tab-pane label="未支付" name="third">
-                        <el-table :data="tableData"  v-loading="loading" stripe>
-                            <el-table-column type="index" label="序号" width="50"></el-table-column>
-                            <el-table-column prop="name" label="姓名"></el-table-column>
-                            <el-table-column prop="phone" label="手机号码"></el-table-column>
-                            <el-table-column prop="unit" label="所属单位"></el-table-column>
-                            <el-table-column prop="unit" label="收费项目"></el-table-column>
-                            <el-table-column prop="unit" label="收费金额"></el-table-column>
-                            <el-table-column prop="unit" label="推送状态"></el-table-column>
-                            <el-table-column prop="unit" label="缴费状态"></el-table-column>
-                            <el-table-column prop="unit" label="支付方式"></el-table-column>
-                            <el-table-column prop="unit" label="支付时间"></el-table-column>
-                            <el-table-column prop="unit" label="操作"></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>
-                    </el-tab-pane>
-                    <el-tab-pane label="已发送" name="fourth">
-                        <el-table :data="tableData" v-loading="loading" stripe>
-                            <el-table-column type="index" label="序号" width="50"></el-table-column>
-                            <el-table-column prop="name" label="姓名"></el-table-column>
-                            <el-table-column prop="phone" label="手机号码"></el-table-column>
-                            <el-table-column prop="unit" label="所属单位"></el-table-column>
-                            <el-table-column prop="unit" label="收费项目"></el-table-column>
-                            <el-table-column prop="unit" label="收费金额"></el-table-column>
-                            <el-table-column prop="unit" label="推送状态"></el-table-column>
-                            <el-table-column prop="unit" label="缴费状态"></el-table-column>
-                            <el-table-column prop="unit" label="支付方式"></el-table-column>
-                            <el-table-column prop="unit" label="支付时间"></el-table-column>
-                            <el-table-column prop="unit" label="操作"></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>
-                    </el-tab-pane>
-                    <el-tab-pane label="未发送" name="fiveth">
-                        <el-table :data="tableData" v-loading="loading" stripe>
-                            <el-table-column type="index" label="序号" width="50"></el-table-column>
-                            <el-table-column prop="name" label="姓名"></el-table-column>
-                            <el-table-column prop="phone" label="手机号码"></el-table-column>
-                            <el-table-column prop="unit" label="所属单位"></el-table-column>
-                            <el-table-column prop="unit" label="收费项目"></el-table-column>
-                            <el-table-column prop="unit" label="收费金额"></el-table-column>
-                            <el-table-column prop="unit" label="推送状态"></el-table-column>
-                            <el-table-column prop="unit" label="缴费状态"></el-table-column>
-                            <el-table-column prop="unit" label="支付方式"></el-table-column>
-                            <el-table-column prop="unit" label="支付时间"></el-table-column>
-                            <el-table-column prop="unit" label="操作"></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>
-                    </el-tab-pane>
-                </el-tabs>
-            </template>
+                    size="small"
+                    plain
+                    icon="el-icon-edit"
+                    @click="handleEdit" v-if="formModel.status=='0'"
+                    >修改账单</el-button
+                >
+                <el-button
+                    type="primary"
+                    size="small"
+                    plain
+                    icon="el-icon-edit"
+                    disabled
+                    @click="handleEdit" v-else
+                    >修改账单</el-button
+                >
+            </el-row>
+            <el-table :data="tableData" v-loading="loading" stripe>
+                <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="standard" label="收费标准(元)"></el-table-column>
+                <el-table-column prop="totalFee" label="收费金额(元)"></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>
+
     </el-dialog>
 </template>
 <script>
 import Constant from "@/constant";
 import billPushApi from "@/api/business/billPush";
 import billPushPersonApi from "@/api/business/billPushPerson";
+import billPushDetail from "./billPush-detail";
 export default {
     props: ["businessKey", "title"],
     data() {
         return{
             formModel:{
-
             },
             queryModel: {
                 name: "",
@@ -249,6 +157,7 @@ export default {
             activeName:"first",
             showDialog: true,
             loading: false,
+            showModal: false,
         }
     },
     methods:{
@@ -258,29 +167,67 @@ export default {
         handleClick(){
 
         },
-        changePage(pageIndex) {
+        handleEdit() {
+            this.modalTitle = "编辑";
+            this.operation = "edit";
+            this.businessKey = this.businessKey;
+            this.showModal = true;
+        },
+        changePage(pageIndex,exportFlag) {
             var self = this;
             self.loading = true;
 
-            var mainId = self.businessKey;
+            var billPushId = self.businessKey;
 
             self.pageIndex = pageIndex;
             var formData = new FormData();
 
-            formData.append("mainId", mainId);
+            formData.append("billPushId", billPushId);
             formData.append("pageIndex", self.pageIndex);
-            formData.append("pageSize", self.pageSize);
+            
+            
+            if(exportFlag!=null){
+                formData.append("exportFlag", exportFlag);
+                formData.append("pageSize", 10000);
+            }
+            else{
+                formData.append("pageSize", self.pageSize);
+            }
 
 
-            billPushPersonApi.pageList(formData)
+            billPushApi.goodsPageList(formData)
                 .then(function(response) {
                     self.loading = false;
 
-                    var jsonData = response.data.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
+                            });
+                        }
+                        else{
+                            //分页查看
+                            var page = jsonData.data;
 
-                    self.tableData = jsonData.data;
-                    self.totalPages = jsonData.totalPages;
-                    self.totalElements = jsonData.recordsTotal;
+                            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;
@@ -291,15 +238,24 @@ export default {
         pageSizeChange(pageSize) {
             this.pageSize = pageSize;
         },
+        onDetailModalClose(retObj) {
+            //保存成功后回调
+            this.showModal = false;
+            this.$emit("close", false);
+        },
+        exportXls() {
+            this.changePage(1,true);
+        }
+    },
+    components: {
+        "billPush-detail": billPushDetail
     },
     mounted: function() {
         var self = this;
 
-        this.changePage(1);
-
         (function() {
             if (self.businessKey.length == 0) {
-                return billPushApi.createPerson();
+                return billPushApi.createGoods();
             } else {
                 return billPushApi.detail(self.businessKey);
             }
@@ -317,6 +273,8 @@ export default {
         .catch(error => {
             self.$message.error(error + "");
         });
+
+        this.changePage(1,false);
     }
 }
 </script>

+ 132 - 68
src/views/business/billPush-detail.vue

@@ -16,7 +16,7 @@
         <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-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"
@@ -26,21 +26,23 @@
               ></el-option>
           </el-select>
         </el-form-item>
-        <el-form-item label="收款账户:" prop="collectionAccount">
-            <template>
-                <el-radio-group v-model="formModel.collectionAccount">
-                    <el-radio  label="1">物业账户</el-radio>
-                    <el-radio  label="2">企业账户</el-radio>
-                </el-radio-group>
-            </template>
+        <el-form-item label="收款账户:" prop="collectionAccountId">
+            <el-select v-model="formModel.collectionAccountId"   class="input-form-main" >
+                <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="payService">
-          <el-select v-model="formModel.payService" class="input-form-main">
+        <el-form-item label="推送用户:" prop="personId" >
+          <el-select v-model="formModel.personId" class="input-form-main" filterable>
             <el-option
-                v-for="payService in payServiceList"
-                :key="payService.id"
-                :label="payService.goodsName"
-                :value="payService.id"
+                v-for="person in personList"
+                :key="person.id"
+                :label="person.name"
+                :value="person.id"
               ></el-option>
           </el-select>
         </el-form-item>
@@ -48,55 +50,69 @@
           <el-input type="textarea" v-model="formModel.bak" placeholder="请输入备注"  class="input-form-main"></el-input>
         </el-form-item>
 
-        <h3>人员账单信息</h3>
-        <el-row class="button-group">
-            <el-button
-                type="primary"
-                size="small"
-                plain
-                icon="el-icon-circle-plus"
-                >导入账单</el-button
-            >
-        </el-row>
-        <el-table :data="formModel.billPushPersonList" border>
+        <h3>账单信息</h3>
+        <el-table :data="formModel.billPushGoodsList">
             <el-table-column type="index" label="序号" width="50"></el-table-column>
-            <el-table-column prop="name" label="姓名">
+            <el-table-column prop="goodsId" label="收费项目">
+              <template slot-scope="{row}">
+                  <el-form-item>
+                    <el-select v-model="row.goodsId" placeholder="请选择" style="width:150px;">
+                        <el-option
+                        v-for="result in goodsList"
+                        :key="result.id"
+                        :label="result.name"
+                        :value="result.id"
+                        ></el-option>
+                    </el-select>
+                  </el-form-item>
+              </template>
+            </el-table-column>
+            <el-table-column prop="beginEndTime" label="起止时间" width="400">
                 <template slot-scope="scope">
                     <el-form-item
-                    :prop="'billPushPersonList.' + scope.$index + '.name'"
-                    :rules="ruleValidate['name']"
+                    :prop="'billPushGoodsList.' + scope.$index + '.beginEndTime'"
+                    :rules="ruleValidate['beginEndTime']"
                     >
-                        <el-input placeholder="姓名" style="width:200px" v-model="scope.row.name"></el-input>
+                        <el-date-picker
+                            v-model="scope.row.beginEndTime"
+                            type="daterange"
+                            range-separator="至"
+                            start-placeholder="开始时间"
+                            end-placeholder="结束时间"
+                            placeholder="选择时间范围"
+                            value-format="yyyy-MM-dd"
+                            >
+                        </el-date-picker>
                     </el-form-item>
                 </template>
             </el-table-column>
-            <el-table-column prop="phone" label="电话">
+            <el-table-column prop="numStr" label="数量" width="120">
                 <template slot-scope="scope">
                     <el-form-item
-                    :prop="'billPushPersonList.' + scope.$index + '.phone'"
-                    :rules="ruleValidate['phone']"
+                    :prop="'billPushGoodsList.' + scope.$index + '.numStr'"
+                    :rules="ruleValidate['numStr']"
                     >
-                        <el-input placeholder="电话" style="width:200px" v-model="scope.row.phone"></el-input>
+                    <el-input placeholder="数量" v-model="scope.row.numStr"></el-input>
                     </el-form-item>
                 </template>
             </el-table-column>
-            <el-table-column prop="unit" label="所属单位">
+            <el-table-column prop="standard" label="收费标准">
                 <template slot-scope="scope">
                     <el-form-item
-                    :prop="'billPushPersonList.' + scope.$index + '.unit'"
-                    :rules="ruleValidate['unit']"
+                    :prop="'billPushGoodsList.' + scope.$index + '.standard'"
+                    :rules="ruleValidate['standard']"
                     >
-                    <el-input placeholder="所属单位" style="width:200px" v-model="scope.row.unit"></el-input>
+                    <el-input placeholder="收费标准" v-model="scope.row.standard"></el-input>
                     </el-form-item>
                 </template>
             </el-table-column>
-            <el-table-column prop="payFee" label="收费金额">
+            <el-table-column prop="totalFee" label="合计金额" width="150">
                 <template slot-scope="scope">
                     <el-form-item
-                    :prop="'billPushPersonList.' + scope.$index + '.payFee'"
-                    :rules="ruleValidate['payFee']"
+                    :prop="'billPushGoodsList.' + scope.$index + '.totalFee'"
+                    :rules="ruleValidate['totalFee']"
                     >
-                    <el-input placeholder="收费金额" style="width:200px" v-model="scope.row.payFee"></el-input>
+                    <el-input placeholder="合计金额" v-model="scope.row.totalFee"></el-input>
                     </el-form-item>
                 </template>
             </el-table-column>
@@ -115,9 +131,11 @@
             </div>
         </el-table>
       </el-form>
-     <div class="el-table__empty-block" v-if="formModel.billPushPersonList.length!=0">
+
+        <div class="el-table__empty-block" v-if="formModel.billPushGoodsList.length!=0">
           <el-button icon="el-icon-circle-plus-outline" @click="handleAdd()">新增</el-button>
-     </div>
+        </div>
+
     </div>
 
     <span slot="footer" class="dialog-footer">
@@ -131,6 +149,9 @@
 import Constant from "@/constant";
 import billPushApi from "@/api/business/billPush";
 import companyInfoApi from "@/api/base/companyInfo";
+import companyPaymentApi from "@/api/base/companyPayment";
+import companyGoodsInfoApi from "@/api/base/companyGoodsInfo";
+import personInfoApi from "@/api/base/personInfo";
 export default {
     props: ["businessKey", "title"],
     data() {
@@ -139,7 +160,7 @@ export default {
                 name: [{ required: true, message: "账单名称不能为空", trigger: "blur" }],
                 payee: [{ required: true, message: "收款方不能为空", trigger: "blur" }],
                 companyId: [{ required: true, message: "公司不能为空", trigger: "blur" }],
-                collectionAccount: [{ required: true, message: "请选择收款账户", trigger: "blur" }],
+                collectionAccountId: [{ required: true, message: "请选择收款账户", trigger: "blur" }],
                 payService: [{ required: true, message: "收费项目不能为空", trigger: "blur" }]
             },
             formModel: {
@@ -147,11 +168,16 @@ export default {
                 payee:"",
                 companyId:"",
                 payService:"",
-                collectionAccount:"",
+                collectionAccountId:"",
                 bak:"",
-                billPushPersonList:[],
-                removeBillPushPersonList:[],
+                billPushGoodsList:[],
+                removeBillPushGoodsList:[],
+                
             },
+            beginEndTime:"",
+            personList:[],
+            goodsList:[],
+            collectionAccountList:[],
             payServiceList:[],
             tableData:[],
             companyList:[],
@@ -165,6 +191,11 @@ export default {
             var jsonData = response.data;
             this.companyList = jsonData.data;
         });
+
+        companyPaymentApi.list().then((response)=>{
+            var jsonData = response.data;
+            this.collectionAccountList = jsonData.data;
+        });
     },
     methods: {
         closeDialog() {
@@ -177,24 +208,43 @@ export default {
             var formData = new FormData();
             formData.append("companyId", selVal);
 
-            billPushApi.payServiceList(formData).then((response)=>{
+            companyGoodsInfoApi.findByCompanyId(formData).then((response)=>{
+                var jsonData = response.data;
+                this.goodsList = jsonData.data;
+            });
+
+            personInfoApi.findByCompanyId(formData).then((response)=>{
                 var jsonData = response.data;
-                this.payServiceList = jsonData.data;
+                this.personList = jsonData.data;
             });
+
         },
         handleSubmit() {
             var self = this;
 
-            var billPushPersonList = this.formModel.billPushPersonList;
+            var billPushGoodsList = this.formModel.billPushGoodsList;
 
-            for(var i=0;i<billPushPersonList.length;i++){
-                billPushPersonList[i].sortNo = i+1;
+            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 removeBillPushGoodsList = this.formModel.removeBillPushGoodsList;
+
+            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="";
             }
 
             this.$refs["form"].validate(valid => {
                 if (valid) {
                 (function() {
                     var id = self.formModel.id;
+                    
 
                     if (id == null || id.length == 0) {
                     return billPushApi.add(self.formModel);
@@ -223,34 +273,34 @@ export default {
             });
         },
         handleAdd() {
-            this.formModel.billPushPersonList.push({
-                sortNo: this.formModel.billPushPersonList.length + 1,
-                name: "",
-                routeId: this.businessKey,
-                payFee: "",
+            this.formModel.billPushGoodsList.push({
+                sortNo: this.formModel.billPushGoodsList.length + 1,
+                goodsId: "",
+                beginEndTime: "",
+                numStr: "",
                 totalFee: "",
             });
         },
         handleInsert(row) {
-            var billPushPersonList = this.formModel.billPushPersonList;
-            var index = billPushPersonList.indexOf(row);
+            var billPushGoodsList = this.formModel.billPushGoodsList;
+            var index = billPushGoodsList.indexOf(row);
 
             if(index>=0){
-                billPushPersonList.splice(index+1,0,{
+                billPushGoodsList.splice(index+1,0,{
                     sortNo: index + 2,
                     name: "",
-                    routeId: this.businessKey,
-                    payFee: "",
+                    beginEndTime: "",
+                    numStr: "",
                     totalFee: "",
                 });
             }
         },
         handleDelete(row) {
-            var billPushPersonList = this.formModel.billPushPersonList;
+            var billPushGoodsList = this.formModel.billPushGoodsList;
 
-            billPushPersonList.splice(billPushPersonList.indexOf(row), 1);
+            billPushGoodsList.splice(billPushGoodsList.indexOf(row), 1);
 
-            this.formModel.removeBillPushPersonList.push(row);
+            this.formModel.removeBillPushGoodsList.push(row);
         },
     },
     mounted: function() {
@@ -258,7 +308,7 @@ export default {
 
         (function() {
         if (self.businessKey.length == 0) {
-            return billPushApi.createPerson();
+            return billPushApi.create();
         } else {
             return billPushApi.edit(self.businessKey);
         }
@@ -268,9 +318,23 @@ export default {
             self.loading = false;
 
             if (jsonData.result) {
-            self.formModel = jsonData.data;
+
+                self.formModel = jsonData.data;
+
+                var billPushGoodsList = self.formModel.billPushGoodsList;
+
+                for(var i=0;i<billPushGoodsList.length;i++){
+                    var beginEndTime = [];
+                    beginEndTime.push(billPushGoodsList[i].beginDate);
+                    beginEndTime.push(billPushGoodsList[i].endDate);
+                    billPushGoodsList[i].beginEndTime = beginEndTime;
+                }
+
+                if(jsonData.data.companyId!=null&&jsonData.data!=""){
+                    this.handChange(jsonData.data.companyId);
+                }
             } else {
-            self.$message.error(jsonData.message + "");
+                self.$message.error(jsonData.message + "");
             }
         })
         .catch(error => {

+ 253 - 46
src/views/business/billPush-list.vue

@@ -11,6 +11,56 @@
             </el-breadcrumb>
         <el-divider></el-divider>
         <el-form ref="queryForm" :model="queryModel" inline class="demo-form-inline">
+            <el-form-item label="缴费单位" prop="companyId">
+                <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-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"
@@ -24,20 +74,21 @@
                     >
                 </el-date-picker>
             </el-form-item>
-            <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="" @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 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-form-item label="收费项目:" prop="payService">
             <el-select v-model="queryModel.payService"  size="mini">
                 <el-option
                     v-for="payService in payServiceList"
@@ -46,7 +97,7 @@
                     :value="payService.id"
                 ></el-option>
             </el-select>
-            </el-form-item>
+            </el-form-item> -->
             <el-form-item>
                 <el-button
                 type="primary"
@@ -76,43 +127,48 @@
         </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="120"></el-table-column>
-            <el-table-column prop="collectionAccount" label="收款账户" width="120">
+            <el-table-column prop="name" label="账单名称" ></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}">
-                    <span v-if="row.collectionAccount=='1'">物业账户</span>
-                    <span v-if="row.collectionAccount=='2'">企业账户</span>
+                    <div>{{row.personName}}</div>
+                    <div>{{row.phone}}</div>
                 </template>
             </el-table-column>
-            <el-table-column prop="payServiceN" label="收费项目" width="120"></el-table-column>
-            <el-table-column prop="bak" label="账单备注" width="120"></el-table-column>
-            <el-table-column prop="pushTime" label="账单推送时间" width="120"></el-table-column>
-            <el-table-column label="账单推送情况" width="180">
+            <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}">
-                    <div>应发送人数:{{row.totalPushNumber}}</div>
-                    <div>实发送人数:{{row.actualPushNumber}}</div>
-                    <div>未通知人数:{{row.notYetPushNumber}}<span class="span-view"><el-link type="primary"><i class="el-icon-view"></i></el-link></span></div>
-                    
+                    <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 label="账单收缴情况" width="180">
+            <el-table-column prop="pushTime" label="推送时间"  width="180"></el-table-column>
+            <el-table-column prop="payStatus" label="缴费状态" >
                 <template slot-scope="{row}">
-                    <div>应收:{{row.totalReceivable}}元</div>
-                    <div>实收:{{row.netReceipts}}元</div>
-                    <div>未收:{{row.notReceived}}元<span class="span-view"><el-link type="primary"><i class="el-icon-view"></i></el-link></span></div>
+                    <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="payee" label="收款方" width="80"></el-table-column>
-            <el-table-column label="操作">
+            <el-table-column prop="payTime" label="缴费时间" ></el-table-column>
+            <el-table-column prop="payName" label="支付方式" ></el-table-column>
+            <el-table-column prop="payee" label="收款方" ></el-table-column>
+            <el-table-column label="操作" width="180">
                 <template slot-scope="{row}">
+
+                    <el-link  type="primary" @click="handleDetailList(row)">查看详情</el-link>
+                    <el-link  type="primary" @click="handlePush(row)">推送账单</el-link>
+
                     <div>
-                        <span class="link-span"><el-link  type="success" @click="handleEdit(row)">导入名单</el-link></span>
-                        <el-link  type="primary" @click="handleDetailList(row)">查看详情</el-link>
-                    </div>
-                    <div>
-                        <span class="link-span"><el-link  type="primary" @click="handlePush(row)">推送账单</el-link></span>
                         <el-link  type="warning" @click="handleClose(row)">关闭账单</el-link>
+                        <el-link  type="danger" @click="handleDelete(row)">删除账单</el-link>
                     </div>
-                    <el-link  type="danger" @click="handleDelete(row)">删除账单</el-link>
+                    
                 </template>
             </el-table-column>
         </el-table>
@@ -144,6 +200,7 @@
 import Constant from "@/constant";
 import billPushApi from "@/api/business/billPush";
 import companyInfoApi from "@/api/base/companyInfo";
+import companyPaymentApi from "@/api/base/companyPayment";
 import billPushDetail from "./billPush-detail";
 import billPushDetailList from "./billPush-detail-list";
 export default {
@@ -153,15 +210,71 @@ export default {
 
         return {
             queryModel: {
-                name: "",
-                status: "",
-                pushTimeRange: ['',''],
                 companyId:"",
-                payService:"",
+                status: "",
+                payName:"",
+                collectionAccount:"",
+                pushTimeRange: "",
+                payTimeRange:"",
+                payStatus:"",
             },
             loading: false,
+            statusList:[
+                {
+                    id:"0",
+                    name:"未推送",
+                },
+                {
+                    id:"1",
+                    name:"已推送",
+                },
+                {
+                    id:"2",
+                    name:"推送失败",
+                },
+                {      
+                    id:"3",
+                    name:"已关闭",
+                }
+            ],
             tableData: [],
-            payServiceList:[],
+            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,
@@ -178,6 +291,12 @@ export default {
             var jsonData = response.data;
             this.companyList = jsonData.data;
         });
+
+        companyPaymentApi.list().then((response)=>{
+            var jsonData = response.data;
+            this.collectionAccountList = jsonData.data;
+        });
+
     },
     methods: {
         changePage(pageIndex) {
@@ -191,10 +310,14 @@ export default {
             formData.append("pageIndex", self.pageIndex);
             formData.append("pageSize", self.pageSize);
 
-            formData.append("name", self.queryModel.name);
-            formData.append("pushTimeRange", self.queryModel.pushTimeRange);
-            formData.append("payService", self.queryModel.payService);
+            formData.append("companyId", self.queryModel.companyId);
+            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.pageList(formData)
@@ -273,6 +396,90 @@ export default {
             this.selectedRecord = record;
             this.showModal2 = true;
         },
+        handlePush(record){
+            var id = record.id;
+            
+            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;
+        }, 
     },
     mounted: function() {
         this.changePage(1);