skill.html 12 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254
  1. <style type="text/css">
  2. .xm-label-block {
  3. background-color: #287bd2
  4. }
  5. </style>
  6. <!-- 正文开始 -->
  7. <div class="layui-fluid">
  8. <div class="layui-card">
  9. <div class="layui-card-body">
  10. <div class="layui-tab layui-tab-brief">
  11. <table id="dataTable" lay-filter="dataTable"></table>
  12. </div>
  13. </div>
  14. </div>
  15. </div>
  16. <script type="text/html" id="toolBarTpl">
  17. <div class="layui-btn-group fl">
  18. <a class="layui-btn layui-btn-sm layui-icon layui-icon-add-circle-fine skill-add-btn">&nbsp;添加</a>
  19. <a table-data="{'url':'store/skill/plectron','action':'put',param:{'status': 1}}" class="layui-btn layui-btn-sm layui-icon layui-icon-play table-toolbar-btn">&nbsp;启用</a >
  20. <a table-data="{'url':'store/skill/plectron','action':'put',param:{'status': 0}}" confirm class="layui-btn layui-btn-sm layui-icon layui-icon-pause table-toolbar-btn">&nbsp;禁用</a>
  21. <a table-data="{'url':'store/skill/plectron','action':'delete'}" confirm class="layui-btn layui-btn-sm layui-icon layui-icon-close table-toolbar-btn">&nbsp;删除</a>
  22. </div>
  23. </script>
  24. <!-- 表格操作列 -->
  25. <script type="text/html" id="tableBarUser">
  26. <a class="layui-btn layui-btn-xs" lay-event="edit">修改</a>
  27. <a class="layui-btn layui-btn-danger layui-btn-xs" perm-show="delete:/store/skill/<id>" lay-event="del">删除</a>
  28. </script>
  29. <!-- 表格状态列 -->
  30. <script type="text/html" id="tableStateUser">
  31. <input type="checkbox" value="{{ d.status }}" switch-data="{'url':'store/skill/{{ d.id }}','action':'put'}" lay-skin="switch" lay-filter="ckDataTableState"
  32. lay-text="正常|锁定" {{d.status==1?'checked':''}}/>
  33. </script>
  34. <!-- 表单弹窗 -->
  35. <script type="text/html" id="modelSkill">
  36. <form id="modelSkillForm" lay-filter="modelSkillForm" class="layui-form model-form">
  37. <input name="id" type="hidden"/>
  38. <div class="layui-form-item">
  39. <label class="layui-form-label layui-form-required">指定师傅</label>
  40. <div class="layui-input-block">
  41. <select name="skill_user_id" id="userSel" lay-verType="tips" lay-verify="required" required>
  42. <option value=""></option>
  43. </select>
  44. </div>
  45. </div>
  46. <div class="layui-form-item">
  47. <label class="layui-form-label layui-form-required">服务名称</label>
  48. <div class="layui-input-block">
  49. <input name="name" placeholder="请输服务名称" type="text" class="layui-input" maxlength="80"
  50. lay-verType="tips" lay-verify="required" required/>
  51. </div>
  52. </div>
  53. <div class="layui-form-item">
  54. <label class="layui-form-label layui-form-required">展示图片</label>
  55. <div class="layui-input-block">
  56. <input type="text" name="cover_img" value="" class="layui-input layui-disabled" style="padding-right: 80px;" disabled="">
  57. <button class="layui-btn icon-btn dialog-file-choose" data-input="cover_img" data-count="3" type="button" style="position: absolute;top: 0;right: 0px;cursor: pointer;"><i class="layui-icon"></i>上传图片</button>
  58. <div class="img-preview-box cover_img" style="display: flex;flex-wrap: wrap;align-content: space-between;background: #f7f7f7;">
  59. <img class="input-img-preview" src="../../assets/images/placeholder-refund.png" style="height: 100px;margin: 8px;">
  60. </div>
  61. </div>
  62. </div>
  63. <div class="layui-form-item">
  64. <label class="layui-form-label layui-form-required">服务内容</label>
  65. <div class="layui-input-block">
  66. <textarea name="content" placeholder="请输入服务内容" class="layui-textarea" maxlength="200"></textarea>
  67. </div>
  68. </div>
  69. <div class="layui-form-item">
  70. <label class="layui-form-label layui-form-required">服务价格</label>
  71. <div class="layui-input-block">
  72. <input name="price" placeholder="请输入服务价格" type="bumber" class="layui-input" maxlength="20"
  73. lay-verType="tips" lay-verify="required" required/>
  74. </div>
  75. </div>
  76. <div class="layui-form-item">
  77. <label class="layui-form-label layui-form-required">价格阶梯</label>
  78. <div class="layui-input-block">
  79. <input name="gradient" placeholder="请输入价格阶梯, 5km收十块 (5:10)" type="text" class="layui-input" maxlength="80"
  80. lay-verType="tips" lay-verify="required" required/>
  81. <div class="layui-word-aux">请输入价格阶梯,(公里数:价格,公里数:价格)</div>
  82. </div>
  83. </div>
  84. <div class="layui-form-item">
  85. <label class="layui-form-label layui-form-required">服务时间</label>
  86. <div class="layui-input-block">
  87. <input name="time_slot" placeholder="请输入服务时间" type="text" class="layui-input"
  88. lay-verType="tips" lay-verify="required" required/>
  89. </div>
  90. </div>
  91. <div class="layui-form-item text-right">
  92. <button class="layui-btn layui-btn-primary" type="button" ew-event="closeDialog">取消</button>
  93. <button class="layui-btn" perm-show="put:/store/skill/<id>" lay-filter="modelSubmitSkill" lay-submit>保存</button>
  94. </div>
  95. </form>
  96. </script>
  97. <!-- js部分 -->
  98. <script>
  99. layui.use(['layer', 'form', 'table', 'util', 'notice','md5', 'admin', 'setter', 'xmSelect'], function () {
  100. var $ = layui.jquery;
  101. var layer = layui.layer;
  102. var form = layui.form;
  103. var table = layui.table;
  104. var util = layui.util;
  105. var admin = layui.admin;
  106. var notice = layui.notice;
  107. var setter = layui.setter;
  108. var md5 = layui.md5;
  109. var xmSelect = layui.xmSelect;
  110. var userSel = [];
  111. // 获取师傅列表
  112. layer.load(2);
  113. admin.req('store/skill/user', {}, function (res) {
  114. layer.closeAll('loading');
  115. if (10000 == res.code) {
  116. userSel = res.data.list;
  117. } else {
  118. layer.msg('获取师傅列表失败', {icon: 2});
  119. }
  120. }, 'GET');
  121. form.render('select');
  122. // 渲染表格
  123. var insTb = table.render({
  124. elem: '#dataTable',
  125. url: setter.baseServer + 'store/skill',
  126. page: true,
  127. // toolbar: true,
  128. toolbar: '#toolBarTpl',
  129. cellMinWidth: 100,
  130. cols: [[
  131. {type: 'checkbox'},
  132. {field: 'name', title: '服务项目', width: 200},
  133. {field: 'cover_img', title: '展示图片', templet: function (d) {
  134. var cover = JSON.parse(d.cover_img),
  135. html = "";
  136. $.each(cover,(i,item) => {
  137. html += '<img src="' + (item || '../../assets/images/placeholder-refund.png') + '" style="height: 100%;margin-right:2px" class="input-img-preview"/>'
  138. })
  139. return html;
  140. }, width: 200},
  141. {field: 'content', title: '服务内容'},
  142. {field: 'time_slot', title: '服务时间', width: 200},
  143. {field: 'user', title: '服务师傅', templet: function (d) {
  144. return '<a href="javascript:;" class="skill-user-view" style="color: #35cc98;border-bottom: 1px solid;"> ' + (d.user.uname || '无所属') + ' </a>';
  145. }, width: 200},
  146. {field: 'price', title: '服务价格', templet: function (d) {
  147. return "&yen;" + d.price;
  148. }, width: 100},
  149. {field: 'gradient', title: '价格梯度', width: 200},
  150. {
  151. field: 'created_at', sort: true, templet: function (d) {
  152. return util.toDateString(d.created_at * 1e3);
  153. }, title: '创建时间', width: 180
  154. },
  155. {field: 'status', templet: '#tableStateUser', title: '状态', width: 120},
  156. {fixed:'right', align: 'center', toolbar: '#tableBarUser', title: '操作', minWidth: 200}
  157. ]],
  158. done:function () {
  159. admin.renderPerm()
  160. }
  161. });
  162. // 添加
  163. $(document).on('click','.skill-add-btn', function () {
  164. showEditModel();
  165. });
  166. // 搜索
  167. form.on('submit(formSubSearchUser)', function (data) {
  168. insTb.reload({where: data.field}, 'data');
  169. });
  170. // 工具条点击事件
  171. table.on('tool(dataTable)', function (obj) {
  172. var data = obj.data;
  173. var layEvent = obj.event;
  174. if (layEvent === 'edit') { // 修改
  175. showEditModel(data);
  176. } else if (layEvent === 'del') { // 删除
  177. layer.confirm('确定要删除“' + data.name + '”吗?', {
  178. skin: 'layui-layer-admin',
  179. shade: .1
  180. }, function (i) {
  181. layer.close(i);
  182. layer.load(2);
  183. admin.req('store/skill/' + data.id, function (r) {
  184. layer.closeAll('loading');
  185. if (r.code === 10000) {
  186. notice.msg(r.message, {icon: 1});
  187. insTb.reload({}, 'data');
  188. } else {
  189. notice.msg(r.message, {icon: 2});
  190. }
  191. }, 'DELETE');
  192. });
  193. }
  194. });
  195. // 显示表单弹窗
  196. function showEditModel(data) {
  197. admin.open({
  198. type: 1,
  199. area: '620px', //宽高
  200. title: (data ? '修改' : '添加') + '技能服务',
  201. content: $('#modelSkill').html(),
  202. success: function (layero, dIndex) {
  203. $(layero).children('.layui-layer-content').css('overflow', 'visible');
  204. // 多图
  205. if(data && data.cover_img.length > 0){
  206. $(".img-preview-box.cover_img").empty();
  207. $.each(JSON.parse(data.cover_img),(i,t) => {
  208. $(".img-preview-box.cover_img").append('<img class="input-img-preview" src="' + t + '" style="height: 100px;margin: 8px;"/>');
  209. })
  210. }
  211. // 所属师傅
  212. $.each(userSel, function (index, item) {
  213. let ichecked = "";
  214. if (data) ichecked = data.skill_user_id === item.id ? "selected": "";
  215. $('#userSel').append('<option value="'+ item.id +'" ' + ichecked + '>'+ item.uname +'</option>');// 下拉菜单里添加元素
  216. });
  217. form.render('radio');
  218. form.render('select');
  219. // 回显数据
  220. form.val('modelSkillForm', data);
  221. // 表单提交事件
  222. form.on('submit(modelSubmitSkill)', function (form) {
  223. layer.load(2);
  224. admin.req('store/skill' + (data ? '/' + form.field.id : ''), form.field, function (res) {
  225. layer.closeAll('loading');
  226. if (res.code === 10000) {
  227. layer.close(dIndex);
  228. notice.msg(res.message, {icon: 1});
  229. insTb.reload({}, 'data');
  230. } else {
  231. notice.msg(res.message, {icon: 2});
  232. }
  233. }, data ? 'PUT' : 'POST');
  234. return false;
  235. });
  236. }
  237. });
  238. }
  239. });
  240. </script>