resource-selector.js 15 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480
  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. queryName: '_resource_',
  112. items: {},
  113. // 默认选中项,key => value 键值对
  114. placeholder: '',
  115. // input placeholder
  116. showCloseButton: false,
  117. lang: {
  118. close: Dcat.lang.close || '关闭',
  119. exceed_max_item: Dcat.lang.exceed_max_item || '您已超出最大可选择的数量',
  120. selected_options: Dcat.lang.selected_options || '已选中:num个选项'
  121. },
  122. displayerContainer: null,
  123. // 选项展示容器dom对象
  124. hiddenInput: null,
  125. // 隐藏表单dom对象
  126. displayer: null,
  127. // 自定义选中项渲染方法
  128. disabled: false,
  129. clearAllClass: '',
  130. clearOneClass: '',
  131. window: null
  132. }, options);
  133. options.window = options.window || top || w;
  134. var self = ResourceSelector,
  135. column = options.column,
  136. cls = column.replace(/[\[\]]*/g, '') + Math.random().toString(36).substr(2),
  137. layer = options.window.layer,
  138. $input = getQueryDomObject(options.displayerContainer) || $(options.selector).parents('.select-resource').find('div[name="' + column + '"]'),
  139. $hidden = getQueryDomObject(options.hiddenInput) || $('input[name="' + column + '"]'),
  140. tagClearClass = options.clearOneClass || cls + '-tag-clear-button',
  141. clearClass = options.clearAllClass || cls + '-clear-button',
  142. maxItem = options.maxItem,
  143. originalItems = options.items,
  144. iframeWin,
  145. layerIdx,
  146. $layerWin;
  147. options.clearOneClass = tagClearClass;
  148. options.clearAllClass = clearClass;
  149. $(options.selector).click(function () {
  150. if (options.disabled) return;
  151. if (layerIdx) {
  152. $layerWin.show();
  153. clickCheckedItems();
  154. return;
  155. }
  156. $(document).one('pjax:complete', function () {
  157. // 跳转新页面时移除弹窗
  158. layer.close(layerIdx);
  159. $layerWin.remove();
  160. layerIdx = $layerWin = null;
  161. });
  162. layerIdx = layer.open({
  163. type: 2,
  164. title: options.title,
  165. shadeClose: true,
  166. maxmin: false,
  167. resize: false,
  168. shade: false,
  169. scrollbar: false,
  170. skin: 'select-resource',
  171. area: formatArea(options.area),
  172. content: "".concat(options.source, "?").concat(options.queryName, "=1"),
  173. btn: options.showCloseButton ? [options.closeButtonText] : null,
  174. success: function success(layero) {
  175. iframeWin = options.window[layero.find('iframe')[0]['name']]; // 绑定勾选默认选项事件
  176. bindCheckedDefaultEvent(iframeWin);
  177. },
  178. yes: function yes() {
  179. $layerWin.hide();
  180. return false;
  181. },
  182. cancel: function cancel() {
  183. $layerWin.hide();
  184. return false;
  185. }
  186. });
  187. $layerWin = options.window.$('#layui-layer' + layerIdx);
  188. });
  189. function getQueryDomObject(value) {
  190. if (!value) {
  191. return;
  192. }
  193. return _typeof(value) === 'object' ? value : $(value);
  194. }
  195. /**
  196. * 多选
  197. */
  198. function multipleSelect($this) {
  199. var id = $this.data('id'),
  200. label = $this.data('label') || id,
  201. exist = Dcat.helpers.isset(originalItems, id);
  202. if ($this.prop('checked')) {
  203. if (!exist) {
  204. originalItems[id] = label;
  205. }
  206. } else if (exist) {
  207. delete originalItems[id];
  208. }
  209. if (maxItem > 0 && Dcat.helpers.len(originalItems) > maxItem) {
  210. unchecked($this);
  211. delete originalItems[id]; // 多选项判断最大长度
  212. return Dcat.warning(options.exceedMaxItemTip);
  213. }
  214. renderTags(originalItems);
  215. } // 单选
  216. function select($this) {
  217. var id = $this.data('id'),
  218. label = $this.data('label') || id;
  219. getAllCheckboxes().each(function () {
  220. if ($(this).data('id') != id) {
  221. unchecked($(this));
  222. }
  223. });
  224. originalItems = {};
  225. if ($this.prop('checked')) {
  226. originalItems[id] = label;
  227. }
  228. renderTags(originalItems);
  229. }
  230. /**
  231. * 显示选项内容
  232. *
  233. * @param items
  234. */
  235. function renderTags(items) {
  236. var ids = [];
  237. for (var id in items) {
  238. ids.push(id);
  239. } // 显示勾选的选项内容
  240. displayInputDiv(items);
  241. setSelectedId(ids); // 绑定清除事件
  242. $('.' + clearClass).click(clearAllTags);
  243. $('.' + tagClearClass).click(clearTag);
  244. }
  245. function setSelectedId(ids) {
  246. $hidden.val(ids.length ? ids.join(',') : NONE);
  247. }
  248. /**
  249. * 显示勾选的选项内容
  250. */
  251. function displayInputDiv(tag) {
  252. if (options.displayer) {
  253. if (typeof options.displayer == 'string' && Dcat.helpers.isset(self.displayers, options.displayer)) {
  254. return self.displayers[options.displayer](tag, $input, options);
  255. } // 自定义选中内容渲染
  256. return options.displayer(tag, $input, options);
  257. }
  258. return self.displayers["default"](tag, $input, options);
  259. }
  260. function bindCheckedDefaultEvent(iframeWin) {
  261. Dcat.ready(function () {
  262. clickCheckedItems();
  263. getAllCheckboxes().change(function () {
  264. if (maxItem == 1) {
  265. select($(this));
  266. } else {
  267. multipleSelect($(this));
  268. }
  269. });
  270. if (maxItem == 1) {
  271. // 单选模式禁用全选按钮
  272. $(layer.getChildFrame('.checkbox-grid .select-all', layerIdx)).click(function () {
  273. return false;
  274. });
  275. }
  276. }, iframeWin);
  277. }
  278. function unchecked($ckb) {
  279. $ckb.parents('tr').css('background-color', '');
  280. $ckb.prop('checked', false);
  281. } // 勾选默认选项
  282. function clickCheckedItems() {
  283. setTimeout(function () {
  284. var ckb = layer.getChildFrame('tbody .checkbox-grid input[type="checkbox"]:checked', layerIdx);
  285. unchecked(ckb);
  286. for (var id in originalItems) {
  287. layer.getChildFrame('.checkbox-grid input[data-id="' + id + '"]', layerIdx).click();
  288. }
  289. }, 10);
  290. }
  291. function getAllCheckboxes() {
  292. return $(layer.getChildFrame('.checkbox-grid input[type="checkbox"]:not(.select-all)', layerIdx));
  293. }
  294. /**
  295. * 清除所有选项
  296. */
  297. function clearTag() {
  298. delete originalItems[$(this).data('id')];
  299. renderTags(originalItems);
  300. }
  301. /**
  302. * 清除所有选项
  303. */
  304. function clearAllTags() {
  305. originalItems = {};
  306. renderTags(originalItems);
  307. }
  308. function formatArea(area) {
  309. if (w.screen.width <= 750) {
  310. return ['100%', '100%'];
  311. }
  312. return area;
  313. }
  314. renderTags(originalItems);
  315. }
  316. ResourceSelector.displayers = {
  317. "default": function _default(tag, $input, opts) {
  318. var place = '<span class="default-text" style="opacity:0.75">' + (opts.placeholder || $input.attr('placeholder')) + '</span>',
  319. maxItem = opts.maxItem;
  320. function init() {
  321. if (!Dcat.helpers.len(tag)) {
  322. return $input.html(place);
  323. }
  324. if (maxItem == 1) {
  325. return $input.html(buildOne(tag[Object.keys(tag)[0]]));
  326. }
  327. $input.html(buildMany(tag));
  328. }
  329. function buildMany(tag) {
  330. var html = [];
  331. for (var i in tag) {
  332. if (maxItem > 2 || !maxItem) {
  333. var strVar = "";
  334. strVar += "<li class=\"select2-selection__choice\" >";
  335. strVar += tag[i] + " <span data-id=\"" + i + "\" class=\"select2-selection__choice__remove ";
  336. strVar += opts.clearOneClass + "\" role=\"presentation\"> ×</span>";
  337. strVar += "</li>";
  338. html.push(strVar);
  339. } else {
  340. 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>");
  341. }
  342. }
  343. if (!(maxItem > 2 || !maxItem)) {
  344. return buildOne(html.join('&nbsp;'));
  345. }
  346. html.unshift('<span class="select2-selection__clear ' + opts.clearAllClass + '">×</span>');
  347. html = '<ul class="select2-selection__rendered">' + html.join('') + '</ul>';
  348. return html;
  349. }
  350. /**
  351. * 单个选项样式
  352. *
  353. * @param tag
  354. * @returns {string}
  355. */
  356. function buildOne(tag) {
  357. var clearButton = "<div class='pull-right " + opts.clearAllClass + "' style='font-weight:bold;cursor:pointer'>×</div>";
  358. return "" + tag + "" + clearButton;
  359. }
  360. init();
  361. },
  362. // list模式
  363. navList: function navList(tag, $input, opts) {
  364. var place = '<span style="opacity:0.75">' + (opts.placeholder || $input.attr('placeholder')) + '</span>',
  365. maxItem = opts.maxItem;
  366. function init() {
  367. var $app = $(opts.selector).parents('.select-resource').find('app');
  368. $app.html('');
  369. if (!Dcat.helpers.len(tag)) {
  370. return $input.html(place);
  371. }
  372. if (maxItem == 1) {
  373. return $input.html(buildOne(tag[Object.keys(tag)[0]]));
  374. }
  375. $input.html(buildOne(opts.lang.selected_options.replace(':num', Dcat.helpers.len(tag))));
  376. $app.html(buildMany(tag));
  377. }
  378. function buildMany(tag) {
  379. var html = [];
  380. for (var i in tag) {
  381. var strVar = "";
  382. strVar += "<li>";
  383. strVar += "<a class='pull-left'>" + tag[i] + "</a><a data-id='" + i + "' class='pull-right red text-danger ";
  384. strVar += opts.clearOneClass + "' ><i class='fa fa-close'></i></a>";
  385. strVar += "<span class='clearfix'></span></li>";
  386. html.push(strVar);
  387. }
  388. html = '<ul class="nav nav-pills nav-stacked" >' + html.join('') + '</ul>';
  389. return html;
  390. }
  391. function buildOne(tag) {
  392. var clearButton = "<div class='pull-right " + opts.clearAllClass + "' style='font-weight:bold;cursor:pointer'>×</div>";
  393. return tag + clearButton;
  394. }
  395. init();
  396. }
  397. };
  398. Dcat.ResourceSelector = ResourceSelector;
  399. })(window);
  400. /***/ }),
  401. /***/ 2:
  402. /*!****************************************************************!*\
  403. !*** multi ./resources/assets/dcat/extra/resource-selector.js ***!
  404. \****************************************************************/
  405. /*! no static exports found */
  406. /***/ (function(module, exports, __webpack_require__) {
  407. module.exports = __webpack_require__(/*! F:\p\dcat-admin-laravel7\l7-dcat-admin-1\dcat-admin\resources\assets\dcat\extra\resource-selector.js */"./resources/assets/dcat/extra/resource-selector.js");
  408. /***/ })
  409. /******/ });