user_form.html 7.8 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195
  1. <!DOCTYPE html>
  2. <html lang="zh-CN">
  3. <head>
  4. <meta charset="UTF-8">
  5. <meta name="viewport" content="width=device-width, initial-scale=1.0">
  6. <title>用户表单</title>
  7. <link rel="stylesheet" href="../../lib/layui/css/layui.css">
  8. <style>
  9. body { padding: 20px; }
  10. .layui-form-item { margin-bottom: 20px; }
  11. </style>
  12. </head>
  13. <body>
  14. <form class="layui-form" lay-filter="userForm" id="userForm">
  15. <input type="hidden" name="id" id="userId">
  16. <div class="layui-form-item">
  17. <label class="layui-form-label"><span class="required">*</span>用户账号</label>
  18. <div class="layui-input-block">
  19. <input type="text" name="account" lay-verify="required" placeholder="请输入用户账号" class="layui-input" style="width: 300px;">
  20. </div>
  21. </div>
  22. <div class="layui-form-item">
  23. <label class="layui-form-label"><span id="pwdLabel"><span class="required">*</span>密码</span></label>
  24. <div class="layui-input-block">
  25. <input type="password" name="password" id="password" placeholder="请输入密码" class="layui-input" style="width: 300px;">
  26. </div>
  27. </div>
  28. <div class="layui-form-item">
  29. <label class="layui-form-label"><span class="required">*</span>姓名</label>
  30. <div class="layui-input-block">
  31. <input type="text" name="name" lay-verify="required" placeholder="请输入姓名" class="layui-input" style="width: 300px;">
  32. </div>
  33. </div>
  34. <div class="layui-form-item">
  35. <label class="layui-form-label">手机号</label>
  36. <div class="layui-input-block">
  37. <input type="text" name="phone" placeholder="请输入手机号" class="layui-input" style="width: 300px;">
  38. </div>
  39. </div>
  40. <div class="layui-form-item">
  41. <label class="layui-form-label">邮箱</label>
  42. <div class="layui-input-block">
  43. <input type="text" name="email" placeholder="请输入邮箱" class="layui-input" style="width: 300px;">
  44. </div>
  45. </div>
  46. <div class="layui-form-item">
  47. <label class="layui-form-label">头像</label>
  48. <div class="layui-input-block">
  49. <input type="text" name="avatar" placeholder="请输入头像URL" class="layui-input" style="width: 300px;">
  50. </div>
  51. </div>
  52. <div class="layui-form-item">
  53. <label class="layui-form-label"><span class="required">*</span>状态</label>
  54. <div class="layui-input-block">
  55. <input type="radio" name="status" value="1" title="正常" checked>
  56. <input type="radio" name="status" value="0" title="停用">
  57. </div>
  58. </div>
  59. <div class="layui-form-item">
  60. <label class="layui-form-label"><span class="required">*</span>角色</label>
  61. <div class="layui-input-block" id="roleCheckboxes" style="width: 400px;">
  62. <!-- 角色选项将通过JS动态加载 -->
  63. </div>
  64. </div>
  65. <div class="layui-form-item">
  66. <label class="layui-form-label">备注</label>
  67. <div class="layui-input-block">
  68. <textarea name="remark" placeholder="请输入备注" class="layui-textarea" style="width: 400px; height: 80px;"></textarea>
  69. </div>
  70. </div>
  71. <div class="layui-form-item">
  72. <div class="layui-input-block">
  73. <button type="submit" class="layui-btn" lay-submit lay-filter="submitForm">提交</button>
  74. <button type="reset" class="layui-btn layui-btn-primary">重置</button>
  75. </div>
  76. </div>
  77. </form>
  78. <script src="../../lib/layui/layui.js"></script>
  79. <script src="../../js/config.js"></script>
  80. <script src="../../js/common.js"></script>
  81. <script>
  82. layui.use(['form', 'layer'], function() {
  83. var form = layui.form;
  84. var layer = layui.layer;
  85. var $ = layui.jquery;
  86. var id = Common.getQueryString('id');
  87. var isEdit = !!id;
  88. // 编辑时隐藏密码必填
  89. if (isEdit) {
  90. $('#pwdLabel').html('密码');
  91. $('#password').attr('placeholder', '留空则不修改密码');
  92. }
  93. // 加载角色列表
  94. loadRoles();
  95. // 加载用户数据
  96. if (isEdit) {
  97. loadUserData(id);
  98. }
  99. function loadRoles() {
  100. Common.get(Config.api.role.list, function(res) {
  101. if (res.code === 200) {
  102. var roles = res.data || [];
  103. var html = '';
  104. roles.forEach(function(role) {
  105. html += '<input type="checkbox" name="roleIds" value="' + role.id + '" title="' + role.roleName + '" lay-skin="primary">';
  106. });
  107. $('#roleCheckboxes').html(html);
  108. form.render('checkbox');
  109. }
  110. });
  111. }
  112. function loadUserData(userId) {
  113. Common.get(Config.api.user.getInfo + '/' + userId, function(res) {
  114. if (res.code === 200) {
  115. var data = res.data;
  116. form.val('userForm', {
  117. id: data.id,
  118. account: data.account,
  119. name: data.name,
  120. phone: data.phone,
  121. email: data.email,
  122. avatar: data.avatar,
  123. status: data.status,
  124. remark: data.remark
  125. });
  126. // 回显角色
  127. if (data.roles) {
  128. data.roles.forEach(function(role) {
  129. $('input[name="roleIds"][value="' + role.id + '"]').prop('checked', true);
  130. });
  131. form.render('checkbox');
  132. }
  133. }
  134. });
  135. }
  136. // 提交表单
  137. form.on('submit(submitForm)', function(data) {
  138. var fieldData = data.field;
  139. // 获取选中的角色
  140. var roleIds = [];
  141. $('input[name="roleIds"]:checked').each(function() {
  142. roleIds.push($(this).val());
  143. });
  144. fieldData.roleIds = roleIds;
  145. // 如果是编辑且密码为空,删除密码字段
  146. if (isEdit && !fieldData.password) {
  147. delete fieldData.password;
  148. }
  149. var url = isEdit ? Config.api.user.update : Config.api.user.save;
  150. Common.ajax({
  151. url: url,
  152. type: isEdit ? 'PUT' : 'POST',
  153. data: fieldData,
  154. success: function(res) {
  155. Common.success(isEdit ? '修改成功' : '添加成功', function() {
  156. var index = parent.layer.getFrameIndex(window.name);
  157. parent.layer.close(index);
  158. parent.table.reload('tableList');
  159. });
  160. }
  161. });
  162. return false;
  163. });
  164. });
  165. </script>
  166. <style>
  167. .required { color: #ff5722; margin-right: 3px; }
  168. </style>
  169. </body>
  170. </html>