Browse Source

feat():init

geek 4 years ago
parent
commit
9ac55cc806

+ 40 - 0
src/api/join.js

@@ -0,0 +1,40 @@
+import request from '@/utils/request'
+
+export function fetchList(query) {
+  return request({
+    url: '/Admin/index',
+    method: 'get',
+    params: query
+  })
+}
+
+export function fetchAdmin(id) {
+  return request({
+    url: '/Admin/read',
+    method: 'get',
+    params: { id }
+  })
+}
+
+export function createAdmin(data) {
+  return request({
+    url: '/Admin/save',
+    method: 'post',
+    data
+  })
+}
+
+export function updateOpenArea(data) {
+  return request({
+    url: '/OpenArea/update?id=' + data.id,
+    method: 'post',
+    data
+  })
+}
+
+export function deleteOpenArea(id) {
+  return request({
+    url: '/OpenArea/delete?id=' + id,
+    method: 'get'
+  })
+}

+ 2 - 2
src/api/live.js

@@ -2,7 +2,7 @@ import request from '@/utils/request'
 
 export function fetchList(query) {
   return request({
-    url: '/Live/index',
+    url: '/Log/index',
     method: 'get',
     params: query
   })
@@ -10,7 +10,7 @@ export function fetchList(query) {
 
 export function fetchLive(id) {
   return request({
-    url: '/Live/read',
+    url: '/Log/read',
     method: 'get',
     params: { id }
   })

+ 18 - 7
src/permission.js

@@ -8,7 +8,7 @@ import getPageTitle from '@/utils/get-page-title'
 
 NProgress.configure({ showSpinner: false }) // NProgress Configuration
 
-const whiteList = ['/login'] // no redirect whitelist
+const whiteList = ['/login', '/auth-redirect'] // no redirect whitelist
 
 router.beforeEach(async(to, from, next) => {
   // start progress bar
@@ -21,20 +21,31 @@ router.beforeEach(async(to, from, next) => {
   const hasToken = getToken()
 
   if (hasToken) {
-    console.log(to.path)
     if (to.path === '/login') {
       // if is logged in, redirect to the home page
       next({ path: '/' })
-      NProgress.done()
+      NProgress.done() // hack: https://github.com/PanJiaChen/vue-element-admin/pull/2939
     } else {
-      const hasGetUserInfo = store.getters.name
-      if (hasGetUserInfo) {
+      // determine whether the user has obtained his permission roles through getInfo
+      const hasRoles = store.getters.roles && store.getters.roles.length > 0
+      console.log(store.getters.roles)
+      if (hasRoles) {
         next()
       } else {
         try {
           // get user info
-          await store.dispatch('user/getInfo')
-
+          // note: roles must be a object array! such as: ['admin'] or ,['developer','editor']
+          const data = await store.dispatch('user/getInfo')
+          console.log(data)
+          const roles = data.role
+          console.log(roles)
+          // generate accessible routes map based on roles
+          const accessRoutes = await store.dispatch('permission/generateRoutes', roles)
+          console.log(accessRoutes)
+          // dynamically add accessible routes
+          router.addRoutes(accessRoutes)
+          // hack method to ensure that addRoutes is complete
+          // set the replace: true, so the navigation will not leave a history record
           next()
         } catch (error) {
           // remove token and go to login page to re-login

+ 77 - 19
src/router/index.js

@@ -55,24 +55,12 @@ export const constantRoutes = [
     }]
   },
   {
-    path: '/form',
-    component: Layout,
-    children: [
-      {
-        path: 'index',
-        name: 'Form',
-        component: () => import('@/views/form/index'),
-        meta: { title: 'Form', icon: 'form' },
-        hidden: true
-      }
-    ]
-  },
-  {
     path: '/home',
     component: Layout,
     meta: {
       title: '图片列表',
-      icon: 'el-icon-setting'
+      icon: 'el-icon-setting',
+      role: ['admin']
     },
     children: [
       {
@@ -102,7 +90,8 @@ export const constantRoutes = [
     name: 'setting',
     meta: {
       title: '基本设置',
-      icon: 'el-icon-setting'
+      icon: 'el-icon-setting',
+      role: ['admin']
     },
     children: [
       {
@@ -119,7 +108,8 @@ export const constantRoutes = [
     name: 'brand',
     meta: {
       title: '基本设置',
-      icon: 'el-icon-setting'
+      icon: 'el-icon-setting',
+      role: ['admin']
     },
     children: [
       {
@@ -137,7 +127,8 @@ export const constantRoutes = [
     name: 'banner',
     meta: {
       title: '轮播设置',
-      icon: 'el-icon-s-help'
+      icon: 'el-icon-s-help',
+      role: ['admin']
     },
     children: [
       {
@@ -164,21 +155,88 @@ export const constantRoutes = [
   {
     path: '/city',
     component: Layout,
+    meta: {
+      role: ['admin']
+    },
     children: [
       {
         path: 'list',
-        name: 'join',
+        name: 'city',
         component: () => import('@/views/city/list'),
         meta: { title: '开放区域列表', icon: 'el-icon-s-help' }
       }
     ]
   },
+  {
+    path: '/join',
+    component: Layout,
+    meta: {
+      role: ['admin']
+    },
+    children: [
+      {
+        path: 'list',
+        name: 'join',
+        component: () => import('@/views/join/list'),
+        meta: { title: '管理员列表', icon: 'el-icon-s-help' }
+      }
+    ]
+  },
+  {
+    path: '/live',
+    component: Layout,
+    meta: {
+      roles: ['admin', 'editor']
+    },
+    children: [
+      {
+        path: 'list',
+        name: 'live',
+        component: () => import('@/views/live/list'),
+        meta: { title: '日志列表', icon: 'el-icon-s-help' },
+        roles: ['admin', 'editor']
+      },
+      {
+        path: 'edit/:id(\\d+)',
+        component: () => import('@/views/live/edit'),
+        name: 'EditBanner',
+        meta: { title: '查看日志参数', noCache: true, activeMenu: '/live/list' },
+        hidden: true
+      }
+    ]
+  },
   // 404 page must be placed at the end !!!
   { path: '*', redirect: '/404', hidden: true }
 ]
 
+export const asyncRoutes = [
+  {
+    path: '/live',
+    component: Layout,
+    meta: {
+      roles: ['admin', 'editor']
+    },
+    children: [
+      {
+        path: 'list',
+        name: 'live',
+        component: () => import('@/views/live/list'),
+        meta: { title: '日志列表', icon: 'el-icon-s-help' },
+        roles: ['admin', 'editor']
+      },
+      {
+        path: 'edit/:id(\\d+)',
+        component: () => import('@/views/live/edit'),
+        name: 'EditBanner',
+        meta: { title: '查看日志参数', noCache: true, activeMenu: '/live/list' },
+        hidden: true
+      }
+    ]
+  }
+]
+
 const createRouter = () => new Router({
-  mode: 'hash', // require service support
+  // mode: 'hash', // require service support
   scrollBehavior: () => ({ y: 0 }),
   routes: constantRoutes
 })

+ 3 - 1
src/store/getters.js

@@ -3,6 +3,8 @@ const getters = {
   device: state => state.app.device,
   token: state => state.user.token,
   avatar: state => state.user.avatar,
-  name: state => state.user.name
+  name: state => state.user.name,
+  roles: state => state.user.roles,
+  permission_routes: state => state.permission.routes,
 }
 export default getters

+ 3 - 1
src/store/index.js

@@ -4,6 +4,7 @@ import getters from './getters'
 import app from './modules/app'
 import settings from './modules/settings'
 import user from './modules/user'
+import permission from './modules/permission'
 
 Vue.use(Vuex)
 
@@ -11,7 +12,8 @@ const store = new Vuex.Store({
   modules: {
     app,
     settings,
-    user
+    user,
+    permission
   },
   getters
 })

+ 73 - 0
src/store/modules/permission.js

@@ -0,0 +1,73 @@
+import { asyncRoutes, constantRoutes } from '@/router'
+
+/**
+ * Use meta.role to determine if the current user has permission
+ * @param roles
+ * @param route
+ */
+function hasPermission(roles, route) {
+  if (route.meta && route.meta.roles) {
+    return roles.some(role => route.meta.roles.includes(role))
+  } else {
+    return true
+  }
+}
+
+/**
+ * Filter asynchronous routing tables by recursion
+ * @param routes asyncRoutes
+ * @param roles
+ */
+export function filterAsyncRoutes(routes, roles) {
+  const res = []
+
+  routes.forEach(route => {
+    const tmp = { ...route }
+    if (hasPermission(roles, tmp)) {
+      if (tmp.children) {
+        tmp.children = filterAsyncRoutes(tmp.children, roles)
+      }
+      res.push(tmp)
+    }
+  })
+
+  return res
+}
+
+const state = {
+  routes: [],
+  addRoutes: []
+}
+
+const mutations = {
+  SET_ROUTES: (state, routes) => {
+    state.addRoutes = routes
+    state.routes = constantRoutes.concat(routes)
+  },
+  SET_ROLES: (state, roles) => {
+    state.roles = roles
+  }
+}
+
+const actions = {
+  generateRoutes({ commit }, roles) {
+    return new Promise(resolve => {
+      let accessedRoutes
+      if (roles.includes('admin')) {
+        accessedRoutes = asyncRoutes || []
+      } else {
+        accessedRoutes = filterAsyncRoutes(asyncRoutes, roles)
+      }
+      commit('SET_ROUTES', accessedRoutes)
+      commit('SET_ROLES', roles)
+      resolve(accessedRoutes)
+    })
+  }
+}
+
+export default {
+  namespaced: true,
+  state,
+  mutations,
+  actions
+}

+ 12 - 3
src/store/modules/user.js

@@ -24,6 +24,9 @@ const mutations = {
   },
   SET_AVATAR: (state, avatar) => {
     state.avatar = avatar
+  },
+  SET_ROLES: (state, roles) => {
+    state.roles = roles
   }
 }
 
@@ -36,8 +39,9 @@ const actions = {
         const { data } = response
         console.log(data)
         commit('SET_TOKEN', data.token)
+        // commit('SET_ROLES', data.role)
         setToken(data.token)
-        resolve()
+        resolve(data)
       }).catch(error => {
         console.log(error)
         reject(error)
@@ -50,13 +54,17 @@ const actions = {
     return new Promise((resolve, reject) => {
       getInfo(state.token).then(response => {
         const { data } = response
-
         if (!data) {
           return reject('Verification failed, please Login again.')
         }
 
         const { name, avatar } = data
-
+        const roles = data.role
+        console.log(roles)
+        if (!roles || roles.length <= 0) {
+          reject('getInfo: roles must be a non-null array!')
+        }
+        commit('SET_ROLES', roles)
         commit('SET_NAME', name)
         commit('SET_AVATAR', avatar)
         resolve(data)
@@ -72,6 +80,7 @@ const actions = {
       logout(state.token).then(() => {
         removeToken() // must remove  token  first
         resetRouter()
+        commit('SET_ROLES', [])
         commit('RESET_STATE')
         resolve()
       }).catch(error => {

+ 62 - 52
src/views/join/list.vue

@@ -1,10 +1,13 @@
 <template>
   <div class="app-container">
     <div class="filter-container">
-      <el-input v-model="listQuery.mobile" placeholder="手机号" style="width: 200px;" class="filter-item" @keyup.enter.native="handleFilter" />
+      <el-input v-model="listQuery.name" placeholder="名称" style="width: 200px;" class="filter-item" @keyup.enter.native="handleFilter" />
       <el-button v-waves class="filter-item" type="primary" icon="el-icon-search" @click="handleFilter">
         搜索
       </el-button>
+      <el-button v-waves class="filter-item" type="primary" @click="handleCreate()">
+        新建
+      </el-button>
     </div>
     <el-table v-loading="listLoading" :data="list" border fit highlight-current-row style="width: 100%">
       <el-table-column align="center" label="ID" width="80">
@@ -13,53 +16,36 @@
         </template>
       </el-table-column>
 
-      <el-table-column width="180px" align="center" label="申请日期">
+      <el-table-column align="center" label="创建日期">
         <template slot-scope="scope">
           <span>{{ scope.row.create_time }}</span>
         </template>
       </el-table-column>
-      <el-table-column class-name="status-col" label="手机号" width="180px">
-        <template slot-scope="scope">
-          <span>{{ scope.row.mobile }}</span>
-        </template>
-      </el-table-column>
-      <el-table-column class-name="status-col" label="申请人姓名" width="100px">
-        <template slot-scope="scope">
-          <span>{{ scope.row.name }}</span>
-        </template>
-      </el-table-column>
-      <el-table-column class-name="status-col" label="商务对接人" width="100px">
-        <template slot-scope="scope">
-          <span>{{ scope.row.meet_people }}</span>
-        </template>
-      </el-table-column>
-      <el-table-column class-name="status-col" label="投资金额" width="100px">
-        <template slot-scope="scope">
-          <span>{{ scope.row.investment_money }}</span>
-        </template>
-      </el-table-column>
-      <el-table-column class-name="status-col" label="沪上阿姨了解情况">
+      <el-table-column class-name="status-col" label="名称" >
         <template slot-scope="scope">
-          <span>{{ scope.row.sub_ayi }}</span>
+          <span>{{ scope.row.account }}</span>
         </template>
       </el-table-column>
-      <el-table-column class-name="status-col" label="状态" width="80px">
+      <el-table-column class-name="status-col" label="角色" >
         <template slot-scope="{row}">
-          <el-tag :type="row.status | statusFilter">
-            {{ row.status | statusFilterTxt }}
-          </el-tag>
+          <span>{{ row.role_id | roleFilter }}</span>
         </template>
       </el-table-column>
-      <el-table-column align="center" label="Actions" width="300" class-name="small-padding fixed-width">
+<!--      <el-table-column class-name="status-col" label="状态">-->
+<!--        <template slot-scope="{row}">-->
+<!--          <el-tag :type="row.status | statusFilter">-->
+<!--            {{ row.status | statusFilterTxt }}-->
+<!--          </el-tag>-->
+<!--        </template>-->
+<!--      </el-table-column>-->
+      <el-table-column align="center" label="Actions"  class-name="small-padding fixed-width">
         <template slot-scope="scope">
           <el-row>
-            <router-link :to="'/join/edit/'+scope.row.id">
-              <el-button type="primary" size="mini" icon="el-icon-edit" style="margin-right: 10px;">
-                查看
-              </el-button>
-            </router-link>
-            <el-button type="primary" size="mini" icon="el-icon-s-check" :disabled="(scope.row.status === 1 || scope.row.status === 3)" @click="handleUpdate(scope)">
-              {{ scope.row.status === 1 || scope.row.status === 3 ? '已处理' : '处理' }}
+<!--            <el-button type="primary" size="mini" icon="el-icon-edit" style="margin-right: 10px;" @click="handleUpdate(scope)">-->
+<!--              查看-->
+<!--            </el-button>-->
+            <el-button type="primary" size="mini"  :disabled="(scope.row.status === 1 || scope.row.status === 3)" @click="handleUpdate(scope)">
+              修改
             </el-button>
             <!--<el-button type="danger" size="mini" icon="el-icon-delete" style="margin-left: 10px;" @click="handleDelete(scope)">
               删除
@@ -72,14 +58,18 @@
     <pagination v-show="total>0" :total="total" :page.sync="listQuery.page" :limit.sync="listQuery.pageSize" @pagination="getList" />
     <el-dialog title="处理" :visible.sync="dialogFormVisible">
       <el-form ref="dataForm" :model="temp" label-position="left" label-width="70px" style="width: 400px; margin-left:50px;">
-        <el-form-item label="理由" prop="mark">
-          <el-input v-model="temp.mark" />
+        <el-form-item label="名称" prop="account">
+          <el-input v-model="temp.account" />
         </el-form-item>
-        <el-form-item label="处理意见" prop="mark">
+
+        <el-form-item label="密码" prop="passwd">
+          <el-input v-model="temp.passwd" ref="password" show-password />
+        </el-form-item>
+        <el-form-item label="权限" prop="role_id">
           <template>
-            <el-radio-group v-model="temp.status">
-              <el-radio :label="1">同意</el-radio>
-              <el-radio :label="3">拒绝</el-radio>
+            <el-radio-group v-model="temp.role_id">
+              <el-radio :label="1">超级管理员</el-radio>
+              <el-radio :label="2">日志查看员</el-radio>
             </el-radio-group>
           </template>
         </el-form-item>
@@ -88,7 +78,7 @@
         <el-button @click="dialogFormVisible = false">
           取消
         </el-button>
-        <el-button type="primary" @click="updateData()">
+        <el-button type="primary" @click="dialogStatus==='create'?createData():updateData()">
           确定
         </el-button>
       </div>
@@ -97,7 +87,7 @@
 </template>
 
 <script>
-import { fetchList, deleteJoin, dealJoin, fetchJoin } from '@/api/join'
+import { fetchList, createAdmin, dealJoin, fetchAdmin } from '@/api/join'
 import Pagination from '@/components/Pagination' // Secondary package based on el-pagination
 import waves from '@/directive/waves'
 
@@ -122,12 +112,10 @@ export default {
         2: '删除'
       }
       return statusMap[status]
-    },
-    positionFilter(status) {
+    }, roleFilter(status) {
       const statusMap = {
-        'HOME': 'success',
-        draft: 'info',
-        2: 'danger'
+        1: '超级管理员',
+        2: '日志查看员'
       }
       return statusMap[status]
     }
@@ -143,8 +131,9 @@ export default {
       },
       temp: {
         id: undefined,
-        mark: '',
-        status: ''
+        account: '',
+        passwd: '',
+        role_id: 1
       },
       dialogFormVisible: false
     }
@@ -192,10 +181,17 @@ export default {
         this.$refs['dataForm'].clearValidate()
       })
     },
+    handleCreate() {
+      this.dialogStatus = 'create'
+      this.dialogFormVisible = true
+      this.$nextTick(() => {
+        this.$refs['dataForm'].clearValidate()
+      })
+    },
     async updateData() {
       const tempData = Object.assign({}, this.temp)
       await dealJoin(tempData)
-      const rs = await fetchJoin(tempData.id)
+      const rs = await fetchAdmin(tempData.id)
       const index = this.list.findIndex(v => v.id === this.temp.id)
       this.list.splice(index, 1, rs.data.info)
       this.dialogFormVisible = false
@@ -205,6 +201,20 @@ export default {
         type: 'success',
         duration: 2000
       })
+    },
+    async createData() {
+      createAdmin(this.temp).then((rs) => {
+        fetchAdmin(rs.data.addId).then(res => {
+          this.list.unshift(res.data)
+          this.dialogFormVisible = false
+          this.$notify({
+            title: '成功',
+            message: '创建成功',
+            type: 'success',
+            duration: 2000
+          })
+        })
+      })
     }
   }
 }

+ 6 - 131
src/views/live/components/ArticleDetail.vue

@@ -2,130 +2,16 @@
   <div class="createPost-container">
     <el-form ref="postForm" :label-position="labelPosition" :model="postForm" :rules="rules" class="form-container" label-width="120px">
       <div class="createPost-main-container">
-        <el-form-item prop="name" label="直播间名称">
-          <el-input v-model="postForm.name" style="width: 300px;" placeholder="直播间名称" />
+        <el-form-item prop="name" label="url">
+          <el-input v-model="postForm.url"/>
         </el-form-item>
-        <el-form-item prop="name" label="直播间标语">
-          <el-input v-model="postForm.slogan" style="width: 300px;" placeholder="直播间名称" />
+        <el-form-item prop="input" label="请求参数">
+          <el-input type="textarea" v-model="postForm.input" placeholder="" :rows="3" />
         </el-form-item>
-        <el-form-item prop="cover_img_url" label="封面图">
-          <Upload v-model="postForm.cover_img_url" :wx-upload="postForm.cover_img" @wxMedia="wxMedia" />
-        </el-form-item>
-        <el-form-item prop="time_area" label="时间范围">
-          <el-tooltip placement="top" style="font-size: 18px;margin-left: -50px;">
-            <div slot="content">开播时间段仅供参考,不是实际直播间可以开播的时间。
-              <br>直播间在开始时间前也可以开播,并且到结束时间后不会强制结束。
-              <br>若到结束时间仍未开播,则直播间无法再开播。
-            </div>
-            <i class="el-icon-question" />
-          </el-tooltip>
-          <template>
-            <el-date-picker
-              v-model="postForm.time_area"
-              type="datetimerange"
-              range-separator="至"
-              start-placeholder="开始日期"
-              end-placeholder="结束日期"
-              style="margin-left: 31px"
-            />
-          </template>
-        </el-form-item>
-        <el-form-item prop="anchor_name" label="主播名称">
-          <el-input v-model="postForm.anchor_name" placeholder="" style="width: 300px;" />
-        </el-form-item>
-        <el-form-item prop="anchor_wechat" label="主播微信">
-          <el-input v-model="postForm.anchor_wechat" placeholder="" style="width: 600px;" />
-          <el-link type="primary" style="margin-left: 20px" target="_blank" href="https://res.wx.qq.com/op_res/9rSix1dhHfK4rR049JL0PHJ7TpOvkuZ3mE0z7Ou_Etvjf-w1J_jVX0rZqeStLfwh">去认证</el-link>
-        </el-form-item>
-        <el-form-item prop="sub_anchor_wechat" label="主播副微信号">
-          <el-input v-model="postForm.sub_anchor_wechat" placeholder="" style="width: 300px;" />
-          <el-link type="primary" style="margin-left: 20px" target="_blank" href="https://res.wx.qq.com/op_res/9rSix1dhHfK4rR049JL0PHJ7TpOvkuZ3mE0z7Ou_Etvjf-w1J_jVX0rZqeStLfwh">去认证</el-link>
-        </el-form-item>
-        <el-form-item prop="creater_wechat" label="创建者微信号">
-          <el-input v-model="postForm.creater_wechat" placeholder="" style="width: 300px;" />
-        </el-form-item>
-        <el-form-item prop="share_img_url" label="分享图">
-          <Upload v-model="postForm.share_img_url" :wx-upload="postForm.share_img" @wxMedia="wxMedia" />
-        </el-form-item>
-        <el-form-item prop="feeds_img_url" label="购物封面图">
-          <Upload v-model="postForm.feeds_img_url" :wx-upload="postForm.feeds_img" @wxMedia="wxMedia" />
-        </el-form-item>
-        <el-form-item prop="is_feeds_public" label="官方收录">
-          <template>
-            <el-radio-group v-model="postForm.is_feeds_public">
-              <el-radio :label="1">开启</el-radio>
-              <el-radio :label="0">关闭</el-radio>
-            </el-radio-group>
-          </template>
-        </el-form-item>
-        <el-form-item prop="type" label="直播间类型">
-          <template>
-            <el-radio-group v-model="postForm.type">
-              <el-radio :label="1">推流</el-radio>
-              <el-radio :label="0">手机直播</el-radio>
-            </el-radio-group>
-          </template>
-        </el-form-item>
-        <el-form-item prop="screen_type" label="横屏、竖屏">
-          <template>
-            <el-radio-group v-model="postForm.screen_type">
-              <el-radio :label="1">横屏</el-radio>
-              <el-radio :label="0">竖屏</el-radio>
-            </el-radio-group>
-          </template>
-        </el-form-item>
-        <el-form-item prop="close_like" label="点赞">
-          <template>
-            <el-radio-group v-model="postForm.close_like">
-              <el-radio :label="0">开启</el-radio>
-              <el-radio :label="1">关闭</el-radio>
-            </el-radio-group>
-          </template>
-        </el-form-item>
-        <el-form-item prop="close_goods" label="货架">
-          <template>
-            <el-radio-group v-model="postForm.close_goods">
-              <el-radio :label="0">开启</el-radio>
-              <el-radio :label="1">关闭</el-radio>
-            </el-radio-group>
-          </template>
-        </el-form-item>
-        <el-form-item prop="close_comment" label="评论">
-          <template>
-            <el-radio-group v-model="postForm.close_comment">
-              <el-radio :label="0">开启</el-radio>
-              <el-radio :label="1">关闭</el-radio>
-            </el-radio-group>
-          </template>
-        </el-form-item>
-        <el-form-item prop="close_replay" label="回放">
-          <template>
-            <el-radio-group v-model="postForm.close_replay">
-              <el-radio :label="0">开启</el-radio>
-              <el-radio :label="1">关闭</el-radio>
-            </el-radio-group>
-          </template>
-        </el-form-item>
-        <el-form-item prop="close_share" label="分享">
-          <template>
-            <el-radio-group v-model="postForm.close_share">
-              <el-radio :label="0">开启</el-radio>
-              <el-radio :label="1">关闭</el-radio>
-            </el-radio-group>
-          </template>
-        </el-form-item>
-        <el-form-item prop="close_kf" label="客服">
-          <template>
-            <el-radio-group v-model="postForm.close_kf">
-              <el-radio :label="0">开启</el-radio>
-              <el-radio :label="1">关闭</el-radio>
-            </el-radio-group>
-          </template>
+        <el-form-item prop="output" label="返回参数">
+          <el-input type="textarea" v-model="postForm.output" placeholder="" :rows="3" />
         </el-form-item>
         <el-row>
-          <el-button v-if="!isEdit" v-loading="loading" type="success" @click="submitForm">
-            提交
-          </el-button>
           <el-button v-if="isEdit" v-loading="loading" type="success" @click="updateArticle">
             返回
           </el-button>
@@ -225,17 +111,6 @@ export default {
       userListOptions: [],
       rules: {
         name: [{ message: '直播标题必须为3-17个字(一个字等于两个英文字符或特殊字符)', required: true, validator: validateRequire, trigger: 'blur' }],
-        slogan: [{ message: '直播标语不为空', required: true, validator: validateRequire }],
-        cover_img_url: [{ message: '封面图不为空', required: true, validator: validateRequire, trigger: 'blur' }],
-        time_area: [{ required: true, validator: validateRequire }],
-        anchor_name: [{ message: '主播名称不为空且最多15个字', required: true, validator: validateRequire, trigger: 'blur' }],
-        anchor_wechat: [{ message: '主播微信不为空且必须是认证的', required: true, validator: validateRequire, trigger: 'blur' }],
-        share_img_url: [{ message: '分享图片不为空', required: true, validator: validateRequire }],
-        feeds_img_url: [{ message: '购物封面图不为空', required: true, validator: validateRequire }],
-        type: [{ message: '直播类型不为空', required: true, validator: validateRequire }],
-        screen_type: [{ message: '横屏、竖屏不为空', required: true, validator: validateRequire }],
-        close_like: [{ message: '点赞不为空', required: true, validator: validateRequire }],
-        close_goods: [{ message: '货架不为空', required: true, validator: validateRequire }],
         close_comment: [{ message: '评论不为空', required: true, validator: validateRequire }]
       },
       tempRoute: {},

+ 11 - 48
src/views/live/list.vue

@@ -1,11 +1,11 @@
 <template>
   <div class="app-container">
-    <div class="filter-container">
-      <el-input v-model="listQuery.name" placeholder="直播间名称" style="width: 200px;" class="filter-item" @keyup.enter.native="handleFilter" />
-      <el-button v-waves class="filter-item" type="primary" icon="el-icon-search" @click="handleFilter">
-        搜索
-      </el-button>
-    </div>
+<!--    <div class="filter-container">-->
+<!--      <el-input v-model="listQuery.name" placeholder="直播间名称" style="width: 200px;" class="filter-item" @keyup.enter.native="handleFilter" />-->
+<!--      <el-button v-waves class="filter-item" type="primary" icon="el-icon-search" @click="handleFilter">-->
+<!--        搜索-->
+<!--      </el-button>-->
+<!--    </div>-->
     <el-table v-loading="listLoading" :data="list" border fit highlight-current-row style="width: 100%">
       <el-table-column align="center" label="ID" width="80">
         <template slot-scope="scope">
@@ -17,41 +17,9 @@
           <span>{{ scope.row.create_time }}</span>
         </template>
       </el-table-column>
-      <el-table-column class-name="status-col" align="center" label="直播间id" width="80px">
+      <el-table-column class-name="status-col" align="center" label="简介">
         <template slot-scope="scope">
-          <span>{{ scope.row.room_id }}</span>
-        </template>
-      </el-table-column>
-      <el-table-column class-name="status-col" label="直播间名称" align="center">
-        <template slot-scope="scope">
-          <span>{{ scope.row.name }}</span>
-        </template>
-      </el-table-column>
-      <el-table-column class-name="status-col" label="开始时间" width="180px" align="center">
-        <template slot-scope="scope">
-          <span>{{ scope.row.start_time }}</span>
-        </template>
-      </el-table-column>
-      <el-table-column class-name="status-col" align="center" label="结束时间" width="180px">
-        <template slot-scope="scope">
-          <span>{{ scope.row.end_time }}</span>
-        </template>
-      </el-table-column>
-      <!--<el-table-column class-name="status-col" label="主播昵称" align="center">
-        <template slot-scope="scope">
-          <span>{{ scope.row.anchor_name }}</span>
-        </template>
-      </el-table-column>-->
-      <!--<el-table-column class-name="status-col" label="直播类型" align="center">
-        <template slot-scope="scope">
-          <span>{{ scope.row.type | typeFilter }}</span>
-        </template>
-      </el-table-column>-->
-      <el-table-column class-name="status-col" label="状态" align="center" width="100px">
-        <template slot-scope="{row}">
-          <el-tag type="success">
-            {{ row | statusFilter }}
-          </el-tag>
+          <span>{{ scope.row.desc }}</span>
         </template>
       </el-table-column>
       <el-table-column align="center" label="Actions" width="350" class-name="small-padding fixed-width">
@@ -62,17 +30,12 @@
                 查看
               </el-button>
             </router-link>
-            <router-link :to="'/live/chatList/'+scope.row.room_id">
-              <el-button type="primary" size="mini" icon="el-icon-edit" style="margin-right: 10px;">
-                查看聊天记录
-              </el-button>
-            </router-link>
             <!--<el-button type="primary" size="mini" icon="el-icon-s-check" :disabled="(scope.row.status === 1 || scope.row.status === 3)" @click="handleUpdate(scope)">
               {{ scope.row.status === 1 || scope.row.status === 3 ? '已处理' : '处理' }}
             </el-button>-->
-            <el-button type="danger" size="mini" icon="el-icon-delete" style="" @click="handleDelete(scope)">
-              删除
-            </el-button>
+<!--            <el-button type="danger" size="mini" icon="el-icon-delete" style="" @click="handleDelete(scope)">-->
+<!--              删除-->
+<!--            </el-button>-->
           </el-row>
         </template>
       </el-table-column>

+ 1 - 1
vue.config.js

@@ -39,7 +39,7 @@ module.exports = {
     before: require('./mock/mock-server.js'),
     proxy: {
       '/api': {
-        target: 'http://llz-tp.com/',
+        target: 'http://llzlovesh.top:8089',
         ws: true,
         changeOrigin: true,
         secure: true