1.更新im
2.修改bug
This commit is contained in:
2025-07-09 15:18:56 +08:00
parent 308d9ae94e
commit 78141a788f
22 changed files with 168 additions and 368 deletions
@@ -17,7 +17,7 @@
<div
class="adv"
@click="endStatus"
v-if="hrefParams.isSpecialized !== 'expert' && hrefParams.isSpecialized === 'false' && upTabIndex === '0'"
v-if="hrefParams.isSpecialized !== 'expert' && hrefParams.isSpecialized === 'false' && upTabIndex === '0' && isEnd()"
>
<!-- 应急详情-->
结束应急
@@ -256,6 +256,23 @@
data.otherTypingStatus = 0;
}, 5000);
function isEnd() {
// @ts-ignore
if (data.conversation?.lastMessage?.payload?.data) {
try {
// @ts-ignore
let j = JSON.parse((data.conversation?.lastMessage || {})?.payload?.data);
if (j?.businessID === 'system' && j?.title === '应急单' && j?.type == '1' && j?.content === '该应急单已结束') {
return false;
}
} catch (e) {
console.log(e);
}
}
return true;
}
return {
...toRefs(data),
conversationID,
@@ -274,6 +291,8 @@
forHelp,
endStatus,
bigInformation,
data,
isEnd,
};
},
});
+4 -4
View File
@@ -96,17 +96,17 @@
<div>(14) 个人位置信息(包括精准定位信息、经纬度等);</div>
<div>(15) 其他平台基于为您提供服务需要而收集或汇总的您的信息。</div>
<div>三、我们如何收集和使用您的个人信息</div>
<div>1. 您直接提供的信息:我们可能会收集您在健康新疆注册账号、申请或使用我们的服务时填写,通过现场交谈、电话、视频或其他联系方式与我们联系时所提供的信息,以及您在使用我们服务过程中产生的与您的交易和活动有关的信息。</div>
<div>1. 您直接提供的信息:我们可能会收集您在健康油我注册账号、申请或使用我们的服务时填写,通过现场交谈、电话、视频或其他联系方式与我们联系时所提供的信息,以及您在使用我们服务过程中产生的与您的交易和活动有关的信息。</div>
<div>(1) 帮助您成为我们的一员</div>
<div>您需要向平台提供真实姓名、邮箱、有效身份证件(包括但不限于身份证)的号码,以便于我们进行实名认证。您可以修改和补充您的昵称、性别、生日、职级、职称、学历、亲属、紧急联系人、工作信息(单位部门)、婚姻状况、健康类型、兴趣爱好以及您的实名认证等一系列相关信息相关信息,这些信息均属于您的“账号信息”。您补充的账户信息将有助于我们为您提供与您信息更匹配的相关业务服务(急救协助、医院体检、健康知识推送等)。如果您不提供这些信息,可能会影响您对平台部分核心业务功能的正常使用,如咨询专家等,但不会影响您进行基本的浏览、搜索。如果您不提供这些信息,将会影响您使用平台的部分功能,如咨询专家,但不会影响您使用平台服务的基本浏览、搜索功能。在您主动注销账号时,我们将根据相关法律法规的要求尽快使其匿名或删除您的个人信息。</div>
<div>(2) 咨询专家</div>
<div>为便于您能够咨询专家,您需提供真实姓名、手机号、身份证号码、性别、出生日期、身高体重等信息。为更好地向您提供咨询服务解决您的问题,更加精准、快速地向您推荐医生,我们可能需要您在健康咨询时提供个人健康信息,例如:病症、患病时长、检验报告、体检报告、医院就诊信息、诊治情况、用药记录、以往病史、过敏信息、家族史、患病史等。如您不提供上述信息,将会影响您使用部分健康咨询等功能,但不影响您使用平台产品或服务的基本浏览、搜索功能。应急救援</div>
<div>(1) 您实名成为健康新疆的用户后,若您或您的朋友发生了意外事件,你可以通过查看系统内的相关医疗资源,并向平台发起帮助请求。在此过程中,我们可能会通过您的基本信息和聊天功能获取您的手机号、您的紧急联系人姓名和联系 电话,位置、姓名、性别、年龄、健康状况、事故详情介绍的图文、音视频沟通的信息。搜索</div>
<div>(1) 您实名成为健康油我的用户后,若您或您的朋友发生了意外事件,你可以通过查看系统内的相关医疗资源,并向平台发起帮助请求。在此过程中,我们可能会通过您的基本信息和聊天功能获取您的手机号、您的紧急联系人姓名和联系 电话,位置、姓名、性别、年龄、健康状况、事故详情介绍的图文、音视频沟通的信息。搜索</div>
<div>(3) 搜索</div>
<div>为了让您快速地找到您所需要的专家、知识文章、软件功能、医院等,我们可能会收集您使用我们的产品记录为您提供这些信息展示的最优方式。我们也会为了不断改进和优化上述的功能来使用您的上述个人信息。</div>
<div>您也可以通过搜索来精准地找到您所需要的专家、医院、系统功能。我们会保留您的搜索内容以方便您重复输入或为您展示与您搜索内容相关联的产品或服务。</div>
<div>(4) 应急救援</div>
<div>您实名成为健康新疆的用户后,若您或您的朋友发生了意外事件,你可以通过查看系统内的相关医疗资源,并向平台发起帮助请求。在此过程中,我们可能会通过您的基本信息和聊天功能获取您的手机号、您的紧急联系人姓名和联系 电话,位置、姓名、性别、年龄、健康状况、事故详情介绍的图文、音视频沟通的信息。</div>
<div>您实名成为健康油我的用户后,若您或您的朋友发生了意外事件,你可以通过查看系统内的相关医疗资源,并向平台发起帮助请求。在此过程中,我们可能会通过您的基本信息和聊天功能获取您的手机号、您的紧急联系人姓名和联系 电话,位置、姓名、性别、年龄、健康状况、事故详情介绍的图文、音视频沟通的信息。</div>
<div>(5) 大病就医(挂号)</div>
<div>为了帮您预约医院的专家,我们需要您在预约时提供个人基本信息:姓名、性别、年龄、预约医院、挂号类型、预约时间等基本信息;你可补充病况、就诊卡号、预约科室、医师来进一步享受更为准确的服务。</div>
<div>(6) 体检预约、体检报告查看、体检指标分析</div>
@@ -288,7 +288,7 @@
<div>(5) 响应您的请求将导致您或其他个人、组织的合法权益受到严重损害的;</div>
<div>(6) 涉及商业秘密的。</div>
<div>九、我们如何处理未成年人的个人信息</div>
<div>1.健康新疆非常重视对未成年人个人信息的保护。若您是18周岁以下的未成年人,在使用我们的产品与/或服务前,应事先取得您监护人的同意。健康新疆根据国家相关法律法规的规定保护未成年人的个人信息。</div>
<div>1.健康油我非常重视对未成年人个人信息的保护。若您是18周岁以下的未成年人,在使用我们的产品与/或服务前,应事先取得您监护人的同意。健康油我根据国家相关法律法规的规定保护未成年人的个人信息。</div>
<div>2.我们不会主动直接向未成年人收集其个人信息。对于经监护人同意而收集未成年人个人信息的情况,我们只会在受到法律允许、监护人同意或者保护未成年人所必要的情况下使用、共享、转让或披露此信息。</div>
<div>3.如果有事实证明未成年人在未取得监护人同意的情况下注册使用了我们的产品与/或服务,我们会与相关监护人协商,并设法尽快删除相关个人信息。</div>
<div></div>
File diff suppressed because one or more lines are too long
+2 -2
View File
@@ -1,4 +1,4 @@
<!DOCTYPE html><html lang=""><head><meta charset="utf-8"><meta http-equiv="X-UA-Compatible" content="IE=edge"><meta name="viewport" content="width=device-width,initial-scale=1,maximum-scale=1,user-scalable=0"><link rel="icon" href="faviconnew.png"><title>即时通信</title><link href="css/vendors~app.21030041.css" rel="stylesheet"><link href="css/app.9d5c3c13.css" rel="stylesheet"></head><body><noscript><strong>We're sorry but 腾讯云即时通信 Web-IM doesn't work properly without JavaScript enabled. Please enable it to continue.</strong></noscript><div id="app"></div><script src="./TCaptcha.js"></script><script src="./aegis.min.js"></script><script>/**
<!DOCTYPE html><html lang=""><head><meta charset="utf-8"><meta http-equiv="X-UA-Compatible" content="IE=edge"><meta name="viewport" content="width=device-width,initial-scale=1,maximum-scale=1,user-scalable=0"><link rel="icon" href="faviconnew.png"><title>即时通信</title><link href="css/vendors~app.21030041.css" rel="stylesheet"><link href="css/app.d93af37f.css" rel="stylesheet"></head><body><noscript><strong>We're sorry but 腾讯云即时通信 Web-IM doesn't work properly without JavaScript enabled. Please enable it to continue.</strong></noscript><div id="app"></div><script src="./TCaptcha.js"></script><script src="./aegis.min.js"></script><script>/**
* 根据基础字体大小 和 效果图宽度设置 根节点字体大小
* @param baseFontSize 浏览器默认字体大小 [注]浏览器最小字体为12像素,所以该值必需大于等于12
* @param baseWidth 设计稿的尺寸
@@ -53,4 +53,4 @@
},
false
);
};</script><script src="js/vendors~app.cad1a8d4.js"></script><script src="js/app.fdb8059d.js"></script></body></html>
};</script><script src="js/vendors~app.cad1a8d4.js"></script><script src="js/app.ea711e21.js"></script></body></html>
File diff suppressed because one or more lines are too long
+11 -11
View File
@@ -2,7 +2,7 @@
<html lang="en">
<head>
<meta charset="UTF-8">
<title>健康新疆用户协议</title>
<title>健康油我用户协议</title>
</head>
<style>
html,body {
@@ -38,17 +38,17 @@
</style>
<body>
<div id="zwb">
<h3 class="title-one">健康新疆用户协议</h3>
<h3 class="title-one">软件使用许可协议(健康新疆</h3>
<h3 class="title-one">健康油我用户协议</h3>
<h3 class="title-one">软件使用许可协议(健康油我</h3>
<h3 class="title-one">软件使用许可协议</h3>
<div>欢迎使用我们的服务</div>
<div>本软件许可使用协议《健康新疆平台服务协议》(以下称"本协议")由您与中国石油天然气股份有限公司新疆油田分公司行政事务管理处(以下称“新疆油田”)共同签署。</div>
<div>在使用“健康新疆”软件(以下称许可软件)之前,请仔细阅读本协议。一旦您下载安装使用许可软件,即表示您同意接受本协议所有条款和条件的约束。如您不同意本协议条款和条件,请勿使用许可软件,并请销毁所有许可软件副本。</div>
<div>健康新疆有权根据实际运营的情况对本协议不时进行调整,并以平台公告或电子邮件等书面形式通知您。修改后的协议于公示或邮件送达时生效。协议条款修改后,您继续使用许可软件的,即视为您已阅读并接受修改后的协议。</div>
<div>本软件许可使用协议《健康油我平台服务协议》(以下称"本协议")由您与中国石油天然气股份有限公司新疆油田分公司行政事务管理处(以下称“新疆油田”)共同签署。</div>
<div>在使用“健康油我”软件(以下称许可软件)之前,请仔细阅读本协议。一旦您下载安装使用许可软件,即表示您同意接受本协议所有条款和条件的约束。如您不同意本协议条款和条件,请勿使用许可软件,并请销毁所有许可软件副本。</div>
<div>健康油我有权根据实际运营的情况对本协议不时进行调整,并以平台公告或电子邮件等书面形式通知您。修改后的协议于公示或邮件送达时生效。协议条款修改后,您继续使用许可软件的,即视为您已阅读并接受修改后的协议。</div>
<div>一、定义</div>
<div>1. 健康新疆APP:是指由新疆油田开发的,供您从应用下载平台(以下称下载平台)下载,并仅限在手机等手持移动终端(以下称移动终端)中安装、使用的软件系统。</div>
<div>2. 健康新疆服务:由新疆油田为您提供的服务。您可以通过许可软件在手持移动终端使用健康新疆服务。</div>
<div>3. 用户:指阅读并同意本协议内容,经过健康新疆在线注册程序成为健康新疆在线各项服务使用者。(以下更多称为“您”)</div>
<div>1. 健康油我APP:是指由新疆油田开发的,供您从应用下载平台(以下称下载平台)下载,并仅限在手机等手持移动终端(以下称移动终端)中安装、使用的软件系统。</div>
<div>2. 健康油我服务:由新疆油田为您提供的服务。您可以通过许可软件在手持移动终端使用健康油我服务。</div>
<div>3. 用户:指阅读并同意本协议内容,经过健康油我在线注册程序成为健康油我在线各项服务使用者。(以下更多称为“您”)</div>
<div>二、服务说明</div>
<div>1. 本平台是一个集健康咨询、应急就医、健康档案、体检服务等功能的综合个人健康管理平台,为确保您能正常地使用平台的各项服务,您应当阅读并遵守本协议。请您务必审慎阅读、充分理解各条款内容,以及开通或使用某项服务的单独协议,并选择接受或不接受。</div>
<div>2. 除非您已阅读并接受本协议所有条款,否则您无权使用平台的各项服务(以下简称"本服务”)。您在平台的登录、查看、发布信息等行为即视为您已阅读并同意本协议的约束,包括接受更新后的本协议条款。当您与平台发生争议时,应以最新的服务协议为准。</div>
@@ -95,8 +95,8 @@
<div>2、 请您在支付费用时,仔细阅读收费服务的相关协议,除协议约定的情况外,否则,平台将不予退费。退费的方式视支付方式的不同而不同。员工应严格依据退费方式及退费周期收回退款。</div>
<div>3、平台可能根据实际需要对收费服务的收费标准、方式进行修改和变更,平台也可能会对部分免费服务变更收费。如果您不同意上述修改、变更或付费内容,则应停止使用该服务。</div>
<div>八、服务暂停、变更与中止条款</div>
<div>1、鉴于移动互联网服务的特殊性,健康新疆平台有权随时变更、中止或终上部分或全部的服务。如变更、中止或终止的服务属于免费服务,平台无需通知您,也无需对您或任何第三方承担任何责任。</div>
<div>2、您理解,因不可抗力、网络状况、通讯线路、用户自身过错等技术原因,或平台需要进行定期或不定期地对所提供的服务进行维护升级、对相关的设备进行检修或者维护,如因此类情况而造成本服务在合理时间内的中断,健康新疆平台无需为此承担任何责任。</div>
<div>1、鉴于移动互联网服务的特殊性,健康油我平台有权随时变更、中止或终上部分或全部的服务。如变更、中止或终止的服务属于免费服务,平台无需通知您,也无需对您或任何第三方承担任何责任。</div>
<div>2、您理解,因不可抗力、网络状况、通讯线路、用户自身过错等技术原因,或平台需要进行定期或不定期地对所提供的服务进行维护升级、对相关的设备进行检修或者维护,如因此类情况而造成本服务在合理时间内的中断,健康油我平台无需为此承担任何责任。</div>
<div>3、 如发生下列任何一种情形,平台有权随时中断或终止向您提供本协议项下的服务而无需对您或任何第三方承担任何责任:</div>
<div>(1)您违反国家有关法律法规或平台规定,侵害他人合法权益的;</div>
<div>(2)您提供的个人资料不真实;</div>
-10
View File
@@ -52,14 +52,4 @@
background: #5473e8 !important;
border-color: #5473e8 !important;
}
.new-modal {
.ant-modal-header {
background-color: #b4c7e7;
font-weight: bold;
}
.jeecg-basic-title {
font-weight: bold;
}
}
</style>
-4
View File
@@ -10,7 +10,6 @@ import { MenuTypeEnum } from '/@/enums/menuEnum';
import { setMixTopClick } from '/@/logics/mitt/mixTopClick';
import { findRouteMenu } from '/@/layouts/default/menu/useLayoutMenu';
import { useUserStore } from '/@/store/modules/user';
import { isShowNewLayoutSpecial } from '/@/utils/getEnv';
export type RouteLocationRawEx = Omit<RouteLocationRaw, 'path'> & { path: PageEnum };
@@ -45,9 +44,6 @@ export function useGo(_router?: Router) {
setMixTopClick({ name: '', path: '' });
}
}
if (isShowNewLayoutSpecial(useUserStore().getSpecialPath)) {
useUserStore().setSpecialDownPath('');
}
isReplace ? replace(opt).catch(handleError) : push(opt).catch(handleError);
} else {
const o = opt as RouteLocationRaw;
+3 -181
View File
@@ -2,19 +2,6 @@
<Layout :class="prefixCls" v-bind="lockEvents">
<LayoutFeatures />
<LayoutHeader fixed v-if="getShowFullHeaderRef" />
<div
class="menu-list-outer"
>
<div class="menu-list-outer-inner">
<template v-for="(item, index) in menuList" :key="`menu-list${index}`">
<div @click="clickItem(item)" class="menu-list-item">
<div class="menu-list-item-d" :class="[choosePath === item.path ? 'selected' : 'no-selected']">
{{ item?.title || '-' }}
</div>
</div>
</template>
</div>
</div>
<Layout :class="[layoutClass]">
<LayoutSideBar v-if="getShowSidebar || getIsMobile" />
<Layout :class="`${prefixCls}-main`">
@@ -29,7 +16,7 @@
</template>
<script lang="ts">
import { computed, defineComponent, unref, watch } from 'vue';
import { computed, defineComponent, unref } from 'vue';
import { Layout } from 'ant-design-vue';
import { createAsyncComponent } from '/@/utils/factory/createAsyncComponent';
@@ -45,12 +32,8 @@
import { useAppInject } from '/@/hooks/web/useAppInject';
import { useUserStore, useUserStoreWithOut } from '/@/store/modules/user';
import { findRouteMenu } from '/@/layouts/default/menu/useLayoutMenu';
import { ref } from 'vue';
import { useRoute, useRouter } from 'vue-router';
import { router } from '/@/router';
import { usePermissionStore, usePermissionStoreWithOut } from '/@/store/modules/permission';
import { getEnvInfo, isShowNewLayout } from '/@/utils/getEnv';
import { useRoute } from 'vue-router';
import { getEnvInfo } from '/@/utils/getEnv';
export default defineComponent({
name: 'DefaultLayout',
@@ -81,162 +64,6 @@
return cls;
});
const menuList = ref<any[]>([]);
const choosePath = ref<string>('');
watch(
() => route?.matched,
(v) => {
useUserStore().setSpecialDownPath('');
if (v && v.length === 2) {
let spPath = v[0]?.name ? '/' + v[0]?.name.replace('Parent', '').replace(/-/g, '/') : '';
useUserStore().setSpecialPath(spPath);
const p = v[1].path;
let m = usePermissionStore().getBackMenuList;
let f = false;
let d = m.find((item) => {
return item.path === spPath;
});
menuList.value = d?.children || [];
menuList.value = menuList.value.filter((item) => {
return item.hideMenu !== true;
});
let arr = menuList.value.map((item) => {
return item.path;
});
const pre = (list, specialDownPath) => {
if (!list || f) return;
for (let i = 0; i < list.length; i++) {
if (arr.includes(list[i].path)) {
specialDownPath = list[i].path;
}
if (list[i].path === p || (list[i]?.paramPath && list[i]?.paramPath === p)) {
useUserStore().setSpecialDownPath(specialDownPath);
f = true;
break;
} else {
if (list[i]?.children) {
pre(list[i].children, specialDownPath);
}
}
}
};
pre(menuList.value, arr[0]);
}
},
{ immediate: true }
);
const menuAllList = usePermissionStoreWithOut().getBackMenuList;
const router = useRouter();
watch(
() => useUserStore().getSpecialPath,
(v: string) => {
if (isShowNewLayout(v)) {
menuList.value = menuAllList
? menuAllList.find((item) => {
return item.path === v;
})?.children || []
: [];
menuList.value = menuList.value.filter((item) => {
return item.hideMenu !== true;
});
} else {
menuList.value = [];
}
// const toPage = (json) => {
// if (!json?.children || json.children.length === 0) {
// router.push(json.path);
// } else {
// toPage(json.children[0]);
// }
// };
//
// if (menuList.value.length > 0) {
// toPage(menuList.value[0]);
// }
//
console.log(menuList.value);
}
);
watch(
() => useUserStore().getSpecialDownPath,
(v: string) => {
choosePath.value = v;
if (!v) {
// useUserStore().setSpecialPath('');
useUserStore().setSpecialDownPath('');
} else {
useUserStore().setSpecialDownPath(v);
}
},
{ immediate: true }
);
function clickItem(item) {
choosePath.value = item.path;
useUserStore().setSpecialDownPath(item.path);
if (!item.children) {
router.push(item.path);
} else {
if (
item.children.filter((it) => {
return !it.hideMenu;
}).length === 0
) {
router.push(item.path);
}
}
}
const flag = ref<boolean>(false);
function preSelected(matched, list) {
if (!list || flag.value) return;
for (let i = 0; i < list.length; i++) {
if (list[i].path === matched) {
flag.value = true;
break;
} else {
if (list[i]?.children) {
preSelected(matched, list[i].children);
}
}
}
}
function getSelected(path) {
flag.value = false;
let matched = route.matched;
if (!matched || matched.length === 0 || !matched[matched.length - 1]?.path) return flag;
for (let i = 0; i < menuList.value.length; i++) {
if (menuList.value[i].path === path) {
if (menuList.value[i]?.children) {
if (flag.value) {
break;
}
preSelected(matched[matched.length - 1]?.path, menuList.value[i]?.children);
} else {
if (matched[matched.length - 1]?.path === menuList.value[i]?.path) {
flag.value = true;
break;
} else {
flag.value = false;
}
}
}
}
return flag.value;
}
function showNL() {
console.log(useUserStore().getSpecialPath);
return isShowNewLayout(useUserStore().getSpecialPath);
}
console.log(showNL());
return {
getShowFullHeaderRef,
getShowSidebar,
@@ -245,13 +72,8 @@
getIsMixSidebar,
layoutClass,
lockEvents,
menuList,
choosePath,
clickItem,
route,
getSelected,
useUserStore,
showNL,
};
},
});
+4 -4
View File
@@ -20,8 +20,6 @@
import { useDesign } from '/@/hooks/web/useDesign';
import { useLocaleStore } from '/@/store/modules/locale';
import { useUserStore } from '/@/store/modules/user';
import { usePermissionStore, usePermissionStoreWithOut } from '/@/store/modules/permission';
import { isShowNewLayout, isYT } from '/@/utils/getEnv';
import { useRouter } from 'vue-router';
export default defineComponent({
@@ -161,14 +159,16 @@
// if (!menus || !menus.length) return null;
return !props.isHorizontal ? (
<SimpleMenu {...menuProps} isSplitMenu={unref(getSplit)} items={menus || []} />
) : (<BasicMenu
) : (
<BasicMenu
{...(menuProps as any)}
isHorizontal={props.isHorizontal}
type={unref(getMenuType)}
showLogo={unref(getIsShowLogo)}
mode={unref(getComputedMenuMode as any)}
items={menus || []}
/>);
/>
);
}
return () => {
@@ -37,7 +37,6 @@
import DragBar from './DragBar.vue';
import { useUserStore, useUserStoreWithOut } from '/@/store/modules/user';
import { getEnvInfo, isShowNewLayout } from '/@/utils/getEnv';
export default defineComponent({
name: 'LayoutSideBar',
@@ -180,5 +179,4 @@
line-height: 36px;
}
}
</style>
-13
View File
@@ -37,19 +37,6 @@ export function isYT() {
return (res.VITE_PLATFORM === 'YT') as boolean;
}
export function isShowNewLayout(v) {
if (getEnvInfo().VITE_PLATFORM !== 'YT') return false;
// const code: string = '/intervene24/index,/information,/archives/index';
const code: string = '*';
return code === '*' || (code.split(',').includes(v) && v);
}
export function isShowNewLayoutSpecial(v) {
if (getEnvInfo().VITE_PLATFORM !== 'YT') return false;
// const code: string = '/intervene24/index,/information,/archives/index';
// return !code.split(',').includes(v) && v;
return false;
}
// 判断是否为空,需过滤0
export function isNull(v) {
if (v != 0 && !v) return '-';
+33 -8
View File
@@ -9,7 +9,7 @@
@cancel="clearData"
:maskClosable="false"
>
<div class="map-search-box">
<div class="map-search-box" v-if="props.isEdit === '0'">
<a-select
v-model:value="intValue"
allow-clear
@@ -42,12 +42,22 @@
import { Position } from '/@/views/consult/resource/components/Map';
import mapKey from '/@/utils/mapKey';
import { message } from 'ant-design-vue';
import {mapCenter} from "/@/utils/mapInfo";
import { mapCenter } from '/@/utils/mapInfo';
let geocoder = ref();
const emit = defineEmits(['getPosition']);
let BasicMap = null;
let SelfMap = null;
const isCLickMap = ref(false);
const props = defineProps({
isEdit: {
type: String,
default: () => '0',
},
title: {
type: String,
default: () => '地图选点',
},
});
let positionRef = ref({
lng: '',
lat: '',
@@ -60,12 +70,12 @@
});
let adr = ref('');
let position: Position = positionRef.value;
const title = '地图选点';
const intValue = ref('');
let placeSearch = ref();
let panelList = ref([]);
//表单赋值
const [registerModal, { closeModal }] = useModalInner(async (data) => {
const [registerModal, { closeModal, setModalProps }] = useModalInner(async (data) => {
setModalProps({ showOkBtn: props.isEdit === '0', showCancelBtn: props.isEdit === '0' });
let { longitude: lng, latitude: lat, address } = data?.record || {};
position.lng = lng;
position.lat = lat;
@@ -82,7 +92,7 @@
version: '2.0', // 指定要加载的 JSAPI 的版本,缺省时默认为 1.4.15
plugins: ['AMap.Geocoder'], // 需要使用的的插件列表,如比例尺'AMap.Scale'等
})
.then((AMap) => {
.then(async (AMap) => {
SelfMap = AMap;
//设置地图容器id
BasicMap = new AMap.Map('container', {
@@ -91,14 +101,29 @@
center: mapCenter, //初始化地图中心点位置
resizeEnable: true,
});
// 注册搜索插件
bindSearch(AMap);
bindEvent();
// 注册坐标转地址
geocoder.value = new AMap.Geocoder({
city: '', //城市设为北京,默认:“全国”
radius: 1000, //范围,默认:500
});
if (props.isEdit === '0') {
// 注册搜索插件
bindSearch(AMap);
bindEvent();
} else {
if (position.lng && position.lat) {
try {
console.log(await lngLatToAddress({ lng: position.lng, lat: position.lat }));
const infoWindow = new AMap.InfoWindow({
anchor: 'top-center',
content: await lngLatToAddress({ lng: position.lng, lat: position.lat }),
});
infoWindow.open(BasicMap, [position.lng, position.lat], 20);
} catch (e) {
console.log(e);
}
}
}
if (position.lng) {
panTo(position);
addMarker(position);
@@ -9,6 +9,7 @@ enum Api {
generate = '/health-consultation/settle/generate/',
add = '/health-consultation/settle/config/add',
edit = '/health-consultation/settle/config/edit',
del = '/health-consultation/settle/config/remove',
}
export const listApi = (params = {}) => defHttp.get({ url: Api.list, params });
@@ -19,3 +20,4 @@ export const generateApi = (id) => defHttp.post({ url: Api.generate + id }, { is
export const addApi = (params = {}) => defHttp.post({ url: Api.add, params });
export const editApi = (params = {}) => defHttp.post({ url: Api.edit, params });
export const detailApi = (params = {}) => defHttp.get({ url: Api.detail + `/${params.id}` });
export const delApi = (params = {}) => defHttp.delete({ url: Api.del + `/${params.id}` });
+16 -2
View File
@@ -14,7 +14,7 @@
</template>
<template v-if="column.dataIndex === 'b'">
<a-button class="list-button" type="link" @click="updateSetting(record)">编辑配置</a-button>
<a-button class="list-button" type="link">删除</a-button>
<a-button class="list-button" type="link" @click="delItem(record)">删除</a-button>
</template>
</template>
</BasicTable>
@@ -59,9 +59,10 @@
import SettlementConsult from '/@/views/consult/settlement/components/settlementConsult.vue';
import AddDrawer from '/@/views/consult/settlement/components/addDrawer.vue';
import { useDrawer } from '/@/components/Drawer';
import { generateApi, listApi } from '/@/views/consult/settlement/settlement.api';
import { delApi, generateApi, listApi } from '/@/views/consult/settlement/settlement.api';
import { message } from 'ant-design-vue';
import { getFileAccessHttpUrlDown } from '/@/utils/common/compUtils';
import { useMessage } from '/@/hooks/web/useMessage';
const pageStatus = ref('settlement'); // 当前页面是哪个 settlement为list页 detail为详情页 month为月明细页 consult为咨询明细页
@@ -70,6 +71,7 @@
const consultId = ref('');
const toConsult = ref('');
const { createConfirm } = useMessage();
const [registerDrawer, { openDrawer }] = useDrawer();
@@ -111,6 +113,18 @@
});
}
function delItem(record: Recordable) {
createConfirm({
iconType: 'warning',
title: '确认操作',
content: '是否删除该结算',
onOk: async () => {
await delApi({ id: record.id });
await reload();
},
});
}
function MonthPage(path, id) {
pageStatus.value = path;
if (path === 'consult') consultId.value = id;
@@ -18,6 +18,7 @@ const api = {
updateSalvageUser: '/health-emergency/api/emergency/order/updateSalvageUser', // 驻场派单保存
stat: '/health-emergency/api/emergency/stat', //数据统计
scheduleRecord: '/health-emergency/api/emergency/schedule/scheduleShow', //年/月值班记录
scheduleRecordNew: '/health-emergency/api/emergency/schedule/scheduleShow/v2', //年/月值班记录
// queryById: '/health-emergency/emergency/emergencySeriousDisease/queryById', // 通过id查询大病就医单
queryById: '/health-emergency/emergency/emergencySeriousDisease/queryById', // 通过id查询大病就医单
dispatchStation: '/health-emergency/emergency/emergencySeriousDisease/dispatchStation', // 大病就医驻场派单
@@ -101,6 +102,9 @@ export const stat = (params) => {
export const scheduleRecordApi = (params) => {
return defHttp.get({ url: api.scheduleRecord, params });
};
export const scheduleRecordNewApi = (params) => {
return defHttp.get({ url: api.scheduleRecordNew, params });
};
export const queryByIdApi = (params) => {
return defHttp.get({ url: api.queryById, params }, { successNeedMessage: false });
@@ -7,7 +7,7 @@
:bordered="isSpecialized"
:readonly="!isSpecialized"
v-model:value="modalText"
placeholder=""
:placeholder="getUserInfo.personType === '5' ? '暂无' : '请输入救助意见'"
:rows="5"
/>
<div style="text-align: center; padding: 10px">
@@ -22,12 +22,16 @@
<script setup lang="ts">
import { ref } from 'vue';
import { salvageOpinionApi, addSalvageOpinionApi } from '/@/views/emergency/communication/components/commApi';
import { useUserStore } from '/@/store/modules/user';
const visible = ref<Boolean>(false);
const confirmLoading = ref<Boolean>(false);
const modalText = ref<String>('');
const pId = ref<String>('');
const isDisabled = ref<Boolean>(true);
const { getUserInfo } = useUserStore();
const handleOk = () => {
confirmLoading.value = true;
addSalvageOpinionApi({ sessionId: pId.value, infoDesc: modalText.value })
@@ -159,7 +159,7 @@
import { ref } from 'vue';
import { Dayjs } from 'dayjs';
import detail from './detail.vue';
import { stat, scheduleRecordApi } from './commApi';
import { stat, scheduleRecordApi, scheduleRecordNewApi } from './commApi';
import forHelpAdv from './forHelpAdv.vue';
import moment from 'moment';
import qs from 'qs';
@@ -246,20 +246,27 @@
year: year,
month: month,
};
scheduleRecordApi(params)
.then((res) => {
if (res.months !== null) {
let result = [];
res.months.forEach((item) => {
item.days.forEach((it) => {
result.push(item.month + '-' + it.day);
// scheduleRecordApi(params)
// .then((res) => {
// if (res.months !== null) {
// let result = [];
// res.months.forEach((item) => {
// item.days.forEach((it) => {
// result.push(item.month + '-' + it.day);
// });
// });
// dayS.value = result;
// }
// })
// .catch((e) => {
// console.log(e);
// });
scheduleRecordNewApi(params).then((res: any) => {
if (res) {
dayS.value = res.map((item) => {
return `${month}-${item}`;
});
});
dayS.value = result;
}
})
.catch((e) => {
console.log(e);
});
};
const nowDate = new Date();
+4 -2
View File
@@ -1,13 +1,15 @@
<template>
<div class="outer">
<!-- 专业人员 -->
<specialized :imProps="imProps" v-if="isSpecialized === '6'" />
<opearate :imProps="imProps" v-if="isSpecialized === '5'" />
<!-- 操作人员 -->
<operate :imProps="imProps" v-if="isSpecialized === '5'" />
</div>
</template>
<script setup lang="ts">
import { ref } from 'vue';
import specialized from './components/specialized.vue';
import opearate from './components/operate.vue';
import operate from './components/operate.vue';
import { userSigAndroidApi } from '/@/views/emergency/communication/components/commApi';
import { getToken } from '/@/utils/auth';
import { useGlobSetting } from '/@/hooks/setting';
@@ -50,7 +50,7 @@
</template>
<!--操作栏-->
<template #action="{ record }">
<TableAction :actions="getTableAction(record)" :drop-down-actions="getDropAction(record)" />
<TableAction :actions="getTableAction(record)" />
</template>
</BasicTable>
<emergency-drawer @register="registerDrawer" />
@@ -68,16 +68,9 @@
import { useDrawer } from '/@/components/Drawer';
import EmergencyDrawer from '/@/views/emergency/emergencyManage/components/emergencyDrawer.vue';
import { useModal } from '/@/components/Modal';
import {
delCenterApi,
exportApi,
listApi,
settingDefaultCenterApi,
updateCenterStatusApi,
} from '/@/views/emergency/emergencyManage/emergencyManage.api';
import { exportApi, listApi, settingDefaultCenterApi, updateCenterStatusApi } from '/@/views/emergency/emergencyManage/emergencyManage.api';
import EmergencyInfoDrawer from '/@/views/emergency/emergencyManage/components/emergencyInfoDrawer.vue';
import { onMounted, ref } from 'vue';
import { queryDepartTreeSync } from '/@/views/system/depart/depart.api';
import ExportUtil from '/@/utils/export/exportUtil.vue';
import EmergencyMedicalModal from '/@/views/emergency/emergencyManage/components/emergencyMedicalModal.vue';
import { useUserStore } from '/@/store/modules/user';
@@ -96,8 +89,6 @@
}
});
function onSelectMedicalOk() {}
function exportInfo() {
const params = getForm().getFieldsValue();
exportApi(params);
@@ -106,69 +97,6 @@
openExportDrawer(true, {});
}
// async function loadRootTreeData() {
// try {
// treeData.value = [];
//
// const fResult = await queryDepartTreeSync({});
// if (!fResult || fResult.length < 0) return;
// const result = await queryDepartTreeSync({ pid: fResult[0].id });
// if (Array.isArray(result)) {
// result.forEach((item: any) => {
// item['preTitle'] = item.title;
// item['key'] = item['orgCode'];
// });
// treeData.value = result;
// }
// } catch {}
// }
//
// loadRootTreeData();
// async function onLoadData(treeNode) {
// try {
// const result = await queryDepartTreeSync({
// pid: treeNode.dataRef.id,
// });
// if (result && result.length == 0) {
// treeNode.dataRef.isLeaf = true;
// } else {
// treeNode.dataRef.children = result
// ? result.map((item: any) => {
// item['pId'] = treeNode.dataRef.id;
// item['preTitle'] = treeNode.dataRef.preTitle + '/' + item.title;
// item['key'] = item['orgCode'];
// return item;
// })
// : [];
//
// preData(
// treeData.value,
// treeNode.dataRef.id,
// result
// ? result.map((item: any) => {
// item['pId'] = treeNode.dataRef.id;
// item['key'] = item['orgCode'];
// return item;
// })
// : []
// );
// }
// } catch (e) {
// console.error(e);
// }
// return Promise.resolve(true);
// }
function preData(data, id, res) {
for (let i = 0; i < data.length; i++) {
if (data[i]?.id === id) {
data[i].children = res;
return;
}
preData(data[i].children, id, res);
}
}
async function changeSwitch(record: Recordable) {
try {
record.loading1 = true;
@@ -231,32 +159,9 @@
},
});
function getDropAction(record: Recordable) {
return [
{
label: '编辑',
onClick: handleEdit.bind(null, record),
},
{
label: '关联医疗点',
onClick: handleMedical.bind(null, record),
},
// {
// label: '删除',
// onClick: handleDel.bind(null, record),
// },
];
}
function handleSuccess() {
reload();
}
function handleMedical(record: Recordable) {
openMedicalModal(true, { record });
}
// function handleDel(record: Recordable) {
// delCenterApi(record, handleSuccess);
// }
function getTableAction(record: Recordable) {
return [
@@ -272,6 +177,10 @@
label: '大屏账号',
onClick: bigScreenUser.bind(null, record),
},
{
label: '编辑',
onClick: handleEdit.bind(null, record),
},
];
}
@@ -47,6 +47,7 @@ export const columns: BasicColumn[] = [
title: '员工位置',
align: 'center',
dataIndex: 'initiatorLongitude',
width: 80,
customRender: ({ record }) => {
// @ts-ignore
const { initiatorLongitude, initiatorLatitude } = record;
@@ -2,6 +2,16 @@
<div>
<!--引用表格-->
<BasicTable @register="registerTable" :rowSelection="rowSelection">
<template #bodyCell="{ column, record }">
<template v-if="column.dataIndex === 'initiatorLongitude'">
<environment-outlined
v-if="record?.initiatorLongitude && record?.initiatorLatitude"
style="color: #1890ff; cursor: pointer"
@click="getEmployeePosition(record)"
/>
<span v-else style="color: red"> 定位超时 </span>
</template>
</template>
<!--操作栏-->
<template #action="{ record }">
<TableAction :actions="getTableAction(record)" />
@@ -12,6 +22,7 @@
<OrderDrawer ref="RefOrderDrawer" />
<detail ref="detailRef" />
<OrderRecord @register="registerModal" />
<Map @register="registerMap" is-edit="1" title="员工位置" />
</div>
</template>
@@ -21,14 +32,15 @@
import { useModal } from '/@/components/Modal';
import { useListPage } from '/@/hooks/system/useListPage';
import OrderDrawer from './components/OrderDrawer.vue';
import { EnvironmentOutlined } from '@ant-design/icons-vue';
import { columns, searchFormSchema, columnsPersonF, columnsPersonS, searchFormSchemaS } from './Order.data';
import { list, deleteOne, batchDelete, getImportUrl, getExportUrl, resEditData, newList } from './Order.api';
import { message } from 'ant-design-vue';
import { list, deleteOne, getImportUrl, getExportUrl, resEditData, newList } from './Order.api';
import { useUserStore } from '/@/store/modules/user';
import detail from '/@/views/emergency/communication/components/detail.vue';
import { router } from '/@/router';
import OrderRecord from '/@/views/emergency/outburst/order/components/OrderRecord.vue';
import Map from '/@/views/consult/resource/components/Map.vue';
//注册model
const [registerModal, { openModal }] = useModal();
@@ -75,6 +87,14 @@
});
const [registerTable, { reload }, { rowSelection, selectedRowKeys }] = tableContext;
const [registerMap, { openModal: openMapModal }] = useModal();
function getEmployeePosition(record: Recordable) {
openMapModal(true, {
record: { ...record, longitude: record.initiatorLongitude, latitude: record.initiatorLatitude, address: '' },
});
}
/**
* 详情
*/