huwhois 5 年 前
コミット
1e5621d494

+ 2 - 0
src/main.js

@ -22,6 +22,8 @@ if (process.env.NODE_ENV !== 'production') {
22 22
// 挂载全局
23 23
Vue.prototype.$http = httpRequest // ajax请求方法
24 24
Vue.prototype.isAuth = isAuth     // 权限方法
25
Vue.prototype.meetingMenu = false     // 会议目录
26
Vue.prototype.meetingMenuId = 0     // 会议目录
25 27
26 28
// 保存整站vuex本地储存初始状态
27 29
window.SITE_CONFIG['storeState'] = cloneDeep(store.state)

+ 73 - 9
src/router/index.js

@ -36,8 +36,7 @@ const mainRoutes = {
36 36
    { path: '/home', component: _import('common/home'), name: 'home', meta: { title: '首页' } },
37 37
    { path: '/theme', component: _import('common/theme'), name: 'theme', meta: { title: '主题' } },
38 38
    { path: '/demo-echarts', component: _import('demo/echarts'), name: 'demo-echarts', meta: { title: 'demo-echarts', isTab: true } },
39
    { path: '/demo-ueditor', component: _import('demo/ueditor'), name: 'demo-ueditor', meta: { title: 'demo-ueditor', isTab: true } },
40
    { path: '/home2', component: _import('modules/admin/home2'), name: 'home2', meta: { title: '企业平台首页' } }
39
    { path: '/demo-ueditor', component: _import('demo/ueditor'), name: 'demo-ueditor', meta: { title: 'demo-ueditor', isTab: true } }
41 40
  ],
42 41
  beforeEnter (to, from, next) {
43 42
    let token = Vue.cookie.get('token')
@ -64,12 +63,14 @@ router.beforeEach((to, from, next) => {
64 63
    next()
65 64
  } else {
66 65
    http({
67
      url: http.adornUrl('/sys/menu/nav'),
66
      // url: http.adornUrl('/sys/menu/nav'),
67
      url: http.adornUrl('/admin/adminmenu/nav'),
68 68
      method: 'get',
69 69
      params: http.adornParams()
70 70
    }).then(({data}) => {
71 71
      if (data && data.code === 0) {
72
        fnAddDynamicMenuRoutes(data.menuList)
72
        // fnAddDynamicMenuRoutes(data.menuList)
73
        fnAddDynamicMenuRoutesMy(data.menuList)
73 74
        router.options.isAddDynamicMenuRoutes = true
74 75
        sessionStorage.setItem('menuList', JSON.stringify(data.menuList || '[]'))
75 76
        sessionStorage.setItem('permissions', JSON.stringify(data.permissions || '[]'))
@ -107,7 +108,62 @@ function fnCurrentRouteType (route, globalRoutes = []) {
107 108
 * @param {*} menuList 菜单列表
108 109
 * @param {*} routes 递归创建的动态(菜单)路由
109 110
 */
110
function fnAddDynamicMenuRoutes (menuList = [], routes = []) {
111
// function fnAddDynamicMenuRoutes (menuList = [], routes = []) {
112
//   var temp = []
113
//   for (var i = 0; i < menuList.length; i++) {
114
//     if (menuList[i].list && menuList[i].list.length >= 1) {
115
//       temp = temp.concat(menuList[i].list)
116
//     } else if (menuList[i].url && /\S/.test(menuList[i].url)) {
117
//       menuList[i].url = menuList[i].url.replace(/^\//, '')
118
//       var route = {
119
//         path: menuList[i].url.replace('/', '-'),
120
//         component: null,
121
//         name: menuList[i].url.replace('/', '-'),
122
//         meta: {
123
//           menuId: menuList[i].menuId,
124
//           title: menuList[i].name,
125
//           isDynamic: true,
126
//           isTab: true,
127
//           iframeUrl: ''
128
//         }
129
//       }
130
//       // url以http[s]://开头, 通过iframe展示
131
//       if (isURL(menuList[i].url)) {
132
//         route['path'] = `i-${menuList[i].menuId}`
133
//         route['name'] = `i-${menuList[i].menuId}`
134
//         route['meta']['iframeUrl'] = menuList[i].url
135
//       } else {
136
//         try {
137
//           route['component'] = _import(`modules/${menuList[i].url}`) || null
138
//         } catch (e) {}
139
//       }
140
141
//       routes.push(route)
142
//     }
143
//   }
144
//   if (temp.length >= 1) {
145
//     fnAddDynamicMenuRoutes(temp, routes)
146
//   } else {
147
//     mainRoutes.name = 'main-dynamic'
148
//     mainRoutes.children = routes
149
//     router.addRoutes([
150
//       mainRoutes,
151
//       { path: '*', redirect: { name: '404' } }
152
//     ])
153
//     sessionStorage.setItem('dynamicMenuRoutes', JSON.stringify(mainRoutes.children || '[]'))
154
//     console.log('\n')
155
//     console.log('%c!<-------------------- 动态(菜单)路由 s -------------------->', 'color:blue')
156
//     console.log(mainRoutes.children)
157
//     console.log('%c!<-------------------- 动态(菜单)路由 e -------------------->', 'color:blue')
158
//   }
159
// }
160
161
/**
162
 * 2020-03-11 修改动态路由
163
 * @param {*} menuList 菜单列表
164
 * @param {*} routes 递归创建的动态(菜单)路由
165
 */
166
function fnAddDynamicMenuRoutesMy (menuList = [], routes = []) {
111 167
  var temp = []
112 168
  for (var i = 0; i < menuList.length; i++) {
113 169
    if (menuList[i].list && menuList[i].list.length >= 1) {
@ -115,14 +171,14 @@ function fnAddDynamicMenuRoutes (menuList = [], routes = []) {
115 171
    } else if (menuList[i].url && /\S/.test(menuList[i].url)) {
116 172
      menuList[i].url = menuList[i].url.replace(/^\//, '')
117 173
      var route = {
118
        path: menuList[i].url.replace('/', '-'),
174
        path: addMeetingId(menuList[i].url.replace('/', '-'), menuList[i].parentId),
119 175
        component: null,
120
        name: menuList[i].url.replace('/', '-'),
176
        name: addMeetingId(menuList[i].url.replace('/', '-'), menuList[i].parentId),
121 177
        meta: {
122 178
          menuId: menuList[i].menuId,
123 179
          title: menuList[i].name,
124 180
          isDynamic: true,
125
          isTab: true,
181
          isTab: menuList[i].isTab,
126 182
          iframeUrl: ''
127 183
        }
128 184
      }
@ -141,7 +197,7 @@ function fnAddDynamicMenuRoutes (menuList = [], routes = []) {
141 197
    }
142 198
  }
143 199
  if (temp.length >= 1) {
144
    fnAddDynamicMenuRoutes(temp, routes)
200
    fnAddDynamicMenuRoutesMy(temp, routes)
145 201
  } else {
146 202
    mainRoutes.name = 'main-dynamic'
147 203
    mainRoutes.children = routes
@ -157,4 +213,12 @@ function fnAddDynamicMenuRoutes (menuList = [], routes = []) {
157 213
  }
158 214
}
159 215
216
function addMeetingId (url, parentId) {
217
  // console.log(url)
218
  if (parentId === 76) {
219
    url += '/:id'
220
  }
221
  return url
222
}
223
160 224
export default router

+ 201 - 32
src/views/common/home.vue

@ -1,39 +1,208 @@
1
<style>
2
ul li {
3
  list-style-type: none
4
}
5
</style>
1 6
<template>
2
  <div class="mod-home">
3
    <h3>项目介绍</h3>
4
    <ul>
5
      <li>renren-fast-vue基于vue、element-ui构建开发,实现<a href="https://gitee.com/renrenio/renren-fast" target="_blank">renren-fast</a>后台管理前端功能,提供一套更优的前端解决方案</li>
6
      <li>前后端分离,通过token进行数据交互,可独立部署</li>
7
      <li>主题定制,通过scss变量统一一站式定制</li>
8
      <li>动态菜单,通过菜单管理统一管理访问路由</li>
9
      <li>数据切换,通过mock配置对接口数据/mock模拟数据进行切换</li>
10
      <li>发布时,可动态配置CDN静态资源/切换新旧版本</li>
11
      <li>演示地址:<a href="http://demo.open.renren.io/renren-fast" target="_blank">http://demo.open.renren.io/renren-fast</a> (账号密码:admin/admin)</li>
12
    </ul>
13
    <h3>获取帮助</h3>
14
    <ul>
15
      <li>官方社区:<a href="https://www.renren.io/community" target="_blank">https://www.renren.io/community</a></li>
16
      <li>前端Git地址:<a href="https://github.com/renrenio/renren-fast-vue" target="_blank">https://github.com/renrenio/renren-fast-vue</a></li>
17
      <li>后台Git地址:<a href="https://gitee.com/renrenio/renren-fast" target="_blank">https://gitee.com/renrenio/renren-fast</a></li>
18
      <li>代码生成器:<a href="https://gitee.com/renrenio/renren-generator" target="_blank">https://gitee.com/renrenio/renren-generator</a></li>
19
      <li>如需关注项目最新动态,请Watch、Star项目,同时也是对项目最好的支持</li>
20
     </ul>
21
    <h3>官方QQ群</h3>
22
    <ul>
23
      <li>高级群:324780204(大牛云集,跟大牛学习新技能)</li>
24
      <li>普通群:145799952(学习交流,互相解答各种疑问)</li>
25
    </ul>
7
  <div class="mod-config">
8
    <el-row>
9
      <el-col :span="24">
10
        <div class="grid-content bg-purple-dark">
11
          <h2>未发布中的会议</h2>
12
        </div>
13
      </el-col>
14
    </el-row>
15
    <el-row>
16
      <el-col :span="6">
17
        <div class="grid-content bg-purple-light">
18
          <el-button
19
            v-if="isAuth('admin:meeting:save')"
20
            type="primary"
21
            @click="addOrUpdateHandle()"
22
          >+ 创建新会议</el-button>
23
        </div>
24
      </el-col>
25
       <ul>
26
        <template v-for="item in dataList">
27
          <li :key="item.id" v-if="!item.isCheck" @click="routerTo(item.id)">
28
              <el-col :span="6">
29
                <div class="grid-content bg-purple-dark">
30
                  <img src="/static/img/huiyiim.jpg" alt="会议图片" />
31
                  <h3>{{item.nameCn}}</h3>
32
                  <div>
33
                    <span>{{item.address}}</span>
34
                    <span>{{item.startTime}}</span>
35
                  </div>
36
                </div>
37
              </el-col>
38
          </li>
39
        </template>
40
      </ul>
41
    </el-row>
42
    <el-row>
43
      <el-col :span="24">
44
        <div class="grid-content bg-purple-dark">
45
          <h2>发布中的会议</h2>
46
        </div>
47
      </el-col>
48
    </el-row>
49
    <el-row>
50
      <ul>
51
        <template v-for="item in dataList">
52
          <li :key="item.id" v-if="item.isCheck == 1" @click="routerTo(item.id)">
53
              <el-col :span="6">
54
                <div class="grid-content bg-purple-dark">
55
                  <img src="/static/img/huiyiim.jpg" alt="会议图片" />
56
                  <h3>{{item.nameCn}}</h3>
57
                  <div>
58
                    <span>{{item.address}}</span>
59
                    <span>{{item.startTime}}</span>
60
                  </div>
61
                </div>
62
              </el-col>
63
          </li>
64
        </template>
65
      </ul>
66
    </el-row>
67
    <el-row>
68
      <el-col :span="24">
69
        <div class="grid-content bg-purple-dark">
70
          <h2>已结束的会议</h2>
71
        </div>
72
      </el-col>
73
    </el-row>
74
    <el-row>
75
      <ul>
76
        <template v-for="item in dataList">
77
          <li :key="item.id" v-if="item.isCheck == 2" @click="routerTo(item.id)">
78
              <el-col :span="6">
79
                <div class="grid-content bg-purple-dark">
80
                  <img src="/static/img/huiyiim.jpg" alt="会议图片" />
81
                  <h3>{{item.nameCn}}</h3>
82
                  <div>
83
                    <span>{{item.address}}</span>
84
                    <span>{{item.startTime}}</span>
85
                  </div>
86
                </div>
87
              </el-col>
88
          </li>
89
        </template>
90
      </ul>
91
    </el-row>
92
93
    <!-- 弹窗, 新增 / 修改 -->
94
    <add-or-update v-if="addOrUpdateVisible" ref="addOrUpdate" @refreshDataList="getDataList"></add-or-update>
26 95
  </div>
27 96
</template>
28 97
29 98
<script>
30
  export default {
99
import AddOrUpdate from '../modules/admin/meeting-add-or-update'
100
export default {
101
  data () {
102
    return {
103
      dataForm: {
104
        key: ''
105
      },
106
      dataList: [],
107
      pageIndex: 1,
108
      pageSize: 10,
109
      totalPage: 0,
110
      dataListLoading: false,
111
      dataListSelections: [],
112
      addOrUpdateVisible: false
113
    }
114
  },
115
  components: {
116
    AddOrUpdate
117
  },
118
  activated () {
119
    this.meetingMenuId = 0
120
    this.getDataList()
121
  },
122
  methods: {
123
    routerTo (mid) {
124
      this.$router.push({ name: 'admin-meeting/:id', params: { id: mid } })
125
    },
126
    // 获取数据列表
127
    getDataList () {
128
      this.dataListLoading = true
129
      this.$http({
130
        url: this.$http.adornUrl('/admin/meeting/list'),
131
        method: 'get',
132
        params: this.$http.adornParams({
133
          page: this.pageIndex,
134
          limit: this.pageSize,
135
          key: this.dataForm.key
136
        })
137
      }).then(({ data }) => {
138
        if (data && data.code === 0) {
139
          this.dataList = data.page.list
140
          this.totalPage = data.page.totalCount
141
        } else {
142
          this.dataList = []
143
          this.totalPage = 0
144
        }
145
        this.dataListLoading = false
146
      })
147
    },
148
    // 每页数
149
    sizeChangeHandle (val) {
150
      this.pageSize = val
151
      this.pageIndex = 1
152
      this.getDataList()
153
    },
154
    // 当前页
155
    currentChangeHandle (val) {
156
      this.pageIndex = val
157
      this.getDataList()
158
    },
159
    // 多选
160
    selectionChangeHandle (val) {
161
      this.dataListSelections = val
162
    },
163
    // 新增 / 修改
164
    addOrUpdateHandle (id) {
165
      this.addOrUpdateVisible = true
166
      this.$nextTick(() => {
167
        this.$refs.addOrUpdate.init(id)
168
      })
169
    },
170
    // 删除
171
    deleteHandle (id) {
172
      var ids = id
173
        ? [id]
174
        : this.dataListSelections.map(item => {
175
          return item.id
176
        })
177
      this.$confirm(
178
        `确定对[id=${ids.join(',')}]进行[${id ? '删除' : '批量删除'}]操作?`,
179
        '提示',
180
        {
181
          confirmButtonText: '确定',
182
          cancelButtonText: '取消',
183
          type: 'warning'
184
        }
185
      ).then(() => {
186
        this.$http({
187
          url: this.$http.adornUrl('/admin/meeting/delete'),
188
          method: 'post',
189
          data: this.$http.adornData(ids, false)
190
        }).then(({ data }) => {
191
          if (data && data.code === 0) {
192
            this.$message({
193
              message: '操作成功',
194
              type: 'success',
195
              duration: 1500,
196
              onClose: () => {
197
                this.getDataList()
198
              }
199
            })
200
          } else {
201
            this.$message.error(data.msg)
202
          }
203
        })
204
      })
205
    }
31 206
  }
207
}
32 208
</script>
33
34
<style>
35
  .mod-home {
36
    line-height: 1.5;
37
  }
38
</style>
39

+ 23 - 6
src/views/main-sidebar-sub-menu.vue

@ -7,12 +7,15 @@
7 7
      <icon-svg :name="menu.icon || ''" class="site-sidebar__menu-icon"></icon-svg>
8 8
      <span>{{ menu.name }}</span>
9 9
    </template>
10
    <sub-menu
11
      v-for="item in menu.list" 
12
      :key="item.menuId"
13
      :menu="item"
14
      :dynamicMenuRoutes="dynamicMenuRoutes">
10
    <template v-for="item in menu.list">
11
      <sub-menu
12
        :key="item.menuId"
13
        :menu="item"
14
        :dynamicMenuRoutes="dynamicMenuRoutes"
15
        v-if="item.me!=0 || meetingId!=0"  
16
      >
15 17
    </sub-menu>
18
    </template>
16 19
  </el-submenu>
17 20
  <el-menu-item v-else :index="menu.menuId + ''" @click="gotoRouteHandle(menu)">
18 21
    <icon-svg :name="menu.icon || ''" class="site-sidebar__menu-icon"></icon-svg>
@ -23,6 +26,11 @@
23 26
<script>
24 27
  import SubMenu from './main-sidebar-sub-menu'
25 28
  export default {
29
    data () {
30
      return {
31
        meetingId: 0
32
      }
33
    },
26 34
    name: 'sub-menu',
27 35
    props: {
28 36
      menu: {
@ -42,12 +50,21 @@
42 50
        get () { return this.$store.state.common.sidebarLayoutSkin }
43 51
      }
44 52
    },
53
    watch: {
54
      '$route' (to, from) {
55
        // 对路由变化作出响应...
56
        // console.log(this.$route.params)
57
        this.meetingId = this.$route.params.hasOwnProperty('id') ? this.$route.params.id :0
58
        console.log(this.meetingId)
59
      }
60
    },
45 61
    methods: {
46 62
      // 通过menuId与动态(菜单)路由进行匹配跳转至指定路由
47 63
      gotoRouteHandle (menu) {
48 64
        var route = this.dynamicMenuRoutes.filter(item => item.meta.menuId === menu.menuId)
65
        let mid = this.$route.params.hasOwnProperty('id') ? this.$route.params.id : 0
49 66
        if (route.length >= 1) {
50
          this.$router.push({ name: route[0].name })
67
          this.$router.push({ name: route[0].name, params: { id: mid } })
51 68
        }
52 69
      }
53 70
    }

+ 0 - 4
src/views/main-sidebar.vue

@ -24,10 +24,6 @@
24 24
            <span slot="title">ueditor</span>
25 25
          </el-menu-item>
26 26
        </el-submenu>
27
         <el-menu-item index="home2" @click="$router.push({ name: 'home2' })">
28
          <icon-svg name="shouye" class="site-sidebar__menu-icon"></icon-svg>
29
          <span slot="title">企业平台首页</span>
30
        </el-menu-item>
31 27
        <sub-menu
32 28
          v-for="menu in menuList"
33 29
          :key="menu.menuId"

+ 0 - 17
src/views/modules/admin/home2.vue

@ -1,17 +0,0 @@
1
<template>
2
  <div class="mod-home">
3
    <h2>欢迎登录【企业名称】登录会议管理系统V1.0</h2>
4
  </div>
5
</template>
6
7
<script>
8
  export default {
9
  }
10
</script>
11
12
<style>
13
  .mod-home {
14
    line-height: 2;
15
  }
16
</style>
17

+ 210 - 0
src/views/modules/admin/meeting-info.vue

@ -0,0 +1,210 @@
1
<style>
2
ul li {
3
  list-style-type: none
4
}
5
</style>
6
<template>
7
  <div class="mod-config">
8
    <el-row>
9
      <el-col :span="24">
10
        <div class="grid-content bg-purple-dark">
11
          <h2>未发布中的会议</h2>
12
        </div>
13
      </el-col>
14
    </el-row>
15
    <el-row>
16
      <el-col :span="6">
17
        <div class="grid-content bg-purple-light">
18
          <el-button
19
            v-if="isAuth('admin:meeting:save')"
20
            type="primary"
21
            @click="addOrUpdateHandle()"
22
          >+ 创建新会议</el-button>
23
        </div>
24
      </el-col>
25
      <ul>
26
        <template v-for="item in dataList">
27
          <li :key="item.id" v-if="!item.isCheck">
28
            <router-link to="/">
29
              <el-col :span="6">
30
                <div class="grid-content bg-purple-dark">
31
                  <img src="/static/img/huiyiim.jpg" alt="会议图片" />
32
                  <h3>{{item.nameCn}}</h3>
33
                  <div>
34
                    <span>{{item.address}}</span>
35
                    <span>{{item.startTime}}</span>
36
                  </div>
37
                </div>
38
              </el-col>
39
            </router-link>
40
          </li>
41
        </template>
42
      </ul>
43
    </el-row>
44
    <el-row>
45
      <el-col :span="24">
46
        <div class="grid-content bg-purple-dark">
47
          <h2>发布中的会议</h2>
48
        </div>
49
      </el-col>
50
    </el-row>
51
    <el-row>
52
      <ul>
53
        <template v-for="item in dataList">
54
          <li :key="item.id" v-if="!item.isCheck == 1">
55
            <router-link to="/">
56
              <el-col :span="6">
57
                <div class="grid-content bg-purple-dark">
58
                  <img src="/static/img/huiyiim.jpg" alt="会议图片" />
59
                  <h3>{{item.nameCn}}</h3>
60
                  <div>
61
                    <span>{{item.address}}</span>
62
                    <span>{{item.startTime}}</span>
63
                  </div>
64
                </div>
65
              </el-col>
66
            </router-link>
67
          </li>
68
        </template>
69
      </ul>
70
    </el-row>
71
    <el-row>
72
      <el-col :span="24">
73
        <div class="grid-content bg-purple-dark">
74
          <h2>已结束的会议</h2>
75
        </div>
76
      </el-col>
77
    </el-row>
78
    <el-row>
79
      <ul>
80
        <template v-for="item in dataList">
81
          <li :key="item.id" v-if="!item.isCheck == 2">
82
            <router-link to="/">
83
              <el-col :span="6">
84
                <div class="grid-content bg-purple-dark">
85
                  <img src="/static/img/huiyiim.jpg" alt="会议图片" />
86
                  <h3>{{item.nameCn}}</h3>
87
                  <div>
88
                    <span>{{item.address}}</span>
89
                    <span>{{item.startTime}}</span>
90
                  </div>
91
                </div>
92
              </el-col>
93
            </router-link>
94
          </li>
95
        </template>
96
      </ul>
97
    </el-row>
98
99
    <!-- 弹窗, 新增 / 修改 -->
100
    <add-or-update v-if="addOrUpdateVisible" ref="addOrUpdate" @refreshDataList="getDataList"></add-or-update>
101
  </div>
102
</template>
103
104
<script>
105
import AddOrUpdate from './meeting-add-or-update'
106
export default {
107
  data () {
108
    return {
109
      dataForm: {
110
        key: ''
111
      },
112
      dataList: [],
113
      pageIndex: 1,
114
      pageSize: 10,
115
      totalPage: 0,
116
      dataListLoading: false,
117
      dataListSelections: [],
118
      addOrUpdateVisible: false
119
    }
120
  },
121
  components: {
122
    AddOrUpdate
123
  },
124
  activated () {
125
    this.getDataList()
126
  },
127
  methods: {
128
    // 获取数据列表
129
    getDataList () {
130
      this.dataListLoading = true
131
      this.$http({
132
        url: this.$http.adornUrl('/admin/meeting/list'),
133
        method: 'get',
134
        params: this.$http.adornParams({
135
          page: this.pageIndex,
136
          limit: this.pageSize,
137
          key: this.dataForm.key
138
        })
139
      }).then(({ data }) => {
140
        if (data && data.code === 0) {
141
          this.dataList = data.page.list
142
          this.totalPage = data.page.totalCount
143
        } else {
144
          this.dataList = []
145
          this.totalPage = 0
146
        }
147
        this.dataListLoading = false
148
      })
149
    },
150
    // 每页数
151
    sizeChangeHandle (val) {
152
      this.pageSize = val
153
      this.pageIndex = 1
154
      this.getDataList()
155
    },
156
    // 当前页
157
    currentChangeHandle (val) {
158
      this.pageIndex = val
159
      this.getDataList()
160
    },
161
    // 多选
162
    selectionChangeHandle (val) {
163
      this.dataListSelections = val
164
    },
165
    // 新增 / 修改
166
    addOrUpdateHandle (id) {
167
      this.addOrUpdateVisible = true
168
      this.$nextTick(() => {
169
        this.$refs.addOrUpdate.init(id)
170
      })
171
    },
172
    // 删除
173
    deleteHandle (id) {
174
      var ids = id
175
        ? [id]
176
        : this.dataListSelections.map(item => {
177
          return item.id
178
        })
179
      this.$confirm(
180
        `确定对[id=${ids.join(',')}]进行[${id ? '删除' : '批量删除'}]操作?`,
181
        '提示',
182
        {
183
          confirmButtonText: '确定',
184
          cancelButtonText: '取消',
185
          type: 'warning'
186
        }
187
      ).then(() => {
188
        this.$http({
189
          url: this.$http.adornUrl('/admin/meeting/delete'),
190
          method: 'post',
191
          data: this.$http.adornData(ids, false)
192
        }).then(({ data }) => {
193
          if (data && data.code === 0) {
194
            this.$message({
195
              message: '操作成功',
196
              type: 'success',
197
              duration: 1500,
198
              onClose: () => {
199
                this.getDataList()
200
              }
201
            })
202
          } else {
203
            this.$message.error(data.msg)
204
          }
205
        })
206
      })
207
    }
208
  }
209
}
210
</script>

+ 0 - 179
src/views/modules/admin/meeting2.vue

@ -1,179 +0,0 @@
1
<style>
2
ul li {
3
  list-style-type:none;
4
}
5
</style>
6
<template>
7
  <div class="mod-config">
8
    <el-row>
9
      <el-col :span="24">
10
        <div class="grid-content bg-purple-dark">
11
          <h2>未发布中的会议</h2>
12
        </div>
13
        </el-col>
14
    </el-row>
15
    <el-row>
16
      <el-col :span="6">
17
        <div class="grid-content bg-purple-light">
18
          <el-button v-if="isAuth('admin:meeting:save')" type="primary" @click="addOrUpdateHandle()">+ 创建新会议</el-button>
19
        </div>
20
      </el-col>
21
      <ul>
22
        <li v-for="item in dataList" :key="item.id"  v-if="!item.isCheck">
23
          <el-col :span="6">
24
            <div class="grid-content bg-purple-dark">
25
              <img src="/static/img/huiyiim.jpg" alt="会议图片">
26
              <h3>{{item.nameCn}}</h3>
27
              <div><span>{{item.address}}</span><span>{{item.startTime}}</span></div>
28
            </div>
29
          </el-col>
30
        </li>
31
      </ul>
32
    </el-row>
33
    <el-row>
34
      <el-col :span="24">
35
        <div class="grid-content bg-purple-dark">
36
          <h2>发布中的会议</h2>
37
        </div>
38
        </el-col>
39
    </el-row>
40
    <el-row>
41
      <ul>
42
        <li v-for="item in dataList" :key="item.id"  v-if="item.isCheck == 1">
43
      <el-col :span="6">
44
        <div class="grid-content bg-purple-dark">
45
          <img src="/static/img/huiyiim.jpg" alt="会议图片">
46
            <h3>{{item.nameCn}}</h3>
47
            <div><span>{{item.address}}</span><span>{{item.startTime}}</span></div>
48
          </div>
49
        </el-col>
50
        </li>
51
      </ul>
52
    </el-row>
53
    <el-row>
54
      <el-col :span="24">
55
        <div class="grid-content bg-purple-dark">
56
          <h2>已结束的会议</h2>
57
        </div>
58
        </el-col>
59
    </el-row>
60
    <el-row>
61
      <ul>
62
        <li v-for="item in dataList" :key="item.id"  v-if="item.isCheck == 2">
63
          <el-col :span="6">
64
            <div class="grid-content bg-purple-dark">
65
              <img src="/static/img/huiyiim.jpg" alt="会议图片">
66
              <h3>{{item.nameCn}}</h3>
67
              <div><span>{{item.address}}</span><span>{{item.startTime}}</span></div>
68
            </div>
69
            </el-col>
70
          </li>
71
      </ul>
72
    </el-row>
73
74
    <!-- 弹窗, 新增 / 修改 -->
75
    <add-or-update v-if="addOrUpdateVisible" ref="addOrUpdate" @refreshDataList="getDataList"></add-or-update>
76
  </div>
77
</template>
78
79
<script>
80
  import AddOrUpdate from './meeting-add-or-update'
81
  export default {
82
    data () {
83
      return {
84
        dataForm: {
85
          key: ''
86
        },
87
        dataList: [],
88
        pageIndex: 1,
89
        pageSize: 10,
90
        totalPage: 0,
91
        dataListLoading: false,
92
        dataListSelections: [],
93
        addOrUpdateVisible: false
94
      }
95
    },
96
    components: {
97
      AddOrUpdate
98
    },
99
    activated () {
100
      this.getDataList()
101
    },
102
    methods: {
103
      // 获取数据列表
104
      getDataList () {
105
        this.dataListLoading = true
106
        this.$http({
107
          url: this.$http.adornUrl('/admin/meeting/list'),
108
          method: 'get',
109
          params: this.$http.adornParams({
110
            'page': this.pageIndex,
111
            'limit': this.pageSize,
112
            'key': this.dataForm.key
113
          })
114
        }).then(({data}) => {
115
          if (data && data.code === 0) {
116
            this.dataList = data.page.list
117
            this.totalPage = data.page.totalCount
118
          } else {
119
            this.dataList = []
120
            this.totalPage = 0
121
          }
122
          this.dataListLoading = false
123
        })
124
      },
125
      // 每页数
126
      sizeChangeHandle (val) {
127
        this.pageSize = val
128
        this.pageIndex = 1
129
        this.getDataList()
130
      },
131
      // 当前页
132
      currentChangeHandle (val) {
133
        this.pageIndex = val
134
        this.getDataList()
135
      },
136
      // 多选
137
      selectionChangeHandle (val) {
138
        this.dataListSelections = val
139
      },
140
      // 新增 / 修改
141
      addOrUpdateHandle (id) {
142
        this.addOrUpdateVisible = true
143
        this.$nextTick(() => {
144
          this.$refs.addOrUpdate.init(id)
145
        })
146
      },
147
      // 删除
148
      deleteHandle (id) {
149
        var ids = id ? [id] : this.dataListSelections.map(item => {
150
          return item.id
151
        })
152
        this.$confirm(`确定对[id=${ids.join(',')}]进行[${id ? '删除' : '批量删除'}]操作?`, '提示', {
153
          confirmButtonText: '确定',
154
          cancelButtonText: '取消',
155
          type: 'warning'
156
        }).then(() => {
157
          this.$http({
158
            url: this.$http.adornUrl('/admin/meeting/delete'),
159
            method: 'post',
160
            data: this.$http.adornData(ids, false)
161
          }).then(({data}) => {
162
            if (data && data.code === 0) {
163
              this.$message({
164
                message: '操作成功',
165
                type: 'success',
166
                duration: 1500,
167
                onClose: () => {
168
                  this.getDataList()
169
                }
170
              })
171
            } else {
172
              this.$message.error(data.msg)
173
            }
174
          })
175
        })
176
      }
177
    }
178
  }
179
</script>

+ 141 - 0
src/views/modules/sys/filemanager.vue

@ -0,0 +1,141 @@
1
<template>
2
  <div class="mod-oss">
3
    <el-form :inline="true" :model="dataForm">
4
      <el-form-item>
5
        <el-button type="primary" @click="uploadHandle()">上传文件</el-button>
6
      </el-form-item>
7
    </el-form>
8
    
9
    <el-table
10
      :data="dataList"
11
      border
12
      v-loading="dataListLoading"
13
      style="width: 100%;">
14
      <el-table-column
15
        prop="fileName"
16
        header-align="center"
17
        align="center"
18
        width="200"
19
        label="文件(目录)名">
20
        <template slot-scope="scope">
21
          <el-button type="text" size="small" @click="activeFileHandle(scope.row.fileName, scope.row.suffix)">{{scope.row.fileName}}</el-button>
22
        </template>
23
      </el-table-column>
24
      <el-table-column
25
        prop="size"
26
        header-align="center"
27
        align="center"
28
        label="大小">
29
      </el-table-column>
30
      <el-table-column
31
        prop="modifyTime"
32
        header-align="center"
33
        align="center"
34
        width="180"
35
        label="最后修改时间">
36
      </el-table-column>
37
      <el-table-column
38
        fixed="right"
39
        header-align="center"
40
        align="center"
41
        width="150"
42
        label="操作">
43
        <template slot-scope="scope">
44
          <el-button type="text" size="small" @click="deleteHandle(scope.row.id)">删除</el-button>
45
        </template>
46
      </el-table-column>
47
    </el-table>
48
    <!-- 弹窗, 上传文件 -->
49
    <upload v-if="uploadVisible" ref="upload" @refreshDataList="getDataList"></upload>
50
  </div>
51
</template>
52
53
<script>
54
  import Upload from './upload-img'
55
  import Filemanager from './filemanager'
56
  export default {
57
    data () {
58
      return {
59
        activepath: '',
60
        dataForm: {},
61
        dataList: [],
62
        dataListLoading: false,
63
        uploadVisible: false
64
      }
65
    },
66
    components: {
67
      Upload,
68
      Filemanager
69
    },
70
    activated () {
71
      this.getDataList()
72
    },
73
    methods: {
74
      // 获取数据列表
75
      getDataList () {
76
        this.dataListLoading = true
77
        this.$http({
78
          url: this.$http.adornUrl('/sys/filemanager/list'),
79
          method: 'get',
80
          params: this.$http.adornParams({
81
            'activepath': this.activepath
82
          })
83
        }).then(({data}) => {
84
          if (data && data.code === 0) {
85
            // console.log(data.resultList)
86
            this.dataList = data.resultList
87
            this.activepath = data.activepath
88
          } else {
89
            this.dataList = []
90
          }
91
          this.dataListLoading = false
92
        })
93
      },
94
      activeFileHandle (fileName, suffix) {
95
        // console.log(suffix)
96
        // console.log(fileName)
97
        this.activepath += '/' + fileName
98
        if (suffix === '' || suffix === null) {
99
          this.getDataList()
100
        }
101
      },
102
      // 上传文件
103
      uploadHandle () {
104
        this.uploadVisible = true
105
        this.$nextTick(() => {
106
          this.$refs.upload.init()
107
        })
108
      },
109
      // 删除
110
      deleteHandle (id) {
111
        var ids = id ? [id] : this.dataListSelections.map(item => {
112
          return item.id
113
        })
114
        this.$confirm(`确定对[id=${ids.join(',')}]进行[${id ? '删除' : '批量删除'}]操作?`, '提示', {
115
          confirmButtonText: '确定',
116
          cancelButtonText: '取消',
117
          type: 'warning'
118
        }).then(() => {
119
          this.$http({
120
            url: this.$http.adornUrl('/sys/oss/delete'),
121
            method: 'post',
122
            data: this.$http.adornData(ids, false)
123
          }).then(({data}) => {
124
            if (data && data.code === 0) {
125
              this.$message({
126
                message: '操作成功',
127
                type: 'success',
128
                duration: 1500,
129
                onClose: () => {
130
                  this.getDataList()
131
                }
132
              })
133
            } else {
134
              this.$message.error(data.msg)
135
            }
136
          })
137
        }).catch(() => {})
138
      }
139
    }
140
  }
141
</script>

+ 73 - 0
src/views/modules/sys/upload-img.vue

@ -0,0 +1,73 @@
1
<template>
2
  <el-dialog
3
    title="上传文件"
4
    :close-on-click-modal="false"
5
    @close="closeHandle"
6
    :visible.sync="visible">
7
    <el-upload
8
      :action="url"
9
      ref="upload"
10
      :before-upload="beforeUploadHandle"
11
      :on-success="successHandle"
12
      name="upload_file"
13
      :auto-upload="false"
14
      :data="thumb"
15
      style="text-align: center;">
16
      <i class="el-icon-upload"></i>
17
       <el-button slot="trigger" size="small" type="primary">选取文件</el-button>
18
      <div class="el-upload__tip" slot="tip">只支持jpg、png、gif格式的图片!只能上传jpg/png文件,且不超过2M</div>
19
      <el-radio v-model="radio" label="1">是</el-radio>
20
      <el-radio v-model="radio" label="0" >否</el-radio>
21
      <el-button style="margin-left: 10px;" size="small" type="success" @click="submitUpload">上传到服务器</el-button>
22
    </el-upload>
23
  </el-dialog>
24
</template>
25
26
<script>
27
  export default {
28
    data () {
29
      return {
30
        visible: false,
31
        url: '',
32
        radio: '0',
33
        thumb: {'isthumb': 0}
34
      }
35
    },
36
    methods: {
37
      init (id) {
38
        this.url = this.$http.adornUrl(`/sys/filemanager/uploadimg?token=${this.$cookie.get('token')}`)
39
        this.visible = true
40
      },
41
      submitUpload () {
42
        this.$refs.upload.submit()
43
      },
44
      // 上传之前
45
      beforeUploadHandle (file) {
46
        this.thumb.isthumb = this.radio
47
        if (file.type !== 'image/jpg' && file.type !== 'image/jpeg' && file.type !== 'image/png' && file.type !== 'image/gif') {
48
          this.$message.error('只支持jpg、png、gif格式的图片!')
49
          return false
50
        }
51
      },
52
      // 上传成功
53
      successHandle (response) {
54
        console.log(response)
55
        if (response && response.code === 0) {
56
          this.$confirm('操作成功, 是否继续操作?', '提示', {
57
            confirmButtonText: '确定',
58
            cancelButtonText: '取消',
59
            type: 'warning'
60
          }).catch(() => {
61
            this.visible = false
62
          })
63
        } else {
64
          this.$message.error(response.msg)
65
        }
66
      },
67
      // 弹窗关闭时
68
      closeHandle () {
69
        this.$emit('refreshDataList')
70
      }
71
    }
72
  }
73
</script>

+ 1 - 1
static/config/index.js

@ -5,7 +5,7 @@
5 5
  window.SITE_CONFIG = {};
6 6
7 7
  // api接口请求地址
8
  window.SITE_CONFIG['baseUrl'] = 'http://152.136.140.176:8002/renren-fast';
8
  window.SITE_CONFIG['baseUrl'] = 'http://121.42.53.174:8002/renren-fast';
9 9
10 10
  // cdn地址 = 域名 + 版本号
11 11
  window.SITE_CONFIG['domain']  = './'; // 域名