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

Merge branch 'master' of http://git.zhiqiyun.com/liucheng/open-platform-admin-ui

jtoms 3 лет назад
Родитель
Сommit
a7f3f04760

+ 2 - 0
.env.development

@@ -3,3 +3,5 @@ ENV = 'development'
 
 # base api
 VUE_APP_BASE_API = 'http://127.0.0.1:9800'
+
+VUE_UNIFIED_LOGIN_URL = 'http://smartcity-dev.123cx.com/login'

+ 3 - 0
.env.production

@@ -4,3 +4,6 @@ ENV = 'production'
 # base api
 VUE_APP_BASE_API = ''
 
+#unified login url
+VUE_UNIFIED_LOGIN_URL = ''
+

+ 2 - 0
.env.staging

@@ -6,3 +6,5 @@ ENV = 'staging'
 # base api
 VUE_APP_BASE_API = '/stage-api'
 
+#unified login url
+VUE_UNIFIED_LOGIN_URL = ''

+ 1 - 0
package.json

@@ -22,6 +22,7 @@
     "nprogress": "0.2.0",
     "path-to-regexp": "2.4.0",
     "vue": "2.6.10",
+    "vue-cookies": "^1.8.1",
     "vue-count-to": "^1.0.13",
     "vue-router": "3.0.6",
     "vuex": "3.1.0"

+ 3 - 0
src/main.js

@@ -18,6 +18,9 @@ import '@/permission' // permission control
 import PermissionDirective from '@/permission/directive/index.js' // 权限判断指令
 Vue.use(PermissionDirective)
 
+import VueCookies from 'vue-cookies';
+Vue.use(VueCookies)
+
 // set ElementUI lang to EN
 Vue.use(ElementUI, { locale })
 // 如果想要中文版 element-ui,按如下方式声明

+ 21 - 6
src/permission.js

@@ -4,12 +4,15 @@ import { Message } from 'element-ui'
 import NProgress from 'nprogress' // progress bar
 import 'nprogress/nprogress.css' // progress bar style
 import getPageTitle from '@/utils/get-page-title'
+import cookies from 'vue-cookies';
 
 NProgress.configure({ showSpinner: false }) // NProgress Configuration
 
 const whiteList = ['/login', '/api/docs'] // no redirect whitelist
+// const loginUrl = 'development' === process.env.NODE_ENV ? '/login' : 'http://smartcity-dev.123cx.com/login';
+const loginUrl = '/login';
 
-router.beforeEach(async(to, from, next) => {
+router.beforeEach(async (to, from, next) => {
   // start progress bar
   NProgress.start()
 
@@ -18,8 +21,8 @@ router.beforeEach(async(to, from, next) => {
 
   // determine whether the user has logged in
   // const hasToken = getToken()
-  const accessToken = localStorage.getItem('x-access-token') || undefined
-
+  // const accessToken = localStorage.getItem('x-access-token') || undefined
+  const accessToken = cookies.get('saber-access-token') || undefined
   if (accessToken) {
     if (to.path === '/login') {
       // if is logged in, redirect to the home page
@@ -40,7 +43,11 @@ router.beforeEach(async(to, from, next) => {
           // remove token and go to login page to re-login
           await store.dispatch('user/resetToken')
           Message.error(error || 'Has Error')
-          next(`/login?redirect=${to.path}`)
+          // if ('development' === process.env.NODE_ENV) {
+            next(`/login?redirect=${to.path}`)
+          // } else {
+            // window.location.href = loginUrl;
+          // }
           NProgress.done()
         }
       }
@@ -49,10 +56,18 @@ router.beforeEach(async(to, from, next) => {
     /* has no token*/
     if (whiteList.indexOf(to.path) !== -1) {
       // in the free login whitelist, go directly
-      next()
+      // if (to.path === '/login' && 'development' !== process.env.NODE_ENV) {
+        // window.location.href = loginUrl;
+      // } else {
+        next()
+      // }
     } else {
       // other pages that do not have permission to access are redirected to the login page.
-      next(`/login?redirect=${to.path}`)
+      // if ('development' === process.env.NODE_ENV) {
+        next(`/login?redirect=${to.path}`)
+      // } else {
+        // window.location.href = loginUrl;
+      // }
       NProgress.done()
     }
   }

+ 13 - 0
src/store/modules/user.js

@@ -1,5 +1,9 @@
 import { login, getOauthInfo, loginOut } from '@/api/oauth'
 import { resetRouter } from '@/router'
+import cookies from 'vue-cookies';
+
+const domian = 'development' === process.env.NODE_ENV ? '' : '.123cx.com';
+const expires = 60 * 60 * 24 * 7;
 
 const getDefaultState = () => {
   return {
@@ -26,6 +30,11 @@ const actions = {
     return new Promise((resolve, reject) => {
       login({ loginAccount: username.trim(), loginPassword: password, captcha, token }).then(data => {
         localStorage.setItem('x-access-token', data.accessToken || '')
+        sessionStorage.setItem('saber-access-token', data.accessToken);
+        sessionStorage.setItem('saber-refresh-token', data.refreshToken);
+        console.log(domian);
+        cookies.set('saber-access-token', data.accessToken, expires, '/', domian);
+        cookies.set('saber-refresh-token', data.refreshToken, expires, '/', domian)
         resolve()
       }).catch(error => {
         reject(error)
@@ -54,6 +63,10 @@ const actions = {
     return new Promise((resolve, reject) => {
       loginOut().then(() => {
         localStorage.removeItem('x-access-token')
+        sessionStorage.removeItem('saber-access-token');
+        sessionStorage.removeItem('saber-refresh-token');
+        cookies.set('saber-access-token', '', expires, '/', domian);
+        cookies.set('saber-refresh-token', '', expires, '/', domian)
         resetRouter()
         commit('RESET_STATE')
         resolve()

+ 3 - 1
src/utils/request.js

@@ -1,6 +1,7 @@
 import axios from 'axios'
 import { Message } from 'element-ui'
 import router from '@/router'
+import cookies from 'vue-cookies';
 
 // create an axios instance
 const service = axios.create({
@@ -11,7 +12,8 @@ const service = axios.create({
 
 service.interceptors.request.use(
   config => {
-    const accessToken = localStorage.getItem('x-access-token') || ''
+    // const accessToken = localStorage.getItem('x-access-token') || ''
+    const accessToken = cookies.get('saber-access-token') || ''
     if (accessToken) {
       config.headers['x-access-token'] = accessToken
     }

+ 48 - 0
src/views/apidocs/DialogDetail.vue

@@ -0,0 +1,48 @@
+<template>
+  <el-dialog
+    v-if="visible"
+    width="900px"
+    :title="currentDetail.title+'['+currentDetail.method+':'+currentDetail.version+']'"
+    :visible.sync="visible"
+  >
+
+    <el-table
+      :data="currentDetail.listFields"
+      border
+      highlight-current-row
+    >
+      <el-table-column label="参数名" prop="name" width="150"/>
+      <el-table-column label="类型" prop="type" width="100"/>
+      <el-table-column label="必须">
+        <template slot-scope="scope">
+          {{ scope.row.required ? '是' : '否' }}
+        </template>
+      </el-table-column>
+      <el-table-column label="说明" prop="describe"/>
+    </el-table>
+    <div slot="footer" class="dialog-footer">
+      <el-button @click="visible = false">关 闭</el-button>
+    </div>
+  </el-dialog>
+</template>
+
+<script>
+
+export default {
+  data() {
+    return {
+      visible: false,
+      isLoading: false,
+      currentDetail: undefined
+    }
+  },
+  created() {
+  },
+  methods: {
+    open(data) {
+      this.visible = true
+      this.currentDetail = data
+    }
+  }
+}
+</script>

+ 32 - 31
src/views/apidocs/index.vue

@@ -7,9 +7,9 @@
       fit
       highlight-current-row
     >
-      <el-table-column label="标题" prop="title" />
-      <el-table-column label="方法名" prop="method" width="300" />
-      <el-table-column label="版本号" prop="version" width="150" />
+      <el-table-column label="标题" prop="title"/>
+      <el-table-column label="方法名" prop="method" width="300"/>
+      <el-table-column label="版本号" prop="version" width="150"/>
       <el-table-column label="操作" width="70">
         <template slot-scope="scope">
           <el-button type="text" size="small" @click.native="showDetail(scope.row)">详情</el-button>
@@ -17,43 +17,43 @@
       </el-table-column>
     </el-table>
 
-    <el-drawer
-      :title="currentDetail.title+'['+currentDetail.method+':'+currentDetail.version+']'"
-      :visible.sync="showDrawer"
-      direction="ltr"
-    >
-      <el-table
-        v-loading="isLoading"
-        :data="currentDetail.listFields"
-        border
-        fit
-        highlight-current-row
-      >
-        <el-table-column label="参数名" prop="name" width="150" />
-        <el-table-column label="类型" prop="type" width="100" />
-        <el-table-column label="必须">
-          <template slot-scope="scope">
-            {{ scope.row.required ? '是' : '否' }}
-          </template>
-        </el-table-column>
-        <el-table-column label="说明" prop="describe" />
-      </el-table>
-    </el-drawer>
+    <dialog-detail ref="dialogDetail"/>
+    <!--    <el-drawer-->
+    <!--      :title="currentDetail.title+'['+currentDetail.method+':'+currentDetail.version+']'"-->
+    <!--      :visible.sync="showDrawer"-->
+    <!--    >-->
+    <!--      <el-table-->
+    <!--        v-loading="isLoading"-->
+    <!--        :data="currentDetail.listFields"-->
+    <!--        border-->
+    <!--        highlight-current-row-->
+    <!--      >-->
+    <!--        <el-table-column label="参数名" prop="name" width="150" />-->
+    <!--        <el-table-column label="类型" prop="type" width="100" />-->
+    <!--        <el-table-column label="必须">-->
+    <!--          <template slot-scope="scope">-->
+    <!--            {{ scope.row.required ? '是' : '否' }}-->
+    <!--          </template>-->
+    <!--        </el-table-column>-->
+    <!--        <el-table-column label="说明" prop="describe" />-->
+    <!--      </el-table>-->
+    <!--    </el-drawer>-->
   </div>
 </template>
 
 <script>
 import { getApis } from '@/api/docsApis'
+import DialogDetail from '@/views/apidocs/DialogDetail'
 
 export default {
   name: 'Dashboard',
-  components: {},
+  components: { DialogDetail },
   data() {
     return {
       listData: [],
-      isLoading: false,
-      showDrawer: false,
-      currentDetail: {}
+      isLoading: false
+      // showDrawer: false,
+      // currentDetail: {}
     }
   },
   created() {
@@ -66,8 +66,9 @@ export default {
   },
   methods: {
     showDetail(row) {
-      this.showDrawer = true
-      this.currentDetail = row
+      this.$refs.dialogDetail.open(row)
+      // this.showDrawer = true
+      // this.currentDetail = row
     }
   }
 }

+ 1 - 1
src/views/category/organization/index.vue

@@ -42,7 +42,7 @@
       <el-table-column label="公司名称" prop="name" width="200">
         <template slot-scope="scope">
           {{ scope.row.name }}
-          <el-tooltip placement="top">
+          <el-tooltip v-if="scope.row.remark && scope.row.remark!==''" placement="top">
             <div slot="content">{{ scope.row.remark }}</div>
             <i class="el-icon-info" />
           </el-tooltip>

+ 9 - 1
src/views/place/category/DialogForm.vue

@@ -11,7 +11,15 @@
           <el-form-item label="物务类型名称">
             <el-input v-model="form.name" />
           </el-form-item>
-
+          <el-form-item label="展示状态">
+             <el-radio-group v-model="form.isShow">
+              <el-radio :label="0">不展示</el-radio>
+              <el-radio :label="1">展示</el-radio>
+            </el-radio-group>
+          </el-form-item>
+          <el-form-item label="编码">
+            <el-input v-model="form.categoryId"/>
+          </el-form-item>
           <el-form-item label="排序">
             <el-input-number v-model="form.sortNumber" :min="0" />
           </el-form-item>

+ 5 - 0
src/views/place/category/index.vue

@@ -30,6 +30,11 @@
       <el-table-column label="分类名称" prop="name" width="200" />
       <el-table-column label="排序" prop="sortNumber" width="100" />
       <el-table-column label="备注说明" prop="remark" min-width="300" />
+      <el-table-column label="展示状态" prop="isShow" width="100" >
+         <template slot-scope="scope">
+          {{scope.row.isShow === 1 ? '展示' : '不展示'}}
+         </template>
+      </el-table-column>
       <el-table-column label="创建时间" prop="createdTime" :formatter="dateTimeFormatter" width="180" />
       <el-table-column label="操作" width="150" fixed="right">
         <template slot-scope="scope">

+ 30 - 16
src/views/statistics/complaint/index.vue

@@ -3,18 +3,18 @@
 
     <el-form :model="queryForm" inline size="small">
       <el-form-item label="标题">
-        <el-input v-model="queryForm.title" placeholder="标题" />
+        <el-input v-model="queryForm.title" placeholder="标题"/>
       </el-form-item>
       <el-form-item label="投诉类型">
-        <el-input v-model="queryForm.category" placeholder="投诉类型" />
+        <el-input v-model="queryForm.category" placeholder="投诉类型"/>
       </el-form-item>
       <el-form-item label="渠道">
-        <el-input v-model="queryForm.channel" placeholder="渠道" />
+        <el-input v-model="queryForm.channel" placeholder="渠道"/>
       </el-form-item>
       <el-form-item label="处理状态">
         <el-select v-model="queryForm.state" clearable placeholder="处理状态">
-          <el-option label="待处理" value="PENDING" />
-          <el-option label="已处理" value="PROCESSED" />
+          <el-option label="待处理" value="PENDING"/>
+          <el-option label="已处理" value="PROCESSED"/>
         </el-select>
       </el-form-item>
       <el-form-item label="投诉时间">
@@ -57,21 +57,20 @@
       highlight-current-row
       @selection-change="selectionChange"
     >
-      <el-table-column type="selection" width="55" />
-      <el-table-column label="ID" prop="id" width="120" />
-      <el-table-column label="标题" prop="title" />
-      <el-table-column label="类型" prop="category" />
-      <el-table-column label="渠道" prop="channel" />
-      <el-table-column label="内容" prop="content" />
-      <el-table-column label="处理结果" prop="state.text" />
-      <el-table-column label="投诉时间" prop="createdTime" :formatter="dateTimeFormatter" />
-      <el-table-column label="处理时间" prop="processedTime" :formatter="dateTimeFormatter" />
+      <el-table-column type="selection" width="55"/>
+      <el-table-column label="ID" prop="id" width="120"/>
+      <el-table-column label="类型" prop="type" :formatter="typeFormatter" />
+      <el-table-column label="事发地点" prop="location"/>
+      <el-table-column label="内容" prop="context"/>
+      <!--      <el-table-column label="处理结果" prop="state.text" />-->
+      <el-table-column label="投诉时间" prop="complaintDate" :formatter="dateTimeFormatter"/>
+      <el-table-column label="处理时间" prop="acceptanceTime" :formatter="dateTimeFormatter"/>
       <el-table-column label="操作" width="70" fixed="right">
 
         <template slot-scope="scope">
           <el-dropdown>
             <el-button type="text">
-              操作<i class="el-icon-arrow-down el-icon--right" />
+              操作<i class="el-icon-arrow-down el-icon--right"/>
             </el-button>
             <el-dropdown-menu slot="dropdown">
               <el-dropdown-item v-permission="['complaint.edit']" type="text" @click.native="$refs.dialogForm.open(scope.row)">编辑</el-dropdown-item>
@@ -89,7 +88,7 @@
       :page-size="pageData.pageSize"
       @current-change="paginationChange"
     />
-    <dialog-form ref="dialogForm" @ok="fetchData" />
+    <dialog-form ref="dialogForm" @ok="fetchData"/>
   </div>
 </template>
 
@@ -118,6 +117,21 @@ export default {
   },
   methods: {
     dateTimeFormatter,
+    typeFormatter(row, column, cellValue) {
+      if (cellValue == 3) {
+        return '投诉'
+      }
+      if (cellValue == 4) {
+        return '建议'
+      }
+      if (cellValue == 5) {
+        return '举报'
+      }
+      if (cellValue == 6) {
+        return '咨询'
+      }
+      return '-'
+    },
     deleteByIds(ids) {
       this.$confirm('确认要删除吗?', '提示', {
         confirmButtonText: '确定',