Loading src/views/videoControl/pointControl/hooks/index.js 0 → 100644 +100 −0 Original line number Diff line number Diff line import { onMounted, ref, watch } from "vue"; import request from "@/utils/request"; import { ElMessageBox } from "element-plus"; function useIndex(apis) { const visible = ref(false); const form = ref({ regionName:'' }); const list = ref([]); watch( () => visible, (newVal) => { if (newVal == false) { form.value = {}; } } ); function toView() {} function toEdit(data) { getDetail(data.id); visible.value = true; } function toAdd() { visible.value = true; } function toDel(data) { //弹框确认 ElMessageBox.confirm("是否删除该区域?").then(() => { request({ url: apis.delete + data.id, method: "delete", }).then((res) => { visible.value = false; getList(); }); }); } function getList() { request({ url: apis.list, method: "get", }).then((res) => { list.value = res.data; }); } function getDetail(id) { return request({ url: apis.detail + id, method: "get", }).then((res) => { form.value = res.data; }); } function toSubmit() { if (form.value.id) { request({ url: apis.edit, method: "put", data: form.value, }).then((res) => { visible.value = false; getList(); }); } else { request({ url: apis.add, method: "post", data: form.value, }).then((res) => { visible.value = false; getList(); }); } } function toClose() { visible.value = false; } onMounted(() => { getList(); }); return { visible, form, list, toView, toEdit, toAdd, toDel, getDetail, toClose, toSubmit, }; } export { useIndex }; src/views/videoControl/pointControl/index.scss 0 → 100644 +6 −0 Original line number Diff line number Diff line .areaNodes{ display: flex; justify-content: space-between; align-items: center; width: 100%; } No newline at end of file src/views/videoControl/pointControl/index.vue +178 −39 Original line number Diff line number Diff line Loading @@ -2,7 +2,9 @@ <div class="app-container home"> <TabTitle :text="nowText" /> <div class="add-but"> <el-button type="primary" icon="Plus" @click="handeAdd" plain>新增点位</el-button> <el-button type="primary" icon="Plus" @click="handeAdd" plain >新增点位 {{ areaManger.visible }}</el-button > </div> <el-row :gutter="10"> <el-col :xs="0" :sm="2" :md="3" :lg="4"> Loading @@ -10,7 +12,7 @@ <div class="head-container"> <el-input v-model="deptName" placeholder="请输入部门名称" placeholder="请输入" clearable prefix-icon="Search" style="margin-bottom: 20px" Loading @@ -18,8 +20,8 @@ </div> <div class="head-container"> <el-tree :data="deptOptions" :props="{ label: 'label', children: 'children' }" :data="areaManger.list" :props="{ children: 'children' }" :expand-on-click-node="false" :filter-node-method="filterNode" ref="deptTreeRef" Loading @@ -27,7 +29,38 @@ highlight-current default-expand-all @node-click="handleNodeClick" /> > <template #default="{ node, data }"> <span class="areaNodes"> <span>{{ data.label }}</span> <span> <!-- 添加dropdown --> <el-dropdown trigger="click"> <el-dropdown-link class="dropdown-link"> <el-button type="text" size="small"> <el-icon size="20" color="#333333" ><Setting /></el-icon> </el-button> </el-dropdown-link> <template #dropdown> <el-dropdown-menu> <el-dropdown-item @click="areaManger.toAdd(data)" >新增子区域</el-dropdown-item > <el-dropdown-item @click="areaManger.toEdit(data)" >编辑该区域</el-dropdown-item > <el-dropdown-item @click="areaManger.toDel(data)" >删除该区域</el-dropdown-item > </el-dropdown-menu> </template> </el-dropdown> </span> </span> </template></el-tree > </div> </el-card> </el-col> Loading @@ -53,16 +86,59 @@ </el-row> --> <el-table v-loading="loading" :data="pointList"> <el-table-column label="实况图" align="center" prop="postId" /> <el-table-column label="摄像头名称" align="center" prop="postCode" /> <el-table-column label="所属区域" align="center" prop="postName" /> <el-table-column label="推理间隔(秒)" align="center" prop="postSort" /> <el-table-column label="关联算法" align="center" prop="postSort" /> <el-table-column label="时段配置" align="center" prop="postSort" /> <el-table-column label="运行状态" align="center" prop="postSort" /> <el-table-column label="操作" width="180" align="center" class-name="small-padding fixed-width"> <el-table-column label="摄像头名称" align="center" prop="postCode" /> <el-table-column label="所属区域" align="center" prop="postName" /> <el-table-column label="推理间隔(秒)" align="center" prop="postSort" /> <el-table-column label="关联算法" align="center" prop="postSort" /> <el-table-column label="时段配置" align="center" prop="postSort" /> <el-table-column label="运行状态" align="center" prop="postSort" /> <el-table-column label="操作" width="180" align="center" class-name="small-padding fixed-width" > <template #default="scope"> <el-button link type="primary" icon="Edit" @click="handleUpdate(scope.row)" v-hasPermi="['system:post:edit']">修改</el-button> <el-button link type="primary" icon="Delete" @click="handleDelete(scope.row)" v-hasPermi="['system:post:remove']">删除</el-button> <el-button link type="primary" icon="Edit" @click="handleUpdate(scope.row)" v-hasPermi="['system:post:edit']" >修改</el-button > <el-button link type="primary" icon="Delete" @click="handleDelete(scope.row)" v-hasPermi="['system:post:remove']" >删除</el-button > </template> </el-table-column> </el-table> Loading @@ -71,13 +147,67 @@ </el-col> </el-row> <drawPoint ref="drawPointRef" /> <!-- 添加新增区域弹框 ,包含上级区域,区域名称,区域坐标,区域地址--> <el-dialog title="新增区域" v-model="areaManger.visible.value" :close-on-click-modal="false" :close-on-press-escape="false" width="50%" > <el-form ref="areaMangerRef" :model="areaManger.form" label-width="120px"> <el-form-item label="上级区域" prop="regionPath"> <el-cascader v-model="unref(areaManger.form).parents" :options="areaManger.list.value" :props="{ children: 'children', value: 'id', checkStrictly: true }" placeholder="请选择上级区域" clearable /> </el-form-item> <el-form-item label="区域名称" prop="regionName"> <el-input v-model="unref(areaManger.form).regionName" placeholder="请输入区域名称" /> </el-form-item> <!-- <el-form-item label="区域层级路径" prop="regionPath"> --> <!-- <el-input --> <!-- v-model="areaManger.form.regionPath" --> <!-- placeholder="区域层级路径" --> <!-- /> --> <!-- </el-form-item> --> <!-- <el-form-item label="区域地址" prop="areaAddress"> --> <!-- <el-input --> <!-- v-model="areaManger.form.areaAddress" --> <!-- placeholder="请输入区域地址" --> <!-- /> --> <!-- </el-form-item> --> <!-- <el-form-item label="区域备注" prop="areaRemark"> --> <!-- <el-input --> <!-- v-model="areaManger.form.areaRemark" --> <!-- placeholder="请输入区域备注" --> <!-- /> --> <!-- </el-form-item> --> </el-form> <template #footer> <span class="dialog-footer"> <el-button @click="areaManger.toClose">取 消</el-button> <el-button type="primary" @click="submitAreaForm">确 定</el-button> </span> </template> </el-dialog> </div> </template> <script setup name="Index"> import drawPoint from './components/drawPoint.vue' import drawPoint from "./components/drawPoint.vue"; import { ArrowDown } from "@element-plus/icons-vue"; import { Search } from "@element-plus/icons-vue"; import { ElMessageBox } from "element-plus"; import { reactive, ref, unref, watch, watchEffect } from "vue"; import request from "@/utils/request"; import { useIndex } from "./hooks"; const { proxy } = getCurrentInstance(); const drawPointRef = ref(null); const nowText = ref("点位管理"); Loading Loading @@ -129,7 +259,7 @@ const algorithmList = reactive([ ]); const data = reactive({ form: { title:'测试测试测试' title: "测试测试测试", }, queryParams: { postCode: undefined, Loading @@ -155,21 +285,28 @@ const filterNode = (value, data) => { return data.label.indexOf(value) !== -1; }; // function closeNow(){ // const routerArr=useTagsViewStore().visitedViews // const nowPath=location.pathname // return routerArr.filter(item=>{return item.path==nowPath })[0] // } // setTimeout(() => { // nowText=closeNow()awdasa // }, 500); // function goTarget(url) { // window.open(url, '__blank') // } function handleNodeClick(row) { const areaManger = useIndex({ list: "/yunshou/aiRegionManage/list", add: "/yunshou/aiRegionManage", edit: "yunshou/aiRegionManage", delete: "yunshou/aiRegionManage/", detail: "/yunshou/aiRegionManage/", }); function submitAreaForm(e) { areaManger.form.value.regionPath = areaManger.form.value.parents.join(","); if (areaManger.form.value.id) { areaManger.form.value.parentId = areaManger.form.parents[areaManger.form.value.parents.length - 2] ?? 0; } else { areaManger.form.value.parentId = areaManger.form.parents[areaManger.form.value.parents.length - 1] ?? 0; } areaManger.toSubmit(); // areaManger.value.visible = false; // areaList(); } function handleNodeClick(row) {} function handeAdd(row) { drawPointRef.value.handleAdd(); Loading Loading @@ -212,6 +349,7 @@ function handleDelete(row) { </script> <style scoped lang="scss"> @import url("./index.scss"); .left-list { min-height: 700px; } Loading Loading @@ -252,7 +390,8 @@ function handleDelete(row) { cursor: pointer; position: relative; } .el-form-item--default,.el-form-item { .el-form-item--default, .el-form-item { font-size: 12px; margin-bottom: 0px; } Loading vite.config.js +2 −1 Original line number Diff line number Diff line Loading @@ -25,13 +25,14 @@ export default defineConfig(({ mode, command }) => { }, // vite 相关配置 server: { port: 80, port: 8090, host: true, open: true, proxy: { // https://cn.vitejs.dev/config/#server-proxy '/dev-api': { target: 'http://192.168.4.206:80/ai', // target:'http://192.168.14.43:8111/ai', changeOrigin: true, rewrite: (p) => p.replace(/^\/dev-api/, '') } Loading Loading
src/views/videoControl/pointControl/hooks/index.js 0 → 100644 +100 −0 Original line number Diff line number Diff line import { onMounted, ref, watch } from "vue"; import request from "@/utils/request"; import { ElMessageBox } from "element-plus"; function useIndex(apis) { const visible = ref(false); const form = ref({ regionName:'' }); const list = ref([]); watch( () => visible, (newVal) => { if (newVal == false) { form.value = {}; } } ); function toView() {} function toEdit(data) { getDetail(data.id); visible.value = true; } function toAdd() { visible.value = true; } function toDel(data) { //弹框确认 ElMessageBox.confirm("是否删除该区域?").then(() => { request({ url: apis.delete + data.id, method: "delete", }).then((res) => { visible.value = false; getList(); }); }); } function getList() { request({ url: apis.list, method: "get", }).then((res) => { list.value = res.data; }); } function getDetail(id) { return request({ url: apis.detail + id, method: "get", }).then((res) => { form.value = res.data; }); } function toSubmit() { if (form.value.id) { request({ url: apis.edit, method: "put", data: form.value, }).then((res) => { visible.value = false; getList(); }); } else { request({ url: apis.add, method: "post", data: form.value, }).then((res) => { visible.value = false; getList(); }); } } function toClose() { visible.value = false; } onMounted(() => { getList(); }); return { visible, form, list, toView, toEdit, toAdd, toDel, getDetail, toClose, toSubmit, }; } export { useIndex };
src/views/videoControl/pointControl/index.scss 0 → 100644 +6 −0 Original line number Diff line number Diff line .areaNodes{ display: flex; justify-content: space-between; align-items: center; width: 100%; } No newline at end of file
src/views/videoControl/pointControl/index.vue +178 −39 Original line number Diff line number Diff line Loading @@ -2,7 +2,9 @@ <div class="app-container home"> <TabTitle :text="nowText" /> <div class="add-but"> <el-button type="primary" icon="Plus" @click="handeAdd" plain>新增点位</el-button> <el-button type="primary" icon="Plus" @click="handeAdd" plain >新增点位 {{ areaManger.visible }}</el-button > </div> <el-row :gutter="10"> <el-col :xs="0" :sm="2" :md="3" :lg="4"> Loading @@ -10,7 +12,7 @@ <div class="head-container"> <el-input v-model="deptName" placeholder="请输入部门名称" placeholder="请输入" clearable prefix-icon="Search" style="margin-bottom: 20px" Loading @@ -18,8 +20,8 @@ </div> <div class="head-container"> <el-tree :data="deptOptions" :props="{ label: 'label', children: 'children' }" :data="areaManger.list" :props="{ children: 'children' }" :expand-on-click-node="false" :filter-node-method="filterNode" ref="deptTreeRef" Loading @@ -27,7 +29,38 @@ highlight-current default-expand-all @node-click="handleNodeClick" /> > <template #default="{ node, data }"> <span class="areaNodes"> <span>{{ data.label }}</span> <span> <!-- 添加dropdown --> <el-dropdown trigger="click"> <el-dropdown-link class="dropdown-link"> <el-button type="text" size="small"> <el-icon size="20" color="#333333" ><Setting /></el-icon> </el-button> </el-dropdown-link> <template #dropdown> <el-dropdown-menu> <el-dropdown-item @click="areaManger.toAdd(data)" >新增子区域</el-dropdown-item > <el-dropdown-item @click="areaManger.toEdit(data)" >编辑该区域</el-dropdown-item > <el-dropdown-item @click="areaManger.toDel(data)" >删除该区域</el-dropdown-item > </el-dropdown-menu> </template> </el-dropdown> </span> </span> </template></el-tree > </div> </el-card> </el-col> Loading @@ -53,16 +86,59 @@ </el-row> --> <el-table v-loading="loading" :data="pointList"> <el-table-column label="实况图" align="center" prop="postId" /> <el-table-column label="摄像头名称" align="center" prop="postCode" /> <el-table-column label="所属区域" align="center" prop="postName" /> <el-table-column label="推理间隔(秒)" align="center" prop="postSort" /> <el-table-column label="关联算法" align="center" prop="postSort" /> <el-table-column label="时段配置" align="center" prop="postSort" /> <el-table-column label="运行状态" align="center" prop="postSort" /> <el-table-column label="操作" width="180" align="center" class-name="small-padding fixed-width"> <el-table-column label="摄像头名称" align="center" prop="postCode" /> <el-table-column label="所属区域" align="center" prop="postName" /> <el-table-column label="推理间隔(秒)" align="center" prop="postSort" /> <el-table-column label="关联算法" align="center" prop="postSort" /> <el-table-column label="时段配置" align="center" prop="postSort" /> <el-table-column label="运行状态" align="center" prop="postSort" /> <el-table-column label="操作" width="180" align="center" class-name="small-padding fixed-width" > <template #default="scope"> <el-button link type="primary" icon="Edit" @click="handleUpdate(scope.row)" v-hasPermi="['system:post:edit']">修改</el-button> <el-button link type="primary" icon="Delete" @click="handleDelete(scope.row)" v-hasPermi="['system:post:remove']">删除</el-button> <el-button link type="primary" icon="Edit" @click="handleUpdate(scope.row)" v-hasPermi="['system:post:edit']" >修改</el-button > <el-button link type="primary" icon="Delete" @click="handleDelete(scope.row)" v-hasPermi="['system:post:remove']" >删除</el-button > </template> </el-table-column> </el-table> Loading @@ -71,13 +147,67 @@ </el-col> </el-row> <drawPoint ref="drawPointRef" /> <!-- 添加新增区域弹框 ,包含上级区域,区域名称,区域坐标,区域地址--> <el-dialog title="新增区域" v-model="areaManger.visible.value" :close-on-click-modal="false" :close-on-press-escape="false" width="50%" > <el-form ref="areaMangerRef" :model="areaManger.form" label-width="120px"> <el-form-item label="上级区域" prop="regionPath"> <el-cascader v-model="unref(areaManger.form).parents" :options="areaManger.list.value" :props="{ children: 'children', value: 'id', checkStrictly: true }" placeholder="请选择上级区域" clearable /> </el-form-item> <el-form-item label="区域名称" prop="regionName"> <el-input v-model="unref(areaManger.form).regionName" placeholder="请输入区域名称" /> </el-form-item> <!-- <el-form-item label="区域层级路径" prop="regionPath"> --> <!-- <el-input --> <!-- v-model="areaManger.form.regionPath" --> <!-- placeholder="区域层级路径" --> <!-- /> --> <!-- </el-form-item> --> <!-- <el-form-item label="区域地址" prop="areaAddress"> --> <!-- <el-input --> <!-- v-model="areaManger.form.areaAddress" --> <!-- placeholder="请输入区域地址" --> <!-- /> --> <!-- </el-form-item> --> <!-- <el-form-item label="区域备注" prop="areaRemark"> --> <!-- <el-input --> <!-- v-model="areaManger.form.areaRemark" --> <!-- placeholder="请输入区域备注" --> <!-- /> --> <!-- </el-form-item> --> </el-form> <template #footer> <span class="dialog-footer"> <el-button @click="areaManger.toClose">取 消</el-button> <el-button type="primary" @click="submitAreaForm">确 定</el-button> </span> </template> </el-dialog> </div> </template> <script setup name="Index"> import drawPoint from './components/drawPoint.vue' import drawPoint from "./components/drawPoint.vue"; import { ArrowDown } from "@element-plus/icons-vue"; import { Search } from "@element-plus/icons-vue"; import { ElMessageBox } from "element-plus"; import { reactive, ref, unref, watch, watchEffect } from "vue"; import request from "@/utils/request"; import { useIndex } from "./hooks"; const { proxy } = getCurrentInstance(); const drawPointRef = ref(null); const nowText = ref("点位管理"); Loading Loading @@ -129,7 +259,7 @@ const algorithmList = reactive([ ]); const data = reactive({ form: { title:'测试测试测试' title: "测试测试测试", }, queryParams: { postCode: undefined, Loading @@ -155,21 +285,28 @@ const filterNode = (value, data) => { return data.label.indexOf(value) !== -1; }; // function closeNow(){ // const routerArr=useTagsViewStore().visitedViews // const nowPath=location.pathname // return routerArr.filter(item=>{return item.path==nowPath })[0] // } // setTimeout(() => { // nowText=closeNow()awdasa // }, 500); // function goTarget(url) { // window.open(url, '__blank') // } function handleNodeClick(row) { const areaManger = useIndex({ list: "/yunshou/aiRegionManage/list", add: "/yunshou/aiRegionManage", edit: "yunshou/aiRegionManage", delete: "yunshou/aiRegionManage/", detail: "/yunshou/aiRegionManage/", }); function submitAreaForm(e) { areaManger.form.value.regionPath = areaManger.form.value.parents.join(","); if (areaManger.form.value.id) { areaManger.form.value.parentId = areaManger.form.parents[areaManger.form.value.parents.length - 2] ?? 0; } else { areaManger.form.value.parentId = areaManger.form.parents[areaManger.form.value.parents.length - 1] ?? 0; } areaManger.toSubmit(); // areaManger.value.visible = false; // areaList(); } function handleNodeClick(row) {} function handeAdd(row) { drawPointRef.value.handleAdd(); Loading Loading @@ -212,6 +349,7 @@ function handleDelete(row) { </script> <style scoped lang="scss"> @import url("./index.scss"); .left-list { min-height: 700px; } Loading Loading @@ -252,7 +390,8 @@ function handleDelete(row) { cursor: pointer; position: relative; } .el-form-item--default,.el-form-item { .el-form-item--default, .el-form-item { font-size: 12px; margin-bottom: 0px; } Loading
vite.config.js +2 −1 Original line number Diff line number Diff line Loading @@ -25,13 +25,14 @@ export default defineConfig(({ mode, command }) => { }, // vite 相关配置 server: { port: 80, port: 8090, host: true, open: true, proxy: { // https://cn.vitejs.dev/config/#server-proxy '/dev-api': { target: 'http://192.168.4.206:80/ai', // target:'http://192.168.14.43:8111/ai', changeOrigin: true, rewrite: (p) => p.replace(/^\/dev-api/, '') } Loading