【web】 设备接口对接

dev
Wangxin 9 months ago
parent 4c2b9bdb58
commit ff33642d41
  1. 3
      ALOps_sys_fe/alops-ui/src/api/device/deviceInformation.js
  2. 2
      ALOps_sys_fe/alops-ui/src/api/device/files.js
  3. 49
      ALOps_sys_fe/alops-ui/src/api/device/supplier.js
  4. 1
      ALOps_sys_fe/alops-ui/src/utils/request.js
  5. 8
      ALOps_sys_fe/alops-ui/src/utils/ruoyi.js
  6. 4
      ALOps_sys_fe/alops-ui/src/views/QandA/knowledge/index.vue
  7. 203
      ALOps_sys_fe/alops-ui/src/views/device/deviceInformation/index.vue
  8. 8
      ALOps_sys_fe/alops-ui/src/views/device/deviceManufacturer/index.vue
  9. 4
      ALOps_sys_fe/alops-ui/src/views/device/deviceSupplier/index.vue
  10. 10
      ALOps_sys_fe/alops-ui/src/views/device/deviceType/index.vue
  11. 186
      ALOps_sys_fe/alops-ui/src/views/device/files/index.vue
  12. 282
      ALOps_sys_fe/alops-ui/src/views/device/supplier/index.vue
  13. 4
      ALOps_sys_fe/alops-ui/src/views/inMonitoring/assessment/index.vue
  14. 4
      ALOps_sys_fe/alops-ui/src/views/inMonitoring/devicesState/index.vue
  15. 4
      ALOps_sys_fe/alops-ui/src/views/inMonitoring/earlyWarning/index.vue

@ -6,8 +6,7 @@ export function addRule(data) {
return request({
url: api + 'addRule',
method: 'post',
data: data,
headers: { 'Content-Type': 'application/json' }
data: data
})
}
// 查询规则

@ -48,7 +48,7 @@ export function update(data) {
// 删除
export function del(id) {
return request({
url: api + 'delete' + id,
url: api + id,
method: 'delete'
})
}

@ -0,0 +1,49 @@
import request from '@/utils/request'
const api = '/device/supplier/'
// 查询详细
export function getDict() {
return request({
url: '/sys_dict',
method: 'get'
})
}
// 查询列表
export function list(query) {
return request({
url: api + '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 + 'edit',
method: 'put',
data: data
})
}
// 删除
export function del(id) {
return request({
url: api + id,
method: 'delete'
})
}

@ -42,6 +42,7 @@ service.interceptors.request.use(config => {
data: typeof config.data === 'object' ? JSON.stringify(config.data) : config.data,
time: new Date().getTime()
}
console.log("%c 🛑: requestObj ", "font-size:16px;background-color:#4408a2;color:white;", requestObj)
const requestSize = Object.keys(JSON.stringify(requestObj)).length // 请求数据大小
const limitSize = 5 * 1024 * 1024 // 限制存放数据5M
if (requestSize >= limitSize) {

@ -52,16 +52,16 @@ export function resetForm(refName) {
}
// 添加日期范围
export function addDateRange(params, dateRange, propName) {
export function addDateRange(params, dateRange, propNameStart, propNameEnd) {
let search = params
search.params = typeof (search.params) === 'object' && search.params !== null && !Array.isArray(search.params) ? search.params : {}
dateRange = Array.isArray(dateRange) ? dateRange : []
if (typeof (propName) === 'undefined') {
if (typeof (propNameStart) === 'undefined') {
search.params['beginTime'] = dateRange[0]
search.params['endTime'] = dateRange[1]
} else {
search.params['begin' + propName] = dateRange[0]
search.params['end' + propName] = dateRange[1]
search.params[propNameStart] = dateRange[0]
search.params[propNameEnd] = dateRange[1]
}
return search
}

@ -164,10 +164,6 @@ export default {
},
created() {
this.getList()
// this.getDeptTree()
this.getConfigKey("sys.user.initPassword").then(response => {
this.initPassword = response.msg
})
},
methods: {
/** 查询类型列表 */

@ -5,44 +5,51 @@
<!--用户数据-->
<pane size="84">
<el-col>
<el-form :model="queryParams" ref="form" size="small" :inline="true" v-show="showSearch" label-width="auto">
<el-form :model="queryParams" :rules="rules" ref="form" size="small" :inline="true" v-show="showSearch" label-width="auto">
<el-row>
<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 :label="0">间隔采集</el-radio>
<el-radio :label="1">固定时间采集</el-radio>
<el-radio :label="2">立即采集</el-radio>
</el-radio-group>
</el-form-item>
</el-row>
<el-row v-show="queryParams.ruleType == 1">
<el-row v-show="queryParams.ruleType == 0">
<el-col :span="24">
<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">
<el-form-item label="采集时间限制">
<el-time-picker
is-range
v-model="dateRange"
<el-form-item label="采集时间限制" prop="dateRange">
<el-date-picker
v-model="queryParams.dateRange"
@change="handleDateRangeChange"
value-format="yyyy-MM-dd hh:mm:ss"
type="daterange"
range-separator="至"
start-placeholder="开始时间"
end-placeholder="结束时间"
placeholder="选择时间范围">
</el-time-picker>
start-placeholder="开始日期"
end-placeholder="结束日期"
:picker-options="{ disabledDate: disablePastDate }"
>
</el-date-picker>
</el-form-item>
</el-col>
</el-row>
<el-row v-show="queryParams.ruleType == 2">
<el-row v-show="queryParams.ruleType == 1">
<el-col :span="24">
<el-form-item label="采集时间限制">
<el-time-picker
<el-date-picker
v-model="queryParams.gatherTime"
:disabledDate="disablePastDate"
value-format="yyyy-MM-dd hh:mm:ss"
type="datetime"
:picker-options="{ disabledDate: disablePastDate }"
placeholder="任意时间点">
</el-time-picker>
</el-date-picker>
</el-form-item>
</el-col>
</el-row>
@ -69,7 +76,6 @@ import "splitpanes/dist/splitpanes.css"
export default {
name: "User",
dicts: ['sys_normal_disable', 'sys_user_sex'],
components: { Treeselect, Splitpanes, Pane },
data() {
return {
@ -93,13 +99,15 @@ export default {
title: "",
//
open: false,
//
dateRange: [new Date(), new Date()],
//
queryParams: {
ruleType: 1,
ruleType: 0,
frequency: 1,
gatherTime: null,
startTime: null,
endTime: null,
//
dateRange: [],
},
//
@ -108,28 +116,9 @@ export default {
{ required: true, message: "用户名称不能为空", trigger: "blur" },
{ min: 2, max: 20, message: '用户名称长度必须介于 2 和 20 之间', trigger: 'blur' }
],
nickName: [
dateRange: [
{ 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"
}
]
}
}
},
@ -141,96 +130,22 @@ export default {
},
created() {
this.getList()
// this.getDeptTree()
this.getConfigKey("sys.user.initPassword").then(response => {
this.initPassword = response.msg
})
},
methods: {
/** 查询用户列表 */
getList() {
this.loading = true
queryRule(this.addDateRange(this.queryParams, this.dateRange)).then(response => {
this.userList = response.rows
this.total = response.total
queryRule().then(response => {
this.queryParams = {...this.queryParams,...response.data}
this.loading = false
}
)
},
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 => {
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
},
//
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"
})
},
//
cancel() {
this.open = false
this.reset()
},
//
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: []
}
this.resetForm("form")
},
/** 新增按钮操作 */
handleAdd() {
this.reset()
getUser().then(response => {
this.postOptions = response.posts
this.roleOptions = response.roles
this.open = true
this.title = "添加用户"
this.form.password = this.initPassword
})
},
/** 提交按钮 */
submitForm: function() {
this.$refs["form"].validate(valid => {
if (valid) {
addRule(this.form).then(response => {
addRule(this.queryParams).then(response => {
this.$modal.msgSuccess("新增成功")
this.open = false
this.getList()
@ -238,47 +153,21 @@ export default {
}
})
},
/** 删除按钮操作 */
handleDelete(row) {
const userIds = row.userId || this.ids
this.$modal.confirm('是否确认删除用户编号为"' + userIds + '"的数据项?').then(function() {
return delUser(userIds)
}).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()
handleDateRangeChange(value) {
console.log("%c 🐁: handleDateRangeChange -> value ", "font-size:16px;background-color:#dbe986;color:black;", value)
this.queryParams.startTime = value[0]
this.queryParams.endTime = value[1]
},
//
submitFileForm() {
this.$refs.upload.submit()
disablePastDate(time) {
//
const today = new Date();
// 00:00:00
today.setHours(0, 0, 0, 0);
// 00:00:00
console.log("%c 🐇: disablePastDate -> time.getTime() < today.getTime() ", "font-size:16px;background-color:#c5c908;color:black;", time.getTime() , today.getTime(), time.getTime() < today.getTime())
return time.getTime() < today.getTime();
}
}
}

@ -96,8 +96,8 @@
</el-form-item>
</el-col>
<el-col :span="24">
<el-form-item label="介绍" prop="description">
<el-input v-model="form.description" placeholder="请输入介绍" type="textarea" :rows="3" />
<el-form-item label="描述" prop="description">
<el-input v-model="form.description" placeholder="请输入描述" type="textarea" :rows="3" />
</el-form-item>
</el-col>
</el-row>
@ -240,10 +240,6 @@ export default {
},
created() {
this.getList()
// this.getDeptTree()
this.getConfigKey("sys.user.initPassword").then(response => {
this.initPassword = response.msg
})
},
methods: {
/** 查询用户列表 */

@ -221,10 +221,6 @@ export default {
},
created() {
this.getList()
// this.getDeptTree()
this.getConfigKey("sys.user.initPassword").then(response => {
this.initPassword = response.msg
})
},
methods: {
/** 查询用户列表 */

@ -62,7 +62,6 @@
<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="name">
<el-input v-model="form.name" placeholder="请输入类型昵称" maxlength="30" />
@ -188,10 +187,6 @@ export default {
},
created() {
this.getList()
// this.getDeptTree()
this.getConfigKey("sys.user.initPassword").then(response => {
this.initPassword = response.msg
})
},
methods: {
/** 查询类型列表 */
@ -207,8 +202,6 @@ export default {
upImage(fileList){
console.log(fileList)
this.form.image = fileList
},
//
cancel() {
@ -234,10 +227,7 @@ export default {
},
/** 重置按钮操作 */
resetQuery() {
this.dateRange = []
this.resetForm("queryForm")
this.queryParams.deptId = undefined
this.$refs.tree.setCurrentKey(null)
this.handleQuery()
},
//

@ -6,27 +6,19 @@
<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="安装日期">
<el-date-picker v-model="dateRange" style="width: 240px" value-format="yyyy-MM-dd hh:mm:ss" type="datetimerange" range-separator="-" start-placeholder="开始日期" end-placeholder="结束日期"></el-date-picker>
</el-form-item>
<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="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">
<el-input v-model="queryParams.phonenumber" placeholder="请输入设备类型" clearable style="width: 240px" @keyup.enter.native="handleQuery" />
</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 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-option v-for="dict in dict.type.device_disable" :key="dict.value" :label="dict.label" :value="dict.value" />
</el-select>
</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 label="安装位置" prop="location">
<el-input v-model="queryParams.phonenumber" 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>
@ -53,46 +45,43 @@
width="60"
type="index"
></el-table-column>
<el-table-column label="设备编号" align="center" key="id" prop="id" />
<el-table-column label="设备ID" align="center" key="equNumber" prop="equNumber" />
<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="equType" prop="equType" :show-overflow-tooltip="true" />
<el-table-column label="设备级别" align="center" key="deviceLevel" prop="deviceLevel" 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>
<span>{{ scope.row.status ? '正常' : '停用' }}</span>
</template>
</el-table-column>
<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="带外管理IP" align="center" key="ip" prop="ip" width="120" />
<el-table-column label="安装位置" align="center" key="location" prop="Location" width="120" />
<el-table-column label="安装时间" align="center" prop="InstallDate" width="160">
<el-table-column label="安装时间" align="center" prop="installDate" width="160">
<template slot-scope="scope">
<span>{{ parseTime(scope.row.InstallDate) }}</span>
<span>{{ parseTime(scope.row.installDate) }}</span>
</template>
</el-table-column>
<el-table-column label="设备管理员" align="center" prop="inCharge" width="120" />
<el-table-column label="设备厂商" align="center" key="manufacture" prop="manufacture" width="120" />
<el-table-column label="设备供应商" align="center" key="supplierName" prop="supplierName" width="120" />
<el-table-column label="设备管理员" align="center" key="inCharge" 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="image" prop="image" :show-overflow-tooltip="true" >
<template slot-scope="scope">
<span>{{ parseTime(scope.row.createTime) }}</span>
<ImagePreview :src="scope.row.image"/>
</template>
</el-table-column>
<el-table-column label="修改人" align="center" prop="UpdateBy" width="120" />
<el-table-column label="修改时间" align="center" prop="createTime" width="160">
<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>
<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.id !== 1">
<template slot-scope="scope">
<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>
@ -109,8 +98,8 @@
<el-form ref="form" :model="form" :rules="rules" label-width="100px">
<el-row :gutter="20">
<el-col :span="12">
<el-form-item label="设备编号" prop="id">
<el-input v-model="form.id" placeholder="请输入设备编号" maxlength="30" />
<el-form-item label="设备编号" prop="equNumber">
<el-input v-model="form.equNumber" placeholder="请输入设备名称" maxlength="30" />
</el-form-item>
</el-col>
<el-col :span="12">
@ -129,8 +118,8 @@
</el-form-item>
</el-col>
<el-col :span="12">
<el-form-item label="设备级别" prop="equLevel">
<el-input v-model="form.equLevel" placeholder="请输入设备级别" maxlength="30" />
<el-form-item label="设备级别" prop="deviceLevel">
<el-input v-model="form.deviceLevel" placeholder="请输入设备级别" maxlength="30" />
</el-form-item>
</el-col>
<el-col :span="12">
@ -169,10 +158,9 @@
</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="image">
<ImageUpload @input="upImage" :value="form.image"/>
</el-form-item>
</el-col>
</el-row>
@ -217,7 +205,7 @@ import "splitpanes/dist/splitpanes.css"
export default {
name: "User",
dicts: ['sys_normal_disable', 'sys_user_sex'],
dicts: ['device_disable', 'sys_user_sex'],
components: { Treeselect, Splitpanes, Pane },
data() {
return {
@ -279,15 +267,12 @@ export default {
pageNum: 1,
pageSize: 10,
name: undefined,
phonenumber: undefined,
status: undefined,
deptId: undefined
status: undefined
},
//
rules: {
name: [
{ required: true, message: "设备名称不能为空", trigger: "blur" },
{ min: 2, max: 20, message: '设备名称长度必须介于 2 和 20 之间', trigger: 'blur' }
],
nickName: [
{ required: true, message: "设备昵称不能为空", trigger: "blur" }
@ -303,68 +288,21 @@ export default {
},
created() {
this.getList()
// this.getDeptTree()
this.getConfigKey("sys.user.initPassword").then(response => {
this.initPassword = response.msg
})
},
methods: {
/** 查询设备列表 */
getDicts() {
getDict().then(response => {
console.log("%c 🗝: getDict -> response ", "font-size:16px;background-color:#796b0d;color:white;", response)
}
)
},
/** 查询设备列表 */
getList() {
this.loading = true
list(this.addDateRange(this.queryParams, this.dateRange)).then(response => {
list({minTime:this.dateRange[0],maxTime:this.dateRange[1],...this.queryParams}).then(response => {
this.dataList = 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"
})
upImage(fileList){
console.log(fileList)
this.form.image = fileList
},
//
cancel() {
@ -397,11 +335,8 @@ export default {
/** 重置按钮操作 */
resetQuery() {
this.dateRange = []
// this.resetForm("queryForm")
// this.queryParams.deptId = undefined
// this.$refs.tree.setCurrentKey(null)
// this.handleQuery()
this.getDicts()
this.resetForm("queryForm")
this.handleQuery()
},
//
handleSelectionChange(selection) {
@ -412,46 +347,15 @@ export default {
/** 新增按钮操作 */
handleAdd() {
this.reset()
// getInfo().then(response => {
// this.postOptions = response.posts
// this.roleOptions = response.roles
// })
this.open = true
this.title = "添加设备"
},
/** 修改按钮操作 */
handleUpdate(row) {
this.reset()
const id = row.id || this.ids
getInfo(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(() => {})
this.form = {...row}
this.open = true
this.title = "修改"
},
/** 提交按钮 */
submitForm: function() {
@ -481,19 +385,13 @@ export default {
/** 删除按钮操作 */
handleDelete(row) {
const Ids = row.id || this.ids
this.$modal.confirm('是否确认删除设备编号为"' + Ids + '"的数据项?').then(function() {
this.$modal.confirm('是否确认删除设备ID为"' + 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 = "设备导入"

@ -2,18 +2,14 @@
<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 label="类型名称" prop="name">
<el-input v-model="queryParams.name" 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>
@ -23,36 +19,38 @@
<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-button type="primary" plain icon="el-icon-plus" size="mini" @click="handleAdd" v-hasPermi="['device:deviceType:add']">新增</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="ID" align="center" key="Id" prop="Id" />
<el-table-column label="厂商名称" align="center" key="name" prop="name" width="120" />
<el-table-column
label="序号"
width="60"
type="index"
></el-table-column>
<el-table-column label="供应商名称" align="center" key="name" prop="name" width="160" :show-overflow-tooltip="true" />
<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">
<el-table-column label="描述" align="center" key="description" prop="description" width="120" />
<el-table-column label="创建人" align="center" key="createBy" prop="createBy" width="120" />
<el-table-column label="创建日期" align="center" prop="createTime" width="160">
<template slot-scope="scope">
<span>{{ parseTime(scope.row.CreateDate) }}</span>
<span>{{ parseTime(scope.row.createTime) }}</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">
<el-table-column label="状态" align="center" key="status" prop="status" width="120" >
<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>
<span>{{ scope.row.status ? '正常' : '停用' }}</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.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>
@ -63,17 +61,17 @@
</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="760px" append-to-body :destroy-on-close="true">
<el-form ref="form" :model="form" :rules="rules" label-width="100px">
<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 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-input v-model="form.contactBy" placeholder="请输入联系人" maxlength="30" />
</el-form-item>
</el-col>
<el-col :span="12">
@ -81,7 +79,21 @@
<el-input v-model="form.contactWay" placeholder="请输入手机号码" maxlength="11" />
</el-form-item>
</el-col>
<el-col :span="12">
<el-form-item label="状态" prop="status">
<el-select v-model="form.status" placeholder="启用状态" clearable>
<el-option v-for="dict in statusSelections" :key="dict.value" :label="dict.label" :value="dict.value" />
</el-select>
</el-form-item>
</el-col>
<el-col :span="24">
<el-form-item label="描述" prop="description">
<el-input v-model="form.description" placeholder="请输入描述" type="textarea" :rows="3" />
</el-form-item>
</el-col>
</el-row>
</el-form>
<span slot="footer" class="dialog-footer">
<el-button type="primary" @click="submitForm"> </el-button>
@ -89,30 +101,11 @@
</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 { list, del, add, update } from "@/api/device/supplier"
import { getToken } from "@/utils/auth"
import Treeselect from "@riophae/vue-treeselect"
import "@riophae/vue-treeselect/dist/vue-treeselect.css"
@ -125,6 +118,7 @@ export default {
components: { Treeselect, Splitpanes, Pane },
data() {
return {
appBase:process.env.VUE_APP_BASE_API,
//
loading: true,
//
@ -137,7 +131,7 @@ export default {
showSearch: true,
//
total: 0,
//
//
userList: null,
//
title: "",
@ -159,19 +153,23 @@ export default {
roleOptions: [],
//
form: {},
statusSelections: [
{ label: "正常", value: 1 },
{ label: "停用", value: 0 }
],
defaultProps: {
children: "children",
label: "label"
},
//
//
upload: {
//
//
open: false,
//
//
title: "",
//
isUploading: false,
//
//
updateSupport: 0,
//
headers: { Authorization: "Bearer " + getToken() },
@ -182,39 +180,29 @@ export default {
queryParams: {
pageNum: 1,
pageSize: 10,
name: undefined,
contactBy: undefined,
status: undefined,
deptId: undefined
name: 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"]
}
{ required: true, message: "供应商名称不能为空", trigger: "blur" },
{ min: 2, max: 20, message: '供应商名称长度必须介于 2 和 20 之间', trigger: 'blur' }
],
contactBy: [
{ required: true, message: "联系人不能为空", trigger: "blur" }
],
contactWay: [
{ required: true, message: "联系方式不能为空", trigger: "blur" },
{
pattern: /^1[3|4|5|6|7|8|9][0-9]\d{8}$/,
message: "请输入正确的手机号码",
trigger: "blur"
}
]
],
status: [
{ required: true, message: "状态不能为空", trigger: "blur" }
],
}
}
},
@ -226,13 +214,9 @@ export default {
},
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 => {
@ -242,45 +226,11 @@ export default {
}
)
},
// /** */
// 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"
})
upImage(fileList){
console.log(fileList)
this.form.image = fileList
},
//
cancel() {
@ -290,18 +240,12 @@ export default {
//
reset() {
this.form = {
Id: undefined,
deptId: undefined,
id: undefined,
name: undefined,
nickName: undefined,
password: undefined,
contactBy: undefined,
email: undefined,
sex: undefined,
status: "0",
remark: undefined,
postIds: [],
roleIds: []
description: undefined,
createBy: undefined,
image: undefined,
createDate: undefined
}
this.resetForm("form")
},
@ -320,78 +264,28 @@ 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
},
//
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
})
this.open = true
},
/** 修改按钮操作 */
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)
const id = row.id || this.ids
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)
this.title = "修改类型"
this.form = {...row, image: row.image}
},
/** 提交按钮 */
submitForm: function() {
this.$refs["form"].validate(valid => {
if (valid) {
if (this.form.Id != undefined) {
if (this.form.id != undefined) {
update(this.form).then(response => {
this.$modal.msgSuccess("修改成功")
this.open = false
@ -409,8 +303,8 @@ export default {
},
/** 删除按钮操作 */
handleDelete(row) {
const Ids = row.Id || this.ids
this.$modal.confirm('是否确认删除用户编号为"' + Ids + '"的数据项?').then(function() {
const Ids = row.id || this.ids
this.$modal.confirm('是否确认删除类型编号为"' + Ids + '"的数据项?').then(function() {
return del(Ids)
}).then(() => {
this.getList()
@ -425,7 +319,7 @@ export default {
},
/** 导入按钮操作 */
handleImport() {
this.upload.title = "用户导入"
this.upload.title = "类型导入"
this.upload.open = true
},
/** 下载模板操作 */

@ -306,10 +306,6 @@ export default {
},
created() {
this.getList()
// this.getDeptTree()
this.getConfigKey("sys.user.initPassword").then(response => {
this.initPassword = response.msg
})
},
methods: {
/** 查询用户列表 */

@ -274,10 +274,6 @@ export default {
},
created() {
this.getList()
// this.getDeptTree()
this.getConfigKey("sys.user.initPassword").then(response => {
this.initPassword = response.msg
})
},
methods: {
/** 查询设备列表 */

@ -281,10 +281,6 @@ export default {
},
created() {
this.getList()
// this.getDeptTree()
this.getConfigKey("sys.user.initPassword").then(response => {
this.initPassword = response.msg
})
},
methods: {
/** 查询类型列表 */

Loading…
Cancel
Save