diff --git a/components.d.ts b/components.d.ts index 81659ca..f2778c5 100644 --- a/components.d.ts +++ b/components.d.ts @@ -7,8 +7,12 @@ export {} declare module '@vue/runtime-core' { export interface GlobalComponents { + 2: typeof import('./src/components/alarm copy 2.vue')['default'] + Alarm: typeof import('./src/components/alarm.vue')['default'] BatchImp: typeof import('./src/components/batch-imp.vue')['default'] + copy: typeof import('./src/components/alarm copy.vue')['default'] Countup: typeof import('./src/components/countup.vue')['default'] + DeviceInfo: typeof import('./src/components/deviceInfo.vue')['default'] ElAvatar: typeof import('element-plus/es')['ElAvatar'] ElButton: typeof import('element-plus/es')['ElButton'] ElButtonGroup: typeof import('element-plus/es')['ElButtonGroup'] @@ -46,6 +50,7 @@ declare module '@vue/runtime-core' { RouterLink: typeof import('vue-router')['RouterLink'] RouterView: typeof import('vue-router')['RouterView'] Sidebar: typeof import('./src/components/sidebar.vue')['default'] + StudentInfo: typeof import('./src/components/studentInfo.vue')['default'] TableCustom: typeof import('./src/components/table-custom.vue')['default'] TableDetail: typeof import('./src/components/table-detail.vue')['default'] TableEdit: typeof import('./src/components/table-edit.vue')['default'] diff --git a/src/assets/audio/alarm.mp3 b/src/assets/audio/alarm.mp3 new file mode 100644 index 0000000..595d3b5 Binary files /dev/null and b/src/assets/audio/alarm.mp3 differ diff --git a/src/assets/css/main.css b/src/assets/css/main.css index 985595e..c1f7db9 100644 --- a/src/assets/css/main.css +++ b/src/assets/css/main.css @@ -80,6 +80,18 @@ i { padding-bottom: 0; } +.el-dialog__body { + overflow: hidden; +} + +.el-dialog__body img { + width: 100%; +} + +.el-icon--close-tip { + display: none !important; +} + [hidden] { display: none !important; } diff --git a/src/components/alarm.vue b/src/components/alarm.vue new file mode 100644 index 0000000..7aa484f --- /dev/null +++ b/src/components/alarm.vue @@ -0,0 +1,246 @@ + + + + + diff --git a/src/components/deviceInfo.vue b/src/components/deviceInfo.vue new file mode 100644 index 0000000..37d02e9 --- /dev/null +++ b/src/components/deviceInfo.vue @@ -0,0 +1,165 @@ + + + + + diff --git a/src/components/table-edit.vue b/src/components/table-edit.vue index bec06ab..44ece3f 100644 --- a/src/components/table-edit.vue +++ b/src/components/table-edit.vue @@ -46,11 +46,10 @@ - - - +
+ 取 消 保 存 - +
@@ -78,7 +77,7 @@ const { options, formData, edit, update } = defineProps({ }, }); -const emit = defineEmits(["cancel"]); +const emit = defineEmits(["close"]); const form = ref({ ...(edit ? formData : {}) }); @@ -126,4 +125,8 @@ const handleAvatarSuccess: UploadProps["onSuccess"] = (response, uploadFile) => height: 178px; text-align: center; } +.btns { + display: flex; + justify-content: flex-end; +} diff --git a/src/utils/mapCustom.js b/src/utils/mapCustom.js index 62d34da..4b7ba7d 100644 --- a/src/utils/mapCustom.js +++ b/src/utils/mapCustom.js @@ -32,6 +32,47 @@ export class MapCustom { }); }); } + + track(list) { + let markerList = [] + let lineArr = list.map((item) => [item.lng, item.lat]) + + const newIcon = this.map.icon({ + size: new AMap.Size(50, 50), + image: require('../../../assets/location.png'), // Icon的图像 + imageSize: new AMap.Size(50, 50) + }) + + list.forEach((item, index) => { + let marker = this.map.marker({ + position: this.map.lngLat(item.lng, item.lat), + icon: newIcon, // 添加 Icon 图标 URL + offset: new AMap.Pixel(-25, -50) + }) + + marker.setMap(this.map) + markerList.push(marker) + marker.on('click', () => { + this.studentInfo = item + this.InfoWindow = this.map.infoWindow({ + anchor: 'bottom-center', + isCustom: true, //使用自定义窗体 + content: document.querySelector('.infoBox'), + offset: new AMap.Pixel(0, -90) + }) + this.InfoWindow.open(this.map, marker.getPosition()) + }) + }) + this.map.polyline({ + map: this.map, + path: lineArr, + showDir: true, + strokeColor: '#28F', //线颜色 + strokeWeight: 6 //线宽 + }) + + } + clearMap() { this.map.clearMap(); } diff --git a/src/views/incidentDispose/index.vue b/src/views/incidentDispose/index.vue index 8b338fa..f689c6d 100644 --- a/src/views/incidentDispose/index.vue +++ b/src/views/incidentDispose/index.vue @@ -31,11 +31,11 @@
设备序号:05
-
设备SN号:860116079430636
+
IMEI号:860116079430636
告警时间:2025/03/26 18:33:32
-
告警类型:体表温度过低
-
绑定关联人名称:管理员
-
绑定关联人警号:欧尼蒋
+
告警类型:体表温度过低
+
绑定关联人名称:张三
+
绑定关联人警号:123456
现在状态:禁用
紧急电话:10000000000
隶属辖区:87
diff --git a/src/views/monitoringCenter/deviceInfo.vue b/src/views/monitoringCenter/deviceInfo.vue index 0c8f28d..2d52f69 100644 --- a/src/views/monitoringCenter/deviceInfo.vue +++ b/src/views/monitoringCenter/deviceInfo.vue @@ -10,7 +10,7 @@
- + +
@@ -131,4 +159,13 @@ } } } +.demo-rich-conent { + display: flex; + flex-direction: column; + .lable { + display: inline-block; + width: 90px; + text-align: right; + } +} diff --git a/src/views/statisticalCenter/emergencyList.vue b/src/views/statisticalCenter/emergencyList.vue index f49993c..95a5b9e 100644 --- a/src/views/statisticalCenter/emergencyList.vue +++ b/src/views/statisticalCenter/emergencyList.vue @@ -3,7 +3,7 @@
内容数据
- +
diff --git a/src/views/synthesizeManage/areaManage/index.vue b/src/views/synthesizeManage/areaManage/index.vue index 5a69a6c..03a8e39 100644 --- a/src/views/synthesizeManage/areaManage/index.vue +++ b/src/views/synthesizeManage/areaManage/index.vue @@ -37,6 +37,7 @@ import TableSearch from "@/components/table-search.vue"; import AddFence from "./addFence.vue"; import { TableItem } from "@/types/table"; import { FormOptionList } from "@/types/form-option"; +import Alarm from "@/components/alarm.vue"; // 查询相关 const query = reactive({ diff --git a/src/views/synthesizeManage/deviceManage/index.vue b/src/views/synthesizeManage/deviceManage/index.vue index 5ef0c33..d9db4d6 100644 --- a/src/views/synthesizeManage/deviceManage/index.vue +++ b/src/views/synthesizeManage/deviceManage/index.vue @@ -4,32 +4,79 @@
- + + + + + + + + + 关机 + + + + + 重启 + + + + + + + + 获取实时定位 + + + + + 恢复出厂 + + + + + + + + + + + + + + + + + + + + + + + @@ -79,6 +126,9 @@ let columns = ref([ { prop: "money", label: "绑定警察名称" }, { prop: "thumb", label: "绑定警察账户" }, { prop: "state", label: "当前状态" }, + { prop: "state", label: "当前模式" }, + { prop: "state", label: "电量" }, + { prop: "state", label: "版本号" }, { prop: "state", label: "登录时间" }, { prop: "state", label: "最近使用时间" }, { prop: "state", label: "关联辖区编号" }, @@ -89,6 +139,11 @@ const page = reactive({ size: 10, total: 200, }); +const controlForm = reactive({ + pattern: "", + location: "", +}); + const tableData = ref([]); const getData = async () => { const res = await fetchData(); @@ -101,6 +156,7 @@ const changePage = (val: number) => { getData(); }; +const visible1 = ref(false); const visible = ref(false); const isEdit = ref(false); const rowData = ref({}); @@ -111,13 +167,24 @@ const handleAdd = () => { }; // 编辑 -const handleEdit = (row: TableItem) => { +const handleEdit = (row?: TableItem) => { // rowData.value = { ...row }; TableEditOptions.value.list = editOp; isEdit.value = true; visible.value = true; }; - +const handelControl = (type: number) => { + if (type < 4) { + ElMessageBox.confirm("确定要关机吗?", "提示", { + type: "warning", + }) + .then(async () => { + // ElMessage.success("删除成功"); + }) + .catch(() => {}); + } + visible1.value = false; +}; // 删除 const handelDel = (row: TableItem) => { ElMessageBox.confirm("确定要删除吗?", "提示", { diff --git a/src/views/synthesizeManage/mapLocation/index.vue b/src/views/synthesizeManage/mapLocation/index.vue index cbd6e2f..8f52daa 100644 --- a/src/views/synthesizeManage/mapLocation/index.vue +++ b/src/views/synthesizeManage/mapLocation/index.vue @@ -1,6 +1,48 @@ @@ -58,7 +74,10 @@ import handcuffs from "@/assets/img/handcuffs.png"; import { onMounted } from "vue"; import { MapCustom } from "@/utils/mapCustom"; import { ref } from "vue"; - +interface ListItem { + value: string; + label: string; +} let tabs = [ { label: "全部", value: "0" }, { label: "未处理", value: "1" }, @@ -67,8 +86,26 @@ let tabs = [ let sectionType = ref(1); let styleType = ref(1); +const list = ref([]); +const options = ref([]); +const value = ref([]); +const loading = ref(false); + //处理展示数据 const weekChange = (value: any) => {}; +const remoteMethod = (query: string) => { + if (query) { + loading.value = true; + setTimeout(() => { + loading.value = false; + options.value = list.value.filter((item) => { + return item.label.toLowerCase().includes(query.toLowerCase()); + }); + }, 200); + } else { + options.value = []; + } +}; onMounted(() => { new MapCustom({ dom: "mapcontainer" }); @@ -78,6 +115,24 @@ onMounted(() => { diff --git a/src/views/synthesizeManage/userManage/index.vue b/src/views/synthesizeManage/userManage/index.vue index f4cd9c3..3591f31 100644 --- a/src/views/synthesizeManage/userManage/index.vue +++ b/src/views/synthesizeManage/userManage/index.vue @@ -4,11 +4,11 @@