Skip to content
体验新版
项目
组织
正在加载...
登录
切换导航
打开侧边栏
管店云开源进销存
开源进销存系统
提交
d54c3439
开源进销存系统
项目概览
管店云开源进销存
/
开源进销存系统
通知
191
Star
4
Fork
0
代码
文件
提交
分支
Tags
贡献者
分支图
Diff
Issue
0
列表
看板
标记
里程碑
合并请求
0
DevOps
流水线
流水线任务
计划
Wiki
0
Wiki
分析
仓库
DevOps
项目成员
Pages
开源进销存系统
项目概览
项目概览
详情
发布
仓库
仓库
文件
提交
分支
标签
贡献者
分支图
比较
Issue
0
Issue
0
列表
看板
标记
里程碑
合并请求
0
合并请求
0
Pages
DevOps
DevOps
流水线
流水线任务
计划
分析
分析
仓库分析
DevOps
Wiki
0
Wiki
成员
成员
收起侧边栏
关闭侧边栏
动态
分支图
创建新Issue
流水线任务
提交
Issue看板
前往新版Gitcode,体验更适合开发者的 AI 搜索 >>
提交
d54c3439
编写于
4月 28, 2024
作者:
L
lsh
浏览文件
操作
浏览文件
下载
电子邮件补丁
差异文件
新增商品分类和系统消息功能
上级
d9252f0a
变更
9
隐藏空白更改
内联
并排
Showing
9 changed file
with
461 addition
and
0 deletion
+461
-0
psi-web/src/main/webapp/WEB-INF/views/goods/goods/category/_form.html
...main/webapp/WEB-INF/views/goods/goods/category/_form.html
+62
-0
psi-web/src/main/webapp/WEB-INF/views/goods/goods/category/add.html
...c/main/webapp/WEB-INF/views/goods/goods/category/add.html
+57
-0
psi-web/src/main/webapp/WEB-INF/views/goods/goods/category/edit.html
.../main/webapp/WEB-INF/views/goods/goods/category/edit.html
+41
-0
psi-web/src/main/webapp/WEB-INF/views/goods/goods/category/index.html
...main/webapp/WEB-INF/views/goods/goods/category/index.html
+43
-0
psi-web/src/main/webapp/WEB-INF/views/goods/goods/category/list.html
.../main/webapp/WEB-INF/views/goods/goods/category/list.html
+81
-0
psi-web/src/main/webapp/WEB-INF/views/goods/goods/category/optionList.html
...webapp/WEB-INF/views/goods/goods/category/optionList.html
+3
-0
psi-web/src/main/webapp/WEB-INF/views/msg/notice/index.html
psi-web/src/main/webapp/WEB-INF/views/msg/notice/index.html
+56
-0
psi-web/src/main/webapp/WEB-INF/views/msg/notice/list.html
psi-web/src/main/webapp/WEB-INF/views/msg/notice/list.html
+62
-0
psi-web/src/main/webapp/WEB-INF/views/msg/notice/show.html
psi-web/src/main/webapp/WEB-INF/views/msg/notice/show.html
+56
-0
未找到文件。
psi-web/src/main/webapp/WEB-INF/views/goods/goods/category/_form.html
0 → 100644
浏览文件 @
d54c3439
#(token)
<input
type=
"hidden"
name=
"id"
value=
"#(goodsCategory.id??)"
>
<div
class=
"row"
>
<div
class=
"col-1"
></div>
<div
class=
"col"
>
<div
class=
"input-group mb-3"
>
<span
class=
"input-group-text"
>
商品分类名称
<span
class=
"text-danger"
>
*
</span></span>
<input
type=
"text"
maxlength=
"30"
class=
"form-control"
name=
"name"
id=
"goodsCategory_name"
placeholder=
"请输入商品分类名称"
value=
"#(goodsCategory.name??)"
>
</div>
</div>
<div
class=
"col-1"
></div>
</div>
<div
class=
"row"
>
<div
class=
"col-1"
></div>
<div
class=
"col"
>
<div
class=
"input-group mb-3"
>
<span
class=
"input-group-text"
>
父级分类
</span>
<select
class=
"form-select search-input"
name=
"parent_id"
id=
"goodsCategory_parent_id"
>
<option
value=
"0"
#if
(
goodsCategory
&&
goodsCategory.parent_id =
=
0)
selected
#end
>
顶级分类
</option>
#for(x : topList)
#if(parent_id)
#@goodsCategoryOptions(parent_id, x, "")
#else
#@goodsCategoryOptions(goodsCategory.parent_id??0, x, "")
#end
#end
</select>
</div>
</div>
<div
class=
"col-1"
></div>
</div>
<div
class=
"row"
>
<div
class=
"col-1"
></div>
<div
class=
"col"
>
<div
class=
"input-group mb-3"
>
<span
class=
"input-group-text"
>
备注
</span>
<input
type=
"text"
class=
"form-control"
name=
"remark"
placeholder=
"请输入备注"
value=
"#(goodsCategory.remark??)"
>
</div>
</div>
<div
class=
"col-1"
></div>
</div>
<script
type=
"application/javascript"
>
goodsCategory
.
formChecking
=
function
()
{
if
(
$
.
trim
(
$
(
"
#goodsCategory_name
"
).
val
())
==
''
)
{
beekit
.
tips
(
'
商品分类名称不能为空!
'
,
'
#goodsCategory_name
'
);
$
(
"
#goodsCategory_name
"
).
focus
();
return
false
;
}
if
(
$
.
trim
(
$
(
"
#goodsCategory_name
"
).
val
()).
length
>
30
)
{
beekit
.
tips
(
'
商品分类名称不能过长!
'
,
'
#goodsCategory_name
'
);
$
(
"
#goodsCategory_name
"
).
focus
();
return
false
;
}
return
true
;
};
</script>
\ No newline at end of file
psi-web/src/main/webapp/WEB-INF/views/goods/goods/category/add.html
0 → 100644
浏览文件 @
d54c3439
<script
type=
"application/javascript"
>
if
(
typeof
(
goodsCategory
)
==
"
undefined
"
)
{
goodsCategory
=
{};
}
</script>
<div
class=
"modal-dialog modal-dialog-scrollable modal-dialog-centered "
>
<div
class=
"modal-content"
>
<div
class=
"modal-header"
>
<h6
class=
"modal-title"
>
新增商品分类
</h6>
<button
type=
"button"
class=
"btn-close"
data-bs-dismiss=
"modal"
aria-label=
"Close"
></button>
</div>
<div
class=
"modal-body"
>
<form
id=
"goodsCategory-add-form"
onsubmit=
"goodsCategory.create();return false;"
>
#include("_form.html")
</form>
</div>
<div
class=
"modal-footer"
>
<button
type=
"button"
class=
"btn btn-secondary"
data-bs-dismiss=
"modal"
aria-label=
"Close"
>
关闭
</button>
<button
type=
"button"
class=
"btn btn-primary"
onclick=
"goodsCategory.create();"
>
保存
</button>
</div>
</div>
</div>
<script
type=
"application/javascript"
>
$
(
function
()
{
// 初始化bootstrap相关组件
common
.
initBootstrap
();
formInput
.
listenkeyUp
(
"
#goodsCategory-add-form
"
);
setTimeout
(
function
()
{
$
(
"
#goodsCategory_name
"
).
focus
();
},
200
);
});
goodsCategory
.
create
=
function
()
{
var
result
=
goodsCategory
.
formChecking
();
if
(
!
result
)
{
return
;
}
beekit
.
ajaxPost
(
"
/goods/goods/category/create
"
,
$
(
"
#goodsCategory-add-form
"
).
serialize
(),
function
(
ret
)
{
beekit
.
msg
(
ret
);
if
(
ret
.
state
==
"
ok
"
)
{
if
(
'
#(sourcePage)
'
==
'
supplierFormPage
'
)
{
beekit
.
modalChildClose
();
beekit
.
ajaxFill
(
"
/goods/goods/category/optionList
"
,
{},
"
#supplierInfo_supplier_category_id
"
);
}
else
{
beekit
.
modalClose
();
goodsCategory
.
list
(
ret
.
targetId
);
}
}
});
};
</script>
psi-web/src/main/webapp/WEB-INF/views/goods/goods/category/edit.html
0 → 100644
浏览文件 @
d54c3439
<div
class=
"modal-dialog modal-dialog-scrollable modal-dialog-centered "
>
<div
class=
"modal-content"
>
<div
class=
"modal-header"
>
<h6
class=
"modal-title"
>
编辑商品分类
</h6>
<button
type=
"button"
class=
"btn-close"
data-bs-dismiss=
"modal"
aria-label=
"Close"
></button>
</div>
<div
class=
"modal-body"
>
<form
id=
"goodsCategory-edit-form"
onsubmit=
"goodsCategory.update();return false;"
>
#include("_form.html")
</form>
</div>
<div
class=
"modal-footer"
>
<button
type=
"button"
class=
"btn btn-secondary"
data-bs-dismiss=
"modal"
aria-label=
"Close"
>
关闭
</button>
<button
type=
"button"
class=
"btn btn-primary"
onclick=
"goodsCategory.update();"
>
保存
</button>
</div>
</div>
</div>
<script
type=
"application/javascript"
>
$
(
function
()
{
// 初始化bootstrap相关组件
common
.
initBootstrap
();
formInput
.
listenkeyUp
(
"
#goodsCategory-edit-form
"
);
});
goodsCategory
.
update
=
function
()
{
var
result
=
goodsCategory
.
formChecking
();
if
(
!
result
)
{
return
;
}
beekit
.
ajaxPost
(
"
/goods/goods/category/update
"
,
$
(
"
#goodsCategory-edit-form
"
).
serialize
(),
function
(
ret
)
{
beekit
.
msg
(
ret
);
if
(
ret
.
state
==
"
ok
"
)
{
beekit
.
modalClose
();
goodsCategory
.
list
(
#
(
goodsCategory
.
id
));
}
});
};
</script>
psi-web/src/main/webapp/WEB-INF/views/goods/goods/category/index.html
0 → 100644
浏览文件 @
d54c3439
<div
class=
"card mb-2"
>
<div
class=
"card-body search-form"
>
<form
id=
"goodsCategory-search-form"
>
<input
type=
"hidden"
id=
"goodsCategory_pageNumber"
name=
"pageNumber"
value=
"1"
>
<div
class=
"row align-items-center"
>
<div
class=
"col"
>
#if(session.hasOper(Permissions.goods_goods_category_create))
<button
type=
"button"
class=
"btn btn-sm btn-primary"
onclick=
"goodsCategory.add(0);"
>
<i
class=
"bi bi-plus-circle"
></i>
新增商品分类
</button>
#end
</div>
</div>
</form>
</div>
</div>
<div
id=
"data-list-goodsCategory"
>
</div>
<script
type=
"application/javascript"
>
var
goodsCategory
=
{};
$
(
function
()
{
// 初始化bootstrap相关组件
common
.
initBootstrap
();
// 加载列表
goodsCategory
.
list
();
});
goodsCategory
.
list
=
function
(
targetId
)
{
$
(
"
#goodsCategory_pageNumber
"
).
val
(
1
);
beekit
.
ajaxFillPage
(
"
/goods/goods/category/list
"
,
"
#goodsCategory-search-form
"
,
"
#data-list-goodsCategory
"
,
"
goodsCategory-data-
"
+
targetId
);
};
goodsCategory
.
add
=
function
(
parentId
)
{
beekit
.
modal
(
"
/goods/goods/category/add?parent_id=
"
+
parentId
);
};
</script>
psi-web/src/main/webapp/WEB-INF/views/goods/goods/category/list.html
0 → 100644
浏览文件 @
d54c3439
<table
class=
"table table-hover table-bordered bg-white"
>
<thead>
<tr
class=
"table-header"
>
<th>
商品分类名称
</th>
<th>
备注
</th>
<th
style=
"width: 20%"
>
操作
</th>
</tr>
</thead>
<tbody
class=
"table-row"
>
#for (x : topList)
#@goodsCategoryTable(x, "")
#end
</tbody>
</table>
#define goodsCategoryTable(category, level)
<tr
id=
"goodsCategory-data-#(category.id)"
>
<td
class=
"fw-bold text-secondary"
style=
"text-align: left; padding-left: 30px"
>
#(level)
#if(category.parent_id != 0)
└─
#end
#(category.name)
</td>
<td>
#(category.remark??)
</td>
<td>
#if(session.hasOper(Permissions.goods_goods_category_create))
<button
type=
"button"
class=
"btn btn-sm sm-more btn-outline-primary"
onclick=
"goodsCategory.add(#(category.id));"
>
新增子类
</button>
#end
#if(session.hasOper(Permissions.goods_goods_category_update))
<button
type=
"button"
class=
"btn btn-sm sm-more btn-outline-primary"
onclick=
"goodsCategory.edit(#(category.id));"
>
修改
</button>
#end
#if(session.hasOper(Permissions.goods_goods_category_delete))
<button
type=
"button"
class=
"btn btn-sm sm-more btn-outline-danger"
onclick=
"goodsCategory.delete(#(category.id));"
>
删除
</button>
#end
</td>
</tr>
#set(childList = category.childList)
#if(childList.size()
<
=
0)
#return
#end
#if(level =
=
"")
#set(level =
level+" ")
#else
#set(level =
level+" ")
#end
#for
(
child
:
childList
)
#
@
goodsCategoryTable
(
child
,
level
)
#end
#end
<
script
type=
"application/javascript"
>
$(function() {
// 初始化bootstrap相关组件
common.initBootstrap();
// 滚动表头处理
common.tableFixedWidth();
common.tableFixed();
$(".main").scroll(function() {
common.tableFixed();
});
});
goodsCategory.edit = function(id) {
beekit.modal("/goods/goods/category/edit?id="+id);
};
goodsCategory.delete = function(id) {
beekit.focusColor("goodsCategory-data-"+id);
beekit.confirmByUrl("/goods/goods/category/delete", {"id":id}, "确认要删除此商品分类吗?", function(ret) {
beekit.msg(ret);
goodsCategory.list(id);
});
};
</script>
psi-web/src/main/webapp/WEB-INF/views/goods/goods/category/optionList.html
0 → 100644
浏览文件 @
d54c3439
#for(x : page.list)
<option
value=
"#(x.id)"
>
#(x.name)
</option>
#end
psi-web/src/main/webapp/WEB-INF/views/msg/notice/index.html
0 → 100644
浏览文件 @
d54c3439
<div
class=
"modal-dialog modal-dialog-scrollable modal-dialog-centered modal-lg"
>
<div
class=
"modal-content"
style=
"height:500px;max-height:500px;"
>
<form
id=
"msgNotice-search-form"
>
<input
type=
"hidden"
id=
"msgNotice_pageNumber"
name=
"pageNumber"
>
<div
class=
"modal-header"
>
<div
class=
"row"
style=
"width:100%"
>
<div
class=
"col-3"
><h6
class=
"modal-title"
>
消息中心
</h6></div>
<div
class=
"col text-center"
>
<div
class=
"btn-group"
role=
"group"
aria-label=
"Basic radio toggle button group"
>
<input
type=
"radio"
class=
"btn-check"
name=
"read_flag"
id=
"msgNotice_wait_read_msg"
autocomplete=
"off"
checked
value=
"false"
>
<label
class=
"btn btn-outline-primary"
for=
"msgNotice_wait_read_msg"
>
未读
</label>
<input
type=
"radio"
class=
"btn-check"
name=
"read_flag"
id=
"msgNotice_finish_read_msg"
autocomplete=
"off"
value=
"true"
>
<label
class=
"btn btn-outline-primary"
for=
"msgNotice_finish_read_msg"
>
已读
</label>
<input
type=
"radio"
class=
"btn-check"
name=
"read_flag"
id=
"msgNotice_all_msg"
autocomplete=
"off"
value=
""
>
<label
class=
"btn btn-outline-primary"
for=
"msgNotice_all_msg"
>
全部
</label>
</div>
</div>
<div
class=
"col-3 text-end"
>
<button
type=
"button"
class=
"btn-close"
data-bs-dismiss=
"modal"
aria-label=
"Close"
></button>
</div>
</div>
</div>
</form>
<div
class=
"modal-body"
style=
"min-height:300px;"
>
<div
class=
"row mt-3"
id=
"msgNotice-data-list"
></div>
</div>
<div
class=
"modal-footer"
>
<button
type=
"button"
class=
"btn btn-secondary"
data-bs-dismiss=
"modal"
aria-label=
"Close"
>
关闭
</button>
</div>
</div>
</div>
<script
type=
"application/javascript"
>
var
msgNotice
=
{};
$
(
function
()
{
msgNotice
.
list
();
$
(
"
#msgNotice-search-form input[name=read_flag]
"
).
on
(
"
click
"
,
function
(
evt
)
{
msgNotice
.
list
();
});
});
msgNotice
.
list
=
function
()
{
beekit
.
ajaxFillPage
(
"
/msg/notice/list
"
,
"
#msgNotice-search-form
"
,
"
#msgNotice-data-list
"
);
}
</script>
\ No newline at end of file
psi-web/src/main/webapp/WEB-INF/views/msg/notice/list.html
0 → 100644
浏览文件 @
d54c3439
#if(page.totalRow
<
=0)
<
h6
style=
"text-align: center; padding: 30px 0; "
>
暂无消息通知!
</h6>
#else
<table
class=
"table"
>
<thead
class=
"table-light"
>
<tr>
<th
scope=
"col-2"
>
级别
</th>
<th
scope=
"col-2"
>
类型
</th>
<th
scope=
"col-6"
>
标题
</th>
<th
scope=
"col-2"
>
时间
</th>
</tr>
</thead>
<tbody
style=
"text-align: center;"
>
#for (x : page.getList())
#set(msgNotice = x.msgNotice)
<tr>
<td>
#if(msgNotice.msg_level == MsgLevelEnum.important.value)
<span
class=
"badge bg-warning"
>
重要
</span>
#elseif(msgNotice.msg_level == MsgLevelEnum.urgent.value)
<span
class=
"badge bg-danger"
>
紧急
</span>
#else
<span
class=
"badge bg-secondary"
>
普通
</span>
#end
</td>
<td>
#(msgNotice.msgTypeName)
</td>
<td
#if
(!
x.read_flag
)
class=
"fw-bold"
#end
>
<a
href=
"javascript:void(0);"
onclick=
"msgNotice.show(this,#(x.id));"
class=
"text-black"
>
#(msgNotice.title??)
</a>
</td>
<td>
#date(x.created_at, "yyyy-MM-dd HH:mm:ss")
</td>
</tr>
#end
</tbody>
</table>
<div
class=
"row"
>
<div
class=
"col"
>
<div
class=
"float-end"
>
#@paginate(page.pageNumber, page.totalPage, "")
</div>
</div>
</div>
#end
<script
type=
"application/javascript"
>
$
(
function
()
{
// 初始化bootstrap相关组件
common
.
initBootstrap
();
$
(
"
#msgNotice_pageNumber
"
).
val
(
#
(
page
.
pageNumber
));
});
msgNotice
.
show
=
function
(
_this
,
id
)
{
beekit
.
modalChild
(
'
/msg/notice/show?id=
'
+
id
);
$
(
_this
).
parent
().
removeClass
(
'
fw-bold
'
);
};
</script>
\ No newline at end of file
psi-web/src/main/webapp/WEB-INF/views/msg/notice/show.html
0 → 100644
浏览文件 @
d54c3439
#set(msgNotice=msg.msgNotice)
<div
class=
"modal-dialog modal-dialog-scrollable modal-dialog-centered modal-lg"
>
<div
class=
"modal-content"
style=
"height:500px;max-height:500px;"
>
<div
class=
"modal-header"
>
<h6
class=
"modal-title"
>
#(msgNotice.msgTypeName)
</h6>
<button
type=
"button"
class=
"btn-close"
data-bs-dismiss=
"modal"
aria-label=
"Close"
></button>
</div>
<div
class=
"modal-body"
style=
"min-height: 300px;"
>
<div
class=
"row"
>
<div
class=
"col text-center"
>
<h6>
#if(msgNotice.msg_level == 1)
<span
class=
"badge bg-warning"
>
重要
</span>
#elseif(msgNotice.msg_level == 2)
<span
class=
"badge bg-danger"
>
紧急
</span>
#end
<strong>
#(msgNotice.title??)
</strong>
</h6>
<span
class=
"text-secondary"
>
#date(msg.created_at, "yyyy-MM-dd HH:mm:ss")
</span>
</div>
</div>
<hr
class=
"row-hr"
/>
<div
class=
"row mt-3"
style=
"margin-left: 1rem; margin-right: 1rem;"
>
#(msgNotice.content??)
</div>
</div>
<div
class=
"modal-footer"
>
#if(msgNotice.data_type == MsgDataTypeEnum.sale_order_audit.value)
<button
type=
"button"
class=
"btn btn-primary"
onclick=
"dashboard.linkTab('/sale/sale/order');"
>
去处理
</button>
#elseif(msgNotice.data_type == MsgDataTypeEnum.purchase_order_audit.value)
<button
type=
"button"
class=
"btn btn-primary"
onclick=
"dashboard.linkTab('/inventory/purchase/order');"
>
去处理
</button>
#elseif(msgNotice.data_type == MsgDataTypeEnum.purchase_order.value)
<button
type=
"button"
class=
"btn btn-primary"
onclick=
"dashboard.linkTab('/inventory/purchase/order');"
>
去处理
</button>
#elseif(msgNotice.data_type == MsgDataTypeEnum.recepit_order_audit.value)
<button
type=
"button"
class=
"btn btn-primary"
onclick=
"dashboard.linkTab('/fund/book/receiptOrder');"
>
去处理
</button>
#elseif(msgNotice.data_type == MsgDataTypeEnum.pay_order_audit.value)
<button
type=
"button"
class=
"btn btn-primary"
onclick=
"dashboard.linkTab('/fund/book/payOrder');"
>
去处理
</button>
#elseif(msgNotice.data_type == MsgDataTypeEnum.income_order_audit.value)
<button
type=
"button"
class=
"btn btn-primary"
onclick=
"dashboard.linkTab('/fund/flow/income');"
>
去处理
</button>
#elseif(msgNotice.data_type == MsgDataTypeEnum.expenses_order_audit.value)
<button
type=
"button"
class=
"btn btn-primary"
onclick=
"dashboard.linkTab('/fund/flow/expenses');"
>
去处理
</button>
#elseif(msgNotice.data_type == MsgDataTypeEnum.purchase_reject_order_audit.value)
<button
type=
"button"
class=
"btn btn-primary"
onclick=
"dashboard.linkTab('/inventory/purchase/rejectOrder');"
>
去处理
</button>
#elseif(msgNotice.data_type == MsgDataTypeEnum.sale_reject_order_audit.value)
<button
type=
"button"
class=
"btn btn-primary"
onclick=
"dashboard.linkTab('/sale/sale/rejectOrder');"
>
去处理
</button>
#end
<button
type=
"button"
class=
"btn btn-secondary"
data-bs-dismiss=
"modal"
aria-label=
"Close"
id=
"msgNotice_show_close"
>
关闭
</button>
</div>
</div>
</div>
<script
type=
"application/javascript"
>
$
(
function
()
{
setTimeout
(
function
()
{
$
(
"
#msgNotice_show_close
"
).
focus
();
},
200
);
});
</script>
编辑
预览
Markdown
is supported
0%
请重试
或
添加新附件
.
添加附件
取消
You are about to add
0
people
to the discussion. Proceed with caution.
先完成此消息的编辑!
取消
想要评论请
注册
或
登录