.env.development | ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史 | |
.env.production | ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史 | |
.env.staging | ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史 | |
src/api/configuration/warning/alarmScheme.js | ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史 | |
src/api/facility/point.js | ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史 | |
src/layout/components/Sidebar/Logo.vue | ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史 | |
src/views/configuration/warning/index.vue | ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史 | |
src/views/login.vue | ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史 | |
src/views/screen/index.vue | ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史 | |
src/views/system/user/index.vue | ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史 | |
vite.config.js | ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史 |
.env.development
@@ -1,12 +1,12 @@ # 页面标题 VITE_APP_TITLE = 后台管理系统 VITE_APP_TITLE = 丰都气体监测后台管理系统 # 开发环境配置 VITE_APP_ENV = 'development' # 图片地址 VITE_APP_IMG_BASEURL='http://113.250.189.120:8036/upload' VITE_APP_IMG_BASEURL='http://192.168.0.67:8040/upload' #后端本地 VITE_APP_PUBLIC_REQUEST_API = 'http://113.250.189.120:8036' VITE_APP_PUBLIC_REQUEST_API = 'http://192.168.0.67:8040' .env.production
@@ -1,6 +1,6 @@ # 页面标题 VITE_APP_TITLE = 后台管理系统 VITE_APP_TITLE = 丰都气体监测后台管理系统 # 开发环境配置 VITE_APP_ENV = 'production' .env.staging
@@ -1,14 +1,5 @@ ### # @Author: web candymxq888@outlook.com # @Date: 2025-06-19 11:35:36 # @LastEditors: web candymxq888@outlook.com # @LastEditTime: 2025-06-19 14:51:40 # @FilePath: \fengdu_gases_web\.env.staging # @Description: 这是默认设置,请设置`customMade`, 打开koroFileHeader查看配置 进行设置: https://github.com/OBKoro1/koro1FileHeader/wiki/%E9%85%8D%E7%BD%AE ### # 页面标题 VITE_APP_TITLE = 后台管理系统 VITE_APP_TITLE = 丰都气体监测后台管理系统 # 开发环境配置 VITE_APP_ENV = 'staging' src/api/configuration/warning/alarmScheme.js
对比新文件 @@ -0,0 +1,69 @@ /* * @Author: elkers * @Date: 2024-08-09 14:29:49 * @LastEditors: hqs elkers@163.com * @LastEditTime: 2024-08-10 08:57:04 * @FilePath: \water-qinghe-web\src\api\alarmApi\alarmHistory.js * @Description: 历史记录api */ import { publicRequest } from '@/utils/request' export default function alarmSchemeApi() { return { create: (data) => { return publicRequest({ url: '/alarmScheme/create', method: 'post', data, }); }, modify: (data) => { return publicRequest({ url: '/alarmScheme/modify', method: 'post', data, }); }, remove: (data) => { return publicRequest({ url: `/alarmScheme/remove?id=${data}`, method: 'post', data, }); }, stop: (data) => { return publicRequest({ url: `/alarmScheme/stop?id=${data}`, method: 'post', data, }); }, enable: (data) => { return publicRequest({ url: `/alarmScheme/enable?id=${data}`, method: 'post', data, }); }, search: (data) => { return publicRequest({ url: '/alarmScheme/search', method: 'post', data, }); }, get: (data) => { return publicRequest({ url: `/alarmScheme/get?id=${data}`, method: 'get', data, }); }, setSort: (data) => { return publicRequest({ url: `/alarmScheme/setSort`, method: 'post', data, }); } }; } src/api/facility/point.js
@@ -1,8 +1,8 @@ /* * @Author: elkers * @Date: 2024-08-09 14:29:49 * @LastEditors: hqs elkers@163.com * @LastEditTime: 2024-08-14 09:33:32 * @LastEditors: web candymxq888@outlook.com * @LastEditTime: 2025-06-20 14:01:16 * @FilePath: \water-qinghe-web\src\api\facility\point.js * @Description: 监控点api */ @@ -36,5 +36,11 @@ data }); }, getParentPoint: () => { return publicRequest({ url: 'waterMonitoryPoint/getListTree', method: 'get', }) } }; } src/layout/components/Sidebar/Logo.vue
@@ -1,12 +1,3 @@ <!-- * @Author: hqs elkers@163.com * @Date: 2024-05-16 11:24:17 * @LastEditors: hqs elkers@163.com * @LastEditTime: 2024-05-17 18:41:06 * @FilePath: \wisdom-water-factory-web\src\layout\components\Sidebar\Logo.vue * @Description: 这是默认设置,请设置`customMade`, 打开koroFileHeader查看配置 进行设置: https://github.com/OBKoro1/koro1FileHeader/wiki/%E9%85%8D%E7%BD%AE <div class="sidebar-logo-container" :class="{ 'collapse': collapse }" :style="{ backgroundColor: sideTheme === 'theme-dark' ? variables.menuBackground : variables.menuLightBackground }"> --> <template> <div class="sidebar-logo-container" :class="{ 'collapse': collapse }"> <transition name="sidebarLogoFade"> @@ -70,14 +61,15 @@ } & .sidebar-title { width: calc(100% - 60px); display: inline-block; margin: 0; color: #fff; font-weight: 600; line-height: 50px; font-size: 14px; font-family: Avenir, Helvetica Neue, Arial, Helvetica, sans-serif; vertical-align: middle; white-space: pre-wrap; } } src/views/configuration/warning/index.vue
对比新文件 @@ -0,0 +1,264 @@ <template> <div class="app-container"> <el-form :model="queryParams" ref="queryRef" :inline="true"> <el-form-item prop="name"> <el-input v-model="queryParams.name" placeholder="请输入内容" clearable style="width: 200px" @keyup.enter="handleQuery" /> </el-form-item> <el-form-item> <el-button type="primary" icon="Search" @click="handleQuery">搜索</el-button> <el-button icon="Refresh" @click="resetQuery">重置</el-button> </el-form-item> </el-form> <el-row :gutter="10" class="mb8"> <el-col :span="1.5"> <el-button type="primary" plain icon="Plus" @click="handleAdd" >新增</el-button> </el-col> </el-row> <!--表格及分页--> <el-table v-loading="loading" :data="tableData"> <el-table-column v-for="(item, key, index) of tableHeader" :prop="key.toString()" :label="item" :key="index" align="center" > </el-table-column> <el-table-column label="操作" width="auto" align="center" class-name="small-padding fixed-width"> <template #default="scope"> <el-button link type="primary" icon="Edit" @click="handleUpdate(scope.row)">修改</el-button> <el-button link type="primary" icon="Delete" @click="handleDelete(scope.row)">删除</el-button> </template> </el-table-column> </el-table> <pagination :total="pageParam.total" v-model:page="pageParam.page" v-model:limit="pageParam.limit" :page-sizes="[10,20,30]" @pagination="getList" /> <!-- 添加或修改对话框 --> <el-dialog :title="title" v-model="open" append-to-body center> <el-form class="form-box" ref="formRef" :model="form" :rules="rules" label-width='auto'> <el-form-item label="选择设备" prop="facilityId"> <el-select v-model="form.facilityId" placeholder="请选择设备" @change="getFacityCodeList"> <el-option v-for="(item,index) in facityList" :label="item.facilityName" :value="item.id" :key="index" ></el-option> </el-select> </el-form-item> <el-form-item label="设备参数" prop="columnsCode"> <el-select v-model="form.columnsCode" placeholder="请选择设备参数"> <el-option v-for="(item,index) in facityCodeList" :label="item.columnsShow" :value="item.columnsCode" :key="index" ></el-option> </el-select> </el-form-item> <el-form-item label="方案名称" prop="schemeName"> <el-input v-model="form.schemeName" placeholder="请输入方案名称" /> </el-form-item> <el-form-item label="低报警值" prop="lowAlarm"> <el-input v-model="form.lowAlarm" placeholder="请输入低报警值" /> </el-form-item> <el-form-item label="高报警值" prop="tallAlarm"> <el-input v-model="form.tallAlarm" placeholder="请输入高报警值" /> </el-form-item> <el-form-item label="备注" prop="remark"> <el-input v-model="form.remark" placeholder="请输入备注" /> </el-form-item> </el-form> <template #footer> <div class="dialog-footer"> <el-button type="primary" @click="submitForm">确 定</el-button> <el-button @click="cancel">取 消</el-button> </div> </template> </el-dialog> </div> </template> <script setup name="Menu"> import facilityApi from '@/api/facility/index.js' import waterFacilityParameter from '@/api/facility/parameter.js' import alarmSchemeApi from '@/api/configuration/warning/alarmScheme.js' import setPostParams from "@/utils/searchParams.js"; import {onMounted} from "vue"; const { proxy } = getCurrentInstance(); const pageParam = ref({ total:0, limit:0, page:0, }) const tableData = ref([]); let tableHeader = ref({ schemeName: '方案名称', facilityName: '设备名称', columnsName: '参数名称', lowAlarm: '低报警值', tallAlarm: '高报警值', remark: '备注', createTimeView: '创建时间', }) const open = ref(false); const loading = ref(false); const title = ref(""); const data = reactive({ form:{}, queryParams: { name: undefined, }, rules: { facilityId: [{ required: true, message: "请选择设备", trigger: "blur" }], columnsCode: [{ required: true, message: "请选择设备参数", trigger: "blur" }], schemeName: [{ required: true, message: "请输入方案名称", trigger: "blur" }], lowAlarm: [{ required: true, message: "请输入低报警值", trigger: "blur" }], tallAlarm: [{ required: true, message: "请输入高报警值", trigger: "blur" }], remark: [{ required: false, message: "请输入备注信息", trigger: "blur" }], }, }); const { queryParams, form, rules } = toRefs(data); const facityList = ref([]); //设备列表 const facityCodeList = ref([]); //设备参数列表 /** * 搜索相关 */ /** 搜索按钮操作 */ function handleQuery() { getList({keywords:queryParams.value.name,page:1}) } /** 重置按钮操作 */ function resetQuery() { proxy.resetForm("queryRef"); handleQuery(); } /** 获取列表 */ async function getList(val) { loading.value = true; let postParam = setPostParams(val) await alarmSchemeApi().search(postParam).then((res) =>{ tableData.value = res.data.list pageParam.value.total = res.data.total pageParam.value.limit = res.data.limit pageParam.value.page = res.data.page }) loading.value = false; } // 获取设备 const getFacityList = () => { let postParam = setPostParams() facilityApi().search(postParam).then(res => { facityList.value = res.data.list }) } // 获取设备参数 const getFacityCodeList = (id) => { const code = id ? id : form.value.facilityId waterFacilityParameter().getParam(code).then(res => { facityCodeList.value = res.data }) } /** 新增按钮操作 */ async function handleAdd() { reset(); open.value = true; title.value = "新增方案配置"; } /** 修改按钮操作 */ async function handleUpdate(row) { reset(); getFacityCodeList(row.facilityId) form.value = Object.assign({},row) open.value = true; title.value = "修改方案配置"; } /** 删除按钮操作 */ function handleDelete(row) { proxy.$modal.confirm('是否确认删除名称为"' + row.name + '"的数据项?').then(function() { return alarmSchemeApi().remove(row.id); }).then(() => { getList(); proxy.$modal.msgSuccess("删除成功"); }).catch(() => {}); } /** 提交按钮 */ async function submitForm() { proxy.$refs["formRef"].validate( async valid => { if (valid) { form.value.lowAlarm = Number(form.value.lowAlarm) form.value.tallAlarm = Number(form.value.tallAlarm) if (form.value.id != undefined) { await alarmSchemeApi().modify(form.value).then(res => { proxy.$modal.msgSuccess("修改成功"); open.value = false; getList(); }).catch(() =>{ open.value = false; proxy.$modal.msgError("修改失败"); }); } else { await alarmSchemeApi().create(form.value).then(res => { proxy.$modal.msgSuccess("新增成功"); open.value = false; getList(); }).catch(() =>{ open.value = false; proxy.$modal.msgError("新增失败"); }); } } }); } /** 取消按钮 */ function cancel() { open.value = false; reset(); } /** 表单重置 */ function reset() { form.value = { facilityId:'', columnsCode:'', schemeName:'', lowAlarm:'', tallAlarm:'', remark:'', }; proxy.resetForm("formRef"); } onMounted(() => { getList(); getFacityList() }) </script> src/views/login.vue
@@ -4,7 +4,7 @@ <div class="contain"> <el-form ref="loginRef" :model="loginForm" :rules="loginRules" class="login-form" @keydown.enter="handleLogin"> <h3 class="title">金川水电站生态流量监测系统</h3> <h3 class="title">{{ title }}</h3> <el-form-item label="账号" prop="userName"> <el-input style="height: 45px;" @@ -80,6 +80,8 @@ import {useRouter, useRoute} from 'vue-router'; import {login, register, getIp} from '@/api/login'; const title = import.meta.env.VITE_APP_TITLE; const userStore = useUserStore() const permissionStore = usePermissionStore() const route = useRoute(); src/views/screen/index.vue
@@ -8,7 +8,7 @@ <script setup> import { ref } from 'vue' </script> src/views/system/user/index.vue
@@ -1,22 +1,9 @@ <!-- * @Author: Liuyi candymxq888@outlook.com * @Date: 2024-08-06 16:17:39 * @LastEditors: Liuyi candymxq888@outlook.com * @LastEditTime: 2024-10-23 15:51:47 * @FilePath: \water-qinghe-web\src\views\system\user\index.vue * @Description: 这是默认设置,请设置`customMade`, 打开koroFileHeader查看配置 进行设置: https://github.com/OBKoro1/koro1FileHeader/wiki/%E9%85%8D%E7%BD%AE --> <template> <div class="app-container"> <el-form :model="queryParams" ref="queryRef" :inline="true"> <el-form-item label="用户名称" prop="name"> <el-input v-model="queryParams.name" placeholder="请输入用户名称" clearable style="width: 200px" @keyup.enter="handleQuery" /> <el-input v-model="queryParams.name" placeholder="请输入用户名称" clearable style="width: 200px" @keyup.enter="handleQuery" /> </el-form-item> <el-form-item> <el-button type="primary" icon="Search" @click="handleQuery">搜索</el-button> @@ -25,44 +12,30 @@ </el-form> <el-row :gutter="10" class="mb8"> <el-col :span="1.5"> <el-button type="primary" plain icon="Plus" @click="handleAdd" >新增</el-button> <el-button type="primary" plain icon="Plus" @click="handleAdd">新增</el-button> </el-col> </el-row> <!--表格及分页--> <el-table v-loading="loading" :data="tableData"> <el-table-column v-for="(item, key, index) of tableHeader" :prop="key.toString()" :label="item" :key="index" align="center" > <el-table-column v-for="(item, key, index) of tableHeader" :prop="key.toString()" :label="item" :key="index" align="center"> <template #default="scope"> <div v-if="key === 'userType'"> {{userTypeList?.filter(fil => fil.dictValue == scope.row.userType.toString())[0].dictLabel}} {{userTypeList?.filter(fil => fil.dictValue == scope.row.userType.toString())?.[0]?.dictLabel}} </div> </template> </el-table-column> <el-table-column label="操作" align="center" class-name="small-padding fixed-width"> <template #default="scope"> <el-button link type="primary" icon="Edit" @click="handleUpdate(scope.row)">修改</el-button> <el-button v-if="scope.row.userType == 3" link type="primary" icon="Edit" @click="handleRole(scope.row)">绑定角色</el-button> <el-button v-if="scope.row.userType == 3" link type="primary" icon="Edit" @click="handleRole(scope.row)">绑定角色</el-button> <el-button link type="primary" icon="Delete" @click="handleDelete(scope.row)">删除</el-button> </template> </el-table-column> </el-table> <pagination :total="pageParam.total" v-model:page="pageParam.page" v-model:limit="pageParam.limit" :page-sizes="[10,20,30]" @pagination="getList" /> <pagination :total="pageParam.total" v-model:page="pageParam.page" v-model:limit="pageParam.limit" :page-sizes="[10, 20, 30]" @pagination="getList" /> <!-- 添加或修改对话框 --> <el-dialog :title="title" v-model="open" append-to-body center> <el-form class="form-box" ref="userRef" :model="form" :rules="rules"> @@ -77,12 +50,8 @@ </el-form-item> <el-form-item label="用户类型" prop="userType"> <el-select v-model="form.userType" placeholder="请选择用户类型"> <el-option v-for="(item,index) in userTypeList" :label="item.dictLabel" :value="item.dictValue" :key="index" ></el-option> <el-option v-for="(item, index) in userTypeList" :label="item.dictLabel" :value="item.dictValue" :key="index"></el-option> </el-select> </el-form-item> <el-form-item label="联系邮箱" prop="email"> @@ -108,16 +77,11 @@ </el-dialog> <!-- 角色设置弹窗 --> <el-dialog v-model="open1" title="角色绑定" align-center center width="300" > <el-dialog v-model="open1" title="角色绑定" align-center center width="300"> <div class="bandCheck"> <el-checkbox-group v-model="roleCheckedList"> <el-checkbox v-for="(item,index) in roleSelectList" :key="index" :label="item.name" :value="item.id" size ="large" /> <el-checkbox v-for="(item, index) in roleSelectList" :key="index" :label="item.name" :value="item.id" size="large" /> </el-checkbox-group> </div> <div class="handleBtn"> @@ -345,8 +309,10 @@ max-width: 100px; height: 50px; } .el-dialog{ width:50vw; .user-form{ display: flex; flex-wrap: wrap; @@ -354,11 +320,13 @@ align-items: center; margin: 20px auto; width: 90%; .el-form-item{ width: 45%; } } } .bandCheck{ width:100%; /* background-color: beige; */ @@ -367,15 +335,16 @@ align-items: center; margin-bottom:100px; } .handleBtn{ width:100%; /* background-color: beige; */ display: flex; justify-content: center; align-items: center; .el-button{ width:100px; } } </style> vite.config.js
@@ -25,12 +25,12 @@ }, // vite 相关配置 server: { port: 5036, port: 6036, host: true, open: true, // proxy: { // '/api': { // target: 'http://192.168.0.200:8036', // target: 'http://192.168.0.67:8040', // changeOrigin: true, // rewrite: (p) => p.replace(/^\/api/, '') // }