424 lines
		
	
	
		
			16 KiB
		
	
	
	
		
			HTML
		
	
	
	
	
	
			
		
		
	
	
			424 lines
		
	
	
		
			16 KiB
		
	
	
	
		
			HTML
		
	
	
	
	
	
| <!DOCTYPE html>
 | |
| 
 | |
| <head>
 | |
|     <meta charset="utf-8">
 | |
|     <title></title>
 | |
|     <meta name="renderer" content="webkit">
 | |
|     <meta http-equiv="X-UA-Compatible" content="IE=edge,chrome=1">
 | |
|     <meta name="viewport" content="width=device-width, initial-scale=1, maximum-scale=1">
 | |
|     <meta name="apple-mobile-web-app-status-bar-style" content="black">
 | |
|     <meta name="apple-mobile-web-app-capable" content="yes">
 | |
|     <meta name="format-detection" content="telephone=no">
 | |
|     <link rel="stylesheet" href="/static/assets/gougu/css/gougu.css">
 | |
|     <style>
 | |
|         .close {
 | |
|             width: 100%;
 | |
|             height: 80px;
 | |
|             display: flex;
 | |
|             align-items: center;
 | |
|             justify-content: center;
 | |
|         }
 | |
| 
 | |
|         #statusSelect,
 | |
|         #lockSelect {
 | |
|             display: inline-block;
 | |
|             width: 150px;
 | |
|         }
 | |
| 
 | |
|         .status-button {
 | |
|             display: inline-block;
 | |
|             margin-left: 20px;
 | |
|         }
 | |
|     </style>
 | |
| </head>
 | |
| 
 | |
| <body>
 | |
|     <div class="page-content">
 | |
|         <div class="p-4 border-b">
 | |
|             <div style="display: flex;justify-content: space-between;align-items: center;">
 | |
|                 <div>
 | |
|                     <h3 class="h3-title hover">
 | |
|                         <span>基本信息</span>
 | |
|                     </h3>
 | |
|                 </div>
 | |
|                 <div style="color: #b3b3b3;">
 | |
|                     创建时间:{$detail.create_time}
 | |
|                 </div>
 | |
|             </div>
 | |
|         </div>
 | |
|         <input type="text" value="{$detail.id}" id="pid" style="display: none;">
 | |
|         <div class="layui-row border-b">
 | |
|             <table class="layui-table layui-table-form">
 | |
|                 <tr>
 | |
|                     <td class="layui-td-gray-2">账单号
 | |
|                     </td>
 | |
|                     <td>
 | |
|                         {$detail.order}
 | |
|                     </td>
 | |
|                     <td class="layui-td-gray-2">创建者
 | |
|                     </td>
 | |
|                     <td>
 | |
|                         {$detail.creater}
 | |
|                     </td>
 | |
|                 </tr>
 | |
|                 <tr>
 | |
|                     <td class="layui-td-gray-2">隶属部门
 | |
|                     </td>
 | |
|                     <td>
 | |
|                         {$detail.department}
 | |
|                     </td>
 | |
|                     <td class="layui-td-gray-2">报销状态
 | |
|                     </td>
 | |
|                     <td>
 | |
|                         {$detail.status}
 | |
|                         <a href="javascript:;" onclick="editstatus('{$detail.id}')" style="margin-left: 20px;">修改</a>
 | |
|                     </td>
 | |
|                 </tr>
 | |
|                 <tr>
 | |
|                     <td class="layui-td-gray-2">备注
 | |
|                     </td>
 | |
|                     <td colspan="4">
 | |
|                         {$detail.remark}
 | |
|                     </td>
 | |
|                 </tr>
 | |
|             </table>
 | |
|         </div>
 | |
|         <div class="p-4 border-b">
 | |
|             <h3 class="h3-title hover">
 | |
|                 <span>详细信息</span>
 | |
|                 <span>
 | |
|                     <a class="layui-btn layui-btn-xs layui-btn-normal" lay-event="additem" id="additem">增加报销</a>
 | |
|                     <a class="layui-btn layui-btn-xs" lay-event="edititem" id="edititem">编辑</a>
 | |
|                     <a class="layui-btn layui-btn-xs layui-btn-normal" lay-event="delete" id="delete">删除</a>
 | |
|                 </span>
 | |
|             </h3>
 | |
|         </div>
 | |
|         <div class="layui-row border-b">
 | |
|             <table class="layui-table layui-table-form" id="reimbursementdetail"></table>
 | |
|         </div>
 | |
|     </div>
 | |
|     <div class="close">
 | |
|         <button class="layui-btn" onclick="printPage()">打印本页</button>
 | |
|         <button class="layui-btn layui-bg-blue" id="refresh">刷新</button>
 | |
|     </div>
 | |
| </body>
 | |
| 
 | |
| <script>
 | |
|     const moduleInit = ["tool", "gouguEdit", "gouguComment"];
 | |
| 
 | |
|     function gouguInit() {
 | |
|         var table = layui.table;
 | |
|         var tool = layui.tool;
 | |
|         var dropdown = layui.dropdown;
 | |
|         var $ = layui.jquery;
 | |
|         var layer = layui.layer;
 | |
|         var pid = document.getElementById('pid').value;
 | |
|         var project = "{$detail.project}";
 | |
|         var department = "{$detail.department}";
 | |
|         var lock = "{$detail.lock}";
 | |
|         var dates = "{$detail.create_time}";
 | |
|         var currentStatus = "{$detail.status}";
 | |
|         // var id = pid;
 | |
| 
 | |
|         // 检查状态并设置按钮状态
 | |
|         if (currentStatus === "已报销") {
 | |
|             $("#additem").prop("disabled", true).addClass("layui-btn-disabled");
 | |
|             $("#edititem").prop("disabled", true).addClass("layui-btn-disabled");
 | |
|             $("#delete").prop("disabled", true).addClass("layui-btn-disabled");
 | |
|         }
 | |
| 
 | |
|         //增加报销
 | |
|         $("#additem").on("click", function () {
 | |
|             // 只有在未报销状态下才允许增加报销
 | |
|             if (currentStatus === "已报销") return;
 | |
|             var layerIndex = layui.layer.open({
 | |
|                 type: 2,
 | |
|                 title: '增加报销',
 | |
|                 shadeClose: true,
 | |
|                 shade: 0.8,
 | |
|                 area: ['70%', '90%'],
 | |
|                 content: '/reimbursement/index/additem?pid=' + pid + '&project=' + project + '&department=' + department + '&dates=' + dates,
 | |
|                 end: function () {
 | |
|                     // 弹出层关闭时刷新当前页面
 | |
|                     layui.table.reload('reimbursementdetail');
 | |
|                 }
 | |
|             });
 | |
|         });
 | |
| 
 | |
|         //修改报销
 | |
|         $("#edititem").on("click", function () {
 | |
|             // 只有在未报销状态下才允许编辑
 | |
|             if (currentStatus === "已报销") return;
 | |
|             var checkStatus = layui.table.checkStatus('reimbursementdetail'); // 获取选中行的状态
 | |
|             var data = checkStatus.data; // 获取选中的数据
 | |
|             if (data.length === 0) {
 | |
|                 layer.msg('请先选择要编辑的项'); // 如果没有选中项,提示用户
 | |
|                 return;
 | |
|             }
 | |
|             var id = data[0].id; // 获取第一个选中项的 ID
 | |
|             console.log(id);
 | |
|             var layerIndex = layui.layer.open({
 | |
|                 type: 2,
 | |
|                 title: '编辑报销',
 | |
|                 shadeClose: true,
 | |
|                 shade: 0.8,
 | |
|                 area: ['70%', '90%'],
 | |
|                 content: '/reimbursement/index/edititem?id=' + id,
 | |
|                 end: function () {
 | |
|                     // 弹出层关闭时刷新当前页面
 | |
|                     layui.table.reload('reimbursementdetail');
 | |
|                 }
 | |
|             });
 | |
|         });
 | |
| 
 | |
|         //删除报销
 | |
|         $("#delete").on("click", function () {
 | |
|             // 只有在未报销状态下才允许删除
 | |
|             if (currentStatus === "已报销") return;
 | |
|             layui.layer.confirm("确定删除该内容吗?", { icon: 3, title: "提示" }, function (index) {
 | |
|                 var checkStatus = layui.table.checkStatus('reimbursementdetail'); // 获取选中行的状态
 | |
|                 var data = checkStatus.data; // 获取选中的数据
 | |
|                 if (data.length === 0) {
 | |
|                     layer.msg('请先选择要删除的项'); // 如果没有选中项,提示用户
 | |
|                     return;
 | |
|                 }
 | |
|                 var id = data[0].id; // 获取第一个选中项的 ID
 | |
|                 $.post("/reimbursement/index/delete", { id: id }, function (res) {
 | |
|                     if (res.code === 0) {
 | |
|                         layui.layer.msg(res.msg);
 | |
|                         layui.table.reload('reimbursementdetail'); // 刷新表格
 | |
|                     } else {
 | |
|                         layui.layer.msg(res.msg);
 | |
|                     }
 | |
|                 });
 | |
|                 layui.layer.close(index);
 | |
|             });
 | |
|         });
 | |
| 
 | |
|         //刷新表格
 | |
|         $("#refresh").on("click", function () {
 | |
|             layui.table.reload('reimbursementdetail', {
 | |
|                 url: '/reimbursement/index/viewitem?id=' + pid, // 替换为你的数据接口URL
 | |
|                 page: {
 | |
|                     curr: 1 // 重新从第一页开始加载
 | |
|                 }
 | |
|             });
 | |
|         });
 | |
| 
 | |
|         //渲染表格
 | |
|         layui.pageTable = layui.table.render({
 | |
|             elem: "#reimbursementdetail",
 | |
|             // toolbar: '#toolbarDemo',
 | |
|             // cellMinWidth: 80,
 | |
|             url: "/reimbursement/index/viewitemlist?id=" + pid,// 数据接口
 | |
|             page: true,
 | |
|             limit: 50,
 | |
|             totalRow: true,
 | |
|             filter: "reimbursementdetail",
 | |
|             cols: [
 | |
|                 [
 | |
|                     { type: 'checkbox', },
 | |
|                     {
 | |
|                         field: 'id',
 | |
|                         width: 100,
 | |
|                         title: '编号',
 | |
|                         sort: true,
 | |
|                         align: "center",
 | |
|                         totalRowText: '合计:',
 | |
|                     },
 | |
|                     {
 | |
|                         field: "times",
 | |
|                         title: "发生日期",
 | |
|                         width: 120,
 | |
|                         align: "center",
 | |
|                         rowspan: 2,
 | |
|                         templet: function (d) {
 | |
|                             return '<span>' + d.times + "</span>";
 | |
|                         },
 | |
|                     },
 | |
|                     {
 | |
|                         field: "cate",
 | |
|                         title: "报销类别",
 | |
|                         width: 120,
 | |
|                         align: "center",
 | |
|                         rowspan: 2,
 | |
|                         templet: function (d) {
 | |
|                             return '<span>' + d.cate + "</span>";
 | |
|                         },
 | |
|                     },
 | |
|                     {
 | |
|                         field: "project",
 | |
|                         title: "隶属项目",
 | |
|                         width: 180,
 | |
|                         align: "center",
 | |
|                         rowspan: 2,
 | |
|                         sort: true,
 | |
|                         templet: function (d) {
 | |
|                             return '<span>' + (d.project !== null && d.project !== undefined ? d.project : '无') + "</span>";
 | |
|                         },
 | |
|                     },
 | |
|                     {
 | |
|                         field: "price",
 | |
|                         title: "报销金额",
 | |
|                         align: "center",
 | |
|                         width: 120,
 | |
|                         rowspan: 2,
 | |
|                         templet: function (d) {
 | |
|                             return '<span>' + d.price + "</span>";
 | |
|                         },
 | |
|                         totalRow: true, // 添加此行以计算总计
 | |
|                     },
 | |
|                     // {
 | |
|                     //     field: "haveticket",
 | |
|                     //     title: "是否有票",
 | |
|                     //     width: 120,
 | |
|                     //     align: "center",
 | |
|                     //     rowspan: 2,
 | |
|                     //     templet: function (d) {
 | |
|                     //         return '<span>' + d.haveticket + "</span>";
 | |
|                     //     },
 | |
|                     // },
 | |
|                     {
 | |
|                         field: "tickets",
 | |
|                         title: "发票查看",
 | |
|                         align: "center",
 | |
|                         width: 120,
 | |
|                         rowspan: 2,
 | |
|                         templet: function (d) {
 | |
|                             if (d.tickets) {
 | |
|                                 return `<span><img src="${d.tickets}" alt="" style="cursor: pointer;" onclick="viewImage('${d.tickets}')"></span>`;
 | |
|                             } else {
 | |
|                                 return "<span>无</span>";
 | |
|                             }
 | |
|                         },
 | |
|                     },
 | |
|                     {
 | |
|                         field: "remark",
 | |
|                         title: "备注",
 | |
|                         align: "center",
 | |
|                         rowspan: 2,
 | |
|                         templet: function (d) {
 | |
|                             if (d.remark) {
 | |
|                                 return '<span>' + d.remark + "</span>";
 | |
|                             } else {
 | |
|                                 return "";
 | |
|                             }
 | |
|                         },
 | |
|                     },
 | |
|                 ],
 | |
|             ],
 | |
|         });
 | |
|     }
 | |
| 
 | |
| </script>
 | |
| <script src="/static/assets/layui/layui.js"></script>
 | |
| <script src="/static/assets/gougu/gouguInit.js"></script>
 | |
| 
 | |
| <script>
 | |
|     //打印数据
 | |
|     function printPage() {
 | |
|         var content = document.querySelector('.page-content').innerHTML;
 | |
|         var originalContent = document.body.innerHTML;
 | |
|         document.body.innerHTML = content;
 | |
|         window.print();
 | |
|         document.body.innerHTML = originalContent;
 | |
|     }
 | |
| 
 | |
|     //发票查看大图
 | |
|     function viewImage(src) {
 | |
|         var img = new Image();
 | |
|         img.src = src;
 | |
|         var imgHtml = "<img src='" + src + "' style='width:100%;'/>";
 | |
|         layer.open({
 | |
|             type: 1,
 | |
|             shade: 0.8,
 | |
|             title: false,
 | |
|             area: ['80%', '80%'],
 | |
|             content: imgHtml,
 | |
|         });
 | |
|     }
 | |
| 
 | |
|     //修改报销状态
 | |
|     function editstatus(id) {
 | |
|         layui.use('layer', function () {
 | |
|             var layer = layui.layer;
 | |
|             var id = document.getElementById('pid').value;
 | |
|             var currentStatus = "{$detail.status}";
 | |
|             layer.open({
 | |
|                 type: 1,
 | |
|                 title: '修改报销状态',
 | |
|                 content: '<div style="padding: 20px;">' +
 | |
|                     '<select id="statusSelect" lay-filter="statusSelect" class="layui-input">' +
 | |
|                     '<option value="未报销" ' + (currentStatus === '未报销' ? 'selected' : '') + '>未报销</option>' +
 | |
|                     '<option value="已报销" ' + (currentStatus === '已报销' ? 'selected' : '') + '>已报销</option>' +
 | |
|                     '</select>' +
 | |
|                     '<button class="layui-btn layui-btn-sm" onclick="updateStatus(' + id + ')" style="margin-left: 20px;">确定</button>' +
 | |
|                     '</div>'
 | |
|             });
 | |
|         });
 | |
|     }
 | |
| 
 | |
|     //修改账单状态
 | |
|     function editlock(id) {
 | |
|         var id = document.getElementById('pid').value;
 | |
|         // console.log(id);
 | |
|         var currentlock = "{$detail.lock}";
 | |
|         layui.use('layer', function () {
 | |
|             var layer = layui.layer;
 | |
|             layer.open({
 | |
|                 type: 1,
 | |
|                 title: '修改账单状态',
 | |
|                 content: '<div style="padding: 20px; display: flex; align-items: center;">' +
 | |
|                     '<select id="lockSelect" class="layui-input">' +
 | |
|                     '<option value="未锁定" ' + (currentlock === '未锁定' ? 'selected' : '') + '>未锁定</option>' +
 | |
|                     '<option value="锁定" ' + (currentlock === '锁定' ? 'selected' : '') + '>锁定</option>' +
 | |
|                     '</select>' +
 | |
|                     '<button class="layui-btn layui-btn-sm" onclick="updatelocks(' + id + ')" style="margin-left: 20px;">确定</button>' +
 | |
|                     '</div>'
 | |
|             });
 | |
|         });
 | |
|     }
 | |
| 
 | |
|     //更新报销状态接口
 | |
|     function updateStatus(id) {
 | |
|         var status = $('#statusSelect').val();
 | |
|         $.ajax({
 | |
|             url: '/reimbursement/index/editstatus',
 | |
|             type: 'POST',
 | |
|             data: { id: id, status: status },
 | |
|             success: function (response) {
 | |
|                 if (response.code === 0) {
 | |
|                     layer.closeAll();
 | |
|                     layer.msg(response.msg, { icon: 1 });
 | |
|                 } else {
 | |
|                     layer.msg(response.msg, { icon: 2 });
 | |
|                 }
 | |
|             },
 | |
|             error: function () {
 | |
|                 layer.msg('请求失败', { icon: 2 });
 | |
|             }
 | |
|         });
 | |
|     }
 | |
| 
 | |
|     //更新账单状态接口
 | |
|     function updatelocks(id) {
 | |
|         var lock = $('#lockSelect').val();
 | |
|         $.ajax({
 | |
|             url: '/reimbursement/index/editlock',
 | |
|             type: 'POST',
 | |
|             data: { id: id, lock: lock },
 | |
|             success: function (response) {
 | |
|                 if (response.code === 0) {
 | |
|                     layer.closeAll();
 | |
|                     layer.msg(response.msg, { icon: 1 });
 | |
|                 } else {
 | |
|                     layer.msg(response.msg, { icon: 2 });
 | |
|                 }
 | |
|             },
 | |
|             error: function () {
 | |
|                 layer.msg('请求失败', { icon: 2 });
 | |
|             }
 | |
|         });
 | |
|     }
 | |
| 
 | |
| </script> |