entry.js 7.6 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255
  1. const render = global => {
  2. async function getCloudBaseApp() {
  3. const app = cloudbase.init({
  4. env: "cloud1-6gbxfp9x33ff3b7c",
  5. });
  6. // 登录
  7. const auth = app.auth({ persistence: "local" });
  8. const loginState = await auth.getLoginState();
  9. // 匿名登录
  10. if (!loginState) {
  11. await auth.anonymousAuthProvider().signIn();
  12. }
  13. return app;
  14. }
  15. global.layui.use(["jquery", "laypage"], async function () {
  16. var laypage = layui.laypage;
  17. var $ = layui.jquery;
  18. var selectFiles = [];
  19. var data = {
  20. Administration: [],
  21. page: 1,
  22. pageSize: 20,
  23. };
  24. // 配置环境
  25. const app = await getCloudBaseApp();
  26. const db = app.database();
  27. const _ = db.command;
  28. let database = db.collection("data_asset");
  29. let ori = await database.get();
  30. data.Administration = sort(ori.data || []);
  31. let urlList = (data.Administration || []).map(v => v.url);
  32. app.getTempFileURL({ fileList: urlList }).then(res => {
  33. console.log(res.fileList);
  34. let list = res.fileList || [];
  35. for (let i = 0; i < list.length; i++) {
  36. const v = list[i];
  37. data.Administration[i].downUrl = v.download_url;
  38. }
  39. //执行渲染.
  40. laypage.render({
  41. elem: "page",
  42. limit: data.pageSize,
  43. count: data.Administration.length, //数据总数,从服务端得到
  44. jump: function (obj, first) {
  45. //obj包含了当前分页的所有参数,比如:
  46. console.log(obj.curr); //得到当前页,以便向服务端请求对应页的数据。
  47. console.log(obj.limit); //得到每页显示的条数
  48. data.page = obj.curr;
  49. render_table();
  50. },
  51. });
  52. });
  53. // 渲染table
  54. function render_table() {
  55. let tb = $(".tb");
  56. tb.html("");
  57. let act = (data.page - 1) * data.pageSize;
  58. let end = data.page * data.pageSize;
  59. if (end > data.Administration.length) end = data.Administration.length;
  60. for (let i = act; i < end; i++) {
  61. const v = data.Administration[i];
  62. let type = "";
  63. if (v.type == "video") type = "视频";
  64. else type = "图片";
  65. let tr = $("<tr></tr>");
  66. let tdType = $("<td>" + type + "</td>");
  67. let tdImg = v.type == "img" ? $("<td><img style='width:80px;' src='" + v.downUrl + "'></td>") : $("<td>-</td>");
  68. let tdUrl = $("<td>" + v.url + "</td>");
  69. let tdTool = $(
  70. '<td><a class="layui-btn layui-btn-danger layui-btn-xs delete" data-index="' +
  71. i +
  72. '">删除</a></td>'
  73. );
  74. tr.append(tdType);
  75. tr.append(tdUrl);
  76. tr.append(tdImg);
  77. tr.append(tdTool);
  78. tb.append(tr);
  79. }
  80. }
  81. $(".tb").on('click','.delete',function () {
  82. let obj = data.Administration[$(this).attr("data-index")];
  83. let remove = $(this).parent().parent();
  84. console.log("---")
  85. //删除
  86. layer.confirm("确定要删除该文件么", async function (index) {
  87. layer.close(index);
  88. //向服务端发送删除指令
  89. try {
  90. // 数据库删除
  91. await database
  92. .where({
  93. _id: _.eq(obj._id),
  94. })
  95. .remove();
  96. // 云存储删除
  97. await app.deleteFile({
  98. fileList: [obj.url],
  99. });
  100. remove.remove();
  101. layer.msg("删除成功");
  102. } catch (err) {
  103. layer.msg("删除失败");
  104. }
  105. });
  106. });
  107. $("#up").change(function () {
  108. let filesList = document.getElementById("up").files || [];
  109. let pathlist = document.getElementById("up").value.split("\\");
  110. pathlist.pop();
  111. data.filePath = pathlist.join("\\") + "\\";
  112. selectFiles = [];
  113. let err = "";
  114. for (let i = 0; i < filesList.length; i++) {
  115. const f = filesList[i];
  116. let file = {
  117. name: f.name,
  118. type: /image\/\w+/.test(f.type)
  119. ? "img"
  120. : /^video/.test(f.type)
  121. ? "video"
  122. : "orther",
  123. file: f,
  124. };
  125. if (file.type == "orther") {
  126. err = "已过滤非音视频文件";
  127. continue;
  128. }
  129. if (file.type != "img") {
  130. var url = null;
  131. if (window.createObjectURL != undefined) {
  132. // basic
  133. url = window.createObjectURL(f);
  134. } else if (window.URL != undefined) {
  135. // mozilla(firefox)
  136. url = window.URL.createObjectURL(f);
  137. } else if (window.webkitURL != undefined) {
  138. // webkit or chrome
  139. url = window.webkitURL.createObjectURL(f);
  140. }
  141. $(".upImg").append($("<video src='" + url + "' />"));
  142. selectFiles.push(file);
  143. continue;
  144. }
  145. let reader = new FileReader();
  146. reader.readAsDataURL(f);
  147. reader.onload = function () {
  148. // 当 FileReader 读取文件时候,读取的结果会放在 FileReader.result 属性中
  149. // document.querySelector("#img").src = this.result;
  150. file.base64 = this.result;
  151. compressImg(file.file, file.base64, 2000).then(minifile => {
  152. file.file = minifile;
  153. });
  154. selectFiles.push(file);
  155. $(".upImg").append($("<img src='" + this.result + "' />"));
  156. };
  157. }
  158. err && layer.msg(err);
  159. });
  160. $(".addE").click(function () {
  161. $(".m").show();
  162. });
  163. $(".upfile").click(async function () {
  164. if (!selectFiles.length) return layer.msg("未选择文件");
  165. for (let i = 0; i < selectFiles.length; i++) {
  166. const v = selectFiles[i];
  167. console.log("---------->", v);
  168. let f = await app.uploadFile({
  169. cloudPath: v.name,
  170. filePath: v.file,
  171. });
  172. let d = {
  173. // 新增数据
  174. create_time: new Date().getTime(),
  175. type: v.type,
  176. url: f.fileID,
  177. };
  178. await database.add(d);
  179. }
  180. $(".close").click();
  181. let list = await database.get();
  182. data.Administration = sort(list.data || []);
  183. render_table();
  184. });
  185. $(".close").click(function () {
  186. $(".m").hide();
  187. $(".upImg").html("");
  188. document.getElementById("up").value = "";
  189. });
  190. /**
  191. *
  192. * @param {*} file 原始文件
  193. * @param {*} width 压缩宽度
  194. */
  195. function compressImg(file, result, width) {
  196. return new Promise((resolve, reject) => {
  197. let img = new Image();
  198. img.src = result;
  199. img.onload = () => {
  200. let oriWidth = img.width;
  201. let resultNum = width / oriWidth;
  202. let resultHeight = resultNum * img.height;
  203. if (oriWidth <= width) return resolve(file);
  204. // 需要压缩的图片:resultHeight是压缩后的高度
  205. let canvas = document.createElement("canvas");
  206. if (!canvas || !canvas.getContext)
  207. return reject({
  208. msg: "浏览器不支持canvas",
  209. });
  210. canvas.width = width;
  211. canvas.height = resultHeight;
  212. let context = canvas.getContext("2d");
  213. context.drawImage(img, 0, 0, width, resultHeight);
  214. canvas.toBlob(
  215. function (blob) {
  216. resolve(blob);
  217. },
  218. file.type,
  219. 0.8
  220. );
  221. };
  222. });
  223. }
  224. function sort(list) {
  225. return list.sort((a, b) => {
  226. return b.create_time - a.create_time;
  227. });
  228. }
  229. });
  230. return Promise.resolve();
  231. };
  232. (global => {
  233. global["purehtml"] = {
  234. bootstrap: () => {
  235. return Promise.resolve();
  236. },
  237. mount: () => {
  238. return render(global);
  239. },
  240. unmount: () => {
  241. return Promise.resolve();
  242. },
  243. };
  244. })(window);