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

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

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