resource-selector.js 15 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479
  1. /******/ (function(modules) { // webpackBootstrap
  2. /******/ // The module cache
  3. /******/ var installedModules = {};
  4. /******/
  5. /******/ // The require function
  6. /******/ function __webpack_require__(moduleId) {
  7. /******/
  8. /******/ // Check if module is in cache
  9. /******/ if(installedModules[moduleId]) {
  10. /******/ return installedModules[moduleId].exports;
  11. /******/ }
  12. /******/ // Create a new module (and put it into the cache)
  13. /******/ var module = installedModules[moduleId] = {
  14. /******/ i: moduleId,
  15. /******/ l: false,
  16. /******/ exports: {}
  17. /******/ };
  18. /******/
  19. /******/ // Execute the module function
  20. /******/ modules[moduleId].call(module.exports, module, module.exports, __webpack_require__);
  21. /******/
  22. /******/ // Flag the module as loaded
  23. /******/ module.l = true;
  24. /******/
  25. /******/ // Return the exports of the module
  26. /******/ return module.exports;
  27. /******/ }
  28. /******/
  29. /******/
  30. /******/ // expose the modules object (__webpack_modules__)
  31. /******/ __webpack_require__.m = modules;
  32. /******/
  33. /******/ // expose the module cache
  34. /******/ __webpack_require__.c = installedModules;
  35. /******/
  36. /******/ // define getter function for harmony exports
  37. /******/ __webpack_require__.d = function(exports, name, getter) {
  38. /******/ if(!__webpack_require__.o(exports, name)) {
  39. /******/ Object.defineProperty(exports, name, { enumerable: true, get: getter });
  40. /******/ }
  41. /******/ };
  42. /******/
  43. /******/ // define __esModule on exports
  44. /******/ __webpack_require__.r = function(exports) {
  45. /******/ if(typeof Symbol !== 'undefined' && Symbol.toStringTag) {
  46. /******/ Object.defineProperty(exports, Symbol.toStringTag, { value: 'Module' });
  47. /******/ }
  48. /******/ Object.defineProperty(exports, '__esModule', { value: true });
  49. /******/ };
  50. /******/
  51. /******/ // create a fake namespace object
  52. /******/ // mode & 1: value is a module id, require it
  53. /******/ // mode & 2: merge all properties of value into the ns
  54. /******/ // mode & 4: return value when already ns object
  55. /******/ // mode & 8|1: behave like require
  56. /******/ __webpack_require__.t = function(value, mode) {
  57. /******/ if(mode & 1) value = __webpack_require__(value);
  58. /******/ if(mode & 8) return value;
  59. /******/ if((mode & 4) && typeof value === 'object' && value && value.__esModule) return value;
  60. /******/ var ns = Object.create(null);
  61. /******/ __webpack_require__.r(ns);
  62. /******/ Object.defineProperty(ns, 'default', { enumerable: true, value: value });
  63. /******/ if(mode & 2 && typeof value != 'string') for(var key in value) __webpack_require__.d(ns, key, function(key) { return value[key]; }.bind(null, key));
  64. /******/ return ns;
  65. /******/ };
  66. /******/
  67. /******/ // getDefaultExport function for compatibility with non-harmony modules
  68. /******/ __webpack_require__.n = function(module) {
  69. /******/ var getter = module && module.__esModule ?
  70. /******/ function getDefault() { return module['default']; } :
  71. /******/ function getModuleExports() { return module; };
  72. /******/ __webpack_require__.d(getter, 'a', getter);
  73. /******/ return getter;
  74. /******/ };
  75. /******/
  76. /******/ // Object.prototype.hasOwnProperty.call
  77. /******/ __webpack_require__.o = function(object, property) { return Object.prototype.hasOwnProperty.call(object, property); };
  78. /******/
  79. /******/ // __webpack_public_path__
  80. /******/ __webpack_require__.p = "/";
  81. /******/
  82. /******/
  83. /******/ // Load entry module and return exports
  84. /******/ return __webpack_require__(__webpack_require__.s = 2);
  85. /******/ })
  86. /************************************************************************/
  87. /******/ ({
  88. /***/ "./resources/assets/dcat/extra/resource-selector.js":
  89. /*!**********************************************************!*\
  90. !*** ./resources/assets/dcat/extra/resource-selector.js ***!
  91. \**********************************************************/
  92. /*! no static exports found */
  93. /***/ (function(module, exports) {
  94. function _typeof(obj) { "@babel/helpers - typeof"; if (typeof Symbol === "function" && typeof Symbol.iterator === "symbol") { _typeof = function _typeof(obj) { return typeof obj; }; } else { _typeof = function _typeof(obj) { return obj && typeof Symbol === "function" && obj.constructor === Symbol && obj !== Symbol.prototype ? "symbol" : typeof obj; }; } return _typeof(obj); }
  95. (function (w) {
  96. var NONE = '';
  97. function ResourceSelector(options) {
  98. var Dcat = w.Dcat;
  99. options = $.extend({
  100. title: '选择',
  101. // 弹窗标题
  102. selector: '',
  103. // 选择按钮选择器
  104. column: '',
  105. // 字段名称
  106. source: '',
  107. // 资源地址
  108. maxItem: 1,
  109. // 最大选项数量,0为不限制
  110. area: ['80%', '90%'],
  111. items: {},
  112. // 默认选中项,key => value 键值对
  113. placeholder: '',
  114. // input placeholder
  115. showCloseButton: false,
  116. lang: {
  117. close: Dcat.lang.close || '关闭',
  118. exceed_max_item: Dcat.lang.exceed_max_item || '您已超出最大可选择的数量',
  119. selected_options: Dcat.lang.selected_options || '已选中:num个选项'
  120. },
  121. displayerContainer: null,
  122. // 选项展示容器dom对象
  123. hiddenInput: null,
  124. // 隐藏表单dom对象
  125. displayer: null,
  126. // 自定义选中项渲染方法
  127. disabled: false,
  128. clearAllClass: '',
  129. clearOneClass: '',
  130. window: null
  131. }, options);
  132. options.window = options.window || top || w;
  133. var self = ResourceSelector,
  134. column = options.column,
  135. cls = column.replace(/[\[\]]*/g, '') + Math.random().toString(36).substr(2),
  136. layer = options.window.layer,
  137. $input = getQueryDomObject(options.displayerContainer) || $(options.selector).parents('.select-resource').find('div[name="' + column + '"]'),
  138. $hidden = getQueryDomObject(options.hiddenInput) || $('input[name="' + column + '"]'),
  139. tagClearClass = options.clearOneClass || cls + '-tag-clear-button',
  140. clearClass = options.clearAllClass || cls + '-clear-button',
  141. maxItem = options.maxItem,
  142. originalItems = options.items,
  143. iframeWin,
  144. layerIdx,
  145. $layerWin;
  146. options.clearOneClass = tagClearClass;
  147. options.clearAllClass = clearClass;
  148. $(options.selector).click(function () {
  149. if (options.disabled) return;
  150. if (layerIdx) {
  151. $layerWin.show();
  152. clickCheckedItems();
  153. return;
  154. }
  155. $(document).one('pjax:complete', function () {
  156. // 跳转新页面时移除弹窗
  157. layer.close(layerIdx);
  158. $layerWin.remove();
  159. layerIdx = $layerWin = null;
  160. });
  161. layerIdx = layer.open({
  162. type: 2,
  163. title: options.title,
  164. shadeClose: true,
  165. maxmin: false,
  166. resize: false,
  167. shade: false,
  168. scrollbar: false,
  169. skin: 'select-resource',
  170. area: formatArea(options.area),
  171. content: options.source + '?_mini=1',
  172. btn: options.showCloseButton ? [options.closeButtonText] : null,
  173. success: function success(layero) {
  174. iframeWin = options.window[layero.find('iframe')[0]['name']]; // 绑定勾选默认选项事件
  175. bindCheckedDefaultEvent(iframeWin);
  176. },
  177. yes: function yes() {
  178. $layerWin.hide();
  179. return false;
  180. },
  181. cancel: function cancel() {
  182. $layerWin.hide();
  183. return false;
  184. }
  185. });
  186. $layerWin = options.window.$('#layui-layer' + layerIdx);
  187. });
  188. function getQueryDomObject(value) {
  189. if (!value) {
  190. return;
  191. }
  192. return _typeof(value) === 'object' ? value : $(value);
  193. }
  194. /**
  195. * 多选
  196. */
  197. function multipleSelect($this) {
  198. var id = $this.data('id'),
  199. label = $this.data('label') || id,
  200. exist = Dcat.helpers.isset(originalItems, id);
  201. if ($this.prop('checked')) {
  202. if (!exist) {
  203. originalItems[id] = label;
  204. }
  205. } else if (exist) {
  206. delete originalItems[id];
  207. }
  208. if (maxItem > 0 && Dcat.helpers.len(originalItems) > maxItem) {
  209. unchecked($this);
  210. delete originalItems[id]; // 多选项判断最大长度
  211. return Dcat.warning(options.exceedMaxItemTip);
  212. }
  213. renderTags(originalItems);
  214. } // 单选
  215. function select($this) {
  216. var id = $this.data('id'),
  217. label = $this.data('label') || id;
  218. getAllCheckboxes().each(function () {
  219. if ($(this).data('id') != id) {
  220. unchecked($(this));
  221. }
  222. });
  223. originalItems = {};
  224. if ($this.prop('checked')) {
  225. originalItems[id] = label;
  226. }
  227. renderTags(originalItems);
  228. }
  229. /**
  230. * 显示选项内容
  231. *
  232. * @param items
  233. */
  234. function renderTags(items) {
  235. var ids = [];
  236. for (var id in items) {
  237. ids.push(id);
  238. } // 显示勾选的选项内容
  239. displayInputDiv(items);
  240. setSelectedId(ids); // 绑定清除事件
  241. $('.' + clearClass).click(clearAllTags);
  242. $('.' + tagClearClass).click(clearTag);
  243. }
  244. function setSelectedId(ids) {
  245. $hidden.val(ids.length ? ids.join(',') : NONE);
  246. }
  247. /**
  248. * 显示勾选的选项内容
  249. */
  250. function displayInputDiv(tag) {
  251. if (options.displayer) {
  252. if (typeof options.displayer == 'string' && Dcat.helpers.isset(self.displayers, options.displayer)) {
  253. return self.displayers[options.displayer](tag, $input, options);
  254. } // 自定义选中内容渲染
  255. return options.displayer(tag, $input, options);
  256. }
  257. return self.displayers["default"](tag, $input, options);
  258. }
  259. function bindCheckedDefaultEvent(iframeWin) {
  260. Dcat.ready(function () {
  261. clickCheckedItems();
  262. getAllCheckboxes().change(function () {
  263. if (maxItem == 1) {
  264. select($(this));
  265. } else {
  266. multipleSelect($(this));
  267. }
  268. });
  269. if (maxItem == 1) {
  270. // 单选模式禁用全选按钮
  271. $(layer.getChildFrame('.checkbox-grid .select-all', layerIdx)).click(function () {
  272. return false;
  273. });
  274. }
  275. }, iframeWin);
  276. }
  277. function unchecked($ckb) {
  278. $ckb.parents('tr').css('background-color', '');
  279. $ckb.prop('checked', false);
  280. } // 勾选默认选项
  281. function clickCheckedItems() {
  282. setTimeout(function () {
  283. var ckb = layer.getChildFrame('tbody .checkbox-grid input[type="checkbox"]:checked', layerIdx);
  284. unchecked(ckb);
  285. for (var id in originalItems) {
  286. layer.getChildFrame('.checkbox-grid input[data-id="' + id + '"]', layerIdx).click();
  287. }
  288. }, 10);
  289. }
  290. function getAllCheckboxes() {
  291. return $(layer.getChildFrame('.checkbox-grid input[type="checkbox"]:not(.select-all)', layerIdx));
  292. }
  293. /**
  294. * 清除所有选项
  295. */
  296. function clearTag() {
  297. delete originalItems[$(this).data('id')];
  298. renderTags(originalItems);
  299. }
  300. /**
  301. * 清除所有选项
  302. */
  303. function clearAllTags() {
  304. originalItems = {};
  305. renderTags(originalItems);
  306. }
  307. function formatArea(area) {
  308. if (w.screen.width <= 750) {
  309. return ['100%', '100%'];
  310. }
  311. return area;
  312. }
  313. renderTags(originalItems);
  314. }
  315. ResourceSelector.displayers = {
  316. "default": function _default(tag, $input, opts) {
  317. var place = '<span class="default-text" style="opacity:0.75">' + (opts.placeholder || $input.attr('placeholder')) + '</span>',
  318. maxItem = opts.maxItem;
  319. function init() {
  320. if (!Dcat.helpers.len(tag)) {
  321. return $input.html(place);
  322. }
  323. if (maxItem == 1) {
  324. return $input.html(buildOne(tag[Object.keys(tag)[0]]));
  325. }
  326. $input.html(buildMany(tag));
  327. }
  328. function buildMany(tag) {
  329. var html = [];
  330. for (var i in tag) {
  331. if (maxItem > 2 || !maxItem) {
  332. var strVar = "";
  333. strVar += "<li class=\"select2-selection__choice\" >";
  334. strVar += tag[i] + " <span data-id=\"" + i + "\" class=\"select2-selection__choice__remove ";
  335. strVar += opts.clearOneClass + "\" role=\"presentation\"> ×</span>";
  336. strVar += "</li>";
  337. html.push(strVar);
  338. } else {
  339. html.push("<a class='label label-primary'>" + tag[i] + " " + "<span data-id=" + i + " class='" + opts.clearOneClass + "' style='font-weight:bold;cursor:pointer;font-size:14px'>×</span></a>");
  340. }
  341. }
  342. if (!(maxItem > 2 || !maxItem)) {
  343. return buildOne(html.join('&nbsp;'));
  344. }
  345. html.unshift('<span class="select2-selection__clear ' + opts.clearAllClass + '">×</span>');
  346. html = '<ul class="select2-selection__rendered">' + html.join('') + '</ul>';
  347. return html;
  348. }
  349. /**
  350. * 单个选项样式
  351. *
  352. * @param tag
  353. * @returns {string}
  354. */
  355. function buildOne(tag) {
  356. var clearButton = "<div class='pull-right " + opts.clearAllClass + "' style='font-weight:bold;cursor:pointer'>×</div>";
  357. return "" + tag + "" + clearButton;
  358. }
  359. init();
  360. },
  361. // list模式
  362. navList: function navList(tag, $input, opts) {
  363. var place = '<span style="opacity:0.75">' + (opts.placeholder || $input.attr('placeholder')) + '</span>',
  364. maxItem = opts.maxItem;
  365. function init() {
  366. var $app = $(opts.selector).parents('.select-resource').find('app');
  367. $app.html('');
  368. if (!Dcat.helpers.len(tag)) {
  369. return $input.html(place);
  370. }
  371. if (maxItem == 1) {
  372. return $input.html(buildOne(tag[Object.keys(tag)[0]]));
  373. }
  374. $input.html(buildOne(opts.selectedOptionsTip.replace(':num', Dcat.helpers.len(tag))));
  375. $app.html(buildMany(tag));
  376. }
  377. function buildMany(tag) {
  378. var html = [];
  379. for (var i in tag) {
  380. var strVar = "";
  381. strVar += "<li>";
  382. strVar += "<a class='pull-left'>" + tag[i] + "</a><a data-id='" + i + "' class='pull-right red ";
  383. strVar += opts.clearOneClass + "' ><i class='fa fa-close'></i></a>";
  384. strVar += "<span class='clearfix'></span></li>";
  385. html.push(strVar);
  386. }
  387. html = '<ul class="nav nav-pills nav-stacked" >' + html.join('') + '</ul>';
  388. return html;
  389. }
  390. function buildOne(tag) {
  391. var clearButton = "<div class='pull-right " + opts.clearAllClass + "' style='font-weight:bold;cursor:pointer'>×</div>";
  392. return tag + clearButton;
  393. }
  394. init();
  395. }
  396. };
  397. Dcat.ResourceSelector = ResourceSelector;
  398. })(window);
  399. /***/ }),
  400. /***/ 2:
  401. /*!****************************************************************!*\
  402. !*** multi ./resources/assets/dcat/extra/resource-selector.js ***!
  403. \****************************************************************/
  404. /*! no static exports found */
  405. /***/ (function(module, exports, __webpack_require__) {
  406. module.exports = __webpack_require__(/*! D:\php-project\laravel\laraveladmin\github-test\pck-dcat-admin\dcat-admin\resources\assets\dcat\extra\resource-selector.js */"./resources/assets/dcat/extra/resource-selector.js");
  407. /***/ })
  408. /******/ });