Browse Source

完成 1.告警识别内容 2.通用例外 3.用户例外 4.告警信息查询 模块功能接口调试对接

master
2183691628 3 years ago
parent
commit
1d699dfb32
12 changed files with 940 additions and 227 deletions
  1. +7
    -2
      README.md
  2. +21
    -0
      src/api/alarm-query.js
  3. +38
    -0
      src/api/common-exception.js
  4. +31
    -4
      src/api/off-limits-manage.js
  5. +38
    -0
      src/api/user-exception.js
  6. +3
    -2
      src/main.js
  7. +2
    -2
      src/utils/model.js
  8. +16
    -0
      src/utils/transfrom.js
  9. +31
    -6
      src/views/off-limits-manage/alarm-query/index.vue
  10. +218
    -98
      src/views/off-limits-manage/alarm-recognition/index.vue
  11. +235
    -59
      src/views/off-limits-manage/common-exception/index.vue
  12. +300
    -54
      src/views/off-limits-manage/user-exception/index.vue

+ 7
- 2
README.md View File

@@ -1,7 +1,7 @@
<!-- <!--
* @Date: 2021-11-29 11:14:13 * @Date: 2021-11-29 11:14:13
* @LastEditors: JinxuChen * @LastEditors: JinxuChen
* @LastEditTime: 2021-12-06 18:13:14
* @LastEditTime: 2021-12-08 14:55:21
* @FilePath: \GpsCardAdmin\README.md * @FilePath: \GpsCardAdmin\README.md
* @description: * @description:
--> -->
@@ -45,4 +45,9 @@ FEATURE
`2021年12月6日` `2021年12月6日`
FEATURE FEATURE
- 增加 封装接口地址 - 增加 封装接口地址
- 修改 登录账号密码 telpo telpo#1234
- 修改 登录账号密码 telpo telpo#1234

## v1.0.5F
`2021年12月8日`
FEATURE
- 完成 1.告警识别内容 2.通用例外 3.用户例外 4.告警信息查询 模块功能接口调试对接

+ 21
- 0
src/api/alarm-query.js View File

@@ -0,0 +1,21 @@
/*
* @Date: 2021-12-07 17:32:38
* @LastEditors: JinxuChen
* @LastEditTime: 2021-12-07 17:49:01
* @FilePath: \GpsCardAdmin\src\api\alarm-query.js
* @description: 自动报用设备警告信息查询
*/
import request from '@/utils/request'
export const APIAlarmQuery = {
getAlarmQuery,
};
export default APIAlarmQuery;
// 自动报用设备警告信息查询
function getAlarmQuery(params) {
return request({
url: '/api/v1/Fence/AreaAlarmQuery',
method: 'post',
data: params,
});
}


+ 38
- 0
src/api/common-exception.js View File

@@ -0,0 +1,38 @@
/*
* @Date: 2021-12-07 17:32:38
* @LastEditors: JinxuChen
* @LastEditTime: 2021-12-07 17:40:55
* @FilePath: \GpsCardAdmin\src\api\common-exception.js
* @description: 通用告警关键字
*/
import request from '@/utils/request'
export const APIExceptionGen = {
getRecognitionGen,
changeRecognitionGen,
delRecognitionGen
};
export default APIExceptionGen;
// 自动报警通用关键词查询(分页)
function getRecognitionGen(params) {
return request({
url: '/api/v1/Fence/AreaGeneralFilterQuery',
method: 'post',
data: params,
});
}
// 新增/编辑自动报通用关键词
function changeRecognitionGen(params) {
return request({
url: '/api/v1/Fence/AddAreaGeneralFilter',
method: 'post',
data: params,
});
}
// 删除系统/通用关键词
function delRecognitionGen(params) {
return request({
url: '/api/v1/Fence/DeleteAreaAlarmFilter',
method: 'post',
data: params,
});
}

+ 31
- 4
src/api/off-limits-manage.js View File

@@ -1,13 +1,16 @@
/* /*
* @Date: 2021-12-06 17:31:43 * @Date: 2021-12-06 17:31:43
* @LastEditors: JinxuChen * @LastEditors: JinxuChen
* @LastEditTime: 2021-12-06 18:07:02
* @LastEditTime: 2021-12-07 17:55:13
* @FilePath: \GpsCardAdmin\src\api\off-limits-manage.js * @FilePath: \GpsCardAdmin\src\api\off-limits-manage.js
* @description: 封装告警识别内容接口
* @description: 告警识别内容接口
*/ */
import request from '@/utils/request' import request from '@/utils/request'
export const APILimits = { export const APILimits = {
getRecognition
getRecognition,
changeRecognition,
areaCategoryQuery,
delRecognition
}; };
export default APILimits; export default APILimits;


@@ -15,7 +18,31 @@ export default APILimits;
// 自动报警通用关键词查询 // 自动报警通用关键词查询
function getRecognition(params) { function getRecognition(params) {
return request({ return request({
url: '/api/v1/Fence/AreaGeneralFilterQuery',
url: '/api/v1/Fence/AreaSysFilterQuery',
method: 'post',
data: params,
});
}
// 新增/编辑自动报警通用关键词查询, 通过id判断是新增还是编辑 0是新增 不是0则为编辑
function changeRecognition(params) {
return request({
url: '/api/v1/Fence/AddAreaSysFilter',
method: 'post',
data: params,
});
}
// 删除自动报警通用关键词,
function delRecognition(params) {
return request({
url: '/api/v1/Fence/DeleteAreaAlarmFilter',
method: 'post',
data: params,
});
}
// 自动报警分类查询(分页
function areaCategoryQuery(params) {
return request({
url: '/api/v1/Fence/AreaCategoryQuery',
method: 'post', method: 'post',
data: params, data: params,
}); });

+ 38
- 0
src/api/user-exception.js View File

@@ -0,0 +1,38 @@
/*
* @Date: 2021-12-07 17:32:38
* @LastEditors: JinxuChen
* @LastEditTime: 2021-12-08 10:45:21
* @FilePath: \GpsCardAdmin\src\api\user-exception.js
* @description: 用户告警关键字
*/
import request from '@/utils/request'
export const APIExceptionUser = {
getRecognitionUser,
changeRecognitionUser,
delRecognitionUser
};
export default APIExceptionUser;
// 自动报警用户关键词查询(分页)
function getRecognitionUser(params) {
return request({
url: '/api/v1/Fence/AreaUserFilterQuery',
method: 'post',
data: params,
});
}
// 新增/编辑自动报用户关键词
function changeRecognitionUser(params) {
return request({
url: '/api/v1/Fence/AddAreaUserFilter',
method: 'post',
data: params,
});
}
// 删除用户关键词
function delRecognitionUser(params) {
return request({
url: '/api/v1/Fence/DeleteAreaUserAlarmFilter',
method: 'post',
data: params,
});
}

+ 3
- 2
src/main.js View File

@@ -1,7 +1,7 @@
/* /*
* @Date: 2021-11-30 15:35:16 * @Date: 2021-11-30 15:35:16
* @LastEditors: JinxuChen * @LastEditors: JinxuChen
* @LastEditTime: 2021-11-30 17:51:56
* @LastEditTime: 2021-12-07 10:49:30
* @FilePath: \GpsCardAdmin\src\main.js * @FilePath: \GpsCardAdmin\src\main.js
* @description: * @description:
*/ */
@@ -21,7 +21,8 @@ import router from './router'


import '@/icons' // icon import '@/icons' // icon
import '@/permission' // permission control import '@/permission' // permission control

import transfrom from '@/utils/transfrom';
Vue.use(transfrom);
/** /**
* If you don't want to use mock-server * If you don't want to use mock-server
* you want to use MockJs for mock api * you want to use MockJs for mock api


+ 2
- 2
src/utils/model.js View File

@@ -1,8 +1,8 @@
/* /*
* @Date: 2021-11-30 15:09:25 * @Date: 2021-11-30 15:09:25
* @LastEditors: JinxuChen * @LastEditors: JinxuChen
* @LastEditTime: 2021-12-06 18:29:49
* @LastEditTime: 2021-12-08 14:55:27
* @FilePath: \GpsCardAdmin\src\utils\model.js * @FilePath: \GpsCardAdmin\src\utils\model.js
* @description: 版本号 * @description: 版本号
*/ */
export const VersionModel = '1.0.4';
export const VersionModel = '1.0.5';

+ 16
- 0
src/utils/transfrom.js View File

@@ -0,0 +1,16 @@
/*
* @Date: 2021-12-07 10:45:23
* @LastEditors: JinxuChen
* @LastEditTime: 2021-12-08 14:57:07
* @FilePath: \GpsCardAdmin\src\utils\transfrom.js
* @description: 将接口里面的kindId转化为文字
*/
exports.install = function (Vue, options) {
Vue.prototype.transfromToType = function(value) {
if(value === 1) {
return '关键字'
} else if(value === 2 ) {
return '固定地点'
}
}
}

+ 31
- 6
src/views/off-limits-manage/alarm-query/index.vue View File

@@ -1,7 +1,7 @@
<!-- <!--
* @Date: 2021-11-30 09:44:24 * @Date: 2021-11-30 09:44:24
* @LastEditors: JinxuChen * @LastEditors: JinxuChen
* @LastEditTime: 2021-12-01 14:30:07
* @LastEditTime: 2021-12-08 14:57:44
* @FilePath: \GpsCardAdmin\src\views\off-limits-manage\alarm-query\index.vue * @FilePath: \GpsCardAdmin\src\views\off-limits-manage\alarm-query\index.vue
* @description: * @description:
--> -->
@@ -40,6 +40,7 @@
<pagination <pagination
v-show="total>0" v-show="total>0"
:total="total" :total="total"
ref="pages"
:page.sync="page" :page.sync="page"
:limit.sync="limit" :limit.sync="limit"
@pagination="getList" @pagination="getList"
@@ -51,6 +52,7 @@
import TopMenu from "@/components/TopMenu"; import TopMenu from "@/components/TopMenu";
import TTable from "../../../components/TTable/TTable"; import TTable from "../../../components/TTable/TTable";
import Pagination from "@/components/Pagination"; import Pagination from "@/components/Pagination";
import APIAlarmQuery from "@/api/alarm-query";
export default { export default {
name: "", name: "",
components: { TTable, TopMenu, Pagination }, components: { TTable, TopMenu, Pagination },
@@ -72,7 +74,7 @@ export default {
{ prop: "alarmType", title: "告警类别" }, { prop: "alarmType", title: "告警类别" },
{ prop: "imei", title: "设备IMEI" }, { prop: "imei", title: "设备IMEI" },
{ prop: "alarmAddress", title: "告警地址/经纬度" }, { prop: "alarmAddress", title: "告警地址/经纬度" },
{ prop: "createTime", title: "创建时间" },
{ prop: "createTime", title: "创建时间" }
/* { /* {
action: true, action: true,
title: "操作", title: "操作",
@@ -83,15 +85,15 @@ export default {
], ],
list: [ list: [
{ {
alarmType: '出走风险',
alarmType: "出走风险",
imei: "141152552521", imei: "141152552521",
alarmAddress: "广东省佛山市南海区", alarmAddress: "广东省佛山市南海区",
createTime: "2021-11-30" createTime: "2021-11-30"
} }
], ],
total: 1,
total: 0,
page: 1, page: 1,
limit: 10,
limit: 10
}; };
}, },
methods: { methods: {
@@ -106,7 +108,30 @@ export default {
console.log("删除", row); console.log("删除", row);
}, },
// 获取分页数据 // 获取分页数据
getList() {}
getList() {
let reqBody = {
pageNumber: this.page,
begNumber: this.limit,
imei: this.searchValue
};
APIAlarmQuery.getAlarmQuery(reqBody).then(res => {
this.list = res.data.map(m => {
return {
imei: m.serialno,
alarmType: m.typeId,
content: m.address,
createTime: m.createTime || "无",
glat: m.glat,
glng: m.glng,
keyId: m.keyId
};
});
this.total = res.count;
});
}
},
mounted() {
this.getList();
} }
}; };
</script> </script>


+ 218
- 98
src/views/off-limits-manage/alarm-recognition/index.vue View File

@@ -1,7 +1,7 @@
<!-- <!--
* @Date: 2021-11-30 09:44:24 * @Date: 2021-11-30 09:44:24
* @LastEditors: JinxuChen * @LastEditors: JinxuChen
* @LastEditTime: 2021-12-06 18:28:18
* @LastEditTime: 2021-12-08 10:37:15
* @FilePath: \GpsCardAdmin\src\views\off-limits-manage\alarm-recognition\index.vue * @FilePath: \GpsCardAdmin\src\views\off-limits-manage\alarm-recognition\index.vue
* @description: * @description:
--> -->
@@ -16,6 +16,7 @@
@click="onAdd" @click="onAdd"
>添加</el-button> >添加</el-button>
<el-button <el-button
v-show="false"
class="filter-item" class="filter-item"
style="margin-left: 10px;" style="margin-left: 10px;"
type="primary" type="primary"
@@ -23,27 +24,14 @@
@click="onImportBatch" @click="onImportBatch"
>批量导入</el-button> >批量导入</el-button>
<!-- 下拉 --> <!-- 下拉 -->
<!-- 类型 -->
<el-select
v-model="type"
placeholder="类型"
style="width: 130px; margin-left: 10px;"
filterable
>
<el-option
v-for="item in typeOptions"
:key="item.value"
:label="item.label"
:value="item.value"
class="filter-item"
></el-option>
</el-select>
<!-- 类别 --> <!-- 类别 -->
<el-select <el-select
v-model="model" v-model="model"
placeholder="类别" placeholder="类别"
style="width: 130px; margin-left: 10px;" style="width: 130px; margin-left: 10px;"
filterable filterable
@change="outSelecChange"
clearable
> >
<el-option <el-option
v-for="item in modelOptions" v-for="item in modelOptions"
@@ -60,6 +48,7 @@
style="width: 200px; margin-left: 10px;" style="width: 200px; margin-left: 10px;"
class="filter-item" class="filter-item"
@keyup.enter.native="onSearch" @keyup.enter.native="onSearch"
clearable
/> />
<el-button <el-button
class="filter-item" class="filter-item"
@@ -75,33 +64,31 @@
v-show="total>0" v-show="total>0"
:total="total" :total="total"
:page.sync="page" :page.sync="page"
ref="pages"
:limit.sync="limit" :limit.sync="limit"
@pagination="getList" @pagination="getList"
/> />
<el-dialog :visible.sync="dialogPvVisible" :title="dialogTitle"> <el-dialog :visible.sync="dialogPvVisible" :title="dialogTitle">
<el-form <el-form
ref="dataForm"
v-model="form"
ref="form"
:rules="formRules"
:model="form"
label-position="left" label-position="left"
label-width="70px" label-width="70px"
style="width: 400px; margin-left:50px;"
style="width: 400px;"
> >
<!-- 类型 --> <!-- 类型 -->
<el-form-item label="类型" prop="type">
<el-select v-model="form.type" class="filter-item" filterable>
<el-option
v-for="item in typeOptions"
:key="item.value"
:label="item.label"
:value="item.value"
/>
</el-select>
<el-form-item label="类型" prop="typeRadio" v-show="false">
<el-radio-group v-model="form.typeRadio">
<el-radio :label="1" border>关键字</el-radio>
<el-radio :label="2" border>固定地点</el-radio>
</el-radio-group>
</el-form-item> </el-form-item>
<!-- 类别 --> <!-- 类别 -->
<el-form-item label="类别" prop="model"> <el-form-item label="类别" prop="model">
<el-select v-model="form.model" class="filter-item" filterable>
<el-select v-model="form.model" class="filter-item" @change="onSelectChange">
<el-option <el-option
v-for="item in modelOptions"
v-for="item in formOptions"
:key="item.value" :key="item.value"
:label="item.label" :label="item.label"
:value="item.value" :value="item.value"
@@ -109,17 +96,25 @@
</el-select> </el-select>
</el-form-item> </el-form-item>
<!-- 内容名称 --> <!-- 内容名称 -->
<el-form-item label="内容名称" prop="content">
<el-input v-model="form.content" />
<el-form-item label="内容名称" prop="content" label-width="80px">
<el-input v-model="form.content" style="width: 80%"/>
</el-form-item>
<!-- 状态 -->
<el-form-item label="状态" prop="status" required>
<el-switch v-model="form.status" active-text="打开" inactive-text="关闭"></el-switch>
</el-form-item> </el-form-item>
<!-- 创建时间 --> <!-- 创建时间 -->
<el-form-item label="创建时间" prop="timestamp">
<el-form-item label="创建时间" prop="timestamp" v-show="false">
<el-date-picker v-model="form.createTime" type="datetime" /> <el-date-picker v-model="form.createTime" type="datetime" />
</el-form-item> </el-form-item>
</el-form> </el-form>
<span slot="footer" class="dialog-footer"> <span slot="footer" class="dialog-footer">
<el-button type="error" @click="dialogPvVisible = false">取消</el-button> <el-button type="error" @click="dialogPvVisible = false">取消</el-button>
<el-button type="primary" @click="dialogStatus === 'update' ? update() : add()">确认</el-button>
<el-button
type="primary"
:loading="loading"
@click="dialogStatus === 'update' ? update('form') : add('form')"
>确认</el-button>
</span> </span>
</el-dialog> </el-dialog>
<el-dialog :visible.sync="dialogUpload"> <el-dialog :visible.sync="dialogUpload">
@@ -133,7 +128,7 @@ import TopMenu from "@/components/TopMenu";
import TTable from "../../../components/TTable/TTable"; import TTable from "../../../components/TTable/TTable";
import Pagination from "@/components/Pagination"; import Pagination from "@/components/Pagination";
import UploadExcelComponent from "@/components/UploadExcel/index.vue"; import UploadExcelComponent from "@/components/UploadExcel/index.vue";
import APILimits from '@/api/off-limits-manage'
import APILimits from "@/api/off-limits-manage";
export default { export default {
name: "", name: "",
components: { TTable, TopMenu, Pagination, UploadExcelComponent }, components: { TTable, TopMenu, Pagination, UploadExcelComponent },
@@ -157,40 +152,14 @@ export default {
], ],
type: "", type: "",
model: "", model: "",
typeOptions: [
{
value: "1",
label: "类别1"
},
{
value: "2",
label: "类别1"
},
{
value: "3",
label: "类别1"
},
{
value: "4",
label: "类别1"
}
],
modelOptions: [
{
value: "1",
label: "类别1"
},
{
value: "2",
label: "类别1"
}
],
modelOptions: [],
searchValue: "", searchValue: "",
columns: [ columns: [
{ prop: "type", title: "类型" }, { prop: "type", title: "类型" },
{ prop: "model", title: "类别" }, { prop: "model", title: "类别" },
{ prop: "content", title: "内容名称" }, { prop: "content", title: "内容名称" },
{ prop: "createTime", title: "创建时间" }, { prop: "createTime", title: "创建时间" },
{ prop: "status", title: "状态" },
{ {
action: true, action: true,
title: "操作", title: "操作",
@@ -200,58 +169,153 @@ export default {
] ]
} }
], ],
list: [
{
type: "关键子",
model: "出走危险",
content: "港口码头",
createTime: "2021-11-30"
}
],
total: 1,
list: [],
total: 0,
page: 1, page: 1,
limit: 10, limit: 10,
dialogPvVisible: false, dialogPvVisible: false,
dialogStatus: "", dialogStatus: "",
dialogTitle: "修改告警识别内容", dialogTitle: "修改告警识别内容",
form: { form: {
type: "",
typeRadio: 1,
model: "", model: "",
content: "", content: "",
createTime: ""
createTime: "",
resource: "",
categoryId: "",
status: true,
id: ""
},
formRules: {
content: [
{
required: true,
message: "请输入内容名称",
trigger: "blur"
}
],
typeRadio: [
{ required: true, message: "请选择类型", trigger: "change" }
],
model: [
{ required: true, message: "请选择类别", trigger: "change" }
]
}, },
dialogUpload: false
formOptions: [],
dialogUpload: false,
loading: false
}; };
}, },
watch: {
model(value) {
if (value === "") {
this.getList();
}
},
searchValue(value) {
if (value === "") {
this.getList();
}
}
},
methods: { methods: {
// 清空表单
resetForm() {
this.form = {
typeRadio: 1,
model: "",
content: "",
createTime: "",
resource: "",
categoryId: "",
status: true
};
},
// 添加 // 添加
onAdd() { onAdd() {
console.log("add");
this.form = "";
this.resetForm();
/* this.form.typeRadio = 1; */
this.dialogTitle = "添加告警识别内容"; this.dialogTitle = "添加告警识别内容";
this.dialogPvVisible = true; this.dialogPvVisible = true;
this.dialogStatus = "add"; this.dialogStatus = "add";
this.form.status = true;
this.getAreaCategoryQuery();
}, },
add() {
console.log("add");
add(formName) {
let reqBody = {
id: 0,
categoryId: this.form.categoryId,
keyword: this.form.content,
status: this.form.status
};
this.$refs[formName].validate(valid => {
if (valid) {
APILimits.changeRecognition(reqBody).then(res => {
console.log(res);
if (res.code === 0) {
this.dialogPvVisible = false;
this.$message({
message: "增加成功",
type: "success"
});
this.getList();
}
});
} else {
return false;
}
});
}, },
// 批量导入, ##注意 ,批量导入格式必须跟表格的一样 // 批量导入, ##注意 ,批量导入格式必须跟表格的一样
onImportBatch() { onImportBatch() {
this.dialogUpload = true; this.dialogUpload = true;
}, },
// 搜索 // 搜索
onSearch() {},
onSearch() {
this.$refs['pages'].currentPage = 1;
this.getList();
},
// 修改 // 修改
onUpdate(row) { onUpdate(row) {
console.log("row", row);
this.getAreaCategoryQuery();
this.dialogPvVisible = true; this.dialogPvVisible = true;
this.dialogStatus = "update"; this.dialogStatus = "update";
this.dialogTitle = "修改告警识别内容";
this.form = Object.assign({}, row); // copy obj
this.dialogTitle = "修改告警识别内容"; // copy obj
/* this.form = Object.assign({}, row); */ ;
this.form.categoryId = row.categoryId;
this.form.createTime = new Date(this.form.createTime); this.form.createTime = new Date(this.form.createTime);
console.log("修改", row);
this.form.typeRadio = row.kindId;
this.form.model = row.categoryId;
this.form.id = row.id;
this.form.content = row.content;
this.form.status = row.status === '打开' ? true : false;
}, },
update() {
console.log("update");
update(formName) {
let reqBody = {
id: this.form.id, //0 是新增 选中的rouw的id是修改
categoryId: this.form.categoryId,
kindId: this.form.typeRadio,
keyword: this.form.content,
status: this.form.status
};
this.$refs[formName].validate(valid => {
if (valid) {
APILimits.changeRecognition(reqBody).then(res => {
console.log(res);
if (res.code === 0) {
this.dialogPvVisible = false;
this.$message({
message: "修改成功",
type: "success"
});
this.getList();
}
});
} else {
return false;
}
});
}, },
// 删除 // 删除
onDelete(row) { onDelete(row) {
@@ -262,25 +326,72 @@ export default {
type: "warning" type: "warning"
}) })
.then(() => { .then(() => {
this.$message({
type: "success",
message: "删除成功!"
});
let reqBody = {
id: row.id,
type: "system"
};
APILimits.delRecognition(reqBody).
then(res => {
if ((res.code === 0)) {
this.$message({
type: "success",
message: "删除成功!"
});
this.getList();
} else {
this.$message({
type: "error",
message: "删除失败!"
});
}
});
}) })
.catch(() => {}); .catch(() => {});
}, },
// 获取分页数据 // 获取分页数据
getList() { getList() {
this.loading = true;
let reqBody = {
pageNumber: this.page,
begNumber: this.limit,
categoryId: this.model,
keyword: this.searchValue
};
APILimits.getRecognition(reqBody).then(res => {
this.list = res.data.map(m => {
return {
type: this.transfromToType(m.kindId),
model: m.categoryName,
content: m.keyword,
createTime: m.createTime,
kindId: m.kindId,
categoryId: m.categoryId,
status: m.status === true ? '打开' : '关闭',
id: m.id
};
});
this.total = res.count;
});
this.loading = false;
},
// 获取分类数据
getAreaCategoryQuery() {
let reqBody = { let reqBody = {
pageNumber: 1, pageNumber: 1,
begNumber: 20, begNumber: 20,
categoryId: '',
keyword: '',

}
APILimits.getRecognition(reqBody).then(res => {
console.log("res", res);
/* this.list = res.data; */
keyword: ""
};
APILimits.areaCategoryQuery(reqBody).then(res => {
this.formOptions = res.data.map(m => {
return {
value: m.categoryId,
label:
m.categoryName +
"--" +
`${this.transfromToType(m.kindId)}`
};
});
this.modelOptions = this.formOptions;
}); });
}, },
beforeUpload(file) { beforeUpload(file) {
@@ -299,13 +410,22 @@ export default {
handleSuccess({ results, header }) { handleSuccess({ results, header }) {
this.list = results; this.list = results;
this.columns = header.map(h => { this.columns = header.map(h => {
return { prop: h, title: h }
return { prop: h, title: h };
}); });
this.dialogUpload = false; this.dialogUpload = false;
},
// 弹窗选择框值变化时
onSelectChange(value) {
this.form.categoryId = value;
},
// 页面选择框变化
outSelecChange(value) {
this.model = value;
} }
}, },
mounted() { mounted() {
this.getList()
this.getList();
this.getAreaCategoryQuery();
} }
}; };
</script> </script>


+ 235
- 59
src/views/off-limits-manage/common-exception/index.vue View File

@@ -1,7 +1,7 @@
<!-- <!--
* @Date: 2021-11-30 09:44:24 * @Date: 2021-11-30 09:44:24
* @LastEditors: JinxuChen * @LastEditors: JinxuChen
* @LastEditTime: 2021-12-01 17:32:44
* @LastEditTime: 2021-12-08 14:14:18
* @FilePath: \GpsCardAdmin\src\views\off-limits-manage\common-exception\index.vue * @FilePath: \GpsCardAdmin\src\views\off-limits-manage\common-exception\index.vue
* @description: * @description:
--> -->
@@ -17,9 +17,16 @@
>添加</el-button> >添加</el-button>
<!-- 下拉 --> <!-- 下拉 -->
<!-- 类别 --> <!-- 类别 -->
<el-select v-model="model" placeholder="类别" style="width: 130px; margin-left: 10px;" filterable>
<el-select
v-model="model"
placeholder="类别"
style="width: 130px; margin-left: 10px;"
filterable
@change="outSelecChange"
clearable
>
<el-option <el-option
v-for="item in typeOptions"
v-for="item in modelOptions"
:key="item.value" :key="item.value"
:label="item.label" :label="item.label"
:value="item.value" :value="item.value"
@@ -33,6 +40,7 @@
style="width: 200px; margin-left: 10px;" style="width: 200px; margin-left: 10px;"
class="filter-item" class="filter-item"
@keyup.enter.native="onSearch" @keyup.enter.native="onSearch"
clearable
/> />
<el-button <el-button
class="filter-item" class="filter-item"
@@ -58,23 +66,31 @@
<pagination <pagination
v-show="total>0" v-show="total>0"
:total="total" :total="total"
ref="pages"
:page.sync="page" :page.sync="page"
:limit.sync="limit" :limit.sync="limit"
@pagination="getList" @pagination="getList"
/> />
<el-dialog :visible.sync="dialogPvVisible" :title="dialogTitle"> <el-dialog :visible.sync="dialogPvVisible" :title="dialogTitle">
<el-form <el-form
ref="dataForm"
v-model="form"
ref="form"
:rules="formRules"
:model="form"
label-position="left" label-position="left"
label-width="70px" label-width="70px"
style="width: 400px; margin-left:50px;"
style="width: 400px;"
> >
<!-- 类别 --> <!-- 类别 -->
<el-form-item label="类别" prop="type">
<el-select v-model="form.model" class="filter-item" filterable>
<el-form-item label="类别" prop="model">
<el-select
v-model="form.model"
class="filter-item"
filterable
@change="onSelectChange"
clearable
>
<el-option <el-option
v-for="item in typeOptions"
v-for="item in formOptions"
:key="item.value" :key="item.value"
:label="item.label" :label="item.label"
:value="item.value" :value="item.value"
@@ -82,17 +98,24 @@
</el-select> </el-select>
</el-form-item> </el-form-item>
<!-- 内容名称 --> <!-- 内容名称 -->
<el-form-item label="内容名称" prop="content">
<el-input v-model="form.content" />
<el-form-item label="内容名称" prop="content" label-width="80px" clearable>
<el-input v-model="form.content" style="width: 80%" />
</el-form-item>
<!-- 状态 -->
<el-form-item label="状态" prop="status" required>
<el-switch v-model="form.status" active-text="打开" inactive-text="关闭"></el-switch>
</el-form-item> </el-form-item>
<!-- 创建时间 --> <!-- 创建时间 -->
<el-form-item label="创建时间" prop="timestamp">
<el-form-item label="创建时间" prop="timestamp" v-show="false">
<el-date-picker v-model="form.createTime" type="datetime" /> <el-date-picker v-model="form.createTime" type="datetime" />
</el-form-item> </el-form-item>
</el-form> </el-form>
<span slot="footer" class="dialog-footer"> <span slot="footer" class="dialog-footer">
<el-button type="error" @click="dialogPvVisible = false">取消</el-button> <el-button type="error" @click="dialogPvVisible = false">取消</el-button>
<el-button type="primary" @click="dialogStatus === 'update' ? update() : add()">确认</el-button>
<el-button
type="primary"
@click="dialogStatus === 'update' ? update('form') : add('form')"
>确认</el-button>
</span> </span>
</el-dialog> </el-dialog>
</div> </div>
@@ -102,35 +125,21 @@
import TopMenu from "@/components/TopMenu"; import TopMenu from "@/components/TopMenu";
import TTable from "../../../components/TTable/TTable"; import TTable from "../../../components/TTable/TTable";
import Pagination from "@/components/Pagination"; import Pagination from "@/components/Pagination";
import APIExceptionGen from "@/api/common-exception";
import APILimits from "@/api/off-limits-manage";
export default { export default {
name: "", name: "",
components: { TTable, TopMenu, Pagination }, components: { TTable, TopMenu, Pagination },
data() { data() {
return { return {
typeOptions: [
{
value: "1",
label: "类别1"
},
{
value: "2",
label: "类别1"
},
{
value: "3",
label: "类别1"
},
{
value: "4",
label: "类别1"
}
],
model: '',
model: "",
searchValue: "", searchValue: "",
columns: [ columns: [
{ prop: "type", title: "类型" },
{ prop: "model", title: "类别" }, { prop: "model", title: "类别" },
{ prop: "content", title: "内容名称" }, { prop: "content", title: "内容名称" },
{ prop: "createTime", title: "创建时间" }, { prop: "createTime", title: "创建时间" },
{ prop: "status", title: "状态" },
{ {
action: true, action: true,
title: "操作", title: "操作",
@@ -140,51 +149,148 @@ export default {
] ]
} }
], ],
list: [
{
model: "出走危险",
content: "港口码头",
createTime: "2021-11-30"
}
],
list: [],
total: 1, total: 1,
page: 1, page: 1,
limit: 10, limit: 10,
type: "error", type: "error",
dialogPvVisible: false, dialogPvVisible: false,
dialogStatus: '',
dialogStatus: "",
dialogTitle: "修改通用例外", dialogTitle: "修改通用例外",
modelOptions: [], //页面下拉框数据
formOptions: [], //弹窗下拉数据
form: { form: {
model: "", model: "",
content: "", content: "",
createTime: ""
createTime: "",
status: true,
id: ""
},
formRules: {
content: [
{
required: true,
message: "请输入内容名称",
trigger: "blur"
}
],
model: [
{ required: true, message: "请选择类别", trigger: "change" }
]
} }
}; };
}, },
watch: {
model(value) {
if (value === "") {
this.getList();
}
},
searchValue(value) {
if (value === "") {
this.getList();
}
}
},
methods: { methods: {
// 清空表单
resetForm() {
this.form = {
model: "",
content: "",
createTime: "",
categoryId: "",
status: true
};
},
// 添加 // 添加
onAdd() { onAdd() {
this.form = '';
this.dialogTitle = '添加通用例外';
this.resetForm();
this.dialogTitle = "添加通用例外";
this.dialogPvVisible = true; this.dialogPvVisible = true;
this.dialogStatus = 'add';
this.dialogStatus = "add";
this.getAreaCategoryQuery();
}, },
add() {
console.log("addd");
add(formName) {
this.searchValue = '';
let reqBody = {
id: 0,
categoryId: this.form.categoryId,
keyword: this.form.content,
status: this.form.status,
glat: 0,
glng: 0,
address: "",
postCode: ""
};
this.$refs[formName].validate(valid => {
if (valid) {
APIExceptionGen.changeRecognitionGen(reqBody).then(res => {
console.log(res);
if (res.code === 0) {
this.dialogPvVisible = false;
this.$message({
message: "增加成功",
type: "success"
});
this.getList();
}
});
} else {
return false;
}
});
}, },
// 搜索 // 搜索
onSearch() {},
onSearch() {
this.$refs['pages'].currentPage = 1;
this.getList();
},
// 修改 // 修改
onUpdate(row) { onUpdate(row) {
console.log(row);
this.dialogPvVisible = true; this.dialogPvVisible = true;
this.dialogStatus = 'update';
this.dialogTitle = '修改通用例外';
this.form = Object.assign({}, row); // copy obj
this.dialogStatus = "update";
this.dialogTitle =
"修改通用例外"; /* this.form.createTime = new Date(this.form.createTime); */ // copy obj
/* this.form = Object.assign({}, row); */ this.form.categoryId =
row.categoryId;
this.form.createTime = new Date(this.form.createTime); this.form.createTime = new Date(this.form.createTime);
console.log("修改", row);
this.form.typeRadio = row.kindId;
this.form.model = row.categoryId;
this.form.id = row.id;
this.form.content = row.content;
this.form.status = row.status === '打开' ? true : false;
}, },
update() {
update(formName) {
console.log("update"); console.log("update");
let reqBody = {
id: this.form.id,
categoryId: this.form.categoryId,
keyword: this.form.content,
status: this.form.status,
glat: 0,
glng: 0,
address: "",
postCode: ""
};
this.$refs[formName].validate(valid => {
if (valid) {
APIExceptionGen.changeRecognitionGen(reqBody).then(res => {
console.log(res);
if (res.code === 0) {
this.dialogPvVisible = false;
this.$message({
message: "修改成功",
type: "success"
});
this.getList();
}
});
} else {
return false;
}
});
}, },
// 删除 // 删除
onDelete(row) { onDelete(row) {
@@ -193,15 +299,85 @@ export default {
confirmButtonText: "确定", confirmButtonText: "确定",
cancelButtonText: "取消", cancelButtonText: "取消",
type: "warning" type: "warning"
}).then(() => {
this.$message({
type: "success",
message: "删除成功!"
});
}).catch(() => {});
})
.then(() => {
let reqBody = {
id: row.id,
type: "general"
};
APIExceptionGen.delRecognitionGen(reqBody).then(res => {
if (res.code === 0) {
this.$message({
type: "success",
message: "删除成功!"
});
this.getList();
} else {
this.$message({
type: "error",
message: "删除失败!"
});
}
});
})
.catch(() => {});
}, },
// 获取分页数据 // 获取分页数据
getList() {}
getList() {
let reqBody = {
pageNumber: this.page,
begNumber: this.limit,
categoryId: this.model,
keyword: this.searchValue
};
APIExceptionGen.getRecognitionGen(reqBody).then(res => {
this.list = res.data.map(m => {
return {
type: this.transfromToType(m.kindId),
model: m.categoryName,
content: m.keyword,
createTime: m.createTime,
kindId: m.kindId,
categoryId: m.categoryId,
status: m.status === true ? '打开' : '关闭',
id: m.id
};
});
this.total = res.count;
});
},
// 获取类型分类
getAreaCategoryQuery() {
let reqBody = {
pageNumber: 1,
begNumber: 20,
keyword: ""
};
APILimits.areaCategoryQuery(reqBody).then(res => {
this.formOptions = res.data.map(m => {
return {
value: m.categoryId,
label:
m.categoryName +
"--" +
`${this.transfromToType(m.kindId)}`
};
});
this.modelOptions = this.formOptions;
});
},
// 弹窗选择框值变化时
onSelectChange(value) {
this.form.categoryId = value;
},
// 页面选择框变化
outSelecChange(value) {
this.model = value;
}
},
mounted() {
this.getList();
this.getAreaCategoryQuery();
} }
}; };
</script> </script>


+ 300
- 54
src/views/off-limits-manage/user-exception/index.vue View File

@@ -1,13 +1,20 @@
<!-- <!--
* @Date: 2021-11-30 09:44:24 * @Date: 2021-11-30 09:44:24
* @LastEditors: JinxuChen * @LastEditors: JinxuChen
* @LastEditTime: 2021-12-01 17:35:09
* @LastEditTime: 2021-12-08 14:45:22
* @FilePath: \GpsCardAdmin\src\views\off-limits-manage\user-exception\index.vue * @FilePath: \GpsCardAdmin\src\views\off-limits-manage\user-exception\index.vue
* @description: * @description:
--> -->
<template> <template>
<div class="app-container"> <div class="app-container">
<div class="filter-container"> <div class="filter-container">
<el-button
class="filter-item"
style="margin-left: 10px;"
type="primary"
icon="el-icon-circle-plus"
@click="onAdd"
>添加</el-button>
<!-- 搜索 --> <!-- 搜索 -->
<el-input <el-input
v-model="searchValue" v-model="searchValue"
@@ -15,6 +22,7 @@
style="width: 200px; margin-left: 10px;" style="width: 200px; margin-left: 10px;"
class="filter-item" class="filter-item"
@keyup.enter.native="onSearch" @keyup.enter.native="onSearch"
clearable
/> />
<el-button <el-button
class="filter-item" class="filter-item"
@@ -35,39 +43,82 @@
style="width: 100%;" style="width: 100%;"
@sort-change="sortChange" @sort-change="sortChange"
></el-table>--> ></el-table>-->
<TTable :tableData="list" :columns="columns" @update="onUpdate" @delete="onDelete" @transform="onTransform"></TTable>
<TTable
:tableData="list"
:columns="columns"
@update="onUpdate"
@delete="onDelete"
@transform="onTransform"
></TTable>
<!-- 分页 --> <!-- 分页 -->
<pagination <pagination
v-show="total>0" v-show="total>0"
:total="total" :total="total"
ref="pages"
:page.sync="page" :page.sync="page"
:limit.sync="limit" :limit.sync="limit"
@pagination="getList" @pagination="getList"
/> />
<!-- 修改弹窗 -->
<el-dialog :visible.sync="dialogPvVisible" :title="dialogTitle"> <el-dialog :visible.sync="dialogPvVisible" :title="dialogTitle">
<el-form <el-form
ref="dataForm"
v-model="form"
ref="form"
:model="form"
:rules="formRules"
label-position="left" label-position="left"
label-width="70px" label-width="70px"
style="width: 400px; margin-left:50px;"
style="width: 400px"
> >
<!-- 内容名称 -->
<el-form-item label="IMEI" prop="imei">
<el-input v-model="form.imei" />
<!-- IMEI -->
<el-form-item label="IMEI" prop="imei" label-width="80px">
<el-input v-model="form.imei" style="width: 80%" clearable />
</el-form-item> </el-form-item>
<!-- 内容名称 --> <!-- 内容名称 -->
<el-form-item label="内容名称" prop="title">
<el-input v-model="form.content" />
<el-form-item label="内容名称" prop="content" label-width="80px">
<el-input v-model="form.content" style="width: 80%" clearable />
</el-form-item>
<!-- 状态 -->
<el-form-item label="状态" prop="status" required>
<el-switch v-model="form.status" active-text="打开" inactive-text="关闭"></el-switch>
</el-form-item> </el-form-item>
<!-- 创建时间 --> <!-- 创建时间 -->
<el-form-item label="创建时间" prop="timestamp">
<el-form-item label="创建时间" prop="timestamp" v-show="false">
<el-date-picker v-model="form.createTime" type="datetime" /> <el-date-picker v-model="form.createTime" type="datetime" />
</el-form-item> </el-form-item>
</el-form> </el-form>
<span slot="footer" class="dialog-footer"> <span slot="footer" class="dialog-footer">
<el-button type="error" @click="dialogPvVisible = false">取消</el-button> <el-button type="error" @click="dialogPvVisible = false">取消</el-button>
<el-button type="primary" @click="dialogStatus === 'update' ? update() : add()">确认</el-button>
<el-button
type="primary"
@click="dialogStatus === 'update' ? update('form') : add('form')"
>确认</el-button>
</span>
</el-dialog>
<!-- 转通用弹窗 -->
<el-dialog :visible.sync="dialogTrans" :title="dialogTransTitle">
<p>请选择要转换的类别:</p>
<!-- <el-radio v-model="radio1" label="1" border>关键字</el-radio>
<el-radio v-model="radio1" label="2" border>固定地点</el-radio>-->
<!-- 类别 -->
<el-select
v-model="model"
placeholder="类别"
style="width: 130px; margin-left: 10px;"
filterable
@change="outSelecChange"
clearable
>
<el-option
v-for="item in modelOptions"
:key="item.value"
:label="item.label"
:value="item.value"
class="filter-item"
></el-option>
</el-select>
<span slot="footer" class="dialog-footer">
<el-button type="error" @click="dialogTrans = false">取消</el-button>
<el-button type="primary" @click="onTransConfirm">确认</el-button>
</span> </span>
</el-dialog> </el-dialog>
</div> </div>
@@ -77,69 +128,175 @@
import TopMenu from "@/components/TopMenu"; import TopMenu from "@/components/TopMenu";
import TTable from "../../../components/TTable/TTable"; import TTable from "../../../components/TTable/TTable";
import Pagination from "@/components/Pagination"; import Pagination from "@/components/Pagination";
import APIExceptionUser from "@/api/user-exception";
import APIExceptionGen from "@/api/common-exception";
import APILimits from "@/api/off-limits-manage";
export default { export default {
name: "", name: "",
components: { TTable, TopMenu, Pagination }, components: { TTable, TopMenu, Pagination },
data() { data() {
return { return {
model: "",
modelOptions: [
{
value: "1",
label: "类别1"
},
{
value: "2",
label: "类别1"
}
],
model: "", //下拉框的值
content: "", //内容
modelOptions: [],
searchValue: "", searchValue: "",
columns: [ columns: [
{ prop: "imei", title: "IMEI" }, { prop: "imei", title: "IMEI" },
{ prop: "content", title: "内容名称" }, { prop: "content", title: "内容名称" },
{ prop: "createTime", title: "创建时间" }, { prop: "createTime", title: "创建时间" },
{ prop: "status", title: "状态" },
{ {
action: true, action: true,
title: "操作", title: "操作",
actions: [ actions: [
{ fnName: "update", title: "修改", type: "primary" }, { fnName: "update", title: "修改", type: "primary" },
{ fnName: "delete", title: "删除", type: "error" }, { fnName: "delete", title: "删除", type: "error" },
{ fnName: "transform", title: "转通用", type: "primary" }
{
fnName: "transform",
title: "转通用",
type: "primary"
}
] ]
} }
], ],
list: [
{
imei: "141152552521",
model: "出走危险",
content: "港口码头",
createTime: "2021-11-30"
}
],
total: 1,
list: [],
total: 0,
page: 1, page: 1,
limit: 10, limit: 10,
dialogPvVisible: false, dialogPvVisible: false,
dialogStatus: "", dialogStatus: "",
dialogTitle: "修改用户例外", dialogTitle: "修改用户例外",
dialogTrans: false,
dialogTransTitle: "转通用例外",
form: { form: {
imei: "", imei: "",
content: "", content: "",
createTime: ""
createTime: "",
status: true
}, },
radio1: "1",
formRules: {
content: [
{
required: true,
message: "请输入内容名称",
trigger: "blur"
}
],
imei: [
{
required: true,
message: "请输入imei",
trigger: "blur"
}
]
}
}; };
}, },
watch: {
searchValue(value) {
if (value === "") {
this.form.imei = "";
this.getList();
}
}
},
methods: { methods: {
// 清空表单
resetForm() {
this.form = {
model: "",
content: "",
createTime: "",
categoryId: "",
status: true
};
},
// 增加
onAdd() {
this.resetForm();
this.dialogTitle = "添加通用例外";
this.dialogPvVisible = true;
this.dialogStatus = "add";
},
add(formName) {
this.searchValue = "";
let reqBody = {
keyId: 0,
imei: this.form.imei,
keyword: this.form.content,
status: this.form.status,
glat: 0,
glng: 0,
address: "",
postCode: ""
};
this.$refs[formName].validate(valid => {
if (valid) {
APIExceptionUser.changeRecognitionUser(reqBody).then(
res => {
console.log(res);
if (res.code === 0) {
this.dialogPvVisible = false;
this.$message({
message: "增加成功",
type: "success"
});
this.form.imei = "";
this.getList();
}
}
);
} else {
return false;
}
});
},
// 搜索 // 搜索
onSearch() {},
onSearch() {
this.$refs["pages"].currentPage = 1;
this.getList();
},
// 修改 // 修改
onUpdate(row) { onUpdate(row) {
this.dialogPvVisible = true; this.dialogPvVisible = true;
this.dialogStatus = 'update';
this.dialogTitle = '修改用户例外';
this.dialogStatus = "update";
this.dialogTitle = "修改用户例外";
this.form = Object.assign({}, row); // copy obj this.form = Object.assign({}, row); // copy obj
this.form.createTime = new Date(this.form.createTime); this.form.createTime = new Date(this.form.createTime);
console.log("修改", row);
this.form.status = row.status === "打开" ? true : false;
},
update(formName) {
let reqBody = {
keyId: this.form.keyId,
imei: this.form.imei,
keyword: this.form.content,
status: this.form.status,
glat: 0,
glng: 0,
address: "",
postCode: ""
};
this.$refs[formName].validate(valid => {
if (valid) {
APIExceptionUser.changeRecognitionUser(reqBody).then(
res => {
console.log(res);
if (res.code === 0) {
this.dialogPvVisible = false;
this.$message({
message: "修改成功",
type: "success"
});
this.form.imei = "";
this.getList();
}
}
);
} else {
return false;
}
});
}, },
// 删除 // 删除
onDelete(row) { onDelete(row) {
@@ -147,28 +304,117 @@ export default {
confirmButtonText: "确定", confirmButtonText: "确定",
cancelButtonText: "取消", cancelButtonText: "取消",
type: "warning" type: "warning"
}).then(() => {
this.$message({
type: "success",
message: "删除成功!"
});
}).catch(() => {});
})
.then(() => {
let reqBody = {
keyId: row.keyId,
imei: row.imei
};
APIExceptionUser.delRecognitionUser(reqBody).then(res => {
if (res.code === 0) {
this.$message({
type: "success",
message: "删除成功!"
});
this.getList();
} else {
this.$message({
type: "error",
message: "删除失败!"
});
}
});
})
.catch(() => {});
}, },
// 转通用例外
// 转通用例外 todo 待接口说明
onTransform(row) { onTransform(row) {
this.$confirm("是否转到通用列外?", {
confirmButtonText: "确定",
cancelButtonText: "取消",
type: "warning"
}).then(() => {
console.log("row", row);
this.dialogTrans = true;
this.content = row.content;
},
// 确定转通用例外
onTransConfirm() {
let reqBody = {
id: 0,
categoryId: this.model,
keyword: this.content,
status: true,
glat: 0,
glng: 0,
address: "",
postCode: ""
};
if (this.model != "") {
APIExceptionGen.changeRecognitionGen(reqBody).then(res => {
console.log(res);
if (res.code === 0) {
this.dialogTrans = false;
this.$message({
message: "增加成功",
type: "success"
});
this.getList();
}
});
} else {
this.$message({ this.$message({
type: "success",
message: "转移成功!"
message: "请选择一个类别!",
type: "error"
}); });
}).catch(() => {});
}
}, },
// 获取分页数据 // 获取分页数据
getList() {}
getList() {
let reqBody = {
pageNumber: this.page,
begNumber: this.limit,
type: "system",
imei: this.form.imei,
keyword: this.searchValue
};
APIExceptionUser.getRecognitionUser(reqBody).then(res => {
this.list = res.data.map(m => {
return {
imei: m.imei,
content: m.keyword,
createTime: m.createTime || "无",
glat: m.glat,
glng: m.glng,
keyId: m.keyId,
status: m.status === true ? "打开" : "关闭"
};
});
this.total = res.count;
});
},
// 获取类型分类
getAreaCategoryQuery() {
let reqBody = {
pageNumber: 1,
begNumber: 20,
keyword: ""
};
APILimits.areaCategoryQuery(reqBody).then(res => {
this.modelOptions = res.data.map(m => {
return {
value: m.categoryId,
label:
m.categoryName +
"--" +
`${this.transfromToType(m.kindId)}`
};
});
});
},
outSelecChange(value) {
this.model = value;
console.log("model", this.model);
}
},
mounted() {
this.getList();
this.getAreaCategoryQuery();
} }
}; };
</script> </script>


Loading…
Cancel
Save