index.php 7.0 KB

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