更新命名问题

This commit is contained in:
2025-06-25 11:52:01 +08:00
parent 9f374011ae
commit 6b78ee29cf
57 changed files with 3295 additions and 1288 deletions
+48 -59
View File
@@ -168,26 +168,28 @@ class Index extends BaseController
}
}
//编辑条目
//编辑条目(查看)
public function edititem($id)
{
$param = get_params();
// 编辑逻辑
$reimbursementLists = ReimbursementList::where('id', $param['id'])
$reimbursementLists = ReimbursementList::where('id', $id)
->field('id, pid, times, department, project, cate, price, creater, haveticket, tickets, remark, create_time')
->find();
// print_r($reimbursementLists);
if ($reimbursementLists) {
// 获取项目名称
$project = ProjectList::where('id', $reimbursementLists['project'])->value('name_short');
// 获取发生时间
$times = $reimbursementLists['times'];
// 获取部门名称
$department = DepartmentList::where('id', $reimbursementLists['department'])->value('title');
// 获取创建者名称
$creater = Admin::where('id', $reimbursementLists['creater'])->value('name');
// print_r($creater);
if ($project) {
$reimbursementLists['project'] = $project;
if ($times) {
$timesDate = date('Y年m月d日', strtotime($times));
$reimbursementLists['times'] = $timesDate;
}
if ($department) {
$reimbursementLists['department'] = $department;
}
@@ -195,23 +197,49 @@ class Index extends BaseController
$reimbursementLists['creater'] = $creater;
}
View::assign('detail', $reimbursementLists);
} else {
return json(["code" => 1, "msg" => "信息不存在"]); // 返回JSON格式数据
if ($reimbursementLists) {
View::assign('detail', $reimbursementLists);
} else {
View::assign('message', '没有详细数据');
}
}
$param['update_time'] = date('Y-m-d H:i:s', time());
$param['update_time'] = date('Y-m-d', time());
$res = ReimbursementList::where('id', $param['id'])->strict(false)->field(true)->update($param);
if ($res) {
add_log('edit', $param['id'], $param, $reimbursementLists);
return json(["code" => 0, "msg" => "编辑成功"]); // 返回JSON格式数据
} else {
return json(["code" => -1, "msg" => "编辑失败"]); // 返回JSON格式数据
return view();
// return $reimbursementLists;
}
// 编辑条目详情
public function editdetailitem()
{
$param = get_params();
if (request()->isPost()) {
$id = $param['id'];
$reimbursementLists = ReimbursementList::where('id', $id)
->field('id, pid, times, department, project, cate, price, creater, haveticket, tickets, remark, create_time')
->find();
if ($reimbursementLists) {
$dateString = $param['times'];
$dateString = str_replace(['年', '月', '日'], '-', $dateString);
$dateString = rtrim($dateString, '-');
$reimbursementLists->department = $param['department'];
$reimbursementLists->project = $param['project'];
$reimbursementLists->cate = $param['cate'];
$reimbursementLists->price = $param['price'];
$reimbursementLists->haveticket = $param['haveticket'];
$reimbursementLists->tickets = $param['tickets'];
$reimbursementLists->remark = $param['remark'];
$reimbursementLists->save();
return json(["code" => 0, "msg" => "编辑成功"]);
} else {
return json(["code" => 1, "msg" => "信息不存在"]);
}
}
}
//添加
public function add()
{
@@ -298,7 +326,7 @@ class Index extends BaseController
}
// 查看报销详情
public function viewitem($id)
public function viewitemlist($id)
{
$reimbursementLists = ReimbursementList::where('pid', $id)
->whereNull('delete_time')
@@ -457,45 +485,6 @@ class Index extends BaseController
}
}
public function editdetailitem($id)
{
$reimbursementLists = ReimbursementList::where('id', $id)
->field('id, pid, times, department, project, cate, price, creater, haveticket, tickets, remark, create_time')
->find();
// print_r($reimbursementLists);
if ($reimbursementLists) {
// 获取发生时间
$times = $reimbursementLists['times'];
// 获取部门名称
$department = DepartmentList::where('id', $reimbursementLists['department'])->value('title');
// 获取创建者名称
$creater = Admin::where('id', $reimbursementLists['creater'])->value('name');
// print_r($creater);
if ($times) {
$timesDate = date('Y年m月d日', strtotime($times));
$reimbursementLists['times'] = $timesDate;
}
if ($department) {
$reimbursementLists['department'] = $department;
}
if ($creater) {
$reimbursementLists['creater'] = $creater;
}
if ($reimbursementLists) {
View::assign('detail', $reimbursementLists);
} else {
View::assign('message', '没有详细数据');
}
}
return view();
// return $reimbursementLists;
}
//编辑锁定状态
public function editlock($id, $lock)
{
+349
View File
@@ -0,0 +1,349 @@
<!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;
}
</style>
</head>
<body>
<form action="">
<div class="page-content">
<div class="p-4 border-b">
<h3 class="h3-title hover">
<span>报销编号 - </span><span>{$detail.id}</span>
</h3>
<input type="text" name="pid" lay-verify="" class="layui-input" value="{$detail.pid}" id="pid"
style="display: none;"/>
<input type="text" name="department" lay-verify="" class="layui-input" value="{$detail.department}"
id="department" style="display: none;"/>
<input type="text" name="project" lay-verify="" class="layui-input" value="{$detail.project}"
id="project" style="display: none;"/>
<input type="text" name="dates" lay-verify="" class="layui-input" value="" id="dates"
style="display: none;"/>
<input type="text" name="id" lay-verify="" class="layui-input" value="{$detail.id}" id="id"
style="display: none;"/>
</div>
<div class="layui-row border-b">
<table class="layui-table layui-table-form">
<tr>
<td class="layui-td-gray-2">费用类型</td>
<td>
<select name="cate" lay-verify="required" lay-reqText="请选择费用类型" class="layui-select"
lay-search lay-filter="cate" style="width: 100%;" id="cate">
<option value="">请选择费用类型</option>
</select>
</td>
<td class="layui-td-gray-2">隶属项目</td>
<td>
<select name="project" lay-verify="required" lay-reqText="请选择隶属项目" class="layui-select"
lay-search lay-filter="cate" style="width: 100%;" id="project">
<option value="">请选择隶属项目</option>
</select>
</td>
</tr>
<tr>
<td class="layui-td-gray-2">报销金额</td>
<td>
<input type="text" name="price" lay-verify="" lay-reqText="请填入报销金额,例如:52.00"
placeholder="请填入报销金额,例如:52.00" class="layui-input" value="{$detail.price}"
id="price"/>
</td>
<td class="layui-td-gray-2">是否有票</td>
<td>
<select name="haveticket" lay-verify="required" lay-reqText="请选择" class="layui-select"
lay-search lay-filter="haveticket" style="width: 100%;">
<option value="无"></option>
<option value="有"></option>
</select>
</td>
</tr>
<tr>
<td class="layui-td-gray-2">发生时间</td>
<td>
<div class="layui-input-inline">
<input type="text" name="times" class="layui-input" id="times" placeholder="yyyy年MM月dd日"
value="{$detail.times}">
</div>
</td>
</tr>
<tr>
<td class="layui-td-gray-2">上传票据</td>
<td colspan="4">
<input type="hidden" name="tickets" id="ticketsInput" value="{$detail.tickets}">
<div id="no-ticket-msg" style="color: red;">当前无票,不可上传</div>
<div class="layui-upload-drag" style="display: block;" id="ID-upload-demo-drag">
<i class="layui-icon layui-icon-upload"></i>
<div>点击上传,或将文件拖拽到此处</div>
<div class="layui-hide" id="tickets">
<hr>
<img src="{#tickets}" alt="上传成功后渲染" style="max-width: 100%">
</div>
</div>
</td>
</tr>
<tr>
<td class="layui-td-gray-2">上传附件</td>
<td colspan="4">
<div class="layui-upload">
<button type="button" class="layui-btn layui-btn-normal" id="uploadfile">选择多文件</button>
<div class="layui-upload-list">
<table class="layui-table">
<colgroup>
<col style="min-width: 100px;">
<col width="150">
<col width="260">
<col width="150">
</colgroup>
<thead>
<th>文件名</th>
<th>大小</th>
<th>上传进度</th>
<th>操作</th>
</thead>
<tbody id="update"></tbody>
</table>
</div>
<button type="button" class="layui-btn" id="uploadfileaction">开始上传</button>
</div>
</td>
</tr>
<tr>
<td class="layui-td-gray-2">备注</td>
<td colspan="4">
<input type="text" name="remark" lay-verify="" lay-reqText="" placeholder=""
class="layui-input" value="{$detail.remark}" id="remark"/>
</td>
</tr>
</table>
</div>
</div>
<div class="close">
<button class="layui-btn layui-btn-normal" lay-filter="webform" lay-submit="">
立即提交
</button>
</div>
</form>
</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 form = layui.form;
var layer = layui.layer;
var upload = layui.upload;
var element = layui.element;
var laydate = layui.laydate;
upload.render({
elem: '#ID-upload-demo-drag',
url: '/api/index/upload',
done: function (res) {
layer.msg('上传成功');
// 将图片路径赋值给隐藏的 input 元素
document.getElementById('ticketsInput').value = res.data.filepath;
console.log(res);
}
});
// 获取项目类别
fetch("/reimbursement/index/getproject")
.then((response) => response.json())
.then((data) => {
var select = document.querySelector('select[name="project"]');
select.innerHTML = '<option value="">请选择项目类型</option>';
data.data.forEach((project) => {
var option = document.createElement("option");
option.value = project.id;
option.innerText = project.project;
select.appendChild(option);
});
select.value = '{$detail.project}';
form.render("select");
})
.catch((error) => {
console.error("Error:", error);
});
//渲染日期选择
// laydate.render({
// elem: '#times',
// format: 'yyyy年MM月dd日',
// done: function (value) {
// console.log('您选择的日期是:' + value);
// times = value.replace(/年|月/g, '-').replace('日', '');
// }
// });
// 上传附件渲染
// 制作多文件上传表格
var uploadListIns = upload.render({
elem: '#uploadfile',
elemList: $('#update'),
url: '/api/index/upload',
accept: 'file',
multiple: true,
number: 3,
auto: false,
bindAction: '#uploadfileaction',
choose: function (obj) {
var that = this;
var files = this.files = obj.pushFile();
// 读取本地文件
obj.preview(function (index, file, result) {
var tr = $('<tr id="upload-' + index + '">' +
'<td>' + file.name + '</td>' +
'<td>' + (file.size / 1024).toFixed(1) + 'kb</td>' +
'<td><div class="layui-progress" lay-filter="progress-demo-' + index + '"><div class="layui-progress-bar" lay-percent=""></div></div></td>' +
'<td>' +
'<button class="layui-btn layui-btn-xs demo-reload layui-hide">重传</button>' +
'<button class="layui-btn layui-btn-xs layui-btn-danger demo-delete">删除</button>' +
'</td>' +
'</tr>');
// 单个重传
tr.find('.demo-reload').on('click', function () {
obj.upload(index, file);
});
// 删除
tr.find('.demo-delete').on('click', function () {
delete files[index];
tr.remove();
// 清空 input file 值,以免删除后出现同名文件不可选
uploadListIns.config.elem.next()[0].value = '';
});
$('#update').append(tr);
element.render('progress');
});
},
done: function (res, index, upload) {
var that = this;
var tr = $('#update').find('tr#upload-' + index);
var tds = tr.children();
tds.eq(3).html('');
delete this.files[index];
return;
//}
this.error(index, upload);
},
allDone: function (obj) {
console.log(obj);
},
error: function (index, upload) {
var that = this;
var tr = $('#update').find('tr#upload-' + index);
var tds = tr.children();
// 显示重传
tds.eq(3).find('.demo-reload').removeClass('layui-hide');
},
progress: function (n, elem, e, index) {
element.progress('progress-demo-' + index, n + '%');
}
});
// 获取费用类型
fetch("/reimbursement/index/reimcate")
.then((response) => response.json())
.then((data) => {
var select = document.querySelector('select[name="cate"]');
// select.innerHTML = '<option value="">请选择费用类型</option>';
data.data.forEach((cate) => {
var option = document.createElement("option");
option.value = cate.id;
option.innerText = cate.cate;
select.appendChild(option);
});
select.value = '{$detail.cate}';
form.render("select");
})
.catch((error) => {
console.error("Error:", error);
});
//监听提交结果
form.on("submit(webform)", function (data) {
fetch("/reimbursement/index/editdetailitem", {
method: "POST",
body: JSON.stringify({
id: document.getElementById('id').value,
pid: document.getElementById('pid').value,
project: document.querySelector('select[name="project"]').value,
department: document.getElementById('department').value,
cate: document.querySelector('select[name="cate"]').value,
haveticket: document.querySelector('select[name="haveticket"]').value,
price: document.getElementById('price').value,
remark: document.getElementById('remark').value,
times: document.getElementById('times').value,
tickets: document.getElementById('ticketsInput').value,
}),
headers: {
"Content-Type": "application/json",
},
})
.then((response) => response.json())
.then((result) => {
layer.msg(result.msg, {
time: 1000,
end: function () {
if (result.code === 0) {
var index = window.parent.layer.getFrameIndex(window.name);
window.parent.layer.close(index);
window.parent.layui.table.reload('reimbursementdetail'); // 刷新表格
}
}
});
});
return false;
});
}
</script>
<script>
// 获取是否有票选择框元素
const haveticketSelect = document.querySelector('select[name="haveticket"]');
// 获取上传票据区域元素
const uploadSection = document.querySelector('#ID-upload-demo-drag');
// 获取无票提示信息元素
const noTicketMsg = document.getElementById('no-ticket-msg');
// 初始隐藏上传票据区域
uploadSection.style.display = 'none';
// 监听是否有票选择框的change事件
haveticketSelect.addEventListener('change', function () {
// 如果选择了有票
if (haveticketSelect.value === '有') {
// 显示上传票据区域
uploadSection.style.display = 'block';
// 隐藏无票提示信息
noTicketMsg.style.display = 'none';
} else {
// 否则隐藏上传票据区域
uploadSection.style.display = 'none';
// 显示无票提示信息
noTicketMsg.style.display = 'block';
}
});
</script>
<script src="/static/assets/layui/layui.js"></script>
<script src="/static/assets/gougu/gouguInit.js"></script>
+11 -13
View File
@@ -59,19 +59,17 @@
// console.log(data);
if (obj.event === 'view') {
var id = data.id; // 获取当前行数据的id
var id = data.id;
// console.log(id);
// 使用layer弹出层来显示详情页面
layui.layer.open({
type: 2, // iframe层
type: 2,
title: '报销详情',
shadeClose: true,
shade: 0.8,
area: ['70%', '90%'], // 宽高
area: ['70%', '90%'],
content: '/reimbursement/index/view?id=' + id,
end: function () {
// 弹出层关闭时刷新当前页面
layui.table.reload('reimbursement');
}
});
@@ -168,7 +166,7 @@
cols: [
[
{ type: 'checkbox' },
{ field: 'id', width: 80, title: '编号', sort: true, align: "center", totalRowText: '合计:' },
{ field: 'id', width: 100, title: '编号', sort: true, align: "center"},
{
field: "order",
title: "账单编号",
@@ -195,13 +193,13 @@
width: 120,
rowspan: 2,
},
{
field: "lock",
title: "账单状态",
align: "center",
width: 120,
rowspan: 2,
},
// {
// field: "lock",
// title: "账单状态",
// align: "center",
// width: 120,
// rowspan: 2,
// },
{
field: "department",
title: "隶属部门",
+91 -95
View File
@@ -33,80 +33,74 @@
</head>
<body>
<div class="page-content">
<div class="p-4 border-b">
<h3 class="h3-title hover">
<span>基本信息</span>
</h3>
<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>
<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.create_time}
</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>
{$detail.creater}
</td>
<td class="layui-td-gray-2">账单状态
</td>
<td>
{$detail.lock}
<a href="javascript:;" onclick="editlock('{$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 class="close">
<button class="layui-btn" onclick="printPage()">打印本页</button>
<button class="layui-btn layui-bg-blue" id="refresh">刷新</button>
</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>
@@ -181,7 +175,7 @@
$("#delete").on("click", function () {
// 只有在未报销状态下才允许删除
if (currentStatus === "已报销") return;
layui.layer.confirm("确定删除该内容吗?", {icon: 3, title: "提示"}, function (index) {
layui.layer.confirm("确定删除该内容吗?", { icon: 3, title: "提示" }, function (index) {
var checkStatus = layui.table.checkStatus('reimbursementdetail'); // 获取选中行的状态
var data = checkStatus.data; // 获取选中的数据
if (data.length === 0) {
@@ -189,7 +183,7 @@
return;
}
var id = data[0].id; // 获取第一个选中项的 ID
$.post("/reimbursement/index/delete", {id: id}, function (res) {
$.post("/reimbursement/index/delete", { id: id }, function (res) {
if (res.code === 0) {
layui.layer.msg(res.msg);
layui.table.reload('reimbursementdetail'); // 刷新表格
@@ -215,15 +209,15 @@
layui.pageTable = layui.table.render({
elem: "#reimbursementdetail",
// toolbar: '#toolbarDemo',
cellMinWidth: 80,
url: "/reimbursement/index/viewitem?id=" + pid,// 数据接口
// cellMinWidth: 80,
url: "/reimbursement/index/viewitemlist?id=" + pid,// 数据接口
page: true,
limit: 50,
totalRow: true,
filter: "reimbursementdetail",
cols: [
[
{type: 'checkbox',},
{ type: 'checkbox', },
{
field: 'id',
width: 100,
@@ -267,26 +261,28 @@
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: "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) {
@@ -389,17 +385,17 @@
$.ajax({
url: '/reimbursement/index/editstatus',
type: 'POST',
data: {id: id, status: status},
data: { id: id, status: status },
success: function (response) {
if (response.code === 0) {
layer.closeAll();
layer.msg(response.msg, {icon: 1});
layer.msg(response.msg, { icon: 1 });
} else {
layer.msg(response.msg, {icon: 2});
layer.msg(response.msg, { icon: 2 });
}
},
error: function () {
layer.msg('请求失败', {icon: 2});
layer.msg('请求失败', { icon: 2 });
}
});
}
@@ -410,17 +406,17 @@
$.ajax({
url: '/reimbursement/index/editlock',
type: 'POST',
data: {id: id, lock: lock},
data: { id: id, lock: lock },
success: function (response) {
if (response.code === 0) {
layer.closeAll();
layer.msg(response.msg, {icon: 1});
layer.msg(response.msg, { icon: 1 });
} else {
layer.msg(response.msg, {icon: 2});
layer.msg(response.msg, { icon: 2 });
}
},
error: function () {
layer.msg('请求失败', {icon: 2});
layer.msg('请求失败', { icon: 2 });
}
});
}