pull/1/head
pnoker 6 years ago
parent 8d32210694
commit 1537d2d96e

@ -1,5 +1,35 @@
import request from '@/config/axios'
export const driverApi = {
add: (driver) => request({
url: '/device_api/manager/driver/add',
method: 'post',
data: driver
}),
delete: (id) => request({
url: '/device_api/manager/driver/delete/' + id,
method: 'post'
}),
update: (driver) => request({
url: '/device_api/manager/driver/update',
method: 'post',
data: driver
}),
selectById: (id) => request({
url: '/device_api/manager/driver/id/' + id,
method: 'get'
}),
list: (driver) => request({
url: '/device_api/manager/driver/list',
method: 'post',
data: driver
}),
dictionary: () => request({
url: '/device_api/manager/driver/dictionary',
method: 'get'
})
};
export const groupApi = {
add: (group) => request({
url: '/device_api/manager/group/add',
@ -60,6 +90,36 @@ export const profileApi = {
})
};
export const pointApi = {
add: (point) => request({
url: '/device_api/manager/point/add',
method: 'post',
data: point
}),
delete: (id) => request({
url: '/device_api/manager/point/delete/' + id,
method: 'post'
}),
update: (point) => request({
url: '/device_api/manager/point/update',
method: 'post',
data: point
}),
selectById: (id) => request({
url: '/device_api/manager/point/id/' + id,
method: 'get'
}),
list: (point) => request({
url: '/device_api/manager/point/list',
method: 'post',
data: point
}),
dictionary: () => request({
url: '/device_api/manager/point/dictionary',
method: 'get'
})
};
export const deviceApi = {
add: (device) => request({
url: '/device_api/manager/device/add',
@ -91,5 +151,9 @@ export const deviceApi = {
url: '/device_api/manager/device/list',
method: 'post',
data: device
}),
dictionary: () => request({
url: '/device_api/manager/device/dictionary',
method: 'get'
})
};

@ -13,21 +13,27 @@ export default [
isAuth: true
},
component: () => import('@/views/home/Home')
},
{
name: 'things',
path: '/things',
}, {
name: 'driver',
path: '/driver',
meta: {
isAuth: true
},
component: () => import('@/views/things/Things')
component: () => import('@/views/driver/Driver')
}, {
name: 'template',
path: '/template',
meta: {
isAuth: true
},
component: () => import('@/views/Template')
component: () => import('@/views/template/Template')
}, {
name: 'things',
path: '/things',
meta: {
isAuth: true
},
component: () => import('@/views/things/Things')
}, {
name: 'now',
path: '/now',
@ -50,19 +56,12 @@ export default [
},
component: () => import('@/views/Alarm')
}, {
name: 'label',
path: '/label',
meta: {
isAuth: true
},
component: () => import('@/views/Label')
}, {
name: 'picture',
path: '/picture',
name: 'point',
path: '/point',
meta: {
isAuth: true
},
component: () => import('@/views/Picture')
component: () => import('@/views/point/Point')
}, {
name: 'video',
path: '/video',

@ -1,23 +0,0 @@
<template>
<div class="container view">
<el-row class="operator">
<el-button icon="el-icon-search" circle></el-button>
<el-button type="success" icon="el-icon-plus" circle></el-button>
<el-button type="primary" icon="el-icon-edit" circle></el-button>
<el-button type="warning" icon="el-icon-star-off" circle></el-button>
<el-button type="danger" icon="el-icon-delete" circle></el-button>
</el-row>
<el-row class="page">
<el-pagination
background
layout="prev, pager, next"
:total="1000">
</el-pagination>
</el-row>
</div>
</template>
<style>
</style>

@ -1,23 +0,0 @@
<template>
<div class="container view">
<el-row class="operator">
<el-button icon="el-icon-search" circle></el-button>
<el-button type="success" icon="el-icon-plus" circle></el-button>
<el-button type="primary" icon="el-icon-edit" circle></el-button>
<el-button type="warning" icon="el-icon-star-off" circle></el-button>
<el-button type="danger" icon="el-icon-delete" circle></el-button>
</el-row>
<el-row class="page">
<el-pagination
background
layout="prev, pager, next"
:total="1000">
</el-pagination>
</el-row>
</div>
</template>
<style>
</style>

@ -1,23 +0,0 @@
<template>
<div class="container view">
<el-row class="operator">
<el-button icon="el-icon-search" circle></el-button>
<el-button type="success" icon="el-icon-plus" circle></el-button>
<el-button type="primary" icon="el-icon-edit" circle></el-button>
<el-button type="warning" icon="el-icon-star-off" circle></el-button>
<el-button type="danger" icon="el-icon-delete" circle></el-button>
</el-row>
<el-row class="page">
<el-pagination
background
layout="prev, pager, next"
:total="1000">
</el-pagination>
</el-row>
</div>
</template>
<style>
</style>

@ -0,0 +1,191 @@
<template>
<el-col :span="24">
<base-card>
<avue-crud :option="listOption"
:data="listData"
:page="page"
:table-loading="loading"
ref="crud"
v-model="listForm"
@on-load="list"
@row-del="listDelete"
@row-update="listUpdate"
@search-reset="searchReset"
@search-change="searchChange"
@refresh-change="refreshChange"
@size-change="sizeChange"
@current-change="currentChange"
>
</avue-crud>
</base-card>
</el-col>
</template>
<script>
import {driverApi} from '@/api/manager'
import {successMessage} from "@/util/util";
export default {
data() {
return {
query: {},
listForm: {},
listData: [],
listOption: {
tip: false,
index: true,
stripe: true,
border: true,
addBtn: false,
viewBtn: true,
selection: true,
height: 664,
align: 'center',
column: [
{
label: '协议',
prop: 'name',
width: 220,
span: 12,
search: true,
searchSpan: 12,
disabled: true
}, {
label: '服务',
prop: 'serviceName',
width: 220,
span: 12,
search: true,
searchSpan: 12,
disabled: true
}, {
label: '连接属性',
prop: 'connectInfo',
width: 250,
span: 24,
type: 'textarea',
rules: [
{
required: true,
message: '请输入 连接属性',
trigger: 'blur'
}
]
}, {
label: '配置属性',
prop: 'profileInfo',
width: 250,
span: 24,
type: 'textarea',
rules: [
{
required: true,
message: '请输入 配置属性',
trigger: 'blur'
}
]
}, {
label: '描述',
prop: 'description',
width: 220,
span: 24,
type: 'textarea',
rules: [
{
max: 380,
message: '最多输入380个字符',
trigger: 'blur'
}
]
}, {
label: '创建日期',
prop: 'createTime',
width: 180,
span: 12,
disabled: true,
type: 'date',
format: 'yyyy-MM-dd HH:mm:ss',
valueFormat: 'yyyy-MM-dd HH:mm:ss'
}, {
label: '修改日期',
prop: 'updateTime',
width: 180,
span: 12,
disabled: true,
type: 'date',
format: 'yyyy-MM-dd HH:mm:ss',
valueFormat: 'yyyy-MM-dd HH:mm:ss'
}
]
},
selectionList: [],
loading: true,
page: {
total: 0,
pageSize: 20,
currentPage: 1
}
}
},
methods:
{
list(page) {
this.loading = true;
driverApi.list(Object.assign({
page: {
current: page.currentPage,
size: page.pageSize
}
}, this.query)).then(res => {
const data = res.data;
this.page.total = data.total;
this.listData = data.records;
}).finally(() => {
this.loading = false;
});
},
listDelete(row) {
this.$confirm('是否删除该条驱动?', '提示', {
confirmButtonText: '确定',
cancelButtonText: '取消',
type: 'warning'
}).then(() => {
return driverApi.delete(row.id);
}).then(() => {
this.list(this.page);
successMessage();
});
},
listUpdate(row, index, done, loading) {
driverApi.update(row).then(() => {
loading();
this.list(this.page);
successMessage();
}).finally(() => {
done();
});
},
refreshChange() {
this.list(this.page);
},
currentChange(page) {
this.page.currentPage = page;
},
sizeChange(pageSize) {
this.page.pageSize = pageSize;
},
searchChange(params, done) {
this.query = params;
this.list(this.page);
done();
},
searchReset() {
this.query = {};
this.list(this.page);
}
}
}
</script>
<style lang="scss">
</style>

@ -10,9 +10,9 @@
mode="horizontal"
:router=true>
<el-menu-item index="/home"><span class="el-icon-menu"/>首页</el-menu-item>
<el-menu-item index="/picture">驱动</el-menu-item>
<el-menu-item index="/driver">驱动</el-menu-item>
<el-menu-item index="/template">模板</el-menu-item>
<el-menu-item index="/label">位号</el-menu-item>
<el-menu-item index="/point">位号</el-menu-item>
<el-menu-item index="/things">设备</el-menu-item>
<el-menu-item index="/now">实时</el-menu-item>
<el-menu-item index="/history">历史</el-menu-item>

@ -0,0 +1,340 @@
<template>
<el-col :span="24">
<base-card>
<avue-crud :option="listOption"
:data="listData"
:page="page"
:table-loading="loading"
ref="crud"
v-model="listForm"
@on-load="list"
@row-save="listAdd"
@row-del="listDelete"
@row-update="listUpdate"
@search-reset="searchReset"
@search-change="searchChange"
@refresh-change="refreshChange"
@size-change="sizeChange"
@current-change="currentChange"
>
</avue-crud>
</base-card>
</el-col>
</template>
<script>
import {pointApi, profileApi} from '@/api/manager'
import {successMessage} from "@/util/util";
export default {
data() {
return {
query: {},
listForm: {},
listData: [],
listOption: {
tip: false,
index: true,
stripe: true,
border: true,
viewBtn: true,
selection: true,
height: 664,
align: 'center',
column: [
{
label: '位号',
prop: 'name',
width: 220,
span: 16,
search: true,
searchSpan: 6,
rules: [
{
required: true,
message: '请输入 位号名称',
trigger: 'blur'
}, {
min: 2,
max: 32,
message: '请输入 2~32 位字长的位号名称',
trigger: 'blur'
}, {
pattern: /^[A-Za-z0-9\u4e00-\u9fa5]+$/,
message: '请输入 正确格式的位号名称,例:\'point01\' 或 \'位号01\''
}
]
}, {
label: '模板',
prop: 'profileId',
width: 220,
span: 8,
search: true,
searchSpan: 6,
type: 'select',
filterable: true,
searchFilterable: true,
dicData: [],
props: {
label: 'name',
value: 'id'
},
rules: [{
required: true,
message: '请选择使用模板',
trigger: 'click'
}]
}, {
label: '类型',
prop: 'type',
width: 100,
span: 8,
search: true,
searchSpan: 4,
type: 'select',
searchFilterable: true,
value: 0,
dicData: [
{
label: '字符串',
value: 'string'
}, {
label: '整数',
value: 'int'
}, {
label: '双精度浮点数',
value: 'double'
}, {
label: '浮点数',
value: 'float'
}, {
label: '长整数',
value: 'long'
}, {
label: '开关量',
value: 'boolean'
}
],
rules: [{
required: true,
message: '请选择位号数据类型',
trigger: 'click'
}]
}, {
label: '读/写',
prop: 'rw',
width: 100,
span: 8,
search: true,
searchSpan: 4,
type: 'select',
searchFilterable: true,
value: 0,
dicData: [
{
label: '只读',
value: 0
}, {
label: '只写',
value: 1
}, {
label: '读写',
value: 2
}
],
rules: [{
required: true,
message: '请选择位号读写类型',
trigger: 'click'
}]
}, {
label: '累计标识',
prop: 'accrue',
width: 100,
span: 8,
search: true,
searchSpan: 4,
type: 'select',
searchFilterable: true,
value: false,
dicData: [
{
label: '累计',
value: true
}, {
label: '不累计',
value: false
}
],
rules: [{
required: true,
message: '请选择模板共享类型',
trigger: 'click'
}]
}, {
label: '值',
prop: 'value',
width: 100,
span: 6,
searchSpan: 12,
disabled: true
}, {
label: '最小值',
prop: 'minimum',
width: 100,
span: 6,
searchSpan: 12
}, {
label: '最大值',
prop: 'maximum',
width: 100,
span: 6,
searchSpan: 12
}, {
label: '倍数',
prop: 'multiple',
width: 100,
span: 6,
searchSpan: 12
}, {
label: '基值',
prop: 'base',
width: 100,
span: 8,
searchSpan: 12
}, {
label: '格式',
prop: 'format',
width: 100,
span: 8,
searchSpan: 12
}, {
label: '单位',
prop: 'unit',
width: 100,
span: 8,
searchSpan: 12
}, {
label: '描述',
prop: 'description',
width: 220,
span: 24,
type: 'textarea',
rules: [
{
max: 380,
message: '最多输入380个字符',
trigger: 'blur'
}
]
}, {
label: '创建日期',
prop: 'createTime',
width: 180,
span: 12,
disabled: true,
type: 'date',
format: 'yyyy-MM-dd HH:mm:ss',
valueFormat: 'yyyy-MM-dd HH:mm:ss'
}, {
label: '修改日期',
prop: 'updateTime',
width: 180,
span: 12,
disabled: true,
type: 'date',
format: 'yyyy-MM-dd HH:mm:ss',
valueFormat: 'yyyy-MM-dd HH:mm:ss'
}
]
},
selectionList: [],
loading: true,
page: {
total: 0,
pageSize: 20,
currentPage: 1
}
}
},
created() {
this.profile();
},
methods:
{
list(page) {
this.loading = true;
pointApi.list(Object.assign({
page: {
current: page.currentPage,
size: page.pageSize
}
}, this.query)).then(res => {
const data = res.data;
this.page.total = data.total;
this.listData = data.records;
}).finally(() => {
this.loading = false;
});
},
profile() {
profileApi.dictionary().then(res => {
this.listOption.column[this.$refs.crud.findColumnIndex('profileId')].dicData = res.data;
}).catch((e) => {
console.log(e);
});
},
listAdd(row, done, loading) {
pointApi.add(row).then(() => {
loading();
this.list(this.page);
successMessage();
}).finally(() => {
done();
});
},
listDelete(row) {
this.$confirm('是否删除该条模板?', '提示', {
confirmButtonText: '确定',
cancelButtonText: '取消',
type: 'warning'
}).then(() => {
return pointApi.delete(row.id);
}).then(() => {
this.list(this.page);
successMessage();
});
},
listUpdate(row, index, done, loading) {
pointApi.update(row).then(() => {
loading();
this.list(this.page);
successMessage();
}).finally(() => {
done();
});
},
refreshChange() {
this.list(this.page);
},
currentChange(page) {
this.page.currentPage = page;
},
sizeChange(pageSize) {
this.page.pageSize = pageSize;
},
searchChange(params, done) {
this.query = params;
this.list(this.page);
done();
},
searchReset() {
this.query = {};
this.list(this.page);
}
}
}
</script>
<style lang="scss">
</style>

@ -0,0 +1,245 @@
<template>
<el-col :span="24">
<base-card>
<avue-crud :option="listOption"
:data="listData"
:page="page"
:table-loading="loading"
ref="crud"
v-model="listForm"
@on-load="list"
@row-save="listAdd"
@row-del="listDelete"
@row-update="listUpdate"
@search-reset="searchReset"
@search-change="searchChange"
@refresh-change="refreshChange"
@size-change="sizeChange"
@current-change="currentChange"
>
</avue-crud>
</base-card>
</el-col>
</template>
<script>
import {driverApi, profileApi} from '@/api/manager'
import {successMessage} from "@/util/util";
export default {
data() {
return {
query: {},
listForm: {},
listData: [],
listOption: {
tip: false,
index: true,
stripe: true,
border: true,
viewBtn: true,
selection: true,
height: 664,
align: 'center',
column: [
{
label: '模板',
prop: 'name',
width: 230,
span: 24,
search: true,
searchSpan: 12,
rules: [
{
required: true,
message: '请输入 模板名称',
trigger: 'blur'
}, {
min: 2,
max: 32,
message: '请输入 2~32 位字长的模板名称',
trigger: 'blur'
}, {
pattern: /^[A-Za-z0-9\u4e00-\u9fa5]+$/,
message: '请输入 正确格式的模板名称,例:\'profile01\' 或 \'模板01\''
}
]
}, {
label: '公/私有',
prop: 'share',
width: 100,
search: true,
searchSpan: 6,
type: 'select',
searchFilterable: true,
value: true,
dicData: [
{
label: '公有',
value: true
}, {
label: '私有',
value: false
}
],
rules: [{
required: true,
message: '请选择模板共享类型',
trigger: 'click'
}]
}, {
label: '驱动',
prop: 'driverId',
width: 220,
search: true,
searchSpan: 6,
type: 'select',
filterable: true,
searchFilterable: true,
dicData: [],
props: {
label: 'name',
value: 'id'
},
rules: [{
required: true,
message: '请选择使用驱动',
trigger: 'click'
}]
}, {
label: '配置属性',
prop: 'config',
width: 360,
span: 24,
type: 'textarea',
rules: [
{
required: true,
message: '请输入 配置属性',
trigger: 'blur'
}
]
}, {
label: '描述',
prop: 'description',
width: 220,
span: 24,
type: 'textarea',
rules: [
{
max: 380,
message: '最多输入380个字符',
trigger: 'blur'
}
]
}, {
label: '创建日期',
prop: 'createTime',
width: 180,
span: 12,
disabled: true,
type: 'date',
format: 'yyyy-MM-dd HH:mm:ss',
valueFormat: 'yyyy-MM-dd HH:mm:ss'
}, {
label: '修改日期',
prop: 'updateTime',
width: 180,
span: 12,
disabled: true,
type: 'date',
format: 'yyyy-MM-dd HH:mm:ss',
valueFormat: 'yyyy-MM-dd HH:mm:ss'
}
]
},
selectionList: [],
loading: true,
page: {
total: 0,
pageSize: 20,
currentPage: 1
}
}
},
created() {
this.driver();
},
methods:
{
list(page) {
this.loading = true;
profileApi.list(Object.assign({
page: {
current: page.currentPage,
size: page.pageSize
}
}, this.query)).then(res => {
const data = res.data;
this.page.total = data.total;
this.listData = data.records;
}).finally(() => {
this.loading = false;
});
},
driver() {
driverApi.dictionary().then(res => {
this.listOption.column[this.$refs.crud.findColumnIndex('driverId')].dicData = res.data;
}).catch((e) => {
console.log(e);
});
},
listAdd(row, done, loading) {
profileApi.add(row).then(() => {
loading();
this.list(this.page);
successMessage();
}).finally(() => {
done();
});
},
listDelete(row) {
this.$confirm('是否删除该条模板?', '提示', {
confirmButtonText: '确定',
cancelButtonText: '取消',
type: 'warning'
}).then(() => {
return profileApi.delete(row.id);
}).then(() => {
this.list(this.page);
successMessage();
});
},
listUpdate(row, index, done, loading) {
profileApi.update(row).then(() => {
loading();
this.list(this.page);
successMessage();
}).finally(() => {
done();
});
},
refreshChange() {
this.list(this.page);
},
currentChange(page) {
this.page.currentPage = page;
},
sizeChange(pageSize) {
this.page.pageSize = pageSize;
},
searchChange(params, done) {
this.query = params;
this.list(this.page);
done();
},
searchReset() {
this.query = {};
this.list(this.page);
}
}
}
</script>
<style lang="scss">
</style>

@ -61,7 +61,7 @@
trigger: 'blur'
}, {
pattern: /^[A-Za-z0-9\u4e00-\u9fa5]+$/,
message: '请输入正确格式的设备名称name01、名称01'
message: '请输入 正确格式的设备名称,例:\'name01\' 或 \'名称01\''
}
]
}, {
@ -70,11 +70,7 @@
width: 280,
search: true,
searchSpan: 5,
disabled: true,
rules: [{
message: '请输入设备编码',
trigger: 'blur'
}]
disabled: true
}, {
label: '分组',
prop: 'groupId',
@ -146,7 +142,14 @@
prop: 'description',
width: 220,
span: 24,
type: 'textarea'
type: 'textarea',
rules: [
{
max: 380,
message: '最多输入380个字符',
trigger: 'blur'
}
]
}, {
label: '创建日期',
prop: 'createTime',

Loading…
Cancel
Save