<template> <div> <div class="query-box" style="border-bottom: none;"> <ul> <li> <span> <em>{{$t('system.quety_area')}}</em> <el-select v-model="msg.Province" filterable @change="getProvinceList(msg.Province,2)" :placeholder="$t('hotel.hotel_province')"> <el-option :key="0" :value="0" label="请选择"></el-option> <el-option v-for="item in provinceList" :key="item.ID" :label="item.Name" :value="item.ID"></el-option> </el-select> <el-select v-model="msg.City" filterable :placeholder="$t('hotel.hotel_city')"> <el-option :key="0" :value="0" label="请选择"></el-option> <el-option v-for="item in cityList" :key="item.ID" :label="item.Name" :value="item.ID"></el-option> </el-select> </span> </li> <li> <span><em>{{$t('admin.admin_company')}}</em> <el-select filterable v-model='msg.OutBranchId' :placeholder="$t('pub.unlimitedSel')"> <el-option :label="$t('pub.unlimitedSel')" :value='-1'></el-option> <el-option v-for='item in companyList' :label='item.BName' :value='item.Id' :key="item.Id"> </el-option> </el-select> </span> </li> <li> <span> <em>星级</em> <el-select v-model="msg.Star" :placeholder="$t('pub.pleaseSel')"> <el-option :label="$t('pub.unlimitedSel')" :value='0'></el-option> <el-option label="3星或商务" :value='3'></el-option> <el-option label="4星" :value='4'></el-option> <el-option label="5星" :value='5'></el-option> </el-select> </span> </li> <li> <span> <em>价格区间</em> <el-select v-model="msg.PriceLevel" :placeholder="$t('pub.pleaseSel')"> <el-option :label="$t('pub.unlimitedSel')" :value='0'></el-option> <el-option label="5000以下" :value='1'></el-option> <el-option label="5000~6000" :value='2'></el-option> <el-option label="6000~7000" :value='3'></el-option> <el-option label="7000~8000" :value='4'></el-option> <el-option label="8000~9000" :value='5'></el-option> <el-option label="9000~10000" :value='6'></el-option> <el-option label="10000以上" :value='7'></el-option> </el-select> </span> </li> <li><span><em>日期</em> <el-date-picker v-model='msg.StartDate' value-format="yyyy-MM-dd" type="date" :picker-options="beforeCheck"> </el-date-picker> <el-date-picker v-model='msg.EndDate' value-format="yyyy-MM-dd" type="date" :picker-options="afterCheck"> </el-date-picker> </span> </li> <li> <span> <em>供应商</em> <el-select v-model="msg.Supplier" placeholder="请选择"> <el-option :label="$t('pub.unlimitedSel')" :value='0'></el-option> <el-option v-for="(item,index) in SupplierList" :key="index" :label="item.Name" :value="item.ID"> </el-option> </el-select> </span> </li> <li> <span> <em>酒店</em> <el-select v-model="msg.HotelChooseArray" :placeholder="$t('pub.pleaseSel')" class="multiple_input w300" filterable multiple :multiple-limit="3"> <el-option v-for="item in HotelList" :key="item.ID" :label="item.Name" :value="item.ID"></el-option> </el-select> </span> </li> <li> <input type="button" class="normalBtn" value="温馨提示" @click="showNotice=true,resetPageIndex(),GetHotelTipList()" /> <input type="button" class="normalBtn" value="查询" @click="getList()" /> <input type="button" class="normalBtn" value="下载" @click="DownLoadHotelQuery()" /> </li> </ul> </div> <div style="width: 100%;min-height:200px; overflow-x: auto;padding-bottom: 10px; " class="HotelQueryList" v-loading="loading"> <div class="hotelProductManage2_tableBox" style="margin-bottom:20px;"> <span style="color:#000000;background-color: #ff3737;padding:2px 4px;border-radius:5px">红日</span> <span style="color:#000000;background-color: #ff99cc;padding:2px 4px;border-radius:5px">旺季</span> <span style="color:#000000;background-color: #bcd6ee;padding:2px 4px;border-radius:5px">平季</span> <span style="color:#000000;background-color: #DDDDDD;padding:2px 4px;border-radius:5px">淡季</span> <span style="color:#000000;background-color: #02F78E;padding:2px 4px;border-radius:5px">特别价</span> </div> <template v-if="isShow"> <el-table v-if="dataList.length>0" :data="dataList" style="width:100%" border v-loading='loading' :height="tableHeight"> <el-table-column fixed label="酒店名称" min-width="180"> <template slot-scope="scope"> <div style="text-decoration: underline;cursor:pointer" @click="GotoHotel(scope.row.HotelId)"> {{scope.row.HotelName}}</div> <div>{{scope.row.TotalInventory}}</div> </template> </el-table-column> <el-table-column label="价格&库存" fixed min-width="120"> <template slot-scope="scope"> <div class="Hotel_kong">价格</div> <div class="Hotel_kong" style="min-width:60px;">总/用/剩</div> <div class="Hotel_kong">超定</div> </template> </el-table-column> <el-table-column v-for='(item,index) in dataList[0].subList' :label="getDateList(item.DateStr)" :key='index' min-width="120"> <template slot-scope="scope"> <div class="Hotel_kong Com_hoteldiv"> <template v-if="scope.row.subList[index].PriceList.length>0"> <template v-for="childItem in scope.row.subList[index].PriceList"> <div :class="getClass(1,childItem.InventoryType)" style="height:100%;float:left;width:100%" :style="{width:(100/scope.row.subList[index].PriceList.length)+'%'}">{{childItem.CostPrice}}</div> </template> </template> <template v-else> <div :class="getClass(0,0)" style="width:100%;height:100%"> </div> </template> </div> <div class="Hotel_kong Com_hoteldiv Hq_duoge" @click="GotoUrl(scope.row,index,scope.row.subList[index].UseInventory)"> {{scope.row.subList[index].Inventory}}/{{scope.row.subList[index].UseInventory}}/{{scope.row.subList[index].RemainingInventory}} </div> <div class="Hotel_kong Com_hoteldiv"> <span v-if="scope.row.subList[index].UseInventory-scope.row.subList[index].Inventory>0" style="color:red;"> {{scope.row.subList[index].UseInventory-scope.row.subList[index].Inventory}} </span> </div> </template> </el-table-column> </el-table> <div class="noDataNotice" v-else> <i class="iconfont icon-kong"></i> <p>{{$t("active.ld_noData")}}</p> </div> </template> </div> <div class="combottomDiv HqCom_bottom" v-if="showNotice"> <el-form label-width="80px"> <el-row> <el-col :span="20"> <el-form-item label="日期"> <el-date-picker class="w150" type="date" v-model="queryMsg.QStartDate" :picker-options="pickerBeginDateBefore" value-format="yyyy-MM-dd" placeholder></el-date-picker> <el-date-picker class="w150" type="date" v-model="queryMsg.QEndDate" :picker-options="pickerBeginDateAfter" value-format="yyyy-MM-dd" placeholder></el-date-picker> </el-form-item> </el-col> <el-col :span="4"> <input type="button" class="normalBtn" value="查询" @click="resetPageIndex(),GetHotelTipList()" /> <input type="button" class="normalBtn" value="关闭" @click="showNotice=false" /> </el-col> </el-row> <div class="Hq_addDetail"> <el-row> <el-col :span="12"> <el-form-item label="说明"> <quill-editor class="w595" :options="editorOption" v-model="postMsg.TipContent"></quill-editor> </el-form-item> </el-col> <el-col :span="12"> <input type="button" class="normalBtn" value="保存" @click="SaveHotelTip()" /> </el-col> </el-row> </div> </el-form> <div> <table border="0" cellspacing="1" cellpadding="0" class="HouseTypeList Hq_addTable" style="width:97%;"> <tr> <th width="50">编号</th> <th>内容</th> <th width="70">操作人</th> <th width="150">操作时间</th> <th width="80">操作</th> </tr> <template v-if="queryMsg.total>0"> <tr v-for="(item,index) in HotelTipList"> <td>{{item.Id}}</td> <td> <p style="text-align:left;padding-left:5px;" v-html="item.TipContent"></p> </td> <td>{{item.CreateByName}}</td> <td>{{item.CreateTimeStr}}</td> <td> <el-tooltip class="item" effect="dark" content="编辑" placement="top"> <el-button type="primary" icon="el-icon-edit" circle @click="GetHotelTip(item.Id)"></el-button> </el-tooltip> <el-tooltip class="item" effect="dark" content="删除" placement="top"> <el-button type="danger" icon="el-icon-delete" circle @click="RemoveHotelTip(item.Id)"></el-button> </el-tooltip> </td> </tr> </template> <tr v-else> <td colspan="5">暂无数据...</td> </tr> </table> <el-pagination background @current-change="handleCurrentChange" :current-page.sync="queryMsg.currentPage" :page-size="queryMsg.pageSize" layout="total,prev, pager, next, jumper" :total="queryMsg.total"> </el-pagination> </div> </div> <el-dialog custom-class="w800" title="信息" :visible.sync="showHQinfo" center> <el-form> <table border="0" cellspacing="1" cellpadding="0" class="HouseTypeList Hq_addTable" style="width:100%;"> <tr> <th width="50">编号</th> <th>内容</th> <th width="70">操作人</th> <th width="140">操作时间</th> </tr> <template v-if="queryMsg.total>0"> <tr v-for="(item,index) in HotelTipList"> <td>{{item.Id}}</td> <td> <p style="text-align:left;padding:0 5px;" v-html="item.TipContent"></p> </td> <td>{{item.CreateByName}}</td> <td>{{item.CreateTimeStr}}</td> </tr> </template> <tr v-else> <td colspan="5">暂无数据...</td> </tr> </table> <el-pagination background @current-change="handleCurrentChange" :current-page.sync="queryMsg.currentPage" :page-size="queryMsg.pageSize" layout="total,prev, pager, next, jumper" :total="queryMsg.total"> </el-pagination> </el-form> <div slot="footer" class="dialog-footer"> <button class="hollowFixedBtn" @click="showHQinfo = false">关闭</button> </div> </el-dialog> </div> </template> <script> export default { data() { return { msg: { //酒店选择数组 HotelChooseArray: [], StartDate: new Date().Format("yyyy-MM-dd"), EndDate: this.setEdate(), //只查询日本 Country: "651", Province: 0, City: 0, OutBranchId: -1, //星级 Star: 0, //价格等级 PriceLevel: 0, //供应商 Supplier: 0, }, tableHeight: 0, beforeCheck: { disabledDate: time => { if (this.msg.StartDate) { let endTime = new Date(this.msg.EndDate); return time && endTime.getTime() < time.getTime(); } else { return false; } } }, afterCheck: { disabledDate: time => { if (this.msg.StartDate) { let startTime = new Date(this.msg.StartDate); //可以选择当天 return time && time.getTime() < startTime.getTime() - 1 * 24 * 60 * 60 * 1000; } else { return false; } } }, //分公司列表 companyList: [], defaultSelectValue: 0, //国家 省市 区 provinceList: [], cityList: [], district: [], queryMsg: { QStartDate: '', QEndDate: '', pageIndex: 1, pageSize: 5, currentPage: 1, total: 0, OpType:0 }, postMsg: { Id: 0, TipContent: '', OpType:0, }, //默认显示弹窗信息 showHQinfo: true, //酒店温馨提示列表 HotelTipList: [], //供应商列表 SupplierList: [], HotelList: [], dataList: [], isShow: false, loading: false, showNotice: false, pickerBeginDateBefore: { disabledDate: time => { let endTime = new Date(this.queryMsg.QStartDate) return endTime.getTime() < time.getTime() } }, pickerBeginDateAfter: { disabledDate: time => { let startTime = new Date(this.queryMsg.QEndDate) return startTime.getTime() >= time.getTime() } }, editorOption: { placeholder: '请输入内容', modules: { toolbar: [ ['bold', 'italic', 'underline', 'strike'], // toggled buttons ['blockquote', 'code-block', 'align'] ] } }, }; }, methods: { // 获取供应商 initSupplier() { this.apipost("supplier_post_GetAllList", { Type: 1 }, res => { if (res.data.resultCode === 1) { this.SupplierList = res.data.data; } }, err => {}); }, GotoHotel(HotelId) { this.$router.push({ path: "HotelManagement", query: { ID: HotelId, tab: "酒店查询", blank: 'y', } }); }, GotoUrl(item, subIndex, UseInventory) { if (UseInventory > 0) { this.$router.push({ path: "TravelControlList", query: { HotelId: item.HotelId, HotelUseTime: item.subList[subIndex].DateStr, IsUnionCked:0, blank: 'y', tab: "团控查询", } }); } }, com_onresize() { //clientHeight的值由DIV内容的实际高度和CSS中的padding值决定, var contentsHeight = document.body.clientHeight; var h = contentsHeight - 50 - 180 - 50; if (h < 110) { return; } //设置table的行高 this.tableHeight = h; }, getList() { this.loading = true; if (this.msg.StartDate == null) { this.msg.StartDate = new Date().Format("yyyy-MM-dd"); } if (this.msg.EndDate == null) { this.msg.EndDate = this.setEdate(); } this.apipost("dict_post_HotelOffer_GetHotelStatics", this.msg, res => { this.loading = false; if (res.data.resultCode == 1) { this.dataList = res.data.data; this.isShow = true; } else { this.Error(res.data.message); } }, err => {} ); }, //获取酒店列表 GetHotelList() { this.apipost( "hotel_post_GetHasStockHotelList", { Country: 651, IsMoreThanZero: 1 }, res => { if (res.data.resultCode == 1) { this.HotelList = res.data.data; } }, err => {} ); }, setEdate() { return this.addMoth(new Date().Format("yyyy-MM-dd"), 1) }, addMoth(d, m) { let ds = d.split('-'), _d = ds[2] - 0; let nextM = new Date(ds[0], ds[1] - 1 + m + 1, 0); let max = nextM.getDate(); d = new Date(ds[0], ds[1] - 1 + m, _d > max ? max : _d); return d.toLocaleDateString().match(/\d+/g).join('-') }, //格式化返回显示日期 getDateList(dateStr) { var str = dateStr.split('-'); var weekDay = ["天", "一", "二", "三", "四", "五", "六"]; var myDate = new Date(Date.parse(dateStr)); return str[1] + '/' + str[2] + "(" + weekDay[myDate.getDay()] + ")"; }, //获取星期几 getWeek(dateStr) { var weekDay = ["天", "一", "二", "三", "四", "五", "六"]; var myDate = new Date(Date.parse(dateStr)); return weekDay[myDate.getDay()] }, //获取颜色状态 getClass(Status, InventoryType) { var classStr = ""; if (Status == 0) { classStr = 'noKucun'; } switch (InventoryType) { case 1: classStr = "classHong"; break; case 2: classStr = "classWang"; break; case 3: classStr = "classPing"; break; case 4: classStr = "classDan"; break; case 5: classStr = "classTe"; break; } return classStr; }, handleCurrentChange(val) { this.queryMsg.pageIndex = val; this.GetHotelTipList(); }, resetPageIndex() { this.queryMsg.pageIndex = 1; this.queryMsg.currentPage = 1; }, //获取酒店列表 GetHotelTipList() { this.apipost( "hoteltip_get_GetPageList", this.queryMsg, res => { if (res.data.resultCode == 1) { this.HotelTipList = res.data.data.pageData; this.queryMsg.total = res.data.data.count; } }, err => {} ); }, SaveHotelTip() { this.apipost( "hoteltip_post_SetHotelTip", this.postMsg, res => { if (res.data.resultCode == 1) { this.Success("保存成功!"); this.postMsg.Id = 0; this.postMsg.TipContent = ""; this.GetHotelTipList(); } else { this.Error("保存失败!"); } }, err => {} ); }, RemoveHotelTip(Id) { var that = this; this.Confirm('是否要删除此数据?', function () { that.apipost( "hoteltip_post_RemoveHotelTip", { ID: Id }, res => { if (res.data.resultCode == 1) { that.Success("删除成功!"); that.GetHotelTipList(); } else { that.Error("删除失败!"); } }, err => {} ); }) }, GetHotelTip(Id) { this.apipost( "hoteltip_get_GetHotelTip", { ID: Id }, res => { if (res.data.resultCode == 1) { this.postMsg.Id = res.data.data.Id; this.postMsg.TipContent = res.data.data.TipContent; } else { this.Error("获取数据失败!"); } }, err => {} ); }, getProvinceList(ID, type) { //根据省份获取城市 let msg = { Id: ID }; if (type == 1) { this.msg.Province = 0; this.msg.City = 0; this.provinceList = []; this.cityList = []; } else if (type == 2) { this.msg.City = 0; this.cityList = []; } this.apipost( "dict_post_Destination_GetChildList", msg, res => { if (type == 1) { this.provinceList = res.data.data; } else if (type == 2) { this.cityList = res.data.data; } }, err => {} ); }, getBranchList() { this.apipost('admin_get_BranchGetList', { RB_Group_Id: '2', Status: 0, }, res => { if (res.data.resultCode == 1) { this.companyList = res.data.data; } }, err => {}) }, //Excel下载 DownLoadHotelQuery() { this.loading = true; let qMsg = { queryMsg: this.msg, uid: this.getLocalStorage().EmployeeId }; let fileName = "酒店查询统计" + this.$commonUtils.getCurrentDate() + ".xls"; this.GetLocalFile("hotel_get_downloadHotelQuery", qMsg, fileName, res => { this.loading = false; }); }, }, mounted() { this.initSupplier(); this.getBranchList(); this.getProvinceList(651, 1); this.GetHotelList(); this.getList(); this.GetHotelTipList(); this.com_onresize(); window.onresize = () => { this.com_onresize(); } } }; </script> <style> .Hq_duoge { cursor: pointer; text-decoration: underline; } .HqCom_bottom .ql-container { min-height: 100px; } .classHong { background-color: rgb(255, 55, 55); color: #fff; } .classWang { background-color: rgb(255, 153, 204); } .classPing { background-color: rgb(188, 214, 238); } .classDan { background-color: rgb(221, 221, 221); } .classTe { background-color: rgb(2, 247, 142); } .HouseTypeList { background: #ccc; width: 100%; margin-top: 20px; } .Com_hoteldiv { min-width: 70px; white-space: nowrap; } .noKucun { background-color: black !important; } .Hotel_kong { width: 100%; height: 35px; text-align: center; line-height: 35px; border-bottom: 1px solid #d1d1d1; } .Hotel_kong:last-child { border: 0; } .HouseTypeList tr th { background: #e6e6e6; height: 35px; font-size: 12px; color: #333; } .HouseTypeList tr { background: #fff; text-align: center; height: 35px; } .HouseTypeList tr td { font-size: 12px; } .hotelProductManage2_tableBox span { margin: 0 10px 10px 0; } .Hq_addDetail { margin-top: 20px; } .Hq_addDetail .el-textarea__inner { resize: none; } .Hq_addTable .el-button.is-circle { padding: 5px; } .HqCom_bottom .el-form-item { margin-bottom: 0 } .HqCom_bottom { height: 350px; padding-top: 35px; } .HQ_miaoshu { color: #E95252; font-size: 12px; } .HQ_miaoshu:first-child { margin-top: 10px; } .HotelQueryList .has-gutter tr th, .el-table th.is-leaf { background: #EAEAEA !important; } .HotelQueryList .el-table td, .el-table th.is-leaf { border-bottom: 1px solid #ebeef5; } .HotelQueryList .el-table .cell { padding: 0; } .HotelQueryList .el-table td { padding: 0; } </style>