image.html 6.0 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136
  1. <div class="image-dialog" id="ImageDialog">
  2. <div class="image-dialog-head">
  3. <div class="pull-left flex">
  4. <input class="layui-input margin-right-5" v-model="keys" style="height:30px;line-height:30px" placeholder="请输入搜索关键词">
  5. <a class="layui-btn layui-btn-sm layui-btn-normal" @click="search">搜 索</a>
  6. </div>
  7. <div class="pull-right">
  8. <a class="layui-btn layui-btn-sm layui-btn-normal" @click="uploadImage">上传图片</a>
  9. </div>
  10. </div>
  11. <div class="image-dialog-body">
  12. <div class="image-dialog-item" v-for="x in list" @click="setItem(x)" style="display:none" v-show="show" :class="{'image-dialog-checked':x.checked}">
  13. <div class="uploadimage" :style="x.style"></div>
  14. <p class="image-dialog-item-name layui-elip" v-text="x.name"></p>
  15. <span class="image-dialog-item-size">{{formatSize(x.size)}}</span>
  16. <span class="image-dialog-item-type">{{x.xext.toUpperCase()}}</span>
  17. </div>
  18. </div>
  19. <div class="image-dialog-foot">
  20. <div id="ImageDialogPage" class="image-dialog-page"></div>
  21. <div id="ImageDialogButton layui-hide" class="image-dialog-button layui-btn layui-btn-normal" v-if="data.length>0" @click="confirm">
  22. 已选 {{ data.length }} 张,确认
  23. </div>
  24. </div>
  25. </div>
  26. <script>
  27. require(['vue'], function (vue) {
  28. var app = new vue({
  29. el: '#ImageDialog',
  30. data: {
  31. didx: 0,
  32. page: 1, limit: 15, show: false, mult: false,
  33. keys: '', list: [], data: [], idxs: {}, urls: [],
  34. },
  35. created: function () {
  36. this.didx = $.msg.mdx.pop();
  37. this.$btn = $('#{$get.id|default=""}');
  38. this.$ups = $('#ImageDialogUploadLayout [data-file]');
  39. this.mult = "{$get.file|default='image'}" === 'images';
  40. this.loadPage(), setTimeout(function () {
  41. $('#ImageDialogButton').removeClass('layui-hide');
  42. }, 1000);
  43. },
  44. methods: {
  45. // 搜索刷新数据
  46. search: function () {
  47. this.page = 1;
  48. this.loadPage();
  49. },
  50. // 确认选择数据
  51. confirm: function () {
  52. this.urls = [];
  53. this.data.forEach(function (file) {
  54. app.setValue(file.xurl);
  55. }), this.setInput();
  56. },
  57. // 格式文件大小
  58. formatSize: function (size) {
  59. return $.formatFileSize(size);
  60. },
  61. // 设置单项数据
  62. setItem: function (item) {
  63. if (!this.mult) {
  64. this.setValue(item.xurl).setInput();
  65. } else if ((item.checked = !this.idxs[item.id])) {
  66. (this.idxs[item.id] = item) && this.data.push(item);
  67. } else {
  68. delete this.idxs[item.id];
  69. this.data.forEach(function (temp, idx) {
  70. temp.id === item.id && app.data.splice(idx, 1);
  71. });
  72. }
  73. },
  74. // 更新列表数据
  75. setList: function (items, count) {
  76. this.list = items;
  77. this.list.forEach(function (item) {
  78. item.checked = !!app.idxs[item.id]
  79. item.style = 'background-image:url(' + item.xurl + ')';
  80. }), this.addPage(count);
  81. },
  82. // 设置选择数据
  83. setValue: function (xurl) {
  84. $.msg.close(this.didx);
  85. this.urls.push(xurl) && this.$btn.triggerHandler('push', xurl);
  86. return this;
  87. },
  88. // 设置输入表单
  89. setInput: function () {
  90. if (this.$btn.data('input')) {
  91. $(this.$btn.data('input')).val(this.urls.join('|')).trigger('change');
  92. }
  93. },
  94. // 创建分页工具条
  95. addPage: function (count) {
  96. this.show = true;
  97. layui.laypage.render({
  98. curr: this.page, count: count, limit: app.limit,
  99. layout: ['count', 'prev', 'page', 'next', 'refresh'],
  100. elem: 'ImageDialogPage', jump: function (obj, first) {
  101. if (!first) app.loadPage(app.page = obj.curr);
  102. },
  103. });
  104. },
  105. // 加载页面数据
  106. loadPage: function () {
  107. this.params = {page: this.page, limit: this.limit, output: 'layui.table', name: this.keys || ''};
  108. this.params.type = '{$get.type|default="gif,png,jpg,jpeg"}';
  109. $.form.load('{:url("image")}', this.params, 'get', function (ret) {
  110. return app.setList(ret.data, ret.count), false;
  111. });
  112. },
  113. // 上传图片文件
  114. uploadImage: function () {
  115. this.urls = [];
  116. this.$ups.off('push').on('push', function (e, xurl) {
  117. app.setValue(xurl);
  118. }).off('upload.complete').on('upload.complete', function () {
  119. app.setInput();
  120. }).click();
  121. },
  122. }
  123. });
  124. });
  125. </script>
  126. <label class="layui-hide" id="ImageDialogUploadLayout">
  127. <!-- 图片上传组件 开始 -->
  128. {if isset($get.file) && $get.file eq 'image'}
  129. <button class="layui-btn" data-file data-path="{$get.path|default=''}" data-type="png,jpg,jpeg,gif"></button>
  130. {else}
  131. <button class="layui-btn" data-file="mul" data-path="{$get.path|default=''}" data-type="png,jpg,jpeg,gif"></button>
  132. {/if}
  133. <!-- 图片上传组件 结束 -->
  134. </label>