improve admin details

This commit is contained in:
xiaomlove
2021-04-30 01:27:29 +08:00
parent 164bc80c4e
commit 654419deec
12 changed files with 237 additions and 51 deletions
+184 -1
View File
@@ -662,6 +662,133 @@ INSERT INTO `downloadspeed` VALUES (1,'64kbps'),(2,'128kbps'),(3,'256kbps'),(4,'
/*!40000 ALTER TABLE `downloadspeed` ENABLE KEYS */; /*!40000 ALTER TABLE `downloadspeed` ENABLE KEYS */;
UNLOCK TABLES; UNLOCK TABLES;
--
-- Table structure for table `exam_progress`
--
DROP TABLE IF EXISTS `exam_progress`;
/*!40101 SET @saved_cs_client = @@character_set_client */;
/*!40101 SET character_set_client = utf8 */;
CREATE TABLE `exam_progress` (
`id` bigint(20) unsigned NOT NULL AUTO_INCREMENT,
`exam_user_id` int(11) NOT NULL,
`exam_id` int(11) NOT NULL,
`uid` int(11) NOT NULL,
`torrent_id` int(11) NOT NULL,
`index` int(11) NOT NULL,
`value` bigint(20) NOT NULL,
`created_at` timestamp NULL DEFAULT NULL,
`updated_at` timestamp NULL DEFAULT NULL,
PRIMARY KEY (`id`),
KEY `exam_progress_created_at_index` (`created_at`),
KEY `exam_progress_exam_user_id_index` (`exam_user_id`),
KEY `exam_progress_exam_id_index` (`exam_id`),
KEY `exam_progress_uid_index` (`uid`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci;
/*!40101 SET character_set_client = @saved_cs_client */;
--
-- Dumping data for table `exam_progress`
--
LOCK TABLES `exam_progress` WRITE;
/*!40000 ALTER TABLE `exam_progress` DISABLE KEYS */;
/*!40000 ALTER TABLE `exam_progress` ENABLE KEYS */;
UNLOCK TABLES;
--
-- Table structure for table `exam_users`
--
DROP TABLE IF EXISTS `exam_users`;
/*!40101 SET @saved_cs_client = @@character_set_client */;
/*!40101 SET character_set_client = utf8 */;
CREATE TABLE `exam_users` (
`id` bigint(20) unsigned NOT NULL AUTO_INCREMENT,
`uid` int(11) NOT NULL,
`exam_id` int(11) NOT NULL,
`status` int(11) NOT NULL DEFAULT '0',
`begin` datetime DEFAULT NULL,
`end` datetime DEFAULT NULL,
`progress` text COLLATE utf8mb4_unicode_ci,
`is_done` tinyint(4) NOT NULL DEFAULT '0',
`created_at` timestamp NULL DEFAULT NULL,
`updated_at` timestamp NULL DEFAULT NULL,
PRIMARY KEY (`id`),
KEY `exam_users_uid_index` (`uid`),
KEY `exam_users_exam_id_index` (`exam_id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci;
/*!40101 SET character_set_client = @saved_cs_client */;
--
-- Dumping data for table `exam_users`
--
LOCK TABLES `exam_users` WRITE;
/*!40000 ALTER TABLE `exam_users` DISABLE KEYS */;
/*!40000 ALTER TABLE `exam_users` ENABLE KEYS */;
UNLOCK TABLES;
--
-- Table structure for table `exams`
--
DROP TABLE IF EXISTS `exams`;
/*!40101 SET @saved_cs_client = @@character_set_client */;
/*!40101 SET character_set_client = utf8 */;
CREATE TABLE `exams` (
`id` bigint(20) unsigned NOT NULL AUTO_INCREMENT,
`name` varchar(255) COLLATE utf8mb4_unicode_ci NOT NULL,
`description` text COLLATE utf8mb4_unicode_ci,
`begin` datetime DEFAULT NULL,
`end` datetime DEFAULT NULL,
`filters` text COLLATE utf8mb4_unicode_ci,
`indexes` text COLLATE utf8mb4_unicode_ci NOT NULL,
`status` tinyint(4) NOT NULL DEFAULT '0',
`created_at` timestamp NULL DEFAULT NULL,
`updated_at` timestamp NULL DEFAULT NULL,
PRIMARY KEY (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci;
/*!40101 SET character_set_client = @saved_cs_client */;
--
-- Dumping data for table `exams`
--
LOCK TABLES `exams` WRITE;
/*!40000 ALTER TABLE `exams` DISABLE KEYS */;
/*!40000 ALTER TABLE `exams` ENABLE KEYS */;
UNLOCK TABLES;
--
-- Table structure for table `failed_jobs`
--
DROP TABLE IF EXISTS `failed_jobs`;
/*!40101 SET @saved_cs_client = @@character_set_client */;
/*!40101 SET character_set_client = utf8 */;
CREATE TABLE `failed_jobs` (
`id` bigint(20) unsigned NOT NULL AUTO_INCREMENT,
`uuid` varchar(255) COLLATE utf8mb4_unicode_ci NOT NULL,
`connection` text COLLATE utf8mb4_unicode_ci NOT NULL,
`queue` text COLLATE utf8mb4_unicode_ci NOT NULL,
`payload` longtext COLLATE utf8mb4_unicode_ci NOT NULL,
`exception` longtext COLLATE utf8mb4_unicode_ci NOT NULL,
`failed_at` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP,
PRIMARY KEY (`id`),
UNIQUE KEY `failed_jobs_uuid_unique` (`uuid`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci;
/*!40101 SET character_set_client = @saved_cs_client */;
--
-- Dumping data for table `failed_jobs`
--
LOCK TABLES `failed_jobs` WRITE;
/*!40000 ALTER TABLE `failed_jobs` DISABLE KEYS */;
/*!40000 ALTER TABLE `failed_jobs` ENABLE KEYS */;
UNLOCK TABLES;
-- --
-- Table structure for table `faq` -- Table structure for table `faq`
-- --
@@ -1128,6 +1255,30 @@ LOCK TABLES `messages` WRITE;
/*!40000 ALTER TABLE `messages` ENABLE KEYS */; /*!40000 ALTER TABLE `messages` ENABLE KEYS */;
UNLOCK TABLES; UNLOCK TABLES;
--
-- Table structure for table `migrations`
--
DROP TABLE IF EXISTS `migrations`;
/*!40101 SET @saved_cs_client = @@character_set_client */;
/*!40101 SET character_set_client = utf8 */;
CREATE TABLE `migrations` (
`id` int(10) unsigned NOT NULL AUTO_INCREMENT,
`migration` varchar(255) COLLATE utf8mb4_unicode_ci NOT NULL,
`batch` int(11) NOT NULL,
PRIMARY KEY (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci;
/*!40101 SET character_set_client = @saved_cs_client */;
--
-- Dumping data for table `migrations`
--
LOCK TABLES `migrations` WRITE;
/*!40000 ALTER TABLE `migrations` DISABLE KEYS */;
/*!40000 ALTER TABLE `migrations` ENABLE KEYS */;
UNLOCK TABLES;
-- --
-- Table structure for table `modpanel` -- Table structure for table `modpanel`
-- --
@@ -1309,6 +1460,38 @@ LOCK TABLES `peers` WRITE;
/*!40000 ALTER TABLE `peers` ENABLE KEYS */; /*!40000 ALTER TABLE `peers` ENABLE KEYS */;
UNLOCK TABLES; UNLOCK TABLES;
--
-- Table structure for table `personal_access_tokens`
--
DROP TABLE IF EXISTS `personal_access_tokens`;
/*!40101 SET @saved_cs_client = @@character_set_client */;
/*!40101 SET character_set_client = utf8 */;
CREATE TABLE `personal_access_tokens` (
`id` bigint(20) unsigned NOT NULL AUTO_INCREMENT,
`tokenable_type` varchar(255) COLLATE utf8mb4_unicode_ci NOT NULL,
`tokenable_id` bigint(20) unsigned NOT NULL,
`name` varchar(255) COLLATE utf8mb4_unicode_ci NOT NULL,
`token` varchar(64) COLLATE utf8mb4_unicode_ci NOT NULL,
`abilities` text COLLATE utf8mb4_unicode_ci,
`last_used_at` timestamp NULL DEFAULT NULL,
`created_at` timestamp NULL DEFAULT NULL,
`updated_at` timestamp NULL DEFAULT NULL,
PRIMARY KEY (`id`),
UNIQUE KEY `personal_access_tokens_token_unique` (`token`),
KEY `personal_access_tokens_tokenable_type_tokenable_id_index` (`tokenable_type`,`tokenable_id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci;
/*!40101 SET character_set_client = @saved_cs_client */;
--
-- Dumping data for table `personal_access_tokens`
--
LOCK TABLES `personal_access_tokens` WRITE;
/*!40000 ALTER TABLE `personal_access_tokens` DISABLE KEYS */;
/*!40000 ALTER TABLE `personal_access_tokens` ENABLE KEYS */;
UNLOCK TABLES;
-- --
-- Table structure for table `pmboxes` -- Table structure for table `pmboxes`
-- --
@@ -2484,4 +2667,4 @@ UNLOCK TABLES;
/*!40101 SET COLLATION_CONNECTION=@OLD_COLLATION_CONNECTION */; /*!40101 SET COLLATION_CONNECTION=@OLD_COLLATION_CONNECTION */;
/*!40111 SET SQL_NOTES=@OLD_SQL_NOTES */; /*!40111 SET SQL_NOTES=@OLD_SQL_NOTES */;
-- Dump completed on 2021-03-18 20:25:39 -- Dump completed on 2021-04-30 1:17:11
+5 -16
View File
@@ -38,9 +38,6 @@ import api from "../utils/api";
export default { export default {
name: 'Header', name: 'Header',
props: { props: {
userInfo: {
type: Object
}
}, },
setup(props, context) { setup(props, context) {
const router = useRouter() const router = useRouter()
@@ -54,14 +51,10 @@ export default {
onMounted(async () => { onMounted(async () => {
console.log("Head onMounted!") console.log("Head onMounted!")
console.log(props) console.log(props)
// let userInfo = localGet(userInfoKey); let userInfo = localGet(userInfoKey);
// if (userInfo) { if (userInfo) {
// state.userInfo = userInfo; state.userInfo = userInfo;
// } else { }
// let res = await api.getUserBase()
// state.userInfo = res.data
// localSet(userInfoKey, res.data)
// }
}) })
const logout = () => { const logout = () => {
api.logout().then(() => { api.logout().then(() => {
@@ -74,13 +67,9 @@ export default {
router.back() router.back()
} }
router.afterEach((to) => { router.afterEach((to) => {
console.log("Head afterEach to", to) // console.log("Head afterEach to", to)
const { id } = to.query const { id } = to.query
state.name = pathMap[to.name] state.name = pathMap[to.name]
if (id && to.name == 'add') {
state.name = '编辑商品'
}
state.hasBack = ['level2', 'level3', 'order_detail'].includes(to.name)
}) })
return { return {
...toRefs(state), ...toRefs(state),
+17 -3
View File
@@ -1,6 +1,7 @@
import axios from 'axios' import axios from 'axios'
import { ElMessage } from 'element-plus' import { ElMessage } from 'element-plus'
import {localGet} from "./index"; import {localGet} from "./index"
import router from '../router/index'
axios.defaults.baseURL = 'http://nexus-php8.tinyhd.net/api' axios.defaults.baseURL = 'http://nexus-php8.tinyhd.net/api'
axios.defaults.withCredentials = true axios.defaults.withCredentials = true
@@ -9,8 +10,14 @@ axios.defaults.headers['Content-Type'] = 'application/json'
axios.defaults.headers['Accept'] = 'application/json' axios.defaults.headers['Accept'] = 'application/json'
axios.defaults.headers['Authorization'] = 'Bearer ' + localGet('token') axios.defaults.headers['Authorization'] = 'Bearer ' + localGet('token')
// 请求拦截器,内部根据返回值,重新组装,统一管理。 // axios.interceptors.request.use(config => {
// // console.log('before request', config)
// config.headers['Authorization'] = 'Bearer ' + localGet('token')
// return config
// })
axios.interceptors.response.use(res => { axios.interceptors.response.use(res => {
console.log(res)
if (typeof res.data !== 'object') { if (typeof res.data !== 'object') {
ElMessage.error('Server Error 1') ElMessage.error('Server Error 1')
return Promise.reject(res) return Promise.reject(res)
@@ -21,7 +28,14 @@ axios.interceptors.response.use(res => {
} }
return res.data return res.data
}, error => { }, error => {
ElMessage.error(error.response.data.msg || 'Server Error 2') let res = error.response;
console.log(res)
if (res.status == 401) {
router.push({
name: 'login'
})
}
ElMessage.error(res.data.msg || 'Server Error 2')
return Promise.reject(error) return Promise.reject(error)
}) })
+1
View File
@@ -122,6 +122,7 @@ export default {
const state = useTable() const state = useTable()
onMounted(() => { onMounted(() => {
console.log('ExamTable onMounted')
fetchTableData() fetchTableData()
}) })
// 获取轮播图列表 // 获取轮播图列表
+7 -3
View File
@@ -5,15 +5,15 @@
<img class="logo" src="http://demo.nexusphp.org/favicon.ico" /> <img class="logo" src="http://demo.nexusphp.org/favicon.ico" />
<div class="name"> <div class="name">
<div class="title">NexusPHP</div> <div class="title">NexusPHP</div>
<div class="tips">Management system - v1.6</div> <div class="tips">Management system</div>
</div> </div>
</div> </div>
<el-form label-position="top" :rules="rules" :model="ruleForm" ref="loginForm" class="login-form"> <el-form label-position="top" :rules="rules" :model="ruleForm" ref="loginForm" class="login-form">
<el-form-item label="Username" prop="username"> <el-form-item label="Username" prop="username">
<el-input type="text" v-model.trim="ruleForm.username" autocomplete="off"></el-input> <el-input type="text" v-model.trim="ruleForm.username" autocomplete="off" @keyup.enter="submitForm"></el-input>
</el-form-item> </el-form-item>
<el-form-item label="Password" prop="password"> <el-form-item label="Password" prop="password">
<el-input type="password" v-model.trim="ruleForm.password" autocomplete="off"></el-input> <el-input type="password" v-model.trim="ruleForm.password" autocomplete="off" @keyup.enter="submitForm"></el-input>
</el-form-item> </el-form-item>
<el-form-item style="margin-top: 50px"> <el-form-item style="margin-top: 50px">
<!-- <div style="color: #333">登录表示您已同意<a>服务条款</a></div>--> <!-- <div style="color: #333">登录表示您已同意<a>服务条款</a></div>-->
@@ -56,8 +56,12 @@ export default {
loginForm.value.validate((valid) => { loginForm.value.validate((valid) => {
if (valid) { if (valid) {
api.login(state.ruleForm).then(res => { api.login(state.ruleForm).then(res => {
console.log(res)
localSet('token', res.data.token) localSet('token', res.data.token)
router.push({name: 'dashboard'}) router.push({name: 'dashboard'})
// api.getUserBase().then(res => {
// localSet('userInfo', res.data)
// })
}) })
} else { } else {
console.log('error submit!!') console.log('error submit!!')
+2 -2
View File
@@ -35,8 +35,8 @@
</el-form> </el-form>
<template #footer> <template #footer>
<span class="dialog-footer"> <span class="dialog-footer">
<el-button @click="visible = false">取 消</el-button> <el-button @click="visible = false">Cancel</el-button>
<el-button type="primary" @click="handleSubmit">确 定</el-button> <el-button type="primary" @click="handleSubmit">Save</el-button>
</span> </span>
</template> </template>
</el-dialog> </el-dialog>
+1
View File
@@ -118,6 +118,7 @@ export default {
const state = useTable() const state = useTable()
onMounted(() => { onMounted(() => {
console.log('UserTable onMounted');
fetchTableData() fetchTableData()
}) })
const fetchTableData = async () => { const fetchTableData = async () => {
+2 -4
View File
@@ -44,14 +44,12 @@ class Test extends Command
*/ */
public function handle() public function handle()
{ {
$user = User::query()->findOrFail(1);
dd(nexus_trans('exam.checkout_pass_message_content', ['exam_name' => '年中考核', 'begin' => 1, 'end' => 2]));
$rep = new ExamRepository(); $rep = new ExamRepository();
// $r = $rep->assignToUser(1, 1); // $r = $rep->assignToUser(1, 1);
$r = $rep->addProgress(3, 1, [ $r = $rep->addProgress(1, 1, [
1 => 25*1024*1024*1024, 1 => 25*1024*1024*1024,
2 => 55*3600, 2 => 55*3600,
3 => 100*1024*1024*1024, 3 => 10*1024*1024*1024,
4 => 1252 4 => 1252
]); ]);
dd($r); dd($r);
+2 -2
View File
@@ -148,8 +148,8 @@ class ExamRepository extends BaseRepository
} }
$added = $user->added->toDateTimeString(); $added = $user->added->toDateTimeString();
$registerTimeBegin = $filters->register_time_range[0] ? Carbon::parse($filters->register_time_range[0])->toDateString() : ''; $registerTimeBegin = isset($filters->register_time_range[0]) ? Carbon::parse($filters->register_time_range[0])->toDateString() : '';
$registerTimeEnd = $filters->register_time_range[1] ? Carbon::parse($filters->register_time_range[1])->toDateString() : ''; $registerTimeEnd = isset($filters->register_time_range[1]) ? Carbon::parse($filters->register_time_range[1])->toDateString() : '';
if (empty($registerTimeBegin)) { if (empty($registerTimeBegin)) {
do_log("$logPrefix, exam: {$exam->id} no register_time_begin"); do_log("$logPrefix, exam: {$exam->id} no register_time_begin");
return false; return false;
-2
View File
@@ -5,8 +5,6 @@ $rootpath = dirname(dirname(__DIR__)) . '/';
define('ROOT_PATH', $rootpath); define('ROOT_PATH', $rootpath);
$isPost = $_SERVER['REQUEST_METHOD'] == 'POST'; $isPost = $_SERVER['REQUEST_METHOD'] == 'POST';
require $rootpath . 'vendor/autoload.php'; require $rootpath . 'vendor/autoload.php';
require $rootpath . 'include/globalfunctions.php';
require $rootpath . 'include/functions.php';
require $rootpath . 'nexus/Database/helpers.php'; require $rootpath . 'nexus/Database/helpers.php';
$install = new \Nexus\Install\Install(); $install = new \Nexus\Install\Install();
-2
View File
@@ -5,8 +5,6 @@ $rootpath = dirname(dirname(__DIR__)) . '/';
define('ROOT_PATH', $rootpath); define('ROOT_PATH', $rootpath);
$isPost = $_SERVER['REQUEST_METHOD'] == 'POST'; $isPost = $_SERVER['REQUEST_METHOD'] == 'POST';
require $rootpath . 'vendor/autoload.php'; require $rootpath . 'vendor/autoload.php';
require $rootpath . 'include/globalfunctions.php';
require $rootpath . 'include/functions.php';
require $rootpath . 'nexus/Database/helpers.php'; require $rootpath . 'nexus/Database/helpers.php';
$update = new \Nexus\Install\Update(); $update = new \Nexus\Install\Update();