system.blade.php 57 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664665666667668669670671672673674675676677678679680681682683684685686687688689690691692693694695696697698699700701702703704705706707708709710711712713714715716717718719720721722723724725726727728729730731732733734735736737738739740741742743744745746747748749750751752753754755756757758759760761762763764765766767768769770771
  1. @extends('admin.layouts')
  2. @section('css')
  3. <link href="/assets/global/vendor/bootstrap-select/bootstrap-select.min.css" rel="stylesheet">
  4. <link href="/assets/global/vendor/switchery/switchery.min.css" rel="stylesheet">
  5. <link href="/assets/global/vendor/dropify/dropify.min.css" rel="stylesheet">
  6. @endsection
  7. @section('content')
  8. <div class="page-content container-fluid">
  9. <div class="panel">
  10. <div class="panel-heading">
  11. <h1 class="panel-title">
  12. <i class="icon wb-settings" aria-hidden="true"></i>{{ trans('admin.setting.system.title') }}
  13. </h1>
  14. </div>
  15. <div class="panel-body">
  16. <div class="nav-tabs-horizontal" data-plugin="tabs">
  17. <ul class="nav nav-tabs" role="tablist">
  18. <li class="nav-item" role="presentation">
  19. <a class="nav-link active" data-toggle="tab" href="#webSetting" role="tab"
  20. aria-controls="webSetting">{{ trans('admin.setting.system.web') }}</a>
  21. </li>
  22. <li class="nav-item" role="presentation">
  23. <a class="nav-link" data-toggle="tab" href="#account" role="tab"
  24. aria-controls="account">{{ trans('admin.setting.system.account') }}</a>
  25. </li>
  26. <li class="nav-item" role="presentation">
  27. <a class="nav-link" data-toggle="tab" href="#node" role="tab" aria-controls="node">{{ trans('admin.setting.system.node') }}</a>
  28. </li>
  29. <li class="nav-item" role="presentation">
  30. <a class="nav-link" data-toggle="tab" href="#extend" role="tab"
  31. aria-controls="extend">{{ trans('admin.setting.system.extend') }}</a>
  32. </li>
  33. <li class="nav-item" role="presentation">
  34. <a class="nav-link" data-toggle="tab" href="#checkIn" role="tab"
  35. aria-controls="checkIn">{{ trans('admin.setting.system.check_in') }}</a>
  36. </li>
  37. <li class="nav-item" role="presentation">
  38. <a class="nav-link" data-toggle="tab" href="#promo" role="tab"
  39. aria-controls="promo">{{ trans('admin.setting.system.promotion') }}</a>
  40. </li>
  41. <li class="nav-item" role="presentation">
  42. <a class="nav-link" data-toggle="tab" href="#notify" role="tab"
  43. aria-controls="notify">{{ trans('admin.setting.system.notify') }}</a>
  44. </li>
  45. <li class="nav-item" role="presentation">
  46. <a class="nav-link" data-toggle="tab" href="#auto" role="tab"
  47. aria-controls="auto">{{ trans('admin.setting.system.auto_job') }}</a>
  48. </li>
  49. <li class="nav-item" role="presentation">
  50. <a class="nav-link" data-toggle="tab" href="#other" role="tab" aria-controls="other">{{ trans('admin.setting.system.other') }}</a>
  51. </li>
  52. <li class="nav-item" role="presentation">
  53. <a class="nav-link" data-toggle="tab" href="#payment" role="tab"
  54. aria-controls="payment">{{ trans('admin.setting.system.payment') }}</a>
  55. </li>
  56. <li class="dropdown nav-item" role="presentation">
  57. <a class="dropdown-toggle nav-link" data-toggle="dropdown" href="#"
  58. aria-expanded="false">{{ trans('admin.setting.system.menu') }}</a>
  59. <div class="dropdown-menu" role="menu">
  60. <a class="dropdown-item active" data-toggle="tab" href="#webSetting" role="tab"
  61. aria-controls="webSetting">{{ trans('admin.setting.system.web') }}</a>
  62. <a class="dropdown-item" data-toggle="tab" href="#account" role="tab"
  63. aria-controls="account">{{ trans('admin.setting.system.account') }}</a>
  64. <a class="dropdown-item" data-toggle="tab" href="#node" role="tab"
  65. aria-controls="node">{{ trans('admin.setting.system.node') }}</a>
  66. <a class="dropdown-item" data-toggle="tab" href="#extend" role="tab"
  67. aria-controls="extend">{{ trans('admin.setting.system.extend') }}</a>
  68. <a class="dropdown-item" data-toggle="tab" href="#checkIn" role="tab"
  69. aria-controls="checkIn">{{ trans('admin.setting.system.check_in') }}</a>
  70. <a class="dropdown-item" data-toggle="tab" href="#promo" role="tab"
  71. aria-controls="promo">{{ trans('admin.setting.system.promotion') }}</a>
  72. <a class="dropdown-item" data-toggle="tab" href="#notify" role="tab"
  73. aria-controls="notify">{{ trans('admin.setting.system.notify') }}</a>
  74. <a class="dropdown-item" data-toggle="tab" href="#auto" role="tab"
  75. aria-controls="auto">{{ trans('admin.setting.system.auto_job') }}</a>
  76. <a class="dropdown-item" data-toggle="tab" href="#other" role="tab"
  77. aria-controls="other">{{ trans('admin.setting.system.other') }}</a>
  78. <a class="dropdown-item" data-toggle="tab" href="#payment" role="tab"
  79. aria-controls="payment">{{ trans('admin.setting.system.payment') }}</a>
  80. </div>
  81. </li>
  82. </ul>
  83. <div class="tab-content py-35 px-35">
  84. <x-system.tab-pane id="webSetting" :active="true">
  85. <x-system.input code="website_name" :value="$website_name" />
  86. <x-system.input type="url" code="website_url" :value="$website_url" />
  87. <x-system.select code="standard_currency" :list="array_column(config('common.currency'), 'code', 'name')" />
  88. <x-system.input type="email" code="AppStore_id" :value="$AppStore_id" />
  89. <x-system.input type="password" code="AppStore_password" :value="$AppStore_password" />
  90. <x-system.input type="email" code="webmaster_email" :value="$webmaster_email" />
  91. <div class="form-group col-lg-6">
  92. <div class="form-row">
  93. <label class="col-md-3 col-form-label" for="website_security_code">{{ trans('admin.system.website_security_code') }}</label>
  94. <div class="col-md-6">
  95. <div class="input-group">
  96. <input class="form-control" id="website_security_code" type="text" value="{{ $website_security_code }}" />
  97. <span class="input-group-append">
  98. <button class="btn btn-info" type="button"
  99. onclick="makeWebsiteSecurityCode()">{{ trans('common.generate') }}</button>
  100. <button class="btn btn-primary" type="button"
  101. onclick="update('website_security_code')">{{ trans('common.update') }}</button>
  102. </span>
  103. </div>
  104. <span class="text-help">{!! trans('admin.system.hint.website_security_code', ['url' => route('login') . '?securityCode=']) !!}</span>
  105. </div>
  106. </div>
  107. </div>
  108. <x-system.select code="forbid_mode" :list="[
  109. trans('common.status.closed') => '',
  110. trans('admin.system.forbid.mainland') => 'ban_mainland',
  111. trans('admin.system.forbid.china') => 'ban_china',
  112. trans('admin.system.forbid.oversea') => 'ban_oversea',
  113. ]" />
  114. <x-system.switch code="is_forbid_robot" :check="$is_forbid_robot" />
  115. <x-system.switch code="maintenance_mode" :check="$maintenance_mode" :url="route('admin.login')" />
  116. <x-system.input type="datetime-local" code="maintenance_time" :value="$maintenance_time" />
  117. <x-system.textarea code="maintenance_content" :value="$maintenance_content" row="3" />
  118. <x-system.input type="url" code="redirect_url" :value="$redirect_url" />
  119. </x-system.tab-pane>
  120. <x-system.tab-pane id="account">
  121. <x-system.switch code="is_register" :check="$is_register" />
  122. <x-system.select code="oauth_path" multiple="1" :list="array_flip(config('common.oauth.labels'))" />
  123. <x-system.select code="username_type" :list="[
  124. trans('admin.system.username.email') => 'email',
  125. trans('admin.system.username.mobile') => 'numeric',
  126. trans('admin.system.username.any') => 'string',
  127. ]" />
  128. <x-system.select code="is_invite_register" :list="[trans('common.status.closed') => '', trans('admin.optional') => 1, trans('admin.require') => 2]" />
  129. <x-system.select code="is_activate_account" :list="[
  130. trans('common.status.closed') => '',
  131. trans('admin.system.active_account.before') => 1,
  132. trans('admin.system.active_account.after') => 2,
  133. ]" />
  134. <x-system.select code="password_reset_notification" :list="[trans('common.status.closed') => '', trans('admin.system.notification.channel.email') => 'mail']" />
  135. <x-system.switch code="is_free_code" :check="$is_free_code" />
  136. <x-system.input code="aff_salt" :value="$aff_salt" />
  137. <x-system.switch code="is_rand_port" :check="$is_rand_port" />
  138. <x-system.input-limit code="min_port" hcode="max_port" :value="$min_port" min="1000" max="$('#max_port').val()"
  139. :hvalue="$max_port" hmin="$
  140. ('#min_port').val()" hmax="65535" />
  141. <x-system.input-limit code="default_days" :value="$default_days" unit="{{ trans_choice('common.days.attribute', 1) }}" />
  142. <x-system.input-limit code="default_traffic" :value="$default_traffic" unit="MB" />
  143. <x-system.input-limit code="invite_num" :value="$invite_num" />
  144. <x-system.input-limit code="reset_password_times" :value="$reset_password_times" />
  145. <x-system.select code="is_email_filtering" :list="[trans('common.status.closed') => '', trans('admin.setting.email.black') => 1, trans('admin.setting.email.white') => 2]" />
  146. <x-system.input-limit code="active_times" :value="$active_times" />
  147. <x-system.input-limit code="register_ip_limit" :value="$register_ip_limit" />
  148. <x-system.input-limit code="user_invite_days" :value="$user_invite_days" min="1"
  149. unit="{{ trans_choice('common.days.attribute', 1) }}" />
  150. <x-system.input-limit code="admin_invite_days" :value="$admin_invite_days" min="1"
  151. unit="{{ trans_choice('common.days.attribute', 1) }}" />
  152. </x-system.tab-pane>
  153. <x-system.tab-pane id="node">
  154. <x-system.input type="url" code="subscribe_domain" :value="$subscribe_domain" :holder="trans('admin.system.placeholder.default_url', ['url' => $website_url])" />
  155. <x-system.input-limit code="subscribe_max" :value="$subscribe_max" />
  156. <x-system.switch code="rand_subscribe" :check="$rand_subscribe" />
  157. <x-system.switch code="is_custom_subscribe" :check="$is_custom_subscribe" />
  158. <x-system.input type="url" code="web_api_url" :value="$web_api_url" />
  159. <x-system.input code="v2ray_license" :value="$v2ray_license" />
  160. <x-system.input code="trojan_license" :value="$trojan_license" />
  161. <x-system.input code="v2ray_tls_provider" :value="$v2ray_tls_provider" />
  162. </x-system.tab-pane>
  163. <x-system.tab-pane id="extend">
  164. <x-system.select code="ddns_mode" :list="$ddns_labels" />
  165. <x-system.input code="ddns_key" :value="$ddns_key" />
  166. <x-system.input code="ddns_secret" :value="$ddns_secret" />
  167. <hr class="col-lg-12">
  168. <x-system.select code="is_captcha" :list="[
  169. trans('common.status.closed') => '',
  170. trans('admin.system.captcha.standard') => 1,
  171. trans('admin.system.captcha.geetest') => 2,
  172. trans('admin.system.captcha.recaptcha') => 3,
  173. trans('admin.system.captcha.hcaptcha') => 4,
  174. trans('admin.system.captcha.turnstile') => 5,
  175. ]" />
  176. <x-system.input code="captcha_key" :value="$captcha_key" />
  177. <x-system.input code="captcha_secret" :value="$captcha_secret" />
  178. </x-system.tab-pane>
  179. <x-system.tab-pane id="checkIn">
  180. <x-system.switch code="is_checkin" :check="$is_checkin" />
  181. <x-system.input-limit code="traffic_limit_time" :value="$traffic_limit_time" />
  182. <x-system.input-limit code="min_rand_traffic" hcode="max_rand_traffic" :value="$min_rand_traffic" :hvalue="$max_rand_traffic" :max="$max_rand_traffic"
  183. :hmin="$min_rand_traffic" unit="MB" />
  184. </x-system.tab-pane>
  185. <x-system.tab-pane id="promo">
  186. <x-system.switch code="referral_status" :check="$referral_status" />
  187. <x-system.select code="referral_type" :list="[
  188. trans('common.status.closed') => '',
  189. trans('admin.system.referral.once') => 1,
  190. trans('admin.system.referral.loop') => 2,
  191. ]" />
  192. <x-system.input-limit code="referral_traffic" :value="$referral_traffic" unit="MB" />
  193. <x-system.input-limit code="referral_percent" :value="$referral_percent * 100" max="100" unit="%" />
  194. <x-system.input-limit code="referral_money" :value="$referral_money"
  195. unit="{{ array_column(config('common.currency'), 'symbol', 'code')[sysConfig('standard_currency')] }}" />
  196. </x-system.tab-pane>
  197. <x-system.tab-pane id="notify">
  198. <x-system.input-test code="server_chan_key" :value="$server_chan_key" holder="{{ trans('admin.system.placeholder.server_chan_key') }}"
  199. test="serverChan" />
  200. <x-system.input-test code="pushDeer_key" :value="$pushDeer_key" holder="{{ trans('admin.system.placeholder.pushDeer_key') }}"
  201. test="pushDeer" />
  202. <x-system.input-test code="iYuu_token" :value="$iYuu_token" holder="{{ trans('admin.system.placeholder.iYuu_token') }}"
  203. test="iYuu" />
  204. <x-system.input-test code="bark_key" :value="$bark_key" holder="{{ trans('admin.system.placeholder.bark_key') }}" test="bark" />
  205. <x-system.input-test code="telegram_token" :value="$telegram_token" holder="{{ trans('admin.system.placeholder.telegram_token') }}"
  206. test="telegram" />
  207. <x-system.input-test code="pushplus_token" :value="$pushplus_token" holder="{{ trans('admin.system.placeholder.pushplus_token') }}"
  208. test="pushPlus" />
  209. <x-system.input code="dingTalk_access_token" :value="$dingTalk_access_token"
  210. holder="{{ trans('admin.system.placeholder.dingTalk_access_token') }}" />
  211. <x-system.input-test code="dingTalk_secret" :value="$dingTalk_secret" holder="{{ trans('admin.system.placeholder.dingTalk_secret') }}"
  212. test="dingTalk" />
  213. <x-system.input code="wechat_cid" :value="$wechat_cid" holder="{{ trans('admin.system.placeholder.wechat_cid') }}" />
  214. <x-system.input code="wechat_aid" :value="$wechat_aid" holder="{{ trans('admin.system.placeholder.wechat_aid') }}" />
  215. <x-system.input-test code="wechat_secret" :value="$wechat_secret" holder="{{ trans('admin.system.placeholder.wechat_secret') }}"
  216. test="weChat" />
  217. <x-system.input code="wechat_token" :value="$wechat_token" :url="route('wechat.verify')" />
  218. <x-system.input code="wechat_encodingAESKey" :value="$wechat_encodingAESKey" />
  219. <x-system.input-test code="tg_chat_token" :value="$tg_chat_token" holder="{{ trans('admin.system.placeholder.tg_chat_token') }}"
  220. test="tgChat" />
  221. <hr class="col-10" />
  222. <x-system.select code="account_expire_notification" multiple="1" :list="[
  223. trans('admin.system.notification.channel.email') => 'mail',
  224. trans('admin.system.notification.channel.site') => 'database',
  225. ]" />
  226. <x-system.input-limit code="expire_days" :value="$expire_days" unit="{{ trans_choice('common.days.attribute', 1) }}" />
  227. <x-system.select code="data_exhaust_notification" multiple="1" :list="[
  228. trans('admin.system.notification.channel.email') => 'mail',
  229. trans('admin.system.notification.channel.site') => 'database',
  230. ]" />
  231. <x-system.input-limit code="traffic_warning_percent" :value="$traffic_warning_percent" unit="%" />
  232. <x-system.select code="node_offline_notification" multiple="1" :list="[
  233. trans('admin.system.notification.channel.email') => 'mail',
  234. trans('admin.system.notification.channel.bark') => 'bark',
  235. trans('admin.system.notification.channel.serverchan') => 'serverChan',
  236. trans('admin.system.notification.channel.pushdeer') => 'pushDear',
  237. trans('admin.system.notification.channel.iyuu') => 'iYuu',
  238. trans('admin.system.notification.channel.telegram') => 'telegram',
  239. trans('admin.system.notification.channel.dingtalk') => 'dingTalk',
  240. trans('admin.system.notification.channel.wechat') => 'weChat',
  241. trans('admin.system.notification.channel.tg_chat') => 'tgChat',
  242. trans('admin.system.notification.channel.pushplus') => 'pushPlus',
  243. ]" />
  244. <x-system.input-limit code="offline_check_times" :value="$offline_check_times" unit="{{ trans('admin.times') }}" />
  245. <x-system.select code="node_blocked_notification" multiple="1" :list="[
  246. trans('admin.system.notification.channel.email') => 'mail',
  247. trans('admin.system.notification.channel.serverchan') => 'serverChan',
  248. trans('admin.system.notification.channel.pushdeer') => 'pushDear',
  249. trans('admin.system.notification.channel.iyuu') => 'iYuu',
  250. trans('admin.system.notification.channel.telegram') => 'telegram',
  251. trans('admin.system.notification.channel.wechat') => 'weChat',
  252. trans('admin.system.notification.channel.tg_chat') => 'tgChat',
  253. trans('admin.system.notification.channel.pushplus') => 'pushPlus',
  254. ]" />
  255. <x-system.input-limit code="detection_check_times" :value="$detection_check_times" max="12" unit="{{ trans('admin.times') }}" />
  256. <x-system.select code="payment_received_notification" multiple="1" :list="[
  257. trans('admin.system.notification.channel.email') => 'mail',
  258. trans('admin.system.notification.channel.site') => 'database',
  259. trans('admin.system.notification.channel.telegram') => 'telegram',
  260. ]" />
  261. <x-system.select code="payment_confirm_notification" :list="[
  262. trans('common.status.closed') => '',
  263. trans('admin.system.notification.channel.telegram') => 'telegram',
  264. trans('admin.system.notification.channel.dingtalk') => 'dingTalk',
  265. trans('admin.system.notification.channel.wechat') => 'weChat',
  266. ]" />
  267. <x-system.select code="ticket_closed_notification" multiple="1" :list="[
  268. trans('admin.system.notification.channel.email') => 'mail',
  269. trans('admin.system.notification.channel.bark') => 'bark',
  270. trans('admin.system.notification.channel.serverchan') => 'serverChan',
  271. trans('admin.system.notification.channel.pushdeer') => 'pushDear',
  272. trans('admin.system.notification.channel.iyuu') => 'iYuu',
  273. trans('admin.system.notification.channel.telegram') => 'telegram',
  274. trans('admin.system.notification.channel.dingtalk') => 'dingTalk',
  275. trans('admin.system.notification.channel.wechat') => 'weChat',
  276. trans('admin.system.notification.channel.tg_chat') => 'tgChat',
  277. trans('admin.system.notification.channel.pushplus') => 'pushPlus',
  278. ]" />
  279. <x-system.select code="ticket_created_notification" multiple="1" :list="[
  280. trans('admin.system.notification.channel.email') => 'mail',
  281. trans('admin.system.notification.channel.bark') => 'bark',
  282. trans('admin.system.notification.channel.serverchan') => 'serverChan',
  283. trans('admin.system.notification.channel.pushdeer') => 'pushDear',
  284. trans('admin.system.notification.channel.iyuu') => 'iYuu',
  285. trans('admin.system.notification.channel.telegram') => 'telegram',
  286. trans('admin.system.notification.channel.dingtalk') => 'dingTalk',
  287. trans('admin.system.notification.channel.wechat') => 'weChat',
  288. trans('admin.system.notification.channel.tg_chat') => 'tgChat',
  289. trans('admin.system.notification.channel.pushplus') => 'pushPlus',
  290. ]" />
  291. <x-system.select code="ticket_replied_notification" multiple="1" :list="[
  292. trans('admin.system.notification.channel.email') => 'mail',
  293. trans('admin.system.notification.channel.bark') => 'bark',
  294. trans('admin.system.notification.channel.serverchan') => 'serverChan',
  295. trans('admin.system.notification.channel.pushdeer') => 'pushDear',
  296. trans('admin.system.notification.channel.iyuu') => 'iYuu',
  297. trans('admin.system.notification.channel.telegram') => 'telegram',
  298. trans('admin.system.notification.channel.dingtalk') => 'dingTalk',
  299. trans('admin.system.notification.channel.wechat') => 'weChat',
  300. trans('admin.system.notification.channel.tg_chat') => 'tgChat',
  301. trans('admin.system.notification.channel.pushplus') => 'pushPlus',
  302. ]" />
  303. </x-system.tab-pane>
  304. <x-system.tab-pane id="auto">
  305. <x-system.switch code="is_clear_log" :check="$is_clear_log" />
  306. <x-system.switch code="reset_traffic" :check="$reset_traffic" />
  307. <x-system.switch code="is_subscribe_ban" :check="$is_subscribe_ban" />
  308. <x-system.input-limit code="subscribe_ban_times" :value="$subscribe_ban_times" />
  309. <x-system.switch code="is_traffic_ban" :check="$is_traffic_ban" />
  310. <x-system.select code="data_anomaly_notification" multiple="1" :list="[
  311. trans('admin.system.notification.channel.email') => 'mail',
  312. trans('admin.system.notification.channel.bark') => 'bark',
  313. trans('admin.system.notification.channel.serverchan') => 'serverChan',
  314. trans('admin.system.notification.channel.pushdeer') => 'pushDear',
  315. trans('admin.system.notification.channel.iyuu') => 'iYuu',
  316. trans('admin.system.notification.channel.telegram') => 'telegram',
  317. trans('admin.system.notification.channel.dingtalk') => 'dingTalk',
  318. trans('admin.system.notification.channel.wechat') => 'weChat',
  319. trans('admin.system.notification.channel.tg_chat') => 'tgChat',
  320. trans('admin.system.notification.channel.pushplus') => 'pushPlus',
  321. ]" />
  322. <x-system.input-limit code="traffic_ban_value" :value="$traffic_ban_value" min="1" unit="GB" />
  323. <x-system.input-limit code="traffic_ban_time" :value="$traffic_ban_time" unit="{{ trans('admin.minute') }}" />
  324. <x-system.switch code="auto_release_port" :check="$auto_release_port" />
  325. <x-system.switch code="is_ban_status" :check="$is_ban_status" />
  326. <x-system.select code="node_daily_notification" multiple="1" :list="[
  327. trans('admin.system.notification.channel.email') => 'mail',
  328. trans('admin.system.notification.channel.serverchan') => 'serverChan',
  329. trans('admin.system.notification.channel.pushdeer') => 'pushDear',
  330. trans('admin.system.notification.channel.iyuu') => 'iYuu',
  331. trans('admin.system.notification.channel.telegram') => 'telegram',
  332. trans('admin.system.notification.channel.dingtalk') => 'dingTalk',
  333. trans('admin.system.notification.channel.wechat') => 'weChat',
  334. trans('admin.system.notification.channel.tg_chat') => 'tgChat',
  335. trans('admin.system.notification.channel.pushplus') => 'pushPlus',
  336. ]" />
  337. </x-system.tab-pane>
  338. <x-system.tab-pane id="other">
  339. <div class="col-12">
  340. @if ($errors->any())
  341. <x-alert type="danger" :message="$errors->all()" />
  342. @endif
  343. @if (Session::has('successMsg'))
  344. <x-alert type="success" :message="Session::pull('successMsg')" />
  345. @endif
  346. </div>
  347. <x-system.input type="url" code="website_home_logo" :value="$website_home_logo" />
  348. <x-system.input type="url" code="website_logo" :value="$website_logo" />
  349. <form class="upload-form col-lg-12 row" role="form" action="{{ route('admin.system.extend') }}" method="post"
  350. enctype="multipart/form-data">@csrf
  351. <x-system.input-file code="website_home_logo" :value="$website_home_logo" />
  352. <x-system.input-file code="website_logo" :value="$website_logo" />
  353. </form>
  354. <x-system.textarea code="website_analytics" :value="$website_analytics" />
  355. <x-system.textarea code="website_customer_service" :value="$website_customer_service" />
  356. </x-system.tab-pane>
  357. <div class="tab-pane" id="payment" role="tabpanel">
  358. <div class="tab-content pb-100">
  359. <x-system.tab-pane id="paymentSetting" :active="true">
  360. <x-system.select code="is_AliPay" :list="[
  361. trans('common.status.closed') => '',
  362. trans('admin.system.payment.channel.alipay') => 'f2fpay',
  363. trans('admin.system.payment.channel.codepay') => 'codepay',
  364. trans('admin.system.payment.channel.epay') => 'epay',
  365. trans('admin.system.payment.channel.paybeaver') => 'paybeaver',
  366. trans('admin.system.payment.channel.theadpay') => 'theadpay',
  367. trans('admin.system.payment.channel.stripe') => 'stripe',
  368. ]" />
  369. <x-system.select code="is_QQPay" :list="[
  370. trans('common.status.closed') => '',
  371. trans('admin.system.payment.channel.codepay') => 'codepay',
  372. trans('admin.system.payment.channel.epay') => 'epay',
  373. ]" />
  374. <x-system.select code="is_WeChatPay" :list="[
  375. trans('common.status.closed') => '',
  376. trans('admin.system.payment.channel.codepay') => 'codepay',
  377. trans('admin.system.payment.channel.payjs') => 'payjs',
  378. trans('admin.system.payment.channel.epay') => 'epay',
  379. trans('admin.system.payment.channel.paybeaver') => 'paybeaver',
  380. trans('admin.system.payment.channel.stripe') => 'stripe',
  381. ]" />
  382. <x-system.select code="is_otherPay" multiple="1" :list="[
  383. trans('admin.system.payment.channel.paypal') => 'paypal',
  384. trans('admin.system.payment.channel.stripe') => 'stripe',
  385. ]" />
  386. <x-system.input code="subject_name" :value="$subject_name" />
  387. <x-system.input type="url" code="website_callback_url" :value="$website_callback_url" :holder="trans('admin.system.placeholder.default_url', ['url' => $website_url])" />
  388. </x-system.tab-pane>
  389. <x-system.tab-pane id="AlipayF2F">
  390. <div class="form-group col-lg-6 d-flex">
  391. <label class="col-md-3 col-form-label">{{ trans('admin.system.payment.channel.alipay') }}</label>
  392. <div class="col-md-9">
  393. {!! trans('admin.system.payment.hint.alipay') !!}
  394. </div>
  395. </div>
  396. <x-system.input code="f2fpay_app_id" :value="$f2fpay_app_id" />
  397. <x-system.input code="f2fpay_private_key" :value="$f2fpay_private_key" />
  398. <x-system.input code="f2fpay_public_key" :value="$f2fpay_public_key" />
  399. </x-system.tab-pane>
  400. <x-system.tab-pane id="CodePay">
  401. <div class="form-group col-lg-6 d-flex">
  402. <label class="col-md-3 col-form-label">{{ trans('admin.system.payment.channel.codepay') }}</label>
  403. <div class="col-md-7">
  404. {!! trans('admin.system.payment.hint.codepay') !!}
  405. </div>
  406. </div>
  407. <x-system.input type="url" code="codepay_url" :value="$codepay_url" :holder="trans('admin.system.placeholder.codepay_url')" />
  408. <x-system.input code="codepay_id" :value="$codepay_id" />
  409. <x-system.input code="codepay_key" :value="$codepay_key" />
  410. </x-system.tab-pane>
  411. <x-system.tab-pane id="EPay">
  412. <div class="form-group col-lg-6 d-flex">
  413. <label class="col-md-3 col-form-label">{{ trans('admin.system.payment.channel.epay') }}</label>
  414. @can('admin.test.epay')
  415. <div class="col-md-7">
  416. <button class="btn btn-primary" type="button" onclick="epayInfo()">{{ trans('admin.query') }}</button>
  417. </div>
  418. @endcan
  419. </div>
  420. <x-system.input type="url" code="epay_url" :value="$epay_url" />
  421. <x-system.input code="epay_mch_id" :value="$epay_mch_id" />
  422. <x-system.input code="epay_key" :value="$epay_key" />
  423. </x-system.tab-pane>
  424. <x-system.tab-pane id="PayJs">
  425. <div class="form-group col-lg-6 d-flex">
  426. <label class="col-md-3 col-form-label">{{ trans('admin.system.payment.channel.payjs') }}</label>
  427. <div class="col-md-7">
  428. {!! trans('admin.system.payment.hint.payjs') !!}
  429. </div>
  430. </div>
  431. <x-system.input code="payjs_mch_id" :value="$payjs_mch_id" />
  432. <x-system.input code="payjs_key" :value="$payjs_key" />
  433. </x-system.tab-pane>
  434. <x-system.tab-pane id="PayPal">
  435. <div class="form-group col-lg-6 d-flex">
  436. <label class="col-md-3 col-form-label">{{ trans('admin.system.payment.channel.paypal') }}</label>
  437. <div class="col-md-7">
  438. {!! trans('admin.system.payment.hint.paypal') !!}
  439. </div>
  440. </div>
  441. <x-system.input code="paypal_client_id" :value="$paypal_client_id" />
  442. <x-system.input code="paypal_client_secret" :value="$paypal_client_secret" />
  443. <x-system.input code="paypal_app_id" :value="$paypal_app_id" />
  444. </x-system.tab-pane>
  445. <x-system.tab-pane id="Stripe">
  446. <div class="form-group col-lg-6 d-flex">
  447. <label class="col-md-3 col-form-label">{{ trans('admin.system.payment.channel.stripe') }}</label>
  448. </div>
  449. <x-system.input code="stripe_public_key" :value="$stripe_public_key" />
  450. <x-system.input code="stripe_secret_key" :value="$stripe_secret_key" />
  451. <x-system.input code="stripe_signing_secret" :value="$stripe_signing_secret" />
  452. </x-system.tab-pane>
  453. <x-system.tab-pane id="PayBeaver">
  454. <div class="form-group col-lg-6 d-flex">
  455. <label class="col-md-3 col-form-label">{{ trans('admin.system.payment.channel.paybeaver') }}</label>
  456. <div class="col-md-7">
  457. {!! trans('admin.system.payment.hint.paybeaver') !!}
  458. </div>
  459. </div>
  460. <x-system.input code="paybeaver_app_id" :value="$paybeaver_app_id" />
  461. <x-system.input code="paybeaver_app_secret" :value="$paybeaver_app_secret" />
  462. </x-system.tab-pane>
  463. <x-system.tab-pane id="THeadPay">
  464. <div class="form-group col-lg-6 d-flex">
  465. <label class="col-md-3 col-form-label">{{ trans('admin.system.payment.channel.theadpay') }}</label>
  466. <div class="col-md-7">
  467. {!! trans('admin.system.payment.hint.theadpay') !!}
  468. </div>
  469. </div>
  470. <x-system.input type="url" code="theadpay_url" :value="$theadpay_url" />
  471. <x-system.input code="theadpay_mchid" :value="$theadpay_mchid" />
  472. <x-system.input code="theadpay_key" :value="$theadpay_key" />
  473. </x-system.tab-pane>
  474. <x-system.tab-pane id="Manual">
  475. <div class="form-group col-lg-12 d-flex">
  476. <label class="col-md-3 col-form-label">{{ trans('admin.system.payment.channel.manual') }}</label>
  477. <div class="col-md-7">
  478. {!! trans('admin.system.payment.hint.manual') !!}
  479. </div>
  480. </div>
  481. <div class="col-12">
  482. @if ($errors->any())
  483. <x-alert type="danger" :message="$errors->all()" />
  484. @endif
  485. @if (Session::has('successMsg'))
  486. <x-alert type="success" :message="Session::pull('successMsg')" />
  487. @endif
  488. </div>
  489. <x-system.input type="url" code="alipay_qrcode" :value="$alipay_qrcode" />
  490. <x-system.input type="url" code="wechat_qrcode" :value="$wechat_qrcode" />
  491. <form class="upload-form col-lg-12 row" role="form" action="{{ route('admin.system.extend') }}" method="post"
  492. enctype="multipart/form-data">@csrf
  493. <x-system.input-file code="alipay_qrcode" :value="$alipay_qrcode" />
  494. <x-system.input-file code="wechat_qrcode" :value="$wechat_qrcode" />
  495. </form>
  496. </x-system.tab-pane>
  497. </div>
  498. <ul class="nav nav-tabs nav-tabs-bottom nav-tabs-line dropup" role="tablist">
  499. <li class="nav-item">
  500. <a class="nav-link active" data-toggle="tab" href="#paymentSetting" role="tab"
  501. aria-controls="paymentSetting">{{ trans('admin.system.payment.attribute') }}</a>
  502. </li>
  503. <li class="nav-item">
  504. <a class="nav-link" data-toggle="tab" href="#AlipayF2F" role="tab"
  505. aria-controls="AlipayF2F">{{ trans('admin.system.payment.channel.alipay') }}</a>
  506. </li>
  507. <li class="nav-item">
  508. <a class="nav-link" data-toggle="tab" href="#CodePay" role="tab"
  509. aria-controls="CodePay">{{ trans('admin.system.payment.channel.codepay') }}</a>
  510. </li>
  511. <li class="nav-item">
  512. <a class="nav-link" data-toggle="tab" href="#EPay" role="tab"
  513. aria-controls="EPay">{{ trans('admin.system.payment.channel.epay') }}</a>
  514. </li>
  515. <li class="nav-item">
  516. <a class="nav-link" data-toggle="tab" href="#PayJs" role="tab"
  517. aria-controls="PayJs">{{ trans('admin.system.payment.channel.payjs') }}</a>
  518. </li>
  519. <li class="nav-item">
  520. <a class="nav-link" data-toggle="tab" href="#PayPal" role="tab"
  521. aria-controls="PayPal">{{ trans('admin.system.payment.channel.paypal') }}</a>
  522. </li>
  523. <li class="nav-item">
  524. <a class="nav-link" data-toggle="tab" href="#Stripe" role="tab"
  525. aria-controls="Stripe">{{ trans('admin.system.payment.channel.stripe') }}</a>
  526. </li>
  527. <li class="nav-item">
  528. <a class="nav-link" data-toggle="tab" href="#PayBeaver" role="tab"
  529. aria-controls="PayBeaver">{{ trans('admin.system.payment.channel.paybeaver') }}</a>
  530. </li>
  531. <li class="nav-item">
  532. <a class="nav-link" data-toggle="tab" href="#THeadPay" role="tab"
  533. aria-controls="THeadPay">{{ trans('admin.system.payment.channel.theadpay') }}</a>
  534. </li>
  535. <li class="nav-item">
  536. <a class="nav-link" data-toggle="tab" href="#Manual" role="tab"
  537. aria-controls="Manual">{{ trans('admin.system.payment.channel.manual') }}</a>
  538. </li>
  539. <li class="nav-item dropdown" style="display: none;">
  540. <a class="dropdown-toggle nav-link" data-toggle="dropdown" href="#" aria-expanded="false"
  541. aria-haspopup="true">{{ trans('admin.setting.system.menu') }}</a>
  542. <div class="dropdown-menu" role="menu">
  543. <a class="dropdown-item active" data-toggle="tab" href="#paymentSetting" role="tab"
  544. aria-controls="paymentSetting">{{ trans('admin.system.payment.attribute') }}</a>
  545. <a class="dropdown-item" data-toggle="tab" href="#AlipayF2F" role="tab"
  546. aria-controls="AlipayF2F">{{ trans('admin.system.payment.channel.alipay') }}</a>
  547. <a class="dropdown-item" data-toggle="tab" href="#CodePay" role="tab"
  548. aria-controls="CodePay">{{ trans('admin.system.payment.channel.codepay') }}</a>
  549. <a class="dropdown-item" data-toggle="tab" href="#EPay" role="tab"
  550. aria-controls="EPay">{{ trans('admin.system.payment.channel.epay') }}</a>
  551. <a class="dropdown-item" data-toggle="tab" href="#PayJs" role="tab"
  552. aria-controls="PayJs">{{ trans('admin.system.payment.channel.payjs') }}</a>
  553. <a class="dropdown-item" data-toggle="tab" href="#PayPal" role="tab"
  554. aria-controls="PayPal">{{ trans('admin.system.payment.channel.paypal') }}</a>
  555. <a class="dropdown-item" data-toggle="tab" href="#Stripe" role="tab"
  556. aria-controls="Stripe">{{ trans('admin.system.payment.channel.stripe') }}</a>
  557. <a class="dropdown-item" data-toggle="tab" href="#PayBeaver" role="tab"
  558. aria-controls="PayBeaver">{{ trans('admin.system.payment.channel.paybeaver') }}</a>
  559. <a class="dropdown-item" data-toggle="tab" href="#THeadPay" role="tab"
  560. aria-controls="THeadPay">{{ trans('admin.system.payment.channel.theadpay') }}</a>
  561. <a class="dropdown-item" data-toggle="tab" href="#Manual" role="tab"
  562. aria-controls="Manual">{{ trans('admin.system.payment.channel.manual') }}</a>
  563. </div>
  564. </li>
  565. </ul>
  566. </div>
  567. </div>
  568. </div>
  569. </div>
  570. </div>
  571. </div>
  572. @endsection
  573. @section('javascript')
  574. <script src="/assets/global/vendor/bootstrap-select/bootstrap-select.min.js"></script>
  575. <script src="/assets/global/vendor/switchery/switchery.min.js"></script>
  576. <script src="/assets/global/vendor/dropify/dropify.min.js"></script>
  577. <script src="/assets/global/js/Plugin/bootstrap-select.js"></script>
  578. <script src="/assets/global/js/Plugin/switchery.js"></script>
  579. <script src="/assets/global/js/Plugin/responsive-tabs.js"></script>
  580. <script src="/assets/global/js/Plugin/tabs.js"></script>
  581. <script src="/assets/custom/jump-tab.js"></script>
  582. <script src="/assets/global/js/Plugin/dropify.js"></script>
  583. <script>
  584. $(document).ready(function() {
  585. $('#forbid_mode').selectpicker('val', '{{ $forbid_mode }}');
  586. $('#username_type').selectpicker('val', '{{ $username_type ?? 'email' }}');
  587. $('#is_invite_register').selectpicker('val', '{{ $is_invite_register }}');
  588. $('#is_activate_account').selectpicker('val', '{{ $is_activate_account }}');
  589. $('#ddns_mode').selectpicker('val', '{{ $ddns_mode }}');
  590. $('#is_captcha').selectpicker('val', '{{ $is_captcha }}');
  591. $('#referral_type').selectpicker('val', '{{ $referral_type }}');
  592. $('#is_email_filtering').selectpicker('val', '{{ $is_email_filtering }}');
  593. $('#is_AliPay').selectpicker('val', '{{ $is_AliPay }}');
  594. $('#is_QQPay').selectpicker('val', '{{ $is_QQPay }}');
  595. $('#is_WeChatPay').selectpicker('val', '{{ $is_WeChatPay }}');
  596. $('#standard_currency').selectpicker('val', '{{ $standard_currency }}');
  597. $('#is_otherPay').selectpicker('val', {!! $is_otherPay !!});
  598. $('#oauth_path').selectpicker('val', {!! $oauth_path !!});
  599. $('#account_expire_notification').selectpicker('val', {!! $account_expire_notification !!});
  600. $('#data_anomaly_notification').selectpicker('val', {!! $data_anomaly_notification !!});
  601. $('#data_exhaust_notification').selectpicker('val', {!! $data_exhaust_notification !!});
  602. $('#node_blocked_notification').selectpicker('val', {!! $node_blocked_notification !!});
  603. $('#node_daily_notification').selectpicker('val', {!! $node_daily_notification !!});
  604. $('#node_offline_notification').selectpicker('val', {!! $node_offline_notification !!});
  605. $('#password_reset_notification').selectpicker('val', '{{ $password_reset_notification }}');
  606. $('#payment_confirm_notification').selectpicker('val', '{{ $payment_confirm_notification }}');
  607. $('#payment_received_notification').selectpicker('val', {!! $payment_received_notification !!});
  608. $('#ticket_closed_notification').selectpicker('val', {!! $ticket_closed_notification !!});
  609. $('#ticket_created_notification').selectpicker('val', {!! $ticket_created_notification !!});
  610. $('#ticket_replied_notification').selectpicker('val', {!! $ticket_replied_notification !!});
  611. // Get all options within select
  612. disablePayment(document.getElementById('is_AliPay').getElementsByTagName('option'));
  613. disablePayment(document.getElementById('is_QQPay').getElementsByTagName('option'));
  614. disablePayment(document.getElementById('is_WeChatPay').getElementsByTagName('option'));
  615. disablePayment(document.getElementById('is_otherPay').getElementsByTagName('option'));
  616. @if (!$captcha)
  617. disableCaptcha(document.getElementById('is_captcha').getElementsByTagName('option'));
  618. @endif
  619. });
  620. function disablePayment(op) {
  621. for (let i = 1; i < op.length; i++) {
  622. @json($payments).
  623. includes(op[i].value) ? op[i].disabled = false : op[i].disabled = true;
  624. }
  625. }
  626. function disableCaptcha(op) {
  627. for (let i = 2; i < op.length; i++) {
  628. op[i].disabled = true;
  629. }
  630. }
  631. // 系统设置更新
  632. function systemUpdate(systemItem, value) {
  633. @can('admin.system.update')
  634. $.post('{{ route('admin.system.update') }}', {
  635. _token: '{{ csrf_token() }}',
  636. name: systemItem,
  637. value: value,
  638. }, function(ret) {
  639. if (ret.status === 'success') {
  640. swal.fire({
  641. title: ret.message,
  642. icon: 'success',
  643. timer: 1500,
  644. showConfirmButton: false
  645. });
  646. } else {
  647. swal.fire({
  648. title: ret.message,
  649. icon: 'error'
  650. }).then(() => window.location.reload());
  651. }
  652. });
  653. @else
  654. swal.fire({
  655. title: '{{ trans('admin.setting.no_permission') }}',
  656. icon: 'error',
  657. timer: 1500,
  658. showConfirmButton: false,
  659. });
  660. @endcan
  661. }
  662. // 正常input更新
  663. function update(systemItem) {
  664. systemUpdate(systemItem, $('#' + systemItem).val());
  665. }
  666. // 需要检查限制的更新
  667. function updateFromInput(systemItem, lowerBound = false, upperBound = false) {
  668. let value = parseInt($('#' + systemItem).val());
  669. if (lowerBound !== false && value < lowerBound) {
  670. swal.fire({
  671. title: '不能小于' + lowerBound,
  672. icon: 'warning',
  673. timer: 1500,
  674. showConfirmButton: false
  675. });
  676. } else if (upperBound !== false && value > upperBound) {
  677. swal.fire({
  678. title: '不能大于' + upperBound,
  679. icon: 'warning',
  680. timer: 1500,
  681. showConfirmButton: false
  682. });
  683. } else {
  684. systemUpdate(systemItem, value);
  685. }
  686. }
  687. // 其他项更新选择
  688. function updateFromOther(inputType, systemItem) {
  689. let input = $('#' + systemItem);
  690. switch (inputType) {
  691. case 'select':
  692. input.on('changed.bs.select', function() {
  693. systemUpdate(systemItem, $(this).val());
  694. });
  695. break;
  696. case 'multiSelect':
  697. input.on('changed.bs.select', function() {
  698. systemUpdate(systemItem, $(this).val().join(','));
  699. });
  700. break;
  701. case 'switch':
  702. systemUpdate(systemItem, document.getElementById(systemItem).checked ? 1 : 0);
  703. break;
  704. default:
  705. break;
  706. }
  707. }
  708. // 使用通知渠道 发送测试消息
  709. @can('admin.test.notify')
  710. function sendTestNotification(channel) {
  711. $.post('{{ route('admin.test.notify') }}', {
  712. _token: '{{ csrf_token() }}',
  713. channel: channel
  714. }, function(ret) {
  715. if (ret.status === 'success') {
  716. swal.fire({
  717. title: ret.message,
  718. icon: 'success',
  719. timer: 1500,
  720. showConfirmButton: false
  721. });
  722. } else {
  723. swal.fire({
  724. title: ret.message,
  725. icon: 'error'
  726. });
  727. }
  728. });
  729. }
  730. @endcan
  731. // 生成网站安全码
  732. function makeWebsiteSecurityCode() {
  733. $.get('{{ route('createStr') }}', function(ret) {
  734. $('#website_security_code').val(ret);
  735. });
  736. }
  737. @can('admin.test.epay')
  738. function epayInfo() {
  739. $.get('{{ route('admin.test.epay') }}', function(ret) {
  740. if (ret.status === 'success') {
  741. swal.fire({
  742. title: '易支付信息(仅供参考)',
  743. html: '商户状态: ' + ret.data['active'] + ' | 账号余额: ' + ret.data['money'] + ' | 结算账号:' +
  744. ret.data['account'] + '<br\><br\>渠道手续费:【支付宝 - ' + (100 - ret.data['alirate']) +
  745. '% | 微信 - ' + (100 - ret.data['wxrate']) + '% | QQ钱包 - ' + (100 - ret.data['qqrate']) +
  746. '%】<br\><br\> 请按照支付平台的介绍为准,本信息纯粹为Api获取信息',
  747. icon: 'info',
  748. });
  749. } else {
  750. swal.fire({
  751. title: ret.message,
  752. icon: 'error'
  753. });
  754. }
  755. });
  756. }
  757. @endcan
  758. </script>
  759. @endsection