entry.js 5.8 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200
  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 = ori.data || [];
  31. //执行渲染.
  32. laypage.render({
  33. elem: "page",
  34. limit: data.pageSize,
  35. count: data.Administration.length, //数据总数,从服务端得到
  36. jump: function (obj, first) {
  37. //obj包含了当前分页的所有参数,比如:
  38. console.log(obj.curr); //得到当前页,以便向服务端请求对应页的数据。
  39. console.log(obj.limit); //得到每页显示的条数
  40. data.page = obj.curr;
  41. render_table();
  42. },
  43. });
  44. // 渲染table
  45. function render_table() {
  46. let tb = $(".tb");
  47. tb.html("");
  48. let act = (data.page - 1) * data.pageSize;
  49. let end = data.page * data.pageSize;
  50. if (end > data.Administration.length) end = data.Administration.length;
  51. for (let i = act; i < end; i++) {
  52. const v = data.Administration[i];
  53. let type = "";
  54. if (v.type == "video") type = "视频";
  55. else type = "图片";
  56. let tr = $("<tr></tr>");
  57. let tdType = $("<td>" + type + "</td>");
  58. let tdUrl = $("<td>" + v.url + "</td>");
  59. let tdTool = $(
  60. '<td><a class="layui-btn layui-btn-danger layui-btn-xs delete" data-index="' +
  61. i +
  62. '">删除</a></td>'
  63. );
  64. tr.append(tdType);
  65. tr.append(tdUrl);
  66. tr.append(tdTool);
  67. tb.append(tr);
  68. }
  69. }
  70. $(".delete").click(function () {
  71. let obj = data.Administration[$(this).attr("data-index")];
  72. let remove = $(this).parent().parent();
  73. //删除
  74. layer.confirm("确定要删除该文件么", async function (index) {
  75. layer.close(index);
  76. //向服务端发送删除指令
  77. try {
  78. // 数据库删除
  79. await database
  80. .where({
  81. _id: _.eq(obj._id),
  82. })
  83. .remove();
  84. // 云存储删除
  85. await app.deleteFile({
  86. fileList: [obj.url],
  87. });
  88. remove.remove();
  89. layer.msg("删除成功");
  90. } catch (err) {
  91. layer.msg("删除失败");
  92. }
  93. });
  94. });
  95. $("#up").change(function () {
  96. let filesList = document.getElementById("up").files || [];
  97. let pathlist = document.getElementById("up").value.split("\\");
  98. pathlist.pop();
  99. data.filePath = pathlist.join("\\") + "\\";
  100. selectFiles = [];
  101. let err = "";
  102. for (let i = 0; i < filesList.length; i++) {
  103. const f = filesList[i];
  104. let file = {
  105. name: f.name,
  106. type: /image\/\w+/.test(f.type)
  107. ? "img"
  108. : /^video/.test(f.type)
  109. ? "video"
  110. : "orther",
  111. file: f,
  112. };
  113. if (file.type == "orther") {
  114. err = "已过滤非音视频文件";
  115. continue;
  116. }
  117. if (file.type != "img") {
  118. var url = null;
  119. if (window.createObjectURL != undefined) {
  120. // basic
  121. url = window.createObjectURL(f);
  122. } else if (window.URL != undefined) {
  123. // mozilla(firefox)
  124. url = window.URL.createObjectURL(f);
  125. } else if (window.webkitURL != undefined) {
  126. // webkit or chrome
  127. url = window.webkitURL.createObjectURL(f);
  128. }
  129. $(".upImg").append($("<video src='" + url + "' />"));
  130. selectFiles.push(file);
  131. continue;
  132. }
  133. let reader = new FileReader();
  134. reader.readAsDataURL(f);
  135. reader.onload = function () {
  136. // 当 FileReader 读取文件时候,读取的结果会放在 FileReader.result 属性中
  137. // document.querySelector("#img").src = this.result;
  138. file.base64 = this.result;
  139. selectFiles.push(file);
  140. $(".upImg").append($("<img src='" + this.result + "' />"));
  141. };
  142. // 设置以什么方式读取文件,这里以base64方式
  143. }
  144. err && layer.msg(err);
  145. });
  146. $(".addE").click(function () {
  147. $(".m").show();
  148. });
  149. $(".upfile").click(async function () {
  150. if (!selectFiles.length) return layer.msg("未选择文件");
  151. for (let i = 0; i < selectFiles.length; i++) {
  152. const v = selectFiles[i];
  153. console.log('---------->',v)
  154. let f = await app.uploadFile({
  155. cloudPath: v.name,
  156. filePath: v.file,
  157. });
  158. let d = {
  159. // 新增数据
  160. create_time: new Date().getTime(),
  161. type: v.type,
  162. url: f.fileID,
  163. };
  164. await database.add(d);
  165. }
  166. $(".close").click();
  167. let list = await database.get();
  168. data.Administration = list.data || [];
  169. render_table()
  170. });
  171. $(".close").click(function () {
  172. $(".m").hide();
  173. $(".upImg").html("");
  174. document.getElementById("up").value = "";
  175. });
  176. });
  177. return Promise.resolve();
  178. };
  179. (global => {
  180. global["purehtml"] = {
  181. bootstrap: () => {
  182. return Promise.resolve();
  183. },
  184. mount: () => {
  185. return render(global);
  186. },
  187. unmount: () => {
  188. return Promise.resolve();
  189. },
  190. };
  191. })(window);