lookImage.vue 9.5 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295
  1. <template>
  2. <div id="sagaUploads">
  3. <div class="saga-upload-images">
  4. <div v-if="Object.keys(exhibitionImage.list).length">
  5. <div v-for="(val,key,i) in exhibitionImage.list" :key="i">
  6. <div class="" v-for="(j,index) in val">
  7. <p class="title">{{key}}</p>
  8. <div v-if="j.PicList !=undefined && j.PicList.length >0">
  9. <template v-for="item in j.PicList">
  10. <div class="point-look-image">
  11. <img @click="lookImg" :src="imageGetUrl + '&key=' +item.Key" alt v-load style="margin-bottom: 5px">
  12. <p class="pic-name">{{handleName(item.Name)}}</p>
  13. </div>
  14. </template>
  15. </div>
  16. <div v-else style="text-align: center;margin: 10px auto">暂无数据</div>
  17. </div>
  18. </div>
  19. </div>
  20. <div style="text-align: center" v-else>暂无数据</div>
  21. </div>
  22. <details-dialog :title="'图片'" :iframeSrc="iframeSrc" :dialog="dialog" :setData="imagesArr"></details-dialog>
  23. </div>
  24. </template>
  25. <script>
  26. import detailsDialog from "@/components/business_space/lib/detailsDia"
  27. export default {
  28. components: {
  29. detailsDialog
  30. },
  31. props: ['exhibitionImage'],
  32. data() {
  33. return {
  34. baseUrl: "",
  35. imageGetUrl: "/image-service/common/image_get?systemId=dataPlatform",
  36. imageUploadUrl: "/image-service/common/image_upload?systemId=dataPlatform&secret=9e0891a7a8c8e885&overwrite=true",
  37. imagesArr: [],
  38. iframeSrc: "",
  39. dialog: {
  40. details: false
  41. }
  42. };
  43. },
  44. methods: {
  45. handleName(val) {
  46. return val && val.length > 10 ? val.substring(1, 10) + '...' : val
  47. },
  48. //查看图片
  49. lookImg() {
  50. this.dialog.details = true
  51. this.iframeSrc = process.env.BASE_URL + ":8890/photo-View.html"
  52. },
  53. //上传
  54. uploadAndSubmit(item, key) {
  55. // var form = document.forms["demoForm"];
  56. // if (form["file"].files.length > 0) {
  57. // 寻找表单域中的 <input type="file" ... /> 标签
  58. // var file = form["file"].files[0];
  59. console.log("lalala", item)
  60. let file = item.file;
  61. // try sending
  62. let reader = new FileReader();
  63. let vm = this;
  64. let fileType = file.name.split(".");
  65. let type = fileType[fileType.length - 1];
  66. let CreateTime = tools.formatDate(new Date(file.lastModified))
  67. let uploadKey = file.uid
  68. if (!!key) {
  69. uploadKey = key
  70. }
  71. reader.onloadstart = function () {
  72. // 这个事件在读取开始时触发
  73. };
  74. reader.onprogress = function (p) {
  75. // 这个事件在读取进行中定时触发
  76. };
  77. reader.onload = function () {
  78. // 这个事件在读取成功结束后触发
  79. };
  80. reader.onloadend = function () {
  81. // 这个事件在读取结束后,无论成功或者失败都会触发
  82. if (reader.error) {
  83. } else {
  84. // document.getElementById("bytesRead").textContent = file.size;
  85. // 构造 XMLHttpRequest 对象,发送文件 Binary 数据
  86. var xhr = new XMLHttpRequest();
  87. xhr.open(
  88. /* method */
  89. "POST",
  90. /* target url */
  91. vm.imageUploadUrl + "&key=" + uploadKey + "." + type
  92. /*, async, default to true */
  93. );
  94. //xhr.overrideMimeType("application/octet-stream");
  95. xhr.send(reader.result);
  96. xhr.onreadystatechange = function () {
  97. if (xhr.readyState == 4) {
  98. if (xhr.status == 200) {
  99. if (vm.type == 'image') {
  100. vm.imagesArr.push({
  101. Name: uploadKey + '',
  102. Key: uploadKey + "." + type,
  103. SystemId: "dataPlatform",
  104. Type: "image",
  105. CreateTime
  106. });
  107. }
  108. if (type == 'mp4') {
  109. vm.imagesArr.push({
  110. Name: uploadKey + '',
  111. Key: uploadKey + "." + type,
  112. SystemId: "dataPlatform",
  113. Type: "video",
  114. CreateTime
  115. });
  116. vm.creatImg(vm.imageGetUrl + "&key=" + uploadKey + "." + type, uploadKey)
  117. }
  118. if (vm.type == "video" && type == "png") {
  119. vm.videoPicArr.push({
  120. Name: uploadKey + '',
  121. Key: uploadKey + "." + type,
  122. SystemId: "dataPlatform",
  123. Type: "image_video",
  124. CreateTime
  125. })
  126. }
  127. vm.$emit("change", vm.imagesArr, vm.defined, vm.videoPicArr);
  128. }
  129. }
  130. };
  131. }
  132. };
  133. reader.readAsArrayBuffer(file);
  134. },
  135. dataURLtoBlob(dataURI, type) {
  136. var binary = atob(dataURI.split(',')[1]);
  137. var array = [];
  138. for (var i = 0; i < binary.length; i++) {
  139. array.push(binary.charCodeAt(i));
  140. }
  141. return new Blob([new Uint8Array(array)], { type: type });
  142. },
  143. creatImg(reader, key) {
  144. var videoDom = document.getElementById('video');
  145. videoDom.src = reader;
  146. let vm = this
  147. videoDom.onloadeddata = function () {
  148. // 这里可以打印视频时长
  149. // 这里取得视频封面
  150. var canvas = document.createElement('canvas');
  151. canvas.width = 300;
  152. canvas.height = 300 * this.videoHeight / this.videoWidth;
  153. canvas.getContext('2d').drawImage(this, 0, 0, canvas.width, canvas.height);
  154. //将canvas的base64位图片转换成图片png的file
  155. var blob = vm.dataURLtoBlob(canvas.toDataURL('image/png'), "image/png")
  156. //将其转换成file对象
  157. var file = new File([blob], "video_image.png", { type: "image/png", lastModified: Date.now() })//blob转file
  158. vm.uploadAndSubmit({ file: file }, key)
  159. }
  160. },
  161. },
  162. watch: {
  163. keysArr: function (val) {
  164. this.imageFalg();
  165. }
  166. },
  167. //自定义指令
  168. directives: {
  169. load: function (el) {
  170. let imgDom = document.createElement("img");
  171. imgDom.style.position = "absolute";
  172. imgDom.style.top = "-999px";
  173. imgDom.style.opacity = 0;
  174. imgDom.src = el.src;
  175. el.src = "";
  176. imgDom.onload = () => {
  177. let width = imgDom.width;
  178. let height = imgDom.height;
  179. if (width > height) {
  180. el.style.height = "100%";
  181. el.style.width = "auto";
  182. el.style.position = "absolute";
  183. el.style.left = "50%";
  184. el.style.top = "0";
  185. el.style.transform = "translateX(-50%)";
  186. el.style.webkitTransform = "translateX(-50%) translateY(0)";
  187. el.style.MozTransform = "translateX(-50%) translateY(0)";
  188. el.style.msTransform = "translateX(-50%) translateY(0)";
  189. el.style.OTransform = "translateX(-50%) translateY(0)";
  190. } else if (width < height) {
  191. el.src = imgDom.src;
  192. el.style.width = "100%";
  193. el.style.height = "auto";
  194. el.style.position = "absolute";
  195. el.style.top = "50%";
  196. el.style.left = "0";
  197. el.style.transform = "translateY(-50%) translateX(0)";
  198. el.style.webkitTransform = "translateY(-50%) translateX(0)";
  199. el.style.MozTransform = "translateY(-50%) translateX(0)";
  200. el.style.msTransform = "translateY(-50%) translateX(0)";
  201. el.style.OTransform = "translateY(-50%) translateX(0)";
  202. } else {
  203. el.style.width = "100%";
  204. el.style.height = "100%";
  205. el.style.position = "absolute";
  206. el.style.top = "0";
  207. el.style.left = "0";
  208. el.style.transform = "translateY(0) translateX(0)";
  209. el.style.webkitTransform = "translateY(0) translateX(0)";
  210. el.style.MozTransform = "translateY(0) translateX(0)";
  211. el.style.msTransform = "translateY(0) translateX(0)";
  212. el.style.OTransform = "translateY(0) translateX(0)";
  213. }
  214. el.src = imgDom.src;
  215. };
  216. }
  217. }
  218. };
  219. </script>
  220. <style lang="less">
  221. #sagaUploads {
  222. overflow: hidden;
  223. .title {
  224. border-left: 8px solid black;
  225. margin: 10px;
  226. font-weight: 600;
  227. text-indent: 10px;
  228. display: block;
  229. overflow: hidden;
  230. }
  231. .avatar-uploader {
  232. height: 180px;
  233. width: 180px;
  234. overflow: hidden;
  235. .el-upload {
  236. width: 180px;
  237. height: 180px;
  238. .el-upload-dragger {
  239. width: 180px;
  240. height: 180px;
  241. .el-icon-plus {
  242. display: block;
  243. width: 20px;
  244. height: 20px;
  245. font-size: 20px;
  246. margin: 80px;
  247. }
  248. }
  249. }
  250. }
  251. .pic-name {
  252. position: absolute;
  253. right: 72px;
  254. display: inline-block;
  255. background: #fff;
  256. color: #000;
  257. padding: 3px;
  258. z-index: 99;
  259. border-radius: 8px;
  260. bottom: 5px;
  261. }
  262. .point-look-image {
  263. height: 180px;
  264. margin-bottom: 10px;
  265. position: relative;
  266. overflow: hidden;
  267. img {
  268. z-index: 11;
  269. }
  270. i {
  271. position: absolute;
  272. bottom: 10px;
  273. right: 10px;
  274. background-color: #fff;
  275. padding: 5px;
  276. cursor: pointer;
  277. z-index: 66;
  278. }
  279. }
  280. }
  281. </style>