Просмотр исходного кода

更新 views/admin 后台管理相关页面, 接口和路由

reghao 5 месяцев назад
Родитель
Сommit
50857891ab

+ 11 - 2
src/api/admin.js

@@ -1,6 +1,7 @@
 import { get, post } from '@/utils/request'
 
 const adminApi = {
+  getAccountRegistryApi: '/api/user/admin/account_registry',
   getUsersApi: '/api/user/admin/list',
   getChargeReqApi: '/api/user/admin/charge',
   approveChargeApi: '/api/user/admin/charge/approve',
@@ -9,13 +10,17 @@ const adminApi = {
   getUserAvatarsApi: '/api/user/admin/user/avatar',
   getAlbumsApi: '/api/content/admin/video/all',
   getArticlesApi: '/api/content/admin/video/all',
-  getFileStoreConfigApi: '/api/file/admin/file_store',
+  fileStoreConfigApi: '/api/file/admin/file_store',
   getNotifyConfigApi: '/api/message/admin/notify',
   getVipPlanApi: '/api/user/admin/vip_plan',
   getSiteNoticeApi: '/api/content/vod/admin/site_notice',
   getVideoCategoryApi: '/api/content/vod/admin/video_category'
 }
 
+export function getAccountRegistry() {
+  return get(adminApi.getAccountRegistryApi)
+}
+
 export function getUserList(nextId) {
   return get(adminApi.getUsersApi + '?nextId=' + nextId)
 }
@@ -49,7 +54,11 @@ export function getArticleList(nextId) {
 }
 
 export function getFileStoreConfig() {
-  return get(adminApi.getFileStoreConfigApi)
+  return get(adminApi.fileStoreConfigApi)
+}
+
+export function addFileStoreConfig(payload) {
+  return post(adminApi.fileStoreConfigApi, payload)
 }
 
 export function getNotifyConfig() {

+ 2 - 1
src/permission.js

@@ -1,7 +1,8 @@
 import router from './router'
-import { getAccessToken, removeAll } from '@/utils/auth'
+import { getAccessToken, getAuthedUser, removeAll } from '@/utils/auth'
 
 router.beforeEach((to, from, next) => {
+  console.log(getAuthedUser())
   const needAuth = to.meta.needAuth
   const token = getAccessToken()
   if (token != null) {

+ 55 - 15
src/router/admin.js

@@ -1,18 +1,27 @@
 // ********************************************************************************************************************
 // 后台管理主页
 const Admin = () => import('views/admin/Admin')
-const AdminGateway = () => import('views/admin/AdminGateway')
-const AdminDubboService = () => import('views/admin/AdminDubboService')
-const AdminSpringCloudService = () => import('views/admin/AdminSpringCloudService')
-const AdminBackendLog = () => import('views/admin/AdminBackendLog')
-const AdminAccessLog = () => import('views/admin/AdminAccessLog')
-const AdminRuntimeLog = () => import('views/admin/AdminRuntimeLog')
 
-const AdminSiteConfig = () => import('views/admin/AdminSiteConfig')
+// 站点配置
+const AdminStoreConfig = () => import('views/admin/site/AdminStoreConfig')
+const AdminNotifyConfig = () => import('views/admin/site/AdminNotifyConfig')
+const AdminCategory = () => import('views/admin/site/AdminCategory')
+const AdminRegistry = () => import('views/admin/site/AdminRegistry')
+
+// 后台管理
+const AdminCharge = () => import('views/admin/AdminCharge')
 const AdminUserList = () => import('views/admin/AdminUserList')
 const AdminVideoList = () => import('views/admin/AdminVideoList')
 const AdminAvatarList = () => import('views/admin/AdminAvatarList')
 
+// 后端系统
+const AdminGateway = () => import('views/admin/backend/AdminGateway')
+const AdminDubboService = () => import('views/admin/backend/AdminDubboService')
+const AdminSpringCloudService = () => import('views/admin/backend/AdminSpringCloudService')
+const AdminBackendLog = () => import('views/admin/backend/AdminBackendLog')
+const AdminAccessLog = () => import('views/admin/backend/AdminAccessLog')
+const AdminRuntimeLog = () => import('views/admin/backend/AdminRuntimeLog')
+
 // ********************************************************************************************************************
 // 用户后台主页
 const MyIndex = () => import('views/my/MyIndex')
@@ -28,7 +37,6 @@ const MyWallet = () => import('views/my/MyWallet')
 // ********************************************************************************************************************
 // 稿件后台主页
 const PostIndex = () => import('views/post/PostIndex')
-const PostAnalysis = () => import('views/post/PostAnalysis')
 const History = () => import('views/post/History')
 const AlbumPost = () => import('views/post/AlbumPost')
 // 稿件后台管理
@@ -172,34 +180,66 @@ export default {
       ]
     },
     {
-      path: '/background/admin',
+      path: '/background/site',
       name: 'Post',
       component: PostIndex,
       meta: { needAuth: true },
       children: [
         {
-          path: '/background/admin/site',
-          name: 'AdminSiteConfig',
-          component: AdminSiteConfig,
+          path: '/background/site/store',
+          name: 'AdminStoreConfig',
+          component: AdminStoreConfig,
           meta: { needAuth: true }
         },
+        {
+          path: '/background/site/notify',
+          name: 'AdminNotifyConfig',
+          component: AdminNotifyConfig,
+          meta: { needAuth: true }
+        },
+        {
+          path: '/background/site/registry',
+          name: 'AdminRegistry',
+          component: AdminRegistry,
+          meta: { needAuth: true }
+        },
+        {
+          path: '/background/site/category',
+          name: 'AdminCategory',
+          component: AdminCategory,
+          meta: { needAuth: true }
+        }
+      ]
+    },
+    {
+      path: '/background/admin',
+      name: 'Post',
+      component: PostIndex,
+      meta: { needAuth: true },
+      children: [
+        {
+          path: '/background/admin/charge',
+          name: 'AdminCharge',
+          component: AdminCharge,
+          meta: { needAuth: true, role: ['admin'] }
+        },
         {
           path: '/background/admin/user',
           name: 'AdminUserList',
           component: AdminUserList,
-          meta: { needAuth: true }
+          meta: { needAuth: true, role: ['admin'] }
         },
         {
           path: '/background/admin/video',
           name: 'AdminVideoList',
           component: AdminVideoList,
-          meta: { needAuth: true }
+          meta: { needAuth: true, role: ['admin'] }
         },
         {
           path: '/background/admin/avatar',
           name: 'AdminAvatarList',
           component: AdminAvatarList,
-          meta: { needAuth: true }
+          meta: { needAuth: true, role: ['admin'] }
         }
       ]
     },

+ 102 - 0
src/views/admin/AdminCharge.vue

@@ -0,0 +1,102 @@
+<template>
+  <el-row>
+    <el-row class="movie-list">
+      <el-col :md="16" style="padding-right: 5px; padding-left: 5px; padding-bottom: 5px">
+        <el-card class="box-card">
+          <div slot="header" class="clearfix">
+            <span>充值请求</span>
+          </div>
+          <div class="text item">
+            <el-table
+              :data="chargeReqList"
+              border
+              style="width: 100%"
+            >
+              <el-table-column
+                fixed="left"
+                label="No"
+                type="index"
+              />
+              <el-table-column
+                prop="chargeId"
+                label="充值 ID"
+              />
+              <el-table-column
+                prop="quantity"
+                label="金额"
+              />
+              <el-table-column
+                prop="owner"
+                label="用户"
+              />
+              <el-table-column
+                fixed="right"
+                label="操作"
+              >
+                <template slot-scope="scope">
+                  <el-button
+                    size="mini"
+                    @click="onApprove(scope.row)"
+                  >同意</el-button>
+                  <el-button
+                    size="mini"
+                    type="danger"
+                    @click="onDecline(scope.row)"
+                  >拒绝</el-button>
+                </template>
+              </el-table-column>
+            </el-table>
+          </div>
+        </el-card>
+      </el-col>
+    </el-row>
+  </el-row>
+</template>
+
+<script>
+import { userMixin } from 'assets/js/mixin'
+import {
+  getChargeReq, getVipPlan
+} from '@/api/admin'
+
+export default {
+  name: 'AdminCharge',
+  mixins: [userMixin],
+  data() {
+    return {
+      chargeReqList: [],
+      vipPlanList: []
+    }
+  },
+  created() {
+    document.title = '站点配置'
+    this.getData()
+  },
+  mounted() {
+  },
+  methods: {
+    getData() {
+      getChargeReq(1).then(resp => {
+        if (resp.code === 0) {
+          this.chargeReqList = resp.data
+        }
+      })
+
+      getVipPlan().then(resp => {
+        if (resp.code === 0) {
+          this.vipPlanList = resp.data
+        }
+      })
+    },
+    onApprove(row) {
+      this.$message.info('同意充值 ' + row.chargeId)
+    },
+    onDecline(row) {
+      this.$message.info('拒绝充值' + row.chargeId)
+    }
+  }
+}
+</script>
+
+<style>
+</style>

+ 0 - 487
src/views/admin/AdminSiteConfig.vue

@@ -1,487 +0,0 @@
-<template>
-  <el-row>
-    <el-row class="movie-list">
-      <el-col :md="16" style="padding-right: 5px; padding-left: 5px; padding-bottom: 5px">
-        <el-row style="padding-right: 5px; padding-left: 5px; padding-bottom: 5px">
-          <el-card class="box-card">
-            <div slot="header" class="clearfix">
-              <span>存储配置</span>
-            </div>
-            <div class="text item">
-              <el-table
-                :data="storeConfigList"
-                border
-                style="width: 100%"
-              >
-                <el-table-column
-                  prop="id"
-                  label="ID"
-                />
-                <el-table-column
-                  prop="ossType"
-                  label="存储类型"
-                />
-                <el-table-column
-                  prop="endpoint"
-                  label="Endpoint"
-                />
-                <el-table-column
-                  prop="accessKeyId"
-                  label="AccessKeyId"
-                />
-                <el-table-column
-                  prop="accessKeySecret"
-                  label="AccessKeyIdSecret"
-                />
-                <el-table-column
-                  fixed="right"
-                  label="操作"
-                >
-                  <template slot-scope="scope">
-                    <el-button
-                      size="mini"
-                      @click="onApprove(scope.row)"
-                    >同意</el-button>
-                    <el-button
-                      size="mini"
-                      type="danger"
-                      @click="onDecline(scope.row)"
-                    >拒绝</el-button>
-                  </template>
-                </el-table-column>
-              </el-table>
-            </div>
-          </el-card>
-        </el-row>
-      </el-col>
-      <el-col :md="8" style="padding-right: 5px; padding-left: 5px; padding-bottom: 5px">
-        <el-row style="padding-right: 5px; padding-left: 5px; padding-bottom: 5px">
-          <el-card class="box-card">
-            <div slot="header" class="clearfix">
-              <span>视频分区</span>
-            </div>
-            <div class="text item">
-              <el-tree
-                :accordion="true"
-                :data="treeNode"
-                :props="defaultProps"
-                highlight-current
-                @node-click="handleNodeClick"
-              >
-              <span slot-scope="{ node, data }">
-                <span :class="data.icon">{{ node.label }}</span>
-              </span>
-              </el-tree>
-            </div>
-          </el-card>
-        </el-row>
-      </el-col>
-    </el-row>
-    <el-row class="movie-list">
-      <el-col :md="16" style="padding-right: 5px; padding-left: 5px; padding-bottom: 5px">
-        <el-row style="padding-right: 5px; padding-left: 5px; padding-bottom: 5px">
-          <el-card class="box-card">
-            <div slot="header" class="clearfix">
-              <span>通知配置</span>
-            </div>
-            <div class="text item">
-              <el-table
-                :data="notifyConfigList"
-                border
-                style="width: 100%"
-              >
-                <el-table-column
-                  prop="id"
-                  label="ID"
-                />
-                <el-table-column
-                  prop="smtp"
-                  label="SMTP"
-                />
-                <el-table-column
-                  prop="username"
-                  label="帐号"
-                />
-                <el-table-column
-                  prop="password"
-                  label="密码"
-                />
-                <el-table-column
-                  prop="personal"
-                  label="发送人"
-                />
-                <el-table-column
-                  prop="defaultSender"
-                  label="是否默认"
-                />
-                <el-table-column
-                  fixed="right"
-                  label="操作"
-                >
-                  <template slot-scope="scope">
-                    <el-button
-                      size="mini"
-                      @click="onApprove(scope.row)"
-                    >同意</el-button>
-                    <el-button
-                      size="mini"
-                      type="danger"
-                      @click="onDecline(scope.row)"
-                    >拒绝</el-button>
-                  </template>
-                </el-table-column>
-              </el-table>
-            </div>
-          </el-card>
-        </el-row>
-      </el-col>
-      <el-col :md="8" style="padding-right: 5px; padding-left: 5px; padding-bottom: 5px">
-        <el-row style="padding-right: 5px; padding-left: 5px; padding-bottom: 5px">
-          <el-card class="box-card">
-            <div slot="header" class="clearfix">
-              <span>站点公告</span>
-            </div>
-            <div class="text item">
-              {{ siteNotice }}
-            </div>
-          </el-card>
-        </el-row>
-      </el-col>
-    </el-row>
-    <el-row class="movie-list">
-      <el-col :md="16" style="padding-right: 5px; padding-left: 5px; padding-bottom: 5px">
-        <el-row style="padding-right: 5px; padding-left: 5px; padding-bottom: 5px">
-          <el-card class="box-card">
-            <div slot="header" class="clearfix">
-              <span>充值请求</span>
-            </div>
-            <div class="text item">
-              <el-table
-                :data="chargeReqList"
-                border
-                style="width: 100%"
-              >
-                <el-table-column
-                  fixed="left"
-                  label="No"
-                  type="index"
-                />
-                <el-table-column
-                  prop="chargeId"
-                  label="充值 ID"
-                />
-                <el-table-column
-                  prop="quantity"
-                  label="金额"
-                />
-                <el-table-column
-                  prop="owner"
-                  label="用户"
-                />
-                <el-table-column
-                  fixed="right"
-                  label="操作"
-                >
-                  <template slot-scope="scope">
-                    <el-button
-                      size="mini"
-                      @click="onApprove(scope.row)"
-                    >同意</el-button>
-                    <el-button
-                      size="mini"
-                      type="danger"
-                      @click="onDecline(scope.row)"
-                    >拒绝</el-button>
-                  </template>
-                </el-table-column>
-              </el-table>
-            </div>
-          </el-card>
-        </el-row>
-      </el-col>
-      <el-col :md="8" style="padding-right: 5px; padding-left: 5px; padding-bottom: 5px">
-        <el-row style="padding-right: 5px; padding-left: 5px; padding-bottom: 5px">
-          <el-card class="box-card">
-            <div slot="header" class="clearfix">
-              <span>会员计划</span>
-            </div>
-            <div class="text item">
-              <el-table
-                :data="vipPlanList"
-                border
-                style="width: 100%"
-              >
-                <el-table-column
-                  prop="planId"
-                  label="ID"
-                />
-                <el-table-column
-                  prop="name"
-                  label="名字"
-                />
-                <el-table-column
-                  prop="price"
-                  label="价格(¥)"
-                />
-                <el-table-column
-                  prop="duration"
-                  label="时长(天)"
-                />
-              </el-table>
-            </div>
-          </el-card>
-        </el-row>
-      </el-col>
-    </el-row>
-
-    <el-dialog
-      :title="updateTitle"
-      append-to-body
-      :visible.sync="updateMobileDialog"
-      width="30%"
-      center
-    >
-      <el-row style="padding-right: 5px; padding-left: 5px; padding-bottom: 5px; text-align: center">
-        <el-form ref="form" :model="updateMobileForm" label-width="100px">
-          <el-form-item label="邮箱/手机号" label-width="100px">
-            <el-input
-              v-model="updateMobileForm.principal"
-              placeholder="请输入邮箱或手机号"
-              style="width: 45%; padding-right: 10px"
-              clearable
-            />
-            <el-button :disabled="isBtn" @click="sendVerifyCode">{{ code }}</el-button>
-          </el-form-item>
-          <el-form-item label="验证码" label-width="90px">
-            <el-input
-              v-model="updateMobileForm.verifyCode"
-              placeholder="请输入短信验证码"
-              style="padding-right: 1px"
-              clearable
-            />
-          </el-form-item>
-          <el-form-item label="密码">
-            <el-input
-              v-model="updateMobileForm.credential"
-              type="password"
-              placeholder="请输入密码"
-              style="padding-right: 1px"
-              clearable
-            />
-          </el-form-item>
-          <el-form-item>
-            <el-button
-              type="primary"
-              @click.native="updateUserEmail"
-            >更新</el-button>
-          </el-form-item>
-        </el-form>
-      </el-row>
-    </el-dialog>
-    <el-dialog
-      :title="updateTitle"
-      append-to-body
-      :visible.sync="updatePasswordDialog"
-      width="30%"
-      center
-    >
-      <el-row style="padding-right: 5px; padding-left: 5px; padding-bottom: 5px; text-align: center">
-        <el-card class="box-card">
-          <div class="text item">
-            <el-form ref="form" :model="updatePasswordForm" label-width="100px">
-              <el-form-item label="当前密码">
-                <el-input
-                  v-model="updatePasswordForm.credential"
-                  type="password"
-                  placeholder="请输入当前密码"
-                  style="padding-right: 1px"
-                  clearable
-                />
-              </el-form-item>
-              <el-form-item label="新密码">
-                <el-input
-                  v-model="updatePasswordForm.credential"
-                  type="password"
-                  placeholder="请输入新密码"
-                  style="padding-right: 1px"
-                  clearable
-                />
-              </el-form-item>
-              <el-form-item label="确认新密码">
-                <el-input
-                  v-model="updatePasswordForm.credential"
-                  type="password"
-                  placeholder="请确认新密码"
-                  style="padding-right: 1px"
-                  clearable
-                />
-              </el-form-item>
-              <el-form-item>
-                <el-button
-                  type="primary"
-                  @click.native="updateUserPassword"
-                >更新</el-button>
-              </el-form-item>
-            </el-form>
-          </div>
-        </el-card>
-      </el-row>
-    </el-dialog>
-  </el-row>
-</template>
-
-<script>
-import { userMixin } from 'assets/js/mixin'
-import {
-  getChargeReq,
-  getFileStoreConfig,
-  getNotifyConfig,
-  getSiteNotice,
-  getVideoCategory,
-  getVipPlan
-} from '@/api/admin'
-import {videoCategories} from "@/api/video";
-
-export default {
-  name: 'AdminSiteConfig',
-  mixins: [userMixin],
-  data() {
-    return {
-      storeConfigList: null,
-      notifyConfigList: [],
-      vipPlanList: [],
-      siteNotice: null,
-      videoCategory: null,
-      chargeReqList: [],
-      treeNode: [],
-      defaultProps: {
-        children: 'children',
-        label: 'label',
-        value: 'value'
-      },
-      updateType: 1,
-      updateTitle: '',
-      updateMobileDialog: false,
-      updateMobileForm: {
-        principal: null,
-        verifyCode: null,
-        credential: null,
-        captchaCode: null,
-        channel: 1,
-        plat: 2
-      },
-      updatePasswordDialog: false,
-      updatePasswordForm: {
-        principal: null,
-        verifyCode: null,
-        credential: null,
-        captchaCode: null,
-        channel: 1,
-        plat: 2
-      }
-    }
-  },
-  created() {
-    document.title = '站点配置'
-    this.getData()
-  },
-  mounted() {
-  },
-  methods: {
-    getData() {
-      getFileStoreConfig().then(resp => {
-        if (resp.code === 0) {
-          this.storeConfigList = resp.data
-        }
-      })
-
-      getNotifyConfig().then(resp => {
-        if (resp.code === 0) {
-          this.notifyConfigList = resp.data
-        }
-      })
-
-      getVipPlan().then(resp => {
-        if (resp.code === 0) {
-          this.vipPlanList = resp.data
-        }
-      })
-
-      getSiteNotice().then(resp => {
-        if (resp.code === 0) {
-          this.siteNotice = resp.data
-        }
-      })
-
-      getVideoCategory().then(resp => {
-        if (resp.code === 0) {
-        }
-      })
-      videoCategories().then(resp => {
-        if (resp.code === 0) {
-          this.treeNode = resp.data
-        } else {
-          this.$notify({
-            title: '提示',
-            message: resp.msg,
-            type: 'error',
-            duration: 3000
-          })
-        }
-      }).catch(error => {
-        this.$notify({
-          title: '提示',
-          message: error.message,
-          type: 'warning',
-          duration: 3000
-        })
-      })
-
-      getChargeReq(1).then(resp => {
-        if (resp.code === 0) {
-          this.chargeReqList = resp.data
-        }
-      })
-    },
-    // ****************************************************************************************************************
-    showUpdateDialog(type) {
-      if (type === 1) {
-        this.updateType = 1
-        this.updateTitle = '更新用户手机号'
-        this.updateMobileDialog = true
-      } else if (type === 2) {
-        this.updateType = 2
-        this.updateTitle = '更新用户密码'
-        this.updatePasswordDialog = true
-      }
-    },
-    onUpdate() {
-      if (this.updateType === 1) {
-        this.updateMobileDialog = false
-      } else {
-        this.updatePasswordDialog = false
-      }
-    },
-    sendVerifyCode() {
-      this.$message.info('发送验证码')
-    },
-    updateUserEmail() {
-      this.$message.info(this.updateMobileForm)
-      this.updateMobileDialog = false
-    },
-    updateUserPassword() {
-      this.$message.info(this.updatePasswordForm)
-      this.updatePasswordDialog = false
-    },
-    onApprove(row) {
-      this.$message.info('同意充值 ' + row.chargeId)
-    },
-    onDecline(row) {
-      this.$message.info('拒绝充值' + row.chargeId)
-    }
-  }
-}
-</script>
-
-<style>
-</style>

+ 26 - 2
src/views/admin/LeftAside.vue

@@ -95,15 +95,39 @@
       <i class="el-icon-setting" />
       <span slot="title">导航四</span>
     </el-menu-item>
+    <el-submenu index="/background/site">
+      <template slot="title">
+        <i class="el-icon-menu" />
+        <span>站点配置</span>
+      </template>
+      <el-menu-item-group>
+        <el-menu-item index="/background/site/store">
+          <i class="el-icon-picture" />
+          <span slot="title">存储配置</span>
+        </el-menu-item>
+        <el-menu-item index="/background/site/notify">
+          <i class="el-icon-user" />
+          <span slot="title">通知配置</span>
+        </el-menu-item>
+        <el-menu-item index="/background/site/registry">
+          <i class="el-icon-picture" />
+          <span slot="title">注册配置</span>
+        </el-menu-item>
+        <el-menu-item index="/background/site/category">
+          <i class="el-icon-film" />
+          <span slot="title">站点分区</span>
+        </el-menu-item>
+      </el-menu-item-group>
+    </el-submenu>
     <el-submenu index="/background/admin">
       <template slot="title">
         <i class="el-icon-files" />
         <span>后台管理</span>
       </template>
       <el-menu-item-group>
-        <el-menu-item index="/background/admin/site">
+        <el-menu-item index="/background/admin/charge">
           <i class="el-icon-picture" />
-          <span slot="title">站点管理</span>
+          <span slot="title">充值请求</span>
         </el-menu-item>
         <el-menu-item index="/background/admin/user">
           <i class="el-icon-user" />

+ 0 - 0
src/views/admin/AdminAccessLog.vue → src/views/admin/backend/AdminAccessLog.vue


+ 0 - 0
src/views/admin/AdminBackendLog.vue → src/views/admin/backend/AdminBackendLog.vue


+ 0 - 0
src/views/admin/AdminDubboService.vue → src/views/admin/backend/AdminDubboService.vue


+ 0 - 0
src/views/admin/AdminGateway.vue → src/views/admin/backend/AdminGateway.vue


+ 0 - 0
src/views/admin/AdminRuntimeLog.vue → src/views/admin/backend/AdminRuntimeLog.vue


+ 0 - 0
src/views/admin/AdminSpringCloudService.vue → src/views/admin/backend/AdminSpringCloudService.vue


+ 152 - 0
src/views/admin/site/AdminCategory.vue

@@ -0,0 +1,152 @@
+<template>
+  <el-row>
+    <el-row class="movie-list">
+      <el-col :md="12" style="padding-right: 5px; padding-left: 5px; padding-bottom: 5px">
+        <el-card class="box-card">
+          <div slot="header" class="clearfix">
+            <span>视频分区</span>
+          </div>
+          <div class="text item">
+            <el-tree
+              :accordion="true"
+              :data="treeNode"
+              :props="defaultProps"
+              highlight-current
+              @node-click="handleNodeClick"
+            >
+              <span slot-scope="{ node, data }">
+                <span :class="data.icon">{{ node.label }}</span>
+              </span>
+            </el-tree>
+          </div>
+        </el-card>
+      </el-col>
+      <el-col :md="12" style="padding-right: 5px; padding-left: 5px; padding-bottom: 5px">
+        <el-card class="box-card">
+          <div slot="header" class="clearfix">
+            <span>站点公告</span>
+            <el-button style="float: right; padding: 3px 0" type="text" @click="onUpdate">更新</el-button>
+          </div>
+          <div class="text item">
+            {{ siteNotice }}
+          </div>
+        </el-card>
+      </el-col>
+    </el-row>
+
+    <el-dialog
+      append-to-body
+      :visible.sync="updateDialog"
+      width="30%"
+      center
+    >
+      <el-row style="padding-right: 5px; padding-left: 5px; padding-bottom: 5px; text-align: center">
+        <el-form ref="form" :model="updateForm" label-width="100px">
+          <el-form-item label="新公告" label-width="90px">
+            <el-input
+              v-model="updateForm.content"
+              type="textarea"
+              maxlength="200"
+              :rows="3"
+              placeholder="请输入新公告"
+              style="padding: 5px"
+            />
+          </el-form-item>
+          <el-form-item>
+            <el-button
+              type="primary"
+              @click.native="updateNotice"
+            >更新</el-button>
+            <el-button
+              type="primary"
+              @click.native="updateDialog = false"
+            >取消</el-button>
+          </el-form-item>
+        </el-form>
+      </el-row>
+    </el-dialog>
+  </el-row>
+</template>
+
+<script>
+import { userMixin } from 'assets/js/mixin'
+import {
+  getSiteNotice,
+  getVideoCategory
+} from '@/api/admin'
+import { videoCategories } from '@/api/video'
+
+export default {
+  name: 'AdminCategory',
+  mixins: [userMixin],
+  data() {
+    return {
+      treeNode: [],
+      defaultProps: {
+        children: 'children',
+        label: 'label',
+        value: 'value'
+      },
+      siteNotice: null,
+      updateDialog: false,
+      updateForm: {
+        content: null
+      }
+    }
+  },
+  created() {
+    document.title = '站点分区'
+    this.getData()
+  },
+  mounted() {
+  },
+  methods: {
+    getData() {
+      getVideoCategory().then(resp => {
+        if (resp.code === 0) {
+          console.log(resp.data)
+        }
+      })
+      videoCategories().then(resp => {
+        if (resp.code === 0) {
+          this.treeNode = resp.data
+        } else {
+          this.$notify({
+            title: '提示',
+            message: resp.msg,
+            type: 'error',
+            duration: 3000
+          })
+        }
+      }).catch(error => {
+        this.$notify({
+          title: '提示',
+          message: error.message,
+          type: 'warning',
+          duration: 3000
+        })
+      })
+
+      getSiteNotice().then(resp => {
+        if (resp.code === 0) {
+          this.siteNotice = resp.data
+        }
+      })
+    },
+    // ****************************************************************************************************************
+    handleNodeClick() {
+      this.$message.info('handleNodeClick')
+    },
+    onUpdate() {
+      this.updateDialog = true
+    },
+    updateNotice() {
+      this.$message.info(this.updateForm.content)
+      this.updateDialog = false
+    }
+  }
+}
+</script>
+
+<style>
+</style>

+ 150 - 0
src/views/admin/site/AdminNotifyConfig.vue

@@ -0,0 +1,150 @@
+<template>
+  <el-row>
+    <el-row class="movie-list">
+      <el-col :md="18" style="padding-right: 5px; padding-left: 5px; padding-bottom: 5px">
+        <el-card class="box-card">
+          <div slot="header" class="clearfix">
+            <span>邮件通知配置</span>
+          </div>
+          <div class="text item">
+            <el-table
+              :data="notifyConfigList"
+              border
+              style="width: 100%"
+            >
+              <el-table-column
+                prop="id"
+                label="ID"
+              />
+              <el-table-column
+                prop="smtp"
+                label="SMTP"
+              />
+              <el-table-column
+                prop="username"
+                label="帐号"
+              />
+              <el-table-column
+                prop="password"
+                label="密码"
+              />
+              <el-table-column
+                prop="personal"
+                label="发送人"
+              />
+              <el-table-column
+                prop="defaultSender"
+                label="是否默认"
+              />
+              <el-table-column
+                fixed="right"
+                label="操作"
+              >
+                <template slot-scope="scope">
+                  <el-button
+                    size="mini"
+                    @click="onApprove(scope.row)"
+                  >同意</el-button>
+                  <el-button
+                    size="mini"
+                    type="danger"
+                    @click="onDecline(scope.row)"
+                  >拒绝</el-button>
+                </template>
+              </el-table-column>
+            </el-table>
+          </div>
+        </el-card>
+      </el-col>
+    </el-row>
+
+    <el-dialog
+      append-to-body
+      :visible.sync="updateDialog"
+      width="30%"
+      center
+    >
+      <el-row style="padding-right: 5px; padding-left: 5px; padding-bottom: 5px; text-align: center">
+        <el-form ref="form" :model="updateMobileForm" label-width="100px">
+          <el-form-item label="密码">
+            <el-input
+              v-model="updateMobileForm.credential"
+              type="password"
+              placeholder="请输入密码"
+              style="padding-right: 1px"
+              clearable
+            />
+          </el-form-item>
+          <el-form-item>
+            <el-button
+              type="primary"
+              @click.native="updateUserEmail"
+            >更新</el-button>
+            <el-button
+              type="primary"
+              @click.native="updateDialog = false"
+            >取消</el-button>
+          </el-form-item>
+        </el-form>
+      </el-row>
+    </el-dialog>
+  </el-row>
+</template>
+
+<script>
+import { userMixin } from 'assets/js/mixin'
+import {
+  getNotifyConfig
+} from '@/api/admin'
+
+export default {
+  name: 'AdminNotifyConfig',
+  mixins: [userMixin],
+  data() {
+    return {
+      notifyConfigList: [],
+      updateDialog: false,
+      updateMobileForm: {
+        principal: null,
+        verifyCode: null,
+        credential: null,
+        captchaCode: null,
+        channel: 1,
+        plat: 2
+      }
+    }
+  },
+  created() {
+    document.title = '站点配置'
+    this.getData()
+  },
+  mounted() {
+  },
+  methods: {
+    getData() {
+      getNotifyConfig().then(resp => {
+        if (resp.code === 0) {
+          this.notifyConfigList = resp.data
+        }
+      })
+    },
+    // ****************************************************************************************************************
+    onUpdate() {
+      this.updateDialog = false
+    },
+    updateUserEmail() {
+      this.$message.info(this.updateMobileForm)
+      this.updateDialog = false
+    },
+    onApprove(row) {
+      this.$message.info('同意充值 ' + row.chargeId)
+    },
+    onDecline(row) {
+      this.$message.info('拒绝充值' + row.chargeId)
+    }
+  }
+}
+</script>
+
+<style>
+</style>

+ 150 - 0
src/views/admin/site/AdminRegistry.vue

@@ -0,0 +1,150 @@
+<template>
+  <el-row>
+    <el-row class="movie-list">
+      <el-col :md="12" style="padding-right: 5px; padding-left: 5px; padding-bottom: 5px">
+        <el-card class="box-card">
+          <div slot="header" class="clearfix">
+            <span>注册管理</span>
+          </div>
+          <div class="text item">
+            <el-table
+              :data="accountRegistryList"
+              border
+              style="width: 100%"
+            >
+              <el-table-column
+                prop="enabled"
+                label="是否启用注册"
+              >
+                <template slot-scope="scope">
+                  <el-tag v-if="scope.row.enabled" :type="'warning'" disable-transitions>
+                    启用
+                  </el-tag>
+                  <el-tag v-else :type="'danger'" disable-transitions>
+                    禁用
+                  </el-tag>
+                </template>
+              </el-table-column>
+              <el-table-column
+                prop="rule"
+                label="注册规则"
+              />
+              <el-table-column
+                fixed="right"
+                label="操作"
+              >
+                <template slot-scope="scope">
+                  <el-button
+                    size="mini"
+                    type="warning"
+                    @click="onApprove(scope.row)"
+                  >编辑</el-button>
+                  <el-button
+                    v-if="scope.row.enabled"
+                    size="mini"
+                    type="danger"
+                    @click="onDecline(scope.row)"
+                  >禁用</el-button>
+                  <el-button
+                    v-else
+                    size="mini"
+                    type="danger"
+                    @click="onDecline(scope.row)"
+                  >启用</el-button>
+                </template>
+              </el-table-column>
+            </el-table>
+          </div>
+        </el-card>
+      </el-col>
+      <el-col :md="12" style="padding-right: 5px; padding-left: 5px; padding-bottom: 5px">
+        <el-card class="box-card">
+          <div slot="header" class="clearfix">
+            <span>会员计划</span>
+          </div>
+          <div class="text item">
+            <el-table
+              :data="vipPlanList"
+              border
+              style="width: 100%"
+            >
+              <el-table-column
+                prop="planId"
+                label="ID"
+              />
+              <el-table-column
+                prop="name"
+                label="名字"
+              />
+              <el-table-column
+                prop="price"
+                label="价格(¥)"
+              />
+              <el-table-column
+                prop="duration"
+                label="时长(天)"
+              />
+            </el-table>
+          </div>
+        </el-card>
+      </el-col>
+    </el-row>
+  </el-row>
+</template>
+
+<script>
+import { userMixin } from 'assets/js/mixin'
+import {
+  getAccountRegistry,
+  getChargeReq, getVipPlan
+} from '@/api/admin'
+
+export default {
+  name: 'AdminRegistry',
+  mixins: [userMixin],
+  data() {
+    return {
+      chargeReqList: [],
+      vipPlanList: [],
+      accountRegistryList: []
+    }
+  },
+  created() {
+    document.title = '注册配置'
+    this.getData()
+  },
+  mounted() {
+  },
+  methods: {
+    getData() {
+      this.accountRegistryList = []
+      getAccountRegistry().then(resp => {
+        if (resp.code === 0) {
+          this.accountRegistryList.push(resp.data)
+        }
+      })
+
+      getChargeReq(1).then(resp => {
+        if (resp.code === 0) {
+          this.chargeReqList = resp.data
+        }
+      })
+
+      getVipPlan().then(resp => {
+        if (resp.code === 0) {
+          this.vipPlanList = resp.data
+        }
+      })
+    },
+    onApprove(row) {
+      this.$message.info('同意充值 ' + row)
+    },
+    onDecline(row) {
+      this.$message.info('拒绝充值' + row)
+    }
+  }
+}
+</script>
+
+<style>
+</style>

+ 163 - 0
src/views/admin/site/AdminStoreConfig.vue

@@ -0,0 +1,163 @@
+<template>
+  <el-row>
+    <el-row class="movie-list">
+      <el-col :md="16" style="padding-right: 5px; padding-left: 5px; padding-bottom: 5px">
+        <el-card class="box-card">
+          <div slot="header" class="clearfix">
+            <span>文件存储配置</span>
+            <el-button style="float: right; padding: 3px 0" type="text" @click="onAdd">添加</el-button>
+          </div>
+          <div class="text item">
+            <el-table
+              :data="storeConfigList"
+              border
+              style="width: 100%"
+            >
+              <el-table-column
+                prop="ossTypeStr"
+                label="存储类型"
+              />
+              <el-table-column
+                prop="endpoint"
+                label="Endpoint"
+              />
+              <el-table-column
+                prop="accessKeyId"
+                label="AccessKeyId"
+              />
+              <el-table-column
+                prop="accessKeySecret"
+                label="AccessKeyIdSecret"
+              />
+              <el-table-column
+                fixed="right"
+                label="操作"
+              >
+                <template slot-scope="scope">
+                  <el-button
+                    size="mini"
+                    type="danger"
+                    @click="onApprove(scope.row)"
+                  >删除</el-button>
+                </template>
+              </el-table-column>
+            </el-table>
+          </div>
+        </el-card>
+      </el-col>
+    </el-row>
+
+    <el-dialog
+      append-to-body
+      :visible.sync="addDialog"
+      width="30%"
+      center
+    >
+      <el-row style="padding-right: 5px; padding-left: 5px; padding-bottom: 5px; text-align: center">
+        <el-form ref="form" :model="addForm" label-width="120px">
+          <el-form-item label="OSS 类型">
+            <el-select v-model="addForm.ossType" placeholder="" style="padding-right: 1px">
+              <el-option label="本地 OSS" value="1" />
+              <el-option label="阿里云 OSS" value="2" />
+            </el-select>
+          </el-form-item>
+          <el-form-item label="Endpoint">
+            <el-input
+              v-model="addForm.endpoint"
+              type="password"
+              placeholder=""
+              style="padding-right: 1px"
+              clearable
+            />
+          </el-form-item>
+          <el-form-item label="AccessKeyId">
+            <el-input
+              v-model="addForm.accessKeyId"
+              type="password"
+              placeholder=""
+              style="padding-right: 1px"
+              clearable
+            />
+          </el-form-item>
+          <el-form-item label="AccessKeySecret">
+            <el-input
+              v-model="addForm.accessKeySecret"
+              type="password"
+              placeholder=""
+              style="padding-right: 1px"
+              clearable
+            />
+          </el-form-item>
+          <el-form-item>
+            <el-button
+              type="primary"
+              @click.native="onAddSubmit"
+            >添加</el-button>
+            <el-button
+              type="primary"
+              @click.native="addDialog = false"
+            >取消</el-button>
+          </el-form-item>
+        </el-form>
+      </el-row>
+    </el-dialog>
+  </el-row>
+</template>
+
+<script>
+import { userMixin } from 'assets/js/mixin'
+import {
+  addFileStoreConfig,
+  getFileStoreConfig
+} from '@/api/admin'
+
+export default {
+  name: 'AdminStoreConfig',
+  mixins: [userMixin],
+  data() {
+    return {
+      storeConfigList: null,
+      addDialog: false,
+      addForm: {
+        ossType: '1',
+        endpoint: null,
+        accessKeyId: null,
+        accessKeySecret: null
+      }
+    }
+  },
+  created() {
+    document.title = '文件存储配置'
+    this.getData()
+  },
+  mounted() {
+  },
+  methods: {
+    getData() {
+      getFileStoreConfig().then(resp => {
+        if (resp.code === 0) {
+          this.storeConfigList = resp.data
+        }
+      })
+    },
+    // ****************************************************************************************************************
+    onAdd() {
+      this.addDialog = true
+    },
+    onAddSubmit() {
+      this.addDialog = false
+      addFileStoreConfig(this.addForm).then(resp => {
+        this.$message.info(resp.msg)
+      }).catch(error => {
+        this.$message.error(error.message)
+      })
+    },
+    onApprove(row) {
+      this.$message.info('id -> ' + row.id)
+    }
+  }
+}
+</script>
+
+<style>
+</style>

+ 0 - 11
src/views/home/Discover.vue

@@ -71,12 +71,6 @@ export default {
           desc: '图表',
           link: '/chart',
           coverUrl: ''
-        },
-        {
-          title: 'disk',
-          desc: '网盘',
-          link: '/disk',
-          coverUrl: ''
         }/*,
         {
           title: 'chat',
@@ -91,9 +85,4 @@ export default {
 </script>
 
 <style scoped>
-#movie-list {
-  padding-top: 10px;
-  padding-left: 3%;
-  padding-right: 3%;
-}
 </style>