浏览代码

Merge branch 'master' of http://49.4.53.36:3000/hotel/hotel-saas-tenant-frontend

gqx 2 年之前
父节点
当前提交
5cfbbff61e

+ 44 - 2
src/views/markets/modules/agreementUnit/account/accountEnterForm.vue

@@ -3,7 +3,7 @@
     <!--        -->
     <!--    </a-card>-->
     <div>
-        <a-tabs default-active-key="1">
+        <a-tabs default-active-key="1" @change="callback">
             <a-tab-pane key="1">
                 <span slot="tab">
                     <a-icon type="template" />
@@ -79,6 +79,12 @@
                 type: Boolean,
                 default: false,
                 required: false
+            },
+            agreementModel:{
+                type: Object,
+                required: false,
+                default: () => {
+                }
             }
         },
         data () {
@@ -93,6 +99,12 @@
                     xs: { span: 24 },
                     sm: { span: 18 },
                 },
+                url: {
+                    addEntry: "/business/busAgreementOrderFee/addEntry",
+                    edit: "/business/busAgreementOrderFee/edit",
+                    queryById: "/business/busAgreementOrderFee/queryById"
+                },
+                type:1,
                 paymentMethodList: [],
             }
         },
@@ -118,10 +130,40 @@
             handleCancel(){
                 this.close();
             },
+            callback(key) {
+                console.log(key);
+                this.type = key
+            },
             submitForm(){
                 console.log(888)
                 const that = this;
-                that.$emit('ok');
+                // 触发表单验证
+                this.$refs.form.validate(valid => {
+                    if (valid) {
+                        that.confirmLoading = true;
+                        let httpurl = this.url.addEntry;
+                        let method = 'post';
+                        var data = {
+                            agreementUnitId:that.agreementModel.id,
+                            projectName:that.type == 1?"预收账款":"预收退款",
+                            type:that.type,
+                            payPrice:that.model.price,
+                            payType:that.model.paymentMethod,
+                            remarks:that.model.remarks,
+                        }
+                        console.log(data);
+                        httpAction(httpurl,data,method).then((res)=>{
+                            if(res.success){
+                                that.$message.success(res.message);
+                                that.$emit('ok');
+                            }else{
+                                that.$message.warning(res.message);
+                            }
+                        }).finally(() => {
+                            that.confirmLoading = false;
+                        })
+                    }
+                })
             },
         }
     }

+ 104 - 0
src/views/markets/modules/agreementUnit/account/commodityRecord.vue

@@ -0,0 +1,104 @@
+<template>
+    <div>
+        <a-table
+                ref="table"
+                size="middle"
+                :scroll="{x:true}"
+                rowKey="id"
+                :columns="columns"
+                :dataSource="dataSource"
+                :pagination="ipagination"
+                :loading="loading"
+                class="j-table-force-nowrap"
+                @change="handleTableChange">
+        </a-table>
+    </div>
+</template>
+
+<script>
+    import '@/assets/less/TableExpand.less'
+    import { mixinDevice } from '@/utils/mixin'
+    import { JeecgListMixin } from '@/mixins/JeecgListMixin'
+
+    export default {
+        name: 'commodityRecord',
+        mixins:[JeecgListMixin, mixinDevice],
+        props: {
+            agreementOrderFeeId:{
+                type: String,
+                required: false,
+                default: () => {
+                }
+            }
+        },
+        data(){
+          return {
+              // 表头
+              columns: [
+                  {
+                      title:'科目',
+                      align:"center",
+                      dataIndex: 'categoryId_dictText',
+                  },
+                  {
+                      title:'分类',
+                      align:"center",
+                      dataIndex: 'categoryTwoId_dictText',
+                  },
+                  {
+                      title:'名称',
+                      align:"center",
+                      dataIndex: 'goodsId_dictText',
+                  },
+                  {
+                      title:'单价',
+                      align:"center",
+                      dataIndex: 'shopPrice',
+                      sorter: (a, b) => a.shopPrice - b.shopPrice,
+                  },
+                  {
+                      title:'数量',
+                      align:"center",
+                      dataIndex: 'buyNumber',
+                      sorter: (a, b) => a.buyNumber - b.buyNumber,
+                  },
+                  {
+                      title:'购买人',
+                      align:"center",
+                      dataIndex: 'purchaserName',
+                  },
+                  {
+                      title:'总价格',
+                      align:"center",
+                      dataIndex: 'amount',
+                  },
+                  {
+                      title:'操作员',
+                      align:"center",
+                      dataIndex: 'createBy'
+                  },
+                  {
+                      title:'备注',
+                      align:"center",
+                      dataIndex: 'remarks'
+                  }
+              ],
+              url: {
+                  list: "/business/busCommodityRecord/list?agreementOrderFeeId="+this.agreementOrderFeeId,
+              },
+          }
+        },
+        created() {
+            console.log(this.agreementOrderFeeId)
+        },
+        methods:{
+            show(){
+
+            }
+        }
+    }
+</script>
+
+<style scoped>
+
+</style>

+ 53 - 0
src/views/markets/modules/agreementUnit/account/commodityRecordModal.vue

@@ -0,0 +1,53 @@
+<template>
+    <j-modal
+            :title="title"
+            :width="width"
+            :visible="visible"
+            switchFullscreen
+            @ok="handleOk"
+            :okButtonProps="{ class:{'jee-hidden': disableSubmit} }"
+            cancelText="关闭"
+            @cancel="handleCancel">
+        <commodity-record ref="realForm" :disabled="disableSubmit" :agreementOrderFeeId="agreementOrderFeeId"></commodity-record>
+    </j-modal>
+</template>
+
+<script>
+    import CommodityRecord from './commodityRecord'
+    export default {
+        name: 'commodityRecordModal',
+        components: {
+            CommodityRecord
+        },
+        props: {
+        },
+        data () {
+            return {
+                title:'',
+                agreementOrderFeeId:'',
+                width:1200,
+                visible: false,
+                disableSubmit: false,
+            }
+        },
+        methods: {
+            show () {
+                this.visible=true
+                this.$nextTick(()=>{
+                    this.$refs.realForm.show();
+                })
+            },
+            close () {
+                this.$emit('close');
+                this.visible = false;
+            },
+            handleOk () {
+                this.$refs.realForm.submitForm();
+            },
+            handleCancel () {
+                this.close()
+            }
+        }
+    }
+</script>
+

+ 187 - 0
src/views/markets/modules/agreementUnit/account/commodityReturn.vue

@@ -0,0 +1,187 @@
+<template>
+    <div>
+        <a-table
+                ref="table"
+                size="middle"
+                :scroll="{x:true}"
+                rowKey="id"
+                :columns="columns"
+                :dataSource="dataSource"
+                :pagination="false"
+                :loading="loading"
+                class="j-table-force-nowrap"
+                @change="handleTableChange">
+
+            <template slot="returnSlot" slot-scope="text, record">
+                <span>{{(record.returnMaxNumber)}}</span>
+            </template>
+            <template slot="returnNumberSlot" slot-scope="text, record">
+                <a-input-number :class="record.id"
+                                v-model="record.returnNumber"
+                                placeholder="请输入数量"
+                                style="width: 50%"
+                                :min="0"
+                                :max="record.returnMaxNumber"
+                                :disabled="record.sellingPrice == 0"
+                />
+            </template>
+            <template slot="returnMoneySlot" slot-scope="text, record">
+                <span>{{record.shopPrice*record.returnNumber}}</span>
+            </template>
+        </a-table>
+
+        <j-form-container style="margin-top: 10px;" >
+            <a-form-model ref="form" :model="model" slot="detail">
+                <a-row>
+                    <a-col :span="24">
+                        <a-form-model-item label="备注" :labelCol="labelCol" :wrapperCol="wrapperCol" prop="remarks">
+                            <a-textarea
+                                    v-model="model.remarks"
+                                    rows="4"
+                                    placeholder="请输入备注"
+                                    style="width: 100%"
+                            />
+                        </a-form-model-item>
+                    </a-col>
+                </a-row>
+            </a-form-model>
+        </j-form-container>
+    </div>
+</template>
+
+<script>
+    import '@/assets/less/TableExpand.less'
+    import { mixinDevice } from '@/utils/mixin'
+    import { JeecgListMixin } from '@/mixins/JeecgListMixin'
+    import { httpAction, getAction } from "@/api/manage";
+
+    export default {
+        name: 'commodityReturn',
+        mixins:[JeecgListMixin, mixinDevice],
+        props: {
+            agreementOrderFeeId:{
+                type: String,
+                required: false,
+                default: () => {
+                }
+            }
+        },
+        data(){
+            return {
+                model:{
+                    remarks:'',
+                },
+                confirmLoading: false,
+                labelCol: {
+                    xs: { span: 24 },
+                    sm: { span: 2 },
+                },
+                wrapperCol: {
+                    xs: { span: 24 },
+                    sm: { span: 22 },
+                },
+                // 表头
+                columns: [
+                    {
+                        title:'名称',
+                        align:"center",
+                        dataIndex: 'goodsId_dictText',
+                    },
+                    {
+                        title:'可退数',
+                        align:"center",
+                        dataIndex: 'buyNumber',
+                        scopedSlots: { customRender: 'returnSlot' }
+                    },
+                    {
+                        title:'单价',
+                        align:"center",
+                        dataIndex: 'shopPrice',
+                        customRender: function (text) {
+                            return !text?"":'¥'+text
+                        },
+                    },
+                    {
+                        title:'退货数量',
+                        align:"center",
+                        dataIndex: 'purchaserName',
+                        scopedSlots: { customRender: 'returnNumberSlot' }
+                    },
+                    {
+                        title:'退款',
+                        align:"center",
+                        dataIndex: 'amount',
+                        scopedSlots: { customRender: 'returnMoneySlot' }
+                    },
+
+                ],
+                url: {
+                    list: "/business/busCommodityRecord/list?agreementOrderFeeId="+this.agreementOrderFeeId,
+                    addReturn: "/business/busAgreementOrderFee/addReturn",
+                },
+            }
+        },
+        created() {
+            console.log(this.agreementOrderFeeId)
+        },
+        methods:{
+            show(){
+
+            },
+            submitForm(){
+                var that = this;
+                var goodsList = [];
+                var goodsDataSource = this.dataSource;
+                if (goodsDataSource && goodsDataSource.length > 0){
+                    var amount = 0
+                    for(let i=0;i<goodsDataSource.length;i++){
+                        var item = goodsDataSource[i];
+                        if (parseFloat(item.returnNumber) > 0 ){
+                            var _money = parseFloat(item.returnNumber) * parseFloat(item.shopPrice);
+                            amount = amount + parseFloat(_money.toFixed(2));
+                            var goodsItem = {
+                                id:item.id,
+                                returnNumber:item.returnNumber,
+                            }
+                            goodsList.push(goodsItem)
+                        }
+                    }
+                    if (amount <= 0 ){
+                        that.$message.warning('退货信息未填写');
+                        return;
+                    }
+
+                    //组装退货信息
+                    var data = {
+                        id:that.agreementOrderFeeId,
+                        type:4,
+                        payPrice:amount,
+                        remarks:that.model.remarks,
+                        commodityRecords:goodsList
+                    }
+
+                    that.confirmLoading = true;
+                    let httpurl = this.url.addReturn;
+                    let method = 'post';
+
+                    httpAction(httpurl,data,method).then((res)=>{
+                        if(res.success){
+                            that.$message.success(res.message);
+                            that.$emit('ok');
+                        }else{
+                            that.$message.warning(res.message);
+                        }
+                    }).finally(() => {
+                        that.confirmLoading = false;
+                    })
+                }
+
+            }
+        }
+    }
+</script>
+
+<style scoped>
+
+</style>
+

+ 55 - 0
src/views/markets/modules/agreementUnit/account/commodityReturnModal.vue

@@ -0,0 +1,55 @@
+<template>
+    <j-modal
+            :title="title"
+            :width="width"
+            :visible="visible"
+            switchFullscreen
+            @ok="handleOk"
+            @cancel="handleCancel">
+        <commodity-return ref="realForm" @ok="submitCallback" :disabled="disableSubmit" :agreementOrderFeeId="agreementOrderFeeId"></commodity-return>
+    </j-modal>
+</template>
+
+<script>
+    import CommodityReturn from './commodityReturn'
+    export default {
+        name: 'commodityReturnModal',
+        components: {
+            CommodityReturn
+        },
+        props: {
+        },
+        data () {
+            return {
+                title:'',
+                agreementOrderFeeId:'',
+                width:800,
+                visible: false,
+                disableSubmit: false,
+            }
+        },
+        methods: {
+            show () {
+                this.visible=true
+                this.$nextTick(()=>{
+                    this.$refs.realForm.show();
+                })
+            },
+            close () {
+                this.$emit('close');
+                this.visible = false;
+            },
+            handleOk () {
+                this.$refs.realForm.submitForm();
+            },
+            submitCallback(){
+                this.$emit('ok');
+                this.visible = false;
+            },
+            handleCancel () {
+                this.close()
+            }
+        }
+    }
+</script>
+

+ 110 - 146
src/views/markets/modules/agreementUnit/account/goodsConsumeForm.vue

@@ -1,111 +1,15 @@
 <template>
     <div>
-<!--        <a-row type="flex">-->
-<!--            <a-col :flex="1">1 / 3</a-col>-->
-<!--            <a-col :flex="2">2 / 3</a-col>-->
-<!--        </a-row>-->
-<!--        <a-row type="flex" style="flex-direction: row">-->
-<!--            <a-col :flex="1">-->
-<!--                <a-spin :spinning="confirmLoading">-->
-<!--                    <j-form-container >-->
-<!--                        <a-form-model ref="form" :model="model" slot="detail">-->
-<!--                            <a-row>-->
-<!--                                <a-col :span="24">-->
-<!--                                    <a-form-model-item label="支付方式" :labelCol="labelCol" :wrapperCol="wrapperCol" prop="paymentMethod">-->
-<!--                                        <a-select-->
-<!--                                                v-model="model.paymentMethod"-->
-<!--                                                style="width: 30%"-->
-<!--                                                placeholder="支付方式" >-->
-<!--                                            <a-select-option-->
-<!--                                                    v-for="(item, index) in paymentMethodList"-->
-<!--                                                    :key="index"-->
-<!--                                                    :value="item.id"-->
-<!--                                            >{{ item.name }}</a-select-option>-->
-<!--                                        </a-select>-->
-<!--                                    </a-form-model-item>-->
-<!--                                </a-col>-->
-<!--                                <a-col :span="24">-->
-<!--                                    <a-form-model-item label="金额" :labelCol="labelCol" :wrapperCol="wrapperCol" prop="price">-->
-<!--                                        <a-input-number-->
-<!--                                                v-model="model.price"-->
-<!--                                                placeholder="请输入金额"-->
-<!--                                                style="width: 30%"-->
-<!--                                        />-->
-<!--                                    </a-form-model-item>-->
-<!--                                </a-col>-->
-<!--                                <a-col :span="24">-->
-<!--                                    <a-form-model-item label="备注" :labelCol="labelCol" :wrapperCol="wrapperCol" prop="remarks">-->
-<!--                                        <a-textarea-->
-<!--                                                v-model="model.remarks"-->
-<!--                                                rows="4"-->
-<!--                                                placeholder="请输入备注"-->
-<!--                                                style="width: 90%"-->
-<!--                                        />-->
-<!--                                    </a-form-model-item>-->
-<!--                                </a-col>-->
-
-<!--                            </a-row>-->
-<!--                        </a-form-model>-->
-<!--                    </j-form-container>-->
-<!--                </a-spin>-->
-<!--            </a-col>-->
-<!--            <a-col :flex="2">-->
-<!--                <a-spin :spinning="confirmLoading">-->
-<!--                    <j-form-container >-->
-<!--                        <a-form-model ref="form" :model="model" slot="detail">-->
-<!--                            <a-row>-->
-<!--                                <a-col :span="24">-->
-<!--                                    <a-form-model-item label="支付方式" :labelCol="labelCol" :wrapperCol="wrapperCol" prop="paymentMethod">-->
-<!--                                        <a-select-->
-<!--                                                v-model="model.paymentMethod"-->
-<!--                                                style="width: 30%"-->
-<!--                                                placeholder="支付方式" >-->
-<!--                                            <a-select-option-->
-<!--                                                    v-for="(item, index) in paymentMethodList"-->
-<!--                                                    :key="index"-->
-<!--                                                    :value="item.id"-->
-<!--                                            >{{ item.name }}</a-select-option>-->
-<!--                                        </a-select>-->
-<!--                                    </a-form-model-item>-->
-<!--                                </a-col>-->
-<!--                                <a-col :span="24">-->
-<!--                                    <a-form-model-item label="金额" :labelCol="labelCol" :wrapperCol="wrapperCol" prop="price">-->
-<!--                                        <a-input-number-->
-<!--                                                v-model="model.price"-->
-<!--                                                placeholder="请输入金额"-->
-<!--                                                style="width: 30%"-->
-<!--                                        />-->
-<!--                                    </a-form-model-item>-->
-<!--                                </a-col>-->
-<!--                                <a-col :span="24">-->
-<!--                                    <a-form-model-item label="备注" :labelCol="labelCol" :wrapperCol="wrapperCol" prop="remarks">-->
-<!--                                        <a-textarea-->
-<!--                                                v-model="model.remarks"-->
-<!--                                                rows="4"-->
-<!--                                                placeholder="请输入备注"-->
-<!--                                        />-->
-<!--                                    </a-form-model-item>-->
-<!--                                </a-col>-->
-
-<!--                            </a-row>-->
-<!--                        </a-form-model>-->
-<!--                    </j-form-container>-->
-<!--                </a-spin>-->
-<!--                <div style="height: 200px">-->
-
-<!--                </div>-->
-<!--            </a-col>-->
-<!--        </a-row>-->
         <div class="contentGoods">
             <div class="left">
                 <a-spin :spinning="confirmLoading">
                     <j-form-container >
-                        <a-form-model ref="form" :model="model" slot="detail">
+                        <a-form-model ref="form" :model="model" :rules="validatorRules" slot="detail">
                             <a-row>
                                 <a-col :span="24">
-                                    <a-form-model-item label="消费类目" :labelCol="labelCol" :wrapperCol="wrapperCol" prop="stockType">
+                                    <a-form-model-item label="消费类目" :labelCol="labelCol" :wrapperCol="wrapperCol" prop="categoryId">
                                         <a-select
-                                                v-model="model.stockType"
+                                                v-model="model.categoryId"
                                                 style="width: 90%"
                                                 @change="changeStockType"
                                                 placeholder="消费类目" >
@@ -118,10 +22,10 @@
                                     </a-form-model-item>
                                 </a-col>
                                 <a-col :span="24">
-                                    <a-form-model-item label="消费金额" :labelCol="labelCol" :wrapperCol="wrapperCol" prop="amount">
+                                    <a-form-model-item label="消费金额" :labelCol="labelCol" :wrapperCol="wrapperCol" prop="payPrice">
                                         <a-input-number
                                                 disabled
-                                                v-model="model.amount"
+                                                v-model="model.payPrice"
                                                 placeholder="请输入金额"
                                                 style="width: 90%"
                                         />
@@ -146,14 +50,14 @@
             <div class="right">
                 <a-spin :spinning="confirmLoading">
                     <j-form-container>
-                        <a-form-model ref="form" :model="model" slot="detail">
+                        <a-form-model ref="form" :model="modelCommodity" slot="detail">
                             <a-row>
                                 <a-col :span="9" v-if="type == 1">
-                                    <a-form-model-item label="" :labelCol="labelCol" :wrapperCol="wrapperCol" prop="childStockType">
+                                    <a-form-model-item label="" :labelCol="labelCol" :wrapperCol="wrapperCol" prop="categoryTwoId">
                                         <a-select
-                                                v-model="model.childStockType"
+                                                v-model="modelCommodity.categoryTwoId"
                                                 style="width: 100%"
-                                                @change="changeStockType"
+                                                @change="handleSearch()"
                                                 placeholder="类别" >
                                             <a-select-option
                                                     v-for="(item, index) in childStockTypeList"
@@ -208,17 +112,24 @@
                                     v-model="record.sellingPrice"
                                     placeholder="请输入金额"
                                     style="width: 90%"
+                                    :min="0"
                                     @change="e=>changePrice(e,record)"
                             />
                         </template>
                         <template slot="numberSlot" slot-scope="text,record">
-                            <a-input-number
+                            <a-input-number :class="record.id"
                                     v-model="record.number"
                                     placeholder="请输入数量"
                                     style="width: 90%"
+                                    :min="0"
+                                    :disabled="record.sellingPrice == 0"
                                     @change="e=>changeNumber(e,record)"
                             />
                         </template>
+                        <template slot="inventorySlot" slot-scope="text,record">
+                            {{record.inventory - record.number}}
+                        </template>
+
                     </a-table>
                 </div>
             </div>
@@ -240,6 +151,12 @@
                 type: Boolean,
                 default: false,
                 required: false
+            },
+            agreementModel:{
+                type: Object,
+                required: false,
+                default: () => {
+                }
             }
         },
         mixins:[JeecgListMixin, mixinDevice],
@@ -247,10 +164,18 @@
             return {
                 confirmLoading: false,
                 model: {
-                    stockType:'',
-                    amount:0,
+                    categoryId:'',
+                    payPrice:0,
                     remarks:'',
-                    childStockType:'',
+                },
+                modelCommodity:{
+                    categoryId:'',
+                    categoryTwoId:'',
+                    goodsId:'',
+                    shopPrice:0,
+                    buyNumber:0,
+                    amount:0,
+                    remarks:'',//协议单位名称+备注
                 },
                 labelCol: {
                     xs: { span: 24 },
@@ -260,12 +185,18 @@
                     xs: { span: 24 },
                     sm: { span: 18 },
                 },
+                validatorRules: {
+                    categoryId: [
+                        { required: true, message: '请选择消费类目!'},
+                    ],
+                },
                 paymentMethodList: [],
                 stockTypeList:[],
                 childStockTypeList:[],
                 type:1,
                 url: {
                     list: "/rooms/cesGoods/queryList",
+                    addEntry: "/business/busAgreementOrderFee/addEntry",
                 },
                 // 表头
                 columns: [
@@ -289,9 +220,11 @@
                     {
                         title:'剩余库存',
                         align:"center",
-                        dataIndex: 'inventory'
+                        dataIndex: 'inventory',
+                        scopedSlots: { customRender: 'inventorySlot' }
                     },
                 ],
+                projectName:''
                 // loading:true,
                 // dataSource:[]
             }
@@ -315,7 +248,9 @@
                 // this.visible = true;
             },
             changeStockType(e){
+                this.modelCommodity.categoryTwoId = '';
                 var _this = this;
+                _this.childStockTypeList = []
                 httpAction(
                     "/rooms/cesStockType/getChildTypes?parentId="+e,
                     { },
@@ -329,8 +264,8 @@
             handleSearch(){
                 var typeId = "";
                 var search = "";
-                if (this.model.childStockType){
-                    typeId = this.model.childStockType;
+                if (this.modelCommodity.categoryTwoId){
+                    typeId = this.modelCommodity.categoryTwoId;
                 }
                 if (this.model.goodsName){
                     search = this.model.goodsName;
@@ -348,37 +283,63 @@
                 }
             },
             submitForm () {
-                console.log(9999)
-                const that = this;
-                that.$emit('ok');
+                var that = this;
+                var categoryIndex = this.stockTypeList.findIndex((s) => s.id == this.model.categoryId);
+                var _projectName = '';
+                if (categoryIndex > 0){
+                    _projectName = this.stockTypeList[categoryIndex].name
+                }
+                var goodsList = [];
+                var goodsDataSource = this.dataSource;
+                if (goodsDataSource && goodsDataSource.length > 0){
+                    for(let i=0;i<goodsDataSource.length;i++){
+                        var item = goodsDataSource[i];
+                        if (parseFloat(item.number) > 0 && parseFloat(item.sellingPrice) > 0){
+                            var _amount = parseFloat(item.number) * parseFloat(item.sellingPrice);
+                            var amount = parseFloat(_amount.toFixed(2));
+                            var goodsItem = {
+                                categoryId:that.model.categoryId,
+                                categoryTwoId:that.modelCommodity.categoryTwoId,
+                                goodsId:item.id,
+                                shopPrice:item.sellingPrice,
+                                buyNumber:item.number,
+                                amount:amount,
+                                remarks:that.agreementModel.customerName+','+that.model.remarks,//协议单位名称+备注
+                            }
+                            goodsList.push(goodsItem)
+                        }
+                    }
+                }
+                console.log(goodsList)
                 // 触发表单验证
-                // this.$refs.form.validate(valid => {
-                //     if (valid) {
-                //         that.confirmLoading = true;
-                //         let httpurl = '';
-                //         let method = '';
-                //         if(!this.model.id){
-                //             httpurl+=this.url.add;
-                //             method = 'post';
-                //             this.model.hotelId = hotelInfo.id;
-                //             this.model.agreementId = this.agreementModel.id;
-                //         }else{
-                //             httpurl+=this.url.edit;
-                //             method = 'put';
-                //         }
-                //         httpAction(httpurl,this.model,method).then((res)=>{
-                //             if(res.success){
-                //                 that.$message.success(res.message);
-                //                 that.$emit('ok');
-                //             }else{
-                //                 // that.$message.warning(res.message);
-                //             }
-                //         }).finally(() => {
-                //             that.confirmLoading = false;
-                //         })
-                //     }
-                //
-                // })
+                this.$refs.form.validate(valid => {
+                    if (valid) {
+                        that.confirmLoading = true;
+                        let httpurl = this.url.addEntry;
+                        let method = 'post';
+                        var data = {
+                            agreementUnitId:that.agreementModel.id,
+                            categoryId:that.model.categoryId,
+                            projectName:_projectName,
+                            type:3,
+                            payPrice:that.model.payPrice,
+                            remarks:that.model.remarks,
+                            commodityRecords:goodsList
+                        }
+                        console.log(data);
+                        httpAction(httpurl,data,method).then((res)=>{
+                            if(res.success){
+                                that.$message.success(res.message);
+                                that.$emit('ok');
+                            }else{
+                                that.$message.warning(res.message);
+                            }
+                        }).finally(() => {
+                            that.confirmLoading = false;
+                        })
+                    }
+
+                })
             },
             changePrice(e,record){
                 var _amount = 0;
@@ -387,12 +348,13 @@
                     for (var i = 0; i < goodsList.length; i++) {
                         var goods = goodsList[i];
                         if (parseFloat(goods.number) > 0){
-                            var money = parseFloat( goods.sellingPrice )* parseFloat(goods.number)
+                            var _money = parseFloat( goods.sellingPrice )* parseFloat(goods.number)
+                            var money = parseFloat(_money.toFixed(2))
                             _amount = _amount+ money;
                         }
                     }
                 }
-                this.model.amount = _amount;
+                this.model.payPrice = _amount;
             },
             changeNumber(e,record){
                 var _amount = 0;
@@ -401,12 +363,14 @@
                     for (var i = 0; i < goodsList.length; i++) {
                         var goods = goodsList[i];
                         if (parseFloat(goods.number) > 0){
-                            var money = parseFloat( goods.sellingPrice )* parseFloat(goods.number)
+                            var _money = parseFloat( goods.sellingPrice )* parseFloat(goods.number)
+                            var money = parseFloat(_money.toFixed(2))
                             _amount = _amount+ money;
                         }
                     }
                 }
-                this.model.amount = _amount;
+                console.log(_amount)
+                this.model.payPrice = _amount;
             },
         }
     }

+ 49 - 4
src/views/markets/modules/agreementUnit/account/settlementForm.vue

@@ -4,9 +4,9 @@
             <a-form-model ref="form" :model="model" slot="detail">
                 <a-row>
                     <a-col :span="24">
-                        <a-form-model-item label="应收金额" :labelCol="labelCol" :wrapperCol="wrapperCol" prop="price">
+                        <a-form-model-item :label="maxMoney > 0 ?'应收金额':'应退金额'" :labelCol="labelCol" :wrapperCol="wrapperCol" prop="price">
                             <a-input-number disabled
-                                            v-model="maxMoney"
+                                            v-model="Math.abs(maxMoney)"
                                             style="width: 30%"
                             />
                         </a-form-model-item>
@@ -68,10 +68,21 @@
                 default: false,
                 required: false
             },
+            agreementModel:{
+                type: Object,
+                required: false,
+                default: () => {
+                }
+            },
             maxMoney: {
                 type: Number,
                 default: 200,
                 required: false
+            },
+            orderIds: {
+                type: String,
+                default: 200,
+                required: false
             }
         },
         data () {
@@ -87,6 +98,10 @@
                     sm: { span: 18 },
                 },
                 paymentMethodList: [],
+                url: {
+                    list: "/rooms/cesGoods/queryList",
+                    updateStatusBatch: "/business/busAgreementOrderFee/updateStatusBatch",
+                },
             }
         },
         created() {
@@ -108,9 +123,39 @@
                 // this.visible = true;
             },
             submitForm(){
-                console.log(888)
+                console.log(this.agreementModel)
                 const that = this;
-                that.$emit('ok');
+                if(this.model.price != this.maxMoney){
+                    that.$message.warning("支付金额应等于应收/应退金额");
+                    return;
+                }
+                that.confirmLoading = true;
+                let httpurl = this.url.updateStatusBatch;
+                let method = 'post';
+
+                var order = {
+                    agreementUnitId:that.agreementModel.id,
+                    projectName:that.maxMoney >=0?"结算收款":"结算退款",
+                    type:5,
+                    payPrice:that.maxMoney,
+                    payType:that.model.paymentMethod,
+                    remarks:that.model.remarks,
+                }
+                var data = {
+                    busAgreementOrderFee:order,
+                    orderIds:that.orderIds
+                }
+                console.log(data);
+                httpAction(httpurl,data,method).then((res)=>{
+                    if(res.success){
+                        that.$message.success(res.message);
+                        that.$emit('ok');
+                    }else{
+                        that.$message.warning(res.message);
+                    }
+                }).finally(() => {
+                    that.confirmLoading = false;
+                })
             },
         }
     }

+ 13 - 6
src/views/markets/modules/agreementUnit/account/settlementModal.vue

@@ -7,7 +7,7 @@
             @ok="handleOk"
             @cancel="handleCancel"
             cancelText="关闭">
-        <settlement-form ref="realForm" @ok="submitCallback" :disabled="disableSubmit" :maxMoney="maxMoney" :agreementModel="agreementModel"></settlement-form>
+        <settlement-form ref="realForm" @ok="submitCallback" :disabled="disableSubmit" :maxMoney="maxMoney" :orderIds="orderIds" :agreementModel="agreementModel"></settlement-form>
     </j-modal>
 </template>
 
@@ -26,15 +26,22 @@
                 default: () => {
                 }
             },
-            maxMoney: {
-                type: Number,
-                default: 200,
-                required: false
-            }
+            // maxMoney: {
+            //     type: Number,
+            //     default: 200,
+            //     required: false
+            // },
+            // orderIds: {
+            //     type: String,
+            //     default: 200,
+            //     required: false
+            // }
         },
         data () {
             return {
                 title:'',
+                orderIds:'',
+                maxMoney:0,
                 width:1000,
                 visible: false,
                 disableSubmit: false

+ 252 - 10
src/views/markets/modules/agreementUnit/agreementAccount.vue

@@ -66,7 +66,7 @@
             </a-row>
         </div>
         <div class="oper">
-            <div class="oper-wrapper">
+            <div class="oper-wrapper" v-if="settleType != 2">
                 <div class="oper-item">
                     <a-button @click="handleClick(1)">
                         <a-icon type="file" />
@@ -114,8 +114,7 @@
                     <a-range-picker v-model="rangeValue" @change="onRangeChange" :format="dateFormat" />
                 </span>
                 <span style="display: inline-block; margin-left: 10px;">
-                    <a-button>
-                        <a-icon type="search" />
+                    <a-button @click="searchQuery" icon="search">
                         查询
                     </a-button>
                 </span>
@@ -126,28 +125,106 @@
                 </span>
             </div>
         </div>
-        <div class="cotent">
+        <div class="cotent" style="margin-top: 20px;">
+            <a-table
+                    ref="table"
+                    size="middle"
+                    :scroll="{x:true}"
+                    bordered
+                    rowKey="id"
+                    :columns="columns"
+                    :dataSource="dataSource"
+                    :pagination="ipagination"
+                    :loading="loading"
+                    :rowSelection="{selectedRowKeys: selectedRowKeys, onChange: onSelectChange}"
+                    class="j-table-force-nowrap"
+                    @change="handleTableChange">
 
+                <template slot="projectNameSlot" slot-scope="text, record">
+                    <span v-if="record.type == 3">
+<!--                        <a-tag color="green" @click="handleCommodityRecord(record)">-->
+<!--                            {{record.projectName}}-->
+<!--                        </a-tag>-->
+                        <a-button class="project_name" @click="handleCommodityRecord(record)">
+                          {{record.categoryId_dictText}}
+                        </a-button>
+                    </span>
+                    <span v-else>
+                        <span v-if="record.categoryId != null">
+                            {{record.categoryId_dictText}}
+                        </span>
+                        <span v-else>
+                            {{record.projectName}}
+                        </span>
+                    </span>
+                </template>
+                <template slot="orderNoSlot" slot-scope="text, record">
+                    <a style="color: #4172db">{{record.orderNo}}</a>
+                </template>
+                <template slot="saleSlot" slot-scope="text, record">
+                    <span v-if="record.type == 1 || record.type == 2">
+                        -
+                    </span>
+                    <span v-else>
+                        <a-tag color="green">
+                            {{record.payPrice}}
+                        </a-tag>
+                    </span>
+                </template>
+                <template slot="paymentSlot" slot-scope="text, record">
+                    <span v-if="record.type == 1 || record.type == 2">
+                        <a-tag color="green" v-if="record.type == 1">
+                            {{record.payPrice}}
+                        </a-tag>
+                        <a-tag color="red" v-if="record.type == 2">
+                            -{{record.payPrice}}
+                        </a-tag>
+                    </span>
+                    <span v-else>
+                        -
+                    </span>
+                </template>
+                <template slot="statusSlot" slot-scope="text, record">
+                    <a-tag v-if="record.status == 2" color="green">已结算</a-tag>
+                    <a-tag v-else color="red">未结算</a-tag>
+                </template>
+                <span slot="action" slot-scope="text, record">
+                    <a v-if="record.type == 3" @click="handleGoodsReturn(record)">退货</a>
+                    <a-popconfirm v-if="record.status == 2" title="确定撤销结算吗?" @confirm="() => handleRevoke(record)">
+                      <a>撤销</a>
+                    </a-popconfirm>
+                </span>
+            </a-table>
         </div>
 
         <goods-consume-modal ref="goodsConsumeForm" @ok="modalFormOk" :agreementModel="agreementUnitInfo"></goods-consume-modal>
-        <account-enter-modal ref="accountEnterForm" @ok="modalFormOk"></account-enter-modal>
-        <account-reverse-entry-modal :maxMoney="parseFloat(accountModel.consume)" ref="accountReverseEnterForm" @ok="modalFormOk"></account-reverse-entry-modal>
-        <account-transfer-modal :maxMoney="parseFloat(accountModel.consume)" ref="accountTransferForm" @ok="modalFormOk"></account-transfer-modal>
-        <settlement-modal :maxMoney="parseFloat(accountModel.consume)" ref="settlementForm" @ok="modalFormOk"></settlement-modal>
+        <account-enter-modal ref="accountEnterForm" @ok="modalFormOk" :agreementModel="agreementUnitInfo"></account-enter-modal>
+        <account-reverse-entry-modal :maxMoney="parseFloat(accountModel.consume)" ref="accountReverseEnterForm" :agreementModel="agreementUnitInfo" @ok="modalFormOk"></account-reverse-entry-modal>
+        <account-transfer-modal :maxMoney="parseFloat(accountModel.consume)" ref="accountTransferForm" :agreementModel="agreementUnitInfo" @ok="modalFormOk"></account-transfer-modal>
+        <settlement-modal ref="settlementForm" :agreementModel="agreementUnitInfo" @ok="modalFormOk"></settlement-modal>
+        <commodity-record-modal ref="commodityRecordForm" @ok="modalFormOk"></commodity-record-modal>
+        <commodity-return-modal ref="commodityReturnForm" @ok="modalFormOk"></commodity-return-modal>
     </a-card>
 </template>
 
 <script>
 import moment from 'moment';
+import { httpAction, getAction } from "@/api/manage";
 import GoodsConsumeModal from './account/goodsConsumeModal'
 import AccountEnterModal from './account/accountEnterModal'
 import AccountReverseEntryModal from './account/accountReverseEntryModal'
 import AccountTransferModal from './account/accountTransferModal'
 import SettlementModal from './account/settlementModal'
+import '@/assets/less/TableExpand.less'
+import { mixinDevice } from '@/utils/mixin'
+import { JeecgListMixin } from '@/mixins/JeecgListMixin'
+import CommodityRecordModal from './account/commodityRecordModal'
+import CommodityReturnModal from './account/commodityReturnModal'
+
 export default {
     name: 'agreementAccount',
-    components: { SettlementModal, AccountTransferModal, AccountReverseEntryModal, AccountEnterModal, GoodsConsumeModal },
+    mixins:[JeecgListMixin, mixinDevice],
+    components: { CommodityReturnModal, CommodityRecordModal, SettlementModal, AccountTransferModal, AccountReverseEntryModal, AccountEnterModal, GoodsConsumeModal },
     data() {
         var my_date = new Date();
         var first_date = new Date(my_date.getFullYear(), my_date.getMonth(), 1);
@@ -163,7 +240,86 @@ export default {
                 payment: '0',
                 used: '0',
                 surplus: '0'
-            }
+            },
+            // 表头
+            columns: [
+                {
+                    title:'项目名称',
+                    align:"center",
+                    dataIndex: 'projectName',
+                    scopedSlots: { customRender: 'projectNameSlot' }
+                },
+                {
+                    title:'订单号',
+                    align:"center",
+                    dataIndex: 'orderNo',
+                    scopedSlots: { customRender: 'orderNoSlot' }
+                },
+                {
+                    title:'客人信息',
+                    align:"center",
+                    dataIndex: 'guest'
+                },
+                {
+                    title:'付款方式',
+                    align:"center",
+                    dataIndex: 'payType_dictText',
+                    customRender: function (text) {
+                        return !text?"-":text
+                    },
+                },
+                {
+                    title:'消费',
+                    align:"center",
+                    scopedSlots: { customRender: 'saleSlot' }
+                },
+                {
+                    title:'付款',
+                    align:"center",
+                    scopedSlots: { customRender: 'paymentSlot' }
+                },
+                {
+                    title:'状态',
+                    align:"center",
+                    dataIndex: 'status',
+                    scopedSlots: { customRender: 'statusSlot' }
+                },
+                {
+                    title:'备注',
+                    align:"center",
+                    dataIndex: 'remarks'
+                },
+                {
+                    title:'操作员',
+                    align:"center",
+                    dataIndex: 'createBy'
+                },
+                {
+                    title:'操作时间',
+                    align:"center",
+                    dataIndex: 'createdTime',
+                    customRender:function (text) {
+                        return !text?"":(text.length>10?text.substr(0,10):text)
+                    }
+                },
+                {
+                    title: '操作',
+                    dataIndex: 'action',
+                    align:"center",
+                    fixed:"right",
+                    width:147,
+                    scopedSlots: { customRender: 'action' }
+                }
+            ],
+            url: {
+                list: "/business/busAgreementOrderFee/list?status=1",
+                baseList: "/business/busAgreementOrderFee/list",
+                delete: "/business/busAgreementOrderFee/delete",
+                deleteBatch: "/business/busAgreementOrderFee/deleteBatch",
+                exportXlsUrl: "/business/busAgreementOrderFee/exportXls",
+                importExcelUrl: "business/busAgreementOrderFee/importExcel",
+                revoke: "/business/busAgreementOrderFee/revoke",
+            },
         }
     },
     activated() {
@@ -192,9 +348,18 @@ export default {
         },
         onTypeChange(e) {
             console.log(e);
+            console.log(this.settleType);
+            if (this.settleType == 1 || this.settleType == 2){
+                this.url.list = this.url.baseList +"?status="+this.settleType;
+            }else{
+                this.url.list = this.url.baseList;
+            }
+
+            this.loadData(1);
         },
         handleClick(type){
             console.log('当前类型:  '+type);
+            console.log(this.selectedRowKeys)
             if (type == 1){
                 this.$refs.goodsConsumeForm.edit();
                 this.$refs.goodsConsumeForm.title="入账";
@@ -206,13 +371,46 @@ export default {
                 this.$refs.accountEnterForm.disableSubmit = true;
             }
             else if(type == 3){
+                if (this.selectedRowKeys.length <= 0) {
+                    this.$message.warning("请选择一条记录!");
+                    return;
+                }
+                let ids = '';
+                this.selectedRowKeys.forEach(function (val) {
+                    ids += val + ",";
+                });
                 this.$refs.accountTransferForm.edit();
                 this.$refs.accountTransferForm.title="转账";
                 this.$refs.accountTransferForm.disableSubmit = true;
             }
             else if(type == 4){
+                if (this.selectedRowKeys.length <= 0) {
+                    this.$message.warning("请选择一条记录!");
+                    return;
+                }
+                let ids = '';
+                var idList = []
+                this.selectedRowKeys.forEach(function (val) {
+                    ids += val + ",";
+                    idList.push(val)
+                });
+                var dataSource = this.dataSource;
+                var amount = 0;
+                if(dataSource && dataSource.length > 0){
+                    for(var a=0;a<dataSource.length;a++){
+                        if (idList.indexOf(dataSource[a].id) >= 0){
+                            if (dataSource[a].type == 2){
+                                amount -= parseFloat(dataSource[a].payPrice)
+                            }else{
+                                amount += parseFloat(dataSource[a].payPrice)
+                            }
+                        }
+                    }
+                }
                 this.$refs.settlementForm.edit();
                 this.$refs.settlementForm.title="结算";
+                this.$refs.settlementForm.maxMoney=amount;
+                this.$refs.settlementForm.orderIds=ids;
                 this.$refs.settlementForm.disableSubmit = true;
             }
             else if(type == 5){
@@ -223,6 +421,42 @@ export default {
         },
         modalFormOk() {
         },
+        handleCommodityRecord(record){
+            //打开商品消费明细
+            console.log(record)
+            this.$refs.commodityRecordForm.show();
+            this.$refs.commodityRecordForm.title="详细信息";
+            this.$refs.commodityRecordForm.agreementOrderFeeId = record.id;
+            this.$refs.commodityRecordForm.disableSubmit = true;
+        },
+        handleGoodsReturn(record){
+            //退货
+            console.log(record)
+            this.$refs.commodityReturnForm.show();
+            this.$refs.commodityReturnForm.title="退货";
+            this.$refs.commodityReturnForm.agreementOrderFeeId = record.id;
+            this.$refs.commodityReturnForm.disableSubmit = true;
+        },
+        handleRevoke(record){
+            const that = this;
+            that.confirmLoading = true;
+            let httpurl = this.url.revoke;
+            let method = 'post';
+            var data = {
+                id:record.id
+            }
+            console.log(data);
+            httpAction(httpurl,data,method).then((res)=>{
+                if(res.success){
+                    that.$message.success(res.message);
+                    that.$emit('ok');
+                }else{
+                    that.$message.warning(res.message);
+                }
+            }).finally(() => {
+                that.confirmLoading = false;
+            })
+        }
     }
 }
 </script>
@@ -268,5 +502,13 @@ export default {
     display: flex;
     align-items: center;
 }
+.project_name{
+    color: #2e9c69;
+    border-color: #2e9c69;
+}
+.project_name:hover{
+background-color: #2e9c69;
+    color: white;
+}
 </style>