This commit is contained in:
2025-07-08 09:14:22 +08:00
parent aa71fd5c7e
commit 01f3339833
10 changed files with 122 additions and 31 deletions
+21
View File
@@ -0,0 +1,21 @@
FROM nginx
MAINTAINER jeecgos@163.com
VOLUME /tmp
ENV LANG en_US.UTF-8
RUN echo "server { \
#解决Router(mode: 'history')模式下,刷新路由地址不能找到页面的问题 \
location / { \
root /var/www/html/; \
index index.html index.htm; \
if (!-e \$request_filename) { \
rewrite ^(.*)\$ /index.html?s=\$1 last; \
break; \
} \
} \
access_log /var/log/nginx/access.log ; \
} " > /etc/nginx/conf.d/default.conf \
&& mkdir -p /var/www \
&& mkdir -p /var/www/html
ADD dist/ /var/www/html/
EXPOSE 3101
+1 -1
View File
@@ -21,7 +21,7 @@
onMounted(async () => {
try {
if (userStore.getToken && getBaseLogin() === '/centralScreenLogin') {
if (userStore.getToken) {
const { result } = await getEmergencyCenterApi();
if (result?.screenPath) {
router.replace(result?.screenPath);
@@ -52,6 +52,7 @@
showTotal: (total) => `${total}`,
onChange: pageChange,
});
const emit = defineEmits(['tableLoad']);
function pageChange(page, pageS) {
current.value = page;
@@ -74,6 +75,7 @@
async function getRecords() {
try {
tableLoading.value = true;
emit('tableLoad', true);
const { code, result } = await props.api({ ...props.apiParams, pageSize: pageSize.value, pageNo: current.value });
if (code == 200) {
if (props.afterFetch && isFunction(props.afterFetch)) {
@@ -86,9 +88,9 @@
}
} catch (e) {
dataSource.value = [];
tableLoading.value = false;
} finally {
tableLoading.value = false;
emit('tableLoad', false);
}
}
+6 -5
View File
@@ -48,17 +48,18 @@ const router: Router = createRouter({
history: createWebHistory('/'),
routes: [...routes],
});
const xian = ['/home', '/secondScreen', '/transfer'];
const yinchuan = ['/yinChuanHome', '/yinChuanTest', '/transfer'];
router.beforeEach((to, from, next) => {
if (to.path !== '/login' && to.path !== '/home') {
setCurrentPath(to.path);
}
if (to.path == '/login') {
next();
} else {
const flag = getAuthCache('flag3');
const token = getAuthCache(TOKEN_KEY);
if (!flag || !token) {
return next({ path: '/login' });
} else {
next();
}
}
next();
+3 -1
View File
@@ -1,5 +1,6 @@
<template>
<div class="sun-screen-box">
<login-out-button out-url="login" />
<div class="sun-screen-title">
<div class="sun-title-left">2025年06月14日 12:21:21</div>
<div class="sun-title-center">应急就医服务中心</div>
@@ -35,7 +36,7 @@
</div>
</div>
<PhoneDialog ref="phoneDialogRef" :title="phoneDialogTitle" :useForm="true" :setting="setting" :phoneType="phoneType" />
<IndexModal ref="indexModalRef" :title="indexModalTitle" :useForm="true" :column="indexColumn" :firstForm="firstFormOne"> </IndexModal>
<IndexModal ref="indexModalRef" :title="indexModalTitle" :useForm="true" :column="indexColumn" :firstForm="firstFormOne" />
</template>
<script setup lang="ts">
// import threeL from '/@/views/indexSun/threeL.vue';
@@ -52,6 +53,7 @@
import PhoneDialog from '/@/views/components/phoneDialog/phoneDialog.vue';
import { DataType, getSettings } from '/@/utils/settings.ts';
import IndexModal from '/@/views/indexSun/indexModal.vue';
import LoginOutButton from '/@/views/components/loginOutButton.vue';
import router from '/@/router';
import { getAuthCache } from '/@/utils/auth.ts';
//0:处置 1:处理 2:呼入 3:全部
+32 -3
View File
@@ -37,7 +37,7 @@
</div>
</div>
<div class="map">
<div style="flex: 1; overflow: hidden; margin: 0 0 10px">
<div style="flex: 1; overflow: hidden">
<div id="xianmapContainer" class="xianmapContainer"></div>
</div>
</div>
@@ -62,8 +62,8 @@
</div>
</template>
<script setup lang="ts">
import { ref, onMounted } from 'vue';
import { tabList, legendList, infoContent } from '/@/views/indexSun/indexSun.ts';
import { onMounted, ref } from 'vue';
import { infoContent, legendList, tabList } from '/@/views/indexSun/indexSun.ts';
import { message } from 'ant-design-vue';
import { innerLineLight, outerLineOption } from '/@/assets/mapUtils/mapConstant.ts';
import { Map } from '/@/assets/mapUtils/map.ts';
@@ -120,15 +120,18 @@
}
});
});
function setLevel() {
//获取当前地图级别
level.value = Map.map.getZoom();
}
function removeInput() {
formState.value.start = '';
formState.value.end = '';
searchFlag.value = false;
}
function changeTab(item, i: number) {
currentIndex.value = i;
Map.clearActiveHospital();
@@ -150,6 +153,7 @@
getMapData(item.type, { type: item.type });
}
}
function searchRoute(callback: ((this: MediaQueryList, ev: MediaQueryListEvent) => any) | null) {
showRoutePanel.value = false;
panelTitle.value = '';
@@ -197,6 +201,7 @@
}
});
}
async function getMapData(type, params = { type: '' }) {
try {
console.log(type, params, 'asghujis');
@@ -234,6 +239,7 @@
console.warn(e);
}
}
function closeDrivingElement() {
Map.clearNavigationElements();
formState.value.start = '';
@@ -241,20 +247,24 @@
showDrivingPanel.value = false;
emits('clearHospitalList');
}
function handleClcikDetail(res) {
console.log(res);
}
function setTitle({ time, distance }) {
let str = '全程';
str += getTimeStr(time);
str += getKmStr(distance);
panelTitle.value = str;
}
function outClick() {
showRoutePanel.value = false;
}
const currentCityCode = ref('');
function logMapinfo() {
Map.map.getCity(function (info) {
const { citycode } = info;
@@ -264,6 +274,7 @@
}
});
}
function drawMarker(data: any) {
console.log(data);
const { lon, lat } = data;
@@ -283,17 +294,20 @@
flex-direction: column;
align-content: space-between;
position: relative;
.map-box {
flex: 1;
display: flex;
flex-direction: column;
position: relative;
.tab-list {
display: flex;
flex-wrap: wrap;
justify-content: space-around;
font-size: 16px;
letter-spacing: 1px;
.tab {
width: calc(100% / 8);
height: 40px;
@@ -313,6 +327,7 @@
}
}
}
.route-navigation {
--fontColor: #607ddb;
margin: 12px 0;
@@ -445,15 +460,18 @@
}
}
}
.map {
display: flex;
flex: 1;
.xianmapContainer {
flex: 1;
height: calc(100% + 22px);
margin: 10px 0;
}
}
.map-legend {
position: absolute;
bottom: 20px;
@@ -470,6 +488,7 @@
margin: 5px 0;
color: #607ddb;
letter-spacing: 2px;
.legend-img {
width: 20px;
margin-right: 5px;
@@ -477,6 +496,7 @@
}
}
}
.center-footer {
position: absolute;
left: 50%;
@@ -486,17 +506,20 @@
justify-content: center;
margin-bottom: 10px;
gap: 20px;
> :nth-child(1) {
background: url('/@/assets/indexSun/footerBlue.png') no-repeat;
background-size: 100% 100%;
color: #22e8ff;
margin-right: 80px;
}
> :nth-child(2) {
background: url('/@/assets/indexSun/footerGreen.png') no-repeat;
background-size: 100% 100%;
color: #45ffa1;
}
.count-item {
width: 240px;
height: 120px;
@@ -518,6 +541,7 @@
}
}
}
:deep(.modal-box) {
width: 330px;
height: 220px;
@@ -525,19 +549,24 @@
display: flex;
flex-direction: column;
justify-content: space-around;
.modal-item {
display: flex;
justify-content: space-between;
.item-one {
width: 50%;
}
.item-two {
color: #00ccff;
}
}
.modal-btn {
display: flex;
justify-content: center;
.view-btn {
padding: 5px;
width: 60%;
+25 -8
View File
@@ -2,7 +2,7 @@
<Dialog class="index-modal" :openVis="visible" width="60%" :title="dialogTitle" @close="closeDialog" :maskClosable="false">
<template #container>
<div v-if="useForm" class="form-container">
<Form :model="formRecord" :label-width="100" v-bind="formItemLayout">
<Form :model="formRecord" v-bind="formItemLayout">
<slot name="searchFirst"></slot>
<a-form-item v-for="(item, index) in firstForm" :label="item.label" :key="index">
<a-input :placeholder="item.placeholder" v-if="item.type == 'input'" v-model:value="formRecord[item.field]" />
@@ -22,11 +22,17 @@
<slot name="searchSecond"></slot>
</Form>
<div class="form-btn">
<a-button @click="handleClicksearch">搜索</a-button>
<a-button @click="handleClicksearch" style="margin-left: 10px">重置</a-button>
<a-button @click="handleClicksearch" style="border-color: #00ccff">重置</a-button>
<a-button
@click="handleClicksearch"
:loading="loading"
style="margin-left: 10px; background: #00ccff; border-color: #00ccff; color: #ffffff"
>
搜索
</a-button>
</div>
</div>
<BasicTable ref="registerTable" class="table-container" :key="visible" :columns="column" :apiParams="formState" />
<BasicTable @table-load="tableLoad" ref="registerTable" class="table-container" :key="visible" :columns="column" :apiParams="formState" />
</template>
</Dialog>
</template>
@@ -58,6 +64,7 @@
default: () => [],
},
});
const loading = ref<boolean>(false);
const formState = ref();
const dialogTitle = ref('');
const formRecord = ref({
@@ -83,6 +90,10 @@
getField();
});
function tableLoad(b: boolean) {
loading.value = b;
}
function getField() {
let result = {};
props.firstForm.map((item) => {
@@ -114,7 +125,7 @@
background: red !important;
}
.form-container {
margin: 10px 0;
margin: 10px;
display: flex;
justify-content: space-between;
:deep(.ant-form-item-label > label) {
@@ -135,19 +146,25 @@
}
.form-btn {
flex: 1;
text-align: right;
padding-right: 20px;
padding-left: 20px;
:deep(.ant-btn) {
background: #082147;
border: 1px solid #00ccff;
color: #fff;
border-radius: 4px;
}
//margin: 0 15px;
}
}
.table-container {
margin: 0 10px;
}
}
:deep(.ant-form-item-label) {
width: auto !important;
}
:deep(.ant-form-item-control) {
margin-right: 20px !important;
}
</style>
-1
View File
@@ -51,7 +51,6 @@ export function getClassCharts(dx, dy) {
},
interval: 25, // 步长
min: 0, // 起始 - 设置y轴刻度的最小值
max: 100, // 终止 - 设置y轴刻度的最大值
axisLabel: {
color: '#65C6E7',
formatter: function (value, index) {
+23 -3
View File
@@ -31,14 +31,14 @@
@click="handleClick(item)"
>
<span>{{ item?.name }}</span>
<span>{{ item?.value }}</span>
<span :style="{ color: index > 1 ? '' : '#22e8ff' }">{{ item?.value || 0 }}</span>
</div>
</div>
</div>
</div>
</template>
</template>6+
<script setup lang="ts">
import { computed, ref, watch } from 'vue';
import { ref, watch } from 'vue';
import { useStatistics } from '/@/components/body-d-left/bodyLeftHooks.ts';
import { statisticsNewApi } from '/@/views/indexSun/indexSun.api.ts';
import { caching, useSession } from '/@/hooks/autoRefresh/caching.ts';
@@ -67,6 +67,7 @@
getOneLeftInfo();
}
);
async function getOneLeftInfo() {
const params = {
condition: chooseType.value,
@@ -81,6 +82,7 @@
setValue(res.result);
});
}
function setValue(result) {
let { alerdyreceive = '', totalacceptance = '' } = result;
setStatistics(result);
@@ -89,10 +91,12 @@
useDetail.setTotalacceptance(totalacceptance);
}
}
function clickChooseType(index) {
if (chooseType.value === index) return;
chooseType.value = index;
}
function handleClick(item) {
emit('handleClick', item);
}
@@ -100,6 +104,7 @@
<style lang="less" scoped>
.one-l-box {
background: rgba(8, 75, 100, 0.2);
.title {
height: 40px;
border-radius: 14px 14px 0 0;
@@ -111,14 +116,17 @@
padding: 0 20px;
background: linear-gradient(to right, rgba(8, 75, 100, 0.5) 0%, rgba(255, 255, 255, 0) 100%);
}
.content {
height: calc(100% - 40px);
display: flex;
flex-direction: column;
.type-time {
padding-top: 10px;
margin-right: 10px;
font-size: 14px;
> div {
cursor: pointer;
padding: 3px 15px;
@@ -126,10 +134,12 @@
display: flex;
align-items: center;
}
.selected {
color: #00ccff;
background: rgba(0, 204, 255, 0.2);
position: relative;
&:before {
content: '';
position: absolute;
@@ -151,6 +161,7 @@
border-bottom: 3px solid #00ccff; /* 顶部线条 */
border-right: 3px solid #00ccff; /* 左侧线条 */
}
> div {
position: absolute;
width: 100%;
@@ -181,10 +192,12 @@
}
}
}
.no-selected {
color: #b6b6b6;
background: rgba(26, 69, 126, 0.2);
position: relative;
&:before {
content: '';
position: absolute;
@@ -206,6 +219,7 @@
border-bottom: 3px solid #1a457e; /* 顶部线条 */
border-right: 3px solid #1a457e; /* 左侧线条 */
}
> div {
position: absolute;
width: 100%;
@@ -236,6 +250,7 @@
}
}
}
.triangle {
position: absolute;
left: 50%;
@@ -248,6 +263,7 @@
border-bottom: 6px solid #00ccff; /* 底部为黑色,形成三角形 */
}
}
.server-container {
color: #fff;
flex: 1;
@@ -261,18 +277,22 @@
letter-spacing: 2px;
margin-top: 10px;
padding-bottom: 10px;
.spin {
position: absolute;
left: 50%;
top: 50%;
}
}
.server-item {
// font-size: 16px;
padding: 3px 3% 3px 5%;
&.hasCursor {
cursor: pointer;
}
display: flex;
justify-content: space-between;
}
+2 -2
View File
@@ -59,8 +59,8 @@
function initChart() {
myChart.value = echarts.init(newChart.value!);
const dx = ['120', '应急就医', '急救联动'];
const dy = [46, 39, 18];
const dx = ['120', '应急就医'];
const dy = [46, 39];
let option = getClassCharts(dx, dy);
myChart.value.setOption(option);
window.addEventListener('resize', () => {