@@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>