system.blade.php 51 KB

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