网站首页 网站源码
website
站点相关全部源代码,隐藏了一些关于服务器的信息
'use strict';

layui.use(['table', 'layer', 'util', 'laydate'], function () {
    const table = layui.table;
    const layer = layui.layer;
    const util = layui.util;
    const laydate = layui.laydate;
    const tableId = 'accessRequestTable';
    const tableElem = document.getElementById(tableId);
    
    // Initialize date range picker
    laydate.render({
        elem: '#dateRange',
        range: true,
        done: function(value, date, endDate){
            // value is the string "yyyy-MM-dd - yyyy-MM-dd"
        }
    });
    
    // Get configuration from data attributes
    const pageUrl = tableElem.dataset.pageUrl;
    const handleUrl = tableElem.dataset.handleUrl;

    if (!pageUrl || !handleUrl) {
        console.error('Access request table configuration missing URLs');
        return;
    }

    table.render({
        elem: '#' + tableId,
        url: pageUrl,
        page: true,
        limit: 20,
        cellMinWidth: 120,
        cols: [[
            {
                field: 'requestTime',
                title: '时间',
                width: 170,
                templet: d => util.toDateString(d.requestTime, 'yyyy-MM-dd HH:mm')
            },
            {
                field: 'userId',
                title: '用户ID',
                width: 150
            },
            {
                field: 'clientDisplayName',
                title: '应用名称',
                minWidth: 150,
                templet: d => `<div>${util.escape(d.clientDisplayName)}</div><small class="text-muted">${d.clientId}</small>`
            },
            {
                field: 'reason',
                title: '理由',
                minWidth: 200,
                templet: d => util.escape(d.reason)
            },
            {
                field: 'status',
                title: '状态',
                width: 100,
                templet: '#statusTpl'
            },
            {
                field: 'handlerName',
                title: '处理人',
                width: 120,
                templet: d => util.escape(d.handlerName || '-')
            },
            {
                field: 'handleRemark',
                title: '处理备注',
                minWidth: 150,
                templet: d => util.escape(d.handleRemark || '-')
            },
            {
                fixed: 'right',
                title: '操作',
                width: 180,
                toolbar: '#accessRequestTableActions'
            }
        ]]
    });
    
    const btnSearch = document.getElementById('btnSearch');
    if (btnSearch) {
        btnSearch.addEventListener('click', function () {
            const dateRange = document.getElementById('dateRange').value;
            let startDate = null;
            let endDate = null;
            if (dateRange) {
                const parts = dateRange.split(' - ');
                if (parts.length === 2) {
                    startDate = parts[0];
                    endDate = parts[1];
                }
            }
            
            table.reload(tableId, {
                where: {
                    account: document.getElementById('accountFilter')?.value,
                    clientId: document.getElementById('clientFilter')?.value,
                    startDate: startDate,
                    endDate: endDate
                },
                page: { curr: 1 }
            });
        });
    }

    const btnClear = document.getElementById('btnClear');
    if (btnClear) {
        btnClear.addEventListener('click', function () {
            document.getElementById('dateRange').value = '';
            document.getElementById('accountFilter').value = '';
            document.getElementById('clientFilter').value = '';
            btnSearch.click();
        });
    }

    table.on('tool(' + tableId + ')', function (obj) {
        const data = obj.data;
        const event = obj.event;

        if (event === 'approve') {
            handleRequest(data.id, 'Approved');
        } else if (event === 'reject') {
            handleRequest(data.id, 'Rejected');
        } else if (event === 'ignore') {
            handleRequest(data.id, 'Ignored');
        } else if (event === 'restore') {
            layer.confirm('确定要将此申请还原回待处理状态吗?<br>注意:如果已通过,对应的授权将被撤销。', function(index){
                submitHandle(data.id, 'Pending', '');
                layer.close(index);
            });
        }
    });

    function handleRequest(id, status) {
        let title = "";
        let placeholder = "请输入处理备注(可选)";
        if (status === 'Approved') title = "通过申请";
        else if (status === 'Rejected') {
            title = "拒绝申请";
            placeholder = "请输入拒绝理由(可选)";
        }
        else title = "忽略申请";

        layer.prompt({
            formType: 2,
            title: title,
            placeholder: placeholder,
            area: ['400px', '100px']
        }, function (value, index, elem) {
            submitHandle(id, status, value);
            layer.close(index);
        });
    }

    async function submitHandle(id, status, remark) {
        const formData = new FormData();
        formData.append('id', id);
        formData.append('status', status);
        formData.append('remark', remark);

        try {
            const response = await fetch(handleUrl, {
                method: 'POST',
                body: formData
            });
            if (response.ok) {
                layer.msg('操作成功', { icon: 1 });
                table.reload(tableId);
            } else {
                const text = await response.text();
                layer.alert(text || '操作失败', { icon: 2 });
            }
        } catch (error) {
            console.error(error);
            layer.alert('网络请求失败', { icon: 2 });
        }
    }
});

loading