refactor(jinja2):修改模板使用继承

This commit is contained in:
zhengxinonly
2021-11-19 18:38:55 +08:00
parent 8bc5d6e0c2
commit d4d8d8b294
21 changed files with 2820 additions and 2808 deletions
+262 -258
View File
@@ -1,174 +1,180 @@
<!DOCTYPE html>
<html>
<head>
{% extends 'admin/base.html' %}
{% block title %}
<title>个人中心</title>
{% include 'admin/common/header.html' %}
<style>
.layui-form-item {
margin-top: 17px !important;
margin-bottom: 17px !important;
}
</style>
</head>
<body class="pear-container">
<div class="layui-row layui-col-space10">
{# 左侧栏 #}
<div class="layui-col-md3">
{# 个人信息卡片 #}
<div class="layui-card">
<div class="layui-card-body" style="padding: 25px;">
<div class="text-center layui-text">
<div class="user-info-head" id="userInfoHead">
<img id="avatar" src="{{ user_info.avatar }}" width="115px" height="115px" alt="">
{% endblock %}
{% block body %}
<div class="layui-row layui-col-space10">
{# 左侧栏 #}
<div class="layui-col-md3">
{# 个人信息卡片 #}
<div class="layui-card">
<div class="layui-card-body" style="padding: 25px;">
<div class="text-center layui-text">
<div class="user-info-head" id="userInfoHead">
<img id="avatar" src="{{ user_info.avatar }}" width="115px" height="115px" alt="">
</div>
<h2 style="padding-top: 20px;font-size: 20px;">{{ user_info.realname }}</h2>
<p style="padding-top: 8px;margin-top: 10px;font-size: 13.5px;">China 中国</p>
</div>
<h2 style="padding-top: 20px;font-size: 20px;">{{ user_info.realname }}</h2>
<p style="padding-top: 8px;margin-top: 10px;font-size: 13.5px;">China 中国</p>
</div>
<div style="height: 45px;border-top: 1px whitesmoke solid;text-align: center;line-height: 45px;font-size: 13.5px;">
<span>{{ user_info.remark }}</span>
</div>
</div>
<div style="height: 45px;border-top: 1px whitesmoke solid;text-align: center;line-height: 45px;font-size: 13.5px;">
<span>{{ user_info.remark }}</span>
{# 登录信息卡片 #}
<div class="layui-card">
<div class="layui-card-header">
登录记录
</div>
<div class="layui-card-body">
<ul class="list">
{% for log in user_logs %}
<li class="list-item">
<span class="title">{{ log.url }}</span>
<span class="footer">{{ log.create_time }}</span>
</li>
{% endfor %}
</ul>
</div>
</div>
</div>
{# 登录信息卡片 #}
<div class="layui-card">
<div class="layui-card-header">
登录记录
</div>
<div class="layui-card-body">
<ul class="list">
{% for log in user_logs %}
<li class="list-item">
<span class="title">{{ log.url }}</span>
<span class="footer">{{ log.create_time }}</span>
</li>
{% endfor %}
</ul>
</div>
</div>
</div>
{# 右侧栏 #}
<div class="layui-col-md9">
{# 个人信息卡片 #}
<div class="layui-card">
<div class="layui-card-header">个人信息</div>
<div class="layui-card-body">
<div class="layui-tab layui-tab-brief">
<div class="layui-tab-content">
<div class="layui-tab-item layui-show">
<form class="layui-form">
<div class="layui-form-item" style="display: none">
<label class="layui-form-label">用户id</label>
<div class="layui-input-block">
<input value="{{ user_info.id }}" type="text" readonly name="user_id"
id="user_id"
lay-verify="title"
autocomplete="off" placeholder="请输入标题" class="layui-input">
{# 右侧栏 #}
<div class="layui-col-md9">
{# 个人信息卡片 #}
<div class="layui-card">
<div class="layui-card-header">个人信息</div>
<div class="layui-card-body">
<div class="layui-tab layui-tab-brief">
<div class="layui-tab-content">
<div class="layui-tab-item layui-show">
<form class="layui-form">
<div class="layui-form-item" style="display: none">
<label class="layui-form-label">用户id</label>
<div class="layui-input-block">
<input value="{{ user_info.id }}" type="text" readonly name="user_id"
id="user_id"
lay-verify="title"
autocomplete="off" placeholder="请输入标题" class="layui-input">
</div>
</div>
</div>
<div class="layui-form-item">
<label class="layui-form-label">账号</label>
<div class="layui-input-block">
<input value="{{ user_info.username }}" type="text" readonly name="username"
lay-verify="title"
autocomplete="off" placeholder="请输入标题" class="layui-input">
<div class="layui-form-item">
<label class="layui-form-label">账号</label>
<div class="layui-input-block">
<input value="{{ user_info.username }}" type="text" readonly name="username"
lay-verify="title"
autocomplete="off" placeholder="请输入标题" class="layui-input">
</div>
</div>
</div>
<div class="layui-form-item">
<label class="layui-form-label">姓名</label>
<div class="layui-input-block">
<input value="{{ user_info.realname }}" type="text" name="realName"
lay-verify="title"
autocomplete="off" placeholder="请输入标题" class="layui-input">
<div class="layui-form-item">
<label class="layui-form-label">姓名</label>
<div class="layui-input-block">
<input value="{{ user_info.realname }}" type="text" name="realName"
lay-verify="title"
autocomplete="off" placeholder="请输入标题" class="layui-input">
</div>
</div>
</div>
<div class="layui-form-item layui-form-text">
<label class="layui-form-label">描述</label>
<div class="layui-input-block">
<div class="layui-form-item layui-form-text">
<label class="layui-form-label">描述</label>
<div class="layui-input-block">
<textarea placeholder="请输入描述" name="details"
class="layui-textarea">{{ user_info.remark }}</textarea>
</div>
</div>
</div>
<div class="layui-form-item">
<div class="layui-input-block">
<button class="pear-btn pear-btn-primary pear-btn-sm" lay-submit
lay-filter="user-update">修改资料
</button>
<button class="pear-btn pear-btn-sm edit-password">更改密码</button>
<div class="layui-form-item">
<div class="layui-input-block">
<button class="pear-btn pear-btn-primary pear-btn-sm" lay-submit
lay-filter="user-update">修改资料
</button>
<button class="pear-btn pear-btn-sm edit-password">更改密码</button>
</div>
</div>
</div>
</form>
</form>
</div>
</div>
</div>
</div>
</div>
</div>
{# 个人文章记录 #}
<div class="layui-card">
<div class="layui-card-header">
我的文章
</div>
<div class="layui-card-body">
<div class="layui-tab layui-tab-brief" lay-filter="docDemoTabBrief">
<div class="layui-tab-content">
<div class="layui-tab-item layui-show">
<div class="layui-row layui-col-space10" style="margin: 15px;">
<div class="layui-col-md1">
<img src="{{ url_for('static', filename='admin/admin/images/act.jpg') }}"
style="width: 100%;height: 100%;border-radius: 5px;"/>
</div>
<div class="layui-col-md11" style="height: 80px;">
<div class="title">为什么程序员们愿意在GitHub上开源自己的成果给别人免费使用和学习?</div>
<div class="content">
“Git的精髓在于让所有人的贡献无缝合并。而GitHub的天才之处,在于理解了Git的精髓。”来一句我们程序员们接地气的话:分享是一种快乐~
{# 个人文章记录 #}
<div class="layui-card">
<div class="layui-card-header">
我的文章
</div>
<div class="layui-card-body">
<div class="layui-tab layui-tab-brief" lay-filter="docDemoTabBrief">
<div class="layui-tab-content">
<div class="layui-tab-item layui-show">
<div class="layui-row layui-col-space10" style="margin: 15px;">
<div class="layui-col-md1">
<img src="{{ url_for('static', filename='admin/admin/images/act.jpg') }}"
style="width: 100%;height: 100%;border-radius: 5px;"/>
</div>
<div class="comment">2020-06-12 &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 评论 5 点赞 12 转发
4
<div class="layui-col-md11" style="height: 80px;">
<div class="title">为什么程序员们愿意在GitHub上开源自己的成果给别人免费使用和学习?</div>
<div class="content">
“Git的精髓在于让所有人的贡献无缝合并。而GitHub的天才之处,在于理解了Git的精髓。”来一句我们程序员们接地气的话:分享是一种快乐~
</div>
<div class="comment">2020-06-12 &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 评论 5 点赞 12
转发
4
</div>
</div>
</div>
</div>
<div class="layui-row layui-col-space10" style="margin: 15px;">
<div class="layui-col-md1">
<img src="{{ url_for('static', filename='admin/admin/images/act.jpg') }}"
style="width: 100%;height: 100%;border-radius: 5px;"/>
</div>
<div class="layui-col-md11" style="height: 80px;">
<div class="title">为什么程序员们愿意在GitHub上开源自己的成果给别人免费使用和学习?</div>
<div class="content">
“Git的精髓在于让所有人的贡献无缝合并。而GitHub的天才之处,在于理解了Git的精髓。”来一句我们程序员们接地气的话:分享是一种快乐~
<div class="layui-row layui-col-space10" style="margin: 15px;">
<div class="layui-col-md1">
<img src="{{ url_for('static', filename='admin/admin/images/act.jpg') }}"
style="width: 100%;height: 100%;border-radius: 5px;"/>
</div>
<div class="comment">2020-06-12 &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 评论 5 点赞 12 转发
4
<div class="layui-col-md11" style="height: 80px;">
<div class="title">为什么程序员们愿意在GitHub上开源自己的成果给别人免费使用和学习?</div>
<div class="content">
“Git的精髓在于让所有人的贡献无缝合并。而GitHub的天才之处,在于理解了Git的精髓。”来一句我们程序员们接地气的话:分享是一种快乐~
</div>
<div class="comment">2020-06-12 &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 评论 5 点赞 12
转发
4
</div>
</div>
</div>
</div>
<div class="layui-row layui-col-space10" style="margin: 15px;">
<div class="layui-col-md1">
<img src="{{ url_for('static', filename='admin/admin/images/act.jpg') }}"
style="width: 100%;height: 100%;border-radius: 5px;"/>
</div>
<div class="layui-col-md11" style="height: 80px;">
<div class="title">为什么程序员们愿意在GitHub上开源自己的成果给别人免费使用和学习?</div>
<div class="content">
“Git的精髓在于让所有人的贡献无缝合并。而GitHub的天才之处,在于理解了Git的精髓。”来一句我们程序员们接地气的话:分享是一种快乐~
<div class="layui-row layui-col-space10" style="margin: 15px;">
<div class="layui-col-md1">
<img src="{{ url_for('static', filename='admin/admin/images/act.jpg') }}"
style="width: 100%;height: 100%;border-radius: 5px;"/>
</div>
<div class="comment">2020-06-12 &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 评论 5 点赞 12 转发
4
<div class="layui-col-md11" style="height: 80px;">
<div class="title">为什么程序员们愿意在GitHub上开源自己的成果给别人免费使用和学习?</div>
<div class="content">
“Git的精髓在于让所有人的贡献无缝合并。而GitHub的天才之处,在于理解了Git的精髓。”来一句我们程序员们接地气的话:分享是一种快乐~
</div>
<div class="comment">2020-06-12 &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 评论 5 点赞 12
转发
4
</div>
</div>
</div>
</div>
<div class="layui-row layui-col-space10" style="margin: 15px;">
<div class="layui-col-md1">
<img src="{{ url_for('static', filename='admin/admin/images/act.jpg') }}"
style="width: 100%;height: 100%;border-radius: 5px;"/>
</div>
<div class="layui-col-md11" style="height: 80px;">
<div class="title">为什么程序员们愿意在GitHub上开源自己的成果给别人免费使用和学习?</div>
<div class="content">
“Git的精髓在于让所有人的贡献无缝合并。而GitHub的天才之处,在于理解了Git的精髓。”来一句我们程序员们接地气的话:分享是一种快乐~
<div class="layui-row layui-col-space10" style="margin: 15px;">
<div class="layui-col-md1">
<img src="{{ url_for('static', filename='admin/admin/images/act.jpg') }}"
style="width: 100%;height: 100%;border-radius: 5px;"/>
</div>
<div class="comment">2020-06-12 &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 评论 5 点赞 12 转发
4
<div class="layui-col-md11" style="height: 80px;">
<div class="title">为什么程序员们愿意在GitHub上开源自己的成果给别人免费使用和学习?</div>
<div class="content">
“Git的精髓在于让所有人的贡献无缝合并。而GitHub的天才之处,在于理解了Git的精髓。”来一句我们程序员们接地气的话:分享是一种快乐~
</div>
<div class="comment">2020-06-12 &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 评论 5 点赞 12
转发
4
</div>
</div>
</div>
</div>
@@ -178,140 +184,138 @@
</div>
</div>
</div>
</div>
<form id="edit_password_view" class="layui-form" action="" style="display: none">
<div class="mainBox">
<div class="main-container">
<form id="edit_password_view" class="layui-form" action="" style="display: none">
<div class="mainBox">
<div class="main-container">
<div class="layui-form-item" style="display: none">
<label class="layui-form-label">用户id</label>
<div class="layui-input-block">
<input value="{{ user_info.id }}" type="text" readonly name="user_id"
id="user_id"
lay-verify="title"
autocomplete="off" placeholder="请输入标题" class="layui-input">
<div class="main-container">
<div class="layui-form-item" style="display: none">
<label class="layui-form-label">用户id</label>
<div class="layui-input-block">
<input value="{{ user_info.id }}" type="text" readonly name="user_id"
id="user_id"
lay-verify="title"
autocomplete="off" placeholder="请输入标题" class="layui-input">
</div>
</div>
</div>
<div class="layui-form-item">
<label class="layui-form-label">旧密码</label>
<div class="layui-input-block">
<input type="password" name="oldPassword" lay-verify="title" autocomplete="off"
placeholder="请输入标题" class="layui-input">
<div class="layui-form-item">
<label class="layui-form-label">旧密码</label>
<div class="layui-input-block">
<input type="password" name="oldPassword" lay-verify="title" autocomplete="off"
placeholder="请输入标题" class="layui-input">
</div>
</div>
</div>
<div class="layui-form-item">
<label class="layui-form-label">新密码</label>
<div class="layui-input-block">
<input type="password" name="newPassword" lay-verify="title" autocomplete="off"
placeholder="请输入标题" class="layui-input">
<div class="layui-form-item">
<label class="layui-form-label">新密码</label>
<div class="layui-input-block">
<input type="password" name="newPassword" lay-verify="title" autocomplete="off"
placeholder="请输入标题" class="layui-input">
</div>
</div>
</div>
<div class="layui-form-item">
<label class="layui-form-label">确认密码</label>
<div class="layui-input-block">
<input type="password" name="confirmPassword" lay-verify="title" autocomplete="off"
placeholder="请输入标题" class="layui-input">
<div class="layui-form-item">
<label class="layui-form-label">确认密码</label>
<div class="layui-input-block">
<input type="password" name="confirmPassword" lay-verify="title" autocomplete="off"
placeholder="请输入标题" class="layui-input">
</div>
</div>
</div>
</div>
</div>
</div>
<div class="bottom">
<div class="button-container">
<button type="submit" class="pear-btn pear-btn-primary pear-btn-sm" lay-submit=""
lay-filter="edit-password">
<i class="layui-icon layui-icon-ok"></i>
提交
</button>
<button type="reset" class="pear-btn pear-btn-sm">
<i class="layui-icon layui-icon-refresh"></i>
重置
</button>
<div class="bottom">
<div class="button-container">
<button type="submit" class="pear-btn pear-btn-primary pear-btn-sm" lay-submit=""
lay-filter="edit-password">
<i class="layui-icon layui-icon-ok"></i>
提交
</button>
<button type="reset" class="pear-btn pear-btn-sm">
<i class="layui-icon layui-icon-refresh"></i>
重置
</button>
</div>
</div>
</div>
</form>
</form>
{% endblock %}
{% include 'admin/common/footer.html' %}
{% block models_script %}
<script type="module">
import { USER_API } from '/static/api/http.js'
<script type="module">
import { USER_API } from '/static/api/http.js'
layui.use(['element', 'jquery', 'layer', 'form', 'popup'], function () {
let $ = layui.jquery
let layer = layui.layer
let form = layui.form
let popup = layui.popup
layui.use(['element', 'jquery', 'layer', 'form', 'popup'], function () {
let $ = layui.jquery
let layer = layui.layer
let form = layui.form
let popup = layui.popup
// 修改密码页面
$('.edit-password').click(function () {
layer.open({
type: 1,
title: '修改密码',
shade: 0.1,
area: ['550px', '280px'],
content: $('#edit_password_view'),
})
return false
})
// 修改密码页面
$('.edit-password').click(function () {
layer.open({
type: 1,
title: '修改密码',
shade: 0.1,
area: ['550px', '280px'],
content: $('#edit_password_view')
// 修改头像
$('#avatar').click(function () {
layer.open({
type: 2,
title: '更换图片',
shade: 0.1,
area: ['900px', '500px'],
content: '/users/avatar',
btn: ['确定', '取消'],
yes: function (index, layero) {
window['layui-layer-iframe' + index].submitForm()
},
})
})
// 表单提交更改个人信息数据
form.on('submit(user-update)', function (data) {
$.ajax({
url: USER_API.USER_INFO(data.field.user_id),
data: JSON.stringify(data.field),
dataType: 'json',
contentType: 'application/json',
type: 'put',
success: function (result) {
if (result.success) {
layer.msg('修改成功', { icon: 1, time: 1000 })
} else {
layer.msg('修改失败', { icon: 2, time: 1000 })
}
},
})
return false
})
// 修改密码提交
form.on('submit(edit-password)', function (data) {
$.ajax({
url: USER_API.USER_PASSWORD(data.field.user_id),
data: JSON.stringify(data.field),
contentType: 'application/json',
dataType: 'json',
type: 'put',
success: function (result) {
if (result.success) {
popup.success(result.message, function () {
// TODO 关闭修改密码成之后的窗口
parent.layer.close(parent.layer.getFrameIndex(window.name))
})
} else {
popup.failure(result.message)
}
},
})
return false
})
})
return false
})
// 修改头像
$('#avatar').click(function () {
layer.open({
type: 2,
title: '更换图片',
shade: 0.1,
area: ['900px', '500px'],
content: '/users/avatar',
btn: ['确定', '取消'],
yes: function (index, layero) {
window['layui-layer-iframe' + index].submitForm()
}
})
})
// 表单提交更改个人信息数据
form.on('submit(user-update)', function (data) {
$.ajax({
url: USER_API.USER_INFO(data.field.user_id),
data: JSON.stringify(data.field),
dataType: 'json',
contentType: 'application/json',
type: 'put',
success: function (result) {
if (result.success) {
layer.msg('修改成功', { icon: 1, time: 1000 })
} else {
layer.msg('修改失败', { icon: 2, time: 1000 })
}
}
})
return false
})
// 修改密码提交
form.on('submit(edit-password)', function (data) {
$.ajax({
url: USER_API.USER_PASSWORD(data.field.user_id),
data: JSON.stringify(data.field),
contentType: 'application/json',
dataType: 'json',
type: 'put',
success: function (result) {
if (result.success) {
popup.success(result.message, function () {
// TODO 关闭修改密码成之后的窗口
parent.layer.close(parent.layer.getFrameIndex(window.name))
})
} else {
popup.failure(result.message)
}
}
})
return false
})
})
</script>
</body>
</html>
</script>
{% endblock %}
+115 -117
View File
@@ -1,131 +1,129 @@
<!DOCTYPE html>
<html>
<head>
{% extends 'admin/base.html' %}
{% block title %}
<title>头像上传</title>
{% include 'admin/common/header.html' %}
</head>
<body class="pear-container">
<div class="layui-row layui-col-space15">
<div class="layui-col-xs9">
<div style="height:325px;background-color: rgb(247, 247, 247);">
<img id="sourceImage" src="">
{% endblock %}
{% block body %}
<div class="layui-row layui-col-space15">
<div class="layui-col-xs9">
<div style="height:325px;background-color: rgb(247, 247, 247);">
<img id="sourceImage" src="">
</div>
</div>
<div class="layui-col-xs3" style="padding-left:0px;">
<div id="previewImage"
style="width:210px;height:210px;border: 1px solid rgb(200, 200, 200);border-radius: 50%;overflow:hidden;">
</div>
</div>
</div>
<div class="layui-col-xs3" style="padding-left:0px;">
<div id="previewImage"
style="width:210px;height:210px;border: 1px solid rgb(200, 200, 200);border-radius: 50%;overflow:hidden;">
<div class="layui-row">
<div class="layui-form-item">
<div class="layui-input-inline layui-btn-container" style="width: auto;vertical-align:top;">
<button class="pear-btn pear-btn-sm pear-btn-primary layui-icon layui-icon-left" cropper-event="rotate"
data-option="-15" title="左旋15°"></button>
<button class="pear-btn pear-btn-sm pear-btn-primary layui-icon layui-icon-right" cropper-event="rotate"
data-option="15" title="右旋15°"></button>
<button class="pear-btn pear-btn-sm pear-btn-danger layui-icon layui-icon-refresh" cropper-event="reset"
title="重置"></button>
<label for="uploadPicture" class="pear-btn pear-btn-sm pear-btn-primary layui-icon layui-icon-upload"
title="选择图片"></label>
<input class="layui-upload-file" id="uploadPicture" type="file" value="选择图片">
</div>
<div class="layui-form-mid layui-word-aux">建议:图片的尺寸宽高比为1:1,大小在5m以内。</div>
<input type="text" hidden value="{{ current_user.id }}" id="user_id">
</div>
</div>
</div>
<div class="layui-row">
<div class="layui-form-item">
<div class="layui-input-inline layui-btn-container" style="width: auto;vertical-align:top;">
<button class="pear-btn pear-btn-sm pear-btn-primary layui-icon layui-icon-left" cropper-event="rotate"
data-option="-15" title="左旋15°"></button>
<button class="pear-btn pear-btn-sm pear-btn-primary layui-icon layui-icon-right" cropper-event="rotate"
data-option="15" title="右旋15°"></button>
<button class="pear-btn pear-btn-sm pear-btn-danger layui-icon layui-icon-refresh" cropper-event="reset"
title="重置"></button>
<label for="uploadPicture" class="pear-btn pear-btn-sm pear-btn-primary layui-icon layui-icon-upload"
title="选择图片"></label>
<input class="layui-upload-file" id="uploadPicture" type="file" value="选择图片">
</div>
<div class="layui-form-mid layui-word-aux">建议:图片的尺寸宽高比为1:1,大小在5m以内。</div>
<input type="text" hidden value="{{ current_user.id }}" id="user_id">
</div>
</div>
{% endblock %}
{% include 'admin/common/footer.html' %}
<script type="module">
import { USER_API } from '/static/api/http.js'
layui.use(['jquery', 'layer', 'cropper', 'popup'], function () {
let $ = layui.jquery
let layer = layui.layer
let cropper = layui.cropper
let popup = layui.popup
{% block models_script %}
<script type="module">
import { USER_API } from '/static/api/http.js'
let options = {
aspectRatio: 1 / 1, // 裁剪框比例
preview: '#previewImage', // 预览div
viewmode: 1
}
layui.use(['jquery', 'layer', 'cropper', 'popup'], function () {
let $ = layui.jquery
let layer = layui.layer
let cropper = layui.cropper
let popup = layui.popup
$('#sourceImage').attr('src', parent.layui.$('#avatar').attr('src'))
$('#sourceImage').cropper(options)
let options = {
aspectRatio: 1 / 1, // 裁剪框比例
preview: '#previewImage', // 预览div
viewmode: 1,
}
window.submitForm = function () {
$('#sourceImage').crossOrigin = 'anonymous'//解决跨域图片问题
$('#sourceImage').cropper('getCroppedCanvas', {
width: 280,
height: 140
}).toBlob(function (blob) {
let timeStamp = Date.parse(new Date())
let fileName = timeStamp + '.jpg'
let formData = new FormData()
formData.append('file', blob, fileName)
formData.append('fileName', fileName)
formData.append('fileToken', timeStamp)
$.ajax({
method: 'post',
url: '/api/v1/file/photos', //用于文件上传的服务器端请求地址
data: formData,
processData: false,
contentType: false,
success: function (result) {
if (result.success) {
// 修改 avatar 字段
$.ajax({
method: 'put',
url: USER_API.USER_AVATAR($('#user_id').val()),
data: JSON.stringify({ avatar: result.data }),
dataType: 'json',
contentType: 'application/json',
success: function (res) {
if (res.success) {
// 关闭当前弹层
parent.layui.$('#avatar').attr('src', result.data.src)
top.layui.$('#avatar').attr('src', result.data.src)
parent.layer.close(parent.layer.getFrameIndex(window.name))
} else {
popup.failure('上传失败')
}
$('#sourceImage').attr('src', parent.layui.$('#avatar').attr('src'))
$('#sourceImage').cropper(options)
window.submitForm = function () {
$('#sourceImage').crossOrigin = 'anonymous'//解决跨域图片问题
$('#sourceImage').cropper('getCroppedCanvas', {
width: 280,
height: 140,
}).toBlob(function (blob) {
let timeStamp = Date.parse(new Date())
let fileName = timeStamp + '.jpg'
let formData = new FormData()
formData.append('file', blob, fileName)
formData.append('fileName', fileName)
formData.append('fileToken', timeStamp)
$.ajax({
method: 'post',
url: '/api/v1/file/photos', //用于文件上传的服务器端请求地址
data: formData,
processData: false,
contentType: false,
success: function (result) {
if (result.success) {
// 修改 avatar 字段
$.ajax({
method: 'put',
url: USER_API.USER_AVATAR($('#user_id').val()),
data: JSON.stringify({ avatar: result.data }),
dataType: 'json',
contentType: 'application/json',
success: function (res) {
if (res.success) {
// 关闭当前弹层
parent.layui.$('#avatar').attr('src', result.data.src)
top.layui.$('#avatar').attr('src', result.data.src)
parent.layer.close(parent.layer.getFrameIndex(window.name))
} else {
popup.failure('上传失败')
}
},
})
} else {
popup.failure('上传失败')
}
})
} else {
popup.failure('上传失败')
}
},
})
})
}
$('.pear-btn').on('click', function () {
let event = $(this).attr('cropper-event')
if (event === 'rotate') {
let option = $(this).attr('data-option')
$('#sourceImage').cropper('rotate', option)
} else if (event === 'reset') {
$('#sourceImage').cropper('reset')
}
$('#uploadPicture').change(function () {
let r = new FileReader()
let f = this.files[0]
let uploadFileSize = f.size / 1024
if (uploadFileSize > 5120) {
parent.layer.msg('上传文件不得超过5m', { icon: 5 })
return false
}
r.readAsDataURL(f)
r.onload = function (e) {
$('#sourceImage').cropper('destroy').attr('src', this.result).cropper(options)
}
})
})
})
}
$('.pear-btn').on('click', function () {
let event = $(this).attr('cropper-event')
if (event === 'rotate') {
let option = $(this).attr('data-option')
$('#sourceImage').cropper('rotate', option)
} else if (event === 'reset') {
$('#sourceImage').cropper('reset')
}
$('#uploadPicture').change(function () {
let r = new FileReader()
let f = this.files[0]
let uploadFileSize = f.size / 1024
if (uploadFileSize > 5120) {
parent.layer.msg('上传文件不得超过5m', { icon: 5 })
return false
}
r.readAsDataURL(f)
r.onload = function (e) {
$('#sourceImage')
.cropper('destroy')
.attr('src', this.result)
.cropper(options)
}
})
})
})
</script>
</body>
</html>
</script>
{% endblock %}
+297 -298
View File
@@ -1,316 +1,315 @@
<!DOCTYPE html>
<html lang="en">
<head>
{% extends 'admin/base.html' %}
{% block title %}
<title>用户管理</title>
{% include 'admin/common/header.html' %}
<link rel="stylesheet" href="{{ url_for('static', filename='/admin/admin/css/other/user.css') }}"/>
</head>
<body class="pear-container">
{# 查询表单 #}
<div class="layui-card">
<div class="layui-card-body">
<form class="layui-form" action="" lay-filter="user-query-form">
<div class="layui-form-item">
<label class="layui-form-label">用户</label>
<div class="layui-input-inline">
<input type="text" name="realName" placeholder="" class="layui-input">
</div>
<label class="layui-form-label">账号</label>
<div class="layui-input-inline">
<input type="text" name="username" placeholder="" class="layui-input">
</div>
<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">
<i class="layui-icon layui-icon-refresh"></i>
重置
</button>
</div>
</form>
</div>
</div>
<div class="user-left user-collasped">
<link rel="stylesheet" href="/static/admin/admin/css/other/user.css"/>
{% endblock %}
{% block body %}
{# 查询表单 #}
<div class="layui-card">
<div class="layui-card-body">
<div class="button button-primary user-group" user-group=""> 全 部 用 户</div>
<div class="button button-default user-group" user-group="-1"> 默 认 分 组</div>
<div style="overflow: auto">
<ul id="dept-tree" class="dept-tree" data-id="0"></ul>
<form class="layui-form" action="" lay-filter="user-query-form">
<div class="layui-form-item">
<label class="layui-form-label">用户</label>
<div class="layui-input-inline">
<input type="text" name="realName" placeholder="" class="layui-input">
</div>
<label class="layui-form-label">账号</label>
<div class="layui-input-inline">
<input type="text" name="username" placeholder="" class="layui-input">
</div>
<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">
<i class="layui-icon layui-icon-refresh"></i>
重置
</button>
</div>
</form>
</div>
</div>
<div class="user-left user-collasped">
<div class="layui-card">
<div class="layui-card-body">
<div class="button button-primary user-group" user-group=""> 全 部 用 户</div>
<div class="button button-default user-group" user-group="-1"> 默 认 分 组</div>
<div style="overflow: auto">
<ul id="dept-tree" class="dept-tree" data-id="0"></ul>
</div>
</div>
</div>
</div>
</div>
{# 用户表格 #}
<div class="user-main user-collasped">
<div class="layui-card">
<div class="layui-card-body">
<table id="tables" lay-filter="tables"></table>
{# 用户表格 #}
<div class="user-main user-collasped">
<div class="layui-card">
<div class="layui-card-body">
<table id="tables" lay-filter="tables"></table>
</div>
</div>
</div>
</div>
{% endblock %}
{% block models_script %}
{# 表格操作 #}
<script type="text/html" id="toolbar">
<button class="pear-btn pear-btn-primary pear-btn-md" lay-event="toolbar-add">
<i class="pear-icon pear-icon-add"></i>
新增
</button>
<button class="pear-btn pear-btn-md" lay-event="toolbar-remove">
<i class="pear-icon pear-icon-ashbin"></i>
删除
</button>
<button class="pear-btn pear-btn-md" lay-event="toolbar-collasped">
<i class="pear-icon pear-icon-modular"></i>
高级
</button>
</script>
{# 用户修改操作 #}
<script type="text/html" id="tool">
<button class="pear-btn pear-btn-primary pear-btn-sm" lay-event="tool-edit">
<i class="pear-icon pear-icon-edit"></i>
</button>
<button class="pear-btn pear-btn-danger pear-btn-sm" lay-event="tool-remove">
<i class="pear-icon pear-icon-ashbin"></i>
</button>
</script>
{# 启动与禁用 #}
<script type="text/html" id="tool-switch">
<input type="checkbox" name="enable" value="{{ "{{ d.id }}" }}" lay-skin="switch" lay-text="启用|禁用"
lay-filter="tool-switch"
{{ "{{# if(d.enable==1){ }} checked {{# } }}" }} />
</script>
{# 用户注册时间 #}
<script type="text/html" id="user-createTime">
{{ ' {{layui.util.toDateString(d.create_at, "yyyy-MM-dd HH:mm:ss")}' |safe }}}
</script>
{# 用户更新时间 #}
<script type="text/html" id="user-updateTime">
{{ ' {{layui.util.toDateString(d.update_at, "yyyy-MM-dd HH:mm:ss")}' |safe }}}
</script>
{% include 'admin/common/footer.html' %}
<script type="module">
import { USER_API, ROLE, parserTableData as parseData } from '/static/api/http.js'
{# 表格操作 #}
<script type="text/html" id="toolbar">
<button class="pear-btn pear-btn-primary pear-btn-md" lay-event="toolbar-add">
<i class="pear-icon pear-icon-add"></i>
新增
</button>
<button class="pear-btn pear-btn-md" lay-event="toolbar-remove">
<i class="pear-icon pear-icon-ashbin"></i>
删除
</button>
<button class="pear-btn pear-btn-md" lay-event="toolbar-collasped">
<i class="pear-icon pear-icon-modular"></i>
高级
</button>
</script>
{# 用户修改操作 #}
<script type="text/html" id="tool">
<button class="pear-btn pear-btn-primary pear-btn-sm" lay-event="tool-edit">
<i class="pear-icon pear-icon-edit"></i>
</button>
<button class="pear-btn pear-btn-danger pear-btn-sm" lay-event="tool-remove">
<i class="pear-icon pear-icon-ashbin"></i>
</button>
</script>
{# 启动与禁用 #}
<script type="text/html" id="tool-switch">
<input type="checkbox" name="enable" value="{{ "{{ d.id }}" }}" lay-skin="switch" lay-text="启用|禁用"
lay-filter="tool-switch"
{{ "{{# if(d.enable==1){ }} checked {{# } }}" }} />
</script>
{# 用户注册时间 #}
<script type="text/html" id="user-createTime">
{{ ' {{layui.util.toDateString(d.create_at, "yyyy-MM-dd HH:mm:ss")}' |safe }}}
</script>
{# 用户更新时间 #}
<script type="text/html" id="user-updateTime">
{{ ' {{layui.util.toDateString(d.update_at, "yyyy-MM-dd HH:mm:ss")}' |safe }}}
</script>
layui.use(['table', 'dtree', 'form', 'jquery', 'popup', 'common'], function () {
let table = layui.table
let form = layui.form
let $ = layui.jquery
let dtree = layui.dtree
let popup = layui.popup
let common = layui.common
<script type="module">
import { USER_API, ROLE, parserTableData as parseData } from '/static/api/http.js'
layui.use(['table', 'dtree', 'form', 'jquery', 'popup', 'common'], function () {
let table = layui.table
let form = layui.form
let $ = layui.jquery
let dtree = layui.dtree
let popup = layui.popup
let common = layui.common
// 表格数据
const get_columns = () => [
[
{ type: 'checkbox' },
{ title: '姓名', field: 'realname', align: 'center', width: 110 },
{ title: '账号', field: 'username', align: 'center' },
{ title: '部门', field: 'dept', align: 'center' },
{ title: '启用', field: 'enable', align: 'center', templet: '#tool-switch', width: 120 },
{ title: '注册时间', field: 'create_at', templet: '#user-createTime', align: 'center' },
{ title: '更新时间', field: 'update_at', templet: '#user-updateTime', align: 'center' },
{ title: '操作', toolbar: '#tool', align: 'center', width: 130 },
],
]
// 渲染表格数据
table.render({
parseData,
elem: '#tables',
url: USER_API.USERS(),
page: true,
cols: get_columns(),
skin: 'line',
height: 'full-148',
toolbar: '#toolbar', /*工具栏*/
text: { none: '暂无人员信息' },
defaultToolbar: [{ layEvent: 'refresh', icon: 'layui-icon-refresh' }, 'filter', 'print', 'exports'], /*默认工具栏*/
})
// 公司部门树状图菜单
dtree.render({
elem: '#dept-tree',
method: 'get',
url: '/api/v1/dept/departments',
dataFormat: 'list',
line: true,
skin: 'laySimple',
icon: '-1',
response: { treeId: 'deptId', parentId: 'parentId', title: 'deptName' },
})
// 菜单栏渲染
dtree.on('node(\'dept-tree\')', function (obj) {
let field = form.val('user-query-form') /*用户账号查询*/
field.deptId = obj.param.nodeId
window.refresh(field)
})
//
$('.user-group').click(function () {
let group = $(this).attr('user-group')
let field = form.val('user-query-form')
if (group === '-1') {
field.deptId = group
$(this).removeClass('button-default')
$(this).prev().removeClass('button-primary')
$(this).prev().addClass('button-default')
$(this).addClass('button-primary')
} else {
field.deptId = group
$(this).removeClass('button-default')
$(this).next().removeClass('button-primary')
$(this).next().addClass('button-default')
$(this).addClass('button-primary')
}
window.refresh(field)
})
table.on('tool(tables)', function (obj) {
if (obj.event === 'tool-remove') {
window.tool_remove(obj)
} else if (obj.event === 'tool-edit') {
window.tool_edit(obj)
}
})
table.on('toolbar(tables)', function (obj) {
if (obj.event === 'toolbar-add') {
window.toolbar_add()
} else if (obj.event === 'refresh') {
window.refresh()
} else if (obj.event === 'toolbar-remove') {
window.toolbar_remove(obj)
} else if (obj.event === 'toolbar-collasped') {
$('.user-left').toggleClass('user-collasped')
$('.user-main').toggleClass('user-collasped')
table.resize()
}
})
form.on('submit(user-query)', function (data) {
window.refresh(data.field)
return false
})
form.on('switch(tool-switch)', function (obj) {
let operate
if (obj.elem.checked) {
operate = 1
} else {
operate = 0
}
let loading = layer.load()
$.ajax({
url: USER_API.USER_STATUS(this.value),
data: JSON.stringify({ operate: operate, userId: this.value }),
dataType: 'json',
contentType: 'application/json',
type: 'put',
success: function (result) {
layer.close(loading)
if (result.success) {
popup.success(result.message)
} else {
popup.failure(result.message)
}
},
})
})
window.toolbar_add = function () {
layer.open({
type: 2,
title: '新增',
shade: 0.1,
area: ['550px', '550px'],
content: '/users/add',
})
}
window.toolbar_remove = function (obj) {
let data = table.checkStatus(obj.config.id).data
if (data.length === 0) {
layer.msg('未选中数据', {
icon: 3,
time: 1000,
})
return false
}
var ids = []
var hasCheck = table.checkStatus('tables')
var hasCheckData = hasCheck.data
if (hasCheckData.length > 0) {
$.each(hasCheckData, function (index, element) {
ids.push(element.id)
})
}
{#console.log(ids);#}
layer.confirm('确定要删除选中角色', {
icon: 3,
title: '提示',
}, function (index) {
layer.close(index)
let loading = layer.load()
$.ajax({
// 表格数据
const get_columns = () => [
[
{ type: 'checkbox' },
{ title: '姓名', field: 'realname', align: 'center', width: 110 },
{ title: '账号', field: 'username', align: 'center' },
{ title: '部门', field: 'dept', align: 'center' },
{ title: '启用', field: 'enable', align: 'center', templet: '#tool-switch', width: 120 },
{ title: '注册时间', field: 'create_at', templet: '#user-createTime', align: 'center' },
{ title: '更新时间', field: 'update_at', templet: '#user-updateTime', align: 'center' },
{ title: '操作', toolbar: '#tool', align: 'center', width: 130 },
],
]
// 渲染表格数据
table.render({
parseData,
elem: '#tables',
url: USER_API.USERS(),
data: { ids: ids },
dataType: 'json',
type: 'delete',
success: function (result) {
layer.close(loading)
if (result.success) {
popup.success(result.message, function () {
table.reload('role-table')
})
} else {
popup.failure(result.message)
}
},
page: true,
cols: get_columns(),
skin: 'line',
height: 'full-148',
toolbar: '#toolbar', /*工具栏*/
text: { none: '暂无人员信息' },
defaultToolbar: [{ layEvent: 'refresh', icon: 'layui-icon-refresh' }, 'filter', 'print', 'exports'], /*默认工具栏*/
})
})
}
window.refresh = function (param) {
table.reload('tables', { where: param })
}
window.tool_remove = function (obj) {
layer.confirm('确定要删除该用户', { icon: 3, title: '提示' }, function (index) {
layer.close(index)
let loading = layer.load()
$.ajax({
url: USER_API.USER(obj.data['id']),
dataType: 'json',
type: 'delete',
success: function (result) {
layer.close(loading)
if (result.success) {
popup.success(result.message, function () {
obj.del()
})
} else {
popup.failure(result.message)
}
},
// 公司部门树状图菜单
dtree.render({
elem: '#dept-tree',
method: 'get',
url: '/api/v1/dept/departments',
dataFormat: 'list',
line: true,
skin: 'laySimple',
icon: '-1',
response: { treeId: 'deptId', parentId: 'parentId', title: 'deptName' },
})
})
}
window.tool_edit = function (obj) {
layer.open({
type: 2,
title: '修改',
shade: 0.1,
area: ['550px', '500px'],
content: '/users/' + obj.data['id'],
})
}
})
</script>
</body>
</html>
// 菜单栏渲染
dtree.on('node(\'dept-tree\')', function (obj) {
let field = form.val('user-query-form') /*用户账号查询*/
field.deptId = obj.param.nodeId
window.refresh(field)
})
//
$('.user-group').click(function () {
let group = $(this).attr('user-group')
let field = form.val('user-query-form')
if (group === '-1') {
field.deptId = group
$(this).removeClass('button-default')
$(this).prev().removeClass('button-primary')
$(this).prev().addClass('button-default')
$(this).addClass('button-primary')
} else {
field.deptId = group
$(this).removeClass('button-default')
$(this).next().removeClass('button-primary')
$(this).next().addClass('button-default')
$(this).addClass('button-primary')
}
window.refresh(field)
})
table.on('tool(tables)', function (obj) {
if (obj.event === 'tool-remove') {
window.tool_remove(obj)
} else if (obj.event === 'tool-edit') {
window.tool_edit(obj)
}
})
table.on('toolbar(tables)', function (obj) {
if (obj.event === 'toolbar-add') {
window.toolbar_add()
} else if (obj.event === 'refresh') {
window.refresh()
} else if (obj.event === 'toolbar-remove') {
window.toolbar_remove(obj)
} else if (obj.event === 'toolbar-collasped') {
$('.user-left').toggleClass('user-collasped')
$('.user-main').toggleClass('user-collasped')
table.resize()
}
})
form.on('submit(user-query)', function (data) {
window.refresh(data.field)
return false
})
form.on('switch(tool-switch)', function (obj) {
let operate
if (obj.elem.checked) {
operate = 1
} else {
operate = 0
}
let loading = layer.load()
$.ajax({
url: USER_API.USER_STATUS(this.value),
data: JSON.stringify({ operate: operate, userId: this.value }),
dataType: 'json',
contentType: 'application/json',
type: 'put',
success: function (result) {
layer.close(loading)
if (result.success) {
popup.success(result.message)
} else {
popup.failure(result.message)
}
},
})
})
window.toolbar_add = function () {
layer.open({
type: 2,
title: '新增',
shade: 0.1,
area: ['550px', '550px'],
content: '/users/add',
})
}
window.toolbar_remove = function (obj) {
let data = table.checkStatus(obj.config.id).data
if (data.length === 0) {
layer.msg('未选中数据', {
icon: 3,
time: 1000,
})
return false
}
var ids = []
var hasCheck = table.checkStatus('tables')
var hasCheckData = hasCheck.data
if (hasCheckData.length > 0) {
$.each(hasCheckData, function (index, element) {
ids.push(element.id)
})
}
{#console.log(ids);#}
layer.confirm('确定要删除选中角色', {
icon: 3,
title: '提示',
}, function (index) {
layer.close(index)
let loading = layer.load()
$.ajax({
url: USER_API.USERS(),
data: { ids: ids },
dataType: 'json',
type: 'delete',
success: function (result) {
layer.close(loading)
if (result.success) {
popup.success(result.message, function () {
table.reload('role-table')
})
} else {
popup.failure(result.message)
}
},
})
})
}
window.refresh = function (param) {
table.reload('tables', { where: param })
}
window.tool_remove = function (obj) {
layer.confirm('确定要删除该用户', { icon: 3, title: '提示' }, function (index) {
layer.close(index)
let loading = layer.load()
$.ajax({
url: USER_API.USER(obj.data['id']),
dataType: 'json',
type: 'delete',
success: function (result) {
layer.close(loading)
if (result.success) {
popup.success(result.message, function () {
obj.del()
})
} else {
popup.failure(result.message)
}
},
})
})
}
window.tool_edit = function (obj) {
layer.open({
type: 2,
title: '修改',
shade: 0.1,
area: ['550px', '500px'],
content: '/users/' + obj.data['id'],
})
}
})
</script>
{% endblock %}
+84 -85
View File
@@ -1,101 +1,100 @@
<!DOCTYPE html>
<html>
<head>
{% extends 'admin/base.html' %}
{% block title %}
<title>用户管理</title>
{% include 'admin/common/header.html' %}
</head>
<body>
<form class="layui-form">
<div class="mainBox">
<div class="main-container">
{% endblock %}
{% block body %}
<form class="layui-form">
<div class="mainBox">
<div class="main-container">
<div class="layui-form-item">
<label class="layui-form-label">账号</label>
<div class="layui-input-block">
<input type="text" name="username" lay-verify="title" autocomplete="off" placeholder="请输入账号"
class="layui-input">
<div class="main-container">
<div class="layui-form-item">
<label class="layui-form-label">账号</label>
<div class="layui-input-block">
<input type="text" name="username" lay-verify="title" autocomplete="off" placeholder="请输入账号"
class="layui-input">
</div>
</div>
</div>
<div class="layui-form-item">
<label class="layui-form-label">姓名</label>
<div class="layui-input-block">
<input type="text" name="realName" lay-verify="title" autocomplete="off" placeholder="请输入姓名"
class="layui-input">
<div class="layui-form-item">
<label class="layui-form-label">姓名</label>
<div class="layui-input-block">
<input type="text" name="realName" lay-verify="title" autocomplete="off" placeholder="请输入姓名"
class="layui-input">
</div>
</div>
</div>
<div class="layui-form-item">
<label class="layui-form-label">密码</label>
<div class="layui-input-block">
<input type="text" name="password" lay-verify="title" autocomplete="off" placeholder="请输入密码"
class="layui-input">
<div class="layui-form-item">
<label class="layui-form-label">密码</label>
<div class="layui-input-block">
<input type="text" name="password" lay-verify="title" autocomplete="off" placeholder="请输入密码"
class="layui-input">
</div>
</div>
</div>
<div class="layui-form-item">
<label class="layui-form-label">角色</label>
<div class="layui-input-block">
<div class="layui-form-item">
<label class="layui-form-label">角色</label>
<div class="layui-input-block">
{% for role in roles %}
<input
value="{{ role.id }}" title="{{ role.name }}" type="checkbox"
name="roleIds" lay-skin="primary">
{% endfor %}
{% for role in roles %}
<input
value="{{ role.id }}" title="{{ role.name }}" type="checkbox"
name="roleIds" lay-skin="primary">
{% endfor %}
</div>
</div>
</div>
</div>
</div>
</div>
<div class="bottom">
<div class="button-container">
<button type="submit" class="pear-btn pear-btn-primary pear-btn-sm" lay-submit="" lay-filter="user-save">
<i class="layui-icon layui-icon-ok"></i>
提交
</button>
<button type="reset" class="pear-btn pear-btn-sm">
<i class="layui-icon layui-icon-refresh"></i>
重置
</button>
<div class="bottom">
<div class="button-container">
<button type="submit" class="pear-btn pear-btn-primary pear-btn-sm" lay-submit=""
lay-filter="user-save">
<i class="layui-icon layui-icon-ok"></i>
提交
</button>
<button type="reset" class="pear-btn pear-btn-sm">
<i class="layui-icon layui-icon-refresh"></i>
重置
</button>
</div>
</div>
</div>
</form>
{% include 'admin/common/footer.html' %}
<script type="module">
import { USER_API } from '/static/api/http.js'
</form>
{% endblock %}
layui.use(['form', 'jquery'], function () {
let form = layui.form
let $ = layui.jquery
form.on('submit(user-save)', function (data) {
let roleIds = ''
$('input[type=checkbox]:checked').each(function () {
roleIds += $(this).val() + ','
})
roleIds = roleIds.substr(0, roleIds.length - 1)
data.field.roleIds = roleIds
{% block models_script %}
<script type="module">
import { USER_API } from '/static/api/http.js'
$.ajax({
url: USER_API.USERS(),
data: JSON.stringify(data.field),
dataType: 'json',
contentType: 'application/json',
type: 'post',
success: function (result) {
if (result.success) {
layer.msg(result.message, { icon: 1, time: 1000 }, function () {
parent.layer.close(parent.layer.getFrameIndex(window.name))//关闭当前页
parent.layui.table.reload('tables')
})
} else {
layer.msg(result.message, { icon: 2, time: 1000 })
}
},
layui.use(['form', 'jquery'], function () {
let form = layui.form
let $ = layui.jquery
form.on('submit(user-save)', function (data) {
let roleIds = ''
$('input[type=checkbox]:checked').each(function () {
roleIds += $(this).val() + ','
})
roleIds = roleIds.substr(0, roleIds.length - 1)
data.field.roleIds = roleIds
$.ajax({
url: USER_API.USERS(),
data: JSON.stringify(data.field),
dataType: 'json',
contentType: 'application/json',
type: 'post',
success: function (result) {
if (result.success) {
layer.msg(result.message, { icon: 1, time: 1000 }, function () {
parent.layer.close(parent.layer.getFrameIndex(window.name))//关闭当前页
parent.layui.table.reload('tables')
})
} else {
layer.msg(result.message, { icon: 2, time: 1000 })
}
},
})
return false
})
})
return false
})
})
</script>
<script>
</script>
</body>
</html>
</script>
{% endblock %}
+103 -104
View File
@@ -1,122 +1,121 @@
<!DOCTYPE html>
<!DOCTYPE html>
<html lang="en">
<head>
{% extends 'admin/base.html' %}
{% block title %}
<title>用户编辑</title>
{% include 'admin/common/header.html' %}
</head>
<body>
<form class="layui-form" action="">
<div class="mainBox">
<div class="main-container">
{% endblock %}
{% block body %}
<form class="layui-form" action="">
<div class="mainBox">
<div class="main-container">
<div class="layui-form-item layui-hide">
<label class="layui-form-label">编号</label>
<div class="layui-input-block">
<input type="text" value="{{ user.id }}" name="userId" lay-verify="title"
autocomplete="off" placeholder="请输入编号" class="layui-input">
<div class="main-container">
<div class="layui-form-item layui-hide">
<label class="layui-form-label">编号</label>
<div class="layui-input-block">
<input type="text" value="{{ user.id }}" name="userId" lay-verify="title"
autocomplete="off" placeholder="请输入编号" class="layui-input">
</div>
</div>
</div>
<div class="layui-form-item">
<label class="layui-form-label">账号</label>
<div class="layui-input-block">
<input type="text" value="{{ user.username }}" name="username" lay-verify="title"
autocomplete="off" placeholder="请输入账号" class="layui-input">
<div class="layui-form-item">
<label class="layui-form-label">账号</label>
<div class="layui-input-block">
<input type="text" value="{{ user.username }}" name="username" lay-verify="title"
autocomplete="off" placeholder="请输入账号" class="layui-input">
</div>
</div>
</div>
<div class="layui-form-item">
<label class="layui-form-label">姓名</label>
<div class="layui-input-block">
<input type="text" value="{{ user.realname }}" name="realName" lay-verify="title"
autocomplete="off" placeholder="请输入姓名"
class="layui-input">
<div class="layui-form-item">
<label class="layui-form-label">姓名</label>
<div class="layui-input-block">
<input type="text" value="{{ user.realname }}" name="realName" lay-verify="title"
autocomplete="off" placeholder="请输入姓名"
class="layui-input">
</div>
</div>
</div>
<div class="layui-form-item">
<label class="layui-form-label">部门</label>
<div class="layui-input-block">
<ul id="selectParent" name="deptId" class="dtree" data-id="0"></ul>
<div class="layui-form-item">
<label class="layui-form-label">部门</label>
<div class="layui-input-block">
<ul id="selectParent" name="deptId" class="dtree" data-id="0"></ul>
</div>
</div>
</div>
<div class="layui-form-item">
<label class="layui-form-label">角色</label>
<div class="layui-input-block">
{% for role in roles %}
<input {% if role.id in checked_roles %}
checked
{% endif %}
value="{{ role.id }}" title="{{ role.name }}" type="checkbox"
name="roleIds" lay-skin="primary">
{% endfor %}
<div class="layui-form-item">
<label class="layui-form-label">角色</label>
<div class="layui-input-block">
{% for role in roles %}
<input {% if role.id in checked_roles %}
checked
{% endif %}
value="{{ role.id }}" title="{{ role.name }}" type="checkbox"
name="roleIds" lay-skin="primary">
{% endfor %}
</div>
</div>
</div>
</div>
</div>
</div>
<div class="bottom">
<div class="button-container">
<button type="submit" class="pear-btn pear-btn-primary pear-btn-sm" lay-submit="" lay-filter="user-update">
<i class="layui-icon layui-icon-ok"></i>
提交
</button>
<button type="reset" class="pear-btn pear-btn-sm">
<i class="layui-icon layui-icon-refresh"></i>
重置
</button>
<div class="bottom">
<div class="button-container">
<button type="submit" class="pear-btn pear-btn-primary pear-btn-sm" lay-submit=""
lay-filter="user-update">
<i class="layui-icon layui-icon-ok"></i>
提交
</button>
<button type="reset" class="pear-btn pear-btn-sm">
<i class="layui-icon layui-icon-refresh"></i>
重置
</button>
</div>
</div>
</div>
</form>
</form>
{% endblock %}
{% block models_script %}
<script type="module">
import { USER_API } from '/static/api/http.js'
{% include 'admin/common/footer.html' %}
layui.use(['form', 'jquery', 'dtree'], function () {
let form = layui.form
let $ = layui.jquery
let dtree = layui.dtree
<script type="module">
import { USER_API } from '/static/api/http.js'
dtree.renderSelect({
elem: '#selectParent',
url: '/api/v1/dept/departments',
method: 'get',
selectInputName: { nodeId: 'deptId', context: 'deptName' },
skin: 'layui',
dataFormat: 'list',
response: { treeId: 'deptId', parentId: 'parentId', title: 'deptName' },
selectInitVal: "{{ user.dept_id }}",
})
layui.use(['form', 'jquery', 'dtree'], function () {
let form = layui.form
let $ = layui.jquery
let dtree = layui.dtree
dtree.renderSelect({
elem: '#selectParent',
url: '/api/v1/dept/departments',
method: 'get',
selectInputName: { nodeId: 'deptId', context: 'deptName' },
skin: 'layui',
dataFormat: 'list',
response: { treeId: 'deptId', parentId: 'parentId', title: 'deptName' },
selectInitVal: "{{ user.dept_id }}"
})
form.on('submit(user-update)', function (data) {
let roleIds = ''
$('input[type=checkbox]:checked').each(function () {
roleIds += $(this).val() + ','
form.on('submit(user-update)', function (data) {
let roleIds = ''
$('input[type=checkbox]:checked').each(function () {
roleIds += $(this).val() + ','
})
roleIds = roleIds.substr(0, roleIds.length - 1)
data.field.roleIds = roleIds
$.ajax({
url: USER_API.USER_ROLE(data.field.userId),
data: JSON.stringify(data.field),
dataType: 'json',
contentType: 'application/json',
type: 'put',
success: function (result) {
if (result.success) {
layer.msg(result.message, { icon: 1, time: 1000 }, function () {
parent.layer.close(parent.layer.getFrameIndex(window.name)) //关闭当前页
parent.layui.table.reload('tables')
})
} else {
layer.msg(result.message, { icon: 2, time: 1000 })
}
},
})
return false
})
})
roleIds = roleIds.substr(0, roleIds.length - 1)
data.field.roleIds = roleIds
$.ajax({
url: USER_API.USER_ROLE(data.field.userId),
data: JSON.stringify(data.field),
dataType: 'json',
contentType: 'application/json',
type: 'put',
success: function (result) {
if (result.success) {
layer.msg(result.message, { icon: 1, time: 1000 }, function () {
parent.layer.close(parent.layer.getFrameIndex(window.name)) //关闭当前页
parent.layui.table.reload('tables')
})
} else {
layer.msg(result.message, { icon: 2, time: 1000 })
}
}
})
return false
})
})
</script>
</body>
</html>
</script>
{% endblock %}