提交 9ea843e3 编写于 作者: 张平's avatar 张平

Merge branch 'dev-cme-20191227' into 'release'

Dev cme 20191227 工作站新增CME学分审核管理等页面 codereviewer 张平

工作站新增CME学分审核管理等页面 codereviewer 张平

See merge request !132
[1112/102746.726:ERROR:process_info.cc(329)] VirtualQueryEx: 拒绝访问。 (0x5)
[1112/102746.728:ERROR:process_info.cc(556)] ReadMemoryInfo failed
[1112/102746.728:ERROR:scoped_process_suspend.cc(40)] NtResumeProcess: 已尝试访问正在退出的过程。 (0xc000010a)
...@@ -12,6 +12,7 @@ const addManager = r => require.ensure([], () => r(require('../views/education/a ...@@ -12,6 +12,7 @@ const addManager = r => require.ensure([], () => r(require('../views/education/a
const editManager = r => require.ensure([], () => r(require('../views/education/edit-manager.vue')), 'edit-manager') const editManager = r => require.ensure([], () => r(require('../views/education/edit-manager.vue')), 'edit-manager')
const itemRole = r => require.ensure([], () => r(require('../views/system/item-role.vue')), 'item-role') const itemRole = r => require.ensure([], () => r(require('../views/system/item-role.vue')), 'item-role')
const msgPush = r => require.ensure([], () => r(require('../views/msgpush/msg-push.vue')), 'msg-push') const msgPush = r => require.ensure([], () => r(require('../views/msgpush/msg-push.vue')), 'msg-push')
const editCme = r => require.ensure([], () => r(require('../views/education/edit-cme.vue')), 'edit-cme')
import patientsRouters from './patients' import patientsRouters from './patients'
import followRouters from './follow' import followRouters from './follow'
...@@ -33,6 +34,11 @@ const entryManager = r => require.ensure([], () => r(require('../views/education ...@@ -33,6 +34,11 @@ const entryManager = r => require.ensure([], () => r(require('../views/education
const editEntry = r => require.ensure([], () => r(require('../views/education/edit-entry.vue')), 'edit-entry') const editEntry = r => require.ensure([], () => r(require('../views/education/edit-entry.vue')), 'edit-entry')
const editNotice = r => require.ensure([], () => r(require('../views/education/edit-notice.vue')), 'edit-notice') const editNotice = r => require.ensure([], () => r(require('../views/education/edit-notice.vue')), 'edit-notice')
const creditManage = r => require.ensure([], () => r(require('../views/cme/credit-manage.vue')), 'credit-manage')
const reviewAccessManage = r => require.ensure([], () => r(require('../views/cme/review-access-manage.vue')), 'review-access-manage')
const creditSendManage = r => require.ensure([], () => r(require('../views/cme/credit-send-manage.vue')), 'credit-send-manage')
const applyDetail = r => require.ensure([], () => r(require('../views/cme/apply-detail.vue')), 'apply-detail')
export default [{ export default [{
path: '/', path: '/',
component: App, component: App,
...@@ -63,6 +69,9 @@ export default [{ ...@@ -63,6 +69,9 @@ export default [{
},{ },{
path: '/edit-manager', path: '/edit-manager',
component: editManager component: editManager
},{
path: '/edit-cme',
component: editCme
},{ },{
path: '/item-component', path: '/item-component',
component: itemComponent component: itemComponent
...@@ -134,8 +143,22 @@ export default [{ ...@@ -134,8 +143,22 @@ export default [{
component: editNotice, component: editNotice,
// redirect: 'msgpush/msg-push', // redirect: 'msgpush/msg-push',
}, },
{
path: '/credit-manage',
component: creditManage,
},
{
path: '/review-access-manage',
component: reviewAccessManage,
},
{
path: '/credit-send-manage',
component: creditSendManage,
},
{
path: '/apply-detail',
component: applyDetail,
},
// { // {
// path: '/followup', // path: '/followup',
// name: 'followUp', // name: 'followUp',
......
const cmeStore = {
namespaced: true,
state: {
isOutsideUser: false,
},
mutations: {
UPDATE_OUTSIDE_USER_STATUS: (state, data) => {
state.isOutsideUser = data;
}
},
actions: {
updateOutUserStatus({ commit }, data) {
commit('UPDATE_OUTSIDE_USER_STATUS', data);
}
}
}
export default cmeStore;
\ No newline at end of file
...@@ -7,6 +7,9 @@ import getters from './getters' ...@@ -7,6 +7,9 @@ import getters from './getters'
//居民诊断 //居民诊断
import patientsDiagnose from './patientsManage/patientsDiagnose'; import patientsDiagnose from './patientsManage/patientsDiagnose';
// cme
import cmeStore from './cme/cmeStore';
Vue.use(Vuex) Vue.use(Vuex)
...@@ -15,6 +18,7 @@ export default new Vuex.Store({ ...@@ -15,6 +18,7 @@ export default new Vuex.Store({
common, common,
...followModules, ...followModules,
patientsDiagnose, patientsDiagnose,
cmeStore,
}, },
getters getters
}) })
......
import fetch from '../fetch';
import { getBaseUrl, getSaasDomain, getSaasApiDomain } from '@/utils/index'
let headers = {
'Content-Type': 'application/json;charset=UTF-8',
token: localStorage.getItem('storageToken'),
};
// 是否是外部用户
export const getUserTypeReq = (type) => {
return fetch({
headers,
url: getBaseUrl(`cme/admin/auth/external`),
method: 'get',
description: '获取是否是外部用户',
})
};
export const getSelectListReq = (type) => {
return fetch({
url: getBaseUrl(`cme/constants/list?code=${type}`),
method: 'get',
description: '获取学分等级 状态 学习形式',
})
};
// export const getConstants = (params) => {
// return fetch({
// headers,
// url: getBaseUrl(`basic-data/constants/`),
// method: 'get',
// params: params,
// description: '获取常量',
// })
// };
export const getCreditListReq = (params) => {
return fetch({
url: getBaseUrl(`cme/credit/list`),
method: 'get',
params: params,
description: '获取积分管理列表',
})
};
export const getRelatedCreditReq = (params) => {
return fetch({
url: getBaseUrl(`contents/certificate/select`),
method: 'get',
params: params,
description: '获取关联学分证书列表',
})
};
export const goUpReq = (data, id) => {
return fetch({
headers,
url: getBaseUrl(`cme/credit/deploy/${id}`),
method: 'post',
data: data,
description: '上架',
})
}
export const goDownReq = (data, id) => {
return fetch({
headers,
url: getBaseUrl(`cme/credit/revoke/${id}`),
method: 'post',
data: data,
description: '下架',
})
}
export const goAddNewReq = (data) => {
return fetch({
headers,
// url: 'http://10.177.15.4:13801/cme/credit/create',
url: getBaseUrl(`cme/credit/create`),
method: 'post',
data: data,
description: '新增学分记录',
})
}
// 审核权限管理页面
export const getAuthTableReq = (data) => {
return fetch({
headers,
url: getBaseUrl(`cme/admin/auth/list`),
method: 'post',
data: data,
description: '获取table列表',
})
}
export const getAccessListReq = (params) => {
return fetch({
url: getBaseUrl(`cme/constants/list?code=approval_auth`),
method: 'get',
params: params,
description: '获取权限下拉列表',
})
};
export const getUserListReq = (params) => {
return fetch({
headers,
url: getBaseUrl(`cme/admin/auth/userList`),
method: 'get',
params: params,
description: '获取待选用户列表',
})
};
export const handleSaveEditReq = (data) => {
return fetch({
headers,
url: getBaseUrl(`cme/admin/auth/save`),
method: 'post',
data: data,
description: '新增/编辑权限',
})
}
export const handleDeleteReq = (data) => {
return fetch({
headers,
url: getBaseUrl(`cme/admin/auth/remove`),
method: 'post',
data: data,
description: '删除',
})
}
// 学分发放管理页面
export const getSendListReq = (data) => {
return fetch({
headers,
url: getBaseUrl(`cme/admin/credit/creditList`),
method: 'post',
data: data,
description: '学分发放管理列表',
})
}
// 学分申请明细页面
export const getDetailListReq = (data) => {
return fetch({
headers,
url: getBaseUrl(`cme/admin/credit/creditDetails`),
method: 'post',
data: data,
description: '学分申请明细列表',
})
}
export const getCreditStatusReq = (params) => {
return fetch({
headers,
url: getBaseUrl(`cme/admin/credit/creditStatusList`),
method: 'get',
params: params,
description: '获取学分状态列表',
})
};
export const handleImportReq = (data) => {
return fetch({
headers,
url: getBaseUrl(`cme/admin/credit/importExcel`),
method: 'post',
data: data,
description: '导入',
})
}
export const handleExportReq = (data) => {
return fetch({
headers,
url: getBaseUrl(`cme/admin/credit/exportExcel`),
method: 'post',
data: data,
description: '导出',
})
}
\ No newline at end of file
...@@ -6,14 +6,14 @@ export const envConfig = { ...@@ -6,14 +6,14 @@ export const envConfig = {
// // baseUrl: 'http://10.177.15.180:10202/', // // baseUrl: 'http://10.177.15.180:10202/',
// // baseUrl: 'http://192.168.140.14:10201/', // // baseUrl: 'http://192.168.140.14:10201/',
// baseUrl: 'https://test1-sc.yunqueyi.com/', baseUrl: 'https://test1-sc.yunqueyi.com/',
// baseUrl: 'https://uat-sc.yunqueyi.com/', // baseUrl: 'https://uat-sc.yunqueyi.com/',
// baseUrl: 'http://10.177.15.150:10401/', // baseUrl: 'http://10.177.15.150:10401/',
// baseUrl: 'http://10.177.15.150:11905/', // baseUrl: 'http://10.177.15.150:11905/',
// baseUrl: 'https://dev-sc.yunqueyi.com/', // baseUrl: 'https://dev-sc.yunqueyi.com/',
// baseUrl: 'https://test1-sc.yunqueyi.com/', // baseUrl: 'https://test1-sc.yunqueyi.com/',
// baseUrl: 'https://sc.yunqueyi.com/', // baseUrl: 'https://sc.yunqueyi.com/',
baseUrl: 'https://uat-sc.yunqueyi.com/', // baseUrl: 'https://uat-sc.yunqueyi.com/',
apiUrl: 'https://uat-api.yunqueyi.com/', apiUrl: 'https://uat-api.yunqueyi.com/',
qiniuFileUrl: "https://uat-sc.yunqueyi.com/contents/admin/qiniu/token1", qiniuFileUrl: "https://uat-sc.yunqueyi.com/contents/admin/qiniu/token1",
qiniuResourceUrl: "https://test1-videos.yunqueyi.com", qiniuResourceUrl: "https://test1-videos.yunqueyi.com",
...@@ -35,6 +35,7 @@ export const envConfig = { ...@@ -35,6 +35,7 @@ export const envConfig = {
// reportUrl: 'https://uat-sc-report.yunqueyi.com/', // reportUrl: 'https://uat-sc-report.yunqueyi.com/',
excelUrl: 'https://uat-file.yunqueyi.com/File/template/portal/', excelUrl: 'https://uat-file.yunqueyi.com/File/template/portal/',
itemFileUrl: 'http://pica-test-huabei2.oss-cn-beijing.aliyuncs.com/File/template/portal/', itemFileUrl: 'http://pica-test-huabei2.oss-cn-beijing.aliyuncs.com/File/template/portal/',
cmsUrl: ' http://dev-cms.yunqueyi.com/',
}, },
dev: { dev: {
baseUrl: 'https://dev-sc.yunqueyi.com/', baseUrl: 'https://dev-sc.yunqueyi.com/',
...@@ -52,6 +53,7 @@ export const envConfig = { ...@@ -52,6 +53,7 @@ export const envConfig = {
reportUrl: 'https://dev-sc-report.yunqueyi.com/', reportUrl: 'https://dev-sc-report.yunqueyi.com/',
excelUrl: 'https://test-file.yunqueyi.com/File/template/portal/', excelUrl: 'https://test-file.yunqueyi.com/File/template/portal/',
itemFileUrl: 'http://pica-test-huabei2.oss-cn-beijing.aliyuncs.com/File/template/portal/', itemFileUrl: 'http://pica-test-huabei2.oss-cn-beijing.aliyuncs.com/File/template/portal/',
cmsUrl: ' http://dev-cms.yunqueyi.com/',
}, },
test: { test: {
baseUrl: 'https://test1-sc.yunqueyi.com/', baseUrl: 'https://test1-sc.yunqueyi.com/',
...@@ -69,6 +71,7 @@ export const envConfig = { ...@@ -69,6 +71,7 @@ export const envConfig = {
reportUrl: 'https://test1-sc-report.yunqueyi.com/', reportUrl: 'https://test1-sc-report.yunqueyi.com/',
excelUrl: 'https://test-file.yunqueyi.com/File/template/portal/', excelUrl: 'https://test-file.yunqueyi.com/File/template/portal/',
itemFileUrl: 'http://pica-test-huabei2.oss-cn-beijing.aliyuncs.com/File/template/portal/', itemFileUrl: 'http://pica-test-huabei2.oss-cn-beijing.aliyuncs.com/File/template/portal/',
cmsUrl: ' http://test1-cms.yunqueyi.com/',
}, },
test2: { test2: {
baseUrl: 'https://test2-work.yunqueyi.com/sc/', baseUrl: 'https://test2-work.yunqueyi.com/sc/',
...@@ -85,6 +88,7 @@ export const envConfig = { ...@@ -85,6 +88,7 @@ export const envConfig = {
reportUrl: 'https://test2-sc-report.yunqueyi.com/', reportUrl: 'https://test2-sc-report.yunqueyi.com/',
excelUrl: 'https://test-file.yunqueyi.com/File/template/portal/', excelUrl: 'https://test-file.yunqueyi.com/File/template/portal/',
itemFileUrl: 'http://pica-test-huabei2.oss-cn-beijing.aliyuncs.com/File/template/portal/', itemFileUrl: 'http://pica-test-huabei2.oss-cn-beijing.aliyuncs.com/File/template/portal/',
cmsUrl: ' http://test2-cms.yunqueyi.com/',
}, },
uat: { uat: {
baseUrl: 'https://uat-sc.yunqueyi.com/', baseUrl: 'https://uat-sc.yunqueyi.com/',
...@@ -102,6 +106,7 @@ export const envConfig = { ...@@ -102,6 +106,7 @@ export const envConfig = {
reportUrl: 'https://uat-sc-report.yunqueyi.com/', reportUrl: 'https://uat-sc-report.yunqueyi.com/',
excelUrl: 'https://test-file.yunqueyi.com/File/template/portal/', excelUrl: 'https://test-file.yunqueyi.com/File/template/portal/',
itemFileUrl: 'http://pica-test-huabei2.oss-cn-beijing.aliyuncs.com/File/template/portal/', itemFileUrl: 'http://pica-test-huabei2.oss-cn-beijing.aliyuncs.com/File/template/portal/',
cmsUrl: ' http://uat-cms.yunqueyi.com/',
}, },
pro: { pro: {
baseUrl: 'https://sc.yunqueyi.com/', baseUrl: 'https://sc.yunqueyi.com/',
...@@ -119,5 +124,6 @@ export const envConfig = { ...@@ -119,5 +124,6 @@ export const envConfig = {
reportUrl: 'https://sc-report.yunqueyi.com/', reportUrl: 'https://sc-report.yunqueyi.com/',
excelUrl: 'https://file.yunqueyi.com/File/template/portal/', excelUrl: 'https://file.yunqueyi.com/File/template/portal/',
itemFileUrl: 'http://pica-test-huabei2.oss-cn-beijing.aliyuncs.com/File/template/portal/', itemFileUrl: 'http://pica-test-huabei2.oss-cn-beijing.aliyuncs.com/File/template/portal/',
cmsUrl: ' http://cms.yunqueyi.com/',
} }
} }
...@@ -54,9 +54,7 @@ service.interceptors.request.use(config => { ...@@ -54,9 +54,7 @@ service.interceptors.request.use(config => {
} }
if( process.env.BUILD_ENV == "development" ){ // 本地开发环境 if( process.env.BUILD_ENV == "development" ){ // 本地开发环境
// console.log('环境变量>>>> ', process.env.BUILD_ENV); // console.log('环境变量>>>> ', process.env.BUILD_ENV);
// config.headers['token'] = 'BFD804F3A3194FBBBE113962222839F6'; config.headers['token'] = 'E5F82EDD958941C29BCDDDED410ACDB3';
// config.headers['token'] = 'F8209898391C40A0B8DBC1ED9E157291';
config.headers['token'] = '1653940AC9EE4C56B12440F98BE202D3';
}else{ }else{
config.headers['token'] = localStorage.getItem('storageToken') config.headers['token'] = localStorage.getItem('storageToken')
} }
......
...@@ -144,6 +144,16 @@ const vueFilter = { ...@@ -144,6 +144,16 @@ const vueFilter = {
return '已下架' return '已下架'
}else if(value[0] == 6) { }else if(value[0] == 6) {
return '已拒绝' return '已拒绝'
}else if(value[0] == 7) {
return '待初审'
}else if(value[0] == 8) {
return '初审未通过'
}else if(value[0] == 9) {
return '待复审'
}else if(value[0] == 10) {
return '复审未通过'
}else if(value[0] == 11) {
return '复审通过'
} }
}, },
projeceRoleType: (value) => { projeceRoleType: (value) => {
......
...@@ -221,3 +221,8 @@ export function getExeclUrl(url) { ...@@ -221,3 +221,8 @@ export function getExeclUrl(url) {
export function getItemFileUrl(url) { export function getItemFileUrl(url) {
return getConfigByEnvType('itemFileUrl') + url return getConfigByEnvType('itemFileUrl') + url
} }
// 获取老的cms接口域名地址
export function getCmsUrl(url) {
return getConfigByEnvType('cmsUrl') + url
}
\ No newline at end of file
import fetch from '@/utils/fetch' import fetch from '@/utils/fetch'
import { getBaseUrl, getReportUrl, getWorkApi } from '@/utils/index' import { getBaseUrl, getReportUrl, getWorkApi, getCmsUrl } from '@/utils/index'
import { CryptoJS } from '@/plugins/aes' import { CryptoJS } from '@/plugins/aes'
import 'jsencrypt' import 'jsencrypt'
...@@ -291,6 +291,15 @@ module.exports = { ...@@ -291,6 +291,15 @@ module.exports = {
data: para data: para
}) })
}, },
// 老的cms请求
cmsPOST(api, para, callback) {
// para.token = para.token || this.token || "343BCABC890349ACAF357FA79122F9FE"
return fetch({
url: getCmsUrl(api),
method: 'post',
data: para
})
},
// 通用saas-POST请求 // 通用saas-POST请求
saasPOST(api, para, cType) { saasPOST(api, para, cType) {
// para.token = para.token || this.token || "343BCABC890349ACAF357FA79122F9FE" // para.token = para.token || this.token || "343BCABC890349ACAF357FA79122F9FE"
......
...@@ -753,3 +753,35 @@ export function learnTimeValue(value) { ...@@ -753,3 +753,35 @@ export function learnTimeValue(value) {
} }
return result; return result;
} }
export function getProjectLevelList(data) {
let list = [];
for(let i = 0;i < data.length ; i++) {
let obj = {
value: data[i].id,
label: data[i].text,
}
list.push(obj);
}
return list;
}
export function getProjectLeaderList(data) {
let list = [];
for(let i = 0;i < data.length ; i++) {
let obj = {
value: data[i].id,
label: data[i].name,
}
list.push(obj);
}
return list;
}
export function getCreditList(data) {
let list = [];
for(let i = 0;i < data.length ; i++) {
let obj = data[i];
obj.id = data[i].id;
obj.label = data[i].name;
list.push(obj);
}
return list;
}
\ No newline at end of file
<template>
<div class="credit-manage-wrap">
<bread-crumb
:curmbFirst="curmbFirst"
:curmbSecond="curmbSecond"
:curmbThird="curmbThird"
:jumPathThird="jumPathThird">
</bread-crumb>
<div class="list-wrap screenSet" id="screenSet">
<div class="header-title">申请明细</div>
<el-form ref="form" :model="searchForm" label-width="100px" class="search-form-wrap">
<div style="width: 75%; float:left;">
<el-form-item label="姓名:" class="search-item">
<el-input v-model="searchForm.name" size="small" class="form-width" placeholder="请输入姓名"></el-input>
</el-form-item>
<!-- <el-form-item label="身份证号:" class="search-item">
<el-input v-model="searchForm.Idcard" size="small" class="form-width" placeholder="请输入项目名称"></el-input>
</el-form-item>
<el-form-item label="工作单位:" class="search-item">
<el-input v-model="searchForm.hospital" size="small" class="form-width" placeholder="请输入项目名称"></el-input>
</el-form-item> -->
<el-form-item label="学分状态:" class="search-item">
<el-select v-model="searchForm.status" placeholder="请选择" size="small" class="form-width">
<el-option v-for="(item, index) in statusList" :key="index" :label="item.text" :value="item.id"></el-option>
</el-select>
</el-form-item>
</div>
<div style="width: 25%; float: right;">
<el-form-item class="btn-list">
<el-button @click="goToSearch" type="primary" size="small">查询</el-button>
<el-button @click="handleReset" size="small">重置</el-button>
</el-form-item>
</div>
</el-form>
<div v-if="$store.state.cmeStore.isOutsideUser" class="export-wrap">
<el-upload
class="upload-import"
action="#"
accept=".xlsx"
:limit="1"
:show-file-list="false"
:on-exceed="handleExceed"
:before-upload="uploadImport">
<!-- <el-button size="small" type="primary">点击上传</el-button> -->
<el-button size="small" class="new-add" id="cmeImportBtn">导入</el-button>
</el-upload>
<el-button @click="handleExport('part')" type="primary" size="small" class="new-add">部分导出</el-button>
<el-button @click="handleExport('all')" type="primary" size="small" class="new-add">全部导出</el-button>
</div>
<template v-if="tableData.length > 0">
<el-table
ref="multipleTable"
:data="tableData"
tooltip-effect="dark"
style="width: 100%"
class="table-list"
@selection-change="handleSelectionChange">
<el-table-column type="selection" width="55"></el-table-column>
<el-table-column align="center" prop="cmeIcCardNumber" label="IC卡号" show-overflow-tooltip width="150" ></el-table-column>
<el-table-column align="center" prop="name" label="姓名" show-overflow-tooltip width="150"></el-table-column>
<el-table-column align="center" prop="card" label="身份证号" show-overflow-tooltip width="200"></el-table-column>
<el-table-column align="center" prop="serialNo" label="课题编号" show-overflow-tooltip width="150"></el-table-column>
<el-table-column align="center" prop="courseName" label="课程名称" show-overflow-tooltip width="150"></el-table-column>
<el-table-column align="center" prop="studyType" label="学分类别" show-overflow-tooltip width="150"></el-table-column>
<el-table-column align="center" prop="creditValue" label="学分" show-overflow-tooltip width="100"></el-table-column>
<el-table-column align="center" prop="creditTime" label="学时" show-overflow-tooltip width="100"></el-table-column>
<el-table-column align="center" prop="title" label="职称" show-overflow-tooltip width="150"></el-table-column>
<el-table-column align="center" prop="hospital" label="单位名称" show-overflow-tooltip width="200"></el-table-column>
<el-table-column align="center" prop="taskType" label="活动形式" show-overflow-tooltip width="150"></el-table-column>
<el-table-column align="center" prop="department" label="所属学科" show-overflow-tooltip width="150"></el-table-column>
<el-table-column align="center" prop="authName" label="授分单位" show-overflow-tooltip width="150"></el-table-column>
<el-table-column align="center" prop="taskTime" label="活动日期" show-overflow-tooltip width="200"></el-table-column>
<el-table-column align="center" label="学分状态" show-overflow-tooltip width="150">
<template slot-scope="scope">
{{ returnStatusText(scope.row.creditStatus) }}
</template>
</el-table-column>
<el-table-column align="center" prop="disapprove" label="失败原因" show-overflow-tooltip width="200"></el-table-column>
<div slot="empty">
<div class="table-empty">
<img src="../../assets/image/no-content1.png">
<p>没有查询到相关结果</p>
</div>
</div>
</el-table>
<div class="pagination">
<el-pagination
class="pagination-style"
@size-change="handleSizeChange"
@current-change="handleCurrentChange"
:total="totalRows"
:current-page="searchForm.pageNo"
:page-sizes="[15, 30, 50, 100]"
:page-size="searchForm.pageSize"
layout="total, sizes, prev, pager, next, jumper">
</el-pagination>
</div>
</template>
<template v-if="tableData.length < 1">
<div class="table-empty-out" >
<img src="../../assets/image/no-content1.png">
<p>没有查询到相关结果</p>
</div>
</template>
</div>
<el-dialog
title="提示"
:visible.sync="importFailVisible"
width="600px"
class="import-fail-wrap"
:close-on-click-modal="false"
center>
<p class="top-title">导入失败</p>
<p class="gray response-text">{{ importFailText }}</p>
<p class="gray">仅支持xlsx格式的文件</p>
<p class="gray">每条数据至少包含姓名、手机号、身份证号和IC卡号</p>
<span slot="footer" class="dialog-footer">
<el-button type="primary" @click="handleReImport">重新导入</el-button>
<el-button @click="importFailVisible = false">取 消</el-button>
</span>
</el-dialog>
</div>
</template>
<script>
import { openLoading, closeLoading } from "../../utils/utils";
import BreadCrumb from "../../components/breadcrumb.vue";
import * as commonUtil from "../../utils/utils";
import {
getDetailListReq,
handleExportReq,
handleImportReq,
getCreditStatusReq,
} from '@/utils/cme/cmeApi'
export default {
data() {
return {
curmbFirst: "CME",
curmbSecond: "学分发放管理",
curmbThird: "申请明细",
jumPathThird: '/credit-send-manage',
importFailVisible: false,
importFailText: '',
totalRows: 0,
searchForm: {
cmeProjectId: '',
name: '',
// Idcard: '',
// hospital: '',
status: '',
pageNo: 1,
pageSize: 15,
},
statusList: [],
tableData: [],
creditStatus: { //学分状态: 1 审核中; 2 审核通过 3 审核失败
1: '审核中',
2: '审核通过',
3: '审核失败',
},
multipleSelection: [],
}
},
components: {
BreadCrumb
},
created() {
this.searchForm.cmeProjectId = this.$route.query.id;
// console.log(this.searchForm.cmeProjectId);
this.goToSearch();
this.getCreditStatusList();
},
mounted() {
commonUtil.resizeHeight();
},
methods: {
goToSearch() {
this.searchForm.pageNo = 1;
// this.searchForm.pageSize = 15;
this.getDetailList();
},
getDetailList() {
let req = this.searchForm;
// let req = {
// cmeProjectId: 3,
// pageNo: 1,
// pageSize: 15,
// };
openLoading(this);
getDetailListReq(req).then(res => {
closeLoading(this);
if (res.code == "000000") {
// console.log('申请明细 ', res)
if (res.data && res.data.data) {
this.tableData = res.data.data;
this.totalRows = res.data.totalRows;
} else {
this.tableData = [];
}
} else {
this.$message(res.message);
}
}).catch(err => {
this.$message.error('请求失败');
});
},
// 获取学分状态列表
getCreditStatusList() {
let req = {};
getCreditStatusReq(req).then(res => {
if (res.code == "000000") {
this.statusList = res.data;
} else {
this.$message(res.message);
}
}).catch(err => {
this.$message.error('请求失败');
});
},
handleReset() {
this.searchForm.name = '';
// this.searchForm.Idcard = '';
// this.searchForm.hospital = '';
this.searchForm.status = '';
},
returnStatusText(status) {
let statusVal = this.creditStatus[status];
return statusVal ? statusVal : '-';
},
handleSelectionChange(val) {
this.multipleSelection = val;
},
handleExport(type) {
// debugger;
let req = {};
if (type == 'all') { // all 全选 part 非全选
if (this.tableData.length < 1) {
this.$message.error('暂无可导出项');
return;
}
req = {
name: this.searchForm.name,
creditStatus: this.searchForm.status,
cmeId: this.$route.query.id,
idList: [],
selectedStatus: 1, // 1 全选 2 非全选
};
} else {
let selectList = this.multipleSelection;
if( selectList.length < 1 ){
this.$message.error('请勾选导出项后,再执行部分导出');
return;
}
let list = [];
for(let i=0; i<selectList.length; i++){
list.push(selectList[i].id)
}
req = {
name: this.searchForm.name,
creditStatus: this.searchForm.status,
cmeId: this.$route.query.id,
idList: list,
selectedStatus: 2, // 1 全选 2 非全选
};
}
openLoading(this);
handleExportReq(req).then(res => {
closeLoading(this);
// debugger;
if (res.code == "000000") {
// console.log('导出', res)
if (res.data) {
this.downloadFile(res.data)
} else {
this.$message.error('接口返回数据错误');
}
} else {
this.$message(res.message);
}
}).catch(err => {
this.$message.error('请求失败');
});
},
handleExceed() {
},
downloadFile(base64) {
let a = document.createElement('a');
let uploadHref = 'data:application/xls;base64,' + base64;
a.setAttribute('href', uploadHref);
let exportFileName = '学分明细' + '.xlsx';
a.setAttribute('download', exportFileName);
a.click();
},
uploadImport(file) {
// console.log('上传file: ', file)
let req = {
file: file,
};
let fd = new FormData()
fd.append('file', file)
// openLoading(this);
handleImportReq(fd).then(res => {
// closeLoading(this);
// console.log('上传》》》@@@@@@@', res)
if (res.code == "000000") {
this.$message({
message: '上传成功!',
type: 'success'
});
// 重新获取列表
this.searchForm = {
cmeProjectId: this.$route.query.id,
name: '',
status: '',
pageNo: 1,
pageSize: 15,
},
this.goToSearch();
} else {
// 显示上传错误弹窗
this.importFailVisible = true;
this.importFailText = res.message;
}
}).catch(err => {
this.$message.error('请求失败');
});
},
handleReImport() {
this.importFailVisible = false;
let btn = document.getElementById('cmeImportBtn');
btn.click();
},
handleSizeChange(val){
// console.log('handleSizeChange>>>')
this.searchForm.pageSize = val;
this.goToSearch();
},
handleCurrentChange(val){
// 切换当前页
this.searchForm.pageNo = val;
this.getDetailList();
},
},
}
</script>
<style lang="scss">
.credit-manage-wrap{
@mixin scroll-bar{
/*定义滚动条高宽及背景 高宽分别对应横竖滚动条的尺寸*/
&::-webkit-scrollbar
{
width: 20px !important;
height: 20px !important;
background-color: #FFF;
}
/*定义滚动条轨道 内阴影+圆角*/
&::-webkit-scrollbar-track
{
border-radius: 0px;
background: #f1f1f1;
}
/*定义滑块 内阴影+圆角*/
&::-webkit-scrollbar-thumb
{
border-radius: 0px;
-webkit-box-shadow: inset 0 0 6px #c1c1c1;
background-color: #c1c1c1;
}
}
.list-wrap{
padding: 10px;
background: #fff;
.table-empty {
img {
width: 100px;
}
p {
margin-top: -50px;
}
}
.table-empty-out{
img {
width: 100px; display: block;
margin: 0 auto;
}
p {
text-align: center; color: #909399; font-size: 14px;
}
}
.el-button--small{
font-size: 14px;
}
.search-item{
float: left;
}
.form-width{
width: 200px;
}
.header-title {
padding: 10px 12px 20px;
font-size: 14px;
color: #606266;
border-bottom: 1px solid #efefef;
}
.btn-list{
float: right;
margin-right: 30px;
.el-form-item__content{
margin-left: 0 !important;
}
}
.search-form-wrap{
padding: 25px 0 20px;
overflow: hidden;
border-bottom: 1px dashed #efefef;
}
.new-add{
float: right;
margin: 10px 0 20px 15px;
}
.export-wrap{
overflow: hidden;
}
.upload-import{
float: right;
}
.el-table__body-wrapper{
@include scroll-bar;
}
}
.import-fail-wrap{
.top-title{
text-align: center; font-size: 18px; font-weight: 700;
padding-bottom: 10px;
}
.gray{
padding-left: 100px;
line-height: 20px;
font-size: 14px;
&.response-text{
color: #6f6f6f; line-height: 30px;
}
}
}
}
</style>
\ No newline at end of file
<template>
<div class="credit-manage-wrap">
<bread-crumb :curmbFirst="curmbFirst" :curmbSecond="curmbSecond"></bread-crumb>
<div class="credit-list screenSet" id="screenSet">
<el-form ref="form" :model="searchForm" label-width="80px">
<div style="width: 75%; float:left;">
<el-form-item label="学分名称:" class="search-item">
<el-input v-model="searchForm.name" placeholder="请输入学分名称" size="small" class="form-width"></el-input>
</el-form-item>
<el-form-item label="学分等级:" class="search-item">
<el-select v-model="searchForm.grade" placeholder="请选择" size="small" class="form-width">
<el-option v-for="(item, index) in creditGrade" :key="index" :label="item.text" :value="item.id"></el-option>
</el-select>
</el-form-item>
<el-form-item label="状态:" class="search-item">
<el-select v-model="searchForm.status" placeholder="请选择" size="small" class="form-width">
<el-option v-for="(item, index) in creditStatus" :key="index" :label="item.text" :value="item.id"></el-option>
</el-select>
</el-form-item>
</div>
<div style="width: 25%; float: right;">
<el-form-item class="btn-list">
<el-button @click="goToSearch" size="small">搜索</el-button>
<el-button @click="goToReset" size="small">重置</el-button>
<el-button @click="showNewAddForm" type="primary" size="small">新增学分</el-button>
</el-form-item>
</div>
</el-form>
<el-table :data="tableData" border style="width: 100%">
<el-table-column align="center" prop="id" label="编号" width="80"></el-table-column>
<el-table-column align="center" prop="name" label="学分名称" ></el-table-column>
<el-table-column align="center" prop="org" label="主管机构" ></el-table-column>
<el-table-column align="center" prop="studyTypeText" label="学习形式" ></el-table-column>
<el-table-column align="center" prop="gradeText" label="学分等级"></el-table-column>
<el-table-column align="center" prop="value" label="项目学分分值" ></el-table-column>
<el-table-column align="center" prop="modifiedName" label="最后修改者" ></el-table-column>
<el-table-column align="center" prop="modifiedTime" label="最后修改日期" ></el-table-column>
<el-table-column align="center" prop="statusText" label="状态" ></el-table-column>
<el-table-column align="center" label="操作">
<template slot-scope="scope">
<el-button @click="operationClick(scope.row)" type="text" size="small">
{{ returnHandleText(scope.row) }}
</el-button>
</template>
</el-table-column>
<div slot="empty">
<div class="table-empty">
<img src="../../assets/image/no-content1.png">
<p>没有查询到相关结果</p>
</div>
</div>
</el-table>
<div class="pagination">
<el-pagination
class="pagination-style"
@size-change="handleSizeChange"
@current-change="handleCurrentChange"
:total="totalRows"
:current-page="searchForm.pageNo"
:page-sizes="[15, 30, 50, 100]"
:page-size="searchForm.pageSize"
layout="total, sizes, prev, pager, next, jumper">
</el-pagination>
</div>
</div>
<!-- 新增学分 弹窗 -->
<el-dialog
title="学分新增"
@close="hideNewAddForm"
:visible.sync="centerDialogVisible"
:close-on-click-modal="false"
width="600px"
center>
<el-form ref="addForm" :rules="rules" :model="addForm" label-width="120px">
<el-form-item label="学分名称:" class="search-item" prop="name">
<el-input v-model="addForm.name" size="small" class="wide-form"></el-input>
</el-form-item>
<el-form-item label="主管机构:" class="search-item" prop="org">
<el-input v-model="addForm.org" size="small" class="wide-form"></el-input>
</el-form-item>
<el-form-item label="学习形式:" class="search-item" prop="studyType">
<el-radio-group v-model="addForm.studyType">
<el-radio :label="item.id" v-for="(item, index) in studyType" :key="index">{{ item.text }}</el-radio>
</el-radio-group>
</el-form-item>
<el-form-item label="学分等级:" class="search-item" prop="grade">
<el-select v-model="addForm.grade" placeholder="请选择" size="small" class="form-width">
<el-option v-for="(item, index) in creditGrade" :key="index" :label="item.text" :value="item.id"></el-option>
</el-select>
</el-form-item>
<el-form-item label="项目学分分值:" class="search-item" prop="value">
<el-input v-model="addForm.value" size="small" class="form-width" type="number" min="0"></el-input>
</el-form-item>
<el-form-item label="关联学分证书:" class="search-item" prop="certificateId">
<el-select v-model="addForm.certificateId" placeholder="请选择" size="small" class="form-width">
<el-option v-for="(item, index) in relateList" :key="index" :label="item.name" :value="item.id"></el-option>
</el-select>
</el-form-item>
</el-form>
<span slot="footer" class="dialog-footer">
<el-button @click="hideNewAddForm">取 消</el-button>
<el-button type="primary" @click="submitForm('addForm')">确 定</el-button>
</span>
</el-dialog>
<!-- 新增的确认弹窗 -->
<el-dialog
:visible.sync="submitConfirmVisible"
:close-on-click-modal="false"
:show-close="false"
width="350px"
center>
<p style="text-align: center;">提交后不可修改,请确认</p>
<span slot="footer" class="dialog-footer">
<el-button @click="submitConfirmVisible = false">取 消</el-button>
<el-button type="primary" @click="submitConfirmClick">确 定</el-button>
</span>
</el-dialog>
</div>
</template>
<script>
import { openLoading, closeLoading } from "../../utils/utils";
import BreadCrumb from "../../components/breadcrumb.vue";
import * as commonUtil from "../../utils/utils";
import {
getSelectListReq,
getCreditListReq,
getRelatedCreditReq,
goUpReq,
goDownReq,
goAddNewReq
} from '@/utils/cme/cmeApi'
export default {
data() {
var validateCreditValue = (rule, value, callback) => {
if (value <= 0) {
return callback(new Error('项目学分分值需大于0'));
} else {
console.log(value)
let isBadValue = /[-+]/.test(value);
if (isBadValue) {
return callback(new Error('项目学分分值需大于0'));
}
let arr = value.split('.');
if (arr.length > 1) {
let temp = arr[1];
if (temp.length > 1) {
return callback(new Error('项目学分分值 最多1位小数'));
}
}
}
callback();
};
return {
curmbFirst: "CME",
curmbSecond: "学分管理列表",
totalRows: 0,
searchForm: {
name: '',
grade: '',
status: '',
pageNo: 1,
pageSize: 15,
},
creditGrade: [], // 学分等级
creditStatus: [], // 状态
studyType: [], // 学习形式
relateList: [], // 关联学分证书列表
centerDialogVisible: false,
submitConfirmVisible: false,
tableData: [],
handleStatusText: { // 1 已创建状态>显示上架; 2 上架状态>显示下架; 3 下架状态>显示上架
1: '上架',
2: '下架',
3: '上架',
},
addForm: {
name: '',
org: '',
studyType: 1,
grade: '',
value: '',
certificateId: '',
},
rules: {
name: [{ required: true, message: '请输入', trigger: 'blur' }],
org: [{ required: true, message: '请输入', trigger: 'blur' }],
studyType: [{ required: true, message: '请选择', trigger: 'blur' }],
grade: [{ required: true, message: '请选择', trigger: 'blur' }],
value: [
{ required: true, message: '请输入项目学分分值', trigger: 'blur' },
{ validator: validateCreditValue, trigger: 'blur' }
],
certificateId: [{ required: true, message: '请选择', trigger: 'blur' }],
}
}
},
components: {
BreadCrumb
},
created() {
this.getSelectList('credit_grade'); // get 学分等级
this.getSelectList('credit_status'); // get 状态
this.getSelectList('study_type'); // get 学习形式
this.goToSearch();
},
mounted() {
commonUtil.resizeHeight();
},
methods: {
// 获取 学分等级/状态/学习形式 常亮接口
getSelectList(type) {
// openLoading(this);
getSelectListReq(type).then(res => {
// closeLoading(this);
if (res.code == "000000") {
if (type == 'credit_grade') {
this.creditGrade = res.data;
} else if (type == 'credit_status') {
this.creditStatus = res.data;
} else if (type == 'study_type') {
this.studyType = res.data;
// console.log('学习形式: ', this.studyType)
}
} else {
this.$message(res.message);
}
}).catch(err => {
this.$message.error('请求失败');
});
},
goToSearch() {
this.searchForm.pageNo = 1;
// this.searchForm.pageSize = 15;
this.getCreditList();
},
goToReset() {
this.searchForm = {
name: '',
grade: '',
status: '',
pageNo: 1,
pageSize: 15,
};
},
// 获取 学分table列表
getCreditList() {
let req = this.searchForm;
openLoading(this);
getCreditListReq(req).then(res => {
closeLoading(this);
if (res.code == "000000") {
// console.log('@@@@@@@', res.data.contentList)
if (res.data && res.data.contentList) {
this.tableData = res.data.contentList;
this.totalRows = res.data.total;
} else {
this.tableData = [];
}
} else {
this.$message(res.message);
}
}).catch(err => {
this.$message.error('请求失败');
});
},
// 操作内的文案
returnHandleText(row) {
let status = row.status;
// console.log('>>>>**** status ', status)
return this.handleStatusText[status] || '';
},
// 获取 关联学分证书
getRelatedCredit() {
let req = {};
getRelatedCreditReq(req).then(res => {
if (res.code == "000000") {
// console.log('获取关联学分证书接口 ', res)
if (res.data && res.data.list) {
this.relateList = res.data.list;
} else {
this.relateList = [];
}
} else {
this.$message(res.message);
}
}).catch(err => {
this.$message.error('请求失败');
});
},
operationClick(row) {
// console.log('操作: ', row)
let status = row.status;
// 1 已创建状态>显示上架; 2 上架状态>显示下架; 3 下架状态>显示上架
if (status == 1 || status == 3){ // 去上架
this.goUp(row.id);
} else if (status == 2) { // 去下架
this.goDown(row.id);
}
},
goUp(id) {
openLoading(this);
let req = {};
goUpReq(req, id).then(res => {
closeLoading(this);
// console.log('上架英文', res)
if (res.code == "000000") {
this.getCreditList();
} else {
this.$message(res.message);
}
}).catch(err => {
this.$message.error('请求失败');
});
},
goDown(id) {
openLoading(this);
let req = {};
goDownReq(req, id).then(res => {
closeLoading(this);
// console.log('下架英文', res)
if (res.code == "000000") {
this.getCreditList();
} else {
this.$message(res.message);
}
}).catch(err => {
this.$message.error('请求失败');
});
},
showNewAddForm() {
this.centerDialogVisible = true;
this.getRelatedCredit();
},
hideNewAddForm() {
this.centerDialogVisible = false;
this.resetForm('addForm');
},
resetForm(formName) {
this.$refs[formName].resetFields();
},
submitForm(formName) {
this.$refs[formName].validate((valid) => {
if (valid) {
// alert('submit!');
this.showSubmitConfirm();
} else {
console.log('error submit!!');
return false;
}
});
},
showSubmitConfirm() {
this.submitConfirmVisible = true;
},
submitConfirmClick() {
this.goAddNew();
},
goAddNew() {
let req = this.addForm;
goAddNewReq(req).then(res => {
closeLoading(this);
// console.log('新增积分记录', res)
if (res.code == "000000") {
this.submitConfirmVisible = false;
this.hideNewAddForm();
this.getCreditList();
} else {
this.$message(res.message);
}
}).catch(err => {
this.$message.error('请求失败');
});
},
handleSizeChange(val){
// console.log('handleSizeChange>>>')
this.searchForm.pageSize = val;
this.goToSearch();
},
handleCurrentChange(val){
// 切换当前页
this.searchForm.pageNo = val;
this.getCreditList();
},
},
}
</script>
<style lang="scss">
.credit-manage-wrap{
.form-width{
width: 200px;
}
.wide-form{
width: 300px;
}
.credit-list{
padding: 10px;
background: #fff;
.el-button--small{
font-size: 14px;
}
.search-item{
float: left;
}
.btn-list{
float: right;
margin-right: 30px;
.el-form-item__content{
margin-left: 0 !important;
}
}
.table-empty {
img {
width: 100px;
}
p {
margin-top: -50px;
}
}
}
}
</style>
\ No newline at end of file
<template>
<div class="credit-manage-wrap">
<bread-crumb :curmbFirst="curmbFirst" :curmbSecond="curmbSecond"></bread-crumb>
<div class="list-wrap screenSet" id="screenSet">
<div class="header-title">学分发放管理</div>
<el-form ref="form" :model="searchForm" label-width="100px" class="search-form-wrap">
<div style="width: 75%; float:left;">
<el-form-item label="项目编号:" class="search-item">
<el-input v-model="searchForm.serialNo" size="small" class="form-width" placeholder="请输入项目编号"></el-input>
</el-form-item>
<el-form-item label="项目名称:" class="search-item">
<el-input v-model="searchForm.projectName" size="small" class="form-width" placeholder="请输入项目名称"></el-input>
</el-form-item>
<el-form-item label="项目时间:" class="search-item">
<el-date-picker
v-model="searchForm.beginTime"
type="datetime"
size="small"
value-format="yyyy-MM-dd HH:mm:ss"
placeholder="请选择开始日期">
</el-date-picker>
<span style="color: #DCDFE6;"></span>
<el-date-picker
v-model="searchForm.endTime"
type="datetime"
size="small"
value-format="yyyy-MM-dd HH:mm:ss"
placeholder="请选择结束日期">
</el-date-picker>
</el-form-item>
</div>
<div style="width: 25%; float: right;">
<el-form-item class="btn-list">
<el-button @click="goToSearch" type="primary" size="small">查询</el-button>
<el-button @click="handleReset" size="small">重置</el-button>
</el-form-item>
</div>
</el-form>
<el-table
ref="multipleTable"
:data="tableData"
tooltip-effect="dark"
style="width: 100%"
@selection-change="handleSelectionChange">
<el-table-column align="center" prop="serialNo" label="项目编号" show-overflow-tooltip></el-table-column>
<el-table-column align="center" prop="name" label="项目名称" show-overflow-tooltip></el-table-column>
<el-table-column align="center" prop="beginTime" label="项目开始时间" show-overflow-tooltip></el-table-column>
<el-table-column align="center" prop="endTime" label="项目结束时间" show-overflow-tooltip></el-table-column>
<el-table-column align="center" prop="status" label="项目状态" show-overflow-tooltip>
<template slot-scope="scope">
{{ returnStatusText(scope.row.timeStatus ) }}
</template>
</el-table-column>
<el-table-column align="center" label="操作">
<template slot-scope="scope">
<el-button @click="goToApplyDetail(scope.row)" type="text" size="small">查看申请明细</el-button>
</template>
</el-table-column>
<div slot="empty">
<div class="table-empty">
<img src="../../assets/image/no-content1.png">
<p>没有查询到相关结果</p>
</div>
</div>
</el-table>
<div class="pagination">
<el-pagination
class="pagination-style"
@size-change="handleSizeChange"
@current-change="handleCurrentChange"
:total="totalRows"
:current-page="searchForm.pageNo"
:page-sizes="[15, 30, 50, 100]"
:page-size="searchForm.pageSize"
layout="total, sizes, prev, pager, next, jumper">
</el-pagination>
</div>
</div>
</div>
</template>
<script>
import { openLoading, closeLoading } from "../../utils/utils";
import BreadCrumb from "../../components/breadcrumb.vue";
import * as commonUtil from "../../utils/utils";
import {
getSendListReq,
} from '@/utils/cme/cmeApi'
export default {
data() {
return {
curmbFirst: "CME",
curmbSecond: "学分发放管理",
totalRows: 0,
searchForm: {
serialNo: '',
projectName: '',
beginTime: '',
endTime: '',
pageNo: 1,
pageSize: 15,
},
projectStatus: {
1: '进行中',
2: '已结束',
},
tableData: [],
multipleSelection: [],
}
},
components: {
BreadCrumb
},
created() {
this.goToSearch();
},
mounted() {
commonUtil.resizeHeight();
},
methods: {
goToSearch() {
this.searchForm.pageNo = 1;
// this.searchForm.pageSize = 15;
this.getSendList();
},
getSendList() {
let req = this.searchForm;
openLoading(this);
getSendListReq(req).then(res => {
closeLoading(this);
if (res.code == "000000") {
// console.log('@@@@@@@', res)
if (res.data && res.data.data) {
this.tableData = res.data.data;
this.totalRows = res.data.totalRows;
} else {
this.tableData = [];
}
} else {
this.$message(res.message);
}
}).catch(err => {
this.$message.error('请求失败');
});
},
handleReset() {
this.searchForm.serialNo = '';
this.searchForm.projectName = '';
this.searchForm.beginTime = '';
this.searchForm.endTime = '';
},
handleSelectionChange(val) {
this.multipleSelection = val;
},
returnStatusText(status) {
let statusVal = this.projectStatus[status];
return statusVal ? statusVal : '-';
},
goToApplyDetail(row) {
// console.log('去申请明细页面 ', row);
this.$router.push({
path: '/apply-detail',
query: {
id: row.id
}
})
},
handleSizeChange(val){
// console.log('handleSizeChange>>>')
this.searchForm.pageSize = val;
this.goToSearch();
},
handleCurrentChange(val){
// 切换当前页
this.searchForm.pageNo = val;
this.getSendList();
},
},
}
</script>
<style lang="scss">
.credit-manage-wrap{
.list-wrap{
padding: 10px;
background: #fff;
.el-button--small{
font-size: 14px;
}
.search-item{
float: left;
}
.form-width{
width: 200px;
}
.header-title {
padding: 10px 12px 20px;
font-size: 14px;
color: #606266;
border-bottom: 1px solid #efefef;
}
.btn-list{
float: right;
margin-right: 30px;
.el-form-item__content{
margin-left: 0 !important;
}
}
.search-form-wrap{
padding: 25px 0 20px;
overflow: hidden;
border-bottom: 1px dashed #efefef;
}
.table-empty {
img {
width: 100px;
}
p {
margin-top: -50px;
}
}
}
}
</style>
\ No newline at end of file
<template>
<div class="review-access-wrap">
<bread-crumb :curmbFirst="curmbFirst" :curmbSecond="curmbSecond"></bread-crumb>
<div class="review-access screenSet" id="screenSet">
<div class="header-title">审核权限管理</div>
<el-form ref="form" :model="searchForm" label-width="100px" class="search-form-wrap">
<el-form-item label="姓名:" class="search-item" >
<el-input v-model="searchForm.doctorName" size="small" class="form-width" placeholder="请输入姓名"></el-input>
</el-form-item>
<el-form-item label="权限:" class="search-item">
<el-select v-model="searchForm.authId" placeholder="请选择" size="small" class="form-width">
<el-option v-for="(item, index) in accessList" :key="index" :label="item.text" :value="item.id"></el-option>
</el-select>
</el-form-item>
<el-form-item class="btn-list">
<el-button @click="goToSearch(1)" type="primary" size="small">查询</el-button>
<el-button @click="goToReset" size="small">重置</el-button>
</el-form-item>
</el-form>
<div>
<el-button @click="goToAdd" type="primary" size="small" class="new-add">新增</el-button>
</div>
<el-table :data="tableData" border style="width: 100%">
<el-table-column align="center" prop="seq" label="编号"></el-table-column>
<el-table-column align="center" prop="doctorName" label="姓名" ></el-table-column>
<el-table-column align="center" prop="authName" label="权限" ></el-table-column>
<el-table-column align="center" label="操作">
<template slot-scope="scope">
<el-button @click="goToEdit(scope.row)" type="text" size="small">编辑</el-button>
<el-button @click="goToDelete(scope.row)" type="text" size="small">删除</el-button>
</template>
</el-table-column>
<div slot="empty">
<div class="table-empty">
<img src="../../assets/image/no-content1.png">
<p>没有查询到相关结果</p>
</div>
</div>
</el-table>
<div class="pagination">
<el-pagination
class="pagination-style"
@size-change="handleSizeChange"
@current-change="handleCurrentChange"
:total="totalRows"
:current-page="searchForm.pageNo"
:page-sizes="[15, 30, 50, 100]"
:page-size="searchForm.pageSize"
layout="total, sizes, prev, pager, next, jumper">
</el-pagination>
</div>
</div>
<!-- 新增/编辑 弹窗 -->
<el-dialog
title="新增/编辑权限"
@close="hideAddEditForm"
:visible.sync="addEditVisible"
:close-on-click-modal="false"
width="600px"
center>
<el-form ref="addEditForm" :rules="rules" :model="addEditForm" label-width="120px">
<el-form-item label="姓名:" class="search-item" prop="doctorId">
<el-select v-model="addEditForm.doctorId" placeholder="请选择" size="small" class="form-width">
<el-option v-for="(item, index) in nameList" :key="index" :label="item.text" :value="item.id"></el-option>
</el-select>
</el-form-item>
<el-form-item label="权限:" class="search-item" prop="authId">
<el-select v-model="addEditForm.authId" placeholder="请选择" size="small" class="form-width">
<el-option v-for="(item, index) in accessList" :key="index" :label="item.text" :value="item.id"></el-option>
</el-select>
</el-form-item>
</el-form>
<span slot="footer" class="dialog-footer">
<el-button @click="hideAddEditForm">取 消</el-button>
<el-button type="primary" @click="submitForm('addEditForm')">确 定</el-button>
</span>
</el-dialog>
<!-- 删除 弹窗 -->
<el-dialog
title="删除"
@close="hideDeleteFrom"
:visible.sync="deleteVisible"
:close-on-click-modal="false"
width="600px"
center>
<p style="text-align: center;">确定删除该权限?</p>
<span slot="footer" class="dialog-footer">
<el-button type="primary" @click="confirmDelete">确 定</el-button>
<el-button @click="hideDeleteFrom">取 消</el-button>
</span>
</el-dialog>
</div>
</template>
<script>
import { openLoading, closeLoading } from "../../utils/utils";
import BreadCrumb from "../../components/breadcrumb.vue";
import * as commonUtil from "../../utils/utils";
import {
getAccessListReq,
getAuthTableReq,
getUserListReq,
handleSaveEditReq,
handleDeleteReq,
} from '@/utils/cme/cmeApi'
export default {
data() {
return {
curmbFirst: "CME",
curmbSecond: "审核权限管理",
totalRows: 0,
addEditVisible: false,
isAdd: true, // 新增或编辑状态:新增 true; 编辑 false
deleteVisible: false,
currentRow: null, // 当前行数据
searchForm: {
doctorName: '',
authId: '',
pageNo: 1,
pageSize: 15,
},
addEditForm: {
doctorId: '',
authId: '',
},
accessList: [], // 权限列表
tableData: [],
nameList: [],
rules: {
doctorId: [{ required: true, message: '请选择', trigger: 'blur' }],
authId: [{ required: true, message: '请选择', trigger: 'blur' }],
},
}
},
components: {
BreadCrumb
},
created() {
this.getAccessList();
this.goToSearch(1);
this.getUserList();
},
mounted() {
commonUtil.resizeHeight();
},
methods: {
// 获取权限 下拉列表
getAccessList() {
let req = {};
getAccessListReq(req).then(res => {
if (res.code == "000000") {
// console.log('权限列表 ', res)
this.accessList = res.data;
} else {
this.$message(res.message);
}
}).catch(err => {
this.$message.error('请求失败');
});
},
// 搜索
goToSearch(pageNo) {
if(pageNo){ // 自定义第几页,不传则表示当前页
this.searchForm.pageNo = pageNo;
}
this.getAuthTable();
},
getAuthTable() {
let req = this.searchForm;
getAuthTableReq(req).then(res => {
if (res.code == "000000") {
// console.log('表格列表 ', res)
this.tableData = res.data.contentList;
this.totalRows = res.data.total;
} else {
this.$message(res.message);
}
}).catch(err => {
this.$message.error('请求失败');
});
},
// 重置
goToReset() {
this.searchForm = {
doctorName: '',
authId: '',
pageNo: 1,
pageSize: 15,
};
},
// 新增
goToAdd() {
this.isAdd = true;
this.addEditVisible = true;
},
// 编辑
goToEdit(row) {
this.isAdd = false;
this.currentRow = row;
// console.log('编辑 ', row)
this.addEditVisible = true;
// 编辑回显状态
this.addEditForm = {
authId: row.authId,
doctorId: row.doctorId,
};
},
// 获取新增、编辑的用户列表
getUserList() {
let req = {};
getUserListReq(req).then(res => {
if (res.code == "000000") {
// console.log('获取用户列表 ', res)
this.nameList = res.data;
} else {
this.$message(res.message);
}
}).catch(err => {
this.$message.error('请求失败');
});
},
goToDelete(row) {
this.deleteVisible = true;
this.currentRow = row;
},
submitForm(formName) {
this.$refs[formName].validate((valid) => {
if (valid) {
// alert('submit!');
this.handleSaveEdit();
} else {
console.log('error submit!!');
return false;
}
});
},
resetForm(formName) {
this.$refs[formName].resetFields();
},
handleSaveEdit() {
// 新增、编辑传参不同
// debugger;
let req = {};
if (this.isAdd) {
req = {
authId: this.addEditForm.authId,
doctorId: this.addEditForm.doctorId,
}
} else {
req = {
authId: this.addEditForm.authId,
doctorId: this.addEditForm.doctorId,
id: this.currentRow.id,
};
}
handleSaveEditReq(req).then(res => {
if (res.code == "000000") {
this.addEditVisible = false;
this.goToSearch();
// console.log('新增/编辑权限 ', res)
} else {
this.$message(res.message);
}
}).catch(err => {
this.$message.error('请求失败');
});
},
hideAddEditForm() {
this.addEditVisible = false;
this.resetForm('addEditForm');
this.addEditForm = {
doctorId: '',
authId: '',
};
},
confirmDelete() {
// 调接口
let req = {
id: this.currentRow.id,
};
handleDeleteReq(req).then(res => {
if (res.code == "000000") {
// console.log('删除用户列表 ', res)
this.goToSearch();
this.deleteVisible = false;
} else {
this.$message(res.message);
}
}).catch(err => {
this.$message.error('请求失败');
});
},
hideDeleteFrom() {
this.deleteVisible = false;
},
handleSizeChange(val){
// console.log('handleSizeChange>>>')
this.searchForm.pageSize = val;
this.goToSearch(1);
},
handleCurrentChange(val){
// 切换当前页
this.searchForm.pageNo = val;
this.getAuthTable();
},
},
}
</script>
<style lang="scss">
.review-access-wrap{
.review-access{
padding: 10px;
background: #fff;
.el-button--small{
font-size: 14px;
}
.header-title {
padding: 10px 12px 20px;
font-size: 14px;
color: #606266;
border-bottom: 1px solid #efefef;
}
.search-form-wrap{
padding: 25px 0 20px;
overflow: hidden;
border-bottom: 1px dashed #efefef;
}
.search-item{
float: left;
}
.btn-list{
float: right;
.el-form-item__content{
margin-left: 0 !important;
}
}
.new-add{
float: right;
margin: 10px 0 20px;
}
.table-empty {
img {
width: 100px;
}
p {
margin-top: -50px;
}
}
}
}
</style>
\ No newline at end of file
...@@ -183,13 +183,33 @@ ...@@ -183,13 +183,33 @@
<el-col :span="10" class="item-icon"> <el-col :span="10" class="item-icon">
<span class="require">*</span> <span class="require">*</span>
<el-form-item label="关联考试"> <el-form-item label="关联考试">
<el-select placeholder="请选择" v-model="item3.content3" @focus="examIDfocus(index,index1,index2,index3)" @change="handleExamTypeChange" size="small" :disabled="fieldDisabled(item)">
<el-option
v-for="(examItem, examTypeIndex) in examTypeList"
:key="examTypeIndex"
:label="examItem.text"
:value="examItem.type">
</el-option>
</el-select>
<el-select v-model="item3.content2" filterable @focus="examIDfocus(index,index1,index2,index3)" @change="changeExamID" :disabled="fieldDisabled(item)" size="small" placeholder="请选择考试ID" style="width:288px;"> <el-select v-model="item3.content2" filterable @focus="examIDfocus(index,index1,index2,index3)" @change="changeExamID" :disabled="fieldDisabled(item)" size="small" placeholder="请选择考试ID" style="width:288px;">
<!-- 所有考试 列表-->
<template v-if="item3.content3 == 0">
<el-option <el-option
v-for="(itemTest,indexTest) in testIdSelect" v-for="(itemTest,indexTest) in testIdSelect"
:key="indexTest" :key="indexTest"
:label="itemTest.onlineExamName" :label="itemTest.onlineExamName"
:value="itemTest.id + ''"> :value="itemTest.id + ''">
</el-option> </el-option>
</template>
<!-- 需审核考试 列表 -->
<template v-if="item3.content3 == 1">
<el-option
v-for="(itemTest,indexTest) in examSelectList"
:key="indexTest"
:label="itemTest.onlineExamName"
:value="itemTest.id + ''">
</el-option>
</template>
</el-select> </el-select>
</el-form-item> </el-form-item>
</el-col> </el-col>
...@@ -409,7 +429,12 @@ export default { ...@@ -409,7 +429,12 @@ export default {
}], }],
templateDataList: [], templateDataList: [],
templetIndex: 0, templetIndex: 0,
testIdSelect: [], // 考试ID下拉列表 examTypeList: [ // 考试类型: 0所有考试 1需审核考试
{ text: '所有考试', type: '0' },
{ text: '需审核考试', type: '1' },
],
testIdSelect: [], // 考试ID下拉列表 (所有考试)
examSelectList: [], // 考试ID下拉列表 (需审核考试)
certificateIdSelect: [], // 证书下拉列表 certificateIdSelect: [], // 证书下拉列表
courseIdSelect: [], // 课程下拉列表 courseIdSelect: [], // 课程下拉列表
dialogData: [], dialogData: [],
...@@ -699,12 +724,22 @@ export default { ...@@ -699,12 +724,22 @@ export default {
getTestListData() { getTestListData() {
vm.GET('portal/portalComponent/OnlineExamList').then((res) => { vm.GET('portal/portalComponent/OnlineExamList').then((res) => {
if( res.code == '000000') { if( res.code == '000000') {
vm.testIdSelect = res.data.onlineExamList vm.testIdSelect = res.data.onlineExamList;
for(let i=0; i<vm.testIdSelect.length; i++) {
let type = vm.testIdSelect[i].isNeedApproval; // isNeedApproval: 0 全部考试 1 需审核考试
if( type && type == 1 ) {
vm.examSelectList.push( vm.testIdSelect[i] )
}
}
}else { }else {
vm.$message.info(res.message) vm.$message.info(res.message)
} }
}) })
}, },
// 考试种类切换 清空考试选择
handleExamTypeChange(value) {
vm.componentList.moduleModelList[vm.examIndex].templetModelList[vm.examIndex1].partModelList[vm.examIndex2].partContentModelList[vm.examIndex3].content2 = '';
},
// 根据考试ID填充考试名称 // 根据考试ID填充考试名称
changeExamID(value) { changeExamID(value) {
let examName = '' let examName = ''
...@@ -915,7 +950,7 @@ export default { ...@@ -915,7 +950,7 @@ export default {
seqNo: '', seqNo: '',
content1: '', content1: '',
content2: '', content2: '',
content3: '', content3: '0',
content4: '' content4: ''
}] }]
}) })
......
因为 它太大了无法显示 源差异 。您可以改为 查看blob
...@@ -71,21 +71,23 @@ ...@@ -71,21 +71,23 @@
</el-row> </el-row>
<el-form :model="formInline" class="demo-form-inline"> <el-form :model="formInline" class="demo-form-inline">
<el-form-item> <el-form-item>
<el-button class="add-button" :disabled="idType == 2 && masterAdministratorFlag == 'false'" size="small" type="primary" @click="toPage()">新建项目</el-button> <el-button class="add-button" :disabled="idType == 2 && masterAdministratorFlag == 'false'" size="small" type="primary" @click="openProject()">新建项目</el-button>
</el-form-item> </el-form-item>
</el-form> </el-form>
<el-table :data="tableData" style="width: 100%"> <el-table :data="tableData" style="width: 100%">
<el-table-column prop="id" label="ID编号" min-width="100" align="center"></el-table-column> <el-table-column prop="id" 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="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="createdName" label="创建人" align="center"></el-table-column>
<el-table-column prop="projectLeader" label="项目负责人" align="center"></el-table-column>
<el-table-column prop="projectTypeValue" label="项目类型" align="center"></el-table-column>
<el-table-column prop="createdTime" label="创建时间" width="100" align="center"></el-table-column> <el-table-column prop="createdTime" label="创建时间" width="100" align="center"></el-table-column>
<el-table-column <!-- <el-table-column
prop="projectIntro" prop="projectIntro"
label="项目简介" label="项目简介"
align="center" align="center"
min-width="100" min-width="100"
show-overflow-tooltip show-overflow-tooltip
></el-table-column> ></el-table-column> -->
<el-table-column prop="projectBegintime" label="项目开始时间" min-width="90" align="center"></el-table-column> <el-table-column prop="projectBegintime" label="项目开始时间" min-width="90" align="center"></el-table-column>
<el-table-column prop="projectEndtime" label="项目结束时间" min-width="90" align="center"></el-table-column> <el-table-column prop="projectEndtime" label="项目结束时间" min-width="90" align="center"></el-table-column>
<el-table-column prop="projectStatus" label="状态" align="center"> <el-table-column prop="projectStatus" label="状态" align="center">
...@@ -93,7 +95,7 @@ ...@@ -93,7 +95,7 @@
<span>{{ [scope.row.projectStatus , idType] | statusProject }}</span> <span>{{ [scope.row.projectStatus , idType] | statusProject }}</span>
</template> </template>
</el-table-column> </el-table-column>
<el-table-column fixed="right" label="操作" min-width="300" align="center"> <el-table-column fixed="right" label="操作" min-width="360" align="center">
<template slot-scope="scope"> <template slot-scope="scope">
<el-button <el-button
@click="changeStatus(scope.row,0)" @click="changeStatus(scope.row,0)"
...@@ -118,7 +120,7 @@ ...@@ -118,7 +120,7 @@
v-show="showButton(scope.row,3)" v-show="showButton(scope.row,3)"
type="primary" type="primary"
size="small" size="small"
>上架</el-button> >发布</el-button>
<el-button <el-button
@click="changeStatus(scope.row,4)" @click="changeStatus(scope.row,4)"
v-show="showButton(scope.row,4)" v-show="showButton(scope.row,4)"
...@@ -156,6 +158,13 @@ ...@@ -156,6 +158,13 @@
type="primary" type="primary"
size="small" size="small"
>删除</el-button> >删除</el-button>
<el-button
@click="hanldeCmeClick(scope.row)"
v-show="showCMEButton(scope.row)"
type="primary"
size="small"
>{{ handleCmeOperate(scope.row.projectStatus) }}</el-button>
<el-button <el-button
@click="toShield(scope.row)" @click="toShield(scope.row)"
v-show="scope.row.blackModifiable == true" v-show="scope.row.blackModifiable == true"
...@@ -189,6 +198,52 @@ ...@@ -189,6 +198,52 @@
:total="totalRows" :total="totalRows"
></el-pagination> ></el-pagination>
</div> </div>
<!-- 初审 弹窗 -->
<el-dialog
title="项目初审"
:visible.sync="firstCheckVisible"
width="600px"
:close-on-click-modal="false"
center>
<span style="margin: 0 20px;">{{ `项目《${currentRow.projectName}》初审结果为?` }}</span>
<span slot="footer" class="dialog-footer">
<el-button type="primary" @click="handleCheckLeft">通 过</el-button>
<el-button @click="handleCheckRight">不通过</el-button>
</span>
</el-dialog>
<!-- 新建项目弹窗 -->
<el-dialog
title="请选择项目类型"
:visible.sync="centerDialogVisible"
width="600px"
:close-on-click-modal="false"
@close="handleTypeClose"
center>
<span style="margin: 0 20px;">项目类型:</span>
<el-radio-group v-model="newProjectType">
<el-radio :label="1">普通项目</el-radio>
<el-radio :label="2">CME项目</el-radio>
</el-radio-group>
<span slot="footer" class="dialog-footer">
<el-button @click="centerDialogVisible = false">取 消</el-button>
<el-button type="primary" @click="handleCreateProject">确 定</el-button>
</span>
</el-dialog>
<!-- 复审 弹窗 -->
<el-dialog
title="项目复审"
:visible.sync="secondCheckVisible"
width="600px"
:close-on-click-modal="false"
center>
<span style="margin: 0 20px;">{{ `项目《${currentRow.projectName}》复审结果为?` }}</span>
<span slot="footer" class="dialog-footer">
<el-button type="primary" @click="handleCheckLeft">通 过</el-button>
<el-button @click="handleCheckRight">不通过</el-button>
</span>
</el-dialog>
</div> </div>
</div> </div>
</template> </template>
...@@ -210,12 +265,18 @@ export default { ...@@ -210,12 +265,18 @@ export default {
idValue: '', idValue: '',
curmbFirst: "教培项目", curmbFirst: "教培项目",
curmbSecond: "项目管理", curmbSecond: "项目管理",
centerDialogVisible: false, // 新建项目弹窗
firstCheckVisible: false, // 各种操作的确认弹窗
secondCheckVisible: false,
newProjectType: 1, // 1 普通项目 2 CME项目
searchParam: { searchParam: {
name: "", name: "",
status: "", status: "",
pageNo: 1, pageNo: 1,
pageSize: 10 pageSize: 10
}, },
cmeBtnText: '',
currentRow: {},
optionStatus: [ optionStatus: [
{ {
value: 1, value: 1,
...@@ -240,7 +301,29 @@ export default { ...@@ -240,7 +301,29 @@ export default {
{ {
value: 6, value: 6,
label: "已拒绝/未上架" label: "已拒绝/未上架"
} },
{
value: 7,
label: "待初审"
},
{
value: 8,
label: "初审未通过"
},
{
value: 9,
label: "待复审"
},
{
value: 10,
label: "复审未通过"
},
{
value: 11,
label: "复审通过"
},
// 加上去 。。。。。。。CME
], ],
tableData: [], tableData: [],
totalRows: 0, totalRows: 0,
...@@ -305,12 +388,74 @@ export default { ...@@ -305,12 +388,74 @@ export default {
...mapActions([ ...mapActions([
'updateItemManager' 'updateItemManager'
]), ]),
openProject() {
if(vm.masterAdministratorFlag == 'true') {
this.centerDialogVisible = true;
} else {
this.toPage();
}
},
toPage() { toPage() {
this.$router.push("edit-manager"); this.$router.push("edit-manager?projectType=1");
},
toCmePage() {
console.log('跳转至 cme 新建项目');
this.$router.push("edit-cme?projectType=2");
}, },
toShield(row) { toShield(row) {
this.$router.push("item-shield?projectId="+row.id); this.$router.push("item-shield?projectId="+row.id);
}, },
handleTypeClose() {
this.centerDialogVisible = false;
this.newProjectType = 1;
},
handleCreateProject() {
if (this.newProjectType == 1) { // 1 普通项目 2 CME项目
this.toPage();
} else if (this.newProjectType == 2) {
this.toCmePage();
}
},
hanldeCmeClick(row) {
this.currentRow = row;
let status = row.projectStatus;
// 7.待初审 8.初审未通过 9.待复审 10.复审未通过 11.复审通过
if (status == 7 || status == 8) { // 按钮显示 初审
this.firstCheckVisible = true;
} else if (status == 9 || status == 10) { // 按钮显示 复审
this.secondCheckVisible = true;
} else if (status == 11) { // 按钮显示 发布
this.changeStatus(row,3)
}
},
handleCheckLeft() { // 左边通过
this.goToCheckAuth(1);
},
handleCheckRight() {
this.goToCheckAuth(2);
},
goToCheckAuth(refuse) {
let row = this.currentRow;
let req = {};
openLoading(vm);
// refuse = 1 : 同意 refuse = 2:拒绝
vm.GET(`portal/cme/verifyProject?projectId=${row.id}&refuse=${refuse}`, req).then(res => {
closeLoading(vm);
// debugger;
vm.firstCheckVisible = false;
vm.secondCheckVisible = false;
if (res.code == "000000") {
vm.getProjectList();
this.$message({
message: '审核成功',
type: 'success'
});
} else {
this.$message.error(res.message);
}
});
},
searchList() { searchList() {
this.formInline.pageNo = 1; this.formInline.pageNo = 1;
this.getProjectList(); this.getProjectList();
...@@ -329,8 +474,25 @@ export default { ...@@ -329,8 +474,25 @@ export default {
} }
}); });
}, },
showCMEButton(row, type) {
// if(row.projectType == 2) {
// return true;
// } else {
// return false;
// }
// CME 专属状态码 为7~11,是这些代码的直接走新逻辑,别的走老逻辑
let cmeStatus = [7, 8, 9, 10, 11];
let currentStatus = parseInt(row.projectStatus);
if ( cmeStatus.indexOf(currentStatus) > -1 ) {
return true;
} else {
return false;
}
},
//按钮展示情况 //按钮展示情况
showButton(row, type) { showButton(row, type) {
// debugger;
// 按钮type类型: 0-编辑 // 按钮type类型: 0-编辑
// 1-暂存 2-完成 3-上架 4-通过 5-下架 6-拒绝 // 1-暂存 2-完成 3-上架 4-通过 5-下架 6-拒绝
// 7- 提醒审核 8(2)-取消审核 9-删除 // 7- 提醒审核 8(2)-取消审核 9-删除
...@@ -349,8 +511,15 @@ export default { ...@@ -349,8 +511,15 @@ export default {
//外部项目 //外部项目
buttonStatus = returnData().buttonStatusOut; buttonStatus = returnData().buttonStatusOut;
} }
if(projectStatus == null) {
return false;
}
if (level != null) { if (level != null) {
let statusSet = buttonStatus[projectStatus - 1][level]; let tempStatus = JSON.parse(JSON.stringify(projectStatus));
if (tempStatus > 6) {
tempStatus = 1;
}
let statusSet = buttonStatus[tempStatus - 1][level];
let flagValue = statusSet.indexOf(typeStr); let flagValue = statusSet.indexOf(typeStr);
if (flagValue >= 0) { if (flagValue >= 0) {
flag = true; flag = true;
...@@ -361,6 +530,20 @@ export default { ...@@ -361,6 +530,20 @@ export default {
//flag = true; //flag = true;
return flag; return flag;
}, },
handleCmeOperate(status) {
let text = '';
// 7.待初审 8.初审未通过 9.待复审 10.复审未通过 11.复审通过
if (status == 7 || status == 8) { // 按钮显示 初审
text = '初审';
} else if (status == 9 || status == 10) { // 按钮显示 复审
text = '复审';
} else if (status == 11) { // 按钮显示 发布
text = '发布';
}
this.cmeBtnText = text;
return text;
// return true / false;
},
//改变状态 //改变状态
changeStatus(row, type) { changeStatus(row, type) {
let projectId = row.id; let projectId = row.id;
...@@ -368,7 +551,11 @@ export default { ...@@ -368,7 +551,11 @@ export default {
if (type === 0) { if (type === 0) {
this.updateItemManager(this.formInline) this.updateItemManager(this.formInline)
//编辑 //编辑
this.$router.push("edit-manager?projectId=" + projectId +"&level="+level+'&pageNum='+this.formInline.pageNo); if(row.projectType === 1) {
this.$router.push("edit-manager?projectType=1&projectId=" + projectId +"&level="+level+'&pageNum='+this.formInline.pageNo);
} else if(row.projectType === 2) {
this.$router.push("edit-cme?projectType=2&projectId=" + projectId +"&level="+level+'&pageNum='+this.formInline.pageNo);
}
} else if (type === 7) { } else if (type === 7) {
//提醒审核 //提醒审核
let req = { let req = {
......
<template> <template>
<div id="slidebar-container" class="slidebar-container"> <div id="slidebar-container" class="slidebar-container">
<el-menu :default-active="onRoutes" class="el-menu-vertical-demo" theme="dark" unique-opened router> <el-menu :default-active="onRoutes" class="el-menu-vertical-demo" theme="dark" unique-opened router>
<template v-if="isOutsideGetted && isOutsideUser">
<el-menu-item v-for="(outItem, outIndex) in outsideItems" :index="'/'+outItem.index" :key="outItem.index">
<i :class="outItem.icon"></i>{{ outItem.title }}
</el-menu-item>
</template>
<template v-if="isOutsideGetted && !isOutsideUser">
<template v-for="(item,_index) in items"> <template v-for="(item,_index) in items">
<template v-if="item.subs"> <template v-if="item.subs">
<el-submenu :index=" 'index_' + _index" :key="item.index"> <el-submenu :index=" 'index_' + _index" :key="item.index">
...@@ -32,6 +38,7 @@ ...@@ -32,6 +38,7 @@
</template> </template>
</template> </template>
</template> </template>
</template>
</el-menu> </el-menu>
</div> </div>
</template> </template>
...@@ -40,6 +47,8 @@ ...@@ -40,6 +47,8 @@
import { mapGetters } from 'vuex' import { mapGetters } from 'vuex'
import { setTimeout } from 'timers' import { setTimeout } from 'timers'
import { isNotEmptyUtils } from '../../utils/utils' import { isNotEmptyUtils } from '../../utils/utils'
import { getUserTypeReq } from '@/utils/cme/cmeApi'
let vm = null let vm = null
export default { export default {
props: { props: {
...@@ -64,6 +73,8 @@ ...@@ -64,6 +73,8 @@
}, },
data() { data() {
return { return {
isOutsideUser: false, // 是否是外部用户;(外部用户:只展示一个页面路由; 非外部用户:正常展示之前的逻辑)
isOutsideGetted: false,
items: [ items: [
{ {
title: '数据总览', title: '数据总览',
...@@ -144,8 +155,36 @@ ...@@ -144,8 +155,36 @@
index: 'export-download' index: 'export-download'
} }
] ]
},{
title: 'CME',
icon: 'el-icon-reading',
index: 'credit-manage',
subs: [
{
title: '学分管理列表',
icon: 'el-icon-document',
index: 'credit-manage'
},
{
title: '审核权限管理',
icon: 'el-icon-document',
index: 'review-access-manage'
},
{
title: '学分发放管理',
icon: 'el-icon-document',
index: 'credit-send-manage'
}, },
] ]
},
],
outsideItems: [ // 外部用户 路由
{
title: '学分发放管理',
icon: 'el-icon-document',
index: 'credit-send-manage'
},
],
} }
}, },
computed: { computed: {
...@@ -155,6 +194,7 @@ ...@@ -155,6 +194,7 @@
}, },
created() { created() {
vm = this; vm = this;
this.getUserType();
}, },
mounted(){ mounted(){
if(vm.storageIdType==2){ if(vm.storageIdType==2){
...@@ -187,6 +227,33 @@ ...@@ -187,6 +227,33 @@
} }
}, },
methods: { methods: {
getUserType() {
// console.log('当前路由地址:', this.$route.path, typeof this.$route.path)
let currentPath = this.$route.path || '';
let req = {};
// console.log('isOutsideUser: ', this.$store.state.cmeStore.isOutsideUser)
getUserTypeReq(req).then(res => {
// debugger;
this.isOutsideGetted = true;
if (res.code == '000000') {
if (res.data.code == "yes") { // 外部用户,siderbar只展示一个:学分发放管理页面
this.isOutsideUser = true;
this.$store.dispatch('cmeStore/updateOutUserStatus', true);
if (currentPath && currentPath == '/apply-detail') { // 申请明细页面 则刷新时不重定向
return;
}
this.$router.replace({
path: '/credit-send-manage'
});
} else { // 非外部用户 正常展示多路由
this.isOutsideUser = false;
this.$store.dispatch('cmeStore/updateOutUserStatus', false);
}
}
}).catch(err => {
this.$message.error('请求失败');
});
},
setFollowSide(){ setFollowSide(){
const followSider = { const followSider = {
title: '履约管理', title: '履约管理',
......
<template>
<div id="screenSet" class="blank-wrap screenSet">
<div class="blank-content">
</div>
</div>
</template>
<script>
import * as commonUtil from '../utils/utils'
export default {
data() {
return {
}
},
// 挂载到Dom完成时
mounted: function() {
commonUtil.resizeHeight(100)
}
}
</script>
<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>
Markdown 格式
0% or
您添加了 0 到此讨论。请谨慎行事。
先完成此消息的编辑!
想要评论请 注册