xiaohuo 12 months ago
commit 173f94abd5
  1. 2
      ALOps_sys_fe/alops-ui/.env.development
  2. 2
      ALOps_sys_fe/alops-ui/.env.production
  3. 2
      ALOps_sys_fe/alops-ui/.env.staging
  4. 4
      ALOps_sys_fe/alops-ui/package.json
  5. 122
      ALOps_sys_fe/alops-ui/src/api/device/deviceInformation.js
  6. 118
      ALOps_sys_fe/alops-ui/src/api/device/deviceManufacturer.js
  7. 118
      ALOps_sys_fe/alops-ui/src/api/device/deviceType.js
  8. 118
      ALOps_sys_fe/alops-ui/src/api/device/files.js
  9. 69
      ALOps_sys_fe/alops-ui/src/api/inMonitoring/devicesState.js
  10. 1
      ALOps_sys_fe/alops-ui/src/assets/styles/index.scss
  11. 19
      ALOps_sys_fe/alops-ui/src/assets/styles/ruoyi.scss
  12. 12
      ALOps_sys_fe/alops-ui/src/layout/components/Navbar.vue
  13. 14
      ALOps_sys_fe/alops-ui/src/router/index.js
  14. 4
      ALOps_sys_fe/alops-ui/src/views/device/deviceInformation/index.vue
  15. 140
      ALOps_sys_fe/alops-ui/src/views/device/deviceManufacturer/index.vue
  16. 119
      ALOps_sys_fe/alops-ui/src/views/device/deviceType/index.vue
  17. 215
      ALOps_sys_fe/alops-ui/src/views/device/files/index.vue
  18. 132
      ALOps_sys_fe/alops-ui/src/views/inMonitoring/devicesState/LineChart.vue
  19. 8
      ALOps_sys_fe/alops-ui/src/views/inMonitoring/devicesState/cardItem.vue
  20. 198
      ALOps_sys_fe/alops-ui/src/views/inMonitoring/devicesState/detail.vue
  21. 9
      ALOps_sys_fe/alops-ui/src/views/inMonitoring/devicesState/index.vue
  22. 26
      ALOps_sys_fe/alops-ui/src/views/inMonitoring/earlyWarning/index.vue
  23. 8
      ALOps_sys_fe/alops-ui/src/views/index.vue
  24. 2
      ALOps_sys_fe/alops-ui/vue.config.js
  25. 1779
      ALOps_sys_sql/aiops_sys.sql

@ -1,5 +1,5 @@
# 页面标题
VUE_APP_TITLE = 智能运维系统
VUE_APP_TITLE = 中国烟草
# 开发环境配置
ENV = 'development'

@ -1,5 +1,5 @@
# 页面标题
VUE_APP_TITLE = 智能运维管理系统
VUE_APP_TITLE = 中国烟草
# 生产环境配置
ENV = 'production'

@ -1,5 +1,5 @@
# 页面标题
VUE_APP_TITLE = 智能运维系统
VUE_APP_TITLE = 中国烟草
BABEL_ENV = production

@ -1,7 +1,7 @@
{
"name": "ruoyi",
"version": "3.9.0",
"description": "智能运维系统",
"description": "中国烟草",
"author": "若依",
"license": "MIT",
"scripts": {
@ -70,4 +70,4 @@
"> 1%",
"last 2 versions"
]
}
}

@ -1,130 +1,38 @@
import request from '@/utils/request'
import { parseStrEmpty } from "@/utils/ruoyi";
const api = '/equipment/'
// 查询用户列表
export function listUser(query) {
// 立即执行
export function protoCollect() {
return request({
url: '/system/user/list',
method: 'get',
params: query
url: api + 'protoCollect',
method: 'post'
})
}
// 查询用户详细
export function getUser(userId) {
return request({
url: '/system/user/' + parseStrEmpty(userId),
method: 'get'
})
}
// 新增用户
export function addUser(data) {
// 定时采集规则添加
export function addTimerRule(data) {
return request({
url: '/system/user',
url: api + 'addTimerRule',
method: 'post',
data: data
})
}
// 修改用户
export function updateUser(data) {
return request({
url: '/system/user',
method: 'put',
data: data
})
}
// 删除用户
export function delUser(userId) {
return request({
url: '/system/user/' + userId,
method: 'delete'
})
}
// 用户密码重置
export function resetUserPwd(userId, password) {
const data = {
userId,
password
}
return request({
url: '/system/user/resetPwd',
method: 'put',
data: data
})
}
// 用户状态修改
export function changeUserStatus(userId, status) {
const data = {
userId,
status
}
// 查询规则
export function queryTimerRule(data) {
return request({
url: '/system/user/changeStatus',
method: 'put',
data: data
})
}
// 查询用户个人信息
export function getUserProfile() {
return request({
url: '/system/user/profile',
method: 'get'
})
}
// 修改用户个人信息
export function updateUserProfile(data) {
return request({
url: '/system/user/profile',
method: 'put',
data: data
})
}
// 用户密码重置
export function updateUserPwd(oldPassword, newPassword) {
const data = {
oldPassword,
newPassword
}
return request({
url: '/system/user/profile/updatePwd',
method: 'put',
url: api + 'queryTimerRule',
method: 'post',
data: data
})
}
// 用户头像上传
export function uploadAvatar(data) {
// 修改规则
export function modifyTimerRule(data) {
return request({
url: '/system/user/profile/avatar',
url: api + 'modifyTimerRule',
method: 'post',
headers: { 'Content-Type': 'application/x-www-form-urlencoded' },
data: data
})
}
// 查询授权角色
export function getAuthRole(userId) {
return request({
url: '/system/user/authRole/' + userId,
method: 'get'
})
}
// 保存授权角色
export function updateAuthRole(data) {
return request({
url: '/system/user/authRole',
method: 'put',
params: data
})
}

@ -1,130 +1,50 @@
import request from '@/utils/request'
import { parseStrEmpty } from "@/utils/ruoyi";
const api = '/equManufacture/'
// 查询用户列表
export function listUser(query) {
// 查询详细
export function getDict() {
return request({
url: '/system/user/list',
method: 'get',
params: query
url: '/sys_dict',
method: 'get'
})
}
// 查询用户详细
export function getUser(userId) {
// 查询列表
export function list(query) {
return request({
url: '/system/user/' + parseStrEmpty(userId),
method: 'get'
url: api + 'queryByVO',
method: 'get',
params: query
})
}
// 新增用户
export function addUser(data) {
// 新增
export function add(data) {
return request({
url: '/system/user',
url: api + 'add',
method: 'post',
data: data
})
}
// 修改用户
export function updateUser(data) {
// 修改
export function update(data) {
return request({
url: '/system/user',
url: api + 'modify',
method: 'put',
data: data
})
}
// 删除用户
export function delUser(userId) {
// 删除
export function del(id) {
return request({
url: '/system/user/' + userId,
url: api + 'delete' + id,
method: 'delete'
})
}
// 用户密码重置
export function resetUserPwd(userId, password) {
const data = {
userId,
password
}
return request({
url: '/system/user/resetPwd',
method: 'put',
data: data
})
}
// 用户状态修改
export function changeUserStatus(userId, status) {
const data = {
userId,
status
}
return request({
url: '/system/user/changeStatus',
method: 'put',
data: data
})
}
// 查询用户个人信息
export function getUserProfile() {
return request({
url: '/system/user/profile',
method: 'get'
})
}
// 修改用户个人信息
export function updateUserProfile(data) {
return request({
url: '/system/user/profile',
method: 'put',
data: data
})
}
// 用户密码重置
export function updateUserPwd(oldPassword, newPassword) {
const data = {
oldPassword,
newPassword
}
return request({
url: '/system/user/profile/updatePwd',
method: 'put',
data: data
})
}
// 用户头像上传
export function uploadAvatar(data) {
return request({
url: '/system/user/profile/avatar',
method: 'post',
headers: { 'Content-Type': 'application/x-www-form-urlencoded' },
data: data
})
}
// 查询授权角色
export function getAuthRole(userId) {
return request({
url: '/system/user/authRole/' + userId,
method: 'get'
})
}
// 保存授权角色
export function updateAuthRole(data) {
return request({
url: '/system/user/authRole',
method: 'put',
params: data
})
}

@ -1,130 +1,50 @@
import request from '@/utils/request'
import { parseStrEmpty } from "@/utils/ruoyi";
const api = '/equipmentType/'
// 查询用户列表
export function listUser(query) {
// 查询详细
export function getDict() {
return request({
url: '/system/user/list',
method: 'get',
params: query
url: '/sys_dict',
method: 'get'
})
}
// 查询用户详细
export function getUser(userId) {
// 查询列表
export function list(query) {
return request({
url: '/system/user/' + parseStrEmpty(userId),
method: 'get'
url: api + 'queryByVO',
method: 'get',
params: query
})
}
// 新增用户
export function addUser(data) {
// 新增
export function add(data) {
return request({
url: '/system/user',
url: api + 'add',
method: 'post',
data: data
})
}
// 修改用户
export function updateUser(data) {
// 修改
export function update(data) {
return request({
url: '/system/user',
url: api + 'modify',
method: 'put',
data: data
})
}
// 删除用户
export function delUser(userId) {
// 删除
export function del(id) {
return request({
url: '/system/user/' + userId,
url: api + 'delete' + id,
method: 'delete'
})
}
// 用户密码重置
export function resetUserPwd(userId, password) {
const data = {
userId,
password
}
return request({
url: '/system/user/resetPwd',
method: 'put',
data: data
})
}
// 用户状态修改
export function changeUserStatus(userId, status) {
const data = {
userId,
status
}
return request({
url: '/system/user/changeStatus',
method: 'put',
data: data
})
}
// 查询用户个人信息
export function getUserProfile() {
return request({
url: '/system/user/profile',
method: 'get'
})
}
// 修改用户个人信息
export function updateUserProfile(data) {
return request({
url: '/system/user/profile',
method: 'put',
data: data
})
}
// 用户密码重置
export function updateUserPwd(oldPassword, newPassword) {
const data = {
oldPassword,
newPassword
}
return request({
url: '/system/user/profile/updatePwd',
method: 'put',
data: data
})
}
// 用户头像上传
export function uploadAvatar(data) {
return request({
url: '/system/user/profile/avatar',
method: 'post',
headers: { 'Content-Type': 'application/x-www-form-urlencoded' },
data: data
})
}
// 查询授权角色
export function getAuthRole(userId) {
return request({
url: '/system/user/authRole/' + userId,
method: 'get'
})
}
// 保存授权角色
export function updateAuthRole(data) {
return request({
url: '/system/user/authRole',
method: 'put',
params: data
})
}

@ -1,130 +1,58 @@
import request from '@/utils/request'
import { parseStrEmpty } from "@/utils/ruoyi";
const api = '/equipment/'
// 查询用户列表
export function listUser(query) {
// 查询详细
export function getDict() {
return request({
url: '/system/user/list',
method: 'get',
params: query
})
}
// 查询用户详细
export function getUser(userId) {
return request({
url: '/system/user/' + parseStrEmpty(userId),
url: '/sys_dict',
method: 'get'
})
}
// 新增用户
export function addUser(data) {
return request({
url: '/system/user',
method: 'post',
data: data
})
}
// 修改用户
export function updateUser(data) {
return request({
url: '/system/user',
method: 'put',
data: data
})
}
// 删除用户
export function delUser(userId) {
return request({
url: '/system/user/' + userId,
method: 'delete'
})
}
// 用户密码重置
export function resetUserPwd(userId, password) {
const data = {
userId,
password
}
// 查询列表
export function list(query) {
return request({
url: '/system/user/resetPwd',
method: 'put',
data: data
})
}
// 用户状态修改
export function changeUserStatus(userId, status) {
const data = {
userId,
status
}
return request({
url: '/system/user/changeStatus',
method: 'put',
data: data
url: api + 'queryByVO',
method: 'get',
params: query
})
}
// 查询用户个人信息
export function getUserProfile() {
// 查询详细
export function getInfo(id) {
return request({
url: '/system/user/profile',
url: api + '/queryById/' + parseStrEmpty(id),
method: 'get'
})
}
// 修改用户个人信息
export function updateUserProfile(data) {
// 新增
export function add(data) {
return request({
url: '/system/user/profile',
method: 'put',
url: api + 'add',
method: 'post',
data: data
})
}
// 用户密码重置
export function updateUserPwd(oldPassword, newPassword) {
const data = {
oldPassword,
newPassword
}
// 修改
export function update(data) {
return request({
url: '/system/user/profile/updatePwd',
url: api + 'modify',
method: 'put',
data: data
})
}
// 用户头像上传
export function uploadAvatar(data) {
// 删除
export function del(id) {
return request({
url: '/system/user/profile/avatar',
method: 'post',
headers: { 'Content-Type': 'application/x-www-form-urlencoded' },
data: data
url: api + 'delete' + id,
method: 'delete'
})
}
// 查询授权角色
export function getAuthRole(userId) {
return request({
url: '/system/user/authRole/' + userId,
method: 'get'
})
}
// 保存授权角色
export function updateAuthRole(data) {
return request({
url: '/system/user/authRole',
method: 'put',
params: data
})
}

@ -1,5 +1,72 @@
import request from '@/utils/request'
import { parseStrEmpty } from "@/utils/ruoyi";
const api = '/equipment/'
// 查询多台设备列表
export function list(query) {
return request({
url: api + 'queryByVO',
method: 'get',
params: query
})
}
// 查询单台设备
export function getInfo(id) {
return request({
url: api + '/queryById/' + parseStrEmpty(id),
method: 'get'
})
}
// 查询设备历史预警
export function historyQuery(query) {
return request({
url: '/alarm/historyQuery',
method: 'get',
params: query
})
}
// 查询接口信息
export function interfaceQuery(query) {
return request({
url: '/interface/query',
method: 'get',
params: query
})
}
// 新增
export function add(data) {
return request({
url: api + 'add',
method: 'post',
data: data
})
}
// 修改
export function update(data) {
return request({
url: api + 'modify',
method: 'put',
data: data
})
}
// 删除
export function del(id) {
return request({
url: api + 'delete' + id,
method: 'delete'
})
}
//隔离
// 查询用户列表
export function listUser(query) {
@ -126,5 +193,3 @@ export function updateAuthRole(data) {
params: data
})
}

@ -11,6 +11,7 @@ body {
-webkit-font-smoothing: antialiased;
text-rendering: optimizeLegibility;
font-family: Helvetica Neue, Helvetica, PingFang SC, Hiragino Sans GB, Microsoft YaHei, Arial, sans-serif;
color: #606266;
}
label {

@ -285,3 +285,22 @@
.splitpanes.default-theme .splitpanes__pane {
background-color: #fff!important;
}
.flex-center{
display: flex;
justify-content: center;
align-items: center;
}
.flex{
display: flex;
}
.justifyContent{
justify-content: center;
}
.alignItems{
align-items: center;
}
.gap10{
gap: 10px;
}

@ -9,20 +9,8 @@
<template v-if="device!=='mobile'">
<search id="header-search" class="right-menu-item" />
<el-tooltip content="源码地址" effect="dark" placement="bottom">
<ruo-yi-git id="ruoyi-git" class="right-menu-item hover-effect" />
</el-tooltip>
<el-tooltip content="文档地址" effect="dark" placement="bottom">
<ruo-yi-doc id="ruoyi-doc" class="right-menu-item hover-effect" />
</el-tooltip>
<screenfull id="screenfull" class="right-menu-item hover-effect" />
<el-tooltip content="布局大小" effect="dark" placement="bottom">
<size-select id="size-select" class="right-menu-item hover-effect" />
</el-tooltip>
</template>
<el-dropdown class="avatar-container right-menu-item hover-effect" trigger="hover">

@ -92,6 +92,20 @@ export const constantRoutes = [
// 动态路由,基于用户权限动态去加载
export const dynamicRoutes = [
{
path: '/inMonitoring/devicesState-detail',
component: Layout,
hidden: true,
permissions: ['inMonitoring:devicesState:edit'],
children: [
{
path: 'detail/:userId(\\d+)',
component: () => import('@/views/inMonitoring/devicesState/detail'),
name: 'DevicesStateDetail',
meta: { title: '设备详情', activeMenu: '/inMonitoring/devicesState-detail' }
}
]
},
{
path: '/system/user-auth',
component: Layout,

@ -2,12 +2,9 @@
<div class="app-container">
<el-row :gutter="20">
<splitpanes :horizontal="this.$store.getters.device === 'mobile'" class="default-theme">
<!--用户数据-->
<pane size="84">
<el-col>
<el-form :model="queryParams" ref="queryForm" size="small" :inline="true" v-show="showSearch" label-width="auto">
<el-row>
<el-form-item>
@ -62,6 +59,7 @@
<script>
import { listUser, getUser, delUser, addUser, updateUser, resetUserPwd, changeUserStatus, deptTreeSelect } from "@/api/system/user"
import { protoCollect, addTimerRule, queryTimerRule, modifyTimerRule } from "@/api/device/deviceInformation"
import { getToken } from "@/utils/auth"
import Treeselect from "@riophae/vue-treeselect"
import "@riophae/vue-treeselect/dist/vue-treeselect.css"

@ -2,20 +2,18 @@
<div class="app-container">
<el-row :gutter="20">
<splitpanes :horizontal="this.$store.getters.device === 'mobile'" class="default-theme">
<!--厂商信息-->
<pane size="84">
<el-col>
<el-form :model="queryParams" ref="queryForm" size="small" :inline="true" v-show="showSearch" label-width="68px">
<el-form-item label="厂商名称" prop="userName">
<el-input v-model="queryParams.userName" placeholder="请输入厂商名称" clearable style="width: 240px" @keyup.enter.native="handleQuery" />
<el-form-item label="厂商名称" prop="name">
<el-input v-model="queryParams.name" placeholder="请输入厂商名称" clearable style="width: 240px" @keyup.enter.native="handleQuery" />
</el-form-item>
<el-form-item label="联系人" prop="phonenumber">
<el-input v-model="queryParams.phonenumber" placeholder="请输入联系人" clearable style="width: 240px" @keyup.enter.native="handleQuery" />
<el-form-item label="联系人" prop="contactBy">
<el-input v-model="queryParams.contactBy" placeholder="请输入联系人" clearable style="width: 240px" @keyup.enter.native="handleQuery" />
</el-form-item>
<el-form-item label="联系电话" prop="phonenumber">
<el-input v-model="queryParams.phonenumber" placeholder="请输入联系电话" clearable style="width: 240px" @keyup.enter.native="handleQuery" />
<el-form-item label="联系电话" prop="contactWay">
<el-input v-model="queryParams.contactWay" placeholder="请输入联系电话" clearable style="width: 240px" @keyup.enter.native="handleQuery" />
</el-form-item>
<el-form-item>
<el-button type="primary" icon="el-icon-search" size="mini" @click="handleQuery">搜索</el-button>
@ -36,23 +34,23 @@
<el-col :span="1.5">
<el-button type="warning" plain icon="el-icon-download" size="mini" @click="handleExport" v-hasPermi="['device:deviceManufacturer:export']">导出</el-button>
</el-col>
<right-toolbar :showSearch.sync="showSearch" @queryTable="getList" :columns="columns"></right-toolbar>
</el-row>
<el-table v-loading="loading" :data="userList" @selection-change="handleSelectionChange">
<el-table-column type="selection" width="50" align="center" />
<el-table-column label="厂商名称" align="center" key="userId" prop="userId" v-if="columns[0].visible" />
<el-table-column label="联系人" align="center" key="phonenumber" prop="phonenumber" v-if="columns[3].visible" width="120" />
<el-table-column label="联系方式" align="center" key="phonenumber" prop="phonenumber" v-if="columns[4].visible" width="120" />
<el-table-column label="创建人" align="center" key="phonenumber" prop="phonenumber" v-if="columns[4].visible" width="120" />
<el-table-column label="创建日期" align="center" prop="createTime" v-if="columns[6].visible" width="160">
<el-table-column label="ID" align="center" key="Id" prop="Id" />
<el-table-column label="厂商名称" align="center" key="name" prop="name" width="120" />
<el-table-column label="联系人" align="center" key="contactBy" prop="contactBy" width="120" />
<el-table-column label="联系方式" align="center" key="contactWay" prop="contactWay" width="120" />
<el-table-column label="创建人" align="center" key="CreateBy" prop="CreateBy" width="120" />
<el-table-column label="创建日期" align="center" prop="CreateDate" width="160">
<template slot-scope="scope">
<span>{{ parseTime(scope.row.createTime) }}</span>
<span>{{ parseTime(scope.row.CreateDate) }}</span>
</template>
</el-table-column>
<el-table-column label="状态" align="center" key="phonenumber" prop="phonenumber" v-if="columns[4].visible" width="120" />
<el-table-column label="状态" align="center" key="Status" prop="Status" width="120" />
<el-table-column label="操作" align="center" width="160" class-name="small-padding fixed-width">
<template slot-scope="scope" v-if="scope.row.userId !== 1">
<template slot-scope="scope">
<el-button size="mini" type="text" icon="el-icon-edit" @click="handleUpdate(scope.row)" v-hasPermi="['device:deviceManufacturer:edit']">修改</el-button>
<el-button size="mini" type="text" icon="el-icon-delete" @click="handleDelete(scope.row)" v-hasPermi="['device:deviceManufacturer:remove']">删除</el-button>
</template>
@ -68,69 +66,22 @@
<el-dialog :title="title" :visible.sync="open" width="760px" append-to-body>
<el-form ref="form" :model="form" :rules="rules" label-width="90px">
<el-row :gutter="20">
<!-- 用户昵称 + 手机号码 -->
<el-col :span="12">
<el-form-item label="用户昵称" prop="nickName">
<el-input v-model="form.nickName" placeholder="请输入用户昵称" maxlength="30" />
<el-form-item label="厂商名称" prop="name">
<el-input v-model="form.name" placeholder="请输入用户昵称" maxlength="30" />
</el-form-item>
</el-col>
<el-col :span="12">
<el-form-item label="手机号码" prop="phonenumber">
<el-input v-model="form.phonenumber" placeholder="请输入手机号码" maxlength="11" />
<el-form-item label="联系人" prop="contactBy">
<el-input v-model="form.contactBy" placeholder="请输入手机号码" maxlength="30" />
</el-form-item>
</el-col>
<!-- 邮箱 + 用户名称 -->
<el-col :span="12">
<el-form-item label="邮箱" prop="email">
<el-input v-model="form.email" placeholder="请输入邮箱" maxlength="50" />
</el-form-item>
</el-col>
<el-col :span="12">
<el-form-item v-if="form.userId == undefined" label="用户名称" prop="userName">
<el-input v-model="form.userName" placeholder="请输入用户名称" maxlength="30" />
</el-form-item>
</el-col>
<!-- 用户密码仅新增+ 用户性别 -->
<el-col :span="12">
<el-form-item v-if="form.userId == undefined" label="用户密码" prop="password">
<el-input v-model="form.password" placeholder="请输入用户密码" type="password" maxlength="20" show-password />
</el-form-item>
</el-col>
<el-col :span="12">
<el-form-item label="用户性别">
<el-select v-model="form.sex" placeholder="请选择性别" style="width: 100%">
<el-option v-for="dict in dict.type.sys_user_sex" :key="dict.value" :label="dict.label" :value="dict.value"></el-option>
</el-select>
</el-form-item>
</el-col>
<!-- 状态 + 角色 -->
<el-col :span="12">
<el-form-item label="状态">
<el-radio-group v-model="form.status">
<el-radio v-for="dict in dict.type.sys_normal_disable" :key="dict.value" :label="dict.value">{{ dict.label }}</el-radio>
</el-radio-group>
</el-form-item>
</el-col>
<el-col :span="12">
<el-form-item label="角色">
<el-select v-model="form.roleIds" multiple placeholder="请选择角色" style="width: 100%">
<el-option v-for="item in roleOptions" :key="item.roleId" :label="item.roleName" :value="item.roleId" :disabled="item.status == 1"></el-option>
</el-select>
</el-form-item>
</el-col>
<!-- 备注单独一行 -->
<el-col :span="24">
<el-form-item label="备注">
<el-input v-model="form.remark" type="textarea" :rows="3" placeholder="请输入内容" />
<el-form-item label="联系方式" prop="contactWay">
<el-input v-model="form.contactWay" placeholder="请输入手机号码" maxlength="11" />
</el-form-item>
</el-col>
</el-row>
</el-form>
<span slot="footer" class="dialog-footer">
<el-button type="primary" @click="submitForm"> </el-button>
@ -231,23 +182,14 @@ export default {
queryParams: {
pageNum: 1,
pageSize: 10,
userName: undefined,
phonenumber: undefined,
name: undefined,
contactBy: undefined,
status: undefined,
deptId: undefined
},
//
columns: [
{ key: 0, label: '厂商名称', visible: true, showInSelector: true },
{ key: 1, label: '设备类型', visible: true, showInSelector: true },
{ key: 2, label: '供货商名称', visible: true, showInSelector: true },
{ key: 3, label: '联系人', visible: true, showInSelector: true }, // 👈
{ key: 4, label: '联系电话', visible: true, showInSelector: true },
],
//
rules: {
userName: [
name: [
{ required: true, message: "用户名称不能为空", trigger: "blur" },
{ min: 2, max: 20, message: '用户名称长度必须介于 2 和 20 之间', trigger: 'blur' }
],
@ -266,7 +208,7 @@ export default {
trigger: ["blur", "change"]
}
],
phonenumber: [
contactBy: [
{
pattern: /^1[3|4|5|6|7|8|9][0-9]\d{8}$/,
message: "请输入正确的手机号码",
@ -332,8 +274,8 @@ export default {
//
handleStatusChange(row) {
let text = row.status === "0" ? "启用" : "停用"
this.$modal.confirm('确认要"' + text + '""' + row.userName + '"用户吗?').then(function() {
return changeUserStatus(row.userId, row.status)
this.$modal.confirm('确认要"' + text + '""' + row.name + '"用户吗?').then(function() {
return changeUserStatus(row.Id, row.status)
}).then(() => {
this.$modal.msgSuccess(text + "成功")
}).catch(function() {
@ -348,12 +290,12 @@ export default {
//
reset() {
this.form = {
userId: undefined,
Id: undefined,
deptId: undefined,
userName: undefined,
name: undefined,
nickName: undefined,
password: undefined,
phonenumber: undefined,
contactBy: undefined,
email: undefined,
sex: undefined,
status: "0",
@ -378,7 +320,7 @@ export default {
},
//
handleSelectionChange(selection) {
this.ids = selection.map(item => item.userId)
this.ids = selection.map(item => item.Id)
this.single = selection.length != 1
this.multiple = !selection.length
},
@ -409,8 +351,8 @@ export default {
/** 修改按钮操作 */
handleUpdate(row) {
this.reset()
const userId = row.userId || this.ids
getUser(userId).then(response => {
const Id = row.Id || this.ids
getUser(Id).then(response => {
this.form = response.data
this.postOptions = response.posts
this.roleOptions = response.roles
@ -423,7 +365,7 @@ export default {
},
/** 重置密码按钮操作 */
handleResetPwd(row) {
this.$prompt('请输入"' + row.userName + '"的新密码', "提示", {
this.$prompt('请输入"' + row.name + '"的新密码', "提示", {
confirmButtonText: "确定",
cancelButtonText: "取消",
closeOnClickModal: false,
@ -435,21 +377,21 @@ export default {
}
},
}).then(({ value }) => {
resetUserPwd(row.userId, value).then(response => {
resetUserPwd(row.Id, value).then(response => {
this.$modal.msgSuccess("修改成功,新密码是:" + value)
})
}).catch(() => {})
},
/** 分配角色操作 */
handleAuthRole: function(row) {
const userId = row.userId
this.$router.push("/system/user-auth/role/" + userId)
const Id = row.Id
this.$router.push("/system/user-auth/role/" + Id)
},
/** 提交按钮 */
submitForm: function() {
this.$refs["form"].validate(valid => {
if (valid) {
if (this.form.userId != undefined) {
if (this.form.Id != undefined) {
updateUser(this.form).then(response => {
this.$modal.msgSuccess("修改成功")
this.open = false
@ -467,9 +409,9 @@ export default {
},
/** 删除按钮操作 */
handleDelete(row) {
const userIds = row.userId || this.ids
this.$modal.confirm('是否确认删除用户编号为"' + userIds + '"的数据项?').then(function() {
return delUser(userIds)
const Ids = row.Id || this.ids
this.$modal.confirm('是否确认删除用户编号为"' + Ids + '"的数据项?').then(function() {
return delUser(Ids)
}).then(() => {
this.getList()
this.$modal.msgSuccess("删除成功")

@ -8,14 +8,14 @@
<pane size="84">
<el-col>
<el-form :model="queryParams" ref="queryForm" size="small" :inline="true" v-show="showSearch" label-width="68px">
<el-form-item label="类型名称" prop="userName">
<el-input v-model="queryParams.userName" placeholder="请输入类型名称" clearable style="width: 240px" @keyup.enter.native="handleQuery" />
<el-form-item label="类型名称" prop="name">
<el-input v-model="queryParams.name" placeholder="请输入类型名称" clearable style="width: 240px" @keyup.enter.native="handleQuery" />
</el-form-item>
<el-form-item label="状态" prop="status">
<!-- <el-form-item label="状态" prop="status">
<el-select v-model="queryParams.status" placeholder="类型状态" clearable style="width: 240px">
<el-option v-for="dict in dict.type.sys_normal_disable" :key="dict.value" :label="dict.label" :value="dict.value" />
</el-select>
</el-form-item>
</el-form-item> -->
<el-form-item label="创建时间">
<el-date-picker v-model="dateRange" style="width: 240px" value-format="yyyy-MM-dd" type="daterange" range-separator="-" start-placeholder="开始日期" end-placeholder="结束日期"></el-date-picker>
</el-form-item>
@ -43,23 +43,22 @@
<el-table v-loading="loading" :data="userList" @selection-change="handleSelectionChange">
<el-table-column type="selection" width="50" align="center" />
<el-table-column label="类型编号" align="center" key="userId" prop="userId" v-if="columns[0].visible" />
<el-table-column label="设备类型名称" align="center" key="userName" prop="userName" v-if="columns[1].visible" :show-overflow-tooltip="true" />
<el-table-column label="描述" align="center" key="userName" prop="userName" v-if="columns[1].visible" :show-overflow-tooltip="true" />
<el-table-column label="图片" align="center" key="userName" prop="userName" v-if="columns[1].visible" :show-overflow-tooltip="true" />
<el-table-column label="创建人" align="center" key="userName" prop="userName" v-if="columns[1].visible" :show-overflow-tooltip="true" />
<!-- <el-table-column label="状态" align="center" key="status" v-if="columns[5].visible">
<el-table-column label="类型编号" align="center" key="Id" prop="Id"/>
<el-table-column label="设备类型名称" align="center" key="name" prop="name" :show-overflow-tooltip="true" />
<el-table-column label="描述" align="center" key="description" prop="description" :show-overflow-tooltip="true" />
<el-table-column label="图片" align="center" key="image" prop="image" :show-overflow-tooltip="true" >
<template slot-scope="scope">
<el-switch v-model="scope.row.status" active-value="0" inactive-value="1" @change="handleStatusChange(scope.row)"></el-switch>
<ImagePreview :src="scope.row.image"/>
</template>
</el-table-column> -->
</el-table-column>
<el-table-column label="创建人" align="center" key="CreateBy" prop="CreateBy" :show-overflow-tooltip="true" />
<el-table-column label="创建时间" align="center" prop="createTime" v-if="columns[6].visible" width="160">
<template slot-scope="scope">
<span>{{ parseTime(scope.row.createTime) }}</span>
</template>
</el-table-column>
<el-table-column label="操作" align="center" width="160" class-name="small-padding fixed-width">
<template slot-scope="scope" v-if="scope.row.userId !== 1">
<template slot-scope="scope" v-if="scope.row.Id !== 1">
<el-button size="mini" type="text" icon="el-icon-edit" @click="handleUpdate(scope.row)" v-hasPermi="['device:deviceType:edit']">修改</el-button>
<el-button size="mini" type="text" icon="el-icon-delete" @click="handleDelete(scope.row)" v-hasPermi="['device:deviceType:remove']">删除</el-button>
</template>
@ -77,62 +76,20 @@
<el-row :gutter="20">
<!-- 类型昵称 + 手机号码 -->
<el-col :span="12">
<el-form-item label="类型昵称" prop="nickName">
<el-input v-model="form.nickName" placeholder="请输入类型昵称" maxlength="30" />
</el-form-item>
</el-col>
<el-col :span="12">
<el-form-item label="手机号码" prop="phonenumber">
<el-input v-model="form.phonenumber" placeholder="请输入手机号码" maxlength="11" />
</el-form-item>
</el-col>
<!-- 邮箱 + 类型名称 -->
<el-col :span="12">
<el-form-item label="邮箱" prop="email">
<el-input v-model="form.email" placeholder="请输入邮箱" maxlength="50" />
</el-form-item>
</el-col>
<el-col :span="12">
<el-form-item v-if="form.userId == undefined" label="类型名称" prop="userName">
<el-input v-model="form.userName" placeholder="请输入类型名称" maxlength="30" />
</el-form-item>
</el-col>
<!-- 类型密码仅新增+ 类型性别 -->
<el-col :span="12">
<el-form-item v-if="form.userId == undefined" label="类型密码" prop="password">
<el-input v-model="form.password" placeholder="请输入类型密码" type="password" maxlength="20" show-password />
</el-form-item>
</el-col>
<el-col :span="12">
<el-form-item label="类型性别">
<el-select v-model="form.sex" placeholder="请选择性别" style="width: 100%">
<el-option v-for="dict in dict.type.sys_user_sex" :key="dict.value" :label="dict.label" :value="dict.value"></el-option>
</el-select>
</el-form-item>
</el-col>
<!-- 状态 + 角色 -->
<el-col :span="12">
<el-form-item label="状态">
<el-radio-group v-model="form.status">
<el-radio v-for="dict in dict.type.sys_normal_disable" :key="dict.value" :label="dict.value">{{ dict.label }}</el-radio>
</el-radio-group>
<el-form-item label="设备名称" prop="name">
<el-input v-model="form.name" placeholder="请输入类型昵称" maxlength="30" />
</el-form-item>
</el-col>
<el-col :span="12">
<el-form-item label="角色">
<el-select v-model="form.roleIds" multiple placeholder="请选择角色" style="width: 100%">
<el-option v-for="item in roleOptions" :key="item.roleId" :label="item.roleName" :value="item.roleId" :disabled="item.status == 1"></el-option>
</el-select>
<el-form-item label="设备图片" prop="phonenumber">
<ImageUpload/>
</el-form-item>
</el-col>
<!-- 备注单独一行 -->
<el-col :span="24">
<el-form-item label="备注">
<el-input v-model="form.remark" type="textarea" :rows="3" placeholder="请输入内容" />
<el-form-item label="描述">
<el-input v-model="form.description" type="textarea" :rows="3" placeholder="请输入内容" />
</el-form-item>
</el-col>
</el-row>
@ -238,7 +195,7 @@ export default {
queryParams: {
pageNum: 1,
pageSize: 10,
userName: undefined,
name: undefined,
phonenumber: undefined,
status: undefined,
deptId: undefined
@ -256,11 +213,11 @@ export default {
//
rules: {
userName: [
name: [
{ required: true, message: "类型名称不能为空", trigger: "blur" },
{ min: 2, max: 20, message: '类型名称长度必须介于 2 和 20 之间', trigger: 'blur' }
],
nickName: [
name: [
{ required: true, message: "类型昵称不能为空", trigger: "blur" }
],
password: [
@ -341,8 +298,8 @@ export default {
//
handleStatusChange(row) {
let text = row.status === "0" ? "启用" : "停用"
this.$modal.confirm('确认要"' + text + '""' + row.userName + '"类型吗?').then(function() {
return changeUserStatus(row.userId, row.status)
this.$modal.confirm('确认要"' + text + '""' + row.name + '"类型吗?').then(function() {
return changeUserStatus(row.Id, row.status)
}).then(() => {
this.$modal.msgSuccess(text + "成功")
}).catch(function() {
@ -357,16 +314,16 @@ export default {
//
reset() {
this.form = {
userId: undefined,
Id: undefined,
deptId: undefined,
userName: undefined,
nickName: undefined,
name: undefined,
name: undefined,
password: undefined,
phonenumber: undefined,
email: undefined,
sex: undefined,
status: "0",
remark: undefined,
description: undefined,
postIds: [],
roleIds: []
}
@ -387,7 +344,7 @@ export default {
},
//
handleSelectionChange(selection) {
this.ids = selection.map(item => item.userId)
this.ids = selection.map(item => item.Id)
this.single = selection.length != 1
this.multiple = !selection.length
},
@ -418,8 +375,8 @@ export default {
/** 修改按钮操作 */
handleUpdate(row) {
this.reset()
const userId = row.userId || this.ids
getUser(userId).then(response => {
const Id = row.Id || this.ids
getUser(Id).then(response => {
this.form = response.data
this.postOptions = response.posts
this.roleOptions = response.roles
@ -432,7 +389,7 @@ export default {
},
/** 重置密码按钮操作 */
handleResetPwd(row) {
this.$prompt('请输入"' + row.userName + '"的新密码', "提示", {
this.$prompt('请输入"' + row.name + '"的新密码', "提示", {
confirmButtonText: "确定",
cancelButtonText: "取消",
closeOnClickModal: false,
@ -444,21 +401,21 @@ export default {
}
},
}).then(({ value }) => {
resetUserPwd(row.userId, value).then(response => {
resetUserPwd(row.Id, value).then(response => {
this.$modal.msgSuccess("修改成功,新密码是:" + value)
})
}).catch(() => {})
},
/** 分配角色操作 */
handleAuthRole: function(row) {
const userId = row.userId
this.$router.push("/system/user-auth/role/" + userId)
const Id = row.Id
this.$router.push("/system/user-auth/role/" + Id)
},
/** 提交按钮 */
submitForm: function() {
this.$refs["form"].validate(valid => {
if (valid) {
if (this.form.userId != undefined) {
if (this.form.Id != undefined) {
updateUser(this.form).then(response => {
this.$modal.msgSuccess("修改成功")
this.open = false
@ -476,9 +433,9 @@ export default {
},
/** 删除按钮操作 */
handleDelete(row) {
const userIds = row.userId || this.ids
this.$modal.confirm('是否确认删除类型编号为"' + userIds + '"的数据项?').then(function() {
return delUser(userIds)
const Ids = row.Id || this.ids
this.$modal.confirm('是否确认删除类型编号为"' + Ids + '"的数据项?').then(function() {
return delUser(Ids)
}).then(() => {
this.getList()
this.$modal.msgSuccess("删除成功")

@ -2,14 +2,12 @@
<div class="app-container">
<el-row :gutter="20">
<splitpanes :horizontal="this.$store.getters.device === 'mobile'" class="default-theme">
<!--设备档案-->
<pane size="84">
<el-col>
<el-form :model="queryParams" ref="queryForm" size="small" :inline="true" v-show="showSearch" label-width="68px">
<el-form-item label="设备名称" prop="userName">
<el-input v-model="queryParams.userName" placeholder="请输入设备名称" clearable style="width: 240px" @keyup.enter.native="handleQuery" />
<el-form-item label="设备名称" prop="Name">
<el-input v-model="queryParams.Name" placeholder="请输入设备名称" clearable style="width: 240px" @keyup.enter.native="handleQuery" />
</el-form-item>
<el-form-item label="安装位置" prop="phonenumber">
<el-input v-model="queryParams.phonenumber" placeholder="请输入安装位置" clearable style="width: 240px" @keyup.enter.native="handleQuery" />
@ -46,54 +44,50 @@
<el-col :span="1.5">
<el-button type="info" plain icon="el-icon-upload2" size="mini" @click="handleImport" v-hasPermi="['device:files:import']">导入</el-button>
</el-col>
<el-col :span="1.5">
<el-button type="warning" plain icon="el-icon-download" size="mini" @click="handleExport" v-hasPermi="['device:files:export']">导出</el-button>
</el-col>
<!-- <right-toolbar :showSearch.sync="showSearch" @queryTable="getList" :columns="columns"></right-toolbar> -->
</el-row>
<el-table v-loading="loading" :data="userList" @selection-change="handleSelectionChange">
<el-table v-loading="loading" :data="dataList" @selection-change="handleSelectionChange">
<el-table-column type="selection" width="50" align="center" />
<el-table-column label="设备编号" align="center" key="userId" prop="userId" v-if="columns[0].visible" />
<el-table-column label="设备名称" align="center" key="userName" prop="userName" v-if="columns[1].visible" :show-overflow-tooltip="true" />
<el-table-column label="设备版本" align="center" key="userName" prop="userName" v-if="columns[1].visible" :show-overflow-tooltip="true" />
<el-table-column label="设备类型" align="center" key="userName" prop="userName" v-if="columns[1].visible" :show-overflow-tooltip="true" />
<el-table-column label="设备级别" align="center" key="phonenumber" prop="phonenumber" v-if="columns[2].visible" width="120" />
<el-table-column label="启用状态" align="center" key="status" v-if="columns[5].visible">
<el-table-column label="设备编号" align="center" key="Id" prop="Id" />
<el-table-column label="设备名称" align="center" key="Name" prop="Name" :show-overflow-tooltip="true" />
<el-table-column label="设备版本" align="center" key="Version" prop="Version" :show-overflow-tooltip="true" />
<el-table-column label="设备类型" align="center" key="EquType" prop="EquType" :show-overflow-tooltip="true" />
<el-table-column label="设备级别" align="center" prop="phonenumber" width="120" />
<el-table-column label="启用状态" align="center" key="status">
<template slot-scope="scope">
<el-switch v-model="scope.row.status" active-value="0" inactive-value="1" @change="handleStatusChange(scope.row)"></el-switch>
</template>
</el-table-column>
<el-table-column label="带外管理IP" align="center" key="phonenumber" prop="phonenumber" v-if="columns[4].visible" width="120" />
<el-table-column label="带外管理IP" align="center" key="Ip" prop="Ip" width="120" />
<el-table-column label="设备厂商" align="center" key="phonenumber" prop="phonenumber" v-if="columns[4].visible" width="120" />
<el-table-column label="安装位置" align="center" key="phonenumber" prop="phonenumber" v-if="columns[4].visible" width="120" />
<el-table-column label="安装时间" align="center" prop="createTime" v-if="columns[6].visible" width="160">
<el-table-column label="设备厂商" align="center" key="Manufacture" prop="Manufacture" width="120" />
<el-table-column label="安装位置" align="center" key="Location" prop="Location" width="120" />
<el-table-column label="安装时间" align="center" prop="InstallDate" width="160">
<template slot-scope="scope">
<span>{{ parseTime(scope.row.createTime) }}</span>
<span>{{ parseTime(scope.row.InstallDate) }}</span>
</template>
</el-table-column>
<el-table-column label="设备管理员" align="center" key="phonenumber" prop="phonenumber" v-if="columns[4].visible" width="120" />
<el-table-column label="预计年限" align="center" key="phonenumber" prop="phonenumber" v-if="columns[4].visible" width="120" />
<el-table-column label="服役年限" align="center" key="phonenumber" prop="phonenumber" v-if="columns[4].visible" width="120" />
<el-table-column label="质保时间" align="center" key="phonenumber" prop="phonenumber" v-if="columns[4].visible" width="120" />
<el-table-column label="累计预警次数" align="center" key="phonenumber" prop="phonenumber" v-if="columns[4].visible" width="120" />
<el-table-column label="累计维修次数" align="center" key="phonenumber" prop="phonenumber" v-if="columns[4].visible" width="120" />
<el-table-column label="累计维修金额" align="center" key="phonenumber" prop="phonenumber" v-if="columns[4].visible" width="120" />
<el-table-column label="设备添加人" align="center" key="phonenumber" prop="phonenumber" v-if="columns[4].visible" width="120" />
<el-table-column label="添加时间" align="center" prop="createTime" v-if="columns[6].visible" width="160">
<el-table-column label="设备管理员" align="center" prop="phonenumber" width="120" />
<el-table-column label="预计年限" align="center" key="LifeCycle" prop="LifeCycle" width="120" />
<el-table-column label="服役年限" align="center" key="ServiceTime" prop="ServiceTime" width="120" />
<el-table-column label="质保时间" align="center" key="warranty" prop="warranty" width="120" />
<el-table-column label="累计预警次数" align="center" key="FailureFrequency" prop="FailureFrequency" width="120" />
<el-table-column label="累计维修次数" align="center" key="RepairFrequency" prop="RepairFrequency" width="120" />
<el-table-column label="累计维修金额" align="center" key="RepairCost" prop="RepairCost" width="120" />
<el-table-column label="设备添加人" align="center" key="CreateBy" prop="CreateBy" width="120" />
<el-table-column label="添加时间" align="center" prop="CreateDate" width="160">
<template slot-scope="scope">
<span>{{ parseTime(scope.row.createTime) }}</span>
</template>
</el-table-column>
<el-table-column label="修改人" align="center" key="phonenumber" prop="phonenumber" v-if="columns[4].visible" width="120" />
<el-table-column label="修改时间" align="center" prop="createTime" v-if="columns[6].visible" width="160">
<el-table-column label="修改人" align="center" prop="UpdateBy" width="120" />
<el-table-column label="修改时间" align="center" prop="createTime" width="160">
<template slot-scope="scope">
<span>{{ parseTime(scope.row.createTime) }}</span>
</template>
</el-table-column>
<el-table-column label="操作" align="center" width="160" class-name="small-padding fixed-width">
<template slot-scope="scope" v-if="scope.row.userId !== 1">
<template slot-scope="scope" v-if="scope.row.Id !== 1">
<el-button size="mini" type="text" icon="el-icon-edit" @click="handleUpdate(scope.row)" v-hasPermi="['device:files:edit']">修改</el-button>
<el-button size="mini" type="text" icon="el-icon-delete" @click="handleDelete(scope.row)" v-hasPermi="['device:files:remove']">删除</el-button>
</template>
@ -106,60 +100,67 @@
</splitpanes>
</el-row>
<el-dialog :title="title" :visible.sync="open" width="760px" append-to-body>
<el-form ref="form" :model="form" :rules="rules" label-width="90px">
<el-dialog :title="title" :visible.sync="open" width="800px" append-to-body :close-on-click-modal="false">
<el-form ref="form" :model="form" :rules="rules" label-width="100px">
<el-row :gutter="20">
<!-- 设备昵称 + 手机号码 -->
<el-col :span="12">
<el-form-item label="设备昵称" prop="nickName">
<el-input v-model="form.nickName" placeholder="请输入设备昵称" maxlength="30" />
<el-form-item label="设备编号" prop="nickName">
<el-input v-model="form.nickName" placeholder="请输入设备编号" maxlength="30" />
</el-form-item>
</el-col>
<el-col :span="12">
<el-form-item label="手机号码" prop="phonenumber">
<el-input v-model="form.phonenumber" placeholder="请输入手机号码" maxlength="11" />
<el-form-item label="设备名称" prop="nickName">
<el-input v-model="form.nickName" placeholder="请输入设备名称" maxlength="30" />
</el-form-item>
</el-col>
<!-- 邮箱 + 设备名称 -->
<el-col :span="12">
<el-form-item label="邮箱" prop="email">
<el-input v-model="form.email" placeholder="请输入邮箱" maxlength="50" />
<el-form-item label="设备版本" prop="nickName">
<el-input v-model="form.nickName" placeholder="请输入设备版本" maxlength="30" />
</el-form-item>
</el-col>
<el-col :span="12">
<el-form-item v-if="form.userId == undefined" label="设备名称" prop="userName">
<el-input v-model="form.userName" placeholder="请输入设备名称" maxlength="30" />
<el-form-item label="设备类型" prop="nickName">
<el-input v-model="form.nickName" placeholder="请输入设备类型" maxlength="30" />
</el-form-item>
</el-col>
<!-- 设备密码仅新增+ 设备性别 -->
<el-col :span="12">
<el-form-item v-if="form.userId == undefined" label="设备密码" prop="password">
<el-input v-model="form.password" placeholder="请输入设备密码" type="password" maxlength="20" show-password />
<el-form-item label="设备级别" prop="nickName">
<el-input v-model="form.nickName" placeholder="请输入设备级别" maxlength="30" />
</el-form-item>
</el-col>
<el-col :span="12">
<el-form-item label="设备性别">
<el-select v-model="form.sex" placeholder="请选择性别" style="width: 100%">
<el-option v-for="dict in dict.type.sys_user_sex" :key="dict.value" :label="dict.label" :value="dict.value"></el-option>
</el-select>
<el-form-item label="带外管理IP" prop="nickName">
<el-input v-model="form.nickName" placeholder="请输入带外管理IP" maxlength="30" />
</el-form-item>
</el-col>
<el-col :span="12">
<el-form-item label="设备厂商" prop="nickName">
<el-input v-model="form.nickName" placeholder="请输入设备厂商" maxlength="30" />
</el-form-item>
</el-col>
<el-col :span="12">
<el-form-item label="安装位置" prop="nickName">
<el-input v-model="form.nickName" placeholder="请输入安装位置" maxlength="30" />
</el-form-item>
</el-col>
<!-- 状态 + 角色 -->
<el-col :span="12">
<el-form-item label="状态">
<el-radio-group v-model="form.status">
<el-radio v-for="dict in dict.type.sys_normal_disable" :key="dict.value" :label="dict.value">{{ dict.label }}</el-radio>
</el-radio-group>
<el-form-item label="设备管理员" prop="nickName">
<el-input v-model="form.nickName" placeholder="请输入设备管理员" maxlength="30" />
</el-form-item>
</el-col>
<el-col :span="12">
<el-form-item label="角色">
<el-select v-model="form.roleIds" multiple placeholder="请选择角色" style="width: 100%">
<el-option v-for="item in roleOptions" :key="item.roleId" :label="item.roleName" :value="item.roleId" :disabled="item.status == 1"></el-option>
</el-select>
<el-form-item label="预计年限" prop="nickName">
<el-input v-model="form.nickName" placeholder="请输入预计年限" maxlength="30" />
</el-form-item>
</el-col>
<el-col :span="12">
<el-form-item label="服役年限" prop="nickName">
<el-input v-model="form.nickName" placeholder="请输入服役年限" maxlength="30" />
</el-form-item>
</el-col>
<el-col :span="12">
<el-form-item label="质保年限" prop="nickName">
<el-input v-model="form.nickName" placeholder="请输入质保年限" maxlength="30" />
</el-form-item>
</el-col>
@ -202,7 +203,7 @@
</template>
<script>
import { listUser, getUser, delUser, addUser, updateUser, resetUserPwd, changeUserStatus, deptTreeSelect } from "@/api/device/files"
import { getDict, list, getInfo, del, add, update } from "@/api/device/files"
import { getToken } from "@/utils/auth"
import Treeselect from "@riophae/vue-treeselect"
import "@riophae/vue-treeselect/dist/vue-treeselect.css"
@ -228,7 +229,7 @@ export default {
//
total: 0,
//
userList: null,
dataList: null,
//
title: "",
//
@ -266,13 +267,13 @@ export default {
//
headers: { Authorization: "Bearer " + getToken() },
//
url: process.env.VUE_APP_BASE_API + "/system/user/importData"
url: process.env.VUE_APP_BASE_API + "/equipment/import"
},
//
queryParams: {
pageNum: 1,
pageSize: 10,
userName: undefined,
Name: undefined,
phonenumber: undefined,
status: undefined,
deptId: undefined
@ -290,31 +291,12 @@ export default {
//
rules: {
userName: [
Name: [
{ required: true, message: "设备名称不能为空", trigger: "blur" },
{ min: 2, max: 20, message: '设备名称长度必须介于 2 和 20 之间', trigger: 'blur' }
],
nickName: [
{ required: true, message: "设备昵称不能为空", trigger: "blur" }
],
password: [
{ required: true, message: "设备密码不能为空", trigger: "blur" },
{ min: 5, max: 20, message: '设备密码长度必须介于 5 和 20 之间', trigger: 'blur' },
{ pattern: /^[^<>"'|\\]+$/, message: "不能包含非法字符:< > \" ' \\\ |", trigger: "blur" }
],
email: [
{
type: "email",
message: "请输入正确的邮箱地址",
trigger: ["blur", "change"]
}
],
phonenumber: [
{
pattern: /^1[3|4|5|6|7|8|9][0-9]\d{8}$/,
message: "请输入正确的手机号码",
trigger: "blur"
}
]
}
}
@ -333,11 +315,18 @@ export default {
})
},
methods: {
/** 查询设备列表 */
getDicts() {
getDict().then(response => {
console.log("%c 🗝: getDict -> response ", "font-size:16px;background-color:#796b0d;color:white;", response)
}
)
},
/** 查询设备列表 */
getList() {
this.loading = true
listUser(this.addDateRange(this.queryParams, this.dateRange)).then(response => {
this.userList = response.rows
list(this.addDateRange(this.queryParams, this.dateRange)).then(response => {
this.dataList = response.rows
this.total = response.total
this.loading = false
}
@ -375,8 +364,8 @@ export default {
//
handleStatusChange(row) {
let text = row.status === "0" ? "启用" : "停用"
this.$modal.confirm('确认要"' + text + '""' + row.userName + '"设备吗?').then(function() {
return changeUserStatus(row.userId, row.status)
this.$modal.confirm('确认要"' + text + '""' + row.Name + '"设备吗?').then(function() {
return changeUserStatus(row.Id, row.status)
}).then(() => {
this.$modal.msgSuccess(text + "成功")
}).catch(function() {
@ -391,9 +380,9 @@ export default {
//
reset() {
this.form = {
userId: undefined,
Id: undefined,
deptId: undefined,
userName: undefined,
Name: undefined,
nickName: undefined,
password: undefined,
phonenumber: undefined,
@ -414,33 +403,33 @@ export default {
/** 重置按钮操作 */
resetQuery() {
this.dateRange = []
this.resetForm("queryForm")
this.queryParams.deptId = undefined
this.$refs.tree.setCurrentKey(null)
this.handleQuery()
// this.resetForm("queryForm")
// this.queryParams.deptId = undefined
// this.$refs.tree.setCurrentKey(null)
// this.handleQuery()
this.getDicts()
},
//
handleSelectionChange(selection) {
this.ids = selection.map(item => item.userId)
this.ids = selection.map(item => item.Id)
this.single = selection.length != 1
this.multiple = !selection.length
},
/** 新增按钮操作 */
handleAdd() {
this.reset()
getUser().then(response => {
this.postOptions = response.posts
this.roleOptions = response.roles
// getInfo().then(response => {
// this.postOptions = response.posts
// this.roleOptions = response.roles
// })
this.open = true
this.title = "添加设备"
this.form.password = this.initPassword
})
},
/** 修改按钮操作 */
handleUpdate(row) {
this.reset()
const userId = row.userId || this.ids
getUser(userId).then(response => {
const Id = row.Id || this.ids
getInfo(Id).then(response => {
this.form = response.data
this.postOptions = response.posts
this.roleOptions = response.roles
@ -453,7 +442,7 @@ export default {
},
/** 重置密码按钮操作 */
handleResetPwd(row) {
this.$prompt('请输入"' + row.userName + '"的新密码', "提示", {
this.$prompt('请输入"' + row.Name + '"的新密码', "提示", {
confirmButtonText: "确定",
cancelButtonText: "取消",
closeOnClickModal: false,
@ -465,7 +454,7 @@ export default {
}
},
}).then(({ value }) => {
resetUserPwd(row.userId, value).then(response => {
resetUserPwd(row.Id, value).then(response => {
this.$modal.msgSuccess("修改成功,新密码是:" + value)
})
}).catch(() => {})
@ -474,14 +463,14 @@ export default {
submitForm: function() {
this.$refs["form"].validate(valid => {
if (valid) {
if (this.form.userId != undefined) {
updateUser(this.form).then(response => {
if (this.form.Id != undefined) {
update(this.form).then(response => {
this.$modal.msgSuccess("修改成功")
this.open = false
this.getList()
})
} else {
addUser(this.form).then(response => {
add(this.form).then(response => {
this.$modal.msgSuccess("新增成功")
this.open = false
this.getList()
@ -492,9 +481,9 @@ export default {
},
/** 删除按钮操作 */
handleDelete(row) {
const userIds = row.userId || this.ids
this.$modal.confirm('是否确认删除设备编号为"' + userIds + '"的数据项?').then(function() {
return delUser(userIds)
const Ids = row.Id || this.ids
this.$modal.confirm('是否确认删除设备编号为"' + Ids + '"的数据项?').then(function() {
return del(Ids)
}).then(() => {
this.getList()
this.$modal.msgSuccess("删除成功")

@ -0,0 +1,132 @@
<template>
<div :class="className" :style="{height:height,width:width}" />
</template>
<script>
import * as echarts from 'echarts'
require('echarts/theme/macarons') // echarts theme
const animationDuration = 6000
export default {
props: {
className: {
type: String,
default: 'chart'
},
width: {
type: String,
default: '100%'
},
height: {
type: String,
default: '200px'
}
},
data() {
return {
chart: null
}
},
mounted() {
this.$nextTick(() => {
this.initChart()
})
},
beforeDestroy() {
if (!this.chart) {
return
}
this.chart.dispose()
this.chart = null
},
methods: {
initChart() {
this.chart = echarts.init(this.$el, 'macarons')
this.chart.setOption(
{
color: ['#5b9bd5', '#ed7d31'],
backgroundColor: '#FFF',
grid: {
top: 20,
bottom: 100,
left: '12%',
right: '2%'
},
legend: {
bottom: '10',
itemWidth: 30,
itemHeight: 6,
data: ['逐月总逆温日', '逐月PM2.5浓度']
},
xAxis: [{
name: '城市',
nameLocation: 'center',
nameGap: 50,
axisLine: {
show: false
},
axisTick: {
show: false
},
axisLabel: {
rotate: 50
},
data: ['南京', '无锡', '徐州', '常州', '苏州', '南通', '连云港', '淮安', '盐城', '扬州', '镇江', '泰州', '宿迁'],
}],
yAxis: [{
name: '地面风速(m/s)',
nameLocation: 'center',
nameGap: 40,
nameTextStyle: {
color: '#000'
},
axisTick: {
show: false
},
splitLine: {
show: true,
lineStyle: {
color: '#CCC'
}
},
axisLabel: {
color: '#000'
}
}],
series: [{
name: '逐月总逆温日',
type: 'line',
itemStyle: {
color: '#5b9bd5',
borderColor: '#5b9bd5',
borderWidth: 4
},
lineStyle: {
width: 4
},
data: [2.0, 4.9, 7.0, 23.2, 25.6, 76.7, 135.6, 162.2, 32.6, 20.0, 6.4, 3.3, 20]
},
{
name: '逐月PM2.5浓度',
type: 'line',
itemStyle: {
color: '#ed7d31',
borderColor: '#ed7d31',
borderWidth: 4
},
lineStyle: {
width: 4
},
data: [2.6, 5.9, 9.0, 26.4, 28.7, 70.7, 175.6, 182.2, 48.7, 18.8, 6.0, 2.3, 15]
}
]
}
)
}
}
}
</script>

@ -1,6 +1,6 @@
<template>
<div class="">
<h3 class="h3">交换机</h3>
<h3 class="h3" @click="handleDetail">交换机</h3>
<el-row>
<el-col :span="14">
<img src="../../../assets/images/profile.jpg" width="100%" alt="" srcset="">
@ -64,6 +64,12 @@ export default {
created() {
},
methods: {
/** 查看详情 */
handleDetail: function(row) {
console.log("%c 🖍: row ", "font-size:16px;background-color:#3c235b;color:white;", row)
const userId = row.pointerId
this.$router.push("/inMonitoring/devicesState-detail/detail/" + userId)
},
}
}
</script>

@ -0,0 +1,198 @@
<template>
<div class="app-container">
<el-row :gutter="5">
<el-col :span="24">
<el-card>
<el-row>
<el-col :span="4">
<h3>交换机</h3>
</el-col>
<el-col :span="4">
<h3>持续在线XXXXX小时</h3>
</el-col>
</el-row>
<el-divider></el-divider>
<el-row>
<el-col :span="8">
<h3>交换机</h3>
</el-col>
<el-col :span="4">
<h3>设备基本信息</h3>
<p>
<span>设备型号:</span>
<span>待开发</span>
</p>
<p>
<span>设备级别:</span>
<span>待开发</span>
</p>
<p>
<span>设备版本:</span>
<span>待开发</span>
</p>
<p>
<span>设备类型:</span>
<span>待开发</span>
</p>
</el-col>
<el-col :span="4">
<h3>设备出厂信息</h3>
<p>
<span>生产商名称:</span>
<span>待开发</span>
</p>
<p>
<span>供货商名称:</span>
<span>待开发</span>
</p>
<p>
<span>出厂日期:</span>
<span>待开发</span>
</p>
<p>
<span>质保时间:</span>
<span>待开发</span>
</p>
<p>
<span>联系人:</span>
<span>待开发</span>
</p>
<p>
<span>联系电话:</span>
<span>待开发</span>
</p>
</el-col>
<el-col :span="4">
<h3>设备管理信息</h3>
<p>
<span>带外IP管理:</span>
<span>待开发</span>
</p>
<p>
<span>安装位置:</span>
<span>待开发</span>
</p>
<p>
<span>安装日期:</span>
<span>待开发</span>
</p>
<p>
<span>服役年限:</span>
<span>待开发</span>
</p>
<p>
<span>管理员:</span>
<span>待开发</span>
</p>
</el-col>
<el-col :span="4">
<h3>设备状态信息</h3>
<p>
<span>累计预警次数:</span>
<span>待开发</span>
</p>
<p>
<span>累计维修次数:</span>
<span>待开发</span>
</p>
</el-col>
</el-row>
</el-card>
</el-col>
</el-row>
<el-row class="mt10" :gutter="10">
<el-col :span="12">
<el-card :style="{height: '500px'}">
<el-row>
<el-col :span="24" class="flex alignItems gap10">
<h3>设备运行数据</h3>
<el-date-picker v-model="dateRange" style="width: 240px" value-format="yyyy-MM-dd" type="daterange" range-separator="-" start-placeholder="开始日期" end-placeholder="结束日期"></el-date-picker>
</el-col>
<el-col :span="14">
<el-row>
<el-col :span="12">
<LineChart></LineChart>
</el-col>
<el-col :span="12">
<LineChart></LineChart>
</el-col>
</el-row>
<el-row>
<el-col :span="12">
<LineChart></LineChart>
</el-col>
<el-col :span="12">
<LineChart></LineChart>
</el-col>
</el-row>
</el-col>
<el-col :span="10">
<el-row>
<el-col :span="12">
<BarChart height="200px" :dateRange="dateRange"></BarChart>
</el-col>
<el-col :span="12">
<BarChart height="200px" :dateRange="dateRange"></BarChart>
</el-col>
</el-row>
<el-row>
<el-col :span="8">
<BarChart2 height="200px" :dateRange="dateRange"></BarChart2>
</el-col>
<el-col :span="8">
<BarChart2 height="200px" :dateRange="dateRange"></BarChart2>
</el-col>
<el-col :span="8">
<BarChart2 height="200px" :dateRange="dateRange"></BarChart2>
</el-col>
</el-row>
</el-col>
</el-row>
</el-card>
</el-col>
<el-col :span="12">
<el-card :style="{height: '500px'}">
<el-tabs v-model="selectedTab">
<el-tab-pane label="历史预警" :name="1">
历史预警
</el-tab-pane>
<el-tab-pane label="接口信息" :name="2">
接口信息
</el-tab-pane>
<el-tab-pane label="其他指标" :name="3">
其他指标
</el-tab-pane>
</el-tabs>
</el-card>
</el-col>
</el-row>
</div>
</template>
<script>
import BarChart from './BarChart1.vue'
import LineChart from './LineChart.vue'
import BarChart2 from './BarChart2.vue'
export default {
name: "cardItem",
components: { BarChart, BarChart2, LineChart },
data() {
return {
dateRange: [],
selectedTab: 1
}
},
created() {
},
methods: {
}
}
</script>
<style lang="less" scoped>
</style>

@ -2,8 +2,6 @@
<div class="app-container">
<el-row :gutter="20">
<splitpanes :horizontal="this.$store.getters.device === 'mobile'" class="default-theme">
<!--设备状态监控=-->
<pane size="84">
<el-col>
@ -40,7 +38,7 @@
<div class="app-container" v-loading="loading">
<el-row :gutter="10">
<el-col :span="8" class="card-box" v-for="(i,k) in userList" :key="k">
<el-col :span="8" class="card-box" v-for="(i,k) in userList" :key="k" @click="handleDetail(i)">
<el-card>
<cardItem/>
</el-card>
@ -385,6 +383,11 @@ export default {
this.form.password = this.initPassword
})
},
/** 查看详情 */
handleDetail: function(row) {
const userId = row.userId
this.$router.push("/inMonitoring/devicesState-detail/detail/" + userId)
},
/** 修改按钮操作 */
handleUpdate(row) {
this.reset()

@ -29,35 +29,23 @@
<el-col :span="1.5">
<el-button type="primary" plain icon="el-icon-plus" size="mini" @click="handleAdd" v-hasPermi="['device:deviceType:add']">新增</el-button>
</el-col>
<el-col :span="1.5">
<el-button type="success" plain icon="el-icon-edit" size="mini" :disabled="single" @click="handleUpdate" v-hasPermi="['device:deviceType:edit']">修改</el-button>
</el-col>
<el-col :span="1.5">
<el-button type="danger" plain icon="el-icon-delete" size="mini" :disabled="multiple" @click="handleDelete" v-hasPermi="['device:deviceType:remove']">删除</el-button>
</el-col>
<el-col :span="1.5">
<el-button type="info" plain icon="el-icon-upload2" size="mini" @click="handleImport" v-hasPermi="['device:deviceType:import']">导入</el-button>
</el-col>
<el-col :span="1.5">
<el-button type="warning" plain icon="el-icon-download" size="mini" @click="handleExport" v-hasPermi="['device:deviceType:export']">导出</el-button>
</el-col>
<right-toolbar :showSearch.sync="showSearch" @queryTable="getList" :columns="columns"></right-toolbar>
</el-row>
<el-table v-loading="loading" :data="userList" @selection-change="handleSelectionChange">
<el-table-column type="selection" width="50" align="center" />
<el-table-column label="类型编号" align="center" key="userId" prop="userId" v-if="columns[0].visible" />
<el-table-column label="类型名称" align="center" key="userName" prop="userName" v-if="columns[1].visible" :show-overflow-tooltip="true" />
<el-table-column label="状态" align="center" key="status" v-if="columns[5].visible">
<template slot-scope="scope">
<el-switch v-model="scope.row.status" active-value="0" inactive-value="1" @change="handleStatusChange(scope.row)"></el-switch>
</template>
</el-table-column>
<el-table-column label="创建时间" align="center" prop="createTime" v-if="columns[6].visible" width="160">
<template slot-scope="scope">
<span>{{ parseTime(scope.row.createTime) }}</span>
</template>
</el-table-column>
<el-table-column label="编号" align="center" key="userId" prop="userId" v-if="columns[0].visible" />
<el-table-column label="名称" align="center" key="userName" prop="userName" v-if="columns[1].visible" :show-overflow-tooltip="true" />
<el-table-column label="描述" align="center" key="userName" prop="userName" v-if="columns[1].visible" :show-overflow-tooltip="true" />
<el-table-column label="触发条件" align="center" key="userName" prop="userName" v-if="columns[1].visible" :show-overflow-tooltip="true" />
<el-table-column label="预警等级" align="center" key="userName" prop="userName" v-if="columns[1].visible" :show-overflow-tooltip="true" />
<el-table-column label="预警方式" align="center" key="userName" prop="userName" v-if="columns[1].visible" :show-overflow-tooltip="true" />
<el-table-column label="预警消息" align="center" key="userName" prop="userName" v-if="columns[1].visible" :show-overflow-tooltip="true" />
<el-table-column label="操作" align="center" width="160" class-name="small-padding fixed-width">
<template slot-scope="scope" v-if="scope.row.userId !== 1">
<el-button size="mini" type="text" icon="el-icon-edit" @click="handleUpdate(scope.row)" v-hasPermi="['device:deviceType:edit']">修改</el-button>

@ -1,8 +1,8 @@
<template>
<div class="dashboard-container">
<div class="welcome-message">
<h1>欢迎进入智能运维系统</h1>
<p>这里是智能运维系统的主界面您可以在这里进行各种操作和管理</p>
<h1>欢迎进入中国烟草</h1>
<p>这里是中国烟草的主界面您可以在这里进行各种操作和管理</p>
</div>
</div>
</template><style scoped>
@ -61,8 +61,8 @@
</style><template>
<div class="dashboard-container">
<div class="welcome-message">
<h1><i class="el-icon-s-operation"></i> 欢迎进入智能运维系统</h1>
<p>这里是智能运维系统的主界面您可以在这里进行各种操作和管理</p>
<h1><i class="el-icon-s-operation"></i> 欢迎进入中国烟草</h1>
<p>这里是中国烟草的主界面您可以在这里进行各种操作和管理</p>
</div>
</div>
</template>

@ -7,7 +7,7 @@ function resolve(dir) {
const CompressionPlugin = require('compression-webpack-plugin')
const name = process.env.VUE_APP_TITLE || '智能运维管理系统' // 网页标题
const name = process.env.VUE_APP_TITLE || '中国烟草运维管理系统' // 网页标题
const baseUrl = 'http://localhost:8080' // 后端接口

File diff suppressed because it is too large Load Diff
Loading…
Cancel
Save