0ff4013ded02fcbd9211fbc8a25e59b9.php 17 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522
  1. <?php /*a:2:{s:101:"E:\phpstudy_pro_8.1.0.1_64bit_Green\phpstudy_pro\WWW\yueshengshop\app\admin\view\goodsattr\lists.html";i:1587196808;s:90:"E:\phpstudy_pro_8.1.0.1_64bit_Green\phpstudy_pro\WWW\yueshengshop\app\admin\view\base.html";i:1587517806;}*/ ?>
  2. <!DOCTYPE html>
  3. <html>
  4. <head>
  5. <meta name="renderer" content="webkit" />
  6. <meta http-equiv="X-UA-COMPATIBLE" content="IE=edge,chrome=1" />
  7. <title><?php echo htmlentities((isset($menu_info['title']) && ($menu_info['title'] !== '')?$menu_info['title']:"")); ?> - <?php echo htmlentities((isset($website['title']) && ($website['title'] !== '')?$website['title']:"Niushop开源商城")); ?></title>
  8. <meta name="keywords" content="<?php echo htmlentities((isset($website['keywords']) && ($website['keywords'] !== '')?$website['keywords']:'Niushop开源商城')); ?>">
  9. <meta name="description" content="<?php echo htmlentities((isset($website['desc']) && ($website['desc'] !== '')?$website['desc']:'描述')); ?>}">
  10. <link rel="icon" type="image/x-icon" href="http://yueshengshop.top/public/static/img/bitbug_favicon.ico" />
  11. <link rel="stylesheet" type="text/css" href="http://yueshengshop.top/public/static/css/iconfont.css" />
  12. <link rel="stylesheet" type="text/css" href="http://yueshengshop.top/public/static/ext/layui/css/layui.css" />
  13. <link rel="stylesheet" type="text/css" href="http://yueshengshop.top/public/static/loading/msgbox.css"/>
  14. <link rel="stylesheet" type="text/css" href="http://yueshengshop.top/app/admin/view/public/css/common.css" />
  15. <script src="http://yueshengshop.top/public/static/js/jquery-3.1.1.js"></script>
  16. <script src="http://yueshengshop.top/public/static/ext/layui/layui.js"></script>
  17. <script>
  18. layui.use(['layer', 'upload', 'element'], function() {});
  19. window.ns_url = {
  20. baseUrl: "http://yueshengshop.top/",
  21. route: ['<?php echo request()->module(); ?>', '<?php echo request()->controller(); ?>', '<?php echo request()->action(); ?>'],
  22. };
  23. </script>
  24. <script src="http://yueshengshop.top/public/static/js/common.js"></script>
  25. <style>
  26. .ns-calendar{background: url("http://yueshengshop.top/public/static/img/ns_calendar.png") no-repeat center / 16px 16px;}
  27. </style>
  28. <script type="text/javascript">
  29. </script>
  30. </head>
  31. <body>
  32. <!-- logo -->
  33. <div class="ns-logo">
  34. <div class="logo-box">
  35. <img src="http://yueshengshop.top/app/admin/view/public/img/logo.png">
  36. </div>
  37. <span>B2B2C多商户平台端</span>
  38. <span>
  39. 服务电话:400-886-7993
  40. </span>
  41. </div>
  42. <div class="layui-layout layui-layout-admin">
  43. <div class="layui-header">
  44. <!-- 一级菜单 -->
  45. <ul class="layui-nav layui-layout-left">
  46. <?php $serond_menu = []; foreach($menu as $menu_k => $menu_v): ?>
  47. <li class="layui-nav-item <?php if($menu_v['selected']): ?> layui-this<?php endif; ?>">
  48. <a href="<?php echo htmlentities($menu_v['url']); ?>"><?php echo htmlentities($menu_v['title']); ?></a>
  49. </li>
  50. <?php if($menu_v['selected']):
  51. $serond_menu = $menu_v['child_list'];
  52. ?>
  53. <?php endif; ?>
  54. <?php endforeach; ?>
  55. </ul>
  56. <ul class="layui-nav layui-layout-right">
  57. <li class="layui-nav-item">
  58. <a href="javascript:;">
  59. <div class="ns-img-box">
  60. <img src="http://yueshengshop.top/app/admin/view/public/img/default_headimg.png" alt="">
  61. </div>
  62. <?php echo htmlentities($user_info['username']); ?>
  63. </a>
  64. <dl class="layui-nav-child">
  65. <dd class="ns-reset-pass" onclick="resetPassword();">
  66. <a href="javascript:;">修改密码</a>
  67. </dd>
  68. <dd>
  69. <a onclick="clearCache()" href="javascript:;">清除缓存</a>
  70. </dd>
  71. <dd>
  72. <a href="<?php echo addon_url('admin/login/logout'); ?>" class="login-out">退出登录</a>
  73. </dd>
  74. </dl>
  75. </li>
  76. </ul>
  77. </div>
  78. <?php if(!(empty($serond_menu) || (($serond_menu instanceof \think\Collection || $serond_menu instanceof \think\Paginator ) && $serond_menu->isEmpty()))): ?>
  79. <div class="layui-side">
  80. <div class="layui-side-scroll">
  81. <span class="ns-side-title"><?php echo htmlentities($crumbs[0]['title']); ?></span>
  82. <!-- 二三级菜单-->
  83. <ul class="layui-nav layui-nav-tree" lay-filter="test">
  84. <?php foreach($serond_menu as $menu_second_k => $menu_second_v): ?>
  85. <li class="layui-nav-item <?php if($menu_second_v['selected']): ?> layui-nav-itemed <?php endif; if(!$menu_second_v['child_list'] && $menu_second_v['selected']): ?> layui-this<?php endif; ?>">
  86. <a class="layui-menu-tips" href="<?php if(!$menu_second_v['child_list']): ?> <?php echo htmlentities($menu_second_v['url']); else: ?>javascript:;<?php endif; ?>"><?php echo htmlentities($menu_second_v['title']); ?></a>
  87. <?php if(!(empty($menu_second_v['child_list']) || (($menu_second_v['child_list'] instanceof \think\Collection || $menu_second_v['child_list'] instanceof \think\Paginator ) && $menu_second_v['child_list']->isEmpty()))): ?>
  88. <dl class="layui-nav-child">
  89. <?php foreach($menu_second_v["child_list"] as $menu_third_k => $menu_third_v): ?>
  90. <dd class="<?php if($menu_third_v['selected']): ?> layui-this<?php endif; ?>">
  91. <a href="<?php echo htmlentities($menu_third_v['url']); ?>"><?php echo htmlentities($menu_third_v['title']); ?></a>
  92. </dd>
  93. <?php endforeach; ?>
  94. </dl>
  95. <?php endif; ?>
  96. </li>
  97. <?php endforeach; ?>
  98. </ul>
  99. </div>
  100. </div>
  101. <?php endif; ?>
  102. <div class="layui-body<?php if(empty($serond_menu) || (($serond_menu instanceof \think\Collection || $serond_menu instanceof \think\Paginator ) && $serond_menu->isEmpty())): ?> child_no_exit<?php endif; ?>">
  103. <!-- 面包屑 -->
  104. <?php if(count($serond_menu) > 0): ?>
  105. <div class="ns-crumbs<?php if(empty($serond_menu) || (($serond_menu instanceof \think\Collection || $serond_menu instanceof \think\Paginator ) && $serond_menu->isEmpty())): ?> child_no_exit<?php endif; ?>">
  106. <span class="layui-breadcrumb" lay-separator="-">
  107. <?php foreach($crumbs as $crumbs_k => $crumbs_v): if(count($crumbs) == ($crumbs_k + 1)): ?>
  108. <a href="<?php echo htmlentities($crumbs_v['url']); ?>"><cite><?php echo htmlentities($crumbs_v['title']); ?></cite></a>
  109. <?php else: ?>
  110. <a href="<?php echo htmlentities($crumbs_v['url']); ?>"><?php echo htmlentities($crumbs_v['title']); ?></a>
  111. <?php endif; ?>
  112. <?php endforeach; ?>
  113. </span>
  114. </div>
  115. <?php endif; ?>
  116. <div class="ns-body-content <?php if(count($serond_menu) < 1): ?> crumbs_no_exit<?php endif; ?>">
  117. <div class="ns-body">
  118. <!-- 四级导航 -->
  119. <?php if(isset($forth_menu) && !empty($forth_menu)): ?>
  120. <div class="fourstage-nav layui-tab layui-tab-brief" lay-filter="edit_user_tab">
  121. <ul class="layui-tab-title">
  122. <?php if(is_array($forth_menu) || $forth_menu instanceof \think\Collection || $forth_menu instanceof \think\Paginator): $i = 0; $__LIST__ = $forth_menu;if( count($__LIST__)==0 ) : echo "" ;else: foreach($__LIST__ as $key=>$menu): $mod = ($i % 2 );++$i;?>
  123. <li class="<?php echo $menu['selected']==1 ? 'layui-this' : ''; ?>" lay-id="basic_info"><a href="<?php echo htmlentities($menu['parse_url']); ?>"><?php echo htmlentities($menu['title']); ?></a></li>
  124. <?php endforeach; endif; else: echo "" ;endif; ?>
  125. </ul>
  126. </div>
  127. <?php endif; ?>
  128. <div class="layui-collapse ns-tips">
  129. <div class="layui-colla-item">
  130. <h2 class="layui-colla-title">操作提示</h2>
  131. <ul class="layui-colla-content layui-show">
  132. <li>商品类型用在添加或者编辑商品选择类型然后配置对应的商品属性。</li>
  133. <li>商品配置好对应的类型和属性,前台用户可以根据分类关联的类型在搜索分类商品之后根据属性进行进一步的搜索。</li>
  134. <li>商家也可添加自己店铺的类型和属性,平台端的商品类型和属性才能参与前台搜索。</li>
  135. </ul>
  136. </div>
  137. </div>
  138. <!-- 搜索框 -->
  139. <div class="ns-single-filter-box">
  140. <button class="layui-btn ns-bg-color" onclick="addAttr()">添加商品类型</button>
  141. <div class="layui-form">
  142. <div class="layui-input-inline">
  143. <input type="text" name="search_keys" placeholder="请输入商品类型名称" autocomplete="off" class="layui-input">
  144. <button type="button" class="layui-btn layui-btn-primary" lay-filter="search" lay-submit>
  145. <i class="layui-icon">&#xe615;</i>
  146. </button>
  147. </div>
  148. </div>
  149. </div>
  150. <!-- 列表 -->
  151. <table id="attr_class_list" lay-filter="attr_class_list"></table>
  152. <!-- 操作 -->
  153. <script type="text/html" id="operation">
  154. <div class="ns-table-btn">
  155. <a class="layui-btn" lay-event="edit">管理</a>
  156. <a class="layui-btn" lay-event="delete">删除</a>
  157. </div>
  158. </script>
  159. <script type="text/html" id="addAttr">
  160. <div class="layui-form">
  161. <div class="layui-form-item">
  162. <label class="layui-form-label sm"><span class="required">*</span>类型名称</label>
  163. <div class="layui-input-block">
  164. <input name="class_name" type="text" placeholder="请输入类型名称" lay-verify="required" class="layui-input ns-len-mid">
  165. </div>
  166. </div>
  167. <div class="layui-form-item">
  168. <label class="layui-form-label sm">排序</label>
  169. <div class="layui-input-block">
  170. <input name="sort" type="number" value="0" placeholder="请输入排序" lay-verify="num" class="layui-input ns-len-short">
  171. </div>
  172. <p class="ns-word-aux sm">排序值必须为整数</p>
  173. </div>
  174. <div class="ns-form-row sm">
  175. <button class="layui-btn ns-bg-color" lay-submit lay-filter="save">保存</button>
  176. <button class="layui-btn layui-btn-primary" onclick="closeAttrLayer()">返回</button>
  177. </div>
  178. </div>
  179. </script>
  180. <script type="text/html" id="editSort">
  181. <input name="sort" type="number" onchange="editSort({{d.class_id}},this)" value="{{d.sort}}" placeholder="请输入排序" class="layui-input edit-sort ns-sort-len">
  182. </script>
  183. </div>
  184. <!-- 版权信息 -->
  185. <div class="ns-footer">
  186. <div class="ns-footer-img">
  187. <a href="#"><img style="-webkit-filter: grayscale(100%);-moz-filter: grayscale(100%);-ms-filter: grayscale(100%);-o-filter: grayscale(100%);filter: grayscale(100%);filter: gray;" src="<?php if(!empty($copyright['logo'])): ?> <?php echo img($copyright['logo']); else: ?>http://yueshengshop.top/public/static/img/copyright_logo.png<?php endif; ?>" /></a>
  188. </div>
  189. </div>
  190. </div>
  191. </div>
  192. </div>
  193. <!-- 重置密码弹框html -->
  194. <div class="layui-form" id="reset_pass" style="display: none;">
  195. <div class="layui-form-item">
  196. <label class="layui-form-label"><span class="required">*</span>原密码</label>
  197. <div class="layui-input-block">
  198. <input type="password" id="old_pass" name="old_pass" required class="layui-input ns-len-mid" maxlength="18" autocomplete="off" readonly onfocus="this.removeAttribute('readonly');" onblur="this.setAttribute('readonly',true);">
  199. <span class="required"></span>
  200. </div>
  201. </div>
  202. <div class="layui-form-item">
  203. <label class="layui-form-label"><span class="required">*</span>新密码</label>
  204. <div class="layui-input-block">
  205. <input type="password" id="new_pass" name="new_pass" required class="layui-input ns-len-mid" maxlength="18" autocomplete="off" readonly onfocus="this.removeAttribute('readonly');" onblur="this.setAttribute('readonly',true);">
  206. <span class="required"></span>
  207. </div>
  208. </div>
  209. <div class="layui-form-item">
  210. <label class="layui-form-label"><span class="required">*</span>确认新密码</label>
  211. <div class="layui-input-block">
  212. <input type="password" id="repeat_pass" name="repeat_pass" required class="layui-input ns-len-mid" maxlength="18" autocomplete="off" readonly onfocus="this.removeAttribute('readonly');" onblur="this.setAttribute('readonly',true);">
  213. <span class="required"></span>
  214. </div>
  215. </div>
  216. <div class="ns-form-row">
  217. <button class="layui-btn ns-bg-color" onclick="repass()">确定</button>
  218. <button class="layui-btn layui-btn-primary" onclick="closePass()">返回</button>
  219. </div>
  220. </div>
  221. <script type="text/javascript">
  222. layui.use('element',function () {
  223. var element = layui.element;
  224. element.render('breadcrumb');
  225. });
  226. function clearCache () {
  227. $.ajax({
  228. type: 'post',
  229. url: ns.url("admin/Login/clearCache"),
  230. dataType: 'JSON',
  231. success: function(res) {
  232. layer.msg(res.message);
  233. location.reload();
  234. }
  235. })
  236. }
  237. /**
  238. * 重置密码
  239. */
  240. var index;
  241. function resetPassword() {
  242. index = layer.open({
  243. type:1,
  244. content:$('#reset_pass'),
  245. offset: 'auto',
  246. area: ['650px']
  247. });
  248. setTimeout(function() {
  249. $(".ns-reset-pass").removeClass('layui-this');
  250. }, 1000);
  251. }
  252. // $(".ns-reset-pass").on('click', function() {
  253. // $(this).removeClass('layui-this');
  254. // })
  255. var repeat_flag = false;
  256. function repass(){
  257. var old_pass = $("#old_pass").val();
  258. var new_pass = $("#new_pass").val();
  259. var repeat_pass = $("#repeat_pass").val();
  260. if (old_pass == '') {
  261. $("#old_pass").focus();
  262. layer.msg("原密码不能为空");
  263. return;
  264. }
  265. if (new_pass == '') {
  266. $("#new_pass").focus();
  267. layer.msg("密码不能为空");
  268. return;
  269. } else if ($("#new_pass").val().length < 6) {
  270. $("#new_pass").focus();
  271. layer.msg("密码不能少于6位数");
  272. return;
  273. }
  274. if (repeat_pass == '') {
  275. $("#repeat_pass").focus();
  276. layer.msg("密码不能为空");
  277. return;
  278. } else if ($("#repeat_pass").val().length < 6) {
  279. $("#repeat_pass").focus();
  280. layer.msg("密码不能少于6位数");
  281. return;
  282. }
  283. if (new_pass != repeat_pass) {
  284. $("#repeat_pass").focus();
  285. layer.msg("两次密码输入不一样,请重新输入");
  286. return;
  287. }
  288. if(repeat_flag)return;
  289. repeat_flag = true;
  290. $.ajax({
  291. type: "POST",
  292. dataType: 'JSON',
  293. url: ns.url("admin/login/modifypassword"),
  294. data: {"old_pass": old_pass,"new_pass": new_pass},
  295. success: function(res) {
  296. layer.msg(res.message);
  297. repeat_flag = false;
  298. if (res.code == 0) {
  299. layer.close(index);
  300. location.reload();
  301. }
  302. }
  303. });
  304. }
  305. function closePass() {
  306. layer.close(index);
  307. }
  308. layui.use('element', function() {
  309. var element = layui.element;
  310. element.init();
  311. });
  312. </script>
  313. <script>
  314. var laytpl, add_attr_index = -1,
  315. form, table;
  316. layui.use(['form', 'laytpl'], function() {
  317. var repeat_flag = false; //防重复标识
  318. laytpl = layui.laytpl;
  319. form = layui.form;
  320. form.render();
  321. table = new Table({
  322. elem: '#attr_class_list',
  323. url: ns.url("admin/goodsattr/lists"),
  324. cols: [
  325. [ {
  326. field: 'class_name',
  327. title: '类型名称',
  328. width: '70%',
  329. unresize: 'false'
  330. }, {
  331. unresize: 'false',
  332. title: '排序',
  333. width: '10%',
  334. align: 'center',
  335. templet: '#editSort'
  336. }, {
  337. title: '操作',
  338. width: '15%',
  339. toolbar: '#operation',
  340. unresize: 'false'
  341. }]
  342. ]
  343. });
  344. /**
  345. * 监听工具栏操作
  346. */
  347. table.tool(function(obj) {
  348. var data = obj.data;
  349. switch (obj.event) {
  350. case 'edit':
  351. location.href = ns.url("admin/goodsattr/editattr?class_id=" + data.class_id);
  352. break;
  353. case 'delete':
  354. deleteAttr(data.class_id);
  355. break;
  356. }
  357. });
  358. /**
  359. * 删除
  360. */
  361. function deleteAttr(class_id) {
  362. layer.confirm('删除类型后将会删除对应关联关系,移除后数据会发生不可逆转的行为,请谨慎操作', function() {
  363. $.ajax({
  364. url: ns.url("admin/goodsattr/deleteAttr"),
  365. data: {
  366. class_id
  367. },
  368. dataType: 'JSON',
  369. type: 'POST',
  370. success: function(res) {
  371. layer.msg(res.message);
  372. if (res.code == 0) {
  373. table.reload();
  374. }
  375. }
  376. });
  377. });
  378. }
  379. /**
  380. * 搜索功能
  381. */
  382. form.on('submit(search)', function(data) {
  383. table.reload({
  384. page: {
  385. curr: 1
  386. },
  387. where: data.field
  388. });
  389. });
  390. form.on('submit(save)', function(data) {
  391. if (repeat_flag) return false;
  392. repeat_flag = true;
  393. $.ajax({
  394. url: '<?php echo addon_url("admin/goodsattr/addAttr"); ?>',
  395. data: data.field,
  396. dataType: 'JSON',
  397. type: 'POST',
  398. success: function(data) {
  399. layer.msg(data.message);
  400. if (data.code == 0) {
  401. table.reload();
  402. layer.close(add_attr_index);
  403. }
  404. repeat_flag = false;
  405. }
  406. });
  407. return false;
  408. });
  409. /**
  410. * 表单验证
  411. */
  412. form.verify({
  413. num: function(value) {
  414. if (value == '') {
  415. return;
  416. }
  417. if (value % 1 != 0) {
  418. return '排序数值必须为整数';
  419. }
  420. if (value < 0) {
  421. return '排序数值必须为大于0';
  422. }
  423. }
  424. });
  425. });
  426. // 监听单元格编辑
  427. function editSort(id, event) {
  428. var data = $(event).val();
  429. if (!new RegExp("^-?[1-9]\\d*$").test(data)) {
  430. layer.msg("排序号只能是整数");
  431. return;
  432. }
  433. if(data<0){
  434. layer.msg("排序号必须大于0");
  435. return ;
  436. }
  437. $.ajax({
  438. type: 'POST',
  439. url: ns.url("admin/goodsattr/modifySort"),
  440. data: {
  441. sort: data,
  442. class_id: id
  443. },
  444. dataType: 'JSON',
  445. success: function(res) {
  446. layer.msg(res.message);
  447. if (res.code == 0) {
  448. table.reload();
  449. }
  450. }
  451. });
  452. }
  453. function addAttr() {
  454. var add_attr = $("#addAttr").html();
  455. laytpl(add_attr).render({}, function(html) {
  456. add_attr_index = layer.open({
  457. title: '添加商品类型',
  458. skin: 'layer-tips-class',
  459. type: 1,
  460. area: ['450px'],
  461. content: html
  462. });
  463. });
  464. }
  465. function closeAttrLayer() {
  466. layer.close(add_attr_index);
  467. }
  468. </script>
  469. </body>
  470. </html>