You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
265 lines
13 KiB
265 lines
13 KiB
@@master_page.html |
|
<link href="css/page_table_list.css?v=1" rel="stylesheet" /> |
|
<!--<link href="css/page_jwt_token_management.css?v=1" rel="stylesheet" />--> |
|
<script src="js/ace/src-min/ace.js"></script> |
|
<script src="js/ace/src-min/ext-language_tools.js"></script> |
|
<div id="apibox" class="card mypage"> |
|
<!--正文--> |
|
<div class="card"> |
|
<div class="search-bar"> </div> |
|
<div class="card"> |
|
<form id="frmSearach" onsubmit="return false;"> |
|
<div class="row "> |
|
<div class="form-group"> |
|
<div class="col-md-1"><label class="form-control m-l-15">搜索:</label></div> |
|
<div class="col-md-11"> |
|
<div class="input-group"> |
|
<input id="txtSearch" type="text" style="width:150px;margin-left:20px; margin-right:10px" class="form-control" value="" name="keyword" placeholder="请输入用户名"> |
|
<a class="btn btn-secondary m-r-5" id="btnSearch" data-toggle="tooltip" @click="onSearch()" href="#!"><i class="mdi mdi-magnify"></i> 搜索</a> |
|
<button onclick="frmSearach.reset()" type="submit" class="btn btn-close">清空</button> |
|
</div> |
|
</div> |
|
</div> |
|
</div> |
|
</form> |
|
<div class="card-toolbar clearfix"> |
|
<div class="toolbar-btn-action"> |
|
<a @click="openAddDiv()" data-toggle="modal" data-target="#gridSystemModal" class="btn btn-primary m-r-10" href="#!"><i class="mdi mdi-plus"></i> 新增</a> |
|
</div> |
|
</div> |
|
<div class="card-body"> |
|
<div class="table-responsive"> |
|
<div class="master-table-container"> |
|
<table class="table table-bordered"> |
|
<thead> |
|
<tr v-if="data && data.Columns && data.Columns.length > 0"> |
|
<th class="width30"> |
|
<label class="lyear-checkbox checkbox-primary"> |
|
<input type="checkbox" @change="selectAll" id="check-all"><span></span> |
|
</label> |
|
</th> |
|
<th v-for="column in data.Columns">{{ column.ColumnDescription }}</th> |
|
<th>操作</th> |
|
</tr> |
|
</thead> |
|
<tbody v-if="data && data.Data"> |
|
<tr v-if="data.Columns && data.Columns.length > 0" v-for="item in data.Data"> |
|
<td> |
|
<label class="lyear-checkbox checkbox-primary"> |
|
<input type="checkbox" name="ids[]" v-model="selectedItems" :alt="item.Id" :value="item.Id"><span></span> |
|
</label> |
|
</td> |
|
<td v-for="column in data.Columns"> |
|
<template v-if="column.PropertyName === 'Token'"> |
|
{{ item[column.PropertyName].substring(0, 20) }}... |
|
<button @click="copyToClipboard(item[column.PropertyName])" class="btn btn-link btn-sm">复制</button> |
|
</template> |
|
<template v-else> |
|
{{ item[column.PropertyName] }} |
|
</template> |
|
</td> |
|
<td class="table_opt2"> |
|
<button data-toggle="modal" @click="openEditDiv(item)" data-target="#gridSystemModal" class="btn btn-link" type="button"> |
|
<i class="mdi mdi-lead-pencil"></i> 修改 |
|
</button> |
|
<button data-toggle="modal" @click="deleteAndConfirm(item)" data-target="#divDelBox" class="btn btn-link" type="button"> |
|
<i class="mdi mdi-do-not-disturb"></i> 删除 |
|
</button> |
|
</td> |
|
</tr> |
|
</tbody> |
|
</table> |
|
</div> |
|
</div> |
|
@@page_control.html |
|
</div> |
|
</div> |
|
</div> |
|
<!--插入或者新增--> |
|
<div class="modal fade" tabindex="-1" role="dialog" aria-labelledby="gridSystemModalLabel" id="gridSystemModal" style="display: none;"> |
|
<div class="modal-dialog" role="document"> |
|
<div class="modal-content"> |
|
<div class="modal-header"> |
|
<button type="button" class="close" data-dismiss="modal" aria-label="Close"><span aria-hidden="true">×</span></button> |
|
<h4 class="modal-title" id="exampleModalLabel">{{title}}</h4> |
|
</div> |
|
<div class="modal-body"> |
|
<form id="frmEdit"> |
|
<input type="hidden" v-model="formData.Id" name="Id" /> |
|
<div class="form-group"> |
|
<label class="control-label">用户名:</label> |
|
<input :readonly="isReadOnly" v-if="users.length > 0&& users[0]" oninput="tools.validateDatalist(this,'userList')" list="userList" v-model="formData.UserName" class="form-control" placeholder="请选择用户名"> |
|
<datalist id="userList" v-if="users.length > 0&& users[0]"> |
|
<option v-for="user in users" :value="user">{{ user }}</option> |
|
</datalist> |
|
<div v-else class="alert alert-warning"> |
|
JWT的信息没有配置完整,不能加载下拉列表 |
|
详细:{{bizUserErrorMessage}} |
|
</div> |
|
</div> |
|
<div class="form-group"> |
|
<label for="message-text" class="control-label">描述:</label> |
|
<input type="text" placeholder="描述" v-model="formData.Description" name="Description" class="form-control"> |
|
</div> |
|
<div class="form-group"> |
|
<label for="message-text" class="control-label">使用期限:</label> |
|
<input :readonly="isReadOnly" type="date" v-model="formData.Expiration" name="Expiration" class="form-control"> |
|
</div> |
|
<div class="form-group"> |
|
<label for="message-text" class="control-label">JWT Token:</label> |
|
<textarea readonly="readonly" placeholder="JWT Token 自动生成" class="form-control" v-model="formData.Token" name="Token"></textarea> |
|
</div> |
|
</form> |
|
</div> |
|
<div class="modal-footer"> |
|
<button type="button" id="btnCloseEdit" class="btn btn-default" data-dismiss="modal">关闭</button> |
|
<button type="button" @click="addOrUpdate()" class="btn btn-primary">保存</button> |
|
</div> |
|
</div> |
|
</div> |
|
</div> |
|
</div> |
|
<script> |
|
var vueObj = new Vue({ |
|
el: '#apibox', |
|
data: { |
|
data: null, |
|
error: null, |
|
bizUserErrorMessage: "", |
|
title: "添加JWT Token", |
|
formData: { |
|
Id: 0, |
|
UserName: '', |
|
Description: '', |
|
Expiration: '', |
|
Token: '' |
|
}, |
|
selectedItems: [], |
|
users: [], // 添加用户列表 |
|
isReadOnly: false // 添加只读状态 |
|
}, |
|
mounted() { |
|
this.fetchData(""); |
|
this.fetchUsers(); |
|
}, |
|
methods: { |
|
fetchData: function (append) { |
|
var url = "/PrivateReZeroRoute/100003/GetZeroJwtTokenManagementPage" + append; |
|
axios.get(url, jwHeader) |
|
.then(response => { |
|
this.data = response.data; |
|
this.error = null; |
|
}) |
|
.catch(error => { |
|
this.error = error.message; |
|
this.data = null; |
|
}); |
|
}, |
|
fetchUsers: function () { |
|
var url = "/PrivateReZeroRoute/100003/GetBizUsers"; // 获取用户列表的API |
|
axios.get(url, jwHeader) |
|
.then(response => { |
|
if (Array.isArray(response.data)) { |
|
this.users = response.data; |
|
} else if (response.data.message) { |
|
this.bizUserErrorMessage = response.data.message; |
|
this.users = [""]; |
|
} |
|
}) |
|
.catch(error => { |
|
this.error = error.message; |
|
}); |
|
}, |
|
onSearch: function (page) { |
|
var urlParameters = "?" + tools.objectToQueryString({ |
|
__pageNumber: page, |
|
__pageSize: tools.getValue("selPageSize"), |
|
UserName: txtSearch.value, |
|
OrderByType:1 |
|
}); |
|
this.fetchData(urlParameters); |
|
}, |
|
selectAll: function (event) { |
|
if (event.target.checked) { |
|
// 全选 |
|
this.selectedItems = this.data.Data.map(item => item.Id); |
|
} else { |
|
// 全不选 |
|
this.selectedItems = []; |
|
} |
|
}, |
|
deleteAndConfirm: function (item) { |
|
if (item == null) { |
|
var url = "/PrivateReZeroRoute/100003/DeleteTokenManage?Id=" + localStorage.delId; |
|
axios.get(url, jwHeader) |
|
.then(response => { |
|
if (response.data.message) { |
|
tools.alert(response.data.message); |
|
} |
|
this.data = response.data; |
|
this.error = null; |
|
this.onSearch(); |
|
btnDelClose.click(); |
|
}) |
|
.catch(error => { |
|
this.error = error.message; |
|
this.data = null; |
|
}); |
|
} else { |
|
localStorage.delId = item.Id; |
|
} |
|
}, |
|
openEditDiv: function (item) { |
|
var th = this; |
|
this.title = "修改JWT Token"; |
|
this.isReadOnly = true; // 设置只读状态 |
|
var urlById = "/PrivateReZeroRoute/100003/GetTokenManageById?id=" + item.Id; |
|
if (item.Id) { |
|
axios.get(urlById, jwHeader) |
|
.then(response => { |
|
th.formData = response.data; |
|
th.formData.Expiration =tools.formatDate(th.formData.Expiration); |
|
}) |
|
.catch(error => { |
|
this.error = error.message; |
|
this.data = null; |
|
}); |
|
} |
|
}, |
|
openAddDiv: function () { |
|
this.title = "添加JWT Token"; |
|
this.isReadOnly = false; // 取消只读状态 |
|
this.formData = { |
|
Id: 0, |
|
UserName: '', |
|
Description: '', |
|
Expiration: '', |
|
Token: '' |
|
}; |
|
btnSave.click(); |
|
}, |
|
addOrUpdate: function () { |
|
var formData = this.formData; |
|
var url = formData.Id ? |
|
"/PrivateReZeroRoute/100003/UpdateTokenManage" : |
|
"/PrivateReZeroRoute/100003/AddTokenManage"; |
|
axios.post(url, formData, jwHeader) |
|
.then(response => { |
|
if (response.data == true) { |
|
btnCloseEdit.click(); |
|
this.error = null; |
|
this.onSearch(); |
|
} else { |
|
tools.alert(response.data.message); |
|
} |
|
}) |
|
.catch(error => { |
|
this.error = error.message; |
|
}); |
|
}, |
|
copyToClipboard: function (text) { |
|
tools.copyText(text); |
|
} |
|
} |
|
});</script> |
|
|
|
|