版本同步

main
liujun 2025-04-09 14:12:26 +08:00
parent 5c6c851b3d
commit c643296f27
350 changed files with 21170 additions and 3224 deletions

View File

@ -1,8 +1,7 @@
VITE_BASE=/
VITE_BASE_URL=http://192.168.0.79:8095/
VITE_BASE_URL=http://192.168.0.138:8199/
#websocket t掉线
VITE_ON_LINE_WEB_SOCKET_URL=ws://192.168.0.79:8869
VITE ON LINE WEB SOCKET URL=Ws://192.168.0.138:8869
#websocket 在线学习
VITE_LEARNING_WEB_SOCKET_URL=ws://192.168.0.79:8899
VITE_LEARNING_WEB_SOCKET_URL=Ws://192.168.0.138:8899

View File

@ -1,12 +1,29 @@
#危化线上
VITE_BASE=/
VITE_BASE_URL=http://192.168.0.31:8095/integrated_whb/
#VITE_BASE_URL=http://47.92.102.56:8080/integrated_whb/
# VITE_BASE_URL=https://qaaqwh.qhdsafety.com/integrated_whb/
VITE_BASE_URL=http://47.92.102.56:8080/integrated_whb/
#websocket t掉线
VITE_ON_LINE_WEB_SOCKET_URL=ws://47.92.102.56:8869
# VITE_ON_LINE_WEB_SOCKET_URL=wss://qaaqwh.qhdsafety.com/disconnected/
#websocket 在线学习
VITE_LEARNING_WEB_SOCKET_URL=ws://47.92.102.56:8899
#测试
#VITE_BASE=/dist
#VITE_BASE_URL=http://192.168.20.240:8500/integrated_whb/
websocket t掉线
#VITE_ON_LINE_WEB_SOCKET_URL=ws://192.168.20.240:8869
#websocket 在线学习
#VITE_LEARNING_WEB_SOCKET_URL=ws://192.168.20.240:8899
#盘锦
#VITE_BASE=/dist
#VITE_BASE_URL=http://203.148.86.96:8500/integrated_whb/
#websocket t掉线
#VITE_ON_LINE_WEB_SOCKET_URL=ws://203.148.86.96:8869
#websocket 在线学习
#VITE_LEARNING_WEB_SOCKET_URL=ws://203.148.86.96:8899
#VITE_BASE_URL=https://qaaqwh.qhdsafety.com/integrated_whb/
# VITE_ON_LINE_WEB_SOCKET_URL=wss://qaaqwh.qhdsafety.com/disconnected/
# VITE_LEARNING_WEB_SOCKET_URL=wss://qaaqwh.qhdsafety.com/onlinelearning/

4
env.d.ts vendored
View File

@ -5,10 +5,6 @@ interface ImportMetaEnv {
readonly VITE_TEMPLATE_URL: string
readonly VITE_BASE: string
readonly VITE_BASE_URL: string
/**
* websocket t线
*/
readonly VITE_ON_LINE_WEB_SOCKET_URL: string
/**
* websocket 线
*/

3409
package-lock.json generated

File diff suppressed because it is too large Load Diff

View File

@ -18,6 +18,7 @@
"animate.css": "^4.1.1",
"autofit.js": "^3.0.7",
"axios": "^1.6.3",
"crypto-js": "^4.2.0",
"dayjs": "^1.11.10",
"echarts": "^5.4.3",
"element-plus": "^2.6.1",
@ -25,6 +26,7 @@
"jspdf": "^2.5.1",
"lodash-es": "^4.17.21",
"mitt": "^3.0.1",
"mp4box": "^0.5.2",
"nanoid": "^5.0.4",
"normalize.css": "^8.0.1",
"pako": "^2.1.0",
@ -67,7 +69,7 @@
"unplugin-vue-components": "^0.22.12",
"vite": "^4.5.1",
"vite-plugin-enhance-log": "^0.5.2",
"vite-plugin-env-parse": "^1.0.10",
"vite-plugin-env-parse": "^1.0.12",
"vite-plugin-eslint": "^1.8.1",
"vite-plugin-remove-console": "^2.2.0",
"vue-eslint-parser": "^9.3.2"

View File

@ -407,7 +407,7 @@ var CustomCesium;
}
},
minimumLevel: 3,
maximumLevel: 19
maximumLevel: 18
});
static gaode_mapResources = new Cesium.UrlTemplateImageryProvider({
url: "https://webst02.is.autonavi.com/appmaptile?style=6&x={x}&y={y}&z={z}",
@ -425,7 +425,7 @@ var CustomCesium;
url: r,
fileExtension: "png",
minimumLevel: 0,
maximumLevel: 19,
maximumLevel: 18,
tilingScheme: new Cesium.WebMercatorTilingScheme
});
this.init(e, t, 50)
@ -684,14 +684,13 @@ var CustomCesium;
class d {
constructor(e, t, i = 0) {
this.icy = e,
this.icy = e,this.ground_arr = [], this.buildingArr = [],
this.tileset = e.viewer.scene.primitives.add(new Cesium.Cesium3DTileset({
url: t,
show: !0,
})),
this.tileset.readyPromise.then((e => {
this.tileset = e,
this.setHeight(i)
this.tileset = e, this.setHeight(i)
}
)),
this.polygon = []
@ -700,63 +699,59 @@ var CustomCesium;
show(e) {
this.tileset.show = e
}
cancelClipping() {//取消裁剪
this.tileset._clippingPlanes = new Cesium.ClippingPlaneCollection({
//一组ClippingPlane对象用于选择性地禁用每个平面外部的渲染。
planes: [
// 裁剪面两个参数的:第一个为平面法向量,第二个为原点到平面的垂直距离
new Cesium.ClippingPlane(
//笛卡尔3表示为三维空间的平面的法向量x表示为该法向量在x轴上的分量y表示为该法向量在y轴上的分量z表示为该法向量在z轴上的分量
new Cesium.Cartesian3(0.0, 0.0, -1.0),
2000
),
],
});
init(e) {
return new Promise((t => {
new Cesium.Resource.fetchJson({url: e}).then((e => {
let i = [];
i = e.scenes, i[0].children.forEach(((e, t) => {
e.children && this.buildingArr.push(e)
})), this.buildingArr.forEach(((e, t) => {
i[0].children.forEach(((i, r) => {
"ground_000001" == i.name && e.name.split("F")[0] > 0 && (this.buildingArr[t].children.push(i), this.ground_arr = i)
}))
})), this.buildingArr.sort(((e, t) => parseInt(e.name.replace("F", "")) - parseInt(t.name.replace("F", ""))));
let r = [];
this.buildingArr.forEach(((e, t) => {
r.push({floor: e.name, index: t})
})), t({scenesArr: i, buildingArr: r})
}))
}))
}
clipTileset(polygon) {//裁剪
this.tileset._clippingPlanes = null;
this.polygon = polygon;
const transform = this.tileset.root.transform;
const inverseTransform = Cesium.Matrix4.inverseTransformation(transform, new Cesium.Matrix4());
const clippingPlanes = new Cesium.ClippingPlaneCollection({
//一组ClippingPlane对象用于选择性地禁用每个平面外部的渲染。
planes: [
// 裁剪面两个参数的:第一个为平面法向量,第二个为原点到平面的垂直距离
new Cesium.ClippingPlane(
//笛卡尔3表示为三维空间的平面的法向量x表示为该法向量在x轴上的分量y表示为该法向量在y轴上的分量z表示为该法向量在z轴上的分量
new Cesium.Cartesian3(0.0, 0.0, -1.0),
1.2//裁剪平面距地面的距离
),
],
});
for (let i = 0; i < polygon.length - 1; i++) {
const plane = this.createClippingPlane(polygon[i], polygon[i + 1], inverseTransform);
clippingPlanes.add(plane);
showTilesFloor(e) {
let t = {name: null, children: null};
"all" != e && (t = this.buildingArr[e]), console.log(this.buildingArr[e]), t.name && (t.name.split("F")[0] < 0 ? this.icy.viewer.scene.globe.depthTestAgainstTerrain = !1 : this.icy.viewer.scene.globe.depthTestAgainstTerrain = !0);
const i = [];
t.children && t.children.forEach((e => {
const t = ["${name} === '" + e.name + "'", "rgba(255,255,255,1)"];
i.push(t)
})), "all" == e ? (this.icy.viewer.scene.globe.depthTestAgainstTerrain = !0, i.push(["true", "rgba(255,255,255,1)"])) : i.push(["true", "rgba(255,255,255,0.08)"]), this.tileset.style = new Cesium.Cesium3DTileStyle({color: {conditions: i}})
}
clipTileset(e) {
this.tileset._clippingPlanes = null, this.polygon = e;
const t = this.tileset.root.transform,
i = Cesium.Matrix4.inverseTransformation(t, new Cesium.Matrix4),
r = new Cesium.ClippingPlaneCollection({planes:
[new Cesium.ClippingPlane(new Cesium.Cartesian3(0, 0, -1), 1.03)]
});
for (let t = 0; t < e.length - 1; t++) {
const n = this.createClippingPlane(e[t], e[t + 1], i);
r.add(n)
}
this.tileset.clippingPlanes = clippingPlanes;
this.tileset.clippingPlanes = r
}
createClippingPlane(p1, p2, inverseTransform) {
const p1C3 = this.getOriginCoordinateSystemPoint(p1, inverseTransform);
const p2C3 = this.getOriginCoordinateSystemPoint(p2, inverseTransform);
const up = new Cesium.Cartesian3(0, 0, -1);
const direction = new Cesium.Cartesian3();
Cesium.Cartesian3.subtract(p2C3, p1C3, direction);
const normal = new Cesium.Cartesian3();
Cesium.Cartesian3.cross(up, direction, normal);
Cesium.Cartesian3.normalize(normal, normal);
const distance = -Cesium.Cartesian3.dot(normal, p1C3);
return new Cesium.ClippingPlane(normal, distance);
createClippingPlane(e, t, i) {
const r = this.getOriginCoordinateSystemPoint(e, i), n = this.getOriginCoordinateSystemPoint(t, i),
s = new Cesium.Cartesian3(0, 0, -1), a = new Cesium.Cartesian3;
Cesium.Cartesian3.subtract(n, r, a);
const o = new Cesium.Cartesian3;
Cesium.Cartesian3.cross(s, a, o), Cesium.Cartesian3.normalize(o, o);
const l = -Cesium.Cartesian3.dot(o, r);
return new Cesium.ClippingPlane(o, l)
}
getOriginCoordinateSystemPoint(point, inverseTransform) {
const cartesian = Cesium.Cartesian3.fromDegrees(point[0], point[1]);
return Cesium.Matrix4.multiplyByPoint(inverseTransform, cartesian, new Cesium.Cartesian3());
getOriginCoordinateSystemPoint(e, t) {
const i = Cesium.Cartesian3.fromDegrees(e[0], e[1]);
return Cesium.Matrix4.multiplyByPoint(t, i, new Cesium.Cartesian3)
}
setHeight(e = 0) {
const t = this.tileset.boundingSphere
, i = Cesium.Cartographic.fromCartesian(t.center)
@ -771,8 +766,7 @@ var CustomCesium;
}
destroy() {
this.tileset.destroy(),
this.tileset = void 0
this.tileset.destroy(), this.tileset = void 0
}
}
@ -794,7 +788,6 @@ var CustomCesium;
}
mouseLeft(e) {
let xx = [];
new Cesium.ScreenSpaceEventHandler(this.icy.viewer.scene.canvas).setInputAction((t => {
let i = this.icy.viewer.camera.getPickRay(t.position)
, r = this.icy.viewer.scene.globe.pick(i, this.icy.viewer.scene)
@ -807,9 +800,14 @@ var CustomCesium;
latitude: Number(a.toFixed(8)),
altitude: Number(o.toFixed(5))
};
// console.log("鼠标获取经纬高", s, a, o, l);
xx.push([s, a, o]);
console.log(JSON.stringify(xx));
console.log("鼠标获取经纬高", s, a, o, l);
//方向 围绕Z轴旋转
let heading = Cesium.Math.toDegrees(this.icy.viewer.camera.heading).toFixed(2);
//倾斜角度 围绕Y轴旋转
let pitch = Cesium.Math.toDegrees(this.icy.viewer.camera.pitch).toFixed(2);
//围绕X轴旋转
let roll = Cesium.Math.toDegrees(this.icy.viewer.camera.roll).toFixed(2);
console.log(heading+','+pitch+','+roll);
let h = this.icy.viewer.scene.pick(t.position);
// console.log(h);
if (!h)
@ -1432,7 +1430,7 @@ var CustomCesium;
e()
}
constructor(e, { url: t, height: i, lon: r, lat: n, id: s, name: a, scale: o, angle: l, peoName: k, floor: f, isCar: q }, h) {
constructor(e, { url: t, height: i, lon: r, lat: n, id: s, name: a, scale: o, angle: l, peoName: k,gltf: gltf, floor: f, isCar: q }, h) {
if (this.icy = e,
!t && !h)
return console.error("传参有问题");
@ -1484,6 +1482,7 @@ var CustomCesium;
this.entity.peoName = k
this.entity.floor = f
this.entity.isCar = q
this.entity.gltf = gltf
}

View File

@ -8,6 +8,7 @@ import children from "@/components/children/index";
import { MODEL } from "@/assets/js/constant";
// import asyncRouter from "@/assets/js/asyncRouter";
import { getAsyncRouter } from "@/request/api";
import { useTagsViewStore } from "@/pinia/tagsView.js";
const modules = import.meta.glob([
"./views/**/*.vue",
@ -19,6 +20,7 @@ router.beforeEach(async (to, from, next) => {
const routerStore = useRouterStore(pinia);
const menuStore = useMenuStore(pinia);
const userStore = useUserStore(pinia);
const tagsViewStore = useTagsViewStore(pinia);
// 需要登陆
if (to.meta.isLogin !== false) {
if (!userStore.getUserInfo.USER_ID) {
@ -30,7 +32,13 @@ router.beforeEach(async (to, from, next) => {
// pinia里没有储存路由去后台获取路由
if (routerStore.getRouters.length === 0) {
const resData = await getAsyncRouter();
storageRouter = resData.routeList; // 后台请求得到的路由数据
// filterMenuData(resData.routeList);
// const x = filterMenuData(resData.routeList);
// console.log(x);
// storageRouter = resData.routeList.filter((item) => item.hasMenu);
storageRouter = filterMenuData(resData.routeList);
// 后台请求得到的路由数据
// console.log(storageRouter);
// storageRouter = asyncRouter; // 死路由
routerStore.setRouters(storageRouter); // 存储路由
routerGo(to, next); // 执行路由跳转方法
@ -47,11 +55,26 @@ router.beforeEach(async (to, from, next) => {
storageRouter = null;
routerStore.$reset();
menuStore.$reset();
tagsViewStore.$reset();
next();
}
});
function filterMenuData(data) {
return data
.filter((item) => item.hasMenu) // First filter out items where hasMenu is false
.map((item) => {
if (item.children && item.children.length > 0) {
// Recursively filter children if they exist
item.children = filterMenuData(item.children);
}
return item; // Return the modified item
});
}
function routerGo(to, next) {
const menuStore = useMenuStore(pinia);
const userStore = useUserStore(pinia);
storageRouter = filterAsyncRouter(cloneDeep(storageRouter)); // 过滤路由
for (let i = 0; i < storageRouter.length; i++) {
router.addRoute("app", storageRouter[i]); // 动态添加路由
@ -63,7 +86,14 @@ function routerGo(to, next) {
router.options.routes[i].children.concat(storageRouter)
); // 将路由数据存到一个新的pinia里做菜单渲染
if (!menuStore.getModel) {
menuStore.setModel(MODEL["1"]);
if (
userStore.getUserInfo.CORPINFO_ID ===
"467088695e1340b2897c264bb8100766"
) {
menuStore.setModel(MODEL["7"]);
} else {
menuStore.setModel(MODEL["1"]);
}
}
break;
}

View File

@ -1,7 +1,7 @@
:root {
--el-header-height: 69px;
--el-aside-scrollbar-height: calc(100vh - var(--el-header-height));
--el-main-scrollbar-height: calc(100vh - var(--el-header-height) - 40px);
--el-main-scrollbar-height: calc(100vh - var(--el-header-height) - 40px - 24px - 10px); // 40 24 tags_view 10tags_view
--el-border-color: #273868 !important; //
--el-text-color-regular: #fff !important;
--el-fill-color-light: #0e1d44 !important; //hover

Binary file not shown.

After

Width:  |  Height:  |  Size: 908 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 18 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 3.4 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.2 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 3.3 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 3.6 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.8 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 2.0 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.9 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 38 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.3 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.3 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 22 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 1.9 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 1.8 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 1.5 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 2.8 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 2.9 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 2.3 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.2 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.4 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 3.9 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 3.6 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 3.8 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 3.5 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 18 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 2.3 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 2.3 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 2.8 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 2.4 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 2.0 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.3 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.2 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.3 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.9 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.6 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.5 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 2.1 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.5 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.1 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.4 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.2 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.3 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 4.0 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 4.8 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 11 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 7.4 KiB

View File

@ -8,16 +8,22 @@ export const MODEL = {
4: "monitor",
5: "educationAndTraining",
6: "comprehensive",
// 东方石油专用 企业管理
7: "dfPre",
};
// 头部导航条
export const MENU = [
{ title: "双重预防", model: MODEL["1"] },
{ title: "双重预防", model: MODEL["1"], url: "/index" },
{ title: "特殊作业", model: MODEL["2"] },
{ title: "人员定位", model: MODEL["3"] },
{ title: "人员定位", model: MODEL["3"], url: "/location_index" },
{ title: "监测预警", model: MODEL["4"] },
{ title: "教育培训", model: MODEL["5"] },
{ title: "教育培训", model: MODEL["5"], url: "/education_index" },
{ title: "综合管理", model: MODEL["6"] },
];
export const MENU_DF = [
{ title: "企业管理", model: MODEL["7"] },
{ title: "特殊作业", model: MODEL["2"] },
];
export const PRINT_STYLE =
'<style type="text/css" media="print">\n' +
" @page { size: landscape; }\n" +

View File

@ -420,3 +420,10 @@ export const layoutFnGetPersonnelManagementJobType = async () => {
});
return ref(resData.list);
};
// 安全标准化等级
export const layoutFnGetSafetyLevel = async () => {
const resData = await getLevels({
DICTIONARIES_ID: "4ad17876ebe24124876a2fbb1f3060e7",
});
return ref(resData.list);
};

View File

@ -2,6 +2,7 @@
<el-tree-select
v-model="modelValue"
:data="departmentTree"
:disabled="disabled"
node-key="id"
:props="{
children: 'nodes',
@ -38,6 +39,10 @@ const props = defineProps({
type: Boolean,
default: false,
},
disabled: {
type: Boolean,
default: false,
},
multiple: {
type: Boolean,
default: false,
@ -60,6 +65,9 @@ const modelValue = useVModel(props, "modelValue", emits);
const departmentTree = await layoutFnGetDepartmentzTree({
rootDisabled: props.rootDisabled,
});
if (props.multiple) {
modelValue.value = [];
}
</script>
<style scoped></style>

View File

@ -1,11 +1,7 @@
<template>
<el-drawer v-model="visible" title="电子围栏台账" direction="rtl" size="50%">
<el-card>
<el-form
:model="searchForm"
label-width="20px"
@submit.prevent="fnResetPagination"
>
<el-form :model="searchForm" label-width="20px">
<el-row>
<el-col :span="12">
<el-form-item label="关键字" prop="KEYWORDS" label-width="60px">
@ -17,10 +13,8 @@
</el-col>
<el-col :span="12">
<el-form-item label-width="30px">
<el-button type="primary" native-type="submit">搜索</el-button>
<el-button native-type="reset" @click="fnResetPagination">
重置
</el-button>
<el-button type="primary" @click="fnSearch"></el-button>
<el-button @click="fnResetPaginationd"></el-button>
</el-form-item>
</el-col>
</el-row>
@ -50,13 +44,14 @@
</layout-card>
</el-drawer>
</template>
<script setup>
import { serialNumber } from "@/assets/js/utils.js";
import useListData from "@/assets/js/useListData.js";
import { getRyRegionList } from "@/request/risk_control.js";
import { useVModels } from "@vueuse/core";
const { list, pagination, searchForm, fnGetData, fnResetPagination } =
useListData(getRyRegionList);
import useListData from "@/assets/js/useListData.js";
// props
const props = defineProps({
visible: {
type: Boolean,
@ -66,14 +61,68 @@ const props = defineProps({
form: {
type: Object,
required: true,
default: () => {},
default: () => ({
ELECTRONIC_FENCE_NAME: "",
ELECTRONIC_FENCE_ID: "",
}),
},
});
const emits = defineEmits(["update:visible", "update:form"]);
const { visible, form } = useVModels(props, emits);
//
const fnResetPaginationd = () => {
searchForm.value = {};
fnResetPagination();
};
//
const fnSearch = () => {
fnGetData();
};
//
const handleJoin = (row) => {
form.value.ELECTRONIC_FENCE_NAME = row.regName;
form.value.ELECTRONIC_FENCE_ID = row.id;
visible.value = false;
};
const { list, pagination, searchForm, fnGetData, fnResetPagination } =
useListData(getRyRegionList);
// //
// const fnGetData = async () => {
// const res = await getRyRegionList({ ...pagination }); //
// list.value = res.varList || [];
// pagination.total = res.page.totalResult || 0;
// };
fnGetData();
// onMounted(async () => {
// const res = await getRyRegionList();
// if (res.webSiteStatus === "1") {
// ElNotification({
// title: "",
// message: h(
// "i",
// { style: "color: teal" },
// "使,"
// ),
// duration: 0,
// type: "warning",
// });
// } else if (res.webSiteStatus === "2") {
// ElNotification({
// title: "",
// message: h(
// "i",
// { style: "color: teal" },
// ""
// ),
// duration: 0,
// type: "warning",
// });
// }
// });
</script>
<style scoped lang="scss"></style>

View File

@ -7,6 +7,36 @@
>
<el-form ref="formRef" :model="form" :rules="rules" label-width="100px">
<el-row>
<el-col v-if="hiddenType === 'speCheck'" :span="24">
<el-form-item label="检查内容" prop="checkContent">
<el-input
:model-value="form.checkContent"
disabled
type="textarea"
autosize
/>
</el-form-item>
</el-col>
<el-col v-if="hiddenType === 'speCheck'" :span="24">
<el-form-item label="检查依据" prop="checkBasis">
<el-input
:model-value="form.checkBasis"
disabled
type="textarea"
autosize
/>
</el-form-item>
</el-col>
<el-col v-if="hiddenType === 'speCheck'" :span="24">
<el-form-item label="适用场所" prop="applicablePlace">
<el-input
:model-value="form.applicablePlace"
disabled
type="textarea"
autosize
/>
</el-form-item>
</el-col>
<el-col v-if="hiddenType === 'unqualified'" :span="24">
<el-form-item label="检查内容" prop="CHECK_CONTENT">
<el-input
@ -86,6 +116,39 @@
/>
</el-form-item>
</el-col>
<el-col v-if="hiddenType === 'speCheck'" :span="24">
<el-form-item label="扣分项" prop="checkScoreList">
<el-select v-model="form.CHECKSCORELD">
<el-option
v-for="item in checkScoreList"
:key="item.id"
:label="
item.deductIllustrate +
'(' +
item.deductPoint +
'分)' +
'。注意此扣分项' +
(item.isReject === '0' ? '非' : '为') +
'否决项。'
"
:value="item"
/>
</el-select>
</el-form-item>
</el-col>
<el-col v-if="hiddenType === 'speCheck'" :span="24">
<el-form-item label="危害类型" prop="HARM_TYPE">
<el-select v-model="form.HARM_TYPE">
<el-option value="1" label="事故隐患" />
<el-option value="2" label="火灾隐患" />
</el-select>
</el-form-item>
</el-col>
<el-col v-if="hiddenType === 'speCheck'" :span="24">
<el-form-item label="罚款金额" prop="CHECKPAY">
<el-input-number v-model="form.CHECKPAY" :min="1" :max="200000" />
</el-form-item>
</el-col>
<el-col :span="24">
<el-form-item label="隐患视频" prop="videoFiles">
<layout-upload
@ -227,6 +290,11 @@ const props = defineProps({
type: Object,
default: () => ({}),
},
checkScoreList: {
type: Array,
required: false,
default: () => [],
},
// unqualified
// otherHidden
// ledger
@ -265,6 +333,7 @@ const rules = {
RECTIFICATIONDEADLINE: [
{ required: true, message: "请选择整改期限", trigger: "change" },
],
HARM_TYPE: [{ required: true, message: "请选择危害类型", trigger: "change" }],
RECTIFICATIONDEPT: [
{ required: true, message: "请选择整改部门", trigger: "change" },
],

View File

@ -6,7 +6,7 @@
<span v-if="data.info.SOURCE === '1'"> </span>
<span v-if="data.info.SOURCE === '2'"> </span>
<span v-if="data.info.SOURCE === '3'"> </span>
<span v-if="data.info.SOURCE === '4'"> </span>
<span v-if="data.info.SOURCE === '4'"> </span>
<span v-if="data.info.SOURCE === '5'"> </span>
</el-descriptions-item>
<template v-if="data.info.SOURCE === '2' && listType === '1'">
@ -58,6 +58,9 @@
<span v-else-if="data.info.STATE === '100'"> 暂存 </span>
<span v-else-if="data.info.STATE === '101'"> 待指派 </span>
<span v-else-if="data.info.STATE === '102'"> 指派中 </span>
<span v-else-if="data.info.SOURCE === '4' && data.info.STATE === '0'">
专项检查上报后展示隐患状态
</span>
</el-descriptions-item>
<el-descriptions-item label="隐患描述">
{{ data.info.HIDDENDESCR }}

View File

@ -15,14 +15,16 @@
</div>
<div class="label">清除绘制</div>
</div>
<div class="option" @click="reduction">
<div v-if="maptype === 0" class="option" @click="reduction">
<div>
<img src="/src/assets/images/map_tools/icon3.png" alt="" />
</div>
<div class="label">还原建筑</div>
</div>
</template>
<div class="id">当前选中楼层id{{ model_id }}</div>
<div v-if="type === 1 && maptype === 0" class="id">
当前选中楼层id{{ model_id }}
</div>
</div>
</div>
</template>
@ -48,6 +50,11 @@ const props = defineProps({
type: Number,
default: 1,
},
// '01',
maptype: {
type: Number,
default: 0,
},
positions: {
type: Array,
default: () => [],
@ -70,13 +77,24 @@ const emits = defineEmits([
"update:position",
"update:modUuid",
]);
const { positions, position, modUuid } = useVModels(props, emits);
const { positions, position, modUuid, maptype } = useVModels(props, emits);
const confrim = () => {
if (model_id.value === 0) {
ElMessage.error("未选择建筑,或者未扎点");
if (maptype.value === 0) {
if (model_id.value === 0) {
ElMessage.error("未选择建筑,或者未扎点");
return;
}
}
if (data.length === 0) {
ElMessage.error("右键点击选择点位");
return;
}
if (data.length <= 2) {
ElMessage.error("最少选择三个点位");
return;
}
console.log(data);
showEnclosure(data);
positions.value = [...data];
modUuid.value = model_id.value;

View File

@ -32,7 +32,7 @@ export class Loadglb {
try {
const response = await axios.get(
pls_ip.replace("8084", "9000").replace("18084", "19000") +
"/buildr/public/models/scene_000001.json"
"/buildr/public/models/scene_000001.json"
);
// const response = await getSceneJson();
// 将获取的数据保存到实例的属性中
@ -165,7 +165,7 @@ export class Loadglb {
lon: unit.lon,
lat: unit.lat,
scale: unit.scale,
angle: [90, 0, 0]
angle: [90, 0, 0],
// angle: [97.4843053, 0, 0]
});
this.entityList.push(m);

View File

@ -1,11 +1,18 @@
import { Loadglb } from "./loadglb.js";
import { ref } from "vue";
const loadMap = 3;
let $entityTransparent = [];
const clickModel = new Map();
const tiles3D = ref({});
const tiles3DfloorArr = ref([]);
let enclosure = null;
let entities = null;
let centerLon = 0;
let centerLat = 0;
let centerHig = 0;
let viewArr = [];
export const initMap = (corp) => {
window.$scene = new window.CustomCesium.Scene(
"map",
@ -24,6 +31,10 @@ export const initMap = (corp) => {
),
});
const [wgsLat, wgsLon] = bd09ToWgs84(corp.LATITUDE, corp.LONGITUDE);
centerLat = wgsLat;
centerLon = wgsLon;
centerHig = corp.map_hight;
viewArr = corp.view_arr.split(",");
flyTo(wgsLon, wgsLat);
// 亮度设置
const stages = window.$icy.viewer.scene.postProcessStages;
@ -32,9 +43,20 @@ export const initMap = (corp) => {
stages.add(window.Cesium.PostProcessStageLibrary.createBrightnessStage());
window.$icy.viewer.scene.brightness.enabled = true;
window.$icy.viewer.scene.brightness.uniforms.brightness = Number(1.05); // 此处亮度值为倍数
createGlb(); // 加载glb
// 加载地图模型
corp.USE_URL === "T"
? loadTiles3D(window.$icy, corp.TILES3D_URL) // tiles3d 地图模型
: createGlb(); // 加载glb
};
// loadTiles3D
const loadTiles3D = (icy, url) => {
tiles3D.value = new window.CustomCesium.Tiles3D(icy, url, 0);
tiles3D.value.show(true);
const scenetreeurl = url.replace("tileset", "scenetree");
tiles3D.value.init(scenetreeurl).then((res) => {
tiles3DfloorArr.value = res.buildingArr;
});
};
const bd09ToWgs84 = (bdLat, bdLon) => {
const x_pi = (Math.PI * 3000.0) / 180.0;
const x = bdLon - 0.0065;
@ -115,13 +137,13 @@ const transformlng = (lng, lat) => {
};
// eslint-disable-next-line no-unused-vars
const flyTo = (lng, lat) => {
const flyTo = () => {
window.$carmer.flyTo({
// 视角飞入
maxHeight: 1500,
time: 1,
position: [lng, lat - 0.001, 200],
angle: [0, -60, 0],
position: [centerLon, centerLat - 0.0001, parseInt(centerHig)],
angle: viewArr,
});
};

View File

@ -62,6 +62,8 @@
<el-input
v-model="form.RISK_DESCR"
type="textarea"
maxlength="1000"
show-word-limit
:autosize="{
minRows: 3,
}"
@ -135,6 +137,8 @@
<el-input
v-model="form.MEASURES"
type="textarea"
maxlength="1000"
show-word-limit
:autosize="{
minRows: 3,
}"
@ -158,6 +162,8 @@
<el-input
v-model="form.EME_MEASURES"
type="textarea"
maxlength="1000"
show-word-limit
:autosize="{
minRows: 3,
}"
@ -197,6 +203,8 @@
<el-input
v-model="form.MANAGEMENT_CONTROL_THREE"
type="textarea"
maxlength="1000"
show-word-limit
:autosize="{
minRows: 3,
}"
@ -249,7 +257,67 @@ const props = defineProps({
});
const emits = defineEmits(["update:form"]);
const form = useVModel(props, "form", emits);
const defineRules = {};
const defineRules = {
DEPTNAME: [
{ required: true, message: "管控部门不能为空", trigger: "change" },
],
DEPARTMENT_ID: [
{ required: true, message: "管控部门不能为空", trigger: "change" },
],
USER_ID: [
{ required: true, message: "管控责任人不能为空", trigger: "change" },
],
RISK_UNIT_ID: [
{ required: true, message: "管控责任人不能为空", trigger: "change" },
],
IDENTIFICATION_ID: [
{ required: true, message: "辨识部位不能为空", trigger: "change" },
],
RISK_DESCR: [
{ required: true, message: "存在风险不能为空", trigger: "change" },
],
LIKELIHOOD: [
{ required: true, message: "事故发生的可能性不能为空", trigger: "change" },
],
EXPOSURE: [
{
required: true,
message: "人员暴露于危险环境中的频繁程度不能为空",
trigger: "change",
},
],
CONSEQUENCE: [
{
required: true,
message: "一旦发生事故可能造成的后果不能为空",
trigger: "change",
},
],
MEASURES: [
{
required: true,
message: "管控措施不能为空",
trigger: "blur",
},
],
ACCIDENTS: [
{
required: true,
message: "事故类型不能为空",
trigger: "change",
},
],
EME_MEASURES: [
{
required: true,
message: "应急处置措施不能为空",
trigger: "blur",
},
],
PARTSNAME: [
{ required: true, message: "辨识部位名称不能为空", trigger: "blur" },
],
};
const formRef = ref(null);
const infoIsEmpty = ref(isEmpty(props.info));
const unitList = ref([]);

View File

@ -3,7 +3,7 @@
<div>
<el-button type="primary" @click="fnOpen"></el-button>
</div>
<div v-if="modelValue" style="border: 1px dashed #ccc" class="mt-10">
<div v-if="modelValue" style="border: 0px dashed #ccc" class="mt-10">
<img :src="modelValue" alt="" style="width: 100%" />
</div>
</div>

View File

@ -103,6 +103,9 @@ if (props.type === "label") {
const resData = await getThreeInstitutionalLibrariesLabel({ loading: false });
tree = resData.tree;
}
if (props.collapseTags) {
modelValue.value = [];
}
</script>
<style scoped></style>

View File

@ -0,0 +1,34 @@
<template>
<el-tooltip placement="top" :persistent="true">
<template #content>
<template v-if="img">
<img
v-viewer
:src="VITE_FILE_URL + img"
width="100"
height="100"
alt=""
class="ml-10"
/>
</template>
<span v-else></span>
</template>
<el-tag>预览</el-tag>
</el-tooltip>
</template>
<script setup>
defineOptions({
name: "LayoutTooltipImgSingle",
});
const VITE_FILE_URL = import.meta.env.VITE_FILE_URL;
defineProps({
img: {
type: String,
required: true,
default: "",
},
});
</script>
<style scoped lang="scss"></style>

View File

@ -132,14 +132,14 @@ const onChange = (uploadFile, uploadFiles) => {
img.onload = () => {
if (img.width !== +ratio[0] && img.height !== +ratio[1]) {
ElMessage.warning(`只能上传${props.ratio}分辨率的图片`);
uploadRef.value.handleRemove(uploadFile);
uploadRef.value.handleRemove(uploadFile.raw);
}
};
}
if (size) {
if (uploadFile.size > size) {
ElMessage.warning(`文件大小不能超过${props.size}M`);
uploadRef.value.handleRemove(uploadFile);
uploadRef.value.handleRemove(uploadFile.raw);
}
}
if (accept) {
@ -147,7 +147,7 @@ const onChange = (uploadFile, uploadFiles) => {
emits("update:file-list", uploadFiles);
} else {
ElMessage.warning(`只能上传${props.accept}格式的文件`);
uploadRef.value.handleRemove(uploadFile);
uploadRef.value.handleRemove(uploadFile.raw);
}
} else {
emits("update:file-list", uploadFiles);

View File

@ -51,6 +51,7 @@
</div>
<verification
:show="verificationShow"
:imgs="[verificationUrl]"
@success="verificationSuccess"
@close="verificationClose"
/>
@ -59,6 +60,9 @@
<script setup>
import Verification from "vue3-puzzle-vcode";
import { ref } from "vue";
import { getVerificationImage } from "@/request/api.js";
import dayjs from "dayjs";
import { useUserStore } from "@/pinia/user.js";
defineOptions({
name: "LayoutVerification",
@ -69,6 +73,7 @@ defineProps({
default: false,
},
});
const verificationUrl = ref("");
const emits = defineEmits(["update:verificationPass"]);
const verificationShow = ref(false);
const verificationClose = () => {
@ -78,6 +83,24 @@ const verificationSuccess = () => {
emits("update:verificationPass", true);
verificationClose();
};
const VITE_BASE_URL = import.meta.env.VITE_BASE_URL;
const userStore = useUserStore();
const fnGetImageData = async () => {
const resData = await getVerificationImage({
secretKey: btoa(VITE_BASE_URL),
});
const sKey = atob(resData.data).split(",");
verificationUrl.value = sKey[0];
const date1 = dayjs(sKey[1]);
const date2 = dayjs(new Date());
const diff = date2.diff(date1, "days");
userStore.setQyRegister(true);
if (diff > 1) {
userStore.setQyRegister(false);
}
};
fnGetImageData();
</script>
<style scoped lang="scss">
@ -205,9 +228,11 @@ const verificationSuccess = () => {
background: #2e63d8 !important;
border: 1px solid #2752b3 !important;
}
.mi-captcha-radar-pass .mi-captcha-radar-tip {
color: #ffffff !important;
}
.mi-captcha-radar-success-icon {
color: #ffffff !important;
}

View File

@ -31,9 +31,11 @@
v-for="(item, index) in data.breadcrumbList"
:key="item.path"
>
<router-link v-if="index === 0" to="/index">
<span v-if="index === 0">
<!-- <router-link v-if="index === 0" to="/index">-->
{{ item.meta.title }}
</router-link>
<!-- </router-link>-->
</span>
<span v-else-if="index !== data.breadcrumbList.length - 1">
{{ item.meta.title }}
</span>

View File

@ -102,6 +102,11 @@ const rules = {
],
newpwd: [
{ required: false, message: "请输入新密码", trigger: "blur" },
{
pattern:
/^(?=.*\d)(?=.*?[a-z])(?=.*?[A-Z])(?=.*[~!@#$%^&*])[\da-zA-Z~!@#$%^&*]{6,18}$/,
message: "密码长度为6-18位必须包含大小字母小写字母数字和特殊符号。",
},
{ min: 6, max: 18, message: "密码长度为6-18位", trigger: "blur" },
],
newpassword1: [{ required: false, validator: validatePass, trigger: "blur" }],

View File

@ -4,15 +4,12 @@
<div class="logo" />
<div class="menu">
<ul>
<li @click="fnNavigationBI">
<div class="title">可视化</div>
</li>
<template v-for="(item, index) in MENU" :key="index">
<template v-for="(item, index) in data.navData" :key="index">
<li
:class="{ active: item.model === menuStore.getModel }"
@click="switchMenu(item.model)"
:class="{ active: item.MODEL === menuStore.getModel }"
@click="switchMenu(item)"
>
<div class="title">{{ item.title }}</div>
<div class="title">{{ item.TITLE }}</div>
</li>
</template>
</ul>
@ -26,7 +23,9 @@
>
<div class="user_info">
<el-avatar :size="23" fit="fill" :src="data.avatar" />
<span style="max-width: 100px;" class="line-1">{{ userStore.getUserInfo.NAME }}</span>
<span style="max-width: 100px" class="line-1">{{
userStore.getUserInfo.NAME
}}</span>
<icon-down
theme="filled"
size="16"
@ -61,12 +60,11 @@
</template>
<script setup>
import { reactive } from "vue";
import { reactive, h } from "vue";
import { useRouter } from "vue-router";
import { useMenuStore } from "@/pinia/menu";
import { useUserStore } from "@/pinia/user";
import { MENU } from "@/assets/js/constant";
import { getInfo, getUserInfo, logout } from "@/request/api";
import { getInfo, getUserInfo, logout, getNavList } from "@/request/api";
import { getSpecialOperationsWarnAmount } from "@/request/special_operations";
import UpdateInfo from "./components/update_info.vue";
import UpdateAvatar from "./components/update_avatar.vue";
@ -74,6 +72,7 @@ import { checkImgExists, addingPrefixToFile } from "@/assets/js/utils.js";
import { useWebSocket } from "@vueuse/core";
import { nanoid } from "nanoid";
import { ElNotification } from "element-plus";
import { getRydyWebsiteStatus } from "@/request/api.js";
defineOptions({
name: "LayoutHeader",
@ -93,6 +92,7 @@ const data = reactive({
visible: false,
form: {},
},
navData: [],
});
const dropdownCommand = async (command) => {
if (command === "signOut") {
@ -115,8 +115,38 @@ const fnGetUserInfo = async () => {
data.userDialog.visible = true;
data.userDialog.form = resData.pd;
};
const switchMenu = (model) => {
menuStore.setModel(model);
const getMenuData = async () => {
const resData = await getNavList({
ROLE_ID: userStore.getUserInfo.ROLEID,
});
data.navData = resData.navList;
menuStore.setModel(resData.navList.find((item) => item.MODEL).MODEL);
};
getMenuData();
const switchMenu = async (item) => {
if (item.NAV_ID === 0) {
fnNavigationBI();
} else {
//
if (item.MODEL === "positioning") {
const res = await getRydyWebsiteStatus();
if (!res.webSiteStatus) {
ElNotification({
title: "温馨提示",
message: h(
"i",
{ style: "color: teal" },
"人员定位服务正在升级中!可视化,人员定位等功能暂无法使用。请耐心等待!"
),
duration: 0,
type: "warning",
});
return;
}
}
menuStore.setModel(item.MODEL);
if (item.URL) router.push({ name: item.URL });
}
};
const fnInitWebSocket = () => {
const { send } = useWebSocket(
@ -151,8 +181,15 @@ const fnGetInfo = async () => {
fnGetInfo();
const fnSignOut = async () => {
await logout();
userStore.$reset();
await router.replace("/login");
if (
userStore.getUserInfo.CORPINFO_ID === "c6b69927126348ef987118165eb62659"
) {
userStore.$reset();
await router.replace("/login/custom");
} else {
userStore.$reset();
await router.replace("/login");
}
};
const fnSpecialOperationsWarnAmount = async () => {
const resData = await getSpecialOperationsWarnAmount({ loading: false });
@ -167,8 +204,22 @@ const fnSpecialOperationsWarnAmount = async () => {
}
};
fnSpecialOperationsWarnAmount();
const fnNavigationBI = () => {
const fnNavigationBI = async () => {
notify && notify.close();
const res = await getRydyWebsiteStatus();
if (!res.webSiteStatus) {
ElNotification({
title: "温馨提示",
message: h(
"i",
{ style: "color: teal" },
"人员定位服务正在升级中,地图定位功能暂无法使用,请耐心等待!"
),
duration: 0,
type: "warning",
});
return;
}
router.push({ path: "/BI" });
};
</script>

View File

@ -17,6 +17,7 @@
</el-aside>
<el-main>
<layout-breadcrumb v-if="route.meta.isBreadcrumb !== false" />
<layout-tags-view />
<el-scrollbar style="height: var(--el-main-scrollbar-height)">
<router-view v-slot="{ Component }">
<transition name="view" mode="out-in">
@ -35,6 +36,7 @@
import LayoutBreadcrumb from "./breadcrumb/index";
import LayoutHeader from "./header/index";
import LayoutMenu from "./menu/index";
import LayoutTagsView from "./tags_view/index.vue";
import { computed } from "vue";
import { useMenuStore } from "@/pinia/menu";
import { useRoute } from "vue-router";

View File

@ -0,0 +1,150 @@
<template>
<div class="tags_view">
<el-tabs
v-model="tabActive"
type="card"
class="tag-view-content"
@tab-change="handleTabChange"
@tab-remove="handleTabsDelete"
>
<el-tab-pane
v-for="item in tagsViewList"
:key="item.path"
:name="item.path"
:closable="!item.meta.noClosable"
>
<template #label>
<div @contextmenu.prevent="openMenu($event, item)">
<span>{{ item.meta.title }}</span>
</div>
</template>
</el-tab-pane>
</el-tabs>
<tag-menu
:key="currentPath"
ref="tagMenuRef"
:list="openMenuList"
:current-title="currentTitle"
:offset-x="offsetX"
:tag-view-length="tagsViewList.length"
@handle-click="handleOption"
/>
</div>
</template>
<script setup>
import { computed, nextTick, ref, watch } from "vue";
import { useRouter, useRoute } from "vue-router";
import TagMenu from "./tag_menu.vue";
import { useTagsViewStore } from "@/pinia/tagsView.js";
import { Refresh, Close } from "@element-plus/icons-vue";
const router = useRouter();
const route = useRoute();
const tagsViewStore = useTagsViewStore();
const tagsViewList = computed(() => tagsViewStore.getTagsViewList);
const tabActive = ref("");
const tagMenuRef = ref(null);
const currentPath = ref("");
const currentTitle = ref("");
const offsetX = ref(0);
const openMenu = async ({ target }, { path, meta }) => {
const styles = getComputedStyle(document.querySelector(".el-aside"));
const variableValue = styles.getPropertyValue("--el-aside-width");
offsetX.value =
target.getBoundingClientRect().x -
parseInt(variableValue.replace("px", "")) -
20;
currentPath.value = path;
currentTitle.value = meta.title;
await nextTick();
tagMenuRef.value.handleOpen();
};
watch(
() => route.path,
() => {
const filterRoute = route.matched.filter(
(item) => item.meta.isSubMenu === false
);
if (filterRoute.length === 0) return;
const { meta, path } = filterRoute[0];
tabActive.value = path;
tagsViewStore.addTagsView({
path,
meta,
});
},
{
immediate: true,
}
);
const handleTabChange = (path) => router.push(path);
const handleTabsDelete = (path) => {
tagsViewStore.removeTagsView(path, route.path === path, handleTabChange);
};
const handleOption = (index) => {
const path = currentPath.value;
switch (index) {
case 0:
window.location.reload();
break;
case 1:
tagsViewStore.closeOtherTagsView(path);
handleTabChange(path);
break;
case 2:
tagsViewStore.closeAllTagsView();
handleTabChange("/index");
break;
}
};
const openMenuList = [
{
icon: Refresh,
name: "刷新",
},
{
icon: Close,
name: "关闭其他",
},
{
icon: Close,
name: "关闭全部",
},
];
</script>
<style scoped lang="scss">
.tags_view {
margin-top: 10px;
margin-left: 20px;
height: 24px;
:deep {
.el-tabs {
--el-tabs-header-height: auto;
--el-font-size-base: 12px;
}
.el-tabs--card > .el-tabs__header {
border-bottom: none;
margin: 0;
}
.el-tabs--card > .el-tabs__header .el-tabs__item {
padding: 4px 10px;
border-color: var(--el-border-color) !important;
}
.el-tabs--card > .el-tabs__header .el-tabs__nav {
border-color: var(--el-border-color) !important;
}
.el-tabs__nav-next,
.el-tabs__nav-prev {
line-height: 24px;
}
}
}
</style>

View File

@ -0,0 +1,71 @@
<template>
<el-dropdown
ref="dropdownRef"
placement="bottom"
trigger="contextmenu"
@visible-change="handleVisibleChange"
@command="handleCommand"
>
<div
:style="{
'font-size': '12px',
'margin-left': offsetX + 'px',
'margin-top': '-22px',
visibility: 'hidden',
}"
>
{{ currentTitle }}
</div>
<template #dropdown>
<el-dropdown-menu>
<template v-for="(item, index) in list" :key="item.name">
<el-dropdown-item
:command="index"
:disabled="index === 1 && tagViewLength === 1"
>
<el-icon :size="16" color="#fff">
<component :is="item.icon" />
</el-icon>
{{ item.name }}
</el-dropdown-item>
</template>
</el-dropdown-menu>
</template>
</el-dropdown>
</template>
<script setup>
import { ref } from "vue";
defineProps({
list: {
type: Array,
},
tagViewLength: {
type: Number,
},
currentTitle: {
type: String,
},
offsetX: {
type: Number,
},
});
const emits = defineEmits(["handleClick"]);
const active = ref(false);
const dropdownRef = ref(null);
const handleVisibleChange = (type) => (active.value = type);
const handleCommand = (index) => emits("handleClick", index);
const handleOpen = () => {
dropdownRef.value.handleOpen();
};
const handleClose = () => {
dropdownRef.value.handleClose();
};
defineExpose({
handleOpen,
handleClose,
});
</script>
<style scoped lang="scss"></style>

View File

@ -1,9 +1,72 @@
<template>
<hidden-danger-view />
<div class="mobile">
<van-cell-group>
<van-cell :title="info.RISKUNITNAME" :value="info.PARTSNAME" />
<van-cell title="存在风险">
<template #label>
<div v-for="(item, index) in infoList" :key="index" class="mt-10">
{{ index + 1 }}. {{ item.RISK_DESCR }}
</div>
</template>
</van-cell>
<van-cell title="主要管控措施">
<template #label>
<div v-for="(item, index) in infoList" :key="index" class="mt-10">
{{ index + 1 }}. {{ item.MEASURES }}
</div>
</template>
</van-cell>
<van-cell title="管控部门" :value="info.DEPTNAME" />
<van-cell title="事故类型" :label="info.ACCIDENTS_NAME" />
<van-cell title="风险等级">
<template #value>
<span v-if="LEVELID === 'levelD'" class="text-blue">
低风险/D级
</span>
<span v-else-if="LEVELID === 'levelC'" class="text-yellow">
一般风险/C级
</span>
<span v-else-if="LEVELID === 'levelB'" class="text-orange">
较大风险/B级
</span>
<span v-else-if="LEVELID === 'levelA'" class="text-red">
重大风险/A级
</span>
</template>
</van-cell>
</van-cell-group>
</div>
</template>
<script setup>
import HiddenDangerView from "../identifying_parts/hidden_danger_view.vue";
import { ref } from "vue";
import {
getIdentifyingPartsInfo,
getIdentifyingPartsInfoList,
} from "@/request/mobile.js";
import { useRoute } from "vue-router";
import useListData from "@/assets/js/useListData.js";
defineProps({
path: {
type: String,
default: "/mobile/risk_point/hidden_danger_view",
},
});
const route = useRoute();
const { IDENTIFICATIONPARTS_ID } = route.query;
const info = ref({});
const { list: infoList } = useListData(getIdentifyingPartsInfoList, {
otherParams: { CHECK_IDENTIFICATION_ID: IDENTIFICATIONPARTS_ID },
usePagination: false,
});
const fnGetData = async () => {
const resData = await getIdentifyingPartsInfo({
IDENTIFICATIONPARTS_ID,
});
info.value = resData.pd;
};
fnGetData();
</script>
<style scoped></style>

View File

@ -1,49 +1,139 @@
<template>
<div class="mobile">
<van-search
v-model="searchForm.KEYWORDS"
show-action
:clearable="false"
placeholder="请输入搜索关键词"
@search="fnGetData"
>
<template #action>
<div @click="fnGetData"></div>
</template>
</van-search>
<van-cell-group
v-for="(item, index) in list"
:key="index"
class="mt-10"
@click="
$router.push({
path: '/mobile/risk_point/checklist',
query: {
IDENTIFICATIONPARTS_ID: item.IDENTIFICATIONPARTS_ID,
},
})
"
>
<van-cell title="部位名称" :value="item.PARTSNAME" />
<van-cell title="风险等级">
<template #value>
<span v-if="item.LEVELID === 'levelD'" class="text-blue">
低风险/D级
</span>
<span v-else-if="item.LEVELID === 'levelC'" class="text-yellow">
一般风险/C级
</span>
<span v-else-if="item.LEVELID === 'levelB'" class="text-orange">
较大风险/B级
</span>
<span v-else-if="item.LEVELID === 'levelA'" class="text-red">
重大风险/A级
</span>
</template>
</van-cell>
<van-cell title="风险点(单元)" :value="item.RISKUNITNAME" />
<van-cell title="管控部门" :value="item.DEPT_NAME" />
</van-cell-group>
<van-tabs v-model:active="tabsActive" type="card" sticky>
<van-tab title="辨别部位" name="1">
<van-search
v-model="searchForm.KEYWORDS"
show-action
:clearable="false"
placeholder="请输入搜索关键词"
@search="fnGetData"
>
<template #action>
<div @click="fnGetData"></div>
</template>
</van-search>
<van-cell-group
v-for="(item, index) in list"
:key="index"
class="mt-10"
@click="
$router.push({
path: '/mobile/risk_point/checklist',
query: {
IDENTIFICATIONPARTS_ID: item.IDENTIFICATIONPARTS_ID,
},
})
"
>
<van-cell>
<template #title>
<div style="color: var(--van-cell-text-color)">
部位名称{{ item.PARTSNAME }}
</div>
</template>
<template #value>
<div style="font-size: 12px">
<span
v-if="item.LEVELID === 'levelD'"
class="background-blue p-5"
>
低风险/D级
</span>
<span
v-else-if="item.LEVELID === 'levelC'"
class="background-yellow p-5"
>
一般风险/C级
</span>
<span
v-else-if="item.LEVELID === 'levelB'"
class="background-orange p-5"
>
较大风险/B级
</span>
<span
v-else-if="item.LEVELID === 'levelA'"
class="background-red p-5"
>
重大风险/A级
</span>
</div>
</template>
</van-cell>
<van-cell>
<div class="tl">风险点单元{{ item.RISKUNITNAME }}</div>
<div class="tl">管控部门{{ item.DEPT_NAME }}</div>
</van-cell>
</van-cell-group>
</van-tab>
<van-tab title="风险分布" name="2" class="tags-view-container">
<van-search
v-model="searchForm.KEYWORDS"
show-action
:clearable="false"
placeholder="请输入搜索关键词"
@search="fnGetData"
>
<template #action>
<div @click="fnGetData"></div>
</template>
</van-search>
<van-cell-group
v-for="(item, index) in list"
:key="index"
class="mt-10"
@click="
$router.push({
path: '/mobile/risk_point/hidden_danger_view',
query: {
IDENTIFICATIONPARTS_ID: item.IDENTIFICATIONPARTS_ID,
},
})
"
>
<van-cell>
<template #title>
<div style="color: var(--van-cell-text-color)">
部位名称{{ item.PARTSNAME }}
</div>
</template>
<template #value>
<div style="font-size: 12px">
<span
v-if="item.LEVELID === 'levelD'"
class="background-blue p-5"
>
低风险/D级
</span>
<span
v-else-if="item.LEVELID === 'levelC'"
class="background-yellow p-5"
>
一般风险/C级
</span>
<span
v-else-if="item.LEVELID === 'levelB'"
class="background-orange p-5"
>
较大风险/B级
</span>
<span
v-else-if="item.LEVELID === 'levelA'"
class="background-red p-5"
>
重大风险/A级
</span>
</div>
</template>
</van-cell>
<van-cell>
<div class="tl">风险点单元{{ item.RISKUNITNAME }}</div>
<div class="tl">管控部门{{ item.DEPT_NAME }}</div>
</van-cell>
</van-cell-group>
</van-tab>
</van-tabs>
</div>
</template>
@ -51,9 +141,11 @@
import { getRiskPointList } from "@/request/mobile.js";
import { useRoute } from "vue-router";
import useListData from "@/assets/js/useListData.js";
import { ref } from "vue";
const route = useRoute();
const { RISKUNIT_ID } = route.query;
const tabsActive = ref("1");
const { list, fnGetData, searchForm } = useListData(getRiskPointList, {
otherParams: {
RISK_UNIT_ID: RISKUNIT_ID,
@ -71,4 +163,23 @@ const { list, fnGetData, searchForm } = useListData(getRiskPointList, {
margin-top: 0;
}
}
.background-blue {
background-color: #3b3bff;
color: #fafafa;
}
.background-yellow {
background-color: #ddee33;
color: #1d1e23;
}
.background-orange {
background-color: #de9004;
color: #fafafa;
}
.background-red {
background-color: #ff0000;
color: #fafafa;
}
</style>

View File

@ -1,9 +1,133 @@
<template>
<inspection-record path="/mobile/risk_point/hidden_danger_view" />
<div class="mobile">
<van-cell-group v-for="(item, index) in list" :key="index" class="mt-10">
<van-cell title="存在风险" :label="item.RISK_DESCR" />
<van-cell title="检查内容">
<template #label>
{{ item.CHECK_CONTENT }}
<van-checkbox-group
:model-value="item.ISNORMAL"
direction="horizontal"
>
<van-checkbox :name="0">合格</van-checkbox>
<van-checkbox :name="1" checked-color="red"> 不合格 </van-checkbox>
<van-icon
v-if="item.ISNORMAL.includes(1)"
name="info-o"
color="blue"
@click="
$router.push({
path,
query: { HIDDEN_ID: item.HIDDEN_ID },
})
"
/>
</van-checkbox-group>
</template>
</van-cell>
</van-cell-group>
<div id="map_container" style="width: 100%; height: 500px" />
<van-cell-group>
<van-cell title="检查人" :value="info.USERS" />
<van-cell title="检查部位" :value="info.PARTSNAME" />
<van-cell title="检查时间" :value="info.CHECK_TIME" />
</van-cell-group>
</div>
</template>
<script setup>
import InspectionRecord from "../identifying_parts/inspection_record.vue";
import { onBeforeUnmount, onMounted, ref } from "vue";
import {
getRiskPointGoEditWeui,
getInspectionRecordMapInfo,
} from "@/request/mobile.js";
import { useRoute } from "vue-router";
defineProps({
path: {
type: String,
default: "/mobile/risk_point/hidden_danger_view",
},
});
const _50 = new URL("/src/assets/images/map/50.png", import.meta.url).href;
const _h = new URL("/src/assets/images/map/h.png", import.meta.url).href;
let mapInstance;
const route = useRoute();
const { CHECKRECORD_ID, IDENTIFICATIONPARTS_ID } = route.query;
const info = ref({});
const list = ref([]);
const fnGetData = async () => {
const resData = await getRiskPointGoEditWeui({
IDENTIFICATIONPARTS_ID,
CHECKRECORD_ID,
});
for (let i = 0; i < resData.varList.length; i++) {
resData.varList[i].ISNORMAL = [resData.varList[i].ISNORMAL];
}
resData.pd.PARTSNAME = resData.idData?.PARTSNAME;
info.value = resData.pd;
list.value = resData.varList;
};
const fnGetDataMap = async () => {
const resData = await getInspectionRecordMapInfo({
CHECKRECORD_ID,
loading: false,
});
fnMapInit(resData.cinfo.LONGITUDE, resData.cinfo.LATITUDE, resData);
};
const fnMapInit = (LONGITUDE, LATITUDE, resData) => {
mapInstance = new window.BMapGL.Map("map_container");
mapInstance.centerAndZoom(
new window.BMapGL.Point(
LONGITUDE || "116.3972282409668",
LATITUDE || "39.90960456049752"
),
16
);
mapInstance.enableScrollWheelZoom(true);
fnAddPoint(resData);
};
onMounted(async () => {
await fnGetData();
await fnGetDataMap();
});
const fnAddPoint = (resData) => {
for (let i = 0; i < resData.varList.length; i++) {
const myIcon = new window.BMapGL.Icon(_50, new window.BMapGL.Size(23, 25));
const pt = new window.BMapGL.Point(
resData.varList[i].LONGITUDE,
resData.varList[i].LATITUDE
);
const marker = new window.BMapGL.Marker(pt, {
icon: myIcon,
});
mapInstance.addOverlay(marker);
}
for (let i = 0; i < resData.hdList.length; i++) {
const myIcon = new window.BMapGL.Icon(_h, new window.BMapGL.Size(23, 25));
const pt = new window.BMapGL.Point(
resData.hdList[i].LONGITUDE,
resData.hdList[i].LATITUDE
);
const marker = new window.BMapGL.Marker(pt, {
icon: myIcon,
});
mapInstance.addOverlay(marker);
}
const myIcon4 = new window.BMapGL.Icon(_50, new window.BMapGL.Size(23, 25));
const pt4 = new window.BMapGL.Point(
resData.checkrecord.LONGITUDE,
resData.checkrecord.LATITUDE
);
const marker4 = new window.BMapGL.Marker(pt4, {
icon: myIcon4,
});
mapInstance.addOverlay(marker4);
};
onBeforeUnmount(() => {
mapInstance && mapInstance.destroy();
mapInstance = null;
});
</script>
<style scoped></style>

40
src/pinia/tagsView.js Normal file
View File

@ -0,0 +1,40 @@
import { defineStore } from "pinia";
export const useTagsViewStore = defineStore("useTagsViewStore", {
state() {
return {
tagsViewList: [],
};
},
getters: {
getTagsViewList: (state) => state.tagsViewList,
},
actions: {
addTagsView(tabItem) {
const row = this.tagsViewList.find((v) => v.path === tabItem.path);
if (!row) this.tagsViewList.push(tabItem);
},
removeTagsView(path, isCurrent, callback) {
if (isCurrent) {
this.tagsViewList.forEach((item, index) => {
if (item.path === path) {
const navIndex =
this.tagsViewList[index + 1] || this.tagsViewList[index - 1];
if (navIndex) callback(navIndex.path);
}
});
}
this.tagsViewList = this.tagsViewList.filter((v) => v.path !== path);
},
closeOtherTagsView(path) {
this.tagsViewList = this.tagsViewList.filter((item) => {
return item.meta.noClosable || item.path === path;
});
},
closeAllTagsView() {
this.tagsViewList = this.tagsViewList.filter((item) => {
return item.meta.noClosable;
});
},
},
});

View File

@ -3,14 +3,24 @@ import { defineStore } from "pinia";
export const useUserStore = defineStore("userStore", {
state: () => ({
userInfo: {},
videoPlayVerify: false,
qyRegister: true,
}),
getters: {
getUserInfo: (state) => state.userInfo,
getVideoPlayVerify: (state) => state.videoPlayVerify,
getQyRegister: (state) => state.qyRegister,
},
actions: {
setUserInfo(userInfo) {
this.userInfo = userInfo;
},
setVideoPlayVerify(val) {
this.videoPlayVerify = val;
},
setQyRegister(val) {
this.qyRegister = val;
},
},
persist: {
storage: window.sessionStorage,

View File

@ -1,5 +1,14 @@
import { post } from "@/request/axios.js";
export const getPreviewDataStatisticsData = (params) =>
post("/positAlarm/previewDataStatisticsOfPersonnelLocationAlarms", params); // 告警记录首页统计
export const getAggregationAlarmAreaStatisticsData = (params) =>
post("/positAlarm/aggregationAlarmAreaStatisticsV2", params); // 聚集告警区域统计
export const getStatisticsAreCollectedBasedOnTheAlarmTypeData = (params) =>
post("/positAlarm/statisticsAreCollectedBasedOnTheAlarmTypeV2", params); // 告警类型占比情况
export const getAlarmDataYearData = (params) =>
post("/positAlarm/alarmDataYearV2", params); // 按照告警类型 数据统计
export const getGatheringAlarmRecordsList = (params) =>
post("/positAlarm/getAlarmRecordList", params); // 聚集告警记录列表
export const getGatheringAlarmRecordViewList = (params) =>

View File

@ -4,6 +4,8 @@ export const getOtherAlarmConfigurationsList = (params) =>
post("/positAlarm/electronicFence/list", params); // 其他告警配置列表
export const getOtherAlarmConfigurationsView = (params) =>
post("/positAlarm/electronicFenceGoEdit", params); // 其他告警配置查看
export const getJjAlarmConfigurationsView = (params) =>
post("/positAlarm/electronicFenceJjGoEdit", params); // 聚集告警配置查看
export const setOtherAlarmConfigurationsDelete = (params) =>
post("/positAlarm/electronicFenceDelete", params); // 其他告警配置删除
export const setOtherAlarmConfigurationsDeactivateOrEnable = (params) =>

View File

@ -1,12 +1,18 @@
import { post, upload } from "./axios";
export const Login = (params) => post("/admin/check", params); // 登录
export const setResetPwd = (params) => post("/admin/resetPwd", params); // 登录
export const getVerificationImage = (params) =>
post("/app/getImages/loginImages", params); // 登录
export const logout = (params) => post("/main/logout", params); // 退出登录
export const getAsyncRouter = (params) => post("/main/index", params); // 获取动态路由
export const getAllAppVersion = (params) =>
post("/app/versionmanager/getAllAppVersion", params); // 获取动态路由
export const getHasMenu = (params) =>
post("/head/hasMenu", { loading: false, ...params }); // 获取有没有权限访问路由
export const getNavList = (params) => post("/head/getNavList", params);
export const getUserInfo = (params) => post("/user/goEditMyInfo", params); // 获取用户信息
export const setUserInfo = (params) => post("/user/editUserOwn", params); // 修改用户信息
export const getVerifyDuplicateEmail = (params) =>
@ -30,3 +36,6 @@ export const setVideo = (params) =>
post("/app/audioOrVideo/createUploadVideo", params); // 阿里云上传视频
export const setVideoRefresh = (params) =>
post("/app/audioOrVideo/refreshUploadVideo", params); // 阿里云上传视频刷新凭证
export const getRydyWebsiteStatus = (params) =>
post("/corpplsinfo/refreshWebsiteStatus", params); // 刷新并获取定位系统状态

View File

@ -2,8 +2,32 @@ import axios from "axios";
import { ElLoading, ElMessage } from "element-plus";
import router from "../router";
import QS from "qs";
import CryptoJS from "crypto-js";
let loading = null;
function encryption(params) {
const Timestamp = new Date().getTime();
const reqData = {
...params,
};
const keys = Object.keys(reqData).sort();
const sortData = {};
for (let i = 0; i < keys.length; i++) {
if (reqData[keys[i]] !== null) {
sortData[keys[i]] = reqData[keys[i]];
}
}
const Sign = CryptoJS.MD5(
Timestamp +
JSON.stringify(sortData) +
"ab934679413c0fff22bb846365e14e00d8c504294760d21d660490bd43a69a90"
).toString();
return {
Sign,
Timestamp,
};
}
function startLoading() {
loading = ElLoading.service({
@ -74,10 +98,13 @@ axios.interceptors.response.use(
export function post(url, params) {
return new Promise((resolve, reject) => {
const { Timestamp, Sign } = encryption(params);
axios
.post(url, QS.stringify(params), {
headers: {
"Content-Type": "application/x-www-form-urlencoded",
Timestamp,
Sign,
},
})
.then((res) => {

View File

@ -28,9 +28,9 @@ export const getCameraAlarmSourceCount = (params) =>
export const getAiWarningList = (params) =>
post(
"/aiwarning/list?currentPage=" +
params.currentPage +
"&showCount=" +
params.showCount,
params.currentPage +
"&showCount=" +
params.showCount,
params
); // ai报警列表
export const getCameraTopToShow = (params) =>

View File

@ -0,0 +1,29 @@
import { post } from "@/request/axios.js";
export const getCheckTaskList = (params) =>
post("/speCheck/getCheckTask", params); // 专项检查任务列表
export const getCheckSourceList = (params) =>
post("/speCheck/getCheckSourceList", params); // 专项检查危险源
export const getSyncCheckTaskList = (params) =>
post("/speCheck/syncTaskNow", params); // 专项检查任务立即同步
export const getCheckItemList = (params) =>
post("/speCheck/getCheckItem", params); // 专项检查任务项
export const getCheckScoreList = (params) =>
post("/speCheck/getCheckScore", params); // 获取扣分项
export const getRecordInfoView = (params) =>
post("/speCheck/getRecordInfo", params); // 获取检查记录
export const saveSpeCheckHidden = (params) =>
post("/speCheck/saveSpeCheckHidden", params); // 新增隐患上报
export const editSpeCheckHidden = (params) =>
post("/speCheck/editSpeCheckHidden", params); // 修改隐患上报
export const editReceiveCheckRecordList = (params) =>
post("/speCheck/editReceiveCheckRecordList", params); // 修改上报记录
export const receiveCheckRecordList = (params) =>
post("/speCheck/receiveCheckRecordList", params); // 上报检查情况记录
export const reportCurrentRecord = (params) =>
post("/speCheck/reportCurrentRecord", params); // 上报当前记录
export const getHiddenInfo = (params) =>
post("/speCheck/getHiddenInfo", params); // 隐患记录

View File

@ -3,6 +3,8 @@ import { post, upload } from "@/request/axios.js";
export const getLedgerList = (params) => post("/limitspace/list", params); // 台账列表
export const setLedgerImport = (params) =>
upload("/limitspace/readExcel2", params); // 台账导入
export const setLedgerAdd = (params) => post("/limitspace/add", params); // 台账添加
export const setLedgerEdit = (params) => post("/limitspace/edit", params); // 台账修改
export const setLedgerAdd = (params) => upload("/limitspace/add", params); // 台账添加
export const setLedgerEdit = (params) => upload("/limitspace/edit", params); // 台账修改
export const setLedgerDelete = (params) => post("/limitspace/delete", params); // 台账删除
export const setLedgerBatchDelete = (params) =>
post("/limitspace/deleteAll", params); // 台账批量删除

View File

@ -0,0 +1,14 @@
import { post, upload } from "@/request/axios.js";
export const getDoublePreventionList = (params) =>
post("/prevention/list", params); // 双重预防评估列表
export const getDoublePreventionView = (params) =>
post("/prevention/goEdit", params); // 双重预防评估查看
export const setDoublePreventionDelete = (params) =>
post("/prevention/delete", params); // 双重预防评估删除
export const setDoublePreventionDeleteBatch = (params) =>
post("/prevention/deleteAll", params); // 双重预防评估批量删除
export const setDoublePreventionAdd = (params) =>
upload("/prevention/add", params); // 双重预防评估添加
export const setDoublePreventionEdit = (params) =>
upload("/prevention/edit", params); // 双重预防评估修改

View File

@ -49,3 +49,9 @@ export const getTemporaryElectricityUsageView = (params) =>
post("/electricity/findById", params);
export const getTemporaryElectricityUsageFlow = (params) =>
post("/electricity/getFlowList", params);
// 删除作业票
export const setEightWorkRemove = (params) =>
post("/eightWork/removeWorkById", params);
// 作废作业票
export const setEightWorkInvalid = (params) =>
post("/eightWork/invalidWorkById", params);

View File

@ -1,5 +1,8 @@
import { post, upload } from "@/request/axios";
export const getEmergencyIndexData = (params) =>
post("/emergencyteam/emergencyIndex", params); // 应急预案首页
export const getEmergencyPlanManagementList = (params) =>
post("/emergencyplan/list", params); // 应急预案管理列表
export const getEmergencyPlanManagementView = (params) =>
@ -24,6 +27,7 @@ export const setEmergencyEquipmentManagementEdit = (params) =>
post("/emergencyequipment/edit", params); // 应急装备管理修改
export const setEmergencyEquipmentManagementAdd = (params) =>
post("/emergencyequipment/add", params); // 应急装备管理添加
export const getEmergencyRescueTeamManagementList = (params) =>
upload("/emergencyteam/list", params); // 应急救援队伍管理列表
export const getEmergencyRescueTeamManagementView = (params) =>
@ -36,6 +40,38 @@ export const setEmergencyRescueTeamManagementEdit = (params) =>
post("/emergencyteam/edit", params); // 应急救援队伍管理修改
export const setEmergencyRescueTeamManagementAdd = (params) =>
post("/emergencyteam/add", params); // 应急救援队伍管理添加
export const getEmergencyNewTeamManagementList = (params) =>
upload("/emergencynewteam/list", params); // 应急队伍管理列表
export const getEmergencyNewTeamManagementView = (params) =>
post("/emergencynewteam/goEdit", params); // 应急队伍管理查看
export const setEmergencyNewTeamManagementDelete = (params) =>
post("/emergencynewteam/delete", params); // 应急队伍管理删除
export const setEmergencyNewTeamManagementDeleteMultiple = (params) =>
post("/emergencynewteam/deleteAll", params); // 应急队伍管理删除多选
export const setEmergencyNewTeamManagementAdd = (params) =>
post("/emergencynewteam/add", params); // 应急队伍管理添加
export const setEmergencyNewTeamManagementGet = (params) =>
post("/emergencynewteam/getById", params); // 应急队伍管理查询总指挥队伍
export const setEmergencyNewTeamManagementGetE = (params) =>
post("/emergencynewteam/getEById", params); // 应急队伍管理查询领导
export const setEmergencyNewTeamManagementGetS = (params) =>
post("/emergencynewteam/getSById", params); // 应急队伍管理查询组员
export const setEmergencyNewTeamManagementAddE = (params) =>
post("/emergencynewteam/addE", params); // 应急队伍管理新增领导
export const setEmergencyNewTeamManagementAddS = (params) =>
post("/emergencynewteam/addS", params); // 应急队伍管理新增组员
export const setEmergencyNewTeamManagementDeleteItem = (params) =>
post("/emergencynewteam/deleteItem", params); // 应急队伍管理删除
export const setEmergencyNewTeamManagementDeleteItemMultiple = (params) =>
post("/emergencynewteam/deleteItemAll", params); // 应急队伍管理删除多选
export const setEmergencyTeamManagementEditS = (params) =>
post("/emergencynewteam/editS", params); // 应急救援队伍管理修改
export const setEmergencyTeamManagementEditE = (params) =>
post("/emergencynewteam/editE", params); // 应急救援队伍管理修改
export const setEmergencyTeamManagementEdit = (params) =>
post("/emergencynewteam/edit", params); // 应急救援队伍管理修改
export const getEmergencyDrillManagementList = (params) =>
upload("/emergencydrillbasic/list", params); // 应急演练管理列表
export const setEmergencyDrillManagementDelete = (params) =>

View File

@ -0,0 +1,14 @@
import { post, upload } from "@/request/axios.js";
export const getEvaluationReportList = (params) =>
post("/evaluation/list", params); // 动态评估报告列表
export const getEvaluationReportView = (params) =>
post("/evaluation/goEdit", params); // 动态评估报告查看
export const setEvaluationReportDelete = (params) =>
post("/evaluation/delete", params); // 动态评估报告删除
export const setEvaluationReportDeleteBatch = (params) =>
post("/evaluation/deleteAll", params); // 动态评估报告批量删除
export const setEvaluationReportAdd = (params) =>
upload("/evaluation/add", params); // 动态评估报告添加
export const setEvaluationReportEdit = (params) =>
post("/evaluation/edit", params); // 动态评估报告修改

View File

@ -1,5 +1,15 @@
import { post, upload } from "@/request/axios.js";
export const getStudyIndexData = (params) =>
post("/studytask/studyIndex", params); // 首页统计
export const getTrainingIndexData = (params) =>
post("/studytask/trainingIndex", params); // 首页统计->培训计划
export const getPostTypeIndexData = (params) =>
post("/studytask/postTypeIndex", params); // 首页统计->岗位培训类型统计
export const getStudyStartIndexData = (params) =>
post("/studytask/getStudyStartIndexData", params); // 首页统计->学习之星
export const getPersonnelTaskDetailsList = (params) =>
post("/studytask/userlist", params); // 一人一档任务详情列表
export const getStudyTaskCoursewareList = (params) =>

View File

@ -0,0 +1,43 @@
import { post } from "@/request/axios.js";
export const getGateMachineAreaList = (params) =>
post("/gateMachineArea/list", params); // 列表
export const setGateMachineAreaSave = (params) =>
post("/gateMachineArea/add", params); // 新增
export const setGateMachineAreaRemove = (params) =>
post("/gateMachineArea/delete", params); // 删除多选
export const getGateMachineAreaView = (params) =>
post("/gateMachineArea/goEdit", params); // 查看
export const setGateMachineAreaData = (params) =>
post("/gateMachineArea/edit", params); // 修改
export const getGateMachineList = (params) =>
post("/gateMachineAreaGate/list", params); // 闸机列表
export const setGateMachineSave = (params) =>
post("/gateMachineAreaGate/add", params); // 闸机新增
export const setGateMachineRemove = (params) =>
post("/gateMachineAreaGate/delete", params); // 闸机删除多选
export const getGateMachineView = (params) =>
post("/gateMachineAreaGate/goEdit", params); // 闸机查看
export const setGateMachineEdit = (params) =>
post("/gateMachineAreaGate/edit", params); // 闸机修改
export const getGateMachineInit = (params) =>
post("/gateMachineAreaGate/initGateMachine", params);
export const getgetPeopleAndVehiclesRecordData = (params) =>
post("/gateMachineEntryExitLog/getPeopleAndVehiclesRecord", params); // 人、车 首页进出记录
export const getEntryExitPeoLogList = (params) =>
post("/gateMachineEntryExitLog/peoList", params); // 人进出记录
export const getEntryExitCarLogList = (params) =>
post("/gateMachineEntryExitLog/carList", params); // 车进出记录
export const getBIPeopleFieldCondition = () =>
post("/gateMachineEntryExitLog/getBIPeopleFieldCondition");
export const getBIEntryExitPeoLogList = (params) =>
post("/gateMachineEntryExitLog/getBIEntryExitPeoLogList", params); // BI人员闸机记录
export const getBIEntryExitCarLogList = (params) =>
post("/gateMachineEntryExitLog/getBIEntryExitCarLogList", params); // BI人员闸机记录
export const getGateMachineCountByCid = (params) =>
post("/gateMachineEntryExitLog/getGateMachineCountByCid", params); // bi 页上统计闸机数量

View File

@ -12,6 +12,8 @@ export const setInventoryManagementBatchDeleteTemporary = (params) =>
post("/listmanager/deleteAlltemp", params); // 清单管理批量删除临时清单
export const setInventoryManagementBatchDelete = (params) =>
post("/listmanager/deleteAll", params); // 清单管理批量删除
export const setInventoryManagementBatchDeleteThorough = (params) =>
post("/listmanager/deleteAllthorough", params); // 清单管理彻底删除
export const getInventoryManagementRouteView = (params) =>
post("/listmanager/getRoute", params); // 清单管理查看巡检路线
export const setInventoryManagementRoute = (params) =>
@ -106,6 +108,8 @@ export const setDeleteCustomRecovery = (params) =>
post("/customStop/restore", params); // 删除清单管理恢复
export const setCustomBatchDelete = (params) =>
post("/customStop/deleteAll", params); // 清单管理批量删除
export const setCustomBatchDeleteThorough = (params) =>
post("/customStop/deleteAllthorough", params); // 清单管理彻底删除
export const getCustomStopView = (params) => post("/customStop/goEdit", params); // 清单管理查看
export const getCustomCheckRecordList = (params) =>
post("/customCheckrecord/list", params); // 隐患清单排查列表
@ -130,3 +134,5 @@ export const setCustomInsuranceCoverageSave = (params) =>
post("/hiddenstandardCustom/saveBaoBaoType", params); // 清单管理设置包保责任类型提交
export const getCustomCheckListOtherHiddenList = (params) =>
post("/customHidden/getCheckHidden", params); // 隐患清单检查情况检查记录查看其它隐患列表
export const getDictionaries = (params) => post("/dictionaries/goEdit", params); // 获取数据字典

View File

@ -21,3 +21,14 @@ export const getCalendarAdd = (params) => post("/schedule/add", params); // 日
export const getCalendarEdit = (params) => post("/schedule/edit", params); // 日历修改
export const getWorkReminder = (params) =>
post("/listmanager/checkListIndex", params); // 工作提醒
export const getCheckListCount = (params) =>
post("/listmanager/checkListCount", params); // 首页清单统计
export const getCheckListCountByPeriod = (params) =>
post("/listmanager/checkListCountByPeriod", params); // 首页清单统计
export const getEightWorkCount = (params) =>
post("/eightWork/eightWorkIndex", params); // 首页八项作业统计
export const getInspectionCheckCount = (params) =>
post("/safetyenvironmental/inspectionIndex", params); // 首页八项作业统计

View File

@ -1,5 +1,8 @@
import { post, upload } from "@/request/axios.js";
export const getDangerSourceIndexData = (params) =>
post("/majordangersource/dangerSourceIndex", params); // 重大危险源首页统计
export const getMajorHazardManagementList = (params) =>
post("/majordangersource/list", params); // 重大危险源管理列表
export const setMajorHazardManagementDelete = (params) =>

View File

@ -1,6 +1,7 @@
import { post } from "./axios";
export const getPing = (params) => post("/head/ping", params); // 保活
export const getBiMapModelType = (params) => post("/head/ping", params); // 保活
export const getRealTimeList = (params) => post("/map/getRealTimeList", params); // 获取在线人员列表
export const getFenceList = (params) => post("/map/getFenceList", params); // 获取围栏列表
export const getFenceInfo = (params) => post("/map/getFenceListInfo", params); // 获取围栏详情
@ -19,8 +20,12 @@ export const getHotworkList = (params) => post("/map/getHotworkList", params);
export const getEightWorksByType = (params) =>
post("/map/getEightWorksByType", params);
export const getCameraList = (params) => post("/map/getCameraList", params);
export const getGateMachineList = (params) =>
post("/map/getGateMachineList", params);
export const getConfinedspaceWorkList = (params) =>
post("/map/getConfinedspaceWorkList", params);
export const getHighWorkList = (params) => post("/map/getHighWorkList", params);
// 地图上获取电子围栏下人数
export const getPeopleCountByLayId = (params) =>
post("/map/getElectronicFencePerCount", params);

View File

@ -14,6 +14,8 @@ export const getInspectionRecordMapInfo = (params) =>
post("/app/checkrecord/goMapWeui", params); // 检查记录地图
export const geHiddenDangerView = (params) =>
post("/app/hidden/goEditWeui", params); // 隐患详情
export const getRiskPointList = (params) => post("/app/riskpoint/list", params); // 风险点单元列表
export const getRiskPointList = (params) => post("/app/riskpoint/list", params); // 风险点单元列表检查记录的list页面
export const getRiskPointCheckList = (params) =>
post("/app/checkrecord/recordByIde", params); // 风险点单元检查清单列表
export const getRiskPointGoEditWeui = (params) =>
post("/app/checkrecord/goEditWeui", params); // 风险点隐患详情

View File

@ -1,5 +1,7 @@
import { post, upload } from "@/request/axios.js";
export const getVideocourSewareCountIndexList = (params) =>
post("/videocourseware/getCountIndex", params); // 首页展示
export const getVideoCoursewareList = (params) =>
post("/videocourseware/list", params); // 视频课件维护列表
export const getVideoCoursewareView = (params) =>

Some files were not shown because too many files have changed in this diff Show More