feat: 初始化雄戈商城服务端代码与Webhook自动部署配置
这个提交包含在:
@@ -0,0 +1,56 @@
|
||||
<!DOCTYPE html>
|
||||
<html>
|
||||
<head>
|
||||
<!-- 加载样式及META信息 -->
|
||||
{include file="common/meta" /}
|
||||
</head>
|
||||
<body class="hold-transition {$Think.config.fastadmin.adminskin|default='skin-black-blue'} sidebar-mini {:$Think.cookie.sidebar_collapse?'sidebar-collapse':''} fixed {:$Think.config.fastadmin.multipletab?'multipletab':''} {:$Think.config.fastadmin.multiplenav?'multiplenav':''}" id="tabs">
|
||||
|
||||
<div class="wrapper">
|
||||
|
||||
<!-- 头部区域 -->
|
||||
<header id="header" class="main-header">
|
||||
{if preg_match('/\/admin\/|\/admin\.php|\/admin_d75KABNWt\.php/i', url())}
|
||||
<div class="alert alert-danger-light text-center" style="margin-bottom:0;border:none;">
|
||||
{:__('Security tips')}
|
||||
</div>
|
||||
{/if}
|
||||
|
||||
{include file='common/header' /}
|
||||
</header>
|
||||
|
||||
<!-- 左侧菜单栏 -->
|
||||
<aside class="main-sidebar">
|
||||
{include file='common/menu' /}
|
||||
</aside>
|
||||
|
||||
<!-- 主体内容区域 -->
|
||||
<div class="content-wrapper tab-content tab-addtabs">
|
||||
{if $fixedmenu}
|
||||
<div role="tabpanel" class="tab-pane {:$referermenu?'':'active'}" id="con_{$fixedmenu.id}">
|
||||
<iframe src="{$fixedmenu.url}?addtabs=1" width="100%" height="100%" frameborder="no" border="0" marginwidth="0" marginheight="0" scrolling-x="no" scrolling-y="auto" allowtransparency="yes"></iframe>
|
||||
</div>
|
||||
{/if}
|
||||
{if $referermenu}
|
||||
<div role="tabpanel" class="tab-pane active" id="con_{$referermenu.id}">
|
||||
<iframe src="{$referermenu.url}?addtabs=1" width="100%" height="100%" frameborder="no" border="0" marginwidth="0" marginheight="0" scrolling-x="no" scrolling-y="auto" allowtransparency="yes"></iframe>
|
||||
</div>
|
||||
{/if}
|
||||
</div>
|
||||
|
||||
<!-- 底部链接,默认隐藏 -->
|
||||
<footer class="main-footer hide">
|
||||
<div class="pull-right hidden-xs">
|
||||
</div>
|
||||
<strong>Copyright © 2017-{:date("Y")} <a href="__PUBLIC__">{$site.name}</a>.</strong> All rights reserved.
|
||||
</footer>
|
||||
|
||||
<!-- 右侧控制栏 -->
|
||||
<div class="control-sidebar-bg"></div>
|
||||
{include file="common/control" /}
|
||||
</div>
|
||||
|
||||
<!-- 加载JS脚本 -->
|
||||
{include file="common/script" /}
|
||||
</body>
|
||||
</html>
|
||||
@@ -0,0 +1,223 @@
|
||||
<html lang="zh-CN" dir="ltr">
|
||||
<head>
|
||||
<meta charset="utf-8">
|
||||
<meta http-equiv="X-UA-Compatible" content="IE=edge">
|
||||
<meta name="viewport" content="width=device-width,initial-scale=1,maximum-scale=1">
|
||||
<title>雄戈小酒商城后台登录</title>
|
||||
<link href="/assets/login/css/app.31d95eba.css?a=3" rel="stylesheet">
|
||||
<link href="/assets/login/css/chunk-2b82f2e7.d5b819d1.css?a=2" rel="stylesheet">
|
||||
<link href="/assets/login/css/login.css?a=5" rel="stylesheet">
|
||||
<link href="/assets/css/sweetalert.css" rel="stylesheet">
|
||||
<link rel="stylesheet" href="/assets/element-ui-2.15.14/css/index.css">
|
||||
</head>
|
||||
|
||||
<body class="dark-layout">
|
||||
<div id="app" class="h-100">
|
||||
<div class="xg-login-e">
|
||||
<aside class="xg-login-e__brand-panel">
|
||||
<div class="xg-login-e__brand-inner">
|
||||
<img
|
||||
class="xg-login-e__logo"
|
||||
src="/uploads/demo/xiongge/xiongge-brand-emblem.png"
|
||||
alt="雄戈小酒"
|
||||
>
|
||||
<div class="xg-login-e__gold-rule" aria-hidden="true"></div>
|
||||
<h1 class="xg-login-e__title">雄戈小酒</h1>
|
||||
<p class="xg-login-e__subtitle">商城后台</p>
|
||||
<p class="xg-login-e__tagline">传承匠心酿造 · 数字赋能酒业运营</p>
|
||||
|
||||
<div class="xg-login-e__culture-row">
|
||||
<div class="xg-login-e__culture-item">
|
||||
<span class="xg-login-e__culture-key">匠心</span>
|
||||
<span class="xg-login-e__culture-val">品质为先</span>
|
||||
</div>
|
||||
<div class="xg-login-e__culture-item">
|
||||
<span class="xg-login-e__culture-key">臻酿</span>
|
||||
<span class="xg-login-e__culture-val">一男人的朋友</span>
|
||||
</div>
|
||||
<div class="xg-login-e__culture-item">
|
||||
<span class="xg-login-e__culture-key">智管</span>
|
||||
<span class="xg-login-e__culture-val">高效运营</span>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<p class="xg-login-e__motto">— 一男人的朋友一 —</p>
|
||||
</div>
|
||||
</aside>
|
||||
|
||||
<main class="xg-login-e__form-panel">
|
||||
<div class="xg-login-e__card-wrap">
|
||||
<div class="xg-login-e__card">
|
||||
<div class="xg-login-e__card-head">
|
||||
<img
|
||||
class="xg-login-e__card-logo"
|
||||
src="/uploads/demo/xiongge/xiongge-brand-emblem.png"
|
||||
alt="雄戈小酒"
|
||||
>
|
||||
<h2 class="xg-login-e__card-title">欢迎登录</h2>
|
||||
<p class="xg-login-e__card-desc">雄戈小酒商城后台管理系统</p>
|
||||
</div>
|
||||
|
||||
{:token()}
|
||||
|
||||
<div role="group" class="form-group">
|
||||
<label for="login-email">用户名</label>
|
||||
<input
|
||||
id="login-email"
|
||||
v-model="formData.username"
|
||||
type="text"
|
||||
autocomplete="username"
|
||||
placeholder="请输入用户名"
|
||||
class="form-control"
|
||||
>
|
||||
</div>
|
||||
|
||||
<fieldset class="form-group">
|
||||
<label for="login-password">密码</label>
|
||||
<input
|
||||
id="login-password"
|
||||
name="login-password"
|
||||
type="password"
|
||||
autocomplete="current-password"
|
||||
placeholder="请输入密码"
|
||||
v-model="formData.password"
|
||||
class="form-control-merge form-control"
|
||||
>
|
||||
</fieldset>
|
||||
|
||||
{if $Think.config.fastadmin.login_captcha}
|
||||
<fieldset class="form-group">
|
||||
<label for="login-verify">验证码</label>
|
||||
<div class="verify-row">
|
||||
<input
|
||||
id="login-verify"
|
||||
name="login-verify"
|
||||
type="text"
|
||||
autocomplete="off"
|
||||
placeholder="请输入验证码"
|
||||
v-model="formData.verify"
|
||||
class="form-control-merge form-control"
|
||||
>
|
||||
<div class="verify">
|
||||
<img
|
||||
id="verify-img"
|
||||
src="{:rtrim('__PUBLIC__', '/')}/captcha"
|
||||
width="120"
|
||||
height="46"
|
||||
alt="验证码"
|
||||
onclick="this.src = '{:rtrim('__PUBLIC__', '/')}/captcha&r=' + Math.random();"
|
||||
>
|
||||
</div>
|
||||
</div>
|
||||
</fieldset>
|
||||
{/if}
|
||||
|
||||
<fieldset class="form-group">
|
||||
<div class="custom-control custom-checkbox">
|
||||
<input id="keeplogin" type="checkbox" name="keeplogin" class="custom-control-input" checked value="1">
|
||||
<label for="keeplogin" class="custom-control-label">保持会话(24 小时内免重复登录)</label>
|
||||
</div>
|
||||
</fieldset>
|
||||
|
||||
<button type="button" @click="handleLoginAdmin" class="btn btn-primary btn-block">登 录 后 台</button>
|
||||
|
||||
<div class="xg-login-e__footer">雄戈小酒 · 一男人的朋友一</div>
|
||||
</div>
|
||||
</div>
|
||||
</main>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<script src="/assets/js/jquery-2.1.1.min.js"></script>
|
||||
<script src="/assets/element-ui-2.15.14/js/vue.js"></script>
|
||||
<script src="/assets/element-ui-2.15.14/js/index.js"></script>
|
||||
<script src="/assets/js/sweetalert.min.js"></script>
|
||||
<script>
|
||||
var vue = new Vue({
|
||||
el: '#app',
|
||||
data: {
|
||||
formData: {
|
||||
username: '',
|
||||
password: '',
|
||||
verify: ''
|
||||
},
|
||||
loginLoading: ''
|
||||
},
|
||||
methods: {
|
||||
handleLoginAdmin() {
|
||||
let formData = this.formData;
|
||||
|
||||
if (formData.username === '') {
|
||||
this._sweetMsg({ type: 'warning', title: '请您输入用户名' });
|
||||
return false;
|
||||
}
|
||||
if (formData.password === '') {
|
||||
this._sweetMsg({ type: 'warning', title: '请您输入密码' });
|
||||
return false;
|
||||
}
|
||||
|
||||
$.ajax({
|
||||
type: 'POST',
|
||||
url: '{:url("login")}',
|
||||
dataType: 'json',
|
||||
data: {
|
||||
username: formData.username,
|
||||
password: formData.password,
|
||||
captcha: formData.verify,
|
||||
'__token__': $('input[name="__token__"]').val(),
|
||||
keeplogin: $("input[type='checkbox']").prop("checked") ? 1 : 0
|
||||
},
|
||||
beforeSend: () => {
|
||||
this.loginLoading = this.$loading({
|
||||
lock: true,
|
||||
text: '正在登录中...',
|
||||
spinner: 'el-icon-loading',
|
||||
background: 'rgba(6, 24, 51, 0.35)'
|
||||
});
|
||||
},
|
||||
complete: (xhr) => {
|
||||
var token = xhr.getResponseHeader('__token__');
|
||||
if (token) {
|
||||
$('input[name="__token__"]').val(token);
|
||||
}
|
||||
},
|
||||
success: res => {
|
||||
this.loginLoading.close();
|
||||
if (res.data && res.data.token) {
|
||||
$('input[name="__token__"]').val(res.data.token);
|
||||
}
|
||||
if (res.code === 0) {
|
||||
{if $Think.config.fastadmin.login_captcha}
|
||||
$('#verify-img').trigger('click');
|
||||
{/if}
|
||||
this._sweetMsg({ type: 'error', title: res.msg });
|
||||
return false;
|
||||
}
|
||||
this._sweetMsg({ type: 'success', title: res.msg });
|
||||
$('.sa-button-container button.confirm').click(() => {
|
||||
window.location.href = res.url;
|
||||
});
|
||||
setTimeout(() => {
|
||||
window.location.href = res.url;
|
||||
}, 2500);
|
||||
},
|
||||
error: () => {
|
||||
this.loginLoading.close();
|
||||
this._sweetMsg({ type: 'error', title: '网络异常,请稍后重试' });
|
||||
}
|
||||
});
|
||||
},
|
||||
_sweetMsg(obj) {
|
||||
swal({
|
||||
title: obj.title || '',
|
||||
text: obj.content || '温馨提示',
|
||||
type: obj.type || 'success',
|
||||
confirmButtonColor: '#0A2463',
|
||||
confirmButtonText: '确定'
|
||||
});
|
||||
}
|
||||
}
|
||||
});
|
||||
</script>
|
||||
</body>
|
||||
</html>
|
||||
在新工单中引用
屏蔽一个用户