提交 425604a2 编写于 作者: chengxiang.li's avatar chengxiang.li

CME项目学分发放页面及审核权限管理页面开发

上级 c373a262
...@@ -30,6 +30,7 @@ const editNotice = r => require.ensure([], () => r(require('../views/education/e ...@@ -30,6 +30,7 @@ const editNotice = r => require.ensure([], () => r(require('../views/education/e
const creditManage = r => require.ensure([], () => r(require('../views/cme/credit-manage.vue')), 'credit-manage') 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 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 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: '/',
...@@ -124,7 +125,10 @@ export default [{ ...@@ -124,7 +125,10 @@ export default [{
path: '/credit-send-manage', path: '/credit-send-manage',
component: creditSendManage, 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 fetch from '../fetch';
import { getBaseUrl, getSaasDomain, getSaasApiDomain } from '@/utils/index' 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) => { export const getSelectListReq = (type) => {
return fetch({ return fetch({
...@@ -42,10 +56,7 @@ export const getRelatedCreditReq = (params) => { ...@@ -42,10 +56,7 @@ export const getRelatedCreditReq = (params) => {
export const goUpReq = (data, id) => { export const goUpReq = (data, id) => {
return fetch({ return fetch({
headers: { headers,
'Content-Type': 'application/json;charset=UTF-8',
token: localStorage.getItem('storageToken'),
},
url: getBaseUrl(`cme/credit/deploy/${id}`), url: getBaseUrl(`cme/credit/deploy/${id}`),
method: 'post', method: 'post',
data: data, data: data,
...@@ -55,10 +66,7 @@ export const goUpReq = (data, id) => { ...@@ -55,10 +66,7 @@ export const goUpReq = (data, id) => {
export const goDownReq = (data, id) => { export const goDownReq = (data, id) => {
return fetch({ return fetch({
headers: { headers,
'Content-Type': 'application/json;charset=UTF-8',
token: localStorage.getItem('storageToken'),
},
url: getBaseUrl(`cme/credit/revoke/${id}`), url: getBaseUrl(`cme/credit/revoke/${id}`),
method: 'post', method: 'post',
data: data, data: data,
...@@ -68,10 +76,7 @@ export const goDownReq = (data, id) => { ...@@ -68,10 +76,7 @@ export const goDownReq = (data, id) => {
export const goAddNewReq = (data) => { export const goAddNewReq = (data) => {
return fetch({ return fetch({
headers: { headers,
'Content-Type': 'application/json;charset=UTF-8',
token: localStorage.getItem('storageToken'),
},
// url: 'http://10.177.15.4:13801/cme/credit/create', // url: 'http://10.177.15.4:13801/cme/credit/create',
url: getBaseUrl(`cme/credit/create`), url: getBaseUrl(`cme/credit/create`),
method: 'post', method: 'post',
...@@ -80,3 +85,96 @@ export const goAddNewReq = (data) => { ...@@ -80,3 +85,96 @@ export const goAddNewReq = (data) => {
}) })
} }
// 审核权限管理页面
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 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
...@@ -56,7 +56,7 @@ service.interceptors.request.use(config => { ...@@ -56,7 +56,7 @@ service.interceptors.request.use(config => {
// console.log('环境变量>>>> ', process.env.BUILD_ENV); // console.log('环境变量>>>> ', process.env.BUILD_ENV);
// config.headers['token'] = 'BFD804F3A3194FBBBE113962222839F6'; // config.headers['token'] = 'BFD804F3A3194FBBBE113962222839F6';
// config.headers['token'] = 'F8209898391C40A0B8DBC1ED9E157291'; // config.headers['token'] = 'F8209898391C40A0B8DBC1ED9E157291';
config.headers['token'] = 'A686102457254CA986639F97DFB4F9F6'; config.headers['token'] = 'A2F48933424E4AD38E750E77F59D0619';
}else{ }else{
config.headers['token'] = localStorage.getItem('storageToken') config.headers['token'] = localStorage.getItem('storageToken')
} }
......
<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">
<el-upload
class="upload-import"
action="#"
accept=".xlsx"
:limit="1"
: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>
<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="200" ></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="150"></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>
</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="提示"
: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">仅支持xls格式的文件</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,
} 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: [
// { code: 11, name:'撒地方的阿萨德李开复就j克拉的房客哦佛i额我joie就哦覅我', startTime: '20191224', endTime: '20201111', status:'已结束' },
],
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();
},
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('请求失败');
});
},
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 非全选
req = {
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 = {
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'
});
} 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.getDetailList();
},
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;
.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;
}
.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
...@@ -205,14 +205,13 @@ ...@@ -205,14 +205,13 @@
goToSearch() { goToSearch() {
this.searchForm.pageNo = 1; this.searchForm.pageNo = 1;
this.searchForm.pageSize = 15; // this.searchForm.pageSize = 15;
this.getCreditList(); this.getCreditList();
}, },
// 获取 学分table列表 // 获取 学分table列表
getCreditList() { getCreditList() {
let req = {}; let req = this.searchForm;
req = this.searchForm;
openLoading(this); openLoading(this);
getCreditListReq(req).then(res => { getCreditListReq(req).then(res => {
closeLoading(this); closeLoading(this);
......
...@@ -7,25 +7,33 @@ ...@@ -7,25 +7,33 @@
<el-form ref="form" :model="searchForm" label-width="100px" class="search-form-wrap"> <el-form ref="form" :model="searchForm" label-width="100px" class="search-form-wrap">
<div style="width: 75%; float:left;"> <div style="width: 75%; float:left;">
<el-form-item label="项目编号:" class="search-item"> <el-form-item label="项目编号:" class="search-item">
<el-input v-model="searchForm.code" size="small" class="form-width" placeholder="请输入项目编号"></el-input> <el-input v-model="searchForm.serialNo" size="small" class="form-width" placeholder="请输入项目编号"></el-input>
</el-form-item> </el-form-item>
<el-form-item label="项目名称:" class="search-item"> <el-form-item label="项目名称:" class="search-item">
<el-input v-model="searchForm.name" size="small" class="form-width" placeholder="请输入项目名称"></el-input> <el-input v-model="searchForm.projectName" size="small" class="form-width" placeholder="请输入项目名称"></el-input>
</el-form-item> </el-form-item>
<el-form-item label="项目时间:" class="search-item"> <el-form-item label="项目时间:" class="search-item">
<el-date-picker <el-date-picker
v-model="searchForm.date" v-model="searchForm.beginTime"
type="daterange" type="datetime"
range-separator="—" size="small"
start-placeholder="开始日期" value-format="yyyy-MM-dd HH:mm:ss"
end-placeholder="结束日期"> 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-date-picker>
</el-form-item> </el-form-item>
</div> </div>
<div style="width: 25%; float: right;"> <div style="width: 25%; float: right;">
<el-form-item class="btn-list"> <el-form-item class="btn-list">
<el-button type="primary" size="small">查询</el-button> <el-button @click="goToSearch" type="primary" size="small">查询</el-button>
<el-button size="small">重置</el-button> <el-button @click="handleReset" size="small">重置</el-button>
</el-form-item> </el-form-item>
</div> </div>
</el-form> </el-form>
...@@ -35,19 +43,30 @@ ...@@ -35,19 +43,30 @@
tooltip-effect="dark" tooltip-effect="dark"
style="width: 100%" style="width: 100%"
@selection-change="handleSelectionChange"> @selection-change="handleSelectionChange">
<el-table-column type="selection" width="55"></el-table-column> <el-table-column align="center" prop="serialNo" label="项目编号" show-overflow-tooltip></el-table-column>
<el-table-column align="center" prop="code" 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="name" label="项目名称" show-overflow-tooltip></el-table-column>
<el-table-column align="center" prop="startTime" 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="endTime" label="项目结束时间" show-overflow-tooltip></el-table-column>
<el-table-column align="center" prop="status" label="项目状态" show-overflow-tooltip></el-table-column> <el-table-column align="center" prop="status" label="项目状态" show-overflow-tooltip></el-table-column>
<el-table-column align="center" label="操作"> <el-table-column align="center" label="操作">
<template slot-scope="scope"> <template slot-scope="scope">
<el-button type="text" size="small">查看申请明细</el-button> <el-button @click="goToApplyDetail(scope.row)" type="text" size="small">查看申请明细</el-button>
</template> </template>
</el-table-column> </el-table-column>
</el-table> </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>
</div> </div>
...@@ -58,7 +77,7 @@ ...@@ -58,7 +77,7 @@
import BreadCrumb from "../../components/breadcrumb.vue"; import BreadCrumb from "../../components/breadcrumb.vue";
import * as commonUtil from "../../utils/utils"; import * as commonUtil from "../../utils/utils";
import { import {
getSendListReq,
} from '@/utils/cme/cmeApi' } from '@/utils/cme/cmeApi'
...@@ -70,16 +89,15 @@ ...@@ -70,16 +89,15 @@
totalRows: 0, totalRows: 0,
searchForm: { searchForm: {
code: '', serialNo: '',
name: '', projectName: '',
date: [], beginTime: '',
endTime: '',
pageNo: 1, pageNo: 1,
pageSize: 15, pageSize: 15,
}, },
tableData: [ tableData: [],
{ code: 11, name:'撒地方的阿萨德李开复就j克拉的房客哦佛i额我joie就哦覅我', startTime: '20191224', endTime: '20201111', status:'已结束' },
],
multipleSelection: [], multipleSelection: [],
} }
...@@ -90,15 +108,70 @@ ...@@ -90,15 +108,70 @@
}, },
created() { created() {
this.goToSearch();
}, },
mounted() { mounted() {
commonUtil.resizeHeight(); commonUtil.resizeHeight();
}, },
methods: { 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) { handleSelectionChange(val) {
this.multipleSelection = val; this.multipleSelection = val;
} },
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.getSendList();
},
handleCurrentChange(val){
// 切换当前页
this.searchForm.pageNo = val;
this.getSendList();
},
}, },
...@@ -120,7 +193,7 @@ ...@@ -120,7 +193,7 @@
width: 200px; width: 200px;
} }
.header-title { .header-title {
padding: 10px 12px; padding: 10px 12px 20px;
font-size: 14px; font-size: 14px;
color: #606266; color: #606266;
border-bottom: 1px solid #efefef; border-bottom: 1px solid #efefef;
......
...@@ -6,15 +6,15 @@ ...@@ -6,15 +6,15 @@
<div class="header-title">审核权限管理</div> <div class="header-title">审核权限管理</div>
<el-form ref="form" :model="searchForm" label-width="100px" class="search-form-wrap"> <el-form ref="form" :model="searchForm" label-width="100px" class="search-form-wrap">
<el-form-item label="姓名:" class="search-item" > <el-form-item label="姓名:" class="search-item" >
<el-input v-model="searchForm.name" size="small" class="form-width" placeholder="请输入姓名"></el-input> <el-input v-model="searchForm.doctorName" size="small" class="form-width" placeholder="请输入姓名"></el-input>
</el-form-item> </el-form-item>
<el-form-item label="权限:" class="search-item"> <el-form-item label="权限:" class="search-item">
<el-select v-model="searchForm.access" placeholder="请选择" size="small" class="form-width"> <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-option v-for="(item, index) in accessList" :key="index" :label="item.text" :value="item.id"></el-option>
</el-select> </el-select>
</el-form-item> </el-form-item>
<el-form-item class="btn-list"> <el-form-item class="btn-list">
<el-button @click="goToSearch" type="primary" size="small">查询</el-button> <el-button @click="goToSearch(1)" type="primary" size="small">查询</el-button>
<el-button @click="goToReset" size="small">重置</el-button> <el-button @click="goToReset" size="small">重置</el-button>
</el-form-item> </el-form-item>
</el-form> </el-form>
...@@ -22,9 +22,9 @@ ...@@ -22,9 +22,9 @@
<el-button @click="goToAdd" type="primary" size="small" class="new-add">新增</el-button> <el-button @click="goToAdd" type="primary" size="small" class="new-add">新增</el-button>
</div> </div>
<el-table :data="tableData" border style="width: 100%"> <el-table :data="tableData" border style="width: 100%">
<el-table-column align="center" type="index" label="编号" width="80"></el-table-column> <el-table-column align="center" prop="seq" label="编号"></el-table-column>
<el-table-column align="center" prop="name" label="姓名" ></el-table-column> <el-table-column align="center" prop="doctorName" label="姓名" ></el-table-column>
<el-table-column align="center" prop="access" label="权限" ></el-table-column> <el-table-column align="center" prop="authName" label="权限" ></el-table-column>
<el-table-column align="center" label="操作"> <el-table-column align="center" label="操作">
<template slot-scope="scope"> <template slot-scope="scope">
<el-button @click="goToEdit(scope.row)" type="text" size="small">编辑</el-button> <el-button @click="goToEdit(scope.row)" type="text" size="small">编辑</el-button>
...@@ -33,6 +33,18 @@ ...@@ -33,6 +33,18 @@
</el-table-column> </el-table-column>
</el-table> </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>
<!-- 新增/编辑 弹窗 --> <!-- 新增/编辑 弹窗 -->
...@@ -44,14 +56,14 @@ ...@@ -44,14 +56,14 @@
width="600px" width="600px"
center> center>
<el-form ref="addEditForm" :rules="rules" :model="addEditForm" label-width="120px"> <el-form ref="addEditForm" :rules="rules" :model="addEditForm" label-width="120px">
<el-form-item label="姓名:" class="search-item" prop="name"> <el-form-item label="姓名:" class="search-item" prop="doctorId">
<el-select v-model="addEditForm.name" placeholder="请选择" size="small" class="form-width"> <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-option v-for="(item, index) in nameList" :key="index" :label="item.text" :value="item.id"></el-option>
</el-select> </el-select>
</el-form-item> </el-form-item>
<el-form-item label="权限:" class="search-item" prop="access"> <el-form-item label="权限:" class="search-item" prop="authId">
<el-select v-model="addEditForm.access" placeholder="请选择" size="small" class="form-width"> <el-select v-model="addEditForm.authId" 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-option v-for="(item, index) in accessList" :key="index" :label="item.text" :value="item.id"></el-option>
</el-select> </el-select>
</el-form-item> </el-form-item>
</el-form> </el-form>
...@@ -70,7 +82,7 @@ ...@@ -70,7 +82,7 @@
:close-on-click-modal="false" :close-on-click-modal="false"
width="600px" width="600px"
center> center>
<p style="text-align: center;">确定删除XXX考试审核人的权限?</p> <p style="text-align: center;">确定删除权限?</p>
<span slot="footer" class="dialog-footer"> <span slot="footer" class="dialog-footer">
<el-button type="primary" @click="confirmDelete">确 定</el-button> <el-button type="primary" @click="confirmDelete">确 定</el-button>
<el-button @click="hideDeleteFrom">取 消</el-button> <el-button @click="hideDeleteFrom">取 消</el-button>
...@@ -85,7 +97,11 @@ ...@@ -85,7 +97,11 @@
import BreadCrumb from "../../components/breadcrumb.vue"; import BreadCrumb from "../../components/breadcrumb.vue";
import * as commonUtil from "../../utils/utils"; import * as commonUtil from "../../utils/utils";
import { import {
getAccessListReq,
getAuthTableReq,
getUserListReq,
handleSaveEditReq,
handleDeleteReq,
} from '@/utils/cme/cmeApi' } from '@/utils/cme/cmeApi'
...@@ -94,28 +110,29 @@ ...@@ -94,28 +110,29 @@
return { return {
curmbFirst: "CME", curmbFirst: "CME",
curmbSecond: "审核权限管理", curmbSecond: "审核权限管理",
searchForm: { totalRows: 0,
name: '',
access: '',
},
accessList: [], // 权限列表
tableData: [
{ name: 11, access: 88 }
],
addEditVisible: false, addEditVisible: false,
isAdd: true, // 新增或编辑状态:新增 true; 编辑 false
deleteVisible: false, deleteVisible: false,
currentRow: null, // 当前行数据
searchForm: {
doctorName: '',
authId: '',
pageNo: 1,
pageSize: 15,
},
addEditForm: { addEditForm: {
name: '', doctorId: '',
access: '', authId: '',
}, },
accessList: [], // 权限列表
tableData: [],
nameList: [], nameList: [],
rules: { rules: {
name: [{ required: true, message: '请输入', trigger: 'blur' }], doctorId: [{ required: true, message: '请选择', trigger: 'blur' }],
access: [{ required: true, message: '请输入', trigger: 'blur' }], authId: [{ required: true, message: '请选择', trigger: 'blur' }],
},
}
} }
}, },
...@@ -124,57 +141,182 @@ ...@@ -124,57 +141,182 @@
}, },
created() { created() {
this.getAccessList();
this.goToSearch(1);
this.getUserList();
}, },
mounted() { mounted() {
commonUtil.resizeHeight(); commonUtil.resizeHeight();
}, },
methods: { 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() { 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.accessList = res.data;
this.tableData = res.data.contentList;
this.totalRows = res.data.total;
} else {
this.$message(res.message);
}
}).catch(err => {
this.$message.error('请求失败');
});
}, },
// 重置 // 重置
goToReset() { goToReset() {
this.searchForm = {
doctorName: '',
authId: '',
pageNo: 1,
pageSize: 15,
};
}, },
// 新增 // 新增
goToAdd() { goToAdd() {
this.isAdd = true;
this.addEditVisible = true; this.addEditVisible = true;
}, },
// 编辑 // 编辑
goToEdit(row) { goToEdit(row) {
this.isAdd = false;
this.currentRow = row;
// console.log('编辑 ', row)
this.addEditVisible = true; this.addEditVisible = true;
console.log('编辑 ', row) // 编辑回显状态
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() {
goToDelete(row) {
this.deleteVisible = true; this.deleteVisible = true;
this.currentRow = row;
}, },
resetForm(formName) {
this.$refs[formName].resetFields();
},
submitForm(formName) { submitForm(formName) {
this.$refs[formName].validate((valid) => { this.$refs[formName].validate((valid) => {
if (valid) { if (valid) {
alert('submit!'); // alert('submit!');
this.handleSaveEdit();
} else { } else {
console.log('error submit!!'); console.log('error submit!!');
return false; return false;
} }
}); });
}, },
resetForm(formName) {
this.$refs[formName].resetFields();
},
handleSaveEdit() {
// 新增、编辑传参不同
// debugger;
let req = {};
if (this.isAdd) {
// let { authId, doctorId } = this.addEditForm;
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() { hideAddEditForm() {
this.addEditVisible = false; this.addEditVisible = false;
this.resetForm('addEditForm'); this.resetForm('addEditForm');
this.addEditForm = {
doctorId: '',
authId: '',
};
}, },
confirmDelete() { confirmDelete() {
// 调接口 // 调接口
let req = {
id: this.currentRow.id,
};
handleDeleteReq(req).then(res => {
if (res.code == "000000") {
console.log('删除用户列表 ', res)
// this.nameList = res.data;
} else {
this.$message(res.message);
}
}).catch(err => {
this.$message.error('请求失败');
});
}, },
hideDeleteFrom() { hideDeleteFrom() {
this.deleteVisible = false; this.deleteVisible = false;
}, },
handleSizeChange(val){
console.log('handleSizeChange>>>')
this.searchForm.pageSize = val;
this.getAuthTable();
},
handleCurrentChange(val){
// 切换当前页
this.searchForm.pageNo = val;
this.getAuthTable();
},
}, },
} }
...@@ -189,7 +331,7 @@ ...@@ -189,7 +331,7 @@
font-size: 14px; font-size: 14px;
} }
.header-title { .header-title {
padding: 10px 12px; padding: 10px 12px 20px;
font-size: 14px; font-size: 14px;
color: #606266; color: #606266;
border-bottom: 1px solid #efefef; border-bottom: 1px solid #efefef;
...@@ -210,7 +352,7 @@ ...@@ -210,7 +352,7 @@
} }
.new-add{ .new-add{
float: right; float: right;
margin: 10px 0 30px; margin: 10px 0 20px;
} }
} }
} }
......
<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-for="(item,_index) in items"> <template v-if="isOutsideGetted && isOutsideUser">
<template v-if="item.subs"> <el-menu-item v-for="(outItem, outIndex) in outsideItems" :index="'/'+outItem.index" :key="outItem.index">
<el-submenu :index=" 'index_' + _index" :key="item.index"> <i :class="outItem.icon"></i>{{ outItem.title }}
<template slot="title"><i :class="item.icon"></i>{{item.title}}</template> </el-menu-item>
<el-menu-item v-for="(subItem,i) in item.subs" :key="i" :index="'/'+subItem.index"> </template>
<i class="sub-icon" :class="subItem.icon"></i> <template v-if="isOutsideGetted && !isOutsideUser">
{{subItem.title}} <template v-for="(item,_index) in items">
<p class="redNum" <template v-if="item.subs">
v-if="subItem.title == '资料不全居民' <el-submenu :index=" 'index_' + _index" :key="item.index">
&&notCompleteCount <template slot="title"><i :class="item.icon"></i>{{item.title}}</template>
&&$route.path!='/patients-manage/not-complete/uncompleted-list'" <el-menu-item v-for="(subItem,i) in item.subs" :key="i" :index="'/'+subItem.index">
> <i class="sub-icon" :class="subItem.icon"></i>
<span v-if="notCompleteCount>999">+999</span> {{subItem.title}}
<span v-else>{{notCompleteCount}}</span> <p class="redNum"
</p> v-if="subItem.title == '资料不全居民'
</el-menu-item> &&notCompleteCount
</el-submenu> &&$route.path!='/patients-manage/not-complete/uncompleted-list'"
</template> >
<template v-else> <span v-if="notCompleteCount>999">+999</span>
<template v-if="item.isMessageSend"> <span v-else>{{notCompleteCount}}</span>
<el-menu-item :index="'/'+item.index" :key="item.index" @click="goToMessageSendPage(item.checkAuth)" class="set-normal-background"> </p>
<i :class="item.icon"></i>{{ item.title }} </el-menu-item>
</el-menu-item> </el-submenu>
</template> </template>
<template v-else> <template v-else>
<el-menu-item :index="'/'+item.index" :key="item.index"> <template v-if="item.isMessageSend">
<i :class="item.icon"></i>{{ item.title }} <el-menu-item :index="'/'+item.index" :key="item.index" @click="goToMessageSendPage(item.checkAuth)" class="set-normal-background">
</el-menu-item> <i :class="item.icon"></i>{{ item.title }}
</el-menu-item>
</template>
<template v-else>
<el-menu-item :index="'/'+item.index" :key="item.index">
<i :class="item.icon"></i>{{ item.title }}
</el-menu-item>
</template>
</template> </template>
</template> </template>
</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: '数据总览',
...@@ -166,7 +177,14 @@ ...@@ -166,7 +177,14 @@
}, },
] ]
}, },
] ],
outsideItems: [ // 外部用户 路由
{
title: '学分发放管理',
icon: 'el-icon-document',
index: 'credit-send-manage'
},
],
} }
}, },
computed: { computed: {
...@@ -176,6 +194,7 @@ ...@@ -176,6 +194,7 @@
}, },
created() { created() {
vm = this; vm = this;
this.getUserType();
}, },
mounted(){ mounted(){
if(vm.storageIdType==2){ if(vm.storageIdType==2){
...@@ -208,6 +227,27 @@ ...@@ -208,6 +227,27 @@
} }
}, },
methods: { methods: {
getUserType() {
// console.log('当前路由地址:', this.$route.path, typeof this.$route.path)
// let currentPath = this.$route.path;
let req = {};
console.log('cmeStore: ', this.$store.state.cmeStore.isOutsideUser)
getUserTypeReq(req).then(res => {
this.isOutsideGetted = true;
if (res.code == "219015") { // 外部用户,只展示一个页面
this.isOutsideUser = true;
this.$store.dispatch('cmeStore/updateOutUserStatus', true);
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 到此讨论。请谨慎行事。
先完成此消息的编辑!
想要评论请 注册