gqx hace 2 años
padre
commit
49ba7f5e65

+ 10 - 0
src/views/room/fangtailive.vue

@@ -556,6 +556,12 @@
     <template v-else-if="activeKey === '5'">
       <leasegoods></leasegoods>
     </template>
+    <template v-else-if="activeKey === '6'">
+      <membermessage></membermessage>
+    </template>
+    <template v-else-if="activeKey === '7'">
+      <membergoodsmanage></membergoodsmanage>
+    </template>
     <upkeep-room-modal ref="modalForm" @ok="modalFormOk"></upkeep-room-modal>
     <bill-room-info-modal
       ref="ModalBillRoomInfo"
@@ -595,6 +601,8 @@ import calendarfangtai from "./calendarfangtai";
 import forwardfangtai from "./forwardfangtai";
 import guestorders from "./guestorders";
 import leasegoods from "./leasegoods";
+import membermessage from "./membermessage";
+import membergoodsmanage from "./membergoodsmanage";
 import { TreeSelect } from "ant-design-vue";
 import moment from "moment";
 const SHOW_PARENT = TreeSelect.SHOW_PARENT;
@@ -613,6 +621,8 @@ export default {
     guestorders,
     forwardfangtai,
     leasegoods,
+    membermessage,
+    membergoodsmanage
   },
   data() {
     return {

+ 267 - 0
src/views/room/membergoodsmanage.vue

@@ -0,0 +1,267 @@
+<template>
+  <a-card :bordered="false">
+    <!-- 查询区域 -->
+    <div class="table-page-search-wrapper">
+      <a-form layout="inline" @keyup.enter.native="searchQuery">
+        <a-row :gutter="24">
+        </a-row>
+      </a-form>
+    </div>
+    <!-- 查询区域-END -->
+
+    <!-- 操作按钮区域 -->
+    <div class="table-operator">
+      <a-button @click="handleAdd" type="primary" icon="plus">新增</a-button>
+      <a-button type="primary" icon="download" @click="handleExportXls('bus_member_goods_manage')">导出</a-button>
+      <a-upload name="file" :showUploadList="false" :multiple="false" :headers="tokenHeader" :action="importExcelUrl" @change="handleImportExcel">
+        <a-button type="primary" icon="import">导入</a-button>
+      </a-upload>
+      <!-- 高级查询区域 -->
+      <j-super-query :fieldList="superFieldList" ref="superQueryModal" @handleSuperQuery="handleSuperQuery"></j-super-query>
+      <a-dropdown v-if="selectedRowKeys.length > 0">
+        <a-menu slot="overlay">
+          <a-menu-item key="1" @click="batchDel"><a-icon type="delete"/>删除</a-menu-item>
+        </a-menu>
+        <a-button style="margin-left: 8px"> 批量操作 <a-icon type="down" /></a-button>
+      </a-dropdown>
+    </div>
+
+    <!-- table区域-begin -->
+    <div>
+      <div class="ant-alert ant-alert-info" style="margin-bottom: 16px;">
+        <i class="anticon anticon-info-circle ant-alert-icon"></i> 已选择 <a style="font-weight: 600">{{ selectedRowKeys.length }}</a>项
+        <a style="margin-left: 24px" @click="onClearSelected">清空</a>
+      </div>
+
+      <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="htmlSlot" slot-scope="text">
+          <div v-html="text"></div>
+        </template>
+        <template slot="imgSlot" slot-scope="text,record">
+          <span v-if="!text" style="font-size: 12px;font-style: italic;">无图片</span>
+          <img v-else :src="getImgView(text)" :preview="record.id" height="25px" alt="" style="max-width:80px;font-size: 12px;font-style: italic;"/>
+        </template>
+        <template slot="fileSlot" slot-scope="text">
+          <span v-if="!text" style="font-size: 12px;font-style: italic;">无文件</span>
+          <a-button
+            v-else
+            :ghost="true"
+            type="primary"
+            icon="download"
+            size="small"
+            @click="downloadFile(text)">
+            下载
+          </a-button>
+        </template>
+
+        <span slot="action" slot-scope="text, record">
+          <a @click="handleEdit(record)">编辑</a>
+
+          <a-divider type="vertical" />
+          <a-dropdown>
+            <a class="ant-dropdown-link">更多 <a-icon type="down" /></a>
+            <a-menu slot="overlay">
+              <a-menu-item>
+                <a @click="handleDetail(record)">详情</a>
+              </a-menu-item>
+              <a-menu-item>
+                <a-popconfirm title="确定删除吗?" @confirm="() => handleDelete(record.id)">
+                  <a>删除</a>
+                </a-popconfirm>
+              </a-menu-item>
+            </a-menu>
+          </a-dropdown>
+        </span>
+
+      </a-table>
+    </div>
+
+    <bus-member-goods-manage-modal ref="modalForm" @ok="modalFormOk"></bus-member-goods-manage-modal>
+  </a-card>
+</template>
+
+<script>
+
+  import '@/assets/less/TableExpand.less'
+  import { mixinDevice } from '@/utils/mixin'
+  import { JeecgListMixin } from '@/mixins/JeecgListMixin'
+  import BusMemberGoodsManageModal from './modules/membergoodsmanage/BusMemberGoodsManageModal'
+
+  export default {
+    name: 'BusMemberGoodsManageList',
+    mixins:[JeecgListMixin, mixinDevice],
+    components: {
+      BusMemberGoodsManageModal
+    },
+    data () {
+      return {
+        description: 'bus_member_goods_manage管理页面',
+        // 表头
+        columns: [
+          {
+            title: '#',
+            dataIndex: '',
+            key:'rowIndex',
+            width:60,
+            align:"center",
+            customRender:function (t,r,index) {
+              return parseInt(index)+1;
+            }
+          },
+          {
+            title:'关联租户',
+            align:"center",
+            dataIndex: 'tenantId'
+          },
+          {
+            title:'关联酒店',
+            align:"center",
+            dataIndex: 'hotelId'
+          },
+          {
+            title:'物品类型',
+            align:"center",
+            dataIndex: 'goodsType'
+          },
+          {
+            title:'物品名称',
+            align:"center",
+            dataIndex: 'goodsName'
+          },
+          {
+            title:'参考价值',
+            align:"center",
+            dataIndex: 'reference Value'
+          },
+          {
+            title:'客人类型',
+            align:"center",
+            dataIndex: 'customerType'
+          },
+          {
+            title:'入住订单id',
+            align:"center",
+            dataIndex: 'livingOrderId'
+          },
+          {
+            title:'房号号',
+            align:"center",
+            dataIndex: 'roomNo'
+          },
+          {
+            title:'客人姓名',
+            align:"center",
+            dataIndex: 'customerName'
+          },
+          {
+            title:'电话',
+            align:"center",
+            dataIndex: 'mobile'
+          },
+          {
+            title:'登记单号',
+            align:"center",
+            dataIndex: 'orderNo'
+          },
+          {
+            title:'备注',
+            align:"center",
+            dataIndex: 'remark'
+          },
+          {
+            title:'创建时间',
+            align:"center",
+            dataIndex: 'createDate',
+            customRender:function (text) {
+              return !text?"":(text.length>10?text.substr(0,10):text)
+            }
+          },
+          {
+            title:'创建人',
+            align:"center",
+            dataIndex: 'createUser'
+          },
+          {
+            title:'领取人',
+            align:"center",
+            dataIndex: 'receiverUser'
+          },
+          {
+            title:'领取时间',
+            align:"center",
+            dataIndex: 'receiverDate',
+            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/busMemberGoodsManage/list",
+          delete: "/business/busMemberGoodsManage/delete",
+          deleteBatch: "/business/busMemberGoodsManage/deleteBatch",
+          exportXlsUrl: "/business/busMemberGoodsManage/exportXls",
+          importExcelUrl: "business/busMemberGoodsManage/importExcel",
+          
+        },
+        dictOptions:{},
+        superFieldList:[],
+      }
+    },
+    created() {
+    this.getSuperFieldList();
+    },
+    computed: {
+      importExcelUrl: function(){
+        return `${window._CONFIG['domianURL']}/${this.url.importExcelUrl}`;
+      },
+    },
+    methods: {
+      initDictConfig(){
+      },
+      getSuperFieldList(){
+        let fieldList=[];
+        fieldList.push({type:'string',value:'tenantId',text:'关联租户'})
+        fieldList.push({type:'string',value:'hotelId',text:'关联酒店'})
+        fieldList.push({type:'int',value:'goodsType',text:'物品类型'})
+        fieldList.push({type:'string',value:'goodsName',text:'物品名称'})
+        fieldList.push({type:'string',value:'reference Value',text:'参考价值'})
+        fieldList.push({type:'int',value:'customerType',text:'客人类型'})
+        fieldList.push({type:'string',value:'livingOrderId',text:'入住订单id'})
+        fieldList.push({type:'string',value:'roomNo',text:'房号号'})
+        fieldList.push({type:'string',value:'customerName',text:'客人姓名'})
+        fieldList.push({type:'string',value:'mobile',text:'电话'})
+        fieldList.push({type:'string',value:'orderNo',text:'登记单号'})
+        fieldList.push({type:'string',value:'remark',text:'备注'})
+        fieldList.push({type:'date',value:'createDate',text:'创建时间'})
+        fieldList.push({type:'string',value:'createUser',text:'创建人'})
+        fieldList.push({type:'string',value:'receiverUser',text:'领取人'})
+        fieldList.push({type:'date',value:'receiverDate',text:'领取时间'})
+        this.superFieldList = fieldList
+      }
+    }
+  }
+</script>
+<style scoped>
+  @import '~@assets/less/common.less';
+</style>

+ 234 - 0
src/views/room/membermessage.vue

@@ -0,0 +1,234 @@
+<template>
+  <a-card :bordered="false">
+    <!-- 查询区域 -->
+    <div class="table-page-search-wrapper">
+      <a-form layout="inline" @keyup.enter.native="searchQuery">
+        <a-row :gutter="24">
+        </a-row>
+      </a-form>
+    </div>
+    <!-- 查询区域-END -->
+
+    <!-- 操作按钮区域 -->
+    <div class="table-operator">
+      <a-button @click="handleAdd" type="primary" icon="plus">新增</a-button>
+      <a-button type="primary" icon="download" @click="handleExportXls('bus_member_message')">导出</a-button>
+      <a-upload name="file" :showUploadList="false" :multiple="false" :headers="tokenHeader" :action="importExcelUrl" @change="handleImportExcel">
+        <a-button type="primary" icon="import">导入</a-button>
+      </a-upload>
+      <!-- 高级查询区域 -->
+      <j-super-query :fieldList="superFieldList" ref="superQueryModal" @handleSuperQuery="handleSuperQuery"></j-super-query>
+      <a-dropdown v-if="selectedRowKeys.length > 0">
+        <a-menu slot="overlay">
+          <a-menu-item key="1" @click="batchDel"><a-icon type="delete"/>删除</a-menu-item>
+        </a-menu>
+        <a-button style="margin-left: 8px"> 批量操作 <a-icon type="down" /></a-button>
+      </a-dropdown>
+    </div>
+
+    <!-- table区域-begin -->
+    <div>
+      <div class="ant-alert ant-alert-info" style="margin-bottom: 16px;">
+        <i class="anticon anticon-info-circle ant-alert-icon"></i> 已选择 <a style="font-weight: 600">{{ selectedRowKeys.length }}</a>项
+        <a style="margin-left: 24px" @click="onClearSelected">清空</a>
+      </div>
+
+      <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="htmlSlot" slot-scope="text">
+          <div v-html="text"></div>
+        </template>
+        <template slot="imgSlot" slot-scope="text,record">
+          <span v-if="!text" style="font-size: 12px;font-style: italic;">无图片</span>
+          <img v-else :src="getImgView(text)" :preview="record.id" height="25px" alt="" style="max-width:80px;font-size: 12px;font-style: italic;"/>
+        </template>
+        <template slot="fileSlot" slot-scope="text">
+          <span v-if="!text" style="font-size: 12px;font-style: italic;">无文件</span>
+          <a-button
+            v-else
+            :ghost="true"
+            type="primary"
+            icon="download"
+            size="small"
+            @click="downloadFile(text)">
+            下载
+          </a-button>
+        </template>
+
+        <span slot="action" slot-scope="text, record">
+          <a @click="handleEdit(record)">编辑</a>
+
+          <a-divider type="vertical" />
+          <a-dropdown>
+            <a class="ant-dropdown-link">更多 <a-icon type="down" /></a>
+            <a-menu slot="overlay">
+              <a-menu-item>
+                <a @click="handleDetail(record)">详情</a>
+              </a-menu-item>
+              <a-menu-item>
+                <a-popconfirm title="确定删除吗?" @confirm="() => handleDelete(record.id)">
+                  <a>删除</a>
+                </a-popconfirm>
+              </a-menu-item>
+            </a-menu>
+          </a-dropdown>
+        </span>
+
+      </a-table>
+    </div>
+
+    <bus-member-message-modal ref="modalForm" @ok="modalFormOk"></bus-member-message-modal>
+  </a-card>
+</template>
+
+<script>
+
+  import '@/assets/less/TableExpand.less'
+  import { mixinDevice } from '@/utils/mixin'
+  import { JeecgListMixin } from '@/mixins/JeecgListMixin'
+  import BusMemberMessageModal from './modules/membermessage/BusMemberMessageModal'
+
+  export default {
+    name: 'BusMemberMessageList',
+    mixins:[JeecgListMixin, mixinDevice],
+    components: {
+      BusMemberMessageModal
+    },
+    data () {
+      return {
+        description: 'bus_member_message管理页面',
+        // 表头
+        columns: [
+          {
+            title: '#',
+            dataIndex: '',
+            key:'rowIndex',
+            width:60,
+            align:"center",
+            customRender:function (t,r,index) {
+              return parseInt(index)+1;
+            }
+          },
+          {
+            title:'关联租户',
+            align:"center",
+            dataIndex: 'tenantId'
+          },
+          {
+            title:'关联酒店',
+            align:"center",
+            dataIndex: 'hotelId'
+          },
+          {
+            title:'房号id',
+            align:"center",
+            dataIndex: 'roomId'
+          },
+          {
+            title:'入住订单id',
+            align:"center",
+            dataIndex: 'livingOrderId'
+          },
+          {
+            title:'留言人',
+            align:"center",
+            dataIndex: 'userName'
+          },
+          {
+            title:'自动提醒时间',
+            align:"center",
+            dataIndex: 'remindDate',
+            customRender:function (text) {
+              return !text?"":(text.length>10?text.substr(0,10):text)
+            }
+          },
+          {
+            title:'有效时间',
+            align:"center",
+            dataIndex: 'validDate',
+            customRender:function (text) {
+              return !text?"":(text.length>10?text.substr(0,10):text)
+            }
+          },
+          {
+            title:'是否传达',
+            align:"center",
+            dataIndex: 'relay'
+          },
+          {
+            title:'留言内容',
+            align:"center",
+            dataIndex: 'contentBody'
+          },
+          {
+            title:'创建时间',
+            align:"center",
+            dataIndex: 'createDate',
+            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/busMemberMessage/list",
+          delete: "/business/busMemberMessage/delete",
+          deleteBatch: "/business/busMemberMessage/deleteBatch",
+          exportXlsUrl: "/business/busMemberMessage/exportXls",
+          importExcelUrl: "business/busMemberMessage/importExcel",
+          
+        },
+        dictOptions:{},
+        superFieldList:[],
+      }
+    },
+    created() {
+    this.getSuperFieldList();
+    },
+    computed: {
+      importExcelUrl: function(){
+        return `${window._CONFIG['domianURL']}/${this.url.importExcelUrl}`;
+      },
+    },
+    methods: {
+      initDictConfig(){
+      },
+      getSuperFieldList(){
+        let fieldList=[];
+        fieldList.push({type:'string',value:'tenantId',text:'关联租户'})
+        fieldList.push({type:'string',value:'hotelId',text:'关联酒店'})
+        fieldList.push({type:'string',value:'roomId',text:'房号id'})
+        fieldList.push({type:'string',value:'livingOrderId',text:'入住订单id'})
+        fieldList.push({type:'string',value:'userName',text:'留言人'})
+        fieldList.push({type:'date',value:'remindDate',text:'自动提醒时间'})
+        fieldList.push({type:'date',value:'validDate',text:'有效时间'})
+        fieldList.push({type:'int',value:'relay',text:'是否传达'})
+        fieldList.push({type:'string',value:'contentBody',text:'留言内容'})
+        fieldList.push({type:'date',value:'createDate',text:'创建时间'})
+        this.superFieldList = fieldList
+      }
+    }
+  }
+</script>
+<style scoped>
+  @import '~@assets/less/common.less';
+</style>

+ 105 - 25
src/views/room/modules/checkIn/BillRoomForm.vue

@@ -651,66 +651,81 @@
                     <a-tab-pane key="1" tab="收款">
                       <a-table
                         :columns="columns2"
-                        :data-source="model.data2"
+                        :data-source="model.orderFees"
                         :pagination="false"
                         rowKey="id"
                         :scroll="{ y: 160 }"
                       >
-                        <template slot="key1" slot-scope="text, record, index">
+                        <template
+                          slot="subjectTypeLabel"
+                          slot-scope="text, record, index"
+                        >
                           <div>
                             <!-- <a-input
                         style="margin: -5px 0"
                         :value="text"
                         @change="
-                          (e) => handleChange(e.target.value, index, 'key1')
+                          (e) => handleChange(e.target.value, index, 'subjectTypeLabel')
                         "
                       /> -->
                             <a-select
-                              v-model="model.data2[index].key1"
+                              v-model="model.orderFees[index].subjectType"
                               placeholder="费项"
                             >
-                              <a-select-option value="房费">
+                              <a-select-option :value="2">
                                 房费
                               </a-select-option>
-                              <a-select-option value="押金">
+                              <a-select-option :value="1">
                                 押金
                               </a-select-option>
                             </a-select>
                           </div>
                         </template>
-                        <template slot="key2" slot-scope="text, record, index">
+                        <template
+                          slot="payType"
+                          slot-scope="text, record, index"
+                        >
                           <div>
                             <a-select
-                              v-model="model.data2[index].key2"
+                              v-model="model.orderFees[index].payType"
                               placeholder="收款方式"
                             >
-                              <a-select-option value="现金">
-                                现金
-                              </a-select-option>
-                              <a-select-option value="支付宝">
-                                支付宝
+                              <a-select-option
+                                :value="item.id"
+                                v-for="item in payTypeList"
+                                :key="item.id"
+                              >
+                                {{ item.name }}
                               </a-select-option>
                             </a-select>
                           </div>
                         </template>
-                        <template slot="key4" slot-scope="text, record, index">
+                        <template slot="money" slot-scope="text, record, index">
                           <div>
-                            <a-input-number v-model="model.data2[index].key4" />
+                            <a-input-number
+                              v-model="record.money"
+                              :min="1"
+                              @change="presetNumChange($event, record)"
+                            />
                           </div>
                         </template>
                       </a-table>
                       <div
                         style="color: rgba(255, 141, 26, 1); font-weight: 200"
                       >
-                        <p style="margin-bottom: 2px">
+                        <!-- <p style="margin-bottom: 2px">
                           实收:支付宝600.00元;微信292.00元;现金1000.00元;会员卡400元。
+                        </p> -->
+                        <p style="margin-bottom: 2px">
+                          合计实款:{{ orderFeesAmout.toFixed(2) }}
                         </p>
-                        <p style="margin-bottom: 2px">合计实款:2922.00</p>
                       </div>
                       <div
                         style="color: rgba(255, 87, 51, 1); font-weight: 200"
                       >
-                        <p>欠费:-500.00元</p>
+                        <p v-if="orderFeesArrearsAmout < 0">
+                          欠费:{{ orderFeesArrearsAmout.toFixed(2) }}元
+                        </p>
                       </div>
                     </a-tab-pane>
                     <a-tab-pane key="2" tab="信用卡预授权">
@@ -846,29 +861,30 @@ const columns = [
     // width: 60,
   },
 ];
+
 const columns2 = [
   {
     title: "费项",
-    dataIndex: "key1",
+    dataIndex: "subjectType",
     width: "25%",
-    scopedSlots: { customRender: "key1" },
+    scopedSlots: { customRender: "subjectTypeLabel" },
   },
   {
     title: "收款方式",
-    dataIndex: "key2",
+    dataIndex: "payType",
     width: "25%",
-    scopedSlots: { customRender: "key2" },
+    scopedSlots: { customRender: "payType" },
   },
   {
     title: "应缴",
-    dataIndex: "key3",
+    dataIndex: "receivable",
     width: "25%",
   },
   {
     title: "实收",
-    dataIndex: "key4",
+    dataIndex: "money",
     width: "25%",
-    scopedSlots: { customRender: "key4" },
+    scopedSlots: { customRender: "money" },
   },
 ];
 const data = [];
@@ -947,6 +963,7 @@ export default {
         roomIds: [],
         livingRoomDayPrices: [],
         roomPrices: [],
+        orderFees: [],
       },
       labelCol: {
         xs: { span: 24 },
@@ -998,12 +1015,23 @@ export default {
       amount: 0,
       roomIdsIndex: 0,
       busMemberCardList: [],
+      payTypeList: [],
     };
   },
   computed: {
     formDisabled() {
       return this.disabled;
     },
+    orderFeesAmout() {
+      var sum = 0;
+      this.model.orderFees.forEach((item) => {
+        sum += item.money;
+      });
+      return sum;
+    },
+    orderFeesArrearsAmout() {
+      return this.orderFeesAmout - this.amount;
+    },
   },
   created() {
     var _info = JSON.parse(localStorage.getItem("storeInfo"));
@@ -1067,6 +1095,7 @@ export default {
         this.busMemberCardList = res.result.records;
       }
     });
+
     postAction("/rooms/cesAllDayPriceRule/fetch", { hotelId: _info.id }).then(
       (res) => {
         if (res.success) {
@@ -1088,6 +1117,9 @@ export default {
     //  this.getcesRoomLayout();
   },
   methods: {
+    presetNumChange(e, record) {
+      console.log(e, record);
+    },
     async getcesRoomLayout() {
       await getAction("/rooms/cesRoomLayout/list", {
         pageSize: 99999,
@@ -1099,6 +1131,16 @@ export default {
         }
       });
     },
+    async getbusRoomPayType() {
+      await getAction("/business/busRoomPayType/list", {
+        pageSize: 99999,
+        pageNo: 1,
+      }).then((res) => {
+        if (res.success) {
+          this.payTypeList = res.result.records;
+        }
+      });
+    },
     roomPriceSlnIdChange(e) {
       this.model.orderInfo.vipCustomerId = e;
     },
@@ -1390,6 +1432,16 @@ export default {
       }
       return deposit;
     },
+    getSubjectTypeLabel(value) {
+      switch (value) {
+        case 1:
+          return "押金";
+        case 2:
+          return "预收房费";
+        default:
+          return "";
+      }
+    },
     addList(roomLiveList, key) {
       console.log("roomLiveList", roomLiveList);
       this.modelDefault = Object.assign({}, this.modelDefault, {
@@ -1406,10 +1458,14 @@ export default {
       if (this.roomLayoutList.length === 0) {
         await this.getcesRoomLayout();
       }
+      if (this.payTypeList == 0) {
+        await this.getbusRoomPayType();
+      }
       if (this.model.roomIds && this.model.roomIds.length > 0) {
         this.activeKey = this.model.roomIds[0].id;
 
         var roomPrices = [];
+        var orderFees = [];
         this.model.roomIds.forEach((item) => {
           var roomLayout = this.roomLayoutList.find(
             (t) => (t.id = item.layoutId)
@@ -1425,6 +1481,27 @@ export default {
             layoutName: roomLayout ? roomLayout.name : "",
             layoutId: item.layoutId,
           });
+          var payType = this.payTypeList[0];
+
+          orderFees.push({
+            subjectType: 2,
+            subjectTypeLabel: "预收房费",
+            payType: payType ? payType.id : "",
+            payTypeLabel: payType ? payType.name : "",
+            receivable: item.marketPrice,
+            money: item.marketPrice,
+          });
+          var deposit = this.compuleDeposit(item.marketPrice);
+          if (deposit > 0) {
+            orderFees.push({
+              subjectType: 1,
+              subjectTypeLabel: "押金",
+              payType: payType ? payType.id : "",
+              payTypeLabel: payType ? payType.name : "",
+              receivable: deposit,
+              money: deposit,
+            });
+          }
         });
         this.model.roomPrices = roomPrices;
         var sum = 0;
@@ -1432,6 +1509,9 @@ export default {
           sum += item.roomFee + item.deposit;
         });
         this.amount = sum;
+
+        this.model.orderFees = orderFees;
+        console.log("this.model", this.model);
       }
       // console.log("this.amount2", JSON.stringify(this.amount));
     },

+ 206 - 0
src/views/room/modules/membergoodsmanage/BusMemberGoodsManageForm.vue

@@ -0,0 +1,206 @@
+<template>
+  <a-spin :spinning="confirmLoading">
+    <j-form-container :disabled="formDisabled">
+      <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="tenantId">
+              <a-input v-model="model.tenantId" placeholder="请输入关联租户"  ></a-input>
+            </a-form-model-item>
+          </a-col>
+          <a-col :span="24">
+            <a-form-model-item label="关联酒店" :labelCol="labelCol" :wrapperCol="wrapperCol" prop="hotelId">
+              <a-input v-model="model.hotelId" placeholder="请输入关联酒店"  ></a-input>
+            </a-form-model-item>
+          </a-col>
+          <a-col :span="24">
+            <a-form-model-item label="物品类型" :labelCol="labelCol" :wrapperCol="wrapperCol" prop="goodsType">
+              <a-input-number v-model="model.goodsType" placeholder="请输入物品类型" style="width: 100%" />
+            </a-form-model-item>
+          </a-col>
+          <a-col :span="24">
+            <a-form-model-item label="物品名称" :labelCol="labelCol" :wrapperCol="wrapperCol" prop="goodsName">
+              <a-input v-model="model.goodsName" placeholder="请输入物品名称"  ></a-input>
+            </a-form-model-item>
+          </a-col>
+          <a-col :span="24">
+            <a-form-model-item label="参考价值" :labelCol="labelCol" :wrapperCol="wrapperCol" prop="referenceValue">
+              <a-input v-model="model.referenceValue" placeholder="请输入参考价值"  ></a-input>
+            </a-form-model-item>
+          </a-col>
+          <a-col :span="24">
+            <a-form-model-item label="客人类型" :labelCol="labelCol" :wrapperCol="wrapperCol" prop="customerType">
+              <a-input-number v-model="model.customerType" placeholder="请输入客人类型" style="width: 100%" />
+            </a-form-model-item>
+          </a-col>
+          <a-col :span="24">
+            <a-form-model-item label="入住订单id" :labelCol="labelCol" :wrapperCol="wrapperCol" prop="livingOrderId">
+              <a-input v-model="model.livingOrderId" placeholder="请输入入住订单id"  ></a-input>
+            </a-form-model-item>
+          </a-col>
+          <a-col :span="24">
+            <a-form-model-item label="房号号" :labelCol="labelCol" :wrapperCol="wrapperCol" prop="roomNo">
+              <a-input v-model="model.roomNo" placeholder="请输入房号号"  ></a-input>
+            </a-form-model-item>
+          </a-col>
+          <a-col :span="24">
+            <a-form-model-item label="客人姓名" :labelCol="labelCol" :wrapperCol="wrapperCol" prop="customerName">
+              <a-input v-model="model.customerName" placeholder="请输入客人姓名"  ></a-input>
+            </a-form-model-item>
+          </a-col>
+          <a-col :span="24">
+            <a-form-model-item label="电话" :labelCol="labelCol" :wrapperCol="wrapperCol" prop="mobile">
+              <a-input v-model="model.mobile" placeholder="请输入电话"  ></a-input>
+            </a-form-model-item>
+          </a-col>
+          <a-col :span="24">
+            <a-form-model-item label="登记单号" :labelCol="labelCol" :wrapperCol="wrapperCol" prop="orderNo">
+              <a-input v-model="model.orderNo" placeholder="请输入登记单号"  ></a-input>
+            </a-form-model-item>
+          </a-col>
+          <a-col :span="24">
+            <a-form-model-item label="备注" :labelCol="labelCol" :wrapperCol="wrapperCol" prop="remark">
+              <a-textarea v-model="model.remark" rows="4" placeholder="请输入备注" />
+            </a-form-model-item>
+          </a-col>
+          <a-col :span="24">
+            <a-form-model-item label="创建时间" :labelCol="labelCol" :wrapperCol="wrapperCol" prop="createDate">
+              <j-date placeholder="请选择创建时间" v-model="model.createDate"  style="width: 100%" />
+            </a-form-model-item>
+          </a-col>
+          <a-col :span="24">
+            <a-form-model-item label="创建人" :labelCol="labelCol" :wrapperCol="wrapperCol" prop="createUser">
+              <a-input v-model="model.createUser" placeholder="请输入创建人"  ></a-input>
+            </a-form-model-item>
+          </a-col>
+          <a-col :span="24">
+            <a-form-model-item label="领取人" :labelCol="labelCol" :wrapperCol="wrapperCol" prop="receiverUser">
+              <a-input v-model="model.receiverUser" placeholder="请输入领取人"  ></a-input>
+            </a-form-model-item>
+          </a-col>
+          <a-col :span="24">
+            <a-form-model-item label="领取时间" :labelCol="labelCol" :wrapperCol="wrapperCol" prop="receiverDate">
+              <j-date placeholder="请选择领取时间" v-model="model.receiverDate"  style="width: 100%" />
+            </a-form-model-item>
+          </a-col>
+        </a-row>
+      </a-form-model>
+    </j-form-container>
+  </a-spin>
+</template>
+
+<script>
+
+  import { httpAction, getAction } from '@/api/manage'
+  import { validateDuplicateValue } from '@/utils/util'
+
+  export default {
+    name: 'BusMemberGoodsManageForm',
+    components: {
+    },
+    props: {
+      //表单禁用
+      disabled: {
+        type: Boolean,
+        default: false,
+        required: false
+      }
+    },
+    data () {
+      return {
+        model:{
+         },
+        labelCol: {
+          xs: { span: 24 },
+          sm: { span: 5 },
+        },
+        wrapperCol: {
+          xs: { span: 24 },
+          sm: { span: 16 },
+        },
+        confirmLoading: false,
+        validatorRules: {
+           tenantId: [
+              { required: true, message: '请输入关联租户!'},
+           ],
+           hotelId: [
+              { required: true, message: '请输入关联酒店!'},
+           ],
+           goodsType: [
+              { required: true, message: '请输入物品类型!'},
+           ],
+           goodsName: [
+              { required: true, message: '请输入物品名称!'},
+           ],
+           referenceValue: [
+              { required: true, message: '请输入参考价值!'},
+           ],
+           customerType: [
+              { required: true, message: '请输入客人类型!'},
+           ],
+           roomNo: [
+              { required: true, message: '请输入房号号!'},
+           ],
+           customerName: [
+              { required: true, message: '请输入客人姓名!'},
+           ],
+           createDate: [
+              { required: true, message: '请输入创建时间!'},
+           ],
+        },
+        url: {
+          add: "/business/busMemberGoodsManage/add",
+          edit: "/business/busMemberGoodsManage/edit",
+          queryById: "/business/busMemberGoodsManage/queryById"
+        }
+      }
+    },
+    computed: {
+      formDisabled(){
+        return this.disabled
+      },
+    },
+    created () {
+       //备份model原始值
+      this.modelDefault = JSON.parse(JSON.stringify(this.model));
+    },
+    methods: {
+      add () {
+        this.edit(this.modelDefault);
+      },
+      edit (record) {
+        this.model = Object.assign({}, record);
+        this.visible = true;
+      },
+      submitForm () {
+        const that = this;
+        // 触发表单验证
+        this.$refs.form.validate(valid => {
+          if (valid) {
+            that.confirmLoading = true;
+            let httpurl = '';
+            let method = '';
+            if(!this.model.id){
+              httpurl+=this.url.add;
+              method = 'post';
+            }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;
+            })
+          }
+         
+        })
+      },
+    }
+  }
+</script>

+ 84 - 0
src/views/room/modules/membergoodsmanage/BusMemberGoodsManageModal.Style#Drawer.vue

@@ -0,0 +1,84 @@
+<template>
+  <a-drawer
+    :title="title"
+    :width="width"
+    placement="right"
+    :closable="false"
+    @close="close"
+    destroyOnClose
+    :visible="visible">
+    <bus-member-goods-manage-form ref="realForm" @ok="submitCallback" :disabled="disableSubmit" normal></bus-member-goods-manage-form>
+    <div class="drawer-footer">
+      <a-button @click="handleCancel" style="margin-bottom: 0;">关闭</a-button>
+      <a-button v-if="!disableSubmit"  @click="handleOk" type="primary" style="margin-bottom: 0;">提交</a-button>
+    </div>
+  </a-drawer>
+</template>
+
+<script>
+
+  import BusMemberGoodsManageForm from './BusMemberGoodsManageForm'
+
+  export default {
+    name: 'BusMemberGoodsManageModal',
+    components: {
+      BusMemberGoodsManageForm
+    },
+    data () {
+      return {
+        title:"操作",
+        width:800,
+        visible: false,
+        disableSubmit: false
+      }
+    },
+    methods: {
+      add () {
+        this.visible=true
+        this.$nextTick(()=>{
+          this.$refs.realForm.add();
+        })
+      },
+      edit (record) {
+        this.visible=true
+        this.$nextTick(()=>{
+          this.$refs.realForm.edit(record);
+        });
+      },
+      close () {
+        this.$emit('close');
+        this.visible = false;
+      },
+      submitCallback(){
+        this.$emit('ok');
+        this.visible = false;
+      },
+      handleOk () {
+        this.$refs.realForm.submitForm();
+      },
+      handleCancel () {
+        this.close()
+      }
+    }
+  }
+</script>
+
+<style lang="less" scoped>
+/** Button按钮间距 */
+  .ant-btn {
+    margin-left: 30px;
+    margin-bottom: 30px;
+    float: right;
+  }
+  .drawer-footer{
+    position: absolute;
+    bottom: -8px;
+    width: 100%;
+    border-top: 1px solid #e8e8e8;
+    padding: 10px 16px;
+    text-align: right;
+    left: 0;
+    background: #fff;
+    border-radius: 0 0 2px 2px;
+  }
+</style>

+ 60 - 0
src/views/room/modules/membergoodsmanage/BusMemberGoodsManageModal.vue

@@ -0,0 +1,60 @@
+<template>
+  <j-modal
+    :title="title"
+    :width="width"
+    :visible="visible"
+    switchFullscreen
+    @ok="handleOk"
+    :okButtonProps="{ class:{'jee-hidden': disableSubmit} }"
+    @cancel="handleCancel"
+    cancelText="关闭">
+    <bus-member-goods-manage-form ref="realForm" @ok="submitCallback" :disabled="disableSubmit"></bus-member-goods-manage-form>
+  </j-modal>
+</template>
+
+<script>
+
+  import BusMemberGoodsManageForm from './BusMemberGoodsManageForm'
+  export default {
+    name: 'BusMemberGoodsManageModal',
+    components: {
+      BusMemberGoodsManageForm
+    },
+    data () {
+      return {
+        title:'',
+        width:800,
+        visible: false,
+        disableSubmit: false
+      }
+    },
+    methods: {
+      add () {
+        this.visible=true
+        this.$nextTick(()=>{
+          this.$refs.realForm.add();
+        })
+      },
+      edit (record) {
+        this.visible=true
+        this.$nextTick(()=>{
+          this.$refs.realForm.edit(record);
+        })
+      },
+      close () {
+        this.$emit('close');
+        this.visible = false;
+      },
+      handleOk () {
+        this.$refs.realForm.submitForm();
+      },
+      submitCallback(){
+        this.$emit('ok');
+        this.visible = false;
+      },
+      handleCancel () {
+        this.close()
+      }
+    }
+  }
+</script>

+ 221 - 0
src/views/room/modules/membermessage/BusMemberMessageForm.vue

@@ -0,0 +1,221 @@
+<template>
+  <a-spin :spinning="confirmLoading">
+    <j-form-container :disabled="formDisabled">
+      <a-form-model
+        ref="form"
+        :model="model"
+        :rules="validatorRules"
+        slot="detail"
+      >
+        <a-row>
+          <a-col :span="24">
+            <a-form-model-item
+              label="房号id"
+              :labelCol="labelCol"
+              :wrapperCol="wrapperCol"
+              prop="roomId"
+            >
+              <a-input
+                v-model="model.roomId"
+                placeholder="请输入房号id"
+              ></a-input>
+            </a-form-model-item>
+          </a-col>
+          <a-col :span="24">
+            <a-form-model-item
+              label="入住订单id"
+              :labelCol="labelCol"
+              :wrapperCol="wrapperCol"
+              prop="livingOrderId"
+            >
+              <a-input
+                v-model="model.livingOrderId"
+                placeholder="请输入入住订单id"
+              ></a-input>
+            </a-form-model-item>
+          </a-col>
+          <a-col :span="24">
+            <a-form-model-item
+              label="留言人"
+              :labelCol="labelCol"
+              :wrapperCol="wrapperCol"
+              prop="userName"
+            >
+              <a-input
+                v-model="model.userName"
+                placeholder="请输入留言人"
+              ></a-input>
+            </a-form-model-item>
+          </a-col>
+          <a-col :span="24">
+            <a-form-model-item
+              label="自动提醒时间"
+              :labelCol="labelCol"
+              :wrapperCol="wrapperCol"
+              prop="remindDate"
+            >
+              <j-date
+                placeholder="请选择自动提醒时间"
+                v-model="model.remindDate"
+                style="width: 100%"
+              />
+            </a-form-model-item>
+          </a-col>
+          <a-col :span="24">
+            <a-form-model-item
+              label="有效时间"
+              :labelCol="labelCol"
+              :wrapperCol="wrapperCol"
+              prop="validDate"
+            >
+              <j-date
+                placeholder="请选择有效时间"
+                v-model="model.validDate"
+                style="width: 100%"
+              />
+            </a-form-model-item>
+          </a-col>
+          <a-col :span="24">
+            <a-form-model-item
+              label="是否传达"
+              :labelCol="labelCol"
+              :wrapperCol="wrapperCol"
+              prop="relay"
+            >
+              <a-input-number
+                v-model="model.relay"
+                placeholder="请输入是否传达"
+                style="width: 100%"
+              />
+            </a-form-model-item>
+          </a-col>
+          <a-col :span="24">
+            <a-form-model-item
+              label="留言内容"
+              :labelCol="labelCol"
+              :wrapperCol="wrapperCol"
+              prop="contentBody"
+            >
+              <a-textarea
+                v-model="model.contentBody"
+                rows="4"
+                placeholder="请输入留言内容"
+              />
+            </a-form-model-item>
+          </a-col>
+          <a-col :span="24">
+            <a-form-model-item
+              label="创建时间"
+              :labelCol="labelCol"
+              :wrapperCol="wrapperCol"
+              prop="createDate"
+            >
+              <j-date
+                placeholder="请选择创建时间"
+                v-model="model.createDate"
+                style="width: 100%"
+              />
+            </a-form-model-item>
+          </a-col>
+        </a-row>
+      </a-form-model>
+    </j-form-container>
+  </a-spin>
+</template>
+
+<script>
+import { httpAction, getAction } from "@/api/manage";
+import { validateDuplicateValue } from "@/utils/util";
+
+export default {
+  name: "BusMemberMessageForm",
+  components: {},
+  props: {
+    //表单禁用
+    disabled: {
+      type: Boolean,
+      default: false,
+      required: false,
+    },
+  },
+  data() {
+    return {
+      model: {},
+      labelCol: {
+        xs: { span: 24 },
+        sm: { span: 5 },
+      },
+      wrapperCol: {
+        xs: { span: 24 },
+        sm: { span: 16 },
+      },
+      confirmLoading: false,
+      validatorRules: {
+        tenantId: [{ required: true, message: "请输入关联租户!" }],
+        hotelId: [{ required: true, message: "请输入关联酒店!" }],
+        remindDate: [{ required: true, message: "请输入自动提醒时间!" }],
+        validDate: [{ required: true, message: "请输入有效时间!" }],
+        relay: [{ required: true, message: "请输入是否传达!" }],
+        createDate: [{ required: true, message: "请输入创建时间!" }],
+      },
+      url: {
+        add: "/business/busMemberMessage/add",
+        edit: "/business/busMemberMessage/edit",
+        queryById: "/business/busMemberMessage/queryById",
+      },
+    };
+  },
+  computed: {
+    formDisabled() {
+      return this.disabled;
+    },
+  },
+  created() {
+    var _info = JSON.parse(localStorage.getItem("storeInfo"));
+    if (_info) {
+      this.model.hotelId = _info.id;
+    }
+    //备份model原始值
+    this.modelDefault = JSON.parse(JSON.stringify(this.model));
+  },
+  methods: {
+    add() {
+      this.edit(this.modelDefault);
+    },
+    edit(record) {
+      this.model = Object.assign({}, record);
+      this.visible = true;
+    },
+    submitForm() {
+      const that = this;
+      // 触发表单验证
+      this.$refs.form.validate((valid) => {
+        if (valid) {
+          that.confirmLoading = true;
+          let httpurl = "";
+          let method = "";
+          if (!this.model.id) {
+            httpurl += this.url.add;
+            method = "post";
+          } 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;
+            });
+        }
+      });
+    },
+  },
+};
+</script>

+ 84 - 0
src/views/room/modules/membermessage/BusMemberMessageModal.Style#Drawer.vue

@@ -0,0 +1,84 @@
+<template>
+  <a-drawer
+    :title="title"
+    :width="width"
+    placement="right"
+    :closable="false"
+    @close="close"
+    destroyOnClose
+    :visible="visible">
+    <bus-member-message-form ref="realForm" @ok="submitCallback" :disabled="disableSubmit" normal></bus-member-message-form>
+    <div class="drawer-footer">
+      <a-button @click="handleCancel" style="margin-bottom: 0;">关闭</a-button>
+      <a-button v-if="!disableSubmit"  @click="handleOk" type="primary" style="margin-bottom: 0;">提交</a-button>
+    </div>
+  </a-drawer>
+</template>
+
+<script>
+
+  import BusMemberMessageForm from './BusMemberMessageForm'
+
+  export default {
+    name: 'BusMemberMessageModal',
+    components: {
+      BusMemberMessageForm
+    },
+    data () {
+      return {
+        title:"操作",
+        width:800,
+        visible: false,
+        disableSubmit: false
+      }
+    },
+    methods: {
+      add () {
+        this.visible=true
+        this.$nextTick(()=>{
+          this.$refs.realForm.add();
+        })
+      },
+      edit (record) {
+        this.visible=true
+        this.$nextTick(()=>{
+          this.$refs.realForm.edit(record);
+        });
+      },
+      close () {
+        this.$emit('close');
+        this.visible = false;
+      },
+      submitCallback(){
+        this.$emit('ok');
+        this.visible = false;
+      },
+      handleOk () {
+        this.$refs.realForm.submitForm();
+      },
+      handleCancel () {
+        this.close()
+      }
+    }
+  }
+</script>
+
+<style lang="less" scoped>
+/** Button按钮间距 */
+  .ant-btn {
+    margin-left: 30px;
+    margin-bottom: 30px;
+    float: right;
+  }
+  .drawer-footer{
+    position: absolute;
+    bottom: -8px;
+    width: 100%;
+    border-top: 1px solid #e8e8e8;
+    padding: 10px 16px;
+    text-align: right;
+    left: 0;
+    background: #fff;
+    border-radius: 0 0 2px 2px;
+  }
+</style>

+ 60 - 0
src/views/room/modules/membermessage/BusMemberMessageModal.vue

@@ -0,0 +1,60 @@
+<template>
+  <j-modal
+    :title="title"
+    :width="width"
+    :visible="visible"
+    switchFullscreen
+    @ok="handleOk"
+    :okButtonProps="{ class:{'jee-hidden': disableSubmit} }"
+    @cancel="handleCancel"
+    cancelText="关闭">
+    <bus-member-message-form ref="realForm" @ok="submitCallback" :disabled="disableSubmit"></bus-member-message-form>
+  </j-modal>
+</template>
+
+<script>
+
+  import BusMemberMessageForm from './BusMemberMessageForm'
+  export default {
+    name: 'BusMemberMessageModal',
+    components: {
+      BusMemberMessageForm
+    },
+    data () {
+      return {
+        title:'',
+        width:800,
+        visible: false,
+        disableSubmit: false
+      }
+    },
+    methods: {
+      add () {
+        this.visible=true
+        this.$nextTick(()=>{
+          this.$refs.realForm.add();
+        })
+      },
+      edit (record) {
+        this.visible=true
+        this.$nextTick(()=>{
+          this.$refs.realForm.edit(record);
+        })
+      },
+      close () {
+        this.$emit('close');
+        this.visible = false;
+      },
+      handleOk () {
+        this.$refs.realForm.submitForm();
+      },
+      submitCallback(){
+        this.$emit('ok');
+        this.visible = false;
+      },
+      handleCancel () {
+        this.close()
+      }
+    }
+  }
+</script>