Merge remote-tracking branch 'origin/dev' into dev

# Conflicts:
#	src/views/BI/components/rightico.vue
pull/3/head
fangjiakai 2024-02-28 08:42:37 +08:00
commit abd9830dfd
21 changed files with 178 additions and 150 deletions

2
.env
View File

@ -1,7 +1,5 @@
VITE_BASE_URL=http://192.168.0.42:8099/
VITE_PROXY=/api/
VITE_PROXY_QAAQ=/qaaq_api/
VITE_QAAQ_URL=https://gateway.qhdsafety.com/
VITE_FILE_URL=https://file.zcloudchina.com/YTHFile
VITE_TEMPLATE_URL=https://qaaq.qhdsafety.com/file/
VITE_ON_LINE_WEB_SOCKET_URL=wss://qaaq.qhdsafety.com/zxwebsocket/

View File

@ -4,7 +4,7 @@
<meta charset="UTF-8" />
<link rel="icon" type="image/svg+xml" href="/vite.svg" />
<meta name="viewport" content="width=device-width, initial-scale=1.0, maximum-scale=1.0, minimum-scale=1.0, user-scalable=no" />
<title>管理平台</title>
<title>危化安全生产管理平台</title>
</head>
<body>

Binary file not shown.

After

Width:  |  Height:  |  Size: 3.3 KiB

View File

@ -1,7 +1,7 @@
<template>
<div class="header">
<div class="left">
<div class="logo">管理平台</div>
<div class="logo" />
<div class="menu">
<ul>
<li @click="router.push({ path: '/large_screen_data_display' })">
@ -185,14 +185,11 @@ fnSpecialOperationsWarnAmount();
width: max-content;
.logo {
background-image: url("/src/assets/images/public/logo.png");
width: 500px;
height: var(--el-header-height);
line-height: var(--el-header-height);
padding-left: 20px;
color: #fff;
font-size: 20px;
font-weight: 700;
font-family: cursive;
height: 69px;
background-repeat: no-repeat;
background-size: 100% 100%;
}
.menu {
@ -221,6 +218,7 @@ fnSpecialOperationsWarnAmount();
background-size: 100% 100%;
border: 1px solid #2870bb;
}
.title {
padding-left: 3px;
font-size: 14px;

View File

@ -130,4 +130,3 @@ export const setCustomInsuranceCoverageSave = (params) =>
post("/hiddenstandardCustom/saveBaoBaoType", params); // 清单管理设置包保责任类型提交
export const getCustomCheckListOtherHiddenList = (params) =>
post("/customHidden/getCheckHidden", params); // 隐患清单检查情况检查记录查看其它隐患列表
export const getCorpinfo = (params) => post("/corpinfo/goEdit", params); // 获取企业信息

View File

@ -9,25 +9,37 @@
<div class="option">
<img :src="item.check ? item.imgSelect : item.img" alt="" />
<div class="title">{{ item.title }}</div>
</div>
<div :class="['child_container', { active: item.check }]">
<div :class="['child_options', item.type]">
<div
v-for="(item1, index1) in item.list"
:key="item1.title"
class="child_option"
@click.stop="fnBottomChildOptionsListChange(index, item1, index1)"
<div class="child_container">
<transition
enter-active-class="animate__animated animate__bounceIn"
leave-active-class="animate__animated animate__bounceOut"
mode="out-in"
>
<img :src="item1.check ? item1.imgSelect : item1.img" alt="" />
<div class="tit" :class="item1.check ? 'active' : ''">
{{ item1.title }}
<div
v-show="item.check"
:class="['child_options', item.type, { active: item.check }]"
>
<div
v-for="(item1, index1) in item.list"
:key="item1.title"
class="child_option"
@click.stop="
fnBottomChildOptionsListChange(index, item1, index1)
"
>
<img :src="item1.check ? item1.imgSelect : item1.img" alt="" />
<div class="tit" :class="item1.check ? 'active' : ''">
{{ item1.title }}
</div>
</div>
</div>
</div>
</transition>
</div>
</div>
</div>
</div>
</template>
<script setup>
import { reactive, markRaw } from "vue";
import Personnel from "@/views/BI/components/personnel.vue";
@ -346,27 +358,20 @@ const data = reactive({
bottomOptionsList,
});
const fnBottomOptionsListChange = (item, index) => {
const currentItem = data.bottomOptionsList[index];
// ai
if (index === 4) {
data.bottomOptionsList[index].action(
!data.bottomOptionsList[index].check,
item.type
);
if (currentItem.action) currentItem.action(!currentItem.check, item.type);
}
for (let i = 0; i < data.bottomOptionsList.length; i++) {
if (index === i) {
data.bottomOptionsList[index].check =
!data.bottomOptionsList[index].check;
currentItem.check = !currentItem.check;
continue;
}
data.bottomOptionsList[i].check = false;
}
leftCurrentComponent.value = data.bottomOptionsList[index].check
? item.components[0]
: "";
rightCurrentComponent.value = data.bottomOptionsList[index].check
? item.components[1]
: "";
leftCurrentComponent.value = currentItem.check ? item.components[0] : "";
rightCurrentComponent.value = currentItem.check ? item.components[1] : "";
rightOption.value = index !== 4;
};
const fnBottomChildOptionsListChange = (index, item1, index1) => {
@ -402,6 +407,7 @@ const fnBottomChildOptionsListChange = (index, item1, index1) => {
}
};
</script>
<style scoped lang="scss">
.container {
width: 100%;
@ -445,22 +451,13 @@ const fnBottomChildOptionsListChange = (index, item1, index1) => {
}
.child_container {
position: relative;
width: 80px;
height: 95px;
left: 0;
top: -95px;
display: none;
&.active {
display: block;
}
position: absolute;
left: 50%;
top: -100px;
transform: translateX(-50%);
.child_options {
position: absolute;
left: 50%;
top: -120px;
transform: translateX(-50%);
position: relative;
background-image: linear-gradient(
to right,
rgba(0, 0, 0, 0) 0%,
@ -477,8 +474,11 @@ const fnBottomChildOptionsListChange = (index, item1, index1) => {
1;
border-left: none;
border-right: none;
display: flex;
animation: 0.5s all;
display: none;
&.active {
display: flex;
}
.child_option {
text-align: center;
@ -495,7 +495,7 @@ const fnBottomChildOptionsListChange = (index, item1, index1) => {
}
&.workSafely {
left: 100%;
left: 20%;
}
}
}

View File

@ -168,7 +168,6 @@ const tabIndex = ref(0);
rgba(0, 0, 0, 0),
rgba(0, 0, 0, 0.8)
);
border-radius: 10px;
border: 1px solid;
border-image: linear-gradient(
to bottom,
@ -223,7 +222,6 @@ const tabIndex = ref(0);
rgba(0, 0, 0, 0),
rgba(0, 0, 0, 0.8)
);
border-radius: 10px;
border: 1px solid;
border-image: linear-gradient(
to bottom,
@ -283,7 +281,6 @@ const tabIndex = ref(0);
rgba(0, 0, 0, 0),
rgba(0, 0, 0, 0.8)
);
border-radius: 10px;
border: 1px solid;
border-image: linear-gradient(
to bottom,
@ -327,9 +324,9 @@ const tabIndex = ref(0);
.td {
flex: 1;
text-align: left;
font-size: 14px;
font-size: 12px;
color: #fff;
padding: 10px 10px;
padding: 6px 10px;
&:nth-child(1) {
flex-basis: 25%;
}

View File

@ -109,7 +109,6 @@ onMounted(() => {
rgba(0, 0, 0, 0),
rgba(0, 0, 0, 0.8)
);
border-radius: 10px;
border: 1px solid;
border-image: linear-gradient(
to bottom,
@ -174,7 +173,6 @@ onMounted(() => {
rgba(0, 0, 0, 0),
rgba(0, 0, 0, 0.8)
);
border-radius: 10px;
border: 1px solid;
border-image: linear-gradient(
to bottom,
@ -200,7 +198,6 @@ onMounted(() => {
rgba(0, 0, 0, 0),
rgba(0, 0, 0, 0.8)
);
border-radius: 10px;
border: 1px solid;
border-image: linear-gradient(
to bottom,
@ -224,9 +221,9 @@ onMounted(() => {
.td {
flex: 1;
text-align: center;
font-size: 14px;
font-size: 12px;
color: #fff;
padding: 10px 10px;
padding: 6px 10px;
&:nth-child(1) {
flex-basis: 20px;

View File

@ -23,12 +23,11 @@
v-for="(item, index) in data.block2OptionsList"
:key="index"
class="list"
@click="fnAlarmTypeClick(item)"
>
<div @click="fnAlarmTypeClick(item)">
<div class="name">{{ item.label }}</div>
<div class="num">
<count-up :end-val="item.total"></count-up>
</div>
<div class="name">{{ item.label }}</div>
<div class="num">
<count-up :end-val="item.total"></count-up>
</div>
</div>
</div>
@ -214,7 +213,6 @@ getPositionData();
rgba(0, 0, 0, 0),
rgba(0, 0, 0, 0.8)
);
border-radius: 10px;
border: 1px solid;
border-image: linear-gradient(
to bottom,
@ -224,7 +222,7 @@ getPositionData();
1;
border-top: none;
display: flex;
justify-content: space-around;
padding: 20px 0;
text-align: center;
@ -269,7 +267,6 @@ getPositionData();
rgba(0, 0, 0, 0),
rgba(0, 0, 0, 0.8)
);
border-radius: 10px;
border: 1px solid;
border-image: linear-gradient(
to bottom,
@ -313,7 +310,6 @@ getPositionData();
rgba(0, 0, 0, 0),
rgba(0, 0, 0, 0.8)
);
border-radius: 10px;
border: 1px solid;
border-image: linear-gradient(
to bottom,
@ -357,9 +353,9 @@ getPositionData();
.td {
flex: 1;
text-align: left;
font-size: 14px;
font-size: 12px;
color: #fff;
padding: 10px 10px;
padding: 6px 10px;
&:nth-child(1) {
flex-basis: 30%;
}

View File

@ -17,8 +17,17 @@
<script setup>
import { reactive } from "vue";
import { flyTo, reduction } from "../js/map";
import { useFullscreen } from "@vueuse/core";
import { useFullscreen,useVModel } from "@vueuse/core";
const props = defineProps({
isPureMap: {
type: Boolean,
required: true,
default: false,
},
});
const emits = defineEmits(["update:isPureMap"]);
const isPureMap = useVModel(props, "isPureMap", emits);
const { isFullscreen, toggle } = useFullscreen();
const data = reactive({
rightOptionsList: [
@ -46,23 +55,18 @@ const data = reactive({
label: "返回中心点",
action: flyTo,
},
{
img: new URL("/src/assets/images/map/rico3.png", import.meta.url).href,
checkImg: new URL("/src/assets/images/map/rico3_on.png", import.meta.url)
.href,
check: false,
label: "切换视角",
},
{
img: new URL("/src/assets/images/map/rico4.png", import.meta.url).href,
checkImg: new URL("/src/assets/images/map/rico4_on.png", import.meta.url)
.href,
check: false,
label: "纯净地图",
action: () => (isPureMap.value = !isPureMap.value),
},
],
});
</script>
<style scoped lang="scss">
.right_options {
width: 40px;

View File

@ -144,7 +144,6 @@ getCameraAlarmTypeData();
rgba(0, 0, 0, 0),
rgba(0, 0, 0, 0.8)
);
border-radius: 10px;
border: 1px solid;
border-image: linear-gradient(
to bottom,
@ -199,7 +198,6 @@ getCameraAlarmTypeData();
rgba(0, 0, 0, 0),
rgba(0, 0, 0, 0.8)
);
border-radius: 10px;
border: 1px solid;
border-image: linear-gradient(
to bottom,
@ -225,7 +223,6 @@ getCameraAlarmTypeData();
rgba(0, 0, 0, 0),
rgba(0, 0, 0, 0.8)
);
border-radius: 10px;
border: 1px solid;
border-image: linear-gradient(
to bottom,

View File

@ -126,7 +126,6 @@ const formatWork = (work) => {
rgba(0, 0, 0, 0),
rgba(0, 0, 0, 0.8)
);
border-radius: 10px;
border: 1px solid;
border-image: linear-gradient(
to bottom,
@ -181,7 +180,6 @@ const formatWork = (work) => {
rgba(0, 0, 0, 0),
rgba(0, 0, 0, 0.8)
);
border-radius: 10px;
border: 1px solid;
border-image: linear-gradient(
to bottom,
@ -207,7 +205,6 @@ const formatWork = (work) => {
rgba(0, 0, 0, 0),
rgba(0, 0, 0, 0.8)
);
border-radius: 10px;
border: 1px solid;
border-image: linear-gradient(
to bottom,
@ -230,10 +227,10 @@ const formatWork = (work) => {
.td {
flex: 1;
text-align: center;
font-size: 14px;
text-align: left;
font-size: 12px;
color: #fff;
padding: 10px 10px;
padding: 6px 10px;
&:nth-child(1) {
flex-basis: 20px;

View File

@ -13,37 +13,62 @@
<div class="title" />
</div>
</transition>
<div v-if="leftCurrentComponent" class="left_container">
<transition
enter-active-class="animate__animated animate__fadeInLeft"
leave-active-class="animate__animated animate__fadeOutLeft"
mode="out-in"
<transition
enter-active-class="animate__animated animate__fadeInLeft"
leave-active-class="animate__animated animate__fadeOutLeft"
mode="out-in"
>
<div
v-if="leftCurrentComponent && !isPureMap"
:key="Math.random()"
class="left_container"
>
<component :is="leftCurrentComponent" />
</div>
</transition>
<div class="mid-external-container">
<transition
enter-active-class="animate__animated animate__fadeInDown"
leave-active-class="animate__animated animate__fadeOutDown"
mode="out-in"
>
<div v-show="!isPureMap" class="mid-container">
<bottom-options
v-model:left-current-component="leftCurrentComponent"
v-model:right-current-component="rightCurrentComponent"
v-model:right-option="right_option"
v-model:is-historical-trajectory="isHistoricalTrajectory"
/>
</div>
</transition>
</div>
<div class="mid-container">
<bottom-options
v-model:left-current-component="leftCurrentComponent"
v-model:right-current-component="rightCurrentComponent"
v-model:right-option="right_option"
v-model:is-historical-trajectory="isHistoricalTrajectory"
/>
</div>
<transition
enter-active-class="animate__animated animate__fadeInRight"
leave-active-class="animate__animated animate__fadeOutRight"
mode="out-in"
>
<div v-if="rightCurrentComponent" class="right_container">
<div
v-if="rightCurrentComponent && !isPureMap"
:key="Math.random()"
class="right_container"
>
<component :is="rightCurrentComponent" />
</div>
</transition>
<div v-show="right_option" class="right_ico">
<right-ico></right-ico>
<right-ico v-model:is-pure-map="isPureMap" />
</div>
<historical-trajectory-options v-if="isHistoricalTrajectory" />
<transition
enter-active-class="animate__animated animate__fadeInDown"
leave-active-class="animate__animated animate__fadeOutDown"
mode="out-in"
>
<historical-trajectory-options
v-if="isHistoricalTrajectory && !isPureMap"
/>
</transition>
</div>
</template>
@ -64,9 +89,9 @@ const transitionKey = ref(0);
const leftCurrentComponent = ref("");
const rightCurrentComponent = ref("");
const isHistoricalTrajectory = ref(false);
const isPureMap = ref(false);
const userStore = useUserStore();
const CORPINFO_ID = userStore.getUserInfo.CORPINFO_ID;
onMounted(async () => {
autofit.init({
dh: document.querySelector(".map_bg").offsetHeight,
@ -85,6 +110,7 @@ onBeforeUnmount(() => {
autofit.off();
});
</script>
<style scoped lang="scss">
#bi_container {
width: 100%;
@ -161,6 +187,7 @@ onBeforeUnmount(() => {
left: 20px;
top: 100px;
}
.right_container {
width: 435px;
position: absolute;
@ -168,15 +195,18 @@ onBeforeUnmount(() => {
top: 100px;
}
.mid-container {
width: 934px;
height: 88px;
background-image: url("/src/assets/images/map/bottombg.png");
background-repeat: no-repeat;
position: fixed;
.mid-external-container {
position: absolute;
bottom: 0;
left: 50%;
transform: translateX(-50%);
.mid-container {
width: 934px;
height: 88px;
background-image: url("/src/assets/images/map/bottombg.png");
background-repeat: no-repeat;
}
}
.right_ico {

View File

@ -125,7 +125,7 @@ function echarts2(id, data) {
type: "bar",
barWidth: 20,
tooltip: {
show: false,
show: true,
},
itemStyle: {
color: "#1492FF",

View File

@ -185,7 +185,6 @@
<el-table-column
v-if="data.WHETHER_HAZARDS === 1"
label="是否包保责任人任务"
width="90"
>
<template #default="{ row }">
<span v-if="row.BAO_BAO_TYPE !== '1'"> </span>
@ -234,13 +233,11 @@ import {
layoutFnGetInventoryType,
layoutFnGetTroubleshootingCycle,
} from "@/assets/js/data_dictionary.js";
import {
getCorpinfo,
getRiskStandardStatusList,
} from "@/request/hazard_investigation.js";
import { getRiskStandardStatusList } from "@/request/hazard_investigation.js";
import { useRouter } from "vue-router";
import dayjs from "dayjs";
import { reactive } from "vue";
import { getEnterpriseInfo } from "@/request/enterprise_management.js";
const data = reactive({
WHETHER_HAZARDS: "",
@ -251,11 +248,11 @@ const { list, pagination, searchForm, fnGetData, fnResetPagination } =
const troubleshootingCycleList = await layoutFnGetTroubleshootingCycle();
const inventoryLevelList = await layoutFnGetInventoryLevel();
const inventoryTypeList = await layoutFnGetInventoryType();
const fnGetCorpinfo = async () => {
const resData = await getCorpinfo();
const fnGetCorpInfo = async () => {
const resData = await getEnterpriseInfo();
data.WHETHER_HAZARDS = resData.pd.WHETHER_HAZARDS;
};
fnGetCorpinfo();
fnGetCorpInfo();
const fnGetDataTransfer = () => {
fnGetData({
DEPTIDS: searchForm.value.DEPTIDS?.join(","),

View File

@ -197,7 +197,6 @@ import {
layoutFnGetTroubleshootingType,
} from "@/assets/js/data_dictionary.js";
import {
getCorpinfo,
getDeleteCustomList,
getDeleteInventoryManagementList,
setCustomBatchDelete,
@ -207,6 +206,7 @@ import {
} from "@/request/hazard_investigation.js";
import { useRouter } from "vue-router";
import { reactive } from "vue";
import { getEnterpriseInfo } from "@/request/enterprise_management.js";
const tabName = defineProps({
name: {
@ -228,11 +228,11 @@ const buttonJurisdiction = await useButtonJurisdiction("stoplistmanager");
const inventoryTypeList = await layoutFnGetInventoryType();
const troubleshootingTypeList = await layoutFnGetTroubleshootingType();
const inventoryLevelList = await layoutFnGetInventoryLevel();
const fnGetCorpinfo = async () => {
const resData = await getCorpinfo();
const fnGetCorpInfo = async () => {
const resData = await getEnterpriseInfo();
data.WHETHER_HAZARDS = resData.pd.WHETHER_HAZARDS;
};
fnGetCorpinfo();
fnGetCorpInfo();
const fnGetDataTransfer = () => {
fnGetData({
DEPTIDS: searchForm.value.DEPTIDS?.join(","),

View File

@ -346,7 +346,6 @@ import {
} from "@/assets/js/data_dictionary.js";
import { useUserStore } from "@/pinia/user.js";
import {
getCorpinfo,
getCustomList,
getInventoryManagementList,
getInventoryManagementRouteView,
@ -364,6 +363,7 @@ import ListQrCode from "./list_qr_code.vue";
import InspectionRoute from "./inspection_route.vue";
import { useRouter } from "vue-router";
import ImportCustom from "./import_custom.vue";
import { getEnterpriseInfo } from "@/request/enterprise_management.js";
const tabName = defineProps({
name: {
@ -415,11 +415,11 @@ const data = reactive({
},
WHETHER_HAZARDS: "",
});
const fnGetCorpinfo = async () => {
const resData = await getCorpinfo();
const fnGetCorpInfo = async () => {
const resData = await getEnterpriseInfo();
data.WHETHER_HAZARDS = resData.pd.WHETHER_HAZARDS;
};
fnGetCorpinfo();
fnGetCorpInfo();
const fnGetDataTransfer = () => {
fnGetData({
DEPTIDS: searchForm.value.DEPTIDS?.join(","),

View File

@ -1,7 +1,13 @@
<template>
<div class="situation">
<div class="title">双重预防建设情况</div>
<div class="map"></div>
<div class="carousel">
<el-carousel arrow="always">
<el-carousel-item v-for="item in fourImgs" :key="item.IMGFILES_ID">
<img :src="item.url" alt="" />
</el-carousel-item>
</el-carousel>
</div>
<div class="statistics">
<div class="item">
<div>
@ -43,6 +49,8 @@
import { ref } from "vue";
import { getHiddenCount } from "@/request/large_screen_data_display.js";
import CountTo from "vue-countup-v3";
import { getEnterpriseInfo } from "@/request/enterprise_management.js";
import { addingPrefixToFile } from "@/assets/js/utils.js";
const info = ref({
all: 0,
@ -50,20 +58,23 @@ const info = ref({
yzg: 0,
yys: 0,
});
const fourImgs = ref([]);
const fnGetData = async () => {
const resData = await getHiddenCount();
for (let i = 0; i < resData.all.length; i++) {
info.value.all += Number(resData.all[i]);
const hiddenCountData = await getHiddenCount();
for (let i = 0; i < hiddenCountData.all.length; i++) {
info.value.all += Number(hiddenCountData.all[i]);
}
for (let i = 0; i < resData.wzg.length; i++) {
info.value.wzg += Number(resData.wzg[i]);
for (let i = 0; i < hiddenCountData.wzg.length; i++) {
info.value.wzg += Number(hiddenCountData.wzg[i]);
}
for (let i = 0; i < resData.yzg.length; i++) {
info.value.yzg += Number(resData.yzg[i]);
for (let i = 0; i < hiddenCountData.yzg.length; i++) {
info.value.yzg += Number(hiddenCountData.yzg[i]);
}
for (let i = 0; i < resData.yys.length; i++) {
info.value.yys += Number(resData.yys[i]);
for (let i = 0; i < hiddenCountData.yys.length; i++) {
info.value.yys += Number(hiddenCountData.yys[i]);
}
const enterpriseInfoData = await getEnterpriseInfo();
fourImgs.value = addingPrefixToFile(enterpriseInfoData.fourImgs);
};
fnGetData();
</script>
@ -88,8 +99,21 @@ fnGetData();
left: 0;
}
.map {
.carousel {
flex: 1;
margin: 20px;
img {
width: 100%;
height: 100%;
}
:deep {
.el-carousel {
height: 100%;
.el-carousel__container {
height: 100%;
}
}
}
}
.statistics {

View File

@ -1,7 +1,7 @@
<template>
<div class="login">
<div class="main">
<div class="title">管理平台</div>
<div class="title">危化安全生产管理平台</div>
<div class="form">
<el-form
ref="formRef"

View File

@ -61,7 +61,7 @@
{{ serialNumber(pagination, $index) }}
</template>
</el-table-column>
<el-table-column prop="CREATOR" label="添加人" />
<el-table-column prop="CREATOR_NAME" label="添加人" />
<el-table-column label="单位名称">
<template #default="{ row }">
{{

View File

@ -66,12 +66,6 @@ export default ({ mode }) => {
ws: true,
rewrite: (path) => path.replace(/^\/api/, ""),
},
[loadEnv(mode, process.cwd()).VITE_PROXY_QAAQ]: {
target: loadEnv(mode, process.cwd()).VITE_QAAQ_URL,
changeOrigin: true,
ws: true,
rewrite: (path) => path.replace(/^\/qaaq_api/, ""),
},
},
},
resolve: {