提交 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/ ...@@ -7,3 +7,4 @@ dist/
node_modules/ node_modules/
.DS_Store .DS_Store
.vscode .vscode
envConfig.js
\ No newline at end of file
<template> <template>
<div> <div>
<v-header></v-header> <v-header :userName="userName" :portrait="portrait" :idType="idType"></v-header>
<v-slidebar></v-slidebar> <v-slidebar :authList="authList" :tokenValue="token"></v-slidebar>
<el-container> <el-container>
<div class="content" id="body-content"> <div class="content" id="body-content">
<transition name="router-fade" mode="out-in"> <transition name="router-fade" mode="out-in">
...@@ -14,18 +14,19 @@ ...@@ -14,18 +14,19 @@
</transition> </transition>
<v-footer></v-footer> <v-footer></v-footer>
</div> </div>
</el-container> </el-container>
</div> </div>
</template> </template>
<script> <script>
import VHeader from './views/layout/header.vue' import VHeader from './views/layout/header.vue'
import VSlidebar from './views/layout/slidebar.vue' import VSlidebar from './views/layout/slidebar.vue'
import VFooter from './views/layout/footer.vue' import VFooter from './views/layout/footer.vue'
let vm = null import { base64decode, isNotEmptyUtils, getUrlParamsMap } from "./utils/utils.js"
export default { import { mapActions, mapGetters } from 'vuex'
import { getLoginUrl } from './utils/index.js'
let vm = null
export default {
components:{ components:{
VHeader, VHeader,
VSlidebar, VSlidebar,
...@@ -33,18 +34,51 @@ ...@@ -33,18 +34,51 @@
}, },
data() { data() {
return { return {
idType: 0,
token: '',
userName: '',
portrait: '',
authList: {}
} }
}, },
computed:{
...mapGetters([
'_token'
])
},
created() { created() {
vm = this vm = this
vm.getToken()
}, },
mounted() { mounted() {
setInterval(function(){ // setInterval(function(){
vm.pushMessage() // vm.pushMessage()
},60000) // },60000)
}, },
methods: { 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)
},
// 实时消息推送 // 实时消息推送
pushMessage() { pushMessage() {
vm.$notify({ vm.$notify({
...@@ -52,10 +86,36 @@ ...@@ -52,10 +86,36 @@
message: '这是一条警告的提示消息', message: '这是一条警告的提示消息',
type: 'warning' 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> </script>
<style lang="scss"> <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 = { export const _token = state => state._token
userInfo: state => state.sousuo.userInfo, export const idType = state => state.idType
statusBarHeight: state => state.sousuo.statusBarHeight,
}
export default getters
import Vue from 'vue' import Vue from 'vue'
import Vuex from 'vuex' import Vuex from 'vuex'
import lecturer from './modules/lecturer' import * as actions from './actions'
import getters from './getters' import * as getters from './getters'
import state from './state'
import mutations from './mutations'
Vue.use(Vuex) Vue.use(Vuex)
const store = new Vuex.Store({ export default new Vuex.Store({
modules: { actions,
lecturer getters,
}, state,
getters 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{ ...@@ -125,6 +125,7 @@ html,body{
.screenSet{ .screenSet{
// width: 163vh !important; // width: 163vh !important;
// height: 66vh !important; // height: 66vh !important;
height: 430px !important;
margin: 88px 30px 0px; margin: 88px 30px 0px;
overflow: auto; overflow: auto;
} }
...@@ -133,6 +134,7 @@ html,body{ ...@@ -133,6 +134,7 @@ html,body{
.screenSet{ .screenSet{
// width: 166vh !important; // width: 166vh !important;
// height: 78vh !important; // height: 78vh !important;
height: 800px !important;
overflow: auto; overflow: auto;
margin: 88px 30px 0px; margin: 88px 30px 0px;
} }
...@@ -173,12 +175,26 @@ html,body{ ...@@ -173,12 +175,26 @@ html,body{
top: 130px !important; 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; line-height: 40px;
background: #449284 !important; background: #449284 !important;
border: 1px solid #449284 !important; border: 1px solid #449284 !important;
...@@ -186,3 +202,20 @@ html,body{ ...@@ -186,3 +202,20 @@ html,body{
.el-pagination.is-background .el-pager li:not(.disabled).active { .el-pagination.is-background .el-pager li:not(.disabled).active {
background: #449284 !important; 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 = { ...@@ -19,42 +19,52 @@ export const envConfig = {
qiniuUrl: "http://localhost:10201/contents/admin/qiniu/token", qiniuUrl: "http://localhost:10201/contents/admin/qiniu/token",
qiniuFileUrl: "http://localhost:10201/contents/admin/qiniu/token1", qiniuFileUrl: "http://localhost:10201/contents/admin/qiniu/token1",
qiniuResourceUrl: "https://test1-videos.yunqueyi.com", 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: { dev: {
baseUrl: 'https://dev-sc.yunqueyi.com/portal', baseUrl: 'https://dev-sc.yunqueyi.com/portal/',
apiUrl: 'https://dev-api.yunqueyi.com/', apiUrl: 'https://dev-api.yunqueyi.com/',
webPageUrl: 'https://dev-phome.yunqueyi.com/', webPageUrl: 'https://dev-phome.yunqueyi.com/',
qiniuUrl: "http://localhost:11905/contents/admin/qiniu/token", qiniuUrl: "http://localhost:11905/contents/admin/qiniu/token",
qiniuFileUrl: "http://localhost:11905/contents/admin/qiniu/token1", qiniuFileUrl: "http://localhost:11905/contents/admin/qiniu/token1",
qiniuResourceUrl: "https://test1-videos.yunqueyi.com", 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: { test: {
baseUrl: 'https://test1-sc.yunqueyi.com/portal', baseUrl: 'https://test1-sc.yunqueyi.com/portal/',
apiUrl: 'https://test1-api.yunqueyi.com/', apiUrl: 'https://test1-api.yunqueyi.com/',
webPageUrl: 'https://test1-phome.yunqueyi.com/', webPageUrl: 'https://test1-phome.yunqueyi.com/',
qiniuUrl: "https://test1-sc.yunqueyi.com/contents/admin/qiniu/token", qiniuUrl: "https://test1-sc.yunqueyi.com/contents/admin/qiniu/token",
qiniuFileUrl: "https://test1-sc.yunqueyi.com/contents/admin/qiniu/token1", qiniuFileUrl: "https://test1-sc.yunqueyi.com/contents/admin/qiniu/token1",
qiniuResourceUrl: "https://test1-videos.yunqueyi.com", 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: { uat: {
baseUrl: 'https://uat-sc.yunqueyi.com/portal', baseUrl: 'https://uat-sc.yunqueyi.com/portal/',
apiUrl: 'https://uat-api.yunqueyi.com/', apiUrl: 'https://uat-api.yunqueyi.com/',
webPageUrl: 'https://uat-phome.yunqueyi.com/', webPageUrl: 'https://uat-phome.yunqueyi.com/',
qiniuUrl: "https://uat-sc.yunqueyi.com/contents/admin/qiniu/token", qiniuUrl: "https://uat-sc.yunqueyi.com/contents/admin/qiniu/token",
qiniuFileUrl: "https://uat-sc.yunqueyi.com/contents/admin/qiniu/token1", qiniuFileUrl: "https://uat-sc.yunqueyi.com/contents/admin/qiniu/token1",
qiniuResourceUrl: "https://videos.yunqueyi.com", // 视频 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: { pro: {
baseUrl: 'https://sc.yunqueyi.com/portal', baseUrl: 'https://sc.yunqueyi.com/portal/',
apiUrl: 'https://api.yunqueyi.com/', apiUrl: 'https://api.yunqueyi.com/',
webPageUrl: 'https://phome.yunqueyi.com/', webPageUrl: 'https://phome.yunqueyi.com/',
qiniuUrl: "https://sc.yunqueyi.com/contents/admin/qiniu/token", qiniuUrl: "https://sc.yunqueyi.com/contents/admin/qiniu/token",
qiniuFileUrl: "https://sc.yunqueyi.com/contents/admin/qiniu/token1", qiniuFileUrl: "https://sc.yunqueyi.com/contents/admin/qiniu/token1",
qiniuResourceUrl: "https://videos.yunqueyi.com", 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({ ...@@ -11,8 +11,12 @@ const service = axios.create({
// request拦截器 // request拦截器
service.interceptors.request.use(config => { service.interceptors.request.use(config => {
if(config.data && config.data.token) {
localStorage.setItem('storageToken',config.data.token)
}
config.headers['sysCode'] = 12 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' }) 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) { // if (config.data && config.data.setEntry) {
// config.headers['sysCode'] = config.data.sysCode || 10 // config.headers['sysCode'] = config.data.sysCode || 10
......
...@@ -125,6 +125,7 @@ const vueFilter = { ...@@ -125,6 +125,7 @@ const vueFilter = {
return '已禁用' return '已禁用'
} }
}, },
//项目管理
statusProject: (value) => { statusProject: (value) => {
if(value == 1) { if(value == 1) {
return '草稿' return '草稿'
...@@ -139,6 +140,18 @@ const vueFilter = { ...@@ -139,6 +140,18 @@ const vueFilter = {
}else { }else {
return '已拒绝' 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 export default vueFilter
\ No newline at end of file
...@@ -164,6 +164,14 @@ export function getQiniuToken1() { ...@@ -164,6 +164,14 @@ export function getQiniuToken1() {
return getConfigByEnvType('qiniuFileUrl') return getConfigByEnvType('qiniuFileUrl')
} }
// 登录URL
export function getLoginUrl() {
return getConfigByEnvType('loginUrl')
}
export function getInnerLoginUrl() {
return getConfigByEnvType('innerLoginUrl')
}
// 七牛上传视频和图片 // 七牛上传视频和图片
export function uploadVideo() { export function uploadVideo() {
return getConfigByEnvType('qiniuResourceUrl') return getConfigByEnvType('qiniuResourceUrl')
......
...@@ -146,6 +146,7 @@ module.exports = { ...@@ -146,6 +146,7 @@ module.exports = {
GET(api, para, callback,str) { GET(api, para, callback,str) {
// para.token = para.token || this.token || "343BCABC890349ACAF357FA79122F9FE" // para.token = para.token || this.token || "343BCABC890349ACAF357FA79122F9FE"
let url = api + this.getUrlPara(para) let url = api + this.getUrlPara(para)
url = encodeURI(url);
return fetch({ return fetch({
url: getBaseUrl(url), url: getBaseUrl(url),
method: 'get', method: 'get',
...@@ -153,6 +154,17 @@ module.exports = { ...@@ -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请求
POST(api, para, callback) { POST(api, para, callback) {
// para.token = para.token || this.token || "343BCABC890349ACAF357FA79122F9FE" // para.token = para.token || this.token || "343BCABC890349ACAF357FA79122F9FE"
......
...@@ -31,11 +31,22 @@ export function isvalidUsername(str) { ...@@ -31,11 +31,22 @@ export function isvalidUsername(str) {
return reg.test(str) return reg.test(str)
} }
// 2-150个中文 // 2-150个中英文字符
export function validateWord150(str) { export function validateWord150(rule, value, callback, message) {
const reg = /^[\u4e00-\u9fa5]{2,150}$/ if(!/^[\u4e00-\u9fffa-zA-Z]{2,150}$/.test(value)) {
return reg.test(str) 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位) */ /* 通用密码验证(数字、字母、下划线或特殊字符且长度为0-150位) */
export function isValidPassword(rule, value, callback, message) { export function isValidPassword(rule, value, callback, message) {
if (!/^(?:\d+|[a-zA-Z]+|[!@#$%^&*]+){0,150}$/.test(value)) { if (!/^(?:\d+|[a-zA-Z]+|[!@#$%^&*]+){0,150}$/.test(value)) {
......
<template> <template>
<div> <div class="blank-wrap screenSet">
很抱歉,您暂时还没开通工作站功能 <div class="blank-content">
<img src="../assets/image/no-content.png"/>
<p>很抱歉,您暂时还没开通工作站功能</p>
</div>
</div> </div>
</template> </template>
<script> <script>
...@@ -8,8 +11,30 @@ export default { ...@@ -8,8 +11,30 @@ export default {
} }
</script> </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> </style>
<template> <template>
<div class="add-manager-wrap"> <div class="add-manager-wrap">
<bread-crumb :curmbFirst="curmbFirst" :curmbSecond="curmbSecond"></bread-crumb> <bread-crumb :curmbFirst="curmbFirst" :curmbSecond="curmbSecond"></bread-crumb>
<div class="add-content screenSet">
<el-row class="step-content"> <el-row class="step-content">
<el-col :span="14"> <el-col :span="14">
<el-steps :active="active" simple class> <el-steps :active="active" simple class>
...@@ -22,28 +23,19 @@ ...@@ -22,28 +23,19 @@
<el-form ref="formData" :model="formData" :rules="rules" label-width="150px"> <el-form ref="formData" :model="formData" :rules="rules" label-width="150px">
<el-form-item label="项目名称:" prop="projectName"> <el-form-item label="项目名称:" prop="projectName">
<el-col :span="13"> <el-col :span="13">
<el-input v-model="formData.projectName" placeholder="请输入项目名称"></el-input> <el-input size="mini" v-model="formData.projectName" placeholder="请输入项目名称"></el-input>
</el-col> </el-col>
</el-form-item> </el-form-item>
<el-form-item label="项目时间:" required> <el-form-item label="项目时间:" required>
<el-col :span="6"> <el-col :span="6">
<el-form-item prop="projectBegintime"> <el-form-item prop="duringTime">
<el-date-picker <el-date-picker
type="date" size="mini"
placeholder="请选择项目时间" type="daterange"
v-model="formData.projectBegintime" start-placeholder="请选择项目开始时间"
style="width: 100%;" end-placeholder="请选择项目结束时间"
></el-date-picker> v-model="formData.duringTime"
</el-form-item> value-format="yyyy-MM-dd HH:mm:ss"
</el-col>
<el-col :span="1">&nbsp;&nbsp;&nbsp; ~</el-col>
<el-col :span="6">
<el-form-item prop="projectEndtime">
<el-date-picker
type="date"
placeholder="请选择项目时间"
v-model="formData.projectEndtime"
style="width: 100%;"
></el-date-picker> ></el-date-picker>
</el-form-item> </el-form-item>
</el-col> </el-col>
...@@ -51,6 +43,7 @@ ...@@ -51,6 +43,7 @@
<el-form-item label="项目简介:" prop="projectIntro"> <el-form-item label="项目简介:" prop="projectIntro">
<el-col :span="13"> <el-col :span="13">
<el-input <el-input
size="mini"
type="textarea" type="textarea"
:autosize="{ minRows: 5}" :autosize="{ minRows: 5}"
placeholder="请输入项目简介" placeholder="请输入项目简介"
...@@ -58,7 +51,7 @@ ...@@ -58,7 +51,7 @@
></el-input> ></el-input>
</el-col> </el-col>
</el-form-item> </el-form-item>
<el-form-item label="列表图片:"> <el-form-item label="列表图片:" prop="attachmentUrl1">
<el-upload <el-upload
v-model="formData.attachmentUrl1" v-model="formData.attachmentUrl1"
class="bg-uploader" class="bg-uploader"
...@@ -67,22 +60,26 @@ ...@@ -67,22 +60,26 @@
:before-upload="beforeUploadListPic" :before-upload="beforeUploadListPic"
> >
<img v-if="formData.attachmentUrl1" :src="formData.attachmentUrl1" class="bg-img"> <img v-if="formData.attachmentUrl1" :src="formData.attachmentUrl1" class="bg-img">
<img v-if="!formData.attachmentUrl1" class="bg-img" src="../../assets/image/small.png"> <img
<i v-else class="el-icon-plus avatar-uploader-icon"></i> v-if="!formData.attachmentUrl1"
class="bg-img"
src="../../assets/image/small.png"
>
<!-- <i v-else class="el-icon-plus avatar-uploader-icon"></i> -->
<div class="limit-text"> <div class="limit-text">
<p>尺寸大小:750*420</p> <p>尺寸:48*48</p>
<p>限制大小: 2.0 Mb</p> <p>限制大小: 500Kb</p>
<p>支持.jpg,.png格式</p> <p>支持.jpg,.png格式</p>
</div> </div>
</el-upload> </el-upload>
</el-form-item> </el-form-item>
<el-form-item label="封面类型:"> <el-form-item label="封面类型:">
<el-radio-group v-model="formData.type"> <el-radio-group size="mini" v-model="formData.type">
<el-radio :label="1">图片</el-radio> <el-radio :label="1">图片</el-radio>
<el-radio :label="2">视频</el-radio> <el-radio :label="2">视频</el-radio>
</el-radio-group> </el-radio-group>
</el-form-item> </el-form-item>
<el-form-item label="封面图片:"> <el-form-item label="封面图片(视频):" prop="attachmentUrl2">
<el-upload <el-upload
v-model="formData.attachmentUrl2" v-model="formData.attachmentUrl2"
class="bg-uploader" class="bg-uploader"
...@@ -91,10 +88,14 @@ ...@@ -91,10 +88,14 @@
:before-upload="beforeUploadCoverPic" :before-upload="beforeUploadCoverPic"
> >
<img v-if="formData.attachmentUrl2" :src="formData.attachmentUrl2" class="bg-img"> <img v-if="formData.attachmentUrl2" :src="formData.attachmentUrl2" class="bg-img">
<img v-if="!formData.attachmentUrl2" class="bg-img" src="../../assets/image/small.png"> <img
<i v-else class="el-icon-plus avatar-uploader-icon"></i> v-if="!formData.attachmentUrl2"
class="bg-img"
src="../../assets/image/small.png"
>
<!-- <i v-else class="el-icon-plus avatar-uploader-icon"></i> -->
<div class="limit-text"> <div class="limit-text">
<p>尺寸大小:750*420</p> <p>尺寸:750*420</p>
<p>限制大小: 2.0 Mb</p> <p>限制大小: 2.0 Mb</p>
<p>支持.jpg,.png格式</p> <p>支持.jpg,.png格式</p>
</div> </div>
...@@ -106,9 +107,12 @@ ...@@ -106,9 +107,12 @@
v-model="formData.attachmentUrl3" v-model="formData.attachmentUrl3"
class="upload-pdf" class="upload-pdf"
action="#" action="#"
:on-preview="handlePreview"
:on-remove="handleRemove"
:before-upload="beforeUploadPDF" :before-upload="beforeUploadPDF"
:on-change="handleChange"
:before-remove="beforeRemove"
multiple multiple
:limit="3"
:on-exceed="handleExceed" :on-exceed="handleExceed"
:file-list="fileList" :file-list="fileList"
> >
...@@ -149,27 +153,35 @@ ...@@ -149,27 +153,35 @@
<el-tab-pane label="设定机构" name="second"> <el-tab-pane label="设定机构" name="second">
<el-form :inline="true" :model="formOrganization" class="demo-form-inline"> <el-form :inline="true" :model="formOrganization" class="demo-form-inline">
<el-form-item label> <el-form-item label>
<el-input v-model="formOrganization.name" placeholder="请输入机构名称"></el-input> <el-input size="mini" v-model="formOrganization.name" placeholder="请输入机构名称"></el-input>
</el-form-item> </el-form-item>
<el-form-item label> <el-form-item label>
<el-select v-model="formOrganization.region" placeholder="全部地区"> <el-select size="mini" v-model="formOrganization.region" placeholder="全部地区">
<el-option label="全部地区" value></el-option> <el-option
<el-option label="区域一" value="shanghai"></el-option> v-for="(item, index) in organizationRegion"
<el-option label="区域二" value="beijing"></el-option> :key="index"
:label="item.label"
:value="item.id"
></el-option>
</el-select> </el-select>
</el-form-item> </el-form-item>
<el-form-item> <el-form-item>
<el-select v-model="formOrganization.grade" placeholder="全部医院级别"> <el-select size="mini" v-model="formOrganization.grade" placeholder="全部医院级别">
<el-option label="全部医院级别" value></el-option> <el-option
<el-option label="三家" value="3"></el-option> v-for="(item, index) in organizationRank"
<el-option label="二甲" value="2"></el-option> :key="index"
<el-option label="一甲" value="1"></el-option> :label="item.label"
:value="item.id"
></el-option>
</el-select> </el-select>
</el-form-item> </el-form-item>
<el-form-item> <el-form-item>
<el-button size="small" type="primary" @click="">搜索</el-button>
</el-form-item>
<el-form-item style="float:right;">
<el-button-group> <el-button-group>
<el-button type @click="checkAll(true)">选择全部</el-button> <el-button size="small" type="default" @click="checkAll(true,'multipleOrganization')">选择全部</el-button>
<el-button type @click="checkAll(false)">全部不选</el-button> <el-button size="small" type="default" @click="checkAll(false,'multipleOrganization')">全部不选</el-button>
</el-button-group> </el-button-group>
</el-form-item> </el-form-item>
</el-form> </el-form>
...@@ -183,30 +195,27 @@ ...@@ -183,30 +195,27 @@
> >
<el-table-column type="selection" width="55"></el-table-column> <el-table-column type="selection" width="55"></el-table-column>
<el-table-column prop="name" label="医院名称"></el-table-column> <el-table-column prop="name" label="医院名称"></el-table-column>
<el-table-column prop="grade" label="医院级别"></el-table-column> <el-table-column prop="hospitalLevel" label="医院级别"></el-table-column>
<el-table-column prop="province" label="所属省份"></el-table-column> <el-table-column prop="provinceName" label="所属省份"></el-table-column>
<el-table-column prop="city" label="所属城市"></el-table-column> <el-table-column prop="cityName" label="所属城市"></el-table-column>
<el-table-column prop="district" label="所属区县"></el-table-column> <el-table-column prop="countyName" label="所属区县"></el-table-column>
<el-table-column prop="street" label="所属街道"></el-table-column> <el-table-column prop="townName" label="所属街道"></el-table-column>
</el-table> </el-table>
<div class="pagination">
<el-pagination <el-pagination
background
@size-change="handleSizeOrganization" @size-change="handleSizeOrganization"
@current-change="handleCurrentOrganization" @current-change="handleCurrentOrganization"
:current-page="currentOrganization" :current-page="formOrganization.pageNum"
:page-sizes="[2, 3, 4]" :page-sizes="[10, 20, 40]"
:page-size="pageSizeOrganization" :page-size="formOrganization.pageSize"
layout="total, sizes, prev, pager, next, jumper" layout="total, sizes, prev, pager, next, jumper"
:total="totalOrganization" :total="totalOrganization"
></el-pagination> ></el-pagination>
</div>
</el-tab-pane> </el-tab-pane>
<el-tab-pane label="设定科室" name="third"> <el-tab-pane label="设定科室" name="third">
<el-col :span="8"> <el-col :span="8">
<el-select v-model="formDepartment.grade" placeholder="全部医院级别">
<el-option label="全部医院级别" value></el-option>
<el-option label="三家" value="3"></el-option>
<el-option label="二甲" value="2"></el-option>
<el-option label="一甲" value="1"></el-option>
</el-select>
<el-table <el-table
class="department" class="department"
ref="multipleDepartment" ref="multipleDepartment"
...@@ -223,20 +232,34 @@ ...@@ -223,20 +232,34 @@
<el-tab-pane label="设定人员" name="fourth"> <el-tab-pane label="设定人员" name="fourth">
<el-form :inline="true" :model="formPersonnel" class="demo-form-inline"> <el-form :inline="true" :model="formPersonnel" class="demo-form-inline">
<el-form-item label> <el-form-item label>
<el-select v-model="formPersonnel.hospital" placeholder="全部医院"> <el-select size="mini" v-model="formPersonnel.hospital" placeholder="全部医院">
<el-option label="全部医院" value></el-option> <el-option
<el-option label="上海第一人民医院" value="shanghai"></el-option> v-for="(item, index) in organizationRank"
<el-option label="北京医院" value="beijing"></el-option> :key="index"
:label="item.label"
:value="item.id"
></el-option>
</el-select> </el-select>
</el-form-item> </el-form-item>
<el-form-item> <el-form-item>
<el-select v-model="formPersonnel.department" placeholder="全部部门"> <el-select size="mini" v-model="formPersonnel.department" placeholder="全部部门">
<el-option label="全部部门" value></el-option> <el-option
<el-option label="内科" value="3"></el-option> v-for="(item, index) in organizationRank"
<el-option label="外科" value="2"></el-option> :key="index"
<el-option label="心内科" value="1"></el-option> :label="item.label"
:value="item.id"
></el-option>
</el-select> </el-select>
</el-form-item> </el-form-item>
<el-form-item>
<el-button size="small" type="primary" @click="getPeople">搜索</el-button>
</el-form-item>
<el-form-item style="float:right;">
<el-button-group>
<el-button size="small" type="default" @click="checkAll(true,'multiplePerson')">选择全部</el-button>
<el-button size="small" type="default" @click="checkAll(false,'multiplePerson')">全部不选</el-button>
</el-button-group>
</el-form-item>
</el-form> </el-form>
<el-table <el-table
class="rim" class="rim"
...@@ -248,21 +271,24 @@ ...@@ -248,21 +271,24 @@
> >
<el-table-column type="selection" width="55"></el-table-column> <el-table-column type="selection" width="55"></el-table-column>
<el-table-column prop="name" label="人员名称"></el-table-column> <el-table-column prop="name" label="人员名称"></el-table-column>
<el-table-column prop="hospital" label="所属医院"></el-table-column> <el-table-column prop="hospitalName" label="所属医院"></el-table-column>
<el-table-column prop="department" label="所属部门"></el-table-column> <el-table-column prop="departmentName" label="所属部门"></el-table-column>
<el-table-column prop="province" label="所属省份"></el-table-column> <el-table-column prop="provinceName" label="所属省份"></el-table-column>
<el-table-column prop="city" label="所属城市"></el-table-column> <el-table-column prop="cityName" label="所属城市"></el-table-column>
<el-table-column prop="district" label="所属区县" show-overflow-tooltip></el-table-column> <el-table-column prop="countyName" label="所属区县" show-overflow-tooltip></el-table-column>
</el-table> </el-table>
<div class="pagination">
<el-pagination <el-pagination
background
@size-change="handleSizePerson" @size-change="handleSizePerson"
@current-change="handleCurrentPerson" @current-change="handleCurrentPerson"
:current-page="currentPerson" :current-page="formPersonnel.pageNum"
:page-sizes="[2, 3, 4]" :page-sizes="[10, 20, 40]"
:page-size="pageSizePerson" :page-size="formPersonnel.pageSize"
layout="total, sizes, prev, pager, next, jumper" layout="total, sizes, prev, pager, next, jumper"
:total="totalPerson" :total="totalPerson"
></el-pagination> ></el-pagination>
</div>
</el-tab-pane> </el-tab-pane>
</el-tabs> </el-tabs>
</div> </div>
...@@ -310,9 +336,13 @@ ...@@ -310,9 +336,13 @@
<el-radio :label="2"></el-radio> <el-radio :label="2"></el-radio>
</el-radio-group> </el-radio-group>
</el-form-item> </el-form-item>
<el-form-item v-show="formComponent.configure == 1" label="选择证书:" prop="certificate"> <el-form-item v-show="formComponent.configure == 1" label="选择证书:" >
<el-col :span="20"> <el-col :span="20">
<el-select v-model="formComponent.certificate" placeholder="请选择证书" style="width: 350px"> <el-select
v-model="formComponent.certificate"
placeholder="请选择证书"
style="width: 350px"
>
<el-option <el-option
v-for="item in optionsCertificate" v-for="item in optionsCertificate"
:key="item.value" :key="item.value"
...@@ -325,6 +355,7 @@ ...@@ -325,6 +355,7 @@
</el-form> </el-form>
</div> </div>
</div> </div>
</div>
</template> </template>
<script> <script>
import BreadCrumb from "../../components/breadcrumb.vue"; import BreadCrumb from "../../components/breadcrumb.vue";
...@@ -369,20 +400,16 @@ export default { ...@@ -369,20 +400,16 @@ export default {
projectName: "", projectName: "",
projectBegintime: "", projectBegintime: "",
projectEndtime: "", projectEndtime: "",
duringTime: "",
projectIntro: "", projectIntro: "",
type: 1, type: 1,
attachmentUrl1: "", attachmentUrl1: "",
attachmentUrl2: "", attachmentUrl2: "",
attachmentUrl3: "" attachmentUrl3: ""
}, },
fileList: [ fileList: [],
{
name: "food.jpeg",
url:
"https://fuss10.elemecdn.com/3/63/4e7f3a15429bfda99bce42a18cdd1jpeg.jpeg"
}
],
//设定行政范围 数据 //设定行政范围 数据
updatedTree: false,
treeProp: { treeProp: {
label: "name", label: "name",
children: "zones", children: "zones",
...@@ -399,8 +426,24 @@ export default { ...@@ -399,8 +426,24 @@ export default {
name: "", name: "",
region: "", region: "",
grade: "", grade: "",
chechAll: true chechAll: true,
pageNum: 1,
pageSize: 10,
}, },
organizationRegion: [{
id:'100',
label: '上海',
},{
id:'101',
label: '北京',
}],
organizationRank: [{
id:'1',
label: '一甲',
},{
id:'2',
label: '二甲',
}],
hasOrganizationInit: false, hasOrganizationInit: false,
//tableOrganization: Array(10).fill(itemOrganization), //tableOrganization: Array(10).fill(itemOrganization),
tableOrganization: new Array(), tableOrganization: new Array(),
...@@ -412,28 +455,25 @@ export default { ...@@ -412,28 +455,25 @@ export default {
formDepartment: { formDepartment: {
grade: "" grade: ""
}, },
tableDepartment: [ tableDepartment: [],
{ name: "全科" },
{ name: "内科" },
{ name: "外科" },
{ name: "心内科" },
{ name: "内分泌科" }
],
//设定人员 数据 //设定人员 数据
formPersonnel: { formPersonnel: {
hospital: "", hospital: "",
department: "" department: "",
pageNum: 1,
pageSize: 10,
}, },
tablePerson: new Array(), tablePerson: new Array(),
currentPerson: 1, currentPerson: 1,
pageSizePerson: 2, pageSizePerson: 2,
totalPerson: 10, totalPerson: 10,
//选择项目组件 数据 //选择项目组件 数据
optionsComponent: [], optionsComponent: [],
optionsCertificate: [], optionsCertificate: [],
formComponent: { formComponent: {
component: [], component: [],
configure: 1, configure: 2,
certificate: "" certificate: ""
}, },
tagsComponent: [], tagsComponent: [],
...@@ -456,6 +496,13 @@ export default { ...@@ -456,6 +496,13 @@ export default {
trigger: "blur" trigger: "blur"
} }
], ],
duringTime: [
{
required: true,
message: "请选择时间",
trigger: "change"
}
],
projectBegintime: [ projectBegintime: [
{ {
type: "date", type: "date",
...@@ -485,49 +532,24 @@ export default { ...@@ -485,49 +532,24 @@ export default {
], ],
projectIntro: [ projectIntro: [
{ required: true, message: "请填写活动形式", trigger: "blur" } { required: true, message: "请填写活动形式", trigger: "blur" }
] ],
}, attachmentUrl1: [
pickerOptions: { { required: true, message: "请选择列表图片", trigger: "blur" }
shortcuts: [ ],
{ attachmentUrl2: [
text: "最近一周", { required: true, message: "请选择封面", trigger: "blur" }
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]);
}
}
] ]
} }
}; };
}, },
created() { created() {
vm = this; vm = this;
this.editManager();
this.changeOnStep(this.active); this.changeOnStep(this.active);
this.initOrganization();
this.initPerson();
this.$nextTick(function() { this.$nextTick(function() {
this.getComponentInfo(); this.getComponentInfo();
this.getDepartment();
}); });
}, },
methods: { methods: {
...@@ -536,7 +558,7 @@ export default { ...@@ -536,7 +558,7 @@ export default {
let flag = null; let flag = null;
this.$refs[formName].validate(valid => { this.$refs[formName].validate(valid => {
if (valid) { if (valid) {
console.log("success"); //console.log("success");
flag = true; flag = true;
} else { } else {
console.log("error submit!!"); console.log("error submit!!");
...@@ -549,13 +571,68 @@ export default { ...@@ -549,13 +571,68 @@ export default {
resetForm(formName) { resetForm(formName) {
this.$refs[formName].resetFields(); this.$refs[formName].resetFields();
}, },
//设置编辑数据
setEditData(editData) {
//console.log(editData);
//设置基础信息页
this.formData = {
id: vm.getUrlSearch(window.location.href, "projectId"),
projectName: editData.projectData.projectName,
projectBegintime: editData.projectData.projectBegintime,
projectEndtime: editData.projectData.projectBegintime,
duringTime: [
editData.projectData.projectBegintime,
editData.projectData.projectBegintime
],
projectIntro: editData.projectData.projectIntro,
type: editData.attachmentData[1].attachmentType,
attachmentUrl1: editData.attachmentData[0].attachmentUrl,
attachmentUrl2: editData.attachmentData[1].attachmentUrl,
attachmentUrl3: ""
};
if (editData.attachmentData.length > 2) {
for (let i = 2; i < editData.attachmentData.length; i++) {
let pdfItem = {
name: editData.attachmentData[i].attachmentName,
url: editData.attachmentData[i].attachmentUrl
};
vm.fileList.push(pdfItem);
}
}
//设置选择项目组件页
let componentEdit = [];
let certificateEdit = 0;
for(let i = 0;i<editData.componentData.length;i++) {
componentEdit.push(editData.componentData[i].id);
}
this.formComponent.component = componentEdit;
if(editData.certificateData.length > 0) {
this.formComponent.configure = 1;
this.formComponent.certificate = editData.componentData[0].id;
}
},
//编辑管理
editManager(data) {
let req = {};
let projectId = vm.getUrlSearch(window.location.href, "projectId");
if (projectId != null && projectId != "") {
vm.GET("portalInfo/getProjectInfo/" + projectId, req).then(res => {
if (res.code == "000000" && res.data.projectData != null) {
let editData = res.data;
this.setEditData(editData);
} else {
console.log(res);
}
});
}
},
//编辑/更新 基础信息 //编辑/更新 基础信息
insertOrUpdate() { insertOrUpdate(option) {
//console.log(this.formData); //console.log(this.formData);
let projectModel = { let projectModel = {
projectName: this.formData.projectName, projectName: this.formData.projectName,
projectBegintime: Date.parse(this.formData.projectBegintime) / 1000, projectBegintime: this.formData.duringTime[0],
projectEndtime: Date.parse(this.formData.projectEndtime) / 1000, projectEndtime: this.formData.duringTime[1],
projectIntro: this.formData.projectIntro projectIntro: this.formData.projectIntro
}; };
let attachmentModel = [ let attachmentModel = [
...@@ -566,25 +643,40 @@ export default { ...@@ -566,25 +643,40 @@ export default {
seqNo: 1 seqNo: 1
}, },
{ {
attachmentType: 2, attachmentType: this.formData.type,
attachmentUrl: this.formData.attachmentUrl2, attachmentUrl: this.formData.attachmentUrl2,
kind: 2, kind: 2,
seqNo: 1 seqNo: 1
} }
]; ];
let attachmentPDFModel = [ let attachmentPDFModel = [];
{ // if (option == "add") {
for (let i = 0; i < vm.fileList.length; i++) {
let PDFModel = {
attachmentType: 3, attachmentType: 3,
attachmentUrl: this.formData.attachmentUrl3, attachmentName: vm.fileList[i].name,
attachmentUrl: vm.fileList[i].url,
kind: 3 kind: 3
};
attachmentPDFModel.push(PDFModel);
}
//}
if (option == "edit") {
//编辑
projectModel.id = this.formData.id;
for (let i = 0; i < attachmentModel.length; i++) {
attachmentModel[i].portalProjectId = this.formData.id;
}
for (let i = 0; i < attachmentPDFModel.length; i++) {
attachmentPDFModel[i].portalProjectId = this.formData.id;
}
} }
];
let postData = { let postData = {
projectModel: JSON.stringify(projectModel), projectModel: JSON.stringify(projectModel),
attachmentModel: JSON.stringify(attachmentModel), attachmentModel: JSON.stringify(attachmentModel),
attachmentPDFModel: JSON.stringify(attachmentPDFModel) attachmentPDFModel: JSON.stringify(attachmentPDFModel)
}; };
console.log(postData); //console.log(postData);
vm.POST("portalInfo/insertOrUpdate", postData).then(res => { vm.POST("portalInfo/insertOrUpdate", postData).then(res => {
if (res.code == "000000") { if (res.code == "000000") {
console.log(res); console.log(res);
...@@ -618,15 +710,27 @@ export default { ...@@ -618,15 +710,27 @@ export default {
} }
}); });
}, },
//项目组件信息 暂存/完成
componentDraft(type) { componentDraft(type) {
let param = { let param = {
componentIds: this.formComponent.component, componentIds: this.formComponent.component,
certificateId: this.formComponent.certificate, certificateId: this.formComponent.certificate,
projectId: 9, projectId: parseInt(vm.getUrlSearch(window.location.href, "projectId")),
type: type type: type
}; };
vm.POST("portalInfo/componentDraft", param).then(res => { vm.POST("portalInfo/componentDraft", param).then(res => {
console.log(res); console.log(res);
if(res.code == '000000') {
this.$notify({
title: "成功",
message: "项目创建成功"
});
} else {
this.$notify({
title: "",
message: res.message
});
}
}); });
}, },
//步骤style //步骤style
...@@ -635,6 +739,7 @@ export default { ...@@ -635,6 +739,7 @@ export default {
this.stepData = [true, false, false]; this.stepData = [true, false, false];
} else if (active == 1) { } else if (active == 1) {
this.stepData = [false, true, false]; this.stepData = [false, true, false];
this.initRange();
} else if (active == 2) { } else if (active == 2) {
this.stepData = [false, false, true]; this.stepData = [false, false, true];
} }
...@@ -682,13 +787,36 @@ export default { ...@@ -682,13 +787,36 @@ export default {
if (this.active == 0) { if (this.active == 0) {
let formName = "formData"; let formName = "formData";
let removeState = this.submitForm(formName); let removeState = this.submitForm(formName);
console.log("判断移动" + removeState); console.log("判断移动" + removeState);
if (removeState === true) { if (removeState === true) {
//校验名字
let projectId = vm.getUrlSearch(window.location.href, "projectId");
if (projectId == null) {
//新建
let param = {
projectName: this.formData.projectName
};
vm.GET("portalInfo/checkProjectName", param).then(res => {
if (res.code == "000000") {
//移动到第二页 选择范围 //移动到第二页 选择范围
this.insertOrUpdate(); this.insertOrUpdate("add");
this.active++; this.active++;
this.stepData = [false, true, false]; this.stepData = [false, true, false];
this.checkAllTable(); this.initRange();
//this.checkAllTable();
} else {
this.$message.error("项目名称" + res.message);
}
});
} else {
//编辑
this.insertOrUpdate("edit");
this.active++;
this.stepData = [false, true, false];
this.initRange();
}
} }
} else if (this.active == 1) { } else if (this.active == 1) {
let removeState = true; let removeState = true;
...@@ -706,26 +834,73 @@ export default { ...@@ -706,26 +834,73 @@ export default {
}, },
//上传列表图片 //上传列表图片
beforeUploadListPic(file) { beforeUploadListPic(file) {
this.beforeAvatarUpload(file); let fileLimit = {
width: 48,
height: 48,
size: 0.5,
sizeText: "500Kb",
key: "attachmentUrl1"
};
this.beforeAvatarUpload(file, fileLimit);
}, },
//上传封面图片 //上传封面图片
beforeUploadCoverPic(file) { beforeUploadCoverPic(file) {
this.beforeAvatarUpload(file); let fileLimit = {
width: 750,
height: 420,
size: 2,
sizeText: "2.0Mb",
key: "attachmentUrl2"
};
if (this.formData.type == 1) {
this.beforeAvatarUpload(file, fileLimit);
} else {
console.log(file);
}
}, },
//上传PDF //上传PDF
beforeUploadPDF(file) { beforeUploadPDF(file) {
console.log(file); console.log(file);
console.log(this.fileList);
const isPDF = file.type === "application/pdf";
if (!isPDF) {
this.$message.error("请上传PDF格式文件!");
} else {
doUpload(
vm,
file,
getFilePath(file, null),
"preview4",
"progress1",
1
).then(function(path) {
console.log(path);
let fileItem = {
name: path.name,
url: path.fullPath
};
vm.fileList.push(fileItem);
vm.$message.success("上传成功");
});
}
}, },
handleChange(file, fileList) {
//this.fileList3 = fileList.slice(-3);
},
//上传mp4
beforeUploadMp4(file) {},
//上传图片校验 //上传图片校验
beforeAvatarUpload(file) { beforeAvatarUpload(file, fileLimit) {
const isJPG = file.type === "image/jpeg"; const isJPG = file.type === "image/jpeg";
const isPNG = file.type === "image/png"; const isPNG = file.type === "image/png";
const isLt2M = file.size / 1024 / 1024 < 2; const isLt2M = file.size / 1024 / 1024 < fileLimit.size;
if (!isJPG && !isPNG) { if (!isJPG && !isPNG) {
this.$message.error("上传头像图片只能是 JPG 格式!"); this.$message.error("上传头像图片只能是 JPG 格式!");
} }
if (!isLt2M) { if (!isLt2M) {
this.$message.error("上传头像图片大小不能超过 2MB!"); this.$message.error(
"上传头像图片大小不能超过 " + fileLimit.sizeText + "!"
);
} }
let _img = new FileReader(); let _img = new FileReader();
_img.readAsDataURL(file); _img.readAsDataURL(file);
...@@ -734,8 +909,11 @@ export default { ...@@ -734,8 +909,11 @@ export default {
image.src = theFile.target.result; image.src = theFile.target.result;
image.onload = function() { image.onload = function() {
let _this = this; let _this = this;
if (_this.width != 750 || _this.height != 420) { if (
vm.$message.info("上传图片宽度不合适,请重新上传"); _this.width != fileLimit.width ||
_this.height != fileLimit.height
) {
vm.$message.info("上传图片长宽不合适,请重新上传");
} else { } else {
doUpload( doUpload(
vm, vm,
...@@ -745,7 +923,8 @@ export default { ...@@ -745,7 +923,8 @@ export default {
"progress1", "progress1",
1 1
).then(function(path) { ).then(function(path) {
vm.componentList.imageUrl = path.fullPath; console.log(path);
vm.formData[fileLimit.key] = path.fullPath;
vm.$message.success("上传成功"); vm.$message.success("上传成功");
}); });
} }
...@@ -754,10 +933,15 @@ export default { ...@@ -754,10 +933,15 @@ export default {
return isJPG && isLt2M; return isJPG && isLt2M;
}, },
handleRemove(file, fileList) { handleRemove(file, fileList) {
console.log(file, fileList); for (let i = 0; i < vm.fileList.length; i++) {
if (vm.fileList[i].name == file.name) {
vm.fileList.splice(i, 1);
console.log("删除" + i);
}
}
}, },
handlePreview(file) { handlePreview(file) {
console.log(file); //console.log(file);
}, },
handleExceed(files, fileList) { handleExceed(files, fileList) {
this.$message.warning( this.$message.warning(
...@@ -769,10 +953,45 @@ export default { ...@@ -769,10 +953,45 @@ export default {
beforeRemove(file, fileList) { beforeRemove(file, fileList) {
return this.$confirm(`确定移除 ${file.name}?`); return this.$confirm(`确定移除 ${file.name}?`);
}, },
//第二步 选择范围 初始化
initRange() {
let projectId = vm.getUrlSearch(window.location.href, "projectId");
if (projectId == null) {
//新建
} else {
//编辑
this.getAdministrative();
}
},
//查询行政范围(树)
getAdministrative() {
let req = {
projectId: 1
};
vm.GET("scope/v1/administrative", req).then(res => {
if (res.code == "000000") {
//console.log(res.data);
let administrativeAll = res.data.administrativeAll;
console.log(administrativeAll);
this.treeData = []
this.treeData[0] = administrativeAll;
}
});
},
//切换tab //切换tab
handleClick(tab, event) { handleClick(tab, event) {
//console.log(tab); let tabName = tab.name;
if(tabName == "second") {
//设定机构
this.getOrganization();
} else if(tabName == "third") {
//设定科室
} else if(tabName == "fourth") {
//设定人员
this.getPeople();
}
}, },
//列举选中地区 //列举选中地区
initCheckList(allSelectedKeys) { initCheckList(allSelectedKeys) {
this.tagsRegion = []; this.tagsRegion = [];
...@@ -874,6 +1093,7 @@ export default { ...@@ -874,6 +1093,7 @@ export default {
console.log(treeKeyList); console.log(treeKeyList);
this.$refs.tree.setCheckedKeys(treeKeyList); this.$refs.tree.setCheckedKeys(treeKeyList);
}, },
//删除label节点 同步树结构 //删除label节点 同步树结构
handleCloseTree(tag) { handleCloseTree(tag) {
this.tagsRegion.splice(this.tagsRegion.indexOf(tag), 1); this.tagsRegion.splice(this.tagsRegion.indexOf(tag), 1);
...@@ -882,13 +1102,13 @@ export default { ...@@ -882,13 +1102,13 @@ export default {
//改变 设定机构选项 //改变 设定机构选项
handleSelectionOrganization(val) { handleSelectionOrganization(val) {
this.multipleSelectionOrganization = val; this.multipleSelectionOrganization = val;
console.log(this.multipleSelectionOrganization); //console.log(this.multipleSelectionOrganization);
this.updatePerson(this.multipleSelectionOrganization); this.updatePerson(this.multipleSelectionOrganization);
}, },
//改变 table的check状态 //改变 table的check状态
handleSelectionChange(val) { handleSelectionChange(val) {
this.multipleSelection = val; this.multipleSelection = val;
console.log(this.multipleSelection); //console.log(this.multipleSelection);
}, },
//设定机构table全选 //设定机构table全选
checkAll(flag, name) { checkAll(flag, name) {
...@@ -899,30 +1119,74 @@ export default { ...@@ -899,30 +1119,74 @@ export default {
//this.$refs[name].clearSelection(); //this.$refs[name].clearSelection();
} }
}, },
//查询机构列表
getOrganization() {
let req = {
projectId: 1,
setKind:3,
scope: '000_110',
pageNum: this.formOrganization.pageNum,
pageSize: this.formOrganization.pageSize,
};
vm.GET("scope/v1/organization", req).then(res => {
if (res.code == "000000") {
console.log(res.data);
this.tableOrganization = res.data.organizationList;
this.$refs.multipleOrganization.toggleAllSelection();
}
});
},
//获取科室信息
getDepartment() {
let req = {
projectId: vm.getUrlSearch(window.location.href, "projectId")
};
vm.GET("scope/v1/department", req).then(res => {
if (res.code == "000000") {
this.tableDepartment = res.data.department;
}
});
},
//查询人员列表
getPeople() {
let req = {
projectId: 1,
setKindOfAdministrative: 3,
scopeOfAdministrative: '000_110',
setKindOfOrganization: 3,
scopeOfOrganization: '2|3|4|5|6|7',
setKindOfDepartment: 3,
scopeOfDepartment: 54,
pageNum: this.formPersonnel.pageNum,
pageSize: this.formPersonnel.pageSize,
};
vm.GET("scope/v1/people", req).then(res => {
if (res.code == "000000") {
console.log(res.code);
this.tablePerson = res.data.people;
this.totalPerson = res.data.total;
}
});
},
//机构table修改 //机构table修改
handleSizeOrganization(val) { handleSizeOrganization(val) {
console.log(`每页 ${val} 条`); console.log(`每页 ${val} 条`);
this.formOrganization.pageSize = val;
}, },
handleCurrentOrganization(val) { handleCurrentOrganization(val) {
console.log(`当前页: ${val}`); console.log(`当前页: ${val}`);
this.formOrganization.pageNum = val;
this.getOrganization();
}, },
//角色table修改 //角色table修改
handleSizePerson(val) { handleSizePerson(val) {
console.log(`每页 ${val} 条`); console.log(`每页 ${val} 条`);
this.formPersonnel.pageSize = val;
}, },
handleCurrentPerson(val) { handleCurrentPerson(val) {
console.log(`当前页: ${val}`); console.log(`当前页: ${val}`);
}, this.formPersonnel.pageNum = val;
//初始化机构数据 this.getPeople();
initOrganization() {
//console.log(returnData());
let data = returnData().tableOrganization;
this.tableOrganization = data;
},
//初始化设定人员数据
initPerson() {
let data = returnData().tablePerson;
this.tablePerson = data;
}, },
//行政范围改变更新设定机构和设定人员 //行政范围改变更新设定机构和设定人员
updateOrganizationAndPerson(allSelectedKeys) { updateOrganizationAndPerson(allSelectedKeys) {
...@@ -966,7 +1230,9 @@ export default { ...@@ -966,7 +1230,9 @@ export default {
</script> </script>
<style lang="scss"> <style lang="scss">
.add-manager-wrap { .add-manager-wrap {
.add-content {
background: #fff; background: #fff;
}
.rim { .rim {
border: 1px solid #dddddd; border: 1px solid #dddddd;
} }
......
...@@ -15,16 +15,18 @@ ...@@ -15,16 +15,18 @@
<el-step title="选择模块" :class="stepNum == 2 ? 'class-1-text' : 'class-2-text'"></el-step> <el-step title="选择模块" :class="stepNum == 2 ? 'class-1-text' : 'class-2-text'"></el-step>
</el-steps> </el-steps>
<div class="btn-container"> <div class="btn-container">
<el-button v-if="componentStatus == 1 || !componentStatus" type="default" size="small" @click="storageAndNext(1)">暂存</el-button> <el-button v-if="stepNum == 1 && (componentStatus == 1 || !componentStatus)" @click="storageAndNext(1)" type="default" size="small">暂存</el-button>
<el-button v-if="stepNum == 1" @click="storageAndNext(2)" type="primary" size="small" style="margin-left:0;">下一步</el-button> <el-button v-if="stepNum == 1" @click="storageAndNext(2)" type="primary" size="small" style="margin-left:0;">下一步</el-button>
<el-button v-if="stepNum == 2" @click="finishConponent" type="primary" size="small" style="margin-left:0;">完成</el-button> <el-button v-if="stepNum == 2 && (componentStatus == 1 || !componentStatus)" @click="finishConponent(1)" :disabled="resultFlag == 2" type="default" size="small">暂存</el-button>
<el-button v-if="stepNum == 2" @click="finishConponent(2)" :disabled="resultFlag == 2" type="primary" size="small" style="margin-left:0;">完成</el-button>
</div> </div>
</div> </div>
<div class="first-step" v-if="stepNum == 1"> <div class="first-step" v-if="stepNum == 1">
<el-form ref="basicInfoForm" class="basic-form" :model="portalComponent" :rules="isStorage ? basicStorageRule : basicRule" label-width="125px" label-suffix=":" size="mini" style="margin-bottom:30px;"> <el-form ref="basicInfoForm" class="basic-form" :model="portalComponent" :rules="rules" label-width="125px" label-suffix=":" size="mini" style="margin-bottom:30px;">
<el-form-item label="组件名称" prop="name"> <el-form-item label="组件名称" prop="name">
<el-input type="text" v-model="portalComponent.name" size="mini" placeholder="请输入组件名称" style="width:30%;"></el-input> <el-input type="text" v-model="portalComponent.name" @blur="componentName" size="mini" placeholder="请输入组件名称" style="width:30%;"></el-input>
<span class="word-num">0/20</span> <span class="word-num">0/20</span>
<p class="component-name" v-if="isStorage">输入组件名称</p>
</el-form-item> </el-form-item>
<el-form-item label="组件简介" prop="introduce"> <el-form-item label="组件简介" prop="introduce">
<el-input type="textarea" rows="4" cols="10" v-model="portalComponent.introduce" size="mini" placeholder="请输入组件简介" style="width:37%;"></el-input> <el-input type="textarea" rows="4" cols="10" v-model="portalComponent.introduce" size="mini" placeholder="请输入组件简介" style="width:37%;"></el-input>
...@@ -48,7 +50,7 @@ ...@@ -48,7 +50,7 @@
</el-form-item> </el-form-item>
<el-row> <el-row>
<el-col :span="6"> <el-col :span="6">
<el-form-item label="配置证书" prop="certificateId"> <el-form-item label="配置证书">
<el-radio-group v-model="certificateLable" @change="selectCertificate"> <el-radio-group v-model="certificateLable" @change="selectCertificate">
<el-radio label="是"></el-radio> <el-radio label="是"></el-radio>
<el-radio label="否"></el-radio> <el-radio label="否"></el-radio>
...@@ -82,21 +84,21 @@ ...@@ -82,21 +84,21 @@
</div> </div>
<div class="" v-if="stepNum == 2"> <div class="" v-if="stepNum == 2">
<div class="model-btn"> <div class="model-btn">
<el-button type="primary" size="small" @click="addModule">添加空白模块</el-button> <el-button v-if="idType == 1" type="primary" size="small" @click="addModule">添加空白模块</el-button>
<el-button type="primary" size="small" @click="addFromModule" style="margin-left:0;">从预设模块添加</el-button> <el-button type="primary" size="small" @click="addFromModule" style="margin-left:0;">从预设模块添加</el-button>
</div> </div>
<div class="tab-content"> <div class="tab-content">
<el-tabs type="card" v-model="firstTab" closable @tab-remove="removeTab"> <el-tabs type="card" v-model="firstTab" closable @tab-remove="removeTab">
<el-tab-pane v-for="(item,index) in componentList.moduleModelList" :key="index" :label="'模块' + parseInt(index + 1)" :name='"" + parseInt(index + 1)'> <el-tab-pane v-for="(item,index) in componentList.moduleModelList" :key="index" :label="'模块' + parseInt(index + 1)" :name='"" + parseInt(index + 1)'>
<div> <div>
<el-form ref="moduleForm" :model="item" :rules="rules" label-suffix=":" label-width="130px" style="width:100%;"> <el-form ref="moduleForm" :model="item" :rules="moduleRules" label-suffix=":" label-width="130px" style="width:100%;">
<el-row> <el-row>
<el-col :span="10"> <el-col :span="10">
<el-form-item label="模块名称" prop="name"> <el-form-item label="模块名称" prop="name">
<el-input v-model="item.name" size="mini" placeholder="请选择模块名称" style="width:288px;"></el-input> <el-input v-model="item.name" size="mini" placeholder="请选择模块名称" style="width:288px;"></el-input>
</el-form-item> </el-form-item>
</el-col> </el-col>
<el-col :span="10"> <el-col :span="10" v-if="idType == 1">
<el-form-item label="是否对外开放" prop="openFlag"> <el-form-item label="是否对外开放" prop="openFlag">
<el-radio-group v-model="item.openFlag" @change="selectIsOpen(index)" :disabled="item.moduleType == 2 || (componentId && item.openFlag == 2)"> <el-radio-group v-model="item.openFlag" @change="selectIsOpen(index)" :disabled="item.moduleType == 2 || (componentId && item.openFlag == 2)">
<el-radio :label="2" @change="moduleOpenChange"></el-radio> <el-radio :label="2" @change="moduleOpenChange"></el-radio>
...@@ -106,7 +108,7 @@ ...@@ -106,7 +108,7 @@
</el-col> </el-col>
</el-row> </el-row>
</el-form> </el-form>
<div class="template-btn"> <div class="template-btn" v-if="idType == 1">
<span class="word-size">添加一个模板</span> <span class="word-size">添加一个模板</span>
<el-button <el-button
:disabled="item.moduleType == 2 || (componentId && item.openFlag == 2)" :disabled="item.moduleType == 2 || (componentId && item.openFlag == 2)"
...@@ -118,60 +120,65 @@ ...@@ -118,60 +120,65 @@
style="margin-right:0px;">{{_item.name}}</el-button> style="margin-right:0px;">{{_item.name}}</el-button>
</div> </div>
<div v-for="(item1,index1) in item.templetModelList" :key="index1"> <div v-for="(item1,index1) in item.templetModelList" :key="index1">
<el-form ref="templateForm" :model="item1" :rules="templateRules" label-suffix=":" label-width="130px" style="width:100%;"> <el-form ref="templateForm" :model="item1" label-suffix=":" label-width="110px" style="width:100%;">
<div class="template-content"> <div class="template-content">
<div class="template-content-div"> <div class="template-content-div">
<div class="title"> <div class="title">
{{item1.name}} {{item1.name}}
<span v-if="item.moduleType == 1 && componentId && item.openFlag == 1"> <span v-if="item.moduleType == 1 && componentId && item.openFlag == 1">
变更顺序: 变更顺序:
<i class="el-icon-arrow-down" @click="sortUp(index,index1)"></i> <i class="el-icon-caret-bottom" @click="sortUp(index,index1)" style="font-size:17px;"></i>
<i class="el-icon-arrow-up" @click="sortDown(index,index1)"></i> <i class="el-icon-caret-top" @click="sortDown(index,index1)" style="font-size:17px;"></i>
<i class="el-icon-delete" @click="deleteTemplate(index,index1)" style="color:red;"></i> <i class="el-icon-delete" @click="deleteTemplate(index,index1)" style="color:red;"></i>
</span> </span>
</div> </div>
<div v-for="(item2,index2) in item1.partModelList" :key="index2"> <div v-for="(item2,index2) in item1.partModelList" :key="index2">
<!-- 考试 --> <!-- 考试 -->
<div v-if="item2.type == 1"> <div v-if="item2.type == 1">
<div class="partText" v-if="index2 > 0">{{item2.introduce}}</div>
<div v-for="(item3,index3) in item2.partContentModelList" :key="index3"> <div v-for="(item3,index3) in item2.partContentModelList" :key="index3">
<el-row> <el-row>
<el-col :span="10"> <el-col :span="10" class="item-icon">
<el-form-item label="考试名称" prop="content1"> <span class="require">*</span>
<el-input v-model="item3.content1" :disabled="item.moduleType == 2 || (componentId && item.openFlag == 2)" size="mini" placeholder="请输入考试名称" style="width:288px;"></el-input> <el-form-item label="考试名称">
<span v-if="item2.numFlag == 2 && index3 == 0 && item.moduleType == 1 && componentId && item.openFlag == 1"><i class="el-icon-circle-plus-outline" @click="addMatterCourse(index,index1,index2)" style="color:#0486FE;"></i></span> <el-input v-model="item3.content1" :disabled="item.moduleType == 2 || (componentId && item.openFlag == 2)" size="mini" maxlength='30' placeholder="请输入考试名称" style="width:288px;"></el-input>
<span v-if="item2.numFlag == 2 && index3 == 0 && item.moduleType == 1 && componentId && item.openFlag == 1"><i class="el-icon-circle-plus" @click="addMatterCourse(index,index1,index2)" style="color:#449284;"></i></span>
<span v-if="item2.numFlag == 2 && index3 > 0 && item.moduleType == 1 && componentId && item.openFlag == 1"><i class="el-icon-delete" @click="deleteMatterCourse(index,index1,index2,index3)" style="color:red;"></i></span> <span v-if="item2.numFlag == 2 && index3 > 0 && item.moduleType == 1 && componentId && item.openFlag == 1"><i class="el-icon-delete" @click="deleteMatterCourse(index,index1,index2,index3)" style="color:red;"></i></span>
</el-form-item> </el-form-item>
</el-col> </el-col>
<el-col :span="10"> <el-col :span="10" class="item-icon">
<el-form-item label="关联考试" prop="content2"> <span class="require">*</span>
<el-form-item label="关联考试">
<el-select v-model="item3.content2" @focus="examIDfocus(index,index1,index2,index3)" @change="changeExamID" :disabled="item.moduleType == 2 || (componentId && item.openFlag == 2)" size="mini" placeholder="请选择考试ID" style="width:288px;"> <el-select v-model="item3.content2" @focus="examIDfocus(index,index1,index2,index3)" @change="changeExamID" :disabled="item.moduleType == 2 || (componentId && item.openFlag == 2)" size="mini" placeholder="请选择考试ID" style="width:288px;">
<el-option <el-option
v-for="(itemTest,indexTest) in testIdSelect" v-for="(itemTest,indexTest) in testIdSelect"
:key="indexTest" :key="indexTest"
:label="itemTest.id" :label="itemTest.onlineExamName"
:value="itemTest.id"> :value="itemTest.id + ''">
</el-option> </el-option>
</el-select> </el-select>
</el-form-item> </el-form-item>
</el-col> </el-col>
</el-row> </el-row>
<el-row> <el-row>
<el-col :span="10"> <el-col :span="10" class="item-icon">
<el-form-item label="配置证书" prop="content3"> <span class="require">*</span>
<el-radio-group v-model="item3.content3" :disabled="item.moduleType == 2 || (componentId && item.openFlag == 2)"> <el-form-item label="配置证书">
<el-radio :label="item3.content3"></el-radio> <el-radio-group v-model="item3.certificateFlag" :disabled="item.moduleType == 2 || (componentId && item.openFlag == 2)">
<el-radio :label="item3.content3"></el-radio> <el-radio :label="2"></el-radio>
<el-radio :label="1"></el-radio>
</el-radio-group> </el-radio-group>
</el-form-item> </el-form-item>
</el-col> </el-col>
<el-col :span="10" v-if="item3.content3"> <el-col :span="10" v-if="item3.certificateFlag == 2" class="item-icon">
<el-form-item label="选择证书" prop="content3"> <span class="require">*</span>
<el-form-item label="选择证书">
<el-select v-model="item3.content3" :disabled="item.moduleType == 2 || (componentId && item.openFlag == 2)" size="mini" placeholder="请选择证书" style="width:288px;"> <el-select v-model="item3.content3" :disabled="item.moduleType == 2 || (componentId && item.openFlag == 2)" size="mini" placeholder="请选择证书" style="width:288px;">
<el-option <el-option
v-for="(itemCertificate,indexCertificate) in certificateIdSelect" v-for="(itemCertificate,indexCertificate) in certificateIdSelect"
:key="indexCertificate" :key="indexCertificate"
:label="itemCertificate.name" :label="itemCertificate.name"
:value="itemCertificate.id"> :value="itemCertificate.id + ''">
</el-option> </el-option>
</el-select> </el-select>
</el-form-item> </el-form-item>
...@@ -181,22 +188,25 @@ ...@@ -181,22 +188,25 @@
</div> </div>
<!-- 课程 --> <!-- 课程 -->
<div v-if="item2.type == 2"> <div v-if="item2.type == 2">
<div class="partText" v-if="index2 > 0">{{item2.introduce}}</div>
<el-row v-for="(item3,index3) in item2.partContentModelList" :key="index3"> <el-row v-for="(item3,index3) in item2.partContentModelList" :key="index3">
<el-col :span="10"> <el-col :span="10" class="item-icon">
<el-form-item label="课程名称" prop="content1"> <span class="require">*</span>
<el-input v-model="item3.content1" :disabled="item.moduleType == 2 || (componentId && item.openFlag == 2)" size="mini" placeholder="请输入课程名称" style="width:288px;"></el-input> <el-form-item label="课程名称">
<span v-if="item2.numFlag == 2 && index3 == 0 && item.moduleType == 1 && componentId && item.openFlag == 1"><i class="el-icon-circle-plus-outline" @click="addMatterCourse(index,index1,index2)" style="color:#0486FE;"></i></span> <el-input v-model="item3.content1" :disabled="item.moduleType == 2 || (componentId && item.openFlag == 2)" size="mini" maxlength='30' placeholder="请输入课程名称" style="width:288px;"></el-input>
<span v-if="item2.numFlag == 2 && index3 == 0 && item.moduleType == 1 && componentId && item.openFlag == 1"><i class="el-icon-circle-plus" @click="addMatterCourse(index,index1,index2)" style="color:#449284;"></i></span>
<span v-if="item2.numFlag == 2 && index3 > 0 && item.moduleType == 1 && componentId && item.openFlag == 1"><i class="el-icon-delete" @click="deleteMatterCourse(index,index1,index2,index3)" style="color:red;"></i></span> <span v-if="item2.numFlag == 2 && index3 > 0 && item.moduleType == 1 && componentId && item.openFlag == 1"><i class="el-icon-delete" @click="deleteMatterCourse(index,index1,index2,index3)" style="color:red;"></i></span>
</el-form-item> </el-form-item>
</el-col> </el-col>
<el-col :span="10"> <el-col :span="10" class="item-icon">
<el-form-item label="关联课程" prop="content2"> <span class="require">*</span>
<el-form-item label="关联课程">
<el-select v-model="item3.content2" @focus="courseIDfocus(index,index1,index2,index3)" @change="changeCourseID" :disabled="item.moduleType == 2 || (componentId && item.openFlag == 2)" size="mini" placeholder="请选择课程ID" style="width:288px;"> <el-select v-model="item3.content2" @focus="courseIDfocus(index,index1,index2,index3)" @change="changeCourseID" :disabled="item.moduleType == 2 || (componentId && item.openFlag == 2)" size="mini" placeholder="请选择课程ID" style="width:288px;">
<el-option <el-option
v-for="(itemCourse,indexCourse) in courseIdSelect" v-for="(itemCourse,indexCourse) in courseIdSelect"
:key="indexCourse" :key="indexCourse"
:label="itemCourse.id" :label="itemCourse.name"
:value="itemCourse.id"> :value="itemCourse.id + ''">
</el-option> </el-option>
</el-select> </el-select>
</el-form-item> </el-form-item>
...@@ -228,7 +238,7 @@ ...@@ -228,7 +238,7 @@
</el-form-item> </el-form-item>
</el-form> </el-form>
<div class="default-module" v-for="(item,index) in dialogData.templetModelList" :key="index"> <div class="default-module" v-for="(item,index) in dialogData.templetModelList" :key="index">
<el-form ref="dialogEmplateForm" :model="item" label-suffix=":" label-width="80px" style="width:100%;"> <el-form ref="dialogEmplateForm" label-suffix=":" label-width="80px" style="width:100%;">
<div class="dialog-template-content"> <div class="dialog-template-content">
<div v-for="(item1,index1) in item.partModelList" :key="index1"> <div v-for="(item1,index1) in item.partModelList" :key="index1">
<!-- 考试 --> <!-- 考试 -->
...@@ -236,14 +246,14 @@ ...@@ -236,14 +246,14 @@
<div v-for="(item2,index2) in item1.partContentModelList" :key="index2"> <div v-for="(item2,index2) in item1.partContentModelList" :key="index2">
<el-row> <el-row>
<el-col :span="10"> <el-col :span="10">
<el-form-item label="考试名称" prop="content1"> <el-form-item label="考试名称">
<span>{{item2.content1}}</span> <span>{{item2.content1}}</span>
</el-form-item> </el-form-item>
</el-col> </el-col>
</el-row> </el-row>
<el-row> <el-row>
<el-col :span="10"> <el-col :span="10">
<el-form-item label="配置证书" prop="name"> <el-form-item label="配置证书">
<span v-if="item1.content2"></span> <span v-if="item1.content2"></span>
<span v-else></span> <span v-else></span>
</el-form-item> </el-form-item>
...@@ -255,7 +265,7 @@ ...@@ -255,7 +265,7 @@
<div v-if="item1.type == 2"> <div v-if="item1.type == 2">
<el-row v-for="(item2,index2) in item1.partContentModelList" :key="index2"> <el-row v-for="(item2,index2) in item1.partContentModelList" :key="index2">
<el-col :span="10"> <el-col :span="10">
<el-form-item label="课程名称" prop="content1"> <el-form-item label="课程名称">
<span>{{item2.content1}}</span> <span>{{item2.content1}}</span>
</el-form-item> </el-form-item>
</el-col> </el-col>
...@@ -276,6 +286,8 @@ ...@@ -276,6 +286,8 @@
import BreadCrumb from '../../components/breadcrumb.vue' import BreadCrumb from '../../components/breadcrumb.vue'
import { doUpload, getFilePath } from "../../utils/qiniuUtil" import { doUpload, getFilePath } from "../../utils/qiniuUtil"
import { validateWord150 } from "../../utils/validate.js" import { validateWord150 } from "../../utils/validate.js"
import { mapGetters } from 'vuex'
import { openLoading, closeLoading, isNotEmptyUtils } from '../../utils/utils';
let vm = null let vm = null
// 判断组件是否重名 // 判断组件是否重名
let validateRepeatWord = function(rule, value, callback, message) { let validateRepeatWord = function(rule, value, callback, message) {
...@@ -285,9 +297,9 @@ let validateRepeatWord = function(rule, value, callback, message) { ...@@ -285,9 +297,9 @@ let validateRepeatWord = function(rule, value, callback, message) {
return return
} }
let req = { let req = {
token: 'C1C5360EEC754092B9EC244147B35BB7', token: vm._token,
name: value, name: value,
idType: 1 // 1内部 2外部 idType: vm.idType // 1内部 2外部
} }
if(vm.itemName != value) { if(vm.itemName != value) {
vm.GET('portalComponent/checkComponentName',req).then((res) => { vm.GET('portalComponent/checkComponentName',req).then((res) => {
...@@ -308,7 +320,7 @@ let validateRepeatWord = function(rule, value, callback, message) { ...@@ -308,7 +320,7 @@ let validateRepeatWord = function(rule, value, callback, message) {
let validateModuleName = function(rule, value, callback, message) { let validateModuleName = function(rule, value, callback, message) {
const reg = /^[\u4e00-\u9fa5]{2,20}$/ const reg = /^[\u4e00-\u9fa5]{2,20}$/
if(!reg.test(value)) { if(!reg.test(value)) {
callback(new Error(message)) callback(new Error('输入长度为2-20个中文'))
return return
} }
for(let i = 0;i<vm.componentList.moduleModelList.length;i++) { for(let i = 0;i<vm.componentList.moduleModelList.length;i++) {
...@@ -347,17 +359,18 @@ export default { ...@@ -347,17 +359,18 @@ export default {
courseIndex2: '', courseIndex2: '',
courseIndex3: '', courseIndex3: '',
stepNum: 1, stepNum: 1,
isStorage: true,
componentId: '', componentId: '',
componentStatus: '', componentStatus: '',
resultFlag: '',
isStorage: false,
dialogTitle: '选择模板', dialogTitle: '选择模板',
curmbFirst: '教培项目', curmbFirst: '教培项目',
curmbSecond: '项目组件', curmbSecond: '项目组件',
curmbThird: '新增项目组件', curmbThird: '新增项目组件',
jumPathThird: '/item-component', jumPathThird: '/item-component',
firstTab: '1', firstTab: '1',
hasCertificate: true, hasCertificate: false,
certificateLable: '', certificateLable: '',
portCertificateLable: '否', portCertificateLable: '否',
moduleIndex: '', moduleIndex: '',
editableTabs: [{ editableTabs: [{
...@@ -372,6 +385,7 @@ export default { ...@@ -372,6 +385,7 @@ export default {
dialogData: [], dialogData: [],
portalComponent: { portalComponent: {
idType: 1, idType: 1,
organizationId: '',
name: '', name: '',
id: '', id: '',
introduce: '', introduce: '',
...@@ -393,16 +407,7 @@ export default { ...@@ -393,16 +407,7 @@ export default {
selectResource: { selectResource: {
resourceModuleSelect: '' resourceModuleSelect: ''
}, },
basicStorageRule: { rules: {
"name": [
{ required: true, message: '输入组件名称', trigger: 'blur' },
{ validator: function(rule, value, callback) {
validateRepeatWord(rule, value, callback, '输入长度为2-20个中文')
},
trigger: 'blur' }
]
},
basicRule: {
"name": [ "name": [
{ required: true, message: '输入组件名称', trigger: 'blur' }, { required: true, message: '输入组件名称', trigger: 'blur' },
{ validator: function(rule, value, callback) { { validator: function(rule, value, callback) {
...@@ -420,9 +425,6 @@ export default { ...@@ -420,9 +425,6 @@ export default {
"imageUrl": [ "imageUrl": [
{ required: true, message: '请上传组件图片', trigger: 'blur' }, { required: true, message: '请上传组件图片', trigger: 'blur' },
], ],
"certificateId": [
{ required: true, message: '请选择是否配置证书', trigger: 'blur' },
],
"certificateId": [ "certificateId": [
{ required: true, message: '请选择证书', trigger: 'blur' }, { required: true, message: '请选择证书', trigger: 'blur' },
], ],
...@@ -430,7 +432,7 @@ export default { ...@@ -430,7 +432,7 @@ export default {
{ required: true, message: '请选择获得证书完成率', trigger: 'blur' }, { required: true, message: '请选择获得证书完成率', trigger: 'blur' },
] ]
}, },
rules: { moduleRules: {
"name": [ "name": [
{ required: true, message: '请输入模块名称', trigger: 'blur' }, { required: true, message: '请输入模块名称', trigger: 'blur' },
{ validator: function(rule, value, callback) { { validator: function(rule, value, callback) {
...@@ -441,21 +443,20 @@ export default { ...@@ -441,21 +443,20 @@ export default {
"openFlag": [ "openFlag": [
{ required: true, message: '请选择是否对外开放', trigger: 'blur' } { required: true, message: '请选择是否对外开放', trigger: 'blur' }
] ]
},
templateRules: {
"name": [
{ required: true, message: '请输入考试名称', trigger: 'blur' },
],
"id": [
{ required: true, message: '请输入考试id', trigger: 'blur' },
]
} }
} }
}, },
computed: {
...mapGetters([
'_token',
'idType'
])
},
created() { created() {
vm = this vm = this
vm.componentId = this.$route.query.id vm.componentId = vm.$route.query.id
vm.componentStatus = this.$route.query.status vm.componentStatus = vm.$route.query.status
vm.resultFlag = vm.$route.query.resultFlag // 判断可编辑基础信息还是全部信息 1 为全部 2 为基础
vm.getCertificateList() // 获取证书列表 vm.getCertificateList() // 获取证书列表
vm.componentBasicInfo() // 根据ID查询组件基本信息 vm.componentBasicInfo() // 根据ID查询组件基本信息
}, },
...@@ -463,13 +464,18 @@ export default { ...@@ -463,13 +464,18 @@ export default {
// 根据ID查询组件基本信息 // 根据ID查询组件基本信息
componentBasicInfo() { componentBasicInfo() {
if(vm.componentId) { if(vm.componentId) {
openLoading(vm)
vm.GET('portalComponent/queryPortalComponentById',{id: vm.componentId}).then((res) => { vm.GET('portalComponent/queryPortalComponentById',{id: vm.componentId}).then((res) => {
closeLoading(vm)
if( res.code == '000000') { if( res.code == '000000') {
vm.portalComponent = res.data.portalComponent vm.portalComponent = res.data.portalComponent
vm.itemName = vm.portalComponent.name vm.itemName = vm.portalComponent.name
if(!vm.portalComponent.certificateId) { if(!vm.portalComponent.certificateId) {
vm.hasCertificate = false vm.hasCertificate = false
vm.certificateLable = '否' vm.certificateLable = '否'
} else {
vm.hasCertificate = true
vm.certificateLable = '是'
} }
} }
}) })
...@@ -510,24 +516,45 @@ export default { ...@@ -510,24 +516,45 @@ export default {
submitBasicData(flag,url) { submitBasicData(flag,url) {
if(flag == 1) { // 暂存 if(flag == 1) { // 暂存
vm.portalComponent.status = 1 vm.portalComponent.status = 1
if(!vm.portalComponent.name) {
vm.isStorage = true vm.isStorage = true
return
}else{
vm.isStorage = false
}
vm.submitBasic(flag,url)
}else{ // 下一步 }else{ // 下一步
vm.portalComponent.status = ''
vm.isStorage = false vm.isStorage = false
if(!vm.componentId) {
vm.portalComponent.status = 1
} }
vm.$refs.basicInfoForm.validate((valid) => { vm.$refs.basicInfoForm.validate((valid) => {
if (valid) { if (valid) {
vm.submitBasic(flag,url)
} else {
return false;
}
})
}
},
componentName() {
vm.isStorage = false
},
submitBasic(flag,url) {
vm.portalComponent.idType = vm.idType
vm.portalComponent.id = vm.componentId
vm.POST(url,{ model: vm.portalComponent }).then((res) => { vm.POST(url,{ model: vm.portalComponent }).then((res) => {
if( res.code == '000000') { if( res.code == '000000') {
if(!vm.componentId) {
vm.componentId = res.data
}
if(flag == 2) {
vm.stepNum = 2 vm.stepNum = 2
vm.getTemplateData() vm.getTemplateData()
vm.getModuleData() vm.getModuleData()
vm.getTestListData() vm.getTestListData()
vm.getCourseData() vm.getCourseData()
} }
})
} else {
return false;
} }
}) })
}, },
...@@ -553,7 +580,9 @@ export default { ...@@ -553,7 +580,9 @@ export default {
if(_this.width != 750 || _this.height != 420) { if(_this.width != 750 || _this.height != 420) {
vm.$message.info('图片不符合规范,请根据规范上传图片') vm.$message.info('图片不符合规范,请根据规范上传图片')
}else { }else {
openLoading(vm)
doUpload(vm,file, getFilePath(file,null), 'preview4', 'progress1', 1).then(function (path) { doUpload(vm,file, getFilePath(file,null), 'preview4', 'progress1', 1).then(function (path) {
closeLoading(vm)
vm.portalComponent.imageUrl = path.fullPath vm.portalComponent.imageUrl = path.fullPath
}); });
} }
...@@ -570,12 +599,15 @@ export default { ...@@ -570,12 +599,15 @@ export default {
}, },
// 根据考试ID填充考试名称 // 根据考试ID填充考试名称
changeExamID(value) { changeExamID(value) {
let examName = ''
for(let i = 0;i<vm.testIdSelect.length;i++) { for(let i = 0;i<vm.testIdSelect.length;i++) {
if(value == vm.testIdSelect[i].id) { if(value == vm.testIdSelect[i].id) {
vm.examName = vm.testIdSelect[i].onlineExamName examName = vm.testIdSelect[i].onlineExamName
}
} }
if(!vm.componentList.moduleModelList[vm.examIndex].templetModelList[vm.examIndex1].partModelList[vm.examIndex2].partContentModelList[vm.examIndex3].content1) {
vm.componentList.moduleModelList[vm.examIndex].templetModelList[vm.examIndex1].partModelList[vm.examIndex2].partContentModelList[vm.examIndex3].content1 = examName
} }
vm.componentList.moduleModelList[vm.examIndex].templetModelList[vm.examIndex1].partModelList[vm.examIndex2].partContentModelList[vm.examIndex3].content1 = vm.examName
}, },
examIDfocus(index,index1,index2,index3) { examIDfocus(index,index1,index2,index3) {
vm.examIndex = index vm.examIndex = index
...@@ -593,12 +625,15 @@ export default { ...@@ -593,12 +625,15 @@ export default {
}, },
// 根据课程ID填充课程名称 // 根据课程ID填充课程名称
changeCourseID(value) { changeCourseID(value) {
let courseName = ''
for(let i = 0;i<vm.courseIdSelect.length;i++) { for(let i = 0;i<vm.courseIdSelect.length;i++) {
if(value == vm.courseIdSelect[i].id) { if(value == vm.courseIdSelect[i].id) {
vm.courseName = vm.courseIdSelect[i].name courseName = vm.courseIdSelect[i].name
} }
} }
vm.componentList.moduleModelList[vm.courseIndex].templetModelList[vm.courseIndex1].partModelList[vm.courseIndex2].partContentModelList[vm.courseIndex3].content1 = vm.courseName if(!vm.componentList.moduleModelList[vm.courseIndex].templetModelList[vm.courseIndex1].partModelList[vm.courseIndex2].partContentModelList[vm.courseIndex3].content1) {
vm.componentList.moduleModelList[vm.courseIndex].templetModelList[vm.courseIndex1].partModelList[vm.courseIndex2].partContentModelList[vm.courseIndex3].content1 = courseName
}
}, },
courseIDfocus(index,index1,index2,index3) { courseIDfocus(index,index1,index2,index3) {
vm.courseIndex = index vm.courseIndex = index
...@@ -616,7 +651,7 @@ export default { ...@@ -616,7 +651,7 @@ export default {
}, },
// 通过编辑获取模块信息 // 通过编辑获取模块信息
getModuleData() { getModuleData() {
vm.GET('portalComponent/ModuleList').then((res) => { vm.GET('portalComponent/ModuleList',{componentId: vm.componentId}).then((res) => {
if( res.code == '000000') { if( res.code == '000000') {
vm.componentList.moduleModelList = res.data.moduleModelList vm.componentList.moduleModelList = res.data.moduleModelList
} }
...@@ -625,6 +660,7 @@ export default { ...@@ -625,6 +660,7 @@ export default {
// 模块是否对外开放 // 模块是否对外开放
selectIsOpen(index) { selectIsOpen(index) {
vm.moduleIndex = index vm.moduleIndex = index
vm.componentList.moduleModelList[index].openFlag = vm.componentList.moduleModelList[index].openFlag == 1 ? 2 : 1
}, },
moduleOpenChange(value) { moduleOpenChange(value) {
for(let i=0;i<vm.componentList.moduleModelList.length;i++) { for(let i=0;i<vm.componentList.moduleModelList.length;i++) {
...@@ -694,6 +730,7 @@ export default { ...@@ -694,6 +730,7 @@ export default {
vm.templetIndex = vm.componentList.moduleModelList[index].templetModelList.length vm.templetIndex = vm.componentList.moduleModelList[index].templetModelList.length
vm.componentList.moduleModelList[index].templetModelList.push({ vm.componentList.moduleModelList[index].templetModelList.push({
name: item.name, name: item.name,
type: item.type,
partModelList: [] partModelList: []
}) })
for(let i = 0; i < item.partConfigModelList.length; i++) { for(let i = 0; i < item.partConfigModelList.length; i++) {
...@@ -707,11 +744,14 @@ export default { ...@@ -707,11 +744,14 @@ export default {
conditionFlag: item.partConfigModelList[i].conditionFlag, // 1为没有限制 2有限制 conditionFlag: item.partConfigModelList[i].conditionFlag, // 1为没有限制 2有限制
numFlag: item.partConfigModelList[i].numFlag, // 1为单个 2为可以无限添加 numFlag: item.partConfigModelList[i].numFlag, // 1为单个 2为可以无限添加
templetSeqNo: '', templetSeqNo: '',
introduce: item.partConfigModelList[i].introduce,
partContentModelList: [{ partContentModelList: [{
certificateFlag: 1, // 是否有证书 1无 2有
id: '', id: '',
seqNo: '', seqNo: '',
content_1: '', content1: '',
content_2: '' content2: '',
content3: ''
}] }]
}) })
}else if(item.partConfigModelList[i].type == 2) { // 课程 }else if(item.partConfigModelList[i].type == 2) { // 课程
...@@ -724,11 +764,12 @@ export default { ...@@ -724,11 +764,12 @@ export default {
conditionFlag: item.partConfigModelList[i].conditionFlag, // 1为没有限制 2有限制 conditionFlag: item.partConfigModelList[i].conditionFlag, // 1为没有限制 2有限制
numFlag: item.partConfigModelList[i].numFlag, // 1为单个 2为可以无限添加 numFlag: item.partConfigModelList[i].numFlag, // 1为单个 2为可以无限添加
templetSeqNo: '', templetSeqNo: '',
introduce: item.partConfigModelList[i].introduce,
partContentModelList: [{ partContentModelList: [{
id: '', id: '',
seqNo: '', seqNo: '',
content_1: '', content1: '',
content_2: '' content2: ''
}] }]
}) })
} }
...@@ -829,17 +870,55 @@ export default { ...@@ -829,17 +870,55 @@ export default {
} }
} }
}, },
// 完成 // 完成(暂存)
finishConponent() { finishConponent(flag) {
let req = null
if(vm.componentList.moduleModelList && vm.componentList.moduleModelList.length > 0) {
for(let i=0;i<vm.componentList.moduleModelList.length;i++) { for(let i=0;i<vm.componentList.moduleModelList.length;i++) {
if(flag == 2) { // 完成
req = {
id: vm.componentId,
status: 2
}
if(!vm.componentList.moduleModelList[i].name) {
vm.$message.info("请输入模块名称")
return
}
if(!vm.componentList.moduleModelList[i]) { if(!vm.componentList.moduleModelList[i]) {
vm.$message.info("请添加有效模块后再保存") vm.$message.info("请给第"+ parseInt(i + 1) +"个模块添加有效模板后再保存")
return return
} }
}else{ // 暂存
req = {
id: vm.componentId,
status: 1
}
}
vm.componentList.moduleModelList[i].componentId = vm.componentId
} }
vm.POST('portalComponent/insertOrUpdatePortalModule',{model: vm.componentList.moduleModelList}).then((res) => { vm.finishModule(req,flag)
}else {
vm.$message.info("请添加有效模块后再保存")
return
}
},
finishModule(req, flag) {
vm.POST('portalComponent/insertOrUpdatePortalModule',{model: vm.componentList.moduleModelList,status: flag}).then((res) => {
if( res.code == '000000') { if( res.code == '000000') {
vm.enableComponent(req)
}
})
},
// 启用
enableComponent(req) {
vm.GET('portalComponent/disableOrStart',req).then((res) => {
if(res.code == "000000") {
vm.$router.push({ path: 'item-component' }) vm.$router.push({ path: 'item-component' })
} else {
vm.$message({
message: res.message,
type: 'warning'
});
} }
}) })
}, },
...@@ -854,18 +933,49 @@ export default { ...@@ -854,18 +933,49 @@ export default {
}, },
// 选择资源包 // 选择资源包
selectChange(val) { selectChange(val) {
if(vm.resourceArray && vm.resourceArray.length > 0) {
for(let i = 0; i < vm.resourceArray.length; i++) { for(let i = 0; i < vm.resourceArray.length; i++) {
if(val == vm.resourceArray[i].id) { if(val == vm.resourceArray[i].id) {
vm.dialogData = vm.resourceArray[i] vm.dialogData = vm.resourceArray[i]
break break
} }
} }
}
}, },
// 确定选择模板 // 确定选择预设模块
submitDialog() { submitDialog() {
vm.columnFormVisible = false vm.columnFormVisible = false
let flag = true
if(isNotEmptyUtils(vm.dialogData)) {
for(let i = 0; i < vm.componentList.moduleModelList.length; i++) {
if(vm.componentList.moduleModelList[i].id == vm.dialogData.id) {
flag = false
vm.$confirm('该模块已经被添加到本组件,是否还需要再添加一次?', '提示', {
confirmButtonText: '确定',
cancelButtonText: '取消',
showClose: false,
type: 'warning'
}).then(() => {
vm.dialogData.moduleType = 2 vm.dialogData.moduleType = 2
vm.dialogData.mappingId = null
vm.componentList.moduleModelList.push(vm.dialogData) vm.componentList.moduleModelList.push(vm.dialogData)
vm.firstTab = vm.componentList.moduleModelList.length + ''
}).catch(() => {
vm.$message({
type: 'info',
message: '已取消选择'
})
})
break
}
}
if(flag) {
vm.dialogData.moduleType = 2
vm.dialogData.mappingId = null
vm.componentList.moduleModelList.push(vm.dialogData)
vm.firstTab = vm.componentList.moduleModelList.length + ''
}
}
} }
} }
} }
...@@ -903,25 +1013,33 @@ export default { ...@@ -903,25 +1013,33 @@ export default {
} }
} }
} }
.component-name {
color: #F56C6C;
font-size: 12px;
line-height: 1;
padding-top: 1px;
position: absolute;
top: 100%;
left: 0;
}
} }
.step-content { .step-content {
overflow: hidden; overflow: hidden;
height: 60px; height: 60px;
border-bottom: 1px solid #efefef; border-bottom: 1px solid #efefef;
// background: #fff;
.el-step.is-simple .el-step__head { .el-step.is-simple .el-step__head {
display: none; display: none;
} }
.class-1 { .class-1 {
color: #409EFF; color: #449284;
border: 1px solid #409EFF !important; border: 1px solid #449284 !important;
} }
.class-2 { .class-2 {
color: #999; color: #999;
border: 1px solid #999 !important; border: 1px solid #999 !important;
} }
.class-1-text .el-step__title{ .class-1-text .el-step__title{
color: #409EFF !important; color: #449284 !important;
} }
.class-2-text .el-step__title{ .class-2-text .el-step__title{
color: #999 !important; color: #999 !important;
...@@ -929,7 +1047,7 @@ export default { ...@@ -929,7 +1047,7 @@ export default {
.el-steps--simple { .el-steps--simple {
float: left; float: left;
padding: 20px 0 0 5%; padding: 20px 0 0 5%;
width: 25%; width: 350px;
background: #fff; background: #fff;
.el-step__icon { .el-step__icon {
display: none; display: none;
...@@ -945,7 +1063,7 @@ export default { ...@@ -945,7 +1063,7 @@ export default {
font-size: 12px; font-size: 12px;
border: 1px solid #ccc; border: 1px solid #ccc;
border-radius: 50%; border-radius: 50%;
width: 25px; width: 22px;
height: 16px; height: 16px;
line-height: 13px; line-height: 13px;
padding-left: 3px; padding-left: 3px;
...@@ -994,6 +1112,15 @@ export default { ...@@ -994,6 +1112,15 @@ export default {
font-size: 12px; font-size: 12px;
} }
} }
.item-icon {
position: relative;
span.require {
position: absolute;
left: 37px;
top: 12px;
color: #F56C6C;
}
}
} }
.matter-test,.train-test, .matter-train-test{ .matter-test,.train-test, .matter-train-test{
.tip { .tip {
...@@ -1003,6 +1130,12 @@ export default { ...@@ -1003,6 +1130,12 @@ export default {
margin-bottom: 20px; margin-bottom: 20px;
} }
} }
.partText {
font-size: 12px;
margin-left: 44px;
color: #999;
padding: 0px 0 15px;
}
} }
.module-form { .module-form {
...@@ -1018,7 +1151,7 @@ export default { ...@@ -1018,7 +1151,7 @@ export default {
padding: 15px; padding: 15px;
border-bottom: 1px solid #e1e1e1; border-bottom: 1px solid #e1e1e1;
.el-dialog__title { .el-dialog__title {
color: #409EFF; color: #449284;
font-size: 16px; font-size: 16px;
} }
} }
......
...@@ -45,10 +45,10 @@ ...@@ -45,10 +45,10 @@
</el-table-column> </el-table-column>
<el-table-column label="操作" fixed="right" align="center" min-width="200"> <el-table-column label="操作" fixed="right" align="center" min-width="200">
<template slot-scope="scope"> <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="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 || 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 == 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> </template>
</el-table-column> </el-table-column>
</el-table> </el-table>
...@@ -72,6 +72,8 @@ ...@@ -72,6 +72,8 @@
import BreadCrumb from '../../components/breadcrumb.vue' import BreadCrumb from '../../components/breadcrumb.vue'
import { doUpload, getFilePath } from "../../utils/qiniuUtil" import { doUpload, getFilePath } from "../../utils/qiniuUtil"
import { validateWord } from "../../utils/validate.js" import { validateWord } from "../../utils/validate.js"
import { mapGetters } from 'vuex'
import { openLoading, closeLoading } from '../../utils/utils';
let vm = null let vm = null
export default { export default {
components: { components: {
...@@ -120,6 +122,11 @@ export default { ...@@ -120,6 +122,11 @@ export default {
} }
}, },
computed: {
...mapGetters([
'_token'
])
},
created() { created() {
vm = this vm = this
vm.search() vm.search()
...@@ -127,7 +134,9 @@ export default { ...@@ -127,7 +134,9 @@ export default {
methods: { methods: {
// 列表查询 // 列表查询
search() { 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' ) { if( res.code == '000000' ) {
vm.tableData = res.data.queryList vm.tableData = res.data.queryList
vm.totalRows = res.data.total vm.totalRows = res.data.total
...@@ -148,9 +157,17 @@ export default { ...@@ -148,9 +157,17 @@ export default {
createComponent() { createComponent() {
vm.$router.push({path: 'create-component'}) vm.$router.push({path: 'create-component'})
}, },
// 编辑 // 编辑(验证可编辑范围)
editComponentList(row) { 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) { enableAndDisable(row,flag) {
...@@ -231,7 +248,7 @@ export default { ...@@ -231,7 +248,7 @@ export default {
.search-title { .search-title {
padding: 10px 12px; padding: 10px 12px;
font-size: 12px; font-size: 12px;
color: #409EFF; color: #449284;
border-bottom: 1px solid #efefef; border-bottom: 1px solid #efefef;
} }
.create-button { .create-button {
......
<template> <template>
<div class="main-container"> <div class="item-manager-wrap">
<bread-crumb :curmbFirst="curmbFirst" :curmbSecond="curmbSecond"></bread-crumb> <bread-crumb :curmbFirst="curmbFirst" :curmbSecond="curmbSecond"></bread-crumb>
<div class="component-content"> <div class="component-content screenSet">
<div class="header-title">项目管理</div> <div class="header-title">项目管理</div>
<el-form :inline="true" :model="formInline" class="demo-form-inline"> <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="5">
<el-form-item label="项目名称:"> <el-form-item label="项目名称:">
<el-input v-model="formInline.name" placeholder="审批人"></el-input> <el-input v-model="formInline.projectName" size="mini" placeholder="请输入项目名称"></el-input>
</el-form-item> </el-form-item>
</el-col>
<el-col :span="8">
<el-form-item label="项目时间:"> <el-form-item label="项目时间:">
<el-date-picker <el-date-picker
v-model="formInline.startDate" v-model="formInline.duringTime"
type="date" size="mini"
placeholder="请选择开始时间" type="daterange"
start-placeholder="请选择开始时间"
end-placeholder="请选择结束时间"
value-format="yyyy-MM-dd HH:mm:ss" value-format="yyyy-MM-dd HH:mm:ss"
></el-date-picker> ></el-date-picker>
<el-date-picker
v-model="formInline.endDate"
type="date"
placeholder="请选择结束时间"
value-format="yyyy-MM-dd HH:mm:ss"
></el-date-picker>
</el-form-item>
<el-form-item>
<el-button type="primary" @click="searchData()">查询</el-button>
</el-form-item> </el-form-item>
<el-form-item> </el-col>
<el-button type="default" plain>重置</el-button> <el-col :span="5">
</el-form-item>
</el-form>
<el-form :inline="true" :model="formInline" class="demo-form-inline">
<el-form-item label="发布状态:"> <el-form-item label="发布状态:">
<el-select v-model="formInline.type" placeholder="请选择发布状态"> <el-select size="mini" v-model="formInline.projectStatus" placeholder="请选择发布状态">
<el-option label="状态1" value="shanghai"></el-option> <el-option
<el-option label="状态2" value="beijing"></el-option> v-for="item in optionStatus"
:key="item.value"
:label="item.label"
:value="item.value"
></el-option>
</el-select> </el-select>
</el-form-item> </el-form-item>
</el-col>
<el-col :span="6" style="padding:0;text-align:right;padding-right:15px;">
<el-button type="primary" size="small" @click="getProjectList">查询</el-button>
<el-button type="default" size="small" @click="resetForm" style="margin-left:0;">重置</el-button>
</el-col>
</el-form> </el-form>
</el-row>
<el-form :model="formInline" class="demo-form-inline"> <el-form :model="formInline" class="demo-form-inline">
<el-form-item> <el-form-item>
<el-button class="add-button" type="primary" @click="toPage()">新建项目</el-button> <el-button class="add-button" size="small" type="primary" @click="toPage()">新建项目</el-button>
</el-form-item> </el-form-item>
</el-form> </el-form>
<el-table <el-table
...@@ -60,14 +64,65 @@ ...@@ -60,14 +64,65 @@
<el-table-column fixed="right" label="操作" min-width="200" align="center"> <el-table-column fixed="right" label="操作" min-width="200" align="center">
<template slot-scope="scope"> <template slot-scope="scope">
<el-button <el-button
@click="editItem(scope.row)" @click="changeStatus(scope.row,0)"
v-show="showButton(scope.row,'edit')" v-show="showButton(scope.row,0)"
type="primary" type="primary"
size="small" size="small"
>编辑</el-button> >编辑</el-button>
<el-button @click="storage(scope.row)" type="primary" size="small">暂存</el-button> <el-button
<el-button @click="completeItem(scope.row)" type="primary" size="small">完成</el-button> @click="changeStatus(scope.row,1)"
<el-button @click="delItem(scope.row)" type="primary" size="small">删除</el-button> v-show="showButton(scope.row,1)"
type="primary"
size="small"
>暂存</el-button>
<el-button
@click="changeStatus(scope.row,2)"
v-show="showButton(scope.row,2)"
type="primary"
size="small"
>完成</el-button>
<el-button
@click="changeStatus(scope.row,3)"
v-show="showButton(scope.row,3)"
type="primary"
size="small"
>上架</el-button>
<el-button
@click="changeStatus(scope.row,4)"
v-show="showButton(scope.row,4)"
type="primary"
size="small"
>通过</el-button>
<el-button
@click="changeStatus(scope.row,5)"
v-show="showButton(scope.row,5)"
type="primary"
size="small"
>下架</el-button>
<el-button
@click="changeStatus(scope.row,7)"
v-show="showButton(scope.row,7)"
type="primary"
size="small"
>提醒审核</el-button>
<el-button
@click="changeStatus(scope.row,8)"
v-show="showButton(scope.row,8)"
type="primary"
size="small"
>取消审核</el-button>
<el-button
@click="changeStatus(scope.row,6)"
v-show="showButton(scope.row,6)"
type="primary"
size="small"
>拒绝</el-button>
<el-button
@click="delItem(scope.row,9)"
v-show="showButton(scope.row,9)"
type="primary"
size="small"
>删除</el-button>
</template> </template>
</el-table-column> </el-table-column>
</el-table> </el-table>
...@@ -89,6 +144,7 @@ ...@@ -89,6 +144,7 @@
<script> <script>
import BreadCrumb from "../../components/breadcrumb.vue"; import BreadCrumb from "../../components/breadcrumb.vue";
import { create } from "domain"; import { create } from "domain";
import { returnData } from "../mock";
let vm = null; let vm = null;
export default { export default {
components: { components: {
...@@ -104,18 +160,45 @@ export default { ...@@ -104,18 +160,45 @@ export default {
pageNo: 1, pageNo: 1,
pageSize: 10 pageSize: 10
}, },
optionStatus: [
{
value: 1,
label: "草稿"
},
{
value: 2,
label: "未上架"
},
{
value: 3,
label: "审核中/待审核"
},
{
value: 4,
label: "已上架"
},
{
value: 5,
label: "已下架"
},
{
value: 6,
label: "已拒绝/未上架"
}
],
tableData: [], tableData: [],
totalRows: 0, totalRows: 0,
loading: false, loading: true,
timingTime: "", timingTime: "",
currentPage: 1, currentPage: 1,
formInline: { formInline: {
name: "", projectName: "",
startDate: "", projectBegintime: "",
endDate: "", projectEndtime: "",
type: "", projectStatus: "",
pageNo: 1, pageNo: 1,
pageSize: 10 pageSize: 10,
duringTime: ""
} }
}; };
}, },
...@@ -124,38 +207,125 @@ export default { ...@@ -124,38 +207,125 @@ export default {
this.getProjectList(); this.getProjectList();
}, },
methods: { methods: {
showButton(row) {
let projectStatus = row.projectStatus;
let flag = false;
flag = true;
//console.log('状态:'+projectStatus)
return flag;
},
toPage() { toPage() {
this.$router.push("add-manager"); this.$router.push("add-manager");
}, },
//数据查询 setParam(data) {
searchData() { let param = {};
console.log(this.formInline); 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;
}, },
//查询项目列表 //查询项目列表
getProjectList() { getProjectList() {
let req = { let req = {};
pageNo: this.formInline.pageNo, req = this.setParam(this.formInline);
pageSize: this.formInline.pageSize
};
vm.GET("portalInfo/getProjectList", req).then(res => { vm.GET("portalInfo/getProjectList", req).then(res => {
if (res.code == "000000") { if (res.code == "000000") {
vm.tableData = res.data.data; vm.tableData = res.data.data;
vm.totalRows = res.data.totalRows; vm.totalRows = res.data.totalRows;
this.loading = false;
}
});
},
//按钮展示情况
showButton(row, type) {
// 按钮type类型: 0-编辑
// 1-暂存 2-完成 3-上架 4-通过 5-下架 6-拒绝
// 7- 提醒审核 8(5)-取消审核 9-删除
let projectStatus = row.projectStatus;
let level = row.level;
let flag = false;
let typeStr = parseInt(type);
//console.log("状态:"+projectStatus+ "等级:" + level + " 按钮类型:" + type);
let buttonStatus = returnData().buttonStatus;
if (level != null) {
let statusSet = buttonStatus[projectStatus - 1][level];
let flagValue = statusSet.indexOf(typeStr);
if (flagValue >= 0) {
flag = true;
} else {
flag = false;
}
}
//flag = true;
return flag;
},
//改变状态
changeStatus(row, type) {
let projectId = row.id;
if (type === 0) {
//编辑
this.$router.push("add-manager?projectId=" + projectId);
} else if (type === 7) {
//提醒审核
} else {
if (type === 8) {
//取消审批值对应5
type = 5;
}
let req = {
projectId: projectId,
changeStatus: type
};
let that = this;
vm.POST("portalInfo/changeStatus", req).then(res => {
if (res.code == "000000") {
console.log(res);
} }
}); });
}
},
//删除项目
delItem(row) {
let req = {};
let that = this;
console.log(row);
vm.DELETE("portalInfo/delete/" + row.id, req).then(res => {
if (res.code == "000000") {
console.log(res);
this.$notify({
title: "删除项目",
message: "ID为:" + row.id + "的项目删除成功"
});
this.loading = true;
that.getProjectList();
}
});
},
//重置表单
resetForm() {
vm.formInline = Object.assign(
{},
{
projectName: "",
projectBegintime: "",
projectEndtime: "",
projectStatus: "",
pageNo: 1,
pageSize: 10,
duringTime: ""
}
);
vm.getProjectList();
}, },
editItem(row) {},
upperItem(row) {},
delItem(row) {},
storage(row) {},
completeItem(row) {},
handleSizeChange(val) { handleSizeChange(val) {
console.log(`每页 ${val} 条`); console.log(`每页 ${val} 条`);
this.formInline.pageSize = val; this.formInline.pageSize = val;
...@@ -186,14 +356,15 @@ export default { ...@@ -186,14 +356,15 @@ export default {
}; };
</script> </script>
<style lang="scss"> <style lang="scss">
.main-container { .item-manager-wrap {
.component-content { .component-content {
margin-top: 50px; background: #fff;
//margin-top: 88px;
padding: 10px; padding: 10px;
.header-title { .header-title {
padding: 10px 12px; padding: 10px 12px;
font-size: 12px; font-size: 12px;
color: #409eff; color: #449284;
border-bottom: 1px solid #efefef; border-bottom: 1px solid #efefef;
} }
.table-option span { .table-option span {
......
<template> <template>
<div class="home-wrap"> <div class="home-wrap">
<bread-crumb :curmbFirst="curmbFirst"></bread-crumb> <bread-crumb :curmbFirst="curmbFirst"></bread-crumb>
<div class="message-content screenSet"> <div class="message-content">
<el-row> <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="visitor-title">
<div class="title">今日随访:<span style="color:#449284;">10人</span></div> <div class="title">今日随访:<span style="color:#449284;">10人</span></div>
<span class="visitor-more" @click="lookMore">查看更多</span> <span class="visitor-more" @click="lookMore">查看更多</span>
...@@ -19,22 +19,24 @@ ...@@ -19,22 +19,24 @@
</el-table> </el-table>
</div> </div>
</el-col> </el-col>
<el-col class="message" :span="24"> <el-col class="message screenSet" :span="24">
<div class="message-title">系统消息 <span>今日消息:3</span></div> <div class="message-title">系统消息 <span>今日消息:{{count}}</span></div>
<div class="message-info" v-if="messageList"> <div class="message-info" v-if="messageList.length > 0">
<div class="message-item" v-for="(item,index) in messageList" :key="index"> <div class="message-item" v-for="(item,index) in messageList" :key="index">
<div class="text-top"> <div class="text-top">
<i class="el-icon-error" v-if="item.type == 2" style="color:#FA5555"></i> <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-success" v-if="item.type == 3" style="color:#67C23A"></i>
<i class="el-icon-warning" v-if="item.type == 1" style="color:#FAAD14"></i> <i class="el-icon-warning" v-if="item.type == 1" style="color:#FAAD14"></i>
<span>{{item.status}}</span> <span>{{item.menuName}}</span>
<span>{{item.date}}</span> <span>{{item.portalTime}}</span>
</div> </div>
<div class="text-bottom">{{item.info}}</div> <div class="text-bottom">{{item.content}}</div>
</div> </div>
</div> </div>
<div v-else> <div class="no-message" v-else>
<div>
<img src="../assets/image/noData.png"/>
</div>
</div> </div>
</el-col> </el-col>
</el-row> </el-row>
...@@ -43,7 +45,8 @@ ...@@ -43,7 +45,8 @@
</template> </template>
<script> <script>
import BreadCrumb from '../components/breadcrumb.vue' import BreadCrumb from '../components/breadcrumb.vue'
import { setTimeout, setInterval } from 'timers'; import { setTimeout, setInterval } from 'timers'
import { mapGetters } from 'vuex'
let vm = null let vm = null
export default { export default {
components: { components: {
...@@ -54,46 +57,50 @@ export default { ...@@ -54,46 +57,50 @@ export default {
curmbFirst: '数据总览', curmbFirst: '数据总览',
spanFirstNum: 12, spanFirstNum: 12,
spanSecondNum: 12, spanSecondNum: 12,
tableData: [ tableData: [],
{ count: 0,
date: '2016-05-02', messageList:[
name: '王小虎', // {
style: '电话随访', // menuName: '审核提醒',
content: '糖尿病患者第20190228定期随访登记' // type: 1,
},{ // portalTime: '2019-01-02',
date: '2016-05-02', // content: '王小波创建了"浙江省2019高血压第一季度考试"项目,提醒您审核。'
name: '王小虎', // },{
style: '电话随访', // menuName: '审核未通过',
content: '糖尿病患者第20190228定期随访登记' // type: 2,
},{ // portalTime: '2019-01-02',
date: '2016-05-02', // content: '王小波创建了"浙江省2019高血压第一季度考试"项目,提醒您审核。'
name: '王小虎', // },{
style: '电话随访', // menuName: '审核通过',
content: '糖尿病患者第20190228定期随访登记' // type: 3,
} // portalTime: '2019-01-02',
], // content: '王小波创建了"浙江省2019高血压第一季度考试"项目,提醒您审核。'
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高血压第一季度考试"项目,提醒您审核。'
}]
} }
}, },
created() {
vm = this
vm.getSystemData()
},
computed: {
...mapGetters([
'_token'
])
},
methods: { methods: {
// 查看更多 // 查看更多
lookMore() { 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 { ...@@ -165,7 +172,13 @@ export default {
} }
} }
} }
.no-message {
text-align: center;
img {
width: 100px;
margin-top: 17%;
}
}
} }
} }
</style> </style>
......
...@@ -2,7 +2,7 @@ ...@@ -2,7 +2,7 @@
<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>京ICP:14044861号</span> <span><img src="../../assets/image/footer-icon.png"/>京ICP备:14044861号</span>
</div> </div>
</template> </template>
<script> <script>
...@@ -17,6 +17,13 @@ export default { ...@@ -17,6 +17,13 @@ export default {
line-height: 75px; line-height: 75px;
font-size: 12px; font-size: 12px;
color: #838486; color: #838486;
span {
padding: 0 10px;
}
img {
width: 12px;
padding-right: 5px;
}
} }
</style> </style>
......
...@@ -7,51 +7,57 @@ ...@@ -7,51 +7,57 @@
<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/img.jpg"> <img class="user-logo" :src="portrait">
<span id="headName">{{name}}</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> <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-menu>
</el-dropdown> </el-dropdown>
</div> </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> </div>
</template> </template>
<script> <script>
import { getLoginUrl,getInnerLoginUrl } from '../../utils/index.js'
let vm = null
export default { export default {
props: {
portrait: {
type: String
},
userName: {
type: String
},
idType: {
type: Number
}
},
data() { data() {
return { return {
name: 'hws', name: '',
systemInfoList: [] systemInfoList: []
} }
}, },
computed: {}, computed: {},
created() {
vm = this
},
methods: { methods: {
handleCommand(command) { handleCommand(command) {
if (command === 'logout') { if (command === 'logout') {
localStorage.removeItem('storageToken')
if(vm.idType == 1) { // 内部
window.location.href = getInnerLoginUrl()
} else {
window.location.href = getLoginUrl()
} }
}, }
forward() { if(command === 'forward') {
window.location.href = 'https://www.yunqueyi.com/' window.location.href = 'https://www.yunqueyi.com/'
} }
} }
}
} }
</script> </script>
<style lang="scss"> <style lang="scss">
......
...@@ -9,7 +9,6 @@ ...@@ -9,7 +9,6 @@
<i class="sub-icon" :class="subItem.icon"></i> <i class="sub-icon" :class="subItem.icon"></i>
{{subItem.title}} {{subItem.title}}
</el-menu-item> </el-menu-item>
</el-submenu> </el-submenu>
</template> </template>
<template v-else> <template v-else>
...@@ -22,9 +21,22 @@ ...@@ -22,9 +21,22 @@
</div> </div>
</template> </template>
<script> <script>
import { mapGetters } from 'vuex'
import { setTimeout } from 'timers';
let vm = null
export default { export default {
props: {
tokenValue: {
type: String
},
authList: {
type: Object,
default: () => {}
}
},
data() { data() {
return { return {
// authList: {},
items: [ items: [
{ {
title: '数据总览', title: '数据总览',
...@@ -87,6 +99,46 @@ export default { ...@@ -87,6 +99,46 @@ export default {
onRoutes() { onRoutes() {
return this.$route.path; 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> </script>
...@@ -110,14 +162,15 @@ export default { ...@@ -110,14 +162,15 @@ export default {
} }
.el-menu-item.is-active { .el-menu-item.is-active {
color: #fff; 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> </style>
......
...@@ -46,6 +46,7 @@ let tablePerson = [{ ...@@ -46,6 +46,7 @@ let tablePerson = [{
let treeData = [ let treeData = [
{ {
id: 11, id: 11,
name: "一级 1",
label: "一级 1", label: "一级 1",
children: [ children: [
{ {
...@@ -99,10 +100,29 @@ let treeData = [ ...@@ -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() { export function returnData() {
let data = {}; let data = {};
data.tableOrganization = tableOrganization; data.tableOrganization = tableOrganization;
data.tablePerson = tablePerson; data.tablePerson = tablePerson;
data.treeData = treeData; data.treeData = treeData;
data.buttonStatus = buttonStatus;
return data; return data;
} }
\ No newline at end of file
<template> <template>
<div class="main-container"> <div class="item-role-wrap">
<bread-crumb :curmbFirst="curmbFirst" :curmbSecond="curmbSecond" :curmbThird="curmbThird"></bread-crumb> <bread-crumb :curmbFirst="curmbFirst" :curmbSecond="curmbSecond" :curmbThird="curmbThird"></bread-crumb>
<div class="component-content"> <div class="component-content screenSet">
<div class="header-title">查询条件</div> <div class="header-title">查询条件</div>
<el-form :inline="true" :model="formInline" class="form-inline"> <el-row :gutter="30" class="row" type="flex" style="margin-top: 10px;">
<el-form :model="formInline" ref="formInline" label-width="75px" class="form-inline">
<el-col :span="5">
<el-form-item label="姓名:"> <el-form-item label="姓名:">
<el-input v-model="formInline.name" placeholder="审批人"></el-input> <el-input size="mini" v-model="formInline.name" placeholder="请输入名称"></el-input>
</el-form-item> </el-form-item>
</el-col>
<el-col :span="5">
<el-form-item label="角色:">
<el-select size="mini" v-model="formInline.projeceRole" placeholder="请选择角色">
<el-option
v-for="(item, index) in roleList"
:key="index"
:label="item.label"
:value="item.value"
></el-option>
</el-select>
</el-form-item>
</el-col>
<el-col :span="5">
<el-form-item label="所属机构:"> <el-form-item label="所属机构:">
<el-select v-model="formInline.organization" placeholder="请选择所属机构"> <el-select size="mini" v-model="formInline.organizationName" placeholder="请选择所属机构">
<el-option label="机构1" value="organization1"></el-option> <el-option
<el-option label="机构2" value="organization2"></el-option> v-for="(item, index) in organizationList"
:key="index"
:label="item"
:value="item"
></el-option>
</el-select> </el-select>
</el-form-item> </el-form-item>
</el-col>
<el-col :span="5">
<el-form-item label="所属科室:"> <el-form-item label="所属科室:">
<el-select v-model="formInline.department" placeholder="请选择所属科室"> <el-select size="mini" v-model="formInline.departmentsName" placeholder="请选择所属科室">
<el-option label="科室1" value="department1"></el-option> <el-option
<el-option label="科室2" value="department12"></el-option> v-for="(item, index) in departmentsList"
:key="index"
:label="item"
:value="item"
></el-option>
</el-select> </el-select>
</el-form-item> </el-form-item>
<el-form-item class="to-right"> </el-col>
<el-button class="button-green" type="primary" plain>重置</el-button> <el-col :span="4" style="padding:0;text-align:right;padding-right:10px;">
</el-form-item> <el-button type="primary" size="small" @click="queryRoleList()">查询</el-button>
<el-form-item class="to-right"> <el-button
<el-button class="button-white" type="primary">查询</el-button> type="default"
</el-form-item> size="small"
@click="resetForm('formInline')"
style="margin-left:0;"
>重置</el-button>
</el-col>
</el-form> </el-form>
</el-row>
<el-table <el-table
v-loading="loading" v-loading="loading"
:data="tableData" :data="tableData"
:header-cell-style="{background:'#FAFAFA',color:'#000'}" :header-cell-style="{background:'#FAFAFA',color:'#000'}"
> >
<el-table-column prop="id" label="用户ID" ></el-table-column> <el-table-column prop="userId" label="用户ID" align="center"></el-table-column>
<el-table-column prop="name" label="姓名" ></el-table-column> <el-table-column prop="userName" label="姓名" align="center"></el-table-column>
<el-table-column prop="role" label="角色"></el-table-column> <el-table-column prop="projeceRole" label="角色" align="center">
<el-table-column prop="organization" label="所属机构"></el-table-column>
<el-table-column prop="department" label="科室"></el-table-column>
<el-table-column fixed="right" label="操作" width="200">
<template slot-scope="scope"> <template slot-scope="scope">
<el-button class="title" type="text" size="small" @click="toPage()">升级项目负责人</el-button> <span>{{ scope.row.projeceRole | projeceRoleType }}</span>
<el-button class="title" type="text" size="small" @click="toPage()">降为普通用户</el-button> </template>
</el-table-column>
<el-table-column prop="organizationName" label="所属机构" align="center"></el-table-column>
<el-table-column prop="departmentsName" label="科室" align="center"></el-table-column>
<el-table-column fixed="right" label="操作" width="300" align="center">
<template slot-scope="scope">
<el-button
type="primary"
size="small"
v-show="showButton(scope.row,'L2')"
@click="openDialog(scope.row,'L2')"
>升级项目负责人</el-button>
<el-button
type="primary"
size="small"
v-show="showButton(scope.row,'L3')"
@click="openDialog(scope.row,'L3')"
>升级次级负责人</el-button>
<el-button
type="primary"
size="small"
v-show="showButton(scope.row,'L4')"
@click="openDialog(scope.row,'L4')"
>降为普通用户</el-button>
</template> </template>
</el-table-column> </el-table-column>
</el-table> </el-table>
<div class="pagination">
<el-pagination <el-pagination
background
@size-change="handleSizeChange" @size-change="handleSizeChange"
@current-change="handleCurrentChange" @current-change="handleCurrentChange"
:current-page="currentPage" :current-page="formInline.pageNo"
:page-sizes="[100, 200, 300, 400]" :page-sizes="[10, 20, 30, 100]"
:page-size="100" :page-size="formInline.pageSize"
layout="total, sizes, prev, pager, next, jumper" layout="total, sizes, prev, pager, next, jumper"
:total="400" :total="totalRows"
></el-pagination> ></el-pagination>
</div> </div>
<el-dialog title :visible.sync="dialog.show" width="30%" center>
<p class="dialog-p">
确认将{{ dialog.role }}
<span class="user-name">"{{ dialog.name }}"</span>
{{ dialog.option }}吗?"
</p>
<span slot="footer" class="dialog-footer">
<el-button type="default" size="small" @click="dialog.show = false">取消</el-button>
<el-button type="primary" size="small" @click="changeRole()">确定</el-button>
</span>
</el-dialog>
<el-dialog title :visible.sync="dialogFull" width="30%" center>
<p class="dialog-p">
无法操作,项目负责人已满
<span class="user-name">5人</span>
</p>
<span slot="footer" class="dialog-footer">
<el-button type="default" size="small" @click="dialogFull = false">取消</el-button>
<el-button type="primary" size="small" @click="dialogFull = false">确定</el-button>
</span>
</el-dialog>
</div>
</div> </div>
</template> </template>
<script> <script>
import BreadCrumb from "../../components/breadcrumb.vue"; import BreadCrumb from "../../components/breadcrumb.vue";
import { create } from "domain"; import { create } from "domain";
let vm = null;
export default { export default {
components: { components: {
BreadCrumb BreadCrumb
}, },
data() { data() {
const item = { const item = {
id: "298490", userId: "298490",
name: "李雪", userName: "李雪",
role: "项目负责人", projeceRole: "L4",
organization: "浙江省人民医院", organizationName: "浙江省人民医院",
department: "外科", departmentsName: "外科"
}; };
return { return {
curmbFirst: "系统管理", curmbFirst: "系统管理",
curmbSecond: "角色管理", curmbSecond: "角色管理",
curmbThird: "项目角色", curmbThird: "项目角色",
tableData: Array(10).fill(item), tableData: [],
loading: false, loading: true,
timingTime: "", timingTime: "",
totalRows: 0,
currentPage: 1, currentPage: 1,
formInline: { formInline: {
name: "", portalProjectId: "",
role: "", pageNo: 1,
organization: "", pageSize: 10,
department: "" departmentsName: "",
organizationName: "",
projeceRole: "",
userName: ""
}, },
pickerOptions: { departmentsList: [],
shortcuts: [ organizationList: [],
roleList: [
{ {
text: "最近一周", label: "内部管理员",
onClick(picker) { value: "L1"
const end = new Date();
const start = new Date();
start.setTime(start.getTime() - 3600 * 1000 * 24 * 7);
picker.$emit("pick", [start, end]);
}
}, },
{ {
text: "最近一个月", label: "项目管理员",
onClick(picker) { value: "L2"
const end = new Date();
const start = new Date();
start.setTime(start.getTime() - 3600 * 1000 * 24 * 30);
picker.$emit("pick", [start, end]);
}
}, },
{ {
text: "最近三个月", label: "次级负责人",
onClick(picker) { value: "L3"
const end = new Date(); },
const start = new Date(); {
start.setTime(start.getTime() - 3600 * 1000 * 24 * 90); label: "普通用户",
picker.$emit("pick", [start, end]); value: "L4"
}
}
]
} }
],
numL2: 0,
dialog: {
show: false,
role: "项目负责人",
name: "李雷",
option: "升级为项目负责人",
full: false
},
dialogFull: false,
scopeRow: {}
}; };
}, },
create() {}, created() {
vm = this;
this.queryRoleList();
},
methods: { methods: {
toPage() { //查询用户列表
this.$router.push("item-role"); queryRoleList() {
this.loading = true;
this.formInline.portalProjectId = vm.getUrlSearch(
window.location.href,
"portalProjectId"
);
if (this.formInline.portalProjectId == null) {
this.formInline.portalProjectId = "";
}
let req = {};
req = this.formInline;
vm.GET("portalProjectOrRole/queryRoleList", req).then(res => {
if (res.code == "000000") {
vm.tableData = res.data.projectRoleInfoModels;
vm.totalRows = res.data.total;
this.loading = false;
//this.roleList = setRoleList(res.data.roleList);
this.organizationList = res.data.organizationList;
this.departmentsList = res.data.departmentsList;
this.numL2 = res.data.numL2;
}
});
},
//改变等级
changeRole() {
let req = {
portalProjectId: this.formInline.portalProjectId,
updateL: this.scopeRow.updateL,
userId: this.scopeRow.userId,
numL2: this.numL2
};
vm.GET("portalProjectOrRole/roleLevelUpdate", req).then(res => {
this.dialog.show = false;
if (res.code == "000000") {
console.log(res);
this.queryRoleList();
}
});
}, },
handleSizeChange(val) { handleSizeChange(val) {
console.log(`每页 ${val} 条`); console.log(`每页 ${val} 条`);
this.formInline.pageSize = val;
}, },
handleCurrentChange(val) { handleCurrentChange(val) {
console.log(`当前页: ${val}`); console.log(`当前页: ${val}`);
this.formInline.pageNo = val;
this.queryRoleList();
},
//重置表单
resetForm() {
vm.formInline = Object.assign(
{},
{
portalProjectId: "",
pageNo: 1,
pageSize: 10,
departmentsName: "",
organizationName: "",
projeceRole: "",
userName: ""
}
);
vm.queryRoleList();
},
//按钮展示情况
showButton(row, projeceRole) {
let flag = false;
//console.log("当前等级 " + row.projeceRole + " 改变成等级 " + projeceRole);
if (row.projeceRole == "L2") {
if (projeceRole == "L4") {
flag = true;
}
} else if (row.projeceRole == "L3") {
if (projeceRole == "L2" || projeceRole == "L4") {
flag = true;
}
} else if (row.projeceRole == "L4") {
if (projeceRole == "L2" || projeceRole == "L3") {
flag = true;
}
}
return flag;
},
//打开弹出框
openDialog(row, projeceRole) {
console.log(row);
if (projeceRole == "L2" && this.numL2 >= 5) {
this.dialogFull = true;
} else {
this.dialog.show = true;
}
this.dialog.name = row.userName;
this.scopeRow = row;
this.scopeRow.updateL = projeceRole;
if (row.projeceRole == "L2") {
this.dialog.role = "项目负责人";
if (projeceRole == "L4") {
this.dialog.option = "降级为普通用户";
}
} else if (row.projeceRole == "L3") {
this.dialog.role = "次级负责人";
if (projeceRole == "L2") {
this.dialog.option = "升级为项目负责人";
} else if (projeceRole == "L4") {
this.dialog.option = "降级为普通用户";
}
} else if (row.projeceRole == "L4") {
this.dialog.role = "普通用户";
if (projeceRole == "L2") {
this.dialog.option = "升级为项目负责人";
} else if (projeceRole == "L3") {
this.dialog.option = "升级为次级负责人";
}
}
} }
} }
}; };
</script> </script>
<style lang="scss"> <style lang="scss">
.main-container { .item-role-wrap {
.component-content { .component-content {
margin-top: 50px;
margin-left: 10px;
padding: 10px; padding: 10px;
background: #fff;
.form-inline { .form-inline {
margin-left: 30px; margin-left: 30px;
} }
.button-green {
color: #ffffff;
background: #449284;
border-color: #bfdad5;
border-radius: 2px;
}
.button-white {
color: #606266;
background: #ffffff;
border-color: #ecedf1;
border-radius: 2px;
}
.header-title { .header-title {
padding: 10px 12px; padding: 10px 12px;
font-size: 12px; font-size: 12px;
color: #409eff; color: #449284;
border-bottom: 1px solid #efefef; border-bottom: 1px solid #efefef;
} }
.to-right { .dialog-p {
float: right; text-align: center;
} span {
.table-option span { color: #449284;
color: #409eff;
}
.add-button {
float: right;
}
.el-table .cell {
color: #929292;
} }
.el-table th > .cell {
font-weight: bold;
color: #000;
} }
} }
} }
......
<template> <template>
<div class="main-container"> <div class="role-wrap">
<bread-crumb :curmbFirst="curmbFirst" :curmbSecond="curmbSecond"></bread-crumb> <bread-crumb :curmbFirst="curmbFirst" :curmbSecond="curmbSecond"></bread-crumb>
<div class="component-content"> <div class="component-content screenSet">
<div class="header-title">查询条件</div> <div class="header-title">查询条件</div>
<el-form :inline="true" :model="formInline" class="demo-form-inline"> <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-form-item label="项目名称:">
<el-input v-model="formInline.name" placeholder="审批人"></el-input> <el-input v-model="formInline.projectName" size="mini" placeholder="请输入项目名称"></el-input>
</el-form-item> </el-form-item>
</el-col>
<el-col :span="6">
<el-form-item label="项目时间:"> <el-form-item label="项目时间:">
<el-date-picker v-model="formInline.startDates" type="date" placeholder="请选择开始时间"></el-date-picker> <el-date-picker
<el-date-picker v-model="formInline.endDate" type="date" placeholder="请选择结束时间"></el-date-picker> size="mini"
</el-form-item> type="daterange"
<el-form-item class="to-right"> start-placeholder="请选择项目开始时间"
<el-button class="button-white" plain>重置</el-button> end-placeholder="请选择项目结束时间"
</el-form-item> v-model="formInline.duringTime"
<el-form-item class="to-right"> value-format="yyyy-MM-dd HH:mm:ss"
<el-button class="button-green" type="primary">查询</el-button> ></el-date-picker>
</el-form-item> </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-form>
</el-row>
<el-table <el-table
v-loading="loading" v-loading="loading"
:data="tableData" :data="tableData"
:header-cell-style="{background:'#FAFAFA',color:'#000'}" :header-cell-style="{background:'#FAFAFA',color:'#000'}"
> >
<el-table-column prop="id" label="ID编号" width="140"></el-table-column> <el-table-column prop="createdId" label="ID编号" min-width="100" align="center"></el-table-column>
<el-table-column prop="projectName" label="项目名称" width="120"></el-table-column> <el-table-column prop="projectName" label="项目名称" min-width="100" align="center"></el-table-column>
<el-table-column prop="createName" label="创建人"></el-table-column> <el-table-column prop="createdName" label="创建人" align="center"></el-table-column>
<el-table-column prop="projectBrief" label="项目简介"></el-table-column> <el-table-column prop="projectIntro" label="项目简介" align="center"></el-table-column>
<el-table-column prop="address" label="所属地区"></el-table-column> <el-table-column prop="projectBegintime" label="项目开始时间" align="center"></el-table-column>
<el-table-column prop="startTime" label="项目开始时间"></el-table-column> <el-table-column prop="projectEndtime" label="项目结束时间" align="center"></el-table-column>
<el-table-column prop="endTime" label="项目结束时间"></el-table-column> <el-table-column prop="projectStatus" label="状态" align="center">
<el-table-column prop="state" label="状态"></el-table-column> <template slot-scope="scope">
<el-table-column fixed="right" label="操作" width="200"> <span>{{ scope.row.projectStatus | statusProject }}</span>
</template>
</el-table-column>
<el-table-column fixed="right" label="操作" width="200" align="center">
<template slot-scope="scope"> <template slot-scope="scope">
<el-button class="title" type="text" size="small" @click="toPage()">查看项目人员</el-button> <el-button type="primary" size="small" @click="toPage(scope.row)">查看项目人员</el-button>
</template> </template>
</el-table-column> </el-table-column>
</el-table> </el-table>
<div class="pagination">
<el-pagination <el-pagination
background
@size-change="handleSizeChange" @size-change="handleSizeChange"
@current-change="handleCurrentChange" @current-change="handleCurrentChange"
:current-page="currentPage" :current-page="formInline.pageNo"
:page-sizes="[100, 200, 300, 400]" :page-sizes="[10, 30, 50, 100]"
:page-size="100" :page-size="formInline.pageSize"
layout="total, sizes, prev, pager, next, jumper" layout="total, sizes, prev, pager, next, jumper"
:total="400" :total="totalRows"
></el-pagination> ></el-pagination>
</div> </div>
</div> </div>
</div>
</template> </template>
<script> <script>
import BreadCrumb from "../../components/breadcrumb.vue"; import BreadCrumb from "../../components/breadcrumb.vue";
import { create } from "domain"; import { create } from "domain";
let vm = null;
export default { export default {
components: { components: {
BreadCrumb BreadCrumb
}, },
data() { 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 { return {
curmbFirst: "系统管理", curmbFirst: "系统管理",
curmbSecond: "角色管理", curmbSecond: "角色管理",
tableData: Array(10).fill(item), tableData: [],
loading: false, loading: false,
timingTime: "", timingTime: "",
currentPage: 1, currentPage: 1,
duringTime: 0,
totalRows: 0,
formInline: { formInline: {
name: "", projectName: "",
startDate: "", projectBegintime: "",
endDate: "", projectEndtime: "",
type: "" duringTime: "",
pageNo: 1,
pageSize: 10
}
};
}, },
pickerOptions: { created() {
shortcuts: [ vm = this;
{ this.search();
text: "最近一周", },
onClick(picker) { methods: {
const end = new Date(); setParam(data) {
const start = new Date(); let param = {};
start.setTime(start.getTime() - 3600 * 1000 * 24 * 7); if (
picker.$emit("pick", [start, end]); 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() {
text: "最近一个月", let req = {};
onClick(picker) { console.log(this.formInline);
const end = new Date(); req = this.setParam(this.formInline);
const start = new Date(); vm.GET("portalInfo/getProjectList", req).then(res => {
start.setTime(start.getTime() - 3600 * 1000 * 24 * 30); if (res.code == "000000") {
picker.$emit("pick", [start, end]); vm.tableData = res.data.data;
vm.totalRows = res.data.totalRows;
this.loading = false;
} }
});
}, },
resetForm() {
vm.formInline = Object.assign(
{},
{ {
text: "最近三个月", projectName: "",
onClick(picker) { projectBegintime: "",
const end = new Date(); projectEndtime: "",
const start = new Date(); duringTime: "",
start.setTime(start.getTime() - 3600 * 1000 * 24 * 90); pageNo: 1,
picker.$emit("pick", [start, end]); pageSize: 10
} }
} );
] vm.search();
}
};
}, },
create() {}, toPage(row) {
methods: { this.$router.push("item-role?portalProjectId=" + row.id);
toPage() {
this.$router.push("item-role");
}, },
handleSizeChange(val) { handleSizeChange(val) {
console.log(`每页 ${val} 条`); console.log(`每页 ${val} 条`);
}, },
handleCurrentChange(val) { handleCurrentChange(val) {
console.log(`当前页: ${val}`); console.log(`当前页: ${val}`);
}, }
} }
}; };
</script> </script>
<style lang="scss"> <style lang="scss">
.main-container { .role-wrap {
.component-content { .component-content {
margin-top: 50px;
padding: 10px; padding: 10px;
.button-green { background: #fff;
color: #ffffff;
background: #449284;
border-color: #bfdad5;
border-radius: 2px;
}
.button-white {
color: #606266;
background: #ffffff;
border-color: #ecedf1;
border-radius: 2px;
}
.header-title { .header-title {
padding: 10px 12px; padding: 10px 12px;
font-size: 12px; font-size: 12px;
color: #409eff; color: #449284;
border-bottom: 1px solid #efefef; border-bottom: 1px solid #efefef;
} }
.to-right { .to-right {
......
Markdown 格式
0% or
您添加了 0 到此讨论。请谨慎行事。
先完成此消息的编辑!
想要评论请 注册