Bladeren bron

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

gqx 2 jaren geleden
bovenliggende
commit
3bb9dcef88

+ 13 - 0
src/api/roomLayout.js

@@ -14,5 +14,18 @@ export function modifyAppState(parameter) {
     })
 }
 
+/**
+ * 修改
+ * @param {Object} parameter layoutId
+ * @returns Axios Promise
+ */
+ export function modify(parameter) {
+    return axios({
+        url: '/rooms/cesRoomLayout/modify/',
+        method: 'put',
+        data: parameter
+    })
+}
+
 
 

BIN
src/assets/clear.png


BIN
src/assets/eye.png


+ 962 - 4
src/views/settings/components/paramSettings.vue

@@ -1,13 +1,971 @@
 <template>
-    <div>参数配置</div>
+    <div>
+        <a-row :gutter="[10,16]">
+            <a-col :md="6" :sm="8">
+                <a-card>
+                    <div class="item">
+                        <div class="item_header">
+                            <div class="item_header_left">
+                                <div class="item_header_left_logo">
+                                    <img class="logo" src="~@/assets/eye.png">
+                                </div>
+                                <div class="item_header_left_title">
+                                    夜审
+                                </div>
+                            </div>
+                            <div class="item_header_right">
+                                <a-switch checked-children="自动" un-checked-children="手动" default-checked
+                                          v-model="nightTrialModel.autoCheck"
+                                          @change="e=>onNightTrialCheckChange(e)"/>
+                            </div>
+                        </div>
+                        <div class="item_content">
+                            <div class="item_content_row">
+                                <div class="row_left">
+                                    <div class="row_left_tip">夜审时间</div>
+                                </div>
+                                <div class="row_right">
+                                    <a-time-picker :open.sync="open" v-model="nightTrialModel.setNightTrialTime" format="HH:mm:ss" style="width: 80%">
+                                        <a-button slot="addon" size="small" @click="handleNightTrialCancel">
+                                            取消
+                                        </a-button>
+                                        <a-button class="margin_left_6" slot="addon" size="small" type="primary" @click="handleNightTrialConfirm">
+                                            确定
+                                        </a-button>
+                                    </a-time-picker>
+                                </div>
+                            </div>
+                            <div class="item_content_row">
+                                <div class="row_left">
+                                    <div class="row_left_tip">自动交班</div>
+                                </div>
+                                <div class="row_right">
+                                    <a-switch checked-children="已开" un-checked-children="已关" default-checked
+                                              v-model="nightTrialModel.autoHand"
+                                              @change="e=>onNightTrialHandChange(e)"/>
+                                </div>
+                            </div>
+                        </div>
+                    </div>
+                </a-card>
+            </a-col>
+            <a-col :md="6" :sm="8">
+                <a-card>
+                    <div class="item">
+                        <div class="item_header">
+                            <div class="item_header_left">
+                                <div class="item_header_left_logo">
+                                    <img class="logo" src="~@/assets/clear.png">
+                                </div>
+                                <div class="item_header_left_title">
+                                    清扫房间选择服务员
+                                </div>
+                            </div>
+                            <div class="item_header_right">
+
+                            </div>
+                        </div>
+                        <div class="item_content">
+                            <div class="item_content_row">
+                                <div class="row_left">
+                                    <div class="row_left_tip">清扫房间选择服务员</div>
+                                </div>
+                                <div class="row_right_1">
+                                    <a-switch checked-children="开启" un-checked-children="关闭" default-checked
+                                              v-model="clearModel.status"
+                                              @change="e=>onClearChange(e)"/>
+                                </div>
+                            </div>
+                        </div>
+                    </div>
+                </a-card>
+            </a-col>
+            <a-col :md="6" :sm="8">
+                <a-card>
+                    <div class="item">
+                        <div class="item_header">
+                            <div class="item_header_left">
+                                <div class="item_header_left_logo">
+                                    <img class="logo" src="~@/assets/clear.png">
+                                </div>
+                                <div class="item_header_left_title">
+                                    房务管理
+                                </div>
+                            </div>
+                            <div class="item_header_right">
+
+                            </div>
+                        </div>
+                        <div class="item_content">
+                            <div class="item_content_row">
+                                <div class="row_left">
+                                    <div class="row_left_tip">开启房务管理功能</div>
+                                </div>
+                                <div class="row_right_1">
+                                    <a-switch checked-children="开启" un-checked-children="关闭" default-checked
+                                              v-model="houseSettingModel.status"
+                                              @change="e=>onHouseSettingChange(e)"/>
+                                </div>
+                            </div>
+                        </div>
+                    </div>
+                </a-card>
+            </a-col>
+            <a-col :md="6" :sm="8">
+                <a-card>
+                    <div class="item">
+                        <div class="item_header">
+                            <div class="item_header_left">
+                                <div class="item_header_left_logo">
+                                    <img class="logo" src="~@/assets/clear.png">
+                                </div>
+                                <div class="item_header_left_title">
+                                    押金设置
+                                </div>
+                            </div>
+                            <div class="item_header_right">
+                                <div v-show="show_deposit">
+                                    <a-button type="primary" shape="circle" icon="check" size="small"
+                                              @click="handleDepositConfirm">
+                                    </a-button>
+                                    <a-button class="margin_left_6" type="danger" shape="circle" icon="close" size="small"
+                                              @click="handleDepositCancel">
+                                    </a-button>
+                                </div>
+                            </div>
+                        </div>
+                        <div class="item_content">
+                            <div class="item_content_row">
+                                <div class="row_left">
+                                    <div class="row_left_tip">计算公式</div>
+                                </div>
+                                <div class="row_right">
+                                    <a-radio-group :value="depositModel.type" @change="handleDepositChange">
+                                        <a-radio-button value="1">
+                                            乘法
+                                        </a-radio-button>
+                                        <a-radio-button value="2">
+                                            加法
+                                        </a-radio-button>
+                                        <a-radio-button value="3">
+                                            固定
+                                        </a-radio-button>
+                                    </a-radio-group>
+                                </div>
+                            </div>
+                            <div class="item_content_row">
+                                <div class="row_left">
+                                    <div class="row_left_tip">押金=</div>
+                                </div>
+                                <div class="row_right">
+                                    <div class="row_right_tip" v-show="depositModel.type != 3">
+                                        <span class="margin_right_4">房费</span>
+                                        <span class="margin_right_4">{{depositModel.formula}}</span>
+                                    </div>
+                                    <a-input-number v-show="depositModel.type == 1" :precision="2"
+                                                    @change="onDepositChange()"
+                                                    v-model="depositModel.multiple" :min="0" :max="999999" />
+                                    <a-input-number v-show="depositModel.type != 1" :precision="2"
+                                                    @change="onDepositChange()"
+                                                    v-model="depositModel.money" :min="0" :max="999999" />
+                                </div>
+                            </div>
+                            <div class="item_content_row">
+                                <div class="row_left">
+                                    <div class="row_left_tip">余额报警</div>
+                                </div>
+                                <div class="row_right">
+                                    <a-switch checked-children="已开" un-checked-children="已关" default-checked
+                                              v-model="depositModel.alarm"
+                                              @change="e=>onDepositAlarmChange(e)"/>
+                                </div>
+                            </div>
+                            <div class="item_content_row">
+                                <div class="row_left">
+                                    <div class="row_left_tip">余额小于</div>
+                                </div>
+                                <div class="row_right">
+                                    <a-input-number :precision="2" v-model="depositModel.less" :min="0" :max="999999"
+                                                    @change="onDepositChange()" />
+                                    <div class="margin_left_6">时报警</div>
+                                </div>
+                            </div>
+                        </div>
+                    </div>
+                </a-card>
+            </a-col>
+            <a-col :md="6" :sm="8">
+                <a-card>
+                    <div class="item">
+                        <div class="item_header">
+                            <div class="item_header_left">
+                                <div class="item_header_left_logo">
+                                    <img class="logo" src="~@/assets/clear.png">
+                                </div>
+                                <div class="item_header_left_title">
+                                    撤销入住
+                                </div>
+                            </div>
+                            <div class="item_header_right">
+                                <div v-show="show_cancel">
+                                    <a-button type="primary" shape="circle" icon="check" size="small"
+                                              @click="handleCancelConfirm">
+                                    </a-button>
+                                    <a-button class="margin_left_6" type="danger" shape="circle" icon="close" size="small"
+                                              @click="handleCancelCancel">
+                                    </a-button>
+                                </div>
+                            </div>
+                        </div>
+                        <div class="item_content">
+                            <div class="item_content_row">
+                                <div class="row_left">
+                                    <div class="row_left_tip">撤销开关</div>
+                                </div>
+                                <div class="row_right">
+                                    <a-switch checked-children="已开" un-checked-children="已关" default-checked
+                                              v-model="cancelModel.status"
+                                              @change="e=>onCancelStatusChange(e)"/>
+                                </div>
+                            </div>
+                            <div class="item_content_row">
+                                <div class="row_left">
+                                    <div class="row_left_tip">有效分钟</div>
+                                </div>
+                                <div class="row_right">
+                                    <a-input-number :precision="2" v-model="cancelModel.minute" :min="0" :max="999999"
+                                                    @change="onCancelChange()" />
+                                    <div class="margin_left_6">内可撤</div>
+                                </div>
+                            </div>
+                        </div>
+                    </div>
+                </a-card>
+            </a-col>
+            <a-col :md="6" :sm="8">
+                <a-card>
+                    <div class="item">
+                        <div class="item_header">
+                            <div class="item_header_left">
+                                <div class="item_header_left_logo">
+                                    <img class="logo" src="~@/assets/clear.png">
+                                </div>
+                                <div class="item_header_left_title">
+                                    其他
+                                </div>
+                            </div>
+                            <div class="item_header_right">
+
+                            </div>
+                        </div>
+                        <div class="item_content">
+                            <div class="item_content_row">
+                                <div class="row_left">
+                                    <div class="row_left_tip">是否显示制卡</div>
+                                </div>
+                                <div class="row_right_1">
+                                    <a-switch checked-children="开启" un-checked-children="关闭" default-checked
+                                              v-model="roomCardModel.status"
+                                              @change="e=>onRoomCardChange(e)"/>
+                                </div>
+                            </div>
+                            <div class="item_content_row">
+                                <div class="row_left">
+                                    <div class="row_left_tip">是否开启会员验证</div>
+                                </div>
+                                <div class="row_right_1">
+                                    <a-switch checked-children="开启" un-checked-children="关闭" default-checked
+                                              v-model="memberVerifyModel.status"
+                                              @change="e=>onMemberVerifyChange(e)"/>
+                                </div>
+                            </div>
+                            <div class="item_content_row">
+                                <div class="row_left">
+                                    <div class="row_left_tip">空脏房可以入住</div>
+                                </div>
+                                <div class="row_right_1">
+                                    <a-switch checked-children="开启" un-checked-children="关闭" default-checked
+                                              v-model="emptyDirtyRoomModel.status"
+                                              @change="e=>onEmptyDirtyRoomChange(e)"/>
+                                </div>
+                            </div>
+                            <div class="item_content_row">
+                                <div class="row_left">
+                                    <div class="row_left_tip">查房完毕才能退房</div>
+                                </div>
+                                <div class="row_right_1">
+                                    <a-switch checked-children="开启" un-checked-children="关闭" default-checked
+                                              v-model="checkOutModel.status"
+                                              @change="e=>onCheckOutChange(e)"/>
+                                </div>
+                            </div>
+                        </div>
+                    </div>
+                </a-card>
+            </a-col>
+        </a-row>
+    </div>
 </template>
 
 <script>
+    import { httpAction, getAction } from '@/api/manage'
+    import moment from 'moment';
     export default {
-        name: "paramSettings"
+        name: "paramSettings",
+        data () {
+            return {
+                labelCol: {
+                    xs: { span: 24 },
+                    sm: { span: 6 },
+                },
+                wrapperCol: {
+                    xs: { span: 24 },
+                    sm: { span: 12 },
+                },
+                url:{
+                    query_nighttrial:'/business/busNightTrial/queryByHotelId',
+                    nighttrial_autocheck:'/business/busNightTrial/editAutoCheck',
+                    nighttrial_time:'/business/busNightTrial/editNightTrialTime',
+                    nighttrial_autohand:'/business/busNightTrial/editAutoHand',
+                    query_clear:'/business/busClear/queryByHotelId',
+                    clear_status:'/business/busClear/editStatus',
+                    query_housesetting:'/business/busHouseSetting/queryByHotelId',
+                    housesetting_status:'/business/busHouseSetting/editStatus',
+                    query_deposit:'/business/busDepositSetting/queryByHotelId',
+                    deposit_edit:'/business/busDepositSetting/editInfo',
+                    query_cancel:'/business/busCancel/queryByHotelId',
+                    cancel_edit:'/business/busCancel/editInfo',
+                    query_roomcard:'/business/busOtherRoomCard/queryByHotelId',
+                    roomcard_status:'/business/busOtherRoomCard/editStatus',
+                    query_memberverify:'/business/busOtherMemberVerify/queryByHotelId',
+                    memberverify_status:'/business/busOtherMemberVerify/editStatus',
+                    query_emptydirtyroom:'/business/busOtherEmptyDirtyRoom/queryByHotelId',
+                    emptydirtyroom_status:'/business/busOtherEmptyDirtyRoom/editStatus',
+                    query_checkout:'/business/busOtherCheckout/queryByHotelId',
+                    checkout_status:'/business/busOtherCheckout/editStatus',
+                },
+                hotelId:'',
+                open: false,
+                nightTrialModel:{
+                    setNightTrialTime:moment('06:00:00','HH:mm:ss'),
+                    autoCheck:true,
+                    autoHand:true
+                },
+                clearModel:{
+                    status:true
+                },
+                houseSettingModel:{
+                    status:true
+                },
+                show_deposit:false,
+                depositModel:{
+                    type:'1',
+                    formula:'+',
+                    money:100,
+                    alarm:true,
+                    alarmValue:1,
+                    less:10.00,
+                    multiple:0.5,
+                },
+                show_cancel:false,
+                cancelModel:{
+                    status:true,
+                    statusValue:1,
+                    minute:60
+                },
+                roomCardModel:{
+                    status:true
+                },
+                memberVerifyModel:{
+                    status:true
+                },
+                emptyDirtyRoomModel:{
+                    status:true
+                },
+                checkOutModel:{
+                    status:true
+                },
+            }
+        },
+        created () {
+            //备份model原始值
+            this.initConfig()
+
+            var info = JSON.parse(localStorage.getItem("storeInfo"));
+            this.hotelId = info.id;
+        },
+        methods:{
+            initConfig(){
+                // 获取夜审信息
+                getAction(this.url.query_nighttrial,{}).then((res)=>{
+                    console.log(res)
+                    if(res.success){
+                        // this.nightTrialModel = res.result
+                        var _time = moment(res.result.setNightTrialTime,'HH:mm:ss')
+                        var _model = {
+                            id:res.result.id,
+                            autoCheck:res.result.autoCheck == 1?true:false,
+                            autoHand:res.result.autoHand == 1?true:false,
+                            setNightTrialTime : _time
+                        }
+                        this.nightTrialModel = _model
+                    }else{
+
+                    }
+                });
+
+                // 获取清扫信息
+                getAction(this.url.query_clear,{}).then((res)=>{
+                    if(res.success){
+                        var _model = {
+                            id:res.result.id,
+                            status:res.result.status == 1?true:false,
+                        }
+                        this.clearModel = _model
+                    }else{
+
+                    }
+                });
+
+                // 获取房务管理信息
+                getAction(this.url.query_housesetting,{}).then((res)=>{
+                    if(res.success){
+                        var _model = {
+                            id:res.result.id,
+                            status:res.result.status == 1?true:false,
+                        }
+                        this.houseSettingModel = _model
+                    }else{
+
+                    }
+                });
+
+                // 获取押金设置
+                getAction(this.url.query_deposit,{}).then((res)=>{
+                    if(res.success){
+                        var _data = res.result;
+                        var _formula = _data.depositType == 1 ?'x':'+';
+                        var _model = {
+                            id:_data.id,
+                            type:_data.depositType+'',
+                            formula:_formula,
+                            multiple:_data.depositMultiple,
+                            money:_data.depositMoney,
+                            alarm:_data.balanceAlarm == 1?true:false,
+                            alarmValue:_data.balanceAlarm,
+                            less:_data.balanceLess,
+                        }
+                        this.depositModel = _model
+                    }else{
+
+                    }
+                });
+
+                // 获取撤销入住信息
+                getAction(this.url.query_cancel,{}).then((res)=>{
+                    if(res.success){
+                        var _model = {
+                            id:res.result.id,
+                            status:res.result.status == 1?true:false,
+                            minute:res.result.minute
+                        }
+                        this.cancelModel = _model
+                    }else{
+
+                    }
+                });
+
+                //获取其他信息
+                //制卡
+                getAction(this.url.query_roomcard,{}).then((res)=>{
+                    if(res.success){
+                        var _model = {
+                            id:res.result.id,
+                            status:res.result.status == 1?true:false,
+                        }
+                        this.roomCardModel = _model
+                    }else{
+
+                    }
+                });
+                //会员验证
+                getAction(this.url.query_memberverify,{}).then((res)=>{
+                    if(res.success){
+                        var _model = {
+                            id:res.result.id,
+                            status:res.result.status == 1?true:false,
+                        }
+                        this.memberVerifyModel = _model
+                    }else{
+
+                    }
+                });
+                //空脏房
+                getAction(this.url.query_emptydirtyroom,{}).then((res)=>{
+                    if(res.success){
+                        var _model = {
+                            id:res.result.id,
+                            status:res.result.status == 1?true:false,
+                        }
+                        this.emptyDirtyRoomModel = _model
+                    }else{
+
+                    }
+                });
+                //退房
+                getAction(this.url.query_checkout,{}).then((res)=>{
+                    if(res.success){
+                        var _model = {
+                            id:res.result.id,
+                            status:res.result.status == 1?true:false,
+                        }
+                        this.checkOutModel = _model
+                    }else{
+
+                    }
+                });
+            },
+            onNightTrialCheckChange(val){
+                console.log('夜审'+val)
+                var _value = 0;
+                if (val){
+                    // 自动
+                    _value = 1;
+                }
+                this.confirmLoading = true;
+                var that = this;
+                var _id = this.nightTrialModel.id?this.nightTrialModel.id:'';
+                var param = {
+                    autoCheck :_value,
+                    hotelId:this.hotelId,
+                    id:_id
+                }
+
+                httpAction(this.url.nighttrial_autocheck,param,'post').then((res)=>{
+
+                    if(res.success){
+                        that.$message.success('操作成功');
+                        that.$emit('ok');
+                        that.nightTrialModel.id = res.result.id
+                    }else{
+                        that.$message.warning(res.message);
+                    }
+                }).finally(() => {
+                    that.confirmLoading = false;
+                })
+            },
+            handleOpenChange(open) {
+                console.log('open', open);
+                this.open = open;
+            },
+            handleNightTrialCancel() {
+                this.open = false;
+            },
+            handleNightTrialConfirm() {
+                this.open = false;
+                this.confirmLoading = true;
+                var that = this;
+                var _time = moment(new Date(this.nightTrialModel.setNightTrialTime)).format('HH:mm:ss');
+                var _id = this.nightTrialModel.id?this.nightTrialModel.id:'';
+                var param = {
+                    setNightTrialTime :_time,
+                    hotelId:this.hotelId,
+                    id:_id
+                }
+                httpAction(this.url.nighttrial_time,param,'post').then((res)=>{
+                    if(res.success){
+                        that.$message.success('操作成功');
+                        that.$emit('ok');
+                        that.nightTrialModel.id = res.result.id
+                    }else{
+                        that.$message.warning(res.message);
+                    }
+                }).finally(() => {
+                    that.confirmLoading = false;
+                })
+            },
+            onNightTrialHandChange(val){
+                console.log('夜审'+val)
+                var _value = 0;
+                if (val){
+                    // 自动
+                    _value = 1;
+                }
+                this.confirmLoading = true;
+                var that = this;
+                var _id = this.nightTrialModel.id?this.nightTrialModel.id:'';
+                var param = {
+                    autoHand :_value,
+                    hotelId:this.hotelId,
+                    id:_id
+                }
+
+                httpAction(this.url.nighttrial_autohand,param,'post').then((res)=>{
+                    if(res.success){
+                        that.$message.success('操作成功');
+                        that.$emit('ok');
+                        that.nightTrialModel.id = res.result.id
+                    }else{
+                        that.$message.warning(res.message);
+                    }
+                }).finally(() => {
+                    that.confirmLoading = false;
+                })
+            },
+            onClearChange(val){
+                var _value = 0;
+                if (val){
+                    // 开启
+                    _value = 1;
+                }
+                this.confirmLoading = true;
+                var that = this;
+                var _id = this.clearModel.id?this.clearModel.id:'';
+                var param = {
+                    status :_value,
+                    hotelId:this.hotelId,
+                    id:_id
+                }
+
+                httpAction(this.url.clear_status,param,'post').then((res)=>{
+                    if(res.success){
+                        that.$message.success('操作成功');
+                        that.$emit('ok');
+                        that.clearModel.id = res.result.id
+                    }else{
+                        that.$message.warning(res.message);
+                    }
+                }).finally(() => {
+                    that.confirmLoading = false;
+                })
+            },
+            onHouseSettingChange(val){
+                var _value = 0;
+                if (val){
+                    // 开启
+                    _value = 1;
+                }
+                this.confirmLoading = true;
+                var that = this;
+                var _id = this.houseSettingModel.id?this.houseSettingModel.id:'';
+                var param = {
+                    status :_value,
+                    hotelId:this.hotelId,
+                    id:_id
+                }
+
+                httpAction(this.url.housesetting_status,param,'post').then((res)=>{
+                    if(res.success){
+                        that.$message.success('操作成功');
+                        that.$emit('ok');
+                        that.houseSettingModel.id = res.result.id
+                    }else{
+                        that.$message.warning(res.message);
+                    }
+                }).finally(() => {
+                    that.confirmLoading = false;
+                })
+            },
+            handleDepositChange(e){
+                console.log(e.target.value)
+                var _type = e.target.value;
+                this.depositModel.type = _type;
+                this.show_deposit = true;
+                if (_type == 1){
+                    this.depositModel.formula = 'x'
+                }
+                if (_type == 2){
+                    this.depositModel.formula = '+'
+                }
+            },
+            handleDepositCancel(){
+                this.show_deposit = false;
+            },
+            handleDepositConfirm(){
+                // 押金设置提交
+                this.confirmLoading = true;
+                var that = this;
+                var _id = this.depositModel.id?this.depositModel.id:'';
+                var param = {
+                    hotelId:this.hotelId,
+                    id:_id,
+                    depositType:this.depositModel.type,
+                    depositMultiple:this.depositModel.multiple,
+                    depositMoney:this.depositModel.money,
+                    balanceAlarm:this.depositModel.alarmValue,
+                    balanceLess:this.depositModel.less,
+                }
+
+                httpAction(this.url.deposit_edit,param,'post').then((res)=>{
+                    if(res.success){
+                        that.$message.success('操作成功');
+                        that.$emit('ok');
+                        that.depositModel.id = res.result.id
+                    }else{
+                        that.$message.warning(res.message);
+                    }
+                }).finally(() => {
+                    that.confirmLoading = false;
+                    that.show_deposit = false;
+                })
+            },
+            onDepositChange(){
+                this.show_deposit = true;
+            },
+            onDepositAlarmChange(val){
+                this.show_deposit = true;
+                var _value = 0;
+                if (val){
+                    // 自动
+                    _value = 1;
+                }
+                this.depositModel.alarmValue = _value;
+            },
+            onCancelChange(){
+                this.show_cancel = true;
+            },
+            onCancelStatusChange(val){
+                this.show_cancel = true;
+                var _value = 0;
+                if (val){
+                    // 自动
+                    _value = 1;
+                }
+                this.cancelModel.statusValue = _value;
+            },
+            handleCancelCancel(){
+                this.show_cancel = false;
+            },
+            handleCancelConfirm(){
+                this.confirmLoading = true;
+                var that = this;
+                var _id = this.cancelModel.id?this.cancelModel.id:'';
+                var param = {
+                    hotelId:this.hotelId,
+                    id:_id,
+                    status:this.cancelModel.statusValue,
+                    minute:this.cancelModel.minute,
+                }
+
+                httpAction(this.url.cancel_edit,param,'post').then((res)=>{
+                    if(res.success){
+                        that.$message.success('操作成功');
+                        that.$emit('ok');
+                        that.cancelModel.id = res.result.id
+                    }else{
+                        that.$message.warning(res.message);
+                    }
+                }).finally(() => {
+                    that.confirmLoading = false;
+                    that.show_cancel = false;
+                })
+            },
+            onRoomCardChange(val){
+                var _value = 0;
+                if (val){
+                    // 开启
+                    _value = 1;
+                }
+                this.confirmLoading = true;
+                var that = this;
+                var _id = this.roomCardModel.id?this.roomCardModel.id:'';
+                var param = {
+                    status :_value,
+                    hotelId:this.hotelId,
+                    id:_id
+                }
+
+                httpAction(this.url.roomcard_status,param,'post').then((res)=>{
+                    if(res.success){
+                        that.$message.success('操作成功');
+                        that.$emit('ok');
+                        that.roomCardModel.id = res.result.id
+                    }else{
+                        that.$message.warning(res.message);
+                    }
+                }).finally(() => {
+                    that.confirmLoading = false;
+                })
+            },
+            onMemberVerifyChange(val){
+                var _value = 0;
+                if (val){
+                    // 开启
+                    _value = 1;
+                }
+                this.confirmLoading = true;
+                var that = this;
+                var _id = this.memberVerifyModel.id?this.memberVerifyModel.id:'';
+                var param = {
+                    status :_value,
+                    hotelId:this.hotelId,
+                    id:_id
+                }
+
+                httpAction(this.url.memberverify_status,param,'post').then((res)=>{
+                    if(res.success){
+                        that.$message.success('操作成功');
+                        that.$emit('ok');
+                        that.memberVerifyModel.id = res.result.id
+                    }else{
+                        that.$message.warning(res.message);
+                    }
+                }).finally(() => {
+                    that.confirmLoading = false;
+                })
+            },
+            onEmptyDirtyRoomChange(val){
+                var _value = 0;
+                if (val){
+                    // 开启
+                    _value = 1;
+                }
+                this.confirmLoading = true;
+                var that = this;
+                var _id = this.emptyDirtyRoomModel.id?this.emptyDirtyRoomModel.id:'';
+                var param = {
+                    status :_value,
+                    hotelId:this.hotelId,
+                    id:_id
+                }
+
+                httpAction(this.url.emptydirtyroom_status,param,'post').then((res)=>{
+                    if(res.success){
+                        that.$message.success('操作成功');
+                        that.$emit('ok');
+                        that.emptyDirtyRoomModel.id = res.result.id
+                    }else{
+                        that.$message.warning(res.message);
+                    }
+                }).finally(() => {
+                    that.confirmLoading = false;
+                })
+            },
+            onCheckOutChange(val){
+                var _value = 0;
+                if (val){
+                    // 开启
+                    _value = 1;
+                }
+                this.confirmLoading = true;
+                var that = this;
+                var _id = this.checkOutModel.id?this.checkOutModel.id:'';
+                var param = {
+                    status :_value,
+                    hotelId:this.hotelId,
+                    id:_id
+                }
+
+                httpAction(this.url.checkout_status,param,'post').then((res)=>{
+                    if(res.success){
+                        that.$message.success('操作成功');
+                        that.$emit('ok');
+                        that.checkOutModel.id = res.result.id
+                    }else{
+                        that.$message.warning(res.message);
+                    }
+                }).finally(() => {
+                    that.confirmLoading = false;
+                })
+            },
+        }
     }
 </script>
 
-<style scoped>
-
+<style lang="less" scoped>
+    .item{
+        text-align: center;
+        height: 220px;
+        margin-bottom: 10px;
+    }
+    .item_header{
+        display: flex;
+        flex-direction: row;
+        align-items: center;
+        justify-items: center;
+        justify-content: center;
+    }
+    .item_header_left{
+        flex: 3;
+        display: flex;
+        flex-direction: row;
+    }
+    .item_header_left_logo{
+        flex: 1;
+    }
+    .item_header_left_logo .logo{
+        width: 32px;
+        height: 32px;
+        max-height: 50px;
+        max-width: 50px;
+    }
+    .item_header_left_title{
+        flex: 2;
+        font-size: 14px;
+        font-weight: bold;
+        color: black;
+        display: flex;
+        align-items: center;
+    }
+    .item_header_right{
+        flex: 2;
+    }
+    .item_content{
+        padding-top: 15px;
+        display: flex;
+        flex-direction: column;
+        align-items: center;
+        justify-items: center;
+        font-size: 14px;
+    }
+    .item_content_row{
+        width: 90%;
+        display: flex;
+        flex-direction: row;
+        padding-bottom: 12px;
+    }
+    .row_left{
+        flex: 1;
+        display: flex;
+        flex-direction: row;
+        align-items: center;
+    }
+    .row_left_tip{
+        flex: 1;
+    }
+    .row_right{
+        flex: 2;
+        text-align: left;
+        display: flex;
+        flex-direction: row;
+        align-items: center;
+    }
+    .row_right_1{
+        flex: 1;
+        text-align: left;
+    }
+    .row_right_tip{
+        display: flex;
+        align-items: center;
+    }
+    .row_middle{
+        flex: 1;
+    }
+    .row_right {
+        /deep/ .ant-time-picker-panel-addon{
+            text-align: right;
+        }
+    }
+    .margin_left_6{
+        margin-left: 6px;
+    }
+    .margin_left_4{
+        margin-left: 4px;
+    }
+    .margin_right_4{
+        margin-right: 4px;
+    }
+    /*.ant-time-picker-panel-addon{*/
+    /*    text-align: right;*/
+    /*}*/
 </style>

+ 5 - 1
src/views/settings/components/roomModules/RoomLayoutFormDetailModal.vue

@@ -3,12 +3,13 @@
     :title="title"
     :width="width"
     :visible="visible"
+    :footer="null"
     switchFullscreen
     @ok="handleOk"
     :okButtonProps="{ class:{'jee-hidden': disableSubmit} }"
     @cancel="handleCancel"
     cancelText="关闭">
-    <bus-market-member-form ref="detailForm" @ok="submitCallback" :disabled="disableSubmit"></bus-market-member-form>
+    <bus-market-member-form @saveOk="onSaveOk" ref="detailForm" @ok="submitCallback" :disabled="disableSubmit"></bus-market-member-form>
   </j-modal>
 </template>
 
@@ -47,6 +48,9 @@
         },
         submitCallback() {
           
+        },
+        onSaveOk() {
+          this.$emit("saveOk")
         }
     }
   }

+ 7 - 3
src/views/settings/components/roomModules/roomLayoutDetailForm.vue

@@ -1,13 +1,13 @@
 <template>
     <a-tabs default-active-key="1" @change="()=>{}">
         <a-tab-pane key="1" tab="房型详情">
-          <detail></detail>
+          <detail ref="detail" @saveOk="onSaveOk"></detail>
         </a-tab-pane>
         <a-tab-pane key="2" tab="设备服务">
-          <device></device>
+          <device ref="device"></device>
         </a-tab-pane>
         <a-tab-pane key="3" tab="房型图片">
-          <layout-image></layout-image>
+          <layout-image ref="img"></layout-image>
         </a-tab-pane>
       </a-tabs>
 </template>
@@ -87,8 +87,12 @@ export default {
         this.modelDefault = JSON.parse(JSON.stringify(this.model));
     },
     methods: {
+        onSaveOk() {
+            this.$emit('saveOk')
+        },
         setRaw(item) {
             this.model = JSON.parse(JSON.stringify(item))
+            this.$refs.detail.setData(this.model)
         },
         initData() {
             getRoomPlans(this.model.hotelId, null).then((res) => {

+ 107 - 6
src/views/settings/components/roomModules/roomLayoutDetailForm/roomLayoutDetail.vue

@@ -1,32 +1,133 @@
 <template>
     <div>
         <a-form-model ref="form" :model="model" :rules="validatorRules">
-            TODO:详情配置
+            <a-form-model-item label="启用类别" :labelCol="labelCol" :wrapperCol="wrapperCol" prop="checkType">
+                <a-checkbox-group :default-value="defvals" v-model="model.checkType" :options="checkOptions" @change="onChange" />
+            </a-form-model-item>
+            <a-form-model-item label="窗户" :labelCol="labelCol" :wrapperCol="wrapperCol" prop="windows">
+                <a-radio-group v-model="model.windows" default-value="1">
+                    <a-radio :value="1">
+                      有
+                    </a-radio>
+                    <a-radio :value="0">
+                      无
+                    </a-radio>
+                    
+                  </a-radio-group>
+            </a-form-model-item>
+            <a-form-model-item label="房型面积" :labelCol="labelCol" :wrapperCol="wrapperCol" prop="area">
+                <a-input-number v-model="model.area" />
+            </a-form-model-item>
+            <a-form-model-item label="床型面积" :labelCol="labelCol" :wrapperCol="wrapperCol" prop="bedSize">
+                <a-input-number v-model="model.bedSize" />
+            </a-form-model-item>
+
+            <a-form-model-item label="描述" :labelCol="labelCol" :wrapperCol="wrapperCol" prop="remark">
+                <j-editor v-model="model.remark"/>
+            </a-form-model-item>
+            <a-button :disabled="submitLoading" :loading="submitLoading" @click="submitForm" type="primary">保存</a-button>
         </a-form-model>
     </div>
 </template>
 
 <script>
+import { modify } from '@/api/roomLayout'
 export default {
     name: 'HotelSaasTenantFrontendRoomLayoutDetail',
-
+    props: {
+       
+    },
     data() {
         return {
+            submitLoading: false,
+            defvals:[],
+            checkOptions: [
+                {
+                    label: '全天房',
+                    value: '1'
+                },
+                {
+                    label: '钟点房',
+                    value: '2'
+                }
+            ],
+            labelCol: {
+                xs: { span: 24 },
+                sm: { span: 5 },
+            },
+            wrapperCol: {
+                xs: { span: 24 },
+                sm: { span: 16 },
+            },
             model: {
-
+                id: null,
+                checkType: null,
+                windows: null,
+                area: 0,
+                bedSize: 0,
+                remark: ''
             },
             validatorRules: {
-
+                windows: [{ required: true, message: "请选择是否有窗" }],
+                area: [{ required: true, message: "请填写通用面积" }],
+                bedSize: [{ required: true, message: "请填写床型面积" }],
             }
         };
     },
 
     mounted() {
-        
+
     },
 
     methods: {
-        
+        setData(data) {
+            this.model = JSON.parse(JSON.stringify(data))
+            if(this.model.checkType) {
+                this.model.checkType = this.model.checkType.split(',')
+                this.defvals = this.model.checkType
+            } else {
+                this.model.checkType = null
+            }
+            this.model.windows = this.model.windows? 1:0
+        },
+        submitForm() {
+            const that = this;
+            // 触发表单验证
+            this.$refs.form.validate((valid) => {
+                if (valid) {
+                    let data = JSON.parse(JSON.stringify(this.model))
+                    data.checkType = (data.checkType||[]).toString()
+                    data.windows = data.windows == 1
+                    
+                    // that.confirmLoading = true;
+                    modify({
+                        id: data.id,
+                        hotelId: data.hotelId,
+                        name: data.name,
+                        marketPrice: data.marketPrice,
+                        canLivePersonNum: data.canLivePersonNum,
+                        breakfastNum: data.breakfastNum,
+                        lunchNum: data.lunchNum,
+                        dinnerNum: data.dinnerNum,
+                        checkType: data.checkType,
+                        windows: data.windows,
+                        remark: data.remark,
+                        area: data.area,
+                        bedSize: data.bedSize
+                    }).then(res => {
+                        if(res.code == 200) {
+                            this.$emit('saveOk')
+                            this.$message.success("保存成功")
+                        }
+                    })
+                }
+            });
+
+        },
+        onChange(e) {
+            console.log(this.model.checkType);
+        }
+
     },
 };
 </script>

+ 182 - 6
src/views/settings/components/roomModules/roomLayoutDetailForm/roomLayoutDevice.vue

@@ -1,32 +1,208 @@
 <template>
     <div>
         <a-form-model ref="form" :model="model" :rules="validatorRules">
-            TODO:房间配置
+            <a-form-model-item label="房型标签" :labelCol="labelCol" :wrapperCol="wrapperCol" prop="tags">
+                <div style="display: flex;">
+                    <div>
+                        <a-tag closable color="cyan" closavle v-for="(item, index) in model.tags"
+                            @close="onTagClose(index)">
+                            {{ item }}
+                        </a-tag>
+                    </div>
+                    <div style="display: flex;justify-content:center;align-items:center;" v-if="addIng">
+                        <span slot="enterButton" style="flex: 1;">
+                            <a-input v-model="addText" placeholder="请输入标签">
+                            </a-input>
+                        </span>
+                        <a-button @click="onadd">
+                            确定
+                        </a-button>
+                        <a-button @click="addIng = false">
+                            取消
+                        </a-button>
+                    </div>
+                    <a-button v-else type="primary" @click="addTag">添加</a-button>
+                </div>
+            </a-form-model-item>
+            <a-form-model-item label="房间设施" :labelCol="labelCol" :wrapperCol="wrapperCol" prop="facilities">
+                <a-checkbox-group :default-value="defvals" v-model="model.facilities" :options="checkOptions" />
+            </a-form-model-item>
+            <a-form-model-item label="取消规则" :labelCol="labelCol" :wrapperCol="wrapperCol" prop="cancelRule">
+                <a-radio-group v-model="model.cancelRule">
+                    <a-radio :style="radioStyle" :value="1">
+                        <span style="display: inline-block;">
+                            <span style="width: 76px;display:inline-block;">入住当天</span>
+                            <span style="display: inline-block;width: 20px;height:1px;"></span>
+                            <a-time-picker :open.sync="open1" v-model="beforeTime1" format="HH:mm">
+                                <a-button slot="addon" size="small" type="primary" @click="open1 = false">
+                                  确定
+                                </a-button>
+                              </a-time-picker>
+                              <span>前可取消</span>
+                            </span>
+                    </a-radio>
+                    <a-radio :style="radioStyle" :value="2">
+                        <span style="display: inline-block;">
+                            <span style="width: 76px;display:inline-block;">入住前</span>
+                            <span style="display: inline-block;width: 20px;height:1px;"></span>
+                            <a-input-number id="inputNumber" v-model="cancelDay1" :min="1" />
+                            <span>天</span>
+                            <a-time-picker :open.sync="open2" v-model="beforeTime2" format="HH:mm">
+                                <a-button slot="addon" size="small" type="primary" @click="open2 = false">
+                                  确定
+                                </a-button>
+                              </a-time-picker>
+                              <span>前可取消</span>
+                            </span>
+                    </a-radio>
+                    <a-radio :style="radioStyle" :value="3">
+                        <span style="display: inline-block;">
+                            <span style="width: 76px;display:inline-block;">入住前</span>
+                            <span style="display: inline-block;width: 20px;height:1px;"></span>
+                            <a-input-number id="inputNumber" v-model="cancelDay1" :min="1" />
+                            <span>天</span>
+                            <a-time-picker :open.sync="open2" v-model="beforeTime2" format="HH:mm">
+                                <a-button slot="addon" size="small" type="primary" @click="open2 = false">
+                                  确定
+                                </a-button>
+                              </a-time-picker>
+                              <span>前可取消,</span>
+                              <span>收取</span>
+                              <a-input-number id="inputNumber" v-model="model.cancelMoney" :min="0" />
+                              %罚金
+                            </span>
+                    </a-radio>
+                    <a-radio :style="radioStyle" :value="4">
+                        不可取消
+                    </a-radio>
+                    <a-radio :style="radioStyle" :value="5">
+                        可取消
+                    </a-radio>
+                </a-radio-group>
+            </a-form-model-item>
+            <a-button :disabled="submitLoading" :loading="submitLoading" @click="submitForm"
+                type="primary">保存</a-button>
         </a-form-model>
     </div>
 </template>
 
 <script>
 export default {
-    name: 'HotelSaasTenantFrontendRoomLayoutDevice',
+    name: 'HotelSaasTenantFrontendRoomLayoutDetail',
 
     data() {
         return {
+            cancelDay1: 1,
+            cancelDay2: 1,
+            beforeTime1: null,
+            beforeTime2: null,
+            beforeTime3: null,
+            radioStyle: {
+                display: 'block',
+                height: '30px',
+                lineHeight: '30px',
+            },
+            open1: false,
+            open2: false,
+            open3: false,
+            submitLoading: false,
+            defvals: [],
+            checkOptions: [
+                {
+                    label: '有窗户',
+                    value: '有窗户'
+                },
+                {
+                    label: '无烟房',
+                    value: '无烟房'
+                },
+                {
+                    label: '空调',
+                    value: '空调'
+                },
+                {
+                    label: '洗衣机',
+                    value: '洗衣机'
+                },
+                {
+                    label: '大床',
+                    value: '大床'
+                }
+            ],
+            labelCol: {
+                xs: { span: 24 },
+                sm: { span: 5 },
+            },
+            wrapperCol: {
+                xs: { span: 24 },
+                sm: { span: 16 },
+            },
+            addIng: false,
+            addText: '',
             model: {
-
+                id: null,
+                tags: [],
+                facilities: null,
+                cancelRule: null,
+                windows: null,
+                cancelBeforeTime: null,
+                cancelMoney: 0,
+                area: 0,
+                bedSize: 0,
+                remark: ''
             },
             validatorRules: {
-
+                windows: [{ required: true, message: "请选择是否有窗" }],
+                area: [{ required: true, message: "请填写通用面积" }],
+                bedSize: [{ required: true, message: "请填写床型面积" }],
             }
         };
     },
 
     mounted() {
-        
+
     },
 
     methods: {
-        
+        onTagClose(item) {
+            delete this.model.tags[item]
+        },
+        addTag() {
+            this.addIng = true
+            this.addText = ''
+        },
+        onadd() {
+            if (!this.addText) {
+                this.$message.warning('请输入标签名')
+                return
+            }
+            if (!this.model.tags.includes(this.addText)) {
+                this.model.tags.push(this.addText)
+                this.addIng = false
+            } else {
+                this.$message.warning(`已存在该标签`)
+            }
+
+        },
+        submitForm() {
+            const that = this;
+            // 触发表单验证
+            this.$refs.form.validate((valid) => {
+                if (valid) {
+                    that.confirmLoading = true;
+                    if (this.model.id && this.model.id != '') {
+                        this.doModify()
+                    } else {
+                        this.doCreate()
+                    }
+                }
+            });
+
+        },
+        onChange(item) {
+
+        }
+
     },
 };
 </script>

+ 27 - 3
src/views/settings/components/roomModules/roomLayoutDetailForm/roomLayoutImage.vue

@@ -1,7 +1,14 @@
 <template>
     <div>
         <a-form-model ref="form" :model="model" :rules="validatorRules">
-            TODO:房型大图
+            <a-form-model-item label="房型大图" >
+                <j-image-upload class="avatar-uploader" text="上传" v-model="model.ewm" ></j-image-upload>
+              </a-form-model-item>
+              <a-form-model-item label="图片" >
+                <j-image-upload class="avatar-uploader" text="上传" v-model="model.imgList" :isMultiple="true"></j-image-upload>
+              </a-form-model-item>
+              <a-button :disabled="submitLoading" :loading="submitLoading" @click="submitForm"
+                type="primary">保存</a-button>
         </a-form-model>
     </div>
 </template>
@@ -12,8 +19,11 @@ export default {
 
     data() {
         return {
+            submitLoading: false,
             model: {
-
+                id: 0,
+                ewm: null,
+                imgList: null
             },
             validatorRules: {
 
@@ -26,7 +36,21 @@ export default {
     },
 
     methods: {
-        
+        submitForm() {
+            const that = this;
+            // 触发表单验证
+            this.$refs.form.validate((valid) => {
+                if (valid) {
+                    that.confirmLoading = true;
+                    if (this.model.id && this.model.id != '') {
+                        this.doModify()
+                    } else {
+                        this.doCreate()
+                    }
+                }
+            });
+
+        },
     },
 };
 </script>

+ 5 - 1
src/views/settings/components/roomModules/roomLayoutList.vue

@@ -96,7 +96,7 @@
         </div>
         <room-layout-form ref="modalForm" @ok="modalFormOk"></room-layout-form>
         <room-layout-price-modal ref="priceModal" @ok="onPriceSave"></room-layout-price-modal>
-        <room-layout-detail-modal ref="detailModal"></room-layout-detail-modal>
+        <room-layout-detail-modal @saveOk="onSaveOk" ref="detailModal"></room-layout-detail-modal>
     </a-card>
 </template>
   
@@ -199,6 +199,7 @@ export default {
                 importExcelUrl:
                     "rooms/cesRoomLayout/importExcel",
             },
+           
             dictOptions: {},
             superFieldList: [],
             selectedRowKeys: [],
@@ -212,6 +213,9 @@ export default {
         // this.loadData()
     },
     methods: {
+        onSaveOk() {
+                this.loadData()
+            },
         onPriceSave() {
 
         },

+ 77 - 6
src/views/settings/components/roomModules/stockTypeForm.vue

@@ -23,12 +23,20 @@
                 </a-form-model-item>
 
                 <a-form-model-item label="应用范围" :labelCol="labelCol" :wrapperCol="wrapperCol" prop="lunchNum">
-                    <a-checkbox :indeterminate="indeterminate" :checked="checkAll" @change="onCheckAllChange">
-                        Check all
+                    <a-checkbox-group v-model="model.checkedList" :options="plainOptions" @change="onChange" />
+                </a-form-model-item>
+                <a-form-model-item v-show="model.checkedList.includes('2')" label="POS类型" :labelCol="labelCol" :wrapperCol="wrapperCol" prop="posType">
+                    <a-checkbox :indeterminate="indeterminatePos" :checked="posCheckAll" @change="onCheckAllChangePos">
+                        全选
                     </a-checkbox>
-                    <a-checkbox-group v-model="checkedList" :options="plainOptions" @change="onChange" />
+                    <a-checkbox-group v-model="model.postTypes" :options="posOptions" @change="onChangePos" />
+                </a-form-model-item>
+                <a-form-model-item v-show="model.checkedList.includes('3')" label="娱乐类型" :labelCol="labelCol" :wrapperCol="wrapperCol" prop="funType">
+                    <a-checkbox :indeterminate="indeterminateFun" :checked="funCheckAll" @change="onCheckAllChangeFun">
+                        全选
+                    </a-checkbox>
+                    <a-checkbox-group v-model="model.funTypes" :options="funOptions" @change="onChangeFun" />
                 </a-form-model-item>
-
                 <a-form-model-item label="排序" :labelCol="labelCol" :wrapperCol="wrapperCol" prop="dinnerNum">
                     <a-input-number style="width:50%;" v-model="model.dinnerNum" :min="0"  placeholder="请输入排序"/>
                 </a-form-model-item>
@@ -36,6 +44,7 @@
 
         </j-form-container>
     </a-spin>
+
 </template>
 <script>
 import { getRoomPlans, getSelectList } from "@/api/api";
@@ -47,6 +56,8 @@ export default {
     name: "BusMarketMemberForm",
     props: {
         disabled: {
+
+            
             type: Boolean,
             default: false,
             required: false,
@@ -54,16 +65,37 @@ export default {
     },
     data() {
         return {
+            indeterminatePos: true,
+            indeterminateFun:true,
+            posCheckAll: false,
+            funCheckAll:false,
+            plainOptions:[
+                { label: '客房', value: '1' },
+                { label: 'POS', value: '2' },
+                { label: '娱乐', value: '3' },
+            ],
+            posOptions:[
+               { label: '茶室', value: '1' },
+                { label: '餐厅', value: '2' },
+                { label: '超市', value: '3' },
+            ],
+            funOptions:[
+               { label: '茶室', value: '1' },
+                { label: '餐厅', value: '2' },
+                { label: '超市', value: '3' },
+            ],
             selectData:[],
             model: {
                 id: "",
                 hotelId: 0,
                 name: null,
                 marketPrice: null,
-                canLivePersonNum: "0",
+                canLivePersonNum: true,
                 breakfastNum: 0,
                 lunchNum: 0,
-                dinnerNum: 0
+                checkedList: ["1"],
+                postTypes:[],
+                funTypes:[]
             },
             labelCol: {
                 xs: { span: 24 },
@@ -106,6 +138,45 @@ export default {
         this.modelDefault = JSON.parse(JSON.stringify(this.model));
     },
     methods: {
+        onChangePos(checkedList){
+            this.indeterminatePos = !!checkedList.length && checkedList.length < this.posOptions.length;
+            this.posCheckAll = checkedList.length === this.posOptions.length;
+        },
+        onChangeFun(checkedList){
+            this.indeterminateFun = !!checkedList.length && checkedList.length < this.funOptions.length;
+            this.funCheckAll = checkedList.length === this.funOptions.length;
+        },
+        onChange(checkedList) {
+           if(checkedList.length == 0){
+              this.$message.error("应用范围必须选择一项!");
+              this.model.checkedList.push("1")
+           }
+         
+        },
+        onCheckAllChangePos(e) {   
+            this.model.postTypes = e.target.checked ? this.posOptions.map(v => v.value) : []
+            this.indeterminatePos = false
+            this.posCheckAll = e.target.checked
+            // Object.assign(this, {
+            //     model:{
+            //         postTypes: e.target.checked ? this.posOptions.map(v => v.value) : []
+            //     },
+            //     indeterminatePos: false,
+            //     ,
+            // });
+        },
+        onCheckAllChangeFun(e) {   
+            this.model.funTypes = e.target.checked ? this.funOptions.map(v => v.value) : []
+            this.indeterminateFun = false
+            this.funCheckAll = e.target.checked
+            // Object.assign(this, {
+            //     model:{
+            //         funTypes: e.target.checked ? this.funOptions.map(v => v.value) : []
+            //     },
+            //     indeterminateFun: false,
+            //     funCheckAll: e.target.checked,
+            // });
+        },
         initData() {
             getRoomPlans(this.model.hotelId, null).then((res) => {
                 if (res.success) {