Browse Source

chore: material theme clean up

Cat 3 years ago
parent
commit
f979612070
100 changed files with 0 additions and 20520 deletions
  1. 0 5
      public/theme/material/assets/js/_.js
  2. 0 5
      public/theme/material/assets/js/bootstrap.js
  3. 0 49
      public/theme/material/assets/js/form-floating-label.js
  4. 0 13
      public/theme/material/assets/js/form-textarea.js
  5. 0 12
      public/theme/material/assets/js/header.js
  6. 0 200
      public/theme/material/assets/js/menu.js
  7. 0 12
      public/theme/material/assets/js/modal.js
  8. 0 4
      public/theme/material/assets/js/picker.js
  9. 0 116
      public/theme/material/assets/js/snackbar.js
  10. 0 51
      public/theme/material/assets/js/tab.js
  11. 0 181
      public/theme/material/assets/js/tile.js
  12. 0 5
      public/theme/material/assets/js/wave.js
  13. 0 428
      public/theme/material/css/auth.css
  14. 0 0
      public/theme/material/css/auth.min.css
  15. 0 7108
      public/theme/material/css/base.css
  16. 0 3
      public/theme/material/css/base.min.css
  17. BIN
      public/theme/material/css/images/bg/amber.jpg
  18. BIN
      public/theme/material/css/images/bg/geometry.jpg
  19. BIN
      public/theme/material/css/images/bg/streak.jpg
  20. 0 1493
      public/theme/material/css/index.css
  21. 0 0
      public/theme/material/css/index.min.css
  22. 0 679
      public/theme/material/css/index_base.css
  23. 0 10
      public/theme/material/css/index_base.min.css
  24. 0 1635
      public/theme/material/css/project.css
  25. 0 0
      public/theme/material/css/project.min.css
  26. 0 378
      public/theme/material/css/user.css
  27. 0 0
      public/theme/material/css/user.min.css
  28. BIN
      public/theme/material/images/users/trafficbar.png
  29. 0 3
      public/theme/material/js/base.js
  30. 0 3
      public/theme/material/js/base.min.js
  31. 0 1
      public/theme/material/js/jquery.qrcode.min.js
  32. 0 2
      public/theme/material/js/project.js
  33. 0 0
      public/theme/material/js/project.min.js
  34. 0 19
      resources/views/material/404.tpl
  35. 0 19
      resources/views/material/405.tpl
  36. 0 36
      resources/views/material/500.tpl
  37. 0 124
      resources/views/material/admin/announcement/create.tpl
  38. 0 96
      resources/views/material/admin/announcement/edit.tpl
  39. 0 98
      resources/views/material/admin/announcement/index.tpl
  40. 0 103
      resources/views/material/admin/code/add.tpl
  41. 0 94
      resources/views/material/admin/code/add_donate.tpl
  42. 0 65
      resources/views/material/admin/code/index.tpl
  43. 0 116
      resources/views/material/admin/coupon.tpl
  44. 0 91
      resources/views/material/admin/detect/add.tpl
  45. 0 36
      resources/views/material/admin/detect/ban.tpl
  46. 0 104
      resources/views/material/admin/detect/edit.tpl
  47. 0 99
      resources/views/material/admin/detect/index.tpl
  48. 0 37
      resources/views/material/admin/detect/log.tpl
  49. 0 17
      resources/views/material/admin/footer.tpl
  50. 0 276
      resources/views/material/admin/index.tpl
  51. 0 142
      resources/views/material/admin/invite.tpl
  52. 0 33
      resources/views/material/admin/ip/alive.tpl
  53. 0 78
      resources/views/material/admin/ip/block.tpl
  54. 0 34
      resources/views/material/admin/ip/login.tpl
  55. 0 36
      resources/views/material/admin/ip/unblock.tpl
  56. 0 122
      resources/views/material/admin/main.tpl
  57. 0 215
      resources/views/material/admin/node/create.tpl
  58. 0 285
      resources/views/material/admin/node/edit.tpl
  59. 0 97
      resources/views/material/admin/node/index.tpl
  60. 0 1908
      resources/views/material/admin/setting.tpl
  61. 0 90
      resources/views/material/admin/shop/bought.tpl
  62. 0 238
      resources/views/material/admin/shop/create.tpl
  63. 0 251
      resources/views/material/admin/shop/edit.tpl
  64. 0 98
      resources/views/material/admin/shop/index.tpl
  65. 0 36
      resources/views/material/admin/subscribe.tpl
  66. 0 26
      resources/views/material/admin/sys.tpl
  67. 0 92
      resources/views/material/admin/ticket/index.tpl
  68. 0 209
      resources/views/material/admin/ticket/view.tpl
  69. 0 36
      resources/views/material/admin/trafficlog.tpl
  70. 0 181
      resources/views/material/admin/user/bought.tpl
  71. 0 33
      resources/views/material/admin/user/code.tpl
  72. 0 35
      resources/views/material/admin/user/detect.tpl
  73. 0 367
      resources/views/material/admin/user/edit.tpl
  74. 0 274
      resources/views/material/admin/user/index.tpl
  75. 0 32
      resources/views/material/admin/user/login.tpl
  76. 0 34
      resources/views/material/admin/user/sublog.tpl
  77. 0 33
      resources/views/material/admin/user/traffic.tpl
  78. 0 0
      resources/views/material/analytics.tpl
  79. 0 160
      resources/views/material/auth/login.tpl
  80. 0 389
      resources/views/material/auth/register.tpl
  81. 0 88
      resources/views/material/auth/telegram.tpl
  82. 0 50
      resources/views/material/auth/telegram_modal.tpl
  83. 0 16
      resources/views/material/dialog.tpl
  84. 0 15
      resources/views/material/footer.tpl
  85. 0 24
      resources/views/material/header.tpl
  86. 0 16
      resources/views/material/index.tpl
  87. 0 110
      resources/views/material/live_chat.tpl
  88. 0 90
      resources/views/material/password/reset.tpl
  89. 0 101
      resources/views/material/password/token.tpl
  90. 0 8
      resources/views/material/reg_tos.tpl
  91. 0 46
      resources/views/material/staff.tpl
  92. 0 11
      resources/views/material/table/checkbox.tpl
  93. 0 12
      resources/views/material/table/js_1.tpl
  94. 0 41
      resources/views/material/table/js_2.tpl
  95. 0 4
      resources/views/material/table/js_delete.tpl
  96. 0 24
      resources/views/material/table/lang_chinese.tpl
  97. 0 16
      resources/views/material/table/table.tpl
  98. 0 216
      resources/views/material/telegram_error.tpl
  99. 0 216
      resources/views/material/telegram_success.tpl
  100. 0 26
      resources/views/material/tos.tpl

File diff suppressed because it is too large
+ 0 - 5
public/theme/material/assets/js/_.js


File diff suppressed because it is too large
+ 0 - 5
public/theme/material/assets/js/bootstrap.js


+ 0 - 49
public/theme/material/assets/js/form-floating-label.js

@@ -1,49 +0,0 @@
-// floating label
-	(function ($) {
-		'use strict';
-
-		$.fn.floatingLabel = function (option) {
-			var parent = this.closest('.form-group-label');
-
-			if (parent.length) {
-				switch (option) {
-					case 'focusin':
-						parent.addClass('control-focus');
-						break;
-					case 'focusout':
-						parent.removeClass('control-focus');
-						break;
-					default: 
-						if (this.val()) {
-							parent.addClass('control-highlight');
-						} else if (this.is('select') && $('option:first-child', this).html().replace(' ', '') !== '') {
-							parent.addClass('control-highlight');
-						} else {
-							parent.removeClass('control-highlight');
-						};
-				};
-			};
-
-			return this;
-		};
-	}(jQuery));
-
-	$(function () {
-		'use strict';
-
-		$('.form-group-label .form-control').each(function () {
-			$(this).floatingLabel('change');
-		});
-
-		$(document).on('change', '.form-group-label .form-control', function () {
-			$(this).floatingLabel('change');
-		});
-
-		$(document).on('focusin', '.form-group-label .form-control', function () {
-			$(this).floatingLabel('focusin');
-		});
-
-		$(document).on('focusout', '.form-group-label .form-control', function () {
-			$(this).floatingLabel('focusout');
-		});
-	});

+ 0 - 13
public/theme/material/assets/js/form-textarea.js

@@ -1,13 +0,0 @@
-/*!
- * textarea autosize v0.4.0
- * https://github.com/javierjulio/textarea-autosize
- */
-
-!function(t,e){function i(e){this.element=e,this.$element=t(e),this.init()}var n="textareaAutoSize",h="plugin_"+n,s=function(t){return t.replace(/\s/g,"").length>0};i.prototype={init:function(){var i=(this.$element.outerHeight(),parseInt(this.$element.css("paddingBottom"))+parseInt(this.$element.css("paddingTop")));s(this.element.value)&&this.$element.height(this.element.scrollHeight-i),this.$element.on("input keyup",function(){var n=t(e),h=n.scrollTop();t(this).height(0).height(this.scrollHeight-i),n.scrollTop(h)})}},t.fn[n]=function(e){return this.each(function(){t.data(this,h)||t.data(this,h,new i(this,e))}),this}}(jQuery,window,document);
-
-// textarea autosize default
-	$(function () {
-		'use strict';
-
-		$('.textarea-autosize').textareaAutoSize();
-	});

+ 0 - 12
public/theme/material/assets/js/header.js

@@ -1,12 +0,0 @@
-// header waterfall
-	$(function () {
-		'use strict';
-
-		$('.header-waterfall').each(function () {
-			$(this).affix({
-				offset: {
-					top: 1
-				}
-			});
-		});
-	});

+ 0 - 200
public/theme/material/assets/js/menu.js

@@ -1,200 +0,0 @@
-// menu
-	(function ($) {
-		'use strict';
-
-		var Menu = function (element, options) {
-			this.ignoreBackdropClick = false;
-			this.isShown             = null;
-			this.options             = options;
-			this.originalBodyPad     = null;
-			this.scrollbarWidth      = 0;
-			this.$backdrop           = null;
-			this.$body               = $(document.body);
-			this.$element            = $(element);
-			this.$dialog             = this.$element.find('.menu-scroll');
-		};
-
-		if (!$.fn.modal) {
-			throw new Error('Menu requires Bootstrap modal.js');
-		};
-
-		Menu.DEFAULTS = $.extend({}, $.fn.modal.Constructor.DEFAULTS, {});
-		Menu.TRANSITION_DURATION = 300;
-		Menu.TRANSITION_DURATION_BACKDROP = 150;
-
-		Menu.prototype = $.extend({}, $.fn.modal.Constructor.prototype);
-
-		Menu.prototype.backdrop = function (callback) {
-			var that = this;
-
-			if (this.isShown && this.options.backdrop) {
-				var doAnimate = $.support.transition;
-
-				this.$backdrop = $(document.createElement('div')).addClass('menu-backdrop').appendTo(this.$body);
-
-				this.$element.on('click.dismiss.bs.menu', $.proxy(function (e) {
-					if (this.ignoreBackdropClick) {
-						this.ignoreBackdropClick = false;
-						return;
-					};
-
-					if (e.target !== e.currentTarget) {
-						return;
-					};
-
-					this.options.backdrop == 'static' ? this.$element[0].focus() : this.hide();
-				}, this));
-
-				if (doAnimate) {
-					this.$backdrop[0].offsetWidth;
-				};
-
-				this.$backdrop.addClass('in');
-
-				if (!callback) {
-					return;
-				};
-
-				doAnimate ? this.$backdrop.one('bsTransitionEnd', callback).emulateTransitionEnd(Menu.TRANSITION_DURATION_BACKDROP) : callback();
-			} else if (!this.isShown && this.$backdrop) {
-				this.$backdrop.removeClass('in');
-
-				var callbackRemove = function () {
-					that.removeBackdrop();
-					callback && callback();
-				};
-
-				$.support.transition ? this.$backdrop.one('bsTransitionEnd', callbackRemove).emulateTransitionEnd(Menu.TRANSITION_DURATION_BACKDROP) : callbackRemove();
-			} else if (callback) {
-				callback();
-			};
-		};
-
-		Menu.prototype.hide = function (e) {
-			if (e) e.preventDefault();
-
-			e = $.Event('hide.bs.menu');
-
-			this.$element.trigger(e);
-
-			if (!this.isShown || e.isDefaultPrevented()) {
-				return;
-			};
-
-			this.isShown = false;
-
-			this.escape();
-
-			$(document).off('focusin.bs.modal');
-
-			this.$element.removeClass('in').off('click.dismiss.bs.menu').off('mouseup.dismiss.bs.menu');
-
-			this.$dialog.off('mousedown.dismiss.bs.menu');
-
-			$.support.transition ? this.$element.one('bsTransitionEnd', $.proxy(this.hideModal, this)).emulateTransitionEnd(Menu.TRANSITION_DURATION) : this.hideModal();
-		};
-
-		Menu.prototype.hideModal = function () {
-			var that = this;
-
-			this.$element.hide();
-
-			this.backdrop(function () {
-				that.$element.trigger('hidden.bs.menu');
-			});
-		};
-
-		Menu.prototype.show = function (_relatedTarget) {
-			var that = this;
-			var e    = $.Event('show.bs.menu', { relatedTarget: _relatedTarget });
-
-			this.$element.trigger(e);
-
-			if (this.isShown || e.isDefaultPrevented()) {
-				return;
-			};
-
-			this.isShown = true;
-
-			this.escape();
-
-			this.$element.on('click.dismiss.bs.menu', '[data-dismiss="menu"]', $.proxy(this.hide, this));
-
-			this.$dialog.on('mousedown.dismiss.bs.menu', function () {
-				that.$element.one('mouseup.dismiss.bs.menu', function (e) {
-					if ($(e.target).is(that.$element)) {
-						that.ignoreBackdropClick = true;
-					};
-				});
-			});
-
-			this.backdrop(function () {
-				var transition = $.support.transition;
-
-				if (!that.$element.parent().length) {
-					that.$element.appendTo(that.$body);
-				};
-
-				that.$element.show();
-
-				if (transition) {
-					that.$element[0].offsetWidth;
-				};
-
-				that.$element.addClass('in');
-
-				that.enforceFocus();
-
-				var e = $.Event('shown.bs.menu', { relatedTarget: _relatedTarget });
-
-				transition ? that.$dialog.one('bsTransitionEnd', function () {
-					that.$element.trigger('focus').trigger(e);
-				}).emulateTransitionEnd(Menu.TRANSITION_DURATION) : that.$element.trigger('focus').trigger(e);
-			});
-		};
-
-		function Plugin (option, _relatedTarget) {
-			return this.each(function () {
-				var $this   = $(this);
-				var data    = $this.data('bs.menu');
-				var options = $.extend({}, Menu.DEFAULTS, $this.data(), typeof option == 'object' && option);
-
-				if (!data) $this.data('bs.menu', (data = new Menu(this, options)));
-				if (typeof option == 'string') data[option](_relatedTarget);
-				else if (options.show) data.show(_relatedTarget);
-			});
-		};
-
-		var old = $.fn.menu;
-
-		$.fn.menu             = Plugin;
-		$.fn.menu.Constructor = Menu;
-
-		$.fn.menu.noConflict = function () {
-			$.fn.menu = old;
-			return this;
-		};
-
-		$(document).on('click.bs.menu.data-api', '[data-toggle="menu"]', function (e) {
-			var $this   = $(this);
-			var href    = $this.attr('href');
-			var $target = $($this.attr('data-target') || (href && href.replace(/.*(?=#[^\s]+$)/, '')));
-			var option  = $target.data('bs.menu') ? 'toggle' : $.extend({ remote: !/#/.test(href) && href }, $target.data(), $this.data());
-
-			if ($this.is('a')) e.preventDefault();
-
-			$target.one('show.bs.menu', function (showEvent) {
-				if (showEvent.isDefaultPrevented()) {
-					return;
-				} else {
-					$target.attr('tabindex', '-1');
-				};
-
-				$target.one('hidden.bs.menu', function () {
-					$this.is(':visible') && $this.trigger('focus');
-				});
-			});
-
-			Plugin.call($target, option, this);
-		});
-	}(jQuery));

+ 0 - 12
public/theme/material/assets/js/modal.js

@@ -1,12 +0,0 @@
-// modale dialog vertical alignment
-	$(function () {
-		'use strict';
-
-		$(document).on('hidden.bs.modal', '.modal-va-middle', function () {
-			$(this).removeClass('modal-va-middle-show');
-		});
-
-		$(document).on('show.bs.modal', '.modal-va-middle', function () {
-			$(this).addClass('modal-va-middle-show');
-		});
-	});

File diff suppressed because it is too large
+ 0 - 4
public/theme/material/assets/js/picker.js


+ 0 - 116
public/theme/material/assets/js/snackbar.js

@@ -1,116 +0,0 @@
-// snackbar
-	(function ($) {
-		'use strict';
-
-		var Snackbar = function (options) {
-			this.options  = options;
-			this.$element = $('<div class="snackbar-inner">' + this.options.content + '</div>');
-		};
-
-		Snackbar.DEFAULTS = {
-			alive: 6000,
-			content: '&nbsp;',
-			hide: function () {},
-			show: function () {}
-		};
-
-		Snackbar.prototype.fbtn = function (margin) {
-			if ($(window).width() < 768 && $('.fbtn-container').length) {
-				var str = 'translateY(-' + margin + 'px)';
-				$('.fbtn-container').css({
-					'-webkit-transform': str,
-					'transform': str
-				});
-			};
-		};
-
-		Snackbar.prototype.hide = function () {
-			var that = this;
-
-			this.$element.removeClass('in');
-
-			clearTimeout(this.$element.data('timer'));
-
-			if ($.support.transition) {
-				this.$element.one('bsTransitionEnd', function () {
-					that.options.hide(that.options);
-					that.$element.remove();
-				});
-			} else {
-				that.options.hide(that.options);
-				that.$element.remove();
-			}
-
-			this.fbtn('0');
-		};
-
-		Snackbar.prototype.show = function () {
-			var that = this;
-
-			if (!$('.snackbar').length) {
-				$(document.body).append('<div class="snackbar"></div>');
-			};
-
-			this.$element.appendTo('.snackbar').show().addClass(function () {
-				that.$element.on('click', '[data-dismiss="snackbar"]', function () {
-					that.hide();
-				});
-
-				that.$element.data('timer', setTimeout(function () {
-					that.hide();
-				}, that.options.alive));
-
-				that.$element.on('mouseenter', function () {
-					clearTimeout(that.$element.data('timer'));
-				}).on('mouseleave', function () {
-					that.$element.data('timer', setTimeout(function () {
-						that.hide();
-					}, that.options.alive));
-				});
-
-				that.options.show(that.options);
-
-				return 'in';
-			});
-
-			this.fbtn(this.$element.outerHeight());
-		};
-
-		function Plugin (option) {
-			return this.each(function () {
-				var $this    = $(document.body);
-				var data     = $this.data('bs.snackbar');
-				var options  = $.extend({}, Snackbar.DEFAULTS, option);
-
-				if (!data) {
-					$this.data('bs.snackbar', (data = new Snackbar(options)));
-					data.show();
-				} else if ($('.snackbar-inner').length && !$('.snackbar-inner.old').length) {
-					$('.snackbar-inner.in').addClass('old')
-					data.hide();
-					if ($.support.transition) {
-						$(document).one('bsTransitionEnd', '.snackbar-inner.old', function () {
-							$this.data('bs.snackbar', (data = new Snackbar(options)));
-							data.show();
-						});
-					} else {
-						$this.data('bs.snackbar', (data = new Snackbar(options)));
-						data.show();
-					};
-				} else if (!$('.snackbar-inner').length) {
-					$this.data('bs.snackbar', (data = new Snackbar(options)));
-					data.show();
-				};
-			});
-		};
-
-		var old = $.fn.snackbar;
-
-		$.fn.snackbar             = Plugin;
-		$.fn.snackbar.Constructor = Snackbar;
-
-		$.fn.snackbar.noConflict = function () {
-			$.fn.snackbar = old;
-			return this;
-		};
-	}(jQuery));

+ 0 - 51
public/theme/material/assets/js/tab.js

@@ -1,51 +0,0 @@
-// tab switch
-	(function ($) {
-		'use strict';
-
-		$.fn.tabSwitch = function (oldTab) {
-			var $this = $(this),
-			    $thisNav = $this.closest('.tab-nav'),
-			    $thisNavIndicator = $('.tab-nav-indicator', $thisNav),
-			    thisLeft = $this.offset().left,
-			    thisNavLeft = $thisNav.offset().left,
-			    thisNavWidth = $thisNav.outerWidth();
-
-			if (oldTab !== undefined && oldTab[0] !== undefined) {
-				var oldTabLeft = oldTab.offset().left;
-
-				$thisNavIndicator.css({
-					left: (oldTabLeft - thisNavLeft),
-					right: (thisNavLeft + thisNavWidth - oldTabLeft - oldTab.outerWidth())
-				});
-
-				if (oldTab.offset().left > thisLeft) {
-					$thisNavIndicator.addClass('reverse');
-
-					$thisNavIndicator.one('webkitTransitionEnd oTransitionEnd msTransitionEnd transitionend', function () {
-						$thisNavIndicator.removeClass('reverse');
-					});
-				};
-			};
-
-			$thisNavIndicator.addClass('animate').css({
-				left: (thisLeft - thisNavLeft),
-				right: (thisNavLeft + thisNavWidth - thisLeft - $this.outerWidth())
-			}).one('webkitTransitionEnd oTransitionEnd msTransitionEnd transitionend', function () {
-				$thisNavIndicator.removeClass('animate');
-			});
-
-			return this;
-		}
-	})(jQuery);
-
-	$(function () {
-		'use strict';
-
-		$('.tab-nav').each(function () {
-			$(this).append('<div class="tab-nav-indicator"></div>');
-		});
-
-		$(document).on('show.bs.tab', '.tab-nav a[data-toggle="tab"]', function (e) {
-			$(e.target).tabSwitch($(e.relatedTarget));
-		});
-	});

+ 0 - 181
public/theme/material/assets/js/tile.js

@@ -1,181 +0,0 @@
-// tile
-	(function ($) {
-		'use strict';
-
-		var Tile = function (element, options) {
-			this.options       = $.extend({}, Tile.DEFAULTS, options);
-			this.transitioning = null;
-			this.$element      = $(element);
-
-			if (this.options.parent) {
-				this.$parent = this.getParent();
-			};
-
-			if (this.options.toggle) {
-				this.toggle();
-			};
-		};
-
-		if (!$.fn.collapse) {
-			throw new Error('Menu requires Bootstrap collapse.js');
-		};
-
-		Tile.DEFAULTS = {
-			keyboard: true,
-			toggle: true
-		};
-		Tile.TRANSITION_DURATION = 150;
-
-		Tile.prototype = $.extend({}, $.fn.collapse.Constructor.prototype);
-
-		Tile.prototype.escape = function () {
-			if (this.$element.hasClass('in') && this.options.keyboard) {
-				$(document).on('keydown.dismiss.bs.tile', $.proxy(function (e) {
-					e.which == 27 && this.hide();
-				}, this));
-			} else if (!this.$element.hasClass('in')) {
-				this.$element.off('keydown.dismiss.bs.tile');
-			};
-		};
-
-		Tile.prototype.hide = function () {
-			if (this.transitioning || !this.$element.hasClass('in')) {
-				return;
-			};
-
-			var startEvent = $.Event('hide.bs.tile');
-
-			this.$element.trigger(startEvent);
-
-			if (startEvent.isDefaultPrevented()) {
-				return;
-			};
-
-			var dimension = this.dimension();
-
-			this.$element[dimension](this.$element[dimension]())[0].offsetHeight;
-
-			this.$element.addClass('collapsing').removeClass('collapse in');
-
-			this.$element.closest('.tile-collapse').removeClass('active');
-
-			this.transitioning = 1
-
-			var complete = function () {
-				this.transitioning = 0;
-				this.$element.removeClass('collapsing').addClass('collapse').trigger('hidden.bs.tile');
-				this.escape();
-			};
-
-			if (!$.support.transition) {
-				return complete.call(this);
-			};
-
-			this.$element[dimension](0).one('bsTransitionEnd', $.proxy(complete, this)).emulateTransitionEnd(Tile.TRANSITION_DURATION);
-		};
-
-		Tile.prototype.show = function () {
-			if (this.transitioning || this.$element.hasClass('in')) {
-				return;
-			};
-
-			var actives = this.$parent && this.$parent.find('.tile-collapse').children('.in, .collapsing');
-			var activesData;
-
-			if (actives && actives.length) {
-				activesData = actives.data('bs.tile');
-				if (activesData && activesData.transitioning) {
-					return;
-				};
-			};
-
-			var startEvent = $.Event('show.bs.tile');
-
-			this.$element.trigger(startEvent);
-
-			if (startEvent.isDefaultPrevented()) {
-				return;
-			};
-
-			if (actives && actives.length) {
-				Plugin.call(actives, 'hide');
-				activesData || actives.data('bs.tile', null);
-			};
-
-			var dimension = this.dimension();
-
-			this.$element.removeClass('collapse').addClass('collapsing')[dimension](0);
-
-			this.$element.closest('.tile-collapse').addClass('active');
-
-			this.transitioning = 1;
-
-			var complete = function () {
-				this.$element.removeClass('collapsing').addClass('collapse in')[dimension]('');
-				this.transitioning = 0;
-				this.$element.trigger('shown.bs.tile');
-				this.escape();
-			};
-
-			if (!$.support.transition) {
-				return complete.call(this);
-			};
-
-			var scrollSize = $.camelCase(['scroll', dimension].join('-'));
-
-			this.$element.one('bsTransitionEnd', $.proxy(complete, this)).emulateTransitionEnd(Tile.TRANSITION_DURATION)[dimension](this.$element[0][scrollSize]);
-		};
-
-		function getTargetFromTrigger($trigger) {
-			var href;
-			var target = $trigger.attr('data-target') || (href = $trigger.attr('href')) && href.replace(/.*(?=#[^\s]+$)/, '');
-
-			return $(target);
-		};
-
-		function Plugin(option) {
-			return this.each(function () {
-				var $this   = $(this);
-				var data    = $this.data('bs.tile');
-				var options = $.extend({}, Tile.DEFAULTS, $this.data(), typeof option == 'object' && option);
-
-				if (!data && options.toggle && /show|hide/.test(option)) {
-					options.toggle = false;
-				};
-
-				if (!data) {
-					$this.data('bs.tile', (data = new Tile(this, options)));
-				};
-
-				if (typeof option == 'string') {
-					data[option]();
-				};
-			})
-		};
-
-		var old = $.fn.tile;
-
-		$.fn.tile             = Plugin;
-		$.fn.tile.Constructor = Tile;
-
-		$.fn.tile.noConflict = function () {
-			$.fn.tile = old;
-			return this;
-		};
-
-		$(document).on('click.bs.tile.data-api', '[data-toggle="tile"]', function (e) {
-			var $this = $(this);
-
-			if (!$(e.target).is('[data-ignore="tile"], [data-ignore="tile"] *')) {
-				if (!$this.attr('data-target')) {
-					e.preventDefault();
-				};
-
-				var $target = getTargetFromTrigger($this);
-				var data    = $target.data('bs.tile');
-				var option  = data ? 'toggle' : $this.data();
-
-				Plugin.call($target, option);
-			};
-		});
-	}(jQuery));

File diff suppressed because it is too large
+ 0 - 5
public/theme/material/assets/js/wave.js


+ 0 - 428
public/theme/material/css/auth.css

@@ -1,428 +0,0 @@
-.authpage {
-  margin: 60px 0;
-  position: relative;
-}
-
-.authpage .tab-nav li {
-  width: 50%;
-}
-
-.authpage a {
-  text-decoration: none;
-}
-
-.rowtocol,
-.auth-main .form-group-label,
-.auth-top,
-.auth-bottom,
-.auth-row,
-.authpage .tab-nav {
-  flex-basis: 100%;
-}
-
-.auth-row,
-.authpage .card-main {
-  display: flex;
-  flex-wrap: wrap;
-  justify-content: center;
-}
-
-.auth-main {
-  background: white;
-  border-radius: 15px;
-  box-shadow: 0 0 7px 1px #c5c5c5;
-}
-
-.auth-main .form-group-label,
-.auth-top,
-.auth-bottom {
-  margin-bottom: 0;
-}
-
-.auth-main .form-group-label {
-  margin-left: 2em;
-  margin-right: 2em;
-}
-
-.auth-tg {
-  position: fixed;
-  z-index: 10;
-  max-width: 94%;
-}
-
-.auth-tg.cust-modelin {
-  transform: translate3d(0, 10rem, 0);
-}
-
-.auth-tg,
-.tip-fade {
-  transition-property: all;
-  transition-duration: 0.5s;
-}
-
-.tg-down {
-  top: 2em;
-}
-
-.tip-fade {
-  opacity: 0;
-}
-
-.tiphidden {
-  top: 0;
-  left: 0;
-}
-
-.auth-bottom {
-  margin-top: 20px;
-  background: #7ea8bd;
-  border-radius: 50% 50% 15px 15px;
-}
-
-.tgauth {
-  margin: 7px auto 8px;
-  display: flex;
-  position: relative;
-  justify-content: center;
-}
-
-.tgauth span {
-  position: relative;
-  color: white;
-  top: 15px;
-  margin-right: 6px;
-  text-shadow: 1px 1px 1px #333;
-  font-size: 13px;
-}
-
-.tgauth span:last-of-type {
-  margin-right: 0;
-  margin-left: 6px;
-}
-
-.tgauth p {
-  margin: 6px 0 12px;
-}
-
-.auth-bottom .btn {
-  border-radius: 50%;
-  padding: 10px;
-  color: white;
-  background: #54aff9;
-}
-
-.auth-bottom .btn i {
-  position: relative;
-  right: 1px;
-  top: 2px;
-}
-
-.auth-top {
-  justify-content: space-between;
-  align-items: flex-end;
-  background: #bbdefb;
-  border-radius: 15px 15px 0 0;
-}
-
-a.boardtop-right {
-  color: white;
-  background: #54aff9;
-  padding: 3px 1.5em 2px;
-  border-radius: 10px 0 0;
-  box-shadow: 0 0 5px 0 #969696;
-  position: relative;
-  text-align: center;
-}
-
-a.boardtop-right:hover {
-  transition: 0.4s all;
-  text-decoration: none;
-}
-
-a.boardtop-left {
-  color: white;
-  background: #54aff9;
-  padding: 3px 1.5em 2px;
-  border-radius: 0 10px 0 0;
-  box-shadow: 0 0 5px 0 #969696;
-  position: relative;
-}
-
-a.boardtop-left:hover {
-  text-decoration: none;
-}
-
-.backtohome div {
-  display: inline-block;
-}
-
-.backtohome i {
-  font-size: 40px;
-  position: relative;
-}
-
-.auth-top a div:last-of-type {
-  font-size: 13px;
-}
-
-.auth-help,
-.auth-help-table,
-.btn-auth,
-.tgauth,
-div#embed-captcha {
-  flex-basis: 100%;
-}
-
-.auth-help {
-  justify-content: center;
-  margin-top: 10px;
-}
-
-.auth-help-table {
-  justify-content: space-around;
-}
-
-.auth-help-table.auth-reset {
-  justify-content: center;
-}
-
-.btn-auth {
-  margin-left: 2em;
-  margin-right: 2em;
-  margin-top: 36px;
-  justify-content: center;
-}
-
-.btn-auth button {
-  background: #54aff9;
-}
-
-.auth-logo {
-  background: #bbdefb;
-  border-radius: 10px 10px 0 0;
-}
-
-.auth-logo img {
-  max-width: 100px;
-  border-radius: 50%;
-  margin: 1em 0;
-  box-shadow: 0 0 5px 0 #afafaf;
-  user-select: none;
-}
-
-.auth-help-reg {
-  position: absolute;
-}
-
-.auth-bottom p {
-  color: white;
-  font-size: 13px;
-  padding: 0 50px;
-  text-align: center;
-  position: relative;
-  top: 7px;
-}
-
-.auth-bottom .btn:hover {
-  border-radius: 5px;
-  transition: 0.4s all;
-}
-
-.auth-i-rotate {
-  transition: 1s all;
-  transform: rotate(1080deg);
-  transform-origin: 50% 50%;
-}
-
-.auth-reg.auth-bottom {
-  margin-top: 36px;
-}
-
-#telegram-qr img {
-  max-width: 200px;
-}
-
-@media screen and (min-width: 321px) {
-  .auth-main {
-    width: 300px;
-    margin-left: auto;
-    margin-right: auto;
-  }
-
-  .auth-tg {
-    max-width: 390px;
-    width: 90%;
-  }
-}
-
-@media screen and (min-width: 480px) {
-  .auth-main {
-    width: 390px;
-  }
-
-  .backtohome {
-    margin-right: 22%;
-  }
-
-  .auth-main .form-group-label {
-    margin-top: 40px;
-  }
-
-  #login {
-    margin-top: 5px;
-  }
-
-  .auth-tg.cust-modelin {
-    transform: translate3d(0, 15rem, 0);
-  }
-}
-
-@media screen and (min-width: 768px) {
-  .authpage {
-    margin-top: 120px;
-  }
-
-  .auth-reg.authpage {
-    margin-top: 80px;
-  }
-}
-
-@media screen and (min-width: 992px) {
-  .auth-main {
-    width: 85%;
-  }
-
-  .auth-col-one.auth-main {
-    width: 56%;
-  }
-
-  .auth-reg.auth-bottom {
-    margin-top: 60px;
-  }
-
-  .rowtocol {
-    flex-basis: 48%;
-    flex-wrap: wrap;
-    display: flex;
-  }
-
-  .rowtocol .rowtocol {
-    flex-basis: 50%;
-  }
-
-  .auth-help-table {
-    flex-basis: 56%;
-    justify-content: space-between;
-    margin-bottom: 20px;
-  }
-
-  a.boardtop-right,
-  a.boardtop-left,
-  .backtohome a div:first-of-type {
-    font-size: 20px;
-  }
-
-  a.boardtop-right {
-    padding: 5px 2em 3px;
-  }
-
-  a.boardtop-left {
-    padding: 5px 2em 3px;
-  }
-
-  .auth-top a div:last-of-type {
-    font-size: 16px;
-  }
-
-  #login,
-  #reset {
-    flex-basis: 74%;
-  }
-
-  .auth-col-one.auth-main div#embed-captcha {
-    flex-basis: 74%;
-  }
-
-  .auth-bottom .btn {
-    padding: 10px;
-  }
-
-  .auth-bottom .btn i {
-    font-size: 30px;
-    left: 0.5px;
-  }
-
-  .tgauth span {
-    font-size: 15px;
-    top: 24px;
-  }
-
-  .auth-help {
-    margin-top: 20px;
-  }
-
-  .auth-help-reg {
-    left: 18px;
-    width: 200px;
-  }
-
-  #login,
-  #reset,
-  .btn-reg {
-    font-size: 16px;
-    padding: 10px;
-    margin-top: 10px;
-  }
-
-  #tos {
-    height: 40px;
-    margin-top: 13px;
-  }
-
-  .btn-reg {
-    margin-top: 0;
-  }
-
-  .auth-row.row-login {
-    flex-basis: 40%;
-  }
-
-  .auth-col-one.auth-main .auth-row.row-login {
-    flex-basis: 66%;
-  }
-
-  .auth-main .form-group-label .form-control {
-    height: 40px;
-  }
-
-  .auth-main .floating-label {
-    font-size: 15px;
-    top: 13px;
-  }
-
-  .auth-main .form-group-label {
-    margin-top: 46px;
-  }
-
-  .auth-top {
-    margin-bottom: 10px;
-  }
-
-  .auth-logo img {
-    max-width: 130px;
-  }
-}
-
-@media screen and (min-width: 1440px) {
-  .auth-main {
-    width: 65%;
-  }
-
-  .auth-col-one.auth-main {
-    width: 38%;
-  }
-
-  .auth-help-reg {
-    left: 30px;
-  }
-}

File diff suppressed because it is too large
+ 0 - 0
public/theme/material/css/auth.min.css


+ 0 - 7108
public/theme/material/css/base.css

@@ -1,7108 +0,0 @@
-/*!
- * normalize.css v3.0.3
- * github.com/necolas/normalize.css
- */body,
-legend {
-  color: #515a6e;
-  padding: 0;
-}
-
-.float-clear::after,
-.float-clear::before {
-  content: "";
-  clear: both;
-  display: block;
-}
-
-body,
-fieldset,
-legend,
-td,
-th {
-  padding: 0;
-}
-
-audio,
-canvas,
-label,
-progress,
-video {
-  display: inline-block;
-  max-width: 100%;
-}
-
-.waves-effect,
-html {
-  position: relative;
-  -webkit-tap-highlight-color: transparent;
-}
-
-.btn,
-.waves-wrap {
-  user-select: none;
-  user-select: none;
-}
-
-.col-xx-1,
-.col-xx-10,
-.col-xx-11,
-.col-xx-12,
-.col-xx-2,
-.col-xx-3,
-.col-xx-4,
-.col-xx-5,
-.col-xx-6,
-.col-xx-7,
-.col-xx-8,
-.col-xx-9,
-.pull-left {
-  float: left;
-}
-
-.text-break,
-pre {
-  word-break: break-all;
-}
-
-a,
-body {
-  background-image: none;
-}
-
-.btn,
-.card-action-btn,
-.fbtn-text,
-.text-nowrap,
-.text-overflow {
-  white-space: nowrap;
-}
-
-.breadcrumb,
-.dropdown-menu,
-.nav {
-  list-style: none;
-}
-
-.picker__table,
-table {
-  border-collapse: collapse;
-  border-spacing: 0;
-}
-
-.picker__wrap,
-.tile-collapse {
-  -webkit-box-direction: normal;
-}
-
-.breadcrumb::after,
-.card-action::after,
-.clearfix::after,
-.container::after,
-.nav::after,
-.row::after,
-.snackbar-inner::after,
-.tile-footer::after,
-.tile-sub::after {
-  clear: both;
-}
-
-*,
-::after,
-::before {
-  box-sizing: border-box;
-}
-
-@viewport {
-  width: device-width;
-}
-
-body {
-  background-color: #f8f9fe;
-  background-attachment: fixed;
-  width: 100%;
-  background-repeat: no-repeat;
-  background-position: center;
-  background-size: cover;
-  font-family: "Helvetica Neue", Helvetica, Arial, "PingFang SC", "Hiragino Sans GB", "Microsoft YaHei", "WenQuanYi Micro Hei", sans-serif;
-  font-size: 15px;
-  font-weight: 400;
-  line-height: 20px;
-  margin: 0;
-  text-rendering: optimizelegibility;
-  -webkit-font-smoothing: subpixel-antialiased;
-}
-
-html {
-  font-family: sans-serif;
-  font-size: 100%;
-  min-height: 100%;
-  text-size-adjust: 100%;
-  text-size-adjust: 100%;
-}
-
-button,
-input,
-optgroup,
-select,
-textarea {
-  color: inherit;
-  font: inherit;
-  margin: 0;
-}
-
-button,
-input[type="button"],
-input[type="reset"],
-input[type="submit"] {
-  cursor: pointer;
-  appearance: button;
-}
-
-button,
-select {
-  text-transform: none;
-}
-
-button {
-  overflow: visible;
-}
-
-button[disabled],
-input[disabled] {
-  cursor: default;
-}
-
-button::-moz-focus-inner,
-input::-moz-focus-inner {
-  border: 0;
-  padding: 0;
-}
-
-fieldset {
-  border: 0;
-  margin: 0;
-  min-width: 0;
-}
-
-fieldset ~ fieldset {
-  margin-top: 24px;
-}
-
-dd,
-label {
-  margin: 0;
-}
-
-dl,
-ol,
-ul {
-  margin: 12px 0;
-}
-
-input {
-  line-height: normal;
-}
-
-input[type="checkbox"],
-input[type="radio"] {
-  line-height: normal;
-  margin: 4px 0 0;
-  padding: 0;
-}
-
-input[type="color"] {
-  min-width: 20px;
-  width: auto;
-}
-
-input[type="time"],
-input[type="date"],
-input[type="datetime-local"],
-input[type="month"] {
-  line-height: 20px;
-  line-height: 1\9;
-}
-
-input[type="file"] {
-  display: block;
-  height: auto;
-  line-height: 1;
-  min-height: 36px;
-  padding-top: 8px;
-  padding-bottom: 8px;
-}
-
-input[type="number"]::-webkit-inner-spin-button,
-input[type="number"]::-webkit-outer-spin-button {
-  height: auto;
-}
-
-input[type="range"] {
-  display: block;
-  height: 36px;
-  width: 100%;
-}
-
-input[type="search"] {
-  box-sizing: border-box;
-  appearance: none;
-}
-
-input[type="search"]::-webkit-search-cancel-button,
-input[type="search"]::-webkit-search-decoration {
-  appearance: none;
-}
-
-label {
-  font-weight: 500;
-}
-
-legend {
-  border: 0;
-  display: block;
-  font-size: 24px;
-  font-weight: 400;
-  line-height: 32px;
-  margin: 0 0 12px;
-  width: 100%;
-}
-
-.btn,
-.fbtn,
-dt,
-kbd kbd,
-optgroup {
-  font-weight: 500;
-}
-
-select[multiple],
-select[size] {
-  height: auto;
-}
-
-textarea {
-  overflow: auto;
-}
-
-.access-hide,
-.waves-wrap,
-svg:not(:root) {
-  overflow: hidden;
-}
-
-dd,
-dt,
-li {
-  line-height: 20px;
-}
-
-ol,
-ul {
-  padding: 0 0 0 32px;
-}
-
-ol ol,
-ol ul,
-ul ol,
-ul ul {
-  margin-top: 0;
-  margin-bottom: 0;
-}
-
-th {
-  text-align: left;
-}
-
-a {
-  background-color: transparent;
-  color: #399af2;
-  text-decoration: none;
-}
-
-a:focus,
-a:hover {
-  color: #13c2c2;
-  outline: 0;
-  text-decoration: underline;
-}
-
-abbr[title] {
-  border-bottom: 1px dashed rgb(0 0 0 / 12%);
-  cursor: help;
-}
-
-dfn {
-  font-style: italic;
-}
-
-.h1,
-.h2,
-.h3,
-.h4,
-.h5,
-.h6,
-h1,
-h2,
-h3,
-h4,
-h5,
-h6 {
-  color: inherit;
-  font-family: "Helvetica Neue", Helvetica, Arial, "PingFang SC", "Hiragino Sans GB", "Microsoft YaHei", "WenQuanYi Micro Hei", sans-serif;
-  font-weight: 400;
-  margin-top: 48px;
-  margin-bottom: 12px;
-}
-
-address,
-p {
-  margin: 12px 0;
-}
-
-.h1,
-h1 {
-  font-size: 44px;
-  line-height: 48px;
-}
-
-.h2,
-h2 {
-  font-size: 34px;
-  line-height: 40px;
-}
-
-.h3,
-h3 {
-  font-size: 24px;
-  line-height: 32px;
-}
-
-.h4,
-h4 {
-  font-size: 20px;
-  line-height: 28px;
-}
-
-.h5,
-h5 {
-  font-size: 16px;
-  line-height: 24px;
-}
-
-.h6,
-address,
-h6 {
-  line-height: 20px;
-}
-
-.h6,
-h6 {
-  font-size: 12px;
-}
-
-.h1 small,
-.h2 small,
-.h3 small,
-.h4 small,
-h1 small,
-h2 small,
-h3 small,
-h4 small {
-  font-size: 14px;
-}
-
-small {
-  font-size: 75%;
-  line-height: 1;
-}
-
-sub,
-sup {
-  font-size: 80%;
-  line-height: 0;
-  position: relative;
-  vertical-align: baseline;
-}
-
-sub {
-  bottom: -0.25em;
-}
-
-sup {
-  top: -0.5em;
-}
-
-address {
-  font-size: 14px;
-  font-style: normal;
-  font-weight: 400;
-}
-
-article,
-aside,
-details,
-figcaption,
-figure,
-footer,
-header,
-hgroup,
-main,
-menu,
-nav,
-section,
-summary {
-  display: block;
-}
-
-audio,
-canvas,
-progress,
-video {
-  vertical-align: baseline;
-}
-
-audio:not([controls]) {
-  display: none;
-  height: 0;
-}
-
-blockquote,
-q {
-  font-size: 20px;
-  font-style: italic;
-  font-weight: 300;
-  line-height: 28px;
-  margin: 24px 0;
-  padding-right: 32px;
-  padding-left: 32px;
-  position: relative;
-}
-
-figure {
-  margin: 1em 40px;
-}
-
-.hr,
-hr {
-  border: 0;
-  border-top: 1px solid rgb(0 0 0 / 12%);
-  box-sizing: content-box;
-  display: block;
-  height: 0;
-  margin-top: 24px;
-  margin-bottom: 24px;
-}
-
-img {
-  border: 0;
-  vertical-align: middle;
-}
-
-[hidden],
-template {
-  display: none;
-}
-
-.container::after,
-.container::before,
-.row::after,
-.row::before {
-  content: "";
-  display: table;
-  line-height: 0;
-}
-/*!
- * bootstrap v3.3.5 (http://getbootstrap.com)
- * based on bootstrap's grid system
-*/.col-lg-1,
-.col-lg-10,
-.col-lg-11,
-.col-lg-12,
-.col-lg-2,
-.col-lg-3,
-.col-lg-4,
-.col-lg-5,
-.col-lg-6,
-.col-lg-7,
-.col-lg-8,
-.col-lg-9,
-.col-md-1,
-.col-md-10,
-.col-md-11,
-.col-md-12,
-.col-md-2,
-.col-md-3,
-.col-md-4,
-.col-md-5,
-.col-md-6,
-.col-md-7,
-.col-md-8,
-.col-md-9,
-.col-sm-1,
-.col-sm-10,
-.col-sm-11,
-.col-sm-12,
-.col-sm-2,
-.col-sm-3,
-.col-sm-4,
-.col-sm-5,
-.col-sm-6,
-.col-sm-7,
-.col-sm-8,
-.col-sm-9,
-.col-xs-1,
-.col-xs-10,
-.col-xs-11,
-.col-xs-12,
-.col-xs-2,
-.col-xs-3,
-.col-xs-4,
-.col-xs-5,
-.col-xs-6,
-.col-xs-7,
-.col-xs-8,
-.col-xs-9,
-.col-xx-1,
-.col-xx-10,
-.col-xx-11,
-.col-xx-12,
-.col-xx-2,
-.col-xx-3,
-.col-xx-4,
-.col-xx-5,
-.col-xx-6,
-.col-xx-7,
-.col-xx-8,
-.col-xx-9 {
-  min-height: 1px;
-  position: relative;
-  padding-left: 16px;
-  padding-right: 16px;
-}
-
-.col-xx-1 {
-  width: 8.33333%;
-}
-
-.col-xx-2 {
-  width: 16.66667%;
-}
-
-.col-xx-3 {
-  width: 25%;
-}
-
-.col-xx-4 {
-  width: 33.33333%;
-}
-
-.col-xx-5 {
-  width: 41.66667%;
-}
-
-.col-xx-6 {
-  width: 50%;
-}
-
-.col-xx-7 {
-  width: 58.33333%;
-}
-
-.col-xx-8 {
-  width: 66.66667%;
-}
-
-.col-xx-9 {
-  width: 75%;
-}
-
-.col-xx-10 {
-  width: 83.33333%;
-}
-
-.col-xx-11 {
-  width: 91.66667%;
-}
-
-.col-xx-12 {
-  width: 100%;
-}
-
-.col-xx-offset-0 {
-  margin-left: 0;
-}
-
-.col-xx-offset-1 {
-  margin-left: 8.33333%;
-}
-
-.col-xx-offset-2 {
-  margin-left: 16.66667%;
-}
-
-.col-xx-offset-3 {
-  margin-left: 25%;
-}
-
-.col-xx-offset-4 {
-  margin-left: 33.33333%;
-}
-
-.col-xx-offset-5 {
-  margin-left: 41.66667%;
-}
-
-.col-xx-offset-6 {
-  margin-left: 50%;
-}
-
-.col-xx-offset-7 {
-  margin-left: 58.33333%;
-}
-
-.col-xx-offset-8 {
-  margin-left: 66.66667%;
-}
-
-.col-xx-offset-9 {
-  margin-left: 75%;
-}
-
-.col-xx-offset-10 {
-  margin-left: 83.33333%;
-}
-
-.col-xx-offset-11 {
-  margin-left: 91.66667%;
-}
-
-.col-xx-offset-12 {
-  margin-left: 100%;
-}
-
-.col-xx-pull-0 {
-  right: 0;
-}
-
-.col-xx-pull-1 {
-  right: 8.33333%;
-}
-
-.col-xx-pull-2 {
-  right: 16.66667%;
-}
-
-.col-xx-pull-3 {
-  right: 25%;
-}
-
-.col-xx-pull-4 {
-  right: 33.33333%;
-}
-
-.col-xx-pull-5 {
-  right: 41.66667%;
-}
-
-.col-xx-pull-6 {
-  right: 50%;
-}
-
-.col-xx-pull-7 {
-  right: 58.33333%;
-}
-
-.col-xx-pull-8 {
-  right: 66.66667%;
-}
-
-.col-xx-pull-9 {
-  right: 75%;
-}
-
-.col-xx-pull-10 {
-  right: 83.33333%;
-}
-
-.col-xx-pull-11 {
-  right: 91.66667%;
-}
-
-.col-xx-pull-12 {
-  right: 100%;
-}
-
-.col-xx-push-0 {
-  left: 0;
-}
-
-.col-xx-push-1 {
-  left: 8.33333%;
-}
-
-.col-xx-push-2 {
-  left: 16.66667%;
-}
-
-.col-xx-push-3 {
-  left: 25%;
-}
-
-.col-xx-push-4 {
-  left: 33.33333%;
-}
-
-.col-xx-push-5 {
-  left: 41.66667%;
-}
-
-.col-xx-push-6 {
-  left: 50%;
-}
-
-.col-xx-push-7 {
-  left: 58.33333%;
-}
-
-.col-xx-push-8 {
-  left: 66.66667%;
-}
-
-.col-xx-push-9 {
-  left: 75%;
-}
-
-.col-xx-push-10 {
-  left: 83.33333%;
-}
-
-.col-xx-push-11 {
-  left: 91.66667%;
-}
-
-.col-xx-push-12 {
-  left: 100%;
-}
-
-@media only screen and (min-width: 480px) {
-  .col-xs-1,
-  .col-xs-10,
-  .col-xs-11,
-  .col-xs-12,
-  .col-xs-2,
-  .col-xs-3,
-  .col-xs-4,
-  .col-xs-5,
-  .col-xs-6,
-  .col-xs-7,
-  .col-xs-8,
-  .col-xs-9 {
-    float: left;
-  }
-
-  .col-xs-1 {
-    width: 8.33333%;
-  }
-
-  .col-xs-2 {
-    width: 16.66667%;
-  }
-
-  .col-xs-3 {
-    width: 25%;
-  }
-
-  .col-xs-4 {
-    width: 33.33333%;
-  }
-
-  .col-xs-5 {
-    width: 41.66667%;
-  }
-
-  .col-xs-6 {
-    width: 50%;
-  }
-
-  .col-xs-7 {
-    width: 58.33333%;
-  }
-
-  .col-xs-8 {
-    width: 66.66667%;
-  }
-
-  .col-xs-9 {
-    width: 75%;
-  }
-
-  .col-xs-10 {
-    width: 83.33333%;
-  }
-
-  .col-xs-11 {
-    width: 91.66667%;
-  }
-
-  .col-xs-12 {
-    width: 100%;
-  }
-
-  .col-xs-offset-0 {
-    margin-left: 0;
-  }
-
-  .col-xs-offset-1 {
-    margin-left: 8.33333%;
-  }
-
-  .col-xs-offset-2 {
-    margin-left: 16.66667%;
-  }
-
-  .col-xs-offset-3 {
-    margin-left: 25%;
-  }
-
-  .col-xs-offset-4 {
-    margin-left: 33.33333%;
-  }
-
-  .col-xs-offset-5 {
-    margin-left: 41.66667%;
-  }
-
-  .col-xs-offset-6 {
-    margin-left: 50%;
-  }
-
-  .col-xs-offset-7 {
-    margin-left: 58.33333%;
-  }
-
-  .col-xs-offset-8 {
-    margin-left: 66.66667%;
-  }
-
-  .col-xs-offset-9 {
-    margin-left: 75%;
-  }
-
-  .col-xs-offset-10 {
-    margin-left: 83.33333%;
-  }
-
-  .col-xs-offset-11 {
-    margin-left: 91.66667%;
-  }
-
-  .col-xs-offset-12 {
-    margin-left: 100%;
-  }
-
-  .col-xs-pull-0 {
-    right: 0;
-  }
-
-  .col-xs-pull-1 {
-    right: 8.33333%;
-  }
-
-  .col-xs-pull-2 {
-    right: 16.66667%;
-  }
-
-  .col-xs-pull-3 {
-    right: 25%;
-  }
-
-  .col-xs-pull-4 {
-    right: 33.33333%;
-  }
-
-  .col-xs-pull-5 {
-    right: 41.66667%;
-  }
-
-  .col-xs-pull-6 {
-    right: 50%;
-  }
-
-  .col-xs-pull-7 {
-    right: 58.33333%;
-  }
-
-  .col-xs-pull-8 {
-    right: 66.66667%;
-  }
-
-  .col-xs-pull-9 {
-    right: 75%;
-  }
-
-  .col-xs-pull-10 {
-    right: 83.33333%;
-  }
-
-  .col-xs-pull-11 {
-    right: 91.66667%;
-  }
-
-  .col-xs-pull-12 {
-    right: 100%;
-  }
-
-  .col-xs-push-0 {
-    left: 0;
-  }
-
-  .col-xs-push-1 {
-    left: 8.33333%;
-  }
-
-  .col-xs-push-2 {
-    left: 16.66667%;
-  }
-
-  .col-xs-push-3 {
-    left: 25%;
-  }
-
-  .col-xs-push-4 {
-    left: 33.33333%;
-  }
-
-  .col-xs-push-5 {
-    left: 41.66667%;
-  }
-
-  .col-xs-push-6 {
-    left: 50%;
-  }
-
-  .col-xs-push-7 {
-    left: 58.33333%;
-  }
-
-  .col-xs-push-8 {
-    left: 66.66667%;
-  }
-
-  .col-xs-push-9 {
-    left: 75%;
-  }
-
-  .col-xs-push-10 {
-    left: 83.33333%;
-  }
-
-  .col-xs-push-11 {
-    left: 91.66667%;
-  }
-
-  .col-xs-push-12 {
-    left: 100%;
-  }
-}
-
-@media only screen and (min-width: 768px) {
-  .col-sm-1,
-  .col-sm-10,
-  .col-sm-11,
-  .col-sm-12,
-  .col-sm-2,
-  .col-sm-3,
-  .col-sm-4,
-  .col-sm-5,
-  .col-sm-6,
-  .col-sm-7,
-  .col-sm-8,
-  .col-sm-9 {
-    float: left;
-  }
-
-  .col-sm-1 {
-    width: 8.33333%;
-  }
-
-  .col-sm-2 {
-    width: 16.66667%;
-  }
-
-  .col-sm-3 {
-    width: 25%;
-  }
-
-  .col-sm-4 {
-    width: 33.33333%;
-  }
-
-  .col-sm-5 {
-    width: 41.66667%;
-  }
-
-  .col-sm-6 {
-    width: 50%;
-  }
-
-  .col-sm-7 {
-    width: 58.33333%;
-  }
-
-  .col-sm-8 {
-    width: 66.66667%;
-  }
-
-  .col-sm-9 {
-    width: 75%;
-  }
-
-  .col-sm-10 {
-    width: 83.33333%;
-  }
-
-  .col-sm-11 {
-    width: 91.66667%;
-  }
-
-  .col-sm-12 {
-    width: 100%;
-  }
-
-  .col-sm-offset-0 {
-    margin-left: 0;
-  }
-
-  .col-sm-offset-1 {
-    margin-left: 8.33333%;
-  }
-
-  .col-sm-offset-2 {
-    margin-left: 16.66667%;
-  }
-
-  .col-sm-offset-3 {
-    margin-left: 25%;
-  }
-
-  .col-sm-offset-4 {
-    margin-left: 33.33333%;
-  }
-
-  .col-sm-offset-5 {
-    margin-left: 41.66667%;
-  }
-
-  .col-sm-offset-6 {
-    margin-left: 50%;
-  }
-
-  .col-sm-offset-7 {
-    margin-left: 58.33333%;
-  }
-
-  .col-sm-offset-8 {
-    margin-left: 66.66667%;
-  }
-
-  .col-sm-offset-9 {
-    margin-left: 75%;
-  }
-
-  .col-sm-offset-10 {
-    margin-left: 83.33333%;
-  }
-
-  .col-sm-offset-11 {
-    margin-left: 91.66667%;
-  }
-
-  .col-sm-offset-12 {
-    margin-left: 100%;
-  }
-
-  .col-sm-pull-0 {
-    right: 0;
-  }
-
-  .col-sm-pull-1 {
-    right: 8.33333%;
-  }
-
-  .col-sm-pull-2 {
-    right: 16.66667%;
-  }
-
-  .col-sm-pull-3 {
-    right: 25%;
-  }
-
-  .col-sm-pull-4 {
-    right: 33.33333%;
-  }
-
-  .col-sm-pull-5 {
-    right: 41.66667%;
-  }
-
-  .col-sm-pull-6 {
-    right: 50%;
-  }
-
-  .col-sm-pull-7 {
-    right: 58.33333%;
-  }
-
-  .col-sm-pull-8 {
-    right: 66.66667%;
-  }
-
-  .col-sm-pull-9 {
-    right: 75%;
-  }
-
-  .col-sm-pull-10 {
-    right: 83.33333%;
-  }
-
-  .col-sm-pull-11 {
-    right: 91.66667%;
-  }
-
-  .col-sm-pull-12 {
-    right: 100%;
-  }
-
-  .col-sm-push-0 {
-    left: 0;
-  }
-
-  .col-sm-push-1 {
-    left: 8.33333%;
-  }
-
-  .col-sm-push-2 {
-    left: 16.66667%;
-  }
-
-  .col-sm-push-3 {
-    left: 25%;
-  }
-
-  .col-sm-push-4 {
-    left: 33.33333%;
-  }
-
-  .col-sm-push-5 {
-    left: 41.66667%;
-  }
-
-  .col-sm-push-6 {
-    left: 50%;
-  }
-
-  .col-sm-push-7 {
-    left: 58.33333%;
-  }
-
-  .col-sm-push-8 {
-    left: 66.66667%;
-  }
-
-  .col-sm-push-9 {
-    left: 75%;
-  }
-
-  .col-sm-push-10 {
-    left: 83.33333%;
-  }
-
-  .col-sm-push-11 {
-    left: 91.66667%;
-  }
-
-  .col-sm-push-12 {
-    left: 100%;
-  }
-}
-
-@media only screen and (min-width: 992px) {
-  .col-md-1,
-  .col-md-10,
-  .col-md-11,
-  .col-md-12,
-  .col-md-2,
-  .col-md-3,
-  .col-md-4,
-  .col-md-5,
-  .col-md-6,
-  .col-md-7,
-  .col-md-8,
-  .col-md-9 {
-    float: left;
-  }
-
-  .col-md-1 {
-    width: 8.33333%;
-  }
-
-  .col-md-2 {
-    width: 16.66667%;
-  }
-
-  .col-md-3 {
-    width: 25%;
-  }
-
-  .col-md-4 {
-    width: 33.33333%;
-  }
-
-  .col-md-5 {
-    width: 41.66667%;
-  }
-
-  .col-md-6 {
-    width: 50%;
-  }
-
-  .col-md-7 {
-    width: 58.33333%;
-  }
-
-  .col-md-8 {
-    width: 66.66667%;
-  }
-
-  .col-md-9 {
-    width: 75%;
-  }
-
-  .col-md-10 {
-    width: 83.33333%;
-  }
-
-  .col-md-11 {
-    width: 91.66667%;
-  }
-
-  .col-md-12 {
-    width: 100%;
-  }
-
-  .col-md-offset-0 {
-    margin-left: 0;
-  }
-
-  .col-md-offset-1 {
-    margin-left: 8.33333%;
-  }
-
-  .col-md-offset-2 {
-    margin-left: 16.66667%;
-  }
-
-  .col-md-offset-3 {
-    margin-left: 25%;
-  }
-
-  .col-md-offset-4 {
-    margin-left: 33.33333%;
-  }
-
-  .col-md-offset-5 {
-    margin-left: 41.66667%;
-  }
-
-  .col-md-offset-6 {
-    margin-left: 50%;
-  }
-
-  .col-md-offset-7 {
-    margin-left: 58.33333%;
-  }
-
-  .col-md-offset-8 {
-    margin-left: 66.66667%;
-  }
-
-  .col-md-offset-9 {
-    margin-left: 75%;
-  }
-
-  .col-md-offset-10 {
-    margin-left: 83.33333%;
-  }
-
-  .col-md-offset-11 {
-    margin-left: 91.66667%;
-  }
-
-  .col-md-offset-12 {
-    margin-left: 100%;
-  }
-
-  .col-md-pull-0 {
-    right: 0;
-  }
-
-  .col-md-pull-1 {
-    right: 8.33333%;
-  }
-
-  .col-md-pull-2 {
-    right: 16.66667%;
-  }
-
-  .col-md-pull-3 {
-    right: 25%;
-  }
-
-  .col-md-pull-4 {
-    right: 33.33333%;
-  }
-
-  .col-md-pull-5 {
-    right: 41.66667%;
-  }
-
-  .col-md-pull-6 {
-    right: 50%;
-  }
-
-  .col-md-pull-7 {
-    right: 58.33333%;
-  }
-
-  .col-md-pull-8 {
-    right: 66.66667%;
-  }
-
-  .col-md-pull-9 {
-    right: 75%;
-  }
-
-  .col-md-pull-10 {
-    right: 83.33333%;
-  }
-
-  .col-md-pull-11 {
-    right: 91.66667%;
-  }
-
-  .col-md-pull-12 {
-    right: 100%;
-  }
-
-  .col-md-push-0 {
-    left: 0;
-  }
-
-  .col-md-push-1 {
-    left: 8.33333%;
-  }
-
-  .col-md-push-2 {
-    left: 16.66667%;
-  }
-
-  .col-md-push-3 {
-    left: 25%;
-  }
-
-  .col-md-push-4 {
-    left: 33.33333%;
-  }
-
-  .col-md-push-5 {
-    left: 41.66667%;
-  }
-
-  .col-md-push-6 {
-    left: 50%;
-  }
-
-  .col-md-push-7 {
-    left: 58.33333%;
-  }
-
-  .col-md-push-8 {
-    left: 66.66667%;
-  }
-
-  .col-md-push-9 {
-    left: 75%;
-  }
-
-  .col-md-push-10 {
-    left: 83.33333%;
-  }
-
-  .col-md-push-11 {
-    left: 91.66667%;
-  }
-
-  .col-md-push-12 {
-    left: 100%;
-  }
-
-  .container {
-    max-width: 960px;
-  }
-}
-
-@media only screen and (min-width: 1440px) {
-  .col-lg-1,
-  .col-lg-10,
-  .col-lg-11,
-  .col-lg-12,
-  .col-lg-2,
-  .col-lg-3,
-  .col-lg-4,
-  .col-lg-5,
-  .col-lg-6,
-  .col-lg-7,
-  .col-lg-8,
-  .col-lg-9 {
-    float: left;
-  }
-
-  .col-lg-1 {
-    width: 8.33333%;
-  }
-
-  .col-lg-2 {
-    width: 16.66667%;
-  }
-
-  .col-lg-3 {
-    width: 25%;
-  }
-
-  .col-lg-4 {
-    width: 33.33333%;
-  }
-
-  .col-lg-5 {
-    width: 41.66667%;
-  }
-
-  .col-lg-6 {
-    width: 50%;
-  }
-
-  .col-lg-7 {
-    width: 58.33333%;
-  }
-
-  .col-lg-8 {
-    width: 66.66667%;
-  }
-
-  .col-lg-9 {
-    width: 75%;
-  }
-
-  .col-lg-10 {
-    width: 83.33333%;
-  }
-
-  .col-lg-11 {
-    width: 91.66667%;
-  }
-
-  .col-lg-12 {
-    width: 100%;
-  }
-
-  .col-lg-offset-0 {
-    margin-left: 0;
-  }
-
-  .col-lg-offset-1 {
-    margin-left: 8.33333%;
-  }
-
-  .col-lg-offset-2 {
-    margin-left: 16.66667%;
-  }
-
-  .col-lg-offset-3 {
-    margin-left: 25%;
-  }
-
-  .col-lg-offset-4 {
-    margin-left: 33.33333%;
-  }
-
-  .col-lg-offset-5 {
-    margin-left: 41.66667%;
-  }
-
-  .col-lg-offset-6 {
-    margin-left: 50%;
-  }
-
-  .col-lg-offset-7 {
-    margin-left: 58.33333%;
-  }
-
-  .col-lg-offset-8 {
-    margin-left: 66.66667%;
-  }
-
-  .col-lg-offset-9 {
-    margin-left: 75%;
-  }
-
-  .col-lg-offset-10 {
-    margin-left: 83.33333%;
-  }
-
-  .col-lg-offset-11 {
-    margin-left: 91.66667%;
-  }
-
-  .col-lg-offset-12 {
-    margin-left: 100%;
-  }
-
-  .col-lg-pull-0 {
-    right: 0;
-  }
-
-  .col-lg-pull-1 {
-    right: 8.33333%;
-  }
-
-  .col-lg-pull-2 {
-    right: 16.66667%;
-  }
-
-  .col-lg-pull-3 {
-    right: 25%;
-  }
-
-  .col-lg-pull-4 {
-    right: 33.33333%;
-  }
-
-  .col-lg-pull-5 {
-    right: 41.66667%;
-  }
-
-  .col-lg-pull-6 {
-    right: 50%;
-  }
-
-  .col-lg-pull-7 {
-    right: 58.33333%;
-  }
-
-  .col-lg-pull-8 {
-    right: 66.66667%;
-  }
-
-  .col-lg-pull-9 {
-    right: 75%;
-  }
-
-  .col-lg-pull-10 {
-    right: 83.33333%;
-  }
-
-  .col-lg-pull-11 {
-    right: 91.66667%;
-  }
-
-  .col-lg-pull-12 {
-    right: 100%;
-  }
-
-  .col-lg-push-0 {
-    left: 0;
-  }
-
-  .col-lg-push-1 {
-    left: 8.33333%;
-  }
-
-  .col-lg-push-2 {
-    left: 16.66667%;
-  }
-
-  .col-lg-push-3 {
-    left: 25%;
-  }
-
-  .col-lg-push-4 {
-    left: 33.33333%;
-  }
-
-  .col-lg-push-5 {
-    left: 41.66667%;
-  }
-
-  .col-lg-push-6 {
-    left: 50%;
-  }
-
-  .col-lg-push-7 {
-    left: 58.33333%;
-  }
-
-  .col-lg-push-8 {
-    left: 66.66667%;
-  }
-
-  .col-lg-push-9 {
-    left: 75%;
-  }
-
-  .col-lg-push-10 {
-    left: 83.33333%;
-  }
-
-  .col-lg-push-11 {
-    left: 91.66667%;
-  }
-
-  .col-lg-push-12 {
-    left: 100%;
-  }
-}
-
-.container {
-  margin-right: auto;
-  margin-left: auto;
-  padding-right: 10px;
-  padding-left: 10px;
-}
-
-@media only screen and (min-width: 1440px) {
-  .container {
-    max-width: 1408px;
-  }
-}
-
-.container-full {
-  max-width: none;
-}
-
-.row {
-  margin-right: -10px;
-  margin-left: -10px;
-}
-
-/*!
- * material icons v2.2.0
- * http://google.github.io/material-design-icons/#icon-font-for-the-web
- */
-
-.breadcrumb > li + li::before,
-.icon {
-  display: inline-block;
-  font-family: "Material Icons";
-  font-feature-settings: "liga";
-  font-feature-settings: "liga";
-  font-size: inherit;
-  font-style: normal;
-  font-weight: 400;
-  height: 1em;
-  letter-spacing: normal;
-  line-height: 1;
-  overflow: hidden;
-  text-rendering: optimizelegibility;
-  text-transform: none;
-  vertical-align: -16%;
-  white-space: nowrap;
-  width: 1em;
-  word-wrap: normal;
-  -webkit-font-smoothing: antialiased;
-  -moz-osx-font-smoothing: grayscale;
-}
-
-.icon-2x {
-  font-size: 2em;
-}
-
-.icon-3x {
-  font-size: 3em;
-}
-
-.icon-4x {
-  font-size: 4em;
-}
-
-.icon-5x {
-  font-size: 5em;
-}
-
-/* ICON图标大小 */
-.icon-lg {
-  font-size: 1.4em;
-}
-
-/* ICON菜单图标大小 */
-.icon-cd {
-  font-size: 2.2em;
-}
-
-/*!
- * waves v0.7.4
- * http://fian.my.id/Waves
- */.waves-effect .waves-ripple {
-  background-clip: content-box;
-  background-color: rgb(0 0 0 / 30%);
-  border-radius: 50%;
-  height: 60px;
-  margin-top: -30px;
-  margin-left: -30px;
-  opacity: 0;
-  position: absolute;
-  transform: scale(0) translate(0, 0);
-  transform: scale(0) translate(0, 0);
-  transition-duration: 0.6s;
-  transition-duration: 0.6s;
-  transition-property: opacity, -webkit-transform;
-  transition-property: opacity, transform, -webkit-transform;
-  transition-timing-function: cubic-bezier(0.4, 0, 0.2, 1);
-  transition-timing-function: cubic-bezier(0.4, 0, 0.2, 1);
-  width: 60px;
-}
-
-.waves-effect.waves-light .waves-ripple {
-  background-color: rgb(255 255 255 / 30%);
-}
-
-.waves-wrap {
-  pointer-events: none;
-  position: absolute;
-  top: 0;
-  right: 0;
-  bottom: 0;
-  left: 0;
-  user-select: none;
-  user-select: none;
-}
-
-.waves-circle > .waves-wrap {
-  border-radius: 50%;
-  mask: url();
-  mask: url();
-  transform: translateZ(0);
-  transform: translateZ(0);
-  mask-image: radial-gradient(circle, #fff 100%, #000 100%);
-}
-
-@media print {
-  blockquote,
-  img,
-  pre,
-  tr {
-    page-break-inside: avoid;
-  }
-
-  *,
-  ::after,
-  ::before {
-    background: 0 0 !important;
-    box-shadow: none !important;
-    text-shadow: none !important;
-  }
-
-  a,
-  a:visited {
-    text-decoration: underline;
-  }
-
-  a[href]::after {
-    content: " (" attr(href) ")";
-  }
-
-  a[href^="#"]::after,
-  a[href^="javascript:"]::after {
-    content: "";
-  }
-
-  abbr[title]::after {
-    content: " (" attr(title) ")";
-  }
-
-  blockquote,
-  pre {
-    border: 1px solid #dadada;
-  }
-
-  img {
-    max-width: 100% !important;
-  }
-
-  h2,
-  h3,
-  p {
-    orphans: 3;
-    widows: 3;
-  }
-
-  h2,
-  h3 {
-    page-break-after: avoid;
-  }
-
-  thead {
-    display: table-header-group;
-  }
-
-  .hidden-print {
-    display: none !important;
-  }
-
-  .card,
-  .card-img,
-  .card-side {
-    border-radius: 0 !important;
-  }
-
-  .card,
-  .tile {
-    border: 1px solid #dadada;
-  }
-}
-
-.visible-print-block {
-  display: none !important;
-}
-
-@media print {
-  .visible-print-block {
-    display: block !important;
-  }
-}
-
-.visible-print-inline {
-  display: none !important;
-}
-
-@media print {
-  .visible-print-inline {
-    display: inline !important;
-  }
-}
-
-.visible-print-inline-block {
-  display: none !important;
-}
-
-@media print {
-  .visible-print-inline-block {
-    display: inline-block !important;
-  }
-}
-
-.access-hide {
-  border: 0;
-  clip: rect(0, 0, 0, 0);
-  height: 1px;
-  margin: -1px;
-  padding: 0;
-  position: absolute;
-  width: 1px;
-}
-
-.access-hide.focusable:active,
-.access-hide.focusable:focus {
-  clip: auto;
-  height: auto;
-  margin: 0;
-  overflow: visible;
-  position: static;
-  width: auto;
-}
-
-.collapsible-region,
-.collapsing,
-.media,
-.media-inner {
-  overflow: hidden;
-}
-
-.btn,
-.collapsing,
-.el-loading {
-  position: relative;
-}
-
-.clearfix::after,
-.clearfix::before {
-  content: "";
-  display: table;
-  line-height: 0;
-}
-
-.collapse {
-  display: none;
-}
-
-.collapse.in {
-  display: block;
-}
-
-.collapsed > .collapsed-hide,
-:not(.collapsed) > .collapsed-show {
-  display: none;
-}
-
-.collapsing {
-  height: 0;
-  transition: height 0.3s cubic-bezier(0.4, 0, 0.2, 1);
-  transition: height 0.3s cubic-bezier(0.4, 0, 0.2, 1);
-}
-
-.el-loading-indicator {
-  background-color: #fff;
-  font-family: sans-serif !important;
-  height: 100%;
-  min-height: 4px;
-  overflow: hidden;
-  padding: 24px 16px;
-  position: absolute;
-  top: 0;
-  left: 0;
-  text-align: center;
-  width: 100%;
-  z-index: 2;
-}
-
-.el-loading-done > .el-loading-indicator {
-  opacity: 0;
-  transform: scale(0, 0);
-  transform: scale(0, 0);
-  transition: opacity 0.3s cubic-bezier(0.4, 0, 0.2, 1), -webkit-transform 0s 0.3s;
-  transition: opacity 0.3s cubic-bezier(0.4, 0, 0.2, 1), -webkit-transform 0s 0.3s;
-  transition: opacity 0.3s cubic-bezier(0.4, 0, 0.2, 1), transform 0s 0.3s;
-  transition: opacity 0.3s cubic-bezier(0.4, 0, 0.2, 1), transform 0s 0.3s, -webkit-transform 0s 0.3s;
-}
-
-.btn::after,
-.fade {
-  transition: opacity 0.3s cubic-bezier(0.4, 0, 0.2, 1);
-}
-
-.el-loading-indicator-fixed {
-  position: fixed;
-  z-index: 41;
-}
-
-.el-loading-indicator-linear {
-  padding: 0 !important;
-}
-
-.fade {
-  opacity: 0;
-  transition: opacity 0.3s cubic-bezier(0.4, 0, 0.2, 1);
-}
-
-.fade.in {
-  opacity: 1;
-}
-
-.iframe-seamless {
-  border: 0;
-  display: block;
-  height: 100%;
-  margin: 0;
-  padding: 0;
-  width: 100%;
-}
-
-.img-responsive {
-  display: block;
-  height: auto;
-  max-width: 100%;
-  width: 100%\9;
-}
-
-.list-clear,
-.list-inline {
-  list-style: none;
-  padding-left: 0;
-}
-
-.list-inline {
-  margin-left: -8px;
-}
-
-.list-inline > li {
-  display: inline-block;
-  padding-right: 8px;
-  padding-left: 8px;
-}
-
-.margin-bottom {
-  margin-bottom: 24px !important;
-}
-
-.margin-bottom-lg {
-  margin-bottom: 48px !important;
-}
-
-.margin-bottom-no {
-  margin-bottom: 0 !important;
-}
-
-.margin-bottom-sm {
-  margin-bottom: 12px !important;
-}
-
-.margin-bottom-xs {
-  margin-bottom: 8px !important;
-}
-
-.margin-left {
-  margin-left: 16px !important;
-}
-
-.margin-left-lg {
-  margin-left: 32px !important;
-}
-
-.margin-left-no {
-  margin-left: 0 !important;
-}
-
-.margin-left-sm {
-  margin-left: 8px !important;
-}
-
-.margin-left-xs {
-  margin-left: 4px !important;
-}
-
-.margin-no {
-  margin: 0 !important;
-}
-
-.margin-right {
-  margin-right: 16px !important;
-}
-
-.margin-right-lg {
-  margin-right: 32px !important;
-}
-
-.margin-right-no {
-  margin-right: 0 !important;
-}
-
-.margin-right-sm {
-  margin-right: 8px !important;
-}
-
-.margin-right-xs {
-  margin-right: 4px !important;
-}
-
-.margin-top {
-  margin-top: 24px !important;
-}
-
-.margin-top-lg {
-  margin-top: 48px !important;
-}
-
-.margin-top-no {
-  margin-top: 0 !important;
-}
-
-.margin-top-sm {
-  margin-top: 12px !important;
-}
-
-.margin-top-xs {
-  margin-top: 8px !important;
-}
-
-.media-object.pull-left {
-  margin-right: 16px;
-}
-
-.media-object.pull-right {
-  margin-left: 16px;
-}
-
-.modal-scrollbar-measure {
-  height: 50px;
-  overflow: scroll;
-  position: absolute;
-  top: -99999px;
-  width: 50px;
-}
-
-.card-img,
-.card-side.card-side-img,
-.modal,
-.no-overflow,
-.text-overflow {
-  overflow: hidden;
-}
-
-.padding-bottom {
-  padding-bottom: 24px !important;
-}
-
-.padding-bottom-lg {
-  padding-bottom: 48px !important;
-}
-
-.padding-bottom-no {
-  padding-bottom: 0 !important;
-}
-
-.padding-bottom-sm {
-  padding-bottom: 12px !important;
-}
-
-.padding-bottom-xs {
-  padding-bottom: 8px !important;
-}
-
-.padding-left {
-  padding-left: 16px !important;
-}
-
-.padding-left-lg {
-  padding-left: 32px !important;
-}
-
-.padding-left-no {
-  padding-left: 0 !important;
-}
-
-.padding-left-sm {
-  padding-left: 8px !important;
-}
-
-.padding-left-xs {
-  padding-left: 4px !important;
-}
-
-.padding-no {
-  padding: 0 !important;
-}
-
-.padding-right {
-  padding-right: 16px !important;
-}
-
-.padding-right-lg {
-  padding-right: 32px !important;
-}
-
-.padding-right-no {
-  padding-right: 0 !important;
-}
-
-.padding-right-sm {
-  padding-right: 8px !important;
-}
-
-.padding-right-xs {
-  padding-right: 4px !important;
-}
-
-.padding-top {
-  padding-top: 24px !important;
-}
-
-.padding-top-lg {
-  padding-top: 48px !important;
-}
-
-.padding-top-no {
-  padding-top: 0 !important;
-}
-
-.padding-top-sm {
-  padding-top: 12px !important;
-}
-
-.padding-top-xs {
-  padding-top: 8px !important;
-}
-
-.pull-right {
-  float: right;
-}
-
-.text-break {
-  hyphens: auto;
-  hyphens: auto;
-  hyphens: auto;
-  hyphens: auto;
-}
-
-.text-overflow {
-  display: block;
-  line-height: inherit;
-  text-overflow: ellipsis;
-}
-
-.text-center {
-  text-align: center;
-}
-
-.text-left {
-  text-align: left;
-}
-
-.text-right {
-  text-align: right;
-}
-
-.text-black {
-  color: #212121;
-}
-
-.text-black-divider {
-  color: #dadada;
-}
-
-.text-black-hint {
-  color: #9a9a9a;
-}
-
-.text-black-sec {
-  color: #727272;
-}
-
-/* 菜单键的颜色 */
-.text-white {
-  color: rgb(0 0 0);
-}
-
-.text-white-divider {
-  color: #3c3c3c;
-}
-
-.text-white-hint {
-  color: #646464;
-}
-
-.text-white-sec {
-  color: #bcbcbc;
-}
-
-.text-brand {
-  color: #3f51b5;
-}
-
-.text-brand-accent {
-  color: #f02;
-}
-
-.text-green {
-  color: #4caf50;
-}
-
-.text-orange {
-  color: #24292e;
-}
-
-.text-red {
-  color: #f44336;
-}
-
-.visible-lg-block,
-.visible-lg-inline,
-.visible-lg-inline-block,
-.visible-md-block,
-.visible-md-inline,
-.visible-md-inline-block,
-.visible-sm-block,
-.visible-sm-inline,
-.visible-sm-inline-block,
-.visible-xs-block,
-.visible-xs-inline,
-.visible-xs-inline-block,
-.visible-xx-block,
-.visible-xx-inline,
-.visible-xx-inline-block {
-  display: none !important;
-}
-
-.avatar {
-  background-color: rgb(154 154 154 / 18%);
-  border-radius: 50%;
-  color: inherit;
-  display: block;
-  height: 40px;
-  line-height: 40px;
-  text-align: center;
-  width: 40px;
-}
-
-.avatar[href]:focus,
-.avatar[href]:hover {
-  color: inherit;
-  text-decoration: none;
-}
-
-.avatar-brand,
-.avatar-brand-accent:focus,
-.avatar-brand-accent:hover,
-.avatar-brand:focus,
-.avatar-brand:hover {
-  color: #fff;
-}
-
-.avatar img {
-  border-radius: 50%;
-  height: 100%;
-  vertical-align: top;
-  width: 100%;
-}
-
-.btn,
-.switch-toggle {
-  vertical-align: middle;
-}
-
-.avatar-brand {
-  background-color: #3f51b5;
-}
-
-.avatar-brand-accent {
-  background-color: #f02;
-  color: #fff;
-}
-
-.avatar-green,
-.avatar-green:focus,
-.avatar-green:hover,
-.avatar-orange,
-.avatar-orange:focus,
-.avatar-orange:hover {
-  color: rgb(0 0 0 / 87%);
-}
-
-.avatar-green {
-  background-color: #4caf50;
-}
-
-.avatar-orange {
-  background-color: #24292e;
-}
-
-.avatar-red {
-  background-color: #f44336;
-  color: #fff;
-}
-
-.btn,
-.btn::after {
-  background-color: rgb(154 154 154 / 18%);
-}
-
-.avatar-red:focus,
-.avatar-red:hover {
-  color: #fff;
-}
-
-.avatar-lg {
-  height: 80px;
-  line-height: 80px;
-  width: 80px;
-}
-
-.avatar-sm {
-  height: 32px;
-  line-height: 32px;
-  width: 32px;
-}
-
-.avatar-xs {
-  font-size: 12px;
-  height: 20px;
-  line-height: 20px;
-  width: 20px;
-}
-
-.avatar-inline {
-  display: inline-block;
-}
-
-.breadcrumb {
-  margin: 24px 0;
-  padding: 0;
-}
-
-.breadcrumb::after,
-.breadcrumb::before {
-  content: "";
-  display: table;
-  line-height: 0;
-}
-
-.btn,
-.fbtn {
-  font-size: 14px;
-  line-height: 20px;
-  text-align: center;
-  user-select: none;
-}
-
-.breadcrumb > li {
-  display: block;
-  float: left;
-}
-
-.breadcrumb > li + li::before {
-  color: rgb(0 0 0 / 54%);
-  content: "chevron_right";
-  display: inline-block;
-  margin-left: 0.4em;
-}
-
-.btn::after,
-.card-action::after,
-.card-action::before,
-.card-img-heading::before,
-.fbtn::after,
-.nav::after,
-.nav::before,
-.picker__holder::before,
-.switch-toggle::after,
-.switch-toggle::before {
-  content: "";
-}
-
-.breadcrumb > .active {
-  color: rgb(0 0 0 / 87%);
-}
-
-.breadcrumb > .active > .a,
-.breadcrumb > .active > a {
-  color: rgb(0 0 0 / 87%);
-  cursor: text;
-  text-decoration: none;
-}
-
-.btn {
-  background-image: none;
-  background-position: 50% 50%;
-  background-size: 100% 100%;
-  border: 0;
-  border-radius: 20px;
-  box-shadow: 0 1px 3px rgb(0 0 0 / 15%), 0 1px 3px 1px rgb(0 0 0 / 15%);
-  color: inherit;
-  cursor: pointer;
-  display: inline-block;
-  margin-bottom: 0;
-  max-width: 100%;
-  padding: 8px 15px;
-  text-transform: uppercase;
-  user-select: none;
-  transition: 0.3s all;
-}
-
-.btn:hover {
-  border-radius: 5px;
-  transition-duration: 0.4s;
-}
-
-.btn::after,
-.card,
-.fbtn-text {
-  border-radius: 10px;
-}
-
-.fbtn,
-.picker {
-  user-select: none;
-  user-select: none;
-}
-
-.btn:active,
-.btn:focus,
-.btn:hover {
-  color: inherit;
-  outline: 0;
-  text-decoration: none;
-}
-
-.fbtn {
-  border-radius: 50%;
-}
-
-.btn:active::after,
-.btn:focus::after {
-  opacity: 1;
-}
-
-.btn.waves-attach:active::after {
-  background-color: transparent;
-}
-
-.btn.disabled,
-.btn[disabled],
-fieldset[disabled] .btn {
-  box-shadow: none;
-  cursor: not-allowed;
-  opacity: 0.54;
-}
-
-.dropdown [data-toggle="dropdown"],
-.fbtn {
-  cursor: pointer;
-}
-
-.btn.disabled .waves-ripple,
-.btn.disabled::after,
-.btn[disabled] .waves-ripple,
-.btn[disabled]::after,
-fieldset[disabled] .btn .waves-ripple,
-fieldset[disabled] .btn::after {
-  display: none;
-}
-
-/* 示例颜色:工单处添加按钮 */
-.btn-brand {
-  background-color: #5e72e4;
-  color: #fff !important;
-}
-
-/* 示例颜色:工单处添加并关闭按钮 */
-.btn-brand-accent {
-  background-color: #666;
-  color: #fff !important;
-}
-
-/* 示例颜色:訂閱按鈕顏色 */
-.btn-subscription {
-  background-color: #54aff9;
-  color: #fff;
-  margin: 1em 0;
-}
-
-@media screen and (min-width: 768px) {
-  .btn-subscription {
-    margin: 0;
-  }
-}
-
-.copy-text.btn-subscription:hover,
-.reset-invitelink:hover {
-  color: white;
-}
-
-.kaobei {
-  transition-duration: 0.4s; /* Safari */
-  transition-duration: 0.4s;
-  margin-left: 1em;
-}
-
-.kaobei:hover {
-  background-color: #13c2c2; /* prink */
-  color: white;
-}
-
-.btn-green,
-.btn-orange {
-  color: rgb(0 0 0 / 87%) !important;
-}
-
-.btn-green {
-  background-color: #4caf50;
-}
-
-.btn-orange {
-  background-color: #24292e;
-}
-
-.btn-red {
-  background-color: #f44336;
-  color: #fff !important;
-}
-
-.btn-block {
-  display: block;
-  white-space: normal;
-  width: 100%;
-}
-
-.btn-flat {
-  background-color: transparent;
-  box-shadow: none;
-}
-
-.btn-flat::after {
-  background-color: rgb(154 154 154 / 36%);
-  box-shadow: none;
-}
-
-.btn-flat.disabled,
-.btn-flat[disabled],
-fieldset[disabled] .btn-flat {
-  background-color: transparent;
-}
-
-.btn-flat.btn-brand {
-  color: #525252 !important;
-}
-
-.btn-flat.btn-brand-accent {
-  color: #525252 !important;
-}
-
-.btn-flat.btn-green {
-  color: #4caf50 !important;
-}
-
-.btn-flat.btn-orange {
-  color: #525252 !important;
-}
-
-.btn-flat.btn-red {
-  color: #f44336 !important;
-}
-
-.fbtn {
-  background-color: #f5f5f5;
-  box-shadow: 0 1px 3px rgb(0 0 0 / 15%), 0 1px 3px 1px rgb(0 0 0 / 30%);
-  clear: both;
-  color: #212121;
-  display: block;
-  height: 40px;
-  margin: 12px auto;
-  padding: 10px 0;
-  position: relative;
-  transition-duration: 0.3s;
-  transition-duration: 0.3s;
-  transition-property: opacity, -webkit-transform;
-  transition-property: opacity, -webkit-transform;
-  transition-property: opacity, transform;
-  transition-property: opacity, transform, -webkit-transform;
-  transition-timing-function: cubic-bezier(0.4, 0, 0.2, 1);
-  transition-timing-function: cubic-bezier(0.4, 0, 0.2, 1);
-  user-select: none;
-  width: 40px;
-}
-
-.fbtn:active,
-.fbtn:focus,
-.fbtn:hover {
-  color: #212121;
-  outline: 0;
-  text-decoration: none;
-  transition-duration: 0.4s;
-  border-radius: 10px;
-  transition-property: all;
-}
-
-.fbtn::after {
-  box-shadow: 0 6px 9px rgb(0 0 0 / 15%);
-  display: block;
-  height: 100%;
-  opacity: 0;
-  position: absolute;
-  top: 0;
-  left: 0;
-  transition: opacity 0.3s cubic-bezier(0.4, 0, 0.2, 1);
-  transition: opacity 0.3s cubic-bezier(0.4, 0, 0.2, 1);
-  width: 100%;
-}
-
-.fbtn:active::after,
-.fbtn:focus::after {
-  opacity: 1;
-}
-
-.fbtn-brand {
-  background-color: #3f51b5;
-  color: #fff !important;
-}
-
-.fbtn-brand-accent {
-  background-color: #f02;
-  color: #fff !important;
-}
-
-.fbtn-green,
-.fbtn-orange {
-  color: rgb(0 0 0 / 87%) !important;
-}
-
-.fbtn-green {
-  background-color: #4caf50;
-}
-
-.fbtn-orange {
-  background-color: #24292e;
-}
-
-.fbtn-red {
-  background-color: #f44336;
-  color: #fff !important;
-}
-
-.fbtn-lg {
-  font-size: 20px;
-  height: 56px;
-  line-height: 28px;
-  padding-top: 14px;
-  padding-bottom: 14px;
-  width: 56px;
-}
-
-.fbtn-container {
-  backface-visibility: hidden;
-  backface-visibility: hidden;
-  position: fixed;
-  right: 100px;
-  bottom: 12px;
-  transition: -webkit-transform 0.3s cubic-bezier(0.4, 0, 0.2, 1);
-  transition: -webkit-transform 0.3s cubic-bezier(0.4, 0, 0.2, 1);
-  transition: transform 0.3s cubic-bezier(0.4, 0, 0.2, 1);
-  transition: transform 0.3s cubic-bezier(0.4, 0, 0.2, 1), -webkit-transform 0.3s cubic-bezier(0.4, 0, 0.2, 1);
-  z-index: 21;
-}
-
-@media screen and (min-width: 992px) {
-  .fbtn-container {
-    transform: translateY(0) !important;
-    transform: translateY(0) !important;
-  }
-}
-
-.fbtn-dropdown,
-.fbtn-dropup {
-  position: absolute;
-  left: 0;
-  transform: scale(0, 0);
-  transform: scale(0, 0);
-  transition: -webkit-transform 0s 0.3s;
-  transition: -webkit-transform 0s 0.3s;
-  transition: transform 0s 0.3s;
-  transition: transform 0s 0.3s, -webkit-transform 0s 0.3s;
-  width: 100%;
-}
-
-.fbtn-inner.open .fbtn-dropdown,
-.fbtn-inner.open .fbtn-dropup {
-  transform: scale(1, 1);
-  transform: scale(1, 1);
-  transition: none;
-  transition: none;
-}
-
-.fbtn-dropdown .fbtn,
-.fbtn-dropup .fbtn {
-  opacity: 0;
-  transform: scale(0, 0);
-  transform: scale(0, 0);
-}
-
-.fbtn-inner.open .fbtn-dropdown .fbtn,
-.fbtn-inner.open .fbtn-dropup .fbtn {
-  opacity: 1;
-  transform: scale(1, 1);
-  transform: scale(1, 1);
-}
-
-.fbtn-dropdown {
-  top: 100%;
-}
-
-.fbtn-dropup {
-  bottom: 100%;
-}
-
-.fbtn-inner {
-  position: relative;
-}
-
-.fbtn-ori,
-.fbtn-sub {
-  -webkit-box-align: center;
-  align-items: center;
-  -ms-flex-align: center;
-  align-items: center;
-  display: box;
-  display: flex;
-  display: flexbox;
-  display: flex;
-  height: 100%;
-  margin-left: -0.5em;
-  position: absolute;
-  top: 0;
-  left: 50%;
-  transition-duration: 0.3s;
-  transition-duration: 0.3s;
-  transition-property: opacity, -webkit-transform;
-  transition-property: opacity, -webkit-transform;
-  transition-property: opacity, transform;
-  transition-property: opacity, transform, -webkit-transform;
-  transition-timing-function: cubic-bezier(0.4, 0, 0.2, 1);
-  transition-timing-function: cubic-bezier(0.4, 0, 0.2, 1);
-}
-
-.fbtn-inner.open .fbtn-ori {
-  opacity: 0;
-  transform: rotate(225deg);
-  transform: rotate(225deg);
-}
-
-.fbtn-sub {
-  opacity: 0;
-  transform: rotate(-225deg);
-  transform: rotate(-225deg);
-}
-
-.fbtn-inner.open .fbtn-sub {
-  opacity: 1;
-  transform: rotate(0);
-  transform: rotate(0);
-}
-
-.fbtn-text {
-  background-color: rgb(0 0 0 / 87%);
-  color: #fff;
-  display: none;
-  font-size: 12px;
-  line-height: 20px;
-  margin-top: -11px;
-  margin-left: 16px;
-  padding: 2px 8px;
-  position: absolute;
-  top: 50%;
-  left: 100%;
-}
-
-.fbtn-inner.open .fbtn-text {
-  display: block;
-}
-
-html.no-touchevents .fbtn-text {
-  display: block;
-  opacity: 0;
-  transform: scale(0, 0);
-  transform: scale(0, 0);
-  transition: opacity 0.3s cubic-bezier(0.4, 0, 0.2, 1), -webkit-transform 0s 0.3s;
-  transition: opacity 0.3s cubic-bezier(0.4, 0, 0.2, 1), -webkit-transform 0s 0.3s;
-  transition: opacity 0.3s cubic-bezier(0.4, 0, 0.2, 1), transform 0s 0.3s;
-  transition: opacity 0.3s cubic-bezier(0.4, 0, 0.2, 1), transform 0s 0.3s, -webkit-transform 0s 0.3s;
-}
-
-html.no-touchevents .fbtn:hover > .fbtn-text {
-  opacity: 1;
-  transform: scale(1, 1);
-  transform: scale(1, 1);
-  transition: opacity 0.3s cubic-bezier(0.4, 0, 0.2, 1);
-  transition: opacity 0.3s cubic-bezier(0.4, 0, 0.2, 1);
-}
-
-.checkbox-circle-icon,
-.dropdown-menu {
-  transition-duration: 0.3s;
-  transition-timing-function: cubic-bezier(0.4, 0, 0.2, 1);
-}
-
-.fbtn-text-left {
-  margin-right: 16px;
-  margin-left: 0;
-  right: 100%;
-  left: auto;
-}
-
-.card {
-  background-color: #fff;
-  box-shadow: 0 0 0 #e5e5e5, 0 0 15px rgb(0 0 0 / 12%), 0 2px 4px rgb(0 0 0 / 5%);
-  display: box;
-  display: flex;
-  display: flexbox;
-  display: flex;
-  margin-top: 24px;
-  margin-bottom: 24px;
-}
-
-.card[href]:focus,
-.card[href]:hover {
-  outline: 0;
-  text-decoration: none;
-}
-
-.card-brand a,
-.card-brand a:focus,
-.card-brand a:hover {
-  color: inherit;
-}
-
-.card-brand-accent {
-  background-color: #f02;
-  color: #fff;
-}
-
-.card-brand-accent a,
-.card-brand-accent a:focus,
-.card-brand-accent a:hover {
-  color: inherit;
-}
-
-.card-green {
-  background-color: #4caf50;
-  color: rgb(0 0 0 / 87%);
-}
-
-.card-green a,
-.card-green a:focus,
-.card-green a:hover {
-  color: inherit;
-}
-
-.card-orange {
-  background-color: #24292e;
-  color: rgb(0 0 0 / 87%);
-}
-
-.card-orange a,
-.card-orange a:focus,
-.card-orange a:hover {
-  color: inherit;
-}
-
-.card-red {
-  background-color: #f44336;
-  color: #fff;
-}
-
-.card-red a,
-.card-red a:focus,
-.card-red a:hover {
-  color: inherit;
-}
-
-.card-action {
-  border-top: 1px solid rgb(0 0 0 / 12%);
-  min-height: 48px;
-}
-
-.card-action::after,
-.card-action::before {
-  display: table;
-  line-height: 0;
-}
-
-.card-main > .card-action:first-child {
-  border-top: 0;
-}
-
-.card-action-btn {
-  margin: 6px 8px;
-}
-
-.card-action-btn .btn + .btn {
-  margin-left: 8px;
-}
-
-.card-header {
-  -webkit-box-align: center;
-  align-items: center;
-  -ms-flex-align: center;
-  align-items: center;
-  border-bottom: 1px solid rgb(0 0 0 / 12%);
-  display: box;
-  display: flex;
-  display: flexbox;
-  display: flex;
-  min-height: 56px;
-}
-
-.card-main > .card-header:last-child {
-  border-bottom: 0;
-}
-
-.card-header-side {
-  margin-top: 12px;
-  margin-bottom: 12px;
-}
-
-.card-header-side.pull-left {
-  -webkit-box-ordinal-group: 0;
-  order: -1;
-  -ms-flex-order: -1;
-  order: -1;
-  padding-left: 16px;
-}
-
-.card-header-side.pull-right {
-  -webkit-box-ordinal-group: 2;
-  order: 1;
-  -ms-flex-order: 1;
-  order: 1;
-  padding-right: 16px;
-}
-
-.card-heading {
-  display: block;
-  font-size: 20px;
-  line-height: 28px;
-  margin-top: 24px;
-  margin-bottom: 24px;
-  color: #314e7d;
-}
-
-.card-header .card-heading {
-  margin-top: 0;
-  margin-bottom: 0;
-}
-
-.card-img {
-  display: block;
-  position: relative;
-}
-
-.card-img-heading,
-.card-img-heading::before {
-  position: absolute;
-  bottom: 0;
-  left: 0;
-  width: 100%;
-}
-
-.card-main > .card-img:first-child {
-  border-radius: 2px 2px 0 0;
-}
-
-.card-main > .card-img:last-child {
-  border-radius: 0 0 2px 2px;
-}
-
-.card-img img {
-  display: block;
-  height: auto;
-  margin-right: auto;
-  margin-left: auto;
-}
-
-.card-img-heading {
-  color: #fff;
-  margin: 0;
-  padding: 12px 16px;
-  z-index: 1;
-}
-
-.card-img-heading::before {
-  background-image: linear-gradient(top, transparent, rgb(0 0 0 / 10%) 70%, rgb(0 0 0 / 20%));
-  background-image: linear-gradient(to bottom, transparent, rgb(0 0 0 / 10%) 70%, rgb(0 0 0 / 20%));
-  display: block;
-  height: 300%;
-  z-index: -1;
-}
-
-.card-inner {
-  margin: 24px 16px;
-}
-
-.card-doubleinner {
-  margin: 24px 16px 0;
-}
-
-.card-relayinner {
-  margin: 24px 0 0;
-}
-
-.card-relayinner > .tab-nav {
-  margin-bottom: 0;
-}
-
-.card-header .card-inner {
-  -webkit-box-flex: 1;
-  flex: 1;
-  flex: 1;
-  flex: 1;
-  margin-top: 12px;
-  margin-bottom: 12px;
-}
-
-.card-main {
-  -webkit-box-flex: 1;
-  flex: 1;
-  flex: 1;
-  flex: 1;
-  min-width: 0;
-  position: relative;
-}
-
-.card-side {
-  background-color: #f5f5f5;
-  border-radius: 2px 0 0 2px;
-  max-width: 33.33333%;
-  padding-right: 16px;
-  padding-left: 16px;
-}
-
-.card-side[href] {
-  color: inherit;
-}
-
-.card-side[href]:focus,
-.card-side[href]:hover {
-  outline: 0;
-  text-decoration: none;
-}
-
-.card-side.card-side-img {
-  padding-right: 0;
-  padding-left: 0;
-}
-
-.card-side.pull-right {
-  border-radius: 0 2px 2px 0;
-  -webkit-box-ordinal-group: 2;
-  order: 1;
-  -ms-flex-order: 1;
-  order: 1;
-}
-
-.card-brand .card-side {
-  background-color: #303f9f;
-  color: #fff;
-}
-
-.card-brand-accent .card-side {
-  background-color: #f50057;
-  color: #fff;
-}
-
-.card-green .card-side {
-  background-color: #388e3c;
-  color: #fff;
-}
-
-.card-orange .card-side {
-  background-color: #f57c00;
-  color: rgb(0 0 0 / 87%);
-}
-
-.card-red .card-side {
-  background-color: #d32f2f;
-  color: #fff;
-}
-
-code,
-pre {
-  background-color: #f5f5f5;
-}
-
-code,
-kbd,
-pre,
-samp {
-  font-family: "Helvetica Neue", Helvetica, Arial, "PingFang SC", "Hiragino Sans GB", "Microsoft YaHei", "WenQuanYi Micro Hei", sans-serif;
-  font-size: 1em;
-}
-
-code,
-kbd {
-  font-size: 80%;
-  padding: 2px 10px;
-}
-
-code {
-  border: 0 solid #dadada;
-  border-radius: 4px;
-  color: #399af2;
-  line-height: 1;
-}
-
-kbd {
-  background-color: #212121;
-  border-radius: 4px;
-  color: #fff;
-}
-
-kbd kbd {
-  font-size: 100%;
-  padding: 0;
-}
-
-pre {
-  border: 1px solid #dadada;
-  border-radius: 15px;
-  color: #212121;
-  display: block;
-  font-size: 12px;
-  line-height: 20px;
-  margin: 24px 0;
-  overflow: auto;
-  padding: 12px 8px;
-  word-wrap: break-word;
-}
-
-pre code {
-  background-color: transparent;
-  border-radius: 0;
-  color: inherit;
-  font-size: inherit;
-  padding: 0;
-  white-space: pre-wrap;
-}
-
-.dropdown {
-  position: relative;
-  z-index: 1;
-}
-
-.dropdown-inline {
-  display: inline-block;
-}
-
-.dropdown-menu {
-  background-color: #fff;
-  border: 1px solid rgb(0 0 0 / 12%);
-  border-radius: 0 2px 2px;
-  box-shadow: 0 1px 0 rgb(0 0 0 / 6%), 0 0 3px rgb(0 0 0 / 18%), 0 1px 3px rgb(0 0 0 / 18%);
-  margin: 0 !important;
-  min-width: 100%;
-  opacity: 0;
-  padding-top: 8px !important;
-  padding-right: 0;
-  padding-bottom: 8px !important;
-  padding-left: 0;
-  position: absolute !important;
-  top: 100%;
-  left: 0;
-  transform: scale(0.3, 0);
-  transform: scale(0.3, 0);
-  transform-origin: 0 0;
-  transform-origin: 0 0;
-  transition-duration: 0.3s;
-  transition-property: opacity, -webkit-transform;
-  transition-property: opacity, -webkit-transform;
-  transition-property: opacity, transform;
-  transition-property: opacity, transform, -webkit-transform;
-  transition-timing-function: cubic-bezier(0.4, 0, 0.2, 1);
-}
-
-.dropdown.open .dropdown-menu {
-  opacity: 1;
-  transform: scale(1, 1);
-  transform: scale(1, 1);
-}
-
-.dropdown-menu.dropdown-menu-right,
-.dropdown.pull-right .dropdown-menu {
-  border-radius: 2px 0 2px 2px;
-  right: 0;
-  left: auto;
-  transform-origin: 100% 0;
-  transform-origin: 100% 0;
-}
-
-.dropdown-menu .a,
-.dropdown-menu a {
-  color: #515a6e;
-  display: block;
-  line-height: inherit;
-  overflow: hidden;
-  text-overflow: ellipsis;
-  white-space: nowrap;
-}
-
-.dropdown-menu .a:focus,
-.dropdown-menu .a:hover,
-.dropdown-menu .active > .a,
-.dropdown-menu .active > a,
-.dropdown-menu a:focus,
-.dropdown-menu a:hover {
-  background-color: #f5f5f5;
-}
-
-.dropdown-toggle {
-  transition: background-color 0.3s cubic-bezier(0.4, 0, 0.2, 1);
-  transition: background-color 0.3s cubic-bezier(0.4, 0, 0.2, 1);
-}
-
-.dropdown.open .dropdown-toggle {
-  background-color: rgb(154 154 154 / 18%);
-  border-radius: 2px 2px 0 0;
-}
-
-.dropdown-toggle-btn {
-  margin-right: 1px;
-  margin-left: 1px;
-  padding-right: 16px;
-  padding-left: 16px;
-  position: relative;
-  z-index: 1;
-}
-
-.dropdown.open .dropdown-toggle-btn {
-  background-color: #fff;
-  box-shadow: none;
-  color: #212121;
-}
-
-.dropdown-toggle-btn ~ .dropdown-menu {
-  min-width: 100%;
-  padding-top: 56px !important;
-  top: -14px;
-  left: 0;
-  transform: scale(1, 0);
-  transform: scale(1, 0);
-}
-
-.dropdown-toggle-btn ~ .dropdown-menu.dropdown-menu-right,
-.dropdown.pull-right .dropdown-toggle-btn ~ .dropdown-menu {
-  right: 0;
-  left: auto;
-}
-
-.checkbox,
-.radiobtn {
-  display: block;
-  position: relative;
-}
-
-.form-group .checkbox,
-.form-group .radiobtn {
-  margin-top: 8px;
-  padding-bottom: 8px;
-}
-
-.checkbox label,
-.radiobtn label {
-  cursor: pointer;
-  margin: 0;
-  min-height: 14px;
-  padding-left: 20px;
-}
-
-.checkbox.disabled label,
-.radiobtn.disabled label,
-fieldset[disabled] .checkbox label,
-fieldset[disabled] .radiobtn label {
-  color: rgb(0 0 0 / 38%);
-  cursor: not-allowed;
-}
-
-.checkbox input[type="checkbox"],
-.radiobtn input[type="radio"] {
-  margin-left: -20px;
-  position: absolute;
-}
-
-.checkbox-inline,
-.radiobtn-inline {
-  display: inline-block;
-  margin-right: 16px;
-}
-
-.form {
-  margin-top: 24px;
-  margin-bottom: 24px;
-}
-
-.form-control,
-.picker__select--month,
-.picker__select--year {
-  background-color: #ebebeb;
-  background-image: none;
-  border: 1px solid rgb(148 148 148);
-  border-radius: 20px;
-  color: inherit;
-  display: block;
-  font-size: 14px;
-  height: 36px;
-  line-height: 20px;
-  padding: 7px 0 8px 1em;
-  opacity: 0.5;
-}
-
-.maxwidth-edit,
-.maxwidth-auth {
-  width: 100%;
-}
-
-.form-control:focus,
-.picker__select--month:focus,
-.picker__select--year:focus {
-  border-color: #399af2;
-  border-radius: 5px;
-  transition-duration: 0.4s;
-  outline: 0;
-  opacity: 1;
-  padding-bottom: 7px;
-}
-
-.form-control::input-placeholder,
-.picker__select--month::input-placeholder,
-.picker__select--year::-webkit-input-placeholder {
-  color: rgb(0 0 0 / 38%);
-}
-
-.form-control::placeholder,
-.picker__select--month::placeholder,
-.picker__select--year::-moz-placeholder {
-  color: rgb(0 0 0 / 38%);
-}
-
-.form-control:input-placeholder,
-.picker__select--month:input-placeholder,
-.picker__select--year:-ms-input-placeholder {
-  color: rgb(0 0 0 / 38%);
-}
-
-.form-control::placeholder,
-.picker__select--month::placeholder,
-.picker__select--year::placeholder {
-  color: rgb(0 0 0 / 38%);
-}
-
-.form-control[disabled],
-.form-control[readonly],
-[disabled].picker__select--month,
-[disabled].picker__select--year,
-[readonly].picker__select--month,
-[readonly].picker__select--year,
-fieldset[disabled] .form-control,
-fieldset[disabled] .picker__select--month,
-fieldset[disabled] .picker__select--year {
-  border-style: dashed;
-  color: rgb(0 0 0 / 38%);
-  cursor: not-allowed;
-  opacity: 1;
-}
-
-.form-control-inline.picker__select--month,
-.form-control-inline.picker__select--year,
-.form-control.form-control-inline {
-  display: inline-block;
-  vertical-align: middle;
-  width: auto;
-}
-
-.form-control-default.picker__select--month,
-.form-control-default.picker__select--year,
-.form-control.form-control-default {
-  border: 1px solid rgb(0 0 0 / 12%);
-  padding: 7px 8px;
-}
-
-/*
-邀請鏈接框input樣式
-*/
-.form-control[readonly],
-.form-control.readonly,
-.form-control[disabled],
-.form-control.disabled {
-  font-size: 18px;
-  color: #999;
-  border-color: #d0d0d0;
-  box-shadow: none;
-  cursor: not-allowed;
-  padding-bottom: 7px;
-}
-
-.form-control-default.picker__select--month:focus,
-.form-control-default.picker__select--year:focus,
-.form-control.form-control-default:focus {
-  border: 1px solid #f02;
-  padding: 7px 8px;
-}
-
-.form-control-default[disabled].picker__select--month,
-.form-control-default[disabled].picker__select--year,
-.form-control-default[readonly].picker__select--month,
-.form-control-default[readonly].picker__select--year,
-.form-control.form-control-default[disabled],
-.form-control.form-control-default[readonly],
-fieldset[disabled] .form-control-default.picker__select--month,
-fieldset[disabled] .form-control-default.picker__select--year,
-fieldset[disabled] .form-control.form-control-default {
-  background-color: rgb(154 154 154 / 18%);
-}
-
-.form-group-brand .form-control,
-.form-group-brand .form-control:focus,
-.form-group-brand .picker__select--month,
-.form-group-brand .picker__select--month:focus,
-.form-group-brand .picker__select--year,
-.form-group-brand .picker__select--year:focus {
-  border-color: #3f51b5;
-}
-
-.form-group-brand-accent .form-control,
-.form-group-brand-accent .form-control:focus,
-.form-group-brand-accent .picker__select--month,
-.form-group-brand-accent .picker__select--month:focus,
-.form-group-brand-accent .picker__select--year,
-.form-group-brand-accent .picker__select--year:focus {
-  border-color: #f02;
-}
-
-.form-group-green .form-control,
-.form-group-green .form-control:focus,
-.form-group-green .picker__select--month,
-.form-group-green .picker__select--month:focus,
-.form-group-green .picker__select--year,
-.form-group-green .picker__select--year:focus {
-  border-color: #4caf50;
-}
-
-.form-group-orange .form-control,
-.form-group-orange .form-control:focus,
-.form-group-orange .picker__select--month,
-.form-group-orange .picker__select--month:focus,
-.form-group-orange .picker__select--year,
-.form-group-orange .picker__select--year:focus {
-  border-color: #24292e;
-}
-
-.form-group-red .form-control,
-.form-group-red .form-control:focus,
-.form-group-red .picker__select--month,
-.form-group-red .picker__select--month:focus,
-.form-group-red .picker__select--year,
-.form-group-red .picker__select--year:focus {
-  border-color: #f44336;
-}
-
-input[type="color"].form-control-default {
-  min-width: 38px;
-}
-
-.snackbar-text,
-.tile-inner {
-  min-width: 0;
-}
-
-select.form-control,
-select.picker__select--month,
-select.picker__select--year {
-  appearance: none;
-  appearance: none;
-}
-
-select.form-control[multiple],
-select.form-control[size],
-select[multiple].picker__select--month,
-select[multiple].picker__select--year,
-select[size].picker__select--month,
-select[size].picker__select--year {
-  background-image: none;
-  padding-right: 0;
-}
-
-select.form-control-default {
-  background-position: calc(100% - 8px) 11px;
-  padding-right: 28px !important;
-}
-
-select.form-control-default[multiple],
-select.form-control-default[size] {
-  padding-right: 8px !important;
-}
-
-textarea.form-control,
-textarea.picker__select--month,
-textarea.picker__select--year {
-  height: auto;
-}
-
-.form-control-static {
-  border-bottom: 1px solid rgb(0 0 0 / 12%);
-  display: block;
-  font-size: 14px;
-  font-weight: 400;
-  line-height: 20px;
-  margin-top: 0;
-  margin-bottom: 0;
-  padding-top: 8px;
-  padding-bottom: 7px;
-}
-
-.form-control-static.form-control-default {
-  padding-top: 7px;
-}
-
-.form-group {
-  margin-top: 24px;
-  margin-bottom: 24px;
-}
-
-legend + .form-group {
-  margin-top: 0;
-}
-
-.form-help {
-  display: block;
-  font-size: 12px;
-  font-weight: 400;
-  line-height: 20px;
-  margin-top: 8px;
-  margin-bottom: 12px;
-  position: relative;
-}
-
-.form-help-icon {
-  position: absolute;
-  top: 4px;
-  right: 0;
-}
-
-.form-help-msg {
-  padding-right: 1.28571em;
-}
-
-.form-label {
-  display: block;
-}
-
-[	class*="col-lg"] > .form-label {
-  padding-top: 8px;
-  padding-bottom: 8px;
-  text-align: right;
-}
-
-@media screen and (min-width: 768px) {
-  [	class*="col-md"] > .form-label {
-    padding-top: 8px;
-    padding-bottom: 8px;
-    text-align: right;
-  }
-}
-
-@media screen and (min-width: 992px) {
-  [	class*="col-sm"] > .form-label {
-    padding-top: 8px;
-    padding-bottom: 8px;
-    text-align: right;
-  }
-}
-
-@media screen and (min-width: 1440px) {
-  [	class*="col-xs"] > .form-label {
-    padding-top: 8px;
-    padding-bottom: 8px;
-    text-align: right;
-  }
-}
-
-.form-group-brand .form-label {
-  color: #3f51b5;
-}
-
-.form-group-brand-accent .form-label {
-  color: #f02;
-}
-
-.form-group-green .form-label {
-  color: #4caf50;
-}
-
-.form-group-orange .form-label {
-  color: #24292e;
-}
-
-.form-group-red .form-label {
-  color: #f44336;
-}
-
-.checkbox-adv,
-.radiobtn-adv {
-  font-size: 14px;
-  line-height: 20px;
-}
-
-[class*="checkbox-circle"],
-[class*="radiobtn-circle"] {
-  display: block;
-  height: 14px;
-  position: absolute;
-  top: 2px;
-  left: 0;
-  width: 14px;
-}
-
-[class*="radiobtn-circle"] {
-  border-radius: 50%;
-}
-
-.checkbox-circle,
-.radiobtn-circle {
-  border: 2px solid rgb(0 0 0 / 54%);
-  transition: border-color 0.3s cubic-bezier(0.4, 0, 0.2, 1);
-  transition: border-color 0.3s cubic-bezier(0.4, 0, 0.2, 1);
-}
-
-input[type="checkbox"]:focus ~ .checkbox-circle {
-  border-color: rgb(0 0 0 / 87%);
-}
-
-.checkbox-adv.disabled input[type="checkbox"] ~ .checkbox-circle,
-fieldset[disabled] input[type="checkbox"] ~ .checkbox-circle,
-input[type="checkbox"][disabled] ~ .checkbox-circle {
-  border-color: rgb(0 0 0 / 38%);
-}
-
-input[type="radio"]:focus ~ .radiobtn-circle {
-  border-color: rgb(0 0 0 / 87%);
-}
-
-input[type="radio"]:checked ~ .radiobtn-circle {
-  border-color: #f02;
-}
-
-.radiobtn-adv.disabled input[type="radio"] ~ .radiobtn-circle,
-fieldset[disabled] input[type="radio"] ~ .radiobtn-circle,
-input[type="radio"][disabled] ~ .radiobtn-circle {
-  border-color: rgb(0 0 0 / 38%);
-}
-
-.radiobtn-adv.disabled input[type="radio"]:checked ~ .radiobtn-circle,
-fieldset[disabled] input[type="radio"]:checked ~ .radiobtn-circle,
-input[type="radio"]:checked[disabled] ~ .radiobtn-circle {
-  border-color: #ff80ab;
-}
-
-.checkbox-circle-check,
-.radiobtn-circle-check {
-  background-color: transparent;
-  transform: scale(0, 0);
-  transform: scale(0, 0);
-  transition: -webkit-transform 0.3s cubic-bezier(0.4, 0, 0.2, 1);
-  transition: -webkit-transform 0.3s cubic-bezier(0.4, 0, 0.2, 1);
-  transition: transform 0.3s cubic-bezier(0.4, 0, 0.2, 1);
-  transition: transform 0.3s cubic-bezier(0.4, 0, 0.2, 1), -webkit-transform 0.3s cubic-bezier(0.4, 0, 0.2, 1);
-}
-
-.checkbox-circle-check::after,
-.checkbox-circle-check::before,
-.radiobtn-circle-check::after,
-.radiobtn-circle-check::before {
-  background-color: #f02;
-  border-radius: 50%;
-  content: "";
-  display: block;
-  opacity: 0;
-  position: absolute;
-}
-
-.checkbox-adv.disabled .checkbox-circle-check,
-.radiobtn-adv.disabled .radiobtn-circle-check::after,
-.radiobtn-adv.disabled .radiobtn-circle-check::before,
-fieldset[disabled] .checkbox-circle-check,
-fieldset[disabled] .radiobtn-circle-check::after,
-fieldset[disabled] .radiobtn-circle-check::before,
-input[type="checkbox"][disabled] ~ .checkbox-circle-check,
-input[type="radio"][disabled] ~ .radiobtn-circle-check::after,
-input[type="radio"][disabled] ~ .radiobtn-circle-check::before {
-  display: none;
-}
-
-.checkbox-circle-check::after,
-.radiobtn-circle-check::after {
-  height: 70px;
-  top: -28px;
-  left: -28px;
-  width: 70px;
-}
-
-.checkbox-circle-check::before,
-.radiobtn-circle-check::before {
-  height: 100%;
-  top: 0;
-  left: 0;
-  transition: opacity 0.3s cubic-bezier(0.4, 0, 0.2, 1);
-  transition: opacity 0.3s cubic-bezier(0.4, 0, 0.2, 1);
-  width: 100%;
-}
-
-input[type="checkbox"]:checked ~ .checkbox-circle-check {
-  transform: scale(0.5, 0.5);
-  transform: scale(0.5, 0.5);
-}
-
-input[type="checkbox"]:checked ~ .checkbox-circle-check::after {
-  animation: circle-check 0.6s;
-  animation: circle-check 0.6s;
-}
-
-input[type="radio"]:checked ~ .radiobtn-circle-check {
-  transform: scale(0.5, 0.5);
-  transform: scale(0.5, 0.5);
-}
-
-input[type="radio"]:checked ~ .radiobtn-circle-check::after {
-  animation: circle-check 0.6s;
-  animation: circle-check 0.6s;
-}
-
-input[type="radio"]:checked ~ .radiobtn-circle-check::before {
-  opacity: 1;
-}
-
-.radiobtn-adv.disabled input[type="radio"]:checked ~ .radiobtn-circle-check,
-fieldset[disabled] input[type="radio"]:checked ~ .radiobtn-circle-check,
-input[type="radio"]:checked[disabled] ~ .radiobtn-circle-check {
-  background-color: #ff80ab;
-}
-
-.checkbox-circle-icon {
-  background-color: #f02;
-  color: #fff;
-  opacity: 0;
-  transform: scale(0.5, 0.5);
-  transform: scale(0.5, 0.5);
-  transition-duration: 0.3s;
-  transition-property: opacity, -webkit-transform;
-  transition-property: opacity, -webkit-transform;
-  transition-property: opacity, transform;
-  transition-property: opacity, transform, -webkit-transform;
-  transition-timing-function: cubic-bezier(0.4, 0, 0.2, 1);
-}
-
-.floating-label,
-.switch-toggle::after {
-  transition-duration: 0.3s;
-  transition-timing-function: cubic-bezier(0.4, 0, 0.2, 1);
-}
-
-.checkbox-circle-icon::before {
-  top: auto;
-}
-
-input[type="checkbox"]:checked ~ .checkbox-circle-icon {
-  opacity: 1;
-  transform: scale(1, 1);
-  transform: scale(1, 1);
-}
-
-.checkbox-adv.disabled input[type="checkbox"]:checked ~ .checkbox-circle-icon,
-fieldset[disabled] input[type="checkbox"]:checked ~ .checkbox-circle-icon,
-input[type="checkbox"]:checked[disabled] ~ .checkbox-circle-icon {
-  background-color: #ff80ab;
-}
-
-@keyframes circle-check {
-  0%,
-  100% {
-    opacity: 0;
-  }
-
-  25% {
-    opacity: 0.25;
-  }
-}
-
-@keyframes circle-check {
-  0%,
-  100% {
-    opacity: 0;
-  }
-
-  25% {
-    opacity: 0.25;
-  }
-}
-
-.floating-label {
-  color: rgb(130 130 130 / 100%);
-  cursor: text;
-  font-size: 14px;
-  line-height: 1;
-  margin: 0;
-  padding: 0;
-  position: absolute;
-  top: 11px;
-  left: 1em;
-  transform-origin: 0 0;
-  transform-origin: 0 0;
-  transition-duration: 0.3s;
-  transition-property: color, -webkit-transform;
-  transition-property: color, -webkit-transform;
-  transition-property: color, transform;
-  transition-property: color, transform, -webkit-transform;
-  transition-timing-function: cubic-bezier(0.4, 0, 0.2, 1);
-}
-
-.form-group-label,
-.switch,
-.switch-toggle {
-  position: relative;
-}
-
-.form-group-label [class*="col-"] .floating-label {
-  left: 2em;
-}
-
-.form-group-label.control-focus .floating-label,
-.form-group-label.control-highlight .floating-label {
-  transform: scale(0.85714, 0.85714) translateY(-30px);
-  transform: scale(0.85714, 0.85714) translateY(-30px);
-}
-
-.form-group-label.control-focus .floating-label {
-  color: #399af2;
-}
-
-.form-group-label {
-  margin-top: 36px;
-  margin-bottom: 36px;
-}
-
-.form-group-label .form-control,
-.form-group-label .picker__select--month,
-.form-group-label .picker__select--year {
-  position: relative;
-  z-index: 1;
-  padding-bottom: 8px;
-}
-
-.formlabel .form-control::input-placeholder,
-.form-group-label .picker__select--month::-webkit-input-placeholder,
-.form-group-label .picker__select--year::-webkit-input-placeholder {
-  color: transparent;
-}
-
-.formlabel .form-control::placeholder,
-.form-group-label .picker__select--month::-moz-placeholder,
-.form-group-label .picker__select--year::-moz-placeholder {
-  color: transparent;
-}
-
-.formlabel .form-control:input-placeholder,
-.form-group-label .picker__select--month:-ms-input-placeholder,
-.form-group-label .picker__select--year:-ms-input-placeholder {
-  color: transparent;
-}
-
-.form-group-label .form-control::placeholder,
-.form-group-label .picker__select--month::placeholder,
-.form-group-label .picker__select--year::placeholder {
-  color: transparent;
-}
-
-legend + .form-group-label {
-  margin-top: 12px;
-}
-
-.form-group-label.form-group-brand .floating-label {
-  color: #3f51b5;
-}
-
-.form-group-label.form-group-brand-accent .floating-label {
-  color: #f02;
-}
-
-.form-group-label.form-group-green .floating-label {
-  color: #4caf50;
-}
-
-.form-group-label.form-group-orange .floating-label {
-  color: #24292e;
-}
-
-.form-group-label.form-group-red .floating-label {
-  color: #f44336;
-}
-
-.form-icon-label {
-  cursor: pointer;
-  display: block;
-  font-size: 20px;
-  line-height: 28px;
-  padding: 4px 0;
-  transition: color 0.15s cubic-bezier(0.4, 0, 0.2, 1);
-  transition: color 0.15s cubic-bezier(0.4, 0, 0.2, 1);
-}
-
-.switch.checkbox label,
-.switch.radiobtn label {
-  padding-left: 40.5px;
-}
-
-.switch-toggle {
-  background-color: rgb(0 0 0 / 38%);
-  border-radius: 6px;
-  cursor: pointer;
-  display: inline-block;
-  height: 12px;
-  margin-right: 8px;
-  transition: background-color 0.3s cubic-bezier(0.4, 0, 0.2, 1);
-  transition: background-color 0.3s cubic-bezier(0.4, 0, 0.2, 1);
-  width: 32.5px;
-}
-
-.switch-toggle::after,
-.switch-toggle::before {
-  border-radius: 50%;
-  display: block;
-  height: 20px;
-  position: absolute;
-  top: -4px;
-  left: 0;
-  width: 20px;
-}
-
-.switch-toggle::after {
-  box-shadow: 0 0 0 12.5px rgb(0 0 0 / 10%);
-  opacity: 0;
-  transition-duration: 0.3s;
-  transition-property: opacity, -webkit-transform;
-  transition-property: opacity, -webkit-transform;
-  transition-property: opacity, transform;
-  transition-property: opacity, transform, -webkit-transform;
-  transition-timing-function: cubic-bezier(0.4, 0, 0.2, 1);
-}
-
-.switch-toggle:active::after {
-  opacity: 1;
-}
-
-.switch-toggle::before {
-  background-color: #fff;
-  box-shadow: 0 1px 3px 1px rgb(0 0 0 / 25%);
-  transition-duration: 0.3s;
-  transition-duration: 0.3s;
-  transition-property: background-color, -webkit-transform;
-  transition-property: background-color, -webkit-transform;
-  transition-property: background-color, transform;
-  transition-property: background-color, transform, -webkit-transform;
-  transition-timing-function: cubic-bezier(0.4, 0, 0.2, 1);
-  transition-timing-function: cubic-bezier(0.4, 0, 0.2, 1);
-}
-
-input[type="checkbox"]:checked + .switch-toggle,
-input[type="radio"]:checked + .switch-toggle {
-  background-color: rgb(255 64 129 / 50%);
-}
-
-input[type="checkbox"]:checked + .switch-toggle::after,
-input[type="checkbox"]:checked + .switch-toggle::before,
-input[type="radio"]:checked + .switch-toggle::after,
-input[type="radio"]:checked + .switch-toggle::before {
-  transform: translateX(12.5px);
-  transform: translateX(12.5px);
-}
-
-input[type="checkbox"]:checked + .switch-toggle::before,
-input[type="radio"]:checked + .switch-toggle::before {
-  background-color: #f02;
-}
-
-input[type="checkbox"]:checked + .switch-toggle:active::after,
-input[type="radio"]:checked + .switch-toggle:active::after {
-  box-shadow: 0 0 0 12.5px rgb(255 64 129 / 25%);
-}
-
-.checkbox.switch .switch-toggle,
-.radiobtn.switch .switch-toggle {
-  position: absolute;
-  top: 4px;
-  left: 0;
-}
-
-input[type="checkbox"]:checked + .switch-toggle-brand,
-input[type="radio"]:checked + .switch-toggle-brand {
-  background-color: rgb(63 81 181 / 50%);
-}
-
-input[type="checkbox"]:checked + .switch-toggle-brand::before,
-input[type="radio"]:checked + .switch-toggle-brand::before {
-  background-color: #3f51b5;
-}
-
-input[type="checkbox"]:checked + .switch-toggle-brand:active::after,
-input[type="radio"]:checked + .switch-toggle-brand:active::after {
-  box-shadow: 0 0 0 12.5px rgb(63 81 181 / 25%);
-}
-
-input[type="checkbox"]:checked + .switch-toggle-green,
-input[type="radio"]:checked + .switch-toggle-green {
-  background-color: rgb(76 175 80 / 50%);
-}
-
-input[type="checkbox"]:checked + .switch-toggle-green::before,
-input[type="radio"]:checked + .switch-toggle-green::before {
-  background-color: #4caf50;
-}
-
-input[type="checkbox"]:checked + .switch-toggle-green:active::after,
-input[type="radio"]:checked + .switch-toggle-green:active::after {
-  box-shadow: 0 0 0 12.5px rgb(76 175 80 / 25%);
-}
-
-input[type="checkbox"]:checked + .switch-toggle-orange,
-input[type="radio"]:checked + .switch-toggle-orange {
-  background-color: rgb(255 152 0 / 50%);
-}
-
-input[type="checkbox"]:checked + .switch-toggle-orange::before,
-input[type="radio"]:checked + .switch-toggle-orange::before {
-  background-color: #ffb200;
-}
-
-input[type="checkbox"]:checked + .switch-toggle-orange:active::after,
-input[type="radio"]:checked + .switch-toggle-orange:active::after {
-  box-shadow: 0 0 0 12.5px rgb(255 152 0 / 25%);
-}
-
-input[type="checkbox"]:checked + .switch-toggle-red,
-input[type="radio"]:checked + .switch-toggle-red {
-  background-color: rgb(244 67 54 / 50%);
-}
-
-input[type="checkbox"]:checked + .switch-toggle-red::before,
-input[type="radio"]:checked + .switch-toggle-red::before {
-  background-color: #f44336;
-}
-
-input[type="checkbox"]:checked + .switch-toggle-red:active::after,
-input[type="radio"]:checked + .switch-toggle-red:active::after {
-  box-shadow: 0 0 0 12.5px rgb(244 67 54 / 25%);
-}
-
-/* 弹出框颜色 */
-.modal-content,
-.picker__wrap {
-  box-shadow: 0 1px 50px #a2beff;
-  outline: 0;
-}
-
-.textarea-autosize {
-  min-height: 36px;
-  overflow-x: hidden;
-}
-
-.label {
-  background-color: rgb(0 0 0 / 38%);
-  border-radius: 2px;
-  color: #fff;
-  display: inline;
-  font-size: 75%;
-  font-style: normal;
-  font-weight: 400;
-  line-height: 1;
-  padding: 0.2em 0.6em;
-  vertical-align: baseline;
-  white-space: nowrap;
-}
-
-.modal-close,
-.modal-title {
-  font-size: 20px;
-  line-height: 28px;
-}
-
-.label-brand {
-  background-color: #3f51b5;
-  color: #fff;
-}
-
-.label-brand-accent {
-  background-color: #f02;
-  color: #fff;
-}
-
-.label-green {
-  background-color: #4caf50;
-  color: rgb(0 0 0 / 87%);
-}
-
-.label-orange {
-  background-color: #24292e;
-  color: rgb(0 0 0 / 87%);
-}
-
-.label-red {
-  background-color: #f44336;
-  color: #fff;
-}
-
-.modal {
-  backface-visibility: hidden;
-  backface-visibility: hidden;
-  display: none;
-  outline: 0;
-  position: fixed;
-  top: 0;
-  right: 0;
-  bottom: 0;
-  left: 0;
-  z-index: 40;
-  -webkit-overflow-scrolling: touch;
-  -ms-overflow-style: -ms-autohiding-scrollbar;
-}
-
-.modal-backdrop,
-.picker__holder {
-  backface-visibility: hidden;
-  right: 0;
-  top: 0;
-  left: 0;
-  bottom: 0;
-}
-
-.modal-open .modal {
-  overflow-x: hidden;
-  overflow-y: auto;
-}
-
-.modal-backdrop {
-  backface-visibility: hidden;
-  background-color: #000;
-  opacity: 0;
-  position: fixed;
-  transition: opacity 0.3s cubic-bezier(0.4, 0, 0.2, 1);
-  transition: opacity 0.3s cubic-bezier(0.4, 0, 0.2, 1);
-  z-index: 39;
-}
-
-.menu ~ .modal-backdrop.in,
-.modal-backdrop.fade.in {
-  opacity: 0.54;
-}
-
-.modal-content,
-.modal-dialog,
-.modal-heading,
-.nav,
-.nav .a,
-.nav a,
-.nav li {
-  position: relative;
-}
-
-.menu ~ .modal-backdrop {
-  z-index: 30;
-}
-
-.modal-close {
-  color: #727272;
-  cursor: pointer;
-  display: block;
-  float: right;
-  margin-right: -8px;
-  padding-right: 8px;
-  padding-left: 8px;
-}
-
-.modal-close:focus,
-.modal-close:hover {
-  color: #f02;
-  text-decoration: none;
-}
-
-.modal-content {
-  background-clip: padding-box;
-  background-color: #fff;
-  border: 1px solid transparent;
-  border-radius: 4px;
-}
-
-.modal-dialog {
-  margin: 48px 16px;
-}
-
-.modal-heading,
-.modal-inner {
-  margin-top: 24px;
-  padding-right: 24px;
-  padding-left: 24px;
-}
-
-.modal-dialog.modal-full {
-  height: 100%;
-  height: calc(100% - 96px);
-}
-
-.modal-dialog.modal-full .modal-content {
-  height: 100%;
-}
-
-.modal.fade .modal-dialog {
-  transform: scale(0, 0);
-  transform: scale(0, 0);
-  transition: -webkit-transform 0.3s cubic-bezier(0.4, 0, 0.2, 1);
-  transition: -webkit-transform 0.3s cubic-bezier(0.4, 0, 0.2, 1);
-  transition: transform 0.3s cubic-bezier(0.4, 0, 0.2, 1);
-  transition: transform 0.3s cubic-bezier(0.4, 0, 0.2, 1), -webkit-transform 0.3s cubic-bezier(0.4, 0, 0.2, 1);
-}
-
-.modal.fade.in .modal-dialog {
-  transform: scale(1, 1);
-  transform: scale(1, 1);
-}
-
-@media screen and (min-width: 480px) {
-  .modal-dialog.modal-xs {
-    margin-right: auto;
-    margin-left: auto;
-    width: 448px;
-  }
-}
-
-@media screen and (min-width: 992px) {
-  .modal-dialog {
-    margin-right: auto;
-    margin-left: auto;
-    width: 960px;
-  }
-}
-
-@media screen and (min-width: 1440px) {
-  .modal-dialog {
-    width: 1408px;
-  }
-}
-
-.modal-dialog {
-  width: 1408px;
-}
-
-.modal-footer {
-  padding-right: 24px;
-  padding-left: 24px;
-}
-
-.modal-footer .btn + .btn {
-  margin-right: 16px;
-}
-
-.modal-footer .text-right .btn + .btn {
-  margin-right: auto;
-  margin-left: 16px;
-}
-
-.modal-heading,
-.modal-inner {
-  margin-bottom: 24px;
-}
-
-.modal-open {
-  overflow: hidden;
-}
-
-.modal-title {
-  margin-top: 0;
-  margin-right: 28px;
-  margin-bottom: 24px;
-}
-
-.modal-va-middle {
-  -webkit-box-align: center;
-  align-items: center;
-  -ms-flex-align: center;
-  grid-row-align: center;
-  align-items: center;
-}
-
-.modal-va-middle .modal-dialog {
-  -webkit-box-flex: 1;
-  flex-grow: 1;
-  -ms-flex-positive: 1;
-  flex-grow: 1;
-}
-
-@media screen and (min-width: 480px) {
-  .modal-va-middle .modal-dialog.modal-xs {
-    -webkit-box-flex: 0;
-    flex-grow: 0;
-    -ms-flex-positive: 0;
-    flex-grow: 0;
-  }
-}
-
-@media screen and (min-width: 992px) {
-  .modal-va-middle .modal-dialog {
-    -webkit-box-flex: 0;
-    flex-grow: 0;
-    -ms-flex-positive: 0;
-    flex-grow: 0;
-  }
-}
-
-.modal-va-middle-show {
-  display: box;
-  display: flex;
-  display: flexbox;
-  display: flex;
-}
-
-.nav {
-  margin: 24px 0;
-  padding: 0;
-}
-
-.nav::after,
-.nav::before {
-  display: table;
-  line-height: 0;
-}
-
-.nav .a,
-.nav a {
-  -webkit-box-align: center;
-  align-items: center;
-  -ms-flex-align: center;
-  align-items: center;
-  display: box;
-  display: flex;
-  display: flexbox;
-  display: flex;
-  min-height: 48px;
-  padding: 0 16px;
-}
-
-.nav .a:focus,
-.nav .a:hover,
-.nav a:focus,
-.nav a:hover {
-  text-decoration: none;
-}
-
-.nav li {
-  display: block;
-}
-
-.nav ul {
-  margin: 0;
-  padding: 0;
-}
-
-.nav-justified,
-.nav-list {
-  -webkit-box-align: start;
-  align-items: flex-start;
-  -ms-flex-align: start;
-  align-items: flex-start;
-  display: box;
-  display: flex;
-  display: flexbox;
-  display: flex;
-  -webkit-box-pack: start;
-  justify-content: flex-start;
-  -ms-flex-pack: start;
-  justify-content: flex-start;
-}
-
-.nav-justified {
-  flex-wrap: nowrap;
-  flex-wrap: nowrap;
-  flex-wrap: nowrap;
-}
-
-.nav-justified > li {
-  -webkit-box-flex: 1;
-  flex-grow: 1;
-  -ms-flex-positive: 1;
-  flex-grow: 1;
-}
-
-.nav-justified > li > .a,
-.nav-justified > li > a {
-  -webkit-box-pack: center;
-  justify-content: center;
-  -ms-flex-pack: center;
-  justify-content: center;
-  text-align: center;
-}
-
-.nav-list {
-  flex-wrap: wrap;
-  flex-wrap: wrap;
-  flex-wrap: wrap;
-}
-
-.nav-list > li {
-  float: left;
-}
-
-.picker {
-  position: absolute;
-  z-index: 40;
-  user-select: none;
-  user-select: none;
-}
-
-.picker__box {
-  background-color: #fff;
-  border-radius: 0 0 4px 4px;
-  -webkit-box-flex: 1;
-  flex: 1;
-  flex: 1;
-  flex: 1;
-}
-
-@media screen and (min-width: 992px) {
-  .picker__box {
-    border-radius: 0 4px 4px 0;
-  }
-}
-
-.picker__date-display {
-  background-color: #3f51b5;
-  border-radius: 4px 4px 0 0;
-  color: #fff;
-  padding: 12px 16px;
-  text-align: left;
-}
-
-@media screen and (min-width: 992px) {
-  .picker__date-display {
-    border-radius: 4px 0 0 4px;
-    width: 176px;
-  }
-}
-
-.picker__date-display-bottom {
-  font-size: 34px;
-  line-height: 40px;
-  overflow: hidden;
-  text-overflow: ellipsis;
-  white-space: nowrap;
-}
-
-.picker__date-display-top {
-  color: #7986cb;
-  margin-bottom: 8px;
-}
-
-.picker__day {
-  border-radius: 50%;
-  display: inline-block;
-  height: 36px;
-  padding: 8px 0;
-  width: 36px;
-}
-
-.picker__day:focus,
-.picker__day:hover {
-  color: #3f51b5;
-  cursor: pointer;
-}
-
-.picker__day.picker__day--disabled {
-  color: inherit;
-  cursor: not-allowed;
-  opacity: 0.5;
-}
-
-.picker__day.picker__day--highlighted {
-  color: #3f51b5;
-}
-
-.picker__day.picker__day--selected {
-  background-color: #3f51b5;
-  color: #fff !important;
-}
-
-.picker__day-display {
-  margin-right: 8px;
-}
-
-.picker__day--outfocus {
-  display: none;
-}
-
-.picker__footer {
-  padding: 8px 16px;
-  text-align: right;
-}
-
-.picker__footer button {
-  margin-left: 8px;
-}
-
-.picker__footer button:first-child {
-  margin-left: 0;
-}
-
-.picker__frame {
-  margin: 48px auto;
-  max-width: 268px;
-  position: relative;
-  transform: scale(0, 0);
-  transform: scale(0, 0);
-  transition: -webkit-transform 0.3s cubic-bezier(0.4, 0, 0.2, 1);
-  transition: -webkit-transform 0.3s cubic-bezier(0.4, 0, 0.2, 1);
-  transition: transform 0.3s cubic-bezier(0.4, 0, 0.2, 1);
-  transition: transform 0.3s cubic-bezier(0.4, 0, 0.2, 1), -webkit-transform 0.3s cubic-bezier(0.4, 0, 0.2, 1);
-}
-
-.picker--opened .picker__frame {
-  transform: scale(1, 1);
-  transform: scale(1, 1);
-}
-
-.picker__header {
-  margin-top: 12px;
-  margin-bottom: 8px;
-  position: relative;
-}
-
-.picker__holder {
-  -webkit-box-align: center;
-  align-items: center;
-  -ms-flex-align: center;
-  align-items: center;
-  backface-visibility: hidden;
-  display: box;
-  display: flex;
-  display: flexbox;
-  display: flex;
-  overflow-x: hidden;
-  overflow-y: auto;
-  position: fixed;
-  text-align: center;
-  transform: translateY(100%);
-  transform: translateY(100%);
-  transition: -webkit-transform 0s 0.3s;
-  transition: -webkit-transform 0s 0.3s;
-  transition: transform 0s 0.3s;
-  transition: transform 0s 0.3s, -webkit-transform 0s 0.3s;
-  width: 100%;
-  -webkit-overflow-scrolling: touch;
-  -ms-overflow-style: -ms-autohiding-scrollbar;
-}
-
-.header,
-.snackbar-inner {
-  backface-visibility: hidden;
-}
-
-.picker__holder::before {
-  background-color: #000;
-  display: block;
-  height: 100%;
-  opacity: 0;
-  position: absolute;
-  top: 0;
-  left: 0;
-  transition: opacity 0.3s cubic-bezier(0.4, 0, 0.2, 1);
-  transition: opacity 0.3s cubic-bezier(0.4, 0, 0.2, 1);
-  width: 100%;
-}
-
-.picker--opened .picker__holder {
-  transform: translateZ(0);
-  transform: translateZ(0);
-  transition: none;
-  transition: none;
-}
-
-.picker--opened .picker__holder::before {
-  opacity: 0.5;
-}
-
-.picker__input {
-  background-color: transparent !important;
-  border-bottom-style: solid !important;
-  color: inherit !important;
-  cursor: text !important;
-}
-
-.picker__input.picker__input--active {
-  border-color: #f02;
-  border-bottom-width: 2px;
-}
-
-.picker__input.picker__input--active.form-control-default {
-  border-bottom-width: 1px;
-}
-
-.picker__month,
-.picker__year {
-  display: inline;
-  margin-left: 16px;
-}
-
-.picker__month:first-child,
-.picker__year:first-child {
-  margin-left: 0;
-}
-
-.picker__nav--next,
-.picker__nav--prev {
-  cursor: pointer;
-  height: 36px;
-  line-height: 20px;
-  margin-top: -18px;
-  padding-top: 8px;
-  padding-bottom: 8px;
-  position: absolute;
-  top: 50%;
-  text-align: center;
-  width: 36px;
-}
-
-.picker__nav--next:focus,
-.picker__nav--next:hover,
-.picker__nav--prev:focus,
-.picker__nav--prev:hover {
-  color: #3f51b5;
-}
-
-@media screen and (min-width: 992px) {
-  .picker__footer {
-    padding-right: 24px;
-    padding-left: 24px;
-  }
-
-  .picker__frame {
-    max-width: 528px;
-  }
-
-  .picker__nav--next,
-  .picker__nav--prev {
-    width: 48px;
-  }
-}
-
-.picker__nav--next {
-  right: 8px;
-}
-
-.picker__nav--next::before {
-  content: "keyboard_arrow_right";
-}
-
-.picker__nav--prev {
-  left: 8px;
-}
-
-.picker__nav--prev::before {
-  content: "keyboard_arrow_left";
-}
-
-.picker__select--month,
-.picker__select--year {
-  background-position: 100% 4px !important;
-  border-bottom: 0;
-  display: inline-block;
-  height: 20px;
-  margin-left: 16px;
-  padding: 0;
-  width: auto;
-}
-
-.picker__select--month:first-child,
-.picker__select--year:first-child {
-  margin-left: 0;
-}
-
-.picker__select--month:focus,
-.picker__select--year:focus {
-  border-bottom: 0;
-  padding-bottom: 0;
-}
-
-.picker__table {
-  margin: 0 8px;
-  table-layout: fixed;
-}
-
-table.table-fixed {
-  table-layout: fixed;
-}
-
-.picker__table td,
-.picker__table th {
-  border: 0;
-  font-size: 12px;
-  line-height: 20px;
-  margin: 0;
-  padding: 0;
-  text-align: center;
-  vertical-align: middle;
-  width: 36px;
-}
-
-@media screen and (min-width: 992px) {
-  .picker__table {
-    margin: 0;
-  }
-
-  .picker__table td,
-  .picker__table th {
-    width: 48px;
-  }
-
-  .picker__table td:first-child,
-  .picker__table th:first-child {
-    padding-left: 8px;
-    width: 56px;
-  }
-
-  .picker__table td:last-child,
-  .picker__table th:last-child {
-    padding-right: 8px;
-    width: 56px;
-  }
-
-  .picker__weekday-display {
-    display: block;
-    overflow: hidden;
-    text-overflow: ellipsis;
-  }
-}
-
-.picker__weekday {
-  color: #9a9a9a;
-  padding-top: 8px !important;
-  padding-bottom: 8px !important;
-}
-
-.picker__weekday-display {
-  margin-right: 8px;
-}
-
-.picker__weekday-display::after {
-  content: ",";
-}
-
-.picker__wrap {
-  border-radius: 4px;
-  display: box;
-  display: flex;
-  display: flexbox;
-  display: flex;
-  -webkit-box-orient: vertical;
-  flex-direction: column;
-  flex-direction: column;
-  flex-direction: column;
-  position: relative;
-  vertical-align: middle;
-  z-index: 1;
-}
-
-@media screen and (min-width: 992px) {
-  .picker__wrap {
-    -webkit-box-orient: horizontal;
-    -webkit-box-direction: normal;
-    flex-direction: row;
-    flex-direction: row;
-    flex-direction: row;
-  }
-}
-
-.progress {
-  background-color: #ff80ab;
-  height: 4px;
-  margin-top: 24px;
-  margin-bottom: 24px;
-  overflow: hidden;
-  position: relative;
-}
-
-.progress-bar,
-.progress-position-absolute-bottom,
-.progress-position-absolute-top {
-  position: absolute;
-}
-
-.progress-bar {
-  background-color: #f02;
-  border-radius: 0 1px 1px 0;
-  height: 100%;
-  top: 0;
-  left: 0;
-  transition: width 0.3s cubic-bezier(0.4, 0, 0.2, 1);
-  transition: width 0.3s cubic-bezier(0.4, 0, 0.2, 1);
-}
-
-.progress-brand {
-  background-color: #7986cb;
-}
-
-.progress-brand .progress-bar {
-  background-color: #3f51b5;
-}
-
-.progress-green {
-  background-color: #81c784;
-}
-
-.progress-green .progress-bar {
-  background-color: #4caf50;
-}
-
-.progress-orange {
-  background-color: #ffb74d;
-}
-
-.progress-orange .progress-bar {
-  background-color: #24292e;
-}
-
-.progress-red {
-  background-color: #e57373;
-}
-
-.progress-red .progress-bar {
-  background-color: #f44336;
-}
-
-.progress-bar-indeterminate {
-  background-color: #f02;
-}
-
-.progress-bar-indeterminate::after,
-.progress-bar-indeterminate::before {
-  animation-duration: 2.1s;
-  animation-duration: 2.1s;
-  animation-iteration-count: infinite;
-  animation-iteration-count: infinite;
-  animation-timing-function: linear;
-  animation-timing-function: linear;
-  background-color: inherit;
-  border-radius: 1px;
-  content: "";
-  display: block;
-  position: absolute;
-  top: 0;
-  bottom: 0;
-  left: 0;
-  transition: width 0.3s cubic-bezier(0.4, 0, 0.2, 1);
-  transition: width 0.3s cubic-bezier(0.4, 0, 0.2, 1);
-  will-change: left, width;
-}
-
-.progress-bar-indeterminate::after {
-  animation-name: pbar-indeterminate-one;
-  animation-name: pbar-indeterminate-one;
-  left: 0;
-}
-
-.progress-bar-indeterminate::before {
-  animation-name: pbar-indeterminate-two;
-  animation-name: pbar-indeterminate-two;
-  right: 0;
-}
-
-@keyframes pbar-indeterminate-one {
-  0% {
-    left: 0;
-    width: 0;
-  }
-
-  50% {
-    left: 25%;
-    width: 75%;
-  }
-
-  75% {
-    left: 100%;
-    width: 0;
-  }
-}
-
-@keyframes pbar-indeterminate-one {
-  0% {
-    left: 0;
-    width: 0;
-  }
-
-  50% {
-    left: 25%;
-    width: 75%;
-  }
-
-  75% {
-    left: 100%;
-    width: 0;
-  }
-}
-
-@keyframes pbar-indeterminate-two {
-  0%,
-  50% {
-    left: 0;
-    width: 0;
-  }
-
-  75% {
-    left: 0;
-    width: 25%;
-  }
-
-  100% {
-    left: 100%;
-    width: 0;
-  }
-}
-
-@keyframes pbar-indeterminate-two {
-  0%,
-  50% {
-    left: 0;
-    width: 0;
-  }
-
-  75% {
-    left: 0;
-    width: 25%;
-  }
-
-  100% {
-    left: 100%;
-    width: 0;
-  }
-}
-
-.progress-position-absolute-bottom,
-.progress-position-absolute-top,
-.progress-position-fixed-bottom,
-.progress-position-fixed-top {
-  margin: 0;
-  left: 0;
-  width: 100%;
-}
-
-.progress-circular,
-.tab-nav {
-  margin-top: 24px;
-  margin-bottom: 24px;
-}
-
-.progress-position-absolute-bottom,
-.progress-position-fixed-bottom {
-  bottom: 0;
-}
-
-.progress-position-absolute-top,
-.progress-position-fixed-top {
-  top: 0;
-}
-
-.progress-position-fixed-bottom,
-.progress-position-fixed-top {
-  position: fixed;
-}
-
-.progress-circular {
-  height: 40px;
-  overflow: hidden;
-  position: relative;
-  width: 40px;
-}
-
-.progress-circular-center {
-  margin-right: auto;
-  margin-left: auto;
-}
-
-.progress-circular-gap {
-  border-top: 2px solid #f02;
-  position: absolute;
-  top: 0;
-  right: 19px;
-  bottom: 0;
-  left: 19px;
-}
-
-.progress-circular-brand .progress-circular-gap {
-  border-top-color: #3f51b5;
-}
-
-.progress-circular-green .progress-circular-gap {
-  border-top-color: #4caf50;
-}
-
-.progress-circular-orange .progress-circular-gap {
-  border-top-color: #24292e;
-}
-
-.progress-circular-red .progress-circular-gap {
-  border-top-color: #f44336;
-}
-
-.progress-circular-inline {
-  display: inline-block;
-  margin-right: 16px;
-  margin-left: 16px;
-}
-
-.progress-circular-inner {
-  animation: pcircular-inner-rotate 5.25s cubic-bezier(0.35, 0, 0.25, 1) infinite;
-  animation: pcircular-inner-rotate 5.25s cubic-bezier(0.35, 0, 0.25, 1) infinite;
-  height: 40px;
-  position: relative;
-  width: 40px;
-  will-change: transform;
-}
-
-.progress-circular-left,
-.progress-circular-right {
-  height: 40px;
-  overflow: hidden;
-  position: absolute;
-  top: 0;
-  width: 20px;
-}
-
-.progress-circular-left {
-  left: 0;
-}
-
-.progress-circular-right {
-  right: 0;
-}
-
-.progress-circular-spinner {
-  border: 4px solid #f02;
-  border-bottom-color: transparent;
-  border-radius: 50%;
-  height: 40px;
-  position: absolute;
-  top: 0;
-  width: 40px;
-  will-change: transform;
-}
-
-.progress-circular-left .progress-circular-spinner {
-  animation: pcircular-spinner-left 1.3125s cubic-bezier(0.35, 0, 0.25, 1) infinite;
-  animation: pcircular-spinner-left 1.3125s cubic-bezier(0.35, 0, 0.25, 1) infinite;
-  border-right-color: transparent;
-  left: 0;
-}
-
-.progress-circular-right .progress-circular-spinner {
-  animation: pcircular-spinner-right 1.3125s cubic-bezier(0.35, 0, 0.25, 1) infinite;
-  animation: pcircular-spinner-right 1.3125s cubic-bezier(0.35, 0, 0.25, 1) infinite;
-  border-left-color: transparent;
-  right: 0;
-}
-
-.progress-circular-brand .progress-circular-spinner {
-  border-top-color: #3f51b5;
-}
-
-.progress-circular-brand .progress-circular-left .progress-circular-spinner {
-  border-left-color: #3f51b5;
-}
-
-.progress-circular-brand .progress-circular-right .progress-circular-spinner {
-  border-right-color: #3f51b5;
-}
-
-.progress-circular-green .progress-circular-spinner {
-  border-top-color: #4caf50;
-}
-
-.progress-circular-green .progress-circular-left .progress-circular-spinner {
-  border-left-color: #4caf50;
-}
-
-.progress-circular-green .progress-circular-right .progress-circular-spinner {
-  border-right-color: #4caf50;
-}
-
-.progress-circular-orange .progress-circular-spinner {
-  border-top-color: #24292e;
-}
-
-.progress-circular-orange .progress-circular-left .progress-circular-spinner {
-  border-left-color: #24292e;
-}
-
-.progress-circular-orange .progress-circular-right .progress-circular-spinner {
-  border-right-color: #24292e;
-}
-
-.progress-circular-red .progress-circular-spinner {
-  border-top-color: #f44336;
-}
-
-.progress-circular-red .progress-circular-left .progress-circular-spinner {
-  border-left-color: #f44336;
-}
-
-.progress-circular-red .progress-circular-right .progress-circular-spinner {
-  border-right-color: #f44336;
-}
-
-.progress-circular-wrapper {
-  animation: pcircular-wrapper-rotate 2.91667s linear infinite;
-  animation: pcircular-wrapper-rotate 2.91667s linear infinite;
-  will-change: transform;
-}
-
-@keyframes pcircular-inner-rotate {
-  12.5% {
-    transform: rotate(135deg);
-    transform: rotate(135deg);
-  }
-
-  25% {
-    transform: rotate(270deg);
-    transform: rotate(270deg);
-  }
-
-  37.5% {
-    transform: rotate(405deg);
-    transform: rotate(405deg);
-  }
-
-  50% {
-    transform: rotate(540deg);
-    transform: rotate(540deg);
-  }
-
-  62.5% {
-    transform: rotate(675deg);
-    transform: rotate(675deg);
-  }
-
-  75% {
-    transform: rotate(810deg);
-    transform: rotate(810deg);
-  }
-
-  87.5% {
-    transform: rotate(945deg);
-    transform: rotate(945deg);
-  }
-
-  100% {
-    transform: rotate(1080deg);
-    transform: rotate(1080deg);
-  }
-}
-
-@keyframes pcircular-inner-rotate {
-  12.5% {
-    transform: rotate(135deg);
-    transform: rotate(135deg);
-  }
-
-  25% {
-    transform: rotate(270deg);
-    transform: rotate(270deg);
-  }
-
-  37.5% {
-    transform: rotate(405deg);
-    transform: rotate(405deg);
-  }
-
-  50% {
-    transform: rotate(540deg);
-    transform: rotate(540deg);
-  }
-
-  62.5% {
-    transform: rotate(675deg);
-    transform: rotate(675deg);
-  }
-
-  75% {
-    transform: rotate(810deg);
-    transform: rotate(810deg);
-  }
-
-  87.5% {
-    transform: rotate(945deg);
-    transform: rotate(945deg);
-  }
-
-  100% {
-    transform: rotate(1080deg);
-    transform: rotate(1080deg);
-  }
-}
-
-@keyframes pcircular-spinner-left {
-  0%,
-  100% {
-    transform: rotate(130deg);
-    transform: rotate(130deg);
-  }
-
-  50% {
-    transform: rotate(-5deg);
-    transform: rotate(-5deg);
-  }
-}
-
-@keyframes pcircular-spinner-left {
-  0%,
-  100% {
-    transform: rotate(130deg);
-    transform: rotate(130deg);
-  }
-
-  50% {
-    transform: rotate(-5deg);
-    transform: rotate(-5deg);
-  }
-}
-
-@keyframes pcircular-spinner-right {
-  0%,
-  100% {
-    transform: rotate(-130deg);
-    transform: rotate(-130deg);
-  }
-
-  50% {
-    transform: rotate(5deg);
-    transform: rotate(5deg);
-  }
-}
-
-@keyframes pcircular-spinner-right {
-  0%,
-  100% {
-    transform: rotate(-130deg);
-    transform: rotate(-130deg);
-  }
-
-  50% {
-    transform: rotate(5deg);
-    transform: rotate(5deg);
-  }
-}
-
-@keyframes pcircular-wrapper-rotate {
-  100% {
-    transform: rotate(360deg);
-    transform: rotate(360deg);
-  }
-}
-
-@keyframes pcircular-wrapper-rotate {
-  100% {
-    transform: rotate(360deg);
-    transform: rotate(360deg);
-  }
-}
-
-.load-bar {
-  float: right;
-  height: 100%;
-  overflow: hidden;
-  width: 50%;
-}
-
-.load-bar:first-child {
-  float: left;
-}
-
-.load-bar-base {
-  animation: load-bar-right-in 0.9s cubic-bezier(0.4, 0, 0.2, 1) 1 forwards;
-  animation: load-bar-right-in 0.9s cubic-bezier(0.4, 0, 0.2, 1) 1 forwards;
-  background-color: #f02;
-  float: left;
-  height: 100%;
-  overflow: hidden;
-  transform: translate(-100%, 0);
-  transform: translate(-100%, 0);
-  transform-origin: top right;
-  transform-origin: top right;
-  width: 100%;
-  will-change: transform;
-}
-
-.load-bar:first-child .load-bar-base {
-  animation: load-bar-left-in 0.9s cubic-bezier(0.4, 0, 0.2, 1) 1 forwards;
-  animation: load-bar-left-in 0.9s cubic-bezier(0.4, 0, 0.2, 1) 1 forwards;
-  transform: translate(100%, 0);
-  transform: translate(100%, 0);
-  transform-origin: top left;
-  transform-origin: top left;
-}
-
-@keyframes load-bar-left-in {
-  0% {
-    transform: translate(100%, 0);
-    transform: translate(100%, 0);
-  }
-
-  100% {
-    transform: translate(0, 0);
-    transform: translate(0, 0);
-  }
-}
-
-@keyframes load-bar-left-in {
-  0% {
-    transform: translate(100%, 0);
-    transform: translate(100%, 0);
-  }
-
-  100% {
-    transform: translate(0, 0);
-    transform: translate(0, 0);
-  }
-}
-
-@keyframes load-bar-right-in {
-  0% {
-    transform: translate(-100%, 0);
-    transform: translate(-100%, 0);
-  }
-
-  100% {
-    transform: translate(0, 0);
-    transform: translate(0, 0);
-  }
-}
-
-@keyframes load-bar-right-in {
-  0% {
-    transform: translate(-100%, 0);
-    transform: translate(-100%, 0);
-  }
-
-  100% {
-    transform: translate(0, 0);
-    transform: translate(0, 0);
-  }
-}
-
-.load-bar-content {
-  animation: load-bar-right 3.6s linear infinite forwards;
-  animation: load-bar-right 3.6s linear infinite forwards;
-  animation-delay: 0.9s;
-  animation-delay: 0.9s;
-  float: left;
-  height: 100%;
-  position: relative;
-  transform-origin: top center;
-  transform-origin: top center;
-  width: 400%;
-  will-change: transform;
-}
-
-.load-bar:first-child .load-bar-content {
-  animation: load-bar-left 3.6s linear infinite forwards;
-  animation: load-bar-left 3.6s linear infinite forwards;
-  animation-delay: 0.9s;
-  animation-delay: 0.9s;
-}
-
-@keyframes load-bar-left {
-  0% {
-    transform: translate(0, 0);
-    transform: translate(0, 0);
-  }
-
-  100% {
-    transform: translate(-100%, 0);
-    transform: translate(-100%, 0);
-  }
-}
-
-@keyframes load-bar-left {
-  0% {
-    transform: translate(0, 0);
-    transform: translate(0, 0);
-  }
-
-  100% {
-    transform: translate(-100%, 0);
-    transform: translate(-100%, 0);
-  }
-}
-
-@keyframes load-bar-right {
-  0% {
-    transform: translate(-100%, 0);
-    transform: translate(-100%, 0);
-  }
-
-  100% {
-    transform: translate(0, 0);
-    transform: translate(0, 0);
-  }
-}
-
-@keyframes load-bar-right {
-  0% {
-    transform: translate(-100%, 0);
-    transform: translate(-100%, 0);
-  }
-
-  100% {
-    transform: translate(0, 0);
-    transform: translate(0, 0);
-  }
-}
-
-.load-bar-progress {
-  background-color: transparent;
-  float: left;
-  height: 100%;
-  width: 25%;
-}
-
-.load-bar-progress-brand {
-  background-color: #3f51b5;
-}
-
-.load-bar-progress-green {
-  background-color: #4caf50;
-}
-
-.load-bar-progress-orange {
-  background-color: #24292e;
-}
-
-.load-bar-progress-red {
-  background-color: #f44336;
-}
-
-.snackbar {
-  position: fixed;
-  right: 0;
-  bottom: 0;
-  left: 0;
-  z-index: 41;
-}
-
-.snackbar a {
-  cursor: pointer;
-}
-
-.snackbar a:focus,
-.snackbar a:hover {
-  text-decoration: none;
-}
-
-@media screen and (min-width: 768px) {
-  .snackbar {
-    padding-right: 16px;
-    padding-left: 16px;
-    bottom: 24px;
-  }
-
-  .fbtn-container ~ .snackbar {
-    right: 72px;
-  }
-
-  .snackbar-inner {
-    border-radius: 2px;
-    float: left;
-  }
-}
-
-.snackbar-inner {
-  backface-visibility: hidden;
-  background-color: rgb(0 0 0 / 87%);
-  box-shadow: 0 1px 10px rgb(0 0 0 / 50%);
-  color: #fff;
-  display: box;
-  display: flex;
-  display: flexbox;
-  display: flex;
-  max-width: 100%;
-  padding: 12px 16px;
-  transform: translate(0, 200%);
-  transform: translate(0, 200%);
-  transition: -webkit-transform 0.3s cubic-bezier(0.4, 0, 0.2, 1);
-  transition: -webkit-transform 0.3s cubic-bezier(0.4, 0, 0.2, 1);
-  transition: transform 0.3s cubic-bezier(0.4, 0, 0.2, 1);
-  transition: transform 0.3s cubic-bezier(0.4, 0, 0.2, 1), -webkit-transform 0.3s cubic-bezier(0.4, 0, 0.2, 1);
-}
-
-.snackbar-inner::after,
-.snackbar-inner::before {
-  content: "";
-  display: table;
-  line-height: 0;
-}
-
-.snackbar-inner.in {
-  transform: translate(0, 0);
-  transform: translate(0, 0);
-}
-
-[data-dismiss="snackbar"] {
-  cursor: pointer;
-  font-weight: 500;
-  margin-left: 16px;
-  -webkit-box-ordinal-group: 2;
-  order: 1;
-  -ms-flex-order: 1;
-  order: 1;
-  text-transform: uppercase;
-  white-space: nowrap;
-}
-
-.tab-nav {
-  box-shadow: 0 1px 0 rgb(0 0 0 / 12%);
-  position: relative;
-}
-
-.tab-nav .nav {
-  margin-top: 0 !important;
-  margin-bottom: 0 !important;
-}
-
-.tab-nav .nav > li > .a,
-.tab-nav .nav > li > a {
-  color: inherit;
-  text-transform: uppercase;
-}
-
-/* 按钮下面颜色 */
-.tab-nav .nav > li > .a::after,
-.tab-nav .nav > li > a::after {
-  border-bottom: 2px solid #399af2;
-  content: "";
-  display: block;
-  opacity: 0;
-  position: absolute;
-  bottom: 0;
-  left: 0;
-  transition: opacity 0.3s cubic-bezier(0.4, 0, 0.2, 1);
-  transition: opacity 0.3s cubic-bezier(0.4, 0, 0.2, 1);
-  width: 100%;
-}
-
-.tab-nav .nav > li > .a:focus::after,
-.tab-nav .nav > li > .a:hover::after,
-.tab-nav .nav > li > a:focus::after,
-.tab-nav .nav > li > a:hover::after {
-  opacity: 0.3;
-}
-
-.tab-nav .nav > li.active > .a::after,
-.tab-nav .nav > li.active > a::after {
-  opacity: 1;
-  transition: opacity 0s 0.45s;
-  transition: opacity 0s 0.45s;
-}
-
-.tab-nav-indicator {
-  background-color: transparent;
-  height: 2px;
-  position: absolute;
-  bottom: 0;
-}
-
-.tab-nav-indicator.animate {
-  background-color: #399af2;
-  transition: left 225ms cubic-bezier(0.4, 0, 0.2, 1) 225ms, right 0.45s cubic-bezier(0.4, 0, 0.2, 1);
-  transition: left 225ms cubic-bezier(0.4, 0, 0.2, 1) 225ms, right 0.45s cubic-bezier(0.4, 0, 0.2, 1);
-  will-change: left, right;
-}
-
-.tab-nav-indicator.animate.reverse {
-  transition: left 0.45s cubic-bezier(0.4, 0, 0.2, 1), right 225ms cubic-bezier(0.4, 0, 0.2, 1) 225ms;
-  transition: left 0.45s cubic-bezier(0.4, 0, 0.2, 1), right 225ms cubic-bezier(0.4, 0, 0.2, 1) 225ms;
-}
-
-.tab-nav-brand .nav > li > .a::after,
-.tab-nav-brand .nav > li > a::after {
-  border-bottom-color: #3f51b5;
-}
-
-.tab-nav-brand .tab-nav-indicator.animate {
-  background-color: #3f51b5;
-}
-
-.tab-nav-green .nav > li > .a::after,
-.tab-nav-green .nav > li > a::after {
-  border-bottom-color: #4caf50;
-}
-
-.tab-nav-green .tab-nav-indicator.animate {
-  background-color: #4caf50;
-}
-
-.tab-nav-orange .nav > li > .a::after,
-.tab-nav-orange .nav > li > a::after {
-  border-bottom-color: #24292e;
-}
-
-.tab-nav-orange .tab-nav-indicator.animate {
-  background-color: #24292e;
-}
-
-.tab-nav-red .nav > li > .a::after,
-.tab-nav-red .nav > li > a::after {
-  border-bottom-color: #f44336;
-}
-
-.tab-nav-red .tab-nav-indicator.animate {
-  background-color: #f44336;
-}
-
-.tab-pane {
-  display: none;
-  visibility: hidden;
-}
-
-.tab-pane.active {
-  display: block;
-  visibility: visible;
-}
-
-.table {
-  background-color: #fff;
-  border: 0;
-  box-shadow: 0 -1px 0 rgb(0 0 0 / 6%), 0 0 3px rgb(0 0 0 / 18%), 0 1px 3px rgb(0 0 0 / 18%);
-  margin-top: 24px;
-  margin-bottom: 24px;
-  width: 100%;
-}
-
-.table-responsive.table-user {
-  border-radius: 0;
-  box-shadow: none;
-  margin-top: 0;
-}
-
-.table-user .table tr:last-of-type td {
-  border-bottom: 1px solid #dadada;
-}
-
-.table-user .table > tbody:first-child > tr:first-child th,
-.table-user .table > thead:first-child > tr:first-child th {
-  border-top: 1px solid #dadada;
-  border-bottom: 1px solid #dadada;
-}
-
-.table-responsive.table-user th,
-.table.table-user th {
-  background: #f0faff;
-  border-radius: 0;
-}
-
-.table-responsive.table-user th,
-.table-responsive.table-user td,
-.table.table-user th,
-.table.table-user td {
-  padding: 13px 16px 14px 32px;
-}
-
-.card-table > .table {
-  box-shadow: none;
-  margin-right: -16px;
-  margin-left: -16px;
-}
-
-.card-table > .table:first-child {
-  margin-top: 0;
-}
-
-.card-table > .table:last-child {
-  margin-bottom: 0;
-}
-
-.table > tbody:first-child > tr:first-child td,
-.table > tbody:first-child > tr:first-child th {
-  border-top: 0;
-}
-
-.table > tbody > tr:hover {
-  background-color: #f5f5f5;
-}
-
-.table td,
-.table th {
-  border-top: 1px solid #dadada;
-  font-size: 14px;
-  line-height: 20px;
-  padding: 13px 16px 14px;
-  vertical-align: middle;
-  white-space: nowrap;
-}
-
-.table td.nowrap,
-.table th.nowrap {
-  white-space: nowrap;
-  width: 1%;
-}
-
-.table > thead:first-child > tr:first-child td,
-.table > thead:first-child > tr:first-child th {
-  border-top: 0;
-}
-
-.table > thead td,
-.table > thead th {
-  color: #9a9a9a;
-  font-size: 12px;
-  vertical-align: bottom;
-}
-
-.table-responsive {
-  box-shadow: 0 0 0 rgb(0 0 0 / 5%), 0 0 15px rgb(0 0 0 / 18%), 0 1px 3px rgb(0 0 0 / 5%);
-  margin-top: 24px;
-  margin-bottom: 24px;
-  min-height: 0.01%;
-  overflow-x: auto;
-  overflow-y: hidden;
-  -webkit-overflow-scrolling: touch;
-  -ms-overflow-style: -ms-autohiding-scrollbar;
-  border-radius: 20px;
-}
-
-.tile,
-.tile-action,
-.tile-footer {
-  min-height: 48px;
-}
-
-.card-table > .table-responsive {
-  box-shadow: none;
-  margin-right: -16px;
-  margin-left: -16px;
-}
-
-.card-table > .table-responsive:first-child {
-  margin-top: 0;
-}
-
-.card-table > .table-responsive:last-child {
-  margin-bottom: 0;
-}
-
-.table-responsive > .table {
-  box-shadow: none;
-  margin: 0;
-}
-
-.tile {
-  background-color: #fff;
-  box-shadow: 0 0 15px 2px #e5e5e5, 0 0 2px rgb(0 0 0 / 20%), 0 0 1px rgb(0 0 0 / 12%);
-  display: box;
-  display: flex;
-  display: flexbox;
-  display: flex;
-}
-
-.menu,
-html.no-touchevents .tile-action {
-  display: none;
-}
-
-.tile[href]:focus,
-.tile[href]:hover {
-  outline: 0;
-  text-decoration: none;
-}
-
-.tile.active {
-  margin-top: 24px;
-  margin-bottom: 24px;
-}
-
-.tile-brand {
-  background-color: #3f51b5;
-  color: #fff;
-}
-
-.tile-brand a,
-.tile-brand a:focus,
-.tile-brand a:hover {
-  color: inherit;
-}
-
-.tile-brand-accent {
-  background-color: #f02;
-  color: #fff;
-}
-
-.tile-brand-accent a,
-.tile-brand-accent a:focus,
-.tile-brand-accent a:hover {
-  color: inherit;
-}
-
-.tile-green {
-  background-color: #4caf50;
-  color: rgb(0 0 0 / 87%);
-}
-
-.tile-green a,
-.tile-green a:focus,
-.tile-green a:hover {
-  color: inherit;
-}
-
-.tile-orange {
-  background-color: #24292e;
-  color: rgb(0 0 0 / 87%);
-}
-
-.tile-orange a,
-.tile-orange a:focus,
-.tile-orange a:hover {
-  color: inherit;
-}
-
-.tile-red {
-  background-color: #f44336;
-  color: #fff;
-}
-
-.tile-red a,
-.tile-red a:focus,
-.tile-red a:hover {
-  color: inherit;
-}
-
-.tile-action {
-  -webkit-box-ordinal-group: 2;
-  order: 1;
-  -ms-flex-order: 1;
-  order: 1;
-  user-select: none;
-  user-select: none;
-  user-select: none;
-  user-select: none;
-}
-
-html.no-touchevents .tile-action-show,
-html.no-touchevents .tile:hover .tile-action {
-  display: block;
-}
-
-.tile-active-show.collapsing {
-  transition: height 0.15s linear;
-  transition: height 0.15s linear;
-}
-
-.tile-collapse {
-  -webkit-box-orient: vertical;
-  flex-direction: column;
-  flex-direction: column;
-  flex-direction: column;
-  transition: margin 0.15s linear;
-  transition: margin 0.15s linear;
-}
-
-.header-transparent::before,
-.header::after {
-  transition: opacity 0.3s cubic-bezier(0.4, 0, 0.2, 1);
-  left: 0;
-  top: 0;
-}
-
-.tile-collapse > [data-toggle="tile"] {
-  cursor: pointer;
-  display: box;
-  display: flex;
-  display: flexbox;
-  display: flex;
-  -webkit-box-flex: 1;
-  flex: 1;
-  flex: 1;
-  flex: 1;
-}
-
-.tile-footer::after,
-.tile-footer::before,
-.tile-sub::after,
-.tile-sub::before {
-  display: table;
-  line-height: 0;
-  content: "";
-}
-
-.tile-collapse > [data-toggle="tile"] [data-ignore="tile"] {
-  cursor: default;
-  cursor: initial;
-}
-
-.tile-collapse-full.active {
-  margin-right: calc(-50vw + 50% + 2px);
-  margin-left: calc(-50vw + 50% + 2px);
-}
-
-@media screen and (min-width: 992px) {
-  .tile-collapse-full.active {
-    margin-right: calc(-50vw + 50% + 16px);
-    margin-left: calc(-50vw + 50% + 16px);
-  }
-}
-
-.tile-footer {
-  background-color: #f5f5f5;
-  border-top: 1px solid rgb(0 0 0 / 12%);
-}
-
-.tile-active-show > .tile-footer:first-child,
-.tile > .tile-footer:first-child {
-  border-top: 0;
-}
-
-.tile-brand .tile-footer {
-  background-color: #303f9f;
-  color: #fff;
-}
-
-.tile-brand-accent .tile-footer {
-  background-color: #f50057;
-  color: #fff;
-}
-
-.tile-green .tile-footer {
-  background-color: #388e3c;
-  color: #fff;
-}
-
-.tile-orange .tile-footer {
-  background-color: #f57c00;
-  color: rgb(0 0 0 / 87%);
-}
-
-.tile-red .tile-footer {
-  background-color: #d32f2f;
-  color: #fff;
-}
-
-.tile-footer-btn {
-  margin: 6px 8px;
-  white-space: nowrap;
-}
-
-.tile-footer-btn .btn + .btn {
-  margin-left: 8px;
-}
-
-.tile-inner {
-  -webkit-box-flex: 1;
-  flex: 1;
-  flex: 1;
-  flex: 1;
-  margin: 14px 16px;
-}
-
-.tile-side {
-  align-self: center;
-  -ms-flex-item-align: center;
-  align-self: center;
-}
-
-.tile-side.pull-left {
-  -webkit-box-ordinal-group: 0;
-  order: -1;
-  -ms-flex-order: -1;
-  order: -1;
-  margin-left: 16px;
-}
-
-.tile-side.pull-right {
-  -webkit-box-ordinal-group: 2;
-  order: 1;
-  -ms-flex-order: 1;
-  order: 1;
-  margin-right: 16px;
-}
-
-.tile-sub {
-  border-top: 1px solid rgb(0 0 0 / 12%);
-  padding-right: 16px;
-  padding-left: 16px;
-}
-
-.tile-brand .tile-sub {
-  border-top-color: #303f9f;
-}
-
-.tile-brand-accent .tile-sub {
-  border-top-color: #f50057;
-}
-
-.tile-green .tile-sub {
-  border-top-color: #388e3c;
-}
-
-.tile-orange .tile-sub {
-  border-top-color: #f57c00;
-}
-
-.tile-red .tile-sub {
-  border-top-color: #d32f2f;
-}
-
-.tile-wrap {
-  margin-top: 24px;
-  margin-bottom: 24px;
-}
-
-.content-header {
-  background-color: #f5f5f5;
-  color: #212121;
-  overflow: hidden;
-  padding-top: 12px;
-  padding-bottom: 12px;
-}
-
-.content-header-brand,
-.page-brand .content-header {
-  background-color: #24292e;
-  color: #fff;
-}
-
-.content-header-brand-accent,
-.page-brand-accent .content-header {
-  background-color: #f02;
-  color: #fff;
-}
-
-.content-header-green,
-.page-green .content-header {
-  background-color: #4caf50;
-  color: rgb(0 0 0 / 87%);
-}
-
-/* top图片预刷新的颜色 */
-.content-header-orange,
-.page-orange .content-header {
-  background-color: rgb(0 0 0 / 12%);
-  color: #4caf50;
-  box-shadow: 0 0 0 rgb(67 47 40), 0 0 15px #412f1c, 0 1px 3px rgb(0 0 0 / 5%);
-}
-
-.content-header-red,
-.page-red .content-header {
-  background-color: #f44336;
-  color: #fff;
-}
-
-.content-heading {
-  font-weight: 300;
-}
-
-.content-inner {
-  margin-top: 48px;
-  margin-bottom: 48px;
-}
-
-.header .nav,
-.header .tab-nav {
-  margin-bottom: 0;
-  margin-top: 0;
-}
-
-.content-sub-heading {
-  font-size: 20px;
-  font-weight: 500;
-  line-height: 28px;
-}
-
-.page-brand .content-sub-heading {
-  color: #3f51b5;
-}
-
-.page-brand-accent .content-sub-heading {
-  color: #f02;
-}
-
-.page-green .content-sub-heading {
-  color: #4caf50;
-}
-
-.page-orange .content-sub-heading {
-  color: #24292e;
-}
-
-.page-red .content-sub-heading {
-  color: #f44336;
-}
-
-.header {
-  backface-visibility: hidden;
-  background-color: #f5f5f5;
-  color: #212121;
-  min-height: 56px;
-  z-index: 30;
-}
-
-.header::after {
-  box-shadow: 0 1px 10px rgb(0 0 0 / 50%);
-  content: "";
-  display: block;
-  height: 100%;
-  opacity: 0;
-  position: absolute;
-  transition: opacity 0.3s cubic-bezier(0.4, 0, 0.2, 1);
-  width: 100%;
-  z-index: -1;
-}
-
-.header-standard::after,
-.header.affix::after {
-  opacity: 1;
-}
-
-.header a {
-  color: inherit;
-  z-index: 1;
-}
-
-.header .nav > li > .a,
-.header .nav > li > a {
-  height: 56px;
-}
-
-.header .tab-nav {
-  box-shadow: none;
-}
-
-.header-brand {
-  background-color: #3f51b5;
-  color: #fff;
-}
-
-.header-brand-accent {
-  background-color: #f02;
-  color: #fff;
-}
-
-.header-green {
-  background-color: #4caf50;
-  color: rgb(0 0 0 / 87%);
-}
-
-.header-orange {
-  background-color: #24292e;
-  color: rgb(0 0 0 / 87%);
-}
-
-/* icon颜色 */
-.page-brand .header-transparent,
-.page-brand-accent .header-transparent {
-  color: #f57c00;
-}
-
-.header-red {
-  background-color: #f44336;
-  color: #fff;
-}
-
-.header-affix {
-  max-height: 56px;
-  overflow: hidden;
-  width: 0;
-}
-
-.header-affix.affix {
-  width: auto;
-}
-
-.header-affix-hide {
-  max-height: 56px;
-  overflow: hidden;
-  width: auto;
-}
-
-.header-affix-hide.affix {
-  width: 0;
-}
-
-.header-logo,
-.header-text {
-  -webkit-box-align: center;
-  align-items: center;
-  -ms-flex-align: center;
-  align-items: center;
-  display: box;
-  display: flex;
-  display: flexbox;
-  display: flex;
-  float: left;
-  font-weight: 300;
-  height: 56px;
-  line-height: 28px;
-  margin: 0 16px;
-  white-space: nowrap;
-}
-
-.header-logo:focus,
-.header-logo:hover,
-.header-text:focus,
-.header-text:hover {
-  outline: 0;
-  text-decoration: none;
-}
-
-.header-logo {
-  font-size: 20px;
-}
-
-.header-logo img {
-  display: block;
-  max-height: 42px;
-  width: auto;
-}
-
-.header-seamed,
-.header-standard,
-.header-waterfall {
-  position: fixed;
-  top: 0;
-  right: 0;
-  left: 0;
-}
-
-.header-transparent {
-  background-color: transparent;
-}
-
-.header-transparent::before {
-  background-color: #f5f5f5;
-  content: "";
-  display: block;
-  height: 100%;
-  opacity: 0;
-  position: absolute;
-  transition: opacity 0.3s cubic-bezier(0.4, 0, 0.2, 1);
-  width: 100%;
-  z-index: -1;
-}
-
-.header-transparent.affix::before {
-  opacity: 1;
-}
-
-/*
-*.page-orange .header-transparent:before top的color
-*/
-.page-brand .header-transparent::before {
-  background-color: rgb(0 0 0 / 10%);
-}
-
-.page-green .header-transparent,
-.page-orange .header-transparent {
-  color: rgb(0 0 0 / 87%);
-}
-
-.page-brand-accent .header-transparent::before {
-  background-color: #f02;
-}
-
-.page-green .header-transparent::before {
-  background-color: #4caf50;
-}
-
-/*
-*.page-orange .header-transparent:before top的color
-*/
-.page-orange .header-transparent::before {
-  background-color: rgb(0 0 0 / 10%);
-}
-
-.page-red .header-transparent {
-  color: #fff;
-}
-
-.page-red .header-transparent::before {
-  background-color: #f44336;
-}
-
-.menu {
-  backface-visibility: hidden;
-  backface-visibility: hidden;
-  overflow: hidden;
-  outline: 0;
-  position: fixed;
-  top: 0;
-  right: 0;
-  bottom: 0;
-  left: 0;
-  z-index: 31;
-}
-
-.menu-collapse-toggle,
-.menu-collapse-toggle-close {
-  -webkit-box-align: center;
-  display: box;
-  display: flex;
-  display: flexbox;
-  position: absolute;
-  height: 100%;
-}
-
-.menu-collapse-toggle {
-  align-items: center;
-  -ms-flex-align: center;
-  align-items: center;
-  cursor: pointer;
-  display: flex;
-  padding: 0 16px;
-  top: 0;
-  right: 0;
-  z-index: 1;
-}
-
-.menu-collapse-toggle:focus,
-.menu-collapse-toggle:hover {
-  outline: 0;
-  text-decoration: none;
-}
-
-.menu-collapse-toggle-close,
-.menu-collapse-toggle-default {
-  transition-duration: 0.3s;
-  transition-duration: 0.3s;
-  transition-property: opacity, -webkit-transform;
-  transition-property: opacity, -webkit-transform;
-  transition-property: opacity, transform;
-  transition-property: opacity, transform, -webkit-transform;
-  transition-timing-function: cubic-bezier(0.4, 0, 0.2, 1);
-  transition-timing-function: cubic-bezier(0.4, 0, 0.2, 1);
-}
-
-.menu-collapse-toggle-close {
-  align-items: center;
-  -ms-flex-align: center;
-  align-items: center;
-  display: flex;
-  -webkit-box-pack: center;
-  justify-content: center;
-  -ms-flex-pack: center;
-  justify-content: center;
-  opacity: 1;
-  top: 0;
-  left: 0;
-  transform: rotate(0);
-  transform: rotate(0);
-  width: 100%;
-}
-
-.menu-logo,
-.menu-top-img {
-  -webkit-box-align: center;
-  display: box;
-  display: flex;
-  display: flexbox;
-}
-
-.menu-backdrop,
-.menu-scroll {
-  position: fixed;
-  left: 0;
-  top: 0;
-}
-
-.menu-collapse-toggle.collapsed .menu-collapse-toggle-close {
-  opacity: 0;
-  transform: rotate(-225deg);
-  transform: rotate(-225deg);
-}
-
-.menu-collapse-toggle-default {
-  opacity: 0;
-  transform: rotate(225deg);
-  transform: rotate(225deg);
-}
-
-.menu-collapse-toggle.collapsed .menu-collapse-toggle-default {
-  opacity: 1;
-  transform: rotate(0);
-  transform: rotate(0);
-}
-
-.menu-content {
-  padding-top: 8px;
-  padding-bottom: 8px;
-}
-
-.menu-content .nav {
-  margin-top: 0;
-  margin-bottom: 0;
-}
-
-.menu-content .nav .a,
-.menu-content .nav a {
-  color: #515a6e;
-  font-weight: 500;
-}
-
-.menu-content .nav li.active > .a,
-.menu-content .nav li.active > a,
-.page-brand .menu-content .nav li.active > .a,
-.page-brand .menu-content .nav li.active > a {
-  color: #3f51b5;
-}
-
-.menu-content .nav .a:focus,
-.menu-content .nav .a:hover,
-.menu-content .nav a:focus,
-.menu-content .nav a:hover {
-  background-color: #f5f5f5;
-}
-
-.menu-content .nav ul .a,
-.menu-content .nav ul a {
-  font-weight: 400;
-  min-height: 36px;
-  padding-left: 32px;
-}
-
-.menu-content .nav ul ul .a,
-.menu-content .nav ul ul a {
-  font-size: 12px;
-  padding-left: 48px;
-}
-
-.page-brand-accent .menu-content .nav li.active > .a,
-.page-brand-accent .menu-content .nav li.active > a {
-  color: #f02;
-}
-
-.page-green .menu-content .nav li.active > .a,
-.page-green .menu-content .nav li.active > a {
-  color: #4caf50;
-}
-
-.page-orange .menu-content .nav li.active > .a,
-.page-orange .menu-content .nav li.active > a {
-  color: #ffb200;
-}
-
-.page-red .menu-content .nav li.active > .a,
-.page-red .menu-content .nav li.active > a {
-  color: #f44336;
-}
-
-.menu-content-inner {
-  padding-right: 16px;
-  padding-left: 16px;
-}
-
-.menu-backdrop {
-  backface-visibility: hidden;
-  backface-visibility: hidden;
-  background-color: #000;
-  opacity: 0;
-  right: 0;
-  bottom: 0;
-  transition: opacity 0.3s cubic-bezier(0.4, 0, 0.2, 1);
-  transition: opacity 0.3s cubic-bezier(0.4, 0, 0.2, 1);
-  z-index: 30;
-}
-
-.menu-backdrop.in {
-  opacity: 0.5;
-}
-
-.menu-logo {
-  align-items: center;
-  -ms-flex-align: center;
-  align-items: center;
-  border-bottom: 1px solid #dadada;
-  color: #314e7d;
-  display: flex;
-  font-size: 20px;
-  font-weight: 300;
-  line-height: 28px;
-  margin-bottom: 8px;
-  min-height: 56px;
-  padding: 0 16px;
-}
-
-.menu-logo[href]:focus,
-.menu-logo[href]:hover {
-  color: #212121;
-  outline: 0;
-  text-decoration: none;
-}
-
-.menu-content > .menu-logo:first-child {
-  margin-top: -8px;
-}
-
-.menu-logo img {
-  display: block;
-  max-height: 42px;
-  width: auto;
-}
-
-/* 弹出来的菜单栏 */
-.menu-scroll {
-  background-color: #fff;
-  height: 100%;
-  max-width: 85%;
-  max-width: calc(100% - 64px);
-  overflow-x: hidden;
-  overflow-y: auto;
-  transform: translateX(-100%);
-  transform: translateX(-100%);
-  transition: -webkit-transform 0.3s cubic-bezier(0.4, 0, 0.2, 1);
-  transition: -webkit-transform 0.3s cubic-bezier(0.4, 0, 0.2, 1);
-  transition: transform 0.3s cubic-bezier(0.4, 0, 0.2, 1);
-  transition: transform 0.3s cubic-bezier(0.4, 0, 0.2, 1), -webkit-transform 0.3s cubic-bezier(0.4, 0, 0.2, 1);
-  width: 200px;
-  z-index: 1;
-  -webkit-overflow-scrolling: touch;
-  -ms-overflow-style: none;
-}
-
-.menu-right .menu-scroll {
-  right: 0;
-  left: auto;
-  transform: translateX(100%);
-  transform: translateX(100%);
-}
-
-.menu.in .menu-scroll {
-  transform: translateX(0);
-  transform: translateX(0);
-}
-
-.menu-top {
-  background-color: #000;
-  color: #fff;
-  position: relative;
-  z-index: 1;
-}
-
-.menu-top a,
-.menu-top a:focus,
-.menu-top a:hover {
-  color: inherit;
-  text-decoration: none;
-}
-
-.menu-top-img {
-  align-items: center;
-  -ms-flex-align: center;
-  align-items: center;
-  display: flex;
-  height: 100%;
-  -webkit-box-pack: center;
-  justify-content: center;
-  -ms-flex-pack: center;
-  justify-content: center;
-  overflow: hidden;
-  position: absolute;
-  top: 0;
-  left: 0;
-  width: 100%;
-}
-
-.menu-top-img img {
-  min-height: 100%;
-  width: 100%;
-  opacity: 0.5;
-}
-
-.menu-top-info {
-  padding: 12px 16px;
-  position: relative;
-}
-
-@media screen and (min-width: 768px) {
-  .menu-top-info {
-    padding-top: 24px;
-    padding-bottom: 24px;
-  }
-}
-
-.menu-top-info-sub {
-  font-weight: 300;
-  padding: 12px 16px;
-  position: relative;
-}
-
-@media screen and (min-width: 768px) {
-  .menu-top-info-sub {
-    padding-top: 24px;
-  }
-}
-
-.menu-top-user {
-  -webkit-box-align: center;
-  align-items: center;
-  -ms-flex-align: center;
-  align-items: center;
-  display: box;
-  display: flex;
-  display: flexbox;
-  display: flex;
-}
-
-.menu-top-user > * {
-  flex-shrink: 0;
-  -ms-flex-negative: 0;
-  flex-shrink: 0;
-}
-
-@media screen and (min-width: 992px) {
-  .menu-scroll {
-    max-width: none;
-  }
-
-  .nav-drawer.nav-drawer-md {
-    background-color: transparent;
-    display: block !important;
-    overflow: visible;
-    width: 240px;
-    z-index: 30;
-  }
-
-  .nav-drawer.nav-drawer-md.in ~ .menu-backdrop {
-    display: none;
-  }
-
-  .nav-drawer.nav-drawer-md.in ~ .menu-backdrop ~ .menu-backdrop {
-    display: block;
-  }
-
-  .nav-drawer.nav-drawer-md.menu-left ~ .content,
-  .nav-drawer.nav-drawer-md.menu-left ~ .footer,
-  .nav-drawer.nav-drawer-md.menu-left ~ .header {
-    margin-left: 240px;
-  }
-
-  .nav-drawer.nav-drawer-md.menu-right ~ .content,
-  .nav-drawer.nav-drawer-md.menu-right ~ .footer,
-  .nav-drawer.nav-drawer-md.menu-right ~ .header {
-    margin-right: 240px;
-  }
-
-  /* 正常状态的菜单栏 */
-  .nav-drawer.nav-drawer-md .menu-scroll {
-    box-shadow: 0 0 10px rgb(0 0 0 / 10%);
-    transform: none;
-    transform: none;
-    width: 240px;
-  }
-}
-
-@media screen and (min-width: 1440px) {
-  .nav-drawer.nav-drawer-lg {
-    background-color: transparent;
-    display: block !important;
-    overflow: visible;
-    width: 240px;
-    z-index: 30;
-  }
-
-  .nav-drawer.nav-drawer-lg.in ~ .menu-backdrop {
-    display: none;
-  }
-
-  .nav-drawer.nav-drawer-lg.in ~ .menu-backdrop ~ .menu-backdrop {
-    display: block;
-  }
-
-  .nav-drawer.nav-drawer-lg.menu-left ~ .content,
-  .nav-drawer.nav-drawer-lg.menu-left ~ .footer,
-  .nav-drawer.nav-drawer-lg.menu-left ~ .header {
-    margin-left: 240px;
-  }
-
-  .nav-drawer.nav-drawer-lg.menu-right ~ .content,
-  .nav-drawer.nav-drawer-lg.menu-right ~ .footer,
-  .nav-drawer.nav-drawer-lg.menu-right ~ .header {
-    margin-right: 240px;
-  }
-
-  .nav-drawer.nav-drawer-lg .menu-scroll {
-    box-shadow: 0 0 10px rgb(0 0 0 / 50%);
-    transform: none;
-    transform: none;
-    width: 240px;
-  }
-}
-
-/* 菜单 */
-
-/* .md-menu-left {
-	width: 31%;
-	border-radius: 0 20px 20px 0;
-	box-shadow: 0 0 5px 1px #cacaca;
-}
-.md-menu-left a {
-	border-radius: 0 20px 20px 0;
-	min-height: 30px;
-}
-
-.md-menu-right {
-	border-radius: 20px 0 0 20px;
-	box-shadow: 0 0 5px 1px #cacaca;
-	margin: 10px 0 10px 40px;
-}
-.md-menu-right a {
-	min-height: 30px;
-} */
-
-.bgc-fix {
-  background: white;
-}
-
-.tgme_widget_login.large button.tgme_widget_login_button {
-  max-width: 80%;
-}
-
-@media screen and (min-width: 400px) {
-  .tgme_widget_login.large button.tgme_widget_login_button {
-    max-width: 100%;
-  }
-}
-
-@keyframes sparkle {
-  from { background-position: 0 0; }
-  to { background-position: 0 -64px; }
-}
-
-@keyframes sparkle {
-  from { background-position: 0 0; }
-  to { background-position: 0 -64px; }
-}
-
-@keyframes sparkle {
-  from { background-position: 0 0; }
-  to { background-position: 0 -64px; }
-}
-
-@keyframes sparkle {
-  from { background-position: 0 0; }
-  to { background-position: 0 -64px; }
-}
-
-.cust-link.form-control {
-  color: #399af2;
-  cursor: unset;
-  padding-bottom: 2px;
-  margin-right: 1em;
-  padding-right: 1em;
-  background-color: #f3f3f3;
-}
-
-.invite-link,
-.cardbtn-edit {
-  display: flex;
-  justify-content: space-between;
-  flex-wrap: nowrap;
-}
-
-.invite-link {
-  justify-content: flex-start;
-}
-
-.cardbtn-edit .card-heading {
-  margin-bottom: 0;
-  margin-top: 8px;
-}
-
-.cardbtn-edit .btn-flat {
-  border-radius: 50%;
-  background: #666;
-  width: 50px;
-  height: 50px;
-  color: white;
-  box-shadow: 1px 2px 3px rgb(0 0 0 / 15%), 1px 2px 3px 1px rgb(0 0 0 / 15%);
-}
-
-.cardbtn-edit .btn-flat span {
-  position: relative;
-  font-size: 21px;
-  top: 1px;
-}
-
-.cardbtn-edit .account-flex .btn-flat {
-  margin-left: 1em;
-  background: #ff4343;
-}
-
-.cardbtn-edit .account-flex .btn-flat span {
-  top: 6px;
-}
-
-.cardbtn-edit a.btn-flat.btn-brand-accent {
-  color: white !important;
-  display: inline-block;
-}
-
-.cardbtn-edit a.btn-flat.btn-brand-accent span {
-  position: relative;
-  top: 7px;
-}
-
-.cardbtn-edit a.btn-flat.btn-brand-accent.reset-link i {
-  font-size: 30px;
-  position: relative;
-  top: 0.2em;
-  right: 0.15em;
-}
-
-.cardbtn-edit a.btn-flat.btn-brand-accent.reset-link {
-  margin-left: 1em;
-  display: inline-block;
-  background: #ff4343;
-}
-
-.cardbtn-edit a.btn-flat.btn-brand-accent.reset-link:hover,
-.cardbtn-edit .btn-flat:hover {
-  border-radius: 10px;
-  transition-duration: 0.3s;
-}
-
-.quickadd .reset-link {
-  margin-right: 0.5em;
-}
-
-.invite-link .cust-link {
-  flex-basis: 100%;
-  margin: 0;
-  width: 100%;
-}
-
-.invite-link .btn-subscription {
-  margin: 0 0 2em 1em;
-  flex-basis: 12%;
-}
-
-#buy-invite span {
-  position: relative;
-  top: 4px;
-  left: 1px;
-}
-
-.account-flex {
-  display: flex;
-  justify-content: flex-end;
-  align-items: center;
-}
-
-code.form-control {
-  min-height: 200px;
-}
-
-.codepay button {
-  padding-left: 0;
-}
-
-@media screen and (max-width: 430px) {
-  .reset-flex {
-    display: flex;
-    justify-content: flex-end;
-    flex-basis: 100%;
-    align-items: center;
-    margin: 1em 0;
-  }
-
-  .tab-nav {
-    font-size: 13px;
-  }
-
-  .nav .a,
-  .nav a {
-    padding: 0 10px;
-  }
-
-  .invite-link .btn-subscription {
-    flex-basis: 100%;
-    margin: 1em 0 2em;
-  }
-
-  .invite-link {
-    flex-wrap: wrap;
-  }
-}
-
-.qr-center img {
-  margin-left: auto;
-  margin-right: auto;
-  max-width: 100%;
-}
-
-@media screen and (min-width: 1440px) {
-  .hidden-lg {
-    display: none !important;
-  }
-
-  .visible-lg-block {
-    display: block !important;
-  }
-
-  .visible-lg-inline {
-    display: inline !important;
-  }
-
-  .visible-lg-inline-block {
-    display: inline-block !important;
-  }
-}
-
-@media screen and (min-width: 992px) and (max-width: 1439px) {
-  .hidden-md {
-    display: none !important;
-  }
-
-  .visible-md-block {
-    display: block !important;
-  }
-
-  .visible-md-inline {
-    display: inline !important;
-  }
-
-  .visible-md-inline-block {
-    display: inline-block !important;
-  }
-}
-
-@media screen and (min-width: 768px) and (max-width: 991px) {
-  .hidden-sm {
-    display: none !important;
-  }
-
-  .visible-sm-block {
-    display: block !important;
-  }
-
-  .visible-sm-inline {
-    display: inline !important;
-  }
-
-  .visible-sm-inline-block {
-    display: inline-block !important;
-  }
-}
-
-@media screen and (min-width: 480px) and (max-width: 767px) {
-  .hidden-xs {
-    display: none !important;
-  }
-
-  .visible-xs-block {
-    display: block !important;
-  }
-
-  .visible-xs-inline {
-    display: inline !important;
-  }
-
-  .visible-xs-inline-block {
-    display: inline-block !important;
-  }
-}
-
-@media screen and (max-width: 479px) {
-  .hidden-xx {
-    display: none !important;
-  }
-
-  .visible-xx-block {
-    display: block !important;
-  }
-
-  .visible-xx-inline {
-    display: inline !important;
-  }
-
-  .visible-xx-inline-block {
-    display: inline-block !important;
-  }
-}
-
-i {
-  user-select: none;
-  user-select: none;
-  user-select: none;
-  user-select: none;
-}

File diff suppressed because it is too large
+ 0 - 3
public/theme/material/css/base.min.css


BIN
public/theme/material/css/images/bg/amber.jpg


BIN
public/theme/material/css/images/bg/geometry.jpg


BIN
public/theme/material/css/images/bg/streak.jpg


+ 0 - 1493
public/theme/material/css/index.css

@@ -1,1493 +0,0 @@
-@import "https://cdn.staticfile.org/font-awesome/4.7.0/css/font-awesome.min.css";
-
-.pure-g {
-  align-content: unset;
-  align-content: unset;
-  -ms-flex-line-pack: unset;
-}
-
-body {
-  background-color: #1d1d1d;
-  color: white;
-  min-height: 100vh;
-}
-
-a {
-  color: inherit;
-  text-decoration: none;
-}
-
-.flex {
-  display: flex;
-}
-
-.space-around {
-  justify-content: space-around;
-}
-
-.space-between {
-  justify-content: space-between;
-}
-
-.align-center {
-  align-items: center;
-}
-
-.align-baseline {
-  align-items: baseline;
-}
-
-.justify-center {
-  justify-content: center;
-}
-
-.wrap {
-  flex-wrap: wrap;
-}
-
-.text-left {
-  text-align: left;
-}
-
-.text-center {
-  text-align: center;
-}
-
-.text-right {
-  text-align: right;
-}
-
-.text-red {
-  color: #d1335b;
-}
-
-.relative {
-  position: relative;
-}
-
-[v-cloak] {
-  display: none;
-}
-
-.margin-nobottom {
-  margin-bottom: 0 !important;
-}
-
-.nav,
-.main,
-.footer {
-  flex-basis: 100%;
-}
-
-.loading {
-  position: fixed;
-  top: 0;
-  text-align: center;
-  width: 100%;
-  height: 100%;
-  justify-content: center;
-  font-size: 4rem;
-}
-
-.button-round.active {
-  opacity: 1;
-}
-
-.logo-sm,
-.auth-sm {
-  padding: 1rem;
-}
-
-.auth-sm {
-  text-align: right;
-  justify-content: flex-end;
-}
-
-.auth-sm a {
-  min-width: 80px;
-}
-
-.logo-sm .logo {
-  height: 48px;
-}
-
-.logo {
-  border-radius: 50%;
-}
-
-.logo-sm > a {
-  align-items: center;
-}
-
-.logo-sm .logo {
-  margin-right: 0.5rem;
-}
-
-.logo-bg .logo {
-  height: 160px;
-  display: none;
-}
-
-.sign {
-  font-size: 0.5rem;
-  margin-top: 2px;
-  color: #858585;
-}
-
-.main {
-  text-align: center;
-  min-height: 80vh;
-  padding: 1.5rem 0 2.5rem;
-}
-
-.title,
-.auth {
-  margin-right: auto;
-  margin-left: auto;
-  display: flex;
-  align-items: center;
-  width: 80%;
-  justify-content: center;
-}
-
-.title-left {
-  text-align: center;
-}
-
-.title-left a {
-  margin-right: 0.5rem;
-  margin-bottom: 0.5rem;
-}
-
-.title h1 {
-  font-size: 2.5rem;
-  margin: 0;
-  display: inline-block;
-  border-bottom: 2px solid currentcolor;
-}
-
-.title span {
-  font-size: 1.5rem;
-  display: block;
-  margin-bottom: 2rem;
-}
-
-.button-index {
-  font-size: 1rem;
-  padding: 0.5rem 1.5rem;
-  display: inline-block;
-  border: 2px solid currentcolor;
-  min-width: 120px;
-  text-align: center;
-}
-
-.button-index:hover,
-.button-index:focus {
-  color: rgb(142 142 142);
-  border: 2px solid currentcolor;
-}
-
-a.btn-user,
-button.btn-user,
-.uim-dropdown-btn {
-  font-size: 1rem;
-  padding: 0.5rem 1.5rem;
-  display: inline-block;
-  border: 1px solid #434857;
-  min-width: 80px;
-  text-align: center;
-  transition: all 0.3s;
-  background: inherit;
-  outline: none;
-}
-
-a.btn-user:hover,
-button.btn-user:hover,
-.uim-dropdown-btn:hover,
-button.btn-user.index-btn-active {
-  border: 1px solid white;
-  box-shadow: 0 0 5px 1px gray;
-}
-
-.footer {
-  padding: 0 3rem;
-}
-
-.staff,
-.time {
-  text-align: center;
-}
-
-.staff {
-  color: rgb(120 120 120 / 100%);
-}
-
-.staff a {
-  color: #d1335b;
-}
-
-.card,
-.tips,
-.btn-inline,
-.btn-forinput,
-.staff a,
-.input-control input,
-.auth-submit,
-.button-round,
-.button-index,
-input.checkbox,
-.buy-submit,
-.font-light,
-.list-shop,
-.user-config {
-  transition: all 0.3s;
-}
-
-.staff a:hover,
-.staff a:focus {
-  color: #13c2c2;
-}
-
-.input-control input {
-  border: none;
-  border-bottom: 2px solid white;
-  background: none;
-  outline: none;
-}
-
-.input-control input:focus {
-  border-color: #adadad;
-}
-
-.auth-submit,
-.buy-submit {
-  border-radius: 3px;
-  color: #d1335b;
-  background: white;
-  outline: none;
-  border: 1px solid transparent;
-  min-height: 46px;
-  margin-top: 1rem;
-  width: 81%;
-}
-
-.buy-submit {
-  min-height: unset;
-  width: unset;
-  margin: 0;
-  font-size: 16px;
-  padding: 0.05rem 0.5rem 0.2rem;
-  width: 48%;
-  background: rgb(255 255 255 / 0%);
-  border: 1px solid #d1335b;
-}
-
-.buy-submit:hover,
-.buy-submit:focus {
-  background-color: #d1335b;
-  color: white;
-}
-
-.auth-submit:hover,
-.auth-submit:focus, {
-  background-color: #d6d6d6;
-  border-color: #d6d6d6;
-}
-
-.buy-submit:disabled,
-button.tips:disabled {
-  color: #858585;
-  border-color: #858585;
-  cursor: not-allowed;
-  background-color: transparent;
-}
-
-.auth,
-.user,
-.pw {
-  width: 100%;
-}
-
-.user {
-  padding: 0 0.5rem;
-}
-
-.auth h1 {
-  font-size: 3.5rem;
-  margin-top: 0;
-}
-
-.auth h3 {
-  margin: 0;
-}
-
-.page-auth,
-.page-user,
-.page-pw {
-  text-align: center;
-  position: relative;
-}
-
-.page-auth {
-  min-height: 450px;
-}
-
-.input-control {
-  justify-content: center;
-  flex-wrap: wrap;
-  margin-left: auto;
-  margin-right: auto;
-}
-
-.input-control-inner {
-  flex-wrap: wrap;
-  text-align: left;
-}
-
-.input-control > label,
-.input-control > input,
-.input-control > select {
-  flex-basis: 80%;
-  text-align: left;
-}
-
-.input-control-inner > label,
-.input-control-inner > input {
-  flex-basis: 100%;
-}
-
-.twin {
-  justify-content: space-around;
-  align-items: flex-end;
-  padding: 0;
-}
-
-.twin > * {
-  flex-basis: 100%;
-}
-
-.input-control > input,
-.input-control-inner > input,
-.input-control > button {
-  margin-bottom: 1.5rem;
-}
-
-.reg {
-  flex-wrap: wrap;
-}
-
-.reg .input-control {
-  flex-basis: 100%;
-}
-
-input[name] {
-  height: 46px;
-}
-
-select {
-  color: black;
-  height: 36px;
-}
-
-.button-round {
-  justify-content: flex-start;
-  align-items: center;
-  margin-bottom: 1rem;
-  opacity: 0.5;
-}
-
-.button-round .fa-inverse {
-  color: black;
-}
-
-.button-round .fa-stack {
-  margin-right: 0.4rem;
-}
-
-.button-round:hover,
-.button-round:focus {
-  opacity: 1;
-}
-
-.icon-round {
-  background: white;
-  color: black;
-  border-radius: 50%;
-  width: 2rem;
-  height: 2rem;
-  display: inline-block;
-  margin-right: 0.75rem;
-  line-height: 2rem;
-  padding-left: 0.1rem;
-}
-
-#embed-captcha-reg {
-  margin-top: 1em;
-}
-
-.title-back {
-  position: absolute;
-  width: 100%;
-  height: 100%;
-  font-size: 5rem;
-  user-select: none;
-  z-index: -1;
-  color: #2e2e2e;
-  justify-content: center;
-  font-weight: bolder;
-  word-break: break-all;
-}
-
-.basis-max .input-control {
-  width: 100%;
-}
-
-.basis-max .auth-submit {
-  width: 80%;
-}
-
-#code_number,
-.tg-timeout {
-  padding: 0.6rem 1rem;
-  width: 100%;
-  font-size: 1.3em;
-}
-
-.auth-submit.tg-timeout {
-  width: 80%;
-}
-
-.qr-center img {
-  width: 70%;
-  height: 70%;
-  text-align: center;
-}
-
-#register {
-  margin-top: 2rem;
-}
-
-#embed-captcha-reg {
-  min-height: 44px;
-}
-
-.auth-tg {
-  margin-top: 2rem;
-}
-
-.auth-tg p {
-  padding: 0 2rem;
-}
-
-.auth-tg p a {
-  color: #d1335b;
-}
-
-.card {
-  border: 1px solid #434857;
-  margin-bottom: 1.5rem;
-}
-
-.user-btngroup {
-  margin-bottom: 1.5rem;
-}
-
-.user-btngroup a,
-.user-btngroup button {
-  min-width: 120px;
-}
-
-.card:hover,
-.list-shop:hover {
-  border: 1px solid white;
-  box-shadow: 0 0 5px 1px gray;
-}
-
-.card-title {
-  font-size: 18px;
-  margin-bottom: 0.5rem;
-}
-
-.card-body,
-.card-title {
-  padding: 1rem;
-}
-
-.card-body {
-  padding-top: 0;
-}
-
-.font-light {
-  padding-right: 1rem;
-  text-overflow: ellipsis;
-  overflow: hidden;
-  color: #b1b3bb;
-  margin: 0.75rem 0;
-  white-space: nowrap;
-}
-
-.font-light:hover {
-  color: white;
-}
-
-.tips {
-  display: inline-block;
-  margin: 0;
-  padding: 0.2rem 0.7rem;
-  border: 1px solid;
-  font-size: 14px;
-  border-radius: 3px;
-  outline: none;
-}
-
-.tips-blue {
-  color: #1997c6;
-  border-color: #1997c6;
-}
-
-.tips-gold {
-  color: #faad14;
-  border-color: #faad14;
-}
-
-.tips-gold-trans.tips-gold {
-  color: white;
-  background-color: #faad14;
-}
-
-.tips-green {
-  color: #52c41a;
-  border-color: #52c41a;
-}
-
-.tips-cyan {
-  color: #13c2c2;
-  border-color: #13c2c2;
-}
-
-.tips-red {
-  color: #d1335b;
-  border-color: #d1335b;
-}
-
-.font-red-trans {
-  color: #d1335b;
-}
-
-.font-gold-trans {
-  color: #faad14;
-}
-
-.font-green-trans {
-  color: #52c41a;
-}
-
-button.tips {
-  background-color: transparent;
-}
-
-.tips-blue:hover,
-.tips-gold:hover,
-.tips-green:hover,
-.tips-cyan:hover,
-.tips-red:hover {
-  color: white;
-}
-
-.tips-blue:hover {
-  background-color: #1997c6;
-}
-
-.tips-gold:hover {
-  background-color: #faad14;
-}
-
-.tips-green:hover {
-  background-color: #52c41a;
-}
-
-.tips-cyan:hover {
-  background-color: #13c2c2;
-}
-
-.tips-red:hover {
-  background-color: #d1335b;
-}
-
-.ann {
-  background-color: rgb(255 255 255 / 20%);
-  border-radius: 5px;
-  padding: 0.1rem 1rem;
-}
-
-.dl-link button {
-  font-size: 14px;
-}
-
-.input-copy,
-.input-copy > input {
-  width: 100%;
-}
-
-.input-copy input {
-  height: unset;
-  background: rgb(255 255 255 / 0%);
-  cursor: pointer;
-}
-
-.input-copy > div,
-.input-copy input {
-  margin-bottom: 0.7rem;
-}
-
-.input-copy div input {
-  margin-bottom: 0;
-}
-
-.user-invite input,
-.btn-inline {
-  background: rgb(255 255 255 / 0%);
-}
-
-.btn-inline {
-  border: 1px solid #d1335b;
-  color: #d1335b;
-  border-radius: 3px;
-  font-size: 14px;
-  padding: 0.3rem 0.8rem;
-}
-
-.btn-inline:hover {
-  background: #d1335b;
-  color: white;
-}
-
-.invite-number {
-  font-size: 14px;
-}
-
-.invite-tools {
-  position: relative;
-  margin-left: 0.75rem;
-}
-
-.invite-tools .tips.tips-red {
-  position: relative;
-  top: 1px;
-}
-
-.invite-tools.tips-green {
-  padding: 3.5px 0.7rem;
-  bottom: 1px;
-  margin-left: 0.55rem;
-}
-
-.invite-link {
-  width: 100%;
-  cursor: pointer;
-}
-
-.user-invite-title .uim-tooltip {
-  width: 100%;
-}
-
-.user-invite-title .uim-tooltip button {
-  border: 0;
-}
-
-.user-invite-title .tips {
-  position: relative;
-}
-
-.list-shop {
-  padding: 0.5rem;
-  font-size: 1.2rem;
-  border: 1px solid #434857;
-  margin-bottom: 0.7rem;
-  width: 95%;
-  backface-visibility: hidden;
-  backface-visibility: hidden;
-  backface-visibility: hidden;
-}
-
-.list-shop:hover {
-  transform: translate3d(1rem, 0, 0);
-}
-
-.coupon-checker {
-  height: 30px;
-  background-color: rgb(255 255 255 / 0%);
-  padding: 0 0.5rem;
-  margin-bottom: 0.5rem;
-}
-
-.coupon-checker:hover,
-.coupon-checker,
-.btn-forinput {
-  background-color: rgb(255 255 255 / 0%);
-}
-
-.btn-forinput {
-  color: #1997c6;
-  border: none;
-  outline: none;
-  position: absolute;
-  top: 0.3rem;
-  font-size: 14px;
-  z-index: 1;
-}
-
-.btn-forinput:hover {
-  color: white;
-}
-
-button[name="check"] {
-  right: 1.5rem;
-}
-
-button[name="reset"] {
-  right: 0.2rem;
-}
-
-.order-checker-content {
-  margin: 0.5rem 0;
-}
-
-.link-reset button {
-  background-color: rgb(255 255 255 / 0%);
-  outline: none;
-}
-
-.link-reset .uim-tooltip-top {
-  width: 100%;
-  background-color: white;
-  color: #434857;
-}
-
-.link-reset .uim-tooltip-top button {
-  border: 0;
-}
-
-.sublink {
-  font-size: 14px;
-  padding: 0 1rem;
-  word-break: break-all;
-}
-
-.sublink-reset.tips-blue,
-.invite-reset.tips-blue {
-  background-color: #1997c6;
-  color: white;
-}
-
-@media screen and (min-width: 35.5em) {
-  .user {
-    padding: 0;
-  }
-
-  .auth-tg {
-    margin-top: 0;
-  }
-
-  .auth-sm a {
-    min-width: 120px;
-  }
-
-  .footer {
-    margin-top: 3rem;
-  }
-
-  .title-left a {
-    margin-bottom: 0;
-  }
-
-  .logo-sm,
-  .auth-sm {
-    padding: 1rem 3rem;
-    margin-top: 0.8rem;
-  }
-
-  .title h1 {
-    font-size: 4rem;
-  }
-
-  .staff {
-    text-align: left;
-  }
-
-  .time {
-    text-align: right;
-  }
-
-  .auth-submit {
-    width: 32%;
-  }
-
-  .auth-links {
-    padding: 0;
-  }
-
-  .auth-links a {
-    flex-basis: 100%;
-  }
-
-  .title-back {
-    font-size: 8.5rem;
-  }
-
-  .auth > div:first-of-type {
-    padding: 0 0 0 5%;
-  }
-
-  .usrcenter {
-    padding: 0 10%;
-  }
-
-  .enableCrisp {
-    padding-right: 3rem;
-  }
-
-  .ann,
-  .user-shop {
-    max-height: 385px;
-    overflow: auto;
-  }
-
-  .link-reset .uim-tooltip-top {
-    width: 230px;
-  }
-
-  .invite-link {
-    width: 450px;
-  }
-
-  .user-invite-title .tips {
-    margin-bottom: 0.5rem;
-    margin-left: 0.75rem;
-  }
-
-  .margin-nobottom-sm {
-    margin-bottom: 0 !important;
-  }
-}
-
-@media screen and (min-width: 48em) {
-  .title h1 {
-    font-size: 5rem;
-  }
-
-  .twin {
-    justify-content: space-around;
-    align-items: flex-end;
-    padding: 0 2.5%;
-  }
-
-  .twin > * {
-    flex-basis: 39%;
-  }
-
-  .input-control {
-    width: 41%;
-  }
-
-  .reg .input-control {
-    flex-basis: 48%;
-  }
-}
-
-@media screen and (min-width: 64em) {
-  .title {
-    width: 75%;
-    padding-left: 5%;
-  }
-
-  .auth {
-    width: 90%;
-  }
-
-  .title-back {
-    font-size: 12rem;
-  }
-}
-
-@media screen and (min-width: 80em) {
-  .title h1 {
-    padding-right: 4rem;
-  }
-
-  .title-left {
-    text-align: left;
-  }
-
-  .logo-bg .logo {
-    display: unset;
-    margin-left: 10rem;
-  }
-}
-
-@media screen and (max-width: 35.5em) {
-  .hide-sm {
-    display: none !important;
-  }
-}
-
-/* 组件 */
-
-/* messager */
-.uim-messager {
-  position: fixed;
-  top: 6rem;
-  left: 0;
-  right: 0;
-  margin-right: auto;
-  margin-left: auto;
-  display: inline-block;
-  text-align: center;
-  border-radius: 3px;
-  z-index: 10;
-  padding: 7px 10px;
-  color: black;
-  background: white;
-  width: 200px;
-  min-height: 36px;
-  box-shadow: 0 0 5px 1px gray;
-}
-
-.uim-messager span {
-  margin-left: 0.6rem;
-}
-
-.uim-messager a {
-  color: #d1335b;
-}
-
-/* checkbox */
-input[type="checkbox"].uim-checkbox {
-  width: 16px;
-  height: 16px;
-  opacity: 0;
-  position: relative;
-  bottom: 0.1rem;
-}
-
-.uim-check-content {
-  font-size: 0.9rem;
-  position: relative;
-  left: 0.2rem;
-  top: 1px;
-}
-
-.uim-checkbox-icon {
-  position: absolute;
-  bottom: 1px;
-  font-size: 14px;
-}
-
-.uim-check {
-  position: relative;
-  top: 1px;
-  height: 14px;
-  width: 15px;
-  background: aliceblue;
-  transition: all 0.3s;
-}
-
-.uimchecked {
-  background: #d1335b;
-  box-shadow: 0 0 5px 1px gray;
-}
-
-/* dropdown */
-
-.uim-dropdown {
-  position: relative;
-  display: inline-block;
-}
-
-.uim-dropdown-menu {
-  position: absolute;
-  top: 100%;
-  min-width: 120px;
-  cursor: pointer;
-  background: #1d1d1d;
-  z-index: 2;
-}
-
-.uim-dropdown-menu ul {
-  margin: 0;
-  width: 100%;
-  padding: 0;
-  text-align: center;
-  border: 1px solid #1997c6;
-  box-shadow: 0 0 5px 1px gray;
-}
-
-.uim-dropdown-menu li {
-  list-style: none;
-  width: 100%;
-  padding: 0.2rem 0;
-  transition: all 0.3s;
-}
-
-.uim-dropdown-menu li a {
-  display: block;
-  width: 100%;
-  height: 100%;
-}
-
-.uim-dropdown-menu li:hover {
-  background: #1997c6;
-  transition: all 0.3s;
-}
-
-.uim-dropdown-btn {
-  min-width: 120px;
-}
-
-.dropdown-fade-enter-active,
-.dropdown-fade-leave-active {
-  transition: all 0.2s ease;
-}
-
-.dropdown-fade-enter,
-.dropdown-fade-leave-to {
-  transform-origin: top;
-  transform: scaleY(0);
-  opacity: 0;
-}
-
-.dl-link .uim-dropdown-btn,
-.dl-link .uim-dropdown-menu {
-  min-width: unset;
-  width: 100%;
-}
-
-/* modal */
-
-.uim-modal-mask,
-.uim-modal {
-  position: fixed;
-  top: 0;
-  left: 0;
-  height: 100vh;
-  width: 100vw;
-  background-color: black;
-  opacity: 0.4;
-  z-index: 20;
-}
-
-.uim-modal {
-  opacity: 1;
-  background-color: unset;
-  display: flex;
-  justify-content: center;
-}
-
-.uim-modal-card {
-  z-index: 21;
-  margin-top: 6rem;
-  background-color: white;
-  width: 450px;
-  border-radius: 7px;
-  color: #434857;
-  margin-bottom: auto;
-  box-shadow: 0 0 5px 2px gray;
-  position: relative;
-}
-
-.uim-modal-title {
-  border-bottom: 1px solid;
-}
-
-.uim-modal-title h3 {
-  padding: 0.22rem 1.5rem;
-  margin: 1rem 0;
-}
-
-.uim-modal-body {
-  font-size: 18px;
-  padding: 1rem 0 1rem 2rem;
-}
-
-.uim-modal-body div {
-  flex-basis: 100%;
-}
-
-.uim-modal-footer {
-  display: flex;
-  padding: 0.75rem 0;
-  border-top: 1px solid;
-  align-items: center;
-}
-
-.uim-modal-footer div {
-  flex-basis: 50%;
-}
-
-.uim-modal-footer > div:first-of-type {
-  padding-left: 1.5rem;
-}
-
-.uim-modal-footer > div:last-of-type {
-  text-align: right;
-}
-
-button.uim-modal-confirm {
-  margin-right: 1.5rem;
-  padding: 0.5rem 0.4rem;
-  min-width: 80px;
-  background-color: #2d8cf0;
-  border-radius: 4px;
-  border: 1px solid;
-  color: white;
-}
-
-.uim-modal-close {
-  position: absolute;
-  right: 0.75rem;
-  top: 0.45rem;
-  font-size: 1.5rem;
-  padding: 0.5rem 0.75rem;
-  cursor: pointer;
-}
-
-/* switch */
-
-.uim-switch-body {
-  background-color: #ccc;
-  border-radius: 25px;
-  cursor: pointer;
-}
-
-.uim-switch-body::after {
-  content: "";
-  height: 20px;
-  width: 20px;
-  border-radius: 50%;
-  position: absolute;
-  background-color: white;
-  top: 2px;
-  left: 2px;
-}
-
-.uim-switch-body,
-.uim-switch-body::after {
-  transition: all 0.3s;
-  display: inline-block;
-}
-
-.uim-switch-body input,
-.uim-switch-body {
-  height: 24px;
-  width: 46px;
-  position: relative;
-}
-
-.uim-switch-body input {
-  z-index: 1;
-  opacity: 0;
-}
-
-.uim-switch-body-active::after {
-  transform: translateX(22px);
-}
-
-.uim-switch-body-active {
-  background-color: #2d8cf0;
-}
-
-.switch-text {
-  font-size: 14px;
-}
-
-/* tooltip */
-
-.uim-tooltip {
-  position: absolute;
-  z-index: 2;
-  box-shadow: 0 0 5px 1px gray;
-  border-radius: 4px;
-  background: white;
-  color: #434857;
-}
-
-.uim-tooltip-top {
-  bottom: 125%;
-  padding: 0.3rem;
-}
-
-.uim-tooltip.uim-tooltip-top::after {
-  content: "";
-  display: inline-block;
-  position: absolute;
-  bottom: -7px;
-  width: 15px;
-  height: 15px;
-  background-color: white;
-  transform: rotateZ(45deg);
-  z-index: -1;
-}
-
-/* anchor */
-
-.uim-anchor {
-  position: absolute;
-  right: 1rem;
-}
-
-.uim-anchor ul {
-  background-color: transparent;
-  margin: 0;
-}
-
-.uim-anchor li {
-  list-style: none;
-  width: 1.6rem;
-  height: 1.75rem;
-  display: block;
-  background-color: transparent;
-  border: 2px solid #434857;
-  border-top-color: transparent;
-  transition: all 0.3s;
-  cursor: pointer;
-  z-index: 1;
-}
-
-.uim-anchor li:hover {
-  border-color: #7cb7f7;
-  box-shadow: 0 0 5px 1px #a1e2e2;
-  border-top-color: #7cb7f7;
-}
-
-.uim-anchor li.uim-anchor-active {
-  background-color: #1997c6;
-  border-color: #7cb7f7;
-  box-shadow: 0 0 5px 0 #a1e2e2;
-  border-top-color: #7cb7f7;
-}
-
-.uim-anchor li:last-of-type {
-  border-radius: 0 0 12px 12px;
-}
-
-/* progressbar */
-
-.uim-progressbar {
-  display: flex;
-  align-items: center;
-  flex-wrap: wrap;
-}
-
-.uim-progressbar-inner,
-.uim-progressbar-progress,
-.uim-progressbar-progress::before {
-  display: inline-block;
-  height: 8px;
-  width: 100%;
-  background-color: #434857;
-  border-radius: 5px;
-  position: relative;
-  transition: all 0.3s;
-}
-
-.uim-progressbar-inner {
-  width: 80%;
-}
-
-.uim-progressbar-progress,
-.uim-progressbar-progress::before {
-  position: absolute;
-  left: 0;
-  top: 0;
-  width: 50%;
-  z-index: 3;
-}
-
-.uim-progressbar-progress::before {
-  content: "";
-  opacity: 0;
-  width: unset;
-  z-index: 4;
-  background-color: #fff;
-  border-radius: 5px;
-  animation: uim-progress-active 2s ease-in-out infinite;
-  animation: uim-progress-active 2s ease-in-out infinite;
-}
-
-.uim-progressbar .uim-progressbar-blue {
-  background-color: #2d8cf0;
-  box-shadow: 0 0 7px 0 #13c2c2;
-}
-
-.uim-progressbar .uim-progressbar-gold {
-  background-color: #e8a114;
-  box-shadow: 0 0 7px 0 #d4c00c;
-}
-
-.uim-progressbar .uim-progressbar-red {
-  background-color: #d1335b;
-  box-shadow: 0 0 7px 0 rgb(177 15 56);
-}
-
-.uim-progressbar-progress.uim-progressbar-fold {
-  z-index: 2;
-}
-
-.uim-progressbar-progress.uim-progressbar-fold.uim-progressbar-red {
-  box-shadow: 0 0 7px 1px indianred;
-}
-
-.uim-progressbar-sub .uim-progressbar-inner,
-.uim-progressbar-sub .uim-progressbar-progress,
-.uim-progressbar-sub .uim-progressbar-progress::before {
-  height: 5px;
-}
-
-.uim-progressbar-label {
-  font-size: 12px;
-  margin-bottom: 0.2rem;
-  width: 100%;
-}
-
-.uim-progress-text {
-  z-index: 5;
-  width: 100%;
-  position: relative;
-  display: flex;
-  justify-content: center;
-  font-size: 0.5rem;
-  top: -50%;
-}
-
-.uim-progressbar-sub .uim-progress-text {
-  top: -115%;
-}
-
-.uim-progress-sign {
-  font-size: 0.5rem;
-  width: 20%;
-  text-align: center;
-}
-
-@keyframes uim-progress-active {
-  from {
-    opacity: 0.3;
-    width: 0;
-  }
-
-  to {
-    opacity: 0;
-    width: 100%;
-  }
-}
-
-/* loading 动画 */
-.spinner {
-  width: 60px;
-  height: 60px;
-  background-color: #fff;
-  margin: 100px auto;
-  animation: rotateplane 1.2s infinite ease-in-out;
-  animation: rotateplane 1.2s infinite ease-in-out;
-}
-
-@keyframes rotateplane {
-  0% {
-    transform: perspective(120px);
-  }
-
-  50% {
-    transform: perspective(120px) rotateY(180deg);
-  }
-
-  100% {
-    transform: perspective(120px) rotateY(180deg) rotateX(180deg);
-  }
-}
-
-@keyframes rotateplane {
-  0% {
-    transform: perspective(120px) rotateX(0deg) rotateY(0deg);
-    transform: perspective(120px) rotateX(0deg) rotateY(0deg);
-  }
-
-  50% {
-    transform: perspective(120px) rotateX(-180.1deg) rotateY(0deg);
-    transform: perspective(120px) rotateX(-180.1deg) rotateY(0deg);
-  }
-
-  100% {
-    transform: perspective(120px) rotateX(-180deg) rotateY(-179.9deg);
-    transform: perspective(120px) rotateX(-180deg) rotateY(-179.9deg);
-  }
-}
-
-.spinnercube {
-  margin: 100px auto;
-  width: 32px;
-  height: 32px;
-  position: relative;
-  transition: all 0.3s;
-}
-
-.cube1,
-.cube2 {
-  background-color: white;
-  width: 30px;
-  height: 30px;
-  position: absolute;
-  top: 0;
-  left: 0;
-  animation: cubemove 1.8s infinite ease-in-out;
-  animation: cubemove 1.8s infinite ease-in-out;
-}
-
-.cube2 {
-  animation-delay: -0.9s;
-  animation-delay: -0.9s;
-}
-
-@keyframes cubemove {
-  25% {
-    transform: translateX(42px) rotate(-90deg) scale(0.5);
-  }
-
-  50% {
-    transform: translateX(42px) translateY(42px) rotate(-180deg);
-  }
-
-  75% {
-    transform: translateX(0) translateY(42px) rotate(-270deg) scale(0.5);
-  }
-
-  100% {
-    transform: rotate(-360deg);
-  }
-}
-
-@keyframes cubemove {
-  25% {
-    transform: translateX(42px) rotate(-90deg) scale(0.5);
-    transform: translateX(42px) rotate(-90deg) scale(0.5);
-  }
-
-  50% {
-    transform: translateX(42px) translateY(42px) rotate(-179deg);
-    transform: translateX(42px) translateY(42px) rotate(-179deg);
-  }
-
-  50.1% {
-    transform: translateX(42px) translateY(42px) rotate(-180deg);
-    transform: translateX(42px) translateY(42px) rotate(-180deg);
-  }
-
-  75% {
-    transform: translateX(0) translateY(42px) rotate(-270deg) scale(0.5);
-    transform: translateX(0) translateY(42px) rotate(-270deg) scale(0.5);
-  }
-
-  100% {
-    transform: rotate(-360deg);
-    transform: rotate(-360deg);
-  }
-}

File diff suppressed because it is too large
+ 0 - 0
public/theme/material/css/index.min.css


+ 0 - 679
public/theme/material/css/index_base.css

@@ -1,679 +0,0 @@
-/*!
-Pure v1.0.0
-Copyright 2013 Yahoo!
-Licensed under the BSD License.
-https://github.com/yahoo/pure/blob/master/LICENSE.md
-*/
-
-/*!
-normalize.css v^3.0 | MIT License | git.io/normalize
-Copyright (c) Nicolas Gallagher and Jonathan Neal
-*/
-/*! normalize.css v3.0.3 | MIT License | github.com/necolas/normalize.css */* { box-sizing: border-box; }
-
-img,
-legend { border: 0; }
-
-legend,
-td,
-th { padding: 0; }
-html { font-family: sans-serif; text-size-adjust: 100%; text-size-adjust: 100%; }
-body { margin: 0; }
-
-article,
-aside,
-details,
-figcaption,
-figure,
-footer,
-header,
-hgroup,
-main,
-menu,
-nav,
-section,
-summary { display: block; }
-
-audio,
-canvas,
-progress,
-video { display: inline-block; vertical-align: baseline; }
-audio:not([controls]) { display: none; height: 0; }
-
-[hidden],
-template { display: none; }
-a { background-color: transparent; }
-
-a:active,
-a:hover { outline: 0; }
-abbr[title] { border-bottom: 1px dotted; }
-
-b,
-optgroup,
-strong { font-weight: 700; }
-dfn { font-style: italic; }
-h1 { font-size: 2em; margin: 0.67em 0; }
-mark { background: #ff0; color: #000; }
-small { font-size: 80%; }
-
-sub,
-sup { font-size: 75%; line-height: 0; position: relative; vertical-align: baseline; }
-sup { top: -0.5em; }
-sub { bottom: -0.25em; }
-svg:not(:root) { overflow: hidden; }
-figure { margin: 1em 40px; }
-hr { box-sizing: content-box; height: 0; }
-
-pre,
-textarea { overflow: auto; }
-
-code,
-kbd,
-pre,
-samp { font-family: monospace, monospace; font-size: 1em; }
-
-button,
-input,
-optgroup,
-select,
-textarea { color: inherit; font: inherit; margin: 0; }
-button { overflow: visible; }
-
-button,
-select { text-transform: none; }
-
-button,
-html input[type="button"],
-input[type="reset"],
-input[type="submit"] { appearance: button; cursor: pointer; }
-
-button[disabled],
-html input[disabled] { cursor: default; }
-
-button::-moz-focus-inner,
-input::-moz-focus-inner { border: 0; padding: 0; }
-input { line-height: normal; }
-
-input[type="checkbox"],
-input[type="radio"] { box-sizing: border-box; padding: 0; }
-
-input[type="number"]::-webkit-inner-spin-button,
-input[type="number"]::-webkit-outer-spin-button { height: auto; }
-input[type="search"] { appearance: textfield; box-sizing: content-box; }
-
-input[type="search"]::-webkit-search-cancel-button,
-input[type="search"]::-webkit-search-decoration { appearance: none; }
-fieldset { border: 1px solid silver; margin: 0 2px; padding: 0.35em 0.625em 0.75em; }
-table { border-collapse: collapse; border-spacing: 0; }
-
-.hidden,
-[hidden] { display: none !important; }
-.pure-img { max-width: 100%; height: auto; display: block; }
-
-/*!
-grid.min.css
-*/
-.pure-g { letter-spacing: -0.31em; text-rendering: optimizespeed; font-family: FreeSans, Arimo, "Droid Sans", Helvetica, Arial, sans-serif; display: box; display: flex; display: flexbox; display: flex; flex-flow: row wrap; flex-flow: row wrap; flex-flow: row wrap; align-content: flex-start; -ms-flex-line-pack: start; align-content: flex-start; }
-
-@media all and (-ms-high-contrast: none), (-ms-high-contrast: active) { table .pure-g { display: block; } }
-
-.opera-only :-o-prefocus,
-.pure-g { word-spacing: -0.43em; }
-
-.pure-u,
-.pure-u-1,
-.pure-u-1-1,
-.pure-u-1-12,
-.pure-u-1-2,
-.pure-u-1-24,
-.pure-u-1-3,
-.pure-u-1-4,
-.pure-u-1-5,
-.pure-u-1-6,
-.pure-u-1-8,
-.pure-u-10-24,
-.pure-u-11-12,
-.pure-u-11-24,
-.pure-u-12-24,
-.pure-u-13-24,
-.pure-u-14-24,
-.pure-u-15-24,
-.pure-u-16-24,
-.pure-u-17-24,
-.pure-u-18-24,
-.pure-u-19-24,
-.pure-u-2-24,
-.pure-u-2-3,
-.pure-u-2-5,
-.pure-u-20-24,
-.pure-u-21-24,
-.pure-u-22-24,
-.pure-u-23-24,
-.pure-u-24-24,
-.pure-u-3-24,
-.pure-u-3-4,
-.pure-u-3-5,
-.pure-u-3-8,
-.pure-u-4-24,
-.pure-u-4-5,
-.pure-u-5-12,
-.pure-u-5-24,
-.pure-u-5-5,
-.pure-u-5-6,
-.pure-u-5-8,
-.pure-u-6-24,
-.pure-u-7-12,
-.pure-u-7-24,
-.pure-u-7-8,
-.pure-u-8-24,
-.pure-u-9-24 { display: inline-block; zoom: 1; letter-spacing: normal; word-spacing: normal; vertical-align: top; text-rendering: auto; }
-.pure-g [class*="pure-u"] { font-family: sans-serif; }
-.pure-u-1-24 { width: 4.1667%; }
-
-.pure-u-1-12,
-.pure-u-2-24 { width: 8.3333%; }
-
-.pure-u-1-8,
-.pure-u-3-24 { width: 12.5%; }
-
-.pure-u-1-6,
-.pure-u-4-24 { width: 16.6667%; }
-.pure-u-1-5 { width: 20%; }
-.pure-u-5-24 { width: 20.8333%; }
-
-.pure-u-1-4,
-.pure-u-6-24 { width: 25%; }
-.pure-u-7-24 { width: 29.1667%; }
-
-.pure-u-1-3,
-.pure-u-8-24 { width: 33.3333%; }
-
-.pure-u-3-8,
-.pure-u-9-24 { width: 37.5%; }
-.pure-u-2-5 { width: 40%; }
-
-.pure-u-10-24,
-.pure-u-5-12 { width: 41.6667%; }
-.pure-u-11-24 { width: 45.8333%; }
-
-.pure-u-1-2,
-.pure-u-12-24 { width: 50%; }
-.pure-u-13-24 { width: 54.1667%; }
-
-.pure-u-14-24,
-.pure-u-7-12 { width: 58.3333%; }
-.pure-u-3-5 { width: 60%; }
-
-.pure-u-15-24,
-.pure-u-5-8 { width: 62.5%; }
-
-.pure-u-16-24,
-.pure-u-2-3 { width: 66.6667%; }
-.pure-u-17-24 { width: 70.8333%; }
-
-.pure-u-18-24,
-.pure-u-3-4 { width: 75%; }
-.pure-u-19-24 { width: 79.1667%; }
-.pure-u-4-5 { width: 80%; }
-
-.pure-u-20-24,
-.pure-u-5-6 { width: 83.3333%; }
-
-.pure-u-21-24,
-.pure-u-7-8 { width: 87.5%; }
-
-.pure-u-11-12,
-.pure-u-22-24 { width: 91.6667%; }
-.pure-u-23-24 { width: 95.8333%; }
-
-.pure-u-1,
-.pure-u-1-1,
-.pure-u-24-24,
-.pure-u-5-5 { width: 100%; }
-
-/*!
-grid-responsive.min.css
-*/
-@media screen and (min-width: 35.5em) {
-  .pure-u-sm-1,
-  .pure-u-sm-1-1,
-  .pure-u-sm-1-12,
-  .pure-u-sm-1-2,
-  .pure-u-sm-1-24,
-  .pure-u-sm-1-3,
-  .pure-u-sm-1-4,
-  .pure-u-sm-1-5,
-  .pure-u-sm-1-6,
-  .pure-u-sm-1-8,
-  .pure-u-sm-10-24,
-  .pure-u-sm-11-12,
-  .pure-u-sm-11-24,
-  .pure-u-sm-12-24,
-  .pure-u-sm-13-24,
-  .pure-u-sm-14-24,
-  .pure-u-sm-15-24,
-  .pure-u-sm-16-24,
-  .pure-u-sm-17-24,
-  .pure-u-sm-18-24,
-  .pure-u-sm-19-24,
-  .pure-u-sm-2-24,
-  .pure-u-sm-2-3,
-  .pure-u-sm-2-5,
-  .pure-u-sm-20-24,
-  .pure-u-sm-21-24,
-  .pure-u-sm-22-24,
-  .pure-u-sm-23-24,
-  .pure-u-sm-24-24,
-  .pure-u-sm-3-24,
-  .pure-u-sm-3-4,
-  .pure-u-sm-3-5,
-  .pure-u-sm-3-8,
-  .pure-u-sm-4-24,
-  .pure-u-sm-4-5,
-  .pure-u-sm-5-12,
-  .pure-u-sm-5-24,
-  .pure-u-sm-5-5,
-  .pure-u-sm-5-6,
-  .pure-u-sm-5-8,
-  .pure-u-sm-6-24,
-  .pure-u-sm-7-12,
-  .pure-u-sm-7-24,
-  .pure-u-sm-7-8,
-  .pure-u-sm-8-24,
-  .pure-u-sm-9-24 { display: inline-block; zoom: 1; letter-spacing: normal; word-spacing: normal; vertical-align: top; text-rendering: auto; }
-  .pure-u-sm-1-24 { width: 4.1667%; }
-
-  .pure-u-sm-1-12,
-  .pure-u-sm-2-24 { width: 8.3333%; }
-
-  .pure-u-sm-1-8,
-  .pure-u-sm-3-24 { width: 12.5%; }
-
-  .pure-u-sm-1-6,
-  .pure-u-sm-4-24 { width: 16.6667%; }
-  .pure-u-sm-1-5 { width: 20%; }
-  .pure-u-sm-5-24 { width: 20.8333%; }
-
-  .pure-u-sm-1-4,
-  .pure-u-sm-6-24 { width: 25%; }
-  .pure-u-sm-7-24 { width: 29.1667%; }
-
-  .pure-u-sm-1-3,
-  .pure-u-sm-8-24 { width: 33.3333%; }
-
-  .pure-u-sm-3-8,
-  .pure-u-sm-9-24 { width: 37.5%; }
-  .pure-u-sm-2-5 { width: 40%; }
-
-  .pure-u-sm-10-24,
-  .pure-u-sm-5-12 { width: 41.6667%; }
-  .pure-u-sm-11-24 { width: 45.8333%; }
-
-  .pure-u-sm-1-2,
-  .pure-u-sm-12-24 { width: 50%; }
-  .pure-u-sm-13-24 { width: 54.1667%; }
-
-  .pure-u-sm-14-24,
-  .pure-u-sm-7-12 { width: 58.3333%; }
-  .pure-u-sm-3-5 { width: 60%; }
-
-  .pure-u-sm-15-24,
-  .pure-u-sm-5-8 { width: 62.5%; }
-
-  .pure-u-sm-16-24,
-  .pure-u-sm-2-3 { width: 66.6667%; }
-  .pure-u-sm-17-24 { width: 70.8333%; }
-
-  .pure-u-sm-18-24,
-  .pure-u-sm-3-4 { width: 75%; }
-  .pure-u-sm-19-24 { width: 79.1667%; }
-  .pure-u-sm-4-5 { width: 80%; }
-
-  .pure-u-sm-20-24,
-  .pure-u-sm-5-6 { width: 83.3333%; }
-
-  .pure-u-sm-21-24,
-  .pure-u-sm-7-8 { width: 87.5%; }
-
-  .pure-u-sm-11-12,
-  .pure-u-sm-22-24 { width: 91.6667%; }
-  .pure-u-sm-23-24 { width: 95.8333%; }
-
-  .pure-u-sm-1,
-  .pure-u-sm-1-1,
-  .pure-u-sm-24-24,
-  .pure-u-sm-5-5 { width: 100%; }
-}
-
-@media screen and (min-width: 48em) {
-  .pure-u-md-1,
-  .pure-u-md-1-1,
-  .pure-u-md-1-12,
-  .pure-u-md-1-2,
-  .pure-u-md-1-24,
-  .pure-u-md-1-3,
-  .pure-u-md-1-4,
-  .pure-u-md-1-5,
-  .pure-u-md-1-6,
-  .pure-u-md-1-8,
-  .pure-u-md-10-24,
-  .pure-u-md-11-12,
-  .pure-u-md-11-24,
-  .pure-u-md-12-24,
-  .pure-u-md-13-24,
-  .pure-u-md-14-24,
-  .pure-u-md-15-24,
-  .pure-u-md-16-24,
-  .pure-u-md-17-24,
-  .pure-u-md-18-24,
-  .pure-u-md-19-24,
-  .pure-u-md-2-24,
-  .pure-u-md-2-3,
-  .pure-u-md-2-5,
-  .pure-u-md-20-24,
-  .pure-u-md-21-24,
-  .pure-u-md-22-24,
-  .pure-u-md-23-24,
-  .pure-u-md-24-24,
-  .pure-u-md-3-24,
-  .pure-u-md-3-4,
-  .pure-u-md-3-5,
-  .pure-u-md-3-8,
-  .pure-u-md-4-24,
-  .pure-u-md-4-5,
-  .pure-u-md-5-12,
-  .pure-u-md-5-24,
-  .pure-u-md-5-5,
-  .pure-u-md-5-6,
-  .pure-u-md-5-8,
-  .pure-u-md-6-24,
-  .pure-u-md-7-12,
-  .pure-u-md-7-24,
-  .pure-u-md-7-8,
-  .pure-u-md-8-24,
-  .pure-u-md-9-24 { display: inline-block; zoom: 1; letter-spacing: normal; word-spacing: normal; vertical-align: top; text-rendering: auto; }
-  .pure-u-md-1-24 { width: 4.1667%; }
-
-  .pure-u-md-1-12,
-  .pure-u-md-2-24 { width: 8.3333%; }
-
-  .pure-u-md-1-8,
-  .pure-u-md-3-24 { width: 12.5%; }
-
-  .pure-u-md-1-6,
-  .pure-u-md-4-24 { width: 16.6667%; }
-  .pure-u-md-1-5 { width: 20%; }
-  .pure-u-md-5-24 { width: 20.8333%; }
-
-  .pure-u-md-1-4,
-  .pure-u-md-6-24 { width: 25%; }
-  .pure-u-md-7-24 { width: 29.1667%; }
-
-  .pure-u-md-1-3,
-  .pure-u-md-8-24 { width: 33.3333%; }
-
-  .pure-u-md-3-8,
-  .pure-u-md-9-24 { width: 37.5%; }
-  .pure-u-md-2-5 { width: 40%; }
-
-  .pure-u-md-10-24,
-  .pure-u-md-5-12 { width: 41.6667%; }
-  .pure-u-md-11-24 { width: 45.8333%; }
-
-  .pure-u-md-1-2,
-  .pure-u-md-12-24 { width: 50%; }
-  .pure-u-md-13-24 { width: 54.1667%; }
-
-  .pure-u-md-14-24,
-  .pure-u-md-7-12 { width: 58.3333%; }
-  .pure-u-md-3-5 { width: 60%; }
-
-  .pure-u-md-15-24,
-  .pure-u-md-5-8 { width: 62.5%; }
-
-  .pure-u-md-16-24,
-  .pure-u-md-2-3 { width: 66.6667%; }
-  .pure-u-md-17-24 { width: 70.8333%; }
-
-  .pure-u-md-18-24,
-  .pure-u-md-3-4 { width: 75%; }
-  .pure-u-md-19-24 { width: 79.1667%; }
-  .pure-u-md-4-5 { width: 80%; }
-
-  .pure-u-md-20-24,
-  .pure-u-md-5-6 { width: 83.3333%; }
-
-  .pure-u-md-21-24,
-  .pure-u-md-7-8 { width: 87.5%; }
-
-  .pure-u-md-11-12,
-  .pure-u-md-22-24 { width: 91.6667%; }
-  .pure-u-md-23-24 { width: 95.8333%; }
-
-  .pure-u-md-1,
-  .pure-u-md-1-1,
-  .pure-u-md-24-24,
-  .pure-u-md-5-5 { width: 100%; }
-}
-
-@media screen and (min-width: 64em) {
-  .pure-u-lg-1,
-  .pure-u-lg-1-1,
-  .pure-u-lg-1-12,
-  .pure-u-lg-1-2,
-  .pure-u-lg-1-24,
-  .pure-u-lg-1-3,
-  .pure-u-lg-1-4,
-  .pure-u-lg-1-5,
-  .pure-u-lg-1-6,
-  .pure-u-lg-1-8,
-  .pure-u-lg-10-24,
-  .pure-u-lg-11-12,
-  .pure-u-lg-11-24,
-  .pure-u-lg-12-24,
-  .pure-u-lg-13-24,
-  .pure-u-lg-14-24,
-  .pure-u-lg-15-24,
-  .pure-u-lg-16-24,
-  .pure-u-lg-17-24,
-  .pure-u-lg-18-24,
-  .pure-u-lg-19-24,
-  .pure-u-lg-2-24,
-  .pure-u-lg-2-3,
-  .pure-u-lg-2-5,
-  .pure-u-lg-20-24,
-  .pure-u-lg-21-24,
-  .pure-u-lg-22-24,
-  .pure-u-lg-23-24,
-  .pure-u-lg-24-24,
-  .pure-u-lg-3-24,
-  .pure-u-lg-3-4,
-  .pure-u-lg-3-5,
-  .pure-u-lg-3-8,
-  .pure-u-lg-4-24,
-  .pure-u-lg-4-5,
-  .pure-u-lg-5-12,
-  .pure-u-lg-5-24,
-  .pure-u-lg-5-5,
-  .pure-u-lg-5-6,
-  .pure-u-lg-5-8,
-  .pure-u-lg-6-24,
-  .pure-u-lg-7-12,
-  .pure-u-lg-7-24,
-  .pure-u-lg-7-8,
-  .pure-u-lg-8-24,
-  .pure-u-lg-9-24 { display: inline-block; zoom: 1; letter-spacing: normal; word-spacing: normal; vertical-align: top; text-rendering: auto; }
-  .pure-u-lg-1-24 { width: 4.1667%; }
-
-  .pure-u-lg-1-12,
-  .pure-u-lg-2-24 { width: 8.3333%; }
-
-  .pure-u-lg-1-8,
-  .pure-u-lg-3-24 { width: 12.5%; }
-
-  .pure-u-lg-1-6,
-  .pure-u-lg-4-24 { width: 16.6667%; }
-  .pure-u-lg-1-5 { width: 20%; }
-  .pure-u-lg-5-24 { width: 20.8333%; }
-
-  .pure-u-lg-1-4,
-  .pure-u-lg-6-24 { width: 25%; }
-  .pure-u-lg-7-24 { width: 29.1667%; }
-
-  .pure-u-lg-1-3,
-  .pure-u-lg-8-24 { width: 33.3333%; }
-
-  .pure-u-lg-3-8,
-  .pure-u-lg-9-24 { width: 37.5%; }
-  .pure-u-lg-2-5 { width: 40%; }
-
-  .pure-u-lg-10-24,
-  .pure-u-lg-5-12 { width: 41.6667%; }
-  .pure-u-lg-11-24 { width: 45.8333%; }
-
-  .pure-u-lg-1-2,
-  .pure-u-lg-12-24 { width: 50%; }
-  .pure-u-lg-13-24 { width: 54.1667%; }
-
-  .pure-u-lg-14-24,
-  .pure-u-lg-7-12 { width: 58.3333%; }
-  .pure-u-lg-3-5 { width: 60%; }
-
-  .pure-u-lg-15-24,
-  .pure-u-lg-5-8 { width: 62.5%; }
-
-  .pure-u-lg-16-24,
-  .pure-u-lg-2-3 { width: 66.6667%; }
-  .pure-u-lg-17-24 { width: 70.8333%; }
-
-  .pure-u-lg-18-24,
-  .pure-u-lg-3-4 { width: 75%; }
-  .pure-u-lg-19-24 { width: 79.1667%; }
-  .pure-u-lg-4-5 { width: 80%; }
-
-  .pure-u-lg-20-24,
-  .pure-u-lg-5-6 { width: 83.3333%; }
-
-  .pure-u-lg-21-24,
-  .pure-u-lg-7-8 { width: 87.5%; }
-
-  .pure-u-lg-11-12,
-  .pure-u-lg-22-24 { width: 91.6667%; }
-  .pure-u-lg-23-24 { width: 95.8333%; }
-
-  .pure-u-lg-1,
-  .pure-u-lg-1-1,
-  .pure-u-lg-24-24,
-  .pure-u-lg-5-5 { width: 100%; }
-}
-
-@media screen and (min-width: 80em) {
-  .pure-u-xl-1,
-  .pure-u-xl-1-1,
-  .pure-u-xl-1-12,
-  .pure-u-xl-1-2,
-  .pure-u-xl-1-24,
-  .pure-u-xl-1-3,
-  .pure-u-xl-1-4,
-  .pure-u-xl-1-5,
-  .pure-u-xl-1-6,
-  .pure-u-xl-1-8,
-  .pure-u-xl-10-24,
-  .pure-u-xl-11-12,
-  .pure-u-xl-11-24,
-  .pure-u-xl-12-24,
-  .pure-u-xl-13-24,
-  .pure-u-xl-14-24,
-  .pure-u-xl-15-24,
-  .pure-u-xl-16-24,
-  .pure-u-xl-17-24,
-  .pure-u-xl-18-24,
-  .pure-u-xl-19-24,
-  .pure-u-xl-2-24,
-  .pure-u-xl-2-3,
-  .pure-u-xl-2-5,
-  .pure-u-xl-20-24,
-  .pure-u-xl-21-24,
-  .pure-u-xl-22-24,
-  .pure-u-xl-23-24,
-  .pure-u-xl-24-24,
-  .pure-u-xl-3-24,
-  .pure-u-xl-3-4,
-  .pure-u-xl-3-5,
-  .pure-u-xl-3-8,
-  .pure-u-xl-4-24,
-  .pure-u-xl-4-5,
-  .pure-u-xl-5-12,
-  .pure-u-xl-5-24,
-  .pure-u-xl-5-5,
-  .pure-u-xl-5-6,
-  .pure-u-xl-5-8,
-  .pure-u-xl-6-24,
-  .pure-u-xl-7-12,
-  .pure-u-xl-7-24,
-  .pure-u-xl-7-8,
-  .pure-u-xl-8-24,
-  .pure-u-xl-9-24 { display: inline-block; zoom: 1; letter-spacing: normal; word-spacing: normal; vertical-align: top; text-rendering: auto; }
-  .pure-u-xl-1-24 { width: 4.1667%; }
-
-  .pure-u-xl-1-12,
-  .pure-u-xl-2-24 { width: 8.3333%; }
-
-  .pure-u-xl-1-8,
-  .pure-u-xl-3-24 { width: 12.5%; }
-
-  .pure-u-xl-1-6,
-  .pure-u-xl-4-24 { width: 16.6667%; }
-  .pure-u-xl-1-5 { width: 20%; }
-  .pure-u-xl-5-24 { width: 20.8333%; }
-
-  .pure-u-xl-1-4,
-  .pure-u-xl-6-24 { width: 25%; }
-  .pure-u-xl-7-24 { width: 29.1667%; }
-
-  .pure-u-xl-1-3,
-  .pure-u-xl-8-24 { width: 33.3333%; }
-
-  .pure-u-xl-3-8,
-  .pure-u-xl-9-24 { width: 37.5%; }
-  .pure-u-xl-2-5 { width: 40%; }
-
-  .pure-u-xl-10-24,
-  .pure-u-xl-5-12 { width: 41.6667%; }
-  .pure-u-xl-11-24 { width: 45.8333%; }
-
-  .pure-u-xl-1-2,
-  .pure-u-xl-12-24 { width: 50%; }
-  .pure-u-xl-13-24 { width: 54.1667%; }
-
-  .pure-u-xl-14-24,
-  .pure-u-xl-7-12 { width: 58.3333%; }
-  .pure-u-xl-3-5 { width: 60%; }
-
-  .pure-u-xl-15-24,
-  .pure-u-xl-5-8 { width: 62.5%; }
-
-  .pure-u-xl-16-24,
-  .pure-u-xl-2-3 { width: 66.6667%; }
-  .pure-u-xl-17-24 { width: 70.8333%; }
-
-  .pure-u-xl-18-24,
-  .pure-u-xl-3-4 { width: 75%; }
-  .pure-u-xl-19-24 { width: 79.1667%; }
-  .pure-u-xl-4-5 { width: 80%; }
-
-  .pure-u-xl-20-24,
-  .pure-u-xl-5-6 { width: 83.3333%; }
-
-  .pure-u-xl-21-24,
-  .pure-u-xl-7-8 { width: 87.5%; }
-
-  .pure-u-xl-11-12,
-  .pure-u-xl-22-24 { width: 91.6667%; }
-  .pure-u-xl-23-24 { width: 95.8333%; }
-
-  .pure-u-xl-1,
-  .pure-u-xl-1-1,
-  .pure-u-xl-24-24,
-  .pure-u-xl-5-5 { width: 100%; }
-}

File diff suppressed because it is too large
+ 0 - 10
public/theme/material/css/index_base.min.css


+ 0 - 1635
public/theme/material/css/project.css

@@ -1,1635 +0,0 @@
-/* 卡片式商店样式 */
-
-.ui-switch,
-.ui-switch-inner {
-  display: flex;
-  flex-direction: row-reverse;
-  justify-content: space-between;
-  min-height: 29px;
-}
-
-.ui-switch-inner {
-  height: 100%;
-}
-
-.ui-switch.node-switch {
-  position: absolute;
-  right: 2.5em;
-  top: 1.5em;
-  z-index: 1;
-}
-
-.switch-btn {
-  width: 50%;
-  box-sizing: border-box;
-  height: 100%;
-}
-
-.dropdown .btn-dropdown-toggle.dropdown-toggle {
-  min-height: 36px;
-  border-radius: 10px;
-  background-color: white;
-  color: inherit;
-  transition: all 0.5s;
-}
-
-.btn-dropdown-toggle.dropdown-toggle:hover,
-.btn-dropdown-toggle.dropdown-toggle:active {
-  background-color: white;
-  color: inherit;
-  border-radius: 4px;
-  transform: translate(0, 0);
-}
-
-.btn-dropdown-toggle.dropdown-toggle::after {
-  background-color: white;
-}
-
-.ui-switch a {
-  color: #000;
-  display: inline-block;
-  padding: 0 10px;
-  height: 100%;
-  display: flex;
-  align-items: center;
-  text-decoration: none;
-}
-
-.ui-switch div.switch-btn:first-of-type a {
-  border-radius: 0 15px 15px 0;
-}
-
-.ui-switch div.switch-btn:first-of-type a:hover {
-  border-radius: 0 5px 5px 0;
-  transition-duration: 0.4s;
-}
-
-.ui-switch div.switch-btn:last-of-type a {
-  border-radius: 15px 0 0 15px;
-}
-
-.ui-switch div.switch-btn:last-of-type a:hover {
-  border-radius: 5px 0 0 5px;
-  transition-duration: 0.4s;
-}
-
-.ui-switch a:hover {
-  color: white;
-  background: gray;
-}
-
-.ui-switch .card,
-.ui-switch .card-inner {
-  margin: 0;
-}
-
-.shop-flex,
-.label-flex,
-.shop-drop {
-  display: flex;
-  justify-content: space-between;
-  flex-wrap: wrap;
-  opacity: 1;
-}
-
-.shop-flex .shop-price::before {
-  content: "¥";
-  font-size: 1.5rem;
-  position: relative;
-  bottom: 0.4rem;
-  right: 0.1rem;
-}
-
-.shop-table,
-.shop-flex {
-  opacity: 1;
-  display: none;
-
-  /* display:flex;原本的display方式 */
-
-  /* display:flex; */
-}
-
-.shop-table {
-  margin-top: 14px;
-  position: relative;
-  width: 100%;
-}
-
-.shop-table .card {
-  width: 100%;
-  margin: 10px 0 0;
-  padding: 14px 1em;
-  border-radius: 10px 10px 0 0;
-  cursor: pointer;
-  grid-area: main;
-}
-
-.shop-table .shop-btn {
-  width: 100%;
-  margin-top: 0;
-  margin-bottom: 0;
-  border-radius: 0 0 10px 10px;
-  padding: 8px 2em;
-  grid-area: button;
-}
-
-.shop-drop {
-  grid-area: drop;
-  background: white;
-  box-shadow: 0 0 0 #e5e5e5, 0 2px 5px rgb(0 0 0 / 12%), 0 2px 4px rgb(0 0 0 / 5%);
-}
-
-.shop-table .shop-name {
-  padding: 0;
-  margin: 0;
-  font-size: 18px;
-  color: #3b5473;
-}
-
-.shop-table,
-.shop-table .card {
-  flex-wrap: wrap;
-  justify-content: space-between;
-}
-
-.shop-table .card-tag {
-  margin-right: 8px;
-}
-
-.shop-table .card > div {
-  display: flex;
-  flex-wrap: wrap;
-  flex-basis: 80%;
-  align-items: center;
-}
-
-.shop-table .card > div:last-of-type {
-  flex-basis: 10%;
-}
-
-.shop-table span {
-  font-size: 18px;
-  margin: 2px 8px 0;
-}
-
-.shop-gridarea {
-  display: grid;
-  width: 100%;
-  position: relative;
-  transition: 0.3s all;
-  grid-template-columns: 100%;
-  grid-template-rows: auto auto auto;
-  grid-template-areas:
-    "main"
-    "drop"
-    "button";
-}
-
-.shop-drop .card-tag {
-  flex-basis: 49%;
-  margin: 3px 0;
-  text-align: center;
-}
-
-.shop-flex .card {
-  width: 24%;
-  text-align: center;
-  min-height: 380px;
-}
-
-.shop-flex .card-main {
-  position: relative;
-  padding-top: 1.3em;
-  display: flex;
-  flex-wrap: wrap;
-  justify-content: center;
-}
-
-.shop-flex .card-main > div {
-  flex-basis: 100%;
-}
-
-.shop-name,
-.shop-price {
-  padding: 0.4em 0;
-}
-
-.shop-price {
-  color: #3b5473;
-  font-size: 2.75rem;
-}
-
-.shop-price code {
-  font-size: 24px;
-  background: none;
-  font-style: italic;
-  color: #ffa100;
-}
-
-.shop-content > div {
-  margin-top: 0.6em;
-  flex-basis: 49%;
-}
-
-.shop-table .card i {
-  transform: rotate(0deg);
-}
-
-.shop-table .card i.arrow-rotate {
-  transform: rotate(180deg);
-}
-
-.shop-content {
-  margin-top: 2em;
-  font-size: 13px;
-  flex-wrap: wrap;
-  align-items: baseline;
-}
-
-.shop-content-left {
-  text-align: left;
-  padding-left: 3.5em;
-  color: #3b5473;
-  font-size: 1rem;
-}
-
-.shop-content-right {
-  text-align: center;
-  font-size: 1.25rem;
-  color: #95aac9;
-}
-
-.shop-content span {
-  font-size: 0.8rem;
-  color: #3b5473;
-  margin-left: 0.2rem;
-}
-
-.shop-cube {
-  margin-top: 2em;
-}
-
-.shop-name,
-.shop-tat {
-  margin-top: 0.3em;
-  font-size: 1.2rem;
-  color: #95aac9;
-  font-weight: bolder;
-}
-
-.shop-tat {
-  margin: 0;
-}
-
-.shop-tat span:first-of-type::after {
-  content: " G";
-}
-
-.shop-tat span:last-of-type::after {
-  content: " 天";
-}
-
-.shop-tat span::after {
-  font-size: 0.85rem;
-}
-
-.shop-cube,
-.shop-content {
-  display: flex;
-  justify-content: space-around;
-}
-
-.shop-cube > div {
-  flex-basis: 33.333333333%;
-}
-
-.cube-title {
-  color: #95aac9;
-  font-size: 0.5rem;
-}
-
-.cube-detail {
-  font-size: 1.25rem;
-}
-
-.cube-detail span {
-  font-size: 0.75rem;
-}
-
-.shop-content-extra {
-  margin-top: 1.5em;
-  font-size: 1.1rem;
-}
-
-.shop-content-extra > div {
-  margin-top: 0.4em;
-  letter-spacing: 2px;
-  position: relative;
-  right: 0.3em;
-  min-height: 20px;
-}
-
-.shop-btn {
-  margin-top: 3em;
-  padding: 10px 2em;
-  flex-basis: 70%;
-  margin-bottom: 2.5em;
-  align-self: flex-end;
-}
-
-.flex-fix3,
-.flex-fix4 {
-  width: 24%;
-}
-
-.page-course img {
-  max-width: 60%;
-}
-
-@media screen and (max-width: 1600px) {
-  .shop-flex .card,
-  .flex-fix3 {
-    width: 32%;
-  }
-
-  .flex-fix4 {
-    display: none;
-  }
-}
-
-@media screen and (max-width: 1440px) {
-  .shop-flex .card {
-    width: 48%;
-  }
-
-  .page-course img {
-    max-width: 80%;
-  }
-}
-
-@media screen and (max-width: 715px) {
-  .shop-flex .card {
-    width: 100%;
-  }
-
-  .page-course img {
-    max-width: 100%;
-  }
-}
-
-@media screen and (max-width: 400px) {
-  .nodemain {
-    max-width: 240px;
-  }
-
-  .shop-table .card-tag,
-  .shop-table span {
-    flex-basis: 40%;
-    text-align: center;
-    margin: 5px 8px 0 0;
-  }
-
-  .shop-table .shop-name {
-    flex-basis: 100%;
-  }
-
-  .shop-drop .card-tag {
-    flex-basis: 49%;
-    margin: 5px 0;
-  }
-
-  .shop-content-left {
-    padding-left: 2.5em;
-  }
-
-  .shop-content span {
-    margin-left: 0;
-  }
-}
-
-/* 面板原样式 */
-.pagination {
-  display: inline-block;
-  padding-left: 0;
-  margin: 20px 0;
-  border-radius: 4px;
-}
-
-.pagination > li {
-  display: inline;
-}
-
-.pagination > li > a,
-.pagination > li > span {
-  position: relative;
-  float: left;
-  padding: 6px 12px;
-  margin-left: -1px;
-  line-height: 1.42857143;
-  color: #337ab7;
-  text-decoration: none;
-  background-color: #fff;
-  border: 1px solid #ddd;
-}
-
-.pagination > li:first-child > a,
-.pagination > li:first-child > span {
-  margin-left: 0;
-  border-top-left-radius: 4px;
-  border-bottom-left-radius: 4px;
-}
-
-.pagination > li:last-child > a,
-.pagination > li:last-child > span {
-  border-top-right-radius: 4px;
-  border-bottom-right-radius: 4px;
-}
-
-.pagination > li > a:focus,
-.pagination > li > a:hover,
-.pagination > li > span:focus,
-.pagination > li > span:hover {
-  color: #23527c;
-  background-color: #eee;
-  border-color: #ddd;
-}
-
-.pagination > .active > a,
-.pagination > .active > a:focus,
-.pagination > .active > a:hover,
-.pagination > .active > span,
-.pagination > .active > span:focus,
-.pagination > .active > span:hover {
-  z-index: 2;
-  color: #fff;
-  cursor: default;
-  background-color: #337ab7;
-  border-color: #337ab7;
-}
-
-.pagination > .disabled > a,
-.pagination > .disabled > a:focus,
-.pagination > .disabled > a:hover,
-.pagination > .disabled > span,
-.pagination > .disabled > span:focus,
-.pagination > .disabled > span:hover {
-  color: #777;
-  cursor: not-allowed;
-  background-color: #fff;
-  border-color: #ddd;
-}
-
-.pagination-lg > li > a,
-.pagination-lg > li > span {
-  padding: 10px 16px;
-  font-size: 18px;
-}
-
-.pagination-lg > li:first-child > a,
-.pagination-lg > li:first-child > span {
-  border-top-left-radius: 6px;
-  border-bottom-left-radius: 6px;
-}
-
-.pagination-lg > li:last-child > a,
-.pagination-lg > li:last-child > span {
-  border-top-right-radius: 6px;
-  border-bottom-right-radius: 6px;
-}
-
-.pagination-sm > li > a,
-.pagination-sm > li > span {
-  padding: 5px 10px;
-  font-size: 12px;
-}
-
-.pagination-sm > li:first-child > a,
-.pagination-sm > li:first-child > span {
-  border-top-left-radius: 3px;
-  border-bottom-left-radius: 3px;
-}
-
-.pagination-sm > li:last-child > a,
-.pagination-sm > li:last-child > span {
-  border-top-right-radius: 3px;
-  border-bottom-right-radius: 3px;
-}
-
-.pager {
-  padding-left: 0;
-  margin: 20px 0;
-  text-align: center;
-  list-style: none;
-}
-
-.pager li {
-  display: inline;
-}
-
-.pager li > a,
-.pager li > span {
-  display: inline-block;
-  padding: 5px 14px;
-  background-color: #fff;
-  border: 1px solid #ddd;
-  border-radius: 15px;
-}
-
-.pager li > a:focus,
-.pager li > a:hover {
-  text-decoration: none;
-  background-color: #eee;
-}
-
-.pager .next > a,
-.pager .next > span {
-  float: right;
-}
-
-.pager .previous > a,
-.pager .previous > span {
-  float: left;
-}
-
-.pager .disabled > a,
-.pager .disabled > a:focus,
-.pager .disabled > a:hover,
-.pager .disabled > span {
-  color: #777;
-  cursor: not-allowed;
-  background-color: #fff;
-}
-
-.pagination > li > a,
-.pagination > li > span {
-  border: 1px solid white;
-}
-
-.pagination > li.active > a {
-  background: #13c2c2;
-  color: #fff;
-}
-
-.pagination > li > a {
-  background: white;
-  color: #000;
-}
-
-.pagination > .disabled > span {
-  border-color: #fff;
-}
-
-.pagination > .active > a,
-.pagination > .active > a:focus,
-.pagination > .active > a:hover,
-.pagination > .active > span,
-.pagination > .active > span:focus,
-.pagination > .active > span:hover {
-  color: #fff;
-  background-color: #54aff9;
-  border-color: #54aff9;
-}
-
-.ui-card-wrap::after,
-.ui-picker-lib::after {
-  clear: both;
-}
-
-.menu-content .nav ul .a,
-.menu-content .nav ul a {
-  transition: 0.3s all;
-}
-
-body {
-  padding-bottom: 69px;
-}
-
-.ui-content-header {
-  background-position: 50% 50%;
-  background-repeat: no-repeat;
-  background-size: cover;
-  margin-bottom: -58px;
-  padding-top: 68px;
-  padding-bottom: 58px;
-}
-
-.page-brand .ui-content-header {
-  background-image: url(./images/bg/amber.jpg);
-}
-
-.ui-footer {
-  background-color: rgb(255 255 255 / 50%);
-  border-top: 1px solid rgb(0 0 0 / 12%);
-  text-align: center;
-  padding-top: 12px;
-  padding-bottom: 12px;
-  position: absolute;
-  bottom: 0;
-  height: 40px;
-  right: 0;
-  left: 0;
-}
-
-.ui-header .dropdown.open .dropdown-toggle {
-  background-color: transparent;
-}
-
-.ui-picker-divider {
-  background-color: #dadada;
-  -webkit-box-flex: 0;
-  flex: 0 0 auto;
-  flex: 0 0 auto;
-  flex: 0 0 auto;
-  position: relative;
-  width: 1px;
-  z-index: 1;
-}
-
-.ui-picker-draggable-count {
-  position: absolute;
-  top: -16px;
-  right: -16px;
-}
-
-.ui-picker-draggable-handler {
-  cursor: crosshair;
-  cursor: grab;
-  position: relative;
-}
-
-.ui-picker-selected .ui-picker-draggable-handler {
-  z-index: 2;
-}
-
-.ui-picker-selected .ui-picker-draggable-handler:active {
-  cursor: grabbing;
-}
-
-.ui-picker-selected .ui-picker-draggable-handler strong {
-  display: none;
-}
-
-.ui-picker-selected .ui-picker-draggable-handler .icon {
-  display: inline-block;
-}
-
-.ui-picker-draggable-handler strong {
-  display: inline;
-}
-
-.ui-picker-draggable-handler .icon {
-  display: none;
-}
-
-.ui-picker-info,
-.ui-picker-nav {
-  background-color: #fff;
-  -webkit-box-flex: 0;
-  flex: 0 0 auto;
-  flex: 0 0 auto;
-  flex: 0 0 auto;
-  overflow: hidden;
-  position: relative;
-  transition: width 0.3s cubic-bezier(0.4, 0, 0.2, 1);
-  transition: width 0.3s cubic-bezier(0.4, 0, 0.2, 1);
-  width: 0;
-}
-
-.ui-picker-info-active {
-  width: 400px;
-}
-
-.ui-picker-info-detail {
-  padding-right: 16px;
-  padding-left: 16px;
-}
-
-.ui-picker-info-null::after {
-  background-color: #f5f5f5;
-  content: "Select an item to view its details.";
-  display: block;
-  font-size: 20px;
-  font-weight: 300;
-  height: 100%;
-  line-height: 28px;
-  padding: 58px 16px;
-  position: absolute;
-  top: 0;
-  left: 0;
-  text-align: center;
-  width: 100%;
-  z-index: 1;
-}
-
-.ui-picker-inner {
-  overflow-x: hidden;
-  overflow-y: auto;
-  position: absolute;
-  top: 0;
-  right: 0;
-  bottom: 0;
-  left: 0;
-}
-
-.ui-picker-item {
-  position: relative;
-  transition: opacity 0.3s cubic-bezier(0.4, 0, 0.2, 1);
-  transition: opacity 0.3s cubic-bezier(0.4, 0, 0.2, 1);
-}
-
-.ui-picker-lib.ui-picker-dragging .ui-picker-item.ui-picker-draggable {
-  opacity: 0.69;
-}
-
-.ui-picker-lib {
-  min-height: calc(100vh - 56px);
-}
-
-.ui-picker-lib::after,
-.ui-picker-lib::before {
-  content: "";
-  display: table;
-  line-height: 0;
-}
-
-.ui-picker-main {
-  -webkit-box-flex: 1;
-  flex: 1 1 auto;
-  flex: 1 1 auto;
-  flex: 1 1 auto;
-  position: relative;
-}
-
-.ui-picker-map-wrap {
-  height: 225px;
-  width: 400px;
-}
-
-.ui-picker-nav {
-  width: 240px;
-}
-
-.ui-picker-page {
-  height: 100vh;
-  min-width: 992px;
-  padding-top: 56px;
-  padding-bottom: 0;
-}
-
-.ui-picker-selectable-handler {
-  display: block;
-  height: 100%;
-  position: absolute;
-  top: 0;
-  left: 0;
-  width: 100%;
-  z-index: 1;
-}
-
-.ui-picker-wrap {
-  display: box;
-  display: flex;
-  display: flexbox;
-  display: flex;
-  -webkit-box-orient: horizontal;
-  -webkit-box-direction: normal;
-  flex-direction: row;
-  flex-direction: row;
-  flex-direction: row;
-  height: 100%;
-  overflow: hidden;
-  width: 100%;
-}
-
-.ui-draggable-helper {
-  width: 208px !important;
-}
-
-.ui-droppable-helper {
-  background-color: rgb(255 64 129 / 9%) !important;
-  border-color: #ff4081 !important;
-}
-
-.ui-selectable-helper {
-  background-color: rgb(0 0 0 / 12%);
-  border: 1px solid #dadada;
-  box-shadow: 0 0 10px rgb(0 0 0 / 10%);
-  position: absolute;
-  z-index: 100;
-}
-
-.ui-card-pre {
-  -webkit-box-align: center;
-  align-items: center;
-  -ms-flex-align: center;
-  align-items: center;
-  display: box;
-  display: flex;
-  display: flexbox;
-  display: flex;
-}
-
-.ui-card-wrap {
-  margin-top: 24px;
-  margin-bottom: -24px;
-}
-
-.ui-card-wrap::after,
-.ui-card-wrap::before {
-  content: "";
-  display: table;
-  line-height: 0;
-}
-
-.ui-card-wrap .card {
-  margin-top: 0;
-}
-
-.ui-tab {
-  margin-top: 10px;
-}
-
-button[data-toggle="dropdown"] {
-  text-align: left;
-}
-
-.form-group-label.control-highlight-custom .floating-label {
-  transform: scale(0.85714, 0.85714) translateY(-30px);
-  transform: scale(0.85714, 0.85714) translateY(-30px);
-}
-
-.dropdown {
-  z-index: unset;
-}
-
-.dropdown.open .dropdown-menu {
-  z-index: 2;
-}
-
-.dropdown-menu {
-  max-height: 45vh;
-  overflow-y: auto;
-}
-
-ul.dropdown-menu {
-  top: 110%;
-  border-radius: 5px;
-}
-
-.dropdown-menu .a,
-.dropdown-menu a {
-  text-decoration: none;
-  padding: 7px 1em;
-  font-size: 14px;
-  text-overflow: unset;
-  white-space: normal;
-  transition: 0.3s all;
-}
-
-.dropdown-menu a:hover {
-  transition: 0.3s all;
-}
-
-.form-control,
-.picker__select--month,
-.picker__select--year {
-  min-height: 36px;
-}
-
-.dropdown-menu.dropdown-menu-right {
-  min-width: 130px;
-}
-
-.waves-attach.waves-circle.waves-light.waves-effect .waves-wrap {
-  border-radius: 10px;
-}
-
-.btn:active,
-.fbtn:active {
-  transform: translate(3px, 3px);
-}
-
-.shop-table .btn.shop-btn:active {
-  transform: scale3d(1.05, 1.05, 1.05);
-}
-
-.modal-inner p {
-  word-break: break-word;
-}
-
-.form-control-guide {
-  margin: 0.3em 0 0;
-  font-size: 12px;
-  color: #399af2;
-}
-
-.form-control-guide i {
-  font-size: 18px;
-  position: relative;
-  top: 0.25em;
-  margin-right: 0.2em;
-}
-
-/* 卡片节点 */
-
-.nodelist {
-  position: relative;
-}
-
-/* .card-row {
-    display: flex;
-    justify-content: space-between;
-	flex-wrap: wrap;
-	position: relative;
-} */
-.card-row,
-.node-cardgroup {
-  display: grid;
-  grid-template-columns: 100%;
-  justify-content: space-between;
-  position: relative;
-  opacity: 1;
-}
-
-.node-cardgroup {
-  display: none;
-}
-
-.card-row,
-.node-table,
-.node-fade,
-.shop-flex,
-.shop-table,
-.node-cardgroup {
-  transition-duration: 0.2s;
-  transition-property: all;
-}
-
-.card.node-table {
-  min-height: 75px;
-}
-
-.node-table .avatar.avatar-sm span {
-  position: relative;
-  font-size: 20px;
-  color: white;
-}
-
-.node-table .avatar.avatar-sm.nodeoffline span {
-  left: 0.05rem;
-}
-
-.node-card {
-  position: relative;
-  left: 0;
-  top: 0;
-  background: white;
-
-  /* width: 430px; */
-  height: 120px;
-  border-radius: 10px;
-  box-shadow: 2px 2px 7px 1px rgb(189 189 189);
-  margin-top: 1em;
-  transition-duration: 0.1s;
-  transition-property: all;
-  justify-content: space-between;
-  padding: 0 1em;
-  cursor: pointer;
-}
-
-.node-table {
-  opacity: 1;
-  display: none;
-
-  /* display:flex; */
-}
-
-.node-card:hover {
-  transition-duration: 0.1s;
-  transition-property: all;
-  left: -3px;
-  top: -3px;
-  box-shadow: 3px 3px 7px 3px rgb(189 189 189);
-}
-
-/* 追加伸缩 */
-.card-row.collapse.in {
-  display: grid;
-}
-
-.collapse.card-row {
-  display: none;
-}
-
-/* */
-.node-fade {
-  opacity: 0;
-}
-
-.nodetitle {
-  /* flex-basis: 100%; */
-  grid-column-end: 2;
-  grid-column-start: 1;
-}
-
-.flag img {
-  width: 35px;
-}
-
-.node-flex {
-  display: flex;
-}
-
-.nodemain > div {
-  margin-top: 13px;
-}
-
-.nodeonline {
-  background: #4fd69c;
-}
-
-.nodeoffline {
-  background: #ea4c4c;
-}
-
-.nodeunset {
-  background: #666;
-}
-
-.nodestatus > div {
-  padding: 1em;
-  width: 60px;
-  height: 60px;
-  border-radius: 50%;
-  position: relative;
-  top: 0.8em;
-}
-
-.nodehead > div,
-.nodemiddle > div,
-.nodeinfo > div {
-  margin-right: 9px;
-}
-
-.nodeinfo i {
-  font-size: 22px;
-}
-
-.nodestatus span {
-  position: relative;
-  font-size: 35px;
-  top: 4px;
-  right: 2.5px;
-  color: #fff;
-}
-
-.nodeunset i {
-  bottom: 0;
-}
-
-.nodeoffline i {
-  bottom: 1.5px;
-  right: 1px;
-}
-
-.nodemiddle {
-  align-items: flex-end;
-}
-
-.nodetype {
-  font-size: 12px;
-  color: #525252;
-  font-weight: bold;
-}
-
-.nodehead {
-  height: 23.5px;
-}
-
-.nodename {
-  font-size: 16px;
-}
-
-div.nodetitle:first-of-type > a {
-  margin-top: 0;
-}
-
-.nodetitle > a {
-  left: 0;
-  top: 0;
-  position: relative;
-  background: white;
-  width: 210px;
-  height: 50px;
-  border-radius: 30px 10px 10px;
-  box-shadow: 2px 2px 7px 1px rgb(189 189 189);
-  margin-top: 2em;
-  text-align: center;
-  display: inline-block;
-}
-
-.nodetitle > a,
-.nodetitle a i,
-.arrow-rotate,
-.shop-table .card i {
-  transition: 0.3s all;
-}
-
-.nodetitle a span {
-  font-size: 20px;
-  position: relative;
-  top: 0.75em;
-  color: black;
-  right: 0.4em;
-}
-
-.nodetitle a i {
-  position: absolute;
-  top: 0.6em;
-  right: 0.5em;
-  color: black;
-  transform: rotate(0deg);
-}
-
-.nodetitle > a.collapsed,
-.nodetitle > .collapsed .waves-wrap {
-  border-radius: 10px;
-}
-
-.nodetitle .waves-wrap {
-  border-radius: 30px 10px 10px;
-}
-
-.nodetitle > a {
-  text-decoration: none;
-}
-
-.nodetitle a i.arrow-rotate {
-  transform: rotate(180deg);
-}
-
-.onlinemember,
-.nodetraffic,
-.nodecheck,
-.nodehead,
-.nodeband {
-  align-items: center;
-}
-
-.nodetraffic span,
-.nodecheck span,
-.nodeband span {
-  margin-left: 5px;
-  font-size: 14px;
-  color: #646464;
-}
-
-.onlinemember span {
-  font-size: 15px;
-  font-weight: bold;
-  margin-left: 5px;
-}
-
-.node-tip {
-  max-width: 350px;
-  padding: 20px;
-  border-radius: 20px;
-  box-shadow: 0 0 7px 0 gray;
-}
-
-.node-tip.cust-modelin {
-  transform: translate3d(0, 14rem, 0);
-}
-
-.nodetip-table {
-  flex-wrap: wrap;
-}
-
-.nodetip-table > .card-main {
-  flex-basis: 100%;
-}
-
-.nodeload {
-  display: flex;
-  justify-content: space-between;
-  align-items: center;
-}
-
-.tiptitle {
-  margin: 10px 0;
-}
-
-.tiptitle a {
-  font-size: 18px;
-  display: block;
-  margin-bottom: 0.5em;
-}
-
-.tipmiddle {
-  margin-bottom: 10px;
-}
-
-.tiphidden {
-  position: fixed;
-  background: gray;
-  opacity: 0.3;
-  width: 0;
-  height: 0;
-  z-index: 2;
-}
-
-/* index顶部4栏 */
-
-.user-info {
-  flex-wrap: wrap;
-}
-
-.infocolor-red {
-  background: #fb6340;
-}
-
-.infocolor-green {
-  background: #88de5e;
-}
-
-.infocolor-yellow {
-  background: #ffd600;
-}
-
-.infocolor-blue {
-  background: #11cdef;
-}
-
-.user-info-main {
-  flex-basis: 100%;
-  display: flex;
-  justify-content: space-between;
-  padding: 0 1.3em;
-}
-
-.user-info-bottom {
-  flex-basis: 100%;
-}
-
-.user-info .nodename {
-  font-size: 13px;
-  text-transform: uppercase;
-  color: #8898aa;
-  font-weight: 600;
-}
-
-.user-info .nodemiddle {
-  margin-top: 6px;
-}
-
-.user-info .nodetype {
-  font-size: 1.25rem;
-  color: #525252;
-}
-
-.user-info .nodestatus > div {
-  width: 54px;
-  height: 54px;
-}
-
-.user-info .nodestatus i {
-  font-size: 30px;
-}
-
-.user-info .nodeinfo {
-  margin-bottom: 2px;
-  padding: 5px 1.3em;
-  border-top: 1px solid #d2d2d2;
-  margin-top: 1.5rem;
-  justify-content: space-between;
-}
-
-.user-info .nodeinfo span {
-  display: block;
-  text-decoration: none;
-  font-size: 14px;
-  color: #525252;
-  padding: 1px 0;
-}
-
-.user-info .nodeinfo i {
-  font-size: 18px;
-  position: relative;
-  top: 1px;
-}
-
-/* 仿iview标签 */
-a.card-tag,
-.card-tag {
-  font-size: 12px;
-  text-decoration: none;
-  padding: 1px 6px 0;
-  border-radius: 3px;
-  border: 1px solid;
-  height: 23px;
-}
-
-.card-tag:hover {
-  opacity: 0.85;
-}
-
-a.tag-orange,
-.tag-orange {
-  background: #fff2e8;
-  color: #fa541c;
-  border-color: #ffd591;
-}
-
-a.tag-green,
-.tag-green {
-  background: #f6ffed;
-  color: #52c41a;
-  border-color: #b7eb8f;
-}
-
-a.tag-black,
-.tag-black {
-  background: #f7f7f7;
-  color: #515a6e;
-  border-color: #a6a7a9;
-}
-
-a.tag-gold,
-.tag-gold {
-  background: #fffbe6;
-  color: #faad14;
-  border-color: #ffe58f;
-}
-
-a.tag-red,
-.tag-red {
-  background: #fff1f0;
-  color: #f5222d;
-  border-color: #ffa39e;
-}
-
-a.tag-blue,
-.tag-blue {
-  background: #e6f7ff;
-  color: #1890ff;
-  border-color: #91d5ff;
-}
-
-a.tag-geekblue,
-.tag-geekblue {
-  background: #f0f5ff;
-  color: #2f54eb;
-  border-color: #adc6ff;
-}
-
-a.tag-cyan,
-.tag-cyan {
-  background: #e6fffb;
-  color: #13c2c2;
-  border-color: #87e8de;
-}
-
-a.tag-purple,
-.tag-purple {
-  background: #f9f0ff;
-  color: #722ed1;
-  border-color: #d3adf7;
-}
-
-a.tag-volcano,
-.tag-volcano {
-  background: #fff2e8;
-  color: #fa541c;
-  border-color: #ffbb96;
-}
-
-a.tag-lime,
-.tag-lime {
-  background: #fcffe6;
-  color: #a0d911;
-  border-color: #eaff8f;
-}
-
-a.tag-magenta,
-.tag-magenta {
-  background: #fff0f6;
-  color: #eb2f96;
-  border-color: #ffadd2;
-}
-
-.form-group-label {
-  margin-bottom: 16px;
-}
-
-/* 弹出层插件 */
-.cust-mask {
-  background: black;
-  opacity: 0;
-  z-index: 5;
-  width: 100vw;
-  height: 100vh;
-  position: fixed;
-  top: 0;
-  left: 0;
-  transition: 0.3s all;
-}
-
-.cust-model {
-  display: none;
-  position: fixed;
-  top: -10em;
-  left: 0;
-  right: 0;
-  margin-left: auto;
-  margin-right: auto;
-  opacity: 0;
-  transition: 0.3s all;
-  background: white;
-  z-index: 6;
-}
-
-.cust-maskfade {
-  opacity: 0.4;
-}
-
-.cust-modelin {
-  opacity: 1;
-  transform: translate3d(0, 2em, 0);
-}
-
-.fade-delay {
-  transition-delay: 0.3s;
-}
-
-/* 下拉菜单插件 */
-
-.dropdown-area {
-  height: 0;
-  opacity: 0;
-  transform: scale3d(1, 0, 1);
-  padding: 0 1.5em;
-  transition: 0.3s all;
-  transform-origin: top;
-  backface-visibility: hidden;
-  backface-visibility: hidden;
-  backface-visibility: hidden;
-  backface-visibility: hidden;
-}
-
-.dropdown-area.dropdown-active {
-  transform: scale3d(1, 1, 1);
-  opacity: 1;
-  padding: 1.5em;
-}
-
-@media screen and (max-width: 320px) {
-  .card-heading {
-    font-size: 18px;
-  }
-
-  .nodemain {
-    max-width: 200px;
-  }
-
-  .nodetitle > a {
-    width: 160px;
-  }
-
-  .nodetitle a span {
-    font-size: 16px;
-    top: 1em;
-  }
-
-  .nodetitle a i {
-    font-size: 22px;
-    top: 0.7em;
-  }
-
-  .nodename {
-    font-size: 14px;
-    line-height: 1.1em;
-  }
-
-  .nodetraffic span,
-  .nodecheck span,
-  .nodeband span {
-    font-size: 13px;
-    margin-right: 3px;
-  }
-
-  .card-inner {
-    margin: 24px 13px;
-  }
-
-  .card-table > .table-responsive {
-    margin-left: -13px;
-    margin-right: -13px;
-  }
-}
-
-@media only screen and (min-width: 480px) {
-  .shop-table .card {
-    flex-basis: 80%;
-    border-radius: 10px 0 0 10px;
-  }
-
-  .shop-table .shop-btn {
-    border-radius: 0 30px 30px 0;
-    flex-basis: 20%;
-    margin-top: 10px;
-    padding: 16px 2em 16px 1.5em;
-  }
-
-  .shop-table .shop-btn:hover {
-    border-radius: 0 10px 10px 0;
-  }
-
-  .shop-table .card > div:last-of-type {
-    flex-basis: 2%;
-  }
-
-  .shop-gridarea {
-    width: 100%;
-    grid-template-columns: 80% 20%;
-    grid-template-rows: auto auto;
-    grid-template-areas:
-      "main button"
-      "drop block";
-  }
-
-  .shop-drop {
-    border-radius: 10px;
-    box-shadow: 0 0 0 #e5e5e5, 0 0 15px rgb(0 0 0 / 12%), 0 2px 4px rgb(0 0 0 / 5%);
-  }
-
-  .shop-drop .card-tag {
-    font-size: 16px;
-    height: 26px;
-    padding: 3px 6px 0;
-  }
-
-  .node-tip.cust-modelin {
-    transform: translate3d(0, 15rem, 0);
-  }
-
-  .dropdown-area.dropdown-active {
-    margin: 0.5em 0 1.5em;
-  }
-
-  .dropdown-area {
-    transition: 0.3s all;
-  }
-}
-
-@media only screen and (min-width: 768px) {
-  .ui-card-pre {
-    min-height: 189px;
-  }
-
-  .ui-card-pre-media {
-    min-height: 353px;
-  }
-
-  .card-row {
-    grid-template-columns: 49% 49%;
-  }
-
-  .nodetitle {
-    grid-column-end: 3;
-    grid-column-start: 1;
-  }
-}
-
-@media only screen and (min-width: 992px) {
-  .ui-card-pre-media {
-    min-height: 394px;
-  }
-
-  .auth-main .form-group-label.control-focus .floating-label,
-  .auth-main .form-group-label.control-highlight .floating-label,
-  .form-group-label.control-highlight-custom .floating-label {
-    transform: scale(0.85714, 0.85714) translateY(-34px);
-    transform: scale(0.85714, 0.85714) translateY(-34px);
-  }
-}
-
-@media only screen and (min-width: 1440px) {
-  .ui-card-pre-media {
-    min-height: 389px;
-  }
-
-  .card-row {
-    grid-template-columns: 32% 32% 32%;
-  }
-
-  .nodetitle {
-    grid-column-end: 4;
-    grid-column-start: 1;
-  }
-
-  .shop-gridarea {
-    width: 100%;
-    grid-template-columns: 87% 13%;
-  }
-}

File diff suppressed because it is too large
+ 0 - 0
public/theme/material/css/project.min.css


+ 0 - 378
public/theme/material/css/user.css

@@ -1,378 +0,0 @@
-@keyframes mysnow {
-  0% {
-    bottom: 100%;
-    opacity: 0;
-  }
-
-  50% {
-    opacity: 1;
-    transform: rotate(1080deg);
-  }
-
-  100% {
-    transform: rotate(0deg);
-    opacity: 0;
-    bottom: 0;
-  }
-}
-
-@keyframes mysnow {
-  0% {
-    bottom: 100%;
-    opacity: 0;
-  }
-
-  50% {
-    opacity: 1;
-    transform: rotate(1080deg);
-  }
-
-  100% {
-    transform: rotate(0deg);
-    opacity: 0;
-    bottom: 0;
-  }
-}
-
-@keyframes mysnow {
-  0% {
-    bottom: 100%;
-    opacity: 0;
-  }
-
-  50% {
-    opacity: 1;
-    transform: rotate(1080deg);
-  }
-
-  100% {
-    transform: rotate(0deg);
-    opacity: 0;
-    bottom: 0;
-  }
-}
-
-@keyframes mysnow {
-  0% {
-    bottom: 100%;
-    opacity: 0;
-  }
-
-  50% {
-    opacity: 1;
-    transform: rotate(1080deg);
-  }
-
-  100% {
-    transform: rotate(0deg);
-    opacity: 0;
-    bottom: 0;
-  }
-}
-
-@keyframes mysnow {
-  0% {
-    bottom: 100%;
-    opacity: 0;
-  }
-
-  50% {
-    opacity: 1;
-    transform: rotate(1080deg);
-  }
-
-  100% {
-    transform: rotate(0deg);
-    opacity: 0;
-    bottom: 0;
-  }
-}
-
-.roll {
-  position: absolute;
-  opacity: 0;
-  animation: mysnow 5s;
-  animation: mysnow 5s;
-  animation: mysnow 5s;
-  animation: mysnow 5s;
-  animation: mysnow 5s;
-  height: 80px;
-}
-
-.div {
-  position: fixed;
-}
-
-pre {
-  white-space: pre-wrap;
-  word-wrap: break-word;
-}
-
-.progress-green .progress-bar {
-  background-color: #f0231b;
-}
-
-.progress-green {
-  background-color: #000;
-}
-
-.progress-green .progress-bar {
-  background-color: #ff0a00;
-}
-
-.page-orange .ui-content-header {
-  background-image: url(/theme/material/css/images/bg/amber.jpg);
-}
-
-.content-heading {
-  font-weight: 300;
-  color: #fff;
-}
-
-.reset-invitelink {
-  margin-left: 1em;
-}
-
-.enable-flag {
-  color: #383838;
-}
-
-.node-icon {
-  color: #ff9000;
-}
-
-.node-alive {
-  color: #474747;
-}
-
-.node-load,
-.node-mothed {
-  color: #525252;
-}
-
-.node-band {
-  color: #525252;
-}
-
-.node-tr {
-  color: #525252;
-}
-
-.node-type {
-  color: #525252;
-}
-
-.usercheck {
-  text-align: center;
-  width: 100%;
-}
-
-.btn-dl {
-  border-radius: 8px;
-  padding: 3px 12px 3px 10px;
-  margin-left: 8px;
-  margin-right: 8px;
-  background: #f5f5f5;
-  font-size: 13px;
-  border: 1px solid #f5f5f5;
-}
-
-.btn-dl i {
-  font-size: 22px;
-  position: relative;
-  top: 6px;
-  right: 2px;
-}
-
-.btn-dl i.icon-sm {
-  font-size: 18px;
-  top: 4px;
-}
-
-.quickadd p {
-  line-height: 22px;
-}
-
-a.btn-dl:focus,
-a.btn-dl:visited {
-  text-decoration: none;
-}
-
-.btn-dl:hover {
-  box-shadow: 2px 2px 10px #d6d6d6;
-  transition: 0.4s all;
-  border: 1px solid #b7b7b7;
-  text-decoration: none;
-}
-
-.copy-text {
-  cursor: pointer;
-}
-
-.progressbar {
-  position: relative;
-  display: block;
-  width: 100%;
-  height: 20px;
-  border-bottom: 1px solid rgb(255 255 255 / 25%);
-  border-radius: 16px;
-  margin: 40px auto;
-  margin-top: 40px;
-}
-
-.progressbar:first-of-type {
-  margin-top: 60px;
-}
-
-.progressbar .before {
-  position: absolute;
-  display: block;
-  content: "";
-  width: calc(100% + 4px);
-  height: 20px;
-  left: -2px;
-  right: 1px;
-  border-radius: 20px;
-  background: #fff;
-  box-shadow: 0 0 2px 0 rgb(180 180 180 / 85%);
-  border: 1px solid rgb(222 222 222 / 80%);
-}
-
-.progressbar .bar {
-  position: absolute;
-  display: block;
-  width: 0;
-  height: 16px;
-  top: 2px;
-  left: 0;
-  background: rgb(126 234 25);
-  border-radius: 16px;
-  box-shadow: 0 0 12px 0 rgb(126 234 25 / 100%), inset 0 1px 0 0 rgb(255 255 255 / 45%), inset 1px 0 0 0 rgb(255 255 255 / 25%), inset -1px 0 0 0 rgb(255 255 255 / 25%);
-  overflow: hidden;
-}
-
-.progressbar .label .bar {
-  position: relative;
-  display: inline-block;
-  top: 12%;
-  left: 0;
-  margin-right: 5px;
-  width: 16px;
-}
-
-.progressbar .label .bar.color {
-  box-shadow: 0 0 5px 0 rgb(126 234 25 / 100%), inset 0 1px 0 0 rgb(255 255 255 / 45%), inset 1px 0 0 0 rgb(255 255 255 / 25%), inset -1px 0 0 0 rgb(255 255 255 / 25%);
-}
-
-.progressbar .label .bar.color2 {
-  box-shadow: 0 0 5px 0 rgb(229 195 25 / 100%), inset 0 1px 0 0 rgb(255 255 255 / 45%), inset 1px 0 0 0 rgb(255 255 255 / 25%), inset -1px 0 0 0 rgb(255 255 255 / 25%);
-}
-
-.progressbar .label .bar.color3 {
-  box-shadow: 0 0 5px 0 rgb(232 25 87 / 100%), inset 0 1px 0 0 rgb(255 255 255 / 45%), inset 1px 0 0 0 rgb(255 255 255 / 25%), inset -1px 0 0 0 rgb(255 255 255 / 25%);
-}
-
-.progressbar .label .bar.color4 {
-  box-shadow: 0 0 5px 0 rgb(24 109 226 / 100%), inset 0 1px 0 0 rgb(255 255 255 / 45%), inset 1px 0 0 0 rgb(255 255 255 / 25%), inset -1px 0 0 0 rgb(255 255 255 / 25%);
-}
-
-.progressbar .bar.color2 {
-  background: rgb(229 195 25);
-  box-shadow: 0 0 12px 0 rgb(229 195 25 / 100%), inset 0 1px 0 0 rgb(255 255 255 / 45%), inset 1px 0 0 0 rgb(255 255 255 / 25%), inset -1px 0 0 0 rgb(255 255 255 / 25%);
-}
-
-.progressbar .bar.color3 {
-  background: rgb(255 104 149);
-  box-shadow: 0 0 7px 0 rgb(232 25 87 / 100%), 0 1px 0 0 rgb(255 255 255 / 45%), 1px 0 0 0 rgb(255 255 255 / 25%), -1px 0 0 0 rgb(255 255 255 / 25%);
-}
-
-.progressbar .bar.color4 {
-  background: rgb(24 109 226);
-  box-shadow: 0 0 12px 0 rgb(24 109 226 / 100%), inset 0 1px 0 0 rgb(255 255 255 / 45%), inset 1px 0 0 0 rgb(255 255 255 / 25%), inset -1px 0 0 0 rgb(255 255 255 / 25%);
-}
-
-.progressbar .bar::before {
-  position: absolute;
-  display: block;
-  content: "";
-  width: 606px;
-  height: 150%;
-  top: -25%;
-  left: -25px;
-
-  /* background:-moz-radial-gradient(center, ellipse cover,  rgba(255,255,255,0.35) 0%, rgba(255,255,255,0.01) 50%, rgba(255,255,255,0) 51%, rgba(255,255,255,0) 100%);
-	background:-webkit-gradient(radial, center center, 0px, center center, 100%, color-stop(0%,rgba(255,255,255,0.35)), color-stop(50%,rgba(255,255,255,0.01)), color-stop(51%,rgba(255,255,255,0)), color-stop(100%,rgba(255,255,255,0)));
-	background:-webkit-radial-gradient(center, ellipse cover,  rgba(255,255,255,0.35) 0%,rgba(255,255,255,0.01) 50%,rgba(255,255,255,0) 51%,rgba(255,255,255,0) 100%);
-	background:-o-radial-gradient(center, ellipse cover,  rgba(255,255,255,0.35) 0%,rgba(255,255,255,0.01) 50%,rgba(255,255,255,0) 51%,rgba(255,255,255,0) 100%);
-	background:-ms-radial-gradient(center, ellipse cover,  rgba(255,255,255,0.35) 0%,rgba(255,255,255,0.01) 50%,rgba(255,255,255,0) 51%,rgba(255,255,255,0) 100%);
-	background:radial-gradient(ellipse at center,  rgba(255,255,255,0.35) 0%,rgba(255,255,255,0.01) 50%,rgba(255,255,255,0) 51%,rgba(255,255,255,0) 100%); */
-  filter: progid:dximagetransform.microsoft.gradient(startColorstr="#59ffffff", endColorstr="#00ffffff", GradientType=1);
-}
-
-.progressbar .bar::after {
-  position: absolute;
-  display: block;
-  content: "";
-  width: 64px;
-  height: 16px;
-  right: 0;
-  top: 0;
-  border-radius: 0 16px 16px 0;
-
-  /* background:-moz-linear-gradient(left,  rgba(255,255,255,0) 0%, rgba(255,255,255,0.6) 98%, rgba(255,255,255,0) 100%);
-	background:-webkit-gradient(linear, left top, right top, color-stop(0%,rgba(255,255,255,0)), color-stop(98%,rgba(255,255,255,0.6)), color-stop(100%,rgba(255,255,255,0)));
-	background:-webkit-linear-gradient(left,  rgba(255,255,255,0) 0%,rgba(255,255,255,0.6) 98%,rgba(255,255,255,0) 100%);
-	background:-o-linear-gradient(left,  rgba(255,255,255,0) 0%,rgba(255,255,255,0.6) 98%,rgba(255,255,255,0) 100%);
-	background:-ms-linear-gradient(left,  rgba(255,255,255,0) 0%,rgba(255,255,255,0.6) 98%,rgba(255,255,255,0) 100%);
-	background:linear-gradient(to right,  rgba(255,255,255,0) 0%,rgba(255,255,255,0.6) 98%,rgba(255,255,255,0) 100%); */
-  filter: progid:dximagetransform.microsoft.gradient(startColorstr="#00ffffff", endColorstr="#00ffffff", GradientType=1);
-}
-
-.progressbar .bar span {
-  position: absolute;
-  display: block;
-  width: 100%;
-  height: 64px;
-  border-radius: 16px;
-  border-radius: 16px;
-  top: 0;
-  left: 0;
-  background: url(/theme/material/images/users/trafficbar.png) 0 0;
-  animation: sparkle 1500ms linear infinite;
-  animation: sparkle 1500ms linear infinite;
-  animation: sparkle 1500ms linear infinite;
-  animation: sparkle 1500ms linear infinite;
-  opacity: 0.4;
-}
-
-.label.la-top code,
-.progressbar .label {
-  display: flex;
-  align-items: center;
-}
-
-.progressbar .label {
-  font-family: Aldrich, sans-serif;
-  position: relative;
-  width: 100%;
-  height: 30px;
-  line-height: 30px;
-  bottom: 40px;
-  left: 0;
-  background: rgb(255 255 255);
-  filter: progid:dximagetransform.microsoft.gradient(startColorstr="#4c4c4c", endColorstr="#262626", GradientType=0);
-  font-weight: bold;
-  font-size: 12px;
-  color: #515a6e;
-  filter: dropshadow(color=#000000, offx=0, offy=-1);
-}
-
-.label.la-top code {
-  position: absolute;
-  right: 0;
-  top: 6px;
-}
-
-.traffic-info {
-  margin-top: 6px;
-}

File diff suppressed because it is too large
+ 0 - 0
public/theme/material/css/user.min.css


BIN
public/theme/material/images/users/trafficbar.png


File diff suppressed because it is too large
+ 0 - 3
public/theme/material/js/base.js


File diff suppressed because it is too large
+ 0 - 3
public/theme/material/js/base.min.js


File diff suppressed because it is too large
+ 0 - 1
public/theme/material/js/jquery.qrcode.min.js


File diff suppressed because it is too large
+ 0 - 2
public/theme/material/js/project.js


File diff suppressed because it is too large
+ 0 - 0
public/theme/material/js/project.min.js


+ 0 - 19
resources/views/material/404.tpl

@@ -1,19 +0,0 @@
-<!DOCTYPE HTML>
-<html lang="en">
-<head>
-    <meta charset="UTF-8">
-    <title>Not Found - {$config['appName']}</title>
-    <link rel="shortcut icon" href="/favicon.ico"/>
-    <link rel="bookmark" href="/favicon.ico" type="image/x-icon"/>
-    <link rel="stylesheet" href="/assets/css/error-pages.min.css"/>
-</head>
-<body>
-<div class="container">
-    <div class="copy-container center-xy">
-        <p>
-            404, Not Found.
-        </p>
-    </div>
-</div>
-</body>
-</html>

+ 0 - 19
resources/views/material/405.tpl

@@ -1,19 +0,0 @@
-<!DOCTYPE HTML>
-<html lang="en">
-<head>
-    <meta charset="UTF-8">
-    <title>Method Not Allowed - {$config['appName']}</title>
-    <link rel="shortcut icon" href="/favicon.ico"/>
-    <link rel="bookmark" href="/favicon.ico" type="image/x-icon"/>
-    <link rel="stylesheet" href="/assets/css/error-pages.min.css"/>
-</head>
-<body>
-<div class="container">
-    <div class="copy-container center-xy">
-        <p>
-            405, Method Not Allowed.
-        </p>
-    </div>
-</div>
-</body>
-</html>

+ 0 - 36
resources/views/material/500.tpl

@@ -1,36 +0,0 @@
-<!DOCTYPE HTML>
-<html lang="en">
-<head>
-    <meta charset="UTF-8">
-    <title>Internal Server Error - {$config['appName']}</title>
-    <link rel="shortcut icon" href="/favicon.ico"/>
-    <link rel="bookmark" href="/favicon.ico" type="image/x-icon"/>
-    <link rel="stylesheet" href="/assets/css/error-pages.min.css"/>
-</head>
-<body>
-<div class="container">
-    <div class="copy-container center-xy">
-        <p>
-            500, Internal Server Error.
-        </p>
-    </div>
-</div>
-
-{if !is_null($exceptionId)}
-<script src="https://fastly.jsdelivr.net/npm/@sentry/[email protected]/build/bundle.min.js" integrity="sha256-EIV/iYkbXFgnuIHEdltBOK4eY58n87ADisyDI8/VJPg=" crossorigin="anonymous"></script>
-<script>
-    Sentry.init({
-        dsn: "{$config['sentry_dsn']}"
-    });
-    Sentry.showReportDialog({
-        eventId: '{$exceptionId}',
-        user: {
-            name: '{$user->user_name}',
-            email: '{$user->email}'
-        }
-    });
-</script>
-{/if}
-
-</body>
-</html>

+ 0 - 124
resources/views/material/admin/announcement/create.tpl

@@ -1,124 +0,0 @@
-{include file='admin/main.tpl'}
-
-<main class="content">
-    <div class="content-header ui-content-header">
-        <div class="container">
-            <h1 class="content-heading">添加公告</h1>
-        </div>
-    </div>
-    <div class="container">
-        <div class="col-lg-12 col-md-12">
-            <section class="content-inner margin-top-no">
-                <div class="card">
-                    <div class="card-main">
-                        <div class="card-inner">
-                            <div class="form-group form-group-label">
-                                <label class="floating-label" for="content">内容</label>
-                                <link rel="stylesheet"
-                                      href="https://fastly.jsdelivr.net/npm/[email protected]/css/editormd.min.css"/>
-                                <div id="editormd">
-                                    <textarea style="display:none;" id="content"></textarea>
-                                </div>
-                            </div>
-                        </div>
-                    </div>
-                </div>
-                <div class="card">
-                    <div class="card-main">
-                        <div class="card-inner">
-                            <div class="form-group">
-                                <div class="row">
-                                    <div class="col-md-10 col-md-push-1">
-                                        <div class="form-group form-group-label">
-                                            <label class="floating-label" for="vip">VIP等级</label>
-                                            <input class="form-control maxwidth-edit" id="vip" type="text" name="vip">
-                                            <p class="form-control-guide"><i class="mdi mdi-information"></i>发送给等于或高于这个等级的用户
-                                                0为不分级</p>
-                                            <div class="checkbox switch">
-                                                <label for="issend">
-                                                    <input class="access-hide" id="issend" type="checkbox"
-                                                           name="issend"><span class="switch-toggle"></span>是否发送邮件
-                                                </label>
-                                            </div>
-                                        </div>
-                                        <button id="submit" type="submit"
-                                                class="btn btn-block btn-brand waves-attach waves-light">添加
-                                        </button>
-                                    </div>
-                                </div>
-                            </div>
-                        </div>
-                    </div>
-                </div>
-                {include file='dialog.tpl'}
-            </section>
-        </div>
-    </div>
-</main>
-
-{include file='admin/footer.tpl'}
-
-<script src="https://cdn.staticfile.org/editor-md/1.5.0/editormd.min.js"></script>
-<script>
-    (() => {
-        editor = editormd("editormd", {
-            path: "https://fastly.jsdelivr.net/npm/[email protected]/lib/", // Autoload modules mode, codemirror, marked... dependents libs path
-            height: 720,
-            saveHTMLToTextarea: true
-        });
-        /*
-        // or
-        var editor = editormd({
-            id   : "editormd",
-            path : "../lib/"
-        });
-        */
-    })();
-    window.addEventListener('load', () => {
-        function submit(page = -1) {
-            if ($$.getElementById('issend').checked) {
-                var issend = 1;
-            } else {
-                var issend = 0;
-            }
-            if (page === -1) {
-                sedPage = 1;
-            } else {
-                sedPage = page;
-            }
-            $.ajax({
-                type: "POST",
-                url: "/admin/announcement",
-                dataType: "json",
-                data: {
-                    content: editor.getHTML(),
-                    markdown: $('.editormd-markdown-textarea').val(),
-                    vip: $$getValue('vip'),
-                    issend,
-                    page: sedPage
-                },
-                success: data => {
-                    if (data.ret === 1) {
-                        $("#result").modal();
-                        $$.getElementById('msg').innerHTML = data.msg;
-                        window.setTimeout("location.href=top.document.referrer", {$config['jump_delay']});
-                    } else if (data.ret === 2) {
-                        submit(data.msg);
-                    } else {
-                        $("#result").modal();
-                        $$.getElementById('msg').innerHTML = data.msg;
-                    }
-                },
-                error: jqXHR => {
-                    $("#result").modal();
-                    $$.getElementById('msg').innerHTML = `发生错误:${
-                        jqXHR.status
-                    }`;
-                }
-            });
-        }
-        $$.getElementById('submit').addEventListener('click', () => {
-            submit();
-        });
-    });
-</script>

+ 0 - 96
resources/views/material/admin/announcement/edit.tpl

@@ -1,96 +0,0 @@
-{include file='admin/main.tpl'}
-
-<main class="content">
-    <div class="content-header ui-content-header">
-        <div class="container">
-            <h1 class="content-heading">编辑公告 #{$ann->id}</h1>
-        </div>
-    </div>
-    <div class="container">
-        <div class="col-lg-12 col-md-12">
-            <section class="content-inner margin-top-no">
-                <div class="card">
-                    <div class="card-main">
-                        <div class="card-inner">
-                            <div class="form-group form-group-label">
-                                <label class="floating-label" for="content">内容</label>
-                                <link rel="stylesheet"
-                                      href="https://fastly.jsdelivr.net/npm/[email protected]/css/editormd.min.css"/>
-                                <div id="editormd">
-                                    <textarea style="display:none;" id="content">{$ann->markdown}</textarea>
-                                </div>
-                            </div>
-                        </div>
-                    </div>
-                </div>
-                <div class="card">
-                    <div class="card-main">
-                        <div class="card-inner">
-                            <div class="form-group">
-                                <div class="row">
-                                    <div class="col-md-10 col-md-push-1">
-                                        <button id="submit" type="submit"
-                                                class="btn btn-block btn-brand waves-attach waves-light">修改
-                                        </button>
-                                    </div>
-                                </div>
-                            </div>
-                        </div>
-                    </div>
-                </div>
-                {include file='dialog.tpl'}
-            </section>
-        </div>
-    </div>
-</main>
-
-{include file='admin/footer.tpl'}
-
-<script src="https://cdn.staticfile.org/editor-md/1.5.0/editormd.min.js"></script>
-<script>
-    (() => {
-        editor = editormd("editormd", {
-            path: "https://fastly.jsdelivr.net/npm/[email protected]/lib/", // Autoload modules mode, codemirror, marked... dependents libs path
-            height: 720,
-            saveHTMLToTextarea: true,
-            emoji: true
-        });
-        /*
-        // or
-        var editor = editormd({
-            id   : "editormd",
-            path : "../lib/"
-        });
-        */
-    })();
-    window.addEventListener('load', () => {
-        function submit() {
-            $.ajax({
-                type: "PUT",
-                url: "/admin/announcement/{$ann->id}",
-                dataType: "json",
-                data: {
-                    content: editor.getHTML(),
-                    markdown: editor.getMarkdown()
-                },
-                success: data => {
-                    if (data.ret) {
-                        $("#result").modal();
-                        $$.getElementById('msg').innerHTML = data.msg;
-                        window.setTimeout("location.href=top.document.referrer", {$config['jump_delay']});
-                    } else {
-                        $("#result").modal();
-                        document.getElementById('msg').innerHTML = data.msg;
-                    }
-                },
-                error: jqXHR => {
-                    $("#result").modal();
-                    $$.getElementById('msg').innerHTML = `发生错误:${
-                        jqXHR.status
-                    }`;
-                }
-            });
-        }
-        $$.getElementById('submit').addEventListener('click', submit);
-    });
-</script>

+ 0 - 98
resources/views/material/admin/announcement/index.tpl

@@ -1,98 +0,0 @@
-{include file='admin/main.tpl'}
-
-<main class="content">
-    <div class="content-header ui-content-header">
-        <div class="container">
-            <h1 class="content-heading">公告管理</h1>
-        </div>
-    </div>
-    <div class="container">
-        <div class="col-lg-12 col-md-12">
-            <section class="content-inner margin-top-no">
-
-                <div class="card">
-                    <div class="card-main">
-                        <div class="card-inner">
-                            <p>系统中所有公告。</p>
-                            <p>显示表项:
-                                {include file='table/checkbox.tpl'}
-                            </p>
-                        </div>
-                    </div>
-                </div>
-                <div class="table-responsive">
-                    {include file='table/table.tpl'}
-                </div>
-                <div class="fbtn-container">
-                    <div class="fbtn-inner">
-                        <a class="fbtn fbtn-lg fbtn-brand-accent waves-attach waves-circle waves-light"
-                           href="/admin/announcement/create">+</a>
-                    </div>
-                </div>
-                <div aria-hidden="true" class="modal modal-va-middle fade" id="delete_modal" role="dialog"
-                     tabindex="-1">
-                    <div class="modal-dialog modal-xs">
-                        <div class="modal-content">
-                            <div class="modal-heading">
-                                <a class="modal-close" data-dismiss="modal">×</a>
-                                <h2 class="modal-title">确认要删除?</h2>
-                            </div>
-                            <div class="modal-inner">
-                                <p>请您确认。</p>
-                            </div>
-                            <div class="modal-footer">
-                                <p class="text-right">
-                                    <button class="btn btn-flat btn-brand-accent waves-attach waves-effect"
-                                            data-dismiss="modal" type="button">取消
-                                    </button>
-                                    <button class="btn btn-flat btn-brand-accent waves-attach" data-dismiss="modal"
-                                            id="delete_input" type="button">确定
-                                    </button>
-                                </p>
-                            </div>
-                        </div>
-                    </div>
-                </div>
-                {include file='dialog.tpl'}
-            </section>
-        </div>
-    </div>
-</main>
-
-{include file='admin/footer.tpl'}
-
-<script>
-    function delete_modal_show(id) {
-        deleteid = id;
-        $("#delete_modal").modal();
-    }
-    {include file='table/js_1.tpl'}
-    window.addEventListener('load', () => {
-        {include file='table/js_2.tpl'}
-        function delete_id() {
-            $.ajax({
-                type: "DELETE",
-                url: "/admin/announcement",
-                dataType: "json",
-                data: {
-                    id: deleteid
-                },
-                success: data => {
-                    if (data.ret) {
-                        $("#result").modal();
-                        $$.getElementById('msg').innerHTML = data.msg;
-                        {include file='table/js_delete.tpl'}
-                    } else {
-                        $("#result").modal();
-                        $$.getElementById('msg').innerHTML = data.msg;
-                    }
-                },
-                error: jqXHR => {
-                    $("#result").modal();
-                    $$.getElementById('msg').innerHTML = `${ldelim}data.msg{rdelim} 发生错误了。`;
-                }
-            });
-        }
-        $$.getElementById('delete_input').addEventListener('click', delete_id);
-    })
-</script>

+ 0 - 103
resources/views/material/admin/code/add.tpl

@@ -1,103 +0,0 @@
-{include file='admin/main.tpl'}
-
-<main class="content">
-    <div class="content-header ui-content-header">
-        <div class="container">
-            <h1 class="content-heading">添加充值码</h1>
-        </div>
-    </div>
-    <div class="container">
-        <div class="col-lg-12 col-md-12">
-            <section class="content-inner margin-top-no">
-                <div class="card">
-                    <div class="card-main">
-                        <div class="card-inner">
-                            <div class="form-group form-group-label">
-                                <label class="floating-label" for="amount">数目</label>
-                                <input class="form-control maxwidth-edit" id="amount" type="text" value="1">
-                            </div>
-                            <div class="form-group form-group-label">
-                                <label class="floating-label" for="face_value">面额</label>
-                                <input class="form-control maxwidth-edit" id="face_value" type="text">
-                            </div>
-                            <div class="form-group form-group-label">
-                                <div class="form-group form-group-label">
-                                    <label class="floating-label" for="code_length">充值码长度</label>
-                                    <select id="code_length" class="form-control maxwidth-edit" name="code_length">
-                                        <option value="12">12 位</option>    
-                                        <option value="18" selected>18 位</option>
-                                        <option value="24">24 位</option>
-                                        <option value="30">30 位</option>
-                                        <option value="36">36 位</option>
-                                    </select>
-                                </div>
-                            </div>
-                            <p class="form-control-guide"><i class="mdi mdi-information"></i>生成的充值码将会发送到你的邮箱中(需要提前设置好邮件发信参数,且测试发信能够成功)</p>
-                        </div>
-                    </div>
-                </div>
-                <div class="card">
-                    <div class="card-main">
-                        <div class="card-inner">
-                            <div class="form-group">
-                                <div class="row">
-                                    <div class="col-md-10 col-md-push-1">
-                                        <button id="submit" type="submit"
-                                            class="btn btn-block btn-brand waves-attach waves-light">添加
-                                        </button>
-                                    </div>
-                                </div>
-                            </div>
-                        </div>
-                    </div>
-                </div>
-                {include file='dialog.tpl'}
-            </section>
-        </div>
-    </div>
-</main>
-
-{include file='admin/footer.tpl'}
-
-<script>
-    window.addEventListener('load', () => {
-        function submit() {
-            $.ajax({
-                type: "POST",
-                url: "/admin/code",
-                dataType: "json",
-                data: {
-                    amount: $$getValue('amount'),
-                    face_value: $$getValue('face_value'),
-                    code_length: $$getValue('code_length'),
-                },
-                success: data => {
-                    if (data.ret) {
-                        $("#result").modal();
-                        $$.getElementById('msg').innerHTML = data.msg;
-                        window.setTimeout("location.href=top.document.referrer", 1500);
-                    } else if (data.ret == 0) {
-                        $("#result").modal();
-                        $$.getElementById('msg').innerHTML = data.msg;
-                    } else {
-                        $("#msg-error").hide(10);
-                        $("#msg-error").show(100);
-                        $$.getElementById('msg').innerHTML = `${ldelim}data.msg{rdelim} 发生错误了。`;
-                    }
-                },
-                error: jqXHR => {
-                    $("#result").modal();
-                    $$.getElementById('msg').innerHTML = `发生错误:${
-                        jqXHR.status
-                    }`;
-                }
-            });
-        }
-        $("html").keydown(event => {
-            if (event.keyCode === 13) {
-                submit();
-            }
-        });
-        $$.getElementById('submit').addEventListener('click', submit);
-    })
-</script>

+ 0 - 94
resources/views/material/admin/code/add_donate.tpl

@@ -1,94 +0,0 @@
-{include file='admin/main.tpl'}
-
-<main class="content">
-    <div class="content-header ui-content-header">
-        <div class="container">
-            <h1 class="content-heading">添加捐赠或支出记录</h1>
-        </div>
-    </div>
-    <div class="container">
-        <div class="col-lg-12 col-md-12">
-            <section class="content-inner margin-top-no">
-                <div class="card">
-                    <div class="card-main">
-                        <div class="card-inner">
-                            <div class="form-group form-group-label">
-                                <label class="floating-label" for="number">类型</label>
-                                <select id="type" class="form-control maxwidth-edit" name="type">
-                                    <option value="-1">捐赠</option>
-                                    <option value="-2">支出</option>
-                                </select>
-                            </div>
-                            <div class="form-group form-group-label">
-                                <label class="floating-label" for="number">备注</label>
-                                <input class="form-control maxwidth-edit" id="code" type="text">
-                            </div>
-                            <div class="form-group form-group-label">
-                                <label class="floating-label" for="amount">金额</label>
-                                <input class="form-control maxwidth-edit" id="amount" type="text">
-                            </div>
-                        </div>
-                    </div>
-                </div>
-                <div class="card">
-                    <div class="card-main">
-                        <div class="card-inner">
-                            <div class="form-group">
-                                <div class="row">
-                                    <div class="col-md-10 col-md-push-1">
-                                        <button id="submit" type="submit"
-                                                class="btn btn-block btn-brand waves-attach waves-light">添加
-                                        </button>
-                                    </div>
-                                </div>
-                            </div>
-                        </div>
-                    </div>
-                </div>
-                {include file='dialog.tpl'}
-            </section>
-        </div>
-    </div>
-</main>
-
-{include file='admin/footer.tpl'}
-
-<script>
-    window.addEventListener('load', () => {
-        let submit = () => {
-            $.ajax({
-                type: "POST",
-                url: "/admin/donate",
-                dataType: "json",
-                data: {
-                    amount: $$getValue("amount"),
-                    code: $$getValue("code"),
-                    type: $$getValue("type")
-                },
-                success: data => {
-                    if (data.ret) {
-                        $("#result").modal();
-                        $$.getElementById('msg').innerHTML = data.msg;
-                        window.setTimeout("location.href=top.document.referrer", {$config['jump_delay']});
-                    } else {
-                        $("#msg-error").hide(10);
-                        $("#msg-error").show(100);
-                        $$.getElementById('msg-error-p').innerHTML = data.msg;
-                    }
-                },
-                error: jqXHR => {
-                    $("#result").modal();
-                    $$.getElementById('msg').innerHTML = `发生错误:${
-                        jqXHR.status
-                    }`;
-                }
-            });
-        }
-        $("html").keydown(event => {
-            if (event.keyCode === 13) {
-                login();
-            }
-        });
-        $$.getElementById('submit').addEventListener('click', submit);
-    })
-</script>

+ 0 - 65
resources/views/material/admin/code/index.tpl

@@ -1,65 +0,0 @@
-{include file='admin/main.tpl'}
-
-<main class="content">
-    <div class="content-header ui-content-header">
-        <div class="container">
-            <h1 class="content-heading">充值码{if $config['enable_donate']===true}与捐赠{/if}管理</h1>
-        </div>
-    </div>
-    <div class="container">
-        <div class="col-lg-12 col-md-12">
-            <section class="content-inner margin-top-no">
-                <div class="card">
-                    <div class="card-main">
-                        <div class="card-inner">
-                            <p>系统中金额流转记录。</p>
-                            <p>
-                                今日流水:¥{$user->calIncome("today")}<br/>
-                                昨日流水:¥{$user->calIncome("yesterday")}<br/>
-                                这月流水:¥{$user->calIncome("this month")}<br/>
-                                上月流水:¥{$user->calIncome("last month")}<br/>
-                                总共流水:¥{$user->calIncome("total")}
-                            </p>
-                            <p>显示表项:
-                                {include file='table/checkbox.tpl'}
-                            </p>
-                        </div>
-                    </div>
-                </div>
-                <div class="table-responsive">
-                    {include file='table/table.tpl'}
-                </div>
-                <div class="fbtn-container">
-                    <div class="fbtn-inner">
-                        <a class="fbtn fbtn-lg fbtn-brand-accent waves-attach waves-circle waves-light"
-                           href="/admin/code/create">+</a>
-                    </div>
-                </div>
-                <div class="fbtn-container">
-                    <div class="fbtn-inner">
-                        <a class="fbtn fbtn-lg fbtn-brand-accent waves-attach waves-circle waves-light"
-                           data-toggle="dropdown"><span class="fbtn-ori mdi mdi-plus"></span><span class="fbtn-sub mdi mdi-close"></span></a>
-                        <div class="fbtn-dropup">
-                            <a class="fbtn fbtn-brand waves-attach waves-circle waves-light"
-                               href="/admin/code/create"><span class="fbtn-text fbtn-text-left">充值码</span><span
-                                        class="mdi mdi-code-tags"></span></a> {if $config['enable_donate']===true}
-                                <a class="fbtn fbtn-green waves-attach waves-circle waves-light"
-                                   href="/admin/donate/create"><span class="fbtn-text fbtn-text-left">捐赠和支出</span><span
-                                            class="mdi mdi-wallet-plus"></span></a>
-                            {/if}
-                        </div>
-                    </div>
-                </div>
-            </section>
-        </div>
-    </div>
-</main>
-
-{include file='admin/footer.tpl'}
-
-<script>
-    {include file='table/js_1.tpl'}
-    $(document).ready(function () {
-        {include file='table/js_2.tpl'}
-    });
-</script>

+ 0 - 116
resources/views/material/admin/coupon.tpl

@@ -1,116 +0,0 @@
-{include file='admin/main.tpl'}
-
-<main class="content">
-    <div class="content-header ui-content-header">
-        <div class="container">
-            <h1 class="content-heading">优惠码</h1>
-        </div>
-    </div>
-    <div class="container">
-        <section class="content-inner margin-top-no">
-            <div class="card">
-                <div class="card-main">
-                    <div class="card-inner">
-                        <div class="form-group form-group-label">
-                            <label class="floating-label" for="prefix">优惠码</label>
-                            <input class="form-control maxwidth-edit" id="prefix" type="text">
-                            <p class="form-control-guide"><i class="mdi mdi-information"></i>生成随机优惠码不填</p>
-                        </div>
-                        <div class="form-group form-group-label">
-                            <label class="floating-label" for="credit">优惠码额度</label>
-                            <input class="form-control maxwidth-edit" id="credit" type="text">
-                            <p class="form-control-guide"><i class="mdi mdi-information"></i>百分比,九折就填 10</p>
-                        </div>
-                        <div class="form-group form-group-label">
-                            <label class="floating-label" for="expire">优惠码有效期(h)</label>
-                            <input class="form-control maxwidth-edit" id="expire" type="number" value="1">
-                        </div>
-                        <div class="form-group form-group-label">
-                            <label class="floating-label" for="shop">优惠码可用商品ID</label>
-                            <input class="form-control maxwidth-edit" id="shop" type="text">
-                            <p class="form-control-guide"><i class="mdi mdi-information"></i>不填即为所有商品可用,多个的话用英文半角逗号分割</p>
-                        </div>
-                        <div class="form-group form-group-label">
-                            <label class="floating-label" for="shop">优惠码每个用户可用次数,-1为无限次</label>
-                            <input class="form-control maxwidth-edit" id="count" type="number" value="1">
-                        </div>
-                        <div class="form-group form-group-label">
-                            <label for="generate-type">
-                                <label class="floating-label" for="sort">选择生成方式</label>
-                                <select id="generate-type" class="form-control maxwidth-edit">
-                                    <option value="1">指定字符</option>
-                                    <option value="2">随机字符</option>
-                                    <option value="3">指定字符+随机字符</option>
-                                </select>
-                            </label>
-                        </div>
-                        <div class="form-group">
-                            <div class="row">
-                                <div class="col-md-10 col-md-push-1">
-                                    <button id="coupon" type="submit"
-                                            class="btn btn-block btn-brand waves-attach waves-light">生成优惠码
-                                    </button>
-                                </div>
-                            </div>
-                        </div>
-                    </div>
-                </div>
-            </div>
-            <div class="card margin-bottom-no">
-                <div class="card-main">
-                    <div class="card-inner">
-                        <p class="card-heading">优惠码</p>
-                        <p>显示表项:
-                            {include file='table/checkbox.tpl'}
-                        </p>
-                        <div class="card-table">
-                            <div class="table-responsive">
-                                {include file='table/table.tpl'}
-                            </div>
-                        </div>
-                    </div>
-                </div>
-            </div>
-            {include file='dialog.tpl'}
-        </section>
-    </div>
-</main>
-
-{include file='admin/footer.tpl'}
-
-<script>
-    {include file='table/js_1.tpl'}
-    window.addEventListener('load', () => {
-        {include file='table/js_2.tpl'}
-
-        $$.getElementById('coupon').addEventListener('click', () => {
-            let couponCode = $$getValue('prefix');
-
-            $.ajax({
-                type: "POST",
-                url: "/admin/coupon",
-                dataType: "json",
-                data: {
-                    prefix: $$getValue('prefix'),
-                    credit: $$getValue('credit'),
-                    shop: $$getValue('shop'),
-                    onetime: $$getValue('count'),
-                    expire: $$getValue('expire'),
-                    generate_type: $$getValue('generate-type'),
-                },
-                success: data => {
-                    $("#result").modal();
-                    $$.getElementById('msg').innerHTML = data.msg;
-                    if (data.ret) {
-                        window.setTimeout("location.href='/admin/coupon'", {$config['jump_delay']});
-                    }
-                },
-                error: jqXHR => {
-                    alert(`发生错误:${
-                            jqXHR.status
-                            }`);
-                }
-            })
-        })
-    })
-</script>

+ 0 - 91
resources/views/material/admin/detect/add.tpl

@@ -1,91 +0,0 @@
-{include file='admin/main.tpl'}
-
-<main class="content">
-    <div class="content-header ui-content-header">
-        <div class="container">
-            <h1 class="content-heading"> 添加规则</h1>
-        </div>
-    </div>
-    <div class="container">
-        <div class="col-lg-12 col-sm-12">
-            <section class="content-inner margin-top-no">
-                <form id="main_form">
-                    <div class="card">
-                        <div class="card-main">
-                            <div class="card-inner">
-                                <div class="form-group form-group-label">
-                                    <label class="floating-label" for="name">规则名称</label>
-                                    <input class="form-control maxwidth-edit" id="name" name="name" type="text">
-                                </div>
-                                <div class="form-group form-group-label">
-                                    <label class="floating-label" for="text">规则描述</label>
-                                    <input class="form-control maxwidth-edit" id="text" name="text" type="text">
-                                </div>
-                                <div class="form-group form-group-label">
-                                    <label class="floating-label" for="regex">规则正则表达式</label>
-                                    <input class="form-control maxwidth-edit" id="regex" name="regex" type="text">
-                                </div>
-                                <div class="form-group form-group-label">
-                                    <div class="form-group form-group-label">
-                                        <label class="floating-label" for="type">规则类型</label>
-                                        <select id="type" class="form-control maxwidth-edit" name="type">
-                                            <option value="1">数据包明文匹配</option>
-                                            <option value="2">数据包 hex 匹配</option>
-                                        </select>
-                                    </div>
-                                </div>
-                                <div class="form-group form-group-label">
-                                    <button id="submit" type="submit" class="btn btn-block btn-brand waves-attach waves-light">添加</button>
-                                </div>
-                            </div>
-                        </div>
-                    </div>
-                </form>
-                {include file='dialog.tpl'}
-            <
-        </div>
-    </div>
-</main>
-
-{include file='admin/footer.tpl'}
-
-<script>
-    {literal}
-    $('#main_form').validate({
-        rules: {
-            name: {required: true},
-            text: {required: true},
-            regex: {required: true}
-        },
-        {/literal}
-        submitHandler: function () {
-            {literal}
-            $.ajax({
-                type: "POST",
-                url: "/admin/detect",
-                dataType: "json",
-                data: {
-                    name: $$getValue("name"),
-                    text: $$getValue("text"),
-                    regex: $$getValue("regex"),
-                    type: $$getValue("type")
-                },
-                {/literal}
-                success: data => {
-                    if (data.ret) {
-                        $("#result").modal();
-                        $$.getElementById('msg').innerHTML = data.msg;
-                        window.setTimeout("location.href=top.document.referrer", {$config['jump_delay']});
-                    } else {
-                        $("#result").modal();
-                        $$.getElementById('msg').innerHTML = data.msg;
-                    }
-                },
-                error: data => {
-                    $("#result").modal();
-                    $$.getElementById('msg').innerHTML = `${ldelim}data.msg{rdelim} 发生错误了。`;
-                }
-            });
-        }
-    });
-</script>

+ 0 - 36
resources/views/material/admin/detect/ban.tpl

@@ -1,36 +0,0 @@
- {include file='admin/main.tpl'}
-
-<main class="content">
-	<div class="content-header ui-content-header">
-		<div class="container">
-			<h1 class="content-heading">审计封禁记录</h1>
-		</div>
-	</div>
-	<div class="container">
-		<div class="col-lg-12 col-md-12">
-			<section class="content-inner margin-top-no">
-				<div class="card">
-					<div class="card-main">
-						<div class="card-inner">
-							<p>系统中所有审计封禁记录。</p>
-							<p>显示表项:
-								{include file='table/checkbox.tpl'}
-							</p>
-						</div>
-					</div>
-				</div>
-				<div class="table-responsive">
-					{include file='table/table.tpl'}
-				</div>
-		</div>
-	</div>
-</main>
-
-{include file='admin/footer.tpl'}
-
-<script>
-	{include file='table/js_1.tpl'}
-	$(document).ready(function(){
-		{include file='table/js_2.tpl'}
-	});
-</script>

+ 0 - 104
resources/views/material/admin/detect/edit.tpl

@@ -1,104 +0,0 @@
-{include file='admin/main.tpl'}
-
-<main class="content">
-    <div class="content-header ui-content-header">
-        <div class="container">
-            <h1 class="content-heading"> 编辑规则 #{$rule->id}</h1>
-        </div>
-    </div>
-    <div class="container">
-        <div class="col-lg-12 col-sm-12">
-            <section class="content-inner margin-top-no">
-                <form id="main_form">
-                    <div class="card">
-                        <div class="card-main">
-                            <div class="card-inner">
-                                <div class="form-group form-group-label">
-                                    <label class="floating-label" for="name">规则名称</label>
-                                    <input class="form-control maxwidth-edit" id="name" name="name" type="text"
-                                           value="{$rule->name}">
-                                </div>
-                                <div class="form-group form-group-label">
-                                    <label class="floating-label" for="text">规则描述</label>
-                                    <input class="form-control maxwidth-edit" id="text" name="text" type="text"
-                                           value="{$rule->text}">
-                                </div>
-                                <div class="form-group form-group-label">
-                                    <label class="floating-label" for="regex">规则正则表达式</label>
-                                    <input class="form-control maxwidth-edit" id="regex" name="regex" type="text"
-                                           value="{$rule->regex}">
-                                </div>
-                                <div class="form-group form-group-label">
-                                    <div class="form-group form-group-label">
-                                        <label class="floating-label" for="type">规则类型</label>
-                                        <select id="type" class="form-control maxwidth-edit" name="type">
-                                            <option value="1" {if $rule->type == 1}selected{/if}>数据包明文匹配</option>
-                                            <option value="2" {if $rule->type == 2}selected{/if}>数据包 hex 匹配</option>
-                                        </select>
-                                    </div>
-                                </div>
-                            </div>
-                        </div>
-                    </div>
-                    <div class="card">
-                        <div class="card-main">
-                            <div class="card-inner">
-                                <div class="form-group">
-                                    <div class="row">
-                                        <div class="col-md-10 col-md-push-1">
-                                            <button id="submit" type="submit"
-                                                    class="btn btn-block btn-brand waves-attach waves-light">修改
-                                            </button>
-                                        </div>
-                                    </div>
-                                </div>
-                            </div>
-                        </div>
-                    </div>
-                </form>
-                {include file='dialog.tpl'}
-        </div>
-    </div>
-</main>
-
-{include file='admin/footer.tpl'}
-
-<script>
-    $('#main_form').validate({
-        {literal}
-        rules: {
-            name: {required: true},
-            text: {required: true},
-            regex: {required: true}
-        },
-        {/literal}
-        submitHandler: function () {
-            $.ajax({
-                type: "PUT",
-                url: "/admin/detect/{$rule->id}",
-                dataType: "json",
-
-                data: {
-                    name: $$getValue("name"),
-                    text: $$getValue("text"),
-                    regex: $$getValue("regex"),
-                    type: $$getValue("type")
-                },
-                success: data => {
-                    if (data.ret) {
-                        $("#result").modal();
-                        $$.getElementById('msg').innerHTML = data.msg;
-                        window.setTimeout("location.href=top.document.referrer", {$config['jump_delay']});
-                    } else {
-                        $("#result").modal();
-                        $$.getElementById('msg').innerHTML = data.msg;
-                    }
-                },
-                error: data => {
-                    $("#result").modal();
-                    $$.getElementById('msg').innerHTML = `${ldelim}data.msg{rdelim} 发生错误了。`;
-                }
-            });
-        }
-    });
-</script>

+ 0 - 99
resources/views/material/admin/detect/index.tpl

@@ -1,99 +0,0 @@
-{include file='admin/main.tpl'}
-
-<main class="content">
-    <div class="content-header ui-content-header">
-        <div class="container">
-            <h1 class="content-heading">审计规则管理</h1>
-        </div>
-    </div>
-    <div class="container">
-        <div class="col-lg-12 col-md-12">
-            <section class="content-inner margin-top-no">
-                <div class="card">
-                    <div class="card-main">
-                        <div class="card-inner">
-                            <p>系统中所有过滤规则。</p>
-                            <p>
-                                显示表项: {include file='table/checkbox.tpl'}
-                            </p>
-                        </div>
-                    </div>
-                </div>
-                <div class="table-responsive">
-                    {include file='table/table.tpl'}
-                </div>
-                <div class="fbtn-container">
-                    <div class="fbtn-inner">
-                        <a class="fbtn fbtn-lg fbtn-brand-accent waves-attach waves-circle waves-light"
-                           href="/admin/detect/create">+</a>
-
-                    </div>
-                </div>
-                <div aria-hidden="true" class="modal modal-va-middle fade" id="delete_modal" role="dialog"
-                     tabindex="-1">
-                    <div class="modal-dialog modal-xs">
-                        <div class="modal-content">
-                            <div class="modal-heading">
-                                <a class="modal-close" data-dismiss="modal">×</a>
-                                <h2 class="modal-title">确认要删除?</h2>
-                            </div>
-                            <div class="modal-inner">
-                                <p>请您确认。</p>
-                            </div>
-                            <div class="modal-footer">
-                                <p class="text-right">
-                                    <button class="btn btn-flat btn-brand-accent waves-attach waves-effect"
-                                            data-dismiss="modal" type="button">取消
-                                    </button>
-                                    <button class="btn btn-flat btn-brand-accent waves-attach" data-dismiss="modal"
-                                            id="delete_input" type="button">确定
-                                    </button>
-                                </p>
-                            </div>
-                        </div>
-                    </div>
-                </div>
-                {include file='dialog.tpl'}
-        </div>
-    </div>
-</main>
-
-{include file='admin/footer.tpl'}
-
-<script>
-    {include file='table/js_1.tpl'}
-    function delete_modal_show(id) {
-        deleteid = id;
-        $("#delete_modal").modal();
-    }
-    window.addEventListener('load', () => {
-        {include file='table/js_2.tpl'}
-        function delete_id() {
-            $.ajax({
-                type: "DELETE",
-                url: "/admin/detect",
-                dataType: "json",
-                data: {
-                    id: deleteid
-                },
-                success: data => {
-                    if (data.ret) {
-                        $("#result").modal();
-                        $$.getElementById('msg').innerHTML = data.msg;
-                        {include file='table/js_delete.tpl'}
-                    } else {
-                        $("#result").modal();
-                        $$.getElementById('msg').innerHTML = data.msg;
-                    }
-                },
-                error: jqXHR => {
-                    $("#result").modal();
-                    $$.getElementById('msg').innerHTML = `${ldelim}data.msg{rdelim} 发生错误了。`;
-                }
-            });
-        }
-        $$.getElementById('delete_input').addEventListener('click', () => {
-            delete_id();
-        });
-    });
-</script>

+ 0 - 37
resources/views/material/admin/detect/log.tpl

@@ -1,37 +0,0 @@
-{include file='admin/main.tpl'}
-
-<main class="content">
-    <div class="content-header ui-content-header">
-        <div class="container">
-            <h1 class="content-heading">审计记录查看</h1>
-        </div>
-    </div>
-    <div class="container">
-        <div class="col-lg-12 col-md-12">
-            <section class="content-inner margin-top-no">
-                <div class="card">
-                    <div class="card-main">
-                        <div class="card-inner">
-                            <p>系统中所有审计记录。</p>
-                            <p>显示表项:
-                                {include file='table/checkbox.tpl'}
-                            </p>
-                        </div>
-                    </div>
-                </div>
-                <div class="table-responsive">
-                    {include file='table/table.tpl'}
-                </div>
-        </div>
-    </div>
-</main>
-
-{include file='admin/footer.tpl'}
-
-<script>
-    {include file='table/js_1.tpl'}
-
-    $(document).ready(function () {
-        {include file='table/js_2.tpl'}
-    });
-</script>

+ 0 - 17
resources/views/material/admin/footer.tpl

@@ -1,17 +0,0 @@
-<footer class="ui-footer">
-    <div class="container">
-        &copy;{date("Y")} {$config['appName']} | Powered by <a href="/staff">SSPANEL</a>
-        {if $config['enable_analytics_code'] === true}{include file='analytics.tpl'}{/if}
-    </div>
-</footer>
-
-<!-- js -->
-<script src="https://cdn.staticfile.org/clipboard.js/2.0.11/clipboard.min.js"></script>
-<script src="https://cdn.staticfile.org/jquery-validate/1.19.5/jquery.validate.min.js"></script>
-<script src="https://cdn.staticfile.org/datatables/1.10.19/js/jquery.dataTables.min.js"></script>
-<script src="https://cdn.staticfile.org/datatables/1.10.19/js/dataTables.material.min.js"></script>
-<script src="/theme/material/js/base.min.js"></script>
-<script src="/theme/material/js/project.min.js"></script>
-
-</body>
-</html>

+ 0 - 276
resources/views/material/admin/index.tpl

@@ -1,276 +0,0 @@
-{include file='admin/main.tpl'}
-
-<script src="https://fastly.jsdelivr.net/npm/chart.js"></script>
-
-<main class="content">
-    <div class="content-header ui-content-header">
-        <div class="container">
-            <h1 class="content-heading">运营总览</h1>
-        </div>
-    </div>
-    <div class="container">
-        <section class="content-inner margin-top-no">
-            <div class="row">
-                <div class="col-xx-12">
-                    <div class="card margin-bottom-no">
-                        <div class="card-main">
-                            <div class="card-inner">
-                                <p>下面是系统运行情况简报。</p>
-                                <p>
-                                    付费用户:{$user->paidUserCount()}<br/>
-                                    总共用户:{$user->count()}<br/>
-                                    总转换率:{round($user->paidUserCount()/$user->count()*100,2)}%
-                                </p>
-                                <p>
-                                    今日流水:¥{$user->calIncome("today")}<br/>
-                                    昨日流水:¥{$user->calIncome("yesterday")}<br/>
-                                    这月流水:¥{$user->calIncome("this month")}<br/>
-                                    上月流水:¥{$user->calIncome("last month")}<br/>
-                                    总共流水:¥{$user->calIncome("total")}
-                                </p>
-                            </div>
-                        </div>
-                    </div>
-                </div>
-            </div>
-            <div class="ui-card-wrap">
-                <div class="row">
-                    <div class="col-xx-12 col-sm-6">
-                        <div class="card">
-                            <div class="card-main">
-                                <div class="card-inner">
-                                    <canvas id="check_chart"></canvas>
-                                </div>
-                            </div>
-                        </div>
-                        <div class="card">
-                            <div class="card-main">
-                                <div class="card-inner">
-                                    <canvas id="alive_chart"></canvas>
-                                </div>
-                            </div>
-                        </div>
-                    </div>
-                    <div class="col-xx-12 col-sm-6">
-                        <div class="card">
-                            <div class="card-main">
-                                <div class="card-inner">
-                                    <canvas id="node_chart"></canvas>
-                                </div>
-                            </div>
-                        </div>
-                        <div class="card">
-                            <div class="card-main">
-                                <div class="card-inner">
-                                    <canvas id="traffic_chart"></canvas>
-                                </div>
-                            </div>
-                        </div>
-                    </div>
-                </div>
-            </div>
-        </section>
-    </div>
-</main>
-
-{include file='admin/footer.tpl'}
-
-<script>
-    const check_chart = new Chart(
-        document.getElementById('check_chart'),
-        config = {
-            type: 'doughnut',
-            data: {
-                labels: [
-                    '没有签到过的用户({$sts->getTotalUser()-$sts->getCheckinUser()}人)', 
-                    '曾经签到过的用户({$sts->getCheckinUser()-$sts->getTodayCheckinUser()}人)', 
-                    '今日签到用户({$sts->getTodayCheckinUser()}人)'
-                ],
-                datasets: [{
-                    label: '用户签到状态',
-                    data: [
-                        {$sts->getTotalUser()-$sts->getCheckinUser()}, 
-                        {$sts->getCheckinUser()-$sts->getTodayCheckinUser()},
-                        {$sts->getTodayCheckinUser()}
-                    ],
-                    backgroundColor: [
-                        'rgb(205, 180, 219)',
-                        'rgb(255, 175, 204)',
-                        'rgb(162, 210, 255)'
-                    ]
-                }]
-            },
-            options: {
-                aspectRatio: 2,
-                plugins: {
-                    legend: {
-                        display: true,
-                        position: 'bottom',
-                        font: {
-                            size: 14
-                        }
-                    },
-                    title: {
-                        display: true,
-                        position: 'top',
-                        text: '用户签到状态',
-                        font: {
-                            size: 14
-                        }
-                    }
-                }
-            }
-        },
-    );
-</script>
-
-<script>
-    const alive_chart = new Chart(
-        document.getElementById('alive_chart'),
-        config = {
-            type: 'doughnut',
-            data: {
-                labels: [
-                    '从未在线的用户({$sts->getUnusedUser()}人)', 
-                    '一天以前在线的用户({$sts->getTotalUser()-$sts->getOnlineUser(86400)-$sts->getUnusedUser()}人)', 
-                    '一天内在线的用户({$sts->getOnlineUser(86400)}人)',
-                    '一小时内在线的用户({$sts->getOnlineUser(3600)}人)',
-                    '一分钟内在线的用户({$sts->getOnlineUser(60)}人)'
-                ],
-                datasets: [{
-                    label: '用户在线状态',
-                    data: [
-                        {$sts->getUnusedUser()}, 
-                        {$sts->getTotalUser()-$sts->getOnlineUser(86400)-$sts->getUnusedUser()},
-                        {$sts->getOnlineUser(86400)},
-                        {$sts->getOnlineUser(3600)},
-                        {$sts->getOnlineUser(60)}
-                    ],
-                    backgroundColor: [
-                        'rgb(205, 180, 219)',
-                        'rgb(255, 200, 221)',
-                        'rgb(255, 175, 204)',
-                        'rgb(189, 224, 254)',
-                        'rgb(162, 210, 255)'
-                    ]
-                }]
-            },
-            options: {
-                aspectRatio: 2,
-                plugins: {
-                    legend: {
-                        display: true,
-                        position: 'bottom',
-                        font: {
-                            size: 14
-                        }
-                    },
-                    title: {
-                        display: true,
-                        position: 'top',
-                        text: '用户在线状态',
-                        font: {
-                            size: 14
-                        }
-                    }
-                }
-            }
-        },
-    );
-</script>
-
-
-<script>
-    const node_chart = new Chart(
-        document.getElementById('node_chart'),
-        config = {
-            type: 'doughnut',
-            data: {
-                labels: [
-                    '离线节点({$sts->getTotalNodes()-$sts->getAliveNodes()}个)', 
-                    '在线节点({$sts->getAliveNodes()}个)'
-                ],
-                datasets: [{
-                    label: '节点状态',
-                    data: [
-                        {$sts->getTotalNodes()-$sts->getAliveNodes()}, 
-                        {$sts->getAliveNodes()}
-                    ],
-                    backgroundColor: [
-                        'rgb(205, 180, 219)',
-                        'rgb(162, 210, 255)'
-                    ]
-                }]
-            },
-            options: {
-                aspectRatio: 2,
-                plugins: {
-                    legend: {
-                        display: true,
-                        position: 'bottom',
-                        font: {
-                            size: 14
-                        }
-                    },
-                    title: {
-                        display: true,
-                        position: 'top',
-                        text: '节点状态',
-                        font: {
-                            size: 14
-                        }
-                    }
-                }
-            }
-        },
-    );
-</script>
-
-<script>
-    const traffic_chart = new Chart(
-        document.getElementById('traffic_chart'),
-        config = {
-            type: 'doughnut',
-            data: {
-                labels: [
-                    '总剩余可用({$sts->getUnusedTrafficUsage()})',
-                    '总过去已用({$sts->getLastTrafficUsage()})',
-                    '总今日已用({$sts->getTodayTrafficUsage()})'
-                ],
-                datasets: [{
-                    label: '流量使用状态',
-                    data: [
-                        {$sts->getRawUnusedTrafficUsage()}, 
-                        {$sts->getRawLastTrafficUsage()},
-                        {$sts->getRawTodayTrafficUsage()}
-                    ],
-                    backgroundColor: [
-                        'rgb(205, 180, 219)',
-                        'rgb(255, 175, 204)',
-                        'rgb(162, 210, 255)'
-                    ]
-                }]
-            },
-            options: {
-                aspectRatio: 2,
-                plugins: {
-                    legend: {
-                        display: true,
-                        position: 'bottom',
-                        font: {
-                            size: 14
-                        }
-                    },
-                    title: {
-                        display: true,
-                        position: 'top',
-                        text: '流量使用状态',
-                        font: {
-                            size: 14
-                        }
-                    }
-                }
-            }
-        },
-    );
-</script>

+ 0 - 142
resources/views/material/admin/invite.tpl

@@ -1,142 +0,0 @@
-{include file='admin/main.tpl'}
-
-<main class="content">
-    <div class="content-header ui-content-header">
-        <div class="container">
-            <h1 class="content-heading">邀请</h1>
-        </div>
-    </div>
-    <div class="container">
-        <section class="content-inner margin-top-no">
-
-            <div class="card">
-                <div class="card-main">
-                    <div class="card-inner">
-                        <p>公共邀请码功能已废弃,如需开放注册请在 .config.php 中将 register_mode 项目设置为 open </p>
-                    </div>
-                </div>
-            </div>
-
-            <div class="card">
-				<div class="card-main">
-					<div class="card-inner">
-						<div class="form-group form-group-label">
-							<label class="floating-label" for="userid">需要修改邀请者的用户</label>
-							<input class="form-control maxwidth-edit" id="userid" type="text">
-							<p class="form-control-guide"><i class="mdi mdi-information"></i>填写用户的ID</p>
-						</div>
-						<div class="form-group form-group-label">
-							<label class="floating-label" for="refid">邀请者的ID</label>
-							<input class="form-control maxwidth-edit" id="refid" type="number">
-						</div>
-					</div>
-					<div class="card-action">
-						<div class="card-action-btn pull-left">
-							<a class="btn btn-flat waves-attach" id="confirm"><span class="mdi mdi-check"></span>&nbsp;更改</a>
-						</div>
-					</div>
-				</div>
-			</div>
-            <div class="card">
-                <div class="card-main">
-                    <div class="card-inner">
-
-                        <div class="form-group form-group-label">
-                            <label class="floating-label" for="uid">需要增加邀请链接数量的用户</label>
-                            <input class="form-control maxwidth-edit" id="uid" type="text">
-                            <p class="form-control-guide"><i class="mdi mdi-information"></i>填写用户的ID,或者用户的完整邮箱</p>
-                        </div>
-                        <div class="form-group form-group-label">
-                            <label class="floating-label" for="prefix">邀请链接数量</label>
-                            <input class="form-control maxwidth-edit" id="num" type="number">
-                        </div>
-                    </div>
-                    <div class="card-action">
-                        <div class="card-action-btn pull-left">
-                            <a class="btn btn-flat waves-attach" id="invite"><span class="mdi mdi-check"></span>&nbsp;增加</a>
-                        </div>
-                    </div>
-                </div>
-            </div>
-            <div class="card margin-bottom-no">
-                <div class="card-main">
-                    <div class="card-inner">
-                        <p class="card-heading">返利记录</p>
-                        <p>显示表项: {include file='table/checkbox.tpl'}
-                        </p>
-                        <div class="card-table">
-                            <div class="table-responsive">
-                                {include file='table/table.tpl'}
-                            </div>
-                        </div>
-                    </div>
-                </div>
-            </div>
-            {include file='dialog.tpl'}
-    </div>
-</main>
-
-{include file='admin/footer.tpl'}
-
-<script>
-    {include file='table/js_1.tpl'}
-    $$.getElementById('invite').addEventListener('click', () => {
-        $.ajax({
-            type: "POST",
-            url: "/admin/invite",
-            dataType: "json",
-            data: {
-                prefix: $$getValue('invite'),
-                uid: $$getValue('uid'),
-                num: $$getValue('num'),
-            },
-            success: data => {
-                if (data.ret) {
-                    $("#result").modal();
-                    $$.getElementById('msg').innerHTML = data.msg;
-                    window.setTimeout("location.href='/admin/invite'", {$config['jump_delay']} );
-                } else {
-                    $("#result").modal();
-                    $$.getElementById('msg').innerHTML = data.msg;
-                }
-                // window.location.reload();
-            },
-            error: jqXHR => {
-                alert(`发生错误:${
-                        jqXHR.status
-                        }`);
-            }
-        })
-    })
-
-    $$.getElementById('confirm').addEventListener('click', () => {
-        $.ajax({
-            type: "POST",
-            url: "/admin/chginvite",
-            dataType: "json",
-            data: {
-                prefix: $$.getElementById('confirm').value,
-                userid: $$.getElementById('userid').value,
-                refid: $$.getElementById('refid').value,
-            },
-            success: data => {
-                if (data.ret) {
-                    $("#result").modal();
-                    $$.getElementById('msg').innerHTML = data.msg;
-                    window.setTimeout("location.href='/admin/invite'", {$config['jump_delay']} );
-                } else {
-                    $("#result").modal();
-                    $$.getElementById('msg').innerHTML = data.msg;
-                }
-                // window.location.reload();
-            },
-            error: jqXHR => {
-                alert(`发生错误:${ldelim}jqXHR.status{rdelim}`);
-            }
-        })
-    })
-
-    window.addEventListener('load', () => {
-        {include file='table/js_2.tpl'}
-    });
-</script>

+ 0 - 33
resources/views/material/admin/ip/alive.tpl

@@ -1,33 +0,0 @@
-{include file='admin/main.tpl'}
-
-<main class="content">
-    <div class="content-header ui-content-header">
-        <div class="container">
-            <h1 class="content-heading">在线IP</h1>
-        </div>
-    </div>
-    <div class="container">
-        <div class="col-lg-12 col-sm-12">
-            <section class="content-inner margin-top-no">
-                <div class="card">
-                    <div class="card-main">
-                        <div class="card-inner">
-                            <p>显示表项: {include file='table/checkbox.tpl'}</p>
-                        </div>
-                    </div>
-                </div>
-                <div class="table-responsive">
-                    {include file='table/table.tpl'}
-                </div>
-        </div>
-    </div>
-</main>
-
-{include file='admin/footer.tpl'}
-
-<script>
-    {include file='table/js_1.tpl'}
-    window.addEventListener('load', () => {
-        {include file='table/js_2.tpl'}
-    });
-</script>

+ 0 - 78
resources/views/material/admin/ip/block.tpl

@@ -1,78 +0,0 @@
-{include file='admin/main.tpl'}
-
-<main class="content">
-    <div class="content-header ui-content-header">
-        <div class="container">
-            <h1 class="content-heading">节点被封IP</h1>
-        </div>
-    </div>
-    <div class="container">
-        <div class="col-lg-12 col-sm-12">
-            <section class="content-inner margin-top-no">
-                <div class="card">
-                    <div class="card-main">
-                        <div class="card-inner">
-                            <p>这里是最近的节点上捕捉到的进行非法行为的IP。</p>
-                            <p>显示表项:
-                                {include file='table/checkbox.tpl'}
-                            </p>
-                        </div>
-                    </div>
-                </div>
-                <div class="card">
-                    <div class="card-main">
-                        <div class="card-inner">
-                            <div class="form-group form-group-label">
-                                <label class="floating-label" for="ip">要解封的IP</label>
-                                <input class="form-control maxwidth-edit" id="ip" type="text">
-                            </div>
-                        </div>
-                        <div class="card-action">
-                            <div class="card-action-btn pull-left">
-                                <a class="btn btn-flat waves-attach" id="unblock"><span class="mdi mdi-check"></span>&nbsp;解封</a>
-                            </div>
-                        </div>
-                    </div>
-                </div>
-                <div class="table-responsive">
-                    {include file='table/table.tpl'}
-                </div>
-                {include file='dialog.tpl'}
-        </div>
-    </div>
-</main>
-
-{include file='admin/footer.tpl'}
-
-<script>
-    {include file='table/js_1.tpl'}
-    $("#unblock").click(function () {
-        $.ajax({
-            type: "POST",
-            url: "/admin/unblock",
-            dataType: "json",
-            data: {
-                ip: $$getValue('ip')
-            },
-            success: data => {
-                if (data.ret) {
-                    $("#result").modal();
-                    $$.getElementById('msg').innerHTML = data.msg;
-                    window.setTimeout("location.href=window.location.href", {$config['jump_delay']});
-                } else {
-                    $("#result").modal();
-                    $$.getElementById('msg').innerHTML = data.msg;
-                }
-                // window.location.reload();
-            },
-            error: jqXHR => {
-                alert(`发生错误:${
-                        jqXHR.status
-                        }`);
-            }
-        })
-    });
-    window.addEventListener('load', () => {
-        {include file='table/js_2.tpl'}
-    });
-</script>

+ 0 - 34
resources/views/material/admin/ip/login.tpl

@@ -1,34 +0,0 @@
-{include file='admin/main.tpl'}
-
-<main class="content">
-    <div class="content-header ui-content-header">
-        <div class="container">
-            <h1 class="content-heading">最近登录记录</h1>
-        </div>
-    </div>
-    <div class="container">
-        <div class="col-lg-12 col-sm-12">
-            <section class="content-inner margin-top-no">
-                <div class="card">
-                    <div class="card-main">
-                        <div class="card-inner">
-                            <p>这里是最近的登录记录。</p>
-                            <p>显示表项: {include file='table/checkbox.tpl'}</p>
-                        </div>
-                    </div>
-                </div>
-                <div class="table-responsive">
-                    {include file='table/table.tpl'}
-                </div>
-        </div>
-    </div>
-</main>
-
-{include file='admin/footer.tpl'}
-
-<script>
-    {include file='table/js_1.tpl'}
-    window.addEventListener('load', () => {
-        {include file='table/js_2.tpl'}
-    });
-</script>

+ 0 - 36
resources/views/material/admin/ip/unblock.tpl

@@ -1,36 +0,0 @@
-{include file='admin/main.tpl'}
-
-<main class="content">
-    <div class="content-header ui-content-header">
-        <div class="container">
-            <h1 class="content-heading">解封IP记录</h1>
-        </div>
-    </div>
-    <div class="container">
-        <div class="col-lg-12 col-sm-12">
-            <section class="content-inner margin-top-no">
-
-                <div class="card">
-                    <div class="card-main">
-                        <div class="card-inner">
-                            <p>这里是最近的解封IP记录。</p>
-                            <p>显示表项: {include file='table/checkbox.tpl'}
-                            </p>
-                        </div>
-                    </div>
-                </div>
-                <div class="table-responsive">
-                    {include file='table/table.tpl'}
-                </div>
-        </div>
-    </div>
-</main>
-
-{include file='admin/footer.tpl'}
-
-<script>
-    {include file='table/js_1.tpl'}
-    window.addEventListener('load', () => {
-        {include file='table/js_2.tpl'}
-    });
-</script>

+ 0 - 122
resources/views/material/admin/main.tpl

@@ -1,122 +0,0 @@
-<!DOCTYPE html>
-<html lang="zh-cn">
-<head>
-    <meta charset="UTF-8">
-    <meta content="IE=edge" http-equiv="X-UA-Compatible">
-    <meta content="initial-scale=1.0, maximum-scale=1.0, user-scalable=no, width=device-width" name="viewport">
-    <meta name="theme-color" content="#4285f4">
-    <title>{$config['appName']}</title>
-    <!-- css -->
-    <link href="/theme/material/css/base.min.css" rel="stylesheet">
-    <link href="/theme/material/css/project.min.css" rel="stylesheet">
-    <link href="//fastly.jsdelivr.net/npm/@mdi/[email protected]/css/materialdesignicons.min.css" rel="stylesheet">
-    <link href="//cdn.staticfile.org/material-design-lite/1.3.0/material.min.css" rel="stylesheet">
-    <link href="//cdn.staticfile.org/datatables/1.10.19/css/dataTables.material.min.css" rel="stylesheet">
-    <!-- js -->
-    <script src="https://cdn.staticfile.org/jquery/3.6.1/jquery.min.js"></script>
-    <!-- ... -->
-    <style>
-        body {
-            position: relative;
-        }
-
-        {if $config['admin_center_bg'] == true}
-        .page-brand .ui-content-header {
-            background-image: url({$config['admin_center_bg_addr']});
-        }
-        {/if}
-
-        .table-responsive {
-            background: white;
-        }
-
-        .dropdown-menu.dropdown-menu-right a {
-            color: #212121;
-        }
-
-        a[href='#ui_menu'] {
-            color: #212121;
-        }
-
-        #custom_config {
-            height: 500px;
-        }
-    </style>
-</head>
-
-<body class="page-brand">
-<header class="header header-red header-transparent header-waterfall ui-header">
-    <ul class="nav nav-list pull-left">
-        <div>
-            <a data-toggle="menu" href="#ui_menu">
-                <span class="mdi mdi-menu icon-lg"></span>
-            </a>
-        </div>
-    </ul>
-    <ul class="nav nav-list pull-right">
-        <div class="dropdown margin-right">
-            <a class="dropdown-toggle padding-left-no padding-right-no" data-toggle="dropdown">
-                <span class="access-hide">{$user->user_name}</span>
-                <span class="avatar avatar-sm"><img src="{$user->gravatar}"></span>
-            </a>
-            <ul class="dropdown-menu dropdown-menu-right">
-                <li>
-                    <a class="waves-attach" href="/user/logout"><span
-                                class="mdi mdi-exit-to-app icon-lg margin-right"></span>登出</a>
-                </li>
-            </ul>
-        </div>
-    </ul>
-</header>
-<nav aria-hidden="true" class="menu menu-left nav-drawer nav-drawer-md" id="ui_menu" tabindex="-1">
-    <div class="menu-scroll">
-        <div class="menu-content">
-            <a class="menu-logo" href="/">&nbsp;管理面板</a>
-            <ul class="nav">
-                <li>
-                    <a class="waves-attach" data-toggle="collapse" href="#ui_menu_me">我的</a>
-                    <ul class="menu-collapse collapse in" id="ui_menu_me">
-                        <li><a href="/admin"><i class="mdi mdi-eye icon-lg"></i>&nbsp;系统概览</a></li>
-                        <li><a href="/admin/announcement"><i class="mdi mdi-bullhorn-variant icon-lg"></i>&nbsp;公告管理</a></li>
-                        <li><a href="/admin/ticket"><i class="mdi mdi-comment-question icon-lg"></i>&nbsp;工单管理</a></li>
-                    </ul>
-                    <a class="waves-attach" data-toggle="collapse" href="#ui_menu_node">节点</a>
-                    <ul class="menu-collapse collapse in" id="ui_menu_node">
-                        <li><a href="/admin/node"><i class="mdi mdi-server icon-lg"></i>&nbsp;节点列表</a></li>
-                        <li><a href="/admin/block"><i class="mdi mdi-block-helper icon-lg"></i>&nbsp;已封禁IP</a></li>
-                        <li><a href="/admin/unblock"><i class="mdi mdi-check icon-lg"></i>&nbsp;已解封IP</a></li>
-                    </ul>
-                    <a class="waves-attach" data-toggle="collapse" href="#ui_menu_user">用户</a>
-                    <ul class="menu-collapse collapse in" id="ui_menu_user">
-                        <li><a href="/admin/user"><i class="mdi mdi-account-group icon-lg"></i>&nbsp;用户列表</a></li>
-                        <li><a href="/admin/invite"><i class="mdi mdi-account-multiple-plus icon-lg"></i>&nbsp;邀请与返利</a></li>
-                        <li><a href="/admin/subscribe"><i class="mdi mdi-file-find icon-lg"></i>&nbsp;订阅记录</a></li>
-                        <li><a href="/admin/login"><i class="mdi mdi-text-account icon-lg"></i>&nbsp;登录记录</a></li>
-                        <li><a href="/admin/trafficlog"><i class="mdi mdi-swap-vertical icon-lg"></i>&nbsp;流量记录</a></li>
-                        <li><a href="/admin/alive"><i class="mdi mdi-account-badge icon-lg"></i>&nbsp;在线IP</a></li>
-                    </ul>
-                    <a class="waves-attach" data-toggle="collapse" href="#ui_menu_config">配置</a>
-                    <ul class="menu-collapse collapse in" id="ui_menu_config">
-                        <li><a href="/admin/setting"><i class="mdi mdi-cog icon-lg"></i>&nbsp;设置中心</a></li>
-                    </ul>
-                    <a class="waves-attach" data-toggle="collapse" href="#ui_menu_detect">审计</a>
-                    <ul class="menu-collapse collapse in" id="ui_menu_detect">
-                        <li><a href="/admin/detect"><i class="mdi mdi-account-filter icon-lg"></i>&nbsp;审计规则</a></li>
-                        <li><a href="/admin/detect/log"><i class="mdi mdi-calendar-filter icon-lg"></i>&nbsp;审计记录</a></li>
-                        <li><a href="/admin/detect/ban"><i class="mdi mdi-account-cancel icon-lg"></i>&nbsp;审计封禁</a></li>
-                    </ul>
-                    <a class="waves-attach" data-toggle="collapse" href="#ui_menu_trade">财务</a>
-                    <ul class="menu-collapse collapse in" id="ui_menu_trade">
-                        <li><a href="/admin/code">
-                                <i class="mdi mdi-currency-usd icon-lg"></i>
-                                &nbsp;{if $config['enable_donate']===true}充值与捐赠记录{else}充值记录{/if}</a>
-                        </li>
-                        <li><a href="/admin/shop"><i class="mdi mdi-shopping icon-lg"></i>&nbsp;商品</a></li>
-                        <li><a href="/admin/coupon"><i class="mdi mdi-code-tags icon-lg"></i>&nbsp;优惠码</a></li>
-                        <li><a href="/admin/bought"><i class="mdi mdi-shopping-search icon-lg"></i>&nbsp;购买记录</a></li>
-                    </ul>
-                <li><a href="/user"><i class="mdi mdi-account icon-lg"></i>&nbsp;用户中心</a></li>
-            </ul>
-        </div>
-    </div>
-</nav>

+ 0 - 215
resources/views/material/admin/node/create.tpl

@@ -1,215 +0,0 @@
-{include file='admin/main.tpl'}
-
-<script src="//cdn.staticfile.org/jsoneditor/9.9.0/jsoneditor.min.js"></script>
-<link href="//cdn.staticfile.org/jsoneditor/9.9.0/jsoneditor.min.css" rel="stylesheet" type="text/css">
-
-<main class="content">
-    <div class="content-header ui-content-header">
-        <div class="container">
-            <h1 class="content-heading">添加节点</h1>
-        </div>
-    </div>
-    <div class="container">
-        <div class="col-lg-12 col-sm-12">
-            <section class="content-inner margin-top-no">
-                <form id="main_form">
-                    <div class="card">
-                        <div class="card-main">
-                            <div class="card-inner">
-                                <div class="form-group form-group-label">
-                                    <label class="floating-label" for="name">节点名称</label>
-                                    <input class="form-control maxwidth-edit" id="name" type="text" name="name">
-                                </div>
-                                <div class="form-group form-group-label">
-                                    <label class="floating-label" for="server">节点地址</label>
-                                    <input class="form-control maxwidth-edit" id="server" type="text" name="server">
-                                    <p class="form-control-guide"><i class="mdi mdi-information"></i>如果填写为域名,“节点IP”会自动设置为解析的IP</p>
-                                </div>
-                                <div class="form-group form-group-label">
-                                    <label class="floating-label" for="server">节点IP</label>
-                                    <input class="form-control maxwidth-edit" id="node_ip" name="node_ip" type="text">
-                                    <p class="form-control-guide"><i class="mdi mdi-information"></i>如果“节点地址”填写为域名,则此处的值会被忽视
-                                    </p>
-                                </div>
-                                <div class="form-group form-group-label">
-                                    <label class="floating-label" for="rate">流量比例</label>
-                                    <input class="form-control maxwidth-edit" id="rate" type="text" name="rate"
-                                           value="1">
-                                </div>
-                                <div class="form-group form-group-label">
-                                    <label for="mu_only">
-                                        <label class="floating-label" for="sort">单端口多用户启用</label>
-                                        <select id="mu_only" class="form-control maxwidth-edit" name="is_multi_user">
-                                            <option value="-1">只启用普通端口</option>
-                                            <option value="1">只启用单端口多用户</option>
-                                        </select>
-                                    </label>
-                                </div>
-                                <div class="form-group form-group-label">
-                                    <div class="checkbox switch">
-                                        <label for="type">
-                                            <input checked class="access-hide" id="type" type="checkbox"
-                                                   name="type"><span class="switch-toggle"></span>是否显示
-                                        </label>
-                                    </div>
-                                </div>
-                            </div>
-                        </div>
-                    </div>
-                    <div class="card">
-                        <div class="card-main">
-                            <div class="card-inner">         
-                                <div class="form-group">
-                                    <dev id="custom_config"></dev>
-                                    <p class="form-control-guide"><i class="mdi mdi-information"></i>请参考 <a href="//wiki.sspanel.org/#/setup-custom-config" target="_blank">wiki.sspanel.org/#/setup-custom-config</a> 修改节点自定义配置
-                                    </p>
-                                </div>
-                            </div>
-                        </div>
-                    </div>
-                    <div class="card">
-                        <div class="card-main">
-                            <div class="card-inner">
-                                <div class="form-group form-group-label">
-                                    <label class="floating-label" for="sort">节点类型</label>
-                                    <select id="sort" class="form-control maxwidth-edit" name="sort">
-                                        <option value="0">Shadowsocks</option>
-                                        <option value="9">Shadowsocksr 单端口多用户(旧)</option>
-                                        <option value="11">V2Ray</option>
-                                        <option value="14">Trojan</option>
-                                    </select>
-                                </div>
-                                <div class="form-group form-group-label">
-                                    <label class="floating-label" for="status">节点状态</label>
-                                    <input class="form-control maxwidth-edit" id="status" type="text" name="status"
-                                           value="可用">
-                                </div>
-                                
-                                <div class="form-group form-group-label">
-                                    <label class="floating-label" for="info">节点描述</label>
-                                    <input class="form-control maxwidth-edit" id="info" type="text" name="info"
-                                           value="无描述">
-                                </div>
-                                <div class="form-group form-group-label">
-                                    <label class="floating-label" for="class">节点等级</label>
-                                    <input class="form-control maxwidth-edit" id="class" type="text" value="0"
-                                           name="class">
-                                    <p class="form-control-guide"><i class="mdi mdi-information"></i>不分级请填0,分级填写相应数字</p>
-                                </div>
-                                <div class="form-group form-group-label">
-                                    <label class="floating-label" for="group">节点群组</label>
-                                    <input class="form-control maxwidth-edit" id="group" type="text" value="0"
-                                           name="group">
-                                    <p class="form-control-guide"><i class="mdi mdi-information"></i>分组为数字,不分组请填0</p>
-                                </div>
-                                <div class="form-group form-group-label">
-                                    <label class="floating-label" for="node_bandwidth_limit">节点流量上限(GB)</label>
-                                    <input class="form-control maxwidth-edit" id="node_bandwidth_limit" type="text"
-                                           value="0" name="node_bandwidth_limit">
-                                    <p class="form-control-guide"><i class="mdi mdi-information"></i>不设上限请填0</p>
-                                </div>
-                                <div class="form-group form-group-label">
-                                    <label class="floating-label" for="bandwidthlimit_resetday">节点流量上限清空日</label>
-                                    <input class="form-control maxwidth-edit" id="bandwidthlimit_resetday" type="text"
-                                           value="1" name="bandwidthlimit_resetday">
-                                </div>
-                                <div class="form-group form-group-label">
-                                    <label class="floating-label" for="node_speedlimit">节点限速(Mbps)</label>
-                                    <input class="form-control maxwidth-edit" id="node_speedlimit" type="text" value="0"
-                                           name="node_speedlimit">
-                                    <p class="form-control-guide"><i class="mdi mdi-information"></i>不限速填0,对于每个用户端口生效</p>
-                                </div>
-                            </div>
-                        </div>
-                    </div>
-                    <div class="card">
-                        <div class="card-main">
-                            <div class="card-inner">
-                                <div class="form-group">
-                                    <div class="row">
-                                        <div class="col-md-10 col-md-push-1">
-                                            <button id="submit" type="submit"
-                                                    class="btn btn-block btn-brand waves-attach waves-light">添加
-                                            </button>
-                                        </div>
-                                    </div>
-                                </div>
-                            </div>
-                        </div>
-                    </div>
-                </form>
-                {include file='dialog.tpl'}
-        </div>
-    </div>
-</main>
-
-{include file='admin/footer.tpl'}
-
-<script>
-    const container = document.getElementById('custom_config');
-    var options = {
-        modes: ['code', 'tree'],
-    };
-    const editor = new JSONEditor(container, options);
-{literal}
-    $('#main_form').validate({
-        ignore: ".jsoneditor *",
-        rules: {
-            name: {required: true},
-            rate: {required: true},
-            info: {required: true},
-            group: {required: true},
-            status: {required: true},
-            node_speedlimit: {required: true},
-            sort: {required: true},
-            node_bandwidth_limit: {required: true},
-            bandwidthlimit_resetday: {required: true}
-        },
-        submitHandler: () => {
-            if ($$.getElementById('type').checked) {
-                var type = 1;
-            } else {
-                var type = 0;
-            }
-{/literal}
-            $.ajax({
-                type: "POST",
-                url: "/admin/node",
-                dataType: "json",
-                data: {
-                    name: $$getValue('name'),
-                    server: $$getValue('server'),
-                    custom_config: editor.get(),
-                    node_ip: $$getValue('node_ip'),
-                    rate: $$getValue('rate'),
-                    info: $$getValue('info'),
-                    type,
-                    group: $$getValue('group'),
-                    status: $$getValue('status'),
-                    node_speedlimit: $$getValue('node_speedlimit'),
-                    sort: $$getValue('sort'),
-                    class: $$getValue('class'),
-                    node_bandwidth_limit: $$getValue('node_bandwidth_limit'),
-                    bandwidthlimit_resetday: $$getValue('bandwidthlimit_resetday'),
-                    mu_only: $$getValue('mu_only')
-                },
-                success: data => {
-                    if (data.ret) {
-                        $("#result").modal();
-                        $$.getElementById('msg').innerHTML = data.msg;
-                        window.setTimeout("location.href=top.document.referrer", {$config['jump_delay']});
-                    } else {
-                        $("#result").modal();
-                        $$.getElementById('msg').innerHTML = data.msg;
-                    }
-                },
-                error: (jqXHR) => {
-                    $("#result").modal();
-                    $$.getElementById('msg').innerHTML = `发生错误:${
-                            jqXHR.status
-                            }`;
-                }
-            });
-        }
-    });
-</script>

+ 0 - 285
resources/views/material/admin/node/edit.tpl

@@ -1,285 +0,0 @@
-{include file='admin/main.tpl'}
-
-<script src="//cdn.staticfile.org/jsoneditor/9.9.0/jsoneditor.min.js"></script>
-<link href="//cdn.staticfile.org/jsoneditor/9.9.0/jsoneditor.min.css" rel="stylesheet" type="text/css">
-
-<main class="content">
-    <div class="content-header ui-content-header">
-        <div class="container">
-            <h1 class="content-heading">编辑节点 #{$node->id}</h1>
-        </div>
-    </div>
-    <div class="container">
-        <div class="col-lg-12 col-sm-12">
-            <section class="content-inner margin-top-no">
-                <form id="main_form">
-                    <div class="card">
-                        <div class="card-main">
-                            <div class="card-inner">
-                                <div class="form-group form-group-label">
-                                    <label class="floating-label" for="name">节点名称</label>
-                                    <input class="form-control maxwidth-edit" id="name" name="name" type="text"
-                                           value="{$node->name}">
-                                </div>
-                                <div class="form-group form-group-label">
-                                    <label class="floating-label" for="server">节点地址</label>
-                                    <input class="form-control maxwidth-edit" id="server" name="server" type="text"
-                                           value="{$node->server}">
-                                    <p class="form-control-guide"><i class="mdi mdi-information"></i>如果填写为域名,“节点IP”会自动设置为解析的IP</p>
-                                </div>
-                                <div class="form-group form-group-label">
-                                    <label class="floating-label" for="server">节点IP</label>
-                                    <input class="form-control maxwidth-edit" id="node_ip" name="node_ip" type="text"
-                                           value="{$node->node_ip}">
-                                    <p class="form-control-guide"><i class="mdi mdi-information"></i>如果“节点地址”填写为域名,则此处的值会被忽视
-                                    </p>
-                                </div>
-                                <div class="form-group form-group-label">
-                                    <label class="floating-label" for="rate">流量比例</label>
-                                    <input class="form-control maxwidth-edit" id="rate" name="rate" type="text"
-                                           value="{$node->traffic_rate}">
-                                </div>
-                                <div class="form-group form-group-label">
-                                    <label for="mu_only">
-                                        <label class="floating-label" for="sort">单端口多用户启用</label>
-                                        <select id="mu_only" class="form-control maxwidth-edit" name="is_multi_user">
-                                            <option value="-1" {if $node->mu_only==-1}selected{/if}>只启用普通端口</option>
-                                            <option value="1" {if $node->mu_only==1}selected{/if}>只启用单端口多用户</option>
-                                        </select>
-                                    </label>
-                                </div>
-                                <div class="form-group form-group-label">
-                                    <div class="checkbox switch">
-                                        <label for="type">
-                                            <input {if $node->type==1}checked{/if} class="access-hide" id="type"
-                                                   name="type" type="checkbox"><span class="switch-toggle"></span>是否显示
-                                        </label>
-                                    </div>
-                                </div>
-                            </div>
-                        </div>
-                    </div>
-                    <div class="card">
-                        <div class="card-main">
-                            <div class="card-inner">         
-                                <div class="form-group form-group-label">
-                                    <div class="row">
-                                        <div class="col-lg-8 col-sm-6">
-                                            <label class="floating-label" for="password">节点通讯密钥</label>
-                                            <input class="form-control maxwidth-edit" id="password" name="password" type="text"
-                                            value="{$node->password}" disabled>
-                                        </div>
-                                        <div class="col-lg-2 col-sm-3">
-                                            <button type="button" class="btn btn-block btn-brand waves-attach waves-light copy-text" data-clipboard-text="{$node->password}">复制
-                                            </button>
-                                        </div>
-                                        <div class="col-lg-2 col-sm-3">
-                                            <button type="button" class="btn btn-block btn-brand waves-attach waves-light" id="reset_node_password">重置
-                                            </button>
-                                        </div>
-                                    </div>
-                                    <p class="form-control-guide"><i class="mdi mdi-information"></i>通讯密钥用于 gRPC API 鉴权,如需更改请点击重置
-                                    </p>
-                                </div>
-                            </div>
-                        </div>
-                    </div>
-                    <div class="card">
-                        <div class="card-main">
-                            <div class="card-inner">         
-                                <div class="form-group">
-                                    <dev id="custom_config"></dev>
-                                    <p class="form-control-guide"><i class="mdi mdi-information"></i>请参考 <a href="//wiki.sspanel.org/#/setup-custom-config" target="_blank">wiki.sspanel.org/#/setup-custom-config</a> 修改节点自定义配置
-                                    </p>
-                                </div>
-                            </div>
-                        </div>
-                    </div>
-                    <div class="card">
-                        <div class="card-main">
-                            <div class="card-inner">
-                                <div class="form-group form-group-label">
-                                    <label class="floating-label" for="sort">节点类型</label>
-                                    <select id="sort" class="form-control maxwidth-edit" name="sort">
-                                        <option value="0" {if $node->sort==0}selected{/if}>Shadowsocks</option>
-                                        <option value="9" {if $node->sort==9}selected{/if}>Shadowsocksr 单端口多用户(旧)</option>
-                                        <option value="11" {if $node->sort==11}selected{/if}>V2Ray</option>
-                                        <option value="14" {if $node->sort==14}selected{/if}>Trojan</option>
-                                    </select>
-                                </div>
-                                <div class="form-group form-group-label">
-                                    <label class="floating-label" for="status">节点状态</label>
-                                    <input class="form-control maxwidth-edit" id="status" name="status" type="text"
-                                           value="{$node->status}">
-                                </div> 
-                                <div class="form-group form-group-label">
-                                    <label class="floating-label" for="info">节点描述</label>
-                                    <input class="form-control maxwidth-edit" id="info" name="info" type="text"
-                                           value="{$node->info}">
-                                </div>
-                                <div class="form-group form-group-label">
-                                    <label class="floating-label" for="class">节点等级</label>
-                                    <input class="form-control maxwidth-edit" id="class" name="class" type="text"
-                                           value="{$node->node_class}">
-                                    <p class="form-control-guide"><i class="mdi mdi-information"></i>不分级请填0,分级填写相应数字</p>
-                                </div>
-                                <div class="form-group form-group-label">
-                                    <label class="floating-label" for="group">节点群组</label>
-                                    <input class="form-control maxwidth-edit" id="group" name="group" type="text"
-                                           value="{$node->node_group}">
-                                    <p class="form-control-guide"><i class="mdi mdi-information"></i>分组为数字,不分组请填0</p>
-                                </div>
-                                <div class="form-group form-group-label">
-                                    <label class="floating-label" for="node_bandwidth_limit">节点流量上限(GB)</label>
-                                    <input class="form-control maxwidth-edit" id="node_bandwidth_limit"
-                                           name="node_bandwidth_limit" type="text"
-                                           value="{$node->node_bandwidth_limit/1024/1024/1024}">
-                                    <p class="form-control-guide"><i class="mdi mdi-information"></i>不设上限请填0</p>
-                                </div>
-                                <div class="form-group form-group-label">
-                                    <label class="floating-label" for="bandwidthlimit_resetday">节点流量上限清空日</label>
-                                    <input class="form-control maxwidth-edit" id="bandwidthlimit_resetday"
-                                           name="bandwidthlimit_resetday" type="text"
-                                           value="{$node->bandwidthlimit_resetday}">
-                                </div>
-                                <div class="form-group form-group-label">
-                                    <label class="floating-label" for="node_speedlimit">节点限速(Mbps)</label>
-                                    <input class="form-control maxwidth-edit" id="node_speedlimit"
-                                           name="node_speedlimit" type="text" value="{$node->node_speedlimit}">
-                                    <p class="form-control-guide"><i class="mdi mdi-information"></i>不限速填0,对于每个用户端口生效</p>
-                                </div>
-                            </div>
-                        </div>
-                    </div>
-                    <div class="card">
-                        <div class="card-main">
-                            <div class="card-inner">
-                                <div class="form-group">
-                                    <div class="row">
-                                        <div class="col-md-10 col-md-push-1">
-                                            <button id="submit" type="submit"
-                                                    class="btn btn-block btn-brand waves-attach waves-light">修改
-                                            </button>
-                                        </div>
-                                    </div>
-                                </div>
-                            </div>
-                        </div>
-                    </div>
-                </form>
-                {include file='dialog.tpl'}
-            </section>
-        </div>
-    </div>
-</main>
-
-{include file='admin/footer.tpl'}
-
-<script>
-    $(function () {
-        new ClipboardJS('.copy-text');
-    });
-    $(".copy-text").click(function () {
-        $("#result").modal();
-        $$.getElementById('msg').innerHTML = '已复制到您的剪贴板。';
-    });
-</script>
-<script>
-    const container = document.getElementById('custom_config');
-    var options = {
-        modes: ['code', 'tree'],
-    };
-    const editor = new JSONEditor(container, options);
-    editor.set({$node->custom_config})
-{literal}
-    $('#main_form').validate({
-        ignore: ".jsoneditor *",
-        rules: {
-            name: {required: true},
-            server: {required: true},
-            rate: {required: true},
-            info: {required: true},
-            group: {required: true},
-            status: {required: true},
-            node_speedlimit: {required: true},
-            sort: {required: true},
-            node_bandwidth_limit: {required: true},
-            bandwidthlimit_resetday: {required: true}
-        },
-        submitHandler: () => {
-            if ($$.getElementById('type').checked) {
-                var type = 1;
-            } else {
-                var type = 0;
-            }
-{/literal}
-            $.ajax({
-                type: "PUT",
-                url: "/admin/node/{$node->id}",
-                dataType: "json",
-{literal}
-                data: {
-                    name: $$getValue('name'),
-                    server: $$getValue('server'),
-                    custom_config: editor.get(),
-                    node_ip: $$getValue('node_ip'),
-                    rate: $$getValue('rate'),
-                    info: $$getValue('info'),
-                    type,
-                    group: $$getValue('group'),
-                    status: $$getValue('status'),
-                    sort: $$getValue('sort'),
-                    node_speedlimit: $$getValue('node_speedlimit'),
-                    class: $$getValue('class'),
-                    node_bandwidth_limit: $$getValue('node_bandwidth_limit'),
-                    bandwidthlimit_resetday: $$getValue('bandwidthlimit_resetday')
-{/literal},
-                    mu_only: $$getValue('mu_only')
-                },
-                success: (data) => {
-                    if (data.ret) {
-                        $("#result").modal();
-                        $$.getElementById('msg').innerHTML = data.msg;
-                        window.setTimeout("location.href=top.document.referrer", {$config['jump_delay']});
-
-                    } else {
-                        $("#result").modal();
-                        $$.getElementById('msg').innerHTML = data.msg;
-                    }
-                },
-{literal}
-                error: (jqXHR) => {
-                    $("#result").modal();
-                    $$.getElementById('msg').innerHTML = `发生错误:${jqXHR.status}`;
-                }
-            });
-        }
-    });
-{/literal}
-</script>
-<script>
-    $(document).ready(function () {
-        $("#reset_node_password").click(function () {
-            $.ajax({
-                type: "POST",
-                url: "/admin/node/{$node->id}/password_reset",
-                dataType: "json",
-                data: {},
-                success: (data) => {
-                    if (data.ret) {
-                        $("#result").modal();
-                        $$.getElementById('msg').innerHTML = data.msg;
-                        window.setTimeout("location.href='/admin/node/{$node->id}/edit'", {$config['jump_delay']});
-                    } else {
-                        $("#result").modal();
-                        $$.getElementById('msg').innerHTML = data.msg;
-                    }
-                },
-                error: (jqXHR) => {
-                    $("#result").modal();
-                    $$.getElementById('msg').innerHTML = data.msg;
-                }
-            })
-        })
-    })
-</script>

+ 0 - 97
resources/views/material/admin/node/index.tpl

@@ -1,97 +0,0 @@
-{include file='admin/main.tpl'}
-
-<main class="content">
-    <div class="content-header ui-content-header">
-        <div class="container">
-            <h1 class="content-heading">节点列表</h1>
-        </div>
-    </div>
-    <div class="container">
-        <div class="col-lg-12 col-sm-12">
-            <section class="content-inner margin-top-no">
-                <div class="card">
-                    <div class="card-main">
-                        <div class="card-inner">
-                            <p>系统中所有节点的列表。</p>
-                            <p>显示表项:
-                                {include file='table/checkbox.tpl'}
-                            </p>
-                        </div>
-                    </div>
-                </div>
-                <div class="table-responsive">
-                    {include file='table/table.tpl'}
-                </div>
-                <div class="fbtn-container">
-                    <div class="fbtn-inner">
-                        <a class="fbtn fbtn-lg fbtn-brand-accent waves-attach waves-circle waves-light"
-                           href="/admin/node/create">+</a>
-                    </div>
-                </div>
-                <div aria-hidden="true" class="modal modal-va-middle fade" id="delete_modal" role="dialog"
-                     tabindex="-1">
-                    <div class="modal-dialog modal-xs">
-                        <div class="modal-content">
-                            <div class="modal-heading">
-                                <a class="modal-close" data-dismiss="modal">×</a>
-                                <h2 class="modal-title">确认要删除?</h2>
-                            </div>
-                            <div class="modal-inner">
-                                <p>请您确认。</p>
-                            </div>
-                            <div class="modal-footer">
-                                <p class="text-right">
-                                    <button class="btn btn-flat btn-brand-accent waves-attach waves-effect"
-                                            data-dismiss="modal" type="button">取消
-                                    </button>
-                                    <button class="btn btn-flat btn-brand-accent waves-attach" data-dismiss="modal"
-                                            id="delete_input" type="button">确定
-                                    </button>
-                                </p>
-                            </div>
-                        </div>
-                    </div>
-                </div>
-                {include file='dialog.tpl'}
-            </section>
-        </div>
-    </div>
-</main>
-
-{include file='admin/footer.tpl'}
-
-<script>
-    function delete_modal_show(id) {
-        deleteid = id;
-        $("#delete_modal").modal();
-    }
-    {include file='table/js_1.tpl'}
-    window.addEventListener('load', () => {
-        {include file='table/js_2.tpl'}
-        function delete_id() {
-            $.ajax({
-                type: "DELETE",
-                url: "/admin/node",
-                dataType: "json",
-                data: {
-                    id: deleteid
-                },
-                success: data => {
-                    if (data.ret) {
-                        $("#result").modal();
-                        $$.getElementById('msg').innerHTML = data.msg;
-                        {include file='table/js_delete.tpl'}
-                    } else {
-                        $("#result").modal();
-                        $$.getElementById('msg').innerHTML = data.msg;
-                    }
-                },
-                error: jqXHR => {
-                    $("#result").modal();
-                    $$.getElementById('msg').innerHTML = `${ldelim}data.msg{rdelim} 发生错误了。`;
-                }
-            });
-        }
-        $$.getElementById('delete_input').addEventListener('click', delete_id);
-    })
-</script>

+ 0 - 1908
resources/views/material/admin/setting.tpl

@@ -1,1908 +0,0 @@
-{include file='admin/main.tpl'}
-
-<main class="content">
-    <div class="content-header ui-content-header">
-        <div class="container">
-            <h1 class="content-heading">设置中心</h1>
-        </div>
-    </div>
-
-    <div class="container">
-        <div class="col-xx-12 col-sm-12">
-            <div class="card quickadd">
-                <div class="card-main">
-                    <div class="card-inner">
-                        <nav class="tab-nav margin-top-no">
-                            <ul class="nav nav-list">
-                                <li class="active">
-                                    <a data-toggle="tab" href="#payment_settings"><i class="mdi mdi-credit-card-outline icon-lg"></i>&nbsp;支付</a>
-                                </li>
-                                <li>
-                                    <a data-toggle="tab" href="#mail_settings"><i class="mdi mdi-email icon-lg"></i>&nbsp;邮件</a>
-                                </li>
-                                <li>
-                                    <a data-toggle="tab" href="#customer_service_system_settings"><i class="mdi mdi-face-agent icon-lg"></i>&nbsp;客服</a>
-                                </li>
-                                <li>
-                                    <a data-toggle="tab" href="#verification_code_settings"><i class="mdi mdi-shield-check icon-lg"></i>&nbsp;验证</a>
-                                </li>
-                                <li>
-                                    <a data-toggle="tab" href="#personalise_settings"><i class="mdi mdi-magic-staff icon-lg"></i>&nbsp;个性化</a>
-                                </li>
-                                <li>
-                                    <a data-toggle="tab" href="#registration_settings"><i class="mdi mdi-account-plus icon-lg"></i>&nbsp;注册</a>
-                                </li>
-                                <li>
-                                    <a data-toggle="tab" href="#invitation_settings"><i class="mdi mdi-account-multiple-plus icon-lg"></i>&nbsp;邀请</a>
-                                </li>
-                                <li>
-                                    <a data-toggle="tab" href="#telegram_settings"><i class="mdi mdi-send-circle icon-lg"></i>&nbsp;Telegram</a>
-                                </li>
-                            </ul>
-                        </nav>
-                                
-                        <div class="card-inner">
-                           <div class="tab-content">
-                                <div class="tab-pane fade" id="mail_settings">
-                                    <nav class="tab-nav margin-top-no">
-                                        <ul class="nav nav-list">
-                                            <li class="active">
-                                                <a data-toggle="tab" href="#email_auth_settings">&nbsp;设置</a>
-                                            </li>
-                                            <li>
-                                                <a data-toggle="tab" href="#smtp">&nbsp;smtp</a>
-                                            </li>
-                                            <li>
-                                                <a data-toggle="tab" href="#sendgrid">&nbsp;sendgrid</a>
-                                            </li>
-                                            <li>
-                                                <a data-toggle="tab" href="#mailgun">&nbsp;mailgun</a>
-                                            </li>
-                                            <li>
-                                                <a data-toggle="tab" href="#ses">&nbsp;ses</a>
-                                            </li>
-                                        </ul>
-                                    </nav>
-                                            
-                                    <div class="tab-pane fade active in" id="email_auth_settings">
-                                        <!-- mail_driver -->
-                                        <div class="form-group form-group-label">
-                                            <label class="floating-label">邮件服务</label>
-                                            <select id="mail_driver" class="form-control maxwidth-edit">
-                                                <option value="none" {if $settings['mail_driver'] == "none"}selected{/if}>none</option>
-                                                <option value="mailgun" {if $settings['mail_driver'] == "mailgun"}selected{/if}>mailgun</option>
-                                                <option value="sendgrid" {if $settings['mail_driver'] == "sendgrid"}selected{/if}>sendgrid</option>
-                                                <option value="ses" {if $settings['mail_driver'] == "ses"}selected{/if}>ses</option>
-                                                <option value="smtp" {if $settings['mail_driver'] == "smtp"}selected{/if}>smtp</option>
-                                            </select>
-                                        </div>
-
-                                        <button id="submit_mail" type="submit" class="btn  btn-brand btn-dense">提交</button>
-
-                                        <!-- smtp_test_recipient -->
-                                        <div class="form-group form-group-label">
-                                            <label class="floating-label">测试邮件收件人</label>
-                                            <input class="form-control maxwidth-edit" id="testing_email_recipients">
-                                            <p class="form-control-guide"><i class="mdi mdi-information"></i>邮件配置保存完成后,如需验证是否可用,可在上方填写一个有效邮箱,系统将发送一封测试邮件到该邮箱。如果能够正常接收,则说明配置可用</p>
-                                            {if $settings['mail_driver'] == "none"}
-                                            <p class="form-control-guide"><i class="mdi mdi-information"></i>如需使用发信测试功能,请先在上方选择一个发信方式,并配置有效的相关参数</p>
-                                            {/if}
-                                        </div>
-                                        
-                                        <button id="submit_email_test" type="submit" class="btn btn-brand btn-dense" {if $settings['mail_driver'] == "none"}disabled{/if}>测试</button>
-                                    </div>
-                                    <div class="tab-pane fade" id="smtp">
-                                        <!-- smtp_host -->
-                                        <div class="form-group form-group-label">
-                                            <label class="floating-label">SMTP主机地址</label>
-                                            <input class="form-control maxwidth-edit" id="smtp_host" value="{$settings['smtp_host']}">
-                                            <p class="form-control-guide"><i class="mdi mdi-information"></i>例如:smtpdm-ap-southeast-1.aliyun.com</p>
-                                        </div>
-                                        <!-- smtp_username -->
-                                        <div class="form-group form-group-label">
-                                            <label class="floating-label">SMTP账户名</label>
-                                            <input class="form-control maxwidth-edit" id="smtp_username" value="{$settings['smtp_username']}">
-                                            <p class="form-control-guide"><i class="mdi mdi-information"></i>例如:[email protected]</p>
-                                        </div>
-                                        <!-- smtp_password -->
-                                        <div class="form-group form-group-label">
-                                            <label class="floating-label">SMTP账户密码</label>
-                                            <input class="form-control maxwidth-edit" id="smtp_password" value="{$settings['smtp_password']}">
-                                            <p class="form-control-guide"><i class="mdi mdi-information"></i>如果你使用 QQ 邮箱或 163 邮箱,此处应当填写单独的授权码</p>
-                                        </div>
-                                        <!-- smtp_port -->
-                                        <div class="form-group form-group-label">
-                                            <label class="floating-label">SMTP端口</label>
-                                            <select id="smtp_port" class="form-control maxwidth-edit">
-                                                <option value="465" {if $settings['smtp_port'] == "465"}selected{/if}>465</option>
-                                                <option value="587" {if $settings['smtp_port'] == "587"}selected{/if}>587</option>
-                                                <option value="2525" {if $settings['smtp_port'] == "2525"}selected{/if}>2525</option>
-                                                <option value="25" {if $settings['smtp_port'] == "25"}selected{/if}>25</option>
-                                            </select>
-                                            <p class="form-control-guide"><i class="mdi mdi-information"></i>常见端口一般就这些</p>
-                                        </div>
-                                        <!-- smtp_name -->
-                                        <div class="form-group form-group-label">
-                                            <label class="floating-label">SMTP发信名称</label>
-                                            <input class="form-control maxwidth-edit" id="smtp_name" value="{$settings['smtp_name']}">
-                                            <p class="form-control-guide"><i class="mdi mdi-information"></i>这里的设置在邮箱的邮件列表中可见。你可以设置为网站名称</p>
-                                        </div>
-                                        <!-- smtp_sender -->
-                                        <div class="form-group form-group-label">
-                                            <label class="floating-label">SMTP账户发信地址</label>
-                                            <input class="form-control maxwidth-edit" id="smtp_sender" value="{$settings['smtp_sender']}">
-                                            <p class="form-control-guide"><i class="mdi mdi-information"></i>如不知道填什么,请与此项保持一致:SMTP账户名</p>
-                                        </div>
-                                        <!-- smtp_ssl -->
-                                        <div class="form-group form-group-label">
-                                            <label class="floating-label">是否使用 TLS/SSL 发信</label>
-                                            <select id="smtp_ssl" class="form-control maxwidth-edit">
-                                                <option value="1" {if $settings['smtp_ssl'] == true}selected{/if}>开启</option>
-                                                <option value="0" {if $settings['smtp_ssl'] == false}selected{/if}>关闭</option>
-                                            </select>
-                                        </div>
-                                        <!-- smtp_bbc -->
-                                        <div class="form-group form-group-label">
-                                            <label class="floating-label">发给用户的邮件密送给指定邮箱备份</label>
-                                            <input class="form-control maxwidth-edit" id="smtp_bbc" value="{$settings['smtp_bbc']}">
-                                            <p class="form-control-guide"><i class="mdi mdi-information"></i>如无需使用此功能,请留空</p>
-                                        </div>
-
-                                        <button id="submit_smtp" type="submit" class="btn  btn-brand btn-dense">提交</button>
-                                    </div>
-                                    <div class="tab-pane fade" id="sendgrid">
-                                        <!-- sendgrid_key -->
-                                        <div class="form-group form-group-label">
-                                            <label class="floating-label">Sendgrid 密钥</label>
-                                            <input class="form-control maxwidth-edit" id="sendgrid_key" value="{$settings['sendgrid_key']}">
-                                        </div>
-                                        <!-- sendgrid_sender -->
-                                        <div class="form-group form-group-label">
-                                            <label class="floating-label">Sendgrid 发件邮箱</label>
-                                            <input class="form-control maxwidth-edit" id="sendgrid_sender" value="{$settings['sendgrid_sender']}">
-                                        </div>
-                                        <!-- sendgrid_name -->
-                                        <div class="form-group form-group-label">
-                                            <label class="floating-label">Sendgrid 发件人名称</label>
-                                            <input class="form-control maxwidth-edit" id="sendgrid_name" value="{$settings['sendgrid_name']}">
-                                        </div>
-
-                                        <button id="submit_sendgrid" type="submit" class="btn btn-brand btn-dense">提交</button>
-                                    </div>
-                                    <div class="tab-pane fade" id="mailgun">
-                                        <!-- mailgun_key -->
-                                        <div class="form-group form-group-label">
-                                            <label class="floating-label">Mailgun 密钥</label>
-                                            <input class="form-control maxwidth-edit" id="mailgun_key" value="{$settings['mailgun_key']}">
-                                        </div>
-                                        <!-- mailgun_domain -->
-                                        <div class="form-group form-group-label">
-                                            <label class="floating-label">Mailgun 域名</label>
-                                            <input class="form-control maxwidth-edit" id="mailgun_domain" value="{$settings['mailgun_domain']}">
-                                        </div>
-                                        <!-- mailgun_sender -->
-                                        <div class="form-group form-group-label">
-                                            <label class="floating-label">Mailgun 发送者</label>
-                                            <input class="form-control maxwidth-edit" id="mailgun_sender" value="{$settings['mailgun_sender']}">
-                                        </div>
-
-                                        <button id="submit_mailgun" type="submit" class="btn btn-brand btn-dense">提交</button>
-                                    </div>
-                                    <div class="tab-pane fade" id="ses">
-                                        <!-- aws_access_key_id -->
-                                        <div class="form-group form-group-label">
-                                            <label class="floating-label">AWS 密钥 ID</label>
-                                            <input class="form-control maxwidth-edit" id="aws_access_key_id" value="{$settings['aws_access_key_id']}">
-                                        </div>
-                                        <!-- aws_secret_access_key -->
-                                        <div class="form-group form-group-label">
-                                            <label class="floating-label">AWS 密钥 KEY</label>
-                                            <input class="form-control maxwidth-edit" id="aws_secret_access_key" value="{$settings['aws_secret_access_key']}">
-                                        </div>
-                                        <!-- aws_region -->
-                                        <div class="form-group form-group-label">
-                                            <label class="floating-label">AWS 区域</label>
-                                            <input class="form-control maxwidth-edit" id="aws_region" value="{$settings['aws_region']}">
-                                        </div>
-                                        <!-- aws_ses_sender -->
-                                        <div class="form-group form-group-label">
-                                            <label class="floating-label">AWS SES 发送者</label>
-                                            <input class="form-control maxwidth-edit" id="aws_ses_sender" value="{$settings['aws_ses_sender']}">
-                                        </div>
-
-                                        <button id="submit_ses" type="submit" class="btn btn-brand btn-dense">提交</button>
-                                    </div>
-                                </div>
-
-                                <div class="tab-pane fade active in" id="payment_settings">
-                                    <nav class="tab-nav margin-top-no">
-                                        <ul class="nav nav-list">
-                                            <li class="active">
-                                                <a data-toggle="tab" href="#public_payment_settings">&nbsp;设置</a>
-                                            </li>
-                                            {foreach $payment_gateways as $key => $value}
-                                            <li>
-                                                <a data-toggle="tab" href="#{$value}">{$key}</a>
-                                            </li>
-                                            {/foreach}
-                                        </ul>
-                                    </nav>
-                                            
-                                    <div class="tab-pane fade active in" id="public_payment_settings">
-                                        <div class="form-group form-group-label">
-                                        {foreach $payment_gateways as $key => $value}
-                                            <div class="checkbox switch">
-                                                <label for="{$value}_switch">
-                                                    <input class="access-hide" type="checkbox" id="{$value}_switch" name="{$value}_switch"
-                                                    {if in_array($value, $active_payment_gateway)}
-                                                    checked
-                                                    {/if}
-                                                    ><span class="switch-toggle"></span>{$key}
-                                                </label>
-                                            </div>
-                                        {/foreach}
-                                        </div>
-
-                                        <button id="submit_payment" type="submit" class="btn btn-block btn-brand">提交</button>
-                                    </div>
-
-                                    <div class="tab-pane fade" id="payjs">
-                                        <p class="form-control-guide"><i class="mdi mdi-information"></i>此处申请: <a href="https://payjs.cn" target="view_window">https://payjs.cn</a></p>
-                                        <!-- payjs_url -->
-                                        <div class="form-group form-group-label">
-                                            <label class="floating-label">payjs_url</label>
-                                            <input class="form-control maxwidth-edit" id="payjs_url" value="{$settings['payjs_url']}">
-                                        </div>
-                                        <!-- payjs_mchid -->
-                                        <div class="form-group form-group-label">
-                                            <label class="floating-label">payjs_mchid</label>
-                                            <input class="form-control maxwidth-edit" id="payjs_mchid" value="{$settings['payjs_mchid']}">
-                                        </div>
-                                        <!-- payjs_key -->
-                                        <div class="form-group form-group-label">
-                                            <label class="floating-label">payjs_key</label>
-                                            <input class="form-control maxwidth-edit" id="payjs_key" value="{$settings['payjs_key']}">
-                                        </div>
-
-                                        <button id="submit_payjs_pay" type="submit" class="btn btn-block btn-brand">提交</button>
-                                    </div>
-
-                                    <div class="tab-pane fade" id="paymentwall">
-                                        <p class="form-control-guide"><i class="mdi mdi-information"></i>此处申请: <a href="https://www.paymentwall.com/cn" target="view_window">https://www.paymentwall.com/cn</a></p>
-                                        <!-- pmw_publickey -->
-                                        <div class="form-group form-group-label">
-                                            <label class="floating-label">pmw公钥</label>
-                                            <textarea class="form-control maxwidth-edit" id="pmw_publickey" rows="5">{$settings['pmw_publickey']}</textarea>
-                                        </div>
-                                        <!-- pmw_privatekey -->
-                                        <div class="form-group form-group-label">
-                                            <label class="floating-label">pmw私钥</label>
-                                            <textarea class="form-control maxwidth-edit" id="pmw_privatekey" rows="7">{$settings['pmw_privatekey']}</textarea>
-                                        </div>
-                                        <!-- pmw_widget -->
-                                        <div class="form-group form-group-label">
-                                            <label class="floating-label">pmw_widget</label>
-                                            <input class="form-control maxwidth-edit" id="pmw_widget" value="{$settings['pmw_widget']}">
-                                        </div>
-                                        <!-- pmw_height -->
-                                        <div class="form-group form-group-label">
-                                            <label class="floating-label">pmw_height</label>
-                                            <input class="form-control maxwidth-edit" id="pmw_height" value="{$settings['pmw_height']}">
-                                        </div>
-
-                                        <button id="submit_paymentwall" type="submit" class="btn btn-block btn-brand">提交</button>
-                                    </div>
-                                    
-                                    <div class="tab-pane fade" id="theadpay">
-                                        <p class="form-control-guide"><i class="mdi mdi-information"></i>此处申请:<a href="https://theadpay.com" target="view_window">https://theadpay.com</a></p>
-                                        <!-- theadpay_url -->
-                                        <div class="form-group form-group-label">
-                                            <label class="floating-label">theadpay_url</label>
-                                            <input class="form-control maxwidth-edit" id="theadpay_url" value="{$settings['theadpay_url']}">
-                                        </div>
-                                        <!-- theadpay_mchid -->
-                                        <div class="form-group form-group-label">
-                                            <label class="floating-label">theadpay_mchid</label>
-                                            <input class="form-control maxwidth-edit" id="theadpay_mchid" value="{$settings['theadpay_mchid']}">
-                                        </div>
-                                        <!-- theadpay_key -->
-                                        <div class="form-group form-group-label">
-                                            <label class="floating-label">theadpay_key</label>
-                                            <input class="form-control maxwidth-edit" id="theadpay_key" value="{$settings['theadpay_key']}">
-                                        </div>
-
-                                        <button id="submit_theadpay" type="submit" class="btn btn-block btn-brand">提交</button>
-                                    </div>
-
-                                    <div class="tab-pane fade" id="stripe_card">
-                                        <p class="form-control-guide"><i class="mdi mdi-alert"></i>提供虚拟专用网络业务符合 Stripe 用户协议,但可能不符合 Stripe 提供的部分支付通道(如支付宝、微信)用户协议,相关支付通道可能存在被关闭的风险</p>
-                                        <h5>支付渠道</h5>
-                                        <!-- stripe_card_select -->
-                                        <div class="form-group form-group-label">
-                                            <label class="floating-label">银行卡支付</label>
-                                            <select id="stripe_card_select" class="form-control maxwidth-edit">
-                                                <option value="0">停用</option>
-                                                <option value="1" {if $settings['stripe_card'] == true}selected{/if}>
-                                                    启用
-                                                </option>
-                                            </select>
-                                        </div>
-                                        <h5>支付设置</h5>
-                                        <!-- stripe_currency -->
-                                        <div class="form-group form-group-label">
-                                            <label class="floating-label">货币单位</label>
-                                            <input class="form-control maxwidth-edit" id="stripe_currency" value="{$settings['stripe_currency']}">
-                                        </div>
-                                        <!-- stripe_min_recharge -->
-                                        <div class="form-group form-group-label">
-                                            <label class="floating-label">最低充值限额(整数)</label>
-                                            <input class="form-control maxwidth-edit" id="stripe_min_recharge" value="{$settings['stripe_min_recharge']}">
-                                        </div>
-                                        <!-- stripe_max_recharge -->
-                                        <div class="form-group form-group-label">
-                                            <label class="floating-label">最高充值限额(整数)</label>
-                                            <input class="form-control maxwidth-edit" id="stripe_max_recharge" value="{$settings['stripe_max_recharge']}">
-                                        </div>
-                                        <!-- stripe_pk -->
-                                        <div class="form-group form-group-label">
-                                            <label class="floating-label">stripe_pk</label>
-                                            <input class="form-control maxwidth-edit" id="stripe_pk" value="{$settings['stripe_pk']}">
-                                        </div>
-                                        <!-- stripe_sk -->
-                                        <div class="form-group form-group-label">
-                                            <label class="floating-label">stripe_sk</label>
-                                            <input class="form-control maxwidth-edit" id="stripe_sk" value="{$settings['stripe_sk']}">
-                                        </div>
-                                        <!-- stripe_webhook_key -->
-                                        <div class="form-group form-group-label">
-                                            <label class="floating-label">WebHook密钥</label>
-                                            <input class="form-control maxwidth-edit" id="stripe_webhook_key" value="{$settings['stripe_webhook_key']}">
-                                        </div>
-
-                                        <button id="submit_stripe" type="submit" class="btn btn-block btn-brand">提交</button>
-                                    </div>
-                                    
-                                    <div class="tab-pane fade" id="vmqpay">
-                                        <p class="form-control-guide"><i class="mdi mdi-information"></i>此支付方式需自建网关并配置各项参数。访问 <a href="https://github.com/szvone/vmqphp" target="view_window">https://github.com/szvone/vmqphp</a> 了解更多</p>
-                                        <p class="form-control-guide"><i class="mdi mdi-information"></i>开源的 Android 监听端(推荐):<a href="https://gitee.com/yuniks/VMQAPK" target="view_window">https://gitee.com/yuniks/VMQAPK</a></p>
-                                        <p class="form-control-guide"><i class="mdi mdi-information"></i>不开源的 Windows 监听端(不推荐):<a href="https://toscode.gitee.com/pmhw/Vpay" target="view_window">https://toscode.gitee.com/pmhw/Vpay</a></p>
-                                        <!-- vmq_gateway -->
-                                        <div class="form-group form-group-label">
-                                            <label class="floating-label">V免签网关</label>
-                                            <input class="form-control maxwidth-edit" id="vmq_gateway" value="{$settings['vmq_gateway']}">
-                                            <p class="form-control-guide"><i class="mdi mdi-information"></i>形如:https://pay.com</p>
-                                        </div>
-                                        <!-- vmq_key -->
-                                        <div class="form-group form-group-label">
-                                            <label class="floating-label">V免签密钥</label>
-                                            <input class="form-control maxwidth-edit" id="vmq_key" value="{$settings['vmq_key']}">
-                                        </div>
-                                        
-                                        <button id="submit_vmq_pay" type="submit" class="btn btn-block btn-brand">提交</button>
-                                    </div>
-                                    
-                                    <div class="tab-pane fade" id="f2fpay">
-                                        <p class="form-control-guide"><i class="mdi mdi-information"></i>此处申请: <a href="https://b.alipay.com/signing/productDetailV2.htm?productId=I1011000290000001003" target="view_window">https://b.alipay.com/signing/productDetailV2.htm?productId=I1011000290000001003</a></p>
-                                        <!-- f2f_pay_app_id -->
-                                        <div class="form-group form-group-label">
-                                            <label class="floating-label">App ID</label>
-                                            <input class="form-control maxwidth-edit" id="f2f_pay_app_id" value="{$settings['f2f_pay_app_id']}">
-                                        </div>
-                                        <!-- f2f_pay_pid -->
-                                        <div class="form-group form-group-label">
-                                            <label class="floating-label">PID</label>
-                                            <input class="form-control maxwidth-edit" id="f2f_pay_pid" value="{$settings['f2f_pay_pid']}">
-                                            <p class="form-control-guide"><i class="mdi mdi-information"></i>此项可留空,不影响使用</p>
-                                        </div>
-                                        <!-- f2f_pay_public_key -->
-                                        <div class="form-group form-group-label">
-                                            <label class="floating-label">公钥</label>
-                                            <textarea class="form-control maxwidth-edit" id="f2f_pay_public_key" rows="4">{$settings['f2f_pay_public_key']}</textarea>
-                                        </div>
-                                        <!-- f2f_pay_private_key -->
-                                        <div class="form-group form-group-label">
-                                            <label class="floating-label">私钥</label>
-                                            <textarea class="form-control maxwidth-edit" id="f2f_pay_private_key" rows="12">{$settings['f2f_pay_private_key']}</textarea>
-                                        </div>
-                                        <!-- f2f_pay_notify_url -->
-                                        <div class="form-group form-group-label">
-                                            <label class="floating-label">自定义回调地址</label>
-                                            <input class="form-control maxwidth-edit" id="f2f_pay_notify_url" value="{$settings['f2f_pay_notify_url']}">
-                                            <p class="form-control-guide"><i class="mdi mdi-information"></i>此项可留空,不影响使用</p>
-                                        </div>
-                                        
-                                        <button id="submit_f2f_pay" type="submit" class="btn btn-block btn-brand">提交</button>
-                                    </div>
-								
-								<div class="tab-pane fade" id="epay">
-                                        <!-- epay_url -->
-                                        <div class="form-group form-group-label">
-                                            <label class="floating-label">易支付URL</label>
-                                            <input class="form-control maxwidth-edit" id="epay_url" value="{$settings['epay_url']}">
-											<p class="form-control-guide"><i class="mdi mdi-information"></i>不同易支付url后缀不同,1:域名后面带/ 2:域名后面带submit.php/</p>
-                                        </div>
-                                        <!-- epay_pid -->
-                                        <div class="form-group form-group-label">
-                                            <label class="floating-label">商户ID</label>
-                                            <input class="form-control maxwidth-edit" id="epay_pid" value="{$settings['epay_pid']}">
-                                            <p class="form-control-guide"><i class="mdi mdi-information"></i>必填</p>
-                                        </div>
-                                        <!-- epay_key -->
-                                        <div class="form-group form-group-label">
-                                            <label class="floating-label">商户Key</label>
-											<input class="form-control maxwidth-edit" id="epay_key" value="{$settings['epay_key']}">
-                                        
-											<p class="form-control-guide"><i class="mdi mdi-information"></i>必填</p>
-                                        </div>
-                                        <!-- epay_alipay -->
-                                        <div class="form-group form-group-label">
-                                            <label class="floating-label">支付宝</label>
-                                            <select id="epay_alipay" class="form-control maxwidth-edit">
-                                                <option value="0">停用</option>
-                                                <option value="1" {if $settings['epay_alipay'] == true}selected{/if}>
-                                                    启用
-                                                </option>
-                                            </select>
-                                        </div>
-                                        <!-- epay_wechat -->
-                                        <div class="form-group form-group-label">
-                                            <label class="floating-label">微信支付</label>
-                                            <select id="epay_wechat" class="form-control maxwidth-edit">
-                                                <option value="0">停用</option>
-                                                <option value="1" {if $settings['epay_wechat'] == true}selected{/if}>
-                                                    启用
-                                                </option>
-                                            </select>
-                                        </div>
-                                        <!-- epay_qq -->
-                                        <div class="form-group form-group-label">
-                                            <label class="floating-label">QQ钱包</label>
-                                            <select id="epay_qq" class="form-control maxwidth-edit">
-                                                <option value="0">停用</option>
-                                                <option value="1" {if $settings['epay_qq'] == true}selected{/if}>
-                                                    启用
-                                                </option>
-                                            </select>
-                                        </div>
-                                        <!-- epay_usdt -->
-                                        <div class="form-group form-group-label">
-                                            <label class="floating-label">USDT</label>
-                                            <select id="epay_usdt" class="form-control maxwidth-edit">
-                                                <option value="0">停用</option>
-                                                <option value="1" {if $settings['epay_usdt'] == true}selected{/if}>
-                                                    启用
-                                                </option>
-                                            </select>
-                                        </div>
-                                        <button id="submit_e_pay" type="submit" class="btn btn-block btn-brand">提交</button>
-                                     </div>
-                                </div>
-
-                                <div class="tab-pane fade" id="customer_service_system_settings">
-                                    <nav class="tab-nav margin-top-no">
-                                        <ul class="nav nav-list">
-                                            <li class="active">
-                                                <a data-toggle="tab" href="#web_customer_service_system">&nbsp;网页客服</a>
-                                            </li>
-                                            <li>
-                                                <a data-toggle="tab" href="#admin_contact">&nbsp;联系站长</a>
-                                            </li>
-                                        </ul>
-                                    </nav>
-                                    <div class="tab-pane fade active in" id="web_customer_service_system">
-                                        <!-- live_chat -->
-                                        <div class="form-group form-group-label">
-                                            <label class="floating-label">网页客服系统</label>
-                                            <select id="live_chat" class="form-control maxwidth-edit">
-                                                <option value="none" {if $settings['live_chat'] == "none"}selected{/if}>不启用</option>
-                                                <option value="tawk" {if $settings['live_chat'] == "tawk"}selected{/if}>Tawk</option>
-                                                <option value="crisp" {if $settings['live_chat'] == "crisp"}selected{/if}>Crisp</option>
-                                                <option value="livechat" {if $settings['live_chat'] == "livechat"}selected{/if}>LiveChat</option>
-                                                <option value="mylivechat" {if $settings['live_chat'] == "mylivechat"}selected{/if}>MyLiveChat</option>
-                                            </select>
-                                            <p class="form-control-guide"><i class="mdi mdi-information"></i>目前仅 Crisp 与 LiveChat 支持在聊天时传递用户部分账户信息(如账户余额、到期时间、已用流量和剩余流量等)</p>
-                                        </div>
-                                        <!-- tawk_id -->
-                                        <div class="form-group form-group-label">
-                                            <label class="floating-label">Tawk</label>
-                                            <input class="form-control maxwidth-edit" id="tawk_id" value="{$settings['tawk_id']}">
-                                            <p class="form-control-guide"><i class="mdi mdi-information"></i>在 <a href="https://tawk.to" target="view_window">https://tawk.to</a> 申请,这应该是 24 位字符</p>
-                                        </div>
-                                        <!-- crisp_id -->
-                                        <div class="form-group form-group-label">
-                                            <label class="floating-label">Crisp</label>
-                                            <input class="form-control maxwidth-edit" id="crisp_id" value="{$settings['crisp_id']}">
-                                            <p class="form-control-guide"><i class="mdi mdi-information"></i>在 <a href="https://crisp.chat/en" target="view_window">https://crisp.chat/en</a> 申请,这应该是一个 UUID</p>
-                                        </div>
-                                        <!-- livechat_id -->
-                                        <div class="form-group form-group-label">
-                                            <label class="floating-label">LiveChat</label>
-                                            <input class="form-control maxwidth-edit" id="livechat_id" value="{$settings['livechat_id']}">
-                                            <p class="form-control-guide"><i class="mdi mdi-information"></i>在 <a href="https://www.livechat.com/cn" target="view_window">https://www.livechat.com/cn</a> 申请,这应该是 8 位数字</p>
-                                        </div>
-                                        <!-- mylivechat_id -->
-                                        <div class="form-group form-group-label">
-                                            <label class="floating-label">MyLiveChat</label>
-                                            <input class="form-control maxwidth-edit" id="mylivechat_id" value="{$settings['mylivechat_id']}">
-                                            <p class="form-control-guide"><i class="mdi mdi-information"></i>在 <a href="https://www.mylivechat.com" target="view_window">https://www.mylivechat.com</a> 申请,这个我不知道</p>
-                                        </div>
-
-                                        <button id="submit_web_customer_service_system" type="submit" class="btn btn-block btn-brand">提交</button>
-                                    </div>
-                                    <div class="tab-pane fade" id="admin_contact">
-                                        <p class="form-control-guide"><i class="mdi mdi-information"></i>注意:留空的联系方式将不显示</p>
-                                        <p class="form-control-guide"><i class="mdi mdi-information"></i>支持使用 HTML 标签。你可以通过配置 a 标签,达到点击即可唤起对应app会话窗口的效果</p>
-                                        <p class="form-control-guide"><i class="mdi mdi-information"></i>若开启此功能,此页面展示的联系方式将显示在:</p>
-                                        <p class="form-control-guide"><i class="mdi mdi-information"></i>1. 注册或重置密码页面点击【无法收到验证码】按钮</p>
-                                        <p class="form-control-guide"><i class="mdi mdi-information"></i>2. 用户账户被停用的告知页面</p>
-                                        <p class="form-control-guide"><i class="mdi mdi-information"></i>3. 充值页面提示充值未到账的用户</p>
-                                        <p class="form-control-guide"><i class="mdi mdi-information"></i>4. 用户中心首页公告栏下方</p>
-                                        <!-- enable_admin_contact -->
-                                        <div class="form-group form-group-label">
-                                            <label class="floating-label">是否显示站长联系方式</label>
-                                            <select id="enable_admin_contact" class="form-control maxwidth-edit">
-                                                <option value="0" {if $settings['enable_admin_contact'] == false}selected{/if}>关闭</option>
-                                                <option value="1" {if $settings['enable_admin_contact'] == true}selected{/if}>开启</option>
-                                            </select>
-                                        </div>
-                                        <!-- admin_contact1 -->
-                                        <div class="form-group form-group-label">
-                                            <label class="floating-label">站长联系方式一</label>
-                                            <input class="form-control maxwidth-edit" id="admin_contact1" value="{htmlspecialchars($settings['admin_contact1'])}">
-                                        </div>
-                                        <!-- admin_contact2 -->
-                                        <div class="form-group form-group-label">
-                                            <label class="floating-label">站长联系方式二</label>
-                                            <input class="form-control maxwidth-edit" id="admin_contact2" value="{htmlspecialchars($settings['admin_contact2'])}">
-                                        </div>
-                                        <!-- admin_contact3 -->
-                                        <div class="form-group form-group-label">
-                                            <label class="floating-label">站长联系方式三</label>
-                                            <input class="form-control maxwidth-edit" id="admin_contact3" value="{htmlspecialchars($settings['admin_contact3'])}">
-                                        </div>
-
-                                        <button id="submit_admin_contact" type="submit" class="btn btn-block btn-brand">提交</button>
-                                    </div>
-                                </div>
-
-                                <div class="tab-pane fade" id="verification_code_settings">
-                                    <nav class="tab-nav margin-top-no">
-                                        <ul class="nav nav-list">
-                                            <li class="active">
-                                                <a data-toggle="tab" href="#verification_code_public_settings">&nbsp;设置</a>
-                                            </li>
-                                            <li>
-                                                <a data-toggle="tab" href="#turnstile">&nbsp;Turnstile</a>
-                                            </li>
-                                            <li>
-                                                <a data-toggle="tab" href="#geetest">&nbsp;Geetest</a>
-                                            </li>
-                                        </ul>
-                                    </nav>
-                                            
-                                    <div class="tab-pane fade active in" id="verification_code_public_settings">
-                                        <!-- captcha_provider -->
-                                        <div class="form-group form-group-label">
-                                            <label class="floating-label">验证码提供商</label>
-                                            <select id="captcha_provider" class="form-control maxwidth-edit">
-                                                <option value="turnstile" {if $settings['captcha_provider'] == "turnstile"}selected{/if}>Turnstile</option>
-                                                <option value="geetest" {if $settings['captcha_provider'] == "geetest"}selected{/if}>Geetest</option>
-                                            </select>
-                                        </div>
-                                        <!-- enable_reg_captcha -->
-                                        <div class="form-group form-group-label">
-                                            <label class="floating-label">注册验证码</label>
-                                            <select id="enable_reg_captcha" class="form-control maxwidth-edit">
-                                                <option value="0" {if $settings['enable_reg_captcha'] == false}selected{/if}>关闭</option>
-                                                <option value="1" {if $settings['enable_reg_captcha'] == true}selected{/if}>开启</option>
-                                            </select>
-                                        </div>
-                                        <!-- enable_login_captcha -->
-                                        <div class="form-group form-group-label">
-                                            <label class="floating-label">登录验证码</label>
-                                            <select id="enable_login_captcha" class="form-control maxwidth-edit">
-                                                <option value="0" {if $settings['enable_login_captcha'] == false}selected{/if}>关闭</option>
-                                                <option value="1" {if $settings['enable_login_captcha'] == true}selected{/if}>开启</option>
-                                            </select>
-                                        </div>
-                                        <!-- enable_checkin_captcha -->
-                                        <div class="form-group form-group-label">
-                                            <label class="floating-label">签到验证码</label>
-                                            <select id="enable_checkin_captcha" class="form-control maxwidth-edit">
-                                                <option value="0" {if $settings['enable_checkin_captcha'] == false}selected{/if}>关闭</option>
-                                                <option value="1" {if $settings['enable_checkin_captcha'] == true}selected{/if}>开启</option>
-                                            </select>
-                                        </div>
-                                        <!-- enable_reset_password_captcha -->
-                                        <div class="form-group form-group-label">
-                                            <label class="floating-label">重置密码验证码</label>
-                                            <select id="enable_reset_password_captcha" class="form-control maxwidth-edit">
-                                                <option value="0" {if $settings['enable_reset_password_captcha'] == false}selected{/if}>关闭</option>
-                                                <option value="1" {if $settings['enable_reset_password_captcha'] == true}selected{/if}>开启</option>
-                                            </select>
-                                        </div>
-
-                                        <button id="submit_verify_code" type="submit" class="btn btn-block btn-brand">提交</button>
-                                    </div>
-                                    <div class="tab-pane fade" id="turnstile">
-                                        <p class="form-control-guide"><i class="mdi mdi-information"></i>在 <a href="https://developers.cloudflare.com/turnstile/get-started/#sitekey-and-secret-key" target="view_window">https://developers.cloudflare.com/turnstile/get-started/#sitekey-and-secret-key</a> 申请</p>
-                                        <!-- turnstile_sitekey -->
-                                        <div class="form-group form-group-label">
-                                            <label class="floating-label">Turnstile Site Key</label>
-                                            <input class="form-control maxwidth-edit" id="turnstile_sitekey" value="{$settings['turnstile_sitekey']}">
-                                        </div>
-                                        <!-- turnstile_secret -->
-                                        <div class="form-group form-group-label">
-                                            <label class="floating-label">Turnstile Secret</label>
-                                            <input class="form-control maxwidth-edit" id="turnstile_secret" value="{$settings['turnstile_secret']}">
-                                        </div>
-
-                                        <button id="submit_turnstile" type="submit" class="btn btn-block btn-brand">提交</button>
-                                    </div>
-                                    <div class="tab-pane fade" id="geetest">
-                                        <p class="form-control-guide"><i class="mdi mdi-information"></i>在 <a href="https://gtaccount.geetest.com/sensebot/overview" target="view_window">https://gtaccount.geetest.com/sensebot/overview</a> 申请</p>
-                                        <!-- geetest_id -->
-                                        <div class="form-group form-group-label">
-                                            <label class="floating-label">Geetest ID</label>
-                                            <input class="form-control maxwidth-edit" id="geetest_id" value="{$settings['geetest_id']}">
-                                        </div>
-                                        <!-- geetest_key -->
-                                        <div class="form-group form-group-label">
-                                            <label class="floating-label">Geetest Key</label>
-                                            <input class="form-control maxwidth-edit" id="geetest_key" value="{$settings['geetest_key']}">
-                                        </div>
-
-                                        <button id="submit_geetest" type="submit" class="btn btn-block btn-brand">提交</button>
-                                    </div>
-                                </div>
-
-                                <div class="tab-pane fade" id="personalise_settings">
-                                    <nav class="tab-nav margin-top-no">
-                                        <ul class="nav nav-list">
-                                            <li class="active">
-                                                <a data-toggle="tab" href="#custom_background_image">&nbsp;背景图像</a>
-                                            </li>
-                                        </ul>
-                                    </nav>
-                                            
-                                    <div class="tab-pane fade active in" id="custom_background_image">
-                                        <p class="form-control-guide"><i class="mdi mdi-information"></i>默认背景图片地址:/theme/material/css/images/bg/amber.jpg <a href="/theme/material/css/images/bg/amber.jpg">预览</a></p>
-                                        <p class="form-control-guide"><i class="mdi mdi-information"></i>自带背景图片一地址:/theme/material/css/images/bg/streak.jpg <a href="/theme/material/css/images/bg/streak.jpg">预览</a></p>
-                                        <p class="form-control-guide"><i class="mdi mdi-information"></i>自带背景图片二地址:/theme/material/css/images/bg/geometry.jpg <a href="/theme/material/css/images/bg/geometry.jpg">预览</a></p>
-                                        <p class="form-control-guide"><i class="mdi mdi-information"></i>如需自定义,图片地址可以指向 public 目录或图床图片地址</p>
-                                        <!-- user_center_bg -->
-                                        <div class="form-group form-group-label">
-                                            <label class="floating-label">是否启用自定义用户中心背景图片</label>
-                                            <select id="user_center_bg" class="form-control maxwidth-edit">
-                                                <option value="0" {if $settings['user_center_bg'] == false}selected{/if}>关闭</option>
-                                                <option value="1" {if $settings['user_center_bg'] == true}selected{/if}>开启</option>
-                                            </select>
-                                        </div>
-                                        <!-- admin_center_bg -->
-                                        <div class="form-group form-group-label">
-                                            <label class="floating-label">是否启用自定义管理中心背景图片</label>
-                                            <select id="admin_center_bg" class="form-control maxwidth-edit">
-                                                <option value="0" {if $settings['admin_center_bg'] == false}selected{/if}>关闭</option>
-                                                <option value="1" {if $settings['admin_center_bg'] == true}selected{/if}>开启</option>
-                                            </select>
-                                        </div>
-                                        <!-- user_center_bg_addr -->
-                                        <div class="form-group form-group-label">
-                                            <label class="floating-label">用户中心背景图片地址</label>
-                                            <input class="form-control maxwidth-edit" id="user_center_bg_addr" value="{$settings['user_center_bg_addr']}">
-                                        </div>
-                                        <!-- admin_center_bg_addr -->
-                                        <div class="form-group form-group-label">
-                                            <label class="floating-label">管理中心背景图片地址</label>
-                                            <input class="form-control maxwidth-edit" id="admin_center_bg_addr" value="{$settings['admin_center_bg_addr']}">
-                                        </div>
-
-                                        <button id="submit_custom_background_image" type="submit" class="btn btn-block btn-brand">提交</button>
-                                    </div>
-                                </div>
-
-                                <div class="tab-pane fade" id="registration_settings">
-                                    <nav class="tab-nav margin-top-no">
-                                        <ul class="nav nav-list">
-                                            <li class="active">
-                                                <a data-toggle="tab" href="#reg_mode_and_verify">&nbsp;注册模式与验证</a>
-                                            </li>
-                                            <li>
-                                                <a data-toggle="tab" href="#register_default_value">&nbsp;默认值</a>
-                                            </li>
-                                        </ul>
-                                    </nav>
-                                            
-                                    <div class="tab-pane fade active in" id="reg_mode_and_verify">
-                                        <!-- reg_mode -->
-                                        <div class="form-group form-group-label">
-                                            <label class="floating-label">注册模式设置</label>
-                                            <select id="reg_mode" class="form-control maxwidth-edit">
-                                                <option value="close" {if $settings['reg_mode'] == 'close'}selected{/if}>关闭公共注册</option>
-                                                <option value="open" {if $settings['reg_mode'] == 'open'}selected{/if}>开启公共注册</option>
-                                                <option value="invite" {if $settings['reg_mode'] == 'invite'}selected{/if}>仅限用户邀请注册</option>
-                                            </select>
-                                        </div>
-                                        <!-- reg_email_verify -->
-                                        <div class="form-group form-group-label">
-                                            <label class="floating-label">注册邮箱验证码验证</label>
-                                            <select id="reg_email_verify" class="form-control maxwidth-edit">
-                                                <option value="0" {if $settings['reg_email_verify'] == false}selected{/if}>关闭</option>
-                                                <option value="1" {if $settings['reg_email_verify'] == true}selected{/if}>开启</option>
-                                            </select>
-                                        </div>
-                                        <!-- email_verify_ttl -->
-                                        <div class="form-group form-group-label">
-                                            <label class="floating-label">注册邮箱验证码有效期(单位:秒)</label>
-                                            <input class="form-control maxwidth-edit" id="email_verify_ttl" value="{$settings['email_verify_ttl']}">
-                                        </div>
-                                        <!-- email_verify_ip_limit -->
-                                        <div class="form-group form-group-label">
-                                            <label class="floating-label">验证码有效期内单个ip可请求的发件次数</label>
-                                            <input class="form-control maxwidth-edit" id="email_verify_ip_limit" value="{$settings['email_verify_ip_limit']}">
-                                        </div>
-
-                                        <button type="submit" class="btn btn-block btn-brand submit_register_settings">提交</button>
-                                    </div>
-
-                                    <div class="tab-pane fade" id="register_default_value">
-                                        <h5>注册默认</h5>
-                                        <!-- random_group -->
-                                        <div class="form-group form-group-label">
-                                            <label class="floating-label">注册时随机分配到的分组,多个分组请用英文半角逗号分隔</label>
-                                            <input class="form-control maxwidth-edit" id="random_group" value="{$settings['random_group']}">
-                                        </div>
-                                        <!-- min_port -->
-                                        <div class="form-group form-group-label">
-                                            <label class="floating-label">用户端口池最小值,0为用户在注册的时候不会被分配多用户端口</label>
-                                            <input class="form-control maxwidth-edit" id="min_port" value="{$settings['min_port']}">
-                                        </div>
-                                        <!-- max_port -->
-                                        <div class="form-group form-group-label">
-                                            <label class="floating-label">用户端口池最大值,0为用户在注册的时候不会被分配多用户端口</label>
-                                            <input class="form-control maxwidth-edit" id="max_port" value="{$settings['max_port']}">
-                                        </div>
-                                        <!-- sign_up_for_free_traffic -->
-                                        <div class="form-group form-group-label">
-                                            <label class="floating-label">注册时赠送的流量(单位:GB)</label>
-                                            <input class="form-control maxwidth-edit" id="sign_up_for_free_traffic" value="{$settings['sign_up_for_free_traffic']}">
-                                        </div>
-                                        <!-- free_user_reset_day -->
-                                        <div class="form-group form-group-label">
-                                            <label class="floating-label">免费用戶的流量重置日,0为不重置</label>
-                                            <input class="form-control maxwidth-edit" id="free_user_reset_day" value="{$settings['free_user_reset_day']}">
-                                        </div>
-                                        <!-- free_user_reset_bandwidth -->
-                                        <div class="form-group form-group-label">
-                                            <label class="floating-label">需要重置的免费流量,0为不重置</label>
-                                            <input class="form-control maxwidth-edit" id="free_user_reset_bandwidth" value="{$settings['free_user_reset_bandwidth']}">
-                                        </div>
-                                        <!-- sign_up_for_free_time -->
-                                        <div class="form-group form-group-label">
-                                            <label class="floating-label">注册时赠送的时长(单位:天)</label>
-                                            <input class="form-control maxwidth-edit" id="sign_up_for_free_time" value="{$settings['sign_up_for_free_time']}">
-                                        </div>
-                                        <!-- sign_up_for_class -->
-                                        <div class="form-group form-group-label">
-                                            <label class="floating-label">注册时设定的等级</label>
-                                            <input class="form-control maxwidth-edit" id="sign_up_for_class" value="{$settings['sign_up_for_class']}">
-                                        </div>
-                                        <!-- sign_up_for_class_time -->
-                                        <div class="form-group form-group-label">
-                                            <label class="floating-label">注册时设定的等级过期时间(单位:天)</label>
-                                            <input class="form-control maxwidth-edit" id="sign_up_for_class_time" value="{$settings['sign_up_for_class_time']}">
-                                        </div>
-                                        <h5>注册限制</h5>
-                                        <!-- sign_up_for_invitation_codes -->
-                                        <div class="form-group form-group-label">
-                                            <label class="floating-label">初始邀请注册链接使用次数限制</label>
-                                            <input class="form-control maxwidth-edit" id="sign_up_for_invitation_codes" value="{$settings['sign_up_for_invitation_codes']}">
-                                        </div>
-                                        <!-- connection_device_limit -->
-                                        <div class="form-group form-group-label">
-                                            <label class="floating-label">连接设备限制</label>
-                                            <input class="form-control maxwidth-edit" id="connection_device_limit" value="{$settings['connection_device_limit']}">
-                                        </div>
-                                        <!-- connection_rate_limit -->
-                                        <div class="form-group form-group-label">
-                                            <label class="floating-label">使用速率限制</label>
-                                            <input class="form-control maxwidth-edit" id="connection_rate_limit" value="{$settings['connection_rate_limit']}">
-                                        </div>
-                                        <h5>SSR 设置</h5>
-                                        <!-- sign_up_for_method -->
-                                        <div class="form-group form-group-label">
-                                            <label class="floating-label">默认加密</label>
-                                            <input class="form-control maxwidth-edit" id="sign_up_for_method" value="{$settings['sign_up_for_method']}">
-                                        </div>
-                                        <!-- sign_up_for_protocol -->
-                                        <div class="form-group form-group-label">
-                                            <label class="floating-label">默认协议</label>
-                                            <input class="form-control maxwidth-edit" id="sign_up_for_protocol" value="{$settings['sign_up_for_protocol']}">
-                                        </div>
-                                        <!-- sign_up_for_protocol_param -->
-                                        <div class="form-group form-group-label">
-                                            <label class="floating-label">默认协议参数</label>
-                                            <input class="form-control maxwidth-edit" id="sign_up_for_protocol_param" value="{$settings['sign_up_for_protocol_param']}">
-                                        </div>
-                                        <!-- sign_up_for_obfs -->
-                                        <div class="form-group form-group-label">
-                                            <label class="floating-label">默认混淆</label>
-                                            <input class="form-control maxwidth-edit" id="sign_up_for_obfs" value="{$settings['sign_up_for_obfs']}">
-                                        </div>
-                                        <!-- sign_up_for_obfs_param -->
-                                        <div class="form-group form-group-label">
-                                            <label class="floating-label">默认混淆参数</label>
-                                            <input class="form-control maxwidth-edit" id="sign_up_for_obfs_param" value="{$settings['sign_up_for_obfs_param']}">
-                                        </div>
-                                        <!-- mu_suffix -->
-                                        <div class="form-group form-group-label">
-                                            <label class="floating-label">单端口多用户混淆参数后缀</label>
-                                            <input class="form-control maxwidth-edit" id="mu_suffix" value="{$settings['mu_suffix']}">
-                                        </div>
-                                        <!-- mu_regex -->
-                                        <div class="form-group form-group-label">
-                                            <label class="floating-label">单端口多用户混淆参数表达式</label>
-                                            <input class="form-control maxwidth-edit" id="mu_regex" value="{$settings['mu_regex']}">
-                                        </div>
-                                        <h5>其他</h5>
-                                        <!-- reg_forbidden_ip -->
-                                        <div class="form-group form-group-label">
-                                            <label class="floating-label">注册时默认禁止访问IP列表</label>
-                                            <input class="form-control maxwidth-edit" id="reg_forbidden_ip" value="{$settings['reg_forbidden_ip']}">
-                                        </div>
-                                        <!-- reg_forbidden_port -->
-                                        <div class="form-group form-group-label">
-                                            <label class="floating-label">注册时默认禁止访问端口列表</label>
-                                            <input class="form-control maxwidth-edit" id="reg_forbidden_port" value="{$settings['reg_forbidden_port']}">
-                                        </div>
-                                        <!-- sign_up_for_daily_report -->
-                                        <div class="form-group form-group-label">
-                                            <label class="floating-label">注册后是否默认接收每日用量邮件推送</label>
-                                            <select id="sign_up_for_daily_report" class="form-control maxwidth-edit">
-                                                <option value="0" {if $settings['sign_up_for_daily_report'] == false}selected{/if}>关闭</option>
-                                                <option value="1" {if $settings['sign_up_for_daily_report'] == true}selected{/if}>开启</option>
-                                            </select>
-                                        </div>
-                                        <!-- enable_reg_im -->
-                                        <div class="form-group form-group-label">
-                                            <label class="floating-label">注册时是否要求用户输入IM联系方式</label>
-                                            <select id="enable_reg_im" class="form-control maxwidth-edit">
-                                                <option value="0" {if $settings['enable_reg_im'] == false}selected{/if}>关闭</option>
-                                                <option value="1" {if $settings['enable_reg_im'] == true}selected{/if}>开启</option>
-                                            </select>
-                                        </div>
-
-                                        <button type="submit" class="btn btn-block btn-brand submit_register_settings">提交</button>
-                                    </div>
-                                </div>
-
-                                <div class="tab-pane fade" id="invitation_settings">
-                                    <nav class="tab-nav margin-top-no">
-                                        <ul class="nav nav-list">
-                                            <li class="active">
-                                                <a data-toggle="tab" href="#invite_gernal_settings">&nbsp;设置</a>
-                                            </li>
-                                            <li>
-                                                <a data-toggle="tab" href="#rebate_mode">&nbsp;模式</a>
-                                            </li>
-                                        </ul>
-                                    </nav>
-
-                                    <div class="tab-pane fade active in" id="invite_gernal_settings">
-                                        <!-- invitation_to_register_balance_reward -->
-                                        <div class="form-group form-group-label">
-                                            <label class="floating-label">若有人使用现存用户的邀请链接注册,被邀请人所能获得的余额奖励(单位:元)</label>
-                                            <input class="form-control maxwidth-edit" id="invitation_to_register_balance_reward" value="{$settings['invitation_to_register_balance_reward']}">
-                                        </div>
-                                        <!-- invitation_to_register_traffic_reward -->
-                                        <div class="form-group form-group-label">
-                                            <label class="floating-label">若有人使用现存用户的邀请链接注册,邀请人所能获得的流量奖励(单位:GB)</label>
-                                            <input class="form-control maxwidth-edit" id="invitation_to_register_traffic_reward" value="{$settings['invitation_to_register_traffic_reward']}">
-                                        </div>
-                                        <!-- invite_price -->
-                                        <div class="form-group form-group-label">
-                                            <label class="floating-label">用户购买邀请码所需要的价格,价格小于0时视为不开放购买</label>
-                                            <input class="form-control maxwidth-edit" id="invite_price" value="{$settings['invite_price']}">
-                                        </div>
-                                        <!-- custom_invite_price -->
-                                        <div class="form-group form-group-label">
-                                            <label class="floating-label">用户定制邀请码所需要的价格,价格小于0时视为不开放购买</label>
-                                            <input class="form-control maxwidth-edit" id="custom_invite_price" value="{$settings['custom_invite_price']}">
-                                        </div>
-
-                                        <br/>
-                                        
-                                        <button type="submit" class="btn btn-block btn-brand submit_invite_settings">提交</button>
-                                    </div>
-                                            
-                                    <div class="tab-pane fade" id="rebate_mode">
-                                        <!-- invitation_mode -->
-                                        <div class="form-group form-group-label">
-                                            <label class="floating-label">邀请模式</label>
-                                            <select id="invitation_mode" class="form-control maxwidth-edit">
-                                                <option value="registration_only" {if $settings['invitation_mode'] == 'registration_only'}selected{/if}>
-                                                仅使用邀请注册功能,不返利</option>
-                                                <option value="after_recharge" {if $settings['invitation_mode'] == 'after_recharge'}selected{/if}>
-                                                使用邀请注册功能,并在被邀请用户充值时返利</option>
-                                                <option value="after_purchase" {if $settings['invitation_mode'] == 'after_purchase'}selected{/if}>
-                                                使用邀请注册功能,并在被邀请用户购买时返利</option>
-                                            </select>
-                                        </div>
-                                        <!-- invite_rebate_mode -->
-                                        <div class="form-group form-group-label">
-                                            <label class="floating-label">返利模式</label>
-                                            <select id="invite_rebate_mode" class="form-control maxwidth-edit">
-                                                <option value="continued" {if $settings['invite_rebate_mode'] == 'continued'}selected{/if}>
-                                                持续返利</option>
-                                                <option value="limit_frequency" {if $settings['invite_rebate_mode'] == 'limit_frequency'}selected{/if}>
-                                                限制邀请人能从被邀请人身上获得的总返利次数</option>
-                                                <option value="limit_amount" {if $settings['invite_rebate_mode'] == 'limit_amount'}selected{/if}>
-                                                限制邀请人能从被邀请人身上获得的总返利金额</option>
-                                                <option value="limit_time_range" {if $settings['invite_rebate_mode'] == 'limit_time_range'}selected{/if}>
-                                                限制邀请人能从被邀请人身上获得返利的时间范围</option>
-                                            </select>
-                                        </div>
-                                        <!-- rebate_ratio -->
-                                        <div class="form-group form-group-label">
-                                            <label class="floating-label">返利比例。10 元商品反 2 元就填 0.2</label>
-                                            <input class="form-control maxwidth-edit" id="rebate_ratio" value="{$settings['rebate_ratio']}">
-                                        </div>
-                                        <h5>返利限制模式</h5>
-                                        <p class="form-control-guide"><i class="mdi mdi-information"></i>以下设置项仅在选择对应返利限制模式时生效</p>
-                                        <!-- rebate_time_range_limit -->
-                                        <div class="form-group form-group-label">
-                                            <label class="floating-label">返利时间范围限制(单位:天)</label>
-                                            <input class="form-control maxwidth-edit" id="rebate_time_range_limit" value="{$settings['rebate_time_range_limit']}">
-                                        </div>
-                                        <!-- rebate_frequency_limit -->
-                                        <div class="form-group form-group-label">
-                                            <label class="floating-label">返利总次数限制</label>
-                                            <input class="form-control maxwidth-edit" id="rebate_frequency_limit" value="{$settings['rebate_frequency_limit']}">
-                                        </div>
-                                        <p class="form-control-guide"><i class="mdi mdi-information"></i>例如:设置为 3 时,一个被邀请用户先后购买了售价为 10,20,50,100 的商品,则只对前三笔订单返利(假设设置为在购买时返利)</p>
-                                        <!-- rebate_amount_limit -->
-                                        <div class="form-group form-group-label">
-                                            <label class="floating-label">返利总金额限制</label>
-                                            <input class="form-control maxwidth-edit" id="rebate_amount_limit" value="{$settings['rebate_amount_limit']}">
-                                        </div>
-                                        <p class="form-control-guide"><i class="mdi mdi-information"></i>例如:设置为 10 时,一个被邀请用户先后购买了售价为 10,20,50,100 的商品,若返点设置为 20% ,则第一次购买返利为 2;第二次为 4;第三次为 4;第四次及之后的购买,邀请人所能获得的返利均为 0(假设设置为在购买时返利)</p>
-                                        <p class="form-control-guide"><i class="mdi mdi-information"></i>在进行第三次返利计算时,按设置应返利订单金额的 20% ,即 10 元。但因已获得历史返利 6 元,则只能获得返利总金额限制与历史返利的差值</p>
-                                        
-                                        <br/>
-                                        
-                                        <button type="submit" class="btn btn-block btn-brand submit_invite_settings">提交</button>
-                                    </div>
-                                </div>
-
-                                <div class="tab-pane fade" id="telegram_settings">
-                                    <nav class="tab-nav margin-top-no">
-                                        <ul class="nav nav-list">
-                                            <li class="active">
-                                                <a data-toggle="tab" href="#telegram_gernal_settings">&nbsp;设置</a>
-                                            </li>
-                                        </ul>
-                                    </nav>
-                                    <div class="tab-pane fade active in" id="telegram_gernal_settings">
-                                        <!-- telegram_add_node -->
-                                        <div class="form-group form-group-label">
-                                            <label class="floating-label">添加节点通知</label>
-                                            <select id="telegram_add_node" class="form-control maxwidth-edit">
-                                                <option value="0" {if $settings['telegram_add_node'] == false}selected{/if}>关闭</option>
-                                                <option value="1" {if $settings['telegram_add_node'] == true}selected{/if}>开启</option>
-                                            </select>
-                                        </div>
-                                        <!-- telegram_add_node_text -->
-                                        <div class="form-group form-group-label">
-                                            <label class="floating-label">添加节点通知文本</label>
-                                            <input class="form-control maxwidth-edit" id="telegram_add_node_text" value="{$settings['telegram_add_node_text']}">
-                                        </div>
-                                        <!-- telegram_update_node -->
-                                        <div class="form-group form-group-label">
-                                            <label class="floating-label">修改节点通知</label>
-                                            <select id="telegram_update_node" class="form-control maxwidth-edit">
-                                                <option value="0" {if $settings['telegram_update_node'] == false}selected{/if}>关闭</option>
-                                                <option value="1" {if $settings['telegram_update_node'] == true}selected{/if}>开启</option>
-                                            </select>
-                                        </div>
-                                        <!-- telegram_update_node_text -->
-                                        <div class="form-group form-group-label">
-                                            <label class="floating-label">修改节点通知文本</label>
-                                            <input class="form-control maxwidth-edit" id="telegram_update_node_text" value="{$settings['telegram_update_node_text']}">
-                                        </div>
-                                        <!-- telegram_delete_node -->
-                                        <div class="form-group form-group-label">
-                                            <label class="floating-label">删除节点通知</label>
-                                            <select id="telegram_delete_node" class="form-control maxwidth-edit">
-                                                <option value="0" {if $settings['telegram_delete_node'] == false}selected{/if}>关闭</option>
-                                                <option value="1" {if $settings['telegram_delete_node'] == true}selected{/if}>开启</option>
-                                            </select>
-                                        </div>
-                                        <!-- telegram_delete_node_text -->
-                                        <div class="form-group form-group-label">
-                                            <label class="floating-label">删除节点通知文本</label>
-                                            <input class="form-control maxwidth-edit" id="telegram_delete_node_text" value="{$settings['telegram_delete_node_text']}">
-                                        </div>
-                                        <!-- telegram_node_gfwed -->
-                                        <div class="form-group form-group-label">
-                                            <label class="floating-label">节点被墙通知</label>
-                                            <select id="telegram_node_gfwed" class="form-control maxwidth-edit">
-                                                <option value="0" {if $settings['telegram_node_gfwed'] == false}selected{/if}>关闭</option>
-                                                <option value="1" {if $settings['telegram_node_gfwed'] == true}selected{/if}>开启</option>
-                                            </select>
-                                        </div>
-                                        <!-- telegram_node_gfwed_text -->
-                                        <div class="form-group form-group-label">
-                                            <label class="floating-label">节点被墙通知文本</label>
-                                            <input class="form-control maxwidth-edit" id="telegram_node_gfwed_text" value="{$settings['telegram_node_gfwed_text']}">
-                                        </div>
-                                        <!-- telegram_node_ungfwed -->
-                                        <div class="form-group form-group-label">
-                                            <label class="floating-label">节点被墙恢复通知</label>
-                                            <select id="telegram_node_ungfwed" class="form-control maxwidth-edit">
-                                                <option value="0" {if $settings['telegram_node_ungfwed'] == false}selected{/if}>关闭</option>
-                                                <option value="1" {if $settings['telegram_node_ungfwed'] == true}selected{/if}>开启</option>
-                                            </select>
-                                        </div>
-                                        <!-- telegram_node_ungfwed_text -->
-                                        <div class="form-group form-group-label">
-                                            <label class="floating-label">节点被墙恢复通知文本</label>
-                                            <input class="form-control maxwidth-edit" id="telegram_node_ungfwed_text" value="{$settings['telegram_node_ungfwed_text']}">
-                                        </div>
-                                        <!-- telegram_node_online -->
-                                        <div class="form-group form-group-label">
-                                            <label class="floating-label">节点恢复上线通知</label>
-                                            <select id="telegram_node_online" class="form-control maxwidth-edit">
-                                                <option value="0" {if $settings['telegram_node_online'] == false}selected{/if}>关闭</option>
-                                                <option value="1" {if $settings['telegram_node_online'] == true}selected{/if}>开启</option>
-                                            </select>
-                                        </div>
-                                        <!-- telegram_node_online_text -->
-                                        <div class="form-group form-group-label">
-                                            <label class="floating-label">节点恢复上线通知文本</label>
-                                            <input class="form-control maxwidth-edit" id="telegram_node_online_text" value="{$settings['telegram_node_online_text']}">
-                                        </div>
-                                        <!-- telegram_node_offline -->
-                                        <div class="form-group form-group-label">
-                                            <label class="floating-label">节点离线通知</label>
-                                            <select id="telegram_node_offline" class="form-control maxwidth-edit">
-                                                <option value="0" {if $settings['telegram_node_offline'] == false}selected{/if}>关闭</option>
-                                                <option value="1" {if $settings['telegram_node_offline'] == true}selected{/if}>开启</option>
-                                            </select>
-                                        </div>
-                                        <!-- telegram_node_offline_text -->
-                                        <div class="form-group form-group-label">
-                                            <label class="floating-label">节点离线通知文本</label>
-                                            <input class="form-control maxwidth-edit" id="telegram_node_offline_text" value="{$settings['telegram_node_offline_text']}">
-                                        </div>
-                                        <!-- telegram_daily_job -->
-                                        <div class="form-group form-group-label">
-                                            <label class="floating-label">每日任务通知</label>
-                                            <select id="telegram_daily_job" class="form-control maxwidth-edit">
-                                                <option value="0" {if $settings['telegram_daily_job'] == false}selected{/if}>关闭</option>
-                                                <option value="1" {if $settings['telegram_daily_job'] == true}selected{/if}>开启</option>
-                                            </select>
-                                        </div>
-                                        <!-- telegram_daily_job_text -->
-                                        <div class="form-group form-group-label">
-                                            <label class="floating-label">每日任务通知文本</label>
-                                            <input class="form-control maxwidth-edit" id="telegram_daily_job_text" value="{$settings['telegram_daily_job_text']}">
-                                        </div>
-                                        <!-- telegram_diary -->
-                                        <div class="form-group form-group-label">
-                                            <label class="floating-label">系统运行状况通知</label>
-                                            <select id="telegram_diary" class="form-control maxwidth-edit">
-                                                <option value="0" {if $settings['telegram_diary'] == false}selected{/if}>关闭</option>
-                                                <option value="1" {if $settings['telegram_diary'] == true}selected{/if}>开启</option>
-                                            </select>
-                                        </div>
-                                        <!-- telegram_diary_text -->
-                                        <div class="form-group form-group-label">
-                                            <label class="floating-label">系统运行状况通知文本</label>
-                                            <input class="form-control maxwidth-edit" id="telegram_diary_text" value="{$settings['telegram_diary_text']}">
-                                        </div>
-                                        <!-- telegram_unbind_kick_member -->
-                                        <div class="form-group form-group-label">
-                                            <label class="floating-label">解绑Telegram账户后自动踢出群组</label>
-                                            <select id="telegram_unbind_kick_member" class="form-control maxwidth-edit">
-                                                <option value="0" {if $settings['telegram_unbind_kick_member'] == false}selected{/if}>关闭</option>
-                                                <option value="1" {if $settings['telegram_unbind_kick_member'] == true}selected{/if}>开启</option>
-                                            </select>
-                                        </div>
-                                        <!-- telegram_group_bound_user -->
-                                        <div class="form-group form-group-label">
-                                            <label class="floating-label">仅允许已绑定Telegram账户的用户加入群组</label>
-                                            <select id="telegram_group_bound_user" class="form-control maxwidth-edit">
-                                                <option value="0" {if $settings['telegram_group_bound_user'] == false}selected{/if}>关闭</option>
-                                                <option value="1" {if $settings['telegram_group_bound_user'] == true}selected{/if}>开启</option>
-                                            </select>
-                                        </div>
-                                        <!-- telegram_show_group_link -->
-                                        <div class="form-group form-group-label">
-                                            <label class="floating-label">启用Telegram机器人显示用户群组链接</label>
-                                            <select id="telegram_show_group_link" class="form-control maxwidth-edit">
-                                                <option value="0" {if $settings['telegram_show_group_link'] == false}selected{/if}>关闭</option>
-                                                <option value="1" {if $settings['telegram_show_group_link'] == true}selected{/if}>开启</option>
-                                            </select>
-                                        </div>
-                                        <!-- telegram_group_link -->
-                                        <div class="form-group form-group-label">
-                                            <label class="floating-label">用户群组链接</label>
-                                            <input class="form-control maxwidth-edit" id="telegram_group_link" value="{$settings['telegram_group_link']}">
-                                        </div>
-
-                                        <button id="submit_telegram_gernal_settings" type="submit" class="btn btn-block btn-brand">提交</button>
-                                    </div>
-                                </div>
-                            </div>
-                        </div>
-                    </div>
-                </div>
-            </div>
-        </div>
-        {include file='dialog.tpl'}
-    </div>
-</main>
-
-{include file='admin/footer.tpl'}
-
-<script>
-    window.addEventListener('load', () => {
-        $$.getElementById('submit_f2f_pay').addEventListener('click', () => {
-            $.ajax({
-                type: "POST",
-                url: "/admin/setting",
-                dataType: "json",
-                data: {
-                    class: 'f2f_pay',
-                    f2f_pay_app_id: $$getValue('f2f_pay_app_id'),
-                    f2f_pay_pid: $$getValue('f2f_pay_pid'),
-                    f2f_pay_public_key: $$getValue('f2f_pay_public_key'),
-                    f2f_pay_private_key: $$getValue('f2f_pay_private_key'),
-                    f2f_pay_notify_url: $$getValue('f2f_pay_notify_url')
-                },
-                success: data => {
-                    $("#result").modal();
-                    $$.getElementById('msg').innerHTML = data.msg;
-                    if (data.ret) {
-                        window.setTimeout("location.href='/admin/setting'", {$config['jump_delay']});
-                    }
-                },
-                error: jqXHR => {
-                    alert(`发生错误:${
-                            jqXHR.status
-                            }`);
-                }
-            })
-        })
-    })
-</script>
-<script>
-    window.addEventListener('load', () => {
-        $$.getElementById('submit_e_pay').addEventListener('click', () => {
-            $.ajax({
-                type: "POST",
-                url: "/admin/setting",
-                dataType: "json",
-                data: {
-                    class: 'e_pay',
-                    epay_url: $$getValue('epay_url'),
-                    epay_pid: $$getValue('epay_pid'),
-                    epay_key: $$getValue('epay_key'),
-                    epay_alipay: $$getValue('epay_alipay'),
-                    epay_wechat: $$getValue('epay_wechat'),
-                    epay_qq: $$getValue('epay_qq'),
-                    epay_usdt: $$getValue('epay_usdt')
-                    
-                },
-                success: data => {
-                    $("#result").modal();
-                    $$.getElementById('msg').innerHTML = data.msg;
-                    if (data.ret) {
-                        window.setTimeout("location.href='/admin/setting'", {$config['jump_delay']});
-                    }
-                },
-                error: jqXHR => {
-                    alert(`发生错误:${
-                            jqXHR.status
-                            }`);
-                }
-            })
-        })
-    })
-</script>
-<script>
-    window.addEventListener('load', () => {
-        $$.getElementById('submit_payment').addEventListener('click', () => {
-            {foreach $payment_gateways as $key => $value}
-            if ($$.getElementById("{$value}_switch").checked) {
-                var {$value} = 1;
-            } else {
-                var {$value} = 0;
-            }
-            {/foreach}
-            
-            $.ajax({
-                type: "POST",
-                url: "/admin/setting/payment",
-                dataType: "json",
-                data: {
-                    {foreach $payment_gateways as $key => $value}
-                    {$value},
-                    {/foreach}
-                    class: 'payment'
-                },
-                success: data => {
-                    $("#result").modal();
-                    $$.getElementById('msg').innerHTML = data.msg;
-                    if (data.ret) {
-                        window.setTimeout("location.href='/admin/setting'", {$config['jump_delay']});
-                    }
-                },
-                error: jqXHR => {
-                    alert(`发生错误:${
-                            jqXHR.status
-                            }`);
-                }
-            })
-        })
-    })
-</script>
-
-<script>
-    window.addEventListener('load', () => {
-        $$.getElementById('submit_vmq_pay').addEventListener('click', () => {
-            $.ajax({
-                type: "POST",
-                url: "/admin/setting",
-                dataType: "json",
-                data: {
-                    class: 'vmq_pay',
-                    vmq_gateway: $$getValue('vmq_gateway'),
-                    vmq_key: $$getValue('vmq_key')
-                },
-                success: data => {
-                    $("#result").modal();
-                    $$.getElementById('msg').innerHTML = data.msg;
-                    if (data.ret) {
-                        window.setTimeout("location.href='/admin/setting'", {$config['jump_delay']});
-                    }
-                },
-                error: jqXHR => {
-                    alert(`发生错误:${
-                            jqXHR.status
-                            }`);
-                }
-            })
-        })
-    })
-</script>
-
-<script>
-    window.addEventListener('load', () => {
-        $$.getElementById('submit_mail').addEventListener('click', () => {
-            $.ajax({
-                type: "POST",
-                url: "/admin/setting",
-                dataType: "json",
-                data: {
-                    class: 'mail',
-                    mail_driver: $$getValue('mail_driver')
-                },
-                success: data => {
-                    $("#result").modal();
-                    $$.getElementById('msg').innerHTML = data.msg;
-                    if (data.ret) {
-                        window.setTimeout("location.href='/admin/setting'", {$config['jump_delay']});
-                    }
-                },
-                error: jqXHR => {
-                    alert(`发生错误:${
-                            jqXHR.status
-                            }`);
-                }
-            })
-        })
-    })
-</script>
-
-<script>
-    window.addEventListener('load', () => {
-        $$.getElementById('submit_smtp').addEventListener('click', () => {
-            $.ajax({
-                type: "POST",
-                url: "/admin/setting",
-                dataType: "json",
-                data: {
-                    class: 'smtp',
-                    smtp_host: $$getValue('smtp_host'),
-                    smtp_username: $$getValue('smtp_username'),
-                    smtp_password: $$getValue('smtp_password'),
-                    smtp_port: $$getValue('smtp_port'),
-                    smtp_name: $$getValue('smtp_name'),
-                    smtp_sender: $$getValue('smtp_sender'),
-                    smtp_ssl: $$getValue('smtp_ssl'),
-                    smtp_bbc: $$getValue('smtp_bbc')
-                },
-                success: data => {
-                    $("#result").modal();
-                    $$.getElementById('msg').innerHTML = data.msg;
-                    if (data.ret) {
-                        window.setTimeout("location.href='/admin/setting'", {$config['jump_delay']});
-                    }
-                },
-                error: jqXHR => {
-                    alert(`发生错误:${
-                            jqXHR.status
-                            }`);
-                }
-            })
-        })
-    })
-</script>
-
-<script>
-    window.addEventListener('load', () => {
-        $$.getElementById('submit_email_test').addEventListener('click', () => {
-            $.ajax({
-                type: "POST",
-                url: "/admin/setting/email",
-                dataType: "json",
-                data: {
-                    recipient: $$getValue('testing_email_recipients')
-                },
-                success: data => {
-                    $("#result").modal();
-                    $$.getElementById('msg').innerHTML = data.msg;
-                    if (data.ret) {
-                        window.setTimeout("location.href='/admin/setting'", {$config['jump_delay']});
-                    }
-                },
-                error: jqXHR => {
-                    alert(`发生错误:${
-                            jqXHR.status
-                            }`);
-                }
-            })
-        })
-    })
-</script>
-
-<script>
-    window.addEventListener('load', () => {
-        $$.getElementById('submit_verify_code').addEventListener('click', () => {
-            $.ajax({
-                type: "POST",
-                url: "/admin/setting",
-                dataType: "json",
-                data: {
-                    class: 'verify_code',
-                    captcha_provider: $$getValue('captcha_provider'),
-                    enable_reg_captcha: $$getValue('enable_reg_captcha'),
-                    enable_login_captcha: $$getValue('enable_login_captcha'),
-                    enable_checkin_captcha: $$getValue('enable_checkin_captcha'),
-                    enable_reset_password_captcha: $$getValue('enable_reset_password_captcha')
-                },
-                success: data => {
-                    $("#result").modal();
-                    $$.getElementById('msg').innerHTML = data.msg;
-                    if (data.ret) {
-                        window.setTimeout("location.href='/admin/setting'", {$config['jump_delay']});
-                    }
-                },
-                error: jqXHR => {
-                    alert(`发生错误:${
-                            jqXHR.status
-                            }`);
-                }
-            })
-        })
-    })
-</script>
-
-<script>
-    window.addEventListener('load', () => {
-        $$.getElementById('submit_geetest').addEventListener('click', () => {
-            $.ajax({
-                type: "POST",
-                url: "/admin/setting",
-                dataType: "json",
-                data: {
-                    class: 'verify_code_geetest',
-                    geetest_id: $$getValue('geetest_id'),
-                    geetest_key: $$getValue('geetest_key')
-                },
-                success: data => {
-                    $("#result").modal();
-                    $$.getElementById('msg').innerHTML = data.msg;
-                    if (data.ret) {
-                        window.setTimeout("location.href='/admin/setting'", {$config['jump_delay']});
-                    }
-                },
-                error: jqXHR => {
-                    alert(`发生错误:${
-                            jqXHR.status
-                            }`);
-                }
-            })
-        })
-    })
-</script>
-
-<script>
-    window.addEventListener('load', () => {
-        $$.getElementById('submit_turnstile').addEventListener('click', () => {
-            $.ajax({
-                type: "POST",
-                url: "/admin/setting",
-                dataType: "json",
-                data: {
-                    class: 'verify_code_turnstile',
-                    turnstile_sitekey: $$getValue('turnstile_sitekey'),
-                    turnstile_secret: $$getValue('turnstile_secret')
-                },
-                success: data => {
-                    $("#result").modal();
-                    $$.getElementById('msg').innerHTML = data.msg;
-                    if (data.ret) {
-                        window.setTimeout("location.href='/admin/setting'", {$config['jump_delay']});
-                    }
-                },
-                error: jqXHR => {
-                    alert(`发生错误:${
-                            jqXHR.status
-                            }`);
-                }
-            })
-        })
-    })
-</script>
-
-<script>
-    window.addEventListener('load', () => {
-        $$.getElementById('submit_mailgun').addEventListener('click', () => {
-            $.ajax({
-                type: "POST",
-                url: "/admin/setting",
-                dataType: "json",
-                data: {
-                    class: 'mailgun',
-                    mailgun_key: $$getValue('mailgun_key'),
-                    mailgun_domain: $$getValue('mailgun_domain'),
-                    mailgun_sender: $$getValue('mailgun_sender')
-                },
-                success: data => {
-                    $("#result").modal();
-                    $$.getElementById('msg').innerHTML = data.msg;
-                    if (data.ret) {
-                        window.setTimeout("location.href='/admin/setting'", {$config['jump_delay']});
-                    }
-                },
-                error: jqXHR => {
-                    alert(`发生错误:${
-                            jqXHR.status
-                            }`);
-                }
-            })
-        })
-    })
-</script>
-
-<script>
-    window.addEventListener('load', () => {
-        $$.getElementById('submit_sendgrid').addEventListener('click', () => {
-            $.ajax({
-                type: "POST",
-                url: "/admin/setting",
-                dataType: "json",
-                data: {
-                    class: 'sendgrid',
-                    sendgrid_key: $$getValue('sendgrid_key'),
-                    sendgrid_sender: $$getValue('sendgrid_sender'),
-                    sendgrid_name: $$getValue('sendgrid_name')
-                },
-                success: data => {
-                    $("#result").modal();
-                    $$.getElementById('msg').innerHTML = data.msg;
-                    if (data.ret) {
-                        window.setTimeout("location.href='/admin/setting'", {$config['jump_delay']});
-                    }
-                },
-                error: jqXHR => {
-                    alert(`发生错误:${
-                            jqXHR.status
-                            }`);
-                }
-            })
-        })
-    })
-</script>
-
-<script>
-    window.addEventListener('load', () => {
-        $$.getElementById('submit_ses').addEventListener('click', () => {
-            $.ajax({
-                type: "POST",
-                url: "/admin/setting",
-                dataType: "json",
-                data: {
-                    class: 'ses',
-                    aws_access_key_id: $$getValue('aws_access_key_id'),
-                    aws_secret_access_key: $$getValue('aws_secret_access_key'),
-                    aws_region: $$getValue('aws_region'),
-                    aws_ses_sender: $$getValue('aws_ses_sender')
-                },
-                success: data => {
-                    $("#result").modal();
-                    $$.getElementById('msg').innerHTML = data.msg;
-                    if (data.ret) {
-                        window.setTimeout("location.href='/admin/setting'", {$config['jump_delay']});
-                    }
-                },
-                error: jqXHR => {
-                    alert(`发生错误:${
-                            jqXHR.status
-                            }`);
-                }
-            })
-        })
-    })
-</script>
-
-<script>
-    window.addEventListener('load', () => {
-        $$.getElementById('submit_payjs_pay').addEventListener('click', () => {
-            $.ajax({
-                type: "POST",
-                url: "/admin/setting",
-                dataType: "json",
-                data: {
-                    class: 'payjs_pay',
-                    payjs_url: $$getValue('payjs_url'),
-                    payjs_mchid: $$getValue('payjs_mchid'),
-                    payjs_key: $$getValue('payjs_key')
-                },
-                success: data => {
-                    $("#result").modal();
-                    $$.getElementById('msg').innerHTML = data.msg;
-                    if (data.ret) {
-                        window.setTimeout("location.href='/admin/setting'", {$config['jump_delay']});
-                    }
-                },
-                error: jqXHR => {
-                    alert(`发生错误:${
-                            jqXHR.status
-                            }`);
-                }
-            })
-        })
-    })
-</script>
-
-<script>
-    window.addEventListener('load', () => {
-        $$.getElementById('submit_paymentwall').addEventListener('click', () => {
-            $.ajax({
-                type: "POST",
-                url: "/admin/setting",
-                dataType: "json",
-                data: {
-                    class: 'paymentwall',
-                    pmw_publickey: $$getValue('pmw_publickey'),
-                    pmw_privatekey: $$getValue('pmw_privatekey'),
-                    pmw_widget: $$getValue('pmw_widget'),
-                    pmw_height: $$getValue('pmw_height')
-                },
-                success: data => {
-                    $("#result").modal();
-                    $$.getElementById('msg').innerHTML = data.msg;
-                    if (data.ret) {
-                        window.setTimeout("location.href='/admin/setting'", {$config['jump_delay']});
-                    }
-                },
-                error: jqXHR => {
-                    alert(`发生错误:${
-                            jqXHR.status
-                            }`);
-                }
-            })
-        })
-    })
-</script>
-
-<script>
-    window.addEventListener('load', () => {
-        $$.getElementById('submit_admin_contact').addEventListener('click', () => {
-            $.ajax({
-                type: "POST",
-                url: "/admin/setting",
-                dataType: "json",
-                data: {
-                    class: 'admin_contact',
-                    enable_admin_contact: $$getValue('enable_admin_contact'),
-                    admin_contact1: $$getValue('admin_contact1'),
-                    admin_contact2: $$getValue('admin_contact2'),
-                    admin_contact3: $$getValue('admin_contact3')
-                },
-                success: data => {
-                    $("#result").modal();
-                    $$.getElementById('msg').innerHTML = data.msg;
-                    if (data.ret) {
-                        window.setTimeout("location.href='/admin/setting'", {$config['jump_delay']});
-                    }
-                },
-                error: jqXHR => {
-                    alert(`发生错误:${
-                            jqXHR.status
-                            }`);
-                }
-            })
-        })
-    })
-</script>
-
-<script>
-    window.addEventListener('load', () => {
-        $$.getElementById('submit_web_customer_service_system').addEventListener('click', () => {
-            $.ajax({
-                type: "POST",
-                url: "/admin/setting",
-                dataType: "json",
-                data: {
-                    class: 'web_customer_service_system',
-                    live_chat: $$getValue('live_chat'),
-                    tawk_id: $$getValue('tawk_id'),
-                    crisp_id: $$getValue('crisp_id'),
-                    livechat_id: $$getValue('livechat_id'),
-                    mylivechat_id: $$getValue('mylivechat_id')
-                },
-                success: data => {
-                    $("#result").modal();
-                    $$.getElementById('msg').innerHTML = data.msg;
-                    if (data.ret) {
-                        window.setTimeout("location.href='/admin/setting'", {$config['jump_delay']});
-                    }
-                },
-                error: jqXHR => {
-                    alert(`发生错误:${
-                            jqXHR.status
-                            }`);
-                }
-            })
-        })
-    })
-</script>
-
-<script>
-    window.addEventListener('load', () => {
-        $$.getElementById('submit_theadpay').addEventListener('click', () => {
-            $.ajax({
-                type: "POST",
-                url: "/admin/setting",
-                dataType: "json",
-                data: {
-                    class: 'theadpay',
-                    theadpay_url: $$getValue('theadpay_url'),
-                    theadpay_mchid: $$getValue('theadpay_mchid'),
-                    theadpay_key: $$getValue('theadpay_key')
-                },
-                success: data => {
-                    $("#result").modal();
-                    $$.getElementById('msg').innerHTML = data.msg;
-                    if (data.ret) {
-                        window.setTimeout("location.href='/admin/setting'", {$config['jump_delay']});
-                    }
-                },
-                error: jqXHR => {
-                    alert(`发生错误:${
-                            jqXHR.status
-                            }`);
-                }
-            })
-        })
-    })
-</script>
-
-<script>
-    window.addEventListener('load', () => {
-        $$.getElementById('submit_stripe').addEventListener('click', () => {
-            $.ajax({
-                type: "POST",
-                url: "/admin/setting",
-                dataType: "json",
-                data: {
-                    class: 'stripe',
-                    stripe_card: $$getValue('stripe_card_select'),
-                    stripe_currency: $$getValue('stripe_currency'),
-                    stripe_min_recharge: $$getValue('stripe_min_recharge'),
-                    stripe_max_recharge: $$getValue('stripe_max_recharge'),
-                    stripe_pk: $$getValue('stripe_pk'),
-                    stripe_sk: $$getValue('stripe_sk'),
-                    stripe_webhook_key: $$getValue('stripe_webhook_key')
-                },
-                success: data => {
-                    $("#result").modal();
-                    $$.getElementById('msg').innerHTML = data.msg;
-                    if (data.ret) {
-                        window.setTimeout("location.href='/admin/setting'", {$config['jump_delay']});
-                    }
-                },
-                error: jqXHR => {
-                    alert(`发生错误:${
-                            jqXHR.status
-                            }`);
-                }
-            })
-        })
-    })
-</script>
-
-<script>
-    window.addEventListener('load', () => {
-        $$.getElementById('submit_custom_background_image').addEventListener('click', () => {
-            $.ajax({
-                type: "POST",
-                url: "/admin/setting",
-                dataType: "json",
-                data: {
-                    class: 'background_image',
-                    user_center_bg: $$getValue('user_center_bg'),
-                    admin_center_bg: $$getValue('admin_center_bg'),
-                    user_center_bg_addr: $$getValue('user_center_bg_addr'),
-                    admin_center_bg_addr: $$getValue('admin_center_bg_addr')
-                },
-                success: data => {
-                    $("#result").modal();
-                    $$.getElementById('msg').innerHTML = data.msg;
-                    if (data.ret) {
-                        window.setTimeout("location.href='/admin/setting'", {$config['jump_delay']});
-                    }
-                },
-                error: jqXHR => {
-                    alert(`发生错误:${
-                            jqXHR.status
-                            }`);
-                }
-            })
-        })
-    })
-</script>
-
-<script>
-    window.addEventListener('load', () => {
-        $('.submit_register_settings').click( () => {
-            $.ajax({
-                type: "POST",
-                url: "/admin/setting",
-                dataType: "json",
-                data: {
-                    class: 'register',
-                    reg_mode: $$getValue('reg_mode'),
-                    reg_email_verify: $$getValue('reg_email_verify'),
-                    email_verify_ttl: $$getValue('email_verify_ttl'),
-                    email_verify_ip_limit: $$getValue('email_verify_ip_limit'),
-                    random_group: $$getValue('random_group'),
-                    min_port: $$getValue('min_port'),
-                    max_port: $$getValue('max_port'),
-                    sign_up_for_free_traffic: $$getValue('sign_up_for_free_traffic'),
-                    free_user_reset_day: $$getValue('free_user_reset_day'),
-                    free_user_reset_bandwidth: $$getValue('free_user_reset_bandwidth'),
-                    sign_up_for_free_time: $$getValue('sign_up_for_free_time'),
-                    sign_up_for_class: $$getValue('sign_up_for_class'),
-                    sign_up_for_class_time: $$getValue('sign_up_for_class_time'),
-                    sign_up_for_invitation_codes: $$getValue('sign_up_for_invitation_codes'),
-                    connection_device_limit: $$getValue('connection_device_limit'),
-                    connection_rate_limit: $$getValue('connection_rate_limit'),
-                    sign_up_for_method: $$getValue('sign_up_for_method'),
-                    sign_up_for_protocol: $$getValue('sign_up_for_protocol'),
-                    sign_up_for_protocol_param: $$getValue('sign_up_for_protocol_param'),
-                    sign_up_for_obfs: $$getValue('sign_up_for_obfs'),
-                    sign_up_for_obfs_param: $$getValue('sign_up_for_obfs_param'),
-                    mu_suffix: $$getValue('mu_suffix'),
-                    mu_regex: $$getValue('mu_regex'),
-                    reg_forbidden_ip: $$getValue('reg_forbidden_ip'),
-                    reg_forbidden_port: $$getValue('reg_forbidden_port'),
-                    sign_up_for_daily_report: $$getValue('sign_up_for_daily_report'),
-                    enable_reg_im: $$getValue('enable_reg_im')
-                },
-                success: data => {
-                    $("#result").modal();
-                    $$.getElementById('msg').innerHTML = data.msg;
-                    if (data.ret) {
-                        window.setTimeout("location.href='/admin/setting'", {$config['jump_delay']});
-                    }
-                },
-                error: jqXHR => {
-                    alert(`发生错误:${
-                            jqXHR.status
-                            }`);
-                }
-            })
-        })
-    })
-</script>
-
-<script>
-    window.addEventListener('load', () => {
-        $('.submit_invite_settings').click( () => {
-            $.ajax( {
-                type: "POST",
-                url: "/admin/setting",
-                dataType: "json",
-                data: {
-                    class: 'invite',
-                    invitation_mode: $$getValue('invitation_mode'),
-                    invite_rebate_mode: $$getValue('invite_rebate_mode'),
-                    rebate_ratio: $$getValue('rebate_ratio'),
-                    rebate_frequency_limit: $$getValue('rebate_frequency_limit'),
-                    rebate_amount_limit: $$getValue('rebate_amount_limit'),
-                    rebate_time_range_limit: $$getValue('rebate_time_range_limit'),
-                    invitation_to_register_balance_reward: $$getValue('invitation_to_register_balance_reward'),
-                    invitation_to_register_traffic_reward: $$getValue('invitation_to_register_traffic_reward'),
-                    invite_price: $$getValue('invite_price'),
-                    custom_invite_price: $$getValue('custom_invite_price')
-                },
-                success: data => {
-                    $("#result").modal();
-                    $$.getElementById('msg').innerHTML = data.msg;
-                    if (data.ret) {
-                        window.setTimeout("location.href='/admin/setting'", {$config['jump_delay']});
-                    }
-                },
-                error: jqXHR => {
-                    alert(`发生错误:${
-                            jqXHR.status
-                            }`);
-                }
-            } )
-        } )
-    } )
-</script>
-
-<script>
-    window.addEventListener('load', () => {
-        $$.getElementById('submit_telegram_gernal_settings').addEventListener('click', () => {
-            $.ajax({
-                type: "POST",
-                url: "/admin/setting",
-                dataType: "json",
-                data: {
-                    class: 'telegram',
-                    telegram_add_node: $$getValue('telegram_add_node'),
-                    telegram_add_node_text: $$getValue('telegram_add_node_text'),
-                    telegram_update_node: $$getValue('telegram_update_node'),
-                    telegram_update_node_text: $$getValue('telegram_update_node_text'),
-                    telegram_delete_node: $$getValue('telegram_delete_node'),
-                    telegram_delete_node_text: $$getValue('telegram_delete_node_text'),
-                    telegram_node_gfwed: $$getValue('telegram_node_gfwed'),
-                    telegram_node_gfwed_text: $$getValue('telegram_node_gfwed_text'),
-                    telegram_node_ungfwed: $$getValue('telegram_node_ungfwed'),
-                    telegram_node_ungfwed_text: $$getValue('telegram_node_ungfwed_text'),
-                    telegram_node_online: $$getValue('telegram_node_online'),
-                    telegram_node_online_text: $$getValue('telegram_node_online_text'),
-                    telegram_node_offline: $$getValue('telegram_node_offline'),
-                    telegram_node_offline_text: $$getValue('telegram_node_offline_text'),
-                    telegram_daily_job: $$getValue('telegram_daily_job'),
-                    telegram_daily_job_text: $$getValue('telegram_daily_job_text'),
-                    telegram_diary: $$getValue('telegram_diary'),
-                    telegram_diary_text: $$getValue('telegram_diary_text'),
-                    telegram_unbind_kick_member: $$getValue('telegram_unbind_kick_member'),
-                    telegram_group_bound_user: $$getValue('telegram_group_bound_user'),
-                    telegram_show_group_link: $$getValue('telegram_show_group_link'),
-                    telegram_group_link: $$getValue('telegram_group_link')
-                },
-                success: data => {
-                    $("#result").modal();
-                    $$.getElementById('msg').innerHTML = data.msg;
-                    if (data.ret) {
-                        window.setTimeout("location.href='/admin/setting'", {$config['jump_delay']});
-                    }
-                },
-                error: jqXHR => {
-                    alert(`发生错误:${
-                            jqXHR.status
-                            }`);
-                }
-            })
-        })
-    })
-</script>

+ 0 - 90
resources/views/material/admin/shop/bought.tpl

@@ -1,90 +0,0 @@
-{include file='admin/main.tpl'}
-
-<main class="content">
-    <div class="content-header ui-content-header">
-        <div class="container">
-            <h1 class="content-heading">购买记录</h1>
-        </div>
-    </div>
-    <div class="container">
-        <div class="col-lg-12 col-sm-12">
-            <section class="content-inner margin-top-no">
-                <div class="card">
-                    <div class="card-main">
-                        <div class="card-inner">
-                            <p>系统中所有购买记录。</p>
-                            <p>显示表项:
-                                {include file='table/checkbox.tpl'}
-                            </p>
-                        </div>
-                    </div>
-                </div>
-                <div class="table-responsive">
-                    {include file='table/table.tpl'}
-                </div>
-                <div aria-hidden="true" class="modal modal-va-middle fade" id="delete_modal" role="dialog"
-                     tabindex="-1">
-                    <div class="modal-dialog modal-xs">
-                        <div class="modal-content">
-                            <div class="modal-heading">
-                                <a class="modal-close" data-dismiss="modal">×</a>
-                                <h2 class="modal-title">确认要退订?</h2>
-                            </div>
-                            <div class="modal-inner">
-                                <p>请您确认。</p>
-                            </div>
-                            <div class="modal-footer">
-                                <p class="text-right">
-                                    <button class="btn btn-flat btn-brand-accent waves-attach waves-effect"
-                                            data-dismiss="modal" type="button">取消
-                                    </button>
-                                    <button class="btn btn-flat btn-brand-accent waves-attach" data-dismiss="modal"
-                                            id="delete_input" type="button">确定
-                                    </button>
-                                </p>
-                            </div>
-                        </div>
-                    </div>
-                </div>
-                {include file='dialog.tpl'}
-        </div>
-    </div>
-</main>
-
-{include file='admin/footer.tpl'}
-
-<script>
-    function delete_modal_show(id) {
-        deleteid = id;
-        $("#delete_modal").modal();
-    }
-    {include file='table/js_1.tpl'}
-    window.addEventListener('load', () => {
-        {include file='table/js_2.tpl'}
-        function delete_id() {
-            $.ajax({
-                type: "DELETE",
-                url: "/admin/bought",
-                dataType: "json",
-                data: {
-                    id: deleteid
-                },
-                success: data => {
-                    if (data.ret) {
-                        $("#result").modal();
-                        $$.getElementById('msg').innerHTML = data.msg;
-                        $$.getElementById(`row_delete_${ldelim}deleteid{rdelim}`).setAttribute('disabled', 'true')
-                    } else {
-                        $("#result").modal();
-                        $$.getElementById('msg').innerHTML = data.msg;
-                    }
-                },
-                error: jqXHR => {
-                    $("#result").modal();
-                    $$.getElementById('msg').innerHTML = `${ldelim}data.msg{rdelim} 发生错误了`;
-                }
-            });
-        }
-        $$.getElementById('delete_input').addEventListener('click', delete_id);
-    })
-</script>

+ 0 - 238
resources/views/material/admin/shop/create.tpl

@@ -1,238 +0,0 @@
-{include file='admin/main.tpl'}
-
-<main class="content">
-    <div class="content-header ui-content-header">
-        <div class="container">
-            <h1 class="content-heading">添加商品</h1>
-        </div>
-    </div>
-    <div class="container">
-        <div class="col-lg-12 col-sm-12">
-            <section class="content-inner margin-top-no">
-                <div class="card">
-                    <div class="card-main">
-                        <div class="card-inner">
-                            <div class="form-group form-group-label">
-                                <label class="floating-label" for="name">名称</label>
-                                <input class="form-control maxwidth-edit" id="name" type="text">
-                            </div>
-                            <div class="form-group form-group-label">
-                                <label class="floating-label" for="price">价格</label>
-                                <input class="form-control maxwidth-edit" id="price" type="text">
-                            </div>
-                            <div class="form-group form-group-label">
-                                <label class="floating-label" for="auto_renew">自动续订天数</label>
-                                <input class="form-control maxwidth-edit" id="auto_renew" type="text" value="0">
-                                <p class="form-control-guide"><i class="mdi mdi-information"></i>0为不允许自动续订,其他为到了那么多天之后就会自动从用户的账户上划钱抵扣
-                                </p>
-                            </div>
-                        </div>
-                    </div>
-                </div>
-                <div class="card">
-                    <div class="card-main">
-                        <div class="card-inner">
-                            <div class="form-group form-group-label">
-                                <label class="floating-label" for="bandwidth">流量(GB)</label>
-                                <input class="form-control maxwidth-edit" id="bandwidth" type="text">
-                            </div>
-                            <div class="form-group form-group-label">
-                                <div class="checkbox switch">
-                                    <label for="auto_reset_bandwidth">
-                                        <input class="access-hide" id="auto_reset_bandwidth" type="checkbox"><span
-                                                class="switch-toggle"></span>续费时自动重置用户流量为上面这个流量值
-                                    </label>
-                                </div>
-                            </div>
-
-                        </div>
-                    </div>
-                </div>
-                <div class="card">
-                    <div class="card-main">
-                        <div class="card-inner">
-                            <div class="form-group form-group-label">
-                                <label class="floating-label" for="traffic-package-min">最低可购买用户等级</label>
-                                <input class="form-control maxwidth-edit" id="traffic-package-min" type="text">
-                            </div>
-                            <div class="form-group form-group-label">
-                                <label class="floating-label" for="traffic-package-max">最高可购买用户等级</label>
-                                <input class="form-control maxwidth-edit" id="traffic-package-max" type="text">
-                            </div>
-                            <div class="form-group form-group-label">
-                                <div class="checkbox switch">
-                                    <label for="traffic-package-enable">
-                                        <input class="access-hide" id="traffic-package-enable" type="checkbox"><span
-                                                class="switch-toggle"></span>是否设置此商品为流量叠加包
-                                    </label>
-                                    <p class="form-control-guide">
-                                        <i class="mdi mdi-information"></i>
-                                        设置为流量叠加包后除购买时获得流量外的设置无效
-                                    </p>
-                                </div>
-                            </div>
-
-                        </div>
-                    </div>
-                </div>
-                <div class="card">
-                    <div class="card-main">
-                        <div class="card-inner">
-                            <div class="form-group form-group-label">
-                                <label class="floating-label" for="expire">账户有效期天数</label>
-                                <input class="form-control maxwidth-edit" id="expire" type="text" value="0">
-                            </div>
-                        </div>
-                    </div>
-                </div>
-                <div class="card">
-                    <div class="card-main">
-                        <div class="card-inner">
-                            <div class="form-group form-group-label">
-                                <label class="floating-label" for="class">等级</label>
-                                <input class="form-control maxwidth-edit" id="class" type="text" value="0">
-                            </div>
-                            <div class="form-group form-group-label">
-                                <label class="floating-label" for="class_expire">等级有效期天数</label>
-                                <input class="form-control maxwidth-edit" id="class_expire" type="text" value="0">
-                            </div>
-                            <p class="form-control-guide"><i class="mdi mdi-information"></i>如需使用等级功能,请同时填写【等级】和【等级有效期天数】这两个项目</p>
-                        </div>
-                    </div>
-                </div>
-                <div class="card">
-                    <div class="card-main">
-                        <div class="card-inner">
-                            <div class="form-group form-group-label">
-                                <label class="floating-label" for="reset_exp">多少天内</label>
-                                <input class="form-control maxwidth-edit" id="reset_exp" type="number" value="0">
-                            </div>
-                            <div class="form-group form-group-label">
-                                <label class="floating-label" for="reset">每多少天</label>
-                                <input class="form-control maxwidth-edit" id="reset" type="number" value="0">
-                            </div>
-                            <div class="form-group form-group-label">
-                                <label class="floating-label" for="reset_value">重置流量为多少G</label>
-                                <input class="form-control maxwidth-edit" id="reset_value" type="number" value="0">
-                            </div>
-                        </div>
-                    </div>
-                </div>
-                <div class="card">
-                    <div class="card-main">
-                        <div class="card-inner">
-                            <div class="form-group form-group-label">
-                                <label class="floating-label" for="speedlimit">端口限速</label>
-                                <input class="form-control maxwidth-edit" id="speedlimit" type="number" value="0">
-                            </div>
-                            <div class="form-group form-group-label">
-                                <label class="floating-label" for="connector">IP限制</label>
-                                <input class="form-control maxwidth-edit" id="connector" type="number" value="0">
-                            </div>
-                        </div>
-                    </div>
-                </div>
-                <div class="card">
-                    <div class="card-main">
-                        <div class="card-inner">
-                            <div class="form-group form-group-label">
-                                <label class="floating-label" for="content_extra">服务支持</label>
-                                <input class="form-control maxwidth-edit" id="content_extra" type="text" value="">
-                                <p class="form-control-guide"><i class="mdi mdi-information"></i>例:<code>check-全球节点分布;clear-快速客服响应</code>,减号左边为icon代号右边为文字,以;隔开
-                                </p>
-                                <p class="form-control-guide">icon代号参阅:<a
-                                            href="https://materialdesignicons.com/">Material Design Icons</a>
-                                </p>
-                            </div>
-                        </div>
-                    </div>
-                </div>
-                <div class="card">
-                    <div class="card-main">
-                        <div class="card-inner">
-                            <div class="form-group">
-                                <div class="row">
-                                    <div class="col-md-10 col-md-push-1">
-                                        <button id="submit" type="submit"
-                                                class="btn btn-block btn-brand waves-attach waves-light">添加
-                                        </button>
-                                    </div>
-                                </div>
-                            </div>
-                        </div>
-                    </div>
-                </div>
-                {include file='dialog.tpl'}
-        </div>
-    </div>
-</main>
-
-{include file='admin/footer.tpl'}
-
-<script>
-    window.addEventListener('load', () => {
-        function submit() {
-            if ($$.getElementById('auto_reset_bandwidth').checked) {
-                var auto_reset_bandwidth = 1;
-            } else {
-                var auto_reset_bandwidth = 0;
-            }
-            let contentExtra = $$getValue('content_extra');
-            if (contentExtra === '') {
-                contentExtra = 'check-全球节点分布;check-快速客服响应;check-全平台客户端';
-            }
-            let data = {
-                name: $$getValue('name'),
-                auto_reset_bandwidth,
-                price: $$getValue('price'),
-                auto_renew: $$getValue('auto_renew'),
-                bandwidth: $$getValue('bandwidth'),
-                speedlimit: $$getValue('speedlimit'),
-                connector: $$getValue('connector'),
-                expire: $$getValue('expire'),
-                class: $$getValue('class'),
-                class_expire: $$getValue('class_expire'),
-                reset: $$getValue('reset'),
-                reset_value: $$getValue('reset_value'),
-                reset_exp: $$getValue('reset_exp'),
-                content_extra: contentExtra,
-            }
-            if ($$.getElementById('traffic-package-enable').checked) {
-                data.traffic_package = {
-                    class: {
-                        min: $$getValue('traffic-package-min'),
-                        max: $$getValue('traffic-package-max')
-                    }
-                }
-            }
-            $.ajax({
-                type: "POST",
-                url: "/admin/shop",
-                dataType: "json",
-                data,
-                success: data => {
-                    if (data.ret) {
-                        $("#result").modal();
-                        $$.getElementById('msg').innerHTML = data.msg;
-                        window.setTimeout("location.href=top.document.referrer", {$config['jump_delay']});
-                    } else {
-                        $("#result").modal();
-                        $$.getElementById('msg').innerHTML = data.msg;
-                    }
-                },
-                error: jqXHR => {
-                    $("#result").modal();
-                    $$.getElementById('msg').innerHTML = `发生错误:${
-                            jqXHR.status
-                            }`;
-                }
-            });
-        }
-        $("html").keydown(event => {
-            if (event.keyCode == 13) {
-                submit();
-            }
-        });
-        $$.getElementById('submit').addEventListener('click', submit);
-    })
-</script>

+ 0 - 251
resources/views/material/admin/shop/edit.tpl

@@ -1,251 +0,0 @@
-{include file='admin/main.tpl'}
-
-<main class="content">
-    <div class="content-header ui-content-header">
-        <div class="container">
-            <h1 class="content-heading">编辑商品</h1>
-        </div>
-    </div>
-    <div class="container">
-        <div class="col-lg-12 col-sm-12">
-            <section class="content-inner margin-top-no">
-                <div class="card">
-                    <div class="card-main">
-                        <div class="card-inner">
-                            <div class="form-group form-group-label">
-                                <label class="floating-label" for="name">名称</label>
-                                <input class="form-control maxwidth-edit" id="name" type="text" value="{$shop->name}">
-                            </div>
-                            <div class="form-group form-group-label">
-                                <label class="floating-label" for="price">价格</label>
-                                <input class="form-control maxwidth-edit" id="price" type="text" value="{$shop->price}">
-                            </div>
-                            <div class="form-group form-group-label">
-                                <label class="floating-label" for="auto_renew">自动续订天数</label>
-                                <input class="form-control maxwidth-edit" id="auto_renew" type="text"
-                                       value="{$shop->auto_renew}">
-                                <p class="form-control-guide"><i class="mdi mdi-information"></i>0为不允许自动续订,其他为到了那么多天之后就会自动从用户的账户上划钱抵扣
-                                </p>
-                            </div>
-                        </div>
-                    </div>
-                </div>
-                <div class="card">
-                    <div class="card-main">
-                        <div class="card-inner">
-                            <div class="form-group form-group-label">
-                                <label class="floating-label" for="bandwidth">流量(GB)</label>
-                                <input class="form-control maxwidth-edit" id="bandwidth" type="text"
-                                       value="{$shop->bandwidth()}">
-                            </div>
-                            <div class="form-group form-group-label">
-                                <div class="checkbox switch">
-                                    <label for="auto_reset_bandwidth">
-                                        <input {if $shop->auto_reset_bandwidth==1}checked{/if} class="access-hide"
-                                               id="auto_reset_bandwidth" type="checkbox"><span
-                                                class="switch-toggle"></span>续费时自动重置用户流量为上面这个流量值
-                                    </label>
-                                </div>
-                            </div>
-                        </div>
-                    </div>
-                </div>
-                <div class="card">
-                    <div class="card-main">
-                        <div class="card-inner">
-                            <div class="form-group form-group-label">
-                                <label class="floating-label" for="traffic-package-min">最低可购买用户等级</label>
-                                <input class="form-control maxwidth-edit" id="traffic-package-min" type="text"
-                                value="{if $shop->trafficPackage()}{$shop->content['traffic_package']['class']['min']}{else}0{/if}">
-                            </div>
-                            <div class="form-group form-group-label">
-                                <label class="floating-label" for="traffic-package-max">最高可购买用户等级</label>
-                                <input class="form-control maxwidth-edit" id="traffic-package-max" type="text"
-                                value="{if $shop->trafficPackage()}{$shop->content['traffic_package']['class']['max']}{else}0{/if}">
-                            </div>
-                            <div class="form-group form-group-label">
-                                <div class="checkbox switch">
-                                    <label for="traffic-package-enable">
-                                        <input {if $shop->trafficPackage()}checked{/if} class="access-hide" id="traffic-package-enable" type="checkbox">
-                                        <span class="switch-toggle"></span>是否设置此商品为流量叠加包
-                                    </label>
-                                    <p class="form-control-guide">
-                                        <i class="mdi mdi-information"></i>
-                                        设置为流量叠加包后除购买时获得流量外的设置无效
-                                    </p>
-                                </div>
-                            </div>
-                        </div>
-                    </div>
-                </div>
-                <div class="card">
-                    <div class="card-main">
-                        <div class="card-inner">
-                            <div class="form-group form-group-label">
-                                <label class="floating-label" for="expire">账户有效期天数</label>
-                                <input class="form-control maxwidth-edit" id="expire" type="text"
-                                       value="{$shop->expire()}">
-                            </div>
-                        </div>
-                    </div>
-                </div>
-                <div class="card">
-                    <div class="card-main">
-                        <div class="card-inner">
-                            <div class="form-group form-group-label">
-                                <label class="floating-label" for="class">等级</label>
-                                <input class="form-control maxwidth-edit" id="class" type="text"
-                                       value="{$shop->userClass()}">
-                            </div>
-                            <div class="form-group form-group-label">
-                                <label class="floating-label" for="class_expire">等级有效期天数</label>
-                                <input class="form-control maxwidth-edit" id="class_expire" type="text"
-                                       value="{$shop->classExpire()}">
-                            </div>
-                            <p class="form-control-guide"><i class="mdi mdi-information"></i>如需使用等级功能,请同时填写【等级】和【等级有效期天数】这两个项目</p>
-                        </div>
-                    </div>
-                </div>
-                <div class="card">
-                    <div class="card-main">
-                        <div class="card-inner">
-                            <div class="form-group form-group-label">
-                                <label class="floating-label" for="reset_exp">多少天内</label>
-                                <input class="form-control maxwidth-edit" id="reset_exp" type="number"
-                                       value="{$shop->resetExp()}">
-                            </div>
-                            <div class="form-group form-group-label">
-                                <label class="floating-label" for="reset">每多少天</label>
-                                <input class="form-control maxwidth-edit" id="reset" type="number"
-                                       value="{$shop->reset()}">
-                            </div>
-                            <div class="form-group form-group-label">
-                                <label class="floating-label" for="reset_value">重置流量为多少G</label>
-                                <input class="form-control maxwidth-edit" id="reset_value" type="number"
-                                       value="{$shop->resetValue()}">
-                            </div>
-                        </div>
-                    </div>
-                </div>
-                <div class="card">
-                    <div class="card-main">
-                        <div class="card-inner">
-                            <div class="form-group form-group-label">
-                                <label class="floating-label" for="speedlimit">端口限速</label>
-                                <input class="form-control maxwidth-edit" id="speedlimit" type="number"
-                                       value="{$shop->speedlimit()}">
-                            </div>
-                            <div class="form-group form-group-label">
-                                <label class="floating-label" for="connector">IP限制</label>
-                                <input class="form-control maxwidth-edit" id="connector" type="number"
-                                       value="{$shop->connector()}">
-                            </div>
-                        </div>
-                    </div>
-                </div>
-                <div class="card">
-                    <div class="card-main">
-                        <div class="card-inner">
-                            <div class="form-group form-group-label">
-                                <label class="floating-label" for="content_extra">服务支持</label>
-                                <input class="form-control maxwidth-edit" id="content_extra" type="text"
-                                       value="{foreach $shop->contentExtra() as $service}{$service[0]}-{$service[1]}{if $service@last}{else};{/if}{/foreach}">
-                                <p class="form-control-guide"><i class="mdi mdi-information"></i>例:<code>check-全球节点分布;clear-快速客服响应</code>,减号左边为icon代号右边为文字,以;隔开
-                                </p>
-                                <p class="form-control-guide">icon代号参阅:<a
-                                            href="https://materialdesignicons.com/">Material Design Icons</a>
-                                </p>
-                            </div>
-                        </div>
-                    </div>
-                </div>
-                <div class="card">
-                    <div class="card-main">
-                        <div class="card-inner">
-
-                            <div class="form-group">
-                                <div class="row">
-                                    <div class="col-md-10 col-md-push-1">
-                                        <button id="submit" type="submit"
-                                                class="btn btn-block btn-brand waves-attach waves-light">保存
-                                        </button>
-                                    </div>
-                                </div>
-                            </div>
-                        </div>
-                    </div>
-                </div>
-                {include file='dialog.tpl'}
-        </div>
-    </div>
-</main>
-
-{include file='admin/footer.tpl'}
-
-<script>
-    window.addEventListener('load', () => {
-        function submit() {
-            if ($$.getElementById('auto_reset_bandwidth').checked) {
-                var auto_reset_bandwidth = 1;
-            } else {
-                var auto_reset_bandwidth = 0;
-            }
-            let contentExtra = $$getValue('content_extra');
-            if (contentExtra === '' || contentExtra === '-') {
-                contentExtra = 'check-全球节点分布;check-快速客服响应;check-全平台客户端';
-            }
-            let data = {
-                name: $$getValue('name'),
-                auto_reset_bandwidth,
-                price: $$getValue('price'),
-                auto_renew: $$getValue('auto_renew'),
-                bandwidth: $$getValue('bandwidth'),
-                speedlimit: $$getValue('speedlimit'),
-                connector: $$getValue('connector'),
-                expire: $$getValue('expire'),
-                class: $$getValue('class'),
-                class_expire: $$getValue('class_expire'),
-                reset: $$getValue('reset'),
-                reset_value: $$getValue('reset_value'),
-                reset_exp: $$getValue('reset_exp'),
-                content_extra: contentExtra,
-            }
-            if ($$.getElementById('traffic-package-enable').checked) {
-                data.traffic_package = {
-                    class: {
-                        min: $$getValue('traffic-package-min'),
-                        max: $$getValue('traffic-package-max')
-                    }
-                }
-            }
-            $.ajax({
-                type: "PUT",
-                url: "/admin/shop/{$shop->id}",
-                dataType: "json",
-                data,
-                success: data => {
-                    if (data.ret) {
-                        $("#result").modal();
-                        $$.getElementById('msg').innerHTML = data.msg;
-                        window.setTimeout("location.href='/admin/shop'", {$config['jump_delay']});
-                    } else {
-                        $("#result").modal();
-                        $$.getElementById('msg').innerHTML = data.msg;
-                    }
-                },
-                error: jqXHR => {
-                    $("#result").modal();
-                    $$.getElementById('msg').innerHTML = `发生错误:${
-                            jqXHR.status
-                            }`;
-                }
-            });
-        }
-        $("html").keydown(event => {
-            if (event.keyCode === 13) {
-                login();
-            }
-        });
-        $$.getElementById('submit').addEventListener('click', submit);
-    })
-</script>

+ 0 - 98
resources/views/material/admin/shop/index.tpl

@@ -1,98 +0,0 @@
-{include file='admin/main.tpl'}
-
-<main class="content">
-    <div class="content-header ui-content-header">
-        <div class="container">
-            <h1 class="content-heading">商品列表</h1>
-        </div>
-    </div>
-    <div class="container">
-        <div class="col-lg-12 col-sm-12">
-            <section class="content-inner margin-top-no">
-                <div class="card">
-                    <div class="card-main">
-                        <div class="card-inner">
-                            <p>系统中所有商品的列表。</p>
-                            <p>显示表项:
-                                {include file='table/checkbox.tpl'}
-                            </p>
-                        </div>
-                    </div>
-                </div>
-                <div class="table-responsive">
-                    {include file='table/table.tpl'}
-                </div>
-                <div class="fbtn-container">
-                    <div class="fbtn-inner">
-                        <a class="fbtn fbtn-lg fbtn-brand-accent waves-attach waves-circle waves-light"
-                           href="/admin/shop/create">+</a>
-
-                    </div>
-                </div>
-                <div aria-hidden="true" class="modal modal-va-middle fade" id="delete_modal" role="dialog"
-                     tabindex="-1">
-                    <div class="modal-dialog modal-xs">
-                        <div class="modal-content">
-                            <div class="modal-heading">
-                                <a class="modal-close" data-dismiss="modal">×</a>
-                                <h2 class="modal-title">确认要下架?</h2>
-                            </div>
-                            <div class="modal-inner">
-                                <p>提示:下架会关闭所有购买过的此套餐的自动续费!</p>
-                                <p>请您确认。</p>
-                            </div>
-                            <div class="modal-footer">
-                                <p class="text-right">
-                                    <button class="btn btn-flat btn-brand-accent waves-attach waves-effect"
-                                            data-dismiss="modal" type="button">取消
-                                    </button>
-                                    <button class="btn btn-flat btn-brand-accent waves-attach" data-dismiss="modal"
-                                            id="delete_input" type="button">确定
-                                    </button>
-                                </p>
-                            </div>
-                        </div>
-                    </div>
-                </div>
-                {include file='dialog.tpl'}
-        </div>
-    </div>
-</main>
-
-{include file='admin/footer.tpl'}
-
-<script>
-    function delete_modal_show(id) {
-        deleteid = id;
-        $("#delete_modal").modal();
-    }
-    {include file='table/js_1.tpl'}
-    window.addEventListener('load', () => {
-        {include file='table/js_2.tpl'}
-        function delete_id() {
-            $.ajax({
-                type: "DELETE",
-                url: "/admin/shop",
-                dataType: "json",
-                data: {
-                    id: deleteid
-                },
-                success: data => {
-                    if (data.ret) {
-                        $("#result").modal();
-                        $$.getElementById('msg').innerHTML = data.msg;
-                        $$.getElementById(`row_delete_${ldelim}deleteid{rdelim}`).setAttribute('disabled', 'true')
-                    } else {
-                        $("#result").modal();
-                        $$.getElementById('msg').innerHTML = data.msg;
-                    }
-                },
-                error: jqXHR => {
-                    $("#result").modal();
-                    $$.getElementById('msg').innerHTML = `${ldelim}data.msg{rdelim} 发生了错误。`;
-                }
-            });
-        }
-        $$.getElementById('delete_input').addEventListener('click', delete_id);
-    })
-</script>

+ 0 - 36
resources/views/material/admin/subscribe.tpl

@@ -1,36 +0,0 @@
-{include file='admin/main.tpl'}
-
-<main class="content">
-    <div class="content-header ui-content-header">
-        <div class="container">
-            <h1 class="content-heading">订阅记录</h1>
-        </div>
-    </div>
-    <div class="container">
-        <div class="col-lg-12 col-sm-12">
-            <section class="content-inner margin-top-no">
-
-                <div class="card">
-                    <div class="card-main">
-                        <div class="card-inner">
-                            <p>这里是所有用户最近 {$config['subscribeLog_keep_days']} 天的订阅记录。</p>
-                            <p>显示表项: {include file='table/checkbox.tpl'}</p>
-                        </div>
-                    </div>
-                </div>
-                <div class="table-responsive">
-                    {include file='table/table.tpl'}
-                </div>
-        </div>
-    </div>
-</main>
-
-{include file='admin/footer.tpl'}
-
-<script>
-    {include file='table/js_1.tpl'}
-
-    window.addEventListener('load', () => {
-        {include file='table/js_2.tpl'}
-    });
-</script>

+ 0 - 26
resources/views/material/admin/sys.tpl

@@ -1,26 +0,0 @@
-{include file='admin/main.tpl'}
-
-<div class="content-wrapper">
-    <section class="content-header">
-        <h1>
-            统计信息
-            <small>A</small>
-        </h1>
-    </section>
-    <!-- Main content -->
-    <!-- Main content -->
-    <section class="content">
-        <div class="row">
-            <!-- left column -->
-            <div class="col-md-6">
-                <!-- general form elements -->
-                <div class="box box-primary">
-                    <div class="box-body">
-                        <p>Coming soon...</p>
-                    </div><!-- /.box -->
-                </div>
-            </div>
-        </div>
-    </section><!-- /.content -->
-</div><!-- /.content-wrapper -->
-{include file='admin/footer.tpl'}

+ 0 - 92
resources/views/material/admin/ticket/index.tpl

@@ -1,92 +0,0 @@
-{include file='admin/main.tpl'}
-
-<main class="content">
-    <div class="content-header ui-content-header">
-        <div class="container">
-            <h1 class="content-heading">工单</h1>
-        </div>
-    </div>
-    <div class="container">
-        <div class="col-lg-12 col-sm-12">
-            <section class="content-inner margin-top-no">
-                <div class="card">
-                    <div class="card-main">
-                        <div class="card-inner">
-                            <p>系统中的工单</p>
-                            <p>显示表项:
-                                {include file='table/checkbox.tpl'}
-                            </p>
-                        </div>
-                    </div>
-                </div>
-                <div class="card">
-                    <div class="card-main">
-                        <div class="card-inner">
-                            <div class="form-group form-group-label">
-                                <label class="floating-label" for="userid"> 输入用戶 ID 快速创建新工单 </label>
-                                <input class="form-control maxwidth-edit" id="userid" type="text">
-                            </div>
-                        </div>
-                        <div class="card-inner">
-                            <div class="form-group form-group-label">
-                                <label class="floating-label" for="title"> 标题 </label>
-                                <input class="form-control maxwidth-edit" id="title" type="text">
-                            </div>
-                        </div>
-                        <div class="card-inner">
-                            <div class="form-group form-group-label">
-                                <label class="floating-label" for="content"> 内容 </label>
-                                <input class="form-control maxwidth-edit" id="content" type="text">
-                            </div>
-                        </div>
-                        <div class="card-action">
-                            <div class="card-action-btn pull-left">
-                                <a class="btn btn-flat waves-attach waves-light" id="ticket_create"><span
-                                            class="mdi mdi-check"></span>&nbsp;添加</a>
-                            </div>
-                        </div>
-                    </div>
-                </div>
-                <div class="table-responsive">
-                    {include file='table/table.tpl'}
-                </div>
-                {include file='dialog.tpl'}
-        </div>
-    </div>
-</main>
-
-{include file='admin/footer.tpl'}
-
-<script>
-    {include file='table/js_1.tpl'}
-    window.addEventListener('load', () => {
-        table = $('#table_tickets').DataTable({
-            ajax: 'ticket/ajax',
-            processing: true,
-            serverSide: true,
-            order: [[1, 'desc']]
-        })
-        {include file='table/js_2.tpl'}
-        function createTicket() {
-            $.ajax({
-                type: "POST",
-                url: "/admin/ticket",
-                dataType: "json",
-                data: {
-                    content: $$getValue('content'),
-                    title: $$getValue('title'),
-                    userid: $$getValue('userid')
-                },
-                success: data => {
-                    $("#result").modal();
-                    $$.getElementById('msg').innerHTML = data.msg;
-                },
-                error: jqXHR => {
-                    $("#result").modal();
-                    $$.getElementById('msg').innerHTML = `${ldelim}jqXHR{rdelim} 发生了错误。`;
-                }
-            });
-        }
-        $$.getElementById('ticket_create').addEventListener('click', createTicket)
-    });
-</script>

+ 0 - 209
resources/views/material/admin/ticket/view.tpl

@@ -1,209 +0,0 @@
-{include file='admin/main.tpl'}
-<link rel="stylesheet" href="https://fastly.jsdelivr.net/npm/[email protected]/css/editormd.min.css"/>
-
-<main class="content">
-    <div class="content-header ui-content-header">
-        <div class="container">
-            <h1 class="content-heading">查看工单</h1>
-        </div>
-    </div>
-    <div class="container">
-        <div class="col-lg-12 col-sm-12">
-            <section class="content-inner margin-top-no">
-
-                <div class="card">
-                    <div class="card-main">
-                        <div class="card-inner">
-                            <div class="form-group form-group-label">
-                                <label class="floating-label" for="content">内容</label>
-                                <div id="editormd">
-                                    <textarea style="display:none;" id="content"></textarea>
-                                </div>
-                            </div>
-
-                        </div>
-                    </div>
-                </div>
-                <div aria-hidden="true" class="modal modal-va-middle fade" id="changetouser_modal" role="dialog"
-                     tabindex="-1">
-                    <div class="modal-dialog modal-xs">
-                        <div class="modal-content">
-                            <div class="modal-heading">
-                                <a class="modal-close" data-dismiss="modal">×</a>
-                                <h2 class="modal-title">确认要切换为该用户?</h2>
-                            </div>
-                            <div class="modal-inner">
-                                <p>切换为该用户以后,你随时可以通过菜单底部的「返回管理员身份」按钮返回本条工单。</p>
-                            </div>
-                            <div class="modal-footer">
-                                <p class="text-right">
-                                    <button class="btn btn-flat btn-brand-accent waves-attach waves-effect" data-dismiss="modal" type="button">取消</button>
-                                    <button class="btn btn-flat btn-brand-accent waves-attach" data-dismiss="modal" id="changetouser_input" type="button">确定</button>
-                                </p>
-                            </div>
-                        </div>
-                    </div>
-                </div>
-                <div class="card">
-                    <div class="card-main">
-                        <div class="card-inner">
-
-                            <div class="form-group">
-                                <div class="row">
-                                    <div class="col-md-10">
-                                        <button id="submit" type="submit" class="btn btn-brand waves-attach waves-light">添加</button>
-                                        <button id="close" type="submit" class="btn btn-brand-accent waves-attach waves-light">添加并关闭</button>
-                                        <button id="close_directly" type="submit" class="btn btn-brand-accent waves-attach waves-light">直接关闭</button>
-                                        <button  id="changetouser" class="btn btn-brand waves-attach waves-light" onClick="changetouser_modal_show()">切换为该用户</button>
-                                    </div>
-                                </div>
-                            </div>
-                        </div>
-                    </div>
-                </div>
-                {$render}
-                {foreach $ticketset as $ticket}
-                    <div class="card">
-                        <aside class="card-side pull-left" style="padding: 16px; text-align: center">
-                            <img style="border-radius: 100%; width: 100%" src="{$ticket->user()->gravatar}">
-                            <br>
-                            {$ticket->user()->user_name}
-                        </aside>
-                        <div class="card-main">
-                            <div class="card-inner">
-                                {$ticket->content}
-                            </div>
-                            <div class="card-action" style="padding: 12px"> {$ticket->datetime()}</div>
-                        </div>
-                    </div>
-                {/foreach}
-                {$render}
-                {include file='dialog.tpl'}
-        </div>
-    </div>
-</main>
-
-{include file='admin/footer.tpl'}
-
-<script src="https://cdn.staticfile.org/editor-md/1.5.0/editormd.min.js"></script>
-<script>
-    function changetouser_modal_show() {
-        $("#changetouser_modal").modal();
-    }
-    window.addEventListener('load', () => {
-        function submit() {
-            $("#result").modal();
-            $$.getElementById('msg').innerHTML = `正在提交。`;
-            $.ajax({
-                type: "PUT",
-                url: "/admin/ticket/{$id}",
-                dataType: "json",
-                data: {
-                    content: editor.getHTML(),
-                    status
-                },
-                success: data => {
-                    if (data.ret) {
-                        $("#result").modal();
-                        $$.getElementById('msg').innerHTML = data.msg;
-                        window.setTimeout("location.href=top.document.referrer", {$config['jump_delay']});
-                    } else {
-                        $("#result").modal();
-                        $$.getElementById('msg').innerHTML = data.msg;
-                    }
-                },
-                error: jqXHR => {
-                    $("#result").modal();
-                    $$.getElementById('msg').innerHTML = `发生错误:${
-                            jqXHR.status
-                            }`;
-                }
-            });
-        }
-        $$.getElementById('submit').addEventListener('click', () => {
-            status = 1;
-            submit();
-        });
-        $$.getElementById('close').addEventListener('click', () => {
-            status = 0;
-            submit();
-        });
-        $$.getElementById('close_directly').addEventListener('click', () => {
-            status = 0;
-            $("#result").modal();
-            $$.getElementById('msg').innerHTML = `正在提交。`;
-            $.ajax({
-                type: "PUT",
-                url: "/admin/ticket/{$id}",
-                dataType: "json",
-                data: {
-                    content: '这条工单已被关闭',
-                    status
-                },
-                success: data => {
-                    if (data.ret) {
-                        $("#result").modal();
-                        $$.getElementById('msg').innerHTML = data.msg;
-                        window.setTimeout("location.href=top.document.referrer", {$config['jump_delay']});
-                    } else {
-                        $("#result").modal();
-                        $$.getElementById('msg').innerHTML = data.msg;
-                    }
-                },
-                error: jqXHR => {
-                    $("#result").modal();
-                    $$.getElementById('msg').innerHTML = `发生错误:${
-                            jqXHR.status
-                            }`;
-                }
-            });
-        });
-        function changetouser_id() {
-            $.ajax({
-                type: "POST",
-                url: "/admin/user/changetouser",
-                dataType: "json",
-                data: {
-                    userid: {$ticket->user()->id},
-                    adminid: {$user->id},
-                    local: '/admin/ticket/' + {$ticket->id} +'/view'
-                },
-                success: data => {
-                    if (data.ret) {
-                        $("#result").modal();
-                        $$.getElementById('msg').innerHTML = data.msg;
-                        window.setTimeout("location.href='/user'", {$config['jump_delay']});
-                    } else {
-                        $("#result").modal();
-                        $$.getElementById('msg').innerHTML = data.msg;
-                    }
-                },
-                error: jqXHR => {
-                    $("#result").modal();
-                    $$.getElementById('msg').innerHTML = `发生错误:${
-                            jqXHR.status
-                            }`;
-                }
-            });
-        }
-        $$.getElementById('changetouser_input').addEventListener('click', () => {
-            changetouser_id();
-        });
-    });
-    (() => {
-        editor = editormd("editormd", {
-            path: "https://fastly.jsdelivr.net/npm/[email protected]/lib/", // Autoload modules mode, codemirror, marked... dependents libs path
-            height: 450,
-            saveHTMLToTextarea: true,
-            emoji: true
-        });
-
-        /*
-        // or
-        var editor = editormd({
-            id   : "editormd",
-            path : "../lib/"
-        });
-        */
-    })();
-</script>

+ 0 - 36
resources/views/material/admin/trafficlog.tpl

@@ -1,36 +0,0 @@
-{include file='admin/main.tpl'}
-
-<main class="content">
-    <div class="content-header ui-content-header">
-        <div class="container">
-            <h1 class="content-heading">用户流量记录</h1>
-        </div>
-    </div>
-    <div class="container">
-        <div class="col-lg-12 col-sm-12">
-            <section class="content-inner margin-top-no">
-
-                <div class="card">
-                    <div class="card-main">
-                        <div class="card-inner">
-                            <p>这里是所有用户最近 30 天的流量使用记录。</p>
-                            <p>显示表项: {include file='table/checkbox.tpl'}</p>
-                        </div>
-                    </div>
-                </div>
-                <div class="table-responsive">
-                    {include file='table/table.tpl'}
-                </div>
-        </div>
-    </div>
-</main>
-
-{include file='admin/footer.tpl'}
-
-<script>
-    {include file='table/js_1.tpl'}
-
-    window.addEventListener('load', () => {
-        {include file='table/js_2.tpl'}
-    });
-</script>

+ 0 - 181
resources/views/material/admin/user/bought.tpl

@@ -1,181 +0,0 @@
-{include file='admin/main.tpl'}
-
-<main class="content">
-    <div class="content-header ui-content-header">
-        <div class="container">
-            <h1 class="content-heading">#{$user->id} [{$user->user_name}] 用户购买明细</h1>
-        </div>
-    </div>
-    <div class="container">
-        <div class="col-lg-12 col-sm-12">
-            <section class="content-inner margin-top-no">
-                <form id="main_form">
-                    <div class="card">
-                        <div class="card-main">
-                            <div class="card-inner">
-                                <div class="form-group form-group-label control-highlight-custom dropdown">
-                                    <label class="floating-label" for="buy_shop">选择套餐</label>
-                                    <button id="buy_shop" class="form-control maxwidth-edit" name="buy_shop"
-                                            data-toggle="dropdown">
-                                        请选择套餐
-                                    </button>
-                                    <ul class="dropdown-menu" aria-labelledby="buy_shop">
-                                        {foreach $shops as $shop}
-                                            <li>
-                                                <a href="#" class="dropdown-option" onclick="return false;"
-                                                   val="{$shop->id}" data="buy_shop">{$shop->name}</a>
-                                            </li>
-                                        {/foreach}
-                                    </ul>
-                                </div>
-                                <div class="form-group form-group-label control-highlight-custom dropdown">
-                                    <label class="floating-label" for="buy_type">类型</label>
-                                    <button id="buy_type" class="form-control maxwidth-edit" name="buy_type"
-                                            data-toggle="dropdown" value="0">
-                                        添加
-                                    </button>
-                                    <ul class="dropdown-menu" aria-labelledby="buy_type">
-                                        <li>
-                                            <a href="#" class="dropdown-option" onclick="return false;" val="0"
-                                               data="buy_type">添加</a>
-                                        </li>
-                                        <li>
-                                            <a href="#" class="dropdown-option" onclick="return false;" val="1"
-                                               data="buy_type">购买</a>
-                                        </li>
-                                    </ul>
-                                </div>
-
-                            </div>
-                        </div>
-                    </div>
-                    <div class="card">
-                        <div class="card-main">
-                            <div class="card-inner">
-                                <div class="form-group">
-                                    <div class="row">
-                                        <div class="col-md-10 col-md-push-1">
-                                            <button id="submit" type="submit" class="btn btn-block btn-brand">添加
-                                            </button>
-                                        </div>
-                                    </div>
-                                </div>
-                            </div>
-                        </div>
-                    </div>
-                </form>
-                <div class="card">
-                    <div class="card-main">
-                        <div class="card-inner">
-                            <p>显示表项: {include file='table/checkbox.tpl'}</p>
-                        </div>
-                    </div>
-                </div>
-                <div class="table-responsive">
-                    {include file='table/table.tpl'}
-                </div>
-                <div aria-hidden="true" class="modal modal-va-middle fade" id="delete_modal" role="dialog"
-                     tabindex="-1">
-                    <div class="modal-dialog modal-xs">
-                        <div class="modal-content">
-                            <div class="modal-heading">
-                                <a class="modal-close" data-dismiss="modal">×</a>
-                                <h2 class="modal-title">确认要删除该条购买记录?</h2>
-                            </div>
-                            <div class="modal-inner">
-                                <p>操作不可逆,请您确认。</p>
-                            </div>
-                            <div class="modal-footer">
-                                <p class="text-right">
-                                    <button class="btn btn-flat btn-brand-accent waves-attach waves-effect"
-                                            data-dismiss="modal" type="button">取消
-                                    </button>
-                                    <button class="btn btn-flat btn-brand-accent waves-attach" data-dismiss="modal"
-                                            id="delete_input" type="button">确定
-                                    </button>
-                                </p>
-                            </div>
-                        </div>
-                    </div>
-                </div>
-                {include file='dialog.tpl'}
-        </div>
-    </div>
-</main>
-
-{include file='admin/footer.tpl'}
-
-<script>
-    {include file='table/js_1.tpl'}
-
-    window.addEventListener('load', () => {
-        {include file='table/js_2.tpl'}
-    });
-    function delete_modal_show(id) {
-        deleteid = id;
-        $("#delete_modal").modal();
-    }
-    $$.getElementById('delete_input').addEventListener('click', delete_id);
-    function delete_id() {
-        $.ajax({
-            type: "DELETE",
-            url: "/admin/user/bought",
-            dataType: "json",
-            data: {
-                id: deleteid
-            },
-            success: data => {
-                if (data.ret) {
-                    $("#result").modal();
-                    $$.getElementById('msg').innerHTML = data.msg;
-                    {include file='table/js_delete.tpl'}
-                } else {
-                    $("#result").modal();
-                    $$.getElementById('msg').innerHTML = data.msg;
-                }
-            },
-            error: jqXHR => {
-                $("#result").modal();
-                $$.getElementById('msg').innerHTML = `${ldelim}jqXHR{rdelim} 发生了错误。`;
-            }
-        });
-    }
-</script>
-
-{literal}
-<script>
-    $('#main_form').validate({
-        submitHandler: () => {
-            $.ajax({
-                type: "POST",
-                url: "bought/buy",
-                dataType: "json",
-                {/literal}
-                data: {
-                    buy_shop: $$getValue('buy_shop'),
-                    buy_type: $$getValue('buy_type'),
-                    {literal}
-                },
-                success: (data) => {
-                    if (data.ret) {
-                        $("#result").modal();
-                        $$.getElementById('msg').innerHTML = data.msg;
-                        {/literal}
-                        window.setTimeout("window.location.reload()", {$config['jump_delay']});
-                        {literal}
-                    } else {
-                        $("#result").modal();
-                        $$.getElementById('msg').innerHTML = data.msg;
-                    }
-                },
-                error: (jqXHR) => {
-                    $("#result").modal();
-                    $$.getElementById('msg').innerHTML = `${
-                            data.msg
-                            } 发生错误了`;
-                }
-            });
-        }
-    });
-</script>
-{/literal}

+ 0 - 33
resources/views/material/admin/user/code.tpl

@@ -1,33 +0,0 @@
-{include file='admin/main.tpl'}
-
-<main class="content">
-    <div class="content-header ui-content-header">
-        <div class="container">
-            <h1 class="content-heading">#{$user->id} [{$user->user_name}] 用户充值明细</h1>
-        </div>
-    </div>
-    <div class="container">
-        <div class="col-lg-12 col-sm-12">
-            <section class="content-inner margin-top-no">
-                <div class="card">
-                    <div class="card-main">
-                        <div class="card-inner">
-                            <p>显示表项: {include file='table/checkbox.tpl'}</p>
-                        </div>
-                    </div>
-                </div>
-                <div class="table-responsive">
-                    {include file='table/table.tpl'}
-                </div>
-        </div>
-    </div>
-</main>
-
-{include file='admin/footer.tpl'}
-
-<script>
-    {include file='table/js_1.tpl'}
-    window.addEventListener('load', () => {
-        {include file='table/js_2.tpl'}
-    });
-</script>

+ 0 - 35
resources/views/material/admin/user/detect.tpl

@@ -1,35 +0,0 @@
-{include file='admin/main.tpl'}
-
-<main class="content">
-    <div class="content-header ui-content-header">
-        <div class="container">
-            <h1 class="content-heading">#{$user->id} [{$user->user_name}] 用户审计记录</h1>
-        </div>
-    </div>
-    <div class="container">
-        <div class="col-lg-12 col-sm-12">
-            <section class="content-inner margin-top-no">
-
-                <div class="card">
-                    <div class="card-main">
-                        <div class="card-inner">
-                            <p>显示表项: {include file='table/checkbox.tpl'}</p>
-                        </div>
-                    </div>
-                </div>
-
-                <div class="table-responsive">
-                    {include file='table/table.tpl'}
-                </div>
-        </div>
-    </div>
-</main>
-
-{include file='admin/footer.tpl'}
-
-<script>
-    {include file='table/js_1.tpl'}
-    window.addEventListener('load', () => {
-        {include file='table/js_2.tpl'}
-    });
-</script>

+ 0 - 367
resources/views/material/admin/user/edit.tpl

@@ -1,367 +0,0 @@
-{include file='admin/main.tpl'}
-
-<main class="content">
-    <div class="content-header ui-content-header">
-        <div class="container">
-            <h1 class="content-heading">用户编辑 #{$edit_user->id}</h1>
-        </div>
-    </div>
-    <div class="container">
-        <div class="col-lg-12 col-sm-12">
-            <section class="content-inner margin-top-no">
-                <div class="card">
-                    <div class="card-main">
-                        <div class="card-inner">
-                            <div class="form-group form-group-label">
-                                <label class="floating-label" for="email">邮箱</label>
-                                <input class="form-control maxwidth-edit" id="email" type="email"
-                                       value="{$edit_user->email}">
-                            </div>
-                            <div class="form-group form-group-label">
-                                <label class="floating-label" for="user_name">用户昵称</label>
-                                <input class="form-control maxwidth-edit" id="user_name" type="text"
-                                       value="{$edit_user->user_name}">
-                            </div>
-                            <div class="form-group form-group-label">
-                                <label class="floating-label" for="remark">备注(仅对管理员可见)</label>
-                                <input class="form-control maxwidth-edit" id="remark" type="text"
-                                       value="{$edit_user->remark}">
-                            </div>
-                            <div class="form-group form-group-label">
-                                <label class="floating-label" for="pass">密码(不修改请留空)</label>
-                                <input class="form-control maxwidth-edit" id="pass" type="password"
-                                       autocomplete="new-password">
-                            </div>
-                            <div class="form-group form-group-label">
-                                <div class="checkbox switch">
-                                    <label for="is_admin">
-                                        <input {if $edit_user->is_admin==1}checked{/if} class="access-hide"
-                                               id="is_admin" type="checkbox"><span class="switch-toggle"></span>是否管理员
-                                    </label>
-                                </div>
-                            </div>
-                            <div class="form-group form-group-label">
-                                <div class="checkbox switch">
-                                    <label for="enable">
-                                        <input {if $edit_user->enable==1}checked{/if} class="access-hide" id="enable"
-                                               type="checkbox"><span class="switch-toggle"></span>用户启用
-                                    </label>
-                                </div>
-                            </div>
-                            <div class="form-group form-group-label">
-                                <div class="checkbox switch">
-                                    <label for="ga_enable">
-                                        <input {if $edit_user->ga_enable==1}checked{/if} class="access-hide"
-                                               id="ga_enable" type="checkbox"><span class="switch-toggle"></span>是否开启二次验证
-                                    </label>
-                                </div>
-                            </div>
-                            <div class="form-group form-group-label">
-                                <label class="floating-label" for="money">金钱</label>
-                                <input class="form-control maxwidth-edit" id="money" type="text"
-                                       value="{$edit_user->money}">
-                            </div>
-                            <div class="form-group form-group-label">
-                                <label for="is_multi_user">
-                                    <label class="floating-label" for="sort">单端口多用户承载端口</label>
-                                    <select id="is_multi_user" class="form-control maxwidth-edit" name="is_multi_user">
-                                        <option value="0" {if $edit_user->is_multi_user==0}selected{/if}>非单端口多用户承载端口
-                                        </option>
-                                        <option value="1" {if $edit_user->is_multi_user==1}selected{/if}>混淆式单端口多用户承载端口
-                                        </option>
-                                        <option value="2" {if $edit_user->is_multi_user==2}selected{/if}>协议式单端口多用户承载端口
-                                        </option>
-                                    </select>
-                                </label>
-                            </div>
-                        </div>
-                    </div>
-                </div>
-
-				<div class="card">
-					<div class="card-main">
-						<div class="card-inner">
-                            <div class="form-group form-group-label">
-                                <label class="floating-label" for="ban_time">手动封禁时长 (分钟),不封禁不要修改</label>
-                                <input class="form-control maxwidth-edit" id="ban_time" type="text"
-                                       value="0">
-                            </div>
-                            <div class="form-group form-group-label">
-                                <label class="floating-label" for="last_detect_ban_time">最后一次被封禁的时间</label>
-                                <input class="form-control maxwidth-edit" id="last_detect_ban_time" type="text"
-                                       value="{$edit_user->lastDetectBanTime()}" readonly>
-                            </div>
-                            <div class="form-group form-group-label">
-                                <label class="floating-label" for="relieve_time">当前解封时间</label>
-                                <input class="form-control maxwidth-edit" id="relieve_time" type="text"
-                                       value="{$edit_user->relieveTime()}" readonly>
-                            </div>
-                            <div class="form-group form-group-label">
-                                <label class="floating-label" for="detect_ban_number">累计封禁次数</label>
-                                <input class="form-control maxwidth-edit" id="detect_ban_number" type="text"
-                                       value="{if $edit_user->detectBanNumber()==0}标杆用户,没有被封禁过耶{else}太坏了,这位用户累计被封禁过 {$edit_user->detectBanNumber()} 次呢{/if}" readonly>
-                            </div>
-                            <div class="form-group form-group-label">
-                                <label class="floating-label" for="all_detect_number">累计违规次数</label>
-                                <input class="form-control maxwidth-edit" id="all_detect_number" type="text"
-                                       value="{$edit_user->all_detect_number}" readonly>
-                            </div>
-						</div>
-					</div>
-				</div>
-                <div class="card">
-                    <div class="card-main">
-                        <div class="card-inner">
-                            <div class="form-group form-group-label">
-                                <label class="floating-label" for="port">连接端口</label>
-                                <input class="form-control maxwidth-edit" id="port" type="text"
-                                       value="{$edit_user->port}">
-                            </div>
-                            <div class="form-group form-group-label">
-                                <label class="floating-label" for="passwd">连接密码</label>
-                                <input class="form-control maxwidth-edit" id="passwd" type="text"
-                                       value="{$edit_user->passwd}">
-                            </div>
-                            <div class="form-group form-group-label">
-                                <label class="floating-label" for="method">自定义加密</label>
-                                <input class="form-control maxwidth-edit" id="method" type="text"
-                                       value="{$edit_user->method}">
-                            </div>
-                            <div class="form-group form-group-label">
-                                <label class="floating-label" for="protocol">自定义协议</label>
-                                <input class="form-control maxwidth-edit" id="protocol" type="text"
-                                       value="{$edit_user->protocol}">
-                            </div>
-                            <div class="form-group form-group-label">
-                                <label class="floating-label" for="protocol_param">自定义协议参数</label>
-                                <input class="form-control maxwidth-edit" id="protocol_param" type="text"
-                                       value="{$edit_user->protocol_param}">
-                            </div>
-                            <div class="form-group form-group-label">
-                                <label class="floating-label" for="obfs">自定义混淆方式</label>
-                                <input class="form-control maxwidth-edit" id="obfs" type="text"
-                                       value="{$edit_user->obfs}">
-                            </div>
-                            <div class="form-group form-group-label">
-                                <label class="floating-label" for="obfs_param">自定义混淆参数</label>
-                                <input class="form-control maxwidth-edit" id="obfs_param" type="text"
-                                       value="{$edit_user->obfs_param}">
-                            </div>
-                        </div>
-                    </div>
-                </div>
-                <div class="card">
-                    <div class="card-main">
-                        <div class="card-inner">
-                            <div class="form-group form-group-label">
-                                <label class="floating-label" for="transfer_enable">总流量(GB)</label>
-                                <input class="form-control maxwidth-edit" id="transfer_enable" type="text"
-                                       value="{$edit_user->enableTrafficInGB()}">
-                            </div>
-                            <div class="form-group form-group-label">
-                                <label class="floating-label" for="usedTraffic">已用流量</label>
-                                <input class="form-control maxwidth-edit" id="usedTraffic" type="text"
-                                       value="{$edit_user->usedTraffic()}" readonly>
-                            </div>
-                        </div>
-                    </div>
-                </div>
-                <div class="card">
-                    <div class="card-main">
-                        <div class="card-inner">
-                            <div class="form-group form-group-label">
-                                <label class="floating-label" for="auto_reset_day">免费用户流量重置日</label>
-                                <input class="form-control maxwidth-edit" id="auto_reset_day" type="number"
-                                       value="{$edit_user->auto_reset_day}">
-                            </div>
-                            <div class="form-group form-group-label">
-                                <label class="floating-label" for="auto_reset_bandwidth">重置的免费流量(GB)</label>
-                                <input class="form-control maxwidth-edit" id="auto_reset_bandwidth" type="number"
-                                       value="{$edit_user->auto_reset_bandwidth}">
-                            </div>
-                        </div>
-                    </div>
-                </div>
-                <div class="card">
-                    <div class="card-main">
-                        <div class="card-inner">
-                            <div class="form-group form-group-label">
-                                <label class="floating-label" for="invite_num">可用邀请数量</label>
-                                <input class="form-control maxwidth-edit" id="invite_num" type="number"
-                                       value="{$edit_user->invite_num}">
-                            </div>
-                            <div class="form-group form-group-label">
-                                <label class="floating-label" for="ref_by">邀请人ID</label>
-                                <input class="form-control maxwidth-edit" id="ref_by" type="text"
-                                       value="{$edit_user->ref_by}" readonly>
-                            </div>
-                        </div>
-                    </div>
-                </div>
-                <div class="card">
-                    <div class="card-main">
-                        <div class="card-inner">
-                            <div class="form-group form-group-label">
-                                <label class="floating-label" for="group">用户群组</label>
-                                <input class="form-control maxwidth-edit" id="group" type="number"
-                                       value="{$edit_user->node_group}">
-                                <p class="form-control-guide"><i class="mdi mdi-information"></i>用户只能访问到组别等于这个数字或0的节点</p>
-                            </div>
-                            <div class="form-group form-group-label">
-                                <label class="floating-label" for="class">用户级别</label>
-                                <input class="form-control maxwidth-edit" id="class" type="number"
-                                       value="{$edit_user->class}">
-                                <p class="form-control-guide"><i class="mdi mdi-information"></i>用户只能访问到等级小于等于这个数字的节点</p>
-                            </div>
-                            <div class="form-group form-group-label">
-                                <label class="floating-label" for="class_expire">用户等级过期时间</label>
-                                <input class="form-control maxwidth-edit" id="class_expire" type="text"
-                                       value="{$edit_user->class_expire}">
-                                <p class="form-control-guide"><i class="mdi mdi-information"></i>不过期就请不要动</p>
-                            </div>
-                            <div class="form-group form-group-label">
-                                <label class="floating-label" for="expire_in">用户账户过期时间</label>
-                                <input class="form-control maxwidth-edit" id="expire_in" type="text"
-                                       value="{$edit_user->expire_in}">
-                                <p class="form-control-guide"><i class="mdi mdi-information"></i>不过期就请不要动</p>
-                            </div>
-                        </div>
-                    </div>
-                </div>
-                <div class="card">
-                    <div class="card-main">
-                        <div class="card-inner">
-                            <div class="form-group form-group-label">
-                                <label class="floating-label" for="node_speedlimit">用户限速,用户在每个节点所享受到的速度(Mbps)</label>
-                                <input class="form-control maxwidth-edit" id="node_speedlimit" type="text"
-                                       value="{$edit_user->node_speedlimit}">
-                                <p class="form-control-guide"><i class="mdi mdi-information"></i>0 为不限制</p>
-                            </div>
-                            <div class="form-group form-group-label">
-                                <label class="floating-label" for="node_connector">用户同时连接 IP 数</label>
-                                <input class="form-control maxwidth-edit" id="node_connector" type="text"
-                                       value="{$edit_user->node_connector}">
-                                <p class="form-control-guide"><i class="mdi mdi-information"></i>0 为不限制</p>
-                            </div>
-                        </div>
-                    </div>
-                </div>
-                <div class="card">
-                    <div class="card-main">
-                        <div class="card-inner">
-                            <div class="form-group form-group-label">
-                                <label class="floating-label" for="node_speedlimit">禁止用户访问的IP,一行一个</label>
-                                <textarea class="form-control maxwidth-edit" id="forbidden_ip"
-                                          rows="8">{$edit_user->getForbiddenIp()}</textarea>
-                            </div>
-                            <div class="form-group form-group-label">
-                                <label class="floating-label" for="node_speedlimit">禁止用户访问的端口,一行一个</label>
-                                <textarea class="form-control maxwidth-edit" id="forbidden_port"
-                                          rows="8">{$edit_user->getForbiddenPort()}</textarea>
-                            </div>
-                        </div>
-                    </div>
-                </div>
-                <div class="card">
-                    <div class="card-main">
-                        <div class="card-inner">
-                            <div class="form-group">
-                                <div class="row">
-                                    <div class="col-md-10 col-md-push-1">
-                                        <button id="submit" type="submit"
-                                                class="btn btn-block btn-brand waves-attach waves-light">修改
-                                        </button>
-                                    </div>
-                                </div>
-                            </div>
-                        </div>
-                    </div>
-                </div>
-                {include file='dialog.tpl'}
-        </div>
-    </div>
-</main>
-
-{include file='admin/footer.tpl'}
-
-<script>
-    //document.getElementById("class_expire").value="{$edit_user->class_expire}";
-    window.addEventListener('load', () => {
-        function submit() {
-            if (document.getElementById('is_admin').checked) {
-                var is_admin = 1;
-            } else {
-                var is_admin = 0;
-            }
-            if (document.getElementById('enable').checked) {
-                var enable = 1;
-            } else {
-                var enable = 0;
-            }
-            if (document.getElementById('ga_enable').checked) {
-                var ga_enable = 1;
-            } else {
-                var ga_enable = 0;
-            }
-            $.ajax({
-                type: "PUT",
-                url: "/admin/user/{$edit_user->id}",
-                dataType: "json",
-                data: {
-                    email: $$getValue('email'),
-                    pass: $$getValue('pass'),
-                    auto_reset_day: $$getValue('auto_reset_day'),
-                    auto_reset_bandwidth: $$getValue('auto_reset_bandwidth'),
-                    is_multi_user: $$getValue('is_multi_user'),
-                    port: $$getValue('port'),
-                    group: $$getValue('group'),
-                    passwd: $$getValue('passwd'),
-                    transfer_enable: $$getValue('transfer_enable'),
-                    invite_num: $$getValue('invite_num'),
-                    node_speedlimit: $$getValue('node_speedlimit'),
-                    method: $$getValue('method'),
-                    remark: $$getValue('remark'),
-                    user_name: $$getValue('user_name'),
-                    money: $$getValue('money'),
-                    enable,
-                    is_admin,
-                    ga_enable,
-                    ban_time: $$getValue('ban_time'),
-                    ref_by: $$getValue('ref_by'),
-                    forbidden_ip: $$getValue('forbidden_ip'),
-                    forbidden_port: $$getValue('forbidden_port'),
-                    class: $$getValue('class'),
-                    class_expire: $$getValue('class_expire'),
-                    expire_in: $$getValue('expire_in'),
-                    node_connector: $$getValue('node_connector'),
-                    protocol: $$getValue('protocol'),
-                    protocol_param: $$getValue('protocol_param'),
-                    obfs: $$getValue('obfs'),
-                    obfs_param: $$getValue('obfs_param'),
-                },
-                success: data => {
-                    if (data.ret) {
-                        $("#result").modal();
-                        $$.getElementById('msg').innerHTML = data.msg;
-                        window.setTimeout("location.href=top.document.referrer", {$config['jump_delay']});
-                    } else {
-                        $("#result").modal();
-                        $$.getElementById('msg').innerHTML = data.msg;
-                    }
-                },
-                error: jqXHR => {
-                    $("#result").modal();
-                    $$.getElementById('msg').innerHTML = `发生错误:${
-                            jqXHR.status
-                            }`;
-                }
-            });
-        }
-        $("html").keydown(event => {
-            if (event.keyCode == 13) {
-                submit();
-            }
-        });
-        $$.getElementById('submit').addEventListener('click', submit);
-    })
-</script>

+ 0 - 274
resources/views/material/admin/user/index.tpl

@@ -1,274 +0,0 @@
-{include file='admin/main.tpl'}
-
-<main class="content">
-    <div class="content-header ui-content-header">
-        <div class="container">
-            <h1 class="content-heading">用户列表</h1>
-        </div>
-    </div>
-    <div class="container">
-        <div class="col-lg-12 col-sm-12">
-            <section class="content-inner margin-top-no">
-                <div class="card">
-                    <div class="card-main">
-                        <div class="card-inner">
-                            <p>系统中所有用户的列表。</p>
-                            <p>
-                                付费用户:{$user->paidUserCount()}
-                            </p>
-                            <p>显示表项:
-                                {include file='table/checkbox.tpl'}
-                            </p>
-                        </div>
-                    </div>
-                </div>
-                <div class="card">
-                    <div class="card-main">
-                        <div class="card-inner">
-                            <div class="form-group form-group-label">
-                                <label class="floating-label" for="quick_create"> 输入 email 快速创建新用户 </label>
-                                <input class="form-control maxwidth-edit" id="quick_create" type="text">
-                            </div>
-                        </div>
-                        <div class="card-inner">
-                            <div class="form-group form-group-label">
-                                <label for="new_user_add_shop">
-                                    <label class="floating-label" for="new_user_add_shop"> 是否添加套餐 </label>
-                                    <select id="new_user_add_shop" class="form-control maxwidth-edit">
-                                        <option value="0">不添加</option>
-                                        {foreach $shops as $shop}
-                                        <option value="{$shop->id}">{$shop->name}</option>
-                                        {/foreach}
-                                    </select>
-                                </label>
-                            </div>
-                        </div>
-                        <div class="card-inner">
-                            <div class="form-group form-group-label">
-                                <label class="floating-label" for="new_user_money"> 用户余额「-1为按默认设置,其他为指定值」 </label>
-                                <input class="form-control maxwidth-edit" id="new_user_money" type="text" value="-1">
-                            </div>
-                        </div>
-                        <div class="card-action">
-                            <div class="card-action-btn pull-left">
-                                <a class="btn btn-flat waves-attach waves-light" id="quick_create_confirm"><span
-                                            class="mdi mdi-check"></span>&nbsp;创建</a>
-                            </div>
-                        </div>
-                    </div>
-                </div>
-                <div class="table-responsive">
-                    {include file='table/table.tpl'}
-                </div>
-                <div aria-hidden="true" class="modal modal-va-middle fade" id="delete_modal" role="dialog"
-                     tabindex="-1">
-                    <div class="modal-dialog modal-xs">
-                        <div class="modal-content">
-                            <div class="modal-heading">
-                                <a class="modal-close" data-dismiss="modal">×</a>
-                                <h2 class="modal-title">确认要删除?</h2>
-                            </div>
-                            <div class="modal-inner">
-                                <p>请您确认。</p>
-                            </div>
-                            <div class="modal-footer">
-                                <p class="text-right">
-                                    <button class="btn btn-flat btn-brand-accent waves-attach waves-effect"
-                                            data-dismiss="modal" type="button">取消
-                                    </button>
-                                    <button class="btn btn-flat btn-brand-accent waves-attach" data-dismiss="modal"
-                                            id="delete_input" type="button">确定
-                                    </button>
-                                </p>
-                            </div>
-                        </div>
-                    </div>
-                </div>
-                <div aria-hidden="true" class="modal modal-va-middle fade" id="changetouser_modal" role="dialog"
-                     tabindex="-1">
-                    <div class="modal-dialog modal-xs">
-                        <div class="modal-content">
-                            <div class="modal-heading">
-                                <a class="modal-close" data-dismiss="modal">×</a>
-                                <h2 class="modal-title">确认要切换为该用户?</h2>
-                            </div>
-                            <div class="modal-inner">
-                                <p>请您确认。</p>
-                            </div>
-                            <div class="modal-footer">
-                                <p class="text-right">
-                                    <button class="btn btn-flat btn-brand-accent waves-attach waves-effect"
-                                            data-dismiss="modal" type="button">取消
-                                    </button>
-                                    <button class="btn btn-flat btn-brand-accent waves-attach" data-dismiss="modal"
-                                            id="changetouser_input" type="button">确定
-                                    </button>
-                                </p>
-                            </div>
-                        </div>
-                    </div>
-                </div>
-                {include file='dialog.tpl'}
-        </div>
-    </div>
-</main>
-
-{include file='admin/footer.tpl'}
-
-<script>
-    function delete_modal_show(id) {
-        deleteid = id;
-        $("#delete_modal").modal();
-    }
-    function changetouser_modal_show(id) {
-        changetouserid = id;
-        $("#changetouser_modal").modal();
-    }
-    {include file='table/js_1.tpl'}
-    window.addEventListener('load', () => {
-        table_1 = $('#table_1').DataTable({
-            order: [[1, 'asc']],
-            stateSave: true,
-            serverSide: true,
-            ajax: {
-                url: "/admin/user/ajax",
-                type: "POST",
-            },
-            columns: [
-                {literal}
-                {"data": "op", "orderable": false},
-                {"data": "querys"},
-                {"data": "id"},
-                {"data": "user_name"},
-                {"data": "remark"},
-                {"data": "email"},
-                {"data": "money"},
-                {"data": "im_type"},
-                {"data": "im_value"},
-                {"data": "node_group"},
-                {"data": "expire_in"},
-                {"data": "class"},
-                {"data": "class_expire"},
-                {"data": "passwd"},
-                {"data": "port"},
-                {"data": "method"},
-                {"data": "protocol"},
-                {"data": "obfs"},
-                {"data": "obfs_param"},
-                {"data": "online_ip_count", "orderable": false},
-                {"data": "last_ss_time", "orderable": false},
-                {"data": "used_traffic"},
-                {"data": "enable_traffic"},
-                {"data": "transfer_total"},
-                {"data": "last_checkin_time", "orderable": false},
-                {"data": "today_traffic"},
-                {"data": "enable"},
-                {"data": "reg_date"},
-                {"data": "reg_ip"},
-                {"data": "auto_reset_day"},
-                {"data": "auto_reset_bandwidth"},
-                {"data": "ref_by"},
-                {"data": "ref_by_user_name", "orderable": false},
-                {"data": "top_up", "orderable": false}
-                {/literal}
-            ],
-            "columnDefs": [
-                {
-                    targets: ['_all'],
-                    className: 'mdl-data-table__cell--non-numeric'
-                }
-            ],
-            {include file='table/lang_chinese.tpl'}
-        });
-        var has_init = JSON.parse(localStorage.getItem(`${ldelim}window.location.href{rdelim}-hasinit`));
-        if (has_init !== true) {
-            localStorage.setItem(`${ldelim}window.location.href{rdelim}-hasinit`, true);
-        } else {
-            {foreach $table_config['total_column'] as $key => $value}
-            var checked = JSON.parse(localStorage.getItem(window.location.href + '-haschecked-checkbox_{$key}'));
-            if (checked) {
-                $$.getElementById('checkbox_{$key}').checked = true;
-            } else {
-                $$.getElementById('checkbox_{$key}').checked = false;
-            }
-            {/foreach}
-        }
-        {foreach $table_config['total_column'] as $key => $value}
-        modify_table_visible('checkbox_{$key}', '{$key}');
-        {/foreach}
-        function delete_id() {
-            $.ajax({
-                type: "DELETE",
-                url: "/admin/user",
-                dataType: "json",
-                data: {
-                    id: deleteid
-                },
-                success: data => {
-                    if (data.ret) {
-                        $("#result").modal();
-                        $$.getElementById('msg').innerHTML = data.msg;
-                        {include file='table/js_delete.tpl'}
-                    } else {
-                        $("#result").modal();
-                        $$.getElementById('msg').innerHTML = data.msg;
-                    }
-                },
-                error: jqXHR => {
-                    $("#result").modal();
-                    $$.getElementById('msg').innerHTML = `${ldelim}jqXHR{rdelim} 发生了错误。`;
-                }
-            });
-        }
-        $$.getElementById('delete_input').addEventListener('click', delete_id);
-        function changetouser_id() {
-            $.ajax({
-                type: "POST",
-                url: "/admin/user/changetouser",
-                dataType: "json",
-                data: {
-                    userid: changetouserid,
-                    adminid: {$user->id},
-                    local: '/admin/user'
-                },
-                success: data => {
-                    if (data.ret) {
-                        $("#result").modal();
-                        $$.getElementById('msg').innerHTML = data.msg;
-                        window.setTimeout("location.href='/user'", {$config['jump_delay']});
-                    } else {
-                        $("#result").modal();
-                        $$.getElementById('msg').innerHTML = data.msg;
-                    }
-                },
-                error: jqXHR => {
-                    $("#result").modal();
-                    $$.getElementById('msg').innerHTML = `${ldelim}jqXHR{rdelim} 发生了错误。`;
-                }
-            });
-        }
-        $$.getElementById('changetouser_input').addEventListener('click', changetouser_id);
-        function quickCreate() {
-            $.ajax({
-                type: 'POST',
-                url: '/admin/user/create',
-                dataType: 'json',
-                data: {
-                    email: $$getValue('quick_create'),
-                    balance: $$getValue('new_user_money'),
-                    product: $$getValue('new_user_add_shop')
-                },
-                success: data => {
-                    $("#result").modal();
-                    $$.getElementById('msg').innerHTML = data.msg;
-                    window.setTimeout("location.href='/admin/user'", 5000);
-                },
-                error: jqXHR => {
-                    $("#result").modal();
-                    $$.getElementById('msg').innerHTML = `${ldelim}jqXHR{rdelim} 发生了错误。`;
-                }
-            })
-        }
-        $$.getElementById('quick_create_confirm').addEventListener('click', quickCreate)
-    })
-</script>

+ 0 - 32
resources/views/material/admin/user/login.tpl

@@ -1,32 +0,0 @@
-{include file='admin/main.tpl'}
-<main class="content">
-    <div class="content-header ui-content-header">
-        <div class="container">
-            <h1 class="content-heading">#{$user->id} [{$user->user_name}] 用户登录记录</h1>
-        </div>
-    </div>
-    <div class="container">
-        <div class="col-lg-12 col-sm-12">
-            <section class="content-inner margin-top-no">
-                <div class="card">
-                    <div class="card-main">
-                        <div class="card-inner">
-                            <p>显示表项: {include file='table/checkbox.tpl'}</p>
-                        </div>
-                    </div>
-                </div>
-                <div class="table-responsive">
-                    {include file='table/table.tpl'}
-                </div>
-        </div>
-    </div>
-</main>
-
-{include file='admin/footer.tpl'}
-
-<script>
-    {include file='table/js_1.tpl'}
-    window.addEventListener('load', () => {
-        {include file='table/js_2.tpl'}
-    });
-</script>

+ 0 - 34
resources/views/material/admin/user/sublog.tpl

@@ -1,34 +0,0 @@
-{include file='admin/main.tpl'}
-
-<main class="content">
-    <div class="content-header ui-content-header">
-        <div class="container">
-            <h1 class="content-heading">#{$user->id} [{$user->user_name}] 用户订阅记录</h1>
-        </div>
-    </div>
-    <div class="container">
-        <div class="col-lg-12 col-sm-12">
-            <section class="content-inner margin-top-no">
-
-                <div class="card">
-                    <div class="card-main">
-                        <div class="card-inner">
-                            <p>显示表项: {include file='table/checkbox.tpl'}</p>
-                        </div>
-                    </div>
-                </div>
-                <div class="table-responsive">
-                    {include file='table/table.tpl'}
-                </div>
-        </div>
-    </div>
-</main>
-
-{include file='admin/footer.tpl'}
-
-<script>
-    {include file='table/js_1.tpl'}
-    window.addEventListener('load', () => {
-        {include file='table/js_2.tpl'}
-    });
-</script>

+ 0 - 33
resources/views/material/admin/user/traffic.tpl

@@ -1,33 +0,0 @@
-{include file='admin/main.tpl'}
-
-<main class="content">
-    <div class="content-header ui-content-header">
-        <div class="container">
-            <h1 class="content-heading">#{$user->id} [{$user->user_name}] 用户流量记录</h1>
-        </div>
-    </div>
-    <div class="container">
-        <div class="col-lg-12 col-sm-12">
-            <section class="content-inner margin-top-no">
-                <div class="card">
-                    <div class="card-main">
-                        <div class="card-inner">
-                            <p>显示表项: {include file='table/checkbox.tpl'}</p>
-                        </div>
-                    </div>
-                </div>
-                <div class="table-responsive">
-                    {include file='table/table.tpl'}
-                </div>
-        </div>
-    </div>
-</main>
-
-{include file='admin/footer.tpl'}
-
-<script>
-    {include file='table/js_1.tpl'}
-    window.addEventListener('load', () => {
-        {include file='table/js_2.tpl'}
-    });
-</script>

+ 0 - 0
resources/views/material/analytics.tpl


+ 0 - 160
resources/views/material/auth/login.tpl

@@ -1,160 +0,0 @@
-{include file='header.tpl'}
-
-<div class="authpage">
-    <div class="container">
-        <form action="javascript:void(0);" method="POST">
-            <div class="auth-main auth-row auth-col-one">
-                <div class="auth-top auth-row">
-                    <a class="boardtop-left" href="/">
-                        <div>首 页</div>
-                    </a>
-                    <div class="auth-logo">
-                        <img src="/images/uim-logo-round.png">
-                    </div>
-                    <a href="/auth/register" class="boardtop-right">
-                        <div>注 册</div>
-                    </a>
-                </div>
-                <div class="auth-row">
-                    <div class="form-group-label auth-row row-login">
-                        <label class="floating-label" for="email">邮箱</label>
-                        <input class="form-control maxwidth-auth" id="email" type="email" name="Email" inputmode="email" autocomplete="username">
-                    </div>
-                </div>
-                <div class="auth-row">
-                    <div class="form-group-label auth-row row-login">
-                        <label class="floating-label" for="passwd">密码</label>
-                        <input class="form-control maxwidth-auth" id="passwd" type="password" name="Password" autocomplete="current-password">
-                    </div>
-                </div>
-                <div class="auth-row">
-                    <div class="form-group-label auth-row row-login">
-                        <label class="floating-label" for="code">两步验证码(未设置请忽略)</label>
-                        <input class="form-control maxwidth-auth" id="code" type="number" name="Code" inputmode="numeric" autocomplete="one-time-code">
-                    </div>
-                </div>
-
-                {if $config['enable_login_captcha'] == true && $config['captcha_provider'] == 'turnstile'}
-                    <div class="form-group-label auth-row">
-                        <div class="row">
-                            <div align="center" class="cf-turnstile" data-sitekey="{$captcha['turnstile_sitekey']}" data-theme="light"></div>
-                        </div>
-                    </div>
-                {/if}
-
-                <div class="btn-auth auth-row">
-                    <button id="login" type="submit" class="btn btn-block btn-brand waves-attach waves-light">
-                        确认登录
-                    </button>
-                </div>
-                <div class="auth-help auth-row">
-                    <div class="auth-help-table auth-row">
-                        <div class="checkbox checkbox-adv">
-                            <label for="remember_me">
-                                <input class="access-hide" value="week" id="remember_me" name="remember_me"
-                                       type="checkbox">记住我</input>
-                                <span class="checkbox-circle"></span>
-                                <span class="checkbox-circle-check"></span>
-                                <span class="checkbox-circle-icon mdi mdi-check"></span>
-                            </label>
-                        </div>
-                        <a href="/password/reset">忘记密码?</a>
-                    </div>
-                </div>
-                {if $config['enable_telegram_login'] === true}
-                    <div class="auth-bottom auth-row">
-                        <div class="tgauth">
-                            <span>Telegram</span>
-                            <button class="btn" id="calltgauth"><i class="mdi mdi-send-circle icon-lg"></i></button>
-                            <span>快捷登录</span>
-                        </div>
-                    </div>
-                {/if}
-            </div>
-        </form>
-        {if $config['enable_telegram_login'] === true}
-            {include file='./telegram_modal.tpl'}
-        {/if}
-    </div>
-</div>
-
-{include file='dialog.tpl'}
-
-{include file='footer.tpl'}
-
-{if $config['enable_telegram_login'] === true}
-    {include file='./telegram.tpl'}
-{/if}
-
-{literal}
-    <script>
-        let calltgbtn = document.querySelector('#calltgauth');
-        let tgboard = document.querySelector('.card.auth-tg.cust-model');
-        if (calltgbtn && tgboard) {
-            custModal(calltgbtn, tgboard);
-        }
-    </script>
-{/literal}
-
-<script>
-    $(document).ready(function () {
-        function login() {
-            document.getElementById("login").disabled = true;
-
-            $.ajax({
-                type: "POST",
-                url: location.pathname,
-                dataType: "json",
-                data: {
-                    {if $config['enable_login_captcha'] == true && $config['captcha_provider'] == 'turnstile'}
-                    turnstile: turnstile.getResponse(),
-                    {/if}
-                    code: $$getValue('code'),
-                    email: $$getValue('email'),
-                    passwd: $$getValue('passwd'),
-                    remember_me: $("#remember_me:checked").val()
-                },
-                success: (data) => {
-                    if (data.ret == 1) {
-                        $("#result").modal();
-                        $$.getElementById('msg').innerHTML = data.msg;
-                        window.setTimeout("location.href='/user'", {$config['jump_delay']});
-                    } else {
-                        $("#result").modal();
-                        $$.getElementById('msg').innerHTML = data.msg;
-                        document.getElementById("login").disabled = false;
-                    }
-                },
-                error: (jqXHR) => {
-                    $("#msg-error").hide(10);
-                    $("#msg-error").show(100);
-                    $$.getElementById('msg').innerHTML = `发生错误:${
-                        jqXHR.status
-                    }`;
-                    document.getElementById("login").disabled = false;
-                }
-            });
-        }
-
-        $("html").keydown(function (event) {
-            if (event.keyCode == 13) {
-                login();
-            }
-        });
-        $("#login").click(function () {
-            login();
-        });
-
-        $('div.modal').on('shown.bs.modal', function () {
-            $("div.gt_slider_knob").hide();
-        });
-
-        $('div.modal').on('hidden.bs.modal', function () {
-            $("div.gt_slider_knob").show();
-        });
-    })
-</script>
-
-{if $config['enable_login_captcha'] == true && $config['captcha_provider'] == 'turnstile'}
-<script src="https://challenges.cloudflare.com/turnstile/v0/api.js?compat=recaptcha" async defer></script>
-{/if}

+ 0 - 389
resources/views/material/auth/register.tpl

@@ -1,389 +0,0 @@
-{include file='header.tpl'}
-
-<div class="authpage auth-reg">
-    <div class="container">
-        <section class="content-inner">
-            <div class="auth-main auth-row">
-                <div class="auth-top auth-row">
-                    <a class="boardtop-left" href="/">
-                        <div>首 页</div>
-                    </a>
-                    <div class="auth-logo">
-                        <img src="/images/uim-logo-round.png">
-                    </div>
-                    <a href="/auth/login" class="boardtop-right">
-                        <div>登 录</div>
-                    </a>
-                </div>
-                {if $config['register_mode']!='close'}
-                    <div class="rowtocol">
-                        <div class="auth-row">
-                            <div class="form-group-label auth-row">
-                                <label class="floating-label" for="name">昵称</label>
-                                <input class="form-control maxwidth-auth" id="name" type="text">
-                            </div>
-                        </div>
-                    </div>
-                    <div class="rowtocol">
-                        <div class="auth-row">
-                            <div class="form-group-label auth-row">
-                                <label class="floating-label" for="email">邮箱(唯一凭证请认真对待)</label>
-                                <input class="form-control maxwidth-auth" id="email" type="email" maxlength="32" inputmode="email" autocomplete="username">
-                            </div>
-                        </div>
-                    </div>
-                    <div class="rowtocol">
-                        <div class="auth-row">
-                            <div class="form-group-label auth-row">
-                                <label class="floating-label" for="passwd">密码</label>
-                                <input class="form-control maxwidth-auth" id="passwd" type="password" autocomplete="new-password">
-                                <p id="passwd-strong" style="text-align: left; margin: 3px; font-size: 80%"></p>
-                            </div>
-                        </div>
-                    </div>
-                    <div class="rowtocol">
-                        <div class="auth-row">
-                            <div class="form-group form-group-label">
-                                <label class="floating-label" for="repasswd">重复密码</label>
-                                <input class="form-control maxwidth-auth" id="repasswd" type="password" autocomplete="new-password">
-                            </div>
-                        </div>
-                    </div>
-                    {if $config['enable_reg_im'] == true}
-                        <div class="rowtocol">
-                            <div class="auth-row">
-                                <div class="form-group form-group-label dropdown">
-                                    <label class="floating-label" for="im_type">选择您的联络方式</label>
-                                    <button class="form-control maxwidth-auth" id="im_type" data-toggle="dropdown">
-
-                                    </button>
-                                    <ul class="dropdown-menu" aria-labelledby="im_type">
-                                        <li><a href="#" class="dropdown-option" onclick="return false;" val="1"
-                                           data="im_type">微信</a></li>
-                                        <li><a href="#" class="dropdown-option" onclick="return false;" val="2"
-                                           data="im_type">QQ</a></li>
-                                        <li><a href="#" class="dropdown-option" onclick="return false;" val="4"
-                                           data="im_type">Telegram</a></li>
-                                        <li><a href="#" class="dropdown-option" onclick="return false;" val="5"
-                                               data="im_type">Discord</a></li>
-                                    </ul>
-                                </div>
-                            </div>
-                        </div>
-                        <div class="rowtocol">
-                            <div class="auth-row">
-                                <div class="form-group form-group-label">
-                                    <label class="floating-label" for="im_value">在这输入联络方式账号</label>
-                                    <input class="form-control maxwidth-auth" id="im_value" type="text">
-                                </div>
-                            </div>
-                        </div>
-                    {/if}
-                    {if $config['register_mode'] == 'invite'}
-                        <div class="rowtocol">
-                            <div class="auth-row">
-                                <div class="form-group form-group-label">
-                                    <label class="floating-label" for="code">邀请码(必填)</label>
-                                    <input class="form-control maxwidth-auth" id="code" type="text">
-                                </div>
-                            </div>
-                        </div>
-                    {/if}
-                    {if $enable_email_verify == true}
-                        <div class="rowtocol">
-                            <div class="rowtocol">
-                                <div class="form-group form-group-label">
-                                    <label class="floating-label" for="email_code">邮箱验证码</label>
-                                    <input class="form-control maxwidth-auth" id="email_code" type="text"
-                                           onKeypress="javascript:if(event.keyCode == 32)event.returnValue = false;" autocomplete="one-time-code">
-                                </div>
-                            </div>
-                            <div class="rowtocol">
-                                <div class="form-group form-group-label">
-                                    <button id="email_verify"
-                                            class="btn-reg btn btn-block btn-brand-accent waves-attach waves-light">
-                                        获取验证码
-                                    </button>
-                                </div>
-                            </div>
-                        </div>
-                    {/if}
-                    {if $config['enable_reg_captcha'] == true && $config['captcha_provider'] == 'turnstile'}
-                        <div class="form-group form-group-label">
-                            <div class="row">
-                                <div align="center" class="cf-turnstile" data-sitekey="{$captcha['turnstile_sitekey']}" data-theme="light"></div>
-                            </div>
-                        </div>
-                    {/if}
-                    <div class="rowtocol">
-                        <div class="btn-auth auth-row">
-                            <button id="tos" type="submit"
-                                    class="btn-reg btn btn-block btn-brand waves-attach waves-light">确认注册
-                            </button>
-                        </div>
-                    </div>
-                {else}
-                    <div class="form-group">
-                        <p>{$config['appName']} 已停止新用户注册,请联系网站管理员</p>
-                    </div>
-                {/if}
-                <div class="auth-bottom auth-row auth-reg">
-                    <div class="tgauth">
-
-                        <p>注册即代表同意<a href="/tos">服务条款</a>,以及保证所录入信息的真实性,如有不实信息会导致账号被删除。</p>
-
-                    </div>
-                </div>
-            </div>
-        </section>
-    </div>
-</div>
-
-<div aria-hidden="true" class="modal modal-va-middle fade" id="tos_modal" role="dialog" tabindex="-1">
-    <div class="modal-dialog">
-        <div class="modal-content">
-            <div class="modal-heading">
-                <h2 class="modal-title">注册 TOS</h2>
-            </div>
-            <div class="modal-inner">
-                {include file='reg_tos.tpl'}
-            </div>
-            <div class="modal-footer">
-                <p class="text-right">
-                    <button class="btn btn-flat btn-brand-accent waves-attach waves-effect"
-                            data-dismiss="modal" type="button" id="cancel">我不同意
-                    </button>
-                    <button class="btn btn-flat btn-brand-accent waves-attach waves-effect" data-dismiss="modal"
-                            id="reg"
-                            type="button">我同意
-                    </button>
-                </p>
-            </div>
-        </div>
-    </div>
-</div>
-
-{include file='dialog.tpl'}
-
-{include file='footer.tpl'}
-
-<script>
-const checkStrong = (sValue) => {
-    let modes = 0;
-    if (sValue.length < 7) return modes;
-    if (/\d/.test(sValue)) modes++;
-    if (/[a-z]/.test(sValue)) modes++;
-    if (/[A-Z]/.test(sValue)) modes++;
-    if (/\W/.test(sValue)) modes++;
-
-    switch (modes) {
-        case 1:
-            return 1;
-            break;
-        case 2:
-            return 2;
-        case 3:
-        case 4:
-            return sValue.length < 12 ? 3 : 4
-            break;
-    }
-}
-
-const showStrong = () => {
-    const password = document.getElementById('passwd').value;
-    const $passwordStrongEl = document.getElementById('passwd-strong');
-    const strong = checkStrong(password);
-    if (strong = 0) {
-        $passwordStrongEl.innerHTML = '需大于 8 位;推荐使用包含大小写字母、数字、符号的密码';
-    } else if (strong = 1) {
-        $passwordStrongEl.innerHTML = '你的密码强度为: <span style="color: red; font-weight: bold">非常弱</span>';
-    } else if (strong = 2) {
-        $passwordStrongEl.innerHTML = '你的密码强度为: <span style="color: red; font-weight: bold">弱</span>';
-    } else if (strong = 3) {
-        $passwordStrongEl.innerHTML = '你的密码强度为: <span style="color: yellow; font-weight: bold">中等</span>';
-    } else if (strong = 4) {
-        $passwordStrongEl.innerHTML = '你的密码强度为: <span style="color: green; font-weight: bold">强</span>';
-    }
-}
-
-document.getElementById('passwd').addEventListener('input', checkStrong);
-</script>
-
-{if $config['register_mode']!='close'}
-    <script>
-        $(document).ready(function () {
-            function register() {
-                if ((getCookie('code')) != '') {
-                    code = getCookie('code');
-                } else {
-                    code = $$getValue('code');
-                }
-                
-                document.getElementById("tos").disabled = true;
-
-                $.ajax({
-                    type: "POST",
-                    url: location.pathname,
-                    dataType: "json",
-                    data: {
-                        {if $config['enable_reg_captcha'] == true && $config['captcha_provider'] == 'turnstile'}
-                        turnstile: turnstile.getResponse(),
-                        {/if}
-                        {if $config['enable_reg_im'] == true}
-                        im_value: $$getValue('im_value'),
-                        im_type: $$getValue('im_type'),
-                        {/if}
-                        {if $enable_email_verify == true}
-                        emailcode: $$getValue('email_code'),
-                        {/if}
-                        code,
-                        name: $$getValue('name'),
-                        email: $$getValue('email'),
-                        passwd: $$getValue('passwd'),
-                        repasswd: $$getValue('repasswd')
-                    },
-                    success: (data) => {
-                        if (data.ret == 1) {
-                            $("#result").modal();
-                            $$.getElementById('msg').innerHTML = data.msg;
-                            window.setTimeout("location.href='/user'", {$config['jump_delay']});
-                        } else {
-                            $("#result").modal();
-                            $$.getElementById('msg').innerHTML = data.msg;
-                            setCookie('code', '', 0);
-                            $("#code").val(getCookie('code'));
-                            document.getElementById("tos").disabled = false;
-                        }
-                    },
-                    error: (jqXHR) => {
-                        $("#msg-error").hide(10);
-                        $("#msg-error").show(100);
-                        $$.getElementById('msg-error-p').innerHTML = `发生错误:${
-                                jqXHR.status
-                                }`;
-                        document.getElementById("tos").disabled = false;
-                    }
-                });
-            }
-
-            $("html").keydown(function (event) {
-                if (event.keyCode == 13) {
-                    $("#tos_modal").modal();
-                }
-            });
-
-            $("#reg").click(function () {
-                register();
-            });
-
-            $("#tos").click(function () {
-                $("#tos_modal").modal();
-            });
-        })
-    </script>
-{/if}
-
-{if $enable_email_verify == true}
-    <script>
-        var wait = 60;
-
-        function time(o) {
-            if (wait == 0) {
-                o.removeAttr("disabled");
-                o.text("获取验证码");
-                wait = 60;
-            } else {
-                o.attr("disabled", "disabled");
-                o.text("重新发送(" + wait + ")");
-                wait--;
-                setTimeout(function () {
-                            time(o)
-                        },
-                        1000)
-            }
-        }
-
-        $(document).ready(function () {
-            $("#email_verify").click(function () {
-                time($("#email_verify"));
-
-                $.ajax({
-                    type: "POST",
-                    url: "send",
-                    dataType: "json",
-                    data: {
-                        email: $$getValue('email')
-                    },
-                    success: (data) => {
-                        if (data.ret) {
-                            $("#result").modal();
-                            $$.getElementById('msg').innerHTML = data.msg;
-
-                        } else {
-                            $("#result").modal();
-                            $$.getElementById('msg').innerHTML = data.msg;
-                        }
-                    },
-                    error: (jqXHR) => {
-                        $("#result").modal();
-                        $$.getElementById('msg').innerHTML = `${
-                                data.msg
-                                } 出现了一些错误`;
-                    }
-                })
-            })
-        })
-    </script>
-{/if}
-
-{if $config['enable_reg_captcha'] == true && $config['captcha_provider'] == 'turnstile'}
-<script src="https://challenges.cloudflare.com/turnstile/v0/api.js?compat=recaptcha" async defer></script>
-{/if}
-
-{*dumplin:aff链*}
-<script>
-    {*dumplin:轮子1.js读取url参数*}
-    function getQueryVariable(variable) {
-        var query = window.location.search.substring(1);
-        var vars = query.split("&");
-        for (var i = 0; i < vars.length; i++) {
-            var pair = vars[i].split("=");
-            if (pair[0] == variable) {
-                return pair[1];
-            }
-        }
-        return "";
-    }
-
-    {*dumplin:轮子2.js写入cookie*}
-    function setCookie(cname, cvalue, exdays) {
-        var d = new Date();
-        d.setTime(d.getTime() + (exdays * 24 * 60 * 60 * 1000));
-        var expires = "expires=" + d.toGMTString();
-        document.cookie = cname + "=" + cvalue + "; " + expires;
-    }
-
-    {*dumplin:轮子3.js读取cookie*}
-    function getCookie(cname) {
-        var name = cname + "=";
-        var ca = document.cookie.split(';');
-        for (var i = 0; i < ca.length; i++) {
-            var c = ca[i].trim();
-            if (c.indexOf(name) == 0) return c.substring(name.length, c.length);
-        }
-        return "";
-    }
-
-    {*dumplin:读取url参数写入cookie,自动跳转隐藏url邀请码*}
-    if (getQueryVariable('code') != '') {
-        setCookie('code', getQueryVariable('code'), 30);
-        window.location.href = '/auth/register';
-    }
-
-    {if $config['register_mode'] == 'invite'}
-    {*dumplin:读取cookie,自动填入邀请码框*}
-    if ((getCookie('code')) != '') {
-        $("#code").val(getCookie('code'));
-    }
-    {/if}
-</script>

+ 0 - 88
resources/views/material/auth/telegram.tpl

@@ -1,88 +0,0 @@
-<script src="https://fastly.jsdelivr.net/gh/davidshimjs/qrcodejs@gh-pages/qrcode.min.js"></script>
-<script>
-    var telegram_qrcode = 'mod://login/{$login_token}';
-    var qrcode = new QRCode(document.getElementById("telegram-qr"));
-    qrcode.clear();
-    qrcode.makeCode(telegram_qrcode);
-</script>
-<script>
-    var flag = false;
-    $(document).ready(function () {
-        $("#calltgauth").click(
-                function () {
-                    if(flag == false){
-                        f();
-                        flag = true;
-                    }else{
-                        return 0;
-                    }
-                }
-        );
-    function f() {
-            $.ajax({
-                type: "POST",
-                url: "qrcode_check",
-                dataType: "json",
-                data: {
-                    token: "{$login_token}",
-                    number: "{$login_number}"
-                },
-                success: (data) => {
-                    if (data.ret > 0) {
-                        clearTimeout(tid);
-                        $.ajax({
-                            type: "POST",
-                            url: "/auth/qrcode_login",
-                            dataType: "json",
-                            data: {
-                                token: "{$login_token}",
-                                number: "{$login_number}"
-                            },
-                            success: (data) => {
-                                if (data.ret) {
-                                    $("#result").modal();
-                                    $$.getElementById('msg').innerHTML = '登录成功!';
-                                    window.setTimeout("location.href=/user/", {$config['jump_delay']});
-                                }
-                            },
-                            error: (jqXHR) => {
-                                $("#result").modal();
-                                $$.getElementById('msg').innerHTML = `发生错误:${
-                                        jqXHR.status
-                                        }`;
-                            }
-                        });
-                    } else {
-                        if (data.ret === -1) {
-                            $('#telegram-qr').replaceWith('此二维码已经过期,请刷新页面后重试。');
-                            $('#code_number').replaceWith('<code id="code_number">此数字已经过期,请刷新页面后重试。</code>');
-                        }
-                    }
-                },
-                error: (jqXHR) => {
-                    if (jqXHR.status !== 200 && jqXHR.status !== 0) {
-                        $("#result").modal();
-                        $$.getElementById('msg').innerHTML = `发生错误:${
-                                jqXHR.status
-                                }`;
-                    }
-                }
-            });
-            tid = setTimeout(f, 2500); //循环调用触发setTimeout
-        }
-    })
-</script>
-<script>
-    $(document).ready(function () {
-        var el = document.createElement('script');
-        document.getElementById('telegram-login-box').append(el);
-        el.onload = function () {
-            $('#telegram-alert').remove()
-        }
-        el.src = 'https://telegram.org/js/telegram-widget.js?4';
-        el.setAttribute('data-size', 'large')
-        el.setAttribute('data-telegram-login', '{$telegram_bot}')
-        el.setAttribute('data-auth-url', '{$base_url}/auth/telegram_oauth')
-        el.setAttribute('data-request-access', 'write')
-    });
-</script>

+ 0 - 50
resources/views/material/auth/telegram_modal.tpl

@@ -1,50 +0,0 @@
-<div class="card auth-tg cust-model">
-    <div class="card-main">
-        <nav class="tab-nav margin-top-no margin-bottom-no">
-            <ul class="nav nav-justified">
-                <li class="active">
-                    <a class="waves-attach" data-toggle="tab" href="#number_login">一键/验证码登录</a>
-                </li>
-                <li>
-                    <a class="waves-attach" data-toggle="tab" href="#qrcode_login">二维码登录</a>
-                </li>
-            </ul>
-        </nav>
-        <div class="tab-pane fade active in" id="number_login">
-            <div class="card-header">
-                <div class="card-inner">
-                    <h1 class="card-heading" style=" text-align:center;font-weight:bold;">Telegram 登录</h1>
-                </div>
-            </div>
-            <div class="card-inner">
-                <div class="text-center">
-                    <p>一键登陆</p>
-                </div>
-                <p id="telegram-alert">正在载入 Telegram,如果长时间未显示请刷新页面或检查代理</p>
-                <div class="text-center" id="telegram-login-box"></div>
-                <p>或者添加机器人账号 <a href="https://t.me/{$telegram_bot}">@{$telegram_bot}</a>,发送下面的数字给它。
-                </p>
-                <div class="text-center">
-                    <h2><code id="code_number">{$login_number}</code></h2>
-                </div>
-            </div>
-        </div>
-        <div class="tab-pane fade" id="qrcode_login">
-            <div class="card-header">
-                <div class="card-inner">
-                    <h1 class="card-heading" style=" text-align:center;font-weight:bold;">Telegram扫码登录</h1>
-                </div>
-            </div>
-            <div class="card-inner">
-                <p>添加机器人账号 <a href="https://t.me/{$telegram_bot}">@{$telegram_bot}</a>,拍下下面这张二维码发给它。
-                </p>
-                <div class="form-group form-group-label">
-                    <div class="text-center qr-center">
-                        <div id="telegram-qr"></div>
-                    </div>
-                </div>
-
-            </div>
-        </div>
-    </div>
-</div>

+ 0 - 16
resources/views/material/dialog.tpl

@@ -1,16 +0,0 @@
-<div aria-hidden="true" class="modal modal-va-middle fade" id="result" role="dialog" tabindex="-1">
-    <div class="modal-dialog modal-xs">
-        <div class="modal-content">
-            <div class="modal-inner">
-                <p class="h5 margin-top-sm text-black-hint" id="msg"></p>
-            </div>
-            <div class="modal-footer">
-                <p class="text-right">
-                    <button class="btn btn-flat btn-brand-accent waves-attach" data-dismiss="modal" type="button"
-                            id="result_ok">知道了
-                    </button>
-                </p>
-            </div>
-        </div>
-    </div>
-</div>

+ 0 - 15
resources/views/material/footer.tpl

@@ -1,15 +0,0 @@
-<footer class="ui-footer">
-    <div class="container">
-        &copy;{date("Y")} {$config['appName']} | Powered by <a href="/staff">SSPANEL</a>
-        {if $config['enable_analytics_code'] === true}{include file='analytics.tpl'}{/if}
-    </div>
-</footer>
-
-<!-- js -->
-<script src="https://cdn.staticfile.org/jquery/3.6.1/jquery.min.js"></script>
-<script src="/theme/material/js/base.min.js"></script>
-<script src="/theme/material/js/project.min.js"></script>
-
-</body>
-{include file='live_chat.tpl'}
-</html>

+ 0 - 24
resources/views/material/header.tpl

@@ -1,24 +0,0 @@
-<!DOCTYPE html>
-<html lang="zh-cn">
-<head>
-    <meta charset="UTF-8">
-    <meta content="IE=edge" http-equiv="X-UA-Compatible">
-    <meta content="initial-scale=1.0, maximum-scale=1.0, user-scalable=no, width=device-width" name="viewport">
-    <meta name="theme-color" content="#4285f4">
-    <title>{$config['appName']}</title>
-    <!-- css -->
-    <link href="/theme/material/css/base.min.css" rel="stylesheet">
-    <link href="/theme/material/css/project.min.css" rel="stylesheet">
-    <link href="/theme/material/css/auth.min.css" rel="stylesheet">
-    <link href="//fastly.jsdelivr.net/npm/@mdi/[email protected]/css/materialdesignicons.min.css" rel="stylesheet">
-    <style>
-        .divcss5 {
-            position: fixed;
-            bottom: 0;
-        }
-    </style>
-    <!-- js -->
-    <script src="/assets/js/fuck.min.js"></script>
-</head>
-
-<body class="page-brand">

+ 0 - 16
resources/views/material/index.tpl

@@ -1,16 +0,0 @@
-<!DOCTYPE HTML>
-<html lang="zh-cn">
-<head>
-    <meta charset="UTF-8">
-    <title>{$config['appName']}</title>
-    {if $user->isLogin}
-    <script>
-        window.location.href = "/user"
-    </script>
-    {else}
-    <script>
-        window.location.href = "/auth/login"
-    </script>
-    {/if}
-</head>
-</html>

+ 0 - 110
resources/views/material/live_chat.tpl

@@ -1,110 +0,0 @@
-{if $config['live_chat'] == 'tawk'}
-<script type="text/javascript">
-    var Tawk_API=Tawk_API||{}, Tawk_LoadStart=new Date();
-    (function(){
-        var id = "{$config['tawk_id']}";
-        var s1=document.createElement("script"),s0=document.getElementsByTagName("script")[0];
-        s1.async=true;
-        s1.src='https://embed.tawk.to/' + id + '/default';
-        s1.charset='UTF-8';
-        s1.setAttribute('crossorigin','*');
-        s0.parentNode.insertBefore(s1,s0);
-    })();
-</script>
-{/if}
-
-{if $config['live_chat'] == 'crisp'}
-<script type="text/javascript"> window.$crisp = [];
-    window.CRISP_WEBSITE_ID = "{$config["crisp_id"]}";
-    (function () {
-        d = document;
-        s = d.createElement("script");
-        s.src = "https://client.crisp.chat/l.js";
-        s.async = 1;
-        d.getElementsByTagName("head")[0].appendChild(s);
-    })();
-    $crisp.push(["safe", true])
-    $crisp.push(["set","user:nickname", "{$user->user_name}"],
-              ["set","user:email","{$user->email}"],
-              ["set", "session:data",
-                [[
-                  ["user_id","{$user->id}"],
-                  ["user_class","{$user->class}"],
-                  ["reg_email","{$user->email}"],
-                  ["last_use_time","{$user->lastSsTime()}"],
-                  ["expire_in","{$user->expire_in}"],
-                  ["class_expire_time","{$user->class_expire}"],
-                  ["available_traffic","{$user->unusedTraffic()}"],
-                  ["balance","{$user->money}"]
-                ]]
-              ]);
-</script>
-{/if}
-
-{if $config['live_chat'] == 'livechat'}
-<script>
-{literal}
-window.__lc = window.__lc || {};
-{/literal}
-window.__lc.license = "{$config['livechat_id']}";;
-window.__lc.params = [
-    { name: '用户编号', value: '{$user->id}' },
-    { name: '用户类别', value: '{$user->class}' },
-    { name: '注册邮箱', value: '{$user->email}' },
-    { name: '上次使用', value: '{$user->lastSsTime()}' },
-    { name: '到期时间', value: '{$user->expire_in}' },
-    { name: '等级时间', value: '{$user->class_expire}' },
-    { name: '剩余流量', value: '{$user->unusedTraffic()}' },
-    { name: '账户余额', value: '{$user->money}' }
-];
-{literal}
-(function(n, t, c) {
-    function i(n) {
-        return e._h ? e._h.apply(null, n) : e._q.push(n)
-    }
-    var e = {
-        _q: [],
-        _h: null,
-        _v: "2.0",
-        on: function() {
-            i(["on", c.call(arguments)])
-        },
-        once: function() {
-            i(["once", c.call(arguments)])
-        },
-        off: function() {
-            i(["off", c.call(arguments)])
-        },
-        get: function() {
-            if (!e._h) throw new Error("[LiveChatWidget] You can't use getters before load.");
-            return i(["get", c.call(arguments)])
-        },
-        call: function() {
-            i(["call", c.call(arguments)])
-        },
-        init: function() {
-            var n = t.createElement("script");
-            n.async = !0,
-            n.type = "text/javascript",
-            n.src = "https://cdn.livechatinc.com/tracking.js",
-            t.head.appendChild(n)
-        }
-    }; ! n.__lc.asyncInit && e.init(),
-    n.LiveChatWidget = n.LiveChatWidget || e
-} (window, document, [].slice))
-</script>
-{/literal}
-{/if}
-
-{if $config['live_chat'] == 'mylivechat'}
-<script type="text/javascript">
-    (() => {
-        var hccid = "{$config['mylivechat_id']}";
-        var nt = document.createElement("script");
-        nt.async = true;
-        nt.src = "https://mylivechat.com/chatinline.aspx?hccid=" + hccid;
-        var ct = document.getElementsByTagName("script")[0];
-        ct.parentNode.insertBefore(nt, ct);
-    })();
-</script>
-{/if}

+ 0 - 90
resources/views/material/password/reset.tpl

@@ -1,90 +0,0 @@
-{include file='header.tpl'}
-
-<!-- 新的 -->
-<div class="authpage">
-    <div class="container">
-        <div class="auth-main auth-row auth-col-one">
-            <div class="auth-top auth-row">
-                <a class="boardtop-left" href="/">
-                    <div>首 页</div>
-                </a>
-                <div class="auth-logo">
-                    <img src="/images/uim-logo-round.png">
-                </div>
-                <a href="/auth/login" class="boardtop-right">
-                    <div>登 录</div>
-                </a>
-            </div>
-            <div class="auth-row">
-                <div class="form-group-label auth-row row-login">
-                    <label class="floating-label" for="email">邮箱</label>
-                    <input class="form-control maxwidth-auth" id="email" type="email" inputmode="email" autocomplete="username">
-                </div>
-            </div>
-            {if $config['enable_reset_password_captcha'] == true && $config['captcha_provider'] == 'turnstile'}
-            <div class="form-group-label auth-row">
-                <div class="row">
-                    <div align="center" class="cf-turnstile" data-sitekey="{$captcha['turnstile_sitekey']}" data-theme="light"></div>
-                </div>
-            </div>
-            {/if}
-            <div class="btn-auth auth-row">
-                <button id="reset" type="submit" class="btn btn-block btn-brand waves-attach waves-light">重置密码</button>
-            </div>
-        </div>
-        <div class="card auth-tg">
-            <div class="card-main"></div>
-        </div>
-    </div>
-</div>
-
-{include file='dialog.tpl'}
-
-{include file='footer.tpl'}
-
-<script>
-    $(document).ready(function () {
-        function reset() {
-            $("#result").modal();
-            $$.getElementById('msg').innerHTML = '发送中,请等待'
-            $.ajax({
-                type: "POST",
-                url: location.pathname,
-                dataType: "json",
-                data: {
-                    email: $$getValue('email'),
-                    {if $config['enable_reset_password_captcha'] == true && $config['captcha_provider'] == 'turnstile'}
-                    turnstile: turnstile.getResponse(),
-                    {/if}
-                },
-                success: (data) => {
-                    if (data.ret == 1) {
-                        $("#result").modal();
-                        $$.getElementById('msg').innerHTML = data.msg;
-                        window.setTimeout("location.href='/auth/login'", 2000);
-                    } else {
-                        $("#result").modal();
-                        $$.getElementById('msg').innerHTML = data.msg;
-                    }
-                },
-                error: (jqXHR) => {
-                    $("#result").modal();
-                    $$.getElementById('msg').innerHTML = data.msg;
-                }
-            });
-        }
-
-        $("html").keydown(function (event) {
-            if (event.keyCode === 13) {
-                reset();
-            }
-        });
-        $("#reset").click(function () {
-            reset();
-        });
-    })
-</script>
-
-{if $config['enable_reset_password_captcha'] == true && $config['captcha_provider'] == 'turnstile'}
-<script src="https://challenges.cloudflare.com/turnstile/v0/api.js?compat=recaptcha" async defer></script>
-{/if}

+ 0 - 101
resources/views/material/password/token.tpl

@@ -1,101 +0,0 @@
-{include file='header.tpl'}
-
-<!-- 新的 -->
-<div class="authpage">
-    <div class="container">
-
-        <div class="auth-main auth-row auth-col-one">
-            <div class="auth-top auth-row">
-                <a class="boardtop-left" href="/">
-                    <div>首 页</div>
-                </a>
-                <div class="auth-logo">
-                    <img src="/images/uim-logo-round.png">
-                </div>
-                <a href="/auth/login" class="boardtop-right">
-                    <div>登 录</div>
-                </a>
-            </div>
-            <div class="auth-row">
-                <div class="form-group-label auth-row row-login">
-                    <label class="floating-label" for="password">密码</label>
-                    <input class="form-control maxwidth-auth" id="password" type="password">
-                </div>
-            </div>
-            <div class="auth-row">
-                <div class="form-group-label auth-row row-login">
-                    <label class="floating-label" for="repasswd">重复密码</label>
-                    <input class="form-control maxwidth-auth" id="repasswd" type="password">
-                </div>
-            </div>
-
-            <div class="btn-auth auth-row">
-                <button id="reset" type="submit" class="btn btn-block btn-brand waves-attach waves-light">重置密码</button>
-            </div>
-            <div class="auth-help auth-row">
-                <div class="auth-help-table auth-row auth-reset">
-                    <a href="/auth/register">甚至想要重新注册</a>
-                </div>
-            </div>
-            <div class="auth-bottom auth-row auth-reset">
-                <div class="tgauth">
-                    <p>请妥善保管好自己的登录密码</p>
-                </div>
-            </div>
-        </div>
-
-        <div class="card auth-tg">
-            <div class="card-main">
-
-            </div>
-        </div>
-    </div>
-</div>
-
-{include file='dialog.tpl'}
-
-{include file='footer.tpl'}
-
-<script>
-    $(document).ready(function () {
-        function reset() {
-            $.ajax({
-                type: "POST",
-                url: location.pathname,
-                dataType: "json",
-                data: {
-                    password: $$getValue('password'),
-                    repasswd: $$getValue('repasswd'),
-                },
-                success: (data) => {
-                    if (data.ret) {
-                        $("#result").modal();
-                        $$.getElementById('msg').innerHTML = data.msg;
-                        window.setTimeout("location.href='/auth/login'", {$config['jump_delay']});
-                    } else {
-                        $("#result").modal();
-                        $$.getElementById('msg').innerHTML = data.msg;
-                    }
-                },
-                error: (jqXHR) => {
-                    $("#msg-error").hide(10);
-                    $("#msg-error").show(100);
-                    $$.getElementById('msg-error-p').innerHTML = `发生错误:${
-                            jqXHR.status
-                            }`;
-                    // 在控制台输出错误信息
-                    //console.log(removeHTMLTag(jqXHR.responseText));
-                }
-            });
-        }
-
-        $("html").keydown(function (event) {
-            if (event.keyCode == 13) {
-                reset();
-            }
-        });
-        $("#reset").click(function () {
-            reset();
-        });
-    })
-</script>

+ 0 - 8
resources/views/material/reg_tos.tpl

@@ -1,8 +0,0 @@
-<ul>
-    <li>邮箱为本站服务的唯一凭证,请自行保管。</li>
-    <li>本站会以SHA256加密存储用户密码,所有服务器无日志形式运行。</li>
-    <li>禁止使用本站服务进行任何违法恶意活动。</li>
-    <li>使用任何服务,需遵循服务所属国家的相关法律。</li>
-    <li>对于免费用户,我们有权在不通知的情况下删除账户。</li>
-    <li>任何违反使用条款的用户,我们将会删除违规账户并收回使用本站服务的权利。</li>
-</ul>

+ 0 - 46
resources/views/material/staff.tpl

@@ -1,46 +0,0 @@
-<!DOCTYPE html>
-<html lang="zh-cn">
-<head>
-    <meta charset="UTF-8">
-    <title>Staff - {$config['appName']}</title>
-    <link rel="shortcut icon" href="/favicon.ico"/>
-    <link rel="bookmark" href="/favicon.ico"/>
-    <link rel="stylesheet" href="/assets/css/info-pages.min.css">
-</head>
-<body>
-<div class="container">
-    <div class="copy-container center-xy">
-        <p>MIT许可证(The MIT License)</p>
-        <p class="copyright">&copy;2015 orvice</p>
-        <p class="copyright">&copy;{date("Y")} SSPanel UIM</p>
-        <p>特此免费授予任何获得副本的人这个软件和相关的文档文件(“软件”)来处理在软件中没有限制,
-            包括但不限于权利使用,复制,修改,合并,发布,分发,再许可和/或销售该软件的副本,
-            并允许软件所属的人员提供这样做,但须符合以下条件:</p>
-        <p>上述版权声明和本许可声明必须包含在内本软件的副本或实质性部分。</p>
-        <p>本软件按“原样”提供,不附有任何形式的明示或暗示保证默示的,包括但不限于对适销性的保证,
-            适用于特定目的和不侵权。在任何情况下,作者或版权持有者对任何索赔,损坏或其他责任均不负任何责任责任,无论是在合同,民事侵权行为或其他方面,
-            与本软件或本软件的使用或其他交易有关或与之有关软件。</p>
-        <br>
-        <h1>免责声明</h1>
-        <p>您当前所访问的站点使用的是下面所提到的开源程序。您能看到这个页面仅代表这个站点使用了本程序,其使用过程中发生的一切问题需要其自行解决,本程序不承担任何责任。</p>
-        <br>
-        <h1>SSPanel UIM 贡献者(排名不分先后):</h1>
-        <p><a href="https://t.me/Anankke">芋头</a></p>
-        <p><a href="https://github.com/ZJY2003">Tony Zou</a></p>
-        <p><a href="https://github.com/M1Screw">兩足貓</a></p>
-        <p><a href="https://github.com/Daemonite/">Daemonite</a></p>
-        <p><a href="https://github.com/galaxychuck">galaxyq</a></p>
-        <p><a href="http://mengyang.wang/">mengyang</a></p>
-        <p><a href="http://tony.ecy.ren/">tony</a></p>
-        <p><a href="https://github.com/dumplin233">dumplin</a></p>
-        <p><a href="https://github.com/mxihan">Rin SAMA</a></p>
-        <p><a href="https://github.com/laurieryayoi">Nymph</a></p>
-        <p><a href="https://github.com/xcxnig">Miku</a></p>
-        <br>
-        <h1>鸣谢</h1>
-        <p>所有被引用过代码的使用者,以及所有提交过 PR 的贡献者。当然,还有在使用这份程序的你我Ta。</p>
-    </div>
-</div>
-
-</body>
-</html>

+ 0 - 11
resources/views/material/table/checkbox.tpl

@@ -1,11 +0,0 @@
-{foreach $table_config['total_column'] as $key => $value}
-    <div class="checkbox checkbox-adv checkbox-inline">
-        <label for="checkbox_{$key}">
-            <input href="javascript:void(0);" onClick="modify_table_visible('checkbox_{$key}', '{$key}')"
-                   {if in_array($key, $table_config['default_show_column']) || count($table_config['default_show_column']) == 0}checked=""{/if}
-                   class="access-hide" id="checkbox_{$key}" name="checkbox_{$key}" type="checkbox">{$value}
-            <span class="checkbox-circle"></span><span class="checkbox-circle-check"></span><span
-                    class="checkbox-circle-icon mdi mdi-check"></span>
-        </label>
-    </div>
-{/foreach}

+ 0 - 12
resources/views/material/table/js_1.tpl

@@ -1,12 +0,0 @@
-function modify_table_visible(id, key) {
-if(document.getElementById(id).checked)
-{
-table_1.columns( '.' + key ).visible( true );
-localStorage.setItem(window.location.href + '-haschecked-' + id, true);
-}
-else
-{
-table_1.columns( '.' + key ).visible( false );
-localStorage.setItem(window.location.href + '-haschecked-' + id, false);
-}
-}

+ 0 - 41
resources/views/material/table/js_2.tpl

@@ -1,41 +0,0 @@
-table_1 = $('#table_1').DataTable({
-ajax: {
-url: '{$table_config['ajax_url']}',
-type: "POST"
-},
-processing: true,
-serverSide: true,
-order: [[ 0, 'desc' ]],
-stateSave: true,
-columnDefs: [
-{
-targets: [ '_all' ],
-className: 'mdl-data-table__cell--non-numeric'
-}
-],
-columns: [
-{foreach $table_config['total_column'] as $key => $value}
-    { "data": "{$key}" },
-{/foreach}
-],
-{include file='table/lang_chinese.tpl'}
-})
-
-
-var has_init = JSON.parse(localStorage.getItem(window.location.href + '-hasinit'));
-if (has_init != true) {
-localStorage.setItem(window.location.href + '-hasinit', true);
-} else {
-{foreach $table_config['total_column'] as $key => $value}
-    var checked = JSON.parse(localStorage.getItem(window.location.href + '-haschecked-checkbox_{$key}'));
-    if (checked == true) {
-    document.getElementById('checkbox_{$key}').checked = true;
-    } else {
-    document.getElementById('checkbox_{$key}').checked = false;
-    }
-{/foreach}
-}
-
-{foreach $table_config['total_column'] as $key => $value}
-    modify_table_visible('checkbox_{$key}', '{$key}');
-{/foreach}

+ 0 - 4
resources/views/material/table/js_delete.tpl

@@ -1,4 +0,0 @@
-table_1
-.row('#row_1_' + deleteid)
-.remove()
-.draw();

+ 0 - 24
resources/views/material/table/lang_chinese.tpl

@@ -1,24 +0,0 @@
-language: {
-"sProcessing": "处理中...",
-"sLengthMenu": "显示 _MENU_ 项结果",
-"sZeroRecords": "没有匹配结果",
-"sInfo": "显示第 _START_ 至 _END_ 项结果,共 _TOTAL_ 项",
-"sInfoEmpty": "显示第 0 至 0 项结果,共 0 项",
-"sInfoFiltered": "(由 _MAX_ 项结果过滤)",
-"sInfoPostFix": "",
-"sSearch": "搜索:",
-"sUrl": "",
-"sEmptyTable": "表中数据为空",
-"sLoadingRecords": "载入中...",
-"sInfoThousands": ",",
-"oPaginate": {
-"sFirst": "首页",
-"sPrevious": "上页",
-"sNext": "下页",
-"sLast": "末页"
-},
-"oAria": {
-"sSortAscending": ": 以升序排列此列",
-"sSortDescending": ": 以降序排列此列"
-}
-}

+ 0 - 16
resources/views/material/table/table.tpl

@@ -1,16 +0,0 @@
-<table id="table_1" class="mdl-data-table" cellspacing="0" width="100%">
-    <thead>
-        <tr>
-            {foreach $table_config['total_column'] as $key => $value}
-                <th class="{$key}">{$value}</th>
-            {/foreach}
-        </tr>
-    </thead>
-    <tbody>
-        <tr>
-            {foreach $table_config['total_column'] as $key => $value}
-                <th class="{$key}">{$value}</th>
-            {/foreach}
-        </tr>
-    </tbody>
-</table>

+ 0 - 216
resources/views/material/telegram_error.tpl

@@ -1,216 +0,0 @@
-<!DOCTYPE HTML>
-<html lang="zh-cn">
-<head>
-    <title>产生了一个错误 - {$config['appName']} </title>
-    <meta name="keywords" content=""/>
-    <meta name="description" content=""/>
-    <meta charset="utf-8"/>
-    <link rel="shortcut icon" href="/favicon.ico"/>
-    <link rel="bookmark" href="/favicon.ico" type="image/x-icon"/>
-    <meta name="viewport" content="width=device-width, initial-scale=1, user-scalable=no"/>
-    <link rel="shortcut icon" type="image/ico" href="images/ssr.ico">
-    <style>
-        /*! Spectre.css v0.5.0 | MIT License | github.com/picturepan2/spectre */
-
-        html {
-            font-family: sans-serif;
-            -webkit-text-size-adjust: 100%;
-            -ms-text-size-adjust: 100%
-        }
-
-        body {
-            margin: 0
-        }
-
-        footer {
-            display: block
-        }
-
-        a {
-            background-color: transparent;
-            -webkit-text-decoration-skip: objects
-        }
-
-        a:active,
-        a:hover {
-            outline-width: 0
-        }
-
-        ::-webkit-file-upload-button {
-            -webkit-appearance: button;
-            font: inherit
-        }
-
-        *,
-        ::after,
-        ::before {
-            box-sizing: inherit
-        }
-
-        html {
-            box-sizing: border-box;
-            font-size: 20px;
-            line-height: 1.5;
-            -webkit-tap-highlight-color: transparent
-        }
-
-        body {
-            background: #fff;
-            color: #50596c;
-            font-family: -apple-system, system-ui, BlinkMacSystemFont, "Segoe UI", Roboto, "Helvetica Neue", sans-serif;
-            font-size: .8rem;
-            overflow-x: hidden;
-            text-rendering: optimizeLegibility
-        }
-
-        a {
-            color: #5755d9;
-            outline: 0;
-            text-decoration: none
-        }
-
-        a:focus {
-            box-shadow: 0 0 0 .1rem rgba(87, 85, 217, .2)
-        }
-
-        a:active,
-        a:focus,
-        a:hover {
-            color: #4240d4;
-            text-decoration: underline
-        }
-
-        .h1,
-        .h4 {
-            font-weight: 500
-        }
-
-        .h1 {
-            font-size: 2rem
-        }
-
-        .h4 {
-            font-size: 1.2rem
-        }
-
-        p {
-            margin: 0 0 1rem
-        }
-
-        a {
-            -webkit-text-decoration-skip: ink edges;
-            text-decoration-skip: ink edges
-        }
-
-        .form-input:not(:placeholder-shown):invalid {
-            border-color: #e85600
-        }
-
-        .form-input:not(:placeholder-shown):invalid:focus {
-            box-shadow: 0 0 0 .1rem rgba(232, 86, 0, .2)
-        }
-
-        .container {
-            margin-left: auto;
-            margin-right: auto;
-            padding-left: .4rem;
-            padding-right: .4rem;
-            width: 100%
-        }
-
-        .container.grid-lg {
-            max-width: 976px
-        }
-
-        .empty {
-            background: #f8f9fa;
-            border-radius: .1rem;
-            color: #667189;
-            padding: 3.2rem 1.6rem;
-            text-align: center
-        }
-
-        .empty .empty-subtitle,
-        .empty .empty-title {
-            margin: .4rem auto
-        }
-
-        .empty .empty-action {
-            margin-top: .8rem
-        }
-
-        .text-error {
-            color: #e85600
-        }
-
-        .divider {
-            display: block;
-            position: relative
-        }
-
-        .divider {
-            border-top: .05rem solid #e7e9ed;
-            height: .05rem;
-            margin: .4rem 0
-        }
-
-        .container::after {
-            clear: both;
-            content: "";
-            display: table
-        }
-
-        .centered {
-            display: block;
-            float: none;
-            margin-left: auto;
-            margin-right: auto
-        }
-
-        .valign {
-            display: -webkit-box !important;
-            display: -webkit-flex !important;
-            display: -ms-flexbox !important;
-            display: flex !important;
-            -webkit-box-align: center !important;
-            -webkit-align-items: center !important;
-            -ms-flex-align: center !important;
-            align-items: center !important;
-        }
-
-        .section-footer {
-            color: #acb3c2;
-            padding: 2rem .5rem 0 .5rem;
-            position: relative;
-            z-index: 200;
-        }
-
-        .section-footer a {
-            color: #667189;
-        }
-    </style>
-    {if !empty($redirect)}
-        <meta http-equiv="refresh" content="3; url={$redirect}"/>
-    {/if}
-    <noscript>
-        <link rel="stylesheet" href="/assets/css/noscript.css"/>
-    </noscript>
-</head>
-<body>
-<div class="empty valign" style="height:100vh">
-    <div class="centered">
-        <p class="empty-title h1">{$title}</p>
-        <p class="empty-title h4">{$message}</p>
-        <div class="divider"></div>
-        <div class="empty-action">
-        </div>
-        <footer class="section section-footer">
-            <div id="copyright" class="grid-footer container grid-lg">©
-                <span year="">{date("Y")}</span>
-                <a href="{$config['baseUrl']}" target="_blank">{$config['appName']}</a>
-            </div>
-        </footer>
-    </div>
-</div>
-</body>
-</html>

+ 0 - 216
resources/views/material/telegram_success.tpl

@@ -1,216 +0,0 @@
-<!DOCTYPE HTML>
-<html lang="zh-cn">
-<head>
-    <title>正在跳转用户中心 - {$config['appName']} </title>
-    <meta name="keywords" content=""/>
-    <meta name="description" content=""/>
-    <meta charset="utf-8"/>
-    <link rel="shortcut icon" href="/favicon.ico"/>
-    <link rel="bookmark" href="/favicon.ico" type="image/x-icon"/>
-    <meta name="viewport" content="width=device-width, initial-scale=1, user-scalable=no"/>
-    <link rel="shortcut icon" type="image/ico" href="images/ssr.ico">
-    <style>
-        /*! Spectre.css v0.5.0 | MIT License | github.com/picturepan2/spectre */
-
-        html {
-            font-family: sans-serif;
-            -webkit-text-size-adjust: 100%;
-            -ms-text-size-adjust: 100%
-        }
-
-        body {
-            margin: 0
-        }
-
-        footer {
-            display: block
-        }
-
-        a {
-            background-color: transparent;
-            -webkit-text-decoration-skip: objects
-        }
-
-        a:active,
-        a:hover {
-            outline-width: 0
-        }
-
-        ::-webkit-file-upload-button {
-            -webkit-appearance: button;
-            font: inherit
-        }
-
-        *,
-        ::after,
-        ::before {
-            box-sizing: inherit
-        }
-
-        html {
-            box-sizing: border-box;
-            font-size: 20px;
-            line-height: 1.5;
-            -webkit-tap-highlight-color: transparent
-        }
-
-        body {
-            background: #fff;
-            color: #50596c;
-            font-family: -apple-system, system-ui, BlinkMacSystemFont, "Segoe UI", Roboto, "Helvetica Neue", sans-serif;
-            font-size: .8rem;
-            overflow-x: hidden;
-            text-rendering: optimizeLegibility
-        }
-
-        a {
-            color: #5755d9;
-            outline: 0;
-            text-decoration: none
-        }
-
-        a:focus {
-            box-shadow: 0 0 0 .1rem rgba(87, 85, 217, .2)
-        }
-
-        a:active,
-        a:focus,
-        a:hover {
-            color: #4240d4;
-            text-decoration: underline
-        }
-
-        .h1,
-        .h4 {
-            font-weight: 500
-        }
-
-        .h1 {
-            font-size: 2rem
-        }
-
-        .h4 {
-            font-size: 1.2rem
-        }
-
-        p {
-            margin: 0 0 1rem
-        }
-
-        a {
-            -webkit-text-decoration-skip: ink edges;
-            text-decoration-skip: ink edges
-        }
-
-        .form-input:not(:placeholder-shown):invalid {
-            border-color: #e85600
-        }
-
-        .form-input:not(:placeholder-shown):invalid:focus {
-            box-shadow: 0 0 0 .1rem rgba(232, 86, 0, .2)
-        }
-
-        .container {
-            margin-left: auto;
-            margin-right: auto;
-            padding-left: .4rem;
-            padding-right: .4rem;
-            width: 100%
-        }
-
-        .container.grid-lg {
-            max-width: 976px
-        }
-
-        .empty {
-            background: #f8f9fa;
-            border-radius: .1rem;
-            color: #667189;
-            padding: 3.2rem 1.6rem;
-            text-align: center
-        }
-
-        .empty .empty-subtitle,
-        .empty .empty-title {
-            margin: .4rem auto
-        }
-
-        .empty .empty-action {
-            margin-top: .8rem
-        }
-
-        .text-error {
-            color: #e85600
-        }
-
-        .divider {
-            display: block;
-            position: relative
-        }
-
-        .divider {
-            border-top: .05rem solid #e7e9ed;
-            height: .05rem;
-            margin: .4rem 0
-        }
-
-        .container::after {
-            clear: both;
-            content: "";
-            display: table
-        }
-
-        .centered {
-            display: block;
-            float: none;
-            margin-left: auto;
-            margin-right: auto
-        }
-
-        .valign {
-            display: -webkit-box !important;
-            display: -webkit-flex !important;
-            display: -ms-flexbox !important;
-            display: flex !important;
-            -webkit-box-align: center !important;
-            -webkit-align-items: center !important;
-            -ms-flex-align: center !important;
-            align-items: center !important;
-        }
-
-        .section-footer {
-            color: #acb3c2;
-            padding: 2rem .5rem 0 .5rem;
-            position: relative;
-            z-index: 200;
-        }
-
-        .section-footer a {
-            color: #667189;
-        }
-    </style>
-    {if !empty($redirect)}
-        <meta http-equiv="refresh" content="3; url={$redirect}"/>
-    {/if}
-    <noscript>
-        <link rel="stylesheet" href="/assets/css/noscript.css"/>
-    </noscript>
-</head>
-<body>
-<div class="empty valign" style="height:100vh">
-    <div class="centered">
-        <p class="empty-title h1">{$title}</p>
-        <p class="empty-title h4">{$message}</p>
-        <div class="divider"></div>
-        <div class="empty-action">
-        </div>
-        <footer class="section section-footer">
-            <div id="copyright" class="grid-footer container grid-lg">©
-                <span year="">{date("Y")}</span>
-                <a href="{$config['baseUrl']}" target="_blank">{$config['appName']}</a>
-            </div>
-        </footer>
-    </div>
-</div>
-</body>
-</html>

+ 0 - 26
resources/views/material/tos.tpl

@@ -1,26 +0,0 @@
-<!DOCTYPE HTML>
-<html lang="zh-cn">
-<head>
-    <meta charset="UTF-8">
-    <title>Terms of Service - {$config['appName']}</title>
-    <link rel="shortcut icon" href="/favicon.ico"/>
-    <link rel="bookmark" href="/favicon.ico"/>
-    <link rel="stylesheet" href="/assets/css/info-pages.min.css">
-</head>
-<body>
-<div class="container">
-    <div class="copy-container center-xy">
-        <h1>用户服务协议(Terms of Service)</h1>
-        <p>{$config['appName']},以下简称本站。</p>
-        <br>
-        <h2>隐私安全</h2>
-        <p>邮箱为本站服务的唯一凭证,请妥善保管。</p>
-        <br>
-        <h2>使用条款</h2>
-        <p>在使用服务时,需遵循站点和节点所在国家的相关法律。</p>
-        <p>对于免费用户,我们有权在不通知的情况下删除账户。</p>
-        <p>任何违反使用条款的用户,我们将会删除违规账户并收回使用本站服务的权利。</p>
-    </div>
-</div>
-</body>
-</html>

Some files were not shown because too many files changed in this diff