ui
This commit is contained in:
@@ -3,8 +3,50 @@
|
||||
<script src="/statics/component/layui/layui.js"></script>
|
||||
<script src="/statics/component/pear/pear.js"></script>
|
||||
<script src="/statics/component/pear/help.js"></script>
|
||||
<script src="/statics/js/Function/public.js"></script>
|
||||
<script src="/statics/js/function/public.js"></script>
|
||||
<script src="/statics/js/upload.js"></script>
|
||||
<script>
|
||||
layui.use(['admin', 'jquery', 'popup', 'drawer'], function () {
|
||||
var $ = layui.jquery;
|
||||
var admin = layui.admin;
|
||||
var popup = layui.popup;
|
||||
|
||||
// 读取 localStorage 主题颜色值,初始化 iframe 主题
|
||||
darkTheme();
|
||||
themeColor();
|
||||
|
||||
// iframe 页监听 localStorage [pear 框架主题颜色] 变化。发生变化,同步更新 iframe 显示效果
|
||||
window.addEventListener('storage', function (event) {
|
||||
if (event.key === 'dark') {
|
||||
darkTheme();
|
||||
}
|
||||
if (event.key === 'theme-color') {
|
||||
themeColor();
|
||||
}
|
||||
});
|
||||
|
||||
// 夜间模式切换
|
||||
function darkTheme() {
|
||||
var $pearAdmin = $(".pear-admin"); // 主体
|
||||
var $layuiCard = $('.layui-card'); // 编辑页
|
||||
|
||||
if (localStorage.getItem('dark') === 'true') {
|
||||
$pearAdmin.addClass("pear-admin-dark");
|
||||
$layuiCard.addClass('layui-card-dark');
|
||||
} else {
|
||||
$pearAdmin.removeClass("pear-admin-dark");
|
||||
$layuiCard.removeClass('layui-card-dark');
|
||||
}
|
||||
}
|
||||
|
||||
// 主题颜色切换
|
||||
function themeColor() {
|
||||
const variableKey = "--global-primary-color";
|
||||
const variableVal = localStorage.getItem("theme-color-color");
|
||||
document.documentElement.style.setProperty(variableKey, variableVal);
|
||||
}
|
||||
})
|
||||
</script>
|
||||
{{block "js" .}}{{end}}
|
||||
</body>
|
||||
|
||||
|
||||
@@ -8,8 +8,10 @@
|
||||
<title>component</title>
|
||||
<link rel="icon" type="image/x-icon" href="/statics/favicon.ico">
|
||||
<link rel="stylesheet" href="/statics/component/pear/css/pear.css" />
|
||||
<link rel="stylesheet" href="/statics/admin/css/loader.css" />
|
||||
<link rel="stylesheet" href="/statics/admin/css/admin.css" />
|
||||
<link rel="stylesheet" href="/statics/admin/css/admin.dark.css" />
|
||||
<link rel="stylesheet" href="/statics/admin/css/variables.css" />
|
||||
<link rel="stylesheet" href="/statics/admin/css/reset.css" />
|
||||
<link rel="stylesheet" href="/statics/admin/css/style.css" />
|
||||
{{block "css" .}}{{end}}
|
||||
</head>
|
||||
|
||||
@@ -1,112 +1,29 @@
|
||||
{{template "header"}}
|
||||
|
||||
<div class="layui-row layui-col-space15">
|
||||
<div class="layui-collapse">
|
||||
<div class="layui-colla-item">
|
||||
<div class="layui-colla-title">查询</div>
|
||||
<div class="layui-colla-content layui-show">
|
||||
<div class="layui-card">
|
||||
<div class="layui-card-body">
|
||||
<form class="layui-form layui-form-pane" action="">
|
||||
{{.CsrfTokenField}}
|
||||
<div class="layui-form-item">
|
||||
<div class="layui-form-item layui-inline">
|
||||
<label class="layui-form-label" style="overflow:visible;padding:0;width:110px;">
|
||||
<select id="SearchTimeType">
|
||||
<option value="CreateTime">创建时间</option>
|
||||
</select>
|
||||
</label>
|
||||
<div class="layui-input-inline" style="width:150px;">
|
||||
<input type="text" class="layui-input" id="timeBegin" placeholder="yyyy-MM-dd"
|
||||
readonly value="{{ yearBegin }}" />
|
||||
</div>
|
||||
<div class="layui-input-inline"
|
||||
style="width:10px;line-height:30px;margin-right:5px">
|
||||
-
|
||||
</div>
|
||||
<div class="layui-input-inline" style="width:150px;">
|
||||
<input type="text" class="layui-input " id="timeEnd" placeholder="yyyy-MM-dd"
|
||||
readonly value="{{ monthEnd }}" />
|
||||
</div>
|
||||
</div>
|
||||
<div class="layui-form-item layui-inline">
|
||||
<label class="layui-form-label">预算类型</label>
|
||||
<div class="layui-input-inline">
|
||||
<select id="budgetType">
|
||||
<option value="0">请选择</option>
|
||||
<option value="1">支出</option>
|
||||
<option value="2">收入</option>
|
||||
</select>
|
||||
</div>
|
||||
</div>
|
||||
<div class="layui-form-item layui-inline">
|
||||
<label class="layui-form-label">项目</label>
|
||||
<div class="layui-input-inline">
|
||||
<select id="project">
|
||||
{{range.Projects}}
|
||||
<option value="{{.Value}}">{{.Name}}</option>
|
||||
{{end}}
|
||||
</select>
|
||||
</div>
|
||||
</div>
|
||||
<div class="layui-form-item layui-inline">
|
||||
<label class="layui-form-label">类别</label>
|
||||
<div class="layui-input-inline">
|
||||
<select id="category">
|
||||
{{range.Categories}}
|
||||
<option value="{{.Value}}">{{.Name}}</option>
|
||||
{{end}}
|
||||
</select>
|
||||
</div>
|
||||
</div>
|
||||
<div class="layui-inline">
|
||||
<input type="text" id="title" placeholder="" class="layui-input">
|
||||
</div>
|
||||
<div class="layui-inline">
|
||||
<button type="button" class="pear-btn pear-btn-md pear-btn-primary" lay-submit
|
||||
lay-filter="user-query">
|
||||
<i class="layui-icon layui-icon-search"></i>
|
||||
查询
|
||||
</button>
|
||||
<button type="reset" class="pear-btn pear-btn-md" lay-submit
|
||||
lay-filter="user-reset">
|
||||
<i class="layui-icon layui-icon-refresh"></i>
|
||||
重置
|
||||
</button>
|
||||
</div>
|
||||
</div>
|
||||
</form>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
{{template "header" .}}
|
||||
|
||||
<!-- 工具栏 -->
|
||||
<script id="toolbar" type="text/html">
|
||||
{{ genBtn .AuthorizeMenus "add"}}
|
||||
<button type="button" lay-event="search" lay-on="search" class="layui-btn layui-btn-primary layui-btn-sm">
|
||||
<i class="layui-icon layui-icon-search"></i>
|
||||
</button>
|
||||
</script>
|
||||
|
||||
<div class="layui-card" style="margin-top: 15px;">
|
||||
<div class="layui-card-body">
|
||||
<table id="tablelist" lay-filter="tablelist"></table>
|
||||
</div>
|
||||
<div class="layui-panel">
|
||||
<table id="tablelist" lay-filter="tablelist"></table>
|
||||
</div>
|
||||
|
||||
<script type="text/html" id="actionBox">
|
||||
{{ genLink .AuthorizeMenus "edit" "chapterlist"}}
|
||||
{{ genLink .AuthorizeMenus "edit"}}
|
||||
</script>
|
||||
|
||||
{{define "js"}}
|
||||
<script>
|
||||
layui.use(['table', 'form', 'jquery', 'laydate', 'dtree', 'util'], function () {
|
||||
layui.use(['table', 'form', 'jquery', 'laydate', 'util'], function () {
|
||||
let table = layui.table;
|
||||
let form = layui.form;
|
||||
let $ = layui.jquery;
|
||||
let util = layui.util;
|
||||
let laydate = layui.laydate;
|
||||
let dtree = layui.dtree;
|
||||
|
||||
/**开始时间 */
|
||||
laydate.render({
|
||||
@@ -132,114 +49,112 @@
|
||||
}
|
||||
});
|
||||
|
||||
loadList();
|
||||
toolbar();
|
||||
tableActionTool();
|
||||
search();
|
||||
|
||||
// 加载列表
|
||||
function loadList() {
|
||||
table.render({
|
||||
elem: '#tablelist',
|
||||
url: "/budget/list",
|
||||
method: "POST",
|
||||
headers: { 'X-CSRF-Token': $('#csrf_token').val() },
|
||||
where: getQueryParams(),
|
||||
height: 'full',
|
||||
page: true,
|
||||
cols: [[
|
||||
{ field: 'id', title: '预算编号', align: 'left', fixed: 'left', width: 90 },
|
||||
{ field: 'name', title: '预算名称', align: 'left', fixed: 'left', width: 120 },
|
||||
{ field: 'project_name', title: '关联项目', align: 'left', width: 200 },
|
||||
{ field: 'project_id', title: '项目编号', align: 'left', width: 200 },
|
||||
{
|
||||
field: 'budget_type', title: '预算类型', align: 'center', width: 90, templet: function (row) {
|
||||
switch (row.budget_type) {
|
||||
case 1: return '<span class="table-field-select-01">支出</span>';
|
||||
case 2: return '<span class="table-field-select-04">收入</span>';
|
||||
default: return '其它';
|
||||
}
|
||||
return '';
|
||||
table.render({
|
||||
elem: '#tablelist',
|
||||
url: "/budget/list",
|
||||
method: "POST",
|
||||
headers: { 'X-CSRF-Token': $('#csrf_token').val() },
|
||||
where: getQueryParams(),
|
||||
// height: 'full-100',
|
||||
height: function () {
|
||||
return $(window).height() - 22;
|
||||
},
|
||||
page: true,
|
||||
limit: 15,
|
||||
limits: [15, 30, 45, 60, 75, 90],
|
||||
cols: [[
|
||||
{ field: 'id', title: '预算编号', align: 'left', fixed: 'left', width: 90 },
|
||||
{ field: 'name', title: '预算名称', align: 'left', fixed: 'left', width: 120 },
|
||||
{ field: 'project_name', title: '关联项目', align: 'left', width: 200 },
|
||||
{ field: 'project_id', title: '项目编号', align: 'left', width: 200 },
|
||||
{
|
||||
field: 'budget_type', title: '预算类型', align: 'center', width: 90, templet: function (row) {
|
||||
switch (row.budget_type) {
|
||||
case 1: return '<span class="table-field-select-01">支出</span>';
|
||||
case 2: return '<span class="table-field-select-04">收入</span>';
|
||||
default: return '其它';
|
||||
}
|
||||
},
|
||||
{ field: 'category_name', title: '预算类别', align: 'left', width: 100 },
|
||||
// {
|
||||
// field: 'status', title: '状态', align: 'center', width: 90, templet: function (row) {
|
||||
// switch (row.status) {
|
||||
// case 0: return '<span style="color:green;">正常</span>';
|
||||
// case -1: return '<span style="color:red;">删除</span>';
|
||||
// default: return '其它';
|
||||
// }
|
||||
// return '';
|
||||
// }
|
||||
// },
|
||||
{ field: 'start_at', title: '预算开始时间', align: 'left', width: 160, templet: function (d) { return !d.start_at ? '' : util.toDateString(d.start_at) } },
|
||||
{ field: 'end_at', title: '预算结束时间', align: 'left', width: 160, templet: function (d) { return !d.end_at ? '' : util.toDateString(d.end_at) } },
|
||||
{ field: 'amount', title: '预算金额', align: 'left', width: 120 },
|
||||
{ field: 'used_amount', title: '已支付金额', align: 'center', width: 120 },
|
||||
{ field: 'remaining_amount', title: '剩余金额', align: 'center', width: 120 },
|
||||
{ field: 'remark', title: '备注', align: 'left', width: 200 },
|
||||
{ field: 'created_at', title: '创建时间', align: 'center', width: 160, templet: function (d) { return !d.created_at ? '' : util.toDateString(d.created_at) } },
|
||||
{ field: 'created_name', title: '创建人', align: 'center', width: 100 },
|
||||
{ field: 'updated_at', title: '更新时间', align: 'center', width: 160, templet: function (d) { return !d.updated_at ? '' : util.toDateString(d.updated_at) } },
|
||||
{ field: 'updated_name', title: '更新人', align: 'center', width: 100 },
|
||||
{ title: '操作', toolbar: '#actionBox', align: 'center', fixed: 'right', width: 100 },
|
||||
]],
|
||||
skin: 'line',
|
||||
toolbar: '#toolbar',
|
||||
defaultToolbar: [{
|
||||
title: '刷新',
|
||||
layEvent: 'refresh',
|
||||
icon: 'layui-icon-refresh',
|
||||
}, 'filter', 'exports'],
|
||||
request: {
|
||||
pageName: 'page',
|
||||
limitName: 'rows'
|
||||
}
|
||||
return '';
|
||||
}
|
||||
},
|
||||
{ field: 'category_name', title: '预算类别', align: 'left', width: 100 },
|
||||
// {
|
||||
// field: 'status', title: '状态', align: 'center', width: 90, templet: function (row) {
|
||||
// switch (row.status) {
|
||||
// case 0: return '<span style="color:green;">正常</span>';
|
||||
// case -1: return '<span style="color:red;">删除</span>';
|
||||
// default: return '其它';
|
||||
// }
|
||||
// return '';
|
||||
// }
|
||||
// },
|
||||
{ field: 'start_at', title: '预算开始时间', align: 'left', width: 160, templet: function (d) { return !d.start_at ? '' : util.toDateString(d.start_at) } },
|
||||
{ field: 'end_at', title: '预算结束时间', align: 'left', width: 160, templet: function (d) { return !d.end_at ? '' : util.toDateString(d.end_at) } },
|
||||
{ field: 'amount', title: '预算金额', align: 'left', width: 120 },
|
||||
{ field: 'used_amount', title: '已支付金额', align: 'center', width: 120 },
|
||||
{ field: 'remaining_amount', title: '剩余金额', align: 'center', width: 120 },
|
||||
{ field: 'remark', title: '备注', align: 'left', width: 200 },
|
||||
{ field: 'created_at', title: '创建时间', align: 'center', width: 160, templet: function (d) { return !d.created_at ? '' : util.toDateString(d.created_at) } },
|
||||
{ field: 'created_name', title: '创建人', align: 'center', width: 100 },
|
||||
{ field: 'updated_at', title: '更新时间', align: 'center', width: 160, templet: function (d) { return !d.updated_at ? '' : util.toDateString(d.updated_at) } },
|
||||
{ field: 'updated_name', title: '更新人', align: 'center', width: 100 },
|
||||
{ title: '操作', toolbar: '#actionBox', align: 'center', fixed: 'right', width: 100 },
|
||||
]],
|
||||
skin: 'line',
|
||||
toolbar: '#toolbar',
|
||||
defaultToolbar: [{
|
||||
title: '刷新',
|
||||
layEvent: 'refresh',
|
||||
icon: 'layui-icon-refresh',
|
||||
}, 'filter', 'exports'],
|
||||
request: {
|
||||
pageName: 'page',
|
||||
limitName: 'rows'
|
||||
}
|
||||
});
|
||||
|
||||
// 工具栏
|
||||
table.on('toolbar(tablelist)', function (obj) {
|
||||
switch (obj.event) {
|
||||
case 'add': add(); break;
|
||||
case 'refresh': refresh(); break;
|
||||
}
|
||||
});
|
||||
|
||||
function add(obj) {
|
||||
layer.open({
|
||||
type: 2,
|
||||
// offset: 'r',
|
||||
// anim: 'slideLeft',
|
||||
title: '新增',
|
||||
shade: 0.1,
|
||||
area: ['99%', '98%'],
|
||||
content: "/budget/add"
|
||||
});
|
||||
}
|
||||
|
||||
// 工具栏
|
||||
function toolbar() {
|
||||
table.on('toolbar(tablelist)', function (obj) {
|
||||
switch (obj.event) {
|
||||
case 'add': add(); break;
|
||||
case 'refresh': refresh(); break;
|
||||
}
|
||||
});
|
||||
|
||||
function add(obj) {
|
||||
layer.open({
|
||||
type: 2,
|
||||
title: '新增',
|
||||
shade: 0.1,
|
||||
area: ['100%', '100%'],
|
||||
content: "/budget/add"
|
||||
});
|
||||
}
|
||||
|
||||
function refresh() {
|
||||
table.reload('tablelist');
|
||||
}
|
||||
function refresh() {
|
||||
table.reload('tablelist');
|
||||
}
|
||||
|
||||
// 表格项操作按钮
|
||||
function tableActionTool() {
|
||||
table.on('tool(tablelist)', function (obj) {
|
||||
switch (obj.event) {
|
||||
case 'edit': edit(obj); break;
|
||||
}
|
||||
});
|
||||
|
||||
function edit(obj) {
|
||||
layer.open({
|
||||
type: 2,
|
||||
title: '修改',
|
||||
shade: 0.1,
|
||||
area: ['100%', '100%'],
|
||||
content: "/budget/edit?id=" + obj.data['id']
|
||||
});
|
||||
table.on('tool(tablelist)', function (obj) {
|
||||
switch (obj.event) {
|
||||
case 'edit': edit(obj); break;
|
||||
}
|
||||
});
|
||||
|
||||
function edit(obj) {
|
||||
layer.open({
|
||||
type: 2,
|
||||
// offset: 'r',
|
||||
// anim: 'slideLeft',
|
||||
title: '修改',
|
||||
shade: 0.1,
|
||||
area: ['99%', '98%'],
|
||||
content: "/budget/edit?id=" + obj.data['id']
|
||||
});
|
||||
}
|
||||
|
||||
// 搜索条件
|
||||
|
||||
@@ -1,6 +1,6 @@
|
||||
{{template "header"}}
|
||||
{{template "header" .}}
|
||||
|
||||
<div class="layui-row layui-col-space15">
|
||||
<!-- <div class="layui-row layui-col-space15">
|
||||
<div class="layui-collapse">
|
||||
<div class="layui-colla-item">
|
||||
<div class="layui-colla-title">查询</div>
|
||||
@@ -88,32 +88,29 @@
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div> -->
|
||||
|
||||
<!-- 工具栏 -->
|
||||
<script id="toolbar" type="text/html">
|
||||
{{ genBtn .AuthorizeMenus "add"}}
|
||||
</script>
|
||||
|
||||
<div class="layui-card" style="margin-top: 15px;">
|
||||
<div class="layui-card-body">
|
||||
<table id="tablelist" lay-filter="tablelist"></table>
|
||||
</div>
|
||||
<div class="layui-panel">
|
||||
<table id="tablelist" lay-filter="tablelist"></table>
|
||||
</div>
|
||||
|
||||
<script type="text/html" id="actionBox">
|
||||
{{ genLink .AuthorizeMenus "edit" "chapterlist"}}
|
||||
{{ genLink .AuthorizeMenus "edit"}}
|
||||
</script>
|
||||
|
||||
{{define "js"}}
|
||||
<script>
|
||||
layui.use(['table', 'form', 'jquery', 'laydate', 'dtree', 'util'], function () {
|
||||
layui.use(['table', 'form', 'jquery', 'laydate', 'util'], function () {
|
||||
let table = layui.table;
|
||||
let form = layui.form;
|
||||
let $ = layui.jquery;
|
||||
let util = layui.util;
|
||||
let laydate = layui.laydate;
|
||||
let dtree = layui.dtree;
|
||||
|
||||
/**开始时间 */
|
||||
laydate.render({
|
||||
@@ -139,112 +136,97 @@
|
||||
}
|
||||
});
|
||||
|
||||
loadList();
|
||||
toolbar();
|
||||
tableActionTool();
|
||||
search();
|
||||
|
||||
// 加载列表
|
||||
function loadList() {
|
||||
table.render({
|
||||
elem: '#tablelist',
|
||||
url: "/customer/list",
|
||||
method: "POST",
|
||||
headers: { 'X-CSRF-Token': $('#csrf_token').val() },
|
||||
where: getQueryParams(),
|
||||
height: 'full',
|
||||
page: true,
|
||||
cols: [[
|
||||
{ field: 'name', title: '名称', align: 'left', fixed: 'left', width: 200 },
|
||||
{ field: 'sid', title: '编号', align: 'left', width: 180 },
|
||||
{ field: 'category_name', title: '类别', align: 'left', width: 100 },
|
||||
{ field: 'source_name', title: '来源', align: 'left', width: 100 },
|
||||
{
|
||||
field: 'status', title: '状态', align: 'center', width: 90, templet: function (row) {
|
||||
switch (row.status) {
|
||||
case 0: return '<span style="color:green;">正常</span>';
|
||||
case -1: return '<span style="color:red;">删除</span>';
|
||||
default: return '其它';
|
||||
}
|
||||
return '';
|
||||
table.render({
|
||||
elem: '#tablelist',
|
||||
url: "/customer/list",
|
||||
method: "POST",
|
||||
headers: { 'X-CSRF-Token': $('#csrf_token').val() },
|
||||
where: getQueryParams(),
|
||||
// height: 'full-100',
|
||||
height: function () {
|
||||
return $(window).height() - 22;
|
||||
},
|
||||
page: true,
|
||||
cols: [[
|
||||
{ field: 'name', title: '名称', align: 'left', fixed: 'left', width: 200 },
|
||||
{ field: 'sid', title: '编号', align: 'left', width: 180 },
|
||||
{ field: 'category_name', title: '类别', align: 'left', width: 100 },
|
||||
{ field: 'source_name', title: '来源', align: 'left', width: 100 },
|
||||
{
|
||||
field: 'status', title: '状态', align: 'center', width: 90, templet: function (row) {
|
||||
switch (row.status) {
|
||||
case 0: return '<span style="color:green;">正常</span>';
|
||||
case -1: return '<span style="color:red;">删除</span>';
|
||||
default: return '其它';
|
||||
}
|
||||
},
|
||||
{ field: 'contact_name', title: '联系人姓名', align: 'left', width: 120 },
|
||||
{ field: 'contact_phone', title: '联系人手机', align: 'left', width: 120 },
|
||||
{ field: 'address', title: '地址', align: 'left', width: 200 },
|
||||
{ field: 'sort', title: '排序', align: 'center', width: 80 },
|
||||
{ field: 'created_at', title: '创建时间', align: 'center', width: 160, templet: function (d) { return !d.created_at ? '' : util.toDateString(d.created_at) } },
|
||||
{ field: 'created_name', title: '创建人', align: 'center', width: 100 },
|
||||
{ field: 'updated_at', title: '更新时间', align: 'center', width: 160, templet: function (d) { return !d.updated_at ? '' : util.toDateString(d.updated_at) } },
|
||||
{ field: 'updated_name', title: '更新人', align: 'center', width: 100 },
|
||||
{ title: '操作', toolbar: '#actionBox', align: 'center', fixed: 'right', width: 100 },
|
||||
]],
|
||||
skin: 'line',
|
||||
toolbar: '#toolbar',
|
||||
defaultToolbar: [{
|
||||
title: '刷新',
|
||||
layEvent: 'refresh',
|
||||
icon: 'layui-icon-refresh',
|
||||
}, 'filter', 'exports'],
|
||||
request: {
|
||||
pageName: 'page',
|
||||
limitName: 'rows'
|
||||
}
|
||||
return '';
|
||||
}
|
||||
},
|
||||
{ field: 'contact_name', title: '联系人姓名', align: 'left', width: 120 },
|
||||
{ field: 'contact_phone', title: '联系人手机', align: 'left', width: 120 },
|
||||
{ field: 'address', title: '地址', align: 'left', width: 200 },
|
||||
{ field: 'sort', title: '排序', align: 'center', width: 80 },
|
||||
{ field: 'created_at', title: '创建时间', align: 'center', width: 160, templet: function (d) { return !d.created_at ? '' : util.toDateString(d.created_at) } },
|
||||
{ field: 'created_name', title: '创建人', align: 'center', width: 100 },
|
||||
{ field: 'updated_at', title: '更新时间', align: 'center', width: 160, templet: function (d) { return !d.updated_at ? '' : util.toDateString(d.updated_at) } },
|
||||
{ field: 'updated_name', title: '更新人', align: 'center', width: 100 },
|
||||
{ title: '操作', toolbar: '#actionBox', align: 'center', fixed: 'right', width: 100 },
|
||||
]],
|
||||
skin: 'line',
|
||||
toolbar: '#toolbar',
|
||||
defaultToolbar: [{
|
||||
title: '刷新',
|
||||
layEvent: 'refresh',
|
||||
icon: 'layui-icon-refresh',
|
||||
}, 'filter', 'exports'],
|
||||
request: {
|
||||
pageName: 'page',
|
||||
limitName: 'rows'
|
||||
}
|
||||
});
|
||||
|
||||
// 工具栏
|
||||
table.on('toolbar(tablelist)', function (obj) {
|
||||
switch (obj.event) {
|
||||
case 'add': add(); break;
|
||||
case 'refresh': refresh(); break;
|
||||
}
|
||||
});
|
||||
|
||||
function add(obj) {
|
||||
layer.open({
|
||||
type: 2,
|
||||
// offset: 'r',
|
||||
// anim: 'slideLeft',
|
||||
title: '新增',
|
||||
shade: 0.1,
|
||||
area: ['99%', '98%'],
|
||||
content: "/customer/add"
|
||||
});
|
||||
}
|
||||
|
||||
// 工具栏
|
||||
function toolbar() {
|
||||
table.on('toolbar(tablelist)', function (obj) {
|
||||
switch (obj.event) {
|
||||
case 'add': add(); break;
|
||||
case 'refresh': refresh(); break;
|
||||
}
|
||||
});
|
||||
|
||||
function add(obj) {
|
||||
layer.open({
|
||||
type: 2,
|
||||
title: '新增',
|
||||
shade: 0.1,
|
||||
area: ['100%', '100%'],
|
||||
content: "/customer/add"
|
||||
});
|
||||
}
|
||||
|
||||
function refresh() {
|
||||
table.reload('tablelist');
|
||||
}
|
||||
function refresh() {
|
||||
table.reload('tablelist');
|
||||
}
|
||||
|
||||
// 表格项操作按钮
|
||||
function tableActionTool() {
|
||||
table.on('tool(tablelist)', function (obj) {
|
||||
switch (obj.event) {
|
||||
case 'edit': edit(obj); break;
|
||||
case 'chapterlist': chapterlist(obj); break;
|
||||
}
|
||||
table.on('tool(tablelist)', function (obj) {
|
||||
switch (obj.event) {
|
||||
case 'edit': edit(obj); break;
|
||||
}
|
||||
});
|
||||
|
||||
function edit(obj) {
|
||||
layer.open({
|
||||
type: 2,
|
||||
// offset: 'r',
|
||||
// anim: 'slideLeft',
|
||||
title: '修改',
|
||||
shade: 0.1,
|
||||
area: ['99%', '98%'],
|
||||
content: "/customer/edit?id=" + obj.data['sid']
|
||||
});
|
||||
|
||||
function edit(obj) {
|
||||
layer.open({
|
||||
type: 2,
|
||||
title: '修改',
|
||||
shade: 0.1,
|
||||
area: ['100%', '100%'],
|
||||
content: "/customer/edit?id=" + obj.data['sid']
|
||||
});
|
||||
}
|
||||
|
||||
function chapterlist(obj) {
|
||||
layer.open({
|
||||
type: 2,
|
||||
title: '章节列表',
|
||||
shade: 0.1,
|
||||
area: ['100%', '100%'],
|
||||
content: "/customer/chapterlist?novelID=" + obj.data['sid']
|
||||
});
|
||||
}
|
||||
}
|
||||
|
||||
// 搜索条件
|
||||
|
||||
@@ -99,7 +99,7 @@
|
||||
<div class="layui-form-item layui-fixbar btn-fixbar-box">
|
||||
<div class="layui-input-block">
|
||||
{{ submitBtn .AuthorizeMenus "save"}}
|
||||
<button type="button" class="pear-btn pear-btn-sm" lay-on="close">
|
||||
<button type="button" class="layui-btn layui-btn-primary layui-btn-sm" lay-on="close">
|
||||
<i class="layui-icon layui-icon-close"></i>关闭
|
||||
</button>
|
||||
</div>
|
||||
|
||||
@@ -1,233 +1,147 @@
|
||||
{{template "header"}}
|
||||
|
||||
<div class="layui-row layui-col-space15">
|
||||
<div class="layui-collapse">
|
||||
<div class="layui-colla-item">
|
||||
<div class="layui-colla-title">查询</div>
|
||||
<div class="layui-colla-content layui-show">
|
||||
<div class="layui-card">
|
||||
<div class="layui-card-body">
|
||||
<form class="layui-form layui-form-pane" action="">
|
||||
{{.CsrfTokenField}}
|
||||
<div class="layui-form-item">
|
||||
<div class="layui-form-item layui-inline">
|
||||
<label class="layui-form-label" style="overflow:visible;padding:0;width:110px;">
|
||||
<select id="SearchTimeType">
|
||||
<option value="CreateTime">创建时间</option>
|
||||
</select>
|
||||
</label>
|
||||
<div class="layui-input-inline" style="width:150px;">
|
||||
<input type="text" class="layui-input" id="timeBegin" placeholder="yyyy-MM-dd"
|
||||
readonly value="{{ yearBegin }}" />
|
||||
</div>
|
||||
<div class="layui-input-inline"
|
||||
style="width:10px;line-height:30px;margin-right:5px">
|
||||
-
|
||||
</div>
|
||||
<div class="layui-input-inline" style="width:150px;">
|
||||
<input type="text" class="layui-input " id="timeEnd" placeholder="yyyy-MM-dd"
|
||||
readonly value="{{ monthEnd }}" />
|
||||
</div>
|
||||
</div>
|
||||
<div class="layui-form-item layui-inline">
|
||||
<label class="layui-form-label">状态</label>
|
||||
<div class="layui-input-inline">
|
||||
<select id="status">
|
||||
<option value="0">请选择</option>
|
||||
{{range .Statuses}}
|
||||
<option value="{{.Value}}">{{.Name}}</option>
|
||||
{{end}}
|
||||
</select>
|
||||
</div>
|
||||
</div>
|
||||
<div class="layui-form-item layui-inline">
|
||||
<label class="layui-form-label">项目</label>
|
||||
<div class="layui-input-inline">
|
||||
<select id="project">
|
||||
{{range.Projects}}
|
||||
<option value="{{.Value}}">{{.Name}}</option>
|
||||
{{end}}
|
||||
</select>
|
||||
</div>
|
||||
</div>
|
||||
<div class="layui-form-item layui-inline">
|
||||
<label class="layui-form-label">类别</label>
|
||||
<div class="layui-input-inline">
|
||||
<select id="category">
|
||||
{{range.Categories}}
|
||||
<option value="{{.Value}}">{{.Name}}</option>
|
||||
{{end}}
|
||||
</select>
|
||||
</div>
|
||||
</div>
|
||||
<div class="layui-inline">
|
||||
<input type="text" id="title" placeholder="" class="layui-input">
|
||||
</div>
|
||||
<div class="layui-inline">
|
||||
<button type="button" class="pear-btn pear-btn-md pear-btn-primary" lay-submit
|
||||
lay-filter="user-query">
|
||||
<i class="layui-icon layui-icon-search"></i>
|
||||
查询
|
||||
</button>
|
||||
<button type="reset" class="pear-btn pear-btn-md" lay-submit
|
||||
lay-filter="user-reset">
|
||||
<i class="layui-icon layui-icon-refresh"></i>
|
||||
重置
|
||||
</button>
|
||||
</div>
|
||||
</div>
|
||||
</form>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
{{template "header" .}}
|
||||
|
||||
<!-- 工具栏 -->
|
||||
<script id="toolbar" type="text/html">
|
||||
{{ genBtn .AuthorizeMenus "add"}}
|
||||
<button type="button" lay-event="search" lay-on="search" class="layui-btn layui-btn-primary layui-btn-sm">
|
||||
<i class="layui-icon layui-icon-search"></i>
|
||||
</button>
|
||||
</script>
|
||||
|
||||
<div class="layui-card" style="margin-top: 15px;">
|
||||
<div class="layui-card-body">
|
||||
<table id="tablelist" lay-filter="tablelist"></table>
|
||||
</div>
|
||||
<div class="layui-panel">
|
||||
<table id="tablelist" lay-filter="tablelist"></table>
|
||||
</div>
|
||||
|
||||
<script type="text/html" id="actionBox">
|
||||
{{ genLink .AuthorizeMenus "edit" "chapterlist"}}
|
||||
{{ genLink .AuthorizeMenus "edit"}}
|
||||
</script>
|
||||
|
||||
{{define "js"}}
|
||||
<script>
|
||||
layui.use(['table', 'form', 'jquery', 'laydate', 'dtree', 'util'], function () {
|
||||
layui.use(['table', 'form', 'jquery', 'laydate', 'util'], function () {
|
||||
let table = layui.table;
|
||||
let form = layui.form;
|
||||
let $ = layui.jquery;
|
||||
let util = layui.util;
|
||||
let laydate = layui.laydate;
|
||||
let dtree = layui.dtree;
|
||||
|
||||
/**开始时间 */
|
||||
laydate.render({
|
||||
elem: '#timeBegin',
|
||||
type: 'datetime',
|
||||
value: '{{ yearBegin }}',
|
||||
ready: function (date) {
|
||||
this.dateTime.hours = 0;
|
||||
this.dateTime.minutes = 0;
|
||||
this.dateTime.seconds = 0;
|
||||
}
|
||||
});
|
||||
|
||||
/**截止时间 */
|
||||
laydate.render({
|
||||
elem: '#timeEnd',
|
||||
type: 'datetime',
|
||||
value: '{{ monthEnd }}',
|
||||
ready: function (date) {
|
||||
this.dateTime.hours = 23;
|
||||
this.dateTime.minutes = 59;
|
||||
this.dateTime.seconds = 59;
|
||||
}
|
||||
});
|
||||
|
||||
loadList();
|
||||
toolbar();
|
||||
tableActionTool();
|
||||
search();
|
||||
|
||||
// 加载列表
|
||||
function loadList() {
|
||||
table.render({
|
||||
elem: '#tablelist',
|
||||
url: "/expense/list",
|
||||
method: "POST",
|
||||
headers: { 'X-CSRF-Token': $('#csrf_token').val() },
|
||||
where: getQueryParams(),
|
||||
height: 'full',
|
||||
page: true,
|
||||
cols: [[
|
||||
{ field: 'id', title: '报销编号', align: 'left', fixed: 'left', width: 100 },
|
||||
{ field: 'project_name', title: '关联项目', align: 'left', width: 200 },
|
||||
{ field: 'project_id', title: '项目编号', align: 'left', width: 200 },
|
||||
{ field: 'budget_name', title: '关联预算', align: 'left', width: 200 },
|
||||
{ field: 'budget_id', title: '预算编号', align: 'left', width: 200 },
|
||||
{ field: 'expenses_type_name', title: '报销类别', align: 'left', width: 100 },
|
||||
{ field: 'expenses_at', title: '报销时间', align: 'left', width: 160, templet: function (d) { return !d.expenses_at ? '' : util.toDateString(d.expenses_at) } },
|
||||
{ field: 'amount', title: '报销金额', align: 'left', width: 120 },
|
||||
{
|
||||
field: 'status', title: '状态', align: 'center', width: 90, templet: function (row) {
|
||||
switch (row.status) {
|
||||
case 0: return '<span style="color:green;">正常</span>';
|
||||
case -1: return '<span style="color:red;">删除</span>';
|
||||
default: return '其它';
|
||||
}
|
||||
return '';
|
||||
table.render({
|
||||
elem: '#tablelist',
|
||||
url: "/expense/list",
|
||||
method: "POST",
|
||||
headers: { 'X-CSRF-Token': $('#csrf_token').val() },
|
||||
where: getQueryParams(),
|
||||
// height: 'full-100',
|
||||
height: function () {
|
||||
return $(window).height() - 22;
|
||||
},
|
||||
page: true,
|
||||
limit: 15,
|
||||
limits: [15, 30, 45, 60, 75, 90],
|
||||
cols: [[
|
||||
{ field: 'id', title: '报销编号', align: 'left', fixed: 'left', width: 100 },
|
||||
{ field: 'project_name', title: '关联项目', align: 'left', width: 200 },
|
||||
{ field: 'project_id', title: '项目编号', align: 'left', width: 200 },
|
||||
{ field: 'budget_name', title: '关联预算', align: 'left', width: 200 },
|
||||
{ field: 'budget_id', title: '预算编号', align: 'left', width: 200 },
|
||||
{ field: 'expenses_type_name', title: '报销类别', align: 'left', width: 100 },
|
||||
{ field: 'expenses_at', title: '报销时间', align: 'left', width: 160, templet: function (d) { return !d.expenses_at ? '' : util.toDateString(d.expenses_at) } },
|
||||
{ field: 'amount', title: '报销金额', align: 'left', width: 120 },
|
||||
{
|
||||
field: 'status', title: '状态', align: 'center', width: 90, templet: function (row) {
|
||||
switch (row.status) {
|
||||
case 0: return '<span style="color:green;">正常</span>';
|
||||
case -1: return '<span style="color:red;">删除</span>';
|
||||
default: return '其它';
|
||||
}
|
||||
},
|
||||
{ field: 'created_at', title: '创建时间', align: 'center', width: 160, templet: function (d) { return !d.created_at ? '' : util.toDateString(d.created_at) } },
|
||||
{ field: 'created_name', title: '创建人', align: 'center', width: 100 },
|
||||
{ field: 'updated_at', title: '更新时间', align: 'center', width: 160, templet: function (d) { return !d.updated_at ? '' : util.toDateString(d.updated_at) } },
|
||||
{ field: 'updated_name', title: '更新人', align: 'center', width: 100 },
|
||||
{ title: '操作', toolbar: '#actionBox', align: 'center', fixed: 'right', width: 100 },
|
||||
]],
|
||||
skin: 'line',
|
||||
toolbar: '#toolbar',
|
||||
defaultToolbar: [{
|
||||
title: '刷新',
|
||||
layEvent: 'refresh',
|
||||
icon: 'layui-icon-refresh',
|
||||
}, 'filter', 'exports'],
|
||||
request: {
|
||||
pageName: 'page',
|
||||
limitName: 'rows'
|
||||
return '';
|
||||
}
|
||||
},
|
||||
{ field: 'created_at', title: '创建时间', align: 'center', width: 160, templet: function (d) { return !d.created_at ? '' : util.toDateString(d.created_at) } },
|
||||
{ field: 'created_name', title: '创建人', align: 'center', width: 100 },
|
||||
{ field: 'updated_at', title: '更新时间', align: 'center', width: 160, templet: function (d) { return !d.updated_at ? '' : util.toDateString(d.updated_at) } },
|
||||
{ field: 'updated_name', title: '更新人', align: 'center', width: 100 },
|
||||
{ title: '操作', toolbar: '#actionBox', align: 'center', fixed: 'right', width: 100 },
|
||||
]],
|
||||
skin: 'line',
|
||||
toolbar: '#toolbar',
|
||||
defaultToolbar: [{
|
||||
title: '刷新',
|
||||
layEvent: 'refresh',
|
||||
icon: 'layui-icon-refresh',
|
||||
}, 'filter', 'exports'],
|
||||
request: {
|
||||
pageName: 'page',
|
||||
limitName: 'rows'
|
||||
}
|
||||
});
|
||||
|
||||
// 工具栏
|
||||
table.on('toolbar(tablelist)', function (obj) {
|
||||
switch (obj.event) {
|
||||
case 'add': add(); break;
|
||||
case 'search': search(); break;
|
||||
case 'refresh': refresh(); break;
|
||||
}
|
||||
});
|
||||
|
||||
function add(obj) {
|
||||
layer.open({
|
||||
type: 2,
|
||||
// offset: 'r',
|
||||
// anim: 'slideLeft',
|
||||
title: '新增',
|
||||
shade: 0.1,
|
||||
area: ['99%', '98%'],
|
||||
content: "/expense/add"
|
||||
});
|
||||
}
|
||||
|
||||
function search() {
|
||||
layer.open({
|
||||
type: 1,
|
||||
title: '搜索',
|
||||
content: $('#search-layer'), // 捕获的元素
|
||||
shade: 0.1,
|
||||
shadeClose: false,
|
||||
scrollbar: false,
|
||||
area: ['350px', '400px'],
|
||||
btn: ['搜索', '重置'],
|
||||
btn1: function (index, layero) {
|
||||
search_btn();
|
||||
layer.close(index);
|
||||
},
|
||||
btn2: function (index, layero) {
|
||||
$('#status').val(0);
|
||||
$('#category').val('0');
|
||||
$('#project').val('0');
|
||||
return false;
|
||||
}
|
||||
});
|
||||
}
|
||||
|
||||
// 工具栏
|
||||
function toolbar() {
|
||||
table.on('toolbar(tablelist)', function (obj) {
|
||||
switch (obj.event) {
|
||||
case 'add': add(); break;
|
||||
case 'refresh': refresh(); break;
|
||||
}
|
||||
});
|
||||
|
||||
function add(obj) {
|
||||
layer.open({
|
||||
type: 2,
|
||||
title: '新增',
|
||||
shade: 0.1,
|
||||
area: ['100%', '100%'],
|
||||
content: "/expense/add"
|
||||
});
|
||||
}
|
||||
|
||||
function refresh() {
|
||||
table.reload('tablelist');
|
||||
}
|
||||
function refresh() {
|
||||
table.reload('tablelist');
|
||||
}
|
||||
|
||||
// 表格项操作按钮
|
||||
function tableActionTool() {
|
||||
table.on('tool(tablelist)', function (obj) {
|
||||
switch (obj.event) {
|
||||
case 'edit': edit(obj); break;
|
||||
}
|
||||
});
|
||||
|
||||
function edit(obj) {
|
||||
layer.open({
|
||||
type: 2,
|
||||
title: '修改',
|
||||
shade: 0.1,
|
||||
area: ['100%', '100%'],
|
||||
content: "/expense/edit?id=" + obj.data['id']
|
||||
});
|
||||
table.on('tool(tablelist)', function (obj) {
|
||||
switch (obj.event) {
|
||||
case 'edit': edit(obj); break;
|
||||
}
|
||||
});
|
||||
|
||||
function edit(obj) {
|
||||
layer.open({
|
||||
type: 2,
|
||||
// offset: 'r',
|
||||
// anim: 'slideLeft',
|
||||
title: '修改',
|
||||
shade: 0.1,
|
||||
area: ['99%', '98%'],
|
||||
content: "/expense/edit?id=" + obj.data['id']
|
||||
});
|
||||
}
|
||||
|
||||
// 搜索条件
|
||||
@@ -243,16 +157,22 @@
|
||||
}
|
||||
|
||||
// 搜索
|
||||
function search() {
|
||||
form.on('submit(user-query)', function (data) {
|
||||
table.reload('tablelist', {
|
||||
where: getQueryParams(),
|
||||
page: {
|
||||
curr: 1
|
||||
}
|
||||
})
|
||||
return false;
|
||||
});
|
||||
function search_btn() {
|
||||
// form.on('submit(user-query)', function (data) {
|
||||
// table.reload('tablelist', {
|
||||
// where: getQueryParams(),
|
||||
// page: {
|
||||
// curr: 1
|
||||
// }
|
||||
// })
|
||||
// return false;
|
||||
// });
|
||||
table.reload('tablelist', {
|
||||
where: getQueryParams(),
|
||||
page: {
|
||||
curr: 1
|
||||
}
|
||||
})
|
||||
}
|
||||
});
|
||||
</script>
|
||||
|
||||
@@ -4,16 +4,16 @@
|
||||
<head>
|
||||
<meta charset="utf-8">
|
||||
<meta name="viewport" content="width=device-width, initial-scale=1, maximum-scale=1">
|
||||
<title>Home - management</title>
|
||||
<title>component</title>
|
||||
<link rel="icon" type="image/x-icon" href="/statics/favicon.ico">
|
||||
<!-- 依 赖 样 式 -->
|
||||
<link rel="stylesheet" href="/statics/component/pear/css/pear.css" />
|
||||
<!-- 加 载 样 式 -->
|
||||
<link rel="stylesheet" href="/statics/admin/css/loader.css" />
|
||||
<!-- 布 局 样 式 -->
|
||||
<link rel="stylesheet" href="/statics/admin/css/admin.css" />
|
||||
<link rel="stylesheet" href="/statics/admin/css/admin.dark.css" />
|
||||
<link rel="stylesheet" href="/statics/admin/css/variables.css" />
|
||||
<link rel="stylesheet" href="/statics/admin/css/reset.css" />
|
||||
<link rel="stylesheet" href="/statics/admin/css/style.css" />
|
||||
{{block "css" .}}{{end}}
|
||||
</head>
|
||||
<!-- 结 构 代 码 -->
|
||||
|
||||
<body class="layui-layout-body pear-admin">
|
||||
<!-- 布 局 框 架 -->
|
||||
@@ -38,12 +38,10 @@
|
||||
<!-- 顶 部 右 侧 菜 单 -->
|
||||
<ul class="layui-nav layui-layout-right">
|
||||
<!-- <li class="layui-nav-item layui-hide-xs"><a href="#"
|
||||
class="menuSearch layui-icon layui-icon-search"></a></li> -->
|
||||
class="menuSearch layui-icon layui-icon-search"></a></li>
|
||||
<li class="layui-nav-item layui-hide-xs message"></li> -->
|
||||
<li class="layui-nav-item layui-hide-xs"><a href="#"
|
||||
class="fullScreen layui-icon layui-icon-screen-full"></a></li>
|
||||
<!-- <li class="layui-nav-item layui-hide-xs"><a href="http://www.pearadmin.com"
|
||||
class="layui-icon layui-icon-website"></a></li> -->
|
||||
<li style="display: none;" class="layui-nav-item layui-hide-xs message"></li>
|
||||
<li class="layui-nav-item user">
|
||||
<!-- 头 像 -->
|
||||
<a class="layui-icon layui-icon-username" href="javascript:;"></a>
|
||||
@@ -58,6 +56,9 @@
|
||||
<a href="javascript:void(0);" title="{{.AuthorizeUser.Username}}" class="logout">注销登录</a>
|
||||
</dd>
|
||||
{{end}}
|
||||
<!-- <dd><a user-menu-url="view/profile/index.html" user-menu-id="5555"
|
||||
user-menu-title="基本资料">基本资料</a></dd>
|
||||
<dd><a href="javascript:void(0);" class="logout">注销登录</a></dd> -->
|
||||
</dl>
|
||||
</li>
|
||||
<!-- 主 题 配 置 -->
|
||||
@@ -75,7 +76,7 @@
|
||||
</div>
|
||||
<!-- 菜 单 内 容 -->
|
||||
<div class="layui-side-scroll">
|
||||
<div id="sideMenu"></div>
|
||||
<div id="side"></div>
|
||||
</div>
|
||||
</div>
|
||||
<!-- 视 图 页 面 -->
|
||||
@@ -84,19 +85,11 @@
|
||||
<div id="content"></div>
|
||||
</div>
|
||||
<!-- 页脚 -->
|
||||
<div class="layui-footer layui-text">
|
||||
<span class="left">
|
||||
Released under the MIT license.
|
||||
</span>
|
||||
<span class="center"></span>
|
||||
<span class="right">
|
||||
Copyright © 2021-2022 pearadmin.com
|
||||
</span>
|
||||
</div>
|
||||
<div class="layui-footer layui-text"></div>
|
||||
<!-- 遮 盖 层 -->
|
||||
<div class="pear-cover"></div>
|
||||
<!-- 加 载 动 画 -->
|
||||
<div class="loader-main">
|
||||
<div class="loader-wrapper">
|
||||
<!-- 动 画 对 象 -->
|
||||
<div class="loader"></div>
|
||||
</div>
|
||||
@@ -105,30 +98,69 @@
|
||||
<div class="pear-collapsed-pe collapse">
|
||||
<a href="#" class="layui-icon layui-icon-shrink-right"></a>
|
||||
</div>
|
||||
<!-- 依 赖 脚 本 -->
|
||||
|
||||
<script src="/statics/component/layui/layui.js"></script>
|
||||
<script src="/statics/component/pear/pear.js"></script>
|
||||
<!-- 框 架 初 始 化 -->
|
||||
<script>
|
||||
layui.use(['admin', 'jquery', 'popup', 'drawer'], function () {
|
||||
var $ = layui.jquery;
|
||||
var admin = layui.admin;
|
||||
var popup = layui.popup;
|
||||
|
||||
admin.setConfigType("json");
|
||||
admin.setConfigPath("/pear.json");
|
||||
// yml | json | api
|
||||
admin.setConfigurationPath("/pear.json");
|
||||
|
||||
admin.render();
|
||||
|
||||
// 登出逻辑
|
||||
admin.logout(function () {
|
||||
window.location.href = '/logout';
|
||||
// 清空 tabs 缓存
|
||||
return new Promise((resolve) => {
|
||||
resolve(true)
|
||||
});
|
||||
})
|
||||
|
||||
// 读取 localStorage 主题颜色值,初始化 iframe 主题
|
||||
//darkTheme();
|
||||
//themeColor();
|
||||
|
||||
// iframe 页监听 localStorage [pear 框架主题颜色] 变化。发生变化,同步更新 iframe 显示效果
|
||||
// window.addEventListener('storage', function (event) {
|
||||
// if (event.key === 'dark') {
|
||||
// darkTheme();
|
||||
// }
|
||||
// if (event.key === 'theme-color') {
|
||||
// themeColor();
|
||||
// }
|
||||
// });
|
||||
|
||||
// 夜间模式切换
|
||||
// function darkTheme() {
|
||||
// var $pearAdmin = $(".pear-admin"); // 主体
|
||||
// var $layuiCard = $('.layui-card'); // 编辑页
|
||||
|
||||
// if (localStorage.getItem('dark') === 'true') {
|
||||
// $pearAdmin.addClass("pear-admin-dark");
|
||||
// $layuiCard.addClass('layui-card-dark');
|
||||
// } else {
|
||||
// $pearAdmin.removeClass("pear-admin-dark");
|
||||
// $layuiCard.removeClass('layui-card-dark');
|
||||
// }
|
||||
// }
|
||||
|
||||
// 主题颜色切换
|
||||
// function themeColor() {
|
||||
// const variableKey = "--global-primary-color";
|
||||
// const variableVal = localStorage.getItem("theme-color-color");
|
||||
// document.documentElement.style.setProperty(variableKey, variableVal);
|
||||
// }
|
||||
|
||||
// 消息点击回调
|
||||
// admin.message(function (id, title, context, form) { });
|
||||
})
|
||||
</script>
|
||||
{{block "js" .}}{{end}}
|
||||
</body>
|
||||
|
||||
</html>
|
||||
@@ -6,11 +6,12 @@
|
||||
<meta name="viewport" content="width=device-width, initial-scale=1, maximum-scale=1">
|
||||
<title>Home - management</title>
|
||||
<link rel="icon" type="image/x-icon" href="/statics/favicon.ico">
|
||||
<!-- 依 赖 样 式 -->
|
||||
<link rel="stylesheet" href="/statics/component/pear/css/pear.css" />
|
||||
<!-- 加 载 样 式 -->
|
||||
<link rel="stylesheet" href="/statics/admin/css/loader.css" />
|
||||
<!-- 布 局 样 式 -->
|
||||
<link rel="stylesheet" href="/statics/admin/css/admin.css" />
|
||||
<link rel="stylesheet" href="/statics/admin/css/admin.dark.css" />
|
||||
<link rel="stylesheet" href="/statics/admin/css/variables.css" />
|
||||
<link rel="stylesheet" href="/statics/admin/css/reset.css" />
|
||||
</head>
|
||||
<!-- 结 构 代 码 -->
|
||||
|
||||
@@ -37,10 +38,12 @@
|
||||
<!-- 顶 部 右 侧 菜 单 -->
|
||||
<ul class="layui-nav layui-layout-right">
|
||||
<!-- <li class="layui-nav-item layui-hide-xs"><a href="#"
|
||||
class="menuSearch layui-icon layui-icon-search"></a></li>
|
||||
<li class="layui-nav-item layui-hide-xs message"></li> -->
|
||||
class="menuSearch layui-icon layui-icon-search"></a></li> -->
|
||||
<li class="layui-nav-item layui-hide-xs"><a href="#"
|
||||
class="fullScreen layui-icon layui-icon-screen-full"></a></li>
|
||||
<!-- <li class="layui-nav-item layui-hide-xs"><a href="http://www.pearadmin.com"
|
||||
class="layui-icon layui-icon-website"></a></li> -->
|
||||
<li style="display: none;" class="layui-nav-item layui-hide-xs message"></li>
|
||||
<li class="layui-nav-item user">
|
||||
<!-- 头 像 -->
|
||||
<a class="layui-icon layui-icon-username" href="javascript:;"></a>
|
||||
@@ -55,9 +58,6 @@
|
||||
<a href="javascript:void(0);" title="{{.AuthorizeUser.Username}}" class="logout">注销登录</a>
|
||||
</dd>
|
||||
{{end}}
|
||||
<!-- <dd><a user-menu-url="view/profile/index.html" user-menu-id="5555"
|
||||
user-menu-title="基本资料">基本资料</a></dd>
|
||||
<dd><a href="javascript:void(0);" class="logout">注销登录</a></dd> -->
|
||||
</dl>
|
||||
</li>
|
||||
<!-- 主 题 配 置 -->
|
||||
@@ -75,7 +75,7 @@
|
||||
</div>
|
||||
<!-- 菜 单 内 容 -->
|
||||
<div class="layui-side-scroll">
|
||||
<div id="side"></div>
|
||||
<div id="sideMenu"></div>
|
||||
</div>
|
||||
</div>
|
||||
<!-- 视 图 页 面 -->
|
||||
@@ -84,11 +84,19 @@
|
||||
<div id="content"></div>
|
||||
</div>
|
||||
<!-- 页脚 -->
|
||||
<div class="layui-footer layui-text"></div>
|
||||
<div class="layui-footer layui-text">
|
||||
<span class="left">
|
||||
Released under the MIT license.
|
||||
</span>
|
||||
<span class="center"></span>
|
||||
<span class="right">
|
||||
Copyright © 2021-2022 pearadmin.com
|
||||
</span>
|
||||
</div>
|
||||
<!-- 遮 盖 层 -->
|
||||
<div class="pear-cover"></div>
|
||||
<!-- 加 载 动 画 -->
|
||||
<div class="loader-wrapper">
|
||||
<div class="loader-main">
|
||||
<!-- 动 画 对 象 -->
|
||||
<div class="loader"></div>
|
||||
</div>
|
||||
@@ -107,18 +115,14 @@
|
||||
var admin = layui.admin;
|
||||
var popup = layui.popup;
|
||||
|
||||
// yml | json | api
|
||||
admin.setConfigurationPath("/pear.json");
|
||||
admin.setConfigType("json");
|
||||
admin.setConfigPath("/pear.json");
|
||||
|
||||
admin.render();
|
||||
|
||||
// 登出逻辑
|
||||
admin.logout(function () {
|
||||
window.location.href = '/logout';
|
||||
// 清空 tabs 缓存
|
||||
return new Promise((resolve) => {
|
||||
resolve(true)
|
||||
});
|
||||
})
|
||||
|
||||
// 消息点击回调
|
||||
@@ -1,6 +1,6 @@
|
||||
{{template "header"}}
|
||||
{{template "header" .}}
|
||||
|
||||
<div class="layui-row layui-col-space15">
|
||||
<!-- <div class="layui-row layui-col-space15">
|
||||
<div class="layui-collapse">
|
||||
<div class="layui-colla-item">
|
||||
<div class="layui-colla-title">查询</div>
|
||||
@@ -82,32 +82,29 @@
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div> -->
|
||||
|
||||
<!-- 工具栏 -->
|
||||
<script id="toolbar" type="text/html">
|
||||
{{ genBtn .AuthorizeMenus "add"}}
|
||||
</script>
|
||||
|
||||
<div class="layui-card" style="margin-top: 15px;">
|
||||
<div class="layui-card-body">
|
||||
<table id="tablelist" lay-filter="tablelist"></table>
|
||||
</div>
|
||||
<div class="layui-panel">
|
||||
<table id="tablelist" lay-filter="tablelist"></table>
|
||||
</div>
|
||||
|
||||
<script type="text/html" id="actionBox">
|
||||
{{ genLink .AuthorizeMenus "edit" "chapterlist"}}
|
||||
{{ genLink .AuthorizeMenus "edit"}}
|
||||
</script>
|
||||
|
||||
{{define "js"}}
|
||||
<script>
|
||||
layui.use(['table', 'form', 'jquery', 'laydate', 'dtree', 'util'], function () {
|
||||
layui.use(['table', 'form', 'jquery', 'laydate', 'util'], function () {
|
||||
let table = layui.table;
|
||||
let form = layui.form;
|
||||
let $ = layui.jquery;
|
||||
let util = layui.util;
|
||||
let laydate = layui.laydate;
|
||||
let dtree = layui.dtree;
|
||||
|
||||
/**开始时间 */
|
||||
laydate.render({
|
||||
@@ -133,101 +130,96 @@
|
||||
}
|
||||
});
|
||||
|
||||
loadList();
|
||||
toolbar();
|
||||
tableActionTool();
|
||||
search();
|
||||
|
||||
// 加载列表
|
||||
function loadList() {
|
||||
table.render({
|
||||
elem: '#tablelist',
|
||||
url: "/income/list",
|
||||
method: "POST",
|
||||
headers: { 'X-CSRF-Token': $('#csrf_token').val() },
|
||||
where: getQueryParams(),
|
||||
height: 'full',
|
||||
page: true,
|
||||
cols: [[
|
||||
{ field: 'id', title: '回款编号', align: 'left', fixed: 'left', width: 100 },
|
||||
{ field: 'project_name', title: '关联项目', align: 'left', width: 200 },
|
||||
{ field: 'project_id', title: '项目编号', align: 'left', width: 200 },
|
||||
{ field: 'budget_name', title: '关联预算', align: 'left', width: 200 },
|
||||
{ field: 'budget_id', title: '预算编号', align: 'left', width: 200 },
|
||||
{ field: 'income_type_name', title: '回款类别', align: 'left', width: 100 },
|
||||
{ field: 'income_at', title: '回款时间', align: 'left', width: 160, templet: function (d) { return !d.income_at ? '' : util.toDateString(d.income_at) } },
|
||||
{ field: 'amount', title: '回款金额', align: 'left', width: 120 },
|
||||
{
|
||||
field: 'status', title: '状态', align: 'center', width: 90, templet: function (row) {
|
||||
switch (row.status) {
|
||||
case 0: return '<span style="color:green;">正常</span>';
|
||||
case -1: return '<span style="color:red;">删除</span>';
|
||||
default: return '其它';
|
||||
}
|
||||
return '';
|
||||
table.render({
|
||||
elem: '#tablelist',
|
||||
url: "/income/list",
|
||||
method: "POST",
|
||||
headers: { 'X-CSRF-Token': $('#csrf_token').val() },
|
||||
where: getQueryParams(),
|
||||
// height: 'full-100',
|
||||
height: function () {
|
||||
return $(window).height() - 22;
|
||||
},
|
||||
page: true,
|
||||
cols: [[
|
||||
{ field: 'id', title: '回款编号', align: 'left', fixed: 'left', width: 100 },
|
||||
{ field: 'project_name', title: '关联项目', align: 'left', width: 200 },
|
||||
{ field: 'project_id', title: '项目编号', align: 'left', width: 200 },
|
||||
{ field: 'budget_name', title: '关联预算', align: 'left', width: 200 },
|
||||
{ field: 'budget_id', title: '预算编号', align: 'left', width: 200 },
|
||||
{ field: 'income_type_name', title: '回款类别', align: 'left', width: 100 },
|
||||
{ field: 'income_at', title: '回款时间', align: 'left', width: 160, templet: function (d) { return !d.income_at ? '' : util.toDateString(d.income_at) } },
|
||||
{ field: 'amount', title: '回款金额', align: 'left', width: 120 },
|
||||
{
|
||||
field: 'status', title: '状态', align: 'center', width: 90, templet: function (row) {
|
||||
switch (row.status) {
|
||||
case 0: return '<span style="color:green;">正常</span>';
|
||||
case -1: return '<span style="color:red;">删除</span>';
|
||||
default: return '其它';
|
||||
}
|
||||
},
|
||||
{ field: 'created_at', title: '创建时间', align: 'center', width: 160, templet: function (d) { return !d.created_at ? '' : util.toDateString(d.created_at) } },
|
||||
{ field: 'created_name', title: '创建人', align: 'center', width: 100 },
|
||||
{ field: 'updated_at', title: '更新时间', align: 'center', width: 160, templet: function (d) { return !d.updated_at ? '' : util.toDateString(d.updated_at) } },
|
||||
{ field: 'updated_name', title: '更新人', align: 'center', width: 100 },
|
||||
{ title: '操作', toolbar: '#actionBox', align: 'center', fixed: 'right', width: 100 },
|
||||
]],
|
||||
skin: 'line',
|
||||
toolbar: '#toolbar',
|
||||
defaultToolbar: [{
|
||||
title: '刷新',
|
||||
layEvent: 'refresh',
|
||||
icon: 'layui-icon-refresh',
|
||||
}, 'filter', 'exports'],
|
||||
request: {
|
||||
pageName: 'page',
|
||||
limitName: 'rows'
|
||||
}
|
||||
return '';
|
||||
}
|
||||
},
|
||||
{ field: 'created_at', title: '创建时间', align: 'center', width: 160, templet: function (d) { return !d.created_at ? '' : util.toDateString(d.created_at) } },
|
||||
{ field: 'created_name', title: '创建人', align: 'center', width: 100 },
|
||||
{ field: 'updated_at', title: '更新时间', align: 'center', width: 160, templet: function (d) { return !d.updated_at ? '' : util.toDateString(d.updated_at) } },
|
||||
{ field: 'updated_name', title: '更新人', align: 'center', width: 100 },
|
||||
{ title: '操作', toolbar: '#actionBox', align: 'center', fixed: 'right', width: 100 },
|
||||
]],
|
||||
skin: 'line',
|
||||
toolbar: '#toolbar',
|
||||
defaultToolbar: [{
|
||||
title: '刷新',
|
||||
layEvent: 'refresh',
|
||||
icon: 'layui-icon-refresh',
|
||||
}, 'filter', 'exports'],
|
||||
request: {
|
||||
pageName: 'page',
|
||||
limitName: 'rows'
|
||||
}
|
||||
});
|
||||
|
||||
// 工具栏
|
||||
table.on('toolbar(tablelist)', function (obj) {
|
||||
switch (obj.event) {
|
||||
case 'add': add(); break;
|
||||
case 'refresh': refresh(); break;
|
||||
}
|
||||
});
|
||||
|
||||
function add(obj) {
|
||||
layer.open({
|
||||
type: 2,
|
||||
// offset: 'r',
|
||||
// anim: 'slideLeft',
|
||||
title: '新增',
|
||||
shade: 0.1,
|
||||
area: ['99%', '98%'],
|
||||
content: "/income/add"
|
||||
});
|
||||
}
|
||||
|
||||
// 工具栏
|
||||
function toolbar() {
|
||||
table.on('toolbar(tablelist)', function (obj) {
|
||||
switch (obj.event) {
|
||||
case 'add': add(); break;
|
||||
case 'refresh': refresh(); break;
|
||||
}
|
||||
});
|
||||
|
||||
function add(obj) {
|
||||
layer.open({
|
||||
type: 2,
|
||||
title: '新增',
|
||||
shade: 0.1,
|
||||
area: ['100%', '100%'],
|
||||
content: "/income/add"
|
||||
});
|
||||
}
|
||||
|
||||
function refresh() {
|
||||
table.reload('tablelist');
|
||||
}
|
||||
function refresh() {
|
||||
table.reload('tablelist');
|
||||
}
|
||||
|
||||
// 表格项操作按钮
|
||||
function tableActionTool() {
|
||||
table.on('tool(tablelist)', function (obj) {
|
||||
switch (obj.event) {
|
||||
case 'edit': edit(obj); break;
|
||||
}
|
||||
});
|
||||
|
||||
function edit(obj) {
|
||||
layer.open({
|
||||
type: 2,
|
||||
title: '修改',
|
||||
shade: 0.1,
|
||||
area: ['100%', '100%'],
|
||||
content: "/income/edit?id=" + obj.data['id']
|
||||
});
|
||||
table.on('tool(tablelist)', function (obj) {
|
||||
switch (obj.event) {
|
||||
case 'edit': edit(obj); break;
|
||||
}
|
||||
});
|
||||
|
||||
function edit(obj) {
|
||||
layer.open({
|
||||
type: 2,
|
||||
// offset: 'r',
|
||||
// anim: 'slideLeft',
|
||||
title: '修改',
|
||||
shade: 0.1,
|
||||
area: ['99%', '98%'],
|
||||
content: "/income/edit?id=" + obj.data['id']
|
||||
});
|
||||
}
|
||||
|
||||
// 搜索条件
|
||||
|
||||
@@ -4,45 +4,76 @@
|
||||
<head>
|
||||
<meta charset="utf-8">
|
||||
<meta name="viewport" content="width=device-width, initial-scale=1, maximum-scale=1">
|
||||
<title>登录 - management</title>
|
||||
<title>登录</title>
|
||||
<link rel="icon" type="image/x-icon" href="/statics/favicon.ico">
|
||||
<!-- 样 式 文 件 -->
|
||||
<link rel="stylesheet" href="/statics/component/pear/css/pear.css" />
|
||||
<link rel="stylesheet" href="/statics/admin/css/other/login.css" />
|
||||
<link rel="stylesheet" href="/statics/admin/css/variables.css" />
|
||||
<script>if (window.self != window.top) { top.location.reload(); }</script>
|
||||
</head>
|
||||
<!-- 代 码 结 构 -->
|
||||
|
||||
<body background="/statics/admin/images/background.svg" style="background-size: cover;">
|
||||
<form class="layui-form" action="javascript:void(0);">
|
||||
{{ .CsrfTokenField }}
|
||||
<div class="layui-form-item">
|
||||
<img class="logo" src="/statics/admin/images/logo.png" />
|
||||
<div class="title">Pear Admin</div>
|
||||
<body>
|
||||
<div class="login-page" style="background-image: url(/statics/admin/images/background.svg)">
|
||||
<div class="layui-row">
|
||||
<div class="layui-col-sm6 login-bg layui-hide-xs">
|
||||
<img class="login-bg-img" src="/statics/admin/images/banner.png" alt="" />
|
||||
</div>
|
||||
<div class="layui-col-sm6 layui-col-xs12 login-form">
|
||||
<div class="layui-form">
|
||||
<div class="form-center">
|
||||
<div class="form-center-box">
|
||||
<div class="top-log-title">
|
||||
<img class="top-log" src="/statics/favicon.ico" alt="" />
|
||||
<span>Pear Admin 4.0</span>
|
||||
</div>
|
||||
<div class="top-desc">
|
||||
以 超 乎 想 象 的 速 度 构 建 内 部 工 具
|
||||
</div>
|
||||
<div style="margin-top: 30px;">
|
||||
<div class="layui-form-item">
|
||||
<div class="layui-input-wrap">
|
||||
<div class="layui-input-prefix">
|
||||
<i class="layui-icon layui-icon-username"></i>
|
||||
</div>
|
||||
<input placeholder="邮 箱 " name="email" type="email" value="1185230223@qq.com"
|
||||
lay-verify="required" hover class="layui-input" />
|
||||
</div>
|
||||
</div>
|
||||
<div class="layui-form-item">
|
||||
<div class="layui-input-wrap">
|
||||
<div class="layui-input-prefix">
|
||||
<i class="layui-icon layui-icon-password"></i>
|
||||
</div>
|
||||
<input placeholder="密 码 " name="password" type="password" value="secret"
|
||||
lay-verify="required" hover class="layui-input" />
|
||||
</div>
|
||||
</div>
|
||||
<div class="tab-log-verification">
|
||||
<div class="verification-text">
|
||||
<div class="layui-input-wrap">
|
||||
<div class="layui-input-prefix">
|
||||
<i class="layui-icon layui-icon-auz"></i>
|
||||
</div>
|
||||
<input name="captcha" type="text" lay-verify="required" value=""
|
||||
placeholder="验证码" autocomplete="off" class="layui-input">
|
||||
<input type="hidden" id="captcha_id" name="captcha_id" />
|
||||
</div>
|
||||
</div>
|
||||
<img id="captcha" src="/captcha" class="verification-img"
|
||||
style="cursor: pointer;" />
|
||||
</div>
|
||||
<div class="login-btn" style="margin-top: 15px;">
|
||||
<button type="button" lay-submit lay-filter="login"
|
||||
class="layui-btn pear-btn-success login">
|
||||
登录</button>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
<div class="layui-form-item">
|
||||
<input placeholder="邮 箱 " name="email" type="email" value="1185230223@qq.com" lay-verify="required" hover
|
||||
class="layui-input" />
|
||||
</div>
|
||||
<div class="layui-form-item">
|
||||
<input placeholder="密 码 " name="password" type="password" value="secret" lay-verify="required" hover
|
||||
class="layui-input" />
|
||||
</div>
|
||||
<div class="layui-form-item" style="display: flex;">
|
||||
<input placeholder="验证码" name="captcha" type="text" lay-verify="required" hover class="layui-input"
|
||||
style="width: 200px;margin-right: 10px;" />
|
||||
<input type="hidden" id="captcha_id" name="captcha_id" />
|
||||
<img id="captcha" src="/captcha"
|
||||
style="cursor: pointer;background-color: #ffffff;border: 1px solid #eeeeee;width: 120px;height: 42px;" />
|
||||
</div>
|
||||
<!-- <div class="layui-form-item">
|
||||
<input type="checkbox" name="" title="记住密码" lay-skin="primary" checked>
|
||||
</div> -->
|
||||
<div class="layui-form-item">
|
||||
<button class="pear-btn pear-btn-success login" lay-submit lay-filter="login">
|
||||
登 入
|
||||
</button>
|
||||
</div>
|
||||
</form>
|
||||
</div>
|
||||
<!-- 资 源 引 入 -->
|
||||
<script src="/statics/component/layui/layui.js"></script>
|
||||
<script src="/statics/component/pear/pear.js"></script>
|
||||
@@ -72,12 +103,13 @@
|
||||
});
|
||||
});
|
||||
|
||||
// 登 录 提 交
|
||||
form.on('submit(login)', function (data) {
|
||||
|
||||
let loading = button.load({
|
||||
elem: '.login',
|
||||
});
|
||||
|
||||
data.field.csrf_token = '{{.CsrfToken}}';
|
||||
$.ajax({
|
||||
url: '/login',
|
||||
type: 'post',
|
||||
@@ -104,8 +136,6 @@
|
||||
});
|
||||
return false;
|
||||
});
|
||||
|
||||
|
||||
})
|
||||
</script>
|
||||
</body>
|
||||
|
||||
@@ -1,443 +1,423 @@
|
||||
<!DOCTYPE html>
|
||||
<html>
|
||||
{{template "header" .}}
|
||||
|
||||
<head>
|
||||
<meta charset="utf-8">
|
||||
<title>项目统计看板</title>
|
||||
<link rel="stylesheet" href="/statics/component/pear/css/pear.css" />
|
||||
<link rel="stylesheet" href="/statics/admin/css/other/result.css" />
|
||||
</head>
|
||||
|
||||
<body class="pear-container">
|
||||
|
||||
<div class="layui-card" style="margin-bottom: 10px;">
|
||||
<div class="layui-card-body">
|
||||
<form class="layui-form layui-form-pane">
|
||||
{{.CsrfTokenField}}
|
||||
<div class="layui-form-item">
|
||||
<div class="layui-form-item layui-inline">
|
||||
<div class="layui-input-inline">
|
||||
<select id="type">
|
||||
<option value="project">项目执行情况</option>
|
||||
<option value="budget">预算执行情况</option>
|
||||
</select>
|
||||
</div>
|
||||
</div>
|
||||
<div class="layui-form-item layui-inline">
|
||||
<label class="layui-form-label">
|
||||
项目
|
||||
</label>
|
||||
<div class="layui-input-inline">
|
||||
<select id="project">
|
||||
{{range .Projects}}
|
||||
<option value="{{.Value}}">{{.Name}}</option>
|
||||
{{end}}
|
||||
</select>
|
||||
</div>
|
||||
</div>
|
||||
<div class="layui-inline">
|
||||
<button type="button" class="pear-btn pear-btn-md pear-btn-primary" lay-submit
|
||||
lay-filter="user-query">
|
||||
<i class="layui-icon layui-icon-search"></i>
|
||||
查询
|
||||
</button>
|
||||
<div class="layui-card" style="margin-bottom: 10px;">
|
||||
<div class="layui-card-body">
|
||||
<form class="layui-form layui-form-pane">
|
||||
{{.CsrfTokenField}}
|
||||
<div class="layui-form-item">
|
||||
<div class="layui-form-item layui-inline">
|
||||
<div class="layui-input-inline">
|
||||
<select id="type" class="layui-input-sm">
|
||||
<option value="project">项目执行情况</option>
|
||||
<option value="budget">预算执行情况</option>
|
||||
</select>
|
||||
</div>
|
||||
</div>
|
||||
</form>
|
||||
</div>
|
||||
<div class="layui-form-item layui-inline">
|
||||
<label class="layui-form-label">
|
||||
项目
|
||||
</label>
|
||||
<div class="layui-input-inline">
|
||||
<select id="project" class="layui-input-sm">
|
||||
{{range .Projects}}
|
||||
<option value="{{.Value}}">{{.Name}}</option>
|
||||
{{end}}
|
||||
</select>
|
||||
</div>
|
||||
</div>
|
||||
<div class="layui-inline">
|
||||
<button type="button" class="layui-btn layui-btn-sm" lay-submit lay-filter="user-query">
|
||||
<i class="layui-icon layui-icon-search"></i>
|
||||
查询
|
||||
</button>
|
||||
</div>
|
||||
</div>
|
||||
</form>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div class="layui-row layui-col-space10">
|
||||
<div class="layui-col-xs6 layui-col-md3">
|
||||
<div class="layui-card top-panel">
|
||||
<div class="layui-card-header">项目收入</div>
|
||||
<div class="layui-card-body">
|
||||
<div class="layui-row layui-col-space5">
|
||||
<div class="layui-col-xs8 layui-col-md8 top-panel-number"
|
||||
style="color: #1E84FF;font-size: 28px;" id="projectIncome"></div>
|
||||
<div class="layui-col-xs4 layui-col-md4 top-panel-tips">
|
||||
<svg xmlns="http://www.w3.org/2000/svg" class="icon" viewBox="0 0 1024 1024" width="50"
|
||||
height="50" t="1591462258798" p-id="942" version="1.1">
|
||||
<path fill="#fcc66f"
|
||||
d="M 262.7 835 c -15.3 0 -28.1 -11.4 -29.8 -26.6 L 174.1 291 c -0.6 -5.1 1 -10.2 4.5 -14 s 8.3 -6 13.4 -6 h 640 c 5.1 0 10 2.2 13.4 6 s 5 8.9 4.5 14 l -58.8 517.4 c -1.7 15.2 -14.5 26.6 -29.8 26.6 H 262.7 Z"
|
||||
p-id="943" />
|
||||
<path fill="#ffd79c"
|
||||
d="M 802 289 l -58.8 517.4 c -0.7 6.1 -5.8 10.6 -11.9 10.6 h 30 c 6.1 0 11.2 -4.6 11.9 -10.6 L 832 289 h -30 Z"
|
||||
p-id="944" />
|
||||
<path fill="#f56e73"
|
||||
d="M 164 307 c -16.5 0 -30 -13.5 -30 -30 v -58 c 0 -16.5 13.5 -30 30 -30 h 696 c 16.5 0 30 13.5 30 30 v 58 c 0 16.5 -13.5 30 -30 30 H 164 Z"
|
||||
p-id="945" />
|
||||
<path fill="#ffa1a8"
|
||||
d="M 860 207 h -30 c 6.6 0 12 5.4 12 12 v 58 c 0 6.6 -5.4 12 -12 12 h 30 c 6.6 0 12 -5.4 12 -12 v -58 c 0 -6.6 -5.4 -12 -12 -12 Z"
|
||||
p-id="946" />
|
||||
<path fill="#65c8ff"
|
||||
d="M 190.9 651.5 c -31.4 0 -56.9 -25.5 -56.9 -56.9 V 219 c 0 -16.5 13.5 -30 30 -30 h 466.2 c 9.9 0 18 8.1 18 18 v 301.1 c 0 34.7 -28.2 62.9 -62.9 62.9 s -62.9 -28.2 -62.9 -62.9 V 393.5 c 0 -23.2 -18.8 -42 -42 -42 s -42 18.8 -42 42 v 68.1 c 0 29.4 -23.9 53.4 -53.4 53.4 s -53.4 -23.9 -53.4 -53.4 v -68.1 c 0 -23.2 -18.8 -42 -42 -42 s -42 18.8 -42 42 v 201.1 c 0.1 31.4 -25.4 56.9 -56.7 56.9 Z"
|
||||
p-id="947" />
|
||||
<path fill="#b3eaff"
|
||||
d="M 277.8 321.5 c -33.1 0 -60 26.9 -60 60 v 201.1 c 0 21.5 -17.4 38.9 -38.9 38.9 c -7.7 0 -14.8 -2.2 -20.8 -6.1 c 6.9 10.9 19 18.1 32.8 18.1 c 21.5 0 38.9 -17.4 38.9 -38.9 V 393.5 c 0 -33.1 26.9 -60 60 -60 c 13.5 0 25.9 4.5 36 12 c -11 -14.5 -28.4 -24 -48 -24 Z M 618.3 207 v 289.1 c 0 24.8 -20.1 44.9 -44.9 44.9 c -9.3 0 -18 -2.8 -25.2 -7.7 c 8.1 11.9 21.7 19.7 37.2 19.7 c 24.8 0 44.9 -20.1 44.9 -44.9 V 207 h -12 Z M 468.5 321.5 c -33.1 0 -60 26.9 -60 60 v 68.1 c 0 19.5 -15.8 35.4 -35.4 35.4 c -6.7 0 -12.9 -1.9 -18.3 -5.1 c 6.2 10.2 17.4 17.1 30.3 17.1 c 19.5 0 35.4 -15.8 35.4 -35.4 v -68.1 c 0 -33.1 26.9 -60 60 -60 c 13.5 0 25.9 4.5 36 12 c -11 -14.5 -28.4 -24 -48 -24 Z"
|
||||
p-id="948" />
|
||||
<path fill="#453b56" d="M 698 729.4 m -18 0 a 18 18 0 1 0 36 0 a 18 18 0 1 0 -36 0 Z"
|
||||
p-id="949" />
|
||||
<path fill="#453b56"
|
||||
d="M 860 171 H 632.5 v 0.1 c -0.7 0 -1.5 -0.1 -2.2 -0.1 H 164 c -26.5 0 -48 21.5 -48 48 v 375.6 c 0 41.3 33.6 74.9 74.9 74.9 c 2.7 0 5.4 -0.2 8.1 -0.5 l 16 141.4 c 2.8 24.3 23.3 42.6 47.7 42.6 h 498.6 c 24.4 0 44.9 -18.3 47.7 -42.6 l 55.2 -485.6 c 24.5 -2.1 43.8 -22.7 43.8 -47.8 v -58 c 0 -26.5 -21.5 -48 -48 -48 Z M 190.9 633.5 c -21.5 0 -38.9 -17.4 -38.9 -38.9 V 219 c 0 -6.6 5.4 -12 12 -12 h 466.3 v 301.1 c 0 24.8 -20.1 44.9 -44.9 44.9 c -24.8 0 -44.9 -20.1 -44.9 -44.9 V 393.5 c 0 -33.1 -26.9 -60 -60 -60 s -60 26.9 -60 60 v 68.1 c 0 19.5 -15.8 35.4 -35.4 35.4 c -19.5 0 -35.4 -15.8 -35.4 -35.4 v -68.1 c 0 -33.1 -26.9 -60 -60 -60 s -60 26.9 -60 60 v 201.1 c 0.1 21.5 -17.4 38.9 -38.8 38.9 Z m 582.3 172.9 c -0.7 6.1 -5.8 10.6 -11.9 10.6 H 262.7 c -6.1 0 -11.2 -4.6 -11.9 -10.6 l -6.7 -59 h 396.6 c 9.9 0 18 -8.1 18 -18 s -8.1 -18 -18 -18 H 240 l -6.3 -55.4 c 19.3 -13.6 32.1 -36 32.1 -61.3 V 393.5 c 0 -13.2 10.8 -24 24 -24 s 24 10.8 24 24 v 68.1 c 0 39.4 32 71.4 71.4 71.4 s 71.4 -32 71.4 -71.4 v -68.1 c 0 -13.2 10.8 -24 24 -24 s 24 10.8 24 24 v 114.6 c 0 44.6 36.3 80.9 80.9 80.9 c 44.6 0 80.9 -36.3 80.9 -80.9 V 325 h 161.7 l -54.9 481.4 Z M 872 277 c 0 6.6 -5.4 12 -12 12 H 666.3 v -82 H 860 c 6.6 0 12 5.4 12 12 v 58 Z"
|
||||
p-id="950" />
|
||||
</svg>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
<div class="layui-col-xs6 layui-col-md3">
|
||||
<div class="layui-card top-panel">
|
||||
<div class="layui-card-header">项目支出</div>
|
||||
<div class="layui-card-body">
|
||||
<div class="layui-row layui-col-space5">
|
||||
<div class="layui-col-xs8 layui-col-md8 top-panel-number"
|
||||
style="color: #1E84FF;font-size: 28px;" id="projectExpense"></div>
|
||||
<div class="layui-col-xs4 layui-col-md4 top-panel-tips">
|
||||
<svg t="1591462430908" class="icon" viewBox="0 0 1024 1024" version="1.1"
|
||||
xmlns="http://www.w3.org/2000/svg" p-id="3170" width="50" height="50">
|
||||
<path
|
||||
d="M532 784.2c0 24.4-19.8 44.3-44.3 44.3s-44.3-19.8-44.3-44.3c0-24.4 44.3-80.3 44.3-80.3s44.3 55.8 44.3 80.3zM766 784.2c0 24.4 19.8 44.3 44.3 44.3 24.4 0 44.3-19.8 44.3-44.3 0-24.4-44.3-80.3-44.3-80.3S766 759.7 766 784.2z"
|
||||
fill="#97DCFF" p-id="3171"></path>
|
||||
<path
|
||||
d="M123.5 471.3c-9.9 0-18-8.1-18-18v-302c0-9.9 8.1-18 18-18h58c9.9 0 18 8.1 18 18v302c0 9.9-8.1 18-18 18h-58z"
|
||||
fill="#FCC66F" p-id="3172"></path>
|
||||
<path
|
||||
d="M181.5 151.3v302h-58v-302h58m0-36h-58c-19.9 0-36 16.1-36 36v302c0 19.9 16.1 36 36 36h58c19.9 0 36-16.1 36-36v-302c0-19.8-16.1-36-36-36z"
|
||||
fill="#453B56" p-id="3173"></path>
|
||||
<path d="M266.4 210.7m-18 0a18 18 0 1 0 36 0 18 18 0 1 0-36 0Z" fill="#453B56"
|
||||
p-id="3174">
|
||||
</path>
|
||||
<path
|
||||
d="M430.8 641.1c-9.9 0-18-8.1-18-18v-21.6c0-130.3 106-236.3 236.3-236.3s236.3 106 236.3 236.3v21.6c0 9.9-8.1 18-18 18H430.8z"
|
||||
fill="#FCC66F" p-id="3175"></path>
|
||||
<path
|
||||
d="M649 383.2c-5 0-10 0.2-15 0.6 113.5 7.7 203.3 102.2 203.3 217.7v21.6h30v-21.6c0-120.6-97.7-218.3-218.3-218.3z"
|
||||
fill="#FFD79C" p-id="3176"></path>
|
||||
<path
|
||||
d="M419.6 694.4c-22.1 0-40.1-18-40.1-40.1s18-40.1 40.1-40.1h458.8c22.1 0 40.1 18 40.1 40.1s-18 40.1-40.1 40.1H419.6z"
|
||||
fill="#F56E73" p-id="3177"></path>
|
||||
<path
|
||||
d="M878.4 632.3h-30c12.2 0 22.1 9.9 22.1 22.1s-9.9 22.1-22.1 22.1h30c12.2 0 22.1-9.9 22.1-22.1s-9.9-22.1-22.1-22.1z"
|
||||
fill="#FFA1A8" p-id="3178"></path>
|
||||
<path
|
||||
d="M693.3 846.4c0 24.4-19.8 44.3-44.3 44.3-24.4 0-44.3-19.8-44.3-44.3s44.3-80.3 44.3-80.3 44.3 55.9 44.3 80.3z"
|
||||
fill="#97DCFF" p-id="3179"></path>
|
||||
<path
|
||||
d="M649 908.7c-34.3 0-62.3-27.9-62.3-62.3 0-28.5 36.9-77.2 48.1-91.4 3.4-4.3 8.6-6.8 14.1-6.8s10.7 2.5 14.1 6.8c11.3 14.2 48.1 62.9 48.1 91.4 0.2 34.3-27.8 62.3-62.1 62.3z m0-112.3c-14.1 20.4-26.3 41.9-26.3 50 0 14.5 11.8 26.3 26.3 26.3s26.3-11.8 26.3-26.3c0-8.1-12.1-29.6-26.3-50z"
|
||||
fill="#453B56" p-id="3180"></path>
|
||||
<path
|
||||
d="M903.3 601.9v-0.5c0-134.1-104.4-244.3-236.3-253.6v-30.7c0-68.7-55.9-124.6-124.6-124.6H326.5c-9.9 0-18 8.1-18 18s8.1 18 18 18h215.9c48.8 0 88.6 39.7 88.6 88.6v30.7c-131.8 9.3-236.3 119.4-236.3 253.6v0.5c-19.6 9.3-33.2 29.3-33.2 52.4 0 32 26 58.1 58.1 58.1H459c-14.8 21-33.5 51.5-33.5 71.8 0 34.3 27.9 62.3 62.3 62.3 34.3 0 62.2-27.9 62.2-62.3 0-20.3-18.6-50.7-33.5-71.8h264.9c-14.8 21-33.5 51.5-33.5 71.8 0 34.3 27.9 62.3 62.3 62.3 34.3 0 62.3-27.9 62.3-62.3 0-20.3-18.6-50.7-33.5-71.8h39.4c32 0 58.1-26 58.1-58.1 0-23.1-13.6-43-33.2-52.4zM487.8 810.4c-14.5 0-26.3-11.8-26.3-26.3 0-8.1 12.1-29.6 26.3-50 14.1 20.4 26.2 41.9 26.2 50 0 14.5-11.8 26.3-26.2 26.3z m322.5 0c-14.5 0-26.3-11.8-26.3-26.3 0-8.1 12.1-29.6 26.3-50 14.1 20.4 26.3 41.9 26.3 50-0.1 14.5-11.9 26.3-26.3 26.3zM649 383.2c118.8 0 215.4 94.9 218.1 213.1H430.9c2.8-118.1 99.3-213.1 218.1-213.1z m251.5 271.1c0 12.2-9.9 22.1-22.1 22.1H419.6c-12.2 0-22.1-9.9-22.1-22.1 0-12.2 9.9-22.1 22.1-22.1h458.8c12.2 0.1 22.1 10 22.1 22.1z"
|
||||
fill="#453B56" p-id="3181"></path>
|
||||
</svg>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
<div class="layui-col-xs6 layui-col-md3">
|
||||
<div class="layui-card top-panel">
|
||||
<div class="layui-card-header">项目利润</div>
|
||||
<div class="layui-card-body">
|
||||
<div class="layui-row layui-col-space5">
|
||||
<div class="layui-col-xs8 layui-col-md8 top-panel-number"
|
||||
style="color: #1E84FF;font-size: 28px;" id="projectProfit"></div>
|
||||
<div class="layui-col-xs4 layui-col-md4 top-panel-tips">
|
||||
<svg t="1591462464512" class="icon" viewBox="0 0 1024 1024" version="1.1"
|
||||
xmlns="http://www.w3.org/2000/svg" p-id="3311" width="50" height="50">
|
||||
<path
|
||||
d="M750.4 216.5h-130v-15.3c0-32.9-26.8-59.7-59.7-59.7h-97.3c-32.9 0-59.7 26.8-59.7 59.7v15.3h-130c-30.7 0-55.6 25-55.6 55.6v72.4c0 9.9 8.1 18 18 18h31.5v478c0 23.2 18.8 42 42 42h405c23.2 0 42-18.8 42-42v-478H788c9.9 0 18-8.1 18-18v-72.4c0-30.6-25-55.6-55.6-55.6z"
|
||||
fill="#FCC66F" p-id="3312"></path>
|
||||
<path d="M708.5 344.5v496c0 13.3-10.7 24-24 24h30c13.3 0 24-10.7 24-24v-496h-30z"
|
||||
fill="#FFD79C" p-id="3313"></path>
|
||||
<path
|
||||
d="M309.5 882.5c-23.2 0-42-18.8-42-42V596c0-9.9 8.1-18 18-18h36.8c30.2 0 54.8 24.6 54.8 54.8v231.7c0 9.9-8.1 18-18 18h-49.6zM664.9 882.5c-9.9 0-18-8.1-18-18V632.8c0-30.2 24.6-54.8 54.8-54.8h36.8c9.9 0 18 8.1 18 18v244.5c0 23.2-18.8 42-42 42h-49.6z"
|
||||
fill="#F56E73" p-id="3314"></path>
|
||||
<path d="M708.5 596v244.5c0 13.3-10.7 24-24 24h30c13.3 0 24-10.7 24-24V596h-30z"
|
||||
fill="#FFA1A8" p-id="3315"></path>
|
||||
<path
|
||||
d="M475.2 882.5c-9.9 0-18-8.1-18-18V632.8c0-30.2 24.6-54.8 54.8-54.8 30.2 0 54.8 24.6 54.8 54.8v231.7c0 9.9-8.1 18-18 18h-73.6z"
|
||||
fill="#F56E73" p-id="3316"></path>
|
||||
<path
|
||||
d="M560.7 159.5h-18c23 0 41.7 18.7 41.7 41.7V221h18v-19.8c-0.1-23-18.7-41.7-41.7-41.7zM750.4 234.5h-30c20.8 0 37.6 16.8 37.6 37.6v72.4h30v-72.4c0-20.8-16.8-37.6-37.6-37.6z"
|
||||
fill="#FFD79C" p-id="3317"></path>
|
||||
<path
|
||||
d="M750.4 198.5H638.2c-1.4-41.6-35.6-75-77.5-75h-97.3c-41.9 0-76.1 33.4-77.5 75H273.6c-40.6 0-73.6 33-73.6 73.6v72.4c0 19.9 16.1 36 36 36h13.5v460c0 33.1 26.9 60 60 60H714.7c33.1 0 60-26.9 60-60v-460H788c19.9 0 36-16.1 36-36v-72.4c0-40.6-33-73.6-73.6-73.6z m-287.1-39h97.3c22.1 0 40.2 17.2 41.5 39H421.8c1.4-21.8 19.4-39 41.5-39z m-104.2 705h-49.6c-13.3 0-24-10.7-24-24V596h36.8c20.3 0 36.8 16.5 36.8 36.8v231.7z m189.7 0h-73.6V632.8c0-20.3 16.5-36.8 36.8-36.8 20.3 0 36.8 16.5 36.8 36.8v231.7z m189.7-24c0 13.3-10.7 24-24 24h-49.6V632.8c0-20.3 16.5-36.8 36.8-36.8h36.8v244.5z m0-280.5h-36.8c-40.1 0-72.8 32.6-72.8 72.8v231.7h-44.2V632.8c0-40.1-32.6-72.8-72.8-72.8-40.1 0-72.8 32.6-72.8 72.8v231.7h-44.2V632.8c0-40.1-32.6-72.8-72.8-72.8h-36.8v-74.5h279c9.9 0 18-8.1 18-18s-8.1-18-18-18h-279v-69h453V560zM788 344.5H236v-72.4c0-20.8 16.8-37.6 37.6-37.6h476.8c20.8 0 37.6 16.8 37.6 37.6v72.4z"
|
||||
fill="#453B56" p-id="3318"></path>
|
||||
<path d="M621.8 467.5m-18 0a18 18 0 1 0 36 0 18 18 0 1 0-36 0Z" fill="#453B56"
|
||||
p-id="3319">
|
||||
</path>
|
||||
</svg>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
<div class="layui-col-xs6 layui-col-md3">
|
||||
<div class="layui-card top-panel">
|
||||
<div class="layui-card-header">项目利润率</div>
|
||||
<div class="layui-card-body">
|
||||
<div class="layui-row layui-col-space5">
|
||||
<div class="layui-col-xs8 layui-col-md8 top-panel-number"
|
||||
style="color: #1E84FF;font-size: 28px;" id="projectProfitRate"></div>
|
||||
<div class="layui-col-xs4 layui-col-md4 top-panel-tips">
|
||||
<svg t="1591462491887" class="icon" viewBox="0 0 1024 1024" version="1.1"
|
||||
xmlns="http://www.w3.org/2000/svg" p-id="3449" width="50" height="50">
|
||||
<path
|
||||
d="M363.2 807c-9.9 0-18-8.1-18-18v-75.5c0-9.9 8.1-18 18-18h108.5c9.9 0 18 8.1 18 18V789c0 9.9-8.1 18-18 18H363.2z"
|
||||
fill="#F56E73" p-id="3450"></path>
|
||||
<path d="M441.7 713.5h30V789h-30z" fill="#FFA1A8" p-id="3451"></path>
|
||||
<path
|
||||
d="M259.6 398c-9.9 0-18-8.1-18-18V178.6c0-23.8 19.3-43.1 43.1-43.1s43.1 19.3 43.1 43.1V380c0 9.9-8.1 18-18 18h-50.2zM525.1 398c-9.9 0-18-8.1-18-18V178.6c0-23.8 19.3-43.1 43.1-43.1s43.1 19.3 43.1 43.1V380c0 9.9-8.1 18-18 18h-50.2z"
|
||||
fill="#65C8FF" p-id="3452"></path>
|
||||
<path
|
||||
d="M550.2 153.5c-3.2 0-6.2 0.7-9 1.7 9.4 3.6 16.1 12.7 16.1 23.4V380h18V178.6c0.1-13.9-11.2-25.1-25.1-25.1z"
|
||||
fill="#97DCFF" p-id="3453"></path>
|
||||
<path
|
||||
d="M686 330.5H149c-9.9 0-18 8.1-18 18v63c0 9.9 8.1 18 18 18h33.2l45 225c8.7 43.4 47.1 75 91.4 75h197.6c44.3 0 82.7-31.5 91.4-75l45-225H686c9.9 0 18-8.1 18-18v-63c0-9.9-8.1-18-18-18z"
|
||||
fill="#FCC66F" p-id="3454"></path>
|
||||
<path
|
||||
d="M608 411.5L560.1 651c-7 35.2-37.9 60.5-73.8 60.5h30c35.9 0 66.7-25.3 73.8-60.5L638 411.5h-30zM656 348.5h30v63h-30z"
|
||||
fill="#FFD79C" p-id="3455"></path>
|
||||
<path d="M474.2 543.5m-18 0a18 18 0 1 0 36 0 18 18 0 1 0-36 0Z" fill="#453B56"
|
||||
p-id="3456">
|
||||
</path>
|
||||
<path
|
||||
d="M416.9 525.5h-125c-9.9 0-18 8.1-18 18s8.1 18 18 18h125c9.9 0 18-8.1 18-18s-8.1-18-18-18zM893 543.5h-33.4c-65.2 0-118.2 53-118.2 118.2v19.6c0 9.9 8.1 18 18 18s18-8.1 18-18v-19.6c0-45.3 36.9-82.2 82.2-82.2H893c9.9 0 18-8.1 18-18s-8-18-18-18zM772.2 744.2c7-7 7-18.4 0-25.5-7-7-18.4-7-25.5 0s-7 18.4 0 25.5 18.4 7.1 25.5 0z"
|
||||
fill="#453B56" p-id="3457"></path>
|
||||
<path
|
||||
d="M759.5 761.6c-9.9 0-18 8.1-18 18v11.6c0 43.7-35.6 79.3-79.3 79.3H487.3c-26.4 0-48.3-19.9-51.4-45.5h35.8c19.9 0 36-16.1 36-36v-41.5h8.6c52.8 0 98.7-37.6 109.1-89.4l42.1-210.6H686c19.9 0 36-16.1 36-36v-63c0-19.9-16.1-36-36-36h-74.6V178.6c0-33.7-27.4-61.1-61.1-61.1s-61.1 27.4-61.1 61.1v133.9H345.9V178.6c0-33.7-27.4-61.1-61.1-61.1s-61.1 27.4-61.1 61.1v133.9H149c-19.9 0-36 16.1-36 36v63c0 19.9 16.1 36 36 36h18.5l42.1 210.6c10.4 51.8 56.2 89.4 109.1 89.4h8.6V789c0 19.9 16.1 36 36 36h36.6c3.3 45.5 41.2 81.5 87.5 81.5h174.8c63.6 0 115.3-51.7 115.3-115.3v-11.6c0-10-8.1-18-18-18z m-234.4-583c0-13.9 11.2-25.1 25.1-25.1s25.1 11.2 25.1 25.1v133.9H525V178.6z m-265.5 0c0-13.9 11.2-25.1 25.1-25.1s25.1 11.2 25.1 25.1v133.9h-50.3V178.6zM149 411.5v-63h537v63H149z m169.7 300c-35.9 0-66.7-25.3-73.8-60.5l-40.7-203.5h426.6L590.1 651c-7 35.2-37.9 60.5-73.8 60.5H318.7z m44.5 77.5v-41.5h108.5V789H363.2z"
|
||||
fill="#453B56" p-id="3458"></path>
|
||||
</svg>
|
||||
</div>
|
||||
<div class="layui-row layui-col-space10">
|
||||
<div class="layui-col-xs6 layui-col-md3">
|
||||
<div class="layui-card top-panel">
|
||||
<div class="layui-card-header">项目收入</div>
|
||||
<div class="layui-card-body">
|
||||
<div class="layui-row layui-col-space5">
|
||||
<div class="layui-col-xs8 layui-col-md8 top-panel-number" style="color: #1E84FF;font-size: 28px;"
|
||||
id="projectIncome"></div>
|
||||
<div class="layui-col-xs4 layui-col-md4 top-panel-tips">
|
||||
<svg xmlns="http://www.w3.org/2000/svg" class="icon" viewBox="0 0 1024 1024" width="50"
|
||||
height="50" t="1591462258798" p-id="942" version="1.1">
|
||||
<path fill="#fcc66f"
|
||||
d="M 262.7 835 c -15.3 0 -28.1 -11.4 -29.8 -26.6 L 174.1 291 c -0.6 -5.1 1 -10.2 4.5 -14 s 8.3 -6 13.4 -6 h 640 c 5.1 0 10 2.2 13.4 6 s 5 8.9 4.5 14 l -58.8 517.4 c -1.7 15.2 -14.5 26.6 -29.8 26.6 H 262.7 Z"
|
||||
p-id="943" />
|
||||
<path fill="#ffd79c"
|
||||
d="M 802 289 l -58.8 517.4 c -0.7 6.1 -5.8 10.6 -11.9 10.6 h 30 c 6.1 0 11.2 -4.6 11.9 -10.6 L 832 289 h -30 Z"
|
||||
p-id="944" />
|
||||
<path fill="#f56e73"
|
||||
d="M 164 307 c -16.5 0 -30 -13.5 -30 -30 v -58 c 0 -16.5 13.5 -30 30 -30 h 696 c 16.5 0 30 13.5 30 30 v 58 c 0 16.5 -13.5 30 -30 30 H 164 Z"
|
||||
p-id="945" />
|
||||
<path fill="#ffa1a8"
|
||||
d="M 860 207 h -30 c 6.6 0 12 5.4 12 12 v 58 c 0 6.6 -5.4 12 -12 12 h 30 c 6.6 0 12 -5.4 12 -12 v -58 c 0 -6.6 -5.4 -12 -12 -12 Z"
|
||||
p-id="946" />
|
||||
<path fill="#65c8ff"
|
||||
d="M 190.9 651.5 c -31.4 0 -56.9 -25.5 -56.9 -56.9 V 219 c 0 -16.5 13.5 -30 30 -30 h 466.2 c 9.9 0 18 8.1 18 18 v 301.1 c 0 34.7 -28.2 62.9 -62.9 62.9 s -62.9 -28.2 -62.9 -62.9 V 393.5 c 0 -23.2 -18.8 -42 -42 -42 s -42 18.8 -42 42 v 68.1 c 0 29.4 -23.9 53.4 -53.4 53.4 s -53.4 -23.9 -53.4 -53.4 v -68.1 c 0 -23.2 -18.8 -42 -42 -42 s -42 18.8 -42 42 v 201.1 c 0.1 31.4 -25.4 56.9 -56.7 56.9 Z"
|
||||
p-id="947" />
|
||||
<path fill="#b3eaff"
|
||||
d="M 277.8 321.5 c -33.1 0 -60 26.9 -60 60 v 201.1 c 0 21.5 -17.4 38.9 -38.9 38.9 c -7.7 0 -14.8 -2.2 -20.8 -6.1 c 6.9 10.9 19 18.1 32.8 18.1 c 21.5 0 38.9 -17.4 38.9 -38.9 V 393.5 c 0 -33.1 26.9 -60 60 -60 c 13.5 0 25.9 4.5 36 12 c -11 -14.5 -28.4 -24 -48 -24 Z M 618.3 207 v 289.1 c 0 24.8 -20.1 44.9 -44.9 44.9 c -9.3 0 -18 -2.8 -25.2 -7.7 c 8.1 11.9 21.7 19.7 37.2 19.7 c 24.8 0 44.9 -20.1 44.9 -44.9 V 207 h -12 Z M 468.5 321.5 c -33.1 0 -60 26.9 -60 60 v 68.1 c 0 19.5 -15.8 35.4 -35.4 35.4 c -6.7 0 -12.9 -1.9 -18.3 -5.1 c 6.2 10.2 17.4 17.1 30.3 17.1 c 19.5 0 35.4 -15.8 35.4 -35.4 v -68.1 c 0 -33.1 26.9 -60 60 -60 c 13.5 0 25.9 4.5 36 12 c -11 -14.5 -28.4 -24 -48 -24 Z"
|
||||
p-id="948" />
|
||||
<path fill="#453b56" d="M 698 729.4 m -18 0 a 18 18 0 1 0 36 0 a 18 18 0 1 0 -36 0 Z"
|
||||
p-id="949" />
|
||||
<path fill="#453b56"
|
||||
d="M 860 171 H 632.5 v 0.1 c -0.7 0 -1.5 -0.1 -2.2 -0.1 H 164 c -26.5 0 -48 21.5 -48 48 v 375.6 c 0 41.3 33.6 74.9 74.9 74.9 c 2.7 0 5.4 -0.2 8.1 -0.5 l 16 141.4 c 2.8 24.3 23.3 42.6 47.7 42.6 h 498.6 c 24.4 0 44.9 -18.3 47.7 -42.6 l 55.2 -485.6 c 24.5 -2.1 43.8 -22.7 43.8 -47.8 v -58 c 0 -26.5 -21.5 -48 -48 -48 Z M 190.9 633.5 c -21.5 0 -38.9 -17.4 -38.9 -38.9 V 219 c 0 -6.6 5.4 -12 12 -12 h 466.3 v 301.1 c 0 24.8 -20.1 44.9 -44.9 44.9 c -24.8 0 -44.9 -20.1 -44.9 -44.9 V 393.5 c 0 -33.1 -26.9 -60 -60 -60 s -60 26.9 -60 60 v 68.1 c 0 19.5 -15.8 35.4 -35.4 35.4 c -19.5 0 -35.4 -15.8 -35.4 -35.4 v -68.1 c 0 -33.1 -26.9 -60 -60 -60 s -60 26.9 -60 60 v 201.1 c 0.1 21.5 -17.4 38.9 -38.8 38.9 Z m 582.3 172.9 c -0.7 6.1 -5.8 10.6 -11.9 10.6 H 262.7 c -6.1 0 -11.2 -4.6 -11.9 -10.6 l -6.7 -59 h 396.6 c 9.9 0 18 -8.1 18 -18 s -8.1 -18 -18 -18 H 240 l -6.3 -55.4 c 19.3 -13.6 32.1 -36 32.1 -61.3 V 393.5 c 0 -13.2 10.8 -24 24 -24 s 24 10.8 24 24 v 68.1 c 0 39.4 32 71.4 71.4 71.4 s 71.4 -32 71.4 -71.4 v -68.1 c 0 -13.2 10.8 -24 24 -24 s 24 10.8 24 24 v 114.6 c 0 44.6 36.3 80.9 80.9 80.9 c 44.6 0 80.9 -36.3 80.9 -80.9 V 325 h 161.7 l -54.9 481.4 Z M 872 277 c 0 6.6 -5.4 12 -12 12 H 666.3 v -82 H 860 c 6.6 0 12 5.4 12 12 v 58 Z"
|
||||
p-id="950" />
|
||||
</svg>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div class="layui-row layui-col-space10">
|
||||
<div class="layui-col-md4">
|
||||
<div class="layui-card">
|
||||
<div class="layui-card-body">
|
||||
<div id="project_income_expense" style="min-height:400px;"></div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
<div class="layui-col-md4">
|
||||
<div class="layui-card">
|
||||
<div class="layui-card-body">
|
||||
<div id="project_income" style="min-height:400px;"></div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
<div class="layui-col-md4">
|
||||
<div class="layui-card">
|
||||
<div class="layui-card-body">
|
||||
<div id="project_expense" style="min-height:400px;"></div>
|
||||
<div class="layui-col-xs6 layui-col-md3">
|
||||
<div class="layui-card top-panel">
|
||||
<div class="layui-card-header">项目支出</div>
|
||||
<div class="layui-card-body">
|
||||
<div class="layui-row layui-col-space5">
|
||||
<div class="layui-col-xs8 layui-col-md8 top-panel-number" style="color: #1E84FF;font-size: 28px;"
|
||||
id="projectExpense"></div>
|
||||
<div class="layui-col-xs4 layui-col-md4 top-panel-tips">
|
||||
<svg t="1591462430908" class="icon" viewBox="0 0 1024 1024" version="1.1"
|
||||
xmlns="http://www.w3.org/2000/svg" p-id="3170" width="50" height="50">
|
||||
<path
|
||||
d="M532 784.2c0 24.4-19.8 44.3-44.3 44.3s-44.3-19.8-44.3-44.3c0-24.4 44.3-80.3 44.3-80.3s44.3 55.8 44.3 80.3zM766 784.2c0 24.4 19.8 44.3 44.3 44.3 24.4 0 44.3-19.8 44.3-44.3 0-24.4-44.3-80.3-44.3-80.3S766 759.7 766 784.2z"
|
||||
fill="#97DCFF" p-id="3171"></path>
|
||||
<path
|
||||
d="M123.5 471.3c-9.9 0-18-8.1-18-18v-302c0-9.9 8.1-18 18-18h58c9.9 0 18 8.1 18 18v302c0 9.9-8.1 18-18 18h-58z"
|
||||
fill="#FCC66F" p-id="3172"></path>
|
||||
<path
|
||||
d="M181.5 151.3v302h-58v-302h58m0-36h-58c-19.9 0-36 16.1-36 36v302c0 19.9 16.1 36 36 36h58c19.9 0 36-16.1 36-36v-302c0-19.8-16.1-36-36-36z"
|
||||
fill="#453B56" p-id="3173"></path>
|
||||
<path d="M266.4 210.7m-18 0a18 18 0 1 0 36 0 18 18 0 1 0-36 0Z" fill="#453B56" p-id="3174">
|
||||
</path>
|
||||
<path
|
||||
d="M430.8 641.1c-9.9 0-18-8.1-18-18v-21.6c0-130.3 106-236.3 236.3-236.3s236.3 106 236.3 236.3v21.6c0 9.9-8.1 18-18 18H430.8z"
|
||||
fill="#FCC66F" p-id="3175"></path>
|
||||
<path
|
||||
d="M649 383.2c-5 0-10 0.2-15 0.6 113.5 7.7 203.3 102.2 203.3 217.7v21.6h30v-21.6c0-120.6-97.7-218.3-218.3-218.3z"
|
||||
fill="#FFD79C" p-id="3176"></path>
|
||||
<path
|
||||
d="M419.6 694.4c-22.1 0-40.1-18-40.1-40.1s18-40.1 40.1-40.1h458.8c22.1 0 40.1 18 40.1 40.1s-18 40.1-40.1 40.1H419.6z"
|
||||
fill="#F56E73" p-id="3177"></path>
|
||||
<path
|
||||
d="M878.4 632.3h-30c12.2 0 22.1 9.9 22.1 22.1s-9.9 22.1-22.1 22.1h30c12.2 0 22.1-9.9 22.1-22.1s-9.9-22.1-22.1-22.1z"
|
||||
fill="#FFA1A8" p-id="3178"></path>
|
||||
<path
|
||||
d="M693.3 846.4c0 24.4-19.8 44.3-44.3 44.3-24.4 0-44.3-19.8-44.3-44.3s44.3-80.3 44.3-80.3 44.3 55.9 44.3 80.3z"
|
||||
fill="#97DCFF" p-id="3179"></path>
|
||||
<path
|
||||
d="M649 908.7c-34.3 0-62.3-27.9-62.3-62.3 0-28.5 36.9-77.2 48.1-91.4 3.4-4.3 8.6-6.8 14.1-6.8s10.7 2.5 14.1 6.8c11.3 14.2 48.1 62.9 48.1 91.4 0.2 34.3-27.8 62.3-62.1 62.3z m0-112.3c-14.1 20.4-26.3 41.9-26.3 50 0 14.5 11.8 26.3 26.3 26.3s26.3-11.8 26.3-26.3c0-8.1-12.1-29.6-26.3-50z"
|
||||
fill="#453B56" p-id="3180"></path>
|
||||
<path
|
||||
d="M903.3 601.9v-0.5c0-134.1-104.4-244.3-236.3-253.6v-30.7c0-68.7-55.9-124.6-124.6-124.6H326.5c-9.9 0-18 8.1-18 18s8.1 18 18 18h215.9c48.8 0 88.6 39.7 88.6 88.6v30.7c-131.8 9.3-236.3 119.4-236.3 253.6v0.5c-19.6 9.3-33.2 29.3-33.2 52.4 0 32 26 58.1 58.1 58.1H459c-14.8 21-33.5 51.5-33.5 71.8 0 34.3 27.9 62.3 62.3 62.3 34.3 0 62.2-27.9 62.2-62.3 0-20.3-18.6-50.7-33.5-71.8h264.9c-14.8 21-33.5 51.5-33.5 71.8 0 34.3 27.9 62.3 62.3 62.3 34.3 0 62.3-27.9 62.3-62.3 0-20.3-18.6-50.7-33.5-71.8h39.4c32 0 58.1-26 58.1-58.1 0-23.1-13.6-43-33.2-52.4zM487.8 810.4c-14.5 0-26.3-11.8-26.3-26.3 0-8.1 12.1-29.6 26.3-50 14.1 20.4 26.2 41.9 26.2 50 0 14.5-11.8 26.3-26.2 26.3z m322.5 0c-14.5 0-26.3-11.8-26.3-26.3 0-8.1 12.1-29.6 26.3-50 14.1 20.4 26.3 41.9 26.3 50-0.1 14.5-11.9 26.3-26.3 26.3zM649 383.2c118.8 0 215.4 94.9 218.1 213.1H430.9c2.8-118.1 99.3-213.1 218.1-213.1z m251.5 271.1c0 12.2-9.9 22.1-22.1 22.1H419.6c-12.2 0-22.1-9.9-22.1-22.1 0-12.2 9.9-22.1 22.1-22.1h458.8c12.2 0.1 22.1 10 22.1 22.1z"
|
||||
fill="#453B56" p-id="3181"></path>
|
||||
</svg>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div class="layui-row layui-col-space10">
|
||||
<div class="layui-col-md12">
|
||||
<div class="layui-card">
|
||||
<div class="layui-card-header">收入列表</div>
|
||||
<div class="layui-card-body">
|
||||
<table id="income_list" lay-filter="income_list"></table>
|
||||
<div class="layui-col-xs6 layui-col-md3">
|
||||
<div class="layui-card top-panel">
|
||||
<div class="layui-card-header">项目利润</div>
|
||||
<div class="layui-card-body">
|
||||
<div class="layui-row layui-col-space5">
|
||||
<div class="layui-col-xs8 layui-col-md8 top-panel-number" style="color: #1E84FF;font-size: 28px;"
|
||||
id="projectProfit"></div>
|
||||
<div class="layui-col-xs4 layui-col-md4 top-panel-tips">
|
||||
<svg t="1591462464512" class="icon" viewBox="0 0 1024 1024" version="1.1"
|
||||
xmlns="http://www.w3.org/2000/svg" p-id="3311" width="50" height="50">
|
||||
<path
|
||||
d="M750.4 216.5h-130v-15.3c0-32.9-26.8-59.7-59.7-59.7h-97.3c-32.9 0-59.7 26.8-59.7 59.7v15.3h-130c-30.7 0-55.6 25-55.6 55.6v72.4c0 9.9 8.1 18 18 18h31.5v478c0 23.2 18.8 42 42 42h405c23.2 0 42-18.8 42-42v-478H788c9.9 0 18-8.1 18-18v-72.4c0-30.6-25-55.6-55.6-55.6z"
|
||||
fill="#FCC66F" p-id="3312"></path>
|
||||
<path d="M708.5 344.5v496c0 13.3-10.7 24-24 24h30c13.3 0 24-10.7 24-24v-496h-30z"
|
||||
fill="#FFD79C" p-id="3313"></path>
|
||||
<path
|
||||
d="M309.5 882.5c-23.2 0-42-18.8-42-42V596c0-9.9 8.1-18 18-18h36.8c30.2 0 54.8 24.6 54.8 54.8v231.7c0 9.9-8.1 18-18 18h-49.6zM664.9 882.5c-9.9 0-18-8.1-18-18V632.8c0-30.2 24.6-54.8 54.8-54.8h36.8c9.9 0 18 8.1 18 18v244.5c0 23.2-18.8 42-42 42h-49.6z"
|
||||
fill="#F56E73" p-id="3314"></path>
|
||||
<path d="M708.5 596v244.5c0 13.3-10.7 24-24 24h30c13.3 0 24-10.7 24-24V596h-30z"
|
||||
fill="#FFA1A8" p-id="3315"></path>
|
||||
<path
|
||||
d="M475.2 882.5c-9.9 0-18-8.1-18-18V632.8c0-30.2 24.6-54.8 54.8-54.8 30.2 0 54.8 24.6 54.8 54.8v231.7c0 9.9-8.1 18-18 18h-73.6z"
|
||||
fill="#F56E73" p-id="3316"></path>
|
||||
<path
|
||||
d="M560.7 159.5h-18c23 0 41.7 18.7 41.7 41.7V221h18v-19.8c-0.1-23-18.7-41.7-41.7-41.7zM750.4 234.5h-30c20.8 0 37.6 16.8 37.6 37.6v72.4h30v-72.4c0-20.8-16.8-37.6-37.6-37.6z"
|
||||
fill="#FFD79C" p-id="3317"></path>
|
||||
<path
|
||||
d="M750.4 198.5H638.2c-1.4-41.6-35.6-75-77.5-75h-97.3c-41.9 0-76.1 33.4-77.5 75H273.6c-40.6 0-73.6 33-73.6 73.6v72.4c0 19.9 16.1 36 36 36h13.5v460c0 33.1 26.9 60 60 60H714.7c33.1 0 60-26.9 60-60v-460H788c19.9 0 36-16.1 36-36v-72.4c0-40.6-33-73.6-73.6-73.6z m-287.1-39h97.3c22.1 0 40.2 17.2 41.5 39H421.8c1.4-21.8 19.4-39 41.5-39z m-104.2 705h-49.6c-13.3 0-24-10.7-24-24V596h36.8c20.3 0 36.8 16.5 36.8 36.8v231.7z m189.7 0h-73.6V632.8c0-20.3 16.5-36.8 36.8-36.8 20.3 0 36.8 16.5 36.8 36.8v231.7z m189.7-24c0 13.3-10.7 24-24 24h-49.6V632.8c0-20.3 16.5-36.8 36.8-36.8h36.8v244.5z m0-280.5h-36.8c-40.1 0-72.8 32.6-72.8 72.8v231.7h-44.2V632.8c0-40.1-32.6-72.8-72.8-72.8-40.1 0-72.8 32.6-72.8 72.8v231.7h-44.2V632.8c0-40.1-32.6-72.8-72.8-72.8h-36.8v-74.5h279c9.9 0 18-8.1 18-18s-8.1-18-18-18h-279v-69h453V560zM788 344.5H236v-72.4c0-20.8 16.8-37.6 37.6-37.6h476.8c20.8 0 37.6 16.8 37.6 37.6v72.4z"
|
||||
fill="#453B56" p-id="3318"></path>
|
||||
<path d="M621.8 467.5m-18 0a18 18 0 1 0 36 0 18 18 0 1 0-36 0Z" fill="#453B56" p-id="3319">
|
||||
</path>
|
||||
</svg>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div class="layui-row layui-col-space10">
|
||||
<div class="layui-col-md12">
|
||||
<div class="layui-card">
|
||||
<div class="layui-card-header">支出列表</div>
|
||||
<div class="layui-card-body">
|
||||
<table id="expense_list" lay-filter="expense_list"></table>
|
||||
<div class="layui-col-xs6 layui-col-md3">
|
||||
<div class="layui-card top-panel">
|
||||
<div class="layui-card-header">项目利润率</div>
|
||||
<div class="layui-card-body">
|
||||
<div class="layui-row layui-col-space5">
|
||||
<div class="layui-col-xs8 layui-col-md8 top-panel-number" style="color: #1E84FF;font-size: 28px;"
|
||||
id="projectProfitRate"></div>
|
||||
<div class="layui-col-xs4 layui-col-md4 top-panel-tips">
|
||||
<svg t="1591462491887" class="icon" viewBox="0 0 1024 1024" version="1.1"
|
||||
xmlns="http://www.w3.org/2000/svg" p-id="3449" width="50" height="50">
|
||||
<path
|
||||
d="M363.2 807c-9.9 0-18-8.1-18-18v-75.5c0-9.9 8.1-18 18-18h108.5c9.9 0 18 8.1 18 18V789c0 9.9-8.1 18-18 18H363.2z"
|
||||
fill="#F56E73" p-id="3450"></path>
|
||||
<path d="M441.7 713.5h30V789h-30z" fill="#FFA1A8" p-id="3451"></path>
|
||||
<path
|
||||
d="M259.6 398c-9.9 0-18-8.1-18-18V178.6c0-23.8 19.3-43.1 43.1-43.1s43.1 19.3 43.1 43.1V380c0 9.9-8.1 18-18 18h-50.2zM525.1 398c-9.9 0-18-8.1-18-18V178.6c0-23.8 19.3-43.1 43.1-43.1s43.1 19.3 43.1 43.1V380c0 9.9-8.1 18-18 18h-50.2z"
|
||||
fill="#65C8FF" p-id="3452"></path>
|
||||
<path
|
||||
d="M550.2 153.5c-3.2 0-6.2 0.7-9 1.7 9.4 3.6 16.1 12.7 16.1 23.4V380h18V178.6c0.1-13.9-11.2-25.1-25.1-25.1z"
|
||||
fill="#97DCFF" p-id="3453"></path>
|
||||
<path
|
||||
d="M686 330.5H149c-9.9 0-18 8.1-18 18v63c0 9.9 8.1 18 18 18h33.2l45 225c8.7 43.4 47.1 75 91.4 75h197.6c44.3 0 82.7-31.5 91.4-75l45-225H686c9.9 0 18-8.1 18-18v-63c0-9.9-8.1-18-18-18z"
|
||||
fill="#FCC66F" p-id="3454"></path>
|
||||
<path
|
||||
d="M608 411.5L560.1 651c-7 35.2-37.9 60.5-73.8 60.5h30c35.9 0 66.7-25.3 73.8-60.5L638 411.5h-30zM656 348.5h30v63h-30z"
|
||||
fill="#FFD79C" p-id="3455"></path>
|
||||
<path d="M474.2 543.5m-18 0a18 18 0 1 0 36 0 18 18 0 1 0-36 0Z" fill="#453B56" p-id="3456">
|
||||
</path>
|
||||
<path
|
||||
d="M416.9 525.5h-125c-9.9 0-18 8.1-18 18s8.1 18 18 18h125c9.9 0 18-8.1 18-18s-8.1-18-18-18zM893 543.5h-33.4c-65.2 0-118.2 53-118.2 118.2v19.6c0 9.9 8.1 18 18 18s18-8.1 18-18v-19.6c0-45.3 36.9-82.2 82.2-82.2H893c9.9 0 18-8.1 18-18s-8-18-18-18zM772.2 744.2c7-7 7-18.4 0-25.5-7-7-18.4-7-25.5 0s-7 18.4 0 25.5 18.4 7.1 25.5 0z"
|
||||
fill="#453B56" p-id="3457"></path>
|
||||
<path
|
||||
d="M759.5 761.6c-9.9 0-18 8.1-18 18v11.6c0 43.7-35.6 79.3-79.3 79.3H487.3c-26.4 0-48.3-19.9-51.4-45.5h35.8c19.9 0 36-16.1 36-36v-41.5h8.6c52.8 0 98.7-37.6 109.1-89.4l42.1-210.6H686c19.9 0 36-16.1 36-36v-63c0-19.9-16.1-36-36-36h-74.6V178.6c0-33.7-27.4-61.1-61.1-61.1s-61.1 27.4-61.1 61.1v133.9H345.9V178.6c0-33.7-27.4-61.1-61.1-61.1s-61.1 27.4-61.1 61.1v133.9H149c-19.9 0-36 16.1-36 36v63c0 19.9 16.1 36 36 36h18.5l42.1 210.6c10.4 51.8 56.2 89.4 109.1 89.4h8.6V789c0 19.9 16.1 36 36 36h36.6c3.3 45.5 41.2 81.5 87.5 81.5h174.8c63.6 0 115.3-51.7 115.3-115.3v-11.6c0-10-8.1-18-18-18z m-234.4-583c0-13.9 11.2-25.1 25.1-25.1s25.1 11.2 25.1 25.1v133.9H525V178.6z m-265.5 0c0-13.9 11.2-25.1 25.1-25.1s25.1 11.2 25.1 25.1v133.9h-50.3V178.6zM149 411.5v-63h537v63H149z m169.7 300c-35.9 0-66.7-25.3-73.8-60.5l-40.7-203.5h426.6L590.1 651c-7 35.2-37.9 60.5-73.8 60.5H318.7z m44.5 77.5v-41.5h108.5V789H363.2z"
|
||||
fill="#453B56" p-id="3458"></path>
|
||||
</svg>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<input type="hidden" id="csrf_token" value="{{.CsrfToken}}">
|
||||
<script src="/statics/component/layui/layui.js"></script>
|
||||
<script src="/statics/component/pear/pear.js"></script>
|
||||
<!-- <script src="/statics/script/project_income_expense.js"></script> -->
|
||||
<!-- <script src="/statics/script/project_income.js"></script> -->
|
||||
<!-- <script src="/statics/script/project_expense.js"></script> -->
|
||||
<script>
|
||||
layui.use(['table', 'form', 'jquery', 'laydate', 'dtree', 'xmSelect', 'util', 'echarts'], function () {
|
||||
let $ = layui.jquery;
|
||||
let table = layui.table;
|
||||
let form = layui.form;
|
||||
let dtree = layui.dtree;
|
||||
let xmSelect = layui.xmSelect;
|
||||
let util = layui.util;
|
||||
let laydate = layui.laydate;
|
||||
let echarts = layui.echarts;
|
||||
<div class="layui-row layui-col-space10">
|
||||
<div class="layui-col-md4">
|
||||
<div class="layui-card">
|
||||
<div class="layui-card-body">
|
||||
<div id="project_income_expense" style="min-height:400px;"></div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
<div class="layui-col-md4">
|
||||
<div class="layui-card">
|
||||
<div class="layui-card-body">
|
||||
<div id="project_income" style="min-height:400px;"></div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
<div class="layui-col-md4">
|
||||
<div class="layui-card">
|
||||
<div class="layui-card-body">
|
||||
<div id="project_expense" style="min-height:400px;"></div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
var pie = echarts.init(document.getElementById('project_income_expense'));
|
||||
var pi = echarts.init(document.getElementById('project_income'));
|
||||
var pe = echarts.init(document.getElementById('project_expense'));
|
||||
<div class="layui-row layui-col-space10">
|
||||
<div class="layui-col-md12">
|
||||
<div class="layui-card">
|
||||
<div class="layui-card-header">收入列表</div>
|
||||
<div class="layui-card-body">
|
||||
<table id="income_list" lay-filter="income_list"></table>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
search();
|
||||
getProject();
|
||||
projectInfo(getProject());
|
||||
loadIncomeList();
|
||||
loadExpenseList();
|
||||
<div class="layui-row layui-col-space10">
|
||||
<div class="layui-col-md12">
|
||||
<div class="layui-card">
|
||||
<div class="layui-card-header">支出列表</div>
|
||||
<div class="layui-card-body">
|
||||
<table id="expense_list" lay-filter="expense_list"></table>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
// 搜索
|
||||
function search() {
|
||||
form.on('submit(user-query)', function (data) {
|
||||
// table.reload('tablelist', {
|
||||
// where: getQueryParams(),
|
||||
// page: {
|
||||
// curr: 1
|
||||
// }
|
||||
// })
|
||||
var type = $('#type').val();
|
||||
if (type == 'project') {
|
||||
projectInfo(getProject());
|
||||
loadIncomeList();
|
||||
loadExpenseList();
|
||||
} else if (type == 'budget') {
|
||||
{{define "js"}}
|
||||
<script>
|
||||
layui.use(['table', 'form', 'jquery', 'laydate', 'xmSelect', 'util', 'echarts'], function () {
|
||||
let $ = layui.jquery;
|
||||
let table = layui.table;
|
||||
let form = layui.form;
|
||||
let xmSelect = layui.xmSelect;
|
||||
let util = layui.util;
|
||||
let laydate = layui.laydate;
|
||||
let echarts = layui.echarts;
|
||||
|
||||
}
|
||||
return false;
|
||||
});
|
||||
}
|
||||
var pie = echarts.init(document.getElementById('project_income_expense'));
|
||||
var pi = echarts.init(document.getElementById('project_income'));
|
||||
var pe = echarts.init(document.getElementById('project_expense'));
|
||||
|
||||
function projectInfo(projectId) {
|
||||
$.ajax({
|
||||
url: '/project/dashboard',
|
||||
type: 'POST',
|
||||
dataType: 'json',
|
||||
headers: { 'X-CSRF-Token': $('#csrf_token').val() },
|
||||
data: {
|
||||
'type': 'project',
|
||||
'projectID': projectId
|
||||
},
|
||||
success: function (res) {
|
||||
if (res.success) {
|
||||
let data = res.data;
|
||||
$('#projectIncome').text(data.project_income);
|
||||
$('#projectExpense').text(data.project_expense);
|
||||
$('#projectProfit').text(data.project_profit);
|
||||
$('#projectProfitRate').text(data.project_profit_rate);
|
||||
search();
|
||||
getProject();
|
||||
projectInfo(getProject());
|
||||
loadIncomeList();
|
||||
loadExpenseList();
|
||||
|
||||
pie.setOption(data.income_expense_echarts);
|
||||
pi.setOption(data.income_echarts);
|
||||
pe.setOption(data.expense_echarts);
|
||||
}
|
||||
},
|
||||
error: function (err) {
|
||||
console.log(err);
|
||||
}
|
||||
})
|
||||
}
|
||||
|
||||
window.onresize = function () {
|
||||
pie.resize();
|
||||
pi.resize();
|
||||
pe.resize();
|
||||
}
|
||||
|
||||
function getProject() {
|
||||
return $('#project').val();
|
||||
// $.ajax({
|
||||
// url: '/project/xmselect',
|
||||
// type: 'post',
|
||||
// dataType: 'json',
|
||||
// headers: { 'X-CSRF-Token': $('#csrf_token').val() },
|
||||
// success: function (res) {
|
||||
// xmSelect.render({
|
||||
// el: '#ProjectID',
|
||||
// // 工具栏
|
||||
// radio: true,
|
||||
// toolbar: {
|
||||
// show: true
|
||||
// },
|
||||
// tips: '请选择项目',
|
||||
// filterable: true,
|
||||
// data: res,
|
||||
// name: 'ProjectID',
|
||||
// on: function (data) {
|
||||
// // console.log(data);
|
||||
// // console.log(data.arr[0].value);
|
||||
// projectId = data.arr[0].value;
|
||||
// },
|
||||
// });
|
||||
// },
|
||||
// error: function (err) {
|
||||
// // 处理请求错误
|
||||
// console.log('请求出错:', err);
|
||||
// 搜索
|
||||
function search() {
|
||||
form.on('submit(user-query)', function (data) {
|
||||
// table.reload('tablelist', {
|
||||
// where: getQueryParams(),
|
||||
// page: {
|
||||
// curr: 1
|
||||
// }
|
||||
// });
|
||||
}
|
||||
// })
|
||||
var type = $('#type').val();
|
||||
if (type == 'project') {
|
||||
projectInfo(getProject());
|
||||
loadIncomeList();
|
||||
loadExpenseList();
|
||||
} else if (type == 'budget') {
|
||||
|
||||
// 加载列表
|
||||
function loadIncomeList() {
|
||||
table.render({
|
||||
elem: '#income_list',
|
||||
url: "/income/list",
|
||||
method: "POST",
|
||||
headers: { 'X-CSRF-Token': $('#csrf_token').val() },
|
||||
where: getIncomeQueryParams(),
|
||||
height: 'full',
|
||||
page: true,
|
||||
cols: [[
|
||||
{ field: 'id', title: '回款编号', align: 'left', fixed: 'left', width: 100 },
|
||||
{ field: 'project_name', title: '关联项目', align: 'left', width: 200 },
|
||||
{ field: 'budget_name', title: '关联预算', align: 'left', width: 200 },
|
||||
{ field: 'income_type_name', title: '回款类别', align: 'left', width: 100 },
|
||||
{ field: 'income_at', title: '回款时间', align: 'left', width: 160, templet: function (d) { return !d.income_at ? '' : util.toDateString(d.income_at) } },
|
||||
{ field: 'amount', title: '回款金额', align: 'left', width: 120 },
|
||||
]],
|
||||
skin: 'line',
|
||||
defaultToolbar: [],
|
||||
});
|
||||
}
|
||||
}
|
||||
return false;
|
||||
});
|
||||
}
|
||||
|
||||
function getIncomeQueryParams() {
|
||||
return {
|
||||
project: $('#project').val(),
|
||||
};
|
||||
}
|
||||
function projectInfo(projectId) {
|
||||
$.ajax({
|
||||
url: '/project/dashboard',
|
||||
type: 'POST',
|
||||
dataType: 'json',
|
||||
headers: { 'X-CSRF-Token': $('#csrf_token').val() },
|
||||
data: {
|
||||
'type': 'project',
|
||||
'projectID': projectId
|
||||
},
|
||||
success: function (res) {
|
||||
if (res.success) {
|
||||
let data = res.data;
|
||||
$('#projectIncome').text(data.project_income);
|
||||
$('#projectExpense').text(data.project_expense);
|
||||
$('#projectProfit').text(data.project_profit);
|
||||
$('#projectProfitRate').text(data.project_profit_rate);
|
||||
|
||||
function loadExpenseList() {
|
||||
table.render({
|
||||
elem: '#expense_list',
|
||||
url: "/expense/list",
|
||||
method: "POST",
|
||||
headers: { 'X-CSRF-Token': $('#csrf_token').val() },
|
||||
where: getExpenseQueryParams(),
|
||||
height: 'full',
|
||||
page: true,
|
||||
cols: [[
|
||||
{ field: 'id', title: '报销编号', align: 'left', fixed: 'left', width: 100 },
|
||||
{ field: 'project_name', title: '关联项目', align: 'left', width: 200 },
|
||||
{ field: 'budget_name', title: '关联预算', align: 'left', width: 200 },
|
||||
{ field: 'expenses_type_name', title: '报销类别', align: 'left', width: 100 },
|
||||
{ field: 'expenses_at', title: '报销时间', align: 'left', width: 160, templet: function (d) { return !d.expenses_at ? '' : util.toDateString(d.expenses_at) } },
|
||||
{ field: 'amount', title: '报销金额', align: 'left', width: 120 },
|
||||
]],
|
||||
skin: 'line',
|
||||
defaultToolbar: []
|
||||
});
|
||||
}
|
||||
pie.setOption(data.income_expense_echarts);
|
||||
pi.setOption(data.income_echarts);
|
||||
pe.setOption(data.expense_echarts);
|
||||
}
|
||||
},
|
||||
error: function (err) {
|
||||
console.log(err);
|
||||
}
|
||||
})
|
||||
}
|
||||
|
||||
function getExpenseQueryParams() {
|
||||
return {
|
||||
project: $('#project').val()
|
||||
};
|
||||
}
|
||||
window.onresize = function () {
|
||||
pie.resize();
|
||||
pi.resize();
|
||||
pe.resize();
|
||||
}
|
||||
|
||||
});
|
||||
</script>
|
||||
</body>
|
||||
function getProject() {
|
||||
return $('#project').val();
|
||||
// $.ajax({
|
||||
// url: '/project/xmselect',
|
||||
// type: 'post',
|
||||
// dataType: 'json',
|
||||
// headers: { 'X-CSRF-Token': $('#csrf_token').val() },
|
||||
// success: function (res) {
|
||||
// xmSelect.render({
|
||||
// el: '#ProjectID',
|
||||
// // 工具栏
|
||||
// radio: true,
|
||||
// toolbar: {
|
||||
// show: true
|
||||
// },
|
||||
// tips: '请选择项目',
|
||||
// filterable: true,
|
||||
// data: res,
|
||||
// name: 'ProjectID',
|
||||
// on: function (data) {
|
||||
// // console.log(data);
|
||||
// // console.log(data.arr[0].value);
|
||||
// projectId = data.arr[0].value;
|
||||
// },
|
||||
// });
|
||||
// },
|
||||
// error: function (err) {
|
||||
// // 处理请求错误
|
||||
// console.log('请求出错:', err);
|
||||
// }
|
||||
// });
|
||||
}
|
||||
|
||||
</html>
|
||||
// 加载列表
|
||||
function loadIncomeList() {
|
||||
table.render({
|
||||
elem: '#income_list',
|
||||
url: "/income/list",
|
||||
method: "POST",
|
||||
headers: { 'X-CSRF-Token': $('#csrf_token').val() },
|
||||
where: getIncomeQueryParams(),
|
||||
height: 'full',
|
||||
page: true,
|
||||
cols: [[
|
||||
{ field: 'id', title: '回款编号', align: 'left', fixed: 'left', width: 100 },
|
||||
{ field: 'project_name', title: '关联项目', align: 'left', width: 200 },
|
||||
{ field: 'budget_name', title: '关联预算', align: 'left', width: 200 },
|
||||
{ field: 'income_type_name', title: '回款类别', align: 'left', width: 100 },
|
||||
{ field: 'income_at', title: '回款时间', align: 'left', width: 160, templet: function (d) { return !d.income_at ? '' : util.toDateString(d.income_at) } },
|
||||
{ field: 'amount', title: '回款金额', align: 'left', width: 120 },
|
||||
]],
|
||||
skin: 'line',
|
||||
defaultToolbar: [],
|
||||
});
|
||||
}
|
||||
|
||||
function getIncomeQueryParams() {
|
||||
return {
|
||||
project: $('#project').val(),
|
||||
};
|
||||
}
|
||||
|
||||
function loadExpenseList() {
|
||||
table.render({
|
||||
elem: '#expense_list',
|
||||
url: "/expense/list",
|
||||
method: "POST",
|
||||
headers: { 'X-CSRF-Token': $('#csrf_token').val() },
|
||||
where: getExpenseQueryParams(),
|
||||
height: 'full',
|
||||
page: true,
|
||||
cols: [[
|
||||
{ field: 'id', title: '报销编号', align: 'left', fixed: 'left', width: 100 },
|
||||
{ field: 'project_name', title: '关联项目', align: 'left', width: 200 },
|
||||
{ field: 'budget_name', title: '关联预算', align: 'left', width: 200 },
|
||||
{ field: 'expenses_type_name', title: '报销类别', align: 'left', width: 100 },
|
||||
{ field: 'expenses_at', title: '报销时间', align: 'left', width: 160, templet: function (d) { return !d.expenses_at ? '' : util.toDateString(d.expenses_at) } },
|
||||
{ field: 'amount', title: '报销金额', align: 'left', width: 120 },
|
||||
]],
|
||||
skin: 'line',
|
||||
defaultToolbar: []
|
||||
});
|
||||
}
|
||||
|
||||
function getExpenseQueryParams() {
|
||||
return {
|
||||
project: $('#project').val()
|
||||
};
|
||||
}
|
||||
|
||||
});
|
||||
</script>
|
||||
{{end}}
|
||||
|
||||
{{template "footer" .}}
|
||||
@@ -1,12 +1,13 @@
|
||||
{{template "header"}}
|
||||
|
||||
<form class="layui-form" style="padding-bottom: 80px;">
|
||||
{{.CsrfTokenField}}
|
||||
<input type="hidden" id="ID" name="ID" value="{{.Item.ID}}" />
|
||||
<div class="edit-box">
|
||||
<form class="layui-form">
|
||||
{{.CsrfTokenField}}
|
||||
<input type="hidden" id="ID" name="ID" value="{{.Item.ID}}" />
|
||||
|
||||
<div class="layui-tab-content" style="padding-top: 0;">
|
||||
<div class="layui-tab-item layui-show">
|
||||
<!-- <div class="layui-card">
|
||||
<div class="layui-tab-content" style="padding-top: 0;">
|
||||
<div class="layui-tab-item layui-show">
|
||||
<!-- <div class="layui-card">
|
||||
<div class="layui-card-header">客户信息</div>
|
||||
<div class="layui-card-body">
|
||||
<div class="layui-form-item">
|
||||
@@ -15,158 +16,160 @@
|
||||
</div>
|
||||
</div>
|
||||
</div> -->
|
||||
<div class="layui-card">
|
||||
<div class="layui-card-header">客户信息</div>
|
||||
<div class="layui-card-body">
|
||||
<div class="layui-form-item">
|
||||
<div class="layui-form-label">选择客户</div>
|
||||
<div class="layui-input-inline">
|
||||
<button type="button" id="selectCustomer" class="layui-btn layui-btn-primary layui-border">
|
||||
<i class="layui-icon layui-icon-search"></i>
|
||||
选择数据
|
||||
</button>
|
||||
</div>
|
||||
<div class="layui-form-label">客户编号</div>
|
||||
<div class="layui-input-inline">
|
||||
<input type="text" id="CustomerID" name="CustomerID" value="{{.Item.CustomerID}}"
|
||||
lay-verify="required" readonly autocomplete="off" placeholder="请输入客户编号"
|
||||
class="layui-input" />
|
||||
</div>
|
||||
<div class="layui-form-label">客户名称</div>
|
||||
<div class="layui-input-inline">
|
||||
<input type="text" id="CustomerName" name="CustomerName" value="{{.Item.CustomerName}}"
|
||||
readonly autocomplete="off" placeholder="请输入客户名称" class="layui-input" />
|
||||
<div class="layui-card">
|
||||
<div class="layui-card-header layui-card-header-slipt">客户信息</div>
|
||||
<div class="layui-card-body">
|
||||
<div class="layui-form-item">
|
||||
<div class="layui-form-label">选择客户</div>
|
||||
<div class="layui-input-inline">
|
||||
<button type="button" id="selectCustomer"
|
||||
class="layui-btn layui-btn-primary layui-border">
|
||||
<i class="layui-icon layui-icon-search"></i>
|
||||
选择数据
|
||||
</button>
|
||||
</div>
|
||||
<div class="layui-form-label">客户编号</div>
|
||||
<div class="layui-input-inline">
|
||||
<input type="text" id="CustomerID" name="CustomerID" value="{{.Item.CustomerID}}"
|
||||
lay-verify="required" readonly autocomplete="off" placeholder="请输入客户编号"
|
||||
class="layui-input" />
|
||||
</div>
|
||||
<div class="layui-form-label">客户名称</div>
|
||||
<div class="layui-input-inline">
|
||||
<input type="text" id="CustomerName" name="CustomerName" value="{{.Item.CustomerName}}"
|
||||
readonly autocomplete="off" placeholder="请输入客户名称" class="layui-input" />
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div class="layui-card">
|
||||
<div class="layui-card-header">项目信息</div>
|
||||
<div class="layui-card-body">
|
||||
{{if .Item.ID}}
|
||||
<div class="layui-form-item">
|
||||
<div class="layui-form-label">编号</div>
|
||||
<div class="layui-form-label" style="width:400px;text-align:left;">
|
||||
{{.Item.ID}}
|
||||
<div class="layui-card">
|
||||
<div class="layui-card-header">项目信息</div>
|
||||
<div class="layui-card-body">
|
||||
{{if .Item.ID}}
|
||||
<div class="layui-form-item">
|
||||
<div class="layui-form-label">编号</div>
|
||||
<div class="layui-form-label" style="width:400px;text-align:left;">
|
||||
{{.Item.ID}}
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
{{end}}
|
||||
<div class="layui-form-item">
|
||||
<label class="layui-form-label">名称</label>
|
||||
<div class="layui-input-inline">
|
||||
<input type="text" id="Name" name="Name" value="{{.Item.Name}}" lay-verify="required"
|
||||
autocomplete="off" placeholder="请输入名称" class="layui-input" style="width:700px;" />
|
||||
{{end}}
|
||||
<div class="layui-form-item">
|
||||
<label class="layui-form-label">名称</label>
|
||||
<div class="layui-input-inline">
|
||||
<input type="text" id="Name" name="Name" value="{{.Item.Name}}" lay-verify="required"
|
||||
autocomplete="off" placeholder="请输入名称" class="layui-input" style="width:700px;" />
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
<div class="layui-form-item">
|
||||
<label class="layui-form-label">状态</label>
|
||||
<div class="layui-input-inline" style="width:600px;">
|
||||
{{range .Statuses}}
|
||||
{{if.Selected}}
|
||||
<input type="radio" name="Status" value="{{.Value}}" title="{{.Name}}" checked>
|
||||
{{else}}
|
||||
<input type="radio" name="Status" value="{{.Value}}" title="{{.Name}}">
|
||||
{{end}}
|
||||
{{end}}
|
||||
<div class="layui-form-item">
|
||||
<label class="layui-form-label">状态</label>
|
||||
<div class="layui-input-inline" style="width:600px;">
|
||||
{{range .Statuses}}
|
||||
{{if.Selected}}
|
||||
<input type="radio" name="Status" value="{{.Value}}" title="{{.Name}}" checked>
|
||||
{{else}}
|
||||
<input type="radio" name="Status" value="{{.Value}}" title="{{.Name}}">
|
||||
{{end}}
|
||||
{{end}}
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
<div class="layui-form-item">
|
||||
<label class="layui-form-label">开始时间</label>
|
||||
<div class="layui-input-inline">
|
||||
<input type="text" id="StartAt" name="StartAt" value="{{.Item.StartAt}}"
|
||||
lay-verify="required" autocomplete="off" placeholder="请输入名称" class="layui-input" />
|
||||
<div class="layui-form-item">
|
||||
<label class="layui-form-label">开始时间</label>
|
||||
<div class="layui-input-inline">
|
||||
<input type="text" id="StartAt" name="StartAt" value="{{.Item.StartAt}}"
|
||||
lay-verify="required" autocomplete="off" placeholder="请输入名称" class="layui-input" />
|
||||
</div>
|
||||
<label class="layui-form-label">结束时间</label>
|
||||
<div class="layui-input-inline">
|
||||
<input type="text" id="EndAt" name="EndAt" value="{{.Item.EndAt}}" lay-verify="required"
|
||||
autocomplete="off" placeholder="请输入名称" class="layui-input" />
|
||||
</div>
|
||||
</div>
|
||||
<label class="layui-form-label">结束时间</label>
|
||||
<div class="layui-input-inline">
|
||||
<input type="text" id="EndAt" name="EndAt" value="{{.Item.EndAt}}" lay-verify="required"
|
||||
autocomplete="off" placeholder="请输入名称" class="layui-input" />
|
||||
<div class="layui-form-item">
|
||||
<label class="layui-form-label">总金额</label>
|
||||
<div class="layui-input-inline">
|
||||
<input type="text" id="TotalMoney" name="TotalMoney" value="{{.Item.TotalMoney}}"
|
||||
lay-verify="required" autocomplete="off" placeholder="请输入总金额" class="layui-input" />
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
<div class="layui-form-item">
|
||||
<label class="layui-form-label">总金额</label>
|
||||
<div class="layui-input-inline">
|
||||
<input type="text" id="TotalMoney" name="TotalMoney" value="{{.Item.TotalMoney}}"
|
||||
lay-verify="required" autocomplete="off" placeholder="请输入总金额" class="layui-input" />
|
||||
<div class="layui-form-item">
|
||||
<label class="layui-form-label">简介</label>
|
||||
<div class="layui-input-inline">
|
||||
<textarea id="Description" name="Description" class="layui-textarea"
|
||||
style="width: 600px; height: 60px;">{{.Item.Description}}</textarea>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
<div class="layui-form-item">
|
||||
<label class="layui-form-label">简介</label>
|
||||
<div class="layui-input-inline">
|
||||
<textarea id="Description" name="Description" class="layui-textarea"
|
||||
style="width: 600px; height: 60px;">{{.Item.Description}}</textarea>
|
||||
</div>
|
||||
</div>
|
||||
<div class="layui-form-item">
|
||||
<label class="layui-form-label">物料</label>
|
||||
<div class="layui-input-inline" style="width: auto;">
|
||||
{{template "upload_mutil" .Item.ProjectFiles}}
|
||||
<div class="layui-form-item">
|
||||
<label class="layui-form-label">物料</label>
|
||||
<div class="layui-input-inline" style="width: auto;">
|
||||
{{template "upload_mutil" .Item.ProjectFiles}}
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div class="layui-card">
|
||||
<div class="layui-card-header">项目团队</div>
|
||||
<div class="layui-card-body">
|
||||
<div class="layui-form-item">
|
||||
<div class="layui-form-label">项目经理</div>
|
||||
<div class="layui-input-inline" id="ManagerID" style="width: 400px;"></div>
|
||||
<div class="layui-form-label">项目成员</div>
|
||||
<div class="layui-input-inline" id="Members" style="width: 400px;"></div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div class="layui-card">
|
||||
<div class="layui-card-header">申请信息</div>
|
||||
<div class="layui-card-body">
|
||||
<div class="layui-form-item">
|
||||
<div class="layui-form-label">申请人</div>
|
||||
<div class="layui-input-inline" id="ApplyUserID" style="width: 400px;"></div>
|
||||
<label class="layui-form-label">申请时间</label>
|
||||
<div class="layui-input-inline">
|
||||
<input type="text" id="ApplyAt" name="ApplyAt" value="{{.Item.ApplyAt}}"
|
||||
lay-verify="required" autocomplete="off" class="layui-input" />
|
||||
<div class="layui-card">
|
||||
<div class="layui-card-header">项目团队</div>
|
||||
<div class="layui-card-body">
|
||||
<div class="layui-form-item">
|
||||
<div class="layui-form-label">项目经理</div>
|
||||
<div class="layui-input-inline" id="ManagerID" style="width: 400px;"></div>
|
||||
<div class="layui-form-label">项目成员</div>
|
||||
<div class="layui-input-inline" id="Members" style="width: 400px;"></div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div class="layui-card">
|
||||
<div class="layui-card-header">其他</div>
|
||||
<div class="layui-card-body">
|
||||
{{if .Item.ID}}
|
||||
<div class="layui-form-item">
|
||||
<div class="layui-form-label">创建</div>
|
||||
<div class="layui-form-label" style="width:400px;text-align:left;">
|
||||
{{.Item.CreatedName}}
|
||||
({{dateFormat .Item.CreatedAt}})
|
||||
<div class="layui-card">
|
||||
<div class="layui-card-header">申请信息</div>
|
||||
<div class="layui-card-body">
|
||||
<div class="layui-form-item">
|
||||
<div class="layui-form-label">申请人</div>
|
||||
<div class="layui-input-inline" id="ApplyUserID" style="width: 400px;"></div>
|
||||
<label class="layui-form-label">申请时间</label>
|
||||
<div class="layui-input-inline">
|
||||
<input type="text" id="ApplyAt" name="ApplyAt" value="{{.Item.ApplyAt}}"
|
||||
lay-verify="required" autocomplete="off" class="layui-input" />
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
<div class="layui-form-item">
|
||||
<div class="layui-form-label">更新</div>
|
||||
<div class="layui-form-label" style="width:400px;text-align:left;">
|
||||
{{.Item.UpdatedName}}
|
||||
({{dateFormat .Item.UpdatedAt}})
|
||||
</div>
|
||||
|
||||
<div class="layui-card">
|
||||
<div class="layui-card-header">其他</div>
|
||||
<div class="layui-card-body">
|
||||
{{if .Item.ID}}
|
||||
<div class="layui-form-item">
|
||||
<div class="layui-form-label">创建</div>
|
||||
<div class="layui-form-label" style="width:400px;text-align:left;">
|
||||
{{.Item.CreatedName}}
|
||||
({{dateFormat .Item.CreatedAt}})
|
||||
</div>
|
||||
</div>
|
||||
<div class="layui-form-item">
|
||||
<div class="layui-form-label">更新</div>
|
||||
<div class="layui-form-label" style="width:400px;text-align:left;">
|
||||
{{.Item.UpdatedName}}
|
||||
({{dateFormat .Item.UpdatedAt}})
|
||||
</div>
|
||||
</div>
|
||||
{{end}}
|
||||
</div>
|
||||
{{end}}
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div class="layui-form-item layui-fixbar btn-fixbar-box">
|
||||
<div class="layui-input-block">
|
||||
{{ submitBtn .AuthorizeMenus "save"}}
|
||||
<button type="button" class="pear-btn pear-btn-sm" lay-on="close">
|
||||
<i class="layui-icon layui-icon-close"></i>关闭
|
||||
</button>
|
||||
<div class="layui-form-item layui-fixbar btn-fixbar-box">
|
||||
<div class="layui-input-block">
|
||||
{{ submitBtn .AuthorizeMenus "save"}}
|
||||
<button type="button" class="layui-btn layui-btn-primary" lay-on="close">
|
||||
<i class="layui-icon layui-icon-close"></i>关闭
|
||||
</button>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
</form>
|
||||
</form>
|
||||
</div>
|
||||
|
||||
{{define "css"}}
|
||||
<style>
|
||||
@@ -363,7 +366,10 @@
|
||||
url: "/customer/list",
|
||||
method: "POST",
|
||||
headers: { 'X-CSRF-Token': $('#csrf_token').val() },
|
||||
height: 'full',
|
||||
//height: 'full',
|
||||
height: function () {
|
||||
return $(window).height() - 135;
|
||||
},
|
||||
page: true,
|
||||
cols: [[
|
||||
{ field: 'name', title: '名称', align: 'left', fixed: 'left', width: 200 },
|
||||
|
||||
@@ -1,95 +1,80 @@
|
||||
{{template "header"}}
|
||||
{{template "header" .}}
|
||||
|
||||
<div class="layui-row layui-col-space15">
|
||||
<div class="layui-collapse">
|
||||
<div class="layui-colla-item">
|
||||
<div class="layui-colla-title">查询</div>
|
||||
<div class="layui-colla-content layui-show">
|
||||
<div class="layui-card">
|
||||
<div class="layui-card-body">
|
||||
<form class="layui-form layui-form-pane" action="">
|
||||
{{.CsrfTokenField}}
|
||||
<div class="layui-form-item">
|
||||
<div class="layui-form-item layui-inline">
|
||||
<label class="layui-form-label" style="overflow:visible;padding:0;width:110px;">
|
||||
<select id="SearchTimeType">
|
||||
<option value="CreateTime">创建时间</option>
|
||||
</select>
|
||||
</label>
|
||||
<div class="layui-input-inline" style="width:150px;">
|
||||
<input type="text" class="layui-input" id="timeBegin" placeholder="yyyy-MM-dd"
|
||||
readonly value="{{ yearBegin }}" />
|
||||
</div>
|
||||
<div class="layui-input-inline"
|
||||
style="width:10px;line-height:30px;margin-right:5px">
|
||||
-
|
||||
</div>
|
||||
<div class="layui-input-inline" style="width:150px;">
|
||||
<input type="text" class="layui-input " id="timeEnd" placeholder="yyyy-MM-dd"
|
||||
readonly value="{{ monthEnd }}" />
|
||||
</div>
|
||||
</div>
|
||||
<div class="layui-form-item layui-inline">
|
||||
<label class="layui-form-label">
|
||||
状态
|
||||
</label>
|
||||
<div class="layui-input-inline">
|
||||
<select id="status">
|
||||
<option value="9999">请选择</option>
|
||||
{{range .Statuses}}
|
||||
<option value="{{.Value}}">{{.Name}}</option>
|
||||
{{end}}
|
||||
</select>
|
||||
</div>
|
||||
</div>
|
||||
<div class="layui-inline">
|
||||
<input type="text" id="title" placeholder="" class="layui-input">
|
||||
</div>
|
||||
<div class="layui-inline">
|
||||
<button type="button" class="pear-btn pear-btn-md pear-btn-primary" lay-submit
|
||||
lay-filter="user-query">
|
||||
<i class="layui-icon layui-icon-search"></i>
|
||||
查询
|
||||
</button>
|
||||
<button type="reset" class="pear-btn pear-btn-md" lay-submit
|
||||
lay-filter="user-reset">
|
||||
<i class="layui-icon layui-icon-refresh"></i>
|
||||
重置
|
||||
</button>
|
||||
</div>
|
||||
</div>
|
||||
</form>
|
||||
</div>
|
||||
</div>
|
||||
<!-- 工具栏 -->
|
||||
<script id="toolbar" type="text/html">
|
||||
{{ genBtn .AuthorizeMenus "add"}}
|
||||
<button type="button" lay-event="search" lay-on="search" class="layui-btn layui-btn-primary layui-btn-sm">
|
||||
<i class="layui-icon layui-icon-search"></i>
|
||||
</button>
|
||||
</script>
|
||||
<!-- 操作栏 -->
|
||||
<script type="text/html" id="actionBox">
|
||||
{{ genLink .AuthorizeMenus "edit"}}
|
||||
</script>
|
||||
|
||||
<div class="search-layer" id="search-layer" style="display: none;">
|
||||
<div class="layui-form layui-row">
|
||||
<div class="layui-col-xs12 layui-col-sm12 layui-col-md4">
|
||||
<div class="layui-form-column">
|
||||
<label class="tips">开始时间</label>
|
||||
<input type="text" name="timeBegin" id="timeBegin" placeholder="yyyy-MM-dd" readonly
|
||||
value="{{ yearBegin }}" class="layui-input" />
|
||||
</div>
|
||||
</div>
|
||||
<div class="layui-col-xs12 layui-col-sm12 layui-col-md4">
|
||||
<div class="layui-form-column">
|
||||
<label class="tips">结束时间</label>
|
||||
<input type="text" name="timeEnd" id="timeEnd" placeholder="yyyy-MM-dd" readonly value="{{ monthEnd }}"
|
||||
class="layui-input" />
|
||||
</div>
|
||||
</div>
|
||||
<div class="layui-col-xs12 layui-col-sm12 layui-col-md4">
|
||||
<div class="layui-form-column">
|
||||
<label class="tips">项目名称</label>
|
||||
<input type="text" name="title" id="title" placeholder="请输入项目名称" autocomplete="off" class="layui-input">
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
<div class="layui-form layui-row">
|
||||
<div class="layui-col-xs12 layui-col-sm12 layui-col-md4">
|
||||
<div class="layui-form-column">
|
||||
<label class="tips">项目编号</label>
|
||||
<input type="text" name="sid" id="sid" placeholder="请输入项目编号" autocomplete="off" class="layui-input">
|
||||
</div>
|
||||
</div>
|
||||
<div class="layui-col-xs12 layui-col-sm12 layui-col-md4">
|
||||
<div class="layui-form-column">
|
||||
<label class="tips">客户名称</label>
|
||||
<input type="text" name="customer_name" id="customer_name" placeholder="请输入客户名称" autocomplete="off"
|
||||
class="layui-input">
|
||||
</div>
|
||||
</div>
|
||||
<div class="layui-col-xs12 layui-col-sm12 layui-col-md4">
|
||||
<div class="layui-form-column">
|
||||
<label class="tips">项目状态</label>
|
||||
<select name="status" id="status">
|
||||
<option value="9999">请选择</option>
|
||||
{{range.Statuses}}
|
||||
<option value="{{.Value}}">{{.Name}}</option>
|
||||
{{end}}
|
||||
</select>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<!-- 工具栏 -->
|
||||
<script id="toolbar" type="text/html">
|
||||
{{ genBtn .AuthorizeMenus "add"}}
|
||||
</script>
|
||||
|
||||
<div class="layui-card" style="margin-top: 15px;">
|
||||
<div class="layui-card-body">
|
||||
<table id="tablelist" lay-filter="tablelist"></table>
|
||||
</div>
|
||||
<div class="layui-panel">
|
||||
<table id="tablelist" lay-filter="tablelist"></table>
|
||||
</div>
|
||||
|
||||
<script type="text/html" id="actionBox">
|
||||
{{ genLink .AuthorizeMenus "edit" "chapterlist"}}
|
||||
</script>
|
||||
|
||||
{{define "js"}}
|
||||
<script>
|
||||
layui.use(['table', 'form', 'jquery', 'laydate', 'dtree', 'util'], function () {
|
||||
layui.use(['table', 'form', 'jquery', 'laydate', 'util'], function () {
|
||||
let table = layui.table;
|
||||
let form = layui.form;
|
||||
let $ = layui.jquery;
|
||||
let util = layui.util;
|
||||
let laydate = layui.laydate;
|
||||
let dtree = layui.dtree;
|
||||
|
||||
/**开始时间 */
|
||||
laydate.render({
|
||||
@@ -115,100 +100,129 @@
|
||||
}
|
||||
});
|
||||
|
||||
loadList();
|
||||
toolbar();
|
||||
tableActionTool();
|
||||
search();
|
||||
|
||||
// 加载列表
|
||||
function loadList() {
|
||||
table.render({
|
||||
elem: '#tablelist',
|
||||
url: "/project/list",
|
||||
method: "POST",
|
||||
headers: { 'X-CSRF-Token': $('#csrf_token').val() },
|
||||
where: getQueryParams(),
|
||||
height: 'full',
|
||||
page: true,
|
||||
cols: [[
|
||||
{ field: 'name', title: '项目名称', align: 'left', fixed: 'left', width: 200 },
|
||||
{
|
||||
field: 'status_name', title: '项目状态', align: 'left', fixed: 'left', width: 90, templet: function (d) {
|
||||
return '<span style="display:inline-block;color:green">' + d.status_name + '</span>';
|
||||
}
|
||||
},
|
||||
{ field: 'sid', title: '项目编号', align: 'left', width: 170 },
|
||||
{ field: 'customer_name', title: '客户名称', align: 'left', width: 200 },
|
||||
{ field: 'total_money', title: '总金额', align: 'left', width: 120 },
|
||||
{ field: 'start_at', title: '项目开始时间', align: 'center', width: 160, templet: function (d) { return !d.created_at ? '' : util.toDateString(d.created_at) } },
|
||||
{ field: 'end_at', title: '项目结束时间', align: 'center', width: 160, templet: function (d) { return !d.created_at ? '' : util.toDateString(d.created_at) } },
|
||||
{ field: 'apply_name', title: '申请人', align: 'left', width: 120 },
|
||||
{ field: 'apply_at', title: '申请时间', align: 'center', width: 160, templet: function (d) { return !d.created_at ? '' : util.toDateString(d.created_at) } },
|
||||
{ field: 'manager_name', title: '项目经理', align: 'left', width: 90 },
|
||||
{ field: 'member_names', title: '项目成员', align: 'left', width: 160 },
|
||||
{ field: 'sort', title: '排序', align: 'center', width: 80 },
|
||||
{ field: 'created_at', title: '创建时间', align: 'center', width: 160, templet: function (d) { return !d.created_at ? '' : util.toDateString(d.created_at) } },
|
||||
{ field: 'created_name', title: '创建人', align: 'center', width: 100 },
|
||||
{ field: 'updated_at', title: '更新时间', align: 'center', width: 160, templet: function (d) { return !d.updated_at ? '' : util.toDateString(d.updated_at) } },
|
||||
{ field: 'updated_name', title: '更新人', align: 'center', width: 100 },
|
||||
{ title: '操作', toolbar: '#actionBox', align: 'center', fixed: 'right', width: 100 },
|
||||
]],
|
||||
skin: 'grid',
|
||||
toolbar: '#toolbar',
|
||||
defaultToolbar: [{
|
||||
title: '刷新',
|
||||
layEvent: 'refresh',
|
||||
icon: 'layui-icon-refresh',
|
||||
}, 'filter', 'exports'],
|
||||
request: {
|
||||
pageName: 'page',
|
||||
limitName: 'rows'
|
||||
table.render({
|
||||
elem: '#tablelist',
|
||||
url: "/project/list",
|
||||
method: "POST",
|
||||
headers: { 'X-CSRF-Token': $('#csrf_token').val() },
|
||||
where: getQueryParams(),
|
||||
// height: 'full-100',
|
||||
height: function () {
|
||||
return $(window).height() - 22;
|
||||
},
|
||||
page: true,
|
||||
limit: 15,
|
||||
limits: [15, 30, 45, 60, 75, 90],
|
||||
cols: [[
|
||||
{ field: 'name', title: '项目名称', align: 'left', fixed: 'left', width: 200 },
|
||||
{
|
||||
field: 'status_name', title: '项目状态', align: 'left', fixed: 'left', width: 90, templet: function (d) {
|
||||
return '<span style="display:inline-block;color:green">' + d.status_name + '</span>';
|
||||
}
|
||||
},
|
||||
{ field: 'sid', title: '项目编号', align: 'left', width: 170 },
|
||||
{ field: 'customer_name', title: '客户名称', align: 'left', width: 200 },
|
||||
{ field: 'total_money', title: '总金额', align: 'left', width: 120 },
|
||||
{ field: 'start_at', title: '项目开始时间', align: 'center', width: 160, templet: function (d) { return !d.created_at ? '' : util.toDateString(d.created_at) } },
|
||||
{ field: 'end_at', title: '项目结束时间', align: 'center', width: 160, templet: function (d) { return !d.created_at ? '' : util.toDateString(d.created_at) } },
|
||||
{ field: 'apply_name', title: '申请人', align: 'left', width: 120 },
|
||||
{ field: 'apply_at', title: '申请时间', align: 'center', width: 160, templet: function (d) { return !d.created_at ? '' : util.toDateString(d.created_at) } },
|
||||
{ field: 'manager_name', title: '项目经理', align: 'left', width: 90 },
|
||||
{ field: 'member_names', title: '项目成员', align: 'left', width: 160 },
|
||||
{ field: 'sort', title: '排序', align: 'center', width: 80 },
|
||||
{ field: 'created_at', title: '创建时间', align: 'center', width: 160, templet: function (d) { return !d.created_at ? '' : util.toDateString(d.created_at) } },
|
||||
{ field: 'created_name', title: '创建人', align: 'center', width: 100 },
|
||||
{ field: 'updated_at', title: '更新时间', align: 'center', width: 160, templet: function (d) { return !d.updated_at ? '' : util.toDateString(d.updated_at) } },
|
||||
{ field: 'updated_name', title: '更新人', align: 'center', width: 100 },
|
||||
{ title: '操作', toolbar: '#actionBox', align: 'center', fixed: 'right', width: 100 },
|
||||
]],
|
||||
skin: 'grid',
|
||||
toolbar: '#toolbar',
|
||||
defaultToolbar: [{
|
||||
title: '刷新',
|
||||
layEvent: 'refresh',
|
||||
icon: 'layui-icon-refresh',
|
||||
}, 'filter', 'exports'],
|
||||
request: {
|
||||
pageName: 'page',
|
||||
limitName: 'rows'
|
||||
}
|
||||
});
|
||||
|
||||
// 工具栏
|
||||
table.on('toolbar(tablelist)', function (obj) {
|
||||
switch (obj.event) {
|
||||
case 'add': add(); break;
|
||||
case 'search': search(); break;
|
||||
case 'refresh': refresh(); break;
|
||||
}
|
||||
});
|
||||
|
||||
function add(obj) {
|
||||
layer.open({
|
||||
type: 2,
|
||||
// offset: 'r',
|
||||
// anim: 'slideLeft',
|
||||
title: '新增',
|
||||
shade: 0.1,
|
||||
area: ['99%', '98%'],
|
||||
content: "/project/add"
|
||||
});
|
||||
}
|
||||
|
||||
function search() {
|
||||
layer.open({
|
||||
type: 1,
|
||||
offset: '20px',
|
||||
title: '搜索',
|
||||
content: $('#search-layer'), // 捕获的元素
|
||||
shade: 0.1,
|
||||
shadeClose: false,
|
||||
scrollbar: false,
|
||||
resize: false,
|
||||
move: false,
|
||||
skin: 'search-layer-open',
|
||||
area: ['50%', '350px'],
|
||||
btn: ['搜索', '重置'],
|
||||
btn1: function (index, layero) {
|
||||
search_btn();
|
||||
layer.close(index);
|
||||
},
|
||||
btn2: function (index, layero) {
|
||||
$('#timeBegin').val(formatDate(getCurrentYearStart(), 'YYYY-MM-DD HH:mm:ss'));
|
||||
$('#timeEnd').val(formatDate(getCurrentMonthEnd(), 'YYYY-MM-DD HH:mm:ss'));
|
||||
$('#title').val('');
|
||||
$('#sid').val('');
|
||||
$('#customer_name').val('');
|
||||
$('#status').val(9999);
|
||||
form.render('select');
|
||||
return false;
|
||||
}
|
||||
});
|
||||
}
|
||||
|
||||
// 工具栏
|
||||
function toolbar() {
|
||||
table.on('toolbar(tablelist)', function (obj) {
|
||||
switch (obj.event) {
|
||||
case 'add': add(); break;
|
||||
case 'refresh': refresh(); break;
|
||||
}
|
||||
});
|
||||
|
||||
function add(obj) {
|
||||
layer.open({
|
||||
type: 2,
|
||||
title: '新增',
|
||||
shade: 0.1,
|
||||
area: ['100%', '100%'],
|
||||
content: "/project/add"
|
||||
});
|
||||
}
|
||||
|
||||
function refresh() {
|
||||
table.reload('tablelist');
|
||||
}
|
||||
function refresh() {
|
||||
table.reload('tablelist');
|
||||
}
|
||||
|
||||
// 表格项操作按钮
|
||||
function tableActionTool() {
|
||||
table.on('tool(tablelist)', function (obj) {
|
||||
switch (obj.event) {
|
||||
case 'edit': edit(obj); break;
|
||||
case 'chapterlist': chapterlist(obj); break;
|
||||
}
|
||||
});
|
||||
|
||||
function edit(obj) {
|
||||
layer.open({
|
||||
type: 2,
|
||||
title: '修改',
|
||||
shade: 0.1,
|
||||
area: ['100%', '100%'],
|
||||
content: "/project/edit?id=" + obj.data['sid']
|
||||
});
|
||||
table.on('tool(tablelist)', function (obj) {
|
||||
switch (obj.event) {
|
||||
case 'edit': edit(obj); break;
|
||||
}
|
||||
});
|
||||
|
||||
function edit(obj) {
|
||||
layer.open({
|
||||
type: 2,
|
||||
// offset: 'r',
|
||||
// anim: 'slideLeft',
|
||||
title: '修改',
|
||||
shade: 0.1,
|
||||
area: ['99%', '98%'],
|
||||
content: "/project/edit?id=" + obj.data['sid']
|
||||
});
|
||||
}
|
||||
|
||||
// 搜索条件
|
||||
@@ -224,16 +238,22 @@
|
||||
}
|
||||
|
||||
// 搜索
|
||||
function search() {
|
||||
form.on('submit(user-query)', function (data) {
|
||||
table.reload('tablelist', {
|
||||
where: getQueryParams(),
|
||||
page: {
|
||||
curr: 1
|
||||
}
|
||||
})
|
||||
return false;
|
||||
});
|
||||
function search_btn() {
|
||||
// form.on('submit(user-query)', function (data) {
|
||||
// table.reload('tablelist', {
|
||||
// where: getQueryParams(),
|
||||
// page: {
|
||||
// curr: 1
|
||||
// }
|
||||
// })
|
||||
// return false;
|
||||
// });
|
||||
table.reload('tablelist', {
|
||||
where: getQueryParams(),
|
||||
page: {
|
||||
curr: 1
|
||||
}
|
||||
})
|
||||
}
|
||||
});
|
||||
</script>
|
||||
|
||||
Reference in New Issue
Block a user