提交 da310661 编写于 作者: guangjun.yang's avatar guangjun.yang

客服IM工具

上级 c133db47
无法预览此类型文件
无法预览此类型文件
...@@ -4,7 +4,6 @@ import VueRouter from 'vue-router' ...@@ -4,7 +4,6 @@ import VueRouter from 'vue-router'
import routes from './router/router' import routes from './router/router'
import store from './store/' import store from './store/'
const mixins = require('@/utils/mixins'); const mixins = require('@/utils/mixins');
import FastClick from 'fastclick'
import vueFilters from '@/utils/filter' import vueFilters from '@/utils/filter'
// 引入ElementUI // 引入ElementUI
...@@ -13,7 +12,6 @@ import 'element-ui/lib/theme-chalk/index.css'; ...@@ -13,7 +12,6 @@ import 'element-ui/lib/theme-chalk/index.css';
// 可调试 // 可调试
// Vue.config.devtools = true; // Vue.config.devtools = true;
// Vue.use(Logger, { prefix: new Date(), isDev: process.env.NODE_ENV === 'development', cLevel: 'debug' })
Vue.use(ElementUI) Vue.use(ElementUI)
...@@ -22,11 +20,6 @@ for(let key in vueFilters) { ...@@ -22,11 +20,6 @@ for(let key in vueFilters) {
Vue.filter(key, vueFilters[key]) Vue.filter(key, vueFilters[key])
} }
if ('addEventListener' in document) {
document.addEventListener('DOMContentLoaded', function() {
FastClick.attach(document.body);
}, false);
}
Vue.use(VueRouter) Vue.use(VueRouter)
const router = new VueRouter({ const router = new VueRouter({
......
/**
* G-Logger
* version 1.0.0
* Author: Anndy Yang(Guang Jun)
* description: 模拟log4j的日志插件(Vue插件,同时支持浏览器环境)
*
* log4j提供了4种日志级别和2个日志开关。
官方网址: http://logging.apache.org/log4j/1.2/
DEBUG:输出调试信息;指出细粒度信息事件对调试应用程序是非常有帮助的。
INFO: 输出提示信息;消息在粗粒度级别上突出强调应用程序的运行过程。
WARN: 输出警告信息;表明会出现潜在错误的情形。
ERROR:输出错误信息;指出虽然发生错误事件,但仍然不影响系统的继续运行。
FATAL: 输出致命错误;指出每个严重的错误事件将会导致应用程序的退出。
ALL level:打开所有日志记录开关;是最低等级的,用于打开所有日志记录。
OFF level:关闭所有日志记录开关;是最高等级的,用于关闭所有日志记录。
按照范围从小到大排序:OFF level > FATAL > ERROR > WARN > INFO > DEBUG > ALL level;范围大的会包含范围小的。
例如日志设置为INFO级别,则FATAL、ERROR、WARN、INFO的日志开关都是打开的,而DEBUG的日志开关将是关闭的。
Log4j建议只使用四个级别,优先级从高到低分别是 ERROR、WARN、INFO、DEBUG。
*/
const gLogger = {}
gLogger.install = function (Vue, options) {
if (gLogger.installed) return
let logger = {
isDev: true,
cLevel: 'debug',
prefix: 'gLogger Says'
// levels: ['off', 'fatal', 'error', 'warn', 'info', 'debug', 'all']
}
if (options) {
for (const key of Object.keys(options)) {
logger[key] = options[key]
}
}
logger.levels = ['off', 'fatal', 'error', 'warn', 'info', 'debug', 'all']
for (const level of logger.levels) {
logger[level] = function () {
if (!this.isDev || typeof console === 'undefined') return
let levelIndex = logger.levels.indexOf(level)
// 如果是OFF级别,则不输出日志
if (levelIndex === 0) return
let cLevelIndex = logger.levels.indexOf(logger.cLevel)
// 如果当前级别底,则不输出日志
if(cLevelIndex < levelIndex) return
let args = Array.from(arguments)
args.unshift(`[${this.prefix} :: ${level}]`.toUpperCase())
console.log(...args)
}
}
Vue.prototype.$log = logger
if (window) window.logger = logger
}
export default gLogger
\ No newline at end of file
此差异已折叠。
...@@ -3,7 +3,6 @@ import App from '../App' ...@@ -3,7 +3,6 @@ import App from '../App'
const home = r => require.ensure([], () => r(require('../views/home')), 'home') const home = r => require.ensure([], () => r(require('../views/home')), 'home')
const blank = r => require.ensure([], () => r(require('../views/blank')), 'blank') const blank = r => require.ensure([], () => r(require('../views/blank')), 'blank')
const discuss = r => require.ensure([], () => r(require('../views/discuss/index.vue')), 'index') const discuss = r => require.ensure([], () => r(require('../views/discuss/index.vue')), 'index')
const creatDiscuss = r => require.ensure([], () => r(require('../views/discuss/add-edit.vue')), 'creatDiscuss') const creatDiscuss = r => require.ensure([], () => r(require('../views/discuss/add-edit.vue')), 'creatDiscuss')
const questionNaire = r => require.ensure([], () => r(require('../views/question-naire/question-list.vue')), 'questionNaire') const questionNaire = r => require.ensure([], () => r(require('../views/question-naire/question-list.vue')), 'questionNaire')
...@@ -11,7 +10,11 @@ const questionNaire = r => require.ensure([], () => r(require('../views/question ...@@ -11,7 +10,11 @@ const questionNaire = r => require.ensure([], () => r(require('../views/question
const topicList = r => require.ensure([], () => r(require('../views/topicManage/index.vue')), 'topicList') const topicList = r => require.ensure([], () => r(require('../views/topicManage/index.vue')), 'topicList')
const reportSet = r => require.ensure([], () => r(require('../views/report/reportSet.vue')), 'reportSet') const reportSet = r => require.ensure([], () => r(require('../views/report/reportSet.vue')), 'reportSet')
const waitingSessionList = r => require.ensure([], () => r(require('../views/IM/waiting-session/list.vue')), 'waitingSessionList')
const waitingSessionEdit = r => require.ensure([], () => r(require('../views/IM/waiting-session/edit.vue')), 'waitingSessionEdit')
const searchMessageList = r => require.ensure([], () => r(require('../views/IM/search-message/list.vue')), 'waitingSessionList')
const searchMessageDetail = r => require.ensure([], () => r(require('../views/IM/search-message/detail.vue')), 'waitingSessionEdit')
export default [{ export default [{
path: '/', path: '/',
...@@ -20,10 +23,22 @@ export default [{ ...@@ -20,10 +23,22 @@ export default [{
{ {
path: '', path: '',
redirect: '/home' redirect: '/home'
},{ }, {
path: '/waiting-session-list',
component: waitingSessionList
}, {
path: '/waiting-session-edit',
component: waitingSessionEdit
}, {
path: '/search-message-list',
component: searchMessageList
}, {
path: '/search-message-detail',
component: searchMessageDetail
}, {
path: '/questionNaire', path: '/questionNaire',
component: questionNaire component: questionNaire
},{ }, {
path: '/home', path: '/home',
component: home component: home
}, },
......
...@@ -120,3 +120,7 @@ ...@@ -120,3 +120,7 @@
border-color: #ecedf1; border-color: #ecedf1;
border-radius: 2px; border-radius: 2px;
} }
.el-button--text > span{
font-weight: 700;
color: #449284 !important;
}
...@@ -3,13 +3,13 @@ ...@@ -3,13 +3,13 @@
*/ */
export const envConfig = { export const envConfig = {
development: { development: {
// baseUrl: 'https://dev-sc.yunqueyi.com/', baseUrl: 'https://dev-sc.yunqueyi.com/',
// // baseUrl: 'http://10.177.15.180:10202/', // // baseUrl: 'http://10.177.15.180:10202/',
// // baseUrl: 'http://192.168.140.14:10201/', // // baseUrl: 'http://192.168.140.14:10201/',
// baseUrl: 'https://test1-sc.yunqueyi.com/', // baseUrl: 'https://test1-sc.yunqueyi.com/',
//baseUrl: 'https://uat-sc.yunqueyi.com/', //baseUrl: 'https://uat-sc.yunqueyi.com/',
baseUrl: 'https://uat-sc.yunqueyi.com', // baseUrl: 'https://uat-sc.yunqueyi.com',
qiniuFileUrl: "https://dev-sc.yunqueyi.com/contents/admin/qiniu/token1", qiniuFileUrl: "https://dev-sc.yunqueyi.com/contents/admin/qiniu/token1",
qiniuResourceUrl: "https://test1-videos.yunqueyi.com", qiniuResourceUrl: "https://test1-videos.yunqueyi.com",
......
...@@ -24,7 +24,6 @@ service.interceptors.request.use(config => { ...@@ -24,7 +24,6 @@ service.interceptors.request.use(config => {
// } // }
return config return config
}, error => { }, error => {
// logger.debug('service.interceptors.request: ', error)
Promise.reject(error) Promise.reject(error)
}) })
...@@ -43,8 +42,6 @@ service.interceptors.response.use( ...@@ -43,8 +42,6 @@ service.interceptors.response.use(
//} //}
}, },
error => { error => {
// logger.error('err' + error)
return Promise.reject(error) return Promise.reject(error)
} }
) )
......
...@@ -47,7 +47,7 @@ export function resizeHeight(cMinusHeight = 152, iMinuxHeight = 210, refHeightId ...@@ -47,7 +47,7 @@ export function resizeHeight(cMinusHeight = 152, iMinuxHeight = 210, refHeightId
containerHeightId = 'appContainerId', innerHeightId = 'elTableId'){ containerHeightId = 'appContainerId', innerHeightId = 'elTableId'){
if (!p_getElm(refHeightId) || !p_getElm(containerHeightId) || !p_getElm(innerHeightId)) { if (!p_getElm(refHeightId) || !p_getElm(containerHeightId) || !p_getElm(innerHeightId)) {
// window.onresize = null // window.onresize = null
logger.warn('No certain dom id!!!'); console.warn('No certain dom id!!!');
} }
let containerHeight = p_getElm(refHeightId).getBoundingClientRect().height - 50 let containerHeight = p_getElm(refHeightId).getBoundingClientRect().height - 50
p_getElm(containerHeightId).style.height = containerHeight - cMinusHeight + 'px' p_getElm(containerHeightId).style.height = containerHeight - cMinusHeight + 'px'
......
此差异已折叠。
<template>
<div class="message-list-wrap">
<bread-crumb :curmbFirst="curmbFirst" :curmbSecond="curmbSecond"></bread-crumb>
<div class="component-content screenSet" id="screenSet">
<!-- <div class="search-title">查询条件</div> -->
<el-row :gutter="30" class="row" type="flex" style="margin-top: 10px;">
<el-form ref="serchForm" inline :model="searchParam" label-width="15px" style="width:100%;text-align:right;">
<el-form-item label="">
<el-input clearable v-model="searchParam.theme" size="mini" placeholder="请输入用户电话" ><el-button slot="append" icon="el-icon-search"></el-button></el-input>
</el-form-item>
<el-form-item label="">
<el-input clearable v-model="searchParam.name" size="mini" placeholder="请输入用户名称" ><el-button slot="append" icon="el-icon-search"></el-button></el-input>
</el-form-item>
<el-form-item label="">
<el-input clearable v-model="searchParam.name" size="mini" placeholder="请输入客服名" ><el-button slot="append" icon="el-icon-search"></el-button></el-input>
</el-form-item>
<el-form-item label="" style="margin-bottom: 10px;">
<el-date-picker v-model="searchParam.name" size="mini" type="date" placeholder="请选择日期"></el-date-picker>
</el-form-item>
</el-form>
</el-row>
<el-table :data="tableData" style="width: 100%" v-loading="loading">
<el-table-column prop="id" label="用户名" min-width="50" align="center"></el-table-column>
<el-table-column prop="subject" label="对话次数" min-width="100" align="center"></el-table-column>
<el-table-column prop="category" label="用户类型" min-width="50" align="center"></el-table-column>
<el-table-column prop="remark" label="认证状况" min-width="100" align="center"></el-table-column>
<el-table-column prop="createdusername" label="所属机构" min-width="50" align="center"></el-table-column>
<el-table-column prop="modifiedUsername" label="备注信息" min-width="100" align="center"></el-table-column>
<el-table-column label="操作" fixed="right" align="center" min-width="100">
<template slot-scope="scope">
<el-button type="text" size="small" @click="edit(scope.row)">查看详细</el-button>
</template>
</el-table-column>
<div slot="empty">
<div class="table-empty">
<img src="@/assets/image/no-content1.png" />
<p>没有查询到相关结果</p>
</div>
</div>
</el-table>
<!-- 分页 -->
<div class="pagination">
<el-pagination
background
@size-change="handleSizeChange"
@current-change="handleCurrentChange"
:current-page="searchParam.pageNo"
:page-sizes="[15, 30, 50, 100, 200, 500, 700, 1000, 1500, 2000]"
:page-size="searchParam.pageSize"
layout="total, sizes, prev, pager, next, jumper"
:total="totalRows"
></el-pagination>
</div>
</div>
</div>
</template>
<script>
import BreadCrumb from "@/components/breadcrumb.vue";
import { doUpload, getFilePath } from "@/utils/qiniu-util";
import { validateWord } from "@/utils/validate.js";
import { openLoading, closeLoading } from "@/utils/utils";
import * as commonUtil from "@/utils/utils";
let vm = null;
export default {
components: {
BreadCrumb
},
data() {
return {
curmbFirst: "客服IM",
curmbSecond: "消息查询",
searchParam: {
theme: "",
type: "",
name: "",
status: "",
pageNo: 1,
pageSize: 15
},
category: [],
categoryStatus: "",
statuSelect: [
{
label: "未发布",
value: "1"
},
{
label: "已发布",
value: "2"
},
{
label: "已下架",
value: "3"
}
],
tableData: [],
totalRows: 0,
loading: false,
nextSessionId: ""
};
},
computed: {},
filters: {
filteFun(index) {
let str = "";
if (index == 1) {
str = "未发布";
} else if (index == 2) {
str = "已发布";
} else if (index == 3) {
str = "已下线";
}
return str;
}
},
created() {
this.getData();
setTimeout(() => {
this.getData();
}, 10000);
},
// 挂载到Dom完成时
mounted: function() {
commonUtil.resizeHeight();
},
methods: {
// 列表查询
search() {
this.getData();
},
// 获取数据
getData() {
let subject = 0,
status = 0,
name = 0;
this.loading = true;
let cStatus = this.categoryStatus ? this.categoryStatus : "0"; //'0'表示默认查所有的
let url =
"/interaction/discuss/" +
cStatus +
"/" +
subject +
"/" +
name +
"/" +
status +
"/" +
this.searchParam.pageNo +
"/" +
this.searchParam.pageSize;
this.GET(url).then(res => {
this.loading = false;
if (res.code == "000000") {
console.log(res.data);
this.tableData = res.data.resp.discuss || [];
this.nextSessionId = this.tableData[0] && this.tableData[0].id;
console.log("this.nextSessionId", this.nextSessionId);
this.totalRows = res.data.resp.count;
if (res.data.typeList && res.data.typeList.length) {
let arr = [];
for (let i = 0; i < res.data.typeList.length; i++) {
let obj = {};
obj.label = res.data.typeList[i];
obj.value = res.data.typeList[i];
arr.push(obj);
}
this.category = arr;
}
}
});
},
// 查看消息详情
edit() {
this.$router.push({
path: `/current-session-list?nextSessionId=${this.nextSessionId}`
});
},
handleSizeChange(value) {
this.searchParam.pageSize = value;
this.getData();
},
handleCurrentChange(value) {
this.searchParam.pageNo = value;
this.getData();
}
}
};
</script>
<style lang="scss" scoped>
.message-list-wrap {
.component-content {
padding: 10px;
background: #fff;
// margin: 84px 20px 20px;
.search-title {
display: flex;
flex-direction: row;
align-items: center;
justify-content: space-between;
padding: 10px 12px;
font-size: 12px;
margin-bottom: 20px;
border-bottom: 1px solid #efefef;
.num {
color: #449284;
}
}
.create-button {
padding: 0 0 15px;
margin-top: 0 !important;
text-align: right;
}
.table-empty {
img {
width: 100px;
}
p {
margin-top: -50px;
}
}
}
}
</style>
\ No newline at end of file
此差异已折叠。
此差异已折叠。
<template>
<div class="wts-list-wrap">
<bread-crumb :curmbFirst="curmbFirst" :curmbSecond="curmbSecond"></bread-crumb>
<div class="component-content screenSet" id="screenSet">
<div class="search-title">
<p>当前共有<span class="num">5位</span>用户正在等待</p>
<el-button type="primary" size="small" @click="getNextSession()">给我一个任务吧</el-button>
</div>
<el-table :data="tableData" style="width: 100%" v-loading="loading">
<el-table-column prop="id" label="用户名" min-width="50" align="center"></el-table-column>
<el-table-column prop="subject" label="等待时间" min-width="100" align="center"></el-table-column>
<el-table-column prop="category" label="用户类型" min-width="50" align="center"></el-table-column>
<el-table-column prop="remark" label="认证状况" min-width="100" align="center"></el-table-column>
<el-table-column prop="createdusername" label="所属机构" min-width="50" align="center"></el-table-column>
<el-table-column prop="modifiedUsername" label="备注信息" min-width="100" align="center"></el-table-column>
<div slot="empty">
<div class="table-empty">
<img src="@/assets/image/no-content1.png" />
<p>没有查询到相关结果</p>
</div>
</div>
</el-table>
<!-- 分页 -->
<div class="pagination">
<el-pagination
background
@size-change="handleSizeChange"
@current-change="handleCurrentChange"
:current-page="searchParam.pageNo"
:page-sizes="[15, 30, 50, 100, 200, 500, 700, 1000, 1500, 2000]"
:page-size="searchParam.pageSize"
layout="total, sizes, prev, pager, next, jumper"
:total="totalRows"
></el-pagination>
</div>
</div>
</div>
</template>
<script>
import BreadCrumb from "@/components/breadcrumb.vue";
import { doUpload, getFilePath } from "@/utils/qiniu-util";
import { validateWord } from "@/utils/validate.js";
import { openLoading, closeLoading } from "@/utils/utils";
import * as commonUtil from "@/utils/utils";
let vm = null;
export default {
components: {
BreadCrumb
},
data() {
return {
curmbFirst: "组件",
curmbSecond: "讨论组件",
searchParam: {
theme: "",
type: "",
name: "",
status: "",
pageNo: 1,
pageSize: 15
},
category: [],
categoryStatus: "",
statuSelect: [
{
label: "未发布",
value: "1"
},
{
label: "已发布",
value: "2"
},
{
label: "已下架",
value: "3"
}
],
tableData: [],
totalRows: 0,
loading: false,
nextSessionId: '',
};
},
computed: {
},
filters: {
filteFun(index) {
let str = "";
if (index == 1) {
str = "未发布";
} else if (index == 2) {
str = "已发布";
} else if (index == 3) {
str = "已下线";
}
return str;
}
},
created() {
this.getData();
},
// 挂载到Dom完成时
mounted: function() {
commonUtil.resizeHeight();
},
methods: {
// 列表查询
search() {
this.getData();
},
// 获取数据
getData() {
let subject = 0,
status = 0,
name = 0;
if (this.searchParam.theme != "") {
subject = this.searchParam.theme;
}
if (this.searchParam.status != "") {
status = this.searchParam.status;
}
if (this.searchParam.name != "") {
name = this.searchParam.name;
}
console.log(this.categoryStatus);
this.loading = true;
let cStatus = this.categoryStatus ? this.categoryStatus : "0"; //'0'表示默认查所有的
let url =
"/interaction/discuss/" +
cStatus +
"/" +
subject +
"/" +
name +
"/" +
status +
"/" +
this.searchParam.pageNo +
"/" +
this.searchParam.pageSize;
this.GET(url).then(res => {
this.loading = false;
if (res.code == "000000") {
console.log(res.data);
this.tableData = res.data.resp.discuss || [];
this.nextSessionId = this.tableData[0] && this.tableData[0].id;
console.log('this.nextSessionId', this.nextSessionId);
this.totalRows = res.data.resp.count;
if (res.data.typeList && res.data.typeList.length) {
let arr = [];
for (let i = 0; i < res.data.typeList.length; i++) {
let obj = {};
obj.label = res.data.typeList[i];
obj.value = res.data.typeList[i];
arr.push(obj);
}
this.category = arr;
}
}
});
},
// 给我一个任务吧
getNextSession() {
this.$router.push({ path: `/current-session-list?nextSessionId=${this.nextSessionId}` });
},
handleSizeChange(value) {
this.searchParam.pageSize = value;
this.getData();
},
handleCurrentChange(value) {
this.searchParam.pageNo = value;
this.getData();
}
}
};
</script>
<style lang="scss" scoped>
.wts-list-wrap {
.component-content {
padding: 10px;
background: #fff;
// margin: 84px 20px 20px;
.search-title {
display: flex;
flex-direction: row;
align-items: center;
justify-content: space-between;
padding: 10px 12px;
font-size: 12px;
margin-bottom: 20px;
border-bottom: 1px solid #efefef;
.num {
color: #449284;
}
}
.create-button {
padding: 0 0 15px;
margin-top: 0 !important;
text-align: right;
}
.table-empty {
img {
width: 100px;
}
p {
margin-top: -50px;
}
}
}
}
</style>
\ No newline at end of file
<template>
<div class="wts-list-wrap">
<bread-crumb :curmbFirst="curmbFirst" :curmbSecond="curmbSecond"></bread-crumb>
<div class="component-content screenSet" id="screenSet">
<div class="search-title">
<p>当前共有<span class="num">{{tableData.length}}</span>用户正在等待</p>
<el-button type="primary" size="small" @click="getNextSession()">给我一个任务吧</el-button>
</div>
<el-table :data="tableData" style="width: 100%" v-loading="loading">
<el-table-column prop="id" label="用户名" min-width="50" align="center"></el-table-column>
<el-table-column prop="subject" label="等待时间" min-width="100" align="center"></el-table-column>
<el-table-column prop="category" label="用户类型" min-width="50" align="center"></el-table-column>
<el-table-column prop="remark" label="认证状况" min-width="100" align="center"></el-table-column>
<el-table-column prop="createdusername" label="所属机构" min-width="50" align="center"></el-table-column>
<el-table-column prop="modifiedUsername" label="备注信息" min-width="100" align="center"></el-table-column>
<div slot="empty">
<div class="table-empty">
<img src="@/assets/image/no-content1.png" />
<p>没有查询到相关结果</p>
</div>
</div>
</el-table>
</div>
</div>
</template>
<script>
import BreadCrumb from "@/components/breadcrumb.vue";
import { doUpload, getFilePath } from "@/utils/qiniu-util";
import { validateWord } from "@/utils/validate.js";
import { openLoading, closeLoading } from "@/utils/utils";
import * as commonUtil from "@/utils/utils";
let vm = null;
export default {
components: {
BreadCrumb
},
data() {
return {
curmbFirst: "客服IM",
curmbSecond: "等待会话",
searchParam: {
theme: "",
type: "",
name: "",
status: "",
pageNo: 1,
pageSize: 15
},
category: [],
categoryStatus: "",
statuSelect: [
{
label: "未发布",
value: "1"
},
{
label: "已发布",
value: "2"
},
{
label: "已下架",
value: "3"
}
],
tableData: [],
totalRows: 0,
loading: false,
nextSessionId: '',
};
},
computed: {
},
filters: {
filteFun(index) {
let str = "";
if (index == 1) {
str = "未发布";
} else if (index == 2) {
str = "已发布";
} else if (index == 3) {
str = "已下线";
}
return str;
}
},
created() {
this.getData();
setTimeout(() => {
this.getData();
}, 10000);
},
// 挂载到Dom完成时
mounted: function() {
commonUtil.resizeHeight();
},
methods: {
// 列表查询
search() {
this.getData();
},
// 获取数据
getData() {
let subject = 0,
status = 0,
name = 0;
this.loading = true;
let cStatus = this.categoryStatus ? this.categoryStatus : "0"; //'0'表示默认查所有的
let url =
"/interaction/discuss/"
+
cStatus +
"/" +
subject +
"/" +
name +
"/" +
status +
"/" +
this.searchParam.pageNo +
"/" +
this.searchParam.pageSize;
this.GET(url).then(res => {
this.loading = false;
if (res.code == "000000") {
console.log(res.data);
this.tableData = res.data.resp.discuss || [];
this.nextSessionId = this.tableData[0] && this.tableData[0].id;
console.log('this.nextSessionId', this.nextSessionId);
this.totalRows = res.data.resp.count;
if (res.data.typeList && res.data.typeList.length) {
let arr = [];
for (let i = 0; i < res.data.typeList.length; i++) {
let obj = {};
obj.label = res.data.typeList[i];
obj.value = res.data.typeList[i];
arr.push(obj);
}
this.category = arr;
}
}
});
},
// 给我一个任务吧,如果当前没有任务,则
getNextSession() {
this.$router.push({ path: `/current-session-list?nextSessionId=${this.nextSessionId}` });
},
}
};
</script>
<style lang="scss" scoped>
.wts-list-wrap {
.component-content {
padding: 10px;
background: #fff;
// margin: 84px 20px 20px;
.search-title {
display: flex;
flex-direction: row;
align-items: center;
justify-content: space-between;
padding: 10px 12px;
font-size: 12px;
margin-bottom: 20px;
border-bottom: 1px solid #efefef;
.num {
color: #449284;
}
}
.create-button {
padding: 0 0 15px;
margin-top: 0 !important;
text-align: right;
}
.table-empty {
img {
width: 100px;
}
p {
margin-top: -50px;
}
}
}
}
</style>
\ No newline at end of file
此差异已折叠。
...@@ -2,16 +2,16 @@ ...@@ -2,16 +2,16 @@
<div class="footer-wrap"> <div class="footer-wrap">
<span>Copyright© 2019 云鹊医疗科技 (上海) 有限公司</span> <span>Copyright© 2019 云鹊医疗科技 (上海) 有限公司</span>
<span>沪ICP:16018581号-1</span> <span>沪ICP:16018581号-1</span>
<span><img src="../../assets/image/footer-icon.png"/>京ICP备:14044861号</span> <span>
<img src="../../assets/image/footer-icon.png" />京ICP备:14044861号
</span>
</div> </div>
</template> </template>
<script> <script>
export default { export default {};
}
</script> </script>
<style lang="scss"> <style lang="scss">
.footer-wrap { .footer-wrap {
text-align: center; text-align: center;
height: 75px; height: 75px;
line-height: 75px; line-height: 75px;
...@@ -24,7 +24,7 @@ export default { ...@@ -24,7 +24,7 @@ export default {
width: 12px; width: 12px;
padding-right: 5px; padding-right: 5px;
} }
} }
</style> </style>
...@@ -7,8 +7,9 @@ ...@@ -7,8 +7,9 @@
<div class="user-info"> <div class="user-info">
<el-dropdown trigger="click" @command="handleCommand"> <el-dropdown trigger="click" @command="handleCommand">
<div class="el-dropdown-link"> <div class="el-dropdown-link">
<img class="user-logo" src="../../assets/image/mm.jpg"> <img class="user-logo" src="../../assets/image/mm.jpg" />
<span id="headName">{{userName}}</span><i class="el-icon-caret-bottom"></i> <span id="headName">{{userName}}</span>
<i class="el-icon-caret-bottom"></i>
</div> </div>
<el-dropdown-menu slot="dropdown"> <el-dropdown-menu slot="dropdown">
<el-dropdown-item command="logout">退出</el-dropdown-item> <el-dropdown-item command="logout">退出</el-dropdown-item>
...@@ -19,7 +20,8 @@ ...@@ -19,7 +20,8 @@
<div class="user-info"> <div class="user-info">
<el-dropdown trigger="click"> <el-dropdown trigger="click">
<span class="el-dropdown-link"> <span class="el-dropdown-link">
{{'系统切换'}}<i class="el-icon-arrow-down el-icon--right"></i> {{'系统切换'}}
<i class="el-icon-arrow-down el-icon--right"></i>
</span> </span>
<el-dropdown-menu slot="dropdown" class="nav-dropdown"> <el-dropdown-menu slot="dropdown" class="nav-dropdown">
<el-dropdown-item v-for="item in authList" :key="item.id"> <el-dropdown-item v-for="item in authList" :key="item.id">
...@@ -31,15 +33,19 @@ ...@@ -31,15 +33,19 @@
</div> </div>
</template> </template>
<script> <script>
import { getLoginUrl,getInnerLoginUrl, getYunQueYiUrl } from '../../utils/index.js' import {
import { logout, base64encode } from '../../utils/utils.js' getLoginUrl,
import { mapGetters } from 'vuex' getInnerLoginUrl,
let vm = null getYunQueYiUrl
} from "../../utils/index.js";
import { logout, base64encode } from "../../utils/utils.js";
import { mapGetters } from "vuex";
let vm = null;
export default { export default {
props: { props: {
userName: { userName: {
type: String, type: String,
default: '' default: ""
}, },
authList: { authList: {
type: Array type: Array
...@@ -47,31 +53,28 @@ export default { ...@@ -47,31 +53,28 @@ export default {
}, },
data() { data() {
return { return {
name: '' name: ""
} };
},
computed: {
}, },
computed: {},
watch: { watch: {
authList(newVal, oldVal){ authList(newVal, oldVal) {}
}
}, },
created() { created() {
vm = this vm = this;
}, },
methods: { methods: {
handleCommand(command) { handleCommand(command) {
if (command === 'logout') { if (command === "logout") {
let req = { let req = {
token: localStorage.getItem('storageToken') token: localStorage.getItem("storageToken")
} };
vm.POST('/contents/login/log_out',req).then((res) => { vm.POST("/contents/login/log_out", req).then(res => {
sessionStorage.removeItem('DISCUSS_CENTER_NAVS') sessionStorage.removeItem("DISCUSS_CENTER_NAVS");
localStorage.removeItem('storageToken') localStorage.removeItem("storageToken");
window.location.href = getInnerLoginUrl() window.location.href = getInnerLoginUrl();
//logout() //logout()
}) });
} }
}, },
forward(obj) { forward(obj) {
...@@ -82,8 +85,9 @@ export default { ...@@ -82,8 +85,9 @@ export default {
let req = { let req = {
system_type: obj.id system_type: obj.id
}; };
vm.POST('/contents/login/forward_page', req).then(function (data) { vm.POST("/contents/login/forward_page", req).then(
let forwardData = JSON.parse(JSON.stringify(data.data));//通过这个实现深拷贝 function(data) {
let forwardData = JSON.parse(JSON.stringify(data.data)); //通过这个实现深拷贝
let url = forwardData.picapMenuModels[0].url; let url = forwardData.picapMenuModels[0].url;
if (url.length > 1) { if (url.length > 1) {
// window.location.href = url; // window.location.href = url;
...@@ -92,18 +96,29 @@ export default { ...@@ -92,18 +96,29 @@ export default {
if (url.length > 1) { if (url.length > 1) {
// window.location.href = url; // window.location.href = url;
} else { } else {
url = forwardData.picapMenuModels[0].picapSecondMenus[0].picapThirdMenus[0].url; url =
} forwardData.picapMenuModels[0].picapSecondMenus[0]
} .picapThirdMenus[0].url;
let param = "token=" + localStorage.getItem("storageToken") + "&ssoOrigin=" + localStorage.getItem("ssoOrigin") + "&system_type=" + obj.id; }
window.location.href = obj.domainName + url + "?" + base64encode(param); }
}, function (error) { let param =
"token=" +
localStorage.getItem("storageToken") +
"&ssoOrigin=" +
localStorage.getItem("ssoOrigin") +
"&system_type=" +
obj.id;
window.location.href =
obj.domainName + url + "?" + base64encode(param);
},
function(error) {
errorResponseCheck(error, self); errorResponseCheck(error, self);
});
} }
);
} }
} }
} }
};
</script> </script>
<style lang="scss"> <style lang="scss">
.header-container { .header-container {
...@@ -123,8 +138,8 @@ export default { ...@@ -123,8 +138,8 @@ export default {
width: 255px; width: 255px;
text-align: center; text-align: center;
color: #fff; color: #fff;
background: #0B2F3F; background: #0b2f3f;
img{ img {
width: 24px; width: 24px;
float: left; float: left;
margin-left: 24px; margin-left: 24px;
...@@ -157,7 +172,10 @@ export default { ...@@ -157,7 +172,10 @@ export default {
height: 30px; height: 30px;
border-radius: 50%; border-radius: 50%;
} }
.el-icon--right, #headName,.line, #login-out{ .el-icon--right,
#headName,
.line,
#login-out {
font-size: 14px; font-size: 14px;
} }
.line { .line {
...@@ -173,8 +191,8 @@ export default { ...@@ -173,8 +191,8 @@ export default {
.el-dropdown-menu { .el-dropdown-menu {
top: 37px !important; top: 37px !important;
} }
.nav-dropdown{ .nav-dropdown {
.el-dropdown-menu__item{ .el-dropdown-menu__item {
padding: 0; padding: 0;
} }
} }
......
<template> <template>
<div id="slidebar-container" class="slidebar-container"> <div id="slidebar-container" class="slidebar-container">
<el-menu :default-active="onRoutes" class="el-menu-vertical-demo" theme="dark" unique-opened router> <el-menu
:default-active="onRoutes"
class="el-menu-vertical-demo"
theme="dark"
unique-opened
router
>
<template v-for="(item,_index) in items"> <template v-for="(item,_index) in items">
<template v-if="item.subs && item.subs.length"> <template v-if="item.subs && item.subs.length">
<el-submenu :index=" 'index_' + _index" :key="item.index"> <el-submenu :index=" 'index_' + _index" :key="item.index">
<template slot="title"><i :class="item.icon"></i>{{item.title}}</template> <template slot="title">
<i :class="item.icon"></i>
{{item.title}}
</template>
<el-menu-item v-for="(subItem,i) in item.subs" :key="i" :index="subItem.index"> <el-menu-item v-for="(subItem,i) in item.subs" :key="i" :index="subItem.index">
<i class="sub-icon" :class="subItem.icon"></i> <i class="sub-icon" :class="subItem.icon"></i>
{{subItem.title}} {{subItem.title}}
...@@ -13,7 +22,8 @@ ...@@ -13,7 +22,8 @@
</template> </template>
<template v-else> <template v-else>
<el-menu-item :index="item.index" :key="item.index"> <el-menu-item :index="item.index" :key="item.index">
<i :class="item.icon"></i>{{ item.title }} <i :class="item.icon"></i>
{{ item.title }}
</el-menu-item> </el-menu-item>
</template> </template>
</template> </template>
...@@ -21,10 +31,10 @@ ...@@ -21,10 +31,10 @@
</div> </div>
</template> </template>
<script> <script>
import { mapGetters } from 'vuex' import { mapGetters } from "vuex";
import { setTimeout } from 'timers' import { setTimeout } from "timers";
import { isNotEmptyUtils } from '../../utils/utils' import { isNotEmptyUtils } from "../../utils/utils";
let vm = null let vm = null;
export default { export default {
props: { props: {
tokenValue: { tokenValue: {
...@@ -33,31 +43,61 @@ export default { ...@@ -33,31 +43,61 @@ export default {
}, },
data() { data() {
return { return {
items: [], items: []
// items:[{title:'组件',icon:'el-icon-menu',index:'item',subs:[{title:'讨论组件',icon:'el-icon-setting',index:'discuss-list'},{title:"问卷管理",icon:"el-icon-setting",index:"question-naire"},{title:"举报管理",icon:"el-icon-setting",index:"report-set"}]},] // items:[{title:'组件',icon:'el-icon-menu',index:'item',subs:[{title:'讨论组件',icon:'el-icon-setting',index:'discuss-list'},{title:"问卷管理",icon:"el-icon-setting",index:"question-naire"},{title:"举报管理",icon:"el-icon-setting",index:"report-set"}]},]
} };
}, },
computed: { computed: {
onRoutes() { onRoutes() {
return this.$route.path.replace('/', ''); return this.$route.path.replace("/", "");
} }
}, },
created() { created() {
vm = this vm = this;
const navs = sessionStorage.getItem('DISCUSS_CENTER_NAVS') const navs = sessionStorage.getItem("DISCUSS_CENTER_NAVS");
vm.getNav() vm.getNav();
}, },
methods: { methods: {
getNav() { getNav() {
this.POST('/basic-data/menu/list', { systemType: 26 }).then(res => { this.POST("basic-data/menu/list", { systemType: 26 }).then(res => {
if (res.code == '000000') { if (res.code == "000000") {
const { vueMenuDtos } = res.data; let { vueMenuDtos } = res.data;
// TODO 开发调试时写死, 发布时去掉
vueMenuDtos = [{
icon: null,
index: "waiting-session-list",
subs: [],
title: "等待会话"
},{
icon: null,
index: "waiting-session-list-1",
subs: [],
title: "当前会话"
},{
icon: null,
index: "search-message-list",
subs: [],
title: "消息查询"
},{
icon: null,
index: "waiting-session-list-3",
subs: [],
title: "我要群发"
},{
icon: null,
index: "waiting-session-list-4",
subs: [],
title: "历史群发"
}];
this.items = vueMenuDtos; this.items = vueMenuDtos;
sessionStorage.setItem('DISCUSS_CENTER_NAVS', JSON.stringify(vueMenuDtos)); sessionStorage.setItem(
"DISCUSS_CENTER_NAVS",
JSON.stringify(vueMenuDtos)
);
// 做当前路由无权限时处理 // 做当前路由无权限时处理
this.checkAuth(this.$route.path.split('/')[1], vueMenuDtos); this.checkAuth(this.$route.path.split("/")[1], vueMenuDtos);
} }
}); });
}, },
...@@ -78,13 +118,12 @@ export default { ...@@ -78,13 +118,12 @@ export default {
} }
return nvs; return nvs;
} }
debugger
if (navList.indexOf(path) == -1) { if (navList.indexOf(path) == -1) {
this.$router.push(`/${navList[0]}`); this.$router.push(`/${navList[0]}`);
} }
} }
} }
} };
</script> </script>
<style lang="scss"> <style lang="scss">
.slidebar-container { .slidebar-container {
...@@ -94,26 +133,27 @@ export default { ...@@ -94,26 +133,27 @@ export default {
top: 64px; top: 64px;
bottom: 0; bottom: 0;
width: 255px; width: 255px;
background: #06232C; background: #06232c;
.el-menu { .el-menu {
background: #06232C; background: #06232c;
border-right: none; border-right: none;
.sub-icon { .sub-icon {
font-size: 12px; font-size: 12px;
} }
.el-menu-item, .el-submenu__title { .el-menu-item,
color: #8FA4AC; .el-submenu__title {
color: #8fa4ac;
} }
.el-menu-item.is-active { .el-menu-item.is-active {
color: #fff; color: #fff;
background: #509284 !important background: #509284 !important;
} }
.el-menu-item:hover, .el-menu-item:hover,
.el-submenu__title:hover, .el-submenu__title:hover,
.slidebar-container .el-menu .el-menu-item:hover, .slidebar-container .el-menu .el-menu-item:hover,
.slidebar-container .el-menu .el-submenu__title:hover { .slidebar-container .el-menu .el-submenu__title:hover {
color: #fff; color: #fff;
background: #06232C; background: #06232c;
} }
// .el-menu-item:focus, .el-menu-item:hover { // .el-menu-item:focus, .el-menu-item:hover {
// background: #06232C !important; // background: #06232C !important;
......
Markdown 格式
0% or
您添加了 0 到此讨论。请谨慎行事。
先完成此消息的编辑!
想要评论请 注册