shareDetail.vue 6.9 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235
  1. <template>
  2. <div>
  3. <el-form :model="form" ref="form" class="form">
  4. <el-form-item label="分享对象" v-if="row.os !== 'mobile'">
  5. <el-radio-group v-model="form.shareTarget" @change="changeShareTarget" >
  6. <el-radio v-model="form.shareTarget" label="1">主讲人</el-radio>
  7. <el-radio v-model="form.shareTarget" label="2">学员</el-radio>
  8. </el-radio-group>
  9. </el-form-item>
  10. <el-form-item label="分享方式" v-if="form.shareTarget == 2">
  11. <el-radio v-model="form.shareType" label="1">链接分享</el-radio>
  12. <el-radio v-model="form.shareType" label="2">二维码分享</el-radio>
  13. <el-radio v-model="form.shareType" label="3">群聊分享</el-radio>
  14. </el-form-item>
  15. </el-form>
  16. <div>
  17. <div class="linkWrap" v-if="form.shareType == 1">
  18. <div class="shareWrap">
  19. <h2>乐团老师邀请您参与直播课!</h2>
  20. <h4>{{ row.roomTitle }}</h4>
  21. <p v-if="form.shareTarget != 1">主讲人:{{ row.speakerName }}</p>
  22. <p>开播时间:{{ row.liveStartTime }}</p>
  23. <p>直播内容:{{ row.liveRemark }}</p>
  24. <!-- 为1是主讲人的 -->
  25. <p v-if="form.shareTarget == 1">直播地址:{{ Teacherurl }}</p>
  26. <p v-else>直播地址:{{ url }}</p>
  27. <p v-if="form.shareTarget == 1">
  28. 请在电脑浏览器中打开以上链接进行直播
  29. </p>
  30. </div>
  31. <div
  32. class="shareBtn shareText"
  33. data-clipboard-action="copy"
  34. data-clipboard-target=".shareBtn"
  35. @click="copyText"
  36. >
  37. 复制分享内容
  38. </div>
  39. </div>
  40. <div class="codeWrap" v-if="form.shareType == 2">
  41. <div class="shareWrap">
  42. <preview :form="row" id="preview" :url="url" />
  43. </div>
  44. <div class="shareBtn" @click="shareImage">下载图片</div>
  45. </div>
  46. <div class="groupWrap" v-if="form.shareType == 3">
  47. <!-- im分享 -->
  48. <groupChat ref="groupChat" />
  49. <div class="shareBtn" @click="shareChat">发送分享信息</div>
  50. </div>
  51. </div>
  52. </div>
  53. </template>
  54. <script>
  55. import { toPng } from "html-to-image";
  56. // import copy from "copy-to-clipboard";
  57. import Clipboard from "clipboard";
  58. import preview from "./preview";
  59. import groupChat from "./groupChat";
  60. import { shareGroup } from "../api";
  61. import { vaildStudentUrl } from "@/utils/validate";
  62. export default {
  63. props: ["row"],
  64. components: { preview, groupChat },
  65. data() {
  66. return {
  67. form: {
  68. shareTarget: "1",
  69. shareType: "1",
  70. },
  71. content: "",
  72. url: "",
  73. Teacherurl: "",
  74. clipboard: null,
  75. };
  76. },
  77. mounted() {
  78. this.url =
  79. vaildStudentUrl() + `/#/liveClassTransfer?roomUid=${this.row.roomUid}`;
  80. let domain = window.location.origin;
  81. this.Teacherurl = domain
  82. ? domain + `/live/?roomUid=${this.row.roomUid}`
  83. : "https://test.dayaedu.com" + `/live/?roomUid=${this.row.roomUid}`;
  84. // this.copyText()
  85. // 判断一下
  86. if(this.row.os == 'mobile'){
  87. console.log('设置学员观看')
  88. this.form.shareTarget='2'
  89. }else {
  90. this.form.shareTarget='1'
  91. }
  92. },
  93. methods: {
  94. copyText(e) {
  95. let text = "";
  96. if (this.form.shareTarget == 1) {
  97. text = `乐团老师邀请您参与直播课!\n${
  98. this.row.roomTitle || ""
  99. }\n开播时间:${this.row.liveStartTime || ""}\n直播内容:${
  100. this.row.liveRemark || ""
  101. }\n直播地址:${this.Teacherurl}\n请在电脑浏览器中打开以上链接进行直播`;
  102. } else {
  103. text = `乐团老师邀请您参与直播课!\n${
  104. this.row.roomTitle || ""
  105. }\n主讲人:${this.row.speakerName}\n开播时间:${this.row.liveStartTime || ""}\n直播内容:${
  106. this.row.liveRemark || ""
  107. }\n直播地址:${this.url}\n`;
  108. }
  109. var clipboard = new Clipboard(".shareText", {
  110. text: function (trigger) {
  111. // console.log(trigger,text)
  112. return text;
  113. },
  114. });
  115. clipboard.on("success", (e) => {
  116. this.$message.success("复制成功");
  117. this.$emit("close");
  118. // 释放内存
  119. clipboard.destroy();
  120. });
  121. clipboard.on("error", (e) => {
  122. // 不支持复制
  123. console.log("该浏览器不支持自动复制");
  124. // 释放内存
  125. clipboard.destroy();
  126. });
  127. // if (text) {
  128. // console.log(clipboard)
  129. // clipboard.on("success", function (e) {
  130. // console.info("Action:", e.action);
  131. // console.info("Text:", e.text);
  132. // console.info("Trigger:", e.trigger);
  133. // this.$message.success("复制成功");
  134. // this.$emit("close");
  135. // e.clearSelection();
  136. // });
  137. // }
  138. // return text
  139. },
  140. shareImage() {
  141. var node = document.getElementById("preview");
  142. toPng(node)
  143. .then((dataUrl) => {
  144. var img = new Image();
  145. img.src = dataUrl;
  146. // 在这里下载
  147. let link = document.createElement("a");
  148. let fname = this.row.roomTitle || "分享图片文件.png"; //下载文件的名字
  149. link.href = dataUrl;
  150. link.setAttribute("download", fname);
  151. document.body.appendChild(link);
  152. link.click();
  153. this.$emit("close");
  154. })
  155. .catch(function (error) {
  156. console.error("oops, something went wrong!", error);
  157. });
  158. },
  159. async shareChat() {
  160. let checkList = this.$refs.groupChat.checkList;
  161. if (!(checkList.length > 0)) {
  162. this.$message.error("请至少选择一个群聊");
  163. return;
  164. }
  165. try {
  166. let obj = {
  167. groupIds: checkList.join(","),
  168. roomUid: this.row.roomUid,
  169. };
  170. const res = await shareGroup(obj);
  171. this.$message.success("分享成功");
  172. this.$emit("close");
  173. } catch (e) {
  174. console.log(e);
  175. }
  176. },
  177. changeShareTarget(val) {
  178. if (val == 2) {
  179. this.form.shareType = '1';
  180. }
  181. if (val ==1) {
  182. this.form.shareType = '1';
  183. }
  184. },
  185. },
  186. };
  187. </script>
  188. <style lang="scss" scoped>
  189. .shareWrap {
  190. background: #f9f9f9;
  191. padding: 16px;
  192. h2 {
  193. font-size: 18px;
  194. font-family: PingFangSC-Semibold, PingFang SC;
  195. font-weight: 600;
  196. color: #333333;
  197. line-height: 25px;
  198. margin-bottom: 18px;
  199. }
  200. h4 {
  201. font-size: 16px;
  202. font-family: PingFangSC-Medium, PingFang SC;
  203. font-weight: 500;
  204. color: #333333;
  205. line-height: 28px;
  206. }
  207. p {
  208. font-size: 16px;
  209. font-family: PingFangSC-Medium, PingFang SC;
  210. font-weight: 500;
  211. color: #333333;
  212. line-height: 30px;
  213. }
  214. }
  215. .shareBtn {
  216. height: 48px;
  217. background: var(--color-primary);
  218. border-radius: 32px;
  219. width: 192px;
  220. color: #fff;
  221. margin: 24px auto 0;
  222. text-align: center;
  223. line-height: 48px;
  224. font-size: 20px;
  225. cursor: pointer;
  226. }
  227. </style>