Commit 25db61b2 authored by 赵啸非's avatar 赵啸非

添加海康门禁设备管理

parent c5a15917
......@@ -139,6 +139,8 @@ const router = new Router({
...restBuilder("staff/perform/summary", "staff/perform/summary"), //员工绩效统计汇总
...restBuilder("door", "door"), //门禁设备管理
// 360评估
...restBuilder("homeCharts/record", "homeCharts/record"),
//以下为基础路由配置
......
<template>
<!-- 弹出框表单 -->
<el-drawer
:title="title"
:visible.sync="open"
:direction="direction"
:destroy-on-close="true"
size="50%">
<el-form ref="form" :model="form" :rules="rules" label-width="120px">
<el-row>
<Field label="设备名称" prop="deviceName" v-model="form.deviceName" placeholder="请输入设备名称"/>
<Field label="设备编码" prop="deviceCode" v-model="form.deviceCode" placeholder="请输入设备编码"/>
<Field label="Ip地址" prop="ip" v-model="form.ip" placeholder="请输入Ip地址"/>
<Field label="用户名" prop="username" v-model="form.username" placeholder="请输入用户名"/>
<Field label="密码" prop="password" v-model="form.password" placeholder="请输入密码"/>
</el-row>
<form-buttons @submit='submitForm' v-if="pageInfo.type!='view'" noCancelBtn />
</el-form>
</el-drawer>
</template>
<script>
import form from "@/assets/mixins/formdialog";
export default {
name: "DoorDetail",
mixins: [form],
components: {
},
created() {
this.changePath("door")
},
data() {
return {
// 遮罩层
loading: true,
// 弹出层标题
title: "门禁设备",
// 是否显示弹出层
open: false,
direction:"rtl",
toString:[
],
toDate:[
],
// 表单校验
rules: {
}
};
},
methods: {
/** 编辑 */
edit(row) {
this.reset()
this.query = { id: row.id };
this.urls.currUrl ="door/edit";
this.getData();
this.pageInfo.type="edit"
this.title = "修改门禁设备";
},
/** 新增 */
add(row) {
this.reset()
this.urls.currUrl = "door/add";
this.getData();
this.pageInfo.type="add"
this.title = "新增门禁设备";
},
/** 查看*/
view(row) {
this.reset()
this.query = { id: row.id };
this.urls.currUrl ="door/view";
this.getData();
this.pageInfo.type="view"
this.title = "门禁设备详细";
},
/**取消按钮 */
cancel() {
this.open = false;
},
/**获取数据后弹框 */
afterRender(data) {
this.open = true;
},
afterSubmit(data) {
this.open = false;
this.$emit("ok");
},
// 表单重置
reset() {
this.form = {
deviceName : "",
deviceCode : "",
ip : "",
username : "",
password : "",
};
this.resetForm("form");
},
resetForm(refName) {
if (this.$refs[refName]) {
this.$refs[refName].resetFields();
}
},
},
};
</script>
<template>
<div class="page">
<LayoutTable :data="tableData" :config="tableConfig">
</LayoutTable>
<drawer-show ref="drawerform" @ok="getData" />
</div>
</template>
<script>
/** 表单弹出框模式需引入 */
import drawerShow from "./drawershow";
import table from "@/assets/mixins/table";
export default {
name: "DoorList",
components: {
drawerShow
},
mixins: [table],
created() {
},
methods: {
/** 重写新增方法 */
toAdd(row) {
this.$refs.drawerform.add(row);
},
/** 重写编辑方法 */
toEdit(row) {
this.$refs.drawerform.edit(row);
},
/** 重写查看方法 */
toView(row) {
this.$refs.drawerform.view(row);
},
},
data() {
return {
config: {
isshowTabPane:true,
search: [
{
name: "deviceCode",
type: "text",
label: "设备编码",
fuzzy: true
},
],
columns: [
{type: "selection", width: 60},
{type: "index",label: "序号",width: 50},
{label: "设备名称", prop: "deviceName"},
{label: "设备编码", prop: "deviceCode"},
{label: "Ip地址", prop: "ip"},
{label: "用户名", prop: "username"},
{label: "密码", prop: "password"},
{label: "创建时间", prop: "createTime", formatter: this.formatterDate},
{
label: "操作",
width: 240,
formatter: row => {
return (
<table-buttons noAdd row={row} onEdit={this.toEdit} onView={this.toView} onDel={this.toDel} />
);
}
}
]
}
};
}
};
</script>
\ No newline at end of file
<template>
<layout-view>
<el-descriptions :title="title" :column="column" :size="size" :colon="false" border>
<template slot="title">
<i class="el-icon-tickets"></i>
基本详细信息
</template>
<template slot="extra">
<el-button type="primary" @click="$router.go(-1)" size="small">返回</el-button>
</template>
<el-descriptions-item label="设备名称" label-class-name="labelClass" content-class-name="contentClass">
{{form.deviceName}}
</el-descriptions-item>
<el-descriptions-item label="设备编码" label-class-name="labelClass" content-class-name="contentClass">
{{form.deviceCode}}
</el-descriptions-item>
<el-descriptions-item label="Ip地址" label-class-name="labelClass" content-class-name="contentClass">
{{form.ip}}
</el-descriptions-item>
<el-descriptions-item label="用户名" label-class-name="labelClass" content-class-name="contentClass">
{{form.username}}
</el-descriptions-item>
<el-descriptions-item label="密码" label-class-name="labelClass" content-class-name="contentClass">
{{form.password}}
</el-descriptions-item>
</el-descriptions>
</layout-view>
</template>
<script>
import view from "@/assets/mixins/view";
export default {
mixins: [view],
components: {
},
methods: {
},
data() {
return {
size:"small",
column:2,
toString:[
],
toArrays: [
],
toDate: [
]
}
}
}
</script>
<style lang="less">
.labelClass{
width: 200px;
}
.el-descriptions__body{
margin-left: 5px;
margin-right: 5px;
color: #606266;
background-color: #FFF;
}
.contentClass{
width: 600px;
}
</style>
\ No newline at end of file
package com.mortals.xhx.module.door.dao;
import com.mortals.framework.dao.ICRUDDao;
import com.mortals.xhx.module.door.model.DoorEntity;
import java.util.List;
/**
* 门禁设备Dao
* 门禁设备 DAO接口
*
* @author zxfei
* @date 2023-11-22
*/
public interface DoorDao extends ICRUDDao<DoorEntity,Long>{
}
package com.mortals.xhx.module.door.dao.ibatis;
import org.springframework.stereotype.Repository;
import com.mortals.xhx.module.door.dao.DoorDao;
import com.mortals.xhx.module.door.model.DoorEntity;
import java.util.Date;
import com.mortals.framework.dao.ibatis.BaseCRUDDaoMybatis;
import java.util.List;
/**
* 门禁设备DaoImpl DAO接口
*
* @author zxfei
* @date 2023-11-22
*/
@Repository("doorDao")
public class DoorDaoImpl extends BaseCRUDDaoMybatis<DoorEntity,Long> implements DoorDao {
}
package com.mortals.xhx.module.door.model;
import java.util.List;
import java.util.ArrayList;
import java.math.BigDecimal;
import cn.hutool.core.date.DateUtil;
import java.util.Date;
import com.fasterxml.jackson.annotation.JsonFormat;
import com.mortals.framework.annotation.Excel;
import com.mortals.framework.model.BaseEntityLong;
import com.mortals.xhx.module.door.model.vo.DoorVo;
import lombok.Data;
/**
* 门禁设备实体对象
*
* @author zxfei
* @date 2023-11-22
*/
@Data
public class DoorEntity extends DoorVo {
private static final long serialVersionUID = 1L;
/**
* 设备名称
*/
private String deviceName;
/**
* 设备编码
*/
private String deviceCode;
/**
* Ip地址
*/
private String ip;
/**
* 用户名
*/
private String username;
/**
* 密码
*/
private String password;
@Override
public int hashCode() {
return this.getId().hashCode();
}
@Override
public boolean equals(Object obj) {
if (obj == null) return false;
if (obj instanceof DoorEntity) {
DoorEntity tmp = (DoorEntity) obj;
if (this.getId() == tmp.getId()) {
return true;
}
}
return false;
}
public void initAttrValue(){
this.deviceName = "";
this.deviceCode = "";
this.ip = "";
this.username = "";
this.password = "";
}
}
\ No newline at end of file
package com.mortals.xhx.module.door.model.vo;
import com.mortals.framework.model.BaseEntityLong;
import com.mortals.xhx.module.door.model.DoorEntity;
import java.util.ArrayList;
import java.util.List;
import lombok.Data;
import com.mortals.framework.annotation.Excel;
import java.math.BigDecimal;
import java.util.Date;
/**
* 门禁设备视图对象
*
* @author zxfei
* @date 2023-11-22
*/
@Data
public class DoorVo extends BaseEntityLong {
/** 序号,主键,自增长列表 */
private List <Long> idList;
}
\ No newline at end of file
package com.mortals.xhx.module.door.service;
import com.mortals.framework.service.ICRUDService;
import com.mortals.xhx.module.door.model.DoorEntity;
import com.mortals.xhx.module.door.dao.DoorDao;
/**
* DoorService
*
* 门禁设备 service接口
*
* @author zxfei
* @date 2023-11-22
*/
public interface DoorService extends ICRUDService<DoorEntity,Long>{
DoorDao getDao();
}
\ No newline at end of file
package com.mortals.xhx.module.door.service.impl;
import org.springframework.stereotype.Service;
import com.mortals.framework.service.impl.AbstractCRUDServiceImpl;
import com.mortals.framework.exception.AppException;
import com.mortals.framework.model.Context;
import com.mortals.xhx.module.door.dao.DoorDao;
import com.mortals.xhx.module.door.model.DoorEntity;
import com.mortals.xhx.module.door.service.DoorService;
import lombok.extern.slf4j.Slf4j;
/**
* DoorService
* 门禁设备 service实现
*
* @author zxfei
* @date 2023-11-22
*/
@Service("doorService")
@Slf4j
public class DoorServiceImpl extends AbstractCRUDServiceImpl<DoorDao, DoorEntity, Long> implements DoorService {
}
\ No newline at end of file
package com.mortals.xhx.module.door.web;
import com.mortals.framework.web.BaseCRUDJsonBodyMappingController;
import com.mortals.xhx.base.system.param.service.ParamService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;
import org.springframework.web.bind.annotation.*;
import com.mortals.framework.model.Context;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import com.mortals.framework.web.BaseCRUDJsonBodyMappingController;
import com.mortals.xhx.module.door.model.DoorEntity;
import com.mortals.xhx.module.door.service.DoorService;
import org.apache.commons.lang3.ArrayUtils;
import com.mortals.framework.util.StringUtils;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import java.util.stream.Collectors;
import com.alibaba.fastjson.JSONObject;
import java.util.Arrays;
import org.springframework.web.bind.annotation.*;
import org.springframework.web.multipart.MultipartFile;
import static com.mortals.framework.ap.SysConstains.*;
import com.mortals.xhx.common.code.*;
/**
*
* 门禁设备
*
* @author zxfei
* @date 2023-11-22
*/
@RestController
@RequestMapping("door")
public class DoorController extends BaseCRUDJsonBodyMappingController<DoorService,DoorEntity,Long> {
@Autowired
private ParamService paramService;
public DoorController(){
super.setModuleDesc( "门禁设备");
}
@Override
protected void init(Map<String, Object> model, Context context) {
super.init(model, context);
}
}
\ No newline at end of file
###登录
POST {{baseUrl}}/login/login
Content-Type: application/json
{
"loginName":"admin",
"password":"admin",
"securityCode":"8888"
}
> {%
client.global.set("SmsSet_id", JSON.parse(response.body).data.id);
client.global.set("authToken", JSON.parse(response.body).data.token);
%}
###门禁设备列表
POST {{baseUrl}}/door/list
Content-Type: application/json
{
"deviceCode":"9ci6cz",
"page":1,
"size":10
}
###门禁设备更新与保存
POST {{baseUrl}}/door/save
Authorization: {{authToken}}
Content-Type: application/json
{
"deviceName":"r1vf4o",
"deviceCode":"a74fjp",
"ip":"nu6vgw",
"username":"ufxpy5",
"password":"9d2qwd",
}
> {%
client.global.set("Door_id", JSON.parse(response.body).data.id);
%}
###门禁设备查看
GET {{baseUrl}}/door/info?id={{Door_id}}
Accept: application/json
###门禁设备编辑
GET {{baseUrl}}/door/edit?id={{Door_id}}
Accept: application/json
###门禁设备删除
GET {{baseUrl}}/door/delete?id={{Door_id}}
Authorization: {{authToken}}
Accept: application/json
......@@ -880,3 +880,25 @@ CREATE TABLE `mortals_sys_holiday`
PRIMARY KEY (`id`)
) ENGINE = InnoDB CHARACTER SET = utf8 COLLATE = utf8_general_ci COMMENT = '节假日表' ROW_FORMAT = Dynamic;
-- ----------------------------
2023-11-22
-- ----------------------------
-- ----------------------------
-- 门禁设备表
-- ----------------------------
DROP TABLE IF EXISTS `mortals_xhx_door`;
CREATE TABLE mortals_xhx_door(
`id` bigint(20) AUTO_INCREMENT COMMENT '序号,主键,自增长',
`deviceName` varchar(64) COMMENT '设备名称',
`deviceCode` varchar(64) COMMENT '设备编码',
`ip` varchar(64) COMMENT 'Ip地址',
`username` varchar(64) COMMENT '用户名',
`password` varchar(64) COMMENT '密码',
`createTime` datetime COMMENT '创建时间',
`createUserId` bigint(20) COMMENT '创建用户',
`updateUserId` bigint(20) COMMENT '更新用户',
`updateTime` datetime COMMENT '修改时间',
PRIMARY KEY (`id`)
,KEY `deviceCode` (`deviceCode`) USING BTREE
) ENGINE=InnoDB DEFAULT CHARSET=utf8 COMMENT='门禁设备';
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment