share.vue 5.9 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225
  1. <template>
  2. <el-dialog
  3. class="tree_dialog"
  4. :title="titleBuild()"
  5. width="30%"
  6. :close-on-click-modal="false"
  7. center
  8. :visible.sync="visib"
  9. :before-close="closeDialog"
  10. >
  11. <div v-if="shareLinkFlag1">
  12. <el-form
  13. ref="userForm"
  14. :model="dialogForm"
  15. :rules="rules"
  16. size="small"
  17. label-width="100px"
  18. >
  19. <el-form-item label="有效期" prop="shareValidType">
  20. <el-select
  21. v-model.trim="dialogForm.shareValidType"
  22. placeholder="请选择"
  23. clearable
  24. @change="selectChange"
  25. >
  26. <el-option
  27. v-for="item in shareValidTypeOptions"
  28. :key="item.id"
  29. :label="item.text"
  30. :value="item.id"
  31. />
  32. </el-select>
  33. </el-form-item>
  34. <el-form-item label="分享码" prop="sharePasswordFlag">
  35. <el-switch v-model="dialogForm.sharePasswordFlag"> </el-switch>
  36. </el-form-item>
  37. </el-form>
  38. <el-button
  39. type="primary"
  40. plain
  41. @click="createShare"
  42. style="margin-left:45px"
  43. >创建链接</el-button
  44. >
  45. </div>
  46. <div v-else>
  47. <el-form
  48. ref="userForm"
  49. :model="dialogForm"
  50. :rules="rules"
  51. size="small"
  52. label-width="100px"
  53. >
  54. <el-form-item label="链接" prop="reportShareUrl">
  55. <el-input v-model="reportShareUrl" :disabled="true" />
  56. </el-form-item>
  57. <el-form-item label="分享码" prop="sharePassword">
  58. <el-input v-model="dialogForm.sharePassword" :disabled="true" />
  59. </el-form-item>
  60. <el-row :gutter="10">
  61. <el-button
  62. v-if="dialogForm.sharePassword == ''"
  63. type="primary"
  64. plain
  65. @click="copyShare"
  66. style="margin-left:45px"
  67. >复制链接</el-button
  68. >
  69. <el-button
  70. v-if="dialogForm.sharePassword != ''"
  71. type="primary"
  72. plain
  73. @click="copyShare"
  74. style="margin-left:45px"
  75. >复制链接和分享码</el-button
  76. >
  77. </el-row>
  78. </el-form>
  79. </div>
  80. <div slot="footer" style="text-align: center">
  81. <!-- <el-button type="primary" plain @click="saveReportShare">保存</el-button>-->
  82. <el-button type="danger" plain @click="closeDialog">取消</el-button>
  83. </div>
  84. </el-dialog>
  85. </template>
  86. <script>
  87. import { reportShareAdd } from "@/api/reportShare";
  88. import { getDictList } from "@/api/dict-data"; // 获取数据字典
  89. import Dictionary from "@/components/Dictionary/index";
  90. export default {
  91. components: { Dictionary },
  92. props: {
  93. visib: {
  94. required: true,
  95. type: Boolean,
  96. default: false
  97. },
  98. reportCode: {
  99. required: true,
  100. type: String,
  101. default: () => {
  102. return "";
  103. }
  104. },
  105. reportName: {
  106. required: true,
  107. type: String,
  108. default: () => {
  109. return "";
  110. }
  111. },
  112. reportType: {
  113. required : true,
  114. type: String,
  115. default: () =>{
  116. return "";
  117. }
  118. }
  119. },
  120. data() {
  121. return {
  122. title: "报表分享",
  123. reportShareUrl: "",
  124. shareValidTypeOptions: [], // 有效期类型
  125. dialogForm: {
  126. shareValidType: 0,
  127. reportCode: "",
  128. reportType: "",
  129. shareUrl: "",
  130. shareCode: "",
  131. sharePassword: "",
  132. sharePasswordFlag: false
  133. },
  134. shareLinkFlag1: true,
  135. rules: {
  136. shareValidType: [
  137. { required: true, message: "有效期必选", trigger: "change" }
  138. ]
  139. }
  140. };
  141. },
  142. watch: {
  143. visib(val) {
  144. if (val) {
  145. // 弹窗弹出时需要执行的逻辑
  146. this.getSystem();
  147. }
  148. }
  149. },
  150. created() {},
  151. methods: {
  152. titleBuild() {
  153. return "【" + this.reportName + "】" + "报表分享";
  154. },
  155. selectChange(val) {
  156. this.dialogForm.shareValidType = val;
  157. },
  158. // 获取数据字典
  159. async getSystem() {
  160. this.shareLinkFlag1 = true;
  161. const { code, data } = await getDictList("SHARE_VAILD");
  162. if (code != "200") return;
  163. this.shareValidTypeOptions = data;
  164. this.dialogForm.shareValidType = this.shareValidTypeOptions[0].id;
  165. this.dialogForm.sharePasswordFlag = false;
  166. this.dialogForm.sharePassword = "";
  167. },
  168. async createShare() {
  169. this.dialogForm.reportType = this.reportType;
  170. this.dialogForm.reportCode = this.reportCode;
  171. this.dialogForm.shareUrl = window.location.href;
  172. console.log(this.dialogForm)
  173. const { code, data } = await reportShareAdd(this.dialogForm);
  174. if (code != "200") return;
  175. this.shareLinkFlag1 = false;
  176. this.$message({
  177. message: "创建链接成功!",
  178. type: "success"
  179. });
  180. this.reportShareUrl = data.shareUrl;
  181. this.dialogForm.sharePassword = data.sharePassword;
  182. },
  183. copyShare() {
  184. let content = "";
  185. if (this.dialogForm.sharePassword == "") {
  186. content = "AJ-Report分享链接:" + this.reportShareUrl;
  187. } else {
  188. content =
  189. "AJ-Report分享链接:" +
  190. this.reportShareUrl +
  191. " 分享码:" +
  192. this.dialogForm.sharePassword;
  193. }
  194. this.copyToClip(content);
  195. this.$message({
  196. message: "复制链接成功!",
  197. type: "success"
  198. });
  199. },
  200. copyToClip(content, message) {
  201. let aux = document.createElement("input");
  202. aux.setAttribute("value", content);
  203. document.body.appendChild(aux);
  204. aux.select();
  205. document.execCommand("copy");
  206. document.body.removeChild(aux);
  207. },
  208. async saveReportShare() {
  209. let params = {};
  210. //const { code } = await saveAuthorityTree(params)
  211. //if (code != '200') return
  212. this.closeDialog();
  213. },
  214. // 弹窗关闭之前需要执行的逻辑
  215. closeDialog() {
  216. this.$emit("handleClose");
  217. }
  218. }
  219. };
  220. </script>