jazz
2023-12-27 6283f47d248818ef9fa64e4d65f27a343b54bdd2
Merge branch 'xio_dev'
4个文件已添加
2个文件已修改
497 ■■■■■ 已修改文件
src/components/xio_room_list_shop_chg/index.vue 152 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/components/xio_room_off_narcosis_notice/index.vue 124 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/pages/room/detail.vue 124 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/pages/room/list.vue 97 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
static/imgs/down.png 补丁 | 查看 | 原始文档 | blame | 历史
static/imgs/eye.png 补丁 | 查看 | 原始文档 | blame | 历史
src/components/xio_room_list_shop_chg/index.vue
New file
@@ -0,0 +1,152 @@
<template>
  <div v-if="isShow" class="mask" @click="hideDialog">
    <div class="xio_room_list_shop_chg_dialog" @click.stop="noop">
      <div class="title">请选择门店</div>
      <div class="list flex flex-ver flex-wrap">
        <div v-for="(item,index) in shopList" :key="index" class="list_item flex flex-center" :class="[item.act?'act':'']" @click="chooseHandle(item)">{{ item.name }}</div>
      </div>
    </div>
  </div>
</template>
<script>
import Req from '../../utils/jun_httpInstall' // http 请求
export default {
  name: 'XioRoomStatusChg',
  props: {
    isActive: {
      type: Boolean,
      default: false
    }
  },
  data() {
    return {
      shopList: [],
      shopId: '',
      isShow: false
    }
  },
  methods: {
    noop() {
      return
    },
    // 确认
    // confirm() {
    //   this.isShow = false
    //   this.$emit('confirm', { })
    // },
    // 选择门店
    chooseHandle(item) {
      this.shopId = item.id
      if (this.shopList && this.shopList.length) {
        this.shopList.forEach((o) => {
          o.act = false
          if (o.id === this.shopId) {
            o.act = true
          }
        })
      }
      this.isShow = false
      this.$emit('confirm', item)
    },
    async showShopDialog(shopId) {
      this.shopId = shopId || ''
      this.showDialog()
      await this.getShopList()
    },
    // 获取门店列表
    getShopList() {
      var params = {}
      return new Promise((resolve, reject) => {
        Req.http.post({
          url: 'guide/treat/screen/shop/list',
          data: params,
          udData: { noLoading: true },
          header: { 'Content-Type': 'application/json' },
          mockData: {
            code: 100,
            msg: '',
            data: [{
              name: 'xx',
              id: 'xx'
            }]
          }
        }).then((res) => {
          if (res.data && res.data.length) {
            res.data.forEach((o) => {
              o.act = false
              if (o.id === this.shopId) {
                o.act = true
              }
            })
          }
          this.shopList = res.data || []
          resolve(res)
        })
      })
    },
    // 显示弹窗
    showDialog() {
      this.isShow = true
    },
    // 关闭弹窗
    hideDialog() {
      if (!this.shopId) {
        return
      }
      this.isShow = false
      // this.$emit('confirm', { })
    }
  }
}
</script>
<style scoped>
.xio_room_list_shop_chg_dialog {
  width: 1141px;
  height: 689px;
  /* border-radius: 10px; */
  background-color: rgba(255,255,255,1);
  border: 1px solid rgba(187,187,187,1);
  position: absolute;
  top: 50%;
  left: 50%;
  transform: translate(-50%, -50%);
  -webkit-transform: translate(-50%, -50%);
  z-index: 1;
}
.xio_room_list_shop_chg_dialog .title {
  line-height: 63px;
  color: rgba(16,16,16,1);
  font-size: 45px;
  text-align: center;
  font-family: PingFangSC-medium;
  font-weight: bold;
  padding-top: 31px;
}
.xio_room_list_shop_chg_dialog .list {
  margin-top: 50px;
  height: 480px;
  overflow: auto;
}
.xio_room_list_shop_chg_dialog .list_item {
  cursor: pointer;
  min-width: 300px;
  height: 100px;
  box-sizing: border-box;
  padding: 0 20px;
  margin-left: 55px;
  margin-bottom: 50px;
  line-height: 73px;
  border-radius: 4px;
  background-color: rgba(229,238,253,1);
  color: rgba(0,10,123,1);
  font-size: 50px;
  text-align: center;
  font-family: Microsoft Yahei;
}
.xio_room_list_shop_chg_dialog .list_item.act {
  background-color: #5980FF;
  color: #fff;
}
</style>
src/components/xio_room_off_narcosis_notice/index.vue
New file
@@ -0,0 +1,124 @@
<template>
  <div v-if="isShow" class="mask" @click="hideDialog">
    <div class="xio_room_status_chg_dialog" @click.stop="noop">
      <div class="title">MIC通知卸麻!</div>
      <div class="btn_box flex flex-center">
        <div class="btn_box_item flex flex-center" @click="confirm">
          <div class="flex flex-ver">
            <div class="tx">我已知晓</div>
          </div>
        </div>
      </div>
    </div>
  </div>
</template>
<script>
export default {
  name: 'XioRoomStatusChg',
  props: {
    isActive: {
      type: Boolean,
      default: false
    }
  },
  data() {
    return {
      isShow: false
    }
  },
  methods: {
    noop() {
      return
    },
    // 确认
    confirm() {
      this.isShow = false
      this.$emit('confirm', { })
    },
    // 显示弹窗
    showDialog() {
      this.isShow = true
    },
    // 关闭弹窗
    hideDialog() {
      this.isShow = false
      this.$emit('confirm', { })
    }
  }
}
</script>
<style scoped>
.xio_room_status_chg_dialog {
  width: 1105px;
  min-height: 602px;
  /* border-radius: 10px; */
  background-color: rgba(255,255,255,1);
  position: absolute;
  top: 50%;
  left: 50%;
  transform: translate(-50%, -50%);
  -webkit-transform: translate(-50%, -50%);
  z-index: 1;
}
.xio_room_status_chg_dialog .title {
  line-height: 112px;
  color: rgba(16,16,16,1);
  font-size: 80px;
  text-align: center;
  font-family: PingFangSC-medium;
  font-weight: bold;
  padding-top: 159px;
}
.xio_room_status_chg_dialog .btn_box {
  margin-top: 131px;
}
.xio_room_status_chg_dialog .btn_box .line {
  width: 100%;
}
.xio_room_status_chg_dialog .btn_box_item {
  width: 300px;
  height: 100px;
  line-height: 52px;
  border-radius: 4px;
  background-color: rgba(34,123,235,1);
  color: rgba(255,255,255,1);
  font-size: 36px;
  text-align: center;
  font-family: Microsoft Yahei;
  box-shadow: 0px 2px 6px 0px rgba(206,206,206,0.86);
}
/* .xio_room_status_chg_dialog .btn_box_item.white {
  background-color: rgba(255,255,255,1);
}
.xio_room_status_chg_dialog .btn_box_item.blue {
  background-color: rgba(46,77,124,1);
}
.xio_room_status_chg_dialog .btn_box_item.yellow {
  background-color: rgba(255,199,115,1);
}
.xio_room_status_chg_dialog .btn_box_item.gray {
  background-color: rgba(206,206,206,1);
} */
.xio_room_status_chg_dialog .btn_box_item .icon {
  width: 60px;
  height: 60px;
  display: block;
  margin-right: 17px;
}
.xio_room_status_chg_dialog .btn_box_item .icon .img {
  width: 100%;
  height: 100%;
}
/* .xio_room_status_chg_dialog .btn_box_item .tx {
  line-height: 37px;
  color: rgba(51,51,51,1);
  font-size: 26px;
  text-align: center;
  font-family: PingFangSC-medium;
}
.xio_room_status_chg_dialog .btn_box_item .tx.white {
  color: #ffffff;
} */
</style>
src/pages/room/detail.vue
@@ -115,18 +115,33 @@
        <div v-if="roomInfo && roomInfo.roomNo" class="room_title">{{ roomInfo.roomNo }}</div>
        <div class="room_content">
          <div class="tip">诊疗安排</div>
          <!-- <div class="name">{{ occupyInfoView.userName }}</div> -->
          <div class="name">
            <el-popover
              placement="top"
              width="400"
              popper-class="top_tx"
              trigger="click"
              :popper-options="{ removeOnDestroy: true }"
            >
              <div>{{ occupyInfoView.userName }}</div>
              <div slot="reference" class="tx ell">{{ occupyInfoView.userName }}</div>
            </el-popover>
          <!-- <div class="name">{{ occupyInfoView.userName }}</div> appellationName -->
          <div v-show="isShowAppellationName" class="flex flex-center">
            <div class="flex flex-ver">
              <div class="name">{{ occupyInfoView.appellationName }}</div>
              <div class="name_icon" @click="tapAppellationHandle">
                <img class="img" src="static/imgs/eye.png">
              </div>
            </div>
          </div>
          <div v-show="!isShowAppellationName" class="flex flex-center">
            <div class="flex flex-ver">
              <div class="name">
                <el-popover
                  placement="top"
                  width="400"
                  popper-class="top_tx"
                  trigger="click"
                  :popper-options="{ removeOnDestroy: true }"
                >
                  <div>{{ occupyInfoView.userName }}</div>
                  <div slot="reference" class="tx ell">{{ occupyInfoView.userName }}</div>
                </el-popover>
              </div>
              <div class="name_icon" @click="tapAppellationHandle">
                <img class="img" src="static/imgs/eye.png">
              </div>
            </div>
          </div>
          <div v-if="occupyInfoView.ciq" class="ciq">({{ occupyInfoView.ciq }})</div>
          <div v-if="occupyInfoView.startTime" class="time">安排治疗时间:{{ occupyInfoView.startTime }} 开始</div>
@@ -205,6 +220,8 @@
    <XioCustomerSelect ref="XioCustomerSelect" @cancel="selectCustomerCancel" @submit="selectCustomerSubmit" />
    <!-- 更改房间状态窗 -->
    <XioRoomStatusChg ref="XioRoomStatusChg" @changeStatus="changeStatus" />
    <!-- MIC通知卸麻 -->
    <XioRoomOffNarcosisNotice ref="XioRoomOffNarcosisNotice" @confirm="offNarcosisNoticeConfirm" />
  </div>
</template>
@@ -218,15 +235,20 @@
import XioCustomerSelect from '@/components/xio_customer_select'
// 更改房间状态窗
import XioRoomStatusChg from '@/components/xio_room_status_chg'
// 通知卸麻
import XioRoomOffNarcosisNotice from '@/components/xio_room_off_narcosis_notice'
import Req from '../../utils/jun_httpInstall' // http 请求
// import xioFn from './utils/xio_fn.js'
var isUseDefault = false // 是否已使用默认客人
var isUseDefaultChg = 0// 已使用默认客人后房间是否有改变状态
var offNarcosisIds = [] // 是否已通知卸麻id数组
var isOffNarcosisShow = false // 是否显示已通知卸麻弹窗
export default {
  name: 'RoomDetail',
  components: {
    XioCustomerSelect,
    XioRoomStatusChg
    XioRoomStatusChg,
    XioRoomOffNarcosisNotice
  },
  inject: ['noop'],
  data() {
@@ -237,7 +259,8 @@
      assignTreatList: [],
      statusTx: ['空闲', '使用中', '客人休息', '打扫中', '敷麻中'],
      timeObj: {}, // week:星期,date:年月日,timeMin:时分,time:时分秒,timeStamp:时间戳
      curTreatId: ''
      curTreatId: '',
      isShowAppellationName: true // 是否显示称谓
    }
  },
  computed: {
@@ -281,6 +304,18 @@
    console.log('roomDetail mounted')
    // 记录当前的治疗ID
    var curTreatId = localStorage.getItem('curTreatId')
    var localOffNarcosisIds = localStorage.getItem('offNarcosisIds')
    var localIsOffNarcosisShow = localStorage.getItem('isOffNarcosisShow')
    // 获取是否已通知卸麻数组
    if (localOffNarcosisIds) {
      offNarcosisIds = JSON.parse(localOffNarcosisIds)
    } else {
      offNarcosisIds = []
      this.setLocalStorageOffNarcosisIds()
    }
    if (localIsOffNarcosisShow) {
      isOffNarcosisShow = localIsOffNarcosisShow
    }
    this.curTreatId = curTreatId || ''
    this.id = this.$route.query.id || ''
    this.init()
@@ -299,6 +334,35 @@
      // 轮询getData,8秒一次
      this.pollingAjaxFn(this, 'getData', 'detail', 8000)
      // this.getData()
    },
    // 设置已通知卸麻id数组
    setLocalStorageOffNarcosisIds() {
      localStorage.setItem('offNarcosisIds', JSON.stringify(offNarcosisIds))
    },
    // 卸麻通知确认
    offNarcosisNoticeConfirm() {
      if (this.occupyInfoView) {
        if (offNarcosisIds && offNarcosisIds.length) {
          var flag = offNarcosisIds.find((o) => { return o === this.occupyInfoView.userId })
          if (!flag) {
            offNarcosisIds.push(this.occupyInfoView.userId)
          }
        } else if (offNarcosisIds) {
          offNarcosisIds.push(this.occupyInfoView.userId)
        }
        this.setLocalStorageOffNarcosisIds()
      }
      isOffNarcosisShow = true
      localStorage.setItem('isOffNarcosisShow', true)
    },
    // 显示通知卸麻弹窗
    showOffNarcosisNotice() {
      // 打开弹窗
      this.$refs['XioRoomOffNarcosisNotice'].showDialog()
    },
    // 点击显示隐藏称谓
    tapAppellationHandle() {
      this.isShowAppellationName = !this.isShowAppellationName
    },
    // 获取当前治疗信息
    gatCurTreatInfo() {
@@ -343,7 +407,12 @@
            res.data.assignTreatList.forEach((o) => {
              var st = (o.startTime).split(' ')[1].split(':')
              o.startTime = `${st[0]}:${st[1]}`
              o.appellationName = o.userName[0] + `${o.gender ? ['女士', '先生', '女士'][o.gender] : '女士'}`
            })
          }
          // 已占用用户数据处理
          if (res.data.occupyInfo && res.data.occupyInfo.userName) {
            res.data.occupyInfo.appellationName = res.data.occupyInfo.userName[0] + `${res.data.occupyInfo.gender ? ['女士', '先生', '女士'][res.data.occupyInfo.gender] : '女士'}`
          }
          // 已有占用的,更改已使用默认客人的状态
          res.data.occupyInfo && (isUseDefaultChg = 1)
@@ -358,6 +427,20 @@
          }
        }
        // console.log('999999999999999999999999999', res)
        var offNarcosisTimer = null
        offNarcosisTimer = setTimeout(() => {
          console.log('================================>', this.occupyInfoView, 'offNarcosisIds:', offNarcosisIds, 'isOffNarcosisShow:', isOffNarcosisShow)
          if (this.occupyInfoView && this.occupyInfoView.hempStatus === 2 && this.occupyInfoView.userId) {
            var flag
            offNarcosisIds && offNarcosisIds.length && (flag = offNarcosisIds.find((o) => { return o === this.occupyInfoView.userId }))
            // flag = isOffNarcosisShow
            if (!flag) {
              this.showOffNarcosisNotice()
            }
          }
          clearTimeout(offNarcosisTimer)
          offNarcosisTimer = null
        }, 500)
      })
    },
    // 返回
@@ -440,6 +523,7 @@
          // 重置默认已使用客人的参数
          isUseDefault = false
          isUseDefaultChg = 0
          this.isShowAppellationName = true
        }
        // console.log('8888888888888888888888888888888888', res)
        cb && cb()
@@ -669,6 +753,18 @@
.page_container .main .room_content .name .tx {
  max-width: 666px;
  margin: auto;
  text-align: center;
}
.page_container .main .room_content .name_icon {
  width: 40px;
  height: 40px;
  display: block;
  margin-top: 13px;
  padding: 20px;
}
.page_container .main .room_content .name_icon .img {
  width: 100%;
  height: 100%;
}
.page_container .main .room_content .ciq {
  line-height: 42px;
src/pages/room/list.vue
@@ -10,12 +10,21 @@
          <img class="img" src="static/imgs/logo_2.png">
        </div>
      </div>
      <div class="right flex-1 flex flex-jcfe flex-ver">
        <div class="page_choose_shop">
      <div class="flex-1 flex flex-center">
        <div class="select_shop_block flex flex-ver" @click="showChooseShop">
          <div v-if="!shopId" class="tx">请选择门店</div>
          <div v-if="shopId" class="tx">{{ shopName }}</div>
          <div class="icon_block">
            <img class="icon" src="static/imgs/down.png">
          </div>
        </div>
      </div>
      <div class="right flex flex-jcfe flex-ver">
        <!-- <div class="page_choose_shop">
          <el-select v-model="shopId" placeholder="请选择" style="width:400px;" clearable @change="getRoomList">
            <el-option v-for="item in shopList" :key="item.id" :label="item.name" :value="item.id" />
          </el-select>
        </div>
        </div> -->
        <div class="page_date">
          <div class="page_week">{{ timeObj.week }}</div>
          <div class="page_day">{{ timeObj.date }}</div>
@@ -39,6 +48,8 @@
        </div>
      </div>
    </div>
    <XioRoomListShopChg ref="XioRoomListShopChg" @confirm="confirmShop" />
  </div>
</template>
@@ -46,14 +57,19 @@
// import Login from '../utils/jun_login.js'
import Req from '../../utils/jun_httpInstall' // http 请求
// import xioFn from './utils/xio_fn.js'
// 通知卸麻
import XioRoomListShopChg from '@/components/xio_room_list_shop_chg'
export default {
  name: 'RoomList',
  components: {},
  components: {
    XioRoomListShopChg
  },
  inject: ['noop'],
  data() {
    return {
      shopList: [],
      shopId: '',
      shopName: '',
      list: [],
      timeObj: {}// week:星期,date:年月日,timeMin:时分,time:时分秒,timeStamp:时间戳
    }
@@ -70,11 +86,23 @@
  },
  methods: {
    init() {
    async init() {
      // 计时
      this.countGetTime(this, 'timeObj', 'list')
      this.getShopList()
      // await this.getShopList()
      // this.getRoomList()
      this.showChooseShop()
    },
    // 确定选择门店
    confirmShop(item) {
      this.shopId = item.id
      this.shopName = item.name
      this.getRoomList()
    },
    // 显示选择门店列表弹窗
    showChooseShop() {
      // 打开弹窗
      this.$refs['XioRoomListShopChg'].showShopDialog(this.shopId)
    },
    // 刷新浏览器页面
    resetPage() {
@@ -84,20 +112,23 @@
    // 获取门店列表
    getShopList() {
      var params = {}
      Req.http.post({
        url: 'guide/treat/screen/shop/list',
        data: params,
        header: { 'Content-Type': 'application/json' },
        mockData: {
          code: 100,
          msg: '',
          data: [{
            name: 'xx',
            id: 'xx'
          }]
        }
      }).then((res) => {
        this.shopList = res.data || []
      return new Promise((resolve, reject) => {
        Req.http.post({
          url: 'guide/treat/screen/shop/list',
          data: params,
          header: { 'Content-Type': 'application/json' },
          mockData: {
            code: 100,
            msg: '',
            data: [{
              name: 'xx',
              id: 'xx'
            }]
          }
        }).then((res) => {
          this.shopList = res.data || []
          resolve(res)
        })
      })
    },
    // 获取列表
@@ -162,6 +193,12 @@
}
</style>
<style scoped>
.page_header .left {
  min-width: 300px;
}
.page_date {
  margin-left: 0;
}
/* .page_container {
  overflow: hidden;
} */
@@ -187,6 +224,7 @@
  margin-bottom: 20px;
}
.list_block .list .list__item {
  cursor: pointer;
  padding: 40px 30px;
  border-radius: 100px;
  background-color: rgba(229,238,253,1);
@@ -211,4 +249,23 @@
  text-align: center;
  font-family: Roboto;
}
.select_shop_block {
  cursor: pointer;
}
.select_shop_block .tx {
  line-height: 50px;
  color: rgba(255,255,255,1);
  font-size: 36px;
  text-align: center;
  font-family: PingFangSC-regular;
}
.select_shop_block .icon_block {
  width: 30px;
  height: 30px;
  display: block;
}
.select_shop_block .icon_block .icon {
  width: 100%;
  height: 100%;
}
</style>
static/imgs/down.png
static/imgs/eye.png