提交 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,15 +3,18 @@ import App from '../App' ...@@ -3,15 +3,18 @@ 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')
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
}, },
...@@ -40,14 +55,14 @@ export default [{ ...@@ -40,14 +55,14 @@ export default [{
path: '/question-naire', path: '/question-naire',
component: questionNaire component: questionNaire
}, },
{ {
path: '/topic-list', path: '/topic-list',
component: topicList component: topicList
}, },
{ {
path: '/report-set', path: '/report-set',
component: reportSet component: reportSet
}, },
] ]
}] }]
\ No newline at end of file
...@@ -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
此差异已折叠。
<template> <template>
<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>
</div> <img src="../../assets/image/footer-icon.png" />京ICP备:14044861号
</span>
</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;
font-size: 12px; font-size: 12px;
color: #838486; color: #838486;
span { span {
padding: 0 10px; padding: 0 10px;
} }
img { img {
width: 12px; width: 12px;
padding-right: 5px; padding-right: 5px;
} }
} }
</style> </style>
此差异已折叠。
<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
<template v-for="(item,_index) in items"> :default-active="onRoutes"
<template v-if="item.subs && item.subs.length"> class="el-menu-vertical-demo"
<el-submenu :index=" 'index_' + _index" :key="item.index"> theme="dark"
<template slot="title"><i :class="item.icon"></i>{{item.title}}</template> unique-opened
<el-menu-item v-for="(subItem,i) in item.subs" :key="i" :index="subItem.index"> router
<i class="sub-icon" :class="subItem.icon"></i> >
{{subItem.title}} <template v-for="(item,_index) in items">
</el-menu-item> <template v-if="item.subs && item.subs.length">
</el-submenu> <el-submenu :index=" 'index_' + _index" :key="item.index">
</template> <template slot="title">
<template v-else> <i :class="item.icon"></i>
<el-menu-item :index="item.index" :key="item.index"> {{item.title}}
<i :class="item.icon"></i>{{ item.title }}
</el-menu-item>
</template>
</template> </template>
</el-menu> <el-menu-item v-for="(subItem,i) in item.subs" :key="i" :index="subItem.index">
</div> <i class="sub-icon" :class="subItem.icon"></i>
{{subItem.title}}
</el-menu-item>
</el-submenu>
</template>
<template v-else>
<el-menu-item :index="item.index" :key="item.index">
<i :class="item.icon"></i>
{{ item.title }}
</el-menu-item>
</template>
</template>
</el-menu>
</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: {
type: String type: String
} }
}, },
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;
this.items = vueMenuDtos; // TODO 开发调试时写死, 发布时去掉
sessionStorage.setItem('DISCUSS_CENTER_NAVS', JSON.stringify(vueMenuDtos)); vueMenuDtos = [{
// 做当前路由无权限时处理 icon: null,
this.checkAuth(this.$route.path.split('/')[1], vueMenuDtos); index: "waiting-session-list",
} subs: [],
}); title: "等待会话"
}, },{
checkAuth(path, navs) { icon: null,
let navList = getNavs(navs); 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;
sessionStorage.setItem(
"DISCUSS_CENTER_NAVS",
JSON.stringify(vueMenuDtos)
);
// 做当前路由无权限时处理
this.checkAuth(this.$route.path.split("/")[1], vueMenuDtos);
}
});
},
checkAuth(path, navs) {
let navList = getNavs(navs);
function getNavs(arr) { function getNavs(arr) {
let nvs = []; let nvs = [];
for (let i = 0; i < arr.length; i++) { for (let i = 0; i < arr.length; i++) {
const nav = arr[i]; const nav = arr[i];
const subs = nav.subs; const subs = nav.subs;
if (subs.length) { if (subs.length) {
nvs = nvs.concat(getNavs(subs)); nvs = nvs.concat(getNavs(subs));
} else { } else {
nvs.push(nav.index); nvs.push(nav.index);
}
} }
return nvs;
}
debugger
if (navList.indexOf(path) == -1) {
this.$router.push(`/${navList[0]}`);
} }
return nvs;
}
if (navList.indexOf(path) == -1) {
this.$router.push(`/${navList[0]}`);
} }
} }
} }
};
</script> </script>
<style lang="scss"> <style lang="scss">
.slidebar-container { .slidebar-container {
display: block; display: block;
position: absolute; position: absolute;
left: 0; left: 0;
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 { }
color: #fff; .el-menu-item.is-active {
background: #509284 !important color: #fff;
} background: #509284 !important;
.el-menu-item:hover, }
.el-submenu__title:hover, .el-menu-item:hover,
.slidebar-container .el-menu .el-menu-item:hover, .el-submenu__title:hover,
.slidebar-container .el-menu .el-submenu__title:hover { .slidebar-container .el-menu .el-menu-item:hover,
color: #fff; .slidebar-container .el-menu .el-submenu__title:hover {
background: #06232C; color: #fff;
} background: #06232c;
// .el-menu-item:focus, .el-menu-item:hover {
// background: #06232C !important;
// }
} }
// .el-menu-item:focus, .el-menu-item:hover {
// background: #06232C !important;
// }
}
} }
</style> </style>
......
Markdown 格式
0% or
您添加了 0 到此讨论。请谨慎行事。
先完成此消息的编辑!
想要评论请 注册