import history from './../../utils/history'; import { getContentHeight } from '../../utils'; import { getDepartmentList } from './service'; import { queryServiceByCode } from '../../service/common'; import { reportCmPV_YL } from '../../utils/cloudMonitorHelper'; Component({ props: { componentData: {} }, data: { index: 0, show: false, menus: [], cache: {}, lastCache: {}, loading: true, serviceItem: null, contentHeight: getContentHeight() }, async didMount() { /* 服务预警, 预约挂号 */ reportCmPV_YL({ title: '预约挂号' }); const { hospitalDistrictId } = this.getQuery(); try { await this.getServiceDetail(); // eslint-disable-next-line no-empty } catch (e) {} await this.fetchMenus(hospitalDistrictId); }, methods: { updateData(data) { return new Promise(resolve => this.setData(data, resolve)); }, async getServiceDetail() { const code = 'hospital_service_code'; const { link, uuid, title, linkType, accessMode, serviceDesc } = await queryServiceByCode(code); const serviceItem = { url: link, accessMode, name: title, serviceDesc, urlType: linkType, serviceUUID: uuid }; await this.updateData({ serviceItem }); }, getQuery() { const { $routeConfig } = this.$page; return $routeConfig.query; }, async fetchProxy(func, ...arg) { my.showLoading(); await func(...arg).finally(my.hideLoading); }, /* 检测缓存 */ hasCache() { const { index, cache } = this.data; return (cache[index] || []).length > 0; }, /* 设置缓存 */ setCache(list) { const { index: i, cache: _cache } = this.data; const cache = { ..._cache }; cache[i] = list; return this.updateData({ cache }); }, /* 获取一级列表数据 */ async fetchMenus(hospitalDistrictId) { const params = { hospitalDistrictId }; const list = await getDepartmentList(params); await this.updateData({ menus: list, loading: false }); /* 获取一级列表下面的第一项的第一个 */ const departmentId = this.getDepartmentId(0); await this.fetchDepartments(departmentId, list[0]); }, /* 获取二级列表 */ async fetchDepartments(departmentId, item) { if (this.hasCache()) return; const list = !departmentId ? [item] : await getDepartmentList({ parentId: departmentId }); this.setCache(list); }, /* 获取科室id */ getDepartmentId(index) { const { menus = [] } = this.data; const { hasChildren, departmentId } = menus[index] || {}; if (hasChildren) return departmentId; }, /* 切换科室 */ async onTapMenu(i) { const item = this.data.menus[i]; await this.updateData({ index: i }); const departmentId = this.getDepartmentId(i); await this.fetchDepartments(departmentId, item); }, /* 获取三级列表数据 */ async onTapOpenLast(item) { const { departmentId } = item; const { lastCache } = this.data; const cacheList = lastCache[departmentId] || []; if (cacheList.length > 0) return cacheList; my.showLoading(); const list = await getDepartmentList({ parentId: departmentId }).finally(my.hideLoading); lastCache[departmentId] = list; await this.updateData({ lastCache: { ...lastCache } }); return list; }, onTapItem(item) { const query = this.getQuery(); const { name: areaName } = query; const { componentData } = this.props; const { departmentId, name: dpName } = item; history.push({ query: { departmentId }, title: `${dpName}(${areaName})`, pageType: 'hospital-num-source', componentData: { ...componentData, department: item } }); } } });