@@ -1,195 +1,37 @@ | |||||
<!-- | <!-- | ||||
* @Date: 2021-11-29 11:14:13 | * @Date: 2021-11-29 11:14:13 | ||||
* @LastEditors: JinxChen | * @LastEditors: JinxChen | ||||
* @LastEditTime: 2022-02-14 22:33:39 | |||||
* @FilePath: \GpsCardAdmin\README.md | |||||
* @LastEditTime: 2022-08-06 16:05:38 | |||||
* @FilePath: \telpoAdminTemplate\README.md | |||||
* @description: | * @description: | ||||
--> | --> | ||||
##GPSCARDADMIN | |||||
##项目说明分为以下类别 | |||||
- 1.FIX 修复 xxx问题 | |||||
- 2.FEATURE 增加 xxx功能 | |||||
- 3.IMPROVEMENT 优化 xxx功能 | |||||
## v1.0.0F | |||||
`2021年11月30日 ` | |||||
FEATURE | |||||
- 完成 基本项目开发环境搭建 | |||||
## v1.0.1F | |||||
`2021年12月1日` | |||||
FEATURE | |||||
- 完成 静态页面编写与交互 | |||||
## v1.0.2F | |||||
`2021年12月2日` | |||||
FEATURE | |||||
- 增加 docker部署文件 | |||||
- 修改 docker部署文件 | |||||
## v1.0.3F | |||||
`2021年12月3日` | |||||
FEATURE | |||||
- merge off-limits-type | |||||
- 增加 禁入类别 | |||||
- 修复 打包路径错误的问题 | |||||
- 取消 右键标签刷新操作 | |||||
- 修改 右键标签为中文 | |||||
- 增加 标签刷新 | |||||
- 修复 刷新错误的问题 | |||||
## v1.0.4F | |||||
`2021年12月6日` | |||||
FEATURE | |||||
- 增加 封装接口地址 | |||||
- 修改 登录账号密码 telpo telpo#1234 | |||||
## v1.0.5F | |||||
`2021年12月8日` | |||||
FEATURE | |||||
- 完成 1.告警识别内容 2.通用例外 3.用户例外 4.告警信息查询 模块功能接口调试对接 | |||||
FIX | |||||
- 修复 搜索时页码错误的问题 | |||||
- 完成 禁入类别api交互,添加、查询、修改;添加清除小按钮 | |||||
FEATURE | |||||
- 增加 localStorage存储 src\store\localStorage.js | |||||
- 增加 页面显示用户名 | |||||
- 修改 首页背景图 | |||||
## v1.0.6F | |||||
`2021年12月10日` | |||||
FEATURE | |||||
- 增加 标签栏头部logo | |||||
- 增加 移动端分页页码跳转按钮 | |||||
- 增加 移动端表格弹窗适配 | |||||
- 增加 头部固定配置 | |||||
IMPROVEMENT | |||||
- 优化 表格按钮样式 | |||||
- 优化 表格在移动端的的显示方式 | |||||
## v1.0.7F | |||||
`2021年12月13日` | |||||
FIX | |||||
- 修复 表格-操作列显示问题 | |||||
- 取消 搜索选择类别 | |||||
- 修改 输入搜索框提示都为 '请输入内容' | |||||
## v1.0.8F | |||||
`2021年12月14日` | |||||
FIX | |||||
- 修复 token过期移动端无法跳转的问题 | |||||
- 删除 页面中不使用的 TopMenu组件 | |||||
- 取消 登录过期弹窗退出登录确认弹窗 | |||||
- 增加 登录成功提示 | |||||
## v1.0.9F | |||||
`2021年12月15日` | |||||
FEATURE | |||||
- 修改 通用例外和用户例外状态选择方式 | |||||
## v1.1.0F | |||||
`2021年12月16日` | |||||
FEATURE | |||||
- 修改 用户例外搜索功能,可根据imei搜索 | |||||
- 修改 告警分页查询页面功能 | |||||
## v1.1.1F | |||||
`2021年12月21日` | |||||
IMPROVEMENT | |||||
- 优化 首页样式 | |||||
- 统一 输入框长度 | |||||
- 统一 状态判断 | |||||
- 修复 新增/修改用户例外报错的问题 | |||||
## v1.1.2F | |||||
`2021年12月22日` | |||||
IMPROVEMENT | |||||
- 优化 通用和用户例外 状态显示方式 | |||||
## v1.1.3F | |||||
`2021年12月23日` | |||||
IMPROVEMENT | |||||
- 优化 用户例外和告警查询的搜索条件 | |||||
- 修复 用户例外弹窗标题显示错误的问题 | |||||
- 修改 用户和通用例外状态选择显示 | |||||
- 修复 删除用户例外时同一个imei的例外会全部删除的问题 | |||||
- 增加 告警类别删除功能(todo 待接口调整发布可开放) | |||||
- 增加 警告查询 内容中文查询功能 | |||||
## v1.1.4F | |||||
`2021年12月24日` | |||||
FEA | |||||
- 增加 告警类别删除功能 | |||||
FIX | |||||
- 修复 告警类别修改失败的问题 | |||||
## v1.1.5F | |||||
`2021年12月28日` | |||||
FEA | |||||
- 修改 增加/修改通用例外接口 | |||||
- 修改 增加/修改用户例外接口 | |||||
## v1.1.6F | |||||
`2021年12月29日` | |||||
FIX | |||||
- 修复 禁入类别分页错误的问题 | |||||
## v1.1.7F | |||||
`2021年12月31日` | |||||
FIX | |||||
- 修改 增加禁入类别存在缓存的问题 | |||||
- 删除 修改禁入类别重置功能 | |||||
## v1.1.8F | |||||
`2021年1月7日` | |||||
FIX | |||||
- 修改 登录过期提示 | |||||
- 修改 登录过期提示一 | |||||
## v1.1.9F | |||||
`2021年1月8日` | |||||
FIX | |||||
- 修改 登录过期提示 | |||||
- 增加 ie10,11兼容 //todo 需后端修改下nginx配置 | |||||
- 取消 通用例外显示方式 | |||||
- 取消 用户例外转通用类别的显示 | |||||
## v1.2.0F | |||||
`2021年1月9日` | |||||
FIX | |||||
- 修改 登录过期错误提示 | |||||
## v1.2.1F | |||||
`2021年1月11日` | |||||
FIX | |||||
- 修复 登录过期错误提示显示两次的问题 | |||||
## v1.2.2F | |||||
`2021年1月12日` | |||||
FIX | |||||
- 修复 登录过期没有跳转到登录界面的问题 | |||||
- 修复 登录过期错误提示两次的问题 | |||||
- 修改 用户例外转通用弹窗大小 | |||||
## v1.2.3F | |||||
`2021年1月22日` | |||||
FIX | |||||
- 修改 告警查询创建时间显示 | |||||
## v1.2.4F | |||||
`2021年2月14日` | |||||
FIX | |||||
- 修复 告警查询无数据时显示问题 | |||||
##TELPO_ADMIN_TELMALATE | |||||
## 版本号管理 | |||||
- 版本格式:主版本号.次版本号.修订号 | |||||
1.主版本号:当你做了不兼容的 API 修改( 一般项目发生重大功能改变) | |||||
2.次版本号:当你做了向下兼容的功能性新增, | |||||
3.修订号:当你做了向下兼容的问题修正。 | |||||
例如: | |||||
- V #1.0.0 | |||||
##git提交为以下类别 | |||||
- 1.fix 修复 xxx问题 | |||||
- 2.feat 增加 xxx功能 | |||||
- 3.docs 文档变更 | |||||
- 4.style 代码格式(不影响代码运行的变动) | |||||
- 5.perf 性能优化 | |||||
- 提交格式,比如: | |||||
-start--------------- | |||||
- 版本号 v#1.0.0 | |||||
- 2022.08.06 | |||||
fix | |||||
- 修改文件名称 | |||||
- fix 修复了 xxx问题 | |||||
... | |||||
- 后续可根据项目需要更新或者改进 | |||||
-end------------------------ | |||||
##备注 | |||||
- 此项目仅仅集成了一些element-admin的功能,具体可前往官网查看 | |||||
- 官网地址 https://panjiachen.gitee.io/vue-element-admin-site/zh/guide/ |
@@ -1,8 +1,8 @@ | |||||
<!-- | <!-- | ||||
* @Date: 2021-11-29 11:20:34 | * @Date: 2021-11-29 11:20:34 | ||||
* @LastEditors: JinxuChen | |||||
* @LastEditTime: 2021-12-10 10:42:56 | |||||
* @FilePath: \GpsCardAdmin\src\App.vue | |||||
* @LastEditors: JinxChen | |||||
* @LastEditTime: 2022-08-06 10:27:35 | |||||
* @FilePath: \telpoAdminTemplate\src\App.vue | |||||
* @description: | * @description: | ||||
--> | --> | ||||
<template> | <template> | ||||
@@ -38,7 +38,7 @@ export default { | |||||
const script = document.createElement("script"); | const script = document.createElement("script"); | ||||
script.src = "//cdn.jsdelivr.net/npm/eruda"; | script.src = "//cdn.jsdelivr.net/npm/eruda"; | ||||
document.body.appendChild(script); | document.body.appendChild(script); | ||||
script.onload = function() { | |||||
script.onload = function(eruda) { | |||||
eruda.init(); | eruda.init(); | ||||
}; | }; | ||||
} | } | ||||
@@ -1,21 +0,0 @@ | |||||
/* | |||||
* @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, | |||||
}); | |||||
} | |||||
@@ -1,38 +0,0 @@ | |||||
/* | |||||
* @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, | |||||
}); | |||||
} |
@@ -1,42 +0,0 @@ | |||||
/* | |||||
* @Author:gg | |||||
* @Date: 2021-12-02 18:04:02 | |||||
* @LastEditTime: 2021-12-07 11:47:46 | |||||
* @LastEditors: Please set LastEditors | |||||
* @Description: 禁入场景类别 新增 更新 删除 | |||||
* @FilePath: \GpsCardAdmin\src\api\off-limits-type.js | |||||
*/ | |||||
import request from '@/utils/request' | |||||
/* export function addSencens(data) { | |||||
return request({ | |||||
url: '/Sencens/add', | |||||
method: 'post', | |||||
data | |||||
}) | |||||
} */ | |||||
export function addType(data) { | |||||
return request({ | |||||
url: '/api/v1/Fence/AddAreaCategory', | |||||
method: 'post', | |||||
data | |||||
}) | |||||
} | |||||
export function UpdateType(data) { | |||||
return request({ | |||||
url: '/LimitsType/Update', | |||||
method: 'post', | |||||
data | |||||
}) | |||||
} | |||||
export function DelType(data) { | |||||
return request({ | |||||
url: '/LimitsType/Del', | |||||
method: 'post', | |||||
data | |||||
}) | |||||
} |
@@ -1,38 +0,0 @@ | |||||
/* | |||||
* @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, | |||||
}); | |||||
} |
@@ -26,7 +26,7 @@ | |||||
<script> | <script> | ||||
import { scrollTo } from "@/utils/scroll-to"; | import { scrollTo } from "@/utils/scroll-to"; | ||||
const { body } = document; | |||||
/* const { body } = document; */ | |||||
export default { | export default { | ||||
name: "Pagination", | name: "Pagination", | ||||
data() { | data() { | ||||
@@ -97,7 +97,7 @@ export default { | |||||
return false | return false | ||||
} | } | ||||
}, | }, | ||||
set(val) { | |||||
set() { | |||||
this.screenWidth | this.screenWidth | ||||
} | } | ||||
} | } | ||||
@@ -1,15 +1,14 @@ | |||||
<!-- | <!-- | ||||
* @Date: 2021-11-30 17:19:51 | * @Date: 2021-11-30 17:19:51 | ||||
* @LastEditors: JinxuChen | |||||
* @LastEditTime: 2021-12-13 11:33:07 | |||||
* @FilePath: \GpsCardAdmin\src\components\TTable\TTable.vue | |||||
* @LastEditors: JinxChen | |||||
* @LastEditTime: 2022-08-06 15:58:24 | |||||
* @FilePath: \telpoAdminTemplate\src\components\TTable\TTable.vue | |||||
* @description: 封装通用的table组件 | * @description: 封装通用的table组件 | ||||
--> | --> | ||||
<template> | <template> | ||||
<div class="app-container"> | <div class="app-container"> | ||||
<!-- 表格 --> | <!-- 表格 --> | ||||
<el-table :data="tableData" border fit highlight-current-row @sort-change="sortChange" > | <el-table :data="tableData" border fit highlight-current-row @sort-change="sortChange" > | ||||
<!-- <el-table-column prop="date" label="日期" width="180"></el-table-column> --> | |||||
<template v-for="column in columns"> | <template v-for="column in columns"> | ||||
<!-- 标题 --> | <!-- 标题 --> | ||||
<el-table-column | <el-table-column | ||||
@@ -18,15 +17,16 @@ | |||||
:label="column.title" | :label="column.title" | ||||
:fixed="column.fixed" | :fixed="column.fixed" | ||||
v-if="!column.action" | v-if="!column.action" | ||||
height="460" | |||||
height="400" | |||||
/> | /> | ||||
<!-- 操作列 --> | <!-- 操作列 --> | ||||
<el-table-column :label="column.title" :key="column.prop" v-else fixed="right" min-width="120"> | |||||
<el-table-column :label="column.title" :key="column.prop" v-else fixed="right" min-width="100"> | |||||
<template slot-scope="scope"> | <template slot-scope="scope"> | ||||
<el-button-group v-for="(fn,index) in column.actions" :key="index"> | <el-button-group v-for="(fn,index) in column.actions" :key="index"> | ||||
<el-button | <el-button | ||||
:type="fn.type" | :type="fn.type" | ||||
:icon="fn.icon" | :icon="fn.icon" | ||||
:size="fn.size" | |||||
@click="handleClick(scope.row,fn.fnName)" | @click="handleClick(scope.row,fn.fnName)" | ||||
>{{fn.title}}</el-button> | >{{fn.title}}</el-button> | ||||
</el-button-group> | </el-button-group> | ||||
@@ -34,23 +34,23 @@ | |||||
</el-table-column> | </el-table-column> | ||||
</template> | </template> | ||||
</el-table> | </el-table> | ||||
<!-- 分页 --> | |||||
<!-- 分页 todo 重新封装该分页--> | |||||
<!-- <pagination | <!-- <pagination | ||||
v-show="total>0" | v-show="total>0" | ||||
:total="total" | :total="total" | ||||
:page.sync="listQuery.page" | :page.sync="listQuery.page" | ||||
:limit.sync="listQuery.limit" | :limit.sync="listQuery.limit" | ||||
@pagination="getList" | @pagination="getList" | ||||
/>--> | |||||
/> --> | |||||
</div> | </div> | ||||
</template> | </template> | ||||
<script> | <script> | ||||
/* import Pagination from "@/components/Pagination"; */ | |||||
//import Pagination from "@/components/Pagination"; | |||||
import waves from "@/directive/waves"; // waves directive | import waves from "@/directive/waves"; // waves directive | ||||
export default { | export default { | ||||
name: "", | name: "", | ||||
/* components: { Pagination }, */ | |||||
//components: { Pagination }, | |||||
directives: { waves }, | directives: { waves }, | ||||
props: { | props: { | ||||
tableData: { | tableData: { | ||||
@@ -76,11 +76,6 @@ export default { | |||||
}, | }, | ||||
importanceOptions: ["1", "2", "3"], | importanceOptions: ["1", "2", "3"], | ||||
list: [ | list: [ | ||||
{ | |||||
date: "2016-05-02", | |||||
name: "王小虎", | |||||
address: "上海市普陀区金沙江路 1518 弄" | |||||
} | |||||
] | ] | ||||
}; | }; | ||||
}, | }, | ||||
@@ -95,5 +90,8 @@ export default { | |||||
}; | }; | ||||
</script> | </script> | ||||
<style scoped> | |||||
<style scoped lang="scss"> | |||||
.el-table { | |||||
font-size: 14px; | |||||
} | |||||
</style> | </style> |
@@ -1,12 +1,12 @@ | |||||
<!-- | <!-- | ||||
* @Date: 2021-11-30 18:18:48 | * @Date: 2021-11-30 18:18:48 | ||||
* @LastEditors: JinxuChen | |||||
* @LastEditTime: 2021-11-30 18:56:32 | |||||
* @FilePath: \GpsCardAdmin\src\components\TopMenu\index.vue | |||||
* @LastEditors: JinxChen | |||||
* @LastEditTime: 2022-08-06 15:48:10 | |||||
* @FilePath: \telpoAdminTemplate\src\components\TopMenu\index.vue | |||||
* @description: 头部组件 | * @description: 头部组件 | ||||
--> | --> | ||||
<template> | <template> | ||||
<div> | |||||
<div class="btn-container"> | |||||
<!-- 操作 --> | <!-- 操作 --> | ||||
<!-- 按钮 --> | <!-- 按钮 --> | ||||
<el-button | <el-button | ||||
@@ -14,6 +14,8 @@ | |||||
v-for="(item,index) in buttonList" | v-for="(item,index) in buttonList" | ||||
:key="index" | :key="index" | ||||
:type="item.type" | :type="item.type" | ||||
:icon="item.icon" | |||||
size="small" | |||||
@click="item.click" | @click="item.click" | ||||
>{{item.name}}</el-button> | >{{item.name}}</el-button> | ||||
</div> | </div> | ||||
@@ -25,7 +27,9 @@ export default { | |||||
props: { | props: { | ||||
buttonList: { | buttonList: { | ||||
type: Array, | type: Array, | ||||
default: [] | |||||
default(){ | |||||
return [] | |||||
} | |||||
} | } | ||||
}, | }, | ||||
data() { | data() { | ||||
@@ -34,5 +38,11 @@ export default { | |||||
}; | }; | ||||
</script> | </script> | ||||
<style scoped> | |||||
<style scoped lang="scss"> | |||||
.btn-container { | |||||
padding: 0 0 0 20px; | |||||
.el-button { | |||||
margin: 0 5px 10px 0px; | |||||
} | |||||
} | |||||
</style> | </style> |
@@ -80,7 +80,8 @@ export default { | |||||
readerData(rawFile) { | readerData(rawFile) { | ||||
this.loading = true | this.loading = true | ||||
return new Promise((resolve, reject) => { | return new Promise((resolve, reject) => { | ||||
const reader = new FileReader() | |||||
const reader = new FileReader(); | |||||
console.log(reject); | |||||
reader.onload = e => { | reader.onload = e => { | ||||
const data = e.target.result | const data = e.target.result | ||||
const workbook = XLSX.read(data, { type: 'array' }) | const workbook = XLSX.read(data, { type: 'array' }) | ||||
@@ -38,7 +38,7 @@ | |||||
import { mapGetters } from "vuex"; | import { mapGetters } from "vuex"; | ||||
import Breadcrumb from "@/components/Breadcrumb"; | import Breadcrumb from "@/components/Breadcrumb"; | ||||
import Hamburger from "@/components/Hamburger"; | import Hamburger from "@/components/Hamburger"; | ||||
import { getToken, setToken, removeToken } from '@/utils/auth'; | |||||
import { removeToken } from '@/utils/auth'; | |||||
import { resetRouter } from '@/router' | import { resetRouter } from '@/router' | ||||
export default { | export default { | ||||
components: { | components: { | ||||
@@ -1,8 +1,8 @@ | |||||
<!-- | <!-- | ||||
* @Date: 2021-11-29 11:20:35 | * @Date: 2021-11-29 11:20:35 | ||||
* @LastEditors: JinxuChen | |||||
* @LastEditTime: 2021-12-09 18:00:28 | |||||
* @FilePath: \GpsCardAdmin\src\layout\components\Sidebar\Logo.vue | |||||
* @LastEditors: JinxChen | |||||
* @LastEditTime: 2022-08-06 10:29:09 | |||||
* @FilePath: \telpoAdminTemplate\src\layout\components\Sidebar\Logo.vue | |||||
* @description: | * @description: | ||||
--> | --> | ||||
<template> | <template> | ||||
@@ -31,7 +31,7 @@ export default { | |||||
}, | }, | ||||
data() { | data() { | ||||
return { | return { | ||||
title: '禁入区域告警系统', | |||||
title: '天波后台管理模板', | |||||
logo: require('@/assets/telpo.png') | logo: require('@/assets/telpo.png') | ||||
} | } | ||||
} | } | ||||
@@ -199,18 +199,19 @@ export default { | |||||
<style lang="scss" scoped> | <style lang="scss" scoped> | ||||
.tags-view-container { | .tags-view-container { | ||||
height: 34px; | |||||
height: 40px; | |||||
width: 100%; | width: 100%; | ||||
background: #fff; | background: #fff; | ||||
border-bottom: 1px solid #d8dce5; | border-bottom: 1px solid #d8dce5; | ||||
box-shadow: 0 1px 3px 0 rgba(0, 0, 0, .12), 0 0 3px 0 rgba(0, 0, 0, .04); | box-shadow: 0 1px 3px 0 rgba(0, 0, 0, .12), 0 0 3px 0 rgba(0, 0, 0, .04); | ||||
.tags-view-wrapper { | .tags-view-wrapper { | ||||
margin-left: 25px; | |||||
.tags-view-item { | .tags-view-item { | ||||
display: inline-block; | display: inline-block; | ||||
position: relative; | position: relative; | ||||
cursor: pointer; | cursor: pointer; | ||||
height: 26px; | |||||
line-height: 26px; | |||||
height: 30px; | |||||
line-height: 30px; | |||||
border: 1px solid #d8dce5; | border: 1px solid #d8dce5; | ||||
color: #495060; | color: #495060; | ||||
background: #fff; | background: #fff; | ||||
@@ -218,6 +219,8 @@ export default { | |||||
font-size: 12px; | font-size: 12px; | ||||
margin-left: 5px; | margin-left: 5px; | ||||
margin-top: 4px; | margin-top: 4px; | ||||
margin-bottom: 10px; | |||||
border-radius: 5px; | |||||
&:first-of-type { | &:first-of-type { | ||||
margin-left: 15px; | margin-left: 15px; | ||||
} | } | ||||
@@ -1,8 +1,8 @@ | |||||
/* | /* | ||||
* @Date: 2021-11-30 15:34:45 | * @Date: 2021-11-30 15:34:45 | ||||
* @LastEditors: JinxuChen | |||||
* @LastEditTime: 2021-12-10 10:19:10 | |||||
* @FilePath: \GpsCardAdmin\src\layout\mixin\ResizeHandler.js | |||||
* @LastEditors: JinxChen | |||||
* @LastEditTime: 2022-08-06 10:26:58 | |||||
* @FilePath: \telpoAdminTemplate\src\layout\mixin\ResizeHandler.js | |||||
* @description: | * @description: | ||||
*/ | */ | ||||
import store from '@/store' | import store from '@/store' | ||||
@@ -11,7 +11,8 @@ const { body } = document | |||||
const WIDTH = 992 // refer to Bootstrap's responsive design | const WIDTH = 992 // refer to Bootstrap's responsive design | ||||
export default { | export default { | ||||
watch: { | watch: { | ||||
$route(route) { | |||||
/* route */ | |||||
$route() { | |||||
if (this.device === 'mobile' && this.sidebar.opened) { | if (this.device === 'mobile' && this.sidebar.opened) { | ||||
store.dispatch('app/closeSideBar', { withoutAnimation: false }) | store.dispatch('app/closeSideBar', { withoutAnimation: false }) | ||||
} | } | ||||
@@ -1,8 +1,8 @@ | |||||
/* | /* | ||||
* @Date: 2021-11-30 15:35:16 | * @Date: 2021-11-30 15:35:16 | ||||
* @LastEditors: JinxuChen | |||||
* @LastEditTime: 2022-01-08 15:36:12 | |||||
* @FilePath: \GpsCardAdmin\src\main.js | |||||
* @LastEditors: JinxChen | |||||
* @LastEditTime: 2022-08-06 10:25:02 | |||||
* @FilePath: \telpoAdminTemplate\src\main.js | |||||
* @description: | * @description: | ||||
*/ | */ | ||||
import Vue from 'vue' | import Vue from 'vue' | ||||
@@ -25,12 +25,6 @@ import 'regenerator-runtime/runtime' | |||||
import '@/icons' // icon | import '@/icons' // icon | ||||
import '@/permission' // permission control | import '@/permission' // permission control | ||||
import transfrom from '@/utils/transfrom'; | |||||
import checkstatus from '@/utils/checkout-status'; | |||||
import checkoutStatusToNum from '@/utils/checkout-status-to-num'; | |||||
Vue.use(transfrom); | |||||
Vue.use(checkstatus); | |||||
Vue.use(checkoutStatusToNum); | |||||
/** | /** | ||||
* 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 | ||||
@@ -73,194 +73,22 @@ export const constantRoutes = [{ | |||||
redirect: '/off-limits-manage/off-limits-type', | redirect: '/off-limits-manage/off-limits-type', | ||||
name: 'off-limits-manage', | name: 'off-limits-manage', | ||||
meta: { | meta: { | ||||
title: '禁入区域管理', | |||||
title: '页面测试', | |||||
icon: 'el-icon-s-help' | icon: 'el-icon-s-help' | ||||
}, | }, | ||||
children: [{ | |||||
children: [ | |||||
{ | |||||
path: 'off-limits-type', | path: 'off-limits-type', | ||||
name: 'off-limits-type', | name: 'off-limits-type', | ||||
component: () => import('@/views/off-limits-manage/off-limits-main/off-limits-type/index'), | component: () => import('@/views/off-limits-manage/off-limits-main/off-limits-type/index'), | ||||
meta: { | meta: { | ||||
title: '禁入类别', | |||||
title: '测试', | |||||
icon: 'el-icon-s-order' | icon: 'el-icon-s-order' | ||||
} | } | ||||
}, | }, | ||||
{ | |||||
path: 'alarm-recognition', | |||||
name: 'alarm-recognition', | |||||
component: () => import('@/views/off-limits-manage/alarm-recognition/index'), | |||||
meta: { | |||||
title: '告警识别内容', | |||||
icon: 'el-icon-s-management' | |||||
} | |||||
}, | |||||
{ | |||||
path: 'common-exception', | |||||
name: 'common-exception', | |||||
component: () => import('@/views/off-limits-manage/common-exception/index'), | |||||
meta: { | |||||
title: '通用例外', | |||||
icon: 'el-icon-warning' | |||||
} | |||||
}, | |||||
{ | |||||
path: 'user-exception', | |||||
name: 'user-exception', | |||||
component: () => import('@/views/off-limits-manage/user-exception/index'), | |||||
meta: { | |||||
title: '用户例外', | |||||
icon: 'el-icon-user-solid' | |||||
} | |||||
}, | |||||
// todo 一期先不做这个功能 后面原型图确认了再做 | |||||
/* { | |||||
path: 'related-setting', | |||||
name: 'related-setting', | |||||
component: () => import('@/views/off-limits-manage/related-setting/index'), | |||||
meta: { | |||||
title: '相关设置', | |||||
icon: 'el-icon-s-tools' | |||||
} | |||||
}, */ | |||||
{ | |||||
path: 'alarm-query', | |||||
name: 'alarm-query', | |||||
component: () => import('@/views/off-limits-manage/alarm-query/index'), | |||||
meta: { | |||||
title: '告警查询', | |||||
icon: 'el-icon-message-solid' | |||||
} | |||||
} | |||||
] | |||||
}, | |||||
/* { | |||||
path: '/example', | |||||
component: Layout, | |||||
redirect: '/example/table', | |||||
name: 'Example', | |||||
meta: { | |||||
title: 'Example', | |||||
icon: 'el-icon-s-help' | |||||
}, | |||||
children: [{ | |||||
path: 'table', | |||||
name: 'Table', | |||||
component: () => import('@/views/table/index'), | |||||
meta: { | |||||
title: 'Table', | |||||
icon: 'table' | |||||
} | |||||
}, | |||||
{ | |||||
path: 'tree', | |||||
name: 'Tree', | |||||
component: () => import('@/views/tree/index'), | |||||
meta: { | |||||
title: 'Tree', | |||||
icon: 'tree' | |||||
} | |||||
} | |||||
] | ] | ||||
}, */ | |||||
/* { | |||||
path: '/form', | |||||
component: Layout, | |||||
children: [{ | |||||
path: 'index', | |||||
name: 'Form', | |||||
component: () => import('@/views/form/index'), | |||||
meta: { | |||||
title: 'Form', | |||||
icon: 'form' | |||||
} | |||||
}] | |||||
}, */ | |||||
// 例子模板,可参考 | |||||
/* { | |||||
path: '/nested', | |||||
component: Layout, | |||||
redirect: '/nested/menu1', | |||||
name: 'Nested', | |||||
meta: { | |||||
title: 'Nested', | |||||
icon: 'nested' | |||||
}, | |||||
children: [ | |||||
{ | |||||
path: 'menu1', | |||||
component: () => import('@/views/nested/menu1/index'), // Parent router-view | |||||
name: 'Menu1', | |||||
meta: { | |||||
title: 'Menu1' | |||||
}, | |||||
children: [{ | |||||
path: 'menu1-1', | |||||
component: () => import('@/views/nested/menu1/menu1-1'), | |||||
name: 'Menu1-1', | |||||
meta: { | |||||
title: 'Menu1-1' | |||||
} | |||||
}, | |||||
{ | |||||
path: 'menu1-2', | |||||
component: () => import('@/views/nested/menu1/menu1-2'), | |||||
name: 'Menu1-2', | |||||
meta: { | |||||
title: 'Menu1-2' | |||||
}, | |||||
children: [{ | |||||
path: 'menu1-2-1', | |||||
component: () => import('@/views/nested/menu1/menu1-2/menu1-2-1'), | |||||
name: 'Menu1-2-1', | |||||
meta: { | |||||
title: 'Menu1-2-1' | |||||
} | |||||
}, | |||||
{ | |||||
path: 'menu1-2-2', | |||||
component: () => import('@/views/nested/menu1/menu1-2/menu1-2-2'), | |||||
name: 'Menu1-2-2', | |||||
meta: { | |||||
title: 'Menu1-2-2' | |||||
} | |||||
} | |||||
] | |||||
}, | |||||
{ | |||||
path: 'menu1-3', | |||||
component: () => import('@/views/nested/menu1/menu1-3'), | |||||
name: 'Menu1-3', | |||||
meta: { | |||||
title: 'Menu1-3' | |||||
} | |||||
} | |||||
] | |||||
}, | |||||
{ | |||||
path: 'menu2', | |||||
component: () => import('@/views/nested/menu2/index'), | |||||
name: 'Menu2', | |||||
meta: { | |||||
title: 'menu2' | |||||
} | |||||
} | |||||
] | |||||
}, | }, | ||||
*/ | |||||
/* { | |||||
path: 'external-link', | |||||
component: Layout, | |||||
children: [ | |||||
{ | |||||
path: 'https://panjiachen.github.io/vue-element-admin-site/#/', | |||||
meta: { title: 'External Link', icon: 'link' } | |||||
} | |||||
] | |||||
}, */ | |||||
// 404 page must be placed at the end !!! | // 404 page must be placed at the end !!! | ||||
{ | { | ||||
path: '*', | path: '*', | ||||
@@ -1,13 +1,13 @@ | |||||
/* | /* | ||||
* @Date: 2021-11-29 11:20:34 | * @Date: 2021-11-29 11:20:34 | ||||
* @LastEditors: JinxuChen | |||||
* @LastEditTime: 2021-12-10 10:53:56 | |||||
* @FilePath: \GpsCardAdmin\src\settings.js | |||||
* @LastEditors: JinxChen | |||||
* @LastEditTime: 2022-08-06 10:30:24 | |||||
* @FilePath: \telpoAdminTemplate\src\settings.js | |||||
* @description: | * @description: | ||||
*/ | */ | ||||
module.exports = { | module.exports = { | ||||
title: '禁入区域告警系统', | |||||
title: '天波后台管理模板', | |||||
/** | /** | ||||
* @type {boolean} true | false | * @type {boolean} true | false | ||||
@@ -1,6 +1,6 @@ | |||||
import { login, logout, getInfo } from '@/api/user'; | import { login, logout, getInfo } from '@/api/user'; | ||||
import { getToken, setToken, removeToken } from '@/utils/auth'; | import { getToken, setToken, removeToken } from '@/utils/auth'; | ||||
import { getAuthToken, setAuthToken, removeAuthToken } from '@/utils/auth-token'; | |||||
import { getAuthToken, setAuthToken } from '@/utils/auth-token'; | |||||
import APPId from '@/utils/appId' | import APPId from '@/utils/appId' | ||||
import { resetRouter } from '@/router' | import { resetRouter } from '@/router' | ||||
@@ -89,7 +89,7 @@ const actions = { | |||||
}, | }, | ||||
// remove token | // remove token | ||||
resetToken({ commit, state }) { | |||||
resetToken({ commit}) { | |||||
return new Promise(resolve => { | return new Promise(resolve => { | ||||
removeToken() // must remove token first | removeToken() // must remove token first | ||||
commit('RESET_STATE') | commit('RESET_STATE') | ||||
@@ -58,11 +58,13 @@ div:focus { | |||||
height: 0; | height: 0; | ||||
} | } | ||||
} | } | ||||
// main-container global css | // main-container global css | ||||
.app-container { | .app-container { | ||||
padding: 20px 10px; | |||||
.filter-container { | |||||
margin: 30px 10px; | |||||
padding: 20px 20px; | |||||
.top-container { | |||||
padding: 30px 0 0 0px; | |||||
} | |||||
.top-input-container { | |||||
padding-left: 10px; | |||||
} | } | ||||
} | } |
@@ -1,16 +0,0 @@ | |||||
/* | |||||
* @Date: 2021-12-07 10:45:23 | |||||
* @LastEditors: JinxuChen | |||||
* @LastEditTime: 2021-12-23 11:41:43 | |||||
* @FilePath: \GpsCardAdmin\src\utils\checkout-status-to-num.js | |||||
* @description: 将接口里面的kindId转化为文字 | |||||
*/ | |||||
exports.install = function (Vue, options) { | |||||
Vue.prototype.checkoutStatusToNum = function (value) { | |||||
if (value === true) { | |||||
return 2 | |||||
} else if (value === false) { | |||||
return 0 | |||||
} | |||||
} | |||||
} |
@@ -1,18 +0,0 @@ | |||||
/* | |||||
* @Date: 2021-12-07 10:45:23 | |||||
* @LastEditors: JinxuChen | |||||
* @LastEditTime: 2021-12-15 16:29:48 | |||||
* @FilePath: \GpsCardAdmin\src\utils\checkout-status.js | |||||
* @description: 将接口里面的kindId转化为文字 | |||||
*/ | |||||
exports.install = function (Vue, options) { | |||||
Vue.prototype.checkoutStatus = function(value) { | |||||
if(value === 0) { | |||||
return '未启用' | |||||
} else if(value === 1 ) { | |||||
return '黑名单' | |||||
} else if(value === 2) { | |||||
return '白名单' | |||||
} | |||||
} | |||||
} |
@@ -1,13 +1,13 @@ | |||||
/* | /* | ||||
* @Date: 2021-11-29 11:20:35 | * @Date: 2021-11-29 11:20:35 | ||||
* @LastEditors: JinxuChen | |||||
* @LastEditTime: 2021-11-29 17:00:04 | |||||
* @FilePath: \GpsCardAdmin\src\utils\get-page-title.js | |||||
* @LastEditors: JinxChen | |||||
* @LastEditTime: 2022-08-06 10:29:26 | |||||
* @FilePath: \telpoAdminTemplate\src\utils\get-page-title.js | |||||
* @description: | * @description: | ||||
*/ | */ | ||||
import defaultSettings from '@/settings' | import defaultSettings from '@/settings' | ||||
const title = defaultSettings.title || '禁入区域告警系统' | |||||
const title = defaultSettings.title || '天波后台管理模板' | |||||
export default function getPageTitle(pageTitle) { | export default function getPageTitle(pageTitle) { | ||||
if (pageTitle) { | if (pageTitle) { | ||||
@@ -1,8 +1,8 @@ | |||||
/* | /* | ||||
* @Date: 2021-12-08 15:59:46 | * @Date: 2021-12-08 15:59:46 | ||||
* @LastEditors: JinxChen | * @LastEditors: JinxChen | ||||
* @LastEditTime: 2022-01-12 09:31:21 | |||||
* @FilePath: \GpsCardAdmin\src\utils\request.js | |||||
* @LastEditTime: 2022-08-06 10:24:13 | |||||
* @FilePath: \telpoAdminTemplate\src\utils\request.js | |||||
* @description: | * @description: | ||||
*/ | */ | ||||
import axios from 'axios' | import axios from 'axios' | ||||
@@ -41,28 +41,8 @@ service.interceptors.request.use( | |||||
// response interceptor | // response interceptor | ||||
service.interceptors.response.use( | service.interceptors.response.use( | ||||
/** | |||||
* If you want to get http information such as headers or status | |||||
* Please return response => response | |||||
*/ | |||||
/** | |||||
* Determine the request status by custom code | |||||
* Here is just an example | |||||
* You can also judge the status by HTTP Status Code | |||||
*/ | |||||
response => { | response => { | ||||
const res = response.data | const res = response.data | ||||
// if the custom code is not 20000, it is judged as an error. | |||||
/* if (res.code !== 0) { | |||||
Message({ | |||||
message: res.message || '出错了,请联系管理员!', | |||||
type: 'error', | |||||
duration: 3 * 1000 | |||||
}) | |||||
return Promise.reject(new Error(res.message)) | |||||
} else */ | |||||
if (res.code === 106) { | if (res.code === 106) { | ||||
// to re-login | // to re-login | ||||
setTimeout(() => { | setTimeout(() => { | ||||
@@ -75,7 +55,6 @@ service.interceptors.response.use( | |||||
location.reload() | location.reload() | ||||
}) | }) | ||||
}, 1000) | }, 1000) | ||||
/* return Promise.reject(new Error('token过期,请重新登录')) */ | |||||
} else if (res.code === 0) { | } else if (res.code === 0) { | ||||
return res | return res | ||||
} else { | } else { | ||||
@@ -1,16 +0,0 @@ | |||||
/* | |||||
* @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 '固定地点' | |||||
} | |||||
} | |||||
} |
@@ -1,13 +1,13 @@ | |||||
<!-- | <!-- | ||||
* @Date: 2021-11-29 11:20:35 | * @Date: 2021-11-29 11:20:35 | ||||
* @LastEditors: JinxuChen | |||||
* @LastEditTime: 2021-12-21 11:20:36 | |||||
* @FilePath: \GpsCardAdmin\src\views\dashboard\index.vue | |||||
* @LastEditors: JinxChen | |||||
* @LastEditTime: 2022-08-06 10:29:35 | |||||
* @FilePath: \telpoAdminTemplate\src\views\dashboard\index.vue | |||||
* @description: | * @description: | ||||
--> | --> | ||||
<template> | <template> | ||||
<div class="dashboard-container"> | <div class="dashboard-container"> | ||||
<div class="dashboard-text">欢迎来到天波禁入区域告警系统</div> | |||||
<div class="dashboard-text">欢迎来到天波后台管理模板</div> | |||||
</div> | </div> | ||||
</template> | </template> | ||||
@@ -1,85 +0,0 @@ | |||||
<template> | |||||
<div class="app-container"> | |||||
<el-form ref="form" :model="form" label-width="120px"> | |||||
<el-form-item label="Activity name"> | |||||
<el-input v-model="form.name" /> | |||||
</el-form-item> | |||||
<el-form-item label="Activity zone"> | |||||
<el-select v-model="form.region" placeholder="please select your zone"> | |||||
<el-option label="Zone one" value="shanghai" /> | |||||
<el-option label="Zone two" value="beijing" /> | |||||
</el-select> | |||||
</el-form-item> | |||||
<el-form-item label="Activity time"> | |||||
<el-col :span="11"> | |||||
<el-date-picker v-model="form.date1" type="date" placeholder="Pick a date" style="width: 100%;" /> | |||||
</el-col> | |||||
<el-col :span="2" class="line">-</el-col> | |||||
<el-col :span="11"> | |||||
<el-time-picker v-model="form.date2" type="fixed-time" placeholder="Pick a time" style="width: 100%;" /> | |||||
</el-col> | |||||
</el-form-item> | |||||
<el-form-item label="Instant delivery"> | |||||
<el-switch v-model="form.delivery" /> | |||||
</el-form-item> | |||||
<el-form-item label="Activity type"> | |||||
<el-checkbox-group v-model="form.type"> | |||||
<el-checkbox label="Online activities" name="type" /> | |||||
<el-checkbox label="Promotion activities" name="type" /> | |||||
<el-checkbox label="Offline activities" name="type" /> | |||||
<el-checkbox label="Simple brand exposure" name="type" /> | |||||
</el-checkbox-group> | |||||
</el-form-item> | |||||
<el-form-item label="Resources"> | |||||
<el-radio-group v-model="form.resource"> | |||||
<el-radio label="Sponsor" /> | |||||
<el-radio label="Venue" /> | |||||
</el-radio-group> | |||||
</el-form-item> | |||||
<el-form-item label="Activity form"> | |||||
<el-input v-model="form.desc" type="textarea" /> | |||||
</el-form-item> | |||||
<el-form-item> | |||||
<el-button type="primary" @click="onSubmit">Create</el-button> | |||||
<el-button @click="onCancel">Cancel</el-button> | |||||
</el-form-item> | |||||
</el-form> | |||||
</div> | |||||
</template> | |||||
<script> | |||||
export default { | |||||
data() { | |||||
return { | |||||
form: { | |||||
name: '', | |||||
region: '', | |||||
date1: '', | |||||
date2: '', | |||||
delivery: false, | |||||
type: [], | |||||
resource: '', | |||||
desc: '' | |||||
} | |||||
} | |||||
}, | |||||
methods: { | |||||
onSubmit() { | |||||
this.$message('submit!') | |||||
}, | |||||
onCancel() { | |||||
this.$message({ | |||||
message: 'cancel!', | |||||
type: 'warning' | |||||
}) | |||||
} | |||||
} | |||||
} | |||||
</script> | |||||
<style scoped> | |||||
.line{ | |||||
text-align: center; | |||||
} | |||||
</style> | |||||
@@ -1,7 +0,0 @@ | |||||
<template> | |||||
<div style="padding:30px;"> | |||||
<el-alert :closable="false" title="menu 1"> | |||||
<router-view /> | |||||
</el-alert> | |||||
</div> | |||||
</template> |
@@ -1,7 +0,0 @@ | |||||
<template> | |||||
<div style="padding:30px;"> | |||||
<el-alert :closable="false" title="menu 1-1" type="success"> | |||||
<router-view /> | |||||
</el-alert> | |||||
</div> | |||||
</template> |
@@ -1,7 +0,0 @@ | |||||
<template> | |||||
<div style="padding:30px;"> | |||||
<el-alert :closable="false" title="menu 1-2" type="success"> | |||||
<router-view /> | |||||
</el-alert> | |||||
</div> | |||||
</template> |
@@ -1,5 +0,0 @@ | |||||
<template functional> | |||||
<div style="padding:30px;"> | |||||
<el-alert :closable="false" title="menu 1-2-1" type="warning" /> | |||||
</div> | |||||
</template> |
@@ -1,5 +0,0 @@ | |||||
<template functional> | |||||
<div style="padding:30px;"> | |||||
<el-alert :closable="false" title="menu 1-2-2" type="warning" /> | |||||
</div> | |||||
</template> |
@@ -1,5 +0,0 @@ | |||||
<template functional> | |||||
<div style="padding:30px;"> | |||||
<el-alert :closable="false" title="menu 1-3" type="success" /> | |||||
</div> | |||||
</template> |
@@ -1,5 +0,0 @@ | |||||
<template> | |||||
<div style="padding:30px;"> | |||||
<el-alert :closable="false" title="menu 2" /> | |||||
</div> | |||||
</template> |
@@ -1,164 +0,0 @@ | |||||
<!-- | |||||
* @Date: 2021-11-30 09:44:24 | |||||
* @LastEditors: JinxChen | |||||
* @LastEditTime: 2022-02-14 22:34:22 | |||||
* @FilePath: \GpsCardAdmin\src\views\off-limits-manage\alarm-query\index.vue | |||||
* @description: | |||||
--> | |||||
<template> | |||||
<div class="app-container"> | |||||
<div class="filter-container"> | |||||
<!-- 搜索 --> | |||||
<el-input | |||||
v-model="searchValue" | |||||
:placeholder="placeholder" | |||||
style="width: 200px; margin-left: 10px;" | |||||
class="filter-item" | |||||
@keyup.enter.native="onSearch" | |||||
clearable | |||||
@clear="onClear" | |||||
/> | |||||
<el-button | |||||
class="filter-item" | |||||
style="margin-left: 10px;" | |||||
type="primary" | |||||
icon="el-icon-search" | |||||
@click="onSearch" | |||||
>搜索</el-button> | |||||
</div> | |||||
<!-- 表格 --> | |||||
<!-- <el-table | |||||
:key="tableKey" | |||||
v-loading="listLoading" | |||||
:data="list" | |||||
border | |||||
fit | |||||
highlight-current-row | |||||
style="width: 100%;" | |||||
@sort-change="sortChange" | |||||
></el-table>--> | |||||
<TTable :tableData="list" :columns="columns" @update="onUpdate" @delete="onDelete"></TTable> | |||||
<!-- 分页 --> | |||||
<pagination | |||||
v-show="total>0" | |||||
:total="total" | |||||
ref="pages" | |||||
:page.sync="page" | |||||
:limit.sync="limit" | |||||
@pagination="getList" | |||||
/> | |||||
</div> | |||||
</template> | |||||
<script> | |||||
import TTable from "../../../components/TTable/TTable"; | |||||
import Pagination from "@/components/Pagination"; | |||||
import APIAlarmQuery from "@/api/alarm-query"; | |||||
export default { | |||||
name: "", | |||||
components: { TTable, Pagination }, | |||||
data() { | |||||
return { | |||||
model: "", | |||||
modelOptions: [ | |||||
{ | |||||
value: "1", | |||||
label: "类别1" | |||||
}, | |||||
{ | |||||
value: "2", | |||||
label: "类别1" | |||||
} | |||||
], | |||||
searchValue: "", | |||||
columns: [ | |||||
/* { prop: "alarmType", title: "告警类别", fixed: 'left' }, */ | |||||
{ prop: "imei", title: "设备IMEI", fixed: 'left' }, | |||||
{ prop: "alarmAddress", title: "告警地址" }, | |||||
{ prop: "baiduLngLat", title: "百度经纬度" }, | |||||
{ prop: "gaodelngLat", title: "高德经纬度" }, | |||||
{ prop: "remarks", title: "告警内容" }, | |||||
{ prop: "createTime", title: "创建时间", fixed: 'right' } | |||||
/* { | |||||
action: true, | |||||
title: "操作", | |||||
actions: [ | |||||
{ fnName: "delete", title: "删除", type: "error" }, | |||||
] | |||||
} */ | |||||
], | |||||
list: [], | |||||
total: 0, | |||||
page: 1, | |||||
limit: 10, | |||||
placeholder: '请输入内容' | |||||
}; | |||||
}, | |||||
watch: { | |||||
searchValue(value) { | |||||
if (value === "") { | |||||
this.$refs['pages'].currentPage = 1; | |||||
this.getList(); | |||||
} | |||||
} | |||||
}, | |||||
methods: { | |||||
// 搜索 | |||||
onSearch() { | |||||
this.$refs['pages'].currentPage = 1; | |||||
this.getList(); | |||||
}, | |||||
// 修改 | |||||
onUpdate(row) { | |||||
console.log("修改", row); | |||||
}, | |||||
// 删除 | |||||
onDelete(row) { | |||||
console.log("删除", row); | |||||
}, | |||||
// 获取分页数据 | |||||
getList() { | |||||
let reqBody = { | |||||
pageNumber: this.page, | |||||
begNumber: this.limit, | |||||
imei: this.checkIsNumber(this.searchValue) ? this.searchValue : "", | |||||
keyword: this.checkIsNumber(this.searchValue) ? "": this.searchValue | |||||
}; | |||||
APIAlarmQuery.getAlarmQuery(reqBody).then(res => { | |||||
this.list = res.data.map(m => { | |||||
return { | |||||
imei: m.serialno, | |||||
content: m.address, | |||||
createTime: m.deviceTime || "无", | |||||
alarmAddress: m.address, | |||||
baiduLngLat: `${m.baiduLng}, ${m.baiduLat}`, | |||||
gaodelngLat: `${m.glng}, ${m.glat}`, | |||||
remarks: m.remarks, | |||||
keyId: m.keyId, | |||||
}; | |||||
}); | |||||
this.total = res.count; | |||||
}); | |||||
}, | |||||
// 点击清除按钮时 | |||||
onClear() { | |||||
this.$refs["pages"].currentPage = 1; | |||||
this.getList(); | |||||
}, | |||||
// 判断是否是数字并且是15位 | |||||
checkIsNumber(value) { | |||||
let reg = /^[0-9]+.?[0-9]*$/; | |||||
if(value.length >= 15 && reg.test(value)) { | |||||
return true | |||||
} | |||||
} | |||||
}, | |||||
mounted() { | |||||
this.getList(); | |||||
} | |||||
}; | |||||
</script> | |||||
<style scoped> | |||||
</style> |
@@ -1,441 +0,0 @@ | |||||
<!-- | |||||
* @Date: 2021-11-30 09:44:24 | |||||
* @LastEditors: JinxuChen | |||||
* @LastEditTime: 2021-12-23 11:21:28 | |||||
* @FilePath: \GpsCardAdmin\src\views\off-limits-manage\alarm-recognition\index.vue | |||||
* @description: | |||||
--> | |||||
<template> | |||||
<div class="app-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-button | |||||
v-show="false" | |||||
class="filter-item" | |||||
style="margin-left: 10px;" | |||||
type="primary" | |||||
icon="el-icon-folder-add" | |||||
@click="onImportBatch" | |||||
>批量导入</el-button> | |||||
<!-- 下拉 --> | |||||
<!-- 类别 --> | |||||
<el-select | |||||
v-model="model" | |||||
placeholder="类别" | |||||
style="width: 130px; margin-left: 10px;" | |||||
filterable | |||||
@change="outSelecChange" | |||||
@clear="onClear" | |||||
clearable | |||||
v-show="false" | |||||
> | |||||
<el-option | |||||
v-for="item in modelOptions" | |||||
:key="item.value" | |||||
:label="item.label" | |||||
:value="item.value" | |||||
class="filter-item" | |||||
></el-option> | |||||
</el-select> | |||||
<!-- 搜索 --> | |||||
<el-input | |||||
v-model="searchValue" | |||||
:placeholder="placeholder" | |||||
style="width: 200px; margin-left: 10px;" | |||||
class="filter-item" | |||||
@keyup.enter.native="onSearch" | |||||
clearable | |||||
/> | |||||
<el-button | |||||
class="filter-item" | |||||
style="margin-left: 10px;" | |||||
type="primary" | |||||
icon="el-icon-search" | |||||
@click="onSearch" | |||||
>搜索</el-button> | |||||
</div> | |||||
<TTable :tableData="list" :columns="columns" @update="onUpdate" @delete="onDelete"></TTable> | |||||
<!-- 分页 --> | |||||
<pagination | |||||
v-show="total>0" | |||||
:total="total" | |||||
:page.sync="page" | |||||
ref="pages" | |||||
:limit.sync="limit" | |||||
@pagination="getList" | |||||
/> | |||||
<el-dialog :visible.sync="dialogPvVisible" :title="dialogTitle"> | |||||
<el-form | |||||
ref="form" | |||||
:rules="formRules" | |||||
:model="form" | |||||
label-position="left" | |||||
label-width="70px" | |||||
> | |||||
<!-- 类型 --> | |||||
<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 label="类别" prop="model"> | |||||
<el-select v-model="form.model" class="filter-item" @change="onSelectChange"> | |||||
<el-option | |||||
v-for="item in formOptions" | |||||
:key="item.value" | |||||
:label="item.label" | |||||
:value="item.value" | |||||
/> | |||||
</el-select> | |||||
</el-form-item> | |||||
<!-- 内容名称 --> | |||||
<el-form-item label="内容名称" prop="content" label-width="80px"> | |||||
<el-input v-model="form.content" style="width: 100%"/> | |||||
</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 label="创建时间" prop="timestamp" v-show="false"> | |||||
<el-date-picker v-model="form.createTime" type="datetime" /> | |||||
</el-form-item> | |||||
</el-form> | |||||
<span slot="footer" class="dialog-footer"> | |||||
<el-button type="error" @click="dialogPvVisible = false">取消</el-button> | |||||
<el-button | |||||
type="primary" | |||||
:loading="loading" | |||||
@click="dialogStatus === 'update' ? update('form') : add('form')" | |||||
>确认</el-button> | |||||
</span> | |||||
</el-dialog> | |||||
<el-dialog :visible.sync="dialogUpload"> | |||||
<upload-excel-component :on-success="handleSuccess" :before-upload="beforeUpload" /> | |||||
</el-dialog> | |||||
</div> | |||||
</template> | |||||
<script> | |||||
import TTable from "../../../components/TTable/TTable"; | |||||
import Pagination from "@/components/Pagination"; | |||||
import UploadExcelComponent from "@/components/UploadExcel/index.vue"; | |||||
import APILimits from "@/api/off-limits-manage"; | |||||
export default { | |||||
name: "", | |||||
components: { TTable, Pagination, UploadExcelComponent }, | |||||
data() { | |||||
return { | |||||
buttonList: [ | |||||
{ | |||||
name: "添加", | |||||
type: "success", | |||||
click: () => { | |||||
this.onAdd(); | |||||
} | |||||
}, | |||||
{ | |||||
name: "批量导入", | |||||
type: "success", | |||||
click: () => { | |||||
this.onImportBatch(); | |||||
} | |||||
} | |||||
], | |||||
type: "", | |||||
model: "", | |||||
modelOptions: [], | |||||
searchValue: "", | |||||
columns: [ | |||||
{ prop: "type", title: "类型", fixed: 'left' }, | |||||
{ prop: "model", title: "类别" }, | |||||
{ prop: "content", title: "内容名称" }, | |||||
{ prop: "createTime", title: "创建时间" }, | |||||
{ prop: "status", title: "状态" }, | |||||
{ | |||||
action: true, | |||||
title: "操作", | |||||
actions: [ | |||||
{ fnName: "update", title: "修改", type: "primary", icon: 'el-icon-edit' }, | |||||
{ fnName: "delete", title: "删除", type: "danger", icon: 'el-icon-delete' } | |||||
] | |||||
} | |||||
], | |||||
list: [], | |||||
total: 0, | |||||
page: 1, | |||||
limit: 10, | |||||
dialogPvVisible: false, | |||||
dialogStatus: "", | |||||
dialogTitle: "修改告警识别内容", | |||||
form: { | |||||
typeRadio: 1, | |||||
model: "", | |||||
content: "", | |||||
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" } | |||||
] | |||||
}, | |||||
formOptions: [], | |||||
dialogUpload: false, | |||||
loading: false, | |||||
placeholder: '请输入内容' | |||||
}; | |||||
}, | |||||
watch: { | |||||
model(value) { | |||||
if (value === "") { | |||||
this.$refs['pages'].currentPage = 1; | |||||
this.getList(); | |||||
} | |||||
}, | |||||
searchValue(value) { | |||||
if (value === "") { | |||||
this.$refs['pages'].currentPage = 1; | |||||
this.getList(); | |||||
} | |||||
} | |||||
}, | |||||
methods: { | |||||
// 清空表单 | |||||
resetForm() { | |||||
this.form = { | |||||
typeRadio: 1, | |||||
model: "", | |||||
content: "", | |||||
createTime: "", | |||||
resource: "", | |||||
categoryId: "", | |||||
status: true | |||||
}; | |||||
}, | |||||
// 添加 | |||||
onAdd() { | |||||
this.resetForm(); | |||||
/* this.form.typeRadio = 1; */ | |||||
this.dialogTitle = "添加告警识别内容"; | |||||
this.dialogPvVisible = true; | |||||
this.dialogStatus = "add"; | |||||
this.form.status = true; | |||||
this.getAreaCategoryQuery(); | |||||
}, | |||||
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() { | |||||
this.dialogUpload = true; | |||||
}, | |||||
// 搜索 | |||||
onSearch() { | |||||
this.$refs['pages'].currentPage = 1; | |||||
this.getList(); | |||||
}, | |||||
// 修改 | |||||
onUpdate(row) { | |||||
console.log("row", row); | |||||
this.getAreaCategoryQuery(); | |||||
this.dialogPvVisible = true; | |||||
this.dialogStatus = "update"; | |||||
this.dialogTitle = "修改告警识别内容"; // copy obj | |||||
this.form.categoryId = row.categoryId; | |||||
this.form.createTime = new Date(this.form.createTime); | |||||
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(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) { | |||||
console.log("删除", row); | |||||
this.$confirm("是否删除?", { | |||||
confirmButtonText: "确定", | |||||
cancelButtonText: "取消", | |||||
type: "warning" | |||||
}) | |||||
.then(() => { | |||||
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(() => {}); | |||||
}, | |||||
// 获取分页数据 | |||||
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 = { | |||||
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; | |||||
}); | |||||
}, | |||||
beforeUpload(file) { | |||||
const isLt1M = file.size / 1024 / 1024 < 1; | |||||
if (isLt1M) { | |||||
return true; | |||||
} | |||||
this.$message({ | |||||
message: "导入的文件不能超过1m", | |||||
type: "warning" | |||||
}); | |||||
return false; | |||||
}, | |||||
handleSuccess({ results, header }) { | |||||
this.list = results; | |||||
this.columns = header.map(h => { | |||||
return { prop: h, title: h }; | |||||
}); | |||||
this.dialogUpload = false; | |||||
}, | |||||
// 弹窗选择框值变化时 | |||||
onSelectChange(value) { | |||||
this.form.categoryId = value; | |||||
}, | |||||
// 页面选择框变化 | |||||
outSelecChange(value) { | |||||
this.model = value; | |||||
}, | |||||
// 点击清除按钮时 | |||||
onClear() { | |||||
this.$refs["pages"].currentPage = 1; | |||||
this.getList(); | |||||
} | |||||
}, | |||||
mounted() { | |||||
this.getList(); | |||||
this.getAreaCategoryQuery(); | |||||
} | |||||
}; | |||||
</script> | |||||
<style scoped> | |||||
</style> |
@@ -1,398 +0,0 @@ | |||||
<!-- | |||||
* @Date: 2021-11-30 09:44:24 | |||||
* @LastEditors: JinxuChen | |||||
* @LastEditTime: 2022-01-08 16:23:36 | |||||
* @FilePath: \GpsCardAdmin\src\views\off-limits-manage\common-exception\index.vue | |||||
* @description: | |||||
--> | |||||
<template> | |||||
<div class="app-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-select | |||||
v-model="model" | |||||
placeholder="类别" | |||||
style="width: 130px; margin-left: 10px;" | |||||
filterable | |||||
@change="outSelecChange" | |||||
clearable | |||||
v-show="false" | |||||
> | |||||
<el-option | |||||
v-for="item in modelOptions" | |||||
:key="item.value" | |||||
:label="item.label" | |||||
:value="item.value" | |||||
class="filter-item" | |||||
></el-option> | |||||
</el-select> | |||||
<!-- 搜索 --> | |||||
<el-input | |||||
v-model="searchValue" | |||||
:placeholder="placeholder" | |||||
style="width: 200px; margin-left: 10px;" | |||||
class="filter-item" | |||||
@keyup.enter.native="onSearch" | |||||
@clear="onClear" | |||||
clearable | |||||
/> | |||||
<el-button | |||||
class="filter-item" | |||||
style="margin-left: 10px;" | |||||
type="primary" | |||||
icon="el-icon-search" | |||||
@click="onSearch" | |||||
>搜索</el-button> | |||||
</div> | |||||
<!-- 表格 --> | |||||
<!-- <el-table | |||||
:key="tableKey" | |||||
v-loading="listLoading" | |||||
:data="list" | |||||
border | |||||
fit | |||||
highlight-current-row | |||||
style="width: 100%;" | |||||
@sort-change="sortChange" | |||||
></el-table>--> | |||||
<TTable :tableData="list" :columns="columns" @update="onUpdate" @delete="onDelete"></TTable> | |||||
<!-- 分页 --> | |||||
<pagination | |||||
v-show="total>0" | |||||
:total="total" | |||||
ref="pages" | |||||
:page.sync="page" | |||||
:limit.sync="limit" | |||||
@pagination="getList" | |||||
/> | |||||
<el-dialog :visible.sync="dialogPvVisible" :title="dialogTitle"> | |||||
<el-form | |||||
ref="form" | |||||
:rules="formRules" | |||||
:model="form" | |||||
label-position="left" | |||||
label-width="70px" | |||||
> | |||||
<!-- 类别 todo 暂时隐藏--> | |||||
<!-- <el-form-item label="类别" prop="model"> | |||||
<el-select | |||||
v-model="form.model" | |||||
class="filter-item" | |||||
filterable | |||||
@change="onSelectChange" | |||||
clearable | |||||
> | |||||
<el-option | |||||
v-for="item in formOptions" | |||||
:key="item.value" | |||||
:label="item.label" | |||||
:value="item.value" | |||||
/> | |||||
</el-select> | |||||
</el-form-item> --> | |||||
<!-- 内容名称 --> | |||||
<el-form-item label="内容名称" prop="content" label-width="80px" clearable> | |||||
<el-input v-model="form.content" style="width: 100%" /> | |||||
</el-form-item> | |||||
<!-- 状态 --> | |||||
<el-form-item label="状态" prop="status" required> | |||||
<el-switch v-model="form.status" active-text="启用" inactive-text="关闭"></el-switch> | |||||
<!-- <el-radio-group v-model="form.status" size="medium"> | |||||
<el-radio border :label="0">未启用</el-radio> | |||||
<el-radio border :label="1">黑名单</el-radio> | |||||
<el-radio border :label="2">白名单</el-radio> | |||||
</el-radio-group> --> | |||||
</el-form-item> | |||||
<!-- 创建时间 --> | |||||
<el-form-item label="创建时间" prop="timestamp" v-show="false"> | |||||
<el-date-picker v-model="form.createTime" type="datetime" /> | |||||
</el-form-item> | |||||
</el-form> | |||||
<span slot="footer" class="dialog-footer"> | |||||
<el-button type="error" @click="dialogPvVisible = false">取消</el-button> | |||||
<el-button | |||||
type="primary" | |||||
@click="dialogStatus === 'update' ? update('form') : add('form')" | |||||
>确认</el-button> | |||||
</span> | |||||
</el-dialog> | |||||
</div> | |||||
</template> | |||||
<script> | |||||
import TTable from "../../../components/TTable/TTable"; | |||||
import Pagination from "@/components/Pagination"; | |||||
import APIExceptionGen from "@/api/common-exception"; | |||||
import APILimits from "@/api/off-limits-manage"; | |||||
export default { | |||||
name: "", | |||||
components: { TTable, Pagination }, | |||||
data() { | |||||
return { | |||||
model: "", | |||||
searchValue: "", | |||||
columns: [ | |||||
/* { prop: "type", title: "类型", }, | |||||
{ prop: "model", title: "类别" }, */ | |||||
{ prop: "content", title: "内容名称", fixed: 'left'}, | |||||
{ prop: "createTime", title: "创建时间" }, | |||||
{ prop: "status", title: "状态" }, | |||||
{ | |||||
action: true, | |||||
title: "操作", | |||||
actions: [ | |||||
{ fnName: "update", title: "修改", type: "primary", icon: 'el-icon-edit' }, | |||||
{ fnName: "delete", title: "删除", type: "danger", icon: 'el-icon-delete'} | |||||
] | |||||
} | |||||
], | |||||
list: [], | |||||
total: 1, | |||||
page: 1, | |||||
limit: 10, | |||||
type: "error", | |||||
dialogPvVisible: false, | |||||
dialogStatus: "", | |||||
dialogTitle: "修改通用例外", | |||||
modelOptions: [], //页面下拉框数据 | |||||
formOptions: [], //弹窗下拉数据 | |||||
form: { | |||||
model: "", | |||||
content: "", | |||||
createTime: "", | |||||
status: 0, | |||||
id: "" | |||||
}, | |||||
formRules: { | |||||
content: [ | |||||
{ | |||||
required: true, | |||||
message: "请输入内容名称", | |||||
trigger: "blur" | |||||
} | |||||
], | |||||
model: [ | |||||
{ required: true, message: "请选择类别", trigger: "change" } | |||||
] | |||||
}, | |||||
placeholder: '请输入内容', | |||||
postCode: '000000', //默认参数,邮编,传给后台的默认参数 | |||||
}; | |||||
}, | |||||
watch: { | |||||
model(value) { | |||||
if (value === "") { | |||||
this.getList(); | |||||
} | |||||
}, | |||||
searchValue(value) { | |||||
if (value === "") { | |||||
this.getList(); | |||||
} | |||||
} | |||||
}, | |||||
methods: { | |||||
// 清空表单 | |||||
resetForm() { | |||||
this.form = { | |||||
model: "", | |||||
content: "", | |||||
createTime: "", | |||||
categoryId: "", | |||||
status: true | |||||
}; | |||||
}, | |||||
// 添加 | |||||
onAdd() { | |||||
this.resetForm(); | |||||
this.dialogTitle = "添加通用例外"; | |||||
this.dialogPvVisible = true; | |||||
this.dialogStatus = "add"; | |||||
this.getAreaCategoryQuery(); | |||||
}, | |||||
add(formName) { | |||||
this.searchValue = ''; | |||||
let reqBody = { | |||||
id: 0, | |||||
categoryId: /* this.form.categoryId */'1639028957414', //todo 需求暂时隐藏类别,使用默认的类别 | |||||
keyword: this.form.content, | |||||
status: this.checkoutStatusToNum(this.form.status), | |||||
glat: 0, | |||||
glng: 0, | |||||
address: "", | |||||
postCode: this.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() { | |||||
this.$refs['pages'].currentPage = 1; | |||||
this.getList(); | |||||
}, | |||||
// 修改 | |||||
onUpdate(row) { | |||||
console.log(row); | |||||
this.dialogPvVisible = true; | |||||
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.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(formName) { | |||||
console.log("update"); | |||||
let reqBody = { | |||||
id: this.form.id, | |||||
categoryId: this.form.categoryId, | |||||
keyword: this.form.content, | |||||
status: this.checkoutStatusToNum(this.form.status), | |||||
glat: 0, | |||||
glng: 0, | |||||
address: "", | |||||
postCode: this.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) { | |||||
console.log("删除", row); | |||||
this.$confirm("是否删除?", { | |||||
confirmButtonText: "确定", | |||||
cancelButtonText: "取消", | |||||
type: "warning" | |||||
}) | |||||
.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() { | |||||
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 === 0 ? '关闭' : '启用', | |||||
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; | |||||
}, | |||||
// 点击清除按钮时 | |||||
onClear() { | |||||
this.$refs["pages"].currentPage = 1; | |||||
this.getList(); | |||||
} | |||||
}, | |||||
mounted() { | |||||
this.getList(); | |||||
this.getAreaCategoryQuery(); | |||||
} | |||||
}; | |||||
</script> | |||||
<style scoped> | |||||
</style> |
@@ -1,10 +1,10 @@ | |||||
<!-- | <!-- | ||||
* @Author: your name | * @Author: your name | ||||
* @Date: 2021-12-07 15:14:51 | * @Date: 2021-12-07 15:14:51 | ||||
* @LastEditTime: 2021-12-31 15:26:11 | |||||
* @LastEditors: JinxuChen | |||||
* @LastEditTime: 2022-08-06 15:51:12 | |||||
* @LastEditors: JinxChen | |||||
* @Description: 自动报警分类 | * @Description: 自动报警分类 | ||||
* @FilePath: \GpsCardAdmin\src\views\off-limits-manage\off-limits-main\off-limits-type\index.vue | |||||
* @FilePath: \telpoAdminTemplate\src\views\off-limits-manage\off-limits-main\off-limits-type\index.vue | |||||
--> | --> | ||||
<template> | <template> | ||||
@@ -27,59 +27,46 @@ | |||||
<el-input | <el-input | ||||
:xs="24" :sm="24" :lg="8" | :xs="24" :sm="24" :lg="8" | ||||
v-model="currentAddType.typeLabel" | v-model="currentAddType.typeLabel" | ||||
size="small" | |||||
placeholder="请输入类别" | placeholder="请输入类别" | ||||
></el-input> | ></el-input> | ||||
</el-form-item> | </el-form-item> | ||||
<el-form-item> | <el-form-item> | ||||
<el-button type="primary" @click="submitForm('currentAddType')" | |||||
<el-button type="primary" @click="submitForm('currentAddType')" size="small" | |||||
>提交</el-button | >提交</el-button | ||||
> | > | ||||
<!-- todo重置功能存在bug,暂时去掉 --> | <!-- todo重置功能存在bug,暂时去掉 --> | ||||
<!-- <el-button @click="resetForm('currentAddType')">重置</el-button> --> | <!-- <el-button @click="resetForm('currentAddType')">重置</el-button> --> | ||||
<el-button @click="dialogVisibleType = false">取 消</el-button> | |||||
<el-button @click="dialogVisibleType = false" size="small">取 消</el-button> | |||||
</el-form-item> | </el-form-item> | ||||
</el-form> | </el-form> | ||||
</el-dialog> | </el-dialog> | ||||
<div class="filter-container"> | |||||
<el-button | |||||
class="filter-item" | |||||
style="margin-left: 10px" | |||||
type="primary" | |||||
icon="el-icon-circle-plus" | |||||
@click="AddDialog" | |||||
>添加</el-button | |||||
> | |||||
<div class="top-container"> | |||||
<TopMenu :buttonList="buttonList"/> | |||||
<!-- 搜索 --> | <!-- 搜索 --> | ||||
<el-input | |||||
v-model="searchValue" | |||||
:placeholder="placeholder" | |||||
style="width: 200px; margin-left: 10px" | |||||
class="filter-item" | |||||
@keyup.enter.native="onSearch" | |||||
@clear="onClear" | |||||
clearable | |||||
/> | |||||
<el-button | |||||
class="filter-item" | |||||
style="margin-left: 10px" | |||||
type="primary" | |||||
icon="el-icon-search" | |||||
@click="onSearch" | |||||
>搜索</el-button | |||||
> | |||||
<div class="top-input-container"> | |||||
<el-input | |||||
v-model="searchValue" | |||||
:placeholder="placeholder" | |||||
style="width: 200px; margin-left: 10px" | |||||
class="filter-item" | |||||
@keyup.enter.native="onSearch" | |||||
@clear="onClear" | |||||
size="small" | |||||
clearable | |||||
/> | |||||
<el-button | |||||
class="filter-item" | |||||
style="margin-left: 10px" | |||||
type="primary" | |||||
size="small" | |||||
icon="el-icon-search" | |||||
@click="onSearch" | |||||
>搜索</el-button | |||||
> | |||||
</div> | |||||
</div> | </div> | ||||
<!-- 表格 --> | |||||
<!-- <el-table | |||||
:key="tableKey" | |||||
v-loading="listLoading" | |||||
:data="list" | |||||
border | |||||
fit | |||||
highlight-current-row | |||||
style="width: 100%;" | |||||
@sort-change="sortChange" | |||||
></el-table>--> | |||||
<TTable | <TTable | ||||
:tableData="list" | :tableData="list" | ||||
:columns="columns" | :columns="columns" | ||||
@@ -99,13 +86,14 @@ | |||||
</template> | </template> | ||||
<script> | <script> | ||||
import TTable from "../../../../components/TTable/TTable"; | |||||
import TTable from "@/components/TTable/TTable"; | |||||
import TopMenu from "@/components/TopMenu/index"; | |||||
import Pagination from "@/components/Pagination"; | import Pagination from "@/components/Pagination"; | ||||
import CategoryAPI from "@/api/area-category.js"; | import CategoryAPI from "@/api/area-category.js"; | ||||
export default { | export default { | ||||
name: "", | name: "", | ||||
components: { TTable, Pagination }, | |||||
components: { TTable, TopMenu, Pagination }, | |||||
data() { | data() { | ||||
return { | return { | ||||
@@ -121,8 +109,8 @@ export default { | |||||
action: true, | action: true, | ||||
title: "操作", | title: "操作", | ||||
actions: [ | actions: [ | ||||
{ fnName: "update", title: "修改", type: "primary", icon: 'el-icon-edit' }, | |||||
{ fnName: "delete", title: "删除", type: "danger" , icon: 'el-icon-delete'}, | |||||
{ fnName: "update", title: "修改", type: "primary", icon: 'el-icon-edit', size: 'small' }, | |||||
{ fnName: "delete", title: "删除", type: "danger" , icon: 'el-icon-delete', size: 'small'}, | |||||
], | ], | ||||
}, | }, | ||||
], | ], | ||||
@@ -135,7 +123,12 @@ export default { | |||||
kindId: "1", | kindId: "1", | ||||
typeLabel: "", | typeLabel: "", | ||||
}, | }, | ||||
placeholder: '请输入内容' | |||||
placeholder: '请输入内容', | |||||
buttonList: [ | |||||
{ | |||||
name: '添加', type: 'primary', icon: 'el-icon-circle-plus', click: () => { this.AddDialog();} | |||||
} | |||||
] | |||||
}; | }; | ||||
}, | }, | ||||
methods: { | methods: { | ||||
@@ -1,27 +0,0 @@ | |||||
<!-- | |||||
* @Date: 2021-11-30 14:24:42 | |||||
* @LastEditors: JinxuChen | |||||
* @LastEditTime: 2021-11-30 14:24:57 | |||||
* @FilePath: \GpsCardAdmin\src\views\off-limits-manage\related-setting\index.vue | |||||
* @description:相关设置 | |||||
--> | |||||
<template> | |||||
<div> | |||||
相关设置 | |||||
</div> | |||||
</template> | |||||
<script> | |||||
export default { | |||||
name:'', | |||||
data(){ | |||||
return { | |||||
} | |||||
} | |||||
} | |||||
</script> | |||||
<style scoped> | |||||
</style> |
@@ -1,448 +0,0 @@ | |||||
<!-- | |||||
* @Date: 2021-11-30 09:44:24 | |||||
* @LastEditors: JinxChen | |||||
* @LastEditTime: 2022-01-12 17:32:23 | |||||
* @FilePath: \GpsCardAdmin\src\views\off-limits-manage\user-exception\index.vue | |||||
* @description: | |||||
--> | |||||
<template> | |||||
<div class="app-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 | |||||
v-model="searchValue" | |||||
:placeholder="placeholder" | |||||
style="width: 200px; margin-left: 10px;" | |||||
class="filter-item" | |||||
@keyup.enter.native="onSearch" | |||||
clearable | |||||
@clear="onClear" | |||||
/> | |||||
<el-button | |||||
class="filter-item" | |||||
style="margin-left: 10px;" | |||||
type="primary" | |||||
icon="el-icon-search" | |||||
@click="onSearch" | |||||
>搜索</el-button> | |||||
</div> | |||||
<!-- 表格 --> | |||||
<!-- <el-table | |||||
:key="tableKey" | |||||
v-loading="listLoading" | |||||
:data="list" | |||||
border | |||||
fit | |||||
highlight-current-row | |||||
style="width: 100%;" | |||||
@sort-change="sortChange" | |||||
></el-table>--> | |||||
<TTable | |||||
:tableData="list" | |||||
:columns="columns" | |||||
@update="onUpdate" | |||||
@delete="onDelete" | |||||
@transform="onTransform" | |||||
></TTable> | |||||
<!-- 分页 --> | |||||
<!-- <div class="page-container"> --> | |||||
<pagination | |||||
v-show="total>0" | |||||
:total="total" | |||||
ref="pages" | |||||
:page.sync="page" | |||||
:limit.sync="limit" | |||||
@pagination="getList" | |||||
/> | |||||
<!-- </div> --> | |||||
<!-- 修改弹窗 --> | |||||
<el-dialog :visible.sync="dialogPvVisible" :title="dialogTitle"> | |||||
<el-form | |||||
ref="form" | |||||
:model="form" | |||||
:rules="formRules" | |||||
label-position="left" | |||||
label-width="70px" | |||||
> | |||||
<!-- 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 label="内容名称" prop="content" label-width="80px"> | |||||
<el-input v-model="form.content" style="width: 100%" clearable /> | |||||
</el-form-item> | |||||
<!-- 状态 --> | |||||
<el-form-item label="状态" prop="status" required> | |||||
<el-switch v-model="form.status" active-text="启用" inactive-text="关闭"></el-switch> | |||||
<!-- <el-radio-group v-model="form.status" size="medium"> | |||||
<el-radio border :label="0">未启用</el-radio> | |||||
<el-radio border :label="1">黑名单</el-radio> | |||||
<el-radio border :label="2">白名单</el-radio> | |||||
</el-radio-group> --> | |||||
</el-form-item> | |||||
<!-- 创建时间 --> | |||||
<el-form-item label="创建时间" prop="timestamp" v-show="false"> | |||||
<el-date-picker v-model="form.createTime" type="datetime" /> | |||||
</el-form-item> | |||||
</el-form> | |||||
<span slot="footer" class="dialog-footer"> | |||||
<el-button type="error" @click="dialogPvVisible = false">取消</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" width="200"> | |||||
<!-- <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> | |||||
</el-dialog> | |||||
</div> | |||||
</template> | |||||
<script> | |||||
import TTable from "../../../components/TTable/TTable"; | |||||
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 { | |||||
name: "", | |||||
components: { TTable, Pagination }, | |||||
data() { | |||||
return { | |||||
model: '1639028957414', //下拉框的值 | |||||
content: "", //内容 | |||||
modelOptions: [], | |||||
searchValue: "", | |||||
columns: [ | |||||
{ prop: "imei", title: "IMEI", fixed: 'left' }, | |||||
{ prop: "content", title: "内容名称" }, | |||||
{ prop: "createTime", title: "创建时间" }, | |||||
{ prop: "status", title: "状态" }, | |||||
{ | |||||
action: true, | |||||
title: "操作", | |||||
actions: [ | |||||
{ fnName: "update", title: "修改", type: "primary", icon: 'el-icon-edit' }, | |||||
{ fnName: "delete", title: "删除", type: "danger", icon: 'el-icon-delete' }, | |||||
{ | |||||
fnName: "transform", | |||||
title: "转通用", | |||||
type: "success", | |||||
icon: 'el-icon-warning' | |||||
} | |||||
] | |||||
} | |||||
], | |||||
list: [], | |||||
total: 0, | |||||
page: 1, | |||||
limit: 10, | |||||
dialogPvVisible: false, | |||||
dialogStatus: "", | |||||
dialogTitle: "修改用户例外", | |||||
dialogTrans: false, | |||||
dialogTransTitle: "转通用例外", | |||||
form: { | |||||
imei: "", | |||||
content: "", | |||||
createTime: "", | |||||
status: 0 | |||||
}, | |||||
radio1: "1", | |||||
formRules: { | |||||
content: [ | |||||
{ | |||||
required: true, | |||||
message: "请输入内容名称", | |||||
trigger: "blur" | |||||
} | |||||
], | |||||
imei: [ | |||||
{ | |||||
required: true, | |||||
message: "请输入imei", | |||||
trigger: "blur" | |||||
} | |||||
] | |||||
}, | |||||
placeholder: '请输入内容', | |||||
postCode: '000000', //默认参数,邮编,传给后台的默认参数 | |||||
}; | |||||
}, | |||||
watch: {}, | |||||
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.checkoutStatusToNum(this.form.status), | |||||
glat: 0, | |||||
glng: 0, | |||||
type: 'user', | |||||
address: this.form.content, | |||||
postCode: this.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() { | |||||
this.$refs["pages"].currentPage = 1; | |||||
this.getList(); | |||||
}, | |||||
// 修改 | |||||
onUpdate(row) { | |||||
this.dialogPvVisible = true; | |||||
this.dialogStatus = "update"; | |||||
this.dialogTitle = "修改用户例外"; | |||||
this.form = Object.assign({}, row); // copy obj | |||||
this.form.createTime = new Date(this.form.createTime); | |||||
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.checkoutStatusToNum(this.form.status), | |||||
glat: 0, | |||||
glng: 0, | |||||
type: 'user', | |||||
address: this.form.content, | |||||
postCode: this.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) { | |||||
this.$confirm("是否删除?", { | |||||
confirmButtonText: "确定", | |||||
cancelButtonText: "取消", | |||||
type: "warning" | |||||
}) | |||||
.then(() => { | |||||
let reqBody = { | |||||
keyId: row.keyId, | |||||
imei: "" | |||||
}; | |||||
APIExceptionUser.delRecognitionUser(reqBody).then(res => { | |||||
if (res.code === 0) { | |||||
this.$message({ | |||||
type: "success", | |||||
message: "删除成功!" | |||||
}); | |||||
this.getList(); | |||||
} else { | |||||
this.$message({ | |||||
type: "error", | |||||
message: "删除失败!" | |||||
}); | |||||
} | |||||
}); | |||||
}) | |||||
.catch(() => {}); | |||||
}, | |||||
// 转通用例外 | |||||
onTransform(row) { | |||||
console.log("row", row); | |||||
// todo 暂时取消, 后面需求改变再根据需求开发 | |||||
/* this.dialogTrans = true; */ | |||||
this.content = row.content; | |||||
this.form.status = row.status === '启用' ? 2 : 0; | |||||
this.$confirm("是否转通用?", { | |||||
confirmButtonText: "确定", | |||||
cancelButtonText: "取消", | |||||
type: "warning" | |||||
}).then(() => { | |||||
this.onTransConfirm() | |||||
}).catch(() => {}); | |||||
}, | |||||
// 确定转通用例外 | |||||
onTransConfirm() { | |||||
let reqBody = { | |||||
id: 0, | |||||
categoryId: this.model, //todo 需求暂时隐藏类别,使用默认的类别 | |||||
keyword: this.content, | |||||
status: this.form.status, | |||||
glat: 0, | |||||
glng: 0, | |||||
address: "", | |||||
postCode: this.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({ | |||||
message: "请选择一个类别!", | |||||
type: "error" | |||||
}); | |||||
} | |||||
}, | |||||
// 获取分页数据 | |||||
getList() { | |||||
let reqBody = { | |||||
pageNumber: this.page, | |||||
begNumber: this.limit, | |||||
type: "system", | |||||
imei: this.checkIsNumber(this.searchValue) ? this.searchValue : "", | |||||
keyword: this.checkIsNumber(this.searchValue) ? "" : 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 === 0 ? '关闭' : '启用' | |||||
}; | |||||
}); | |||||
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); | |||||
}, | |||||
// 点击清除按钮时 | |||||
onClear() { | |||||
this.$refs["pages"].currentPage = 1; | |||||
this.getList(); | |||||
}, | |||||
// 判断是否是数字并且是15位 | |||||
checkIsNumber(value) { | |||||
let reg = /^[0-9]+.?[0-9]*$/; | |||||
if(value.length >= 15 && reg.test(value)) { | |||||
return true | |||||
} | |||||
} | |||||
}, | |||||
mounted() { | |||||
this.getList(); | |||||
this.getAreaCategoryQuery(); | |||||
} | |||||
}; | |||||
</script> | |||||
<style scoped> | |||||
</style> |
@@ -1,79 +0,0 @@ | |||||
<template> | |||||
<div class="app-container"> | |||||
<el-table | |||||
v-loading="listLoading" | |||||
:data="list" | |||||
element-loading-text="Loading" | |||||
border | |||||
fit | |||||
highlight-current-row | |||||
> | |||||
<el-table-column align="center" label="ID" width="95"> | |||||
<template slot-scope="scope"> | |||||
{{ scope.$index }} | |||||
</template> | |||||
</el-table-column> | |||||
<el-table-column label="Title"> | |||||
<template slot-scope="scope"> | |||||
{{ scope.row.title }} | |||||
</template> | |||||
</el-table-column> | |||||
<el-table-column label="Author" width="110" align="center"> | |||||
<template slot-scope="scope"> | |||||
<span>{{ scope.row.author }}</span> | |||||
</template> | |||||
</el-table-column> | |||||
<el-table-column label="Pageviews" width="110" align="center"> | |||||
<template slot-scope="scope"> | |||||
{{ scope.row.pageviews }} | |||||
</template> | |||||
</el-table-column> | |||||
<el-table-column class-name="status-col" label="Status" width="110" align="center"> | |||||
<template slot-scope="scope"> | |||||
<el-tag :type="scope.row.status | statusFilter">{{ scope.row.status }}</el-tag> | |||||
</template> | |||||
</el-table-column> | |||||
<el-table-column align="center" prop="created_at" label="Display_time" width="200"> | |||||
<template slot-scope="scope"> | |||||
<i class="el-icon-time" /> | |||||
<span>{{ scope.row.display_time }}</span> | |||||
</template> | |||||
</el-table-column> | |||||
</el-table> | |||||
</div> | |||||
</template> | |||||
<script> | |||||
import { getList } from '@/api/table' | |||||
export default { | |||||
filters: { | |||||
statusFilter(status) { | |||||
const statusMap = { | |||||
published: 'success', | |||||
draft: 'gray', | |||||
deleted: 'danger' | |||||
} | |||||
return statusMap[status] | |||||
} | |||||
}, | |||||
data() { | |||||
return { | |||||
list: null, | |||||
listLoading: true | |||||
} | |||||
}, | |||||
created() { | |||||
this.fetchData() | |||||
}, | |||||
methods: { | |||||
fetchData() { | |||||
this.listLoading = true | |||||
getList().then(response => { | |||||
this.list = response.data.items | |||||
this.listLoading = false | |||||
}) | |||||
} | |||||
} | |||||
} | |||||
</script> |
@@ -1,78 +0,0 @@ | |||||
<template> | |||||
<div class="app-container"> | |||||
<el-input v-model="filterText" placeholder="Filter keyword" style="margin-bottom:30px;" /> | |||||
<el-tree | |||||
ref="tree2" | |||||
:data="data2" | |||||
:props="defaultProps" | |||||
:filter-node-method="filterNode" | |||||
class="filter-tree" | |||||
default-expand-all | |||||
/> | |||||
</div> | |||||
</template> | |||||
<script> | |||||
export default { | |||||
data() { | |||||
return { | |||||
filterText: '', | |||||
data2: [{ | |||||
id: 1, | |||||
label: 'Level one 1', | |||||
children: [{ | |||||
id: 4, | |||||
label: 'Level two 1-1', | |||||
children: [{ | |||||
id: 9, | |||||
label: 'Level three 1-1-1' | |||||
}, { | |||||
id: 10, | |||||
label: 'Level three 1-1-2' | |||||
}] | |||||
}] | |||||
}, { | |||||
id: 2, | |||||
label: 'Level one 2', | |||||
children: [{ | |||||
id: 5, | |||||
label: 'Level two 2-1' | |||||
}, { | |||||
id: 6, | |||||
label: 'Level two 2-2' | |||||
}] | |||||
}, { | |||||
id: 3, | |||||
label: 'Level one 3', | |||||
children: [{ | |||||
id: 7, | |||||
label: 'Level two 3-1' | |||||
}, { | |||||
id: 8, | |||||
label: 'Level two 3-2' | |||||
}] | |||||
}], | |||||
defaultProps: { | |||||
children: 'children', | |||||
label: 'label' | |||||
} | |||||
} | |||||
}, | |||||
watch: { | |||||
filterText(val) { | |||||
this.$refs.tree2.filter(val) | |||||
} | |||||
}, | |||||
methods: { | |||||
filterNode(value, data) { | |||||
if (!value) return true | |||||
return data.label.indexOf(value) !== -1 | |||||
} | |||||
} | |||||
} | |||||
</script> | |||||
@@ -6,7 +6,7 @@ function resolve(dir) { | |||||
return path.join(__dirname, dir) | return path.join(__dirname, dir) | ||||
} | } | ||||
const name = defaultSettings.title || '禁入区域告警系统' // page title | |||||
const name = defaultSettings.title || '天波后台管理模板' // page title | |||||
// If your port is set to 80, | // If your port is set to 80, | ||||
// use administrator privileges to execute the command line. | // use administrator privileges to execute the command line. | ||||