Explorar el Código

房间设置-房价方案-每日房价

WIN-B904R0U0NNS\Administrator hace 2 años
padre
commit
d9063c213e

+ 7 - 18
src/views/settings/components/roomModules/housePriceSchemeList.vue

@@ -73,10 +73,7 @@
                         <a class="ant-dropdown-link">更多 <a-icon type="down" /></a>
                         <a-menu slot="overlay">
                             <a-menu-item>
-                                <a @click="handlePriceManager(record)">价格管理</a>
-                            </a-menu-item>
-                            <a-menu-item>
-                                <a @click="handleDetailSetting(record)">详细设置</a>
+                                <a @click="handleDetailSetting(record)">详情</a>
                             </a-menu-item>
                             <a-menu-item>
                                 <a-popconfirm title="确定删除吗?" @confirm="() => handleDelete(record.id)">
@@ -92,30 +89,25 @@
 <!--        <room-layout-price-modal ref="priceModal" @ok="onPriceSave"></room-layout-price-modal>-->
 <!--        <room-layout-detail-modal @saveOk="onSaveOk" ref="detailModal"></room-layout-detail-modal>-->
         <house-price-scheme-modal ref="modalForm" @ok="modalFormOk"></house-price-scheme-modal>
+        <house-price-scheme-detail-modal ref="detailModal" @ok="modalFormOk"></house-price-scheme-detail-modal>
     </a-card>
 </template>
 
 <script>
 
     import { JeecgListMixin } from "@/mixins/JeecgListMixin";
-    import roomLayoutForm from "./RoomLayoutFormModal"; // todo roomLayoutForm 需要替换成房型的表单弹窗
-    import RoomLayoutDetailModal from "./RoomLayoutFormDetailModal.vue";
-
-    import RoomLayoutPriceModal from "./RoomLayoutPriceModal.vue";
-
     import { modifyAppState } from '@/api/roomLayout'
     import { filterObj } from "@/utils/util";
     import HousePriceSchemeModal from "./modules/housePriceSchemeModal";
     let hotelInfo = JSON.parse(localStorage.getItem('storeInfo'))
     import { httpAction, getAction } from '@/api/manage'
+    import HousePriceSchemeDetailModal from "./modules/housePriceSchemeDetailModal";
     export default {
         name: "housePriceSchemeList",
         mixins: [JeecgListMixin],
         components: {
-            HousePriceSchemeModal,
-            roomLayoutForm,
-            RoomLayoutPriceModal,
-            RoomLayoutDetailModal
+            HousePriceSchemeDetailModal,
+            HousePriceSchemeModal
         },
         data() {
             return {
@@ -219,13 +211,10 @@
             onPriceSave() {
 
             },
-            handlePriceManager(record) {
-                this.$refs.priceModal.setRaw(record.id, record.name)
-                this.$refs.priceModal.visible = true
-            },
             handleDetailSetting(record) {
-                this.$refs.detailModal.setRaw(record)
+                this.$refs.detailModal.title="详情"
                 this.$refs.detailModal.visible = true
+                this.$refs.detailModal.schemeId=record.id
             },
             changeOpenState(e, record) {
                 console.log(e)

+ 236 - 0
src/views/settings/components/roomModules/modules/housePriceSchemeDetailList.vue

@@ -0,0 +1,236 @@
+<template>
+    <a-card :bordered="false" :schemeId="schemeId">
+        <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="openSlot" slot-scope="text, record, index">
+                    <a-switch checked-children="开" un-checked-children="关" default-checked :checked="record.open == 1"
+                              @change="e=>changeOpenState(e,record)" />
+                </template>
+                <template slot="moneySlot" slot-scope="text, record">
+                    <div>
+                        <a-input-number v-model="record.money" :step="1" :min="0" :precision="2"
+                                        @blur="onMoneyChange(record)" />
+                    </div>
+                </template>
+                <template slot="breakfastNumberSlot" slot-scope="text, record">
+                    <div>
+                        <a-input-number v-model="record.breakfastNumber" :step="1" :min="0" :precision="0"
+                                        @blur="onNumberChange(record)" />
+                    </div>
+                </template>
+                <template slot="departureTimeSlot" slot-scope="text, record">
+                    <div>
+                        <a-time-picker :default-value="moment(record.departureTime, 'HH:mm')" format="HH:mm"
+                                       @change="e=>onDepartureTimeChange(e,record)">
+                        </a-time-picker>
+                    </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="handleMoney(record)">查看房价</a>
+                </span>
+            </a-table>
+        </div>
+        <house-price-scheme-layout-modal ref="modalForm" @ok="modalFormOk"></house-price-scheme-layout-modal>
+    </a-card>
+</template>
+
+<script>
+    import '@/assets/less/TableExpand.less'
+    import { mixinDevice } from '@/utils/mixin'
+    import { JeecgListMixin } from '@/mixins/JeecgListMixin'
+    import moment from 'moment';
+    import { httpAction } from '@/api/manage'
+    import HousePriceSchemeLayoutModal from "./housePriceSchemeLayout/housePriceSchemeLayoutModal";
+
+    export default {
+        name: 'housePriceSchemeDetailList',
+        mixins:[JeecgListMixin, mixinDevice],
+        components: {
+            HousePriceSchemeLayoutModal
+        },
+        props: {
+            schemeId: {
+                type: String,
+                default: () => {
+                    return ""
+                }
+            }
+        },
+        data () {
+            return {
+                description: '房价方案-房型关联表管理页面',
+                // 表头
+                columns: [
+                    {
+                        title:'房间类型',
+                        align:"center",
+                        dataIndex: 'layoutName'
+                    },
+                    {
+                        title:'门市价',
+                        align:"center",
+                        dataIndex: 'layoutPrice'
+                    },
+                    {
+                        title:'执行房价',
+                        align:"center",
+                        dataIndex: 'money',
+                        scopedSlots: {customRender: "moneySlot"},
+                    },
+                    {
+                        title:'早餐数量',
+                        align:"center",
+                        dataIndex: 'breakfastNumber',
+                        scopedSlots: {customRender: "breakfastNumberSlot"},
+                    },
+                    {
+                        title:'默认离店时间',
+                        align:"center",
+                        dataIndex: 'departureTime',
+                        // customRender:function (text) {
+                        //     return !text?"":(text.length>10?text.substr(0,10):text)
+                        // },
+                        scopedSlots: {customRender: "departureTimeSlot"},
+                    },
+                    {
+                        title: '查看每日房价',
+                        dataIndex: 'action',
+                        align:"center",
+                        fixed:"right",
+                        width:147,
+                        scopedSlots: { customRender: 'action' }
+                    }
+                ],
+                url: {
+                    list: "/business/busHousePriceSchemeLayout/list",
+                    delete: "/business/busHousePriceSchemeLayout/delete",
+                    deleteBatch: "/business/busHousePriceSchemeLayout/deleteBatch",
+                    exportXlsUrl: "/business/busHousePriceSchemeLayout/exportXls",
+                    importExcelUrl: "business/busHousePriceSchemeLayout/importExcel",
+                    editMoney: "/business/busHousePriceSchemeLayout/editMoney",
+                    editNumber: "/business/busHousePriceSchemeLayout/editNumber",
+                    editTime: "/business/busHousePriceSchemeLayout/editTime",
+                },
+                dictOptions:{},
+                superFieldList:[],
+                queryParam: {},
+            }
+        },
+        created() {
+            this.getSuperFieldList();
+
+            this.queryParam.schemeId = this.schemeId
+            this.loadData()
+        },
+        computed: {
+            importExcelUrl: function(){
+                return `${window._CONFIG['domianURL']}/${this.url.importExcelUrl}`;
+            },
+        },
+        methods: {
+            moment,
+            initDictConfig(){
+            },
+            getSuperFieldList(){
+                let fieldList=[];
+                fieldList.push({type:'string',value:'tenantId',text:'关联租户'})
+                fieldList.push({type:'string',value:'hotelId',text:'关联酒店'})
+                fieldList.push({type:'string',value:'schemeId',text:'关联房价方案'})
+                fieldList.push({type:'string',value:'layoutId',text:'关联房型'})
+                fieldList.push({type:'number',value:'money',text:'执行房价'})
+                fieldList.push({type:'date',value:'departureTime',text:'默认离店时间'})
+                fieldList.push({type:'int',value:'breakfastNumber',text:'早餐数量'})
+                fieldList.push({type:'int',value:'lunchNumber',text:'中餐数量'})
+                fieldList.push({type:'int',value:'dinnerNumber',text:'晚餐数量'})
+                fieldList.push({type:'int',value:'delFlag',text:'删除状态'})
+                this.superFieldList = fieldList
+            },
+            onMoneyChange(record){
+                var that = this;
+                //修改执行房价
+                var param = {
+                    money: record.money,
+                    id: record.id
+                }
+                console.log(param)
+
+                httpAction(this.url.editMoney, param, 'post').then((res) => {
+                    if (res.success) {
+                        that.$message.success('操作成功')
+                        that.$emit('ok')
+                    } else {
+                        that.$message.warning(res.message)
+                    }
+                }).finally(() => {
+                    that.confirmLoading = false
+                })
+            },
+            onNumberChange(record){
+                //修改早餐数量
+                var that = this;
+                var param = {
+                    breakfastNumber: record.breakfastNumber,
+                    id: record.id
+                }
+                console.log(param)
+                httpAction(this.url.editNumber, param, 'post').then((res) => {
+                    if (res.success) {
+                        that.$message.success('操作成功')
+                        that.$emit('ok')
+                    } else {
+                        that.$message.warning(res.message)
+                    }
+                }).finally(() => {
+                    that.confirmLoading = false
+                })
+            },
+            onDepartureTimeChange(e,record){
+                var _time = moment(new Date(e)).format('HH:mm:ss')
+                console.log(_time)
+                //修改时间
+                var that = this;
+                var param = {
+                    departureTime: _time,
+                    id: record.id
+                }
+                console.log(param)
+                httpAction(this.url.editTime, param, 'post').then((res) => {
+                    if (res.success) {
+                        that.$message.success('操作成功')
+                        that.$emit('ok')
+                    } else {
+                        that.$message.warning(res.message)
+                    }
+                }).finally(() => {
+                    that.confirmLoading = false
+                })
+            },
+            handleMoney(record){
+                this.$refs.modalForm.title="每日房价"
+                this.$refs.modalForm.visible = true
+                this.$refs.modalForm.edit(record);
+            }
+        }
+    }
+</script>
+
+<style scoped>
+
+</style>

+ 62 - 0
src/views/settings/components/roomModules/modules/housePriceSchemeDetailModal.vue

@@ -0,0 +1,62 @@
+<template>
+    <j-modal
+            :title="title"
+            :width="width"
+            :visible="visible"
+            switchFullscreen
+            :footer="null"
+            :okButtonProps="{ class:{'jee-hidden': disableSubmit} }"
+            @cancel="handleCancel"
+            cancelText="关闭"
+            >
+        <house-price-scheme-detail-list ref="detailModal" :schemeId="schemeId"></house-price-scheme-detail-list>
+    </j-modal>
+</template>
+
+<script>
+
+    import HousePriceSchemeDetailList from "./housePriceSchemeDetailList";
+    export default {
+        name: 'housePriceSchemeDetailModal',
+        components: {
+            HousePriceSchemeDetailList,
+        },
+        data () {
+            return {
+                title:'',
+                width:950,
+                visible: false,
+                disableSubmit: false,
+                schemeId:null,
+            }
+        },
+        methods: {
+            add () {
+                this.visible=true
+                this.$nextTick(()=>{
+                    this.$refs.detailModal.add();
+                })
+            },
+            edit (record) {
+                this.visible=true
+                this.$nextTick(()=>{
+                    this.$refs.detailModal.edit(record);
+                })
+            },
+            close () {
+                this.$emit('close');
+                this.visible = false;
+            },
+            handleOk () {
+                this.$refs.detailModal.submitForm();
+            },
+            submitCallback(){
+                this.$emit('ok');
+                this.visible = false;
+            },
+            handleCancel () {
+                this.close()
+            }
+        }
+    }
+</script>

+ 460 - 0
src/views/settings/components/roomModules/modules/housePriceSchemeLayout/housePriceSchemeLayoutForm.vue

@@ -0,0 +1,460 @@
+<template>
+<!--  <a-calendar>-->
+<!--    <ul slot="dateCellRender" slot-scope="value" class="events">-->
+<!--      <li v-for="item in getListData(value)" :key="item.content">-->
+<!--        <a-badge :status="item.type" :text="item.content" />-->
+<!--      </li>-->
+<!--    </ul>-->
+<!--    <template slot="monthCellRender" slot-scope="value">-->
+<!--      <div v-if="getMonthData(value)" class="notes-month">-->
+<!--        <section>{{ getMonthData(value) }}</section>-->
+<!--        <span>Backlog number</span>-->
+<!--      </div>-->
+<!--    </template>-->
+<!--  </a-calendar>-->
+  <div>
+    <a-calendar style="background: #fff" @select="handleSelecrt" @panelChange="onPanelChange" :header-render="headerRender">
+      <div slot="dateFullCellRender" slot-scope="value" class="ant-fullcalendar-date" :class="{'ant-fullcalendar-date-has-content':getListData(value).length>0}">
+        <div class="ant-fullcalendar-value">{{getCaledarDate(value)}}</div>
+        <div class="ant-fullcalendar-content">
+          <div style="padding-top: 5px;" v-for="item in getListData(value)" :key="item.content">
+            <a-button type="primary" @click="e=>handleMoney(e,value,item)">
+              {{item.content}}
+            </a-button>
+          </div>
+          <!--        <ul class="events">-->
+          <!--          <li v-for="item in getListData(value)" :key="item.content">-->
+          <!--            <a-badge :status="'success'" :text="item.classify_rname +'('+item.num+')'" />-->
+          <!--          </li>-->
+          <!--        </ul>-->
+        </div>
+      </div>
+    </a-calendar>
+
+    <a-modal v-model="visibleMoney" title="修改房价" @ok="handleOk" :width="300">
+      <a-input-number style="width: 100%;margin: auto" v-model="updateMoney" :min="0" :precision="2" />
+    </a-modal>
+  </div>
+</template>
+
+<script>
+
+  import { httpAction, getAction } from '@/api/manage'
+  import { validateDuplicateValue } from '@/utils/util'
+  import moment from 'moment';
+  import * as dayjs from "dayjs";
+  const hotelInfo = JSON.parse(localStorage.getItem("storeInfo"));
+
+  export default {
+    name: 'housePriceSchemeLayoutForm',
+    components: {
+    },
+    props: {
+      //表单禁用
+      disabled: {
+        type: Boolean,
+        default: false,
+        required: false
+      },
+    },
+    data () {
+      return {
+        labelCol: {
+          xs: { span: 24 },
+          sm: { span: 5 },
+        },
+        wrapperCol: {
+          xs: { span: 24 },
+          sm: { span: 16 },
+        },
+        confirmLoading: false,
+        url: {
+          add: "/business/busHousePriceSchemeLayout/add",
+          edit: "/business/busHousePriceSchemeLayout/edit",
+          queryById: "/business/busHousePriceSchemeLayout/queryById",
+          queryList: "/business/busSchemeLayoutDailyPrice/queryList",
+          editDailyPrice: "/business/busSchemeLayoutDailyPrice/editDailyPrice",
+          batchUpdatePrice: "/business/busSchemeLayoutDailyPrice/batchUpdatePrice",
+
+          queryListByCond: "/business/busSchemeLayoutDailyPrice/queryListByCond",
+        },
+        curDate :moment(new Date()).format('YYYY-MM-DD'),
+        moneyDays:[],
+        schemeLayoutId:'',
+        visibleMoney:false,
+        updateId:'',
+        updateSchemeLayoutId:'',
+        updateMoney:0,
+        updateDate:'',
+        selectDate:'',
+      }
+    },
+    computed: {
+      formDisabled(){
+        return this.disabled
+      },
+    },
+    created () {
+      this.selectDate = moment(new Date()).format('YYYY-MM-DD 00:00:00')
+      //获取数据
+      this.$nextTick(()=>{
+        getAction(this.url.queryList, {
+          schemeLayoutId: this.schemeLayoutId,
+          realDate:this.selectDate
+        }).then((res) => {
+          if (res.success) {
+            this.moneyDays = res.result;
+          }
+        });
+
+
+        var param = {
+          schemeId:'1644273323440029697',
+          layoutId:'1632671499640946690',
+          startDate:'2023-04-10',
+          endDate:'2023-04-16',
+        }
+        getAction(this.url.queryListByCond, param).then((res) => {
+          if (res.success) {
+            console.log(res.result);
+          }
+        });
+
+
+        var url = "/rooms/cesHousePriceScheme/listByLayout?hotelId=" + hotelInfo.id+"&layoutId="+'1632671499640946690'
+        getAction(url, {}).then((res) => {
+          if (res.success) {
+            console.log(res.result);
+          }
+        });
+      })
+
+    },
+    methods: {
+      edit (record) {
+        this.model = Object.assign({}, record);
+        this.visible = true;
+        this.schemeLayoutId = record.id
+      },
+      handleMoney(e,value,item){
+        var _time = moment(new Date(value)).format('YYYY-MM-DD 00:00:00')
+        this.visibleMoney = true
+        this.updateMoney = item.content
+        this.updateDate = _time
+        this.updateId = item.id
+        this.updateSchemeLayoutId = item.schemeLayoutId
+        e.stopPropagation();//阻止事件冒泡
+      },
+      handleOk(e){
+        //修改每日房价
+        var that = this;
+        that.confirmLoading = true;
+        httpAction(this.url.editDailyPrice,{
+          id:this.updateId,
+          schemeLayoutId:this.updateSchemeLayoutId,
+          hotelId:hotelInfo.id,
+          date:this.updateDate,
+          money:this.updateMoney,
+        },"POST").then((res)=>{
+          if(res.success){
+            that.$message.success("操作成功");
+            // that.$emit('ok');
+
+            getAction(that.url.queryList, {
+              schemeLayoutId: that.schemeLayoutId,
+              realDate:that.selectDate
+            }).then((res) => {
+              if (res.success) {
+                that.moneyDays = res.result;
+              }
+            }).finally(()=>{
+
+            });
+
+          }else{
+            that.$message.warning(res.message);
+          }
+        }).finally(() => {
+          that.confirmLoading = false;
+          that.visibleMoney = false
+        })
+      },
+      getListData(value) {
+        let listData = [];
+        //获取到所有某个房型的每日房价
+        //刚进入页面的时候,只显示今天以后的数据
+        var _time = moment(new Date(value)).format('YYYY-MM-DD')
+        var _cur = moment(new Date()).format('YYYY-MM-DD')
+
+        if(this.selectDate != ""){
+          for(let item of this.moneyDays){
+            if (item.date == _time){
+              listData = [
+                { content: item.money ,id:item.id ,schemeLayoutId:item.schemeLayoutId },
+              ];
+            }
+          }
+        }else{
+          if (_time >= _cur){
+            for(let item of this.moneyDays){
+              if (item.date == _time){
+                listData = [
+                  { content: item.money ,id:item.id ,schemeLayoutId:item.schemeLayoutId},
+                ];
+              }
+            }
+          }
+        }
+
+
+        // switch (value.date()) {
+        //   case 8:
+        //     listData = [
+        //       { content: '218' },
+        //     ];
+        //     break;
+        //   case 10:
+        //     listData = [
+        //       { content: '258' },
+        //     ];
+        //     break;
+        //   default:
+        // }
+        return listData || [];
+      },
+
+      getMonthData(value) {
+        if (value.month() === 8) {
+          return 1394;
+        }
+      },
+
+      // 点击某天
+      handleSelecrt(value) {
+        let selectDate = value.format('YYYY-MM-DD HH:mm:ss') // 当前选中的日历时间
+        this.selectDateValue = selectDate
+        this.visible = true; // 打开模态框
+        this.selectDate = value.format('YYYY-MM-DD 00:00:00')
+        var _this = this;
+        getAction(this.url.queryList, {
+          schemeLayoutId: this.schemeLayoutId,
+          realDate:this.selectDate
+        }).then((res) => {
+          if (res.success) {
+            _this.moneyDays = res.result;
+          }
+        }).finally(()=>{
+
+        });
+      },
+      // 切换年月
+      onPanelChange(val) {
+        this.starT = dayjs(val).format('YYYY-MM-01 00:00:00')
+        this.endT = dayjs(val).add(1, 'month').format('YYYY-MM-01 00:00:00')
+        // this.loadData(this.starT, this.endT)//重新加载数据
+      },
+      // 获取日历的日期
+      getCaledarDate(value){
+        let str = value.format('YYYY-MM-DD').substring(5, 10);
+        // if(str[0]=='0'){
+        //   str = str.substring(1,2)
+        // }
+        return str
+      },
+      // 获取日历的日期
+      getCaledarRealDate(value) {
+        let str = value.format('YYYY-MM-DD');
+        // if(str[0]=='0'){
+        //   str = str.substring(1,2)
+        // }
+        return str
+      },
+      headerRender({ value, type, onChange, onTypeChange }) {
+        const start = 0
+        const end = 12
+        const monthOptions = []
+
+        const current = value.clone()
+        const localeData = value.localeData()
+        const months = []
+        for (let i = 0; i < 12; i++) {
+          current.month(i)
+          months.push(localeData.monthsShort(current))
+        }
+
+        for (let index = start; index < end; index++) {
+          monthOptions.push(
+          <a-select-option class="month-item" key={`${index}`}>
+          {months[index]}
+        </a-select-option>
+        )
+        }
+        const month = value.month()
+
+        const year = value.year()
+        const options = []
+        for (let i = year - 10; i < year + 10; i += 1) {
+          options.push(
+          <a-select-option key={i} value={i} class="year-item">
+                  {i + '年'}
+                  </a-select-option>
+        )
+        }
+        // 批量修改价格
+        var batchStartDate = '';
+        var batchEndDate = '';
+        const batchUpdateMoney = () =>{
+          var _money = document.getElementById("batchMoney").value;
+          if(_money == '' || _money < 0){
+            this.$message.warning("请输入正确房价!");
+            return;
+          }
+          if (batchStartDate == '' || batchEndDate == ''){
+            this.$message.warning("请选择正确时间!");
+            return;
+          }
+          var param = {
+            schemeLayoutId:this.schemeLayoutId,
+            hotelId:hotelInfo.id,
+            startDate:batchStartDate,
+            endDate:batchEndDate,
+            money:_money,
+          }
+          console.log(param)
+          var that = this;
+          that.confirmLoading = true;
+          httpAction(this.url.batchUpdatePrice,param,"POST").then((res)=>{
+            if(res.success){
+              that.$message.success("操作成功");
+              // that.$emit('ok');
+
+              getAction(that.url.queryList, {
+                schemeLayoutId: that.schemeLayoutId,
+                realDate:that.selectDate
+              }).then((res) => {
+                if (res.success) {
+                  that.moneyDays = res.result;
+                }
+              }).finally(()=>{
+
+              });
+
+            }else{
+              that.$message.warning(res.message);
+            }
+          }).finally(() => {
+            that.confirmLoading = false;
+            that.visibleMoney = false
+          })
+
+        }
+        const onBatchChange = (e, dateString) =>{
+          // console.log("Selected Time: ", e);
+          console.log("Formatted Selected Time: ", dateString);
+          batchStartDate = dateString[0]
+          batchEndDate = dateString[1]
+        }
+        /* 上个月 */
+        const prevMonth = () => {
+          let newMonth = moment(value).subtract(1, 'months');
+          onChange(newMonth);
+        };
+        /* 下个月 */
+        const nextMonth = () => {
+          let newMonth = moment(value).add(1, 'months');
+          onChange(newMonth);
+        };
+        // 返回今天
+        const showTotay = () => {
+          const today = moment(new Date())
+          onChange(today)
+        }
+        return (
+                <div style={{ padding: ' 15px 15px 40px 15px', textAlign: 'center', position: 'relative'}}>
+      <div style={{display: 'inline-block', textAlign: 'center'}}>
+      <a-select
+        dropdownMatchSelectWidth={false}
+      class="header-select"
+        onChange={newYear => {
+          const now = value.clone().year(newYear)
+          onChange(now)
+        }}
+        value={Number(year)}
+                >
+                {options}
+                </a-select>
+                <a-select
+        dropdownMatchSelectWidth={false}
+      class="header-select"
+        value={String(month)}
+        onChange={selectedMonth => {
+          const newValue = value.clone()
+          newValue.month(parseInt(selectedMonth, 10))
+          onChange(newValue)
+        }}
+      >
+        {monthOptions}
+      </a-select>
+                </div>
+                <div style={{position: 'absolute',right: '15px',top: '15px'}}>
+      <a-button-group>
+        <a-button type="primary" onClick={() => prevMonth()}><a-icon type="left" />上一月</a-button>
+                <a-button type="primary" onClick={() => showTotay()}>返回今日</a-button>
+        <a-button type="primary" onClick={() => nextMonth()}>下一月<a-icon type="right" /></a-button>
+                </a-button-group>
+                </div>
+                <div class="header-title">
+                <div class="header-title-content">
+                  <a-range-picker class="margin-left-10" id="batchDate" onChange={(e,date)=>onBatchChange(e,date)} />
+                  <a-input-number style={{width:'100px'}} class="margin-left-10" id="batchMoney" placeholder="请输入房价" min="0" precision='2'/>
+                  <a-button class="margin-left-10" type="primary" onClick={() => batchUpdateMoney()}>
+                    确定
+                  </a-button>
+                </div>
+        </div>
+                </div>
+      )
+      },
+    }
+  }
+</script>
+<style>
+  /*日历头部*/
+  .header-select{
+    margin-right: 10px;
+  }
+  /deep/ .header-select .ant-select-selection-selected-value {
+    color: #222;
+    font-weight: bold;
+    font-size: 16px;
+  }
+  .header-title{
+    font-weight: bold;
+    font-size: 17px;
+    color: #222;
+    padding-top: 10px;
+  }
+  .header-title-content{
+    text-align: right;
+  }
+  .margin-left-10{
+    margin-left: 10px;
+  }
+  /*日历单元格,存在内容时,背景为灰色*/
+  /deep/ .ant-fullcalendar-date-has-content {
+    background-color: #f3f3f3;
+  }
+  /*日历单元格-今天 背景*/
+  /deep/ .ant-fullcalendar-fullscreen .ant-fullcalendar-today .ant-fullcalendar-date::after {
+    content: '今天';
+    font-size: 30px;
+    position: absolute;
+    width: 100%;
+    text-align: right;
+    right: 6px;
+    bottom: 0;
+    color: rgba(145, 211, 255, 0.65);
+    letter-spacing: 5px;
+    font-weight: bold;
+  }
+</style>

+ 60 - 0
src/views/settings/components/roomModules/modules/housePriceSchemeLayout/housePriceSchemeLayoutModal.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="关闭">
+    <house-price-scheme-layout-form ref="realForm" @ok="submitCallback" :disabled="disableSubmit"></house-price-scheme-layout-form>
+  </j-modal>
+</template>
+
+<script>
+
+  import housePriceSchemeLayoutForm from './housePriceSchemeLayoutForm'
+  export default {
+    name: 'housePriceSchemeLayoutModal',
+    components: {
+      housePriceSchemeLayoutForm
+    },
+    data () {
+      return {
+        title:'',
+        width:1000,
+        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>