提交 e9819d6b 编写于 作者: Yuanzhao.dai's avatar Yuanzhao.dai

Merge branch 'dev-eduadmin-20190222' into dev-followUp-20190312

# Conflicts:
#	src/views/layout/slidebar.vue
......@@ -7,3 +7,4 @@ dist/
node_modules/
.DS_Store
.vscode
envConfig.js
\ No newline at end of file
<template>
<div>
<v-header></v-header>
<v-slidebar></v-slidebar>
<v-header :userName="userName" :portrait="portrait" :idType="idType"></v-header>
<v-slidebar :authList="authList" :tokenValue="token"></v-slidebar>
<el-container>
<div class="content" id="body-content">
<transition name="router-fade" mode="out-in">
......@@ -14,48 +14,108 @@
</transition>
<v-footer></v-footer>
</div>
</el-container>
</div>
</template>
<script>
import VHeader from './views/layout/header.vue'
import VSlidebar from './views/layout/slidebar.vue'
import VFooter from './views/layout/footer.vue'
let vm = null
export default {
components:{
VHeader,
VSlidebar,
VFooter
},
data() {
return {
import VHeader from './views/layout/header.vue'
import VSlidebar from './views/layout/slidebar.vue'
import VFooter from './views/layout/footer.vue'
import { base64decode, isNotEmptyUtils, getUrlParamsMap } from "./utils/utils.js"
import { mapActions, mapGetters } from 'vuex'
import { getLoginUrl } from './utils/index.js'
let vm = null
export default {
components:{
VHeader,
VSlidebar,
VFooter
},
data() {
return {
idType: 0,
token: '',
userName: '',
portrait: '',
authList: {}
}
},
computed:{
...mapGetters([
'_token'
])
},
created() {
vm = this
vm.getToken()
},
mounted() {
// setInterval(function(){
// vm.pushMessage()
// },60000)
},
methods: {
// 解密token
getToken() {
let href = window.location.href
let offset = href.indexOf("?")
if(offset !== -1) {
let paramStr = href.substring(offset + 1, href.length)
let pars = base64decode(paramStr)
let paramMap = getUrlParamsMap(pars, "&")
if (isNotEmptyUtils(paramMap["token"]) || localStorage.getItem('storageToken')) {
vm.token = paramMap["token"]
} else {
window.location.href = getLoginUrl() // 没有token返回登录页面
return
}
}else {
if(!localStorage.getItem('storageToken')) {
window.location.href = getLoginUrl() // 没有token返回登录页面
return
}
}
vm.changeToken(vm.token)
vm.getUserAuth(vm.token)
},
created() {
vm = this
// 实时消息推送
pushMessage() {
vm.$notify({
title: '警告',
message: '这是一条警告的提示消息',
type: 'warning'
});
},
mounted() {
setInterval(function(){
vm.pushMessage()
},60000)
},
methods: {
// 实时消息推送
pushMessage() {
vm.$notify({
title: '警告',
message: '这是一条警告的提示消息',
type: 'warning'
});
// 修改token
...mapActions([
'changeToken',
'changeIdType'
]),
// 获取用户权限
getUserAuth(token) {
let req = null
if(localStorage.getItem('storageToken')) {
req = {
token: localStorage.getItem('storageToken')
}
} else {
req = {
token: token
}
}
vm.GET('common/v1/role',req).then((res) => {
if(res.code == '000000') {
vm.changeIdType(res.data.idType)
vm.idType = res.data.idType
vm.userName = res.data.name
vm.portrait = res.data.imageUrl
vm.authList = res.data.auth
}
})
}
}
}
}
</script>
<style lang="scss">
......
import * as types from './mutations-types'
export const changeToken = ({commit}, data) => {
commit(types.TOKEN, data)
}
export const changeIdType = ({commit}, data) => {
commit(types.ID_TYPE, data)
}
\ No newline at end of file
const getters = {
userInfo: state => state.sousuo.userInfo,
statusBarHeight: state => state.sousuo.statusBarHeight,
}
export default getters
export const _token = state => state._token
export const idType = state => state.idType
import Vue from 'vue'
import Vuex from 'vuex'
import lecturer from './modules/lecturer'
import getters from './getters'
import * as actions from './actions'
import * as getters from './getters'
import state from './state'
import mutations from './mutations'
Vue.use(Vuex)
const store = new Vuex.Store({
modules: {
lecturer
},
getters
export default new Vuex.Store({
actions,
getters,
state,
mutations,
})
export default store
const lecturer = {
state: {
userInfo: {},
statusBarHeight: {}
},
mutations: {
SET_USER_INFO: (state, userInfo) => {
state.userInfo = userInfo
},
SET_STATUS_BAR_HEIGHT: (state, statusBarHeight) => {
state.statusBarHeight = statusBarHeight
},
},
actions: {
setUserInfo({ commit }, userInfo) {
commit('SET_USER_INFO', userInfo)
},
setStatusBarHeight({ commit }, statusBarHeight) {
commit('SET_STATUS_BAR_HEIGHT', statusBarHeight)
},
}
}
export default lecturer
export const TOKEN = 'TOKEN'
export const ID_TYPE = 'ID_TYPE'
\ No newline at end of file
import * as types from './mutations-types'
const mutations = {
[types.TOKEN](state, tokenData) {
state._token = tokenData
},
[types.ID_TYPE](state, idTypeData) {
state.idType = idTypeData
}
}
export default mutations
\ No newline at end of file
const state = {
_token: '',
idType: ''
}
export default state
\ No newline at end of file
......@@ -125,6 +125,7 @@ html,body{
.screenSet{
// width: 163vh !important;
// height: 66vh !important;
height: 430px !important;
margin: 88px 30px 0px;
overflow: auto;
}
......@@ -133,6 +134,7 @@ html,body{
.screenSet{
// width: 166vh !important;
// height: 78vh !important;
height: 800px !important;
overflow: auto;
margin: 88px 30px 0px;
}
......@@ -173,16 +175,47 @@ html,body{
top: 130px !important;
}
// 按钮样式
.el-button--default {
// 弹框按钮样式
.el-message-box {
width: 360px;
height: 160px;
.el-message-box__header {
text-align: center;
}
.el-message-box__status {
display: none;
}
.el-message-box__btns {
text-align: center !important;
button {
height: 32px;
width: 78px;
}
}
}
.el-button--primary {
.el-button--primary {
line-height: 40px;
background: #449284 !important;
border: 1px solid #449284 !important;
}
.el-pagination.is-background .el-pager li:not(.disabled).active {
background: #449284 !important;
}
// 主题样式修改
.el-radio__input.is-checked .el-radio__inner {
border-color: #449284 !important;
background: #449284 !important;
}
.el-radio__input.is-checked+.el-radio__label, .el-tabs__item.is-active {
color: #449284 !important;
}
// 面包屑导航
.el-breadcrumb__inner a, .el-breadcrumb__inner.is-link {
font-weight: 300 !important;
}
.el-breadcrumb__inner.is-link:hover {
color: #449284 !important;
}
\ No newline at end of file
......@@ -19,42 +19,52 @@ export const envConfig = {
qiniuUrl: "http://localhost:10201/contents/admin/qiniu/token",
qiniuFileUrl: "http://localhost:10201/contents/admin/qiniu/token1",
qiniuResourceUrl: "https://test1-videos.yunqueyi.com",
qiniuImgUrl: "https://test1-file.yunqueyi.com"
qiniuImgUrl: "https://test1-file.yunqueyi.com",
loginUrl: 'https://dev-saas.yunqueyi.com/pica-login/work_station.html',
innerLoginUrl: 'http://localhost:8090/PICA_SSO_FE/html/pica_login.html'
},
dev: {
baseUrl: 'https://dev-sc.yunqueyi.com/portal',
baseUrl: 'https://dev-sc.yunqueyi.com/portal/',
apiUrl: 'https://dev-api.yunqueyi.com/',
webPageUrl: 'https://dev-phome.yunqueyi.com/',
qiniuUrl: "http://localhost:11905/contents/admin/qiniu/token",
qiniuFileUrl: "http://localhost:11905/contents/admin/qiniu/token1",
qiniuResourceUrl: "https://test1-videos.yunqueyi.com",
qiniuImgUrl: "https://test1-file.yunqueyi.com"
qiniuImgUrl: "https://test1-file.yunqueyi.com",
loginUrl: 'https://dev-saas.yunqueyi.com/pica-login/work_station.html',
innerLoginUrl: 'https://dev-sso.yunqueyi.com/PICA_SSO_FE/html/pica_login.html'
},
test: {
baseUrl: 'https://test1-sc.yunqueyi.com/portal',
baseUrl: 'https://test1-sc.yunqueyi.com/portal/',
apiUrl: 'https://test1-api.yunqueyi.com/',
webPageUrl: 'https://test1-phome.yunqueyi.com/',
qiniuUrl: "https://test1-sc.yunqueyi.com/contents/admin/qiniu/token",
qiniuFileUrl: "https://test1-sc.yunqueyi.com/contents/admin/qiniu/token1",
qiniuResourceUrl: "https://test1-videos.yunqueyi.com",
qiniuImgUrl: "https://test1-file.yunqueyi.com"
qiniuImgUrl: "https://test1-file.yunqueyi.com",
loginUrl: 'https://test1-saas.yunqueyi.com/pica-login/work_station.html',
innerLoginUrl: 'https://test1-sso.yunqueyi.com/PICA_SSO_FE/html/pica_login.html'
},
uat: {
baseUrl: 'https://uat-sc.yunqueyi.com/portal',
baseUrl: 'https://uat-sc.yunqueyi.com/portal/',
apiUrl: 'https://uat-api.yunqueyi.com/',
webPageUrl: 'https://uat-phome.yunqueyi.com/',
qiniuUrl: "https://uat-sc.yunqueyi.com/contents/admin/qiniu/token",
qiniuFileUrl: "https://uat-sc.yunqueyi.com/contents/admin/qiniu/token1",
qiniuResourceUrl: "https://videos.yunqueyi.com", // 视频
qiniuImgUrl: "https://file.yunqueyi.com"
qiniuImgUrl: "https://file.yunqueyi.com",
loginUrl: 'https://uat-saas.yunqueyi.com/pica-login/work_station.html',
innerLoginUrl: 'https://uat-sso.yunqueyi.com/PICA_SSO_FE/html/pica_login.html'
},
pro: {
baseUrl: 'https://sc.yunqueyi.com/portal',
baseUrl: 'https://sc.yunqueyi.com/portal/',
apiUrl: 'https://api.yunqueyi.com/',
webPageUrl: 'https://phome.yunqueyi.com/',
qiniuUrl: "https://sc.yunqueyi.com/contents/admin/qiniu/token",
qiniuFileUrl: "https://sc.yunqueyi.com/contents/admin/qiniu/token1",
qiniuResourceUrl: "https://videos.yunqueyi.com",
qiniuImgUrl: "https://file.yunqueyi.com"
qiniuImgUrl: "https://file.yunqueyi.com",
loginUrl: 'https://saas.yunqueyi.com/pica-login/work_station.html',
innerLoginUrl: 'https://sso.yunqueyi.com/PICA_SSO_FE/html/pica_login.html'
}
}
......@@ -11,8 +11,12 @@ const service = axios.create({
// request拦截器
service.interceptors.request.use(config => {
if(config.data && config.data.token) {
localStorage.setItem('storageToken',config.data.token)
}
config.headers['sysCode'] = 12
config.headers['token'] = 'AB14D7D7675E4D09B4B1566170076122'
config.headers['token'] = localStorage.getItem('storageToken')
//config.headers['token'] = 'AB14D7D7675E4D09B4B1566170076122'
config.headers['deviceInfo'] = JSON.stringify({ "app_channel": "", "app_mac": "", "app_uuid": "", "app_version": "", "device_brand": "", "device_ip": "", "device_model": "", "device_net": "", "device_ops": "", "resolution_wh": "", "system_level": "", "device_type": '10' })
// if (config.data && config.data.setEntry) {
// config.headers['sysCode'] = config.data.sysCode || 10
......
......@@ -125,6 +125,7 @@ const vueFilter = {
return '已禁用'
}
},
//项目管理
statusProject: (value) => {
if(value == 1) {
return '草稿'
......@@ -139,6 +140,18 @@ const vueFilter = {
}else {
return '已拒绝'
}
}
},
projeceRoleType: (value) => {
if(value == "L1") {
return '内部管理员'
}else if(value == "L2") {
return '项目负责人'
}else if(value == "L3") {
return '次级负责人'
} else if(value == "L4") {
return '普通用户'
}
},
}
export default vueFilter
\ No newline at end of file
......@@ -164,6 +164,14 @@ export function getQiniuToken1() {
return getConfigByEnvType('qiniuFileUrl')
}
// 登录URL
export function getLoginUrl() {
return getConfigByEnvType('loginUrl')
}
export function getInnerLoginUrl() {
return getConfigByEnvType('innerLoginUrl')
}
// 七牛上传视频和图片
export function uploadVideo() {
return getConfigByEnvType('qiniuResourceUrl')
......
......@@ -146,6 +146,7 @@ module.exports = {
GET(api, para, callback,str) {
// para.token = para.token || this.token || "343BCABC890349ACAF357FA79122F9FE"
let url = api + this.getUrlPara(para)
url = encodeURI(url);
return fetch({
url: getBaseUrl(url),
method: 'get',
......@@ -153,6 +154,17 @@ module.exports = {
})
},
// 通用DELETE请求
DELETE(api, para, callback,str) {
// para.token = para.token || this.token || "343BCABC890349ACAF357FA79122F9FE"
let url = api + this.getUrlPara(para)
return fetch({
url: getBaseUrl(url),
method: 'delete',
data: para
})
},
// 通用POST请求
POST(api, para, callback) {
// para.token = para.token || this.token || "343BCABC890349ACAF357FA79122F9FE"
......
......@@ -31,11 +31,22 @@ export function isvalidUsername(str) {
return reg.test(str)
}
// 2-150个中文
export function validateWord150(str) {
const reg = /^[\u4e00-\u9fa5]{2,150}$/
return reg.test(str)
// 2-150个中英文字符
export function validateWord150(rule, value, callback, message) {
if(!/^[\u4e00-\u9fffa-zA-Z]{2,150}$/.test(value)) {
callback(new Error(message))
} else {
callback()
}
}
// 考试30个中英文字符
export function validateWord30(value,message) {
if(!/^[\u4e00-\u9fffa-zA-Z]{0,30}$/.test(value)) {
callback(new Error('考试名称长度不超过30个中文字符长度'))
} else {
callback()
}
}
/* 通用密码验证(数字、字母、下划线或特殊字符且长度为0-150位) */
export function isValidPassword(rule, value, callback, message) {
if (!/^(?:\d+|[a-zA-Z]+|[!@#$%^&*]+){0,150}$/.test(value)) {
......
<template>
<div>
很抱歉,您暂时还没开通工作站功能
<div class="blank-wrap screenSet">
<div class="blank-content">
<img src="../assets/image/no-content.png"/>
<p>很抱歉,您暂时还没开通工作站功能</p>
</div>
</div>
</template>
<script>
......@@ -8,8 +11,30 @@ export default {
}
</script>
<style>
<style lang="scss">
.blank-wrap {
background: #fff;
margin: 20px !important;
position: relative;
text-align: center;
.blank-content {
position: absolute;
top: 50%;
left: 50%;
width: 400px;
height: 100px;
margin-top: -50px;
margin-left: -200px;
p {
margin-top: 20px;
font-size: 20px;
color: #999;
}
img {
width: 100px;
}
}
}
</style>
此差异已折叠。
......@@ -45,10 +45,10 @@
</el-table-column>
<el-table-column label="操作" fixed="right" align="center" min-width="200">
<template slot-scope="scope">
<el-button type="primary" v-if="scope.row.status == 1 ||scope.row.status == 2" size="small" @click="editComponentList(scope.row)">编辑</el-button>
<el-button type="primary" v-if="scope.row.status == 1 ||scope.row.status == 2" size="small" @click="enableAndDisable(scope.row,1)">启用</el-button>
<el-button type="primary" v-if="scope.row.status == 1 || scope.row.status == 2" size="small" @click="editComponentList(scope.row)">编辑</el-button>
<el-button type="primary" v-if="scope.row.status == 1 || scope.row.status == 2 || scope.row.status == 4" size="small" @click="enableAndDisable(scope.row,1)">启用</el-button>
<el-button type="primary" v-if="scope.row.status == 3" size="small" @click="enableAndDisable(scope.row,2)">禁用</el-button>
<el-button type="primary" v-if="scope.row.status == 1 ||scope.row.status == 2" size="small" @click="deleteComponent(scope.row)">删除</el-button>
<el-button type="primary" v-if="scope.row.status == 1 || scope.row.status == 2" size="small" @click="deleteComponent(scope.row)">删除</el-button>
</template>
</el-table-column>
</el-table>
......@@ -72,6 +72,8 @@
import BreadCrumb from '../../components/breadcrumb.vue'
import { doUpload, getFilePath } from "../../utils/qiniuUtil"
import { validateWord } from "../../utils/validate.js"
import { mapGetters } from 'vuex'
import { openLoading, closeLoading } from '../../utils/utils';
let vm = null
export default {
components: {
......@@ -120,6 +122,11 @@ export default {
}
},
computed: {
...mapGetters([
'_token'
])
},
created() {
vm = this
vm.search()
......@@ -127,7 +134,9 @@ export default {
methods: {
// 列表查询
search() {
vm.GET('/portalComponent/queryPortalComponent',vm.searchParam).then((res) => {
openLoading(vm)
vm.GET('portalComponent/queryPortalComponent',vm.searchParam).then((res) => {
closeLoading(vm)
if( res.code == '000000' ) {
vm.tableData = res.data.queryList
vm.totalRows = res.data.total
......@@ -148,9 +157,17 @@ export default {
createComponent() {
vm.$router.push({path: 'create-component'})
},
// 编辑
// 编辑(验证可编辑范围)
editComponentList(row) {
vm.$router.push({path: 'create-component',query: {id:row.id,status: row.status}})
let req = {
token: vm._token,
componentId: row.id
}
vm.GET('portalComponent/componentEditRange',req).then((res) => {
if(res.code == "000000") {
vm.$router.push({path: 'create-component',query: {id:row.id,status: row.status,resultFlag: res.data.resultFlag}})
}
})
},
// 启用(禁用)
enableAndDisable(row,flag) {
......@@ -231,7 +248,7 @@ export default {
.search-title {
padding: 10px 12px;
font-size: 12px;
color: #409EFF;
color: #449284;
border-bottom: 1px solid #efefef;
}
.create-button {
......
<template>
<div class="home-wrap">
<bread-crumb :curmbFirst="curmbFirst"></bread-crumb>
<div class="message-content screenSet">
<div class="message-content">
<el-row>
<el-col class="visitor" :span="24">
<el-col class="visitor" :span="24" v-if="tableData.length > 0">
<div class="visitor-title">
<div class="title">今日随访:<span style="color:#449284;">10人</span></div>
<span class="visitor-more" @click="lookMore">查看更多</span>
......@@ -19,22 +19,24 @@
</el-table>
</div>
</el-col>
<el-col class="message" :span="24">
<div class="message-title">系统消息 <span>今日消息:3</span></div>
<div class="message-info" v-if="messageList">
<el-col class="message screenSet" :span="24">
<div class="message-title">系统消息 <span>今日消息:{{count}}</span></div>
<div class="message-info" v-if="messageList.length > 0">
<div class="message-item" v-for="(item,index) in messageList" :key="index">
<div class="text-top">
<i class="el-icon-error" v-if="item.type == 2" style="color:#FA5555"></i>
<i class="el-icon-success" v-if="item.type == 3" style="color:#67C23A"></i>
<i class="el-icon-warning" v-if="item.type == 1" style="color:#FAAD14"></i>
<span>{{item.status}}</span>
<span>{{item.date}}</span>
<span>{{item.menuName}}</span>
<span>{{item.portalTime}}</span>
</div>
<div class="text-bottom">{{item.info}}</div>
<div class="text-bottom">{{item.content}}</div>
</div>
</div>
<div v-else>
<div class="no-message" v-else>
<div>
<img src="../assets/image/noData.png"/>
</div>
</div>
</el-col>
</el-row>
......@@ -43,7 +45,8 @@
</template>
<script>
import BreadCrumb from '../components/breadcrumb.vue'
import { setTimeout, setInterval } from 'timers';
import { setTimeout, setInterval } from 'timers'
import { mapGetters } from 'vuex'
let vm = null
export default {
components: {
......@@ -54,46 +57,50 @@ export default {
curmbFirst: '数据总览',
spanFirstNum: 12,
spanSecondNum: 12,
tableData: [
{
date: '2016-05-02',
name: '王小虎',
style: '电话随访',
content: '糖尿病患者第20190228定期随访登记'
},{
date: '2016-05-02',
name: '王小虎',
style: '电话随访',
content: '糖尿病患者第20190228定期随访登记'
},{
date: '2016-05-02',
name: '王小虎',
style: '电话随访',
content: '糖尿病患者第20190228定期随访登记'
}
],
messageList:[{
status: '审核提醒',
type: 1,
date: '2019-01-02',
info: '王小波创建了"浙江省2019高血压第一季度考试"项目,提醒您审核。'
},{
status: '审核未通过',
type: 2,
date: '2019-01-02',
info: '王小波创建了"浙江省2019高血压第一季度考试"项目,提醒您审核。'
},{
status: '审核通过',
type: 3,
date: '2019-01-02',
info: '王小波创建了"浙江省2019高血压第一季度考试"项目,提醒您审核。'
}]
tableData: [],
count: 0,
messageList:[
// {
// menuName: '审核提醒',
// type: 1,
// portalTime: '2019-01-02',
// content: '王小波创建了"浙江省2019高血压第一季度考试"项目,提醒您审核。'
// },{
// menuName: '审核未通过',
// type: 2,
// portalTime: '2019-01-02',
// content: '王小波创建了"浙江省2019高血压第一季度考试"项目,提醒您审核。'
// },{
// menuName: '审核通过',
// type: 3,
// portalTime: '2019-01-02',
// content: '王小波创建了"浙江省2019高血压第一季度考试"项目,提醒您审核。'
// }
]
}
},
created() {
vm = this
vm.getSystemData()
},
computed: {
...mapGetters([
'_token'
])
},
methods: {
// 查看更多
lookMore() {
},
// 获取系统消息数据
getSystemData() {
vm.GET('portalMessage/queryPortalMessageInfo',{token: vm._token, pageNo: 1, pageSize: 15}).then((res) => {
if( res.code == '000000') {
vm.messageList = res.data.portalMessageModels
vm.count = res.data.count
}
})
}
}
}
......@@ -165,7 +172,13 @@ export default {
}
}
}
.no-message {
text-align: center;
img {
width: 100px;
margin-top: 17%;
}
}
}
}
</style>
......
......@@ -2,7 +2,7 @@
<div class="footer-wrap">
<span>Copyright© 2019 云鹊医疗科技 (上海) 有限公司</span>
<span>沪ICP:16018581号-1</span>
<span>京ICP:14044861号</span>
<span><img src="../../assets/image/footer-icon.png"/>京ICP备:14044861号</span>
</div>
</template>
<script>
......@@ -17,6 +17,13 @@ export default {
line-height: 75px;
font-size: 12px;
color: #838486;
span {
padding: 0 10px;
}
img {
width: 12px;
padding-right: 5px;
}
}
</style>
......
......@@ -7,49 +7,55 @@
<div class="user-info">
<el-dropdown trigger="click" @command="handleCommand">
<div class="el-dropdown-link">
<img class="user-logo" src="../../assets/image/img.jpg">
<span id="headName">{{name}}</span><i class="el-icon-caret-bottom"></i>
<img class="user-logo" :src="portrait">
<span id="headName">{{userName}}</span><i class="el-icon-caret-bottom"></i>
</div>
<el-dropdown-menu slot="dropdown">
<!-- <el-dropdown-item command="logout">退出</el-dropdown-item> -->
<el-dropdown-item command="logout">注销</el-dropdown-item>
<el-dropdown-item @click="forward">返回云鹊医首页</el-dropdown-item>
<el-dropdown-item command="forward">返回云鹊医首页</el-dropdown-item>
</el-dropdown-menu>
</el-dropdown>
</div>
<!--导航-->
<!-- <div class="user-info" style="padding-right:10px;">
<el-dropdown trigger="click" @command="handleCommand">
<div>
<span class="el-dropdown-link">返回云鹊医首页</span>
<span class="line">|</span>
</div>
<el-dropdown-menu slot="dropdown">
<el-dropdown-item command="logout">注销</el-dropdown-item>
<el-dropdown-item @click="forward">返回云鹊医首页</el-dropdown-item>
</el-dropdown-menu>
</el-dropdown>
</div> -->
</div>
</template>
<script>
import { getLoginUrl,getInnerLoginUrl } from '../../utils/index.js'
let vm = null
export default {
props: {
portrait: {
type: String
},
userName: {
type: String
},
idType: {
type: Number
}
},
data() {
return {
name: 'hws',
name: '',
systemInfoList: []
}
},
computed: {},
created() {
vm = this
},
methods: {
handleCommand(command) {
if (command === 'logout') {
localStorage.removeItem('storageToken')
if(vm.idType == 1) { // 内部
window.location.href = getInnerLoginUrl()
} else {
window.location.href = getLoginUrl()
}
}
if(command === 'forward') {
window.location.href = 'https://www.yunqueyi.com/'
}
},
forward() {
window.location.href = 'https://www.yunqueyi.com/'
}
}
}
......
......@@ -9,7 +9,6 @@
<i class="sub-icon" :class="subItem.icon"></i>
{{subItem.title}}
</el-menu-item>
</el-submenu>
</template>
<template v-else>
......@@ -22,9 +21,22 @@
</div>
</template>
<script>
import { mapGetters } from 'vuex'
import { setTimeout } from 'timers';
let vm = null
export default {
props: {
tokenValue: {
type: String
},
authList: {
type: Object,
default: () => {}
}
},
data() {
return {
// authList: {},
items: [
{
title: '数据总览',
......@@ -87,6 +99,46 @@ export default {
onRoutes() {
return this.$route.path;
}
},
created() {
vm = this
vm.authSelect()
},
methods: {
// 获取菜单数据
authSelect() {
vm.$nextTick(() => {
vm.getUserAuth()
})
// let req = {
// "token": vm.tokenValue,
// "system_type": "25"
// }
// vm.POST('portalComponent/menu/list',req).then((res) => {
// if( res.code == '000000') {
// vm.items = res.data.picapMenuModels
// vm.$nextTick(() => {
// vm.getUserAuth()
// })
// }
// })
},
// 获取用户权限
getUserAuth() {
if(vm.authList && vm.authList.length > 0) {
if(!vm.authList.P001) { // 项目管理
vm.items[1].subs[1].index = 'blank'
}
if(!vm.authList.P002) { // 组件管理
vm.items[1].subs[0].index = 'blank'
}
if(!vm.authList.P001) { // 角色管理
vm.items[2].subs[0].index = 'blank'
}
}
}
}
}
</script>
......@@ -110,14 +162,15 @@ export default {
}
.el-menu-item.is-active {
color: #fff;
background: #509284;
background: #509284 !important
}
.el-menu-item:hover,
.el-submenu__title:hover,
.slidebar-container .el-menu .el-menu-item:hover,
.slidebar-container .el-menu .el-submenu__title:hover {
color: #fff;
background: #06232C;
}
// .el-menu-item:focus, .el-menu-item:hover,
// .el-submenu__title:hover,.slidebar-container .el-menu .el-menu-item:focus,
// .slidebar-container .el-menu .el-menu-item:hover,
// .slidebar-container .el-menu .el-submenu__title:hover {
// background: #06232C;
// }
}
}
</style>
......
......@@ -46,6 +46,7 @@ let tablePerson = [{
let treeData = [
{
id: 11,
name: "一级 1",
label: "一级 1",
children: [
{
......@@ -99,10 +100,29 @@ let treeData = [
]
}
];
// 按钮type类型: 0-编辑
// 1-暂存 2-完成 3-上架 4-通过 5-下架 6-拒绝
// 7- 提醒审核 8(5)-取消审核 9-删除
let buttonStatus = [
//L1 内部管理员 L2项目负责人 L3次级负责人
//草稿
{ L1: "09", L2: "09", L3: "" },
//未上架
{ L1: "09", L2: "039", L3: "0" },
//待审批、审批中
{ L1: "46", L2: "78", L3: "" },
//已上架
{ L1: "05", L2: "05", L3: "5" },
//已下架
{ L1: "03", L2: "03", L3: "0" },
//已拒绝/未上架
{ L1: "09", L2: "039", L3: "0" },
];
export function returnData() {
let data = {};
data.tableOrganization = tableOrganization;
data.tablePerson = tablePerson;
data.treeData = treeData;
data.buttonStatus = buttonStatus;
return data;
}
\ No newline at end of file
此差异已折叠。
<template>
<div class="main-container">
<div class="role-wrap">
<bread-crumb :curmbFirst="curmbFirst" :curmbSecond="curmbSecond"></bread-crumb>
<div class="component-content">
<div class="component-content screenSet">
<div class="header-title">查询条件</div>
<el-form :inline="true" :model="formInline" class="demo-form-inline">
<el-form-item label="项目名称:">
<el-input v-model="formInline.name" placeholder="审批人"></el-input>
</el-form-item>
<el-form-item label="项目时间:">
<el-date-picker v-model="formInline.startDates" type="date" placeholder="请选择开始时间"></el-date-picker>
<el-date-picker v-model="formInline.endDate" type="date" placeholder="请选择结束时间"></el-date-picker>
</el-form-item>
<el-form-item class="to-right">
<el-button class="button-white" plain>重置</el-button>
</el-form-item>
<el-form-item class="to-right">
<el-button class="button-green" type="primary">查询</el-button>
</el-form-item>
</el-form>
<el-row :gutter="30" class="row" type="flex" style="margin-top: 10px;">
<el-form ref="formInline" :model="formInline" label-width="75px" style="width:100%;">
<el-col :span="6">
<el-form-item label="项目名称:">
<el-input v-model="formInline.projectName" size="mini" placeholder="请输入项目名称"></el-input>
</el-form-item>
</el-col>
<el-col :span="6">
<el-form-item label="项目时间:">
<el-date-picker
size="mini"
type="daterange"
start-placeholder="请选择项目开始时间"
end-placeholder="请选择项目结束时间"
v-model="formInline.duringTime"
value-format="yyyy-MM-dd HH:mm:ss"
></el-date-picker>
</el-form-item>
</el-col>
<el-col :span="12" style="padding:0;text-align:right;padding-right:15px;">
<el-button type="primary" size="small" @click="search">查询</el-button>
<el-button type="default" size="small" @click="resetForm" style="margin-left:0;">重置</el-button>
</el-col>
</el-form>
</el-row>
<el-table
v-loading="loading"
:data="tableData"
:header-cell-style="{background:'#FAFAFA',color:'#000'}"
>
<el-table-column prop="id" label="ID编号" width="140"></el-table-column>
<el-table-column prop="projectName" label="项目名称" width="120"></el-table-column>
<el-table-column prop="createName" label="创建人"></el-table-column>
<el-table-column prop="projectBrief" label="项目简介"></el-table-column>
<el-table-column prop="address" label="所属地区"></el-table-column>
<el-table-column prop="startTime" label="项目开始时间"></el-table-column>
<el-table-column prop="endTime" label="项目结束时间"></el-table-column>
<el-table-column prop="state" label="状态"></el-table-column>
<el-table-column fixed="right" label="操作" width="200">
<el-table-column prop="createdId" label="ID编号" min-width="100" align="center"></el-table-column>
<el-table-column prop="projectName" label="项目名称" min-width="100" align="center"></el-table-column>
<el-table-column prop="createdName" label="创建人" align="center"></el-table-column>
<el-table-column prop="projectIntro" label="项目简介" align="center"></el-table-column>
<el-table-column prop="projectBegintime" label="项目开始时间" align="center"></el-table-column>
<el-table-column prop="projectEndtime" label="项目结束时间" align="center"></el-table-column>
<el-table-column prop="projectStatus" label="状态" align="center">
<template slot-scope="scope">
<el-button class="title" type="text" size="small" @click="toPage()">查看项目人员</el-button>
<span>{{ scope.row.projectStatus | statusProject }}</span>
</template>
</el-table-column>
<el-table-column fixed="right" label="操作" width="200" align="center">
<template slot-scope="scope">
<el-button type="primary" size="small" @click="toPage(scope.row)">查看项目人员</el-button>
</template>
</el-table-column>
</el-table>
<el-pagination
@size-change="handleSizeChange"
@current-change="handleCurrentChange"
:current-page="currentPage"
:page-sizes="[100, 200, 300, 400]"
:page-size="100"
layout="total, sizes, prev, pager, next, jumper"
:total="400"
></el-pagination>
<div class="pagination">
<el-pagination
background
@size-change="handleSizeChange"
@current-change="handleCurrentChange"
:current-page="formInline.pageNo"
:page-sizes="[10, 30, 50, 100]"
:page-size="formInline.pageSize"
layout="total, sizes, prev, pager, next, jumper"
:total="totalRows"
></el-pagination>
</div>
</div>
</div>
</template>
<script>
import BreadCrumb from "../../components/breadcrumb.vue";
import { create } from "domain";
let vm = null;
export default {
components: {
BreadCrumb
},
data() {
const item = {
id: "298490",
projectName: "浙江省防控中心指空中...",
createName: "李雷",
projectBrief: "显示项目简介简介",
address: "浙江省",
startTime: "2018-12-15 15:39:23",
endTime: "2018-12-15 15:39:23",
state: "草稿"
};
return {
curmbFirst: "系统管理",
curmbSecond: "角色管理",
tableData: Array(10).fill(item),
tableData: [],
loading: false,
timingTime: "",
currentPage: 1,
duringTime: 0,
totalRows: 0,
formInline: {
name: "",
startDate: "",
endDate: "",
type: ""
},
pickerOptions: {
shortcuts: [
{
text: "最近一周",
onClick(picker) {
const end = new Date();
const start = new Date();
start.setTime(start.getTime() - 3600 * 1000 * 24 * 7);
picker.$emit("pick", [start, end]);
}
},
{
text: "最近一个月",
onClick(picker) {
const end = new Date();
const start = new Date();
start.setTime(start.getTime() - 3600 * 1000 * 24 * 30);
picker.$emit("pick", [start, end]);
}
},
{
text: "最近三个月",
onClick(picker) {
const end = new Date();
const start = new Date();
start.setTime(start.getTime() - 3600 * 1000 * 24 * 90);
picker.$emit("pick", [start, end]);
}
}
]
projectName: "",
projectBegintime: "",
projectEndtime: "",
duringTime: "",
pageNo: 1,
pageSize: 10
}
};
},
create() {},
created() {
vm = this;
this.search();
},
methods: {
toPage() {
this.$router.push("item-role");
setParam(data) {
let param = {};
if (
data.duringTime !== null &&
data.duringTime !== "" &&
data.duringTime[0] !== null &&
data.duringTime[1] !== null
) {
param.projectBegintime = data.duringTime[0];
param.projectEndtime = data.duringTime[1];
}
for (let key in data) {
if (
key !== "duringTime" &&
key !== "projectBegintime" &&
key !== "projectEndtime"
) {
param[key] = data[key];
}
}
console.log(param);
return param;
},
search() {
let req = {};
console.log(this.formInline);
req = this.setParam(this.formInline);
vm.GET("portalInfo/getProjectList", req).then(res => {
if (res.code == "000000") {
vm.tableData = res.data.data;
vm.totalRows = res.data.totalRows;
this.loading = false;
}
});
},
resetForm() {
vm.formInline = Object.assign(
{},
{
projectName: "",
projectBegintime: "",
projectEndtime: "",
duringTime: "",
pageNo: 1,
pageSize: 10
}
);
vm.search();
},
toPage(row) {
this.$router.push("item-role?portalProjectId=" + row.id);
},
handleSizeChange(val) {
console.log(`每页 ${val} 条`);
},
handleCurrentChange(val) {
console.log(`当前页: ${val}`);
},
}
}
};
</script>
<style lang="scss">
.main-container {
.role-wrap {
.component-content {
margin-top: 50px;
padding: 10px;
.button-green {
color: #ffffff;
background: #449284;
border-color: #bfdad5;
border-radius: 2px;
}
.button-white {
color: #606266;
background: #ffffff;
border-color: #ecedf1;
border-radius: 2px;
}
background: #fff;
.header-title {
padding: 10px 12px;
font-size: 12px;
color: #409eff;
color: #449284;
border-bottom: 1px solid #efefef;
}
.to-right {
......
Markdown 格式
0% or
您添加了 0 到此讨论。请谨慎行事。
先完成此消息的编辑!
想要评论请 注册