addons.js 8.7 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186
  1. define([], function () {
  2. require.config({
  3. paths: {
  4. 'designer': '../addons/poster/js/designer',
  5. 'jquery.contextMenu': '../addons/poster/js/jquery.contextMenu',
  6. 'jquery-colorpicker': '../addons/poster/js/jquery.colorpicker.min',
  7. }
  8. });
  9. if (Config.modulename == 'admin' && Config.controllername == 'index' && Config.actionname == 'index') {
  10. require.config({
  11. paths: {
  12. 'vue3': "../addons/shopro/libs/vue",
  13. 'vue': "../addons/shopro/libs/vue.amd",
  14. 'text': "../addons/shopro/libs/require-text",
  15. 'SaChat': '../addons/shopro/chat/index',
  16. 'ElementPlus': '../addons/shopro/libs/element-plus/index',
  17. 'ElementPlusIconsVue3': "../addons/shopro/libs/element-plus/icons-vue",
  18. 'ElementPlusIconsVue': '../addons/shopro/libs/element-plus/icons-vue.amd',
  19. 'io': '../addons/shopro/libs/socket.io',
  20. },
  21. shim: {
  22. 'ElementPlus': {
  23. deps: ['css!../addons/shopro/libs/element-plus/index.css']
  24. },
  25. },
  26. });
  27. require(['vue3', 'ElementPlusIconsVue3'], function (Vue3, ElementPlusIconsVue3) {
  28. require(['vue', 'jquery', 'SaChat', 'text!../addons/shopro/chat/index.html', 'ElementPlus', 'ElementPlusIconsVue', 'io'], function (Vue, $, SaChat, SaChatTemplate, ElementPlus, ElementPlusIconsVue, io) {
  29. if (Config.dark_type != 'none') {
  30. SaChatTemplate = SaChatTemplate.replaceAll('__DARK__', `<link rel="stylesheet" href="__CDN__/assets/addons/shopro/css/dark.css?v={$site.version|htmlentities}" />`)
  31. }
  32. SaChatTemplate = SaChatTemplate.replaceAll('__DARK__', ``)
  33. SaChatTemplate = SaChatTemplate.replaceAll('__CDN__', Config.__CDN__)
  34. Fast.api.ajax({
  35. url: 'shopro/chat/index/init',
  36. loading: false,
  37. type: 'GET'
  38. }, function (ret, res) {
  39. $("body").append(`<div id="SaChatTemplateContainer"></div>
  40. <div id="SaChatWrap"><sa-chat></sa-chat></div>`);
  41. $("#SaChatTemplateContainer").append(SaChatTemplate);
  42. const { createApp } = Vue
  43. const app = createApp({})
  44. app.use(ElementPlus)
  45. for (const [key, component] of Object.entries(ElementPlusIconsVue)) {
  46. app.component(key, component)
  47. }
  48. app.component('sa-chat', SaChat)
  49. app.mount(`#SaChatWrap`)
  50. return false;
  51. }, function (ret, res) {
  52. if (res.msg == '') {
  53. return false;
  54. }
  55. })
  56. });
  57. });
  58. }
  59. require.config({
  60. paths: {
  61. 'summernote': '../addons/summernote/lang/summernote-zh-CN.min'
  62. },
  63. shim: {
  64. 'summernote': ['../addons/summernote/js/summernote.min', 'css!../addons/summernote/css/summernote.min.css'],
  65. }
  66. });
  67. require(['form', 'upload'], function (Form, Upload) {
  68. var _bindevent = Form.events.bindevent;
  69. Form.events.bindevent = function (form) {
  70. _bindevent.apply(this, [form]);
  71. try {
  72. //绑定summernote事件
  73. if ($(Config.summernote.classname || '.editor', form).length > 0) {
  74. var selectUrl = typeof Config !== 'undefined' && Config.modulename === 'index' ? 'user/attachment' : 'general/attachment/select';
  75. require(['summernote'], function () {
  76. var imageButton = function (context) {
  77. var ui = $.summernote.ui;
  78. var button = ui.button({
  79. contents: '<i class="fa fa-file-image-o"/>',
  80. tooltip: __('Choose'),
  81. click: function () {
  82. parent.Fast.api.open(selectUrl + "?element_id=&multiple=true&mimetype=image/", __('Choose'), {
  83. callback: function (data) {
  84. var urlArr = data.url.split(/\,/);
  85. $.each(urlArr, function () {
  86. var url = Fast.api.cdnurl(this, true);
  87. context.invoke('editor.insertImage', url);
  88. });
  89. }
  90. });
  91. return false;
  92. }
  93. });
  94. return button.render();
  95. };
  96. var attachmentButton = function (context) {
  97. var ui = $.summernote.ui;
  98. var button = ui.button({
  99. contents: '<i class="fa fa-file"/>',
  100. tooltip: __('Choose'),
  101. click: function () {
  102. parent.Fast.api.open(selectUrl + "?element_id=&multiple=true&mimetype=*", __('Choose'), {
  103. callback: function (data) {
  104. var urlArr = data.url.split(/\,/);
  105. $.each(urlArr, function () {
  106. var url = Fast.api.cdnurl(this, true);
  107. var node = $("<a href='" + url + "'>" + url + "</a>");
  108. context.invoke('insertNode', node[0]);
  109. });
  110. }
  111. });
  112. return false;
  113. }
  114. });
  115. return button.render();
  116. };
  117. $(Config.summernote.classname || '.editor', form).each(function () {
  118. $(this).summernote($.extend(true, {}, {
  119. // height: 250,
  120. minHeight: 250,
  121. lang: 'zh-CN',
  122. fontNames: [
  123. 'Arial', 'Arial Black', 'Serif', 'Sans', 'Courier',
  124. 'Courier New', 'Comic Sans MS', 'Helvetica', 'Impact', 'Lucida Grande',
  125. "Open Sans", "Hiragino Sans GB", "Microsoft YaHei",
  126. '微软雅黑', '宋体', '黑体', '仿宋', '楷体', '幼圆',
  127. ],
  128. fontNamesIgnoreCheck: [
  129. "Open Sans", "Microsoft YaHei",
  130. '微软雅黑', '宋体', '黑体', '仿宋', '楷体', '幼圆'
  131. ],
  132. toolbar: [
  133. ['style', ['style', 'undo', 'redo']],
  134. ['font', ['bold', 'underline', 'strikethrough', 'clear']],
  135. ['fontname', ['color', 'fontname', 'fontsize']],
  136. ['para', ['ul', 'ol', 'paragraph', 'height']],
  137. ['table', ['table', 'hr']],
  138. ['insert', ['link', 'picture', 'video']],
  139. ['select', ['image', 'attachment']],
  140. ['view', ['fullscreen', 'codeview', 'help']],
  141. ],
  142. buttons: {
  143. image: imageButton,
  144. attachment: attachmentButton,
  145. },
  146. dialogsInBody: true,
  147. followingToolbar: false,
  148. callbacks: {
  149. onChange: function (contents) {
  150. $(this).val(contents);
  151. $(this).trigger('change');
  152. },
  153. onInit: function () {
  154. },
  155. onImageUpload: function (files) {
  156. var that = this;
  157. //依次上传图片
  158. for (var i = 0; i < files.length; i++) {
  159. Upload.api.send(files[i], function (data) {
  160. var url = Fast.api.cdnurl(data.url, true);
  161. $(that).summernote("insertImage", url, 'filename');
  162. });
  163. }
  164. }
  165. }
  166. }, $(this).data("summernote-options") || {}));
  167. });
  168. });
  169. }
  170. } catch (e) {
  171. }
  172. };
  173. });
  174. });