index.php 7.7 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323
  1. <?php
  2. use common\helpers\ComponentHelper;
  3. use common\helpers\AddonHelper;
  4. ComponentHelper::loadComponentView('form-diy-list', AddonHelper::getAddonRootPath('SmartForm') . 'backend/views/components/form')
  5. ?>
  6. <div v-loading="loading" class=" b_box" id="app">
  7. <div class="nav">
  8. 表单管理
  9. <el-button type="primary" size="mini" @click="createdForm">新增表单</el-button>
  10. </div>
  11. <div class="form_list_box">
  12. <div class="list_box">
  13. <form-diy-list v-for="(f,fi) in formList" :key="fi" :item="f" :index="fi" @click="formEvent"></form-diy-list>
  14. </div>
  15. <div style="text-align: right;margin: 20px 0;" ref="page">
  16. <el-pagination @current-change="pagination" background layout="prev, pager, next" :page-count="pageCount"></el-pagination>
  17. </div>
  18. </div>
  19. <el-dialog
  20. :visible.sync="shareModel"
  21. width="639px">
  22. <div class="diang_title_box">
  23. <span>分享</span>
  24. </div>
  25. <div class="diang_tpo_desc_box">可以将二维码或链接放置在海报,宣传单,朋友圈,线下等方式发送给客户</div>
  26. <div class="dinag_body_box">
  27. <div class="dinag_lef_b_box">
  28. <p class="dinag_share_ti">分享方式一:</p>
  29. <div id="qrcode-info">
  30. <div id="qrcode" style="width:100px; height:100px; margin-top:30px;"></div>
  31. </div>
  32. <a class="dinag_a_box" @click="downloadShareImg">下载二维码</a>
  33. <div class="diang_line_libox"></div>
  34. </div>
  35. <div class="dinag_lef_b_box">
  36. <p class="dinag_share_ti">分享方式二:</p>
  37. <div class="inp_line_dinag_box">{{shareInfo.link}}</div>
  38. <a class="dinag_link_box" @click="copyText">复制链接</a>
  39. </div>
  40. </div>
  41. </el-dialog>
  42. </div>
  43. <!-- <script src="https://cdn.jsdelivr.net/clipboard.js/1.5.12/clipboard.min.js"></script> -->
  44. <script>
  45. new Vue({
  46. el: '#app',
  47. data(){
  48. return{
  49. loading:true,
  50. pageCount:0,
  51. limit:10,
  52. formList:[],
  53. page:1,
  54. shareModel:false,
  55. shareInfo:{
  56. q_img:'',
  57. link:''
  58. }
  59. }
  60. },
  61. created(){
  62. this.getList()
  63. },
  64. methods:{
  65. getList(){
  66. request({
  67. params: {
  68. r: 'smart-form/form/index',
  69. page:this.page,
  70. limit:this.limit
  71. },
  72. method: 'GET',
  73. }).then(e => {
  74. this.loading = false
  75. this.formList = e.data.data.list
  76. this.pageCount = e.data.data.page_count
  77. }).catch(e => {});
  78. },
  79. pagination(currentPage) {
  80. this.page = currentPage
  81. this.loading = true
  82. this.getList()
  83. },
  84. createdForm(){
  85. navigateTo({
  86. r: 'smart-form/form/add'
  87. })
  88. },
  89. async copyText(){
  90. let target = document.createElement('input')
  91. target.value = this.shareInfo.link // 给input的value赋值
  92. document.body.appendChild(target) // 向页面插入input节点
  93. target.select() // 选中input
  94. try {
  95. await document.execCommand('Copy') // 执行浏览器复制命令
  96. this.$message.success('复制成功')
  97. } catch {
  98. console.log('复制失败')
  99. }
  100. },
  101. // 图片下载
  102. downloadShareImg() {
  103. if (!this.shareInfo.q_img) {
  104. this.$message.error('暂无图片');
  105. return;
  106. }
  107. fetch(this.shareInfo.q_img).then(res => res.blob().then(blob => {
  108. var a = document.createElement('a');
  109. var url = window.URL.createObjectURL(blob);
  110. a.href = url;
  111. a.download = '二维码';
  112. a.click();
  113. window.URL.revokeObjectURL(url);
  114. }))
  115. },
  116. formEvent(e){
  117. let that = this
  118. this.loading = true
  119. switch(e.type){
  120. case 'share':
  121. request({
  122. params: {
  123. r: 'smart-form/form/share',
  124. },
  125. method: 'post',
  126. data:{
  127. template_id:e.item.id
  128. },
  129. }).then(async res=>{
  130. if(res.data.code != 0){
  131. this.$message.error(res.data.msg);
  132. this.loading = false;
  133. return;
  134. }
  135. // console.log(res)
  136. this.shareInfo.link = res.data.data
  137. this.shareModel = true
  138. setTimeout(()=>{
  139. let qrcodeInfo = document.getElementById("qrcode-info");
  140. document.getElementById("qrcode").remove(); //删除生成的二维码
  141. let addCodeDom = document.createElement("div")
  142. addCodeDom.setAttribute("id", "qrcode");
  143. addCodeDom.setAttribute("style", "width:100px; height:100px;margin-top:30px;");
  144. qrcodeInfo.appendChild(addCodeDom) //添加标签
  145. let qrCodeDom = document.getElementById("qrcode")
  146. var qrcode = new QRCode(qrCodeDom, {
  147. text:this.shareInfo.link,
  148. width: 100,
  149. height: 100
  150. });
  151. qrcode.makeCode(this.shareInfo.link);
  152. console.log(qrCodeDom.getElementsByTagName("img")[0].src)
  153. return new Promise((req, rej) => {
  154. setTimeout(() => {
  155. that.shareInfo.q_img = qrCodeDom.getElementsByTagName("img")[0].src;
  156. }, 200);
  157. })
  158. })
  159. // this.shareInfo.q_img = qrCodeDom.getElementById("qrcode")
  160. this.loading = false
  161. }).catch(err=>{
  162. console.log(err,'ppppppppppppp')
  163. })
  164. break;
  165. case 'copy':
  166. request({
  167. params: {
  168. r: 'smart-form/form/copy',
  169. },
  170. method: 'post',
  171. data:{
  172. template_id:e.item.id
  173. },
  174. }).then(res=>{
  175. if(res.data.code == 0){
  176. this.$message.success('复制成功')
  177. this.getList()
  178. }else{
  179. this.$message.error(res.data.msg);
  180. this.loading = false;
  181. }
  182. }).catch(err=>{
  183. console.log(err,'ppppppppppppp')
  184. })
  185. break;
  186. case 'delete':
  187. request({
  188. params: {
  189. r: 'smart-form/form/delete',
  190. },
  191. method: 'post',
  192. data:{
  193. id:e.item.id
  194. },
  195. }).then(res=>{
  196. // console.log(res,'[[[[[[[[[]]]]]]]]]')
  197. if(res.data.code == 0){
  198. this.$message.success('删除成功')
  199. this.getList()
  200. }else{
  201. this.$message.error(res.data.msg);
  202. this.loading = false;
  203. }
  204. }).catch(err=>{
  205. console.log(err,'ppppppppppppp')
  206. })
  207. break;
  208. }
  209. }
  210. }
  211. })
  212. </script>
  213. <style scoped>
  214. .b_box{
  215. min-height: 100vh;
  216. background: #f3f3f3;
  217. }
  218. .inp_line_dinag_box{
  219. width: 80%;
  220. min-height: 30px;
  221. border: 1px solid #e5e5e5;
  222. display: flex;
  223. align-items: center;
  224. padding: 0 10px;
  225. box-sizing: border-box;
  226. border-radius: 5px;
  227. font-size: 12px;
  228. margin-top: 50px;
  229. }
  230. .dinag_link_box{
  231. font-size: 12px;
  232. margin-top: 70px;
  233. cursor: pointer;
  234. }
  235. .diang_line_libox{
  236. position: absolute;
  237. right: 0;
  238. top: 0;
  239. bottom: 0;
  240. width: 1px;
  241. background: #e5e5e5;
  242. }
  243. .dinag_share_ti{
  244. font-size: 14px;
  245. }
  246. .dinag_a_box{
  247. font-size: 12px;
  248. margin-top: 30px;
  249. }
  250. .dinag_lef_b_box{
  251. width: 50%;
  252. display: flex;
  253. height: 100%;
  254. align-items: center;
  255. justify-content: flex-start;
  256. flex-direction: column;
  257. position: relative;
  258. padding-bottom: 40px;
  259. box-sizing: border-box;
  260. }
  261. .dinag_body_box{
  262. width: 100%;
  263. display: flex;
  264. align-items: center;
  265. justify-content: space-between;
  266. margin-top: 30px;
  267. }
  268. .dinag_img_qr{
  269. width: 100px;
  270. height: 100px;
  271. margin-top: 30px;
  272. }
  273. .diang_tpo_desc_box{
  274. width: 100%;
  275. display: flex;
  276. align-items: center;
  277. justify-content: center;
  278. font-size: 12px;
  279. margin-top: 10px;
  280. }
  281. .nav{
  282. background: #ffffff;
  283. border-radius: 5px;
  284. padding: 26px 24px;
  285. display: flex;
  286. align-items: center;
  287. justify-content: space-between;
  288. margin-bottom: 10px;
  289. }
  290. .diang_title_box{
  291. position: absolute;
  292. top: 0;
  293. left: 0;
  294. right: 60px;
  295. display: flex;
  296. align-items: center;
  297. justify-content: center;
  298. height: 50px;
  299. font-size: 14px;
  300. z-index: -1;
  301. }
  302. .form_list_box{
  303. padding: 25px;
  304. background: #fff;
  305. border-radius: 5px 5px 0 0;
  306. }
  307. .list_box{
  308. width: 100%;
  309. display: flex;
  310. align-items: center;
  311. flex-wrap: wrap;
  312. }
  313. </style>