Index.cshtml 7.93 KB
@using HHECS.WorkHourStatistics.Dtos
@using System.Text.Json
@using System.Text.Encodings.Web
@model TreeDto
@{
    ViewData["Title"] = "长沙华恒-工时统计工具";
}

<div class="layui-row">
    <div class="layui-col-md2">
        <div id="ID-tree-demo-showLine"></div>
    </div>
    <div class="layui-col-md10">
        <form class="layui-form layui-row layui-col-space16">
            <div class="layui-col-md3">
                <div class="layui-input-group">
                    <div class="layui-input-split layui-input-prefix">
                        工号,姓名
                    </div>
                    <input type="text" id="user" placeholder="请输入工号或姓名" class="layui-input">
                </div>
            </div>
            <div class="layui-col-md6">
                <div class="layui-form-item">
                    <div class="layui-input-group">
                        <label class="layui-form-label">日期范围</label>
                        <div class="layui-inline" id="ID-laydate-range">
                            <div class="layui-input-inline">
                                <input type="text" autocomplete="off" id="startDate" value="@DateTime.Now.AddMonths(-1).ToString("yyyy-MM-dd")" class="layui-input" placeholder="开始日期">
                            </div>
                            <div class="layui-form-mid">-</div>
                            <div class="layui-input-inline">
                                <input type="text" autocomplete="off" id="endDate" class="layui-input" value="@DateTime.Now.ToString("yyyy-MM-dd")" placeholder="结束日期">
                            </div>
                        </div>
                    </div>
                </div>
            </div>
            <div class="layui-col-md1">
                <button class="layui-btn layui-btn-normal" lay-submit lay-filter="table-search"><i class="layui-icon layui-icon-search"></i>搜索</button>
            </div>
        </form>
        <table class="layui-hide" id="test" lay-filter="test"></table>
    </div>
</div>

<script type="text/html" id="toolbarDemo">
    <p><b>部门:</b><span id="deptName">长沙华恒机器人系统有限公司</span></p>
</script>

@section Scripts
{
    <script>
        layui.use(['table', 'laydate'], function () {
            var $ = layui.$;
            var table = layui.table;
            var tree = layui.tree;
            var form = layui.form;
            var laydate = layui.laydate;

            let treeSelectdId = '@Model.Id';
            // 渲染
            tree.render({
                elem: '#ID-tree-demo-showLine',
                id: 'treeDom',
                data: [@Html.Raw(JsonSerializer.Serialize(Model, new JsonSerializerOptions { Encoder = JavaScriptEncoder.UnsafeRelaxedJsonEscaping, WriteIndented = true, PropertyNamingPolicy = JsonNamingPolicy.CamelCase }))],
                showLine: true,// 是否开启连接线
                accordion: true,
                click: function (obj) {
                    treeSelectdId = obj.data.id;
                    // $('#deptName').text(obj.data.title);
                    // 执行搜索重载
                    table.reload('test', {
                        page: {
                            curr: 1 // 重新从第 1 页开始
                        },
                        // 搜索的字段
                        where: {
                            person: $('#user').val(),
                            deptId: obj.data.id,
                            startTime: $('#startDate').val(),
                            endTime: $('#endDate').val(),
                        }
                    });
                    $('#deptName').text(obj.data.title);
                }
            });

            laydate.render({
                elem: '#ID-laydate-range',
                range: ['#startDate', '#endDate'],
                rangeLinked: true
            });

            // 创建渲染实例
            table.render({
                elem: '#test',
                url: '/', // 此处为静态模拟数据,实际使用时需换成真实接口
                method: 'post',
                toolbar: '#toolbarDemo',
                defaultToolbar: ['filter', { // 右上角工具图标
                    title: '导出',
                    layEvent: 'LAYTABLE_TIPS',
                    icon: 'layui-icon-export',
                    onClick: function (obj) { // 2.9.12+
                        let person = $('#user').val();
                        let deptId = treeSelectdId;
                        let startTime = $('#startDate').val();
                        let endTime = $('#endDate').val();
                        let url = `/Home/Export?person=${person}&deptId=${deptId}&startTime=${startTime}&endTime=${endTime}`; //可以在路径中传递参数
                        window.location.href = url;
                    }
                }, 'print'],
                height: 'full-120', // 最大高度减去其他容器已占有的高度差
                cellMinWidth: 80,
                where: {
                    person: $('#user').val(),
                    deptId: treeSelectdId,
                    startTime: $('#startDate').val(),
                    endTime: $('#endDate').val(),
                },
                page: true,
                limit: 20,
                cols: [[
                    { field: 'id', title: 'ID', hide: true },
                    { field: 'number', title: '工号', width: 110, fixed: 'left' },
                    { field: 'personName', title: '姓名', width: 110, fixed: 'left' },
                    { field: 'deptName', title: '部门', minWidth: 200 },
                    { field: 'baseWorkCard', title: '上班时间', width: 160, templet: '{{= new Date(d.baseWorkCard).toLocaleString() }}' },
                    {
                        field: 'workCard', title: '上班打卡时间', width: 160, templet: function (d) {
                            if (d.workCard == null) {
                                return '';
                            } else {
                                return new Date(d.workCard).toLocaleString();
                            }
                        }
                    },
                    { field: 'workCardLocationAddress', title: '上班打卡地址', minWidth: 200 },
                    { field: 'baseOffDutyCard', title: '下班时间', width: 160, templet: '{{= new Date(d.baseOffDutyCard).toLocaleString() }}' },
                    {
                        field: 'offDutyCard', title: '下班打卡时间', width: 160, templet: function (d) {
                            if (d.offDutyCard == null) {
                                return '';
                            } else {
                                return new Date(d.offDutyCard).toLocaleString();
                            }
                        }
                    },
                    { field: 'offDutyCardLocationAddress', title: '下班打卡地址', minWidth: 200 },
                    { field: 'createTime', title: '数据同步时间', width: 160, templet: '{{= new Date(d.createTime).toLocaleString() }}' },
                ]],
                error: function (res, msg) {
                    console.log(res, msg)
                }
            });

            // 搜索提交
            form.on('submit(table-search)', function (data) {
                var field = data.field; // 获得表单字段
                // 执行搜索重载
                table.reload('test', {
                    page: {
                        curr: 1 // 重新从第 1 页开始
                    },
                    // 搜索的字段
                    where: {
                        person: $('#user').val(),
                        startTime: $('#startDate').val(),
                        endTime: $('#endDate').val(),
                        deptId: treeSelectdId,
                    }
                });
                return false; // 阻止默认 form 跳转
            });
        });
    </script>
}