config.vue 22 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448
  1. <template>
  2. <div class="container">
  3. <Breadcrumb :items="['menu.settings', 'menu.settings.config']" />
  4. <a-card class="general-card" :title="$t('menu.settings.config')">
  5. <a-row class="wrapper">
  6. <a-col :span="24">
  7. <a-spin :loading="loading" style="width:100%">
  8. <a-form ref="formRef" :model="formData" class="form" :label-col-props="{ span: 4 }"
  9. :wrapper-col-props="{ span: 19 }">
  10. <a-tabs default-active-key="1">
  11. <a-tab-pane key="1" title="全局配置">
  12. <a-form-item field="pass_salt" label="pass_salt" :rules="[{ required: true }]">
  13. <a-input v-model="formData.pass_salt" />
  14. </a-form-item>
  15. <a-form-item field="fake_click_min" label="补点击次数" :rules="[{ required: true }]">
  16. <a-input-number v-model="formData.fake_click_min" :min="0" /> -
  17. <a-input-number v-model="formData.fake_click_max" :min="0" />
  18. </a-form-item>
  19. <a-form-item field="rt_max" label="转链超时" :rules="[{ required: true }]">
  20. <a-input-number v-model="formData.rt_max" :min="500"
  21. placeholder="转链API最长超时时间,单位毫秒" />
  22. </a-form-item>
  23. <a-form-item field="blacklist_oaid" label="OAID黑名单">
  24. <a-textarea v-model="formData.blacklist_oaid" placeholder="OAID黑名单"
  25. :auto-size="{ minRows: 5, maxRows: 20 }" />
  26. </a-form-item>
  27. <a-form-item field="webook_xhs_zlong" label="小红书 Zlong 转发">
  28. <a-space>
  29. <a-switch v-model="formData.webook_xhs_zlong" :checked-value="1"
  30. :unchecked-value="0" />
  31. </a-space>
  32. </a-form-item>
  33. </a-tab-pane>
  34. <a-tab-pane key="cps" title="CPS">
  35. <a-form-item field="cpsIgnorePercentageCity" label="CPS流量控制-城市">
  36. <a-input v-model="formData.cpsIgnorePercentageCity" />
  37. </a-form-item>
  38. <a-form-item field="cps_limit_per_ip_24h" label="(IP) 24小时转链次数"
  39. :rules="[{ required: true }]">
  40. <a-input-number v-model="formData.cps_limit_per_ip_24h" :min="0"
  41. placeholder="同ip在24小时内可转链的次数。" />
  42. </a-form-item>
  43. <a-form-item field="cps_limit_per_oaid_24h" label="(OAID) 24小时转链次数"
  44. :rules="[{ required: true }]">
  45. <a-input-number v-model="formData.cps_limit_per_oaid_24h" :min="0"
  46. placeholder="同 oaid 在24小时内可转链的次数。" />
  47. </a-form-item>
  48. </a-tab-pane>
  49. <a-tab-pane key="tb" title="淘宝">
  50. <a-form-item field="similar_timeout" label="搜同款超时" :rules="[{ required: true }]">
  51. <a-input-number v-model="formData.similar_timeout" :min="1000"
  52. placeholder="搜同款API最长超时时间,单位毫秒" />
  53. </a-form-item>
  54. <a-form-item field="tk_whitelist_regular" label="淘口令正则">
  55. <a-textarea v-model="formData.tk_whitelist_regular"
  56. :auto-size="{ minRows: 5, maxRows: 20 }" placeholder="淘口令正则" />
  57. <template #extra>
  58. <a-button type="outline"
  59. @click="clickRegularTester(formData.tk_whitelist_regular)">正则测试
  60. </a-button>
  61. </template>
  62. </a-form-item>
  63. <a-form-item field="tk_blacklist_regular" label="淘口令排除正则">
  64. <a-textarea v-model="formData.tk_blacklist_regular"
  65. :auto-size="{ minRows: 5, maxRows: 20 }" placeholder="淘口令排除正则" />
  66. <template #extra>
  67. <a-button type="outline"
  68. @click="clickRegularTester(formData.tk_blacklist_regular)">正则测试
  69. </a-button>
  70. </template>
  71. </a-form-item>
  72. <a-form-item field="multi_token_regular" label="混合口令正则">
  73. <a-textarea v-model="formData.multi_token_regular"
  74. :auto-size="{ minRows: 5, maxRows: 20 }" placeholder="混合口令正则" />
  75. <template #extra>
  76. <a-button type="outline"
  77. @click="clickRegularTester(formData.multi_token_regular)">正则测试
  78. </a-button>
  79. </template>
  80. </a-form-item>
  81. <a-form-item field="ignorePercentage" label="放弃流量" :rules="[{ required: true }]">
  82. <a-input-number v-model="formData.ignorePercentage" :min="0" :max="100"
  83. placeholder="主动放弃流量,0-100,举例:10 = 放弃10%" />
  84. </a-form-item>
  85. <a-form-item field="ignorePercentageCity" label="流量控制-城市">
  86. <a-input v-model="formData.ignorePercentageCity" />
  87. </a-form-item>
  88. <a-form-item field="tk_limit_per_ip_24h" label="(IP) 24小时转链次数"
  89. :rules="[{ required: true }]">
  90. <a-input-number v-model="formData.tk_limit_per_ip_24h" :min="0"
  91. placeholder="同ip在24小时内可转链的次数。" />
  92. </a-form-item>
  93. <a-form-item field="tk_limit_per_oaid_24h" label="(OAID) 24小时转链次数"
  94. :rules="[{ required: true }]">
  95. <a-input-number v-model="formData.tk_limit_per_oaid_24h" :min="0"
  96. placeholder="同 oaid 在24小时内可转链的次数。" />
  97. </a-form-item>
  98. <a-form-item field="tk_parse_retry_count" label="转链失败重试"
  99. :rules="[{ required: true }]">
  100. <a-input-number v-model="formData.tk_parse_retry_count" :min="0"
  101. placeholder="转链失败重试次数" />
  102. </a-form-item>
  103. </a-tab-pane>
  104. <a-tab-pane key="jd" title="京东">
  105. <a-form-item field="jdIgnorePercentage" label="放弃流量" :rules="[{ required: true }]">
  106. <a-input-number v-model="formData.jdIgnorePercentage" :min="0" :max="100"
  107. placeholder="主动放弃流量,0-100,举例:10 = 放弃10%" />
  108. </a-form-item>
  109. <a-form-item field="jdIgnorePercentageCity" label="流量控制-城市">
  110. <a-input v-model="formData.jdIgnorePercentageCity" />
  111. </a-form-item>
  112. <a-form-item field="jd_limit_per_ip_24h" label="(IP) 24小时转链次数"
  113. :rules="[{ required: true }]">
  114. <a-input-number v-model="formData.jd_limit_per_ip_24h" :min="0"
  115. placeholder="同ip在24小时内可转链的次数。" />
  116. </a-form-item>
  117. <a-form-item field="jd_limit_per_oaid_24h" label="(OAID) 24小时转链次数"
  118. :rules="[{ required: true }]">
  119. <a-input-number v-model="formData.jd_limit_per_oaid_24h" :min="0"
  120. placeholder="同 oaid 在24小时内可转链的次数。" />
  121. </a-form-item>
  122. <a-form-item field="jd_blacklist_regular" label="排除正则">
  123. <a-textarea v-model="formData.jd_blacklist_regular"
  124. :auto-size="{ minRows: 5, maxRows: 20 }" placeholder="排除正则" />
  125. <template #extra>
  126. <a-button type="outline"
  127. @click="clickRegularTester(formData.jd_blacklist_regular)">正则测试
  128. </a-button>
  129. </template>
  130. </a-form-item>
  131. <a-divider />
  132. <a-form-item field="jd_h5st_sign_url" label="h5st签名地址">
  133. <a-input v-model="formData.jd_h5st_sign_url" />
  134. </a-form-item>
  135. <a-form-item field="jd_h5st_sign_version" label="h5st版本">
  136. <a-input v-model="formData.jd_h5st_sign_version" />
  137. </a-form-item>
  138. <a-divider />
  139. <a-form-item field="dp_style" label="不可分佣的DP样式">
  140. <a-select v-model="formData.dp_style">
  141. <a-option value="">默认样式</a-option>
  142. <a-option value="clickId">带clickId</a-option>
  143. </a-select>
  144. </a-form-item>
  145. <template v-if="formData.dp_style">
  146. <a-form-item field="dp_style_default_str" label="默认clickId标识">
  147. <a-input v-model="formData.dp_style_default_str" />
  148. </a-form-item>
  149. <a-form-item field="dp_style_percentage" label="新样式的比重">
  150. <a-input-number v-model="formData.dp_style_percentage" :min="0" :max="100"
  151. placeholder="主动放弃流量,0-100,举例:10 = 放弃10%" />
  152. </a-form-item>
  153. </template>
  154. </a-tab-pane>
  155. <a-tab-pane key="pdd" title="拼多多">
  156. <a-form-item field="pddIgnorePercentage" label="放弃流量" :rules="[{ required: true }]">
  157. <a-input-number v-model="formData.pddIgnorePercentage" :min="0" :max="100"
  158. placeholder="主动放弃流量,0-100,举例:10 = 放弃10%" />
  159. </a-form-item>
  160. <a-form-item field="pddIgnorePercentageCity" label="流量控制-城市">
  161. <a-input v-model="formData.pddIgnorePercentageCity" />
  162. </a-form-item>
  163. <a-form-item field="pdd_limit_per_ip_24h" label="(IP) 24小时转链次数"
  164. :rules="[{ required: true }]">
  165. <a-input-number v-model="formData.pdd_limit_per_ip_24h" :min="0"
  166. placeholder="同 ip 在24小时内可转链的次数。" />
  167. </a-form-item>
  168. <a-form-item field="pdd_limit_per_oaid_24h" label="(OAID) 24小时转链次数"
  169. :rules="[{ required: true }]">
  170. <a-input-number v-model="formData.pdd_limit_per_oaid_24h" :min="0"
  171. placeholder="同 oaid 在24小时内可转链的次数。" />
  172. </a-form-item>
  173. <a-form-item field="pdd_blacklist_regular" label="排除正则">
  174. <a-textarea v-model="formData.pdd_blacklist_regular"
  175. :auto-size="{ minRows: 5, maxRows: 20 }" placeholder="排除正则" />
  176. <template #extra>
  177. <a-button type="outline"
  178. @click="clickRegularTester(formData.pdd_blacklist_regular)">正则测试
  179. </a-button>
  180. </template>
  181. </a-form-item>
  182. </a-tab-pane>
  183. <a-tab-pane key="ks" title="快手">
  184. <a-form-item field="ksIgnorePercentage" label="放弃流量" :rules="[{ required: true }]">
  185. <a-input-number v-model="formData.ksIgnorePercentage" :min="0" :max="100"
  186. placeholder="主动放弃流量,0-100,举例:10 = 放弃10%" />
  187. </a-form-item>
  188. <a-form-item field="ksIgnorePercentageCity" label="流量控制-城市">
  189. <a-input v-model="formData.ksIgnorePercentageCity" />
  190. </a-form-item>
  191. <a-form-item field="ks_limit_per_ip_24h" label="(IP) 24小时转链次数"
  192. :rules="[{ required: true }]">
  193. <a-input-number v-model="formData.ks_limit_per_ip_24h" :min="0"
  194. placeholder="同ip在24小时内可转链的次数。" />
  195. </a-form-item>
  196. <a-form-item field="ks_limit_per_oaid_24h" label="(OAID) 24小时转链次数"
  197. :rules="[{ required: true }]">
  198. <a-input-number v-model="formData.ks_limit_per_oaid_24h" :min="0"
  199. placeholder="同 oaid 在24小时内可转链的次数。" />
  200. </a-form-item>
  201. <a-form-item field="ks_blacklist_regular" label="排除正则">
  202. <a-textarea v-model="formData.ks_blacklist_regular"
  203. :auto-size="{ minRows: 5, maxRows: 20 }" placeholder="排除正则" />
  204. <template #extra>
  205. <a-button type="outline"
  206. @click="clickRegularTester(formData.ks_blacklist_regular)">正则测试
  207. </a-button>
  208. </template>
  209. </a-form-item>
  210. <a-form-item field="ksTestToken" label="测试token">
  211. <a-input v-model="formData.ksTestToken" />
  212. </a-form-item>
  213. </a-tab-pane>
  214. </a-tabs>
  215. <a-form-item>
  216. <a-space>
  217. <a-button type="primary" @click="validate">
  218. {{ $t('form.save') }}
  219. </a-button>
  220. <a-button type="secondary" @click="reset">
  221. {{ $t('form.reset') }}
  222. </a-button>
  223. </a-space>
  224. </a-form-item>
  225. </a-form>
  226. </a-spin>
  227. </a-col>
  228. </a-row>
  229. </a-card>
  230. <RegularTester v-model:visible="showRegularTester" v-model:pattern="RegularTesterPattern" />
  231. </div>
  232. </template>
  233. <script lang="ts" setup>
  234. import { ref, computed } from 'vue';
  235. import { useRouter } from 'vue-router';
  236. import useLoading from '@/hooks/loading';
  237. import { Message } from '@arco-design/web-vue';
  238. import { FormInstance } from '@arco-design/web-vue/es/form';
  239. import {
  240. UpdateConfigModel, updateConfig,
  241. getConfig, UpdateConfigRes
  242. } from '@/api/taobao';
  243. import { useUserStore } from '@/store';
  244. import RegularTester from './components/regular-tester.vue';
  245. const userStore = useUserStore();
  246. const userInfo = computed(() => {
  247. return {
  248. name: userStore.name,
  249. };
  250. });
  251. console.log(userInfo.value)
  252. const { loading, setLoading } = useLoading(true);
  253. const router = useRouter();
  254. const formRef = ref<FormInstance>();
  255. const formData = ref<UpdateConfigModel>({
  256. cookie: '',
  257. blacklist_oaid: '',
  258. ignorePercentage: 0,
  259. pass_salt: '',
  260. fake_click_min: 0,
  261. fake_click_max: 0,
  262. fake_click_ttl: 0,
  263. rt_max: 0,
  264. similar_timeout: 0,
  265. tk_whitelist_regular: '',
  266. tk_blacklist_regular: '',
  267. multi_token_regular: '',
  268. tk_limit_per_ip_24h: 0,
  269. tk_limit_per_oaid_24h: 0,
  270. tk_parse_retry_count: 0,
  271. cpsIgnorePercentageCity: '',
  272. cps_limit_per_ip_24h: 0,
  273. cps_limit_per_oaid_24h: 0,
  274. jdIgnorePercentage: 0,
  275. ignorePercentageCity: '',
  276. jdIgnorePercentageCity: '',
  277. jd_limit_per_ip_24h: 0,
  278. jd_blacklist_regular: '',
  279. jd_limit_per_oaid_24h: 0,
  280. jd_h5st_sign_url: '',
  281. jd_h5st_sign_version: '',
  282. dp_style: '',
  283. dp_style_percentage: 0,
  284. dp_style_default_str: '',
  285. pdd_limit_per_ip_24h: 0,
  286. pdd_limit_per_oaid_24h: 0,
  287. pddIgnorePercentageCity: '',
  288. pddIgnorePercentage: 0,
  289. pdd_blacklist_regular: '',
  290. ks_limit_per_ip_24h: 0,
  291. ksIgnorePercentageCity: '',
  292. ksIgnorePercentage: 0,
  293. ks_blacklist_regular: '',
  294. ksTestToken: '',
  295. ks_limit_per_oaid_24h: 0,
  296. webook_xhs_zlong: 0
  297. });
  298. const showRegularTester = ref<boolean>(false);
  299. const RegularTesterPattern = ref<string>('');
  300. const clickRegularTester = (pattern: string) => {
  301. showRegularTester.value = true
  302. RegularTesterPattern.value = pattern
  303. };
  304. const goXhsZlongReport = () => {
  305. router.push({ name: 'xhsZlongReport' });
  306. };
  307. const validate = async () => {
  308. const res = await formRef.value?.validate();
  309. if (!res) {
  310. try {
  311. const data: any = await updateConfig(formData.value);
  312. console.log(data);
  313. const msg = data.msg || '更新成功!';
  314. if (data.success) {
  315. Message.success(msg);
  316. } else {
  317. Message.error(msg);
  318. }
  319. } catch (err) {
  320. console.error(err);
  321. }
  322. }
  323. };
  324. const restoreJson = (e: string): string => {
  325. e = e.replace(/\\\\/g, "\\").replace(/\\"/g, '"');
  326. return e;
  327. };
  328. const reset = async () => {
  329. setLoading(true);
  330. // await formRef.value?.resetFields();
  331. const { data } = await getConfig()
  332. const config = data
  333. console.log(config)
  334. if (config) {
  335. config.tk_whitelist_regular = restoreJson(config.tk_whitelist_regular)
  336. config.tk_blacklist_regular = restoreJson(config.tk_blacklist_regular)
  337. config.multi_token_regular = restoreJson(config.multi_token_regular)
  338. formData.value = config
  339. }
  340. setLoading(false);
  341. };
  342. reset();
  343. </script>
  344. <style scoped lang="less">
  345. .container {
  346. padding: 0 20px 20px 20px;
  347. }
  348. .wrapper {
  349. padding: 20px 0 0 20px;
  350. min-height: 580px;
  351. background-color: var(--color-bg-2);
  352. border-radius: 4px;
  353. }
  354. :deep(.section-title) {
  355. margin-top: 0;
  356. margin-bottom: 16px;
  357. font-size: 14px;
  358. }
  359. .form {
  360. margin: 0 auto;
  361. }
  362. .form .cookie {
  363. height: 100%;
  364. min-height: 500px;
  365. }
  366. </style>