xiaohuo 11 months ago
commit d138851e5e
  1. 58
      ALOps_sys_fe/alops-ui/src/api/QandA/Aiassistant.js
  2. 52
      ALOps_sys_fe/alops-ui/src/api/QandA/dict/data.js
  3. 60
      ALOps_sys_fe/alops-ui/src/api/QandA/dict/type.js
  4. 49
      ALOps_sys_fe/alops-ui/src/api/QandA/knowledge.js
  5. 33
      ALOps_sys_fe/alops-ui/src/api/device/deviceInformation.js
  6. 5
      ALOps_sys_fe/alops-ui/src/api/device/deviceManufacturer.js
  7. 1
      ALOps_sys_fe/alops-ui/src/api/device/deviceType.js
  8. 2
      ALOps_sys_fe/alops-ui/src/api/device/files.js
  9. 50
      ALOps_sys_fe/alops-ui/src/api/inMonitoring/devicesState.js
  10. 10
      ALOps_sys_fe/alops-ui/src/components/ImageUpload/index.vue
  11. 346
      ALOps_sys_fe/alops-ui/src/views/QandA/knowledge/index.vue
  12. 189
      ALOps_sys_fe/alops-ui/src/views/device/deviceInformation/index.vue
  13. 10
      ALOps_sys_fe/alops-ui/src/views/device/deviceManufacturer/index.vue
  14. 46
      ALOps_sys_fe/alops-ui/src/views/device/deviceType/index.vue
  15. 124
      ALOps_sys_fe/alops-ui/src/views/device/files/index.vue
  16. 454
      ALOps_sys_fe/alops-ui/src/views/device/supplier/index.vue
  17. 4
      ALOps_sys_fe/alops-ui/src/views/inMonitoring/devicesState/index.vue

@ -0,0 +1,58 @@
import request from '@/utils/request'
import { parseStrEmpty } from "@/utils/ruoyi";
const api = '/device/files/'
// 查询详细
export function getDict() {
return request({
url: '/sys_dict',
method: 'get'
})
}
// 查询列表
export function list(query) {
return request({
url: api + 'list',
method: 'get',
params: query
})
}
// 查询详细
export function getInfo(id) {
return request({
url: api + '/queryById/' + parseStrEmpty(id),
method: 'get'
})
}
// 新增
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'
})
}

@ -0,0 +1,52 @@
import request from '@/utils/request'
// 查询字典数据列表
export function listData(query) {
return request({
url: '/system/dict/data/list',
method: 'get',
params: query
})
}
// 查询字典数据详细
export function getData(dictCode) {
return request({
url: '/system/dict/data/' + dictCode,
method: 'get'
})
}
// 根据字典类型查询字典数据信息
export function getDicts(dictType) {
return request({
url: '/system/dict/data/type/' + dictType,
method: 'get'
})
}
// 新增字典数据
export function addData(data) {
return request({
url: '/system/dict/data',
method: 'post',
data: data
})
}
// 修改字典数据
export function updateData(data) {
return request({
url: '/system/dict/data',
method: 'put',
data: data
})
}
// 删除字典数据
export function delData(dictCode) {
return request({
url: '/system/dict/data/' + dictCode,
method: 'delete'
})
}

@ -0,0 +1,60 @@
import request from '@/utils/request'
// 查询字典类型列表
export function listType(query) {
return request({
url: '/system/dict/type/list',
method: 'get',
params: query
})
}
// 查询字典类型详细
export function getType(dictId) {
return request({
url: '/system/dict/type/' + dictId,
method: 'get'
})
}
// 新增字典类型
export function addType(data) {
return request({
url: '/system/dict/type',
method: 'post',
data: data
})
}
// 修改字典类型
export function updateType(data) {
return request({
url: '/system/dict/type',
method: 'put',
data: data
})
}
// 删除字典类型
export function delType(dictId) {
return request({
url: '/system/dict/type/' + dictId,
method: 'delete'
})
}
// 刷新字典缓存
export function refreshCache() {
return request({
url: '/system/dict/type/refreshCache',
method: 'delete'
})
}
// 获取字典选择框列表
export function optionselect() {
return request({
url: '/system/dict/type/optionselect',
method: 'get'
})
}

@ -0,0 +1,49 @@
import request from '@/utils/request'
const api = '/device/deviceType/'
// 查询详细
export function getDict() {
return request({
url: '/sys_dict',
method: 'get'
})
}
// 查询列表
export function list(query) {
return request({
url: '/knowBase/query',
method: 'get',
params: query
})
}
// 新增
export function add(data) {
return request({
url: '/knowledge/add',
method: 'post',
data: data
})
}
// 修改
export function update(data) {
return request({
url: '/knowBasemodify',
method: 'put',
data: data
})
}
// 删除
export function del(id) {
return request({
url: '/knowBase/delete/' + id,
method: 'delete'
})
}

@ -1,38 +1,21 @@
import request from '@/utils/request'
import { parseStrEmpty } from "@/utils/ruoyi";
const api = '/equipment/'
const api = '/device/deviceInformation/'
// 立即执行
export function protoCollect() {
export function addRule(data) {
return request({
url: api + 'protoCollect',
method: 'post'
})
}
// 定时采集规则添加
export function addTimerRule(data) {
return request({
url: api + 'addTimerRule',
url: api + 'addRule',
method: 'post',
data: data
data: data,
headers: { 'Content-Type': 'application/json' }
})
}
// 查询规则
export function queryTimerRule(data) {
export function queryRule() {
return request({
url: api + 'queryTimerRule',
method: 'post',
data: data
url: api + 'queryRule',
method: 'get'
})
}
// 修改规则
export function modifyTimerRule(data) {
return request({
url: api + 'modifyTimerRule',
method: 'post',
data: data
})
}

@ -1,6 +1,5 @@
import request from '@/utils/request'
import { parseStrEmpty } from "@/utils/ruoyi";
const api = '/equManufacture/'
const api = '/device/deviceManu/'
// 查询详细
export function getDict() {
@ -40,7 +39,7 @@ export function update(data) {
// 删除
export function del(id) {
return request({
url: api + 'delete' + id,
url: api + id,
method: 'delete'
})
}

@ -1,5 +1,4 @@
import request from '@/utils/request'
import { parseStrEmpty } from "@/utils/ruoyi";
const api = '/device/deviceType/'
// 查询详细

@ -14,7 +14,7 @@ export function getDict() {
export function list(query) {
return request({
url: api + 'list',
method: 'post',
method: 'get',
params: query
})
}

@ -1,11 +1,11 @@
import request from '@/utils/request'
import { parseStrEmpty } from "@/utils/ruoyi";
const api = '/equipment/'
const api = '/device/files/'
// 查询多台设备列表
export function list(query) {
return request({
url: api + 'queryByVO',
url: api + 'listMonitor',
method: 'get',
params: query
})
@ -14,20 +14,60 @@ export function list(query) {
// 查询单台设备
export function getInfo(id) {
return request({
url: api + '/queryById/' + parseStrEmpty(id),
url: api + 'latest/' + parseStrEmpty(id),
method: 'get'
})
}
// 查询设备历史预警
// 设备管理基本信息(获取设备指定时间段内的历史监控信息)
export function historyQuery(query) {
return request({
url: '/alarm/historyQuery',
url: api + 'history',
method: 'get',
params: query
})
}
// 设备历史预警
export function alertmessage(equId) {
return request({
url: '/inMonitoring/alertmessage/' + parseStrEmpty(equId),
method: 'get'
})
}
// 查询interface接口信息
export function systemInterface(equId) {
return request({
url: '/system/interface/' + parseStrEmpty(equId),
method: 'get'
})
}
// 查询Routing路由信息
export function systemRouting(equId) {
return request({
url: '/system/routing/' + parseStrEmpty(equId),
method: 'get'
})
}
// 查询Veneer单板运行信息
export function systemVeneer(equId) {
return request({
url: '/system/veneer/' + parseStrEmpty(equId),
method: 'get'
})
}
// 查询Vlan信息
export function deviceVlan(equId) {
return request({
url: '/device/vlan/ByEquId/' + parseStrEmpty(equId),
method: 'get'
})
}
// 查询接口信息
export function interfaceQuery(query) {
return request({

@ -4,7 +4,7 @@
multiple
:disabled="disabled"
:action="uploadImgUrl"
list-type="picture-card"
:list-type="listType"
:on-success="handleUploadSuccess"
:before-upload="handleBeforeUpload"
:data="data"
@ -19,7 +19,8 @@
:on-preview="handlePictureCardPreview"
:class="{hide: this.fileList.length >= this.limit}"
>
<i class="el-icon-plus"></i>
<el-button v-if="listType == 'txt'" size="small" type="primary">点击上传</el-button>
<i class="el-icon-plus" v-else></i>
</el-upload>
<!-- 上传提示 -->
@ -57,6 +58,11 @@ export default {
type: String,
default: "/common/upload"
},
// text/picture/picture-card
listType: {
type: String,
default: "picture-card"
},
//
data: {
type: Object

@ -2,79 +2,31 @@
<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>
<el-form-item label="手机号码" prop="phonenumber">
<el-input v-model="queryParams.phonenumber" placeholder="请输入手机号码" clearable style="width: 240px" @keyup.enter.native="handleQuery" />
</el-form-item>
<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 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>
<el-form-item>
<el-button type="primary" icon="el-icon-search" size="mini" @click="handleQuery">搜索</el-button>
<el-button icon="el-icon-refresh" size="mini" @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="el-icon-plus" size="mini" @click="handleAdd" v-hasPermi="['device:deviceInformation:add']">新增</el-button>
<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:deviceInformation: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:deviceInformation: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:deviceInformation: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:deviceInformation:export']">导出</el-button>
</el-col>
<right-toolbar :showSearch.sync="showSearch" @queryTable="getList" :columns="columns"></right-toolbar>
<!-- <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="nickName" prop="nickName" v-if="columns[2].visible" :show-overflow-tooltip="true" />
<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" 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">
<el-table-column label="序号" align="center" key="id" prop="id"/>
<el-table-column label="文件名称" align="center" key="title" prop="title" :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="createBy" prop="createBy" :show-overflow-tooltip="true" />
<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" 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:deviceInformation:edit']">修改</el-button>
<el-button size="mini" type="text" icon="el-icon-delete" @click="handleDelete(scope.row)" v-hasPermi="['device:deviceInformation:remove']">删除</el-button>
<el-dropdown size="mini" @command="(command) => handleCommand(command, scope.row)" v-hasPermi="['device:deviceInformation:resetPwd', 'device:deviceInformation:edit']">
<el-button size="mini" type="text" icon="el-icon-d-arrow-right">更多</el-button>
<el-dropdown-menu slot="dropdown">
<el-dropdown-item command="handleResetPwd" icon="el-icon-key" v-hasPermi="['device:deviceInformation:resetPwd']">重置密码</el-dropdown-item>
<el-dropdown-item command="handleAuthRole" icon="el-icon-circle-check" v-hasPermi="['device:deviceInformation:edit']">分配角色</el-dropdown-item>
</el-dropdown-menu>
</el-dropdown>
<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>
</el-table-column>
</el-table>
@ -85,67 +37,23 @@
</splitpanes>
</el-row>
<el-dialog :title="title" :visible.sync="open" width="760px" append-to-body>
<el-dialog :title="title" :visible.sync="open" width="760px" append-to-body :destroy-on-close="true">
<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>
</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 label="文档标题" prop="title">
<el-input v-model="form.title" 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>
</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-col :span="24">
<el-form-item label="文档简介" prop="description">
<el-input v-model="form.description" type="textarea" :rows="3" placeholder="请输入文档简介" />
</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="fileUrl">
<ImageUpload @input="upImage" :value="form.fileUrl" :fileType="['docx','txt']" listType="txt"/>
</el-form-item>
</el-col>
</el-row>
@ -157,31 +65,12 @@
<el-button @click="cancel"> </el-button>
</span>
</el-dialog>
<!-- 用户导入对话框 -->
<el-dialog :title="upload.title" :visible.sync="upload.open" width="400px" append-to-body>
<el-upload ref="upload" :limit="1" accept=".xlsx, .xls" :headers="upload.headers" :action="upload.url + '?updateSupport=' + upload.updateSupport" :disabled="upload.isUploading" :on-progress="handleFileUploadProgress" :on-success="handleFileSuccess" :auto-upload="false" drag>
<i class="el-icon-upload"></i>
<div class="el-upload__text">将文件拖到此处<em>点击上传</em></div>
<div class="el-upload__tip text-center" slot="tip">
<div class="el-upload__tip" slot="tip">
<el-checkbox v-model="upload.updateSupport" />是否更新已经存在的用户数据
</div>
<span>仅允许导入xlsxlsx格式文件</span>
<el-link type="primary" :underline="false" style="font-size: 12px; vertical-align: baseline" @click="importTemplate">下载模板</el-link>
</div>
</el-upload>
<div slot="footer" class="dialog-footer">
<el-button type="primary" @click="submitFileForm"> </el-button>
<el-button @click="upload.open = false"> </el-button>
</div>
</el-dialog>
</div>
</template>
<script>
import { listUser, getUser, delUser, addUser, updateUser, resetUserPwd, changeUserStatus, deptTreeSelect } from "@/api/system/user"
import { list, del, add, update } from "@/api/QandA/knowledge"
import { getToken } from "@/utils/auth"
import Treeselect from "@riophae/vue-treeselect"
import "@riophae/vue-treeselect/dist/vue-treeselect.css"
@ -194,6 +83,7 @@ export default {
components: { Treeselect, Splitpanes, Pane },
data() {
return {
appBase:process.env.VUE_APP_BASE_API,
//
loading: true,
//
@ -206,7 +96,7 @@ export default {
showSearch: true,
//
total: 0,
//
//
userList: null,
//
title: "",
@ -232,15 +122,15 @@ export default {
children: "children",
label: "label"
},
//
//
upload: {
//
//
open: false,
//
//
title: "",
//
isUploading: false,
//
//
updateSupport: 0,
//
headers: { Authorization: "Bearer " + getToken() },
@ -251,50 +141,18 @@ export default {
queryParams: {
pageNum: 1,
pageSize: 10,
userName: undefined,
phonenumber: undefined,
status: undefined,
deptId: undefined
name: 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: false, showInSelector: false }, // 👈
{ key: 4, label: '手机号码', visible: true, showInSelector: true },
{ key: 5, label: '状态', visible: true, showInSelector: true },
{ key: 6, label: '创建时间', visible: true, showInSelector: true }
],
//
rules: {
userName: [
{ required: true, message: "用户名称不能为空", trigger: "blur" },
{ min: 2, max: 20, message: '用户名称长度必须介于 2 和 20 之间', trigger: 'blur' }
],
nickName: [
{ required: true, message: "用户昵称不能为空", trigger: "blur" }
name: [
{ required: true, message: "类型名称不能为空", trigger: "blur" },
{ min: 2, max: 20, message: '类型名称长度必须介于 2 和 20 之间', 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"]
}
image: [
{ required: true, message: "请上传设备图片", trigger: "blur" },
],
phonenumber: [
{
pattern: /^1[3|4|5|6|7|8|9][0-9]\d{8}$/,
message: "请输入正确的手机号码",
trigger: "blur"
}
]
}
}
},
@ -312,55 +170,21 @@ export default {
})
},
methods: {
/** 查询用户列表 */
/** 查询类型列表 */
getList() {
this.loading = true
listUser(this.addDateRange(this.queryParams, this.dateRange)).then(response => {
list(this.addDateRange(this.queryParams, this.dateRange)).then(response => {
this.userList = response.rows
this.total = response.total
this.loading = false
}
)
},
// /** */
// getDeptTree() {
// deptTreeSelect().then(response => {
// this.deptOptions = response.data
// this.enabledDeptOptions = this.filterDisabledDept(JSON.parse(JSON.stringify(response.data)))
// })
// },
//
filterDisabledDept(deptList) {
return deptList.filter(dept => {
if (dept.disabled) {
return false
}
if (dept.children && dept.children.length) {
dept.children = this.filterDisabledDept(dept.children)
}
return true
})
},
//
filterNode(value, data) {
if (!value) return true
return data.label.indexOf(value) !== -1
},
//
handleNodeClick(data) {
this.queryParams.deptId = data.id
this.handleQuery()
},
//
handleStatusChange(row) {
let text = row.status === "0" ? "启用" : "停用"
this.$modal.confirm('确认要"' + text + '""' + row.userName + '"用户吗?').then(function() {
return changeUserStatus(row.userId, row.status)
}).then(() => {
this.$modal.msgSuccess(text + "成功")
}).catch(function() {
row.status = row.status === "0" ? "1" : "0"
})
upImage(fileList){
console.log(fileList)
this.form.fileUrl = fileList
},
//
cancel() {
@ -370,18 +194,12 @@ export default {
//
reset() {
this.form = {
userId: undefined,
deptId: undefined,
userName: undefined,
nickName: undefined,
password: undefined,
phonenumber: undefined,
email: undefined,
sex: undefined,
status: "0",
remark: undefined,
postIds: [],
roleIds: []
id: undefined,
name: undefined,
description: undefined,
createBy: undefined,
image: undefined,
createDate: undefined
}
this.resetForm("form")
},
@ -400,85 +218,35 @@ 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
},
//
handleCommand(command, row) {
switch (command) {
case "handleResetPwd":
this.handleResetPwd(row)
break
case "handleAuthRole":
this.handleAuthRole(row)
break
default:
break
}
},
/** 新增按钮操作 */
handleAdd() {
this.reset()
getUser().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 => {
this.form = response.data
this.postOptions = response.posts
this.roleOptions = response.roles
this.$set(this.form, "postIds", response.postIds)
this.$set(this.form, "roleIds", response.roleIds)
const id = row.id || this.ids
this.open = true
this.title = "修改用户"
this.form.password = ""
})
},
/** 重置密码按钮操作 */
handleResetPwd(row) {
this.$prompt('请输入"' + row.userName + '"的新密码', "提示", {
confirmButtonText: "确定",
cancelButtonText: "取消",
closeOnClickModal: false,
inputPattern: /^.{5,20}$/,
inputErrorMessage: "用户密码长度必须介于 5 和 20 之间",
inputValidator: (value) => {
if (/<|>|"|'|\||\\/.test(value)) {
return "不能包含非法字符:< > \" ' \\\ |"
}
},
}).then(({ value }) => {
resetUserPwd(row.userId, value).then(response => {
this.$modal.msgSuccess("修改成功,新密码是:" + value)
})
}).catch(() => {})
},
/** 分配角色操作 */
handleAuthRole: function(row) {
const userId = row.userId
this.$router.push("/system/user-auth/role/" + userId)
this.title = "修改类型"
this.form = {...row, image: row.image}
},
/** 提交按钮 */
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()
@ -489,9 +257,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("删除成功")
@ -505,7 +273,7 @@ export default {
},
/** 导入按钮操作 */
handleImport() {
this.upload.title = "用户导入"
this.upload.title = "类型导入"
this.upload.open = true
},
/** 下载模板操作 */

@ -5,25 +5,22 @@
<!--用户数据-->
<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>
<el-button type="primary" icon="el-icon-search" @click="handleQuery">立即执行</el-button>
</el-form-item>
</el-row>
<el-form :model="queryParams" ref="form" size="small" :inline="true" v-show="showSearch" label-width="auto">
<el-row>
<el-form-item label="开启定时" prop="userName">
<el-radio-group v-model="radio">
<el-form-item label="开启定时" prop="queryParams">
<el-radio-group v-model="queryParams.ruleType">
<el-radio :label="1">间隔采集</el-radio>
<el-radio :label="2">固定时间采集</el-radio>
<el-radio :label="3">立即采集</el-radio>
</el-radio-group>
</el-form-item>
</el-row>
<el-row v-show="radio == 1">
<el-row v-show="queryParams.ruleType == 1">
<el-col :span="24">
<el-form-item label="采集频率" prop="userName">
<el-input-number v-model="num" controls-position="right" @change="handleChange" :min="1"></el-input-number>
<el-form-item label="采集频率" prop="frequency">
<el-input-number v-model="queryParams.frequency" controls-position="right" :min="1"></el-input-number>
</el-form-item>
</el-col>
<el-col :span="24">
@ -39,16 +36,21 @@
</el-form-item>
</el-col>
</el-row>
<el-row v-show="radio == 2">
<el-row v-show="queryParams.ruleType == 2">
<el-col :span="24">
<el-form-item label="采集时间限制">
<el-time-picker
v-model="dateRange"
v-model="queryParams.gatherTime"
placeholder="任意时间点">
</el-time-picker>
</el-form-item>
</el-col>
</el-row>
<el-row>
<el-form-item>
<el-button type="primary" icon="el-icon-search" @click="submitForm">确认</el-button>
</el-form-item>
</el-row>
</el-form>
</el-col>
</pane>
@ -58,8 +60,7 @@
</template>
<script>
import { listUser, getUser, delUser, addUser, updateUser, resetUserPwd, changeUserStatus, deptTreeSelect } from "@/api/system/user"
import { protoCollect, addTimerRule, queryTimerRule, modifyTimerRule } from "@/api/device/deviceInformation"
import { queryRule, getUser, addRule, resetUserPwd, changeUserStatus } from "@/api/device/deviceInformation"
import { getToken } from "@/utils/auth"
import Treeselect from "@riophae/vue-treeselect"
import "@riophae/vue-treeselect/dist/vue-treeselect.css"
@ -90,62 +91,16 @@ export default {
userList: null,
//
title: "",
//
deptOptions: undefined,
//
enabledDeptOptions: undefined,
//
open: false,
//
deptName: undefined,
//
initPassword: undefined,
//
dateRange: [],
//
postOptions: [],
//
roleOptions: [],
//
form: {},
defaultProps: {
children: "children",
label: "label"
},
//
upload: {
//
open: false,
//
title: "",
//
isUploading: false,
//
updateSupport: 0,
//
headers: { Authorization: "Bearer " + getToken() },
//
url: process.env.VUE_APP_BASE_API + "/system/user/importData"
},
//
dateRange: [new Date(), new Date()],
//
queryParams: {
pageNum: 1,
pageSize: 10,
userName: undefined,
phonenumber: undefined,
status: undefined,
deptId: undefined
ruleType: 1,
frequency: 1,
gatherTime: null,
},
//
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: false, showInSelector: false }, // 👈
{ key: 4, label: '手机号码', visible: true, showInSelector: true },
{ key: 5, label: '状态', visible: true, showInSelector: true },
{ key: 6, label: '创建时间', visible: true, showInSelector: true }
],
//
rules: {
@ -195,20 +150,20 @@ export default {
/** 查询用户列表 */
getList() {
this.loading = true
listUser(this.addDateRange(this.queryParams, this.dateRange)).then(response => {
queryRule(this.addDateRange(this.queryParams, this.dateRange)).then(response => {
this.userList = response.rows
this.total = response.total
this.loading = false
}
)
},
// /** */
// getDeptTree() {
// deptTreeSelect().then(response => {
// this.deptOptions = response.data
// this.enabledDeptOptions = this.filterDisabledDept(JSON.parse(JSON.stringify(response.data)))
// })
// },
handleTimeChange(val) {
console.log('时间范围:', val); // val [start, end]
const [startTime, endTime] = val;
this.queryParams.startTime = startTime
this.queryParams.endTime = endTime
//
},
//
filterDisabledDept(deptList) {
return deptList.filter(dept => {
@ -226,11 +181,6 @@ export default {
if (!value) return true
return data.label.indexOf(value) !== -1
},
//
handleNodeClick(data) {
this.queryParams.deptId = data.id
this.handleQuery()
},
//
handleStatusChange(row) {
let text = row.status === "0" ? "启用" : "停用"
@ -265,38 +215,6 @@ export default {
}
this.resetForm("form")
},
/** 搜索按钮操作 */
handleQuery() {
this.queryParams.pageNum = 1
this.getList()
},
/** 重置按钮操作 */
resetQuery() {
this.dateRange = []
this.resetForm("queryForm")
this.queryParams.deptId = undefined
this.$refs.tree.setCurrentKey(null)
this.handleQuery()
},
//
handleSelectionChange(selection) {
this.ids = selection.map(item => item.userId)
this.single = selection.length != 1
this.multiple = !selection.length
},
//
handleCommand(command, row) {
switch (command) {
case "handleResetPwd":
this.handleResetPwd(row)
break
case "handleAuthRole":
this.handleAuthRole(row)
break
default:
break
}
},
/** 新增按钮操作 */
handleAdd() {
this.reset()
@ -308,63 +226,16 @@ export default {
this.form.password = this.initPassword
})
},
/** 修改按钮操作 */
handleUpdate(row) {
this.reset()
const userId = row.userId || this.ids
getUser(userId).then(response => {
this.form = response.data
this.postOptions = response.posts
this.roleOptions = response.roles
this.$set(this.form, "postIds", response.postIds)
this.$set(this.form, "roleIds", response.roleIds)
this.open = true
this.title = "修改用户"
this.form.password = ""
})
},
/** 重置密码按钮操作 */
handleResetPwd(row) {
this.$prompt('请输入"' + row.userName + '"的新密码', "提示", {
confirmButtonText: "确定",
cancelButtonText: "取消",
closeOnClickModal: false,
inputPattern: /^.{5,20}$/,
inputErrorMessage: "用户密码长度必须介于 5 和 20 之间",
inputValidator: (value) => {
if (/<|>|"|'|\||\\/.test(value)) {
return "不能包含非法字符:< > \" ' \\\ |"
}
},
}).then(({ value }) => {
resetUserPwd(row.userId, value).then(response => {
this.$modal.msgSuccess("修改成功,新密码是:" + value)
})
}).catch(() => {})
},
/** 分配角色操作 */
handleAuthRole: function(row) {
const userId = row.userId
this.$router.push("/system/user-auth/role/" + userId)
},
/** 提交按钮 */
submitForm: function() {
this.$refs["form"].validate(valid => {
if (valid) {
if (this.form.userId != undefined) {
updateUser(this.form).then(response => {
this.$modal.msgSuccess("修改成功")
this.open = false
this.getList()
})
} else {
addUser(this.form).then(response => {
addRule(this.form).then(response => {
this.$modal.msgSuccess("新增成功")
this.open = false
this.getList()
})
}
}
})
},
/** 删除按钮操作 */

@ -112,7 +112,7 @@
</template>
<script>
import { listUser, getUser, delUser, addUser, updateUser, resetUserPwd, changeUserStatus, deptTreeSelect } from "@/api/system/user"
import { list, del, add, update, resetUserPwd, changeUserStatus } from "@/api/device/deviceManufacturer"
import { getToken } from "@/utils/auth"
import Treeselect from "@riophae/vue-treeselect"
import "@riophae/vue-treeselect/dist/vue-treeselect.css"
@ -235,7 +235,7 @@ export default {
/** 查询用户列表 */
getList() {
this.loading = true
listUser(this.addDateRange(this.queryParams, this.dateRange)).then(response => {
list(this.addDateRange(this.queryParams, this.dateRange)).then(response => {
this.userList = response.rows
this.total = response.total
this.loading = false
@ -392,13 +392,13 @@ export default {
this.$refs["form"].validate(valid => {
if (valid) {
if (this.form.Id != undefined) {
updateUser(this.form).then(response => {
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()
@ -411,7 +411,7 @@ export default {
handleDelete(row) {
const Ids = row.Id || this.ids
this.$modal.confirm('是否确认删除用户编号为"' + Ids + '"的数据项?').then(function() {
return delUser(Ids)
return del(Ids)
}).then(() => {
this.getList()
this.$modal.msgSuccess("删除成功")

@ -89,7 +89,7 @@
</template>
<script>
import { list, getUser, del, add, updateUser, resetUserPwd, changeUserStatus, deptTreeSelect } from "@/api/device/deviceType"
import { list, del, add, update } from "@/api/device/deviceType"
import { getToken } from "@/utils/auth"
import Treeselect from "@riophae/vue-treeselect"
import "@riophae/vue-treeselect/dist/vue-treeselect.css"
@ -204,46 +204,6 @@ export default {
this.form.image = fileList
},
// /** */
// getDeptTree() {
// deptTreeSelect().then(response => {
// this.deptOptions = response.data
// this.enabledDeptOptions = this.filterDisabledDept(JSON.parse(JSON.stringify(response.data)))
// })
// },
//
filterDisabledDept(deptList) {
return deptList.filter(dept => {
if (dept.disabled) {
return false
}
if (dept.children && dept.children.length) {
dept.children = this.filterDisabledDept(dept.children)
}
return true
})
},
//
filterNode(value, data) {
if (!value) return true
return data.label.indexOf(value) !== -1
},
//
handleNodeClick(data) {
this.queryParams.deptId = data.id
this.handleQuery()
},
//
handleStatusChange(row) {
let text = row.status === "0" ? "启用" : "停用"
this.$modal.confirm('确认要"' + text + '""' + row.name + '"类型吗?').then(function() {
return changeUserStatus(row.id, row.status)
}).then(() => {
this.$modal.msgSuccess(text + "成功")
}).catch(function() {
row.status = row.status === "0" ? "1" : "0"
})
},
//
cancel() {
@ -292,14 +252,14 @@ export default {
const id = row.id || this.ids
this.open = true
this.title = "修改类型"
this.form = {...row, image: process.env.VUE_APP_BASE_API+row.image}
this.form = {...row, image: row.image}
},
/** 提交按钮 */
submitForm: function() {
this.$refs["form"].validate(valid => {
if (valid) {
if (this.form.id != undefined) {
updateUser(this.form).then(response => {
update(this.form).then(response => {
this.$modal.msgSuccess("修改成功")
this.open = false
this.getList()

@ -6,10 +6,10 @@
<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="Name">
<el-input v-model="queryParams.Name" 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-form-item label="安装位置" prop="location">
<el-input v-model="queryParams.phonenumber" placeholder="请输入安装位置" clearable style="width: 240px" @keyup.enter.native="handleQuery" />
</el-form-item>
<el-form-item label="设备类型" prop="phonenumber">
@ -48,10 +48,10 @@
<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="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" 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">
@ -61,21 +61,21 @@
<el-table-column label="带外管理IP" align="center" key="Ip" prop="Ip" width="120" />
<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" key="location" prop="Location" width="120" />
<el-table-column label="安装时间" align="center" prop="InstallDate" width="160">
<template slot-scope="scope">
<span>{{ parseTime(scope.row.InstallDate) }}</span>
</template>
</el-table-column>
<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" prop="inCharge" 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">
<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>
@ -87,7 +87,7 @@
</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.Id !== 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>
@ -104,63 +104,63 @@
<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="id">
<el-input v-model="form.id" 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 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="nickName">
<el-input v-model="form.nickName" placeholder="请输入设备版本" maxlength="30" />
<el-form-item label="设备版本" prop="version">
<el-input v-model="form.version" 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 label="设备类型" prop="equType">
<el-input v-model="form.equType" 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 label="设备级别" prop="equLevel">
<el-input v-model="form.equLevel" placeholder="请输入设备级别" maxlength="30" />
</el-form-item>
</el-col>
<el-col :span="12">
<el-form-item label="带外管理IP" prop="nickName">
<el-input v-model="form.nickName" placeholder="请输入带外管理IP" maxlength="30" />
<el-form-item label="带外管理IP" prop="ip">
<el-input v-model="form.ip" 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 label="设备厂商" prop="manufacture">
<el-input v-model="form.manufacture" 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 label="安装位置" prop="location">
<el-input v-model="form.location" 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 label="设备管理员" prop="inCharge">
<el-input v-model="form.inCharge" 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 label="预计年限" prop="lifeCycle">
<el-input v-model="form.lifeCycle" 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 label="服役年限" prop="serviceTime">
<el-input v-model="form.serviceTime" 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 label="质保年限" prop="warranty">
<el-input v-model="form.warranty" placeholder="请输入质保年限" maxlength="30" />
</el-form-item>
</el-col>
@ -273,25 +273,14 @@ export default {
queryParams: {
pageNum: 1,
pageSize: 10,
Name: undefined,
name: undefined,
phonenumber: 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: false, showInSelector: false }, // 👈
{ key: 4, label: '手机号码', visible: true, showInSelector: true },
{ key: 5, label: '状态', visible: true, showInSelector: true },
{ key: 6, label: '创建时间', visible: true, showInSelector: true }
],
//
rules: {
Name: [
name: [
{ required: true, message: "设备名称不能为空", trigger: "blur" },
{ min: 2, max: 20, message: '设备名称长度必须介于 2 和 20 之间', trigger: 'blur' }
],
@ -364,8 +353,8 @@ export default {
//
handleStatusChange(row) {
let text = row.status === "0" ? "启用" : "停用"
this.$modal.confirm('确认要"' + text + '""' + row.Name + '"设备吗?').then(function() {
return changeUserStatus(row.Id, row.status)
this.$modal.confirm('确认要"' + text + '""' + row.name + '"设备吗?').then(function() {
return changeUserStatus(row.id, row.status)
}).then(() => {
this.$modal.msgSuccess(text + "成功")
}).catch(function() {
@ -380,9 +369,9 @@ export default {
//
reset() {
this.form = {
Id: undefined,
id: undefined,
deptId: undefined,
Name: undefined,
name: undefined,
nickName: undefined,
password: undefined,
phonenumber: undefined,
@ -411,7 +400,7 @@ export default {
},
//
handleSelectionChange(selection) {
this.ids = selection.map(item => item.Id)
this.ids = selection.map(item => item.id)
this.single = selection.length != 1
this.multiple = !selection.length
},
@ -428,8 +417,8 @@ export default {
/** 修改按钮操作 */
handleUpdate(row) {
this.reset()
const Id = row.Id || this.ids
getInfo(Id).then(response => {
const id = row.id || this.ids
getInfo(id).then(response => {
this.form = response.data
this.postOptions = response.posts
this.roleOptions = response.roles
@ -442,7 +431,7 @@ export default {
},
/** 重置密码按钮操作 */
handleResetPwd(row) {
this.$prompt('请输入"' + row.Name + '"的新密码', "提示", {
this.$prompt('请输入"' + row.name + '"的新密码', "提示", {
confirmButtonText: "确定",
cancelButtonText: "取消",
closeOnClickModal: false,
@ -454,7 +443,7 @@ export default {
}
},
}).then(({ value }) => {
resetUserPwd(row.Id, value).then(response => {
resetUserPwd(row.id, value).then(response => {
this.$modal.msgSuccess("修改成功,新密码是:" + value)
})
}).catch(() => {})
@ -463,7 +452,12 @@ export default {
submitForm: function() {
this.$refs["form"].validate(valid => {
if (valid) {
if (this.form.Id != undefined) {
add(this.form).then(response => {
this.$modal.msgSuccess("新增成功")
this.open = false
this.getList()
})
if (this.form.id != undefined) {
update(this.form).then(response => {
this.$modal.msgSuccess("修改成功")
this.open = false
@ -481,7 +475,7 @@ export default {
},
/** 删除按钮操作 */
handleDelete(row) {
const Ids = row.Id || this.ids
const Ids = row.id || this.ids
this.$modal.confirm('是否确认删除设备编号为"' + Ids + '"的数据项?').then(function() {
return del(Ids)
}).then(() => {

@ -0,0 +1,454 @@
<template>
<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="name">
<el-input v-model="queryParams.name" placeholder="请输入厂商名称" clearable style="width: 240px" @keyup.enter.native="handleQuery" />
</el-form-item>
<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="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>
<el-button icon="el-icon-refresh" size="mini" @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="el-icon-plus" size="mini" @click="handleAdd" v-hasPermi="['device:deviceManufacturer:add']">新增</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:deviceManufacturer: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:deviceManufacturer: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:deviceManufacturer:export']">导出</el-button>
</el-col>
</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="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.CreateDate) }}</span>
</template>
</el-table-column>
<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">
<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>
</el-table-column>
</el-table>
<pagination v-show="total > 0" :total="total" :page.sync="queryParams.pageNum" :limit.sync="queryParams.pageSize" @pagination="getList" />
</el-col>
</pane>
</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-row :gutter="20">
<el-col :span="12">
<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="contactBy">
<el-input v-model="form.contactBy" placeholder="请输入手机号码" maxlength="30" />
</el-form-item>
</el-col>
<el-col :span="12">
<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>
<el-button @click="cancel"> </el-button>
</span>
</el-dialog>
<!-- 用户导入对话框 -->
<el-dialog :title="upload.title" :visible.sync="upload.open" width="400px" append-to-body>
<el-upload ref="upload" :limit="1" accept=".xlsx, .xls" :headers="upload.headers" :action="upload.url + '?updateSupport=' + upload.updateSupport" :disabled="upload.isUploading" :on-progress="handleFileUploadProgress" :on-success="handleFileSuccess" :auto-upload="false" drag>
<i class="el-icon-upload"></i>
<div class="el-upload__text">将文件拖到此处<em>点击上传</em></div>
<div class="el-upload__tip text-center" slot="tip">
<div class="el-upload__tip" slot="tip">
<el-checkbox v-model="upload.updateSupport" />是否更新已经存在的厂商信息
</div>
<span>仅允许导入xlsxlsx格式文件</span>
<el-link type="primary" :underline="false" style="font-size: 12px; vertical-align: baseline" @click="importTemplate">下载模板</el-link>
</div>
</el-upload>
<div slot="footer" class="dialog-footer">
<el-button type="primary" @click="submitFileForm"> </el-button>
<el-button @click="upload.open = false"> </el-button>
</div>
</el-dialog>
</div>
</template>
<script>
import { list, del, add, update, resetUserPwd, changeUserStatus } from "@/api/device/deviceManufacturer"
import { getToken } from "@/utils/auth"
import Treeselect from "@riophae/vue-treeselect"
import "@riophae/vue-treeselect/dist/vue-treeselect.css"
import { Splitpanes, Pane } from "splitpanes"
import "splitpanes/dist/splitpanes.css"
export default {
name: "User",
dicts: ['sys_normal_disable', 'sys_user_sex'],
components: { Treeselect, Splitpanes, Pane },
data() {
return {
//
loading: true,
//
ids: [],
//
single: true,
//
multiple: true,
//
showSearch: true,
//
total: 0,
//
userList: null,
//
title: "",
//
deptOptions: undefined,
//
enabledDeptOptions: undefined,
//
open: false,
//
deptName: undefined,
//
initPassword: undefined,
//
dateRange: [],
//
postOptions: [],
//
roleOptions: [],
//
form: {},
defaultProps: {
children: "children",
label: "label"
},
//
upload: {
//
open: false,
//
title: "",
//
isUploading: false,
//
updateSupport: 0,
//
headers: { Authorization: "Bearer " + getToken() },
//
url: process.env.VUE_APP_BASE_API + "/system/user/importData"
},
//
queryParams: {
pageNum: 1,
pageSize: 10,
name: undefined,
contactBy: undefined,
status: undefined,
deptId: undefined
},
//
rules: {
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"]
}
],
contactBy: [
{
pattern: /^1[3|4|5|6|7|8|9][0-9]\d{8}$/,
message: "请输入正确的手机号码",
trigger: "blur"
}
]
}
}
},
watch: {
//
deptName(val) {
this.$refs.tree.filter(val)
}
},
created() {
this.getList()
// this.getDeptTree()
this.getConfigKey("sys.user.initPassword").then(response => {
this.initPassword = response.msg
})
},
methods: {
/** 查询用户列表 */
getList() {
this.loading = true
list(this.addDateRange(this.queryParams, this.dateRange)).then(response => {
this.userList = response.rows
this.total = response.total
this.loading = false
}
)
},
// /** */
// getDeptTree() {
// deptTreeSelect().then(response => {
// this.deptOptions = response.data
// this.enabledDeptOptions = this.filterDisabledDept(JSON.parse(JSON.stringify(response.data)))
// })
// },
//
filterDisabledDept(deptList) {
return deptList.filter(dept => {
if (dept.disabled) {
return false
}
if (dept.children && dept.children.length) {
dept.children = this.filterDisabledDept(dept.children)
}
return true
})
},
//
filterNode(value, data) {
if (!value) return true
return data.label.indexOf(value) !== -1
},
//
handleNodeClick(data) {
this.queryParams.deptId = data.id
this.handleQuery()
},
//
handleStatusChange(row) {
let text = row.status === "0" ? "启用" : "停用"
this.$modal.confirm('确认要"' + text + '""' + row.name + '"用户吗?').then(function() {
return changeUserStatus(row.Id, row.status)
}).then(() => {
this.$modal.msgSuccess(text + "成功")
}).catch(function() {
row.status = row.status === "0" ? "1" : "0"
})
},
//
cancel() {
this.open = false
this.reset()
},
//
reset() {
this.form = {
Id: undefined,
deptId: undefined,
name: undefined,
nickName: undefined,
password: undefined,
contactBy: undefined,
email: undefined,
sex: undefined,
status: "0",
remark: undefined,
postIds: [],
roleIds: []
}
this.resetForm("form")
},
/** 搜索按钮操作 */
handleQuery() {
this.queryParams.pageNum = 1
this.getList()
},
/** 重置按钮操作 */
resetQuery() {
this.dateRange = []
this.resetForm("queryForm")
this.queryParams.deptId = undefined
this.$refs.tree.setCurrentKey(null)
this.handleQuery()
},
//
handleSelectionChange(selection) {
this.ids = selection.map(item => item.Id)
this.single = selection.length != 1
this.multiple = !selection.length
},
//
handleCommand(command, row) {
switch (command) {
case "handleResetPwd":
this.handleResetPwd(row)
break
case "handleAuthRole":
this.handleAuthRole(row)
break
default:
break
}
},
/** 新增按钮操作 */
handleAdd() {
this.reset()
getUser().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 Id = row.Id || this.ids
getUser(Id).then(response => {
this.form = response.data
this.postOptions = response.posts
this.roleOptions = response.roles
this.$set(this.form, "postIds", response.postIds)
this.$set(this.form, "roleIds", response.roleIds)
this.open = true
this.title = "修改用户"
this.form.password = ""
})
},
/** 重置密码按钮操作 */
handleResetPwd(row) {
this.$prompt('请输入"' + row.name + '"的新密码', "提示", {
confirmButtonText: "确定",
cancelButtonText: "取消",
closeOnClickModal: false,
inputPattern: /^.{5,20}$/,
inputErrorMessage: "用户密码长度必须介于 5 和 20 之间",
inputValidator: (value) => {
if (/<|>|"|'|\||\\/.test(value)) {
return "不能包含非法字符:< > \" ' \\\ |"
}
},
}).then(({ value }) => {
resetUserPwd(row.Id, value).then(response => {
this.$modal.msgSuccess("修改成功,新密码是:" + value)
})
}).catch(() => {})
},
/** 分配角色操作 */
handleAuthRole: function(row) {
const Id = row.Id
this.$router.push("/system/user-auth/role/" + Id)
},
/** 提交按钮 */
submitForm: function() {
this.$refs["form"].validate(valid => {
if (valid) {
if (this.form.Id != undefined) {
update(this.form).then(response => {
this.$modal.msgSuccess("修改成功")
this.open = false
this.getList()
})
} else {
add(this.form).then(response => {
this.$modal.msgSuccess("新增成功")
this.open = false
this.getList()
})
}
}
})
},
/** 删除按钮操作 */
handleDelete(row) {
const Ids = row.Id || this.ids
this.$modal.confirm('是否确认删除用户编号为"' + Ids + '"的数据项?').then(function() {
return del(Ids)
}).then(() => {
this.getList()
this.$modal.msgSuccess("删除成功")
}).catch(() => {})
},
/** 导出按钮操作 */
handleExport() {
this.download('system/user/export', {
...this.queryParams
}, `user_${new Date().getTime()}.xlsx`)
},
/** 导入按钮操作 */
handleImport() {
this.upload.title = "用户导入"
this.upload.open = true
},
/** 下载模板操作 */
importTemplate() {
this.download('system/user/importTemplate', {
}, `user_template_${new Date().getTime()}.xlsx`)
},
//
handleFileUploadProgress(event, file, fileList) {
this.upload.isUploading = true
},
//
handleFileSuccess(response, file, fileList) {
this.upload.open = false
this.upload.isUploading = false
this.$refs.upload.clearFiles()
this.$alert("<div style='overflow: auto;overflow-x: hidden;max-height: 70vh;padding: 10px 20px 0;'>" + response.msg + "</div>", "导入结果", { dangerouslyUseHTMLString: true })
this.getList()
},
//
submitFileForm() {
this.$refs.upload.submit()
}
}
}
</script>

@ -148,7 +148,7 @@
</template>
<script>
import { listUser, getUser, delUser, addUser, updateUser, resetUserPwd, changeUserStatus, deptTreeSelect } from "@/api/inMonitoring/devicesState"
import { list, getUser, delUser, addUser, updateUser, resetUserPwd, changeUserStatus, deptTreeSelect } from "@/api/inMonitoring/devicesState"
import { getToken } from "@/utils/auth"
import Treeselect from "@riophae/vue-treeselect"
import cardItem from "./cardItem.vue"
@ -283,7 +283,7 @@ export default {
/** 查询设备列表 */
getList() {
this.loading = true
listUser(this.addDateRange(this.queryParams, this.dateRange)).then(response => {
list(this.addDateRange(this.queryParams, this.dateRange)).then(response => {
this.userList = response.rows
this.total = response.total
this.loading = false

Loading…
Cancel
Save