edit.tpl 50 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664665666667668669670671672673674675676677678679680681682683684685686687688689690691692693694695696697698699700701702703704705706707708709710711712713714715716717718719720721722723724725726727728729730731732733734735736737738739740741742743744745746747748749750751752753754755756757758759760761762763764765766767768769770771772773774775776777778779780781782783784785786787788789790791792793794795796797798799800801802803804805806807808809810811812813814815816817818819820821822823824825826827828829830831832833834835836837838839840841842843844845846847848849850851852853854855856857858859860861862863864865866867868869870871872873874875876877878879880881882883884885886887888889890891892893894895896897898899900901902903904905906907908909910911912913914915916917918919920921922923924925926927928929930931932933934935936937938939940941942943944945946947948949950951952953954955956957958959960961962963964965966967968969970971972973974975976977978979980981982983984985986987988989990991992993994995996997
  1. {include file='user/main.tpl'}
  2. <main class="content">
  3. <div class="content-header ui-content-header">
  4. <div class="container">
  5. <h1 class="content-heading">资料编辑</h1>
  6. </div>
  7. </div>
  8. <div class="container">
  9. <section class="content-inner margin-top-no">
  10. <div class="col-xx-12 col-sm-6">
  11. <div class="card margin-bottom-no">
  12. <div class="card-main">
  13. <div class="card-inner">
  14. <div class="card-inner">
  15. <div class="cardbtn-edit">
  16. <div class="card-heading">重置连接密码</div>
  17. <button class="btn btn-flat" id="passwd_reset"><span class="mdi mdi-autorenew"></span>&nbsp;</button>
  18. </div>
  19. <p>当前连接密码:<code>{$user->passwd}</code>
  20. <button class="kaobei copy-text btn btn-subscription" type="button" data-clipboard-text="{$user->passwd}">
  21. 点击拷贝
  22. </button>
  23. </p>
  24. <p>点击重置按钮将会自动生成由随机字母和数字组成的连接密码。</p>
  25. <p>重置连接密码同时也会自动为您重新生成 V2Ray 和 Trojan 节点的 UUID。</p>
  26. <p>重置连接密码后,您需要更新订阅或修改客户端配置方可继续使用。</p>
  27. </div>
  28. </div>
  29. </div>
  30. </div>
  31. <div class="card margin-bottom-no">
  32. <div class="card-main">
  33. <div class="card-inner">
  34. <div class="card-inner">
  35. <div class="cardbtn-edit">
  36. <div class="card-heading">重置订阅链接</div>
  37. <button class="btn btn-flat" id="url_reset"><span class="mdi mdi-autorenew"></span>&nbsp;</button>
  38. </div>
  39. <p>点击会重置您的订阅链接,您需要更新客户端中所配置的订阅地址方可继续使用。</p>
  40. </div>
  41. </div>
  42. </div>
  43. </div>
  44. <div class="card margin-bottom-no">
  45. <div class="card-main">
  46. <div class="card-inner">
  47. <div class="card-inner">
  48. <div class="card-heading">选择客户端</div>
  49. <p>SS/SSR 支持的加密方式和混淆方式有所不同,请根据实际情况来进行选择</p>
  50. <p>在这里选择你需要使用的客户端可以帮助你筛选加密方式和混淆方式</p>
  51. <p>auth_chain 系为实验性协议,可能造成不稳定或无法使用</p>
  52. <br>
  53. <button class="btn btn-subscription" type="button" id="filter-btn-ss">SS</button>
  54. <button class="btn btn-subscription" type="button" id="filter-btn-ssr">SSR</button>
  55. <button class="btn btn-subscription" type="button" id="filter-btn-universal">通用</button>
  56. </div>
  57. <div class="card-inner">
  58. <div class="cardbtn-edit">
  59. <div class="card-heading">加密方式修改</div>
  60. <button class="btn btn-flat" id="method-update"><span class="mdi mdi-check"></span>&nbsp</button>
  61. </div>
  62. <p>
  63. 当前加密方式:<code id="ajax-user-method" data-default="method">[{if URL::canMethodConnect($user->method) == 2}SS{else}SS/SSR{/if}可连接] {$user->method}</code>
  64. </p>
  65. <div class="form-group form-group-label control-highlight-custom dropdown">
  66. <label class="floating-label" for="method">加密方式</label>
  67. <button id="method" class="form-control maxwidth-edit" data-toggle="dropdown"
  68. value="{$user->method}"></button>
  69. <ul class="dropdown-menu" aria-labelledby="method">
  70. {$method_list = Config::getSupportParam('method')}
  71. {foreach $method_list as $method}
  72. <li class="{if URL::canMethodConnect($user->method) == 2}filter-item-ss{else}filter-item-universal{/if}">
  73. <a href="#" class="dropdown-option" onclick="return false;"
  74. val="{$method}"
  75. data="method">[{if URL::canMethodConnect($method) == 2}SS{else}SS/SSR{/if}
  76. 可连接] {$method}</a>
  77. </li>
  78. {/foreach}
  79. </ul>
  80. </div>
  81. </div>
  82. <div class="card-inner">
  83. <div class="cardbtn-edit">
  84. <div class="card-heading">协议&混淆设置</div>
  85. <button class="btn btn-flat" id="ssr-update"><span class="mdi mdi-check"></span>&nbsp;</button>
  86. </div>
  87. <p>当前协议:<code id="ajax-user-protocol" data-default="protocol">[{if URL::canProtocolConnect($user->protocol) == 3}SS/SSR{else}SSR{/if}可连接] {$user->protocol}</code></p>
  88. <div class="form-group form-group-label control-highlight-custom dropdown">
  89. <label class="floating-label" for="protocol">协议</label>
  90. <button id="protocol" class="form-control maxwidth-edit" data-toggle="dropdown"
  91. value="{$user->protocol}"></button>
  92. <ul class="dropdown-menu" aria-labelledby="protocol">
  93. {$protocol_list = Config::getSupportParam('protocol')}
  94. {foreach $protocol_list as $protocol}
  95. <li class="{if URL::canProtocolConnect($protocol) == 3}filter-item-universal{else}filter-item-ssr{/if}">
  96. <a href="#" class="dropdown-option" onclick="return false;" val="{$protocol}" data="protocol">
  97. [{if URL::canProtocolConnect($protocol) == 3}SS/SSR{else}SSR{/if}
  98. 可连接] {$protocol}
  99. </a>
  100. </li>
  101. {/foreach}
  102. </ul>
  103. </div>
  104. </div>
  105. <div class="card-inner">
  106. <p>当前混淆方式:<code id="ajax-user-obfs" data-default="obfs">[{if URL::canObfsConnect($user->obfs) >= 3}SS/SSR{elseif URL::canObfsConnect($user->obfs) == 1}SSR{else}SS{/if}可连接] {$user->obfs}</code></p>
  107. <p>SS 和 SSR 支持的混淆类型有所不同,simple_obfs_* 为 SS 的混淆方式,其他为 SSR 的混淆方式</p>
  108. <div class="form-group form-group-label control-highlight-custom dropdown">
  109. <label class="floating-label" for="obfs">混淆方式</label>
  110. <button id="obfs" class="form-control maxwidth-edit" data-toggle="dropdown" value="{$user->obfs}"></button>
  111. <ul class="dropdown-menu" aria-labelledby="obfs">
  112. {$obfs_list = Config::getSupportParam('obfs')}
  113. {foreach $obfs_list as $obfs}
  114. <li class="{if URL::canObfsConnect($obfs) >= 3}filter-item-universal{else}{if URL::canObfsConnect($obfs) == 1}filter-item-ssr{else}filter-item-ss{/if}{/if}">
  115. <a href="#" class="dropdown-option" onclick="return false;" val="{$obfs}" data="obfs">
  116. [{if URL::canObfsConnect($obfs) >= 3}SS/SSR{else}{if URL::canObfsConnect($obfs) == 1}SSR{else}SS{/if}{/if}可连接] {$obfs}
  117. </a>
  118. </li>
  119. {/foreach}
  120. </ul>
  121. </div>
  122. </div>
  123. <div class="card-inner">
  124. <p>当前混淆参数:<code id="ajax-user-obfs-param">{$user->obfs_param}</code></p>
  125. <div class="form-group form-group-label">
  126. <label class="floating-label" for="obs-param">在这输入混淆参数</label>
  127. <input class="form-control maxwidth-edit" id="obfs-param" type="text">
  128. </div>
  129. </div>
  130. </div>
  131. </div>
  132. </div>
  133. <div class="card margin-bottom-no">
  134. <div class="card-main">
  135. <div class="card-inner">
  136. <div class="card-inner">
  137. <p class="card-heading">两步验证</p>
  138. <p>请使用 TOTP 两步验证器扫描下面的二维码。</p>
  139. <p><i class="mdi mdi-android icon-lg" aria-hidden="true"></i><a
  140. href="https://play.google.com/store/apps/details?id=com.google.android.apps.authenticator2">&nbsp;Android</a>
  141. </p>
  142. <p><i class="mdi mdi-apple-ios icon-lg" aria-hidden="true"></i><a
  143. href="https://itunes.apple.com/cn/app/google-authenticator/id388497605?mt=8">&nbsp;iOS</a>
  144. </p>
  145. <p>在没有测试完成绑定成功之前请不要启用。</p>
  146. <p>当前设置:<code data-default="ga-enable">{if $user->ga_enable==1} 要求验证 {else} 不要求 {/if}</code>
  147. </p>
  148. <p>当前服务器时间:{date("Y-m-d H:i:s")}</p>
  149. <div class="form-group form-group-label control-highlight-custom dropdown">
  150. <label class="floating-label" for="ga-enable">验证设置</label>
  151. <button type="button" id="ga-enable" class="form-control maxwidth-edit"
  152. data-toggle="dropdown" value="{$user->ga_enable}"></button>
  153. <ul class="dropdown-menu" aria-labelledby="ga-enable">
  154. <li><a href="#" class="dropdown-option" onclick="return false;" val="0"
  155. data="ga-enable">不要求</a></li>
  156. <li><a href="#" class="dropdown-option" onclick="return false;" val="1"
  157. data="ga-enable">要求验证</a></li>
  158. </ul>
  159. </div>
  160. <div class="form-group form-group-label">
  161. <div class="text-center">
  162. <div id="ga-qr" class="qr-center"></div>
  163. 密钥:{$user->ga_token}
  164. </div>
  165. </div>
  166. <div class="form-group form-group-label">
  167. <label class="floating-label" for="code">测试一下</label>
  168. <input type="text" id="code" placeholder="输入验证器生成的数字来测试"
  169. class="form-control maxwidth-edit">
  170. </div>
  171. </div>
  172. <div class="card-action">
  173. <div class="card-action-btn pull-left">
  174. <a class="btn btn-brand-accent btn-flat waves-attach" href="/user/ga_reset"><span
  175. class="mdi mdi-autorenew"></span>&nbsp;重置</a>
  176. <button class="btn btn-flat waves-attach" id="ga-test"><span
  177. class="mdi mdi-check-all"></span>&nbsp;测试
  178. </button>
  179. <button class="btn btn-brand btn-flat waves-attach" id="ga-set"><span class="mdi mdi-check"></span>&nbsp;设置
  180. </button>
  181. </div>
  182. </div>
  183. </div>
  184. </div>
  185. </div>
  186. </div>
  187. <div class="col-xx-12 col-sm-6">
  188. {if $config['enable_change_email'] == true}
  189. <div class="card margin-bottom-no">
  190. <div class="card-main">
  191. <div class="card-inner">
  192. <div class="card-inner">
  193. <div class="cardbtn-edit">
  194. <div class="card-heading">账户邮箱修改</div>
  195. <button class="btn btn-flat" id="email-update"><span class="mdi mdi-check"></span>&nbsp;
  196. </button>
  197. </div>
  198. <p>当前账户邮箱:<code>{$user->email}</code></p>
  199. <div class="form-group form-group-label">
  200. <label class="floating-label" for="newemail">新邮箱</label>
  201. <input class="form-control maxwidth-edit" id="newemail" type="text">
  202. </div>
  203. {if $config['enable_email_verify'] == true}
  204. <div class="form-group form-group-label">
  205. <label class="floating-label" for="email_code">邮箱验证码</label>
  206. <input class="form-control maxwidth-auth" id="email_code" type="text"
  207. onKeypress="javascript:if(event.keyCode == 32)event.returnValue = false;" autocomplete="one-time-code">
  208. </div>
  209. <div class="form-group form-group-label">
  210. <button id="email_verify"
  211. class="btn-reg btn btn-block btn-brand-accent waves-attach waves-light">
  212. 获取验证码
  213. </button>
  214. </div>
  215. {/if}
  216. </div>
  217. </div>
  218. </div>
  219. </div>
  220. {/if}
  221. <div class="card margin-bottom-no">
  222. <div class="card-main">
  223. <div class="card-inner">
  224. <div class="card-inner">
  225. <div class="cardbtn-edit">
  226. <div class="card-heading">用戶名修改</div>
  227. <button class="btn btn-flat" id="username-update"><span class="mdi mdi-check"></span>&nbsp;
  228. </button>
  229. </div>
  230. <p>当前用戶名:<code>{$user->user_name}</code></p>
  231. <div class="form-group form-group-label">
  232. <label class="floating-label" for="newusername">新用戶名</label>
  233. <input class="form-control maxwidth-edit" id="newusername" type="text">
  234. </div>
  235. </div>
  236. </div>
  237. </div>
  238. </div>
  239. <div class="card margin-bottom-no">
  240. <div class="card-main">
  241. <div class="card-inner">
  242. <div class="card-inner">
  243. <div class="cardbtn-edit">
  244. <div class="card-heading">账号登录密码修改</div>
  245. <button class="btn btn-flat" id="pwd-update"><span class="mdi mdi-check"></span>&nbsp;
  246. </button>
  247. </div>
  248. <div class="form-group form-group-label">
  249. <label class="floating-label" for="oldpwd">当前密码</label>
  250. <input class="form-control maxwidth-edit" id="oldpwd" type="password">
  251. </div>
  252. <div class="form-group form-group-label">
  253. <label class="floating-label" for="pwd">新密码</label>
  254. <input class="form-control maxwidth-edit" id="pwd" type="password">
  255. </div>
  256. <div class="form-group form-group-label">
  257. <label class="floating-label" for="repwd">确认新密码</label>
  258. <input class="form-control maxwidth-edit" id="repwd" type="password">
  259. </div>
  260. </div>
  261. </div>
  262. </div>
  263. </div>
  264. <div class="card margin-bottom-no">
  265. <div class="card-main">
  266. <div class="card-inner">
  267. <div class="card-inner">
  268. <div class="cardbtn-edit">
  269. <div class="card-heading">IP 解封</div>
  270. <button class="btn btn-flat" id="unblock"><span class="mdi mdi-block-helper"></span>&nbsp;
  271. </button>
  272. </div>
  273. <p>当前状态:<code id="ajax-block">{$Block}</code></p>
  274. </div>
  275. </div>
  276. </div>
  277. </div>
  278. <div class="card margin-bottom-no">
  279. <div class="card-main">
  280. <div class="card-inner">
  281. <div class="card-inner">
  282. <div class="cardbtn-edit">
  283. <div class="card-heading">每日使用报告设置</div>
  284. <button class="btn btn-flat" id="dailyreport-update"><span class="mdi mdi-check"></span>&nbsp;
  285. </button>
  286. </div>
  287. <p class="card-heading"></p>
  288. <p>当前设置:<code id="ajax-mail" data-default="mail">{if $user->sendDailyMail == 2}TelegramBot接收{elseif $user->sendDailyMail == 1}邮件接收{else}不发送{/if}</code></p>
  289. <div class="form-group form-group-label control-highlight-custom dropdown">
  290. <label class="floating-label" for="mail">接收设置</label>
  291. <button type="button" id="mail" class="form-control maxwidth-edit"
  292. data-toggle="dropdown" value="{$user->sendDailyMail}"></button>
  293. <ul class="dropdown-menu" aria-labelledby="mail">
  294. <li>
  295. <a href="#" class="dropdown-option" onclick="return false;" val="0" data="mail">不发送</a>
  296. </li>
  297. <li>
  298. <a href="#" class="dropdown-option" onclick="return false;" val="1" data="mail">邮件接收</a>
  299. </li>
  300. <li>
  301. <a href="#" class="dropdown-option" onclick="return false;" val="2" data="mail">TelegramBot接收</a>
  302. </li>
  303. </ul>
  304. </div>
  305. </div>
  306. </div>
  307. </div>
  308. </div>
  309. <div class="card margin-bottom-no">
  310. <div class="card-main">
  311. <div class="card-inner">
  312. <div class="card-inner">
  313. <div class="cardbtn-edit">
  314. <div class="card-heading">联络方式修改</div>
  315. <button class="btn btn-flat" id="contact_update"><span class="mdi mdi-check"></span>&nbsp;
  316. </button>
  317. </div>
  318. <p>当前联络方式:
  319. <code data-default="imtype">
  320. {if $user->im_type==1}微信{/if}
  321. {if $user->im_type==2}QQ{/if}
  322. {if $user->im_type==4}Telegram{/if}
  323. {if $user->im_type==5}Discord{/if}
  324. </code>
  325. </p>
  326. <p>当前联络方式账号:
  327. <code>{$user->im_value}</code>
  328. </p>
  329. <div class="form-group form-group-label control-highlight-custom dropdown">
  330. <label class="floating-label" for="imtype">选择您的联络方式</label>
  331. <button class="form-control maxwidth-edit" id="imtype" data-toggle="dropdown"
  332. value="{$user->im_type}"></button>
  333. <ul class="dropdown-menu" aria-labelledby="imtype">
  334. <li><a href="#" class="dropdown-option" onclick="return false;" val="1"
  335. data="imtype">微信</a></li>
  336. <li><a href="#" class="dropdown-option" onclick="return false;" val="2"
  337. data="imtype">QQ</a></li>
  338. <li><a href="#" class="dropdown-option" onclick="return false;" val="3"
  339. data="imtype">Facebook</a></li>
  340. <li><a href="#" class="dropdown-option" onclick="return false;" val="4"
  341. data="imtype">Telegram</a></li>
  342. <li><a href="#" class="dropdown-option" onclick="return false;" val="5"
  343. data="imtype">Discord</a></li>
  344. </ul>
  345. </div>
  346. <div class="form-group form-group-label">
  347. <label class="floating-label" for="contact">在这输入联络方式账号</label>
  348. <input class="form-control maxwidth-edit" id="contact" type="text">
  349. </div>
  350. </div>
  351. </div>
  352. </div>
  353. </div>
  354. {if $config['port_price']>=0 || $config['port_price_specify']>=0}
  355. <div class="card margin-bottom-no">
  356. <div class="card-main">
  357. <div class="card-inner">
  358. {if $config['port_price']>=0}
  359. <div class="card-inner">
  360. <div class="cardbtn-edit">
  361. <div class="card-heading">重置端口</div>
  362. <button class="btn btn-flat" id="portreset"><span
  363. class="mdi mdi-autorenew"></span>&nbsp;
  364. </button>
  365. </div>
  366. <p>对号码不满意?来摇号吧~!</p>
  367. <p>随机更换一个端口使用,价格:<code>{$config['port_price']}</code>元/次</p>
  368. <p>重置后 1 分钟内生效</p>
  369. <p>当前端口:<code id="ajax-user-port">{$user->port}</code></p>
  370. </div>
  371. {/if}
  372. {if $config['port_price_specify']>=0}
  373. <div class="card-inner">
  374. <div class="cardbtn-edit">
  375. <div class="card-heading">钦定端口</div>
  376. <button class="btn btn-flat" id="portspecify"><span
  377. class="mdi mdi-check"></span>&nbsp;
  378. </button>
  379. </div>
  380. <p>不想摇号?来钦定端口吧~!</p>
  381. <p>价格:<code>{$config['port_price_specify']}</code>元/次</p>
  382. <p>端口范围:<code>{$config['min_port']}~{$config['max_port']}</code></p>
  383. <div class="form-group form-group-label">
  384. <label class="floating-label" for="port-specify">在这输入想钦定的端口号</label>
  385. <input class="form-control maxwidth-edit" id="port-specify" type="num">
  386. </div>
  387. </div>
  388. {/if}
  389. </div>
  390. </div>
  391. </div>
  392. {/if}
  393. {if $config['enable_telegram'] === true}
  394. <div class="card margin-bottom-no">
  395. <div class="card-main">
  396. <div class="card-inner">
  397. <div class="card-inner">
  398. <div class="cardbtn-edit">
  399. <div class="card-heading">Telegram 绑定</div>
  400. {if $user->telegram_id != 0}
  401. <button class="btn btn-flat" id="telegram_reset"><span class="mdi mdi-block-helper"></span>&nbsp;</button>
  402. </div>
  403. <div class="text-center">
  404. <p>当前绑定的 Telegram 账户:<a href="https://t.me/{$user->im_value}">@{$user->im_value}</a></p>
  405. </div>
  406. {else}
  407. </div>
  408. <p>二维码或绑定码有效期 10 分钟,超时请刷新本页面以重新获取,每个只能使用一次</p>
  409. <p><button class="copy-text btn btn-subscription" type="button" data-clipboard-text="/start {$bind_token}">点击拷贝绑定码</button> 私聊发给 Telegram 机器人 <a href="https://t.me/{$telegram_bot}" target="view_window">@{$telegram_bot}</a> 以绑定 Telegram</p>
  410. <p><a class="btn btn-subscription" type="button" target="view_window" href="https://t.me/{$telegram_bot}?start={$bind_token}">一键绑定至账户</a> 手机电脑平板等如已安装 Telegram 可点击</p>
  411. {/if}
  412. </div>
  413. </div>
  414. </div>
  415. </div>
  416. {/if}
  417. <div class="card margin-bottom-no">
  418. <div class="card-main">
  419. <div class="card-inner">
  420. <div class="card-inner">
  421. <div class="cardbtn-edit">
  422. <div class="card-heading">主题修改</div>
  423. <button class="btn btn-flat" id="theme-update"><span class="mdi mdi-check"></span>&nbsp;
  424. </button>
  425. </div>
  426. <p>当前主题:<code data-default="theme">{$user->theme}</code></p>
  427. <div class="form-group form-group-label control-highlight-custom dropdown">
  428. <label class="floating-label" for="theme">主题</label>
  429. <button id="theme" type="button" class="form-control maxwidth-edit" data-toggle="dropdown" value="{$user->theme}">
  430. </button>
  431. <ul class="dropdown-menu" aria-labelledby="mail">
  432. {foreach $themes as $theme}
  433. <li>
  434. <a href="#" class="dropdown-option" onclick="return false;"
  435. val="{$theme}" data="theme">{$theme}</a>
  436. </li>
  437. {/foreach}
  438. </ul>
  439. </div>
  440. </div>
  441. </div>
  442. </div>
  443. </div>
  444. </div>
  445. {include file='dialog.tpl'}
  446. </section>
  447. </div>
  448. </main>
  449. {include file='user/footer.tpl'}
  450. <script>
  451. $(function () {
  452. new ClipboardJS('.copy-text');
  453. });
  454. $(".copy-text").click(function () {
  455. $("#result").modal();
  456. $$.getElementById('msg').innerHTML = '已复制到您的剪贴板。';
  457. });
  458. </script>
  459. <script>
  460. /*
  461. * 筛选 SS/SSR 加密、混淆和协议的选项
  462. *
  463. * 引入三个按钮:
  464. * #filter-btn-ss 筛选 SS,点击以后隐藏 .filter-item-ssr,显示 .filter-item-ss 和 .filter-item-universal
  465. * #filter-btn-ssr 筛选 SSR,点击以后隐藏 .filter-item-ss,显示 .filter-item-ssr 和 .filter-item-universal
  466. * #filter-btn-universal 筛选必须同时兼容两者的,点击以后隐藏 .filter-item-ss 和 .filter-item-ssr,显示 .filter-item-universal
  467. *
  468. * 引入函数 hideFilterItem(itemType) 和 showFilterItem(itemType),参数 item 可以是 ss ssr universal。
  469. */
  470. (() => {
  471. const hideFilterItem = (itemType) => {
  472. for (let i of $$.getElementsByClassName(`filter-item-${
  473. itemType
  474. }`)) {
  475. i.style.display = 'none';
  476. }
  477. };
  478. const showFilterItem = (itemType) => {
  479. for (let i of $$.getElementsByClassName(`filter-item-${
  480. itemType
  481. }`)) {
  482. i.style.display = 'block';
  483. }
  484. };
  485. const chooseSS = () => {
  486. hideFilterItem('ssr');
  487. showFilterItem('ss');
  488. showFilterItem('universal');
  489. };
  490. const chooseSSR = () => {
  491. hideFilterItem('ss');
  492. showFilterItem('ssr');
  493. showFilterItem('universal');
  494. };
  495. const chooseUniversal = () => {
  496. hideFilterItem('ss');
  497. hideFilterItem('ssr');
  498. showFilterItem('universal');
  499. };
  500. $$.getElementById('filter-btn-ss').addEventListener('click', chooseSS);
  501. $$.getElementById('filter-btn-ssr').addEventListener('click', chooseSSR);
  502. $$.getElementById('filter-btn-universal').addEventListener('click', chooseUniversal);
  503. }
  504. )();
  505. </script>
  506. <script>
  507. $(document).ready(function () {
  508. $("#portreset").click(function () {
  509. $.ajax({
  510. type: "POST",
  511. url: "port_reset",
  512. dataType: "json",
  513. data: {},
  514. success: (data) => {
  515. if (data.ret) {
  516. $("#result").modal();
  517. $$.getElementById('ajax-user-port').innerHTML = data.msg;
  518. $$.getElementById('msg').innerHTML = `设置成功,新端口是 ${
  519. data.msg
  520. }`;
  521. } else {
  522. $("#result").modal();
  523. $$.getElementById('msg').innerHTML = data.msg;
  524. }
  525. },
  526. error: (jqXHR) => {
  527. $("#result").modal();
  528. $$.getElementById('msg').innerHTML = data.msg;
  529. }
  530. })
  531. })
  532. })
  533. </script>
  534. <script>
  535. $(document).ready(function () {
  536. $("#portspecify").click(function () {
  537. $.ajax({
  538. type: "POST",
  539. url: "specifyport",
  540. dataType: "json",
  541. data: {
  542. port: $$getValue('port-specify')
  543. },
  544. success: (data) => {
  545. if (data.ret) {
  546. $("#result").modal();
  547. $$.getElementById('ajax-user-port').innerHTML = $$getValue('port-specify');
  548. $$.getElementById('msg').innerHTML = data.msg;
  549. } else {
  550. $("#result").modal();
  551. $$.getElementById('msg').innerHTML = data.msg;
  552. }
  553. },
  554. error: (jqXHR) => {
  555. $("#result").modal();
  556. $$.getElementById('msg').innerHTML = data.msg;
  557. }
  558. })
  559. })
  560. })
  561. </script>
  562. <script>
  563. $(document).ready(function () {
  564. $("#pwd-update").click(function () {
  565. $.ajax({
  566. type: "POST",
  567. url: "password",
  568. dataType: "json",
  569. data: {
  570. oldpwd: $$getValue('oldpwd'),
  571. pwd: $$getValue('pwd'),
  572. repwd: $$getValue('repwd')
  573. },
  574. success: (data) => {
  575. $("#result").modal();
  576. $$.getElementById('msg').innerHTML = data.msg;
  577. },
  578. error: (jqXHR) => {
  579. $("#result").modal();
  580. $$.getElementById('msg').innerHTML = data.msg;
  581. }
  582. })
  583. })
  584. })
  585. </script>
  586. <script>
  587. $(document).ready(function () {
  588. $("#username-update").click(function () {
  589. $.ajax({
  590. type: "POST",
  591. url: "username",
  592. dataType: "json",
  593. data: {
  594. newusername: $$getValue('newusername')
  595. },
  596. success: (data) => {
  597. $("#result").modal();
  598. $$.getElementById('msg').innerHTML = data.msg;
  599. window.setTimeout("location.href='/user/edit'", {$config['jump_delay']});
  600. },
  601. error: (jqXHR) => {
  602. $("#result").modal();
  603. $$.getElementById('msg').innerHTML = data.msg;
  604. }
  605. })
  606. })
  607. })
  608. </script>
  609. {if $config['enable_change_email'] == true}
  610. <script>
  611. $(document).ready(function () {
  612. $("#email-update").click(function () {
  613. $.ajax({
  614. type: "POST",
  615. url: "email",
  616. dataType: "json",
  617. data: {
  618. {if $config['enable_email_verify'] == true}
  619. emailcode: $$getValue('email_code'),
  620. {/if}
  621. newemail: $$getValue('newemail')
  622. },
  623. success: (data) => {
  624. $("#result").modal();
  625. $$.getElementById('msg').innerHTML = data.msg;
  626. window.setTimeout("location.href='/user/edit'", {$config['jump_delay']});
  627. },
  628. error: (jqXHR) => {
  629. $("#result").modal();
  630. $$.getElementById('msg').innerHTML = data.msg;
  631. }
  632. })
  633. })
  634. })
  635. </script>
  636. {if $config['enable_email_verify'] == true}
  637. <script>
  638. var wait = 60;
  639. function time(o) {
  640. if (wait == 0) {
  641. o.removeAttr("disabled");
  642. o.text("获取验证码");
  643. wait = 60;
  644. } else {
  645. o.attr("disabled", "disabled");
  646. o.text("重新发送(" + wait + ")");
  647. wait--;
  648. setTimeout(function () {
  649. time(o)
  650. },
  651. 1000)
  652. }
  653. }
  654. $(document).ready(function () {
  655. $("#email_verify").click(function () {
  656. time($("#email_verify"));
  657. $.ajax({
  658. type: "POST",
  659. url: "send",
  660. dataType: "json",
  661. data: {
  662. email: $$getValue('newemail')
  663. },
  664. success: (data) => {
  665. if (data.ret) {
  666. $("#result").modal();
  667. $$.getElementById('msg').innerHTML = data.msg;
  668. } else {
  669. $("#result").modal();
  670. $$.getElementById('msg').innerHTML = data.msg;
  671. }
  672. },
  673. error: (jqXHR) => {
  674. $("#result").modal();
  675. $$.getElementById('msg').innerHTML = data.msg;
  676. }
  677. })
  678. })
  679. })
  680. </script>
  681. {/if}
  682. {/if}
  683. <script>
  684. var ga_qrcode = '{$user->getGAurl()}',
  685. qrcode1 = new QRCode(document.getElementById("ga-qr"));
  686. qrcode1.clear();
  687. qrcode1.makeCode(ga_qrcode);
  688. {if $config['enable_telegram'] === true}
  689. var telegram_qrcode = 'mod://bind/{$bind_token}';
  690. if ($$.getElementById("telegram-qr")) {
  691. let qrcode2 = new QRCode(document.getElementById("telegram-qr"));
  692. qrcode2.clear();
  693. qrcode2.makeCode(telegram_qrcode);
  694. }
  695. {/if}
  696. </script>
  697. <script>
  698. $(document).ready(function () {
  699. $("#contact_update").click(function () {
  700. $.ajax({
  701. type: "POST",
  702. url: "contact_update",
  703. dataType: "json",
  704. data: {
  705. contact: $$getValue('contact'),
  706. imtype: $$getValue('imtype')
  707. },
  708. success: (data) => {
  709. if (data.ret) {
  710. $("#result").modal();
  711. $$.getElementById('msg').innerHTML = data.msg;
  712. window.setTimeout("location.href='/user/edit'", {$config['jump_delay']});
  713. } else {
  714. $("#result").modal();
  715. $$.getElementById('msg').innerHTML = data.msg;
  716. }
  717. },
  718. error: (jqXHR) => {
  719. $("#result").modal();
  720. $$.getElementById('msg').innerHTML = data.msg;
  721. }
  722. })
  723. })
  724. })
  725. </script>
  726. <script>
  727. $(document).ready(function () {
  728. $("#ssr-update").click(function () {
  729. $.ajax({
  730. type: "POST",
  731. url: "ssr",
  732. dataType: "json",
  733. data: {
  734. protocol: $$getValue('protocol'),
  735. obfs: $$getValue('obfs'),
  736. obfs_param: $$getValue('obfs-param')
  737. },
  738. success: (data) => {
  739. if (data.ret) {
  740. $("#result").modal();
  741. $$.getElementById('ajax-user-protocol').innerHTML = $$getValue('protocol');
  742. $$.getElementById('ajax-user-obfs').innerHTML = $$getValue('obfs');
  743. $$.getElementById('ajax-user-obfs-param').innerHTML = $$getValue('obfs-param');
  744. $$.getElementById('msg').innerHTML = data.msg;
  745. } else {
  746. $("#result").modal();
  747. $$.getElementById('msg').innerHTML = data.msg;
  748. }
  749. },
  750. error: (jqXHR) => {
  751. $("#result").modal();
  752. $$.getElementById('msg').innerHTML = data.msg;
  753. }
  754. })
  755. })
  756. })
  757. </script>
  758. <script>
  759. $(document).ready(function () {
  760. $("#unblock").click(function () {
  761. $.ajax({
  762. type: "POST",
  763. url: "unblock",
  764. dataType: "json",
  765. data: {},
  766. success: (data) => {
  767. if (data.ret) {
  768. $("#result").modal();
  769. $$.getElementById('ajax-block').innerHTML = `IP:${
  770. data.msg
  771. } 没有被封`;
  772. $$.getElementById('msg').innerHTML = `IP:${
  773. data.msg
  774. } 解封成功过`;
  775. } else {
  776. $("#result").modal();
  777. $$.getElementById('msg').innerHTML = data.msg;
  778. }
  779. },
  780. error: (jqXHR) => {
  781. $("#result").modal();
  782. $$.getElementById('msg').innerHTML = data.msg;
  783. }
  784. })
  785. })
  786. })
  787. </script>
  788. <script>
  789. $(document).ready(function () {
  790. $("#ga-test").click(function () {
  791. $.ajax({
  792. type: "POST",
  793. url: "ga_check",
  794. dataType: "json",
  795. data: {
  796. code: $$getValue('code')
  797. },
  798. success: (data) => {
  799. $("#result").modal();
  800. $$.getElementById('msg').innerHTML = data.msg;
  801. },
  802. error: (jqXHR) => {
  803. $("#result").modal();
  804. $$.getElementById('msg').innerHTML = data.msg;
  805. }
  806. })
  807. })
  808. })
  809. </script>
  810. <script>
  811. $(document).ready(function () {
  812. $("#ga-set").click(function () {
  813. $.ajax({
  814. type: "POST",
  815. url: "ga_set",
  816. dataType: "json",
  817. data: {
  818. enable: $$getValue('ga-enable')
  819. },
  820. success: (data) => {
  821. $("#result").modal();
  822. $$.getElementById('msg').innerHTML = data.msg;
  823. },
  824. error: (jqXHR) => {
  825. $("#result").modal();
  826. $$.getElementById('msg').innerHTML = data.msg;
  827. }
  828. })
  829. })
  830. })
  831. </script>
  832. <script>
  833. $(document).ready(function () {
  834. $("#passwd_reset").click(function () {
  835. $.ajax({
  836. type: "POST",
  837. url: "passwd_reset",
  838. dataType: "json",
  839. data: {},
  840. success: (data) => {
  841. if (data.ret) {
  842. $("#result").modal();
  843. $$.getElementById('msg').innerHTML = '修改成功';
  844. window.setTimeout("location.href='/user/edit'", {$config['jump_delay']});
  845. } else {
  846. $("#result").modal();
  847. $$.getElementById('msg').innerHTML = data.msg;
  848. }
  849. },
  850. error: (jqXHR) => {
  851. $("#result").modal();
  852. $$.getElementById('msg').innerHTML = data.msg;
  853. }
  854. })
  855. })
  856. })
  857. </script>
  858. <script>
  859. $(document).ready(function () {
  860. $("#telegram_reset").click(function () {
  861. $.ajax({
  862. type: "POST",
  863. url: "telegram_reset",
  864. dataType: "json",
  865. data: {},
  866. success: (data) => {
  867. if (data.ret) {
  868. $("#result").modal();
  869. $$.getElementById('msg').innerHTML = '修改成功';
  870. window.setTimeout("location.href='/user/edit'", {$config['jump_delay']});
  871. } else {
  872. $("#result").modal();
  873. $$.getElementById('msg').innerHTML = data.msg;
  874. }
  875. },
  876. error: (jqXHR) => {
  877. $("#result").modal();
  878. $$.getElementById('msg').innerHTML = data.msg;
  879. }
  880. })
  881. })
  882. })
  883. </script>
  884. <script>
  885. $(document).ready(function () {
  886. $("#url_reset").click(function () {
  887. $.ajax({
  888. type: "POST",
  889. url: "url_reset",
  890. dataType: "json",
  891. data: {},
  892. success: (data) => {
  893. if (data.ret) {
  894. $("#result").modal();
  895. $$.getElementById('msg').innerHTML = '修改成功';
  896. window.setTimeout("location.href='/user/edit'", {$config['jump_delay']});
  897. } else {
  898. $("#result").modal();
  899. $$.getElementById('msg').innerHTML = data.msg;
  900. }
  901. },
  902. error: (jqXHR) => {
  903. $("#result").modal();
  904. $$.getElementById('msg').innerHTML = data.msg;
  905. }
  906. })
  907. })
  908. })
  909. </script>
  910. <script>
  911. $(document).ready(function () {
  912. $("#dailyreport-update").click(function () {
  913. $.ajax({
  914. type: "POST",
  915. url: "mail",
  916. dataType: "json",
  917. data: {
  918. mail: $$getValue('mail')
  919. },
  920. success: (data) => {
  921. if (data.ret) {
  922. $("#result").modal();
  923. $$.getElementById('msg').innerHTML = '修改成功';
  924. window.setTimeout("location.href='/user/edit'", {$config['jump_delay']});
  925. } else {
  926. $("#result").modal();
  927. $$.getElementById('msg').innerHTML = data.msg;
  928. }
  929. },
  930. error: (jqXHR) => {
  931. $("#result").modal();
  932. $$.getElementById('msg').innerHTML = data.msg;
  933. }
  934. })
  935. })
  936. })
  937. </script>
  938. <script>
  939. $(document).ready(function () {
  940. $("#theme-update").click(function () {
  941. $.ajax({
  942. type: "POST",
  943. url: "theme",
  944. dataType: "json",
  945. data: {
  946. theme: $$getValue('theme')
  947. },
  948. success: (data) => {
  949. if (data.ret) {
  950. $("#result").modal();
  951. $$.getElementById('msg').innerHTML = '修改成功';
  952. window.setTimeout("location.href='/user/edit'", {$config['jump_delay']});
  953. } else {
  954. $("#result").modal();
  955. $$.getElementById('msg').innerHTML = data.msg;
  956. }
  957. },
  958. error: (jqXHR) => {
  959. $("#result").modal();
  960. $$.getElementById('msg').innerHTML = data.msg;
  961. }
  962. })
  963. })
  964. })
  965. </script>
  966. <script>
  967. $(document).ready(function () {
  968. $("#method-update").click(function () {
  969. $.ajax({
  970. type: "POST",
  971. url: "method",
  972. dataType: "json",
  973. data: {
  974. method: $$getValue('method')
  975. },
  976. success: (data) => {
  977. $$.getElementById('ajax-user-method').innerHTML = $$getValue('method');
  978. if (data.ret) {
  979. $("#result").modal();
  980. $$.getElementById('msg').innerHTML = '修改成功';
  981. } else {
  982. $("#result").modal();
  983. $$.getElementById('msg').innerHTML = data.msg;
  984. }
  985. },
  986. error: (jqXHR) => {
  987. $("#result").modal();
  988. $$.getElementById('msg').innerHTML = data.msg;
  989. }
  990. })
  991. })
  992. })
  993. </script>