Compare commits

...

2 Commits

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

@ -8,8 +8,8 @@
<title></title>
<script type="module" crossorigin src="./assets/index.1693c987.js"></script>
<link rel="stylesheet" href="./assets/index.32d30889.css">
<script type="module" crossorigin src="./assets/index.d5a6cfd9.js"></script>
<link rel="stylesheet" href="./assets/index.ecc43642.css">
</head>
<body>
<div id="app">

@ -42,12 +42,31 @@ export const deleteLockScreenDynamic = data => post("LockScreenManager/LockScree
//获取配置规则下拉
export const getLockScreenDynamicConfigList = data => post("LockScreenManager/LockScreenDynamic/getLockScreenDynamicConfigList",data)
//获取配置规则下拉
//获取动态密码
export const generateDynamicPassword = data => post("LockScreenManager/LockScreenDynamic/generateDynamicPassword",data)
//获取客户端信息
export const getLockScreenClientList = data => post("LockScreenManager/LockScreenClient/getLockScreenClientList",data)
//修改客户端本地信息
export const updateLockScreenClient = data => post("LockScreenManager/LockScreenClient/updateLockScreenClient",data)
//发送远程修改配置指令
export const updateConfigClient = data => post("LockScreenManager/LockScreenClient/updateConfigClient",data)
//发送远程解锁指令
export const unLockClient = data => post("LockScreenManager/LockScreenClient/unLockClient",data)
//获取登录日志
export const getLockScreenLoginLogList = data => post("LockScreenManager/LockScreenLoginLog/getLockScreenLoginLogList",data)
//后台管理人员登录
export const userLogin = data => post("LockScreenManager/LockSreenGtUser/login",data)

@ -15,6 +15,11 @@ import lockScreenDynamicManage from '../..//views/LockScreenManager/lockScreenDy
import dynamicPassword from '../..//views/LockScreenManager/dynamicPassword.vue';
import clientManage from '../..//views/LockScreenManager/clientManage/clientManage.vue';
import userloginlogquery from '../..//views/LockScreenManager/userloginlogquery.vue';
import menu from '../../views/menu/menu.vue';
@ -35,6 +40,12 @@ const routes = [
},{
path: 'lockScreenDynamicManage',//cafterqueryPage
component: lockScreenDynamicManage,
},{
path: 'clientManage',//cafterqueryPage
component: clientManage,
},{
path: 'userloginlogquery',//cafterqueryPage
component: userloginlogquery,
},
{
path: 'index',//index

@ -0,0 +1,117 @@
<template>
<el-form ref="formDom" :rules="addFormRules" :model="formData" size="medium" v-loading="loading">
<el-row>
<el-col :span="19" :offset="1">
<el-form-item label="客户端别名" :label-width="formLabelWidth" >
<el-input clearable v-model="formData.clientName" autocomplete="off"></el-input>
</el-form-item>
</el-col>
<el-col :span="19" :offset="1">
<el-form-item label="客户端所属群组" :label-width="formLabelWidth" prop="groupName" >
<el-input clearable type="text" v-model="formData.groupName" autocomplete="off" maxlength="12"></el-input>
</el-form-item>
</el-col>
</el-row>
</el-form>
</template>
<script setup>
import pro from '../../../util/tool.js';
import { onMounted, reactive, ref, toRefs, warn } from 'vue';
import { addLockScreenGtUser, updateLockScreenClient } from '@/util/api/api.js';
import { ElMessage, ElMessageBox } from "element-plus";
//
const props = defineProps(['rowData']);
//
const emit = defineEmits(['addReload']);
// label
const formLabelWidth = ref('130px');
//
const formData = ref({});
//
const addServiceAreaList = ref([]);
//
const addRoleList = ref([]);
//
const loading = ref(false);
const formDom = ref(null);
//
const addFormRules = ref({
groupName: [{ required: true, message: '请输入客户端所属群组', trigger: 'blur' }],
})
onMounted(() => {
formData.value = props.rowData;
});
//
function saveData() {
formData.value.isAntiFee = 0;
addLockScreenGtUser(formData.value).then(res => {
if (res.result == 1) {
ElMessage.success("保存成功");
//
emit("addReload");
}else if(res.result == -2){
ElMessage.error(res.msg);
} else {
ElMessage.error("保存失败");
}
})
}
//
function updateData() {
formData.value.isAntiFee = 0;
updateLockScreenClient(formData.value).then(res => {
if (res.result == 1) {
ElMessage.success("修改成功");
//
emit("addReload");
}else if(res.result == -2){
ElMessage.error(res.msg);
} else {
ElMessage.error("修改失败");
}
})
}
//使
defineExpose({
formDom,
saveData,
updateData
});
</script>
<style scoped></style>

@ -0,0 +1,124 @@
<template>
<el-form ref="formDom" :rules="addFormRules" :model="formData" size="medium" v-loading="loading">
<el-row>
<el-col :span="19" :offset="1">
<el-form-item label="等待时间" :label-width="formLabelWidth">
<el-input oninput="if(!/^[0-9]+$/.test(value)) value=value.replace(/\D/g,'');if(value<0) value='';" clearable v-model="formData.WaiteTime" autocomplete="off">
<template #append></template>
</el-input>
</el-form-item>
</el-col>
<el-col :span="19" :offset="1">
<el-form-item label="MQTT服务连接url" :label-width="formLabelWidth" prop="groupName">
<el-input clearable type="text" v-model="formData.MqttUrl" autocomplete="off"
maxlength="12"></el-input>
</el-form-item>
</el-col>
<el-col :span="19" :offset="1">
<el-form-item label="MQTT服务连接用户名" :label-width="formLabelWidth" prop="groupName">
<el-input clearable type="text" v-model="formData.MqttUser" autocomplete="off"
maxlength="12"></el-input>
</el-form-item>
</el-col>
<el-col :span="19" :offset="1">
<el-form-item label="MQTT服务连接密码" :label-width="formLabelWidth" prop="groupName">
<el-input clearable type="text" v-model="formData.MqttPassword" autocomplete="off"
maxlength="12"></el-input>
</el-form-item>
</el-col>
<el-col :span="19" :offset="1">
<el-form-item label="客户端动态口令私钥" :label-width="formLabelWidth" prop="groupName">
<el-input clearable type="text" v-model="formData.PrivateKey" autocomplete="off"
maxlength="12"></el-input>
</el-form-item>
</el-col>
<el-col :span="19" :offset="1">
<el-form-item label="客户端别名" :label-width="formLabelWidth" prop="groupName">
<el-input clearable type="text" v-model="formData.ClientName" autocomplete="off"
maxlength="12"></el-input>
</el-form-item>
</el-col>
</el-row>
</el-form>
</template>
<script setup>
import pro from '../../../util/tool.js';
import { onMounted, reactive, ref, toRefs, warn } from 'vue';
import { updateConfigClient } from '@/util/api/api.js';
import { ElMessage, ElMessageBox } from "element-plus";
//
const props = defineProps(['rowData']);
//
const emit = defineEmits(['addReload']);
// label
const formLabelWidth = ref('150px');
//
const formData = ref({});
//
const addServiceAreaList = ref([]);
//
const addRoleList = ref([]);
//
const loading = ref(false);
const formDom = ref(null);
const locationOptions = ['Home', 'Company', 'School']
onMounted(() => {
formData.value = props.rowData;
});
//
function saveConfigData() {
updateConfigClient(formData.value).then(res => {
if (res.result == 1) {
ElMessage.success(res.msg);
//
emit("addReload");
} else if (res.result == -2) {
ElMessage.error(res.msg);
} else {
ElMessage.error(res.msg);
}
})
}
//使
defineExpose({
formDom,
saveConfigData
});
</script>
<style scoped></style>

@ -0,0 +1,608 @@
<template>
<el-row>
<el-col :span="24">
<div style="padding: 10px 0;display: flex">
<!-- <el-button type="primary" style="margin-left: 0.5%;margin-top: 0px;" @click="addOperators">
<el-icon>
<plus />
</el-icon>
<span style="vertical-align: middle;"> 新增 </span>
</el-button> -->
<el-button type="primary" style="margin-left: 0.5%;margin-top: 0px;" @click="updateOperators">
<el-icon>
<Edit />
</el-icon>
<span style="vertical-align: middle;">修改</span>
</el-button>
<el-button type="warning" style="margin-left: 0.5%;margin-top: 0px;" @click="configClient">
<el-icon>
<Edit />
</el-icon>
<span style="vertical-align: middle;"> 远程修改配置信息 </span>
</el-button>
<!-- <el-button type="danger" style="margin-top: 0px;" @click="del">
<el-icon>
<delete />
</el-icon>
<span style="vertical-align: middle;"> 解锁屏幕 </span>
</el-button> -->
<el-button type="primary" style="margin-left: 0.5%;margin-top: 0px;" @click="searchShow = true">
<el-icon style="vertical-align: middle;">
<search />
</el-icon>
<span style="vertical-align: middle;"> 查找 </span>
</el-button>
</div>
<el-table :height=myHeight highlight-current-row="true" v-loading.fullscreen.lock="tableLoading"
:data="tableData" border style="width: 100%;" @current-change="tableHandleCurrentChange"
@selection-change="handleSelectionChange">
<el-table-column :resizable="false" fixed align="center" type="index" width="80" label="序号" />
<el-table-column :resizable="false" align="center" prop="clientName" label="客户端别名" />
<el-table-column :resizable="false" align="center" width="150" prop="clientId" label="客户端MAC地址" />
<el-table-column :resizable="false" align="center" width="180" prop="connectStartTime"
label="客户端创建连接时间" />
<el-table-column :resizable="false" align="center" prop="passwordKey" label="客户端动态口令私钥" />
<el-table-column :resizable="false" align="center" width="130" prop="groupName" label="客户端所属群组" />
<el-table-column :resizable="false" prop="right" label="操作" width="200" align="center">
<template v-slot="scope">
<el-button style="width: 48%;margin-left: 1%;margin-top: 2%" @click="unlock(scope.row)"
type="danger" size="default" :icon="View">
<span style="vertical-align: middle;"> 解锁屏幕 </span>
</el-button>
</template>
</el-table-column>
</el-table>
<el-config-provider :locale="locale">
<el-pagination background @size-change="handleSizeChange" @current-change="handleCurrentChange"
:current-page="searchForm.pageNum" :page-sizes="[20, 30, 50]" :page-size="searchForm.pageSize"
layout="total, sizes, prev, pager, next, jumper" :total="searchForm.total">
</el-pagination>
</el-config-provider>
</el-col>
<el-dialog title="人员信息查找" v-model="searchShow" width="35%" top="0.5%" draggable :modal="false">
<el-form :model="searchForm" size="medium" ref="searchFormElement">
<el-row>
<el-col :span="19" :offset="1">
<el-form-item label="客户端别名" :label-width="formLabelWidth">
<el-input clearable placeholder="请输入" v-model="searchForm.clientNameQuery"
autocomplete="off"></el-input>
</el-form-item>
</el-col>
<el-col :span="19" :offset="1">
<el-form-item label="客户端MAC地址" :label-width="formLabelWidth">
<el-input clearable placeholder="请输入" v-model="searchForm.clientIdQuery"
autocomplete="off"></el-input>
</el-form-item>
</el-col>
<el-col :span="19" :offset="1">
<el-form-item label="群组名称" :label-width="formLabelWidth">
<el-input clearable placeholder="请输入" v-model="searchForm.groupNameQuery"
autocomplete="off"></el-input>
</el-form-item>
</el-col>
<el-col :span="19" :offset="1">
<el-form-item label="核销时间(起始)" :label-width="formLabelWidth">
<el-date-picker clearable v-model="searchForm.startTime" type="date" format="YYYY-MM-DD"
value-format="YYYY-MM-DD 00:00:00" style="width: 100%;" />
</el-form-item>
</el-col>
<el-col :span="19" :offset="1">
<el-form-item label="核销时间(终止)" :label-width="formLabelWidth">
<el-date-picker clearable v-model="searchForm.endTime" type="date" format="YYYY-MM-DD"
value-format="YYYY-MM-DD 23:59:59" style="width: 100%;" />
</el-form-item>
</el-col>
</el-row>
</el-form>
<template #footer>
<span class="dialog-footer">
<el-button @click="searchShow = false"> 取消</el-button>
<el-button type="primary" @click="resetSearchData">
<el-icon>
<Refresh />
</el-icon>
<span style="vertical-align: middle;"> 重置 </span>
</el-button>
<el-button type="primary" @click="searchData">
<el-icon style="vertical-align: middle;">
<search />
</el-icon>
<span style="vertical-align: middle;"> 搜索 </span>
</el-button>
</span>
</template>
</el-dialog>
<el-dialog v-model="addOperatorsShow" width="40%" top="0.5%" :destroy-on-close="true"
:close-on-click-modal="false">
<!-- :before-close="addOperatorsShow = false" -->
<template #header="{ titleAdd, titleClass, titleUpdate }">
<div class="my-header">
<span v-if="addTitle" :id="titleAdd" :class="titleClass"></span>
<span v-if="updateTitle" :id="titleUpdate" :class="titleClass"></span>
</div>
</template>
<clientAddUpdate ref="clientAddUpdateDom" :rowData="addUpdateForm" @addReload="addReload">
</clientAddUpdate>
<template #footer>
<span class="dialog-footer">
<el-button @click="addOperatorsShow = false"> 取消</el-button>
<el-button type="primary" @click="saveData()"> </el-button>
</span>
</template>
</el-dialog>
<el-dialog v-model="configShow" width="40%" top="0.5%" :destroy-on-close="true" :close-on-click-modal="false">
<template #header="{ titleAdd, titleClass, warnMessgae }">
<div class="my-header">
<span :id="titleAdd" :class="titleClass">客户端远程配置修改</span>
<span :id="warnMessgae" :class="titleClass" style="color: red;">
输入要修改的值点击保存后发送修改指令 </span>
</div>
</template>
<clientConfigUpdate ref="clientConfigUpdateDom" :rowData="configForm" @addReload="addReload">
</clientConfigUpdate>
<template #footer>
<span class="dialog-footer">
<el-button @click="configShow = false"> 取消</el-button>
<el-button type="primary" @click="saveConfigData()"> </el-button>
</span>
</template>
</el-dialog>
</el-row>
</template>
<script lang="ts" setup>
import { Download, View } from '@element-plus/icons-vue';
import pro from '../../../util/tool.js';
import { onMounted, reactive, ref, toRefs, warn } from 'vue';
import { getLockScreenClientList, unLockClient, deleteLockScreenGtUser } from '@/util/api/api.js';
import { ElMessage, ElMessageBox } from "element-plus";
import clientAddUpdate from './clientAddUpdate.vue'
import clientConfigUpdate from './clientConfigUpdate.vue'
//dom
const clientAddUpdateDom = ref(null);
//dom
const clientConfigUpdateDom = ref(null);
//
const props = defineProps(['checkForm', 'images']);
//
const tableLoading = ref(false);
// label
const formLabelWidth = ref('130px');
//
const myHeight = ref(500);
//
const searchForm = reactive({
total: 0,
pageNum: 1,
pageSize: 20,
clientIdQuery: "", //
clientNameQuery: "",
groupNameQuery: "",
startTime: "", //
endTime: "", //
});
//
const addUpdateForm = ref({});
//
const configForm = ref({});
//
const tableData = ref([]);
//
const searchServiceAreaList = ref([]);
//
const searchRoleList = ref([]);
// false true
const addOperatorsShow = ref(false);
// false true
const configShow = ref(false);
// false true
const searchShow = ref(false);
//
const addTitle = ref(false);
//
const updateTitle = ref(false);
//
const currentRow = ref(null);
//
const multipleSelection = ref(null);
//
const checkList = ref([]);
//
const collectionShow = ref(false);
onMounted(() => {
tableLoading.value = true;
//
getTableData();
//
//getOtherData();
});
function getTableData() {
getLockScreenClientList(searchForm).then(res => {
if (res.records != null) {
tableData.value = res.records;
searchForm.total = res.total;
searchForm.pageNum = res.current;
searchForm.pageSize = res.size;
} else {
ElMessage.error('查询失败!')
}
tableLoading.value = false;
//
myHeight.value = (document.documentElement.clientHeight) * 0.77;
})
}
function reloadTableData() {
tableLoading.value = true;
getLockScreenClientList(searchForm).then(res => {
if (res.records != null) {
tableData.value = res.records;
searchForm.total = res.total;
searchForm.pageNum = res.current;
searchForm.pageSize = res.size;
} else {
ElMessage.error('查询失败!')
}
tableLoading.value = false;
})
}
function getOtherData() {
getOperationsFiterData({ subComNo: null, isChange: "N" }).then(res => {
if (res.roleList != null) {
searchRoleList.value = res.roleList;
}
if (res.serviceAreaList != null) {
searchServiceAreaList.value = res.serviceAreaList;
}
});
}
//
function configClient() {
//
if (currentRow.value == null) {
ElMessage({
showClose: true,
message: '请选择要修改的数据!',
type: 'warning',
})
return;
}
//退
let current = { ...currentRow.value };
//退
configForm.value.ClientId = current.clientId;
configForm.value.PrivateKey = current.passwordKey;
configForm.value.ClientName = current.clientName;
configShow.value = true;
}
//
function saveData() {
clientAddUpdateDom.value.formDom.validate((valid) => {
if (valid) { // valid true;
//
if (addTitle.value) {
//
clientAddUpdateDom.value.saveData();
}
//
if (updateTitle.value) {
//
clientAddUpdateDom.value.updateData();
}
} else {
return false
}
});
}
//
function saveConfigData() {
clientConfigUpdateDom.value.formDom.validate((valid) => {
if (valid) { // valid true;
clientConfigUpdateDom.value.saveConfigData();
} else {
return false
}
});
}
//
function addReload() {
//
addOperatorsShow.value = false;
//
configShow.value = false;
configForm.value = {};
//
reloadTableData();
}
//
function updateOperators() {
//
if (currentRow.value == null) {
ElMessage({
showClose: true,
message: '请选择要修改的数据!',
type: 'warning',
})
return;
}
//退
addUpdateForm.value = { ...currentRow.value };
addOperatorsShow.value = true;
//
addTitle.value = false;
//
updateTitle.value = true;
}
//
function searchData() {
//()
if (searchForm.startTime !== "" && searchForm.endTime !== null
&& searchForm.startTime !== "" && searchForm.endTime !== null) {
let result = compareDates(searchForm.startTime, searchForm.endTime);
if (result == -1) {
ElMessage.warning("核销时间(起始) 不能大于 核销时间(终止)");
return;
}
}
searchForm.pageSize = 20;
searchForm.pageNum = 1;
searchForm.total = 0;
//
reloadTableData();
}
//
function resetSearchData() {
//
searchForm.startTime = "" //
searchForm.endTime = ""; //4
searchForm.clientIdQuery = "";
searchForm.clientNameQuery = "";
searchForm.groupNameQuery = "";
searchForm.pageSize = 20;
searchForm.pageNum = 1;
searchForm.total = 0;
//
reloadTableData();
}
function unlock(row) {
//
unLockClient(row).then(res => {
if (res.result == 1) {
ElMessage.success(res.msg);
} else if (res.result == -2) {
ElMessage.error(res.msg);
} else {
ElMessage.error(res.msg);
}
//
reloadTableData();
})
}
function del() {
if (null == currentRow.value && null == multipleSelection.value) {
ElMessage({
showClose: true,
message: '请选择要删除的数据!',
type: 'warning',
})
return;
}
let operatorList = [];
//
if (null != multipleSelection.value && multipleSelection.value.length > 0) {
operatorList = [...multipleSelection.value];
if (null != currentRow.value) {
let isCanAdd = true;
for (let item of operatorList) {
if (item.id == currentRow.value.id) {
isCanAdd = false;
break;
}
}
if (isCanAdd) {
operatorList.push({ ...currentRow.value });
}
}
} else {
operatorList.push({ ...currentRow.value });
}
let msg = "";
if (operatorList.length == 1) {
msg = '是否确定删除该数据?';
} else {
msg = '是否批量删除' + operatorList.length + '条数据?';
}
ElMessageBox.confirm(
msg,
'提示',
{
confirmButtonText: '确定',
cancelButtonText: '取消',
type: 'warning',
}
).then(() => {
deleteLockScreenGtUser(operatorList).then((res) => {
if (res.result == 1) {
ElMessage.success(res.msg);
currentRow.value = null;
multipleSelection.value = null;
//
reloadTableData();
} else {
ElMessage.error(res.msg);
}
})
}).catch(() => {
})
}
function tableFormat(row, column) {
// DT YYYY-mm-dd HH:mm:ss
if (column.property == "loginPwd") {
return "**********";
}
}
//
function compareDates(beginDate, endDate) {
let beginTime = new Date(beginDate);
let endTime = new Date(endDate);
// -1
if (beginTime > endTime) {
return -1;
//
} else if (beginTime <= endTime) {
return 0;
}
}
//
function handleSizeChange(pageSize) {
searchForm.pageSize = pageSize;
reloadTableData();
}
//
function handleCurrentChange(pageNum) {
searchForm.pageNum = pageNum;
reloadTableData()
}
//
function tableHandleCurrentChange(row) {
currentRow.value = row;
}
//
function handleSelectionChange(row) {
multipleSelection.value = row
}
</script>
<style scoped></style>

@ -46,8 +46,11 @@ const colors = [
{ color: '#67C23A', percentage: 100 },
]
onMounted(() => {
const token = localStorage.getItem('token');
if (token == null || token == "") {
localStorage.setItem('token', "eyJ0eXAiOiJKV1QiLCJhbGciOiJIUzI1NiJ9.eyJNYW5ubyI6ImFkbWluIiwidXNlclVuaXRDbGFzcyI6IjAiLCJ1c2VyU3ViQ29tTm8iOiIwIiwidXNlclN0YW5vIjoiMCIsIm1hbm5vIjoiYWRtaW4iLCJtYW4iOiLnrqHnkIblkZgiLCJNYW4iOiLnrqHnkIblkZgiLCJleHAiOjE3MjQwMzkyNzksIk1hbmlkIjoiYWRtaW4ifQ.dA9h_rfGnKKsAXi1-4Qg8H950yBjt3XBRxAVYdI2Ct8");
}
//
getTableData();
});
@ -88,7 +91,7 @@ function getTableData() {
} else {
content.value = jisuan + "分钟后动态口令失效";
let percent = 5;
percentage.value = Math.floor(100 - (10 * 60 - second) * (100 / (10 * 60)));
percentage.value = Math.floor(100 - (60 * 60 - second) * (100 / (60 * 60)));
}
console.log("倒计时=" + percentage.value);
}, 5 * 1000);
@ -97,7 +100,7 @@ function getTableData() {
} else {
content.value = jisuan + "分钟后动态口令失效";
let percent = 5;
percentage.value = Math.floor(100 - (10 * 60 - second) * (100 / (10 * 60)));
percentage.value = Math.floor(100 - (60 * 60 - second) * (100 / (60 * 60)));
//1
timer.value = setInterval(function () {
//
@ -113,7 +116,7 @@ function getTableData() {
} else {
content.value = jisuan + "分钟后动态口令失效";
let percent = 5;
percentage.value = Math.floor(100 - (10 * 60 - second) * (100 / (10 * 60)));
percentage.value = Math.floor(100 - (60 * 60 - second) * (100 / (60 * 60)));
}
console.log("倒计时=" + percentage.value);
}, 5 * 1000);
@ -155,7 +158,7 @@ function reload() {
} else {
content.value = jisuan + "分钟后动态口令失效";
let percent = 5;
percentage.value = Math.floor(100 - (10 * 60 - second) * (100 / (10 * 60)));
percentage.value = Math.floor(100 - (60 * 60 - second) * (100 / (60 * 60)));
}
console.log("倒计时=" + percentage.value);
}, 5 * 1000);
@ -164,7 +167,7 @@ function reload() {
} else {
content.value = jisuan + "分钟后动态口令失效";
let percent = 5;
percentage.value = Math.floor(100 - (10 * 60 - second) * (100 / (10 * 60)));
percentage.value = Math.floor(100 - (60 * 60 - second) * (100 / (60 * 60)));
//1
timer.value = setInterval(function () {
//
@ -180,7 +183,7 @@ function reload() {
} else {
content.value = jisuan + "分钟后动态口令失效";
let percent = 5;
percentage.value = Math.floor(100 - (10 * 60 - second) * (100 / (10 * 60)));
percentage.value = Math.floor(100 - (60 * 60 - second) * (100 / (60 * 60)));
}
console.log("倒计时=" + percentage.value);
}, 5 * 1000);

@ -9,7 +9,7 @@
<el-col :span="19" :offset="1">
<el-form-item label="口令" :label-width="formLabelWidth" prop="loginPwd" clearable>
<el-input type="password" v-model="formData.loginPwd" autocomplete="off" show-password maxlength="12"></el-input>
<el-input type="password" v-model="formData.loginPwd" autocomplete="off" maxlength="12"></el-input>
</el-form-item>
</el-col>

@ -40,7 +40,7 @@
<el-table-column :resizable="false" fixed type="selection" width="50" align="center"></el-table-column>
<el-table-column :resizable="false" fixed align="center" type="index" width="80" label="序号" />
<el-table-column :resizable="false" align="center" prop="loginName" label="用户名" />
<el-table-column :resizable="false" align="center" prop="loginPwd" label="口令" />
<el-table-column :formatter="tableFormat" :resizable="false" align="center" prop="loginPwd" label="口令" />
<el-table-column :resizable="false" align="center" prop="userName" label="人员名称" />
</el-table>
@ -416,6 +416,15 @@ function del() {
}
function tableFormat(row, column) {
// DT YYYY-mm-dd HH:mm:ss
if (column.property == "loginPwd") {
return "**********";
}
}
//
function handleSizeChange(pageSize) {

@ -0,0 +1,291 @@
<template>
<el-row>
<el-col :span="24">
<div style="padding: 10px 0;display: flex">
<el-button type="primary" style="margin-left: 0.5%;margin-top: 0px;" @click="searchShow = true">
<el-icon style="vertical-align: middle;">
<search />
</el-icon>
<span style="vertical-align: middle;"> 查找 </span>
</el-button>
</div>
<el-table :height=myHeight highlight-current-row="true" v-loading.fullscreen.lock="tableLoading"
:data="tableData" border style="width: 100%;" @current-change="tableHandleCurrentChange">
<el-table-column :resizable="false" fixed align="center" type="index" width="80" label="序号" />
<el-table-column :resizable="false" align="center" prop="userName" label="人员名称" />
<el-table-column :resizable="false" align="center" prop="loginName" label="用户登录名" />
<el-table-column width="180" :resizable="false" align="center" prop="operationTime" label="登录时间" />
<el-table-column :formatter="tableFormat" width="140" :resizable="false" align="center" prop="passWordType" label="校验类型" />
<el-table-column :resizable="false" align="center" prop="passWord" label="静态口令" />
<el-table-column :resizable="false" align="center" prop="dynamicPassword" label="动态口令" />
<el-table-column :resizable="false" align="center" prop="operationIp" label="登录客户端MAC地址" />
</el-table>
<el-config-provider :locale="locale">
<el-pagination background @size-change="handleSizeChange" @current-change="handleCurrentChange"
:current-page="searchForm.pageNum" :page-sizes="[20, 30, 50]" :page-size="searchForm.pageSize"
layout="total, sizes, prev, pager, next, jumper" :total="searchForm.total">
</el-pagination>
</el-config-provider>
</el-col>
</el-row>
<el-dialog title="查询" v-model="searchShow" width="35%" top="0.5%" draggable :modal="false">
<el-form :model="searchForm" size="medium" ref="searchFormElement">
<el-row>
<el-col :span="19" :offset="1">
<el-form-item label="客户端MAC地址" :label-width="formLabelWidth">
<el-input clearable placeholder="请输入" v-model="searchForm.clientIdQuery"
autocomplete="off"></el-input>
</el-form-item>
</el-col>
<el-col :span="19" :offset="1">
<el-form-item label="用户登录名" :label-width="formLabelWidth">
<el-input placeholder="请输入" v-model="searchForm.loginNameQuery" autocomplete="off"
clearable></el-input>
</el-form-item>
</el-col>
<el-col :span="19" :offset="1">
<el-form-item label="登录时间(起始)" :label-width="formLabelWidth">
<el-date-picker clearable v-model="searchForm.operationStartTime" type="date"
format="YYYY-MM-DD" value-format="YYYY-MM-DD 00:00:00" style="width: 100%;" />
</el-form-item>
</el-col>
<el-col :span="19" :offset="1">
<el-form-item label="登录时间(终止)" :label-width="formLabelWidth">
<el-date-picker clearable v-model="searchForm.operationEndTime" type="date" format="YYYY-MM-DD"
value-format="YYYY-MM-DD 23:59:59" style="width: 100%;" />
</el-form-item>
</el-col>
</el-row>
</el-form>
<template #footer>
<span class="dialog-footer">
<el-button @click="searchShow = false"> 取消</el-button>
<el-button type="primary" @click="resetSearchData">
<el-icon>
<Refresh />
</el-icon>
<span style="vertical-align: middle;"> 重置 </span>
</el-button>
<el-button type="primary" @click="searchData">
<el-icon style="vertical-align: middle;">
<search />
</el-icon>
<span style="vertical-align: middle;"> 搜索 </span>
</el-button>
</span>
</template>
</el-dialog>
</template>
<script lang="ts" setup>
import { Download, View } from '@element-plus/icons-vue';
import pro from '../../util/tool.js';
import { onMounted, reactive, ref, toRefs, warn } from 'vue';
import { getLockScreenLoginLogList } from '@/util/api/api.js';
import { ElMessage, ElMessageBox, ElNotification } from "element-plus";
//
const tableLoading = ref(true);
// label
const formLabelWidth = ref('130px');
//
const myHeight = ref(500);
//
const searchShow = ref(false);
//
const searchForm = reactive({
operationStartTime: pro.dateFormatDay(new Date().setMonth(new Date().getMonth() - 1)) + " 00:00:00",
operationEndTime: pro.dateFormatDay(new Date()) + " 23:59:59",
total: 0,
pageNum: 1,
pageSize: 20,
payType: null,
loginNameQuery: "",
clientIdQuery: "",
});
//
const tableData = ref([]);
//
const currentRow = ref(null);
const IntegralTypeList = ref(false);
onMounted(() => {
tableLoading.value = true;
//
getIntegraTableData();
});
function getIntegraTableData() {
getLockScreenLoginLogList(searchForm).then(res => {
if (res.records != null) {
tableData.value = res.records;
searchForm.total = res.total;
searchForm.pageNum = res.current;
searchForm.pageSize = res.size;
} else {
ElMessage.error('查询失败!')
}
//
myHeight.value = (document.documentElement.clientHeight) * 0.77;
tableLoading.value = false;
})
}
function reloadTableData() {
tableLoading.value = true;
getLockScreenLoginLogList(searchForm).then(res => {
if (res.records != null) {
tableData.value = res.records;
searchForm.total = res.total;
searchForm.pageNum = res.current;
searchForm.pageSize = res.size;
} else {
ElMessage.error('查询失败!')
}
tableLoading.value = false;
})
}
//
function searchData() {
//,null.
if (searchForm.payType != null && searchForm.payType == '') {
searchForm.payType = null;
}
//()
if (searchForm.operationStartTime !== "" && searchForm.operationEndTime !== null
&& searchForm.operationStartTime !== "" && searchForm.operationEndTime !== null) {
let result = compareDates(searchForm.operationStartTime, searchForm.operationEndTime);
if (result == -1) {
ElMessage.warning("操作时间(起始) 不能大于 操作时间(终止)");
return;
}
}
searchForm.pageSize = 20;
searchForm.pageNum = 1;
searchForm.total = 0;
//
reloadTableData();
}
//
function resetSearchData() {
//
searchForm.loginNameQuery = "";
//
searchForm.payType = null;
searchForm.operationStartTime = pro.dateFormatDay(new Date().setMonth(new Date().getMonth() - 1)) + " 00:00:00";
searchForm.operationEndTime = pro.dateFormatDay(new Date()) + " 23:59:59"
searchForm.clientIdQuery = "";
searchForm.pageSize = 20;
searchForm.pageNum = 1;
searchForm.total = 0;
//
reloadTableData();
}
//
function handleSizeChange(pageSize) {
//
tableLoading.value = true;
searchForm.pageSize = pageSize;
reloadTableData();
}
//
function handleCurrentChange(pageNum) {
//
tableLoading.value = true;
searchForm.pageNum = pageNum;
reloadTableData()
}
//
function compareDates(beginDate, endDate) {
let beginTime = new Date(beginDate);
let endTime = new Date(endDate);
// -1
if (beginTime > endTime) {
return -1;
//
} else if (beginTime <= endTime) {
return 0;
}
}
function tableHandleCurrentChange(row) {
currentRow.value = row;
}
function chnageDate() {
return currentRow.value;
}
function tableFormat(row, column) {
// DT YYYY-mm-dd HH:mm:ss
if (column.property == "passWordType") {
var passWordType = row[column.property];
if(passWordType == 1){
return "静态口令校验";
}else if(passWordType == 2){
return "动态口令校验";
}else if(passWordType == 3){
return "动态口令和静态口令一同校验";
}
}
}
//使
defineExpose({
chnageDate
});
</script>
<style scoped></style>
Loading…
Cancel
Save