index.js 8.1 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342
  1. ;
  2. layui.config({
  3. base: "../../../admin/js/layuiPlugins/"
  4. }).use(['form', 'layer', 'jquery', 'laypage', 'element', 'table', 'laydate', 'laytpl', 'cascade'], function() {
  5. var form = layui.form,
  6. layer = layui.layer,
  7. laytpl = layui.laytpl,
  8. laypage = layui.laypage,
  9. $ = layui.jquery,
  10. table = layui.table,
  11. element = layui.element,
  12. laydate = layui.laydate,
  13. cascade = layui.cascade;
  14. //自定义验证
  15. form.verify({
  16. namelength: [
  17. /^.{0,18}$/,
  18. "长度限制在0-18个字符噢"
  19. ]
  20. });
  21. //监听一级Tab切换
  22. element.on('tab(productTabBrief)', function(obj) {
  23. switch (obj.index) {
  24. case 0:
  25. tableVm.reload();
  26. break;
  27. }
  28. });
  29. var vm = function(obj) {
  30. var _this = this;
  31. _this.dataId = obj.dataId || 'dataListId'; //数据表ID
  32. _this.elem = obj.elem || 'dataListBox'; //数据表容器
  33. _this.toolbar = obj.toolbar || '';
  34. _this.url = obj.url || ''; //数据表接口URL
  35. _this.page = obj.page; //分页
  36. _this.limit = obj.limit;
  37. _this.cols = obj.cols || []; //表头
  38. _this.done = obj.done || ''; //表头
  39. _this.formObj = {}; //当前表单对象
  40. _this.searchParameter = {}; //搜索参数
  41. _this.config = {};
  42. _this.where = obj.where;
  43. _this.config.dateTime = obj.dateTime;
  44. _this.dateTime = {
  45. year: 365 * 1 * 24 * 3600 * 1000,
  46. month: 30 * 1 * 24 * 3600 * 1000,
  47. day: 24 * 3600 * 1000,
  48. }
  49. _this.main();
  50. };
  51. //入口函数
  52. vm.prototype.main = function() {
  53. var _this = this;
  54. _this.initializationData()
  55. };
  56. //初始化表格
  57. vm.prototype.initializationData = function() {
  58. var _this = this;
  59. _this.dataListObj = table.render({
  60. id: _this.dataId,
  61. elem: _this.elem,
  62. toolbar: _this.toolbar,
  63. defaultToolbar: ['filter'],
  64. url: _this.url,
  65. page: _this.page,
  66. cols: _this.cols,
  67. done: _this.done,
  68. where: $.extend(_this.where, _this.searchParameter),
  69. limit: _this.limit,
  70. });
  71. };
  72. //重新加载数据表
  73. vm.prototype.reload = function() {
  74. var _this = this;
  75. _this.dataListObj = table.reload(_this.dataId, { //执行重载数据表
  76. where: _this.searchParameter,
  77. page: {
  78. curr: 1
  79. }
  80. });
  81. };
  82. //初始化组件
  83. vm.prototype.initializationModule = function(obj) {
  84. var _this = this;
  85. $.ajax({
  86. url: obj.url,
  87. data: obj.data,
  88. success: function(res) {
  89. var html = '<option value="">' + obj.prompt + '</option>';
  90. for (var i in res.data) {
  91. html += '<option value="' + res.data[i].id + '">' + res.data[i].name +
  92. '</option>';
  93. }
  94. $(obj.elem).html(html);
  95. form.render();
  96. }
  97. });
  98. };
  99. //初始化事件监听
  100. vm.prototype.eventMonitor = function(id) {
  101. var _this = this;
  102. //监听搜索表单事件
  103. if (typeof(_this.formEvent) == "object") {
  104. form.on('submit(' + _this.formEvent + ')', function(obj) {
  105. _this.formInfoSearch(_this.formEvent, obj);
  106. return false;
  107. });
  108. }
  109. return _this;
  110. };
  111. //搜索处理函数
  112. vm.prototype.formInfoSearch = function(id, obj) {
  113. var _this = this;
  114. _this.searchParameter = obj.field;
  115. _this.reload();
  116. };
  117. //渲染时间选择器
  118. vm.prototype.showTimeSelect = function(obj) {
  119. laydate.render({
  120. elem: obj.elem,
  121. type: "month",
  122. value: ((new Date().getMonth() + 1) < 10) ? new Date().getFullYear() + '-0' + (new Date().getMonth() + 1) : new Date()
  123. .getFullYear() + '-' + (new Date().getMonth() + 1)
  124. });
  125. };
  126. //jquer事件绑定
  127. vm.prototype.$event = function() {
  128. var _this = this;
  129. $(_this.dataExportBtn).on("click", function(e) {
  130. _this.dataExport();
  131. });
  132. };
  133. //数据导出处理函数
  134. vm.prototype.dataExport = function() {
  135. var _this = this;
  136. _this.downloadParameter = '?';
  137. for (var i in _this.dataListObj.config.where) {
  138. _this.downloadParameter += "&" + i + '=' + _this.dataListObj.config.where[i];
  139. }
  140. _this.startDownload();
  141. };
  142. //启动下载
  143. vm.prototype.startDownload = function() {
  144. var _this = this;
  145. window.open(window.hywa.config.href + window.hywa.config.port[_this.dataDownload] + _this.downloadParameter);
  146. };
  147. //模板引擎
  148. function typeTpl(obj) {
  149. laytpl(selectTpl.innerHTML).render(obj, function(html) {
  150. $(obj.elem).html(html);
  151. form.render();
  152. });
  153. }
  154. // 表格列表
  155. let tableId = "tableData";
  156. var tableVm = new vm({
  157. dataId: 'tableData',
  158. elem: '#tableData',
  159. url: 'productTableUrl',
  160. toolbar: '#toolbar',
  161. page: true,
  162. cols: [
  163. [{
  164. title: '产品图片',
  165. field: 'imgUrl',
  166. width: 120,
  167. height: 60,
  168. align: 'center',
  169. templet: "<span><img width='50%' src=" + window.hywa.config.href + '/{{d.imgUrl}}' + "/></span>"
  170. }, {
  171. field: 'name',
  172. title: '产品名称'
  173. }, {
  174. field: 'commonName',
  175. title: '常用名',
  176. }, {
  177. field: 'productType',
  178. title: '小类',
  179. align: 'center'
  180. }, {
  181. field: 'productBigType',
  182. title: '大类',
  183. align: 'center'
  184. }, {
  185. field: 'from',
  186. title: '来源',
  187. align: 'center',
  188. templet: '<div>{{d.source == 0? "自建" : "数据同步"}}</div>'
  189. }, {
  190. field: 'enable',
  191. title: '是否可用',
  192. align: 'center',
  193. sort: true,
  194. templet: '<div>{{# d.checked = ((d.enable == 0)? "checked" : ""); }}<input type="checkbox" id="{{d.id}}" name="sex" value="{{d.enable}}" lay-skin="switch" lay-text="是|否" lay-filter="enable" {{d.checked}}></div>',
  195. width: 100
  196. }, {
  197. field: 'operating',
  198. title: '操作',
  199. toolbar: "#operatingTool",
  200. align: 'center',
  201. fixed: 'right',
  202. width: 150
  203. }]
  204. ],
  205. done: function() {
  206. if (!layui.data('auth').data.add) {
  207. $('.add-btn').hide();
  208. }
  209. }
  210. });
  211. //初始化事件监听
  212. tableVm.formEvent = ['tableSearch'];
  213. tableVm.eventMonitor();
  214. tableVm.$event();
  215. // 获取商品大类别
  216. $.ajax({
  217. type: 'get',
  218. url: 'productBigTypeUrl',
  219. data: {
  220. type: 'productType'
  221. },
  222. success: function(res) {
  223. typeTpl({
  224. elem: "#bigTypeSelect",
  225. name: "大类别",
  226. list: res.data
  227. });
  228. }
  229. });
  230. //商品小类别
  231. form.on('select(bigType)', function(data) {
  232. $.ajax({
  233. type: 'get',
  234. url: 'productSmallTypeUrl',
  235. data: {
  236. bigTypeId: data.value
  237. },
  238. success: function(res) {
  239. typeTpl({
  240. elem: "#smallTypeSelect",
  241. name: "小类别",
  242. list: res.data
  243. });
  244. }
  245. });
  246. });
  247. //监听头部工具栏
  248. table.on('toolbar(' + tableId + ')', function(obj) {
  249. switch (obj.event) {
  250. case 'add':
  251. layer.open({
  252. type: 2,
  253. title: "新增",
  254. area: ['700px', '500px'],
  255. maxmin: true,
  256. content: 'add_change.html',
  257. btn: ['确定', '取消'],
  258. yes: function(index, layero) {
  259. var submit = layero.find('iframe').contents().find("#formSubmit");
  260. submit.click();
  261. },
  262. });
  263. break;
  264. };
  265. });
  266. //可用性修改
  267. form.on('switch(enable)', function(data) {
  268. var field = {
  269. id: data.elem.id,
  270. enable: data.value == 0 ? 1 : 0,
  271. }
  272. $.ajax({
  273. type: 'post',
  274. url: 'productStatusUrl',
  275. data: JSON.stringify(field),
  276. contentType: 'application/json',
  277. success: function(res) {
  278. if (!(res.code - 0)) {
  279. layer.msg(res.msg, {
  280. icon: 1
  281. });
  282. tableVm.reload();
  283. } else {
  284. data.elem.checked = !data.elem.checked;
  285. form.render();
  286. }
  287. }
  288. });
  289. });
  290. //工具条处理
  291. function toolOperating(name, obj) {
  292. if (obj.event === 'del') { //删除
  293. layer.confirm('真的删除吗?', function(index) {
  294. layer.close(index);
  295. var index = layer.msg('删除中,请稍候', {
  296. icon: 16,
  297. time: false,
  298. shade: 0.8
  299. });
  300. $.ajax({
  301. type: 'delete',
  302. url: 'del_productTableData?id=' + obj.data.id,
  303. success: function(res) {
  304. if (!(res.code - 0)) {
  305. obj.del();
  306. layer.close(index);
  307. layer.msg(res.msg, {
  308. icon: 1
  309. });
  310. table.reload(name);
  311. } else {
  312. layer.msg(res.msg, {
  313. icon: 2
  314. });
  315. }
  316. }
  317. });
  318. });
  319. } else if (obj.event === 'edit') { //修改
  320. layer.open({
  321. type: 2,
  322. title: "修改",
  323. area: ['700px', '500px'],
  324. maxmin: true,
  325. content: 'add_change.html?id=' + obj.data.id,
  326. btn: ['确定', '取消'],
  327. yes: function(index, layero) {
  328. var submit = layero.find('iframe').contents().find("#formSubmit");
  329. submit.click();
  330. // table.reload(name);
  331. },
  332. });
  333. }
  334. }
  335. //监听事件条
  336. table.on('tool(' + tableId + ')', function(obj) {
  337. toolOperating(tableId, obj);
  338. });
  339. });