GMV TO 5A

云图扩展工具

  1. // ==UserScript==
  2. // @name GMV TO 5A
  3. // @namespace http://tampermonkey.net/
  4. // @license MIT
  5. // @version 1.1
  6. // @description 云图扩展工具
  7. // @author siji-Xian
  8. // @match *://yuntu.oceanengine.com/yuntu_brand/assets/gta/track?*
  9. // @icon https://lf3-static.bytednsdoc.com/obj/eden-cn/prhaeh7pxvhn/yuntu/yuntu-logo_default.svg
  10. // @grant none
  11. // @require https://lf26-cdn-tos.bytecdntp.com/cdn/expire-1-M/jquery/3.2.1/jquery.min.js
  12. // @require https://cdn.bootcss.com/moment.js/2.20.1/moment.min.js
  13. // @require https://greasyfork.org/scripts/404478-jsonexportexcel-min/code/JsonExportExcelmin.js?version=811266
  14. // @require https://greasyfork.org/scripts/455576-qmsg/code/Qmsg.js?version=1122361
  15. // ==/UserScript==
  16.  
  17. (function () {
  18. "use strict";
  19.  
  20. var new_element = document.createElement("link");
  21. new_element.setAttribute("rel", "stylesheet");
  22. new_element.setAttribute("href", "https://qmsg.refrain.xyz/message.min.css");
  23. document.body.appendChild(new_element);
  24.  
  25. var buttom = document.createElement("button"); //创建一个按钮
  26. buttom.textContent = "导出数据"; //按钮内容
  27. buttom.style.height = "32px"; //高
  28. buttom.style.lineHeight = "32px"; //行高
  29. buttom.style.align = "center"; //文本居中
  30. buttom.style.color = "white"; //按钮文字颜色
  31. buttom.style.background = "#2a5df0"; //按钮底色
  32. buttom.style.border = "0px"; //边框属性
  33. buttom.style.borderRadius = "3px"; //按钮四个角弧度
  34. buttom.style.marginLeft = "10px";
  35. buttom.style.fontSize = "12px";
  36. buttom.style.padding = "0 5px";
  37. buttom.addEventListener("click", userClick); //监听按钮点击事件
  38.  
  39. //message.js
  40. let loadingMsg = null;
  41.  
  42. //获取industry_id
  43. let industry_id = null;
  44.  
  45. //获取report_id
  46. let report_id = null;
  47.  
  48. (function listen() {
  49. var origin = {
  50. open: XMLHttpRequest.prototype.open,
  51. send: XMLHttpRequest.prototype.send,
  52. };
  53. XMLHttpRequest.prototype.open = function (a, b) {
  54. this.addEventListener("load", replaceFn);
  55. origin.open.apply(this, arguments);
  56. };
  57. XMLHttpRequest.prototype.send = function (a, b) {
  58. origin.send.apply(this, arguments);
  59. };
  60. function replaceFn(obj) {
  61. if (
  62. this?._url?.slice(0, 42) == "/yuntu_ng/api/v1/get_brand_competitor_list"
  63. ) {
  64. industry_id = JSON.parse(obj?.target?.response).data[0].industry_id;
  65. }
  66. if (
  67. this?._url?.slice(0, 45) == "/yuntu_ng/api/v1/AudienceGtaReportQueryListV2"
  68. ) {
  69. report_id = JSON.parse(obj?.target?.response).data.reports[0].base_info.report_id;
  70. }
  71. }
  72. })();
  73.  
  74. //默认GET请求
  75. const getRequestOptions = {
  76. method: "GET",
  77. redirect: "follow",
  78. };
  79.  
  80. //获取brand信息
  81. let brand = localStorage.getItem("__Garfish__platform__yuntu_user") || "";
  82. let brands = JSON.parse(brand);
  83.  
  84. // 弹窗组件
  85. class inlyModelComponent {
  86. constructor() {
  87. let _this = this;
  88. this.loadingMsg = null;
  89.  
  90. //展示弹窗
  91. this.showModel = () => {
  92. $("#inly_model").css({ display: "block" });
  93. $(".inly_box").css({ animation:'inly_box .2s forwards' })
  94. setTimeout(() => {
  95. $("#inly_model").css({ opacity: 1 });
  96. }, 0);
  97. };
  98.  
  99. //关闭弹窗
  100. this.closeModel = function () {
  101. $("#inly_model").css({ opacity: 0 });
  102. $(".inly_box").css({animation:'inly_box_close .2s forwards'})
  103. setTimeout(() => {
  104. document.getElementById("inly_model").style.display = "none";
  105. }, 200);
  106. };
  107.  
  108. //原生阻止冒泡
  109. this.stopPropagation = function (e) {
  110. e = e || window.event;
  111. if (e.stopPropagation) {
  112. e.stopPropagation();
  113. } else {
  114. e.cancelBubble = true;
  115. }
  116. };
  117.  
  118. const htmlModel = `
  119. <div
  120. style="
  121. transition: opacity 0.2s;
  122. opacity: 0;
  123. position: absolute;
  124. top: 0;
  125. left: 0;
  126. width: 100vw;
  127. height: 100vh;
  128. background-color: rgba(0, 0, 0, 0.2);
  129. z-index: 888;
  130. display: none;
  131. "
  132. id="inly_model"
  133. >
  134. <style>
  135. .inly_buttom{
  136. flex: 1;
  137. display: flex;
  138. color: #FFF;
  139. cursor: pointer;
  140. background-color: rgba(43, 93, 241, .9);
  141. font-size: 12px;
  142. height: 24px;
  143. margin: 5px;
  144. border-radius: 3px;
  145. align-items: center;
  146. justify-content: center;
  147. }
  148. .tips{
  149. position: absolute;
  150. font-size: 12px;
  151. color: #666;
  152. right: 5px;
  153. bottom: 5px;
  154. }
  155. .inly_box{
  156. box-sizing: border-box;
  157. position: absolute;
  158. height: 200px;
  159. width: 350px;
  160. background-color: #fff;
  161. border-radius: 10px;
  162. padding: 10px;
  163. }
  164. @keyframes inly_box {
  165. 0%{top:0%;right: 0%;transform:translate(0%, 0%) scale(0);}
  166. 100%{top:50%;right: 50%;transform:translate(50%, -100%) scale(1);}
  167. }
  168. @keyframes inly_box_close {
  169. 0%{top:50%;right: 50%;transform:translate(50%, -100%) scale(1);}
  170. 100%{top:0%;right: 0%;transform:translate(0%, 0%) scale(0);}
  171. }
  172. </style>
  173. <div
  174. id="inly_box"
  175. class="inly_box"
  176. >
  177. <div
  178. style="
  179. position: absolute;
  180. top: 0px;
  181. right: 10px;
  182. z-index: -1;
  183. opacity: 1;
  184. /* transform: rotate(-45deg); */
  185. "
  186. >
  187. <svg
  188. version="1.1"
  189. id="Layer_1"
  190. xmlns="http://www.w3.org/2000/svg"
  191. xmlns:xlink="http://www.w3.org/1999/xlink"
  192. x="0px"
  193. y="0px"
  194. width="42px"
  195. height="42px"
  196. viewBox="0 0 42 42"
  197. enable-background="new 0 0 128 128"
  198. xml:space="preserve"
  199. >
  200. <image
  201. id="image0"
  202. width="42"
  203. height="42"
  204. x="0"
  205. y="0"
  206. href="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAIAAAACACAYAAADDPmHLAAAABGdBTUEAALGPC/xhBQAAACBjSFJN
  207. AAB6JgAAgIQAAPoAAACA6AAAdTAAAOpgAAA6mAAAF3CculE8AAAABmJLR0QA/wD/AP+gvaeTAAAT
  208. 10lEQVR42u2de5BeR3mnn1+fMxfdLEszkmxLGsmA7GAT29iGkCUQO4QACbYXbyBgxx7Z5eSPQG2K
  209. bGHCht2wgWwClSVcik0WyK4kr8AFzlLAmhASiEnsxIBxTGwHc7EljSxb0szoamku33f6t3/0GWlG
  210. 1lw+XWakpZ+qqZlvvtN93u7z9u3tt98DmUwmk8lkMplMJpPJZDKZTCaTyWQymUwmk8lkMplMJpPJ
  211. ZDKZTCaTyWQymUwmk8lkMplMJpPJZDKZTCaTyWTORLRnfQ8A0TNLUIR0bdeGviP/6+9NeWiKdD7O
  212. 38s39nEq6L91FQoFAR+/HIJQ/7l0nNx71q/BgD2DwgsKpRIu+V/bTljWgd4ePEVdjX3X3ULdDK5f
  213. QxlEM0ZmVJT65l0b+ijr65cB1wMd06S1zd8BTxznu646j3mTpB0B+oDHg3jGrhXHgWWbtp5whR6t
  214. NmN4OfAyJuobmKbFV4CnJ/7bgHqA1wPlNLdoGN8LPHOSwgL8FHAtx9eDvwcea730BOC1wIueV/6J
  215. jAL3As8ClCGJcFFlPmpYMNWNBATptyr7eArwQsNHgHOmyGIYeMrmbuBTwM5KTQZ7e+g6id5AiIgo
  216. 8FsN7zyO3E2hGzlGAerquwr474ZimrKPBqmPk1SA+sn8ouHjk1xyp1tUAAUIgbKK/LbhDdOUYwS0
  217. VbUChKP/PyVM1wF1ApcAfwB8Bri0IFABu3tXnyIRJpVrsjLK08s9XR6tohP8bqpUM003oRxhholO
  218. B9cCfwasVkvyZ04lc6kAAK8C3g/Mh6OTyczsMdcKAHAz8Ha3pQ8DWQlmlTNBAUrgd9XgjQAi0H/r
  219. mrmW6SeGM0EBAJYCfwxcEokgs/OWFXMt008EZ4oCAFxKUoKlAEWYziSRORWcSQoAcB3wblAJeVI4
  220. G5xpCgDwDvDNYx/6e1fNtTz/X3MmKsB8kqHoZ9PHgl2n10h0RrLr1pWzcp8zUQEAeoAPAavABITf
  221. PNcizRoFQKFiRhebZMokWkxjzj4es6UAh4BGi2l+Dvgv1JtLA/N/YuYD61w/04H10/d8A72rsU2z
  222. 8hKblsfLstUEJ4LgfmDAyejTCrcAjy/b2Pfh/t4edveuZvnG7bMh8ulmdIrvXhfS8PePQuxdP7ni
  223. 17uABAKR+GuGi1oVZLZ6gP2C/wQ82GK6NuA9/b09vyygYTN424WzJPJpZRfQnOS7C4BPSFwnWFIG
  224. Otsm+SmD5glWRuI7o3kvJ9CgZ6UHAIpnQueW8+Pwuwx3A63McLpJ9oGn2hWecKxY1BY42IizJPpp
  225. 4QmgHzj/eF8arsB8xuIHo5E9kzuPONisNKzjBMZ/mD0FYG08HEZU3C/79+u98HktJP9pJyW4Ddi7
  226. 5aZVLXnMnIE8RRoWJ53aGhZirpqho9YJM6urANkEsUlpG7hVrgfujFZhYPdZaiRS8scaJTnE7J9r
  227. eWZVAQpHDA2JPxL8VYvJBbxD8tvGhB44G+0DjXrot78BfIKZOaOcNmZVAcaVdEDSu3V838KpWAi8
  228. P8LPpHHx7HMi6d68I0kuVUF8UPDnQDVX8sy6ISggCoTxo4j3APtazGItyUi0Es5O/4HSAoHhgMS7
  229. JO4UbJ0LWWZdAZZs2EbTJgDzC39R6WG22gJeDfw+qieSc9qJnkAdbNqG6km74VAz+sMSvxzEewVf
  230. Fzwp2CnY1coPyfO6JWZtFTCe7o197Fnfw1AlB/HxaC49ASNRr83juPwoodli0rmna8MWtr95FfPm
  231. B8o0Mfx+Zf9hm8KfAkujvYBWxjjRLvh4NK9uRY45UQCAJWv72LO1B8NzEu/FrKv9+mdKO/B7qPmE
  232. xF+fZZ0AAKs/n7zU969fRyOOUBKwOCw43FJGgo7OohwZrp5rVYY5UwC9D3a9zRSdAeytEnfafIZk
  233. CZspy4APYrZI/uFcleVkWbzhRyeVfvD2NcTKBScwK57T3cAVn91OiEaGBv6m0ubPcIvZXA78V5lz
  234. dNbNBuaeOd8OXrqxDwNtFhIbBJ9sNQ/Dm4D/QNo7yLTAnCsA1AchU/MdRXwA+Fqr5TD8djS/dDrl
  235. dN3F7rnlDFt6GpxOxZ5dQ8B4Dh+KYIHpF7wbaHVgXGy4+DSK2Ga7O9pUxZljgOq/vRsZYqTTZkmr
  236. 6c8YBVj9+acRDZTMxY8I3sPs2cqnnTs49TIvGxypwGbfb54ZbutFXAAY22uBGe2Vj1ffEA3RxJlU
  237. wumma+MzuD4lKPsLgv8GnLZ933QmkWHN8B42v9LVUVxcSNDoZOf6tXNaX3tuTwdohgHDWwzLpy0D
  238. RONR14871F4lz9H67Pu00L0pefxYisBHBJ87zbfsZ4brbsMLDP+xCCw0po1R9szAbetUs7O3h33r
  239. e+qu33TC623umElawUFgYOxzWXcHu5xMid2zXprj0FVbCp2E/T0lI9FVp/o+dZfXB+yAmY2fNjc3
  240. o0cCvD+6bXsZzOD66SeFY5tXqg4x2nYObbF5wl2uJKJNKdocuD7Ch2bS+mu2YZ4Zu3cZDUEMAN8l
  241. nc6ZcwTsaQQapSnxU4g7ZTYbzjuV94nRFLDbQf+AeclM0hgKm9+weHkh3415ABhk+mGkv76OtiCc
  242. ru7mRBqd6QTWNaJvsLnOUwflOJZvNvDetnr6V4a0/KoQX8C8hRTEYc5Zunkrg+tXYwujb0j+A8yf
  243. Mn0YmxkjCQvXw8xNhsUzTWtzeQWXKw2fh5haAUqLj4E/UFbzOFRVnGMzgn5HcAeT+wceV2zjNtKq
  244. p1VLbj/inhIdiSVUNitTBIH4uuBvTTqleybQtWE7A709BAzS/wRfavP2U5V/k1SDggcQn8P8Rqt5
  245. OPkoLJzuOpmlsQ7OURnabYalbpI5e1YQ/G/gu0mMpK9hxV3bx6JGHQT+kDQmnjEMHa4bltO4K/j6
  246. qcr7vI19Y0uihuCPBQ+dxqI8b8ifTdO14B+AD2MqBN0b0mQ7ADTr8GpBPCh4F7B7tgSbjtWff5rQ
  247. GEndNeySdKfgx6cq/yaRUgHDUxLvUIsBms4GlOZ3/17i6bYAjXFHdALAilobKoNdfk5wh+DxuRZ8
  248. jCWbdxEr1zYCPyzxTsEpOSGyYsPTNI7E19O3JH5d8FVOo/1hFqkEXwRuQTxyoBF4rgnnbz7ayR+x
  249. BC6vu0OFJogvS7wpiI8oDQnju6rJrIdi8klJ4CQd+Lo39WFDRFj+vxI3SXxNM/OCmXKrtHtjH8I0
  250. mxXA9yRuDknJHp5h/jNhQr156ro8KWrj1reDeLukXonvd7VHFpRm5V0TR/gJD6x7Yx8DvT1UEcqC
  251. H7UF/U4z+s+BVxmuFKwOou/Yuqw/DUr8tdKSZLzCFMB3mpXiyRZ32cZtDPSuAQeQ7w/wFsTPO0Uc
  252. e6EmX8E0JXZPpYHdG9OEU8lfcQ/wsSDuBl5heAXworpsJ1KKADxaSFQKlJhYFoToRwTf4NQ4hUYn
  253. /8ofAf8k9G3jATCS2D0UWHHX8yOcHrdODryyi8a6BUcuMPDYYDtXLW+0I1UlVJ2f3nrk+v239SCs
  254. UIT2scH62AdQttHceaBi7eaT77l3966hXaaq5RtpwsJ2tSsoHBF4fAkN0W5IqhaNk3sy+nt7iDZt
  255. dRTNytAeVJSB0pKed4+pGLvWNJCr4aHdHOxYQXcwSoEwypbymyR/GVd2c7RyVYvNiEWJWTbFIZrj
  256. dtnnPDAIDwwCsKt3FaOYS5aO0IhhVEpj8XiqNIBakZHJSlIRWHiKOrzlG5MmD9yylkZbg7IsaESP
  257. TjnGHDlHPT1jFfbjm85jRec8mlWkEV3FZC85MZxi9HaNvgDaDtEUYDdpzQYwKXJ6DsYUJRzY7yMu
  258. Z1NxRAF2r1/Duc1h9hcdE3eLdg+z4q+mXhRUrg2dVdpVWjoyQnn3rinT7HzreagsCUUYq59Jg0fv
  259. fet5NDvbn6dbDpHCBbsP9XHp5yd+N7B+zZGKf3rHXlatXEx3iyeLl5QdDFdHn3llUEwrpmWb5m61
  260. PGZ6dq1Urst5cLSThe0jLP70zINZB0hdnmwOFh2Qgj6/hDpucGP+jI1NJbDQwL6ODvp7e478HK/d
  261. FR0dFEVBkPjKgRexrGvPpBkfGDmybimATpv5hs72GFCEFfN72HXbMaHlUrcbJOafd/5iWp2D9veu
  262. YV4Zx2wkYyFul5sUm3cuqTfwijG3eKV9gMv2DnS0vHbRWPjyRrTag14n8UrSoYt7gb8cC78uYKRh
  263. OtpFAJq1e0yHAqPJsH25xDqJe2JE0Q5IHr/VOhakVvW4ZVSCX08y7gwJUFtJ16efmiDkztu7KaoF
  264. BPlGw3UBthsKw26buwW7jh1H647lYltXtwc2D1c+EiYdJoa7P5Zd63tYEGA0QjQvlvhVYKnguTLw
  265. vtGKauxWUiqVqHsISM0qHi1rUKCKqRpcCNWpoxknU5p+BpnosV7xaIHGLjNQpFZ/JXCh4C8lXRbt
  266. 1QvbdO/+RiT46DSslIhjnywCDYxYujGdUCqblWlvCwRxA/BS4BOCnwHGvGxXCZZGeHzF4qLaNxS7
  267. JA4SIeIqyhXiQsyv2SwktZYng3QN8JjhyxyNQj5S11UD0Sn7SpI/3wFgC7CdZpPB9T3YMH9hG4cP
  268. jjLaNkR70sSFwL+WQZ+q7M5oXiNxy7ySPznc5BzSjuFTEtvqh3IReHh/w2VH0GrDRYKHSRszDN6x
  269. ltCIeJxiLN3QR2EYiWC4OIg7gLvqx7q8Ealq8+9PAT8QOmizCCGbQ4iiRKNVqvRzMC+O+CFLlexO
  270. IsOkPYd1Iegh221Ah9Ah47KyGoJCLiqriXCZ3Ga5sL7nNyMcFLzYMNg07cHeLvP4gZHU5QErSN7V
  271. jxk3gAswzyEOoHbCuPKWbaWwvVJwDfBHhl1LVo1+cd+ODqronw7iBptzAgztPRwPBLEums8Gcb2k
  272. +5v2FyTONayT2Ih5CLiRtL3aWS+r3kw6vXIl5qDEx4BVTq5fO0jHvQbHtdDVwMrhoeaDAO2HFqRq
  273. gBWYf25E76uv2wqsG2rSJbgZsVBwcZA+VdlvAn7d5smOoJdIdAv6kdqFv9zfuyaNn0db04HxFsYq
  274. uiyD3kZS4Ec6SmmoYSOWBfE2m646/x9LXCr420KsRiwI4kMWDcN1gnmV/S3BSxGvwP4z4FWIF2A/
  275. BPyKYIWJz5F2Br9g/JtW8y9So9DrBRcYOgQXCNoxywz/zvDDInlFX2jxnwW7g9Qd7dsFi4A3R7NT
  276. 4mrEJ22vquwHBVsH169J4f8DQuilkn4kaVc0DGxvL6voG+pTvPcF8e0gtgn+rn75xjXA/YJLJDqj
  277. uQQYLQN/U6WdsZ8FfiDpq8a/CPxb4BeAfwHOj+bcaFYb2g0fBjZJPK6jr7sogM4lizqS9a8whVQC
  278. 3YZno1kWzRttrjVsDulFCU8o9VrNpt0leFmtT58sxLO1dS9gD9f/V9Vw7empNqEjHsUSlEHnCxaC
  279. vmVguGmTdv/+RGlH9+4g9gjuA3Yafl5iS4CFMXqZ4SrBumjOU5Lv7Uq99wrgDXWvfLXgxtrXoYs0
  280. 9N5YN4prST6OtxheIfF/gMNOD3wN8LTgo4XYHMQwMIS0KNp3kmwO90k8C3ytrpdXBXFDEegmHU1U
  281. kCh+96XnIngJYn4z+lGSweNmIIR619BwYRCfjeYZxGsFXzL6JuK1Nv+GNH4viWYf8HNKXdVjhitI
  282. y5x5wKMOxT2yLyO91KBU0uotwEXRbIsE193TPsTW+RcvZGjnEAThtA18W53n1SRF+2yAHYhftYmI
  283. tTYXAS+U+K6kKpqvSLyxfhlGJ7DS0CGpDxxDGqh3IAaQ+OAj+3n3FYupW+PVhgdqZ8vrgcvqSu0k
  284. GZ7+XuK7pB5kMEY2AWsMN5Du8WlSFJA31D3JFYaVgnvreD7tJL/HF5MCYFwDPAm+C/QL9fDbJuhz
  285. ehPKIuCeIB6W6O7qCl8aGWY0psY1D7hW4oWIfaT871nUEZ5sVO41/DCI+6K5xqYLMQreq3pJcb7h
  286. jnpP6BDwQGeh74xUvgy42PCPhbSjsgNwzkiM+ztCcD3WdBq2C36JNBt9oK6gy4FH67dfLAIOKVm8
  287. FgPLwNuEeknd2+ckniCKrk0TlzAinQCu506vredZD0rst6EZTHvUa5xCzH4VKA2NQiwHbmqaD4Yk
  288. S5vE95x6p61V1JNl8IR3CI2/n0SbU0SSCzBDpHJ83bBI8Brg+4X8L0iO6VDKUExhjBakMnlLQC+v
  289. H/7/qODZkFYSzwgGI5Qlalb4RSQL48P1uL0XGALaJYy50/BtUpCtx0KKr3C5zeu6zp33ocF9w4Bf
  290. Xfe6X5Jo2lwJfEtiayGVlf3yaL4XYNTwSpJF/TuCIdWuV1SmXTAP+yDJH2/CzFPjfycjBsczCfuY
  291. v8d/PhbbARECaioIoo/76piB9T0UElU8Oi+uKhGCkxktHPdlUW3AMsROQZywZq7FDzr+amDsyHnT
  292. DoW0iGRbHzm2xEEpz1hrZfTzyr8KGBH0HyvemBf/mG3K9lj0kPH12Q58wCmQxLZx+XYAXRE/UwRQ
  293. PDrrlzji7FEECHW9ja04JrxUSqDdt66plzITH5Rllm2YmeHE10z8rPumvr7/+m5YMv+IelgFULF8
  294. hveb8LBu7cERQr0279rUx+B420NdoO4NMzfc+H0wsGWin18RoVnA8hnks7t3dQpuOb5OHOneNL1l
  295. 7mgePZDmDFcA/woMLav3aqhrrqr3R4uQHmylERRKVvzFjhnf58w54ZCZwO5be6gna0dYdnYHxspk
  296. MplMJpPJZDKZTCaTyWQymUwmk8lkMplMJpPJZDKZTCaTyWQymUwmk8lkMplMJpPJZDKZTCaTyWQy
  297. mUwm0wL/D47AvAv51j5MAAAAJXRFWHRkYXRlOmNyZWF0ZQAyMDIyLTExLTE4VDA5OjAwOjQ5KzAw
  298. OjAw8rsBoQAAACV0RVh0ZGF0ZTptb2RpZnkAMjAyMi0xMS0xOFQwOTowMDo0OSswMDowMIPmuR0A
  299. AAAASUVORK5CYII="
  300. />
  301. </svg>
  302. </div>
  303. <div style="font-size: 14px; color: #000; height: 24px;">
  304. 功能
  305. </div>
  306. <div class="tips"><span>(Tips:点击空白处关闭弹窗)</span></div>
  307. <div style="max-height: calc(100% - 24px);">
  308. <div style="width: 100%; display: flex;">
  309. <div id="inly_xkxs" class="inly_buttom" style="flex:3;"><span>活动期新客蓄水</span></div>
  310. <div id="inly_xkxscl" class="inly_buttom" style="flex:3;"><span>新客蓄水人群策略</span></div>
  311. </div>
  312. <div style="width: 100%; display: flex;">
  313. <div id="inly_xkxz" class="inly_buttom" style="flex:3;"><span>活动期新客新增</span></div>
  314. <div id="inly_xkxzcl" class="inly_buttom" style="flex:3;"><span>新客新增人群策略</span></div>
  315. </div>
  316. <div style="width: 100%; display: flex;">
  317. <div id="inly_lkxs" class="inly_buttom" style="flex:3;"><span>活动期老客蓄水</span></div>
  318. <div id="inly_lkxscl" class="inly_buttom" style="flex:3;"><span>老客蓄水人群策略</span></div>
  319. </div>
  320. <div style="width: 100%; display: flex;">
  321. <div id="inly_xs" class="inly_buttom" style="flex:3;"><span>蓄水期触点贡献情况</span></div>
  322. <div id="inly_xscl" class="inly_buttom" style="flex:3;"><span>蓄水期人群策略</span></div>
  323. </div>
  324. </div>
  325. </div>
  326. </div>
  327. `;
  328.  
  329. //添加弹窗到body节点
  330. $("body").append(htmlModel);
  331. function appendDoc() {
  332. let like_comment;
  333. setTimeout(() => {
  334. like_comment = $("body");
  335. if (like_comment) {
  336. like_comment.append(htmlModel); //把按钮加入到 x 的子节点中
  337. return;
  338. }
  339. appendDoc();
  340. }, 1000);
  341. }
  342. appendDoc();
  343.  
  344. //点击空白处关闭弹窗
  345. $("#inly_model").click(function (event) {
  346. _this.closeModel();
  347. _this.stopPropagation();
  348. return false;
  349. });
  350.  
  351. //阻止冒泡
  352. $("#inly_box").click(function (event) {
  353. _this.stopPropagation();
  354. return false;
  355. });
  356.  
  357. //按钮事件
  358. $("#inly_xkxs").click(function (e) {
  359. exp_xkxs();
  360. _this.stopPropagation();
  361. return false;
  362. });
  363.  
  364. $("#inly_xkxz").click(function (e) {
  365. exp_xkxz();
  366. _this.stopPropagation();
  367. return false;
  368. });
  369.  
  370. $("#inly_lkxs").click(function (e) {
  371. exp_lkxs();
  372. _this.stopPropagation();
  373. return false;
  374. });
  375.  
  376. $("#inly_xkxscl").click(function (e) {
  377. exp_xkxscl();
  378. _this.stopPropagation();
  379. return false;
  380. });
  381.  
  382. $("#inly_xkxzcl").click(function (e) {
  383. exp_xkxzcl();
  384. _this.stopPropagation();
  385. return false;
  386. });
  387.  
  388. $("#inly_lkxscl").click(function (e) {
  389. exp_lkxscl();
  390. _this.stopPropagation();
  391. return false;
  392. });
  393.  
  394. $("#inly_xs").click(function (e) {
  395. exp_xs();
  396. _this.stopPropagation();
  397. return false;
  398. });
  399.  
  400. $("#inly_xscl").click(function (e) {
  401. exp_xscl();
  402. _this.stopPropagation();
  403. return false;
  404. });
  405. }
  406. }
  407.  
  408. //初始化弹窗组件
  409. const inly_Model = new inlyModelComponent();
  410.  
  411. let aadvid = getQueryVariable("aadvid"),
  412. brand_id = brands.brand_id;
  413.  
  414. function appendDoc() {
  415. let like_comment;
  416. setTimeout(() => {
  417. like_comment = document.getElementsByClassName(
  418. "backHeader-hgTQPa"
  419. )[0];
  420. if (like_comment) {
  421. like_comment.append(buttom); //把按钮加入到 x 的子节点中
  422. return;
  423. }
  424. appendDoc();
  425. }, 1000);
  426. }
  427. appendDoc();
  428.  
  429. //query参数获取
  430. function getQueryVariable(variable) {
  431. var query = window.location.search.substring(1);
  432. var vars = query.split("&");
  433. for (var i = 0; i < vars.length; i++) {
  434. var pair = vars[i].split("=");
  435. if (pair[0] == variable) {
  436. return pair[1];
  437. }
  438. }
  439. return false;
  440. }
  441.  
  442. //fetch请求封装
  443. async function fetchFun(url, data = {}, requestOptions = getRequestOptions) {
  444. const urlData = Object.keys(data)
  445. .map((v) => `${v}=${data[v]}`)
  446. .join("&");
  447. try {
  448. const response = await fetch(`${url}?${urlData}`, requestOptions);
  449. const result_1 = await response.text();
  450. return JSON.parse(result_1);
  451. } catch (error) {
  452. return console.log("error", error);
  453. }
  454. }
  455.  
  456. //活动期转化分析
  457. async function fetchData_hd(i, data) {
  458. let requestData = await fetchFun(
  459. "https://yuntu.oceanengine.com/yuntu_ng/api/v1/AudienceGtaHarvestAnalysis",
  460. { ...data, card: i }
  461. );
  462. let res = requestData.data.ax_analysis.tps;
  463. return res.map((v) => {
  464. return {
  465. ...v,
  466. trigger_point_name: `A${i}${v.trigger_point_name}`,
  467. };
  468. });
  469. }
  470.  
  471. //活动期转化分析人群策略
  472. async function fetchData_cl(i, data) {
  473. let requestData = await fetchFun(
  474. "https://yuntu.oceanengine.com/yuntu_ng/api/v1/AudienceGtaHarvestAnalysis",
  475. { ...data, card: i }
  476. );
  477. let res = requestData.data.ax_analysis.packs;
  478. return res;
  479. }
  480.  
  481. //蓄水期触点贡献情况
  482. async function fetchData_xs(i, data) {
  483. let requestData = await fetchFun(
  484. "https://yuntu.oceanengine.com/yuntu_ng/api/v1/AudienceGtaImpoundAnalysis",
  485. { ...data, card: i }
  486. );
  487. let res = requestData.data.ax_analysis.tps;
  488. return res.map((v) => {
  489. return {
  490. ...v,
  491. trigger_point_name: `A${i}${v.trigger_point_name}`,
  492. };
  493. });
  494. }
  495.  
  496. //蓄水期人群策略
  497. async function fetchData_xscl(i, data) {
  498. let requestData = await fetchFun(
  499. "https://yuntu.oceanengine.com/yuntu_ng/api/v1/AudienceGtaImpoundAnalysis",
  500. { ...data, card: i }
  501. );
  502. let res = requestData.data.ax_analysis.packs;
  503. return res;
  504. }
  505.  
  506. async function getData(fun, card, param, fileName, contrast) {
  507. let data = {
  508. aadvid,
  509. industry_id,
  510. brand_id,
  511. report_id,
  512. ...param,
  513. };
  514. let requestData = await Promise.all(
  515. card.map((v) => {
  516. let res = fun(v, data);
  517. return res;
  518. })
  519. );
  520. let option = requestData.map((v) => {
  521. return {
  522. sheetName: "",
  523. sheetData: v,
  524. sheetHeader: Object.keys(contrast),
  525. sheetFilter: Object.values(contrast),
  526. columnWidths: [], // 列宽
  527. };
  528. });
  529. toExcel(fileName, option);
  530. }
  531.  
  532. function toExcel(e, data) {
  533. let option = {};
  534. option.fileName = e; //文件名
  535. option.datas = data;
  536. var toExcel = new ExportJsonExcel(option);
  537. toExcel.saveExcel();
  538. loadingMsg.close();
  539. }
  540.  
  541. function userClick() {
  542. inly_Model.showModel();
  543. }
  544.  
  545. function exp_xkxs() {
  546. loadingMsg = Qmsg.loading("正在导出,请勿重复点击!");
  547. let fileName = "活动期新客蓄水";
  548. let param = {
  549. gta_type: 1,
  550. analysis_type: 1,
  551. };
  552. let card = [1, 2, 3];
  553. let contrast = {
  554. 触点: "trigger_point_name",
  555. ID: "trigger_point_id",
  556. 曝光次数: "show_cnt",
  557. 曝光人数: "show_uv",
  558. 人均曝光次数: "show_avg",
  559. 存量转化人数: "to_a4_cnt",
  560. 存量转化率: "to_a4_rate",
  561. };
  562. getData(fetchData_hd, card, param, fileName, contrast);
  563. }
  564.  
  565. function exp_xkxscl() {
  566. loadingMsg = Qmsg.loading("正在导出,请勿重复点击!");
  567. let fileName = "活动期新客蓄水人群策略";
  568. let param = {
  569. gta_type: 1,
  570. analysis_type: 3,
  571. };
  572. let card = [1, 2, 3];
  573. let contrast = {
  574. 人群包: "pack_name",
  575. 人群包id: "pack_id",
  576. 人群包量级: "cover_num",
  577. 曝光次数: "show_cnt",
  578. 曝光人数: "show_uv",
  579. 人均曝光次数: "show_avg",
  580. 存量转化人数: "to_a4_cnt",
  581. 存量转化率: "to_a4_rate",
  582. };
  583. getData(fetchData_cl, card, param, fileName, contrast);
  584. }
  585.  
  586. function exp_xkxz() {
  587. loadingMsg = Qmsg.loading("正在导出,请勿重复点击!");
  588. let fileName = "活动期新客新增";
  589. let param = {
  590. gta_type: 2,
  591. analysis_type: 1,
  592. };
  593. let card = [1, 2, 3];
  594. let contrast = {
  595. 触点: "trigger_point_name",
  596. ID: "trigger_point_id",
  597. 曝光次数: "show_cnt",
  598. 曝光人数: "show_uv",
  599. 人均曝光次数: "show_avg",
  600. 新增转化人数: "to_a4_cnt",
  601. 新增转化率: "to_a4_rate",
  602. };
  603. getData(fetchData_hd, card, param, fileName, contrast);
  604. }
  605.  
  606. function exp_xkxzcl() {
  607. loadingMsg = Qmsg.loading("正在导出,请勿重复点击!");
  608. let fileName = "活动期新客新增人群策略";
  609. let param = {
  610. gta_type: 2,
  611. analysis_type: 3,
  612. };
  613. let card = [1, 2, 3];
  614. let contrast = {
  615. 人群包: "pack_name",
  616. 人群包id: "pack_id",
  617. 人群包量级: "cover_num",
  618. 曝光次数: "show_cnt",
  619. 曝光人数: "show_uv",
  620. 人均曝光次数: "show_avg",
  621. 新增转化人数: "to_a4_cnt",
  622. 新增转化率: "to_a4_rate",
  623. };
  624. getData(fetchData_cl, card, param, fileName, contrast);
  625. }
  626.  
  627. function exp_lkxs() {
  628. loadingMsg = Qmsg.loading("正在导出,请勿重复点击!");
  629. let fileName = "活动期老客蓄水";
  630. let param = {
  631. gta_type: 4,
  632. analysis_type: 1,
  633. };
  634. let card = [4];
  635. let contrast = {
  636. 触点: "trigger_point_name",
  637. ID: "trigger_point_id",
  638. 曝光次数: "show_cnt",
  639. 曝光人数: "show_uv",
  640. 人均曝光次数: "show_avg",
  641. 购买转化人数: "to_a4_cnt",
  642. 购买转化率: "to_a4_rate",
  643. };
  644. getData(fetchData_hd, card, param, fileName, contrast);
  645. }
  646.  
  647. function exp_lkxscl() {
  648. loadingMsg = Qmsg.loading("正在导出,请勿重复点击!");
  649. let fileName = "活动期老客蓄水人群策略";
  650. let param = {
  651. gta_type: 4,
  652. analysis_type: 3,
  653. };
  654. let card = [4];
  655. let contrast = {
  656. 人群包: "pack_name",
  657. 人群包id: "pack_id",
  658. 人群包量级: "cover_num",
  659. 曝光次数: "show_cnt",
  660. 曝光人数: "show_uv",
  661. 人均曝光次数: "show_avg",
  662. 购买转化人数: "to_a4_cnt",
  663. 购买转化率: "to_a4_rate",
  664. };
  665. getData(fetchData_cl, card, param, fileName, contrast);
  666. }
  667.  
  668. function exp_xs() {
  669. loadingMsg = Qmsg.loading("正在导出,请勿重复点击!");
  670. let fileName = "蓄水期触点贡献情况";
  671. let param = {
  672. analysis_type: 1,
  673. };
  674. let card = [1, 2, 3];
  675. let contrast = {
  676. 触点: "trigger_point_name",
  677. ID: "trigger_point_id",
  678. 曝光次数: "show_cnt",
  679. 曝光人数: "show_uv",
  680. 人均曝光次数: "show_avg",
  681. 流转规模: "to_a3_cnt",
  682. 流转率: "to_a3_rate",
  683. };
  684. getData(fetchData_xs, card, param, fileName, contrast);
  685. }
  686.  
  687. function exp_xscl() {
  688. loadingMsg = Qmsg.loading("正在导出,请勿重复点击!");
  689. let fileName = "蓄水期人群策略";
  690. let param = {
  691. analysis_type: 3,
  692. };
  693. let card = [1, 2, 3];
  694. let contrast = {
  695. 人群包: "pack_name",
  696. 人群包id: "pack_id",
  697. 人群包量级: "cover_num",
  698. 曝光次数: "show_cnt",
  699. 曝光人数: "show_uv",
  700. 人均曝光次数: "show_avg",
  701. 流转规模: "to_a3_cnt",
  702. 流转率: "to_a3_rate",
  703. };
  704. getData(fetchData_xscl, card, param, fileName, contrast);
  705. }
  706.  
  707. })();