parent
							
								
									677af90f97
								
							
						
					
					
						commit
						16fa6bb8b9
					
				
				 22 changed files with 1286 additions and 1387 deletions
			
			
		@ -1,277 +0,0 @@ | 
				
			||||
const VueConfig = (function (Vue, Vuex, VueRouter, Axios, NProgress) { | 
				
			||||
  const global = { | 
				
			||||
    app: null, | 
				
			||||
    store: null, | 
				
			||||
    route: null, | 
				
			||||
    router: null | 
				
			||||
  } | 
				
			||||
  // 向外暴露通过use注册
 | 
				
			||||
  function install(app, options) { | 
				
			||||
    vantInstall(app) | 
				
			||||
    app.config.globalProperties.$axios = Axios.server | 
				
			||||
    if (!global.app) global.app = app | 
				
			||||
  } | 
				
			||||
 | 
				
			||||
  function createApp(path, attributes) { | 
				
			||||
    const div = document.createElement('div') | 
				
			||||
    div.setAttribute('v-cloak', '') | 
				
			||||
    div.id = 'app' | 
				
			||||
 | 
				
			||||
    const appView = document.createElement('app') | 
				
			||||
    if (attributes instanceof Object) { | 
				
			||||
      for (a in attributes) { | 
				
			||||
        appView.setAttribute(a, attributes[a]) | 
				
			||||
      } | 
				
			||||
    } | 
				
			||||
    div.appendChild(appView) | 
				
			||||
    document.body.appendChild(div) | 
				
			||||
 | 
				
			||||
    Vue.createApp({ | 
				
			||||
      components: { app: vueLoader(path) } | 
				
			||||
    }).use(VueConfig).use(store).use(VueRouter.createRouter({ history: VueRouter.createWebHashHistory(), routes: [] })).mount('#app') | 
				
			||||
  } | 
				
			||||
 | 
				
			||||
  const cacheComponentsPath = [] | 
				
			||||
 | 
				
			||||
  // 后期移除
 | 
				
			||||
  function components(obj) { | 
				
			||||
    if (obj instanceof Object) { | 
				
			||||
      for (const name in obj) { | 
				
			||||
        const path = obj[name] | 
				
			||||
        if (!name || !path) { | 
				
			||||
          return console.error('name or path is null') | 
				
			||||
        } | 
				
			||||
        const key = name + '|' + path | 
				
			||||
        if (cacheComponentsPath.indexOf(key) === -1) { | 
				
			||||
          global.app.component(name, vueLoader(path)) | 
				
			||||
        } else { | 
				
			||||
          // console.log(`${name}已注册过`)
 | 
				
			||||
        } | 
				
			||||
      } | 
				
			||||
    } | 
				
			||||
  } | 
				
			||||
 | 
				
			||||
  function scriptLoader(src) { | 
				
			||||
    const jsFile = document.createElement('script'); | 
				
			||||
    jsFile.src = src; | 
				
			||||
    document.head.appendChild(jsFile); | 
				
			||||
  } | 
				
			||||
 | 
				
			||||
  function addRoutes(pathObj, routes) { | 
				
			||||
    if (routes.length > 0) { | 
				
			||||
      routes.forEach(item => { | 
				
			||||
        global.router.addRoute({ | 
				
			||||
          meta: item.meta, | 
				
			||||
          name: item.name, | 
				
			||||
          path: item.path, | 
				
			||||
          children: item.children, | 
				
			||||
          component: vueLoader(item.component) | 
				
			||||
        }) | 
				
			||||
      }) | 
				
			||||
 | 
				
			||||
      // global.router.beforeEach((to, from, next) => {
 | 
				
			||||
      //   next()
 | 
				
			||||
      // })
 | 
				
			||||
 | 
				
			||||
 | 
				
			||||
      if (typeof pathObj === 'object') { | 
				
			||||
        global.store.dispatch('setRoutePath', pathObj.path) | 
				
			||||
        console.log(pathObj); | 
				
			||||
        global.router.replace(pathObj) | 
				
			||||
      } else { // string
 | 
				
			||||
        global.store.dispatch('setRoutePath', pathObj) | 
				
			||||
        if (global.route.path === '/') { | 
				
			||||
          return global.router.replace(pathObj) | 
				
			||||
        } | 
				
			||||
        global.router.replace({ path: global.route.path, params: global.route.params, query: global.route.query }) | 
				
			||||
      } | 
				
			||||
    } | 
				
			||||
  } | 
				
			||||
 | 
				
			||||
  const mjsCaches = {} | 
				
			||||
  const vueCaches = {} | 
				
			||||
 | 
				
			||||
  function vueLoader(path) { | 
				
			||||
    if (path.length > 4 && path.substring(path.length - 4) !== '.vue') path += '.vue' | 
				
			||||
 | 
				
			||||
    return Vue.defineAsyncComponent(function () { | 
				
			||||
      var pathname = window.location.pathname | 
				
			||||
      pathname = pathname.substring(0, pathname.lastIndexOf('/')) | 
				
			||||
 | 
				
			||||
      if (!global.store) global.store = Vuex.useStore() | 
				
			||||
      if (!global.route) global.route = VueRouter.useRoute() | 
				
			||||
      if (!global.router) global.router = VueRouter.useRouter() | 
				
			||||
      if (NProgress) NProgress.start() | 
				
			||||
 | 
				
			||||
      return window['vue3-sfc-loader'].loadModule(path, { | 
				
			||||
        moduleCache: { | 
				
			||||
          'vue-helper': { components: components, scriptLoader: scriptLoader, addRoutes: addRoutes, route: VueRouter.useRoute(), router: VueRouter.useRouter(), store: Vuex.useStore() }, | 
				
			||||
          vue: Vue, | 
				
			||||
          vuex: { useStore: Vuex.useStore }, | 
				
			||||
          'vue-router': { useRouter: VueRouter.useRouter, useRoute: VueRouter.useRoute }, | 
				
			||||
          axios: { | 
				
			||||
            axios: Axios.server, | 
				
			||||
            copyright: Axios.copyright, | 
				
			||||
            RUN_ENV: Axios.RUN_ENV, | 
				
			||||
            UPLOAD_URL: Axios.UPLOAD_URL, | 
				
			||||
            BASE_URL: Axios.BASE_URL, | 
				
			||||
            OL_WS_URL: Axios.OL_WS_URL, | 
				
			||||
          }, | 
				
			||||
        }, | 
				
			||||
        getFile: function (url) { | 
				
			||||
          var index = url.indexOf('@') | 
				
			||||
          if (index === 0) url = pathname + '/src' + url.substring(index + 1) | 
				
			||||
 | 
				
			||||
          var type = '.mjs' | 
				
			||||
          var laIndex = url.lastIndexOf('.') | 
				
			||||
          if (laIndex > -1) type = url.substring(laIndex) | 
				
			||||
 | 
				
			||||
          if (type === '.vue') { | 
				
			||||
            if (vueCaches[url]) { | 
				
			||||
              if (NProgress) NProgress.done() | 
				
			||||
              console.log('[' + type + ']' + url + '已注册'); | 
				
			||||
              return vueCaches[url] | 
				
			||||
            } | 
				
			||||
          } | 
				
			||||
 | 
				
			||||
          if (type === '.mjs') { | 
				
			||||
            if (mjsCaches[url]) { | 
				
			||||
              if (NProgress) NProgress.done() | 
				
			||||
              console.log('[' + type + ']' + url + '已注册'); | 
				
			||||
              return mjsCaches[url] | 
				
			||||
            } | 
				
			||||
          } | 
				
			||||
 | 
				
			||||
          return fetch(url).then(function (res) { | 
				
			||||
            if (NProgress) NProgress.done() | 
				
			||||
            if (!res.ok) throw Object.assign(new Error(url + ' ' + res.statusText), { res: res }) | 
				
			||||
            return { | 
				
			||||
              type: type, | 
				
			||||
              getContentData: function (asBinary) { | 
				
			||||
                var respData = asBinary ? res.arrayBuffer() : res.text() | 
				
			||||
                if (type === '.vue') if (!vueCaches[url]) vueCaches[url] = respData | 
				
			||||
 | 
				
			||||
                if (type === '.mjs') if (!mjsCaches[url]) mjsCaches[url] = respData | 
				
			||||
                return respData | 
				
			||||
              } | 
				
			||||
            } | 
				
			||||
          }) | 
				
			||||
        }, | 
				
			||||
        handleModule: function (type, getContentData, path, options) { }, | 
				
			||||
        addStyle: function (textContent) { | 
				
			||||
          var style = Object.assign(document.createElement('style'), { textContent: textContent }) | 
				
			||||
          var ref = document.head.getElementsByTagName('style')[0] || null | 
				
			||||
          document.head.insertBefore(style, ref) | 
				
			||||
        }, | 
				
			||||
        log(type, ...args) { | 
				
			||||
          console[type](...args) | 
				
			||||
        }, | 
				
			||||
        compiledCache: { | 
				
			||||
          set(key, str) { | 
				
			||||
            for (; ;) { | 
				
			||||
              try { | 
				
			||||
                window.localStorage.setItem((key), str) | 
				
			||||
                break | 
				
			||||
              } catch (ex) { | 
				
			||||
                window.localStorage.removeItem(window.localStorage.key(0)) | 
				
			||||
              } | 
				
			||||
            } | 
				
			||||
          }, | 
				
			||||
          get(key) { | 
				
			||||
            return window.localStorage.getItem(key) | 
				
			||||
          } | 
				
			||||
        } | 
				
			||||
      }) | 
				
			||||
    }) | 
				
			||||
  } | 
				
			||||
 | 
				
			||||
  // vant组件注册
 | 
				
			||||
  function vantInstall(app) { | 
				
			||||
    if (!window.vant) return | 
				
			||||
    // 空状态
 | 
				
			||||
    app.use(vant.Empty) | 
				
			||||
    app.use(vant.Button) | 
				
			||||
    app.use(vant.Lazyload) | 
				
			||||
    app.use(vant.Cell) | 
				
			||||
    app.use(vant.CellGroup) | 
				
			||||
 | 
				
			||||
    app.use(vant.Icon) | 
				
			||||
    app.use(vant.Image) | 
				
			||||
    // Layout 布局
 | 
				
			||||
    app.use(vant.Col) | 
				
			||||
    app.use(vant.Row) | 
				
			||||
    // 弹出层
 | 
				
			||||
    app.use(vant.Popup) | 
				
			||||
    app.use(vant.Toast) | 
				
			||||
    app.use(vant.Cascader) | 
				
			||||
    app.use(vant.Checkbox) | 
				
			||||
    app.use(vant.CheckboxGroup) | 
				
			||||
    app.use(vant.DatetimePicker) | 
				
			||||
    app.use(vant.Field) | 
				
			||||
    app.use(vant.Form) | 
				
			||||
    app.use(vant.NumberKeyboard) | 
				
			||||
    app.use(vant.PasswordInput) | 
				
			||||
    app.use(vant.Picker) | 
				
			||||
    app.use(vant.Radio) | 
				
			||||
    app.use(vant.RadioGroup) | 
				
			||||
    app.use(vant.Rate) | 
				
			||||
    app.use(vant.Search) | 
				
			||||
    app.use(vant.Slider) | 
				
			||||
    app.use(vant.Stepper) | 
				
			||||
    app.use(vant.Switch) | 
				
			||||
    app.use(vant.Uploader) | 
				
			||||
    app.use(vant.ActionSheet) | 
				
			||||
    app.use(vant.Dialog) | 
				
			||||
    app.use(vant.DropdownMenu) | 
				
			||||
    app.use(vant.DropdownItem) | 
				
			||||
    app.use(vant.Loading) | 
				
			||||
    app.use(vant.Notify) | 
				
			||||
    app.use(vant.Overlay) | 
				
			||||
    app.use(vant.Area) | 
				
			||||
 | 
				
			||||
    app.use(vant.PullRefresh) | 
				
			||||
    app.use(vant.Badge) | 
				
			||||
    app.use(vant.Circle) | 
				
			||||
    app.use(vant.Collapse) | 
				
			||||
    app.use(vant.CollapseItem) | 
				
			||||
    app.use(vant.CountDown) | 
				
			||||
    app.use(vant.Divider) | 
				
			||||
    app.use(vant.ImagePreview) | 
				
			||||
    app.use(vant.List) | 
				
			||||
    app.use(vant.NoticeBar) | 
				
			||||
    app.use(vant.Popover) | 
				
			||||
    app.use(vant.Progress) | 
				
			||||
    app.use(vant.Skeleton) | 
				
			||||
    app.use(vant.Step) | 
				
			||||
    app.use(vant.Steps) | 
				
			||||
    app.use(vant.Sticky) | 
				
			||||
    app.use(vant.Swipe) | 
				
			||||
    app.use(vant.SwipeItem) | 
				
			||||
    app.use(vant.Tag) | 
				
			||||
    app.use(vant.Grid) | 
				
			||||
    app.use(vant.GridItem) | 
				
			||||
    app.use(vant.IndexBar) | 
				
			||||
    app.use(vant.IndexAnchor) | 
				
			||||
    app.use(vant.NavBar) | 
				
			||||
    app.use(vant.Pagination) | 
				
			||||
    app.use(vant.Sidebar) | 
				
			||||
    app.use(vant.SidebarItem) | 
				
			||||
 | 
				
			||||
    app.use(vant.Tab) | 
				
			||||
    app.use(vant.Tabs) | 
				
			||||
    app.use(vant.Tabbar) | 
				
			||||
    app.use(vant.TabbarItem) | 
				
			||||
    app.use(vant.TreeSelect) | 
				
			||||
    app.use(vant.SwipeCell); | 
				
			||||
    app.use(vant.Card); | 
				
			||||
    app.use(vant.Calendar) | 
				
			||||
  } | 
				
			||||
 | 
				
			||||
  return { | 
				
			||||
    install: install, | 
				
			||||
    vueLoader: vueLoader, | 
				
			||||
    createApp: createApp | 
				
			||||
  } | 
				
			||||
})(Vue, Vuex, VueRouter, Axios, NProgress) | 
				
			||||
 | 
				
			||||
Object.freeze(VueConfig) | 
				
			||||
									
										
											File diff suppressed because one or more lines are too long
										
									
								
							
						@ -0,0 +1,82 @@ | 
				
			||||
<template> | 
				
			||||
  <div id="app" | 
				
			||||
       v-cloak> | 
				
			||||
    <div v-if="show"> | 
				
			||||
      <van-form class="card__box" | 
				
			||||
                label-width="80px" | 
				
			||||
                @submit="onSubmit"> | 
				
			||||
        <van-field class="input" | 
				
			||||
                   v-model="patient.idCardNo" | 
				
			||||
                   label="身份证号" | 
				
			||||
                   name="idCardNo" | 
				
			||||
                   autofocus | 
				
			||||
                   maxLength="18" | 
				
			||||
                   placeholder="请填写身份证号码" | 
				
			||||
                   :border="false" | 
				
			||||
                   :rules="[{ required: true, message: '必填' }]"> | 
				
			||||
        </van-field> | 
				
			||||
 | 
				
			||||
        <van-field class="input" | 
				
			||||
                   v-model="patient.name" | 
				
			||||
                   label="姓  名" | 
				
			||||
                   name="name" | 
				
			||||
                   maxLength="18" | 
				
			||||
                   placeholder="请填写真实姓名" | 
				
			||||
                   :border="false" | 
				
			||||
                   :rules="[{ required: true, message: '必填' }]"> | 
				
			||||
        </van-field> | 
				
			||||
 | 
				
			||||
        <div style="margin: 16px 0; width:100%;text-align:center;"> | 
				
			||||
          <span @click="onClick()" | 
				
			||||
                style="color:var(--color-primary)">{{text}}</span> | 
				
			||||
        </div> | 
				
			||||
      </van-form> | 
				
			||||
    </div> | 
				
			||||
  </div> | 
				
			||||
</template> | 
				
			||||
<script> | 
				
			||||
import { Go } from '@/utils/common-util.mjs' | 
				
			||||
export default { | 
				
			||||
     | 
				
			||||
    data() { | 
				
			||||
        return { | 
				
			||||
          show: false, | 
				
			||||
          text: '人脸识别', | 
				
			||||
          patient: { | 
				
			||||
            idCardNo: '', | 
				
			||||
            name: '' | 
				
			||||
          }, | 
				
			||||
          redirect_uri: '' | 
				
			||||
        } | 
				
			||||
      }, | 
				
			||||
      created() { | 
				
			||||
        if(URLUtil.getQueryVar('verifyInfo')){ | 
				
			||||
            this.patient.idCardNo = URLUtil.getQueryVar('verifyInfo').split('_')[0] | 
				
			||||
            this.patient.name = decodeURIComponent(URLUtil.getQueryVar('verifyInfo').split('_')[1]) | 
				
			||||
            this.redirect_uri = decodeURIComponent(URLUtil.getQueryVar('verifyInfo').split('_')[2]) | 
				
			||||
        } | 
				
			||||
        if (!URLUtil.getQueryVar('wechatCode') && !URLUtil.getQueryVar('registerOrderId')) { // 获取授权码 | 
				
			||||
            if (vant) { | 
				
			||||
                vant.Toast.loading({ duration: 0, forbidClick: true, message: '页面加载中...' }) | 
				
			||||
            } | 
				
			||||
            return window.location.href = 'https://health.tengmed.com/open/getUserCode?redirect_uri=' + window.location.href | 
				
			||||
        } | 
				
			||||
        this.show = true | 
				
			||||
      }, | 
				
			||||
      methods: { | 
				
			||||
        onClick() { | 
				
			||||
           this.$axios.post('/wx/healthCode/registerUniformVerifyOrder.do', { | 
				
			||||
              idCardNo: this.patient.idCardNo, | 
				
			||||
              name: this.patient.name, | 
				
			||||
              wechatCode: URLUtil.getQueryVar('wechatCode') | 
				
			||||
            }).then(resp => { | 
				
			||||
              if (resp.code === 200) { | 
				
			||||
                window.location.href = `https://health.tengmed.com/open/idAuth?order_id=${resp.data}&hospital_id=31737&redirect_uri=${this.redirect_uri}?orderId=${resp.data}` | 
				
			||||
              } else { | 
				
			||||
                window.location.reload() | 
				
			||||
              } | 
				
			||||
            }) | 
				
			||||
        } | 
				
			||||
      }, | 
				
			||||
} | 
				
			||||
</script> | 
				
			||||
@ -1,433 +1,436 @@ | 
				
			||||
<template> | 
				
			||||
  <div class="consultation-tool-bar"> | 
				
			||||
    <div class="send"> | 
				
			||||
      <div class="send__voice"> | 
				
			||||
        <van-icon name="arrow-up" | 
				
			||||
                  size="28" | 
				
			||||
                  color="#929292" | 
				
			||||
                  :class="{ 'arrowTransform': tool.show, 'arrowTransformReturn': !tool.show }" | 
				
			||||
                  @click.stop="tool.show = !tool.show; cancelRevoke()" /> | 
				
			||||
      </div> | 
				
			||||
      <van-field v-show="false" | 
				
			||||
                 v-model="test" | 
				
			||||
                 style="width: 40px;"></van-field> | 
				
			||||
      <van-field class="send__input" | 
				
			||||
                 ref="input" | 
				
			||||
                 type="textarea" | 
				
			||||
                 autosize | 
				
			||||
                 rows="1" | 
				
			||||
                 v-model="message" | 
				
			||||
                 placeholder="请输入" | 
				
			||||
                 enterkeyhint="send" | 
				
			||||
                 @focus="cancelRevoke" | 
				
			||||
                 @keyup.enter="handleSendMessage" | 
				
			||||
                 @update:model-value="resizeInput" /> | 
				
			||||
      <div class="send__btn" | 
				
			||||
           @click="handleSendMessage">发 送</div> | 
				
			||||
    </div> | 
				
			||||
 | 
				
			||||
    <transition name="fade"> | 
				
			||||
      <div v-if="tool.show" | 
				
			||||
           class="tool_box" | 
				
			||||
           :style="{ 'bottom': `${bottomHeight}px` }"> | 
				
			||||
        <div class="tool_item"> | 
				
			||||
          <van-uploader multiple | 
				
			||||
                        :before-read="onBeforeRead" | 
				
			||||
                        @click-upload="tool.show = !tool.show"> | 
				
			||||
            <svg t="1663317574777" | 
				
			||||
                 class="icon" | 
				
			||||
                 viewBox="0 0 1024 1024" | 
				
			||||
                 version="1.1" | 
				
			||||
                 xmlns="http://www.w3.org/2000/svg" | 
				
			||||
                 p-id="21868" | 
				
			||||
                 width="28" | 
				
			||||
                 height="28"> | 
				
			||||
              <path d="M841.71335 65.290005 182.285626 65.290005c-64.511269 0-116.995621 52.484352-116.995621 116.995621L65.290005 841.71335c0 64.511269 52.484352 116.995621 116.995621 116.995621l659.427724 0c64.511269 0 116.995621-52.484352 116.995621-116.995621L958.708971 182.285626C958.708971 117.774357 906.225643 65.290005 841.71335 65.290005zM182.285626 107.833961l659.427724 0c41.051975 0 74.451666 33.398668 74.451666 74.451666l0 136.557142c-150.09446 5.26184-290.370297 66.084091-396.978337 172.692131-49.960879 49.961902-89.841168 107.331517-118.694309 169.625282-83.496669-70.835302-204.372667-75.376735-292.65841-13.617136L107.833961 182.285626C107.833961 141.232628 141.232628 107.833961 182.285626 107.833961zM107.833961 841.71335 107.833961 702.627618c76.54228-74.311473 198.833511-74.234725 275.272437 0.24457-24.303522 65.298192-37.026288 135.112234-37.026288 206.91149 0 2.223644 0.343831 4.366448 0.977257 6.381337L182.285626 916.165016C141.232628 916.165016 107.833961 882.766348 107.833961 841.71335zM841.71335 916.165016 387.646807 916.165016c0.633427-2.01489 0.977257-4.157693 0.977257-6.381337 0-146.71755 57.053414-284.572244 160.647817-388.166647 98.570993-98.570993 228.166583-154.963351 366.894158-160.204725L916.166039 841.71335C916.165016 882.766348 882.766348 916.165016 841.71335 916.165016z" | 
				
			||||
                    p-id="21869" | 
				
			||||
                    fill="#707070"></path> | 
				
			||||
              <path d="M312.397986 413.458683c60.8376 0 110.332874-49.494251 110.332874-110.332874s-49.494251-110.332874-110.332874-110.332874-110.332874 49.494251-110.332874 110.332874S251.559363 413.458683 312.397986 413.458683zM312.397986 235.337913c37.378306 0 67.788919 30.40959 67.788919 67.788919s-30.40959 67.788919-67.788919 67.788919-67.788919-30.40959-67.788919-67.788919S275.018657 235.337913 312.397986 235.337913z" | 
				
			||||
                    p-id="21870" | 
				
			||||
                    fill="#707070"></path> | 
				
			||||
            </svg> | 
				
			||||
            <div class="tool_item_title">图片</div> | 
				
			||||
          </van-uploader> | 
				
			||||
        </div> | 
				
			||||
        <div class="tool_item" | 
				
			||||
             @click="openTreat"> | 
				
			||||
          <van-icon name="records" | 
				
			||||
                    color="#929292" | 
				
			||||
                    size="30" /> | 
				
			||||
          <div class="tool_item_title">就诊记录</div> | 
				
			||||
        </div> | 
				
			||||
        <div class="tool_item" | 
				
			||||
             @click="toRecipe"> | 
				
			||||
          <svg t="1681180334020" | 
				
			||||
               class="icon" | 
				
			||||
               viewBox="0 0 1024 1024" | 
				
			||||
               version="1.1" | 
				
			||||
               xmlns="http://www.w3.org/2000/svg" | 
				
			||||
               p-id="3639" | 
				
			||||
               width="28" | 
				
			||||
               height="28"> | 
				
			||||
            <path d="M276.232215 0h569.367801a25.211231 25.211231 0 0 1 25.151228 25.151228v971.657444a25.221232 25.221232 0 0 1-25.151228 25.161229H74.952387A25.221232 25.221232 0 0 1 49.801159 996.808672v-770.637628a25.101226 25.101226 0 0 1 8.780428-19.000928L258.531351 7.310357A25.451243 25.451243 0 0 1 276.232215 0z m25.001221 50.17245l-0.270014 176.008594a25.001221 25.001221 0 0 1-25.00122 25.001221v0.130006h-176.008595v720.325172h720.395176V50.222452zM135.525344 201.009815h115.425636l0.130007-115.425636z m0 0" | 
				
			||||
                  fill="#656666" | 
				
			||||
                  p-id="3640"></path> | 
				
			||||
            <path d="M175.467295 837.590898h569.217793v33.551638H175.467295z m0-314.015333h217.770633v33.551638H175.467295z m467.872845-157.767703l31.821554-49.782431a4.190205 4.190205 0 0 1 3.600176-2.000098h72.813555a4.070199 4.070199 0 0 1 3.720182 2.260111 3.810186 3.810186 0 0 1-0.250013 4.260208l-73.003564 108.225284a4.240207 4.240207 0 0 0 0 4.660228l79.003857 117.005713a4.180204 4.180204 0 0 1-3.460169 6.530319h-77.443781a4.370213 4.370213 0 0 1-3.600176-2.000098l-36.201767-54.172645a4.220206 4.220206 0 0 0-7.000342-0.130006l-36.801797 54.582665a4.000195 4.000195 0 0 1-3.460169 1.860091h-74.163621a4.120201 4.120201 0 0 1-3.730183-2.260111 3.810186 3.810186 0 0 1 0.270014-4.260208l77.343776-115.685649a4.260208 4.260208 0 0 0 0-4.670228l-90.654426-128.466272h-4.120202v88.004297a4.150203 4.150203 0 0 1-4.120201 4.120201h-62.843068a4.140202 4.140202 0 0 1-4.120201-4.120201V142.686967a4.140202 4.140202 0 0 1 4.120201-4.120201h106.275189c50.852483 0 88.514322 29.421437 88.514322 82.524029 0 29.69145-13.300649 55.91273-37.531833 70.293433a4.000195 4.000195 0 0 0-2.000097 2.66013 3.820187 3.820187 0 0 0 0.520025 3.200156l48.072347 69.093374c2.000098 2.270111 6.790332 2.130104 8.510416-0.530026zM497.883038 205.230021v33.541638a4.150203 4.150203 0 0 0 4.120201 4.120201h22.33109c7.050344 0 18.760916-0.540026 24.351189-5.32026 4.120201-3.600176 4.930241-11.720572 4.930241-16.900825s-0.670033-11.190546-4.790234-14.780722c-5.450266-4.660228-17.700864-4.92024-24.491196-4.92024h-22.33109a4.260208 4.260208 0 0 0-4.120201 4.260208z m-322.415743 422.92065h569.487807v33.541638H175.467295z m0.140006 104.63511h569.217794v33.541637H175.607301z m0 0" | 
				
			||||
                  fill="#656666" | 
				
			||||
                  p-id="3641"></path> | 
				
			||||
          </svg> | 
				
			||||
          <div class="tool_item_title">处方</div> | 
				
			||||
        </div> | 
				
			||||
        <div class="tool_item" | 
				
			||||
             @click="toComment"> | 
				
			||||
          <svg t="1686299854270" | 
				
			||||
               class="icon" | 
				
			||||
               viewBox="0 0 1024 1024" | 
				
			||||
               version="1.1" | 
				
			||||
               xmlns="http://www.w3.org/2000/svg" | 
				
			||||
               p-id="3239" | 
				
			||||
               width="28" | 
				
			||||
               height="28"> | 
				
			||||
            <path d="M512 64C264.533333 64 64 264.533333 64 512s200.533333 448 448 448 448-200.533333 448-448S759.466667 64 512 64z m0 853.333333C288 917.333333 106.666667 736 106.666667 512S288 106.666667 512 106.666667s405.333333 181.333333 405.333333 405.333333-181.333333 405.333333-405.333333 405.333333z" | 
				
			||||
                  fill="#666666" | 
				
			||||
                  p-id="3240"></path> | 
				
			||||
            <path d="M627.2 622.933333c-29.866667 32-70.4 49.066667-115.2 49.066667-42.666667 0-83.2-17.066667-113.066667-46.933333-8.533333-8.533333-21.333333-8.533333-29.866666 0-8.533333 8.533333-8.533333 21.333333 0 29.866666 38.4 38.4 89.6 59.733333 142.933333 59.733334 55.466667 0 106.666667-21.333333 145.066667-61.866667 8.533333-8.533333 8.533333-21.333333 0-29.866667-8.533333-8.533333-21.333333-8.533333-29.866667 0z" | 
				
			||||
                  fill="#666666" | 
				
			||||
                  p-id="3241"></path> | 
				
			||||
            <path d="M384 448m-42.666667 0a42.666667 42.666667 0 1 0 85.333334 0 42.666667 42.666667 0 1 0-85.333334 0Z" | 
				
			||||
                  fill="#666666" | 
				
			||||
                  p-id="3242"></path> | 
				
			||||
            <path d="M640 448m-42.666667 0a42.666667 42.666667 0 1 0 85.333334 0 42.666667 42.666667 0 1 0-85.333334 0Z" | 
				
			||||
                  fill="#666666" | 
				
			||||
                  p-id="3243"></path> | 
				
			||||
          </svg> | 
				
			||||
          <div class="tool_item_title">评价医生</div> | 
				
			||||
        </div> | 
				
			||||
      </div> | 
				
			||||
    </transition> | 
				
			||||
 | 
				
			||||
    <van-popup v-model:show="tool.treat.show" | 
				
			||||
               position="right" | 
				
			||||
               :style="{ height: 'calc(100% - 0px)', 'width': '55%', 'box-sizing': 'border-box', 'padding-top': paddingTop }"> | 
				
			||||
      <div style="font-size: 15px;font-weight: bolder;color: #606266;padding: 10px;">就诊记录</div> | 
				
			||||
      <section v-if="tool.treat.data.length > 0"> | 
				
			||||
        <van-cell v-for="(treat, k) of tool.treat.data" | 
				
			||||
                  :key="k"> | 
				
			||||
          <div class="treat_item_time">{{ treat.registerDate }}</div> | 
				
			||||
          <div class="treat_item"> | 
				
			||||
            <div>主诉:</div> | 
				
			||||
            <div>{{ treat.complaint }}</div> | 
				
			||||
          </div> | 
				
			||||
          <div class="treat_item"> | 
				
			||||
            <div>症状:</div> | 
				
			||||
            <div>{{ treat.symptom }}</div> | 
				
			||||
          </div> | 
				
			||||
          <div class="treat_item"> | 
				
			||||
            <div>诊断:</div> | 
				
			||||
            <div>{{ treat.diagnose }}</div> | 
				
			||||
          </div> | 
				
			||||
          <div class="treat_item"> | 
				
			||||
            <div>门诊号:</div> | 
				
			||||
            <div>{{ treat.mzNum }}</div> | 
				
			||||
          </div> | 
				
			||||
          <div class="treat_item"> | 
				
			||||
            <div>医生:</div> | 
				
			||||
            <div>{{ treat.doctName }}</div> | 
				
			||||
          </div> | 
				
			||||
        </van-cell> | 
				
			||||
      </section> | 
				
			||||
      <van-empty v-else | 
				
			||||
                 :image-size="[60, 40]" | 
				
			||||
                 description="暂无就诊记录" /> | 
				
			||||
    </van-popup> | 
				
			||||
  </div> | 
				
			||||
	<div class="consultation-tool-bar"> | 
				
			||||
		<div class="send"> | 
				
			||||
			<div class="send__voice"> | 
				
			||||
				<van-icon name="arrow-up" | 
				
			||||
									size="28" | 
				
			||||
									color="#929292" | 
				
			||||
									:class="{ 'arrowTransform': tool.show, 'arrowTransformReturn': !tool.show }" | 
				
			||||
									@click.stop="tool.show = !tool.show; cancelRevoke()" /> | 
				
			||||
			</div> | 
				
			||||
			<van-field v-show="false" | 
				
			||||
								 v-model="test" | 
				
			||||
								 style="width: 40px;"></van-field> | 
				
			||||
			<van-field class="send__input" | 
				
			||||
								 ref="input" | 
				
			||||
								 type="textarea" | 
				
			||||
								 autosize | 
				
			||||
								 rows="1" | 
				
			||||
								 v-model="message" | 
				
			||||
								 placeholder="请输入" | 
				
			||||
								 enterkeyhint="send" | 
				
			||||
								 @focus="cancelRevoke" | 
				
			||||
								 @keyup.enter="handleSendMessage" | 
				
			||||
								 @update:model-value="resizeInput" /> | 
				
			||||
			<div class="send__btn" | 
				
			||||
					 @click="handleSendMessage">发 送</div> | 
				
			||||
		</div> | 
				
			||||
 | 
				
			||||
		<transition name="fade"> | 
				
			||||
			<div v-if="tool.show" | 
				
			||||
					 class="tool_box" | 
				
			||||
					 :style="{ 'bottom': `${bottomHeight}px` }"> | 
				
			||||
				<div class="tool_item"> | 
				
			||||
					<van-uploader multiple | 
				
			||||
												:before-read="onBeforeRead" | 
				
			||||
												@click-upload="tool.show = !tool.show"> | 
				
			||||
						<svg t="1663317574777" | 
				
			||||
								 class="icon" | 
				
			||||
								 viewBox="0 0 1024 1024" | 
				
			||||
								 version="1.1" | 
				
			||||
								 xmlns="http://www.w3.org/2000/svg" | 
				
			||||
								 p-id="21868" | 
				
			||||
								 width="28" | 
				
			||||
								 height="28"> | 
				
			||||
							<path d="M841.71335 65.290005 182.285626 65.290005c-64.511269 0-116.995621 52.484352-116.995621 116.995621L65.290005 841.71335c0 64.511269 52.484352 116.995621 116.995621 116.995621l659.427724 0c64.511269 0 116.995621-52.484352 116.995621-116.995621L958.708971 182.285626C958.708971 117.774357 906.225643 65.290005 841.71335 65.290005zM182.285626 107.833961l659.427724 0c41.051975 0 74.451666 33.398668 74.451666 74.451666l0 136.557142c-150.09446 5.26184-290.370297 66.084091-396.978337 172.692131-49.960879 49.961902-89.841168 107.331517-118.694309 169.625282-83.496669-70.835302-204.372667-75.376735-292.65841-13.617136L107.833961 182.285626C107.833961 141.232628 141.232628 107.833961 182.285626 107.833961zM107.833961 841.71335 107.833961 702.627618c76.54228-74.311473 198.833511-74.234725 275.272437 0.24457-24.303522 65.298192-37.026288 135.112234-37.026288 206.91149 0 2.223644 0.343831 4.366448 0.977257 6.381337L182.285626 916.165016C141.232628 916.165016 107.833961 882.766348 107.833961 841.71335zM841.71335 916.165016 387.646807 916.165016c0.633427-2.01489 0.977257-4.157693 0.977257-6.381337 0-146.71755 57.053414-284.572244 160.647817-388.166647 98.570993-98.570993 228.166583-154.963351 366.894158-160.204725L916.166039 841.71335C916.165016 882.766348 882.766348 916.165016 841.71335 916.165016z" | 
				
			||||
										p-id="21869" | 
				
			||||
										fill="#707070"></path> | 
				
			||||
							<path d="M312.397986 413.458683c60.8376 0 110.332874-49.494251 110.332874-110.332874s-49.494251-110.332874-110.332874-110.332874-110.332874 49.494251-110.332874 110.332874S251.559363 413.458683 312.397986 413.458683zM312.397986 235.337913c37.378306 0 67.788919 30.40959 67.788919 67.788919s-30.40959 67.788919-67.788919 67.788919-67.788919-30.40959-67.788919-67.788919S275.018657 235.337913 312.397986 235.337913z" | 
				
			||||
										p-id="21870" | 
				
			||||
										fill="#707070"></path> | 
				
			||||
						</svg> | 
				
			||||
						<div class="tool_item_title">图片</div> | 
				
			||||
					</van-uploader> | 
				
			||||
				</div> | 
				
			||||
				<div class="tool_item" | 
				
			||||
						 @click="openTreat"> | 
				
			||||
					<van-icon name="records" | 
				
			||||
										color="#929292" | 
				
			||||
										size="30" /> | 
				
			||||
					<div class="tool_item_title">就诊记录</div> | 
				
			||||
				</div> | 
				
			||||
				<div class="tool_item" | 
				
			||||
						 @click="toRecipe"> | 
				
			||||
					<svg t="1681180334020" | 
				
			||||
							 class="icon" | 
				
			||||
							 viewBox="0 0 1024 1024" | 
				
			||||
							 version="1.1" | 
				
			||||
							 xmlns="http://www.w3.org/2000/svg" | 
				
			||||
							 p-id="3639" | 
				
			||||
							 width="28" | 
				
			||||
							 height="28"> | 
				
			||||
						<path d="M276.232215 0h569.367801a25.211231 25.211231 0 0 1 25.151228 25.151228v971.657444a25.221232 25.221232 0 0 1-25.151228 25.161229H74.952387A25.221232 25.221232 0 0 1 49.801159 996.808672v-770.637628a25.101226 25.101226 0 0 1 8.780428-19.000928L258.531351 7.310357A25.451243 25.451243 0 0 1 276.232215 0z m25.001221 50.17245l-0.270014 176.008594a25.001221 25.001221 0 0 1-25.00122 25.001221v0.130006h-176.008595v720.325172h720.395176V50.222452zM135.525344 201.009815h115.425636l0.130007-115.425636z m0 0" | 
				
			||||
									fill="#656666" | 
				
			||||
									p-id="3640"></path> | 
				
			||||
						<path d="M175.467295 837.590898h569.217793v33.551638H175.467295z m0-314.015333h217.770633v33.551638H175.467295z m467.872845-157.767703l31.821554-49.782431a4.190205 4.190205 0 0 1 3.600176-2.000098h72.813555a4.070199 4.070199 0 0 1 3.720182 2.260111 3.810186 3.810186 0 0 1-0.250013 4.260208l-73.003564 108.225284a4.240207 4.240207 0 0 0 0 4.660228l79.003857 117.005713a4.180204 4.180204 0 0 1-3.460169 6.530319h-77.443781a4.370213 4.370213 0 0 1-3.600176-2.000098l-36.201767-54.172645a4.220206 4.220206 0 0 0-7.000342-0.130006l-36.801797 54.582665a4.000195 4.000195 0 0 1-3.460169 1.860091h-74.163621a4.120201 4.120201 0 0 1-3.730183-2.260111 3.810186 3.810186 0 0 1 0.270014-4.260208l77.343776-115.685649a4.260208 4.260208 0 0 0 0-4.670228l-90.654426-128.466272h-4.120202v88.004297a4.150203 4.150203 0 0 1-4.120201 4.120201h-62.843068a4.140202 4.140202 0 0 1-4.120201-4.120201V142.686967a4.140202 4.140202 0 0 1 4.120201-4.120201h106.275189c50.852483 0 88.514322 29.421437 88.514322 82.524029 0 29.69145-13.300649 55.91273-37.531833 70.293433a4.000195 4.000195 0 0 0-2.000097 2.66013 3.820187 3.820187 0 0 0 0.520025 3.200156l48.072347 69.093374c2.000098 2.270111 6.790332 2.130104 8.510416-0.530026zM497.883038 205.230021v33.541638a4.150203 4.150203 0 0 0 4.120201 4.120201h22.33109c7.050344 0 18.760916-0.540026 24.351189-5.32026 4.120201-3.600176 4.930241-11.720572 4.930241-16.900825s-0.670033-11.190546-4.790234-14.780722c-5.450266-4.660228-17.700864-4.92024-24.491196-4.92024h-22.33109a4.260208 4.260208 0 0 0-4.120201 4.260208z m-322.415743 422.92065h569.487807v33.541638H175.467295z m0.140006 104.63511h569.217794v33.541637H175.607301z m0 0" | 
				
			||||
									fill="#656666" | 
				
			||||
									p-id="3641"></path> | 
				
			||||
					</svg> | 
				
			||||
					<div class="tool_item_title">处方</div> | 
				
			||||
				</div> | 
				
			||||
				<div class="tool_item" | 
				
			||||
						 @click="toComment"> | 
				
			||||
					<svg t="1686299854270" | 
				
			||||
							 class="icon" | 
				
			||||
							 viewBox="0 0 1024 1024" | 
				
			||||
							 version="1.1" | 
				
			||||
							 xmlns="http://www.w3.org/2000/svg" | 
				
			||||
							 p-id="3239" | 
				
			||||
							 width="28" | 
				
			||||
							 height="28"> | 
				
			||||
						<path d="M512 64C264.533333 64 64 264.533333 64 512s200.533333 448 448 448 448-200.533333 448-448S759.466667 64 512 64z m0 853.333333C288 917.333333 106.666667 736 106.666667 512S288 106.666667 512 106.666667s405.333333 181.333333 405.333333 405.333333-181.333333 405.333333-405.333333 405.333333z" | 
				
			||||
									fill="#666666" | 
				
			||||
									p-id="3240"></path> | 
				
			||||
						<path d="M627.2 622.933333c-29.866667 32-70.4 49.066667-115.2 49.066667-42.666667 0-83.2-17.066667-113.066667-46.933333-8.533333-8.533333-21.333333-8.533333-29.866666 0-8.533333 8.533333-8.533333 21.333333 0 29.866666 38.4 38.4 89.6 59.733333 142.933333 59.733334 55.466667 0 106.666667-21.333333 145.066667-61.866667 8.533333-8.533333 8.533333-21.333333 0-29.866667-8.533333-8.533333-21.333333-8.533333-29.866667 0z" | 
				
			||||
									fill="#666666" | 
				
			||||
									p-id="3241"></path> | 
				
			||||
						<path d="M384 448m-42.666667 0a42.666667 42.666667 0 1 0 85.333334 0 42.666667 42.666667 0 1 0-85.333334 0Z" | 
				
			||||
									fill="#666666" | 
				
			||||
									p-id="3242"></path> | 
				
			||||
						<path d="M640 448m-42.666667 0a42.666667 42.666667 0 1 0 85.333334 0 42.666667 42.666667 0 1 0-85.333334 0Z" | 
				
			||||
									fill="#666666" | 
				
			||||
									p-id="3243"></path> | 
				
			||||
					</svg> | 
				
			||||
					<div class="tool_item_title">评价医生</div> | 
				
			||||
				</div> | 
				
			||||
			</div> | 
				
			||||
		</transition> | 
				
			||||
 | 
				
			||||
		<van-popup v-model:show="tool.treat.show" | 
				
			||||
							 position="right" | 
				
			||||
							 :style="{ height: 'calc(100% - 0px)', 'width': '55%', 'box-sizing': 'border-box', 'padding-top': `${paddingTop}px` }"> | 
				
			||||
			<div style="font-size: 15px;font-weight: bolder;color: #606266;padding: 10px;">就诊记录</div> | 
				
			||||
			<section v-if="tool.treat.data.length > 0"> | 
				
			||||
				<van-cell v-for="(treat, k) of tool.treat.data" | 
				
			||||
									:key="k"> | 
				
			||||
					<div class="treat_item_time">{{ treat.registerDate }}</div> | 
				
			||||
					<div class="treat_item"> | 
				
			||||
						<div>主诉:</div> | 
				
			||||
						<div>{{ treat.complaint }}</div> | 
				
			||||
					</div> | 
				
			||||
					<div class="treat_item"> | 
				
			||||
						<div>症状:</div> | 
				
			||||
						<div>{{ treat.symptom }}</div> | 
				
			||||
					</div> | 
				
			||||
					<div class="treat_item"> | 
				
			||||
						<div>诊断:</div> | 
				
			||||
						<div>{{ treat.diagnose }}</div> | 
				
			||||
					</div> | 
				
			||||
					<div class="treat_item"> | 
				
			||||
						<div>门诊号:</div> | 
				
			||||
						<div>{{ treat.mzNum }}</div> | 
				
			||||
					</div> | 
				
			||||
					<div class="treat_item"> | 
				
			||||
						<div>医生:</div> | 
				
			||||
						<div>{{ treat.doctName }}</div> | 
				
			||||
					</div> | 
				
			||||
				</van-cell> | 
				
			||||
			</section> | 
				
			||||
			<van-empty v-else | 
				
			||||
								 :image-size="[60, 40]" | 
				
			||||
								 description="暂无就诊记录" /> | 
				
			||||
		</van-popup> | 
				
			||||
	</div> | 
				
			||||
</template> | 
				
			||||
 | 
				
			||||
<script> | 
				
			||||
import { reactive, toRefs, watch, ref, onUnmounted } from 'vue'; | 
				
			||||
import { useRoute, useRouter } from 'vue-router'; | 
				
			||||
export default { | 
				
			||||
  props: { | 
				
			||||
    clickBlur: { | 
				
			||||
      type: Boolean, | 
				
			||||
      default: false | 
				
			||||
    }, | 
				
			||||
    blurTime: { | 
				
			||||
      type: Number | 
				
			||||
    }, | 
				
			||||
    order: { | 
				
			||||
      type: Object, | 
				
			||||
      default: () => { } | 
				
			||||
    } | 
				
			||||
  }, | 
				
			||||
  emits: ['toRecipe'], | 
				
			||||
  setup(props, context) { | 
				
			||||
    const route = useRoute(); | 
				
			||||
    const router = useRouter(); | 
				
			||||
    const input = ref(null) | 
				
			||||
    const toRecipe = () => context.emit('toRecipe') | 
				
			||||
 | 
				
			||||
    const state = reactive({ | 
				
			||||
      message: '', | 
				
			||||
      test: '你', | 
				
			||||
      paddingTop: '40px' | 
				
			||||
    }) | 
				
			||||
 | 
				
			||||
    /** | 
				
			||||
     * 将消息传给父组件 | 
				
			||||
     */ | 
				
			||||
    function handleSendMessage() { | 
				
			||||
      context.emit('cancelRevoke') | 
				
			||||
      state.message = state.message.trim().replace(/[\r\n]/g, "") | 
				
			||||
      context.emit('sendMessage', state.message) | 
				
			||||
      state.message = '' | 
				
			||||
      resizeInput() | 
				
			||||
    } | 
				
			||||
 | 
				
			||||
    /** | 
				
			||||
     * 图片上传之前 | 
				
			||||
     * @param {Any} file 图片文件 | 
				
			||||
     */ | 
				
			||||
    function onBeforeRead(file) { | 
				
			||||
      context.emit('sendImage', Array.isArray(file) ? file : [file]) | 
				
			||||
      resizeInput() | 
				
			||||
    } | 
				
			||||
 | 
				
			||||
    /** | 
				
			||||
     * 监听滚动失焦 | 
				
			||||
     */ | 
				
			||||
    watch(() => props.clickBlur, (newVal, oldVal) => { | 
				
			||||
      if (newVal) { | 
				
			||||
        if (new Date().getTime() - props.blurTime > 300) | 
				
			||||
          input.value.blur() | 
				
			||||
      } | 
				
			||||
    }) | 
				
			||||
 | 
				
			||||
    // 工具箱 | 
				
			||||
    const tool = reactive({ | 
				
			||||
      show: false, | 
				
			||||
      treat: { | 
				
			||||
        show: false, | 
				
			||||
        data: [] | 
				
			||||
      }, | 
				
			||||
      dom: null | 
				
			||||
    }) | 
				
			||||
    /** | 
				
			||||
     * 打开就诊记录 | 
				
			||||
     */ | 
				
			||||
    function openTreat() { | 
				
			||||
      tool.show = !tool.show | 
				
			||||
      tool.treat.show = !tool.treat.show | 
				
			||||
      getTreatRecord() | 
				
			||||
    } | 
				
			||||
    document.addEventListener('scroll', closeTool, false) | 
				
			||||
    document.addEventListener('click', closeTool, false) | 
				
			||||
 | 
				
			||||
    function closeTool(e) { | 
				
			||||
      tool.show = false | 
				
			||||
      document.onmousemove = null; | 
				
			||||
      document.onmouseup = null; | 
				
			||||
      document.onmousedown = null; | 
				
			||||
    } | 
				
			||||
    document.onmousemove = (e) => closeTool(e) | 
				
			||||
    document.onmousedown = (e) => closeTool(e) | 
				
			||||
 | 
				
			||||
    onUnmounted(() => { | 
				
			||||
      document.removeEventListener('scroll', closeTool) | 
				
			||||
      document.removeEventListener('click', closeTool) | 
				
			||||
    }) | 
				
			||||
 | 
				
			||||
 | 
				
			||||
    /** | 
				
			||||
     * 获取患者就诊记录 | 
				
			||||
     * @param {String} patientId 患者id(115666) | 
				
			||||
     * @param {String} deptCode 科室代码(0307) | 
				
			||||
     */ | 
				
			||||
    function getTreatRecord(patientId, deptCode) { | 
				
			||||
      axios.get(`/wx/treat/getTreatList.do?patientId=${patientId}&deptCode=${deptCode}`).then(response => { | 
				
			||||
        if (response.code === 200) { | 
				
			||||
          treat.data = resp.data | 
				
			||||
        } | 
				
			||||
      }) | 
				
			||||
    } | 
				
			||||
 | 
				
			||||
    /** | 
				
			||||
     * 工具标签高度变化 | 
				
			||||
     */ | 
				
			||||
    const bottomHeight = ref(52) | 
				
			||||
    const initBottomHeight = bottomHeight.value | 
				
			||||
    function resizeInput() { | 
				
			||||
      if (document.querySelector('.send').clientHeight > 52) { | 
				
			||||
        setTimeout(() => { | 
				
			||||
          context.emit('resizeInput', document.querySelector('.send').clientHeight - 52) | 
				
			||||
        }, 100); | 
				
			||||
      } | 
				
			||||
    } | 
				
			||||
 | 
				
			||||
    /** | 
				
			||||
     * 监听工具箱打开,重新计算工具箱bottom距离 | 
				
			||||
     */ | 
				
			||||
    watch(() => tool.show, (newVal) => { | 
				
			||||
      if (newVal) { | 
				
			||||
        bottomHeight.value = initBottomHeight + (document.querySelector('.send').clientHeight - 52) | 
				
			||||
      } | 
				
			||||
    }) | 
				
			||||
 | 
				
			||||
    function toComment() { | 
				
			||||
      if (!props.order.outTradeNo) return vant.Toast.fail('订单信息缺失,无法前往评价订单!') | 
				
			||||
      router.push({ path: '/comment', query: { outTradeNo: props.order.outTradeNo } }) | 
				
			||||
    } | 
				
			||||
 | 
				
			||||
    function cancelRevoke() { | 
				
			||||
      context.emit('cancelRevoke') | 
				
			||||
    } | 
				
			||||
 | 
				
			||||
 | 
				
			||||
    return { | 
				
			||||
      ...toRefs(state), | 
				
			||||
      onBeforeRead, | 
				
			||||
      input, | 
				
			||||
      handleSendMessage, | 
				
			||||
      tool, | 
				
			||||
      openTreat, | 
				
			||||
      resizeInput, | 
				
			||||
      bottomHeight, | 
				
			||||
      toRecipe, | 
				
			||||
      toComment, | 
				
			||||
      cancelRevoke | 
				
			||||
    } | 
				
			||||
  }, | 
				
			||||
	props: { | 
				
			||||
		clickBlur: { | 
				
			||||
			type: Boolean, | 
				
			||||
			default: false | 
				
			||||
		}, | 
				
			||||
		blurTime: { | 
				
			||||
			type: Number | 
				
			||||
		}, | 
				
			||||
		order: { | 
				
			||||
			type: Object, | 
				
			||||
			default: () => { } | 
				
			||||
		} | 
				
			||||
	}, | 
				
			||||
	emits: ['toRecipe'], | 
				
			||||
	setup(props, context) { | 
				
			||||
		const route = useRoute(); | 
				
			||||
		const router = useRouter(); | 
				
			||||
		const input = ref(null) | 
				
			||||
		const toRecipe = () => context.emit('toRecipe') | 
				
			||||
 | 
				
			||||
		const state = reactive({ | 
				
			||||
			message: '', | 
				
			||||
			test: '你', | 
				
			||||
			paddingTop: 40 | 
				
			||||
		}) | 
				
			||||
 | 
				
			||||
		/** | 
				
			||||
		 * 将消息传给父组件 | 
				
			||||
		 */ | 
				
			||||
		function handleSendMessage() { | 
				
			||||
			context.emit('cancelRevoke') | 
				
			||||
			state.message = state.message.trim().replace(/[\r\n]/g, "") | 
				
			||||
			context.emit('sendMessage', state.message) | 
				
			||||
			state.message = '' | 
				
			||||
			resizeInput() | 
				
			||||
		} | 
				
			||||
 | 
				
			||||
		/** | 
				
			||||
		 * 图片上传之前 | 
				
			||||
		 * @param {Any} file 图片文件 | 
				
			||||
		 */ | 
				
			||||
		function onBeforeRead(file) { | 
				
			||||
			context.emit('sendImage', Array.isArray(file) ? file : [file]) | 
				
			||||
			resizeInput() | 
				
			||||
		} | 
				
			||||
 | 
				
			||||
		/** | 
				
			||||
		 * 监听滚动失焦 | 
				
			||||
		 */ | 
				
			||||
		watch(() => props.clickBlur, (newVal, oldVal) => { | 
				
			||||
			if (newVal) { | 
				
			||||
				if (new Date().getTime() - props.blurTime > 300) | 
				
			||||
					input.value.blur() | 
				
			||||
			} | 
				
			||||
		}) | 
				
			||||
 | 
				
			||||
		// 工具箱 | 
				
			||||
		const tool = reactive({ | 
				
			||||
			show: false, | 
				
			||||
			treat: { | 
				
			||||
				show: false, | 
				
			||||
				data: [] | 
				
			||||
			}, | 
				
			||||
			dom: null | 
				
			||||
		}) | 
				
			||||
		/** | 
				
			||||
		 * 打开就诊记录 | 
				
			||||
		 */ | 
				
			||||
		function openTreat() { | 
				
			||||
			tool.show = !tool.show | 
				
			||||
			tool.treat.show = !tool.treat.show | 
				
			||||
			if (document.getElementsByClassName('symp_container').length > 0) { | 
				
			||||
				const height = document.getElementsByClassName('symp_container')[0].clientHeight | 
				
			||||
				state.paddingTop = 40 + height | 
				
			||||
			} | 
				
			||||
			getTreatRecord() | 
				
			||||
		} | 
				
			||||
		document.addEventListener('scroll', closeTool, false) | 
				
			||||
		document.addEventListener('click', closeTool, false) | 
				
			||||
 | 
				
			||||
		function closeTool(e) { | 
				
			||||
			tool.show = false | 
				
			||||
			document.onmousemove = null; | 
				
			||||
			document.onmouseup = null; | 
				
			||||
			document.onmousedown = null; | 
				
			||||
		} | 
				
			||||
		document.onmousemove = (e) => closeTool(e) | 
				
			||||
		document.onmousedown = (e) => closeTool(e) | 
				
			||||
 | 
				
			||||
		onUnmounted(() => { | 
				
			||||
			document.removeEventListener('scroll', closeTool) | 
				
			||||
			document.removeEventListener('click', closeTool) | 
				
			||||
		}) | 
				
			||||
 | 
				
			||||
 | 
				
			||||
		/** | 
				
			||||
		 * 获取患者就诊记录 | 
				
			||||
		 * @param {String} patientId 患者id(115666) | 
				
			||||
		 * @param {String} deptCode 科室代码(0307) | 
				
			||||
		 */ | 
				
			||||
		function getTreatRecord(patientId, deptCode) { | 
				
			||||
			axios.get(`/wx/treat/getTreatList.do?patientId=${patientId}&deptCode=${deptCode}`).then(response => { | 
				
			||||
				if (response.code === 200) { | 
				
			||||
					treat.data = resp.data | 
				
			||||
				} | 
				
			||||
			}) | 
				
			||||
		} | 
				
			||||
 | 
				
			||||
		/** | 
				
			||||
		 * 工具标签高度变化 | 
				
			||||
		 */ | 
				
			||||
		const bottomHeight = ref(52) | 
				
			||||
		const initBottomHeight = bottomHeight.value | 
				
			||||
		function resizeInput() { | 
				
			||||
			if (document.querySelector('.send').clientHeight > 52) { | 
				
			||||
				setTimeout(() => { | 
				
			||||
					context.emit('resizeInput', document.querySelector('.send').clientHeight - 52) | 
				
			||||
				}, 100); | 
				
			||||
			} | 
				
			||||
		} | 
				
			||||
 | 
				
			||||
		/** | 
				
			||||
		 * 监听工具箱打开,重新计算工具箱bottom距离 | 
				
			||||
		 */ | 
				
			||||
		watch(() => tool.show, (newVal) => { | 
				
			||||
			if (newVal) { | 
				
			||||
				bottomHeight.value = initBottomHeight + (document.querySelector('.send').clientHeight - 52) | 
				
			||||
			} | 
				
			||||
		}) | 
				
			||||
 | 
				
			||||
		function toComment() { | 
				
			||||
			if (!props.order.outTradeNo) return vant.Toast.fail('订单信息缺失,无法前往评价订单!') | 
				
			||||
			router.push({ path: '/comment', query: { outTradeNo: props.order.outTradeNo } }) | 
				
			||||
		} | 
				
			||||
 | 
				
			||||
		function cancelRevoke() { | 
				
			||||
			context.emit('cancelRevoke') | 
				
			||||
		} | 
				
			||||
 | 
				
			||||
 | 
				
			||||
		return { | 
				
			||||
			...toRefs(state), | 
				
			||||
			onBeforeRead, | 
				
			||||
			input, | 
				
			||||
			handleSendMessage, | 
				
			||||
			tool, | 
				
			||||
			openTreat, | 
				
			||||
			resizeInput, | 
				
			||||
			bottomHeight, | 
				
			||||
			toRecipe, | 
				
			||||
			toComment, | 
				
			||||
			cancelRevoke | 
				
			||||
		} | 
				
			||||
	}, | 
				
			||||
} | 
				
			||||
</script> | 
				
			||||
<style scoped> | 
				
			||||
.consultation-tool-bar { | 
				
			||||
  width: 100%; | 
				
			||||
  height: auto; | 
				
			||||
  background: #f0efef; | 
				
			||||
	width: 100%; | 
				
			||||
	height: auto; | 
				
			||||
	background: #f0efef; | 
				
			||||
} | 
				
			||||
 | 
				
			||||
.send { | 
				
			||||
  width: calc(100% - 10px); | 
				
			||||
  height: auto; | 
				
			||||
  padding: 5px; | 
				
			||||
  display: flex; | 
				
			||||
  flex-direction: row; | 
				
			||||
  justify-content: space-between; | 
				
			||||
  position: relative; | 
				
			||||
  border-top: 1px solid var(--border-a); | 
				
			||||
	width: calc(100% - 10px); | 
				
			||||
	height: auto; | 
				
			||||
	padding: 5px; | 
				
			||||
	display: flex; | 
				
			||||
	flex-direction: row; | 
				
			||||
	justify-content: space-between; | 
				
			||||
	position: relative; | 
				
			||||
	border-top: 1px solid var(--border-a); | 
				
			||||
} | 
				
			||||
 | 
				
			||||
.send__voice { | 
				
			||||
  width: 34px; | 
				
			||||
  height: 34px; | 
				
			||||
  display: flex; | 
				
			||||
  justify-content: center; | 
				
			||||
  align-items: center; | 
				
			||||
  padding: 4px; | 
				
			||||
  margin: auto; | 
				
			||||
	width: 34px; | 
				
			||||
	height: 34px; | 
				
			||||
	display: flex; | 
				
			||||
	justify-content: center; | 
				
			||||
	align-items: center; | 
				
			||||
	padding: 4px; | 
				
			||||
	margin: auto; | 
				
			||||
} | 
				
			||||
 | 
				
			||||
.send__input { | 
				
			||||
  width: calc(100% - 120px); | 
				
			||||
  height: auto; | 
				
			||||
  max-height: 120px; | 
				
			||||
  padding: 5px 10px; | 
				
			||||
  margin: auto; | 
				
			||||
  border-radius: 5px; | 
				
			||||
	width: calc(100% - 120px); | 
				
			||||
	height: auto; | 
				
			||||
	max-height: 120px; | 
				
			||||
	padding: 5px 10px; | 
				
			||||
	margin: auto; | 
				
			||||
	border-radius: 5px; | 
				
			||||
} | 
				
			||||
 | 
				
			||||
.send__btn { | 
				
			||||
  width: 55px; | 
				
			||||
  height: 35px; | 
				
			||||
  text-align: center; | 
				
			||||
  background: #6ecb94; | 
				
			||||
  border-radius: 5px; | 
				
			||||
  line-height: 35px; | 
				
			||||
  margin: auto; | 
				
			||||
  color: #ffffff; | 
				
			||||
	width: 55px; | 
				
			||||
	height: 35px; | 
				
			||||
	text-align: center; | 
				
			||||
	background: #6ecb94; | 
				
			||||
	border-radius: 5px; | 
				
			||||
	line-height: 35px; | 
				
			||||
	margin: auto; | 
				
			||||
	color: #ffffff; | 
				
			||||
} | 
				
			||||
 | 
				
			||||
.arrowTransform { | 
				
			||||
  transition: 0.2s; | 
				
			||||
  transform-origin: center; | 
				
			||||
  transform: rotateZ(180deg); | 
				
			||||
	transition: 0.2s; | 
				
			||||
	transform-origin: center; | 
				
			||||
	transform: rotateZ(180deg); | 
				
			||||
} | 
				
			||||
 | 
				
			||||
.arrowTransformReturn { | 
				
			||||
  transition: 0.2s; | 
				
			||||
  transform-origin: center; | 
				
			||||
  transform: rotateZ(0deg); | 
				
			||||
	transition: 0.2s; | 
				
			||||
	transform-origin: center; | 
				
			||||
	transform: rotateZ(0deg); | 
				
			||||
} | 
				
			||||
 | 
				
			||||
.tool_box { | 
				
			||||
  width: 100%; | 
				
			||||
  height: 60px; | 
				
			||||
  background-color: #f1f1f1; | 
				
			||||
  position: absolute; | 
				
			||||
  left: 0; | 
				
			||||
  display: flex; | 
				
			||||
  flex-direction: row; | 
				
			||||
  align-items: center; | 
				
			||||
  text-align: center; | 
				
			||||
	width: 100%; | 
				
			||||
	height: 60px; | 
				
			||||
	background-color: #f1f1f1; | 
				
			||||
	position: absolute; | 
				
			||||
	left: 0; | 
				
			||||
	display: flex; | 
				
			||||
	flex-direction: row; | 
				
			||||
	align-items: center; | 
				
			||||
	text-align: center; | 
				
			||||
} | 
				
			||||
 | 
				
			||||
.tool_item { | 
				
			||||
  flex: 1; | 
				
			||||
  padding: 10px; | 
				
			||||
	flex: 1; | 
				
			||||
	padding: 10px; | 
				
			||||
} | 
				
			||||
 | 
				
			||||
.tool_item .icon path { | 
				
			||||
  fill: #929292; | 
				
			||||
	fill: #929292; | 
				
			||||
} | 
				
			||||
 | 
				
			||||
.tool_item_title { | 
				
			||||
  font-size: 12px; | 
				
			||||
  color: #929292; | 
				
			||||
	font-size: 12px; | 
				
			||||
	color: #929292; | 
				
			||||
} | 
				
			||||
 | 
				
			||||
.fade-enter-active, | 
				
			||||
.fade-leave-active { | 
				
			||||
  transition: opacity 0.4s; | 
				
			||||
	transition: opacity 0.4s; | 
				
			||||
} | 
				
			||||
 | 
				
			||||
.fade-enter, | 
				
			||||
.fade-leave-to { | 
				
			||||
  opacity: 0; | 
				
			||||
	opacity: 0; | 
				
			||||
} | 
				
			||||
 | 
				
			||||
.treat .van-cell { | 
				
			||||
  width: calc(100% - 8px); | 
				
			||||
  box-shadow: 0 2px 12px 0 rgb(0 0 0 / 10%); | 
				
			||||
  border: 1px solid #ebeef5; | 
				
			||||
  transition: 0.3 time; | 
				
			||||
  margin: 5px 4px; | 
				
			||||
  padding: 10px; | 
				
			||||
	width: calc(100% - 8px); | 
				
			||||
	box-shadow: 0 2px 12px 0 rgb(0 0 0 / 10%); | 
				
			||||
	border: 1px solid #ebeef5; | 
				
			||||
	transition: 0.3 time; | 
				
			||||
	margin: 5px 4px; | 
				
			||||
	padding: 10px; | 
				
			||||
} | 
				
			||||
 | 
				
			||||
.treat_item_time { | 
				
			||||
  text-align: left; | 
				
			||||
  font-weight: bold; | 
				
			||||
	text-align: left; | 
				
			||||
	font-weight: bold; | 
				
			||||
} | 
				
			||||
 | 
				
			||||
.treat_item { | 
				
			||||
  text-align: left; | 
				
			||||
	text-align: left; | 
				
			||||
} | 
				
			||||
 | 
				
			||||
.treat_item div:nth-child(1) { | 
				
			||||
  position: absolute; | 
				
			||||
  color: #606266; | 
				
			||||
  font-weight: bold; | 
				
			||||
  width: 60px; | 
				
			||||
  overflow-wrap: normal; | 
				
			||||
	position: absolute; | 
				
			||||
	color: #606266; | 
				
			||||
	font-weight: bold; | 
				
			||||
	width: 60px; | 
				
			||||
	overflow-wrap: normal; | 
				
			||||
} | 
				
			||||
 | 
				
			||||
.treat_item div:nth-child(2) { | 
				
			||||
  padding-left: 50px; | 
				
			||||
  min-height: 24px; | 
				
			||||
	padding-left: 50px; | 
				
			||||
	min-height: 24px; | 
				
			||||
} | 
				
			||||
 | 
				
			||||
.treat_item:nth-child(5) div:nth-child(1) { | 
				
			||||
  font-size: 12px; | 
				
			||||
 | 
				
			||||
	font-size: 12px; | 
				
			||||
} | 
				
			||||
</style> | 
				
			||||
 | 
				
			||||
									
										
											File diff suppressed because one or more lines are too long
										
									
								
							
						
					Loading…
					
					
				
		Reference in new issue