提交 3acefb91 编写于 作者: tao.wu's avatar tao.wu

Merge branch 'dev-appPatients-20190529' of...

Merge branch 'dev-appPatients-20190529' of 192.168.110.53:com.pica.cloud.education.frontend/pica.cloud.web-education-admin into dev-appPatients-20190529
...@@ -2777,7 +2777,8 @@ ...@@ -2777,7 +2777,8 @@
"ansi-regex": { "ansi-regex": {
"version": "2.1.1", "version": "2.1.1",
"bundled": true, "bundled": true,
"dev": true "dev": true,
"optional": true
}, },
"aproba": { "aproba": {
"version": "1.2.0", "version": "1.2.0",
...@@ -3179,7 +3180,8 @@ ...@@ -3179,7 +3180,8 @@
"safe-buffer": { "safe-buffer": {
"version": "5.1.1", "version": "5.1.1",
"bundled": true, "bundled": true,
"dev": true "dev": true,
"optional": true
}, },
"safer-buffer": { "safer-buffer": {
"version": "2.1.2", "version": "2.1.2",
...@@ -3234,6 +3236,7 @@ ...@@ -3234,6 +3236,7 @@
"version": "3.0.1", "version": "3.0.1",
"bundled": true, "bundled": true,
"dev": true, "dev": true,
"optional": true,
"requires": { "requires": {
"ansi-regex": "^2.0.0" "ansi-regex": "^2.0.0"
} }
...@@ -3277,12 +3280,14 @@ ...@@ -3277,12 +3280,14 @@
"wrappy": { "wrappy": {
"version": "1.0.2", "version": "1.0.2",
"bundled": true, "bundled": true,
"dev": true "dev": true,
"optional": true
}, },
"yallist": { "yallist": {
"version": "3.0.2", "version": "3.0.2",
"bundled": true, "bundled": true,
"dev": true "dev": true,
"optional": true
} }
} }
}, },
......
...@@ -12,11 +12,15 @@ const addManager = r => require.ensure([], () => r(require('../views/education/a ...@@ -12,11 +12,15 @@ const addManager = r => require.ensure([], () => r(require('../views/education/a
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')
import patientsRouters from './patients' import patientsRouters from './patients'
import followRouters from './follow' import followRouters from './follow'
const reportLis = r => require.ensure([], () => r(require('../views/learning/report-list.vue')), 'report-list')
const itemList = r => require.ensure([], () => r(require('../views/learning/item-list.vue')), 'item-list')
const nameList = r => require.ensure([], () => r(require('../views/learning/name-list.vue')), 'name-list')
const dataAlignment = r => require.ensure([], () => r(require('../views/learning/data-alignment.vue')), 'data-alignment')
const courseTraining = r => require.ensure([], () => r(require('../views/learning/course-training.vue')), 'course-training')
export default [{ export default [{
path: '/', path: '/',
component: App, component: App,
...@@ -56,6 +60,21 @@ export default [{ ...@@ -56,6 +60,21 @@ export default [{
},{ },{
path: '/item-role', path: '/item-role',
component: itemRole component: itemRole
},{
path: '/report-list',
component: reportLis
},{
path: '/item-list',
component: itemList
},{
path: '/data-alignment',
component: dataAlignment
},{
path: '/name-list',
component: nameList
},{
path: '/course-training',
component: courseTraining
}, },
{ {
path: '/msg-push', path: '/msg-push',
......
...@@ -3,12 +3,12 @@ ...@@ -3,12 +3,12 @@
*/ */
export const envConfig = { export const envConfig = {
development: { development: {
// baseUrl: 'https://dev-sc.yunqueyi.com/',
// // 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:11905/',
baseUrl: 'https://dev-sc.yunqueyi.com/', baseUrl: 'https://dev-sc.yunqueyi.com/',
apiUrl: 'https://dev-api.yunqueyi.com/', apiUrl: 'https://dev-api.yunqueyi.com/',
qiniuFileUrl: "https://dev-sc.yunqueyi.com/contents/admin/qiniu/token1", qiniuFileUrl: "https://dev-sc.yunqueyi.com/contents/admin/qiniu/token1",
......
...@@ -157,6 +157,13 @@ const vueFilter = { ...@@ -157,6 +157,13 @@ const vueFilter = {
return '普通用户' return '普通用户'
} }
}, },
joinTraining: (value) => {
if(value == "1") {
return '是'
}else {
return '否'
}
},
} }
export default vueFilter export default vueFilter
\ No newline at end of file
...@@ -38,7 +38,7 @@ export const checkRange = (rule, value, callback) => { ...@@ -38,7 +38,7 @@ export const checkRange = (rule, value, callback) => {
// 校验手机号 // 校验手机号
export const checkMobile = (rule, value, callback) => { export const checkMobile = (rule, value, callback) => {
const reg = /^1[3|4|5|7|8|9][0-9]{9}$/; //验证规则 const reg = /^1[3|4|5|6|7|8|9][0-9]{9}$/; //验证规则
const flag = reg.test(value); const flag = reg.test(value);
if(flag){ if(flag){
callback() callback()
......
...@@ -28,7 +28,7 @@ export function getIntersect(a, b) { ...@@ -28,7 +28,7 @@ export function getIntersect(a, b) {
//获取id的list //获取id的list
export function getIdList(data) { export function getIdList(data) {
let list = []; let list = [];
if(typeof data === 'undefined') { if (typeof data === 'undefined') {
return list; return list;
} }
if (data.constructor === Array) { if (data.constructor === Array) {
...@@ -208,7 +208,7 @@ function addEmpty(data) { ...@@ -208,7 +208,7 @@ function addEmpty(data) {
label: "全部地区", label: "全部地区",
value: "0", value: "0",
} }
for(let i=0;i<data.length;i++) { for (let i = 0; i < data.length; i++) {
after.push(data[i]); after.push(data[i]);
} }
return after; return after;
...@@ -236,7 +236,7 @@ export function getEcologyList() { ...@@ -236,7 +236,7 @@ export function getEcologyList() {
cityName: '上海市', cityName: '上海市',
countyName: '浦东新区', countyName: '浦东新区',
townName: '--', townName: '--',
},{ }, {
id: '124', id: '124',
name: '上海第二人民医院', name: '上海第二人民医院',
hospitalLevelName: '二甲医院', hospitalLevelName: '二甲医院',
...@@ -244,7 +244,7 @@ export function getEcologyList() { ...@@ -244,7 +244,7 @@ export function getEcologyList() {
cityName: '上海市', cityName: '上海市',
countyName: '浦东新区', countyName: '浦东新区',
townName: '--', townName: '--',
},{ }, {
id: '125', id: '125',
name: '上海第三人民医院', name: '上海第三人民医院',
hospitalLevelName: '二甲医院', hospitalLevelName: '二甲医院',
...@@ -255,7 +255,7 @@ export function getEcologyList() { ...@@ -255,7 +255,7 @@ export function getEcologyList() {
}] }]
return dataList; return dataList;
} }
export function getEcologySelect (data) { export function getEcologySelect(data) {
// let ecologyist = [{ // let ecologyist = [{
// label: '上海小生态', // label: '上海小生态',
// value: '1', // value: '1',
...@@ -264,7 +264,7 @@ export function getEcologySelect (data) { ...@@ -264,7 +264,7 @@ export function getEcologySelect (data) {
// value: '2', // value: '2',
// }]; // }];
let ecologyist = []; let ecologyist = [];
for(let i=0;i<data.length;i++) { for (let i = 0; i < data.length; i++) {
let obj = { let obj = {
label: data[i].name, label: data[i].name,
value: data[i].id, value: data[i].id,
...@@ -272,4 +272,96 @@ export function getEcologySelect (data) { ...@@ -272,4 +272,96 @@ export function getEcologySelect (data) {
ecologyist.push(obj); ecologyist.push(obj);
} }
return ecologyist; return ecologyist;
}
export function isOverlap(startA,endA,startB,endB) {
let maxStart = Math.max(startA,startB);
let minEnd = Math.min(endA,endB);
console.log('maxStart',maxStart,'minEnd',minEnd);
if(maxStart <= minEnd) {
return true;
} else {
return false;
}
}
export function getRegionOption() {
let option = [{
value: 'zhejiang',
label: '浙江',
children: [{
value: 'hangzhou',
label: '杭州',
children: [{
value: 'xihu',
label: '西湖区'
}, {
value: 'donghu',
label: '东湖区'
}]
}]
}];
return option;
}
export function getPicOption(title,legendData, colorData, seriesData) {
let option = {
title: {
text: title,
x: "center"
},
legend: {
orient: "vertical",
left: "left",
data: legendData
},
color: colorData,
backgroundColor: '#F3F3F3',
series: [
{
name: "",
type: "pie",
// radius: "55%",
center: ["50%", "60%"],
data: seriesData,
}
]
};
return option;
}
export function getBarOption(xAxisData, seriesData) {
let option = {
title: {
text: "用户年龄发布",
x: "center"
},
color: ['#3398DB'],
backgroundColor: '#F3F3F3',
grid: {
left: '3%',
right: '4%',
bottom: '3%',
containLabel: true
},
xAxis: [
{
type: 'category',
data: xAxisData,
// axisTick: {
// alignWithLabel: true
// }
}
],
yAxis: [
{
type: 'value'
}
],
series: [
{
name: '',
type: 'bar',
barWidth: '75%',
data: seriesData,
}
]
};
return option;
} }
\ No newline at end of file
// 校验手机号 // 校验手机号
export const checkMobile = (rule, value, callback) => { export const checkMobile = (rule, value, callback) => {
var reg = /^1[3|4|5|7|8][0-9]{9}$/; //验证规则 var reg = /^1[3|4|5|6|7|8|9][0-9]{9}$/; //验证规则
const flag = reg.test(value); const flag = reg.test(value);
if(flag){ if(flag){
callback() callback()
......
...@@ -586,7 +586,7 @@ ...@@ -586,7 +586,7 @@
<el-radio :label="2"></el-radio> <el-radio :label="2"></el-radio>
</el-radio-group> </el-radio-group>
</el-form-item> </el-form-item>
<el-form-item v-show="formComponent.configure == 1" label="选择证书:"> <!-- <el-form-item v-show="formComponent.configure == 1" label="选择证书:">
<el-col :span="20"> <el-col :span="20">
<el-select <el-select
v-model="formComponent.certificate" v-model="formComponent.certificate"
...@@ -602,6 +602,82 @@ ...@@ -602,6 +602,82 @@
></el-option> ></el-option>
</el-select> </el-select>
</el-col> </el-col>
</el-form-item> -->
</el-form>
<el-form
ref="formExam"
label-width="150px"
:model="formExam"
class="achievement"
v-show="formComponent.configure == 1"
>
<el-form-item label="项目成绩评定条件">
<el-select
v-model="formExam.certificateType"
placeholder="请选择"
style="width: 350px"
@change="updateCertificateType"
:disabled="projectStatus == 3 || projectStatus == 4 || projectStatus == 5 || projectStatus == 6"
>
<el-option
v-for="item in certificateTypeList"
:key="item.value"
:label="item.label"
:value="item.value"
></el-option>
</el-select>
</el-form-item>
<div v-show="formExam.certificateType == 2" v-for="(item , index) in formExam.exam" :key="index">
<el-form-item label="发放证书">
<el-col :span="6">
<el-select
v-model="item.certificateId"
placeholder="请选择证书"
style=""
@change="updateCertificate(index)"
:disabled="projectStatus == 3 || projectStatus == 4 || projectStatus == 5 || projectStatus == 6"
>
<el-option
v-for="item in optionsCertificate"
:key="item.value"
:label="item.label"
:value="item.value"
></el-option>
</el-select>
</el-col>
<el-col :span="3">
<el-button @click="addCertificate" icon="el-icon-plus" circle></el-button>
<el-button @click="reduceCertificate(index)" icon="el-icon-minus" circle></el-button>
</el-col>
</el-form-item>
<el-form-item label="项目中最高">
<el-col :span="3">
<el-input v-model="item.examCount" @change="updateCount(index)" :disabled="projectStatus == 3 || projectStatus == 4 || projectStatus == 5 || projectStatus == 6"></el-input>
</el-col>
<el-col class="line" :span="3.5" > &nbsp 门考试平均分:</el-col>
<el-col :span="3">
<el-input v-model="item.rangeMin" @change="updateMin(index)" :disabled="projectStatus == 3 || projectStatus == 4 || projectStatus == 5 || projectStatus == 6"></el-input>
</el-col>
<el-col class="line" :span="1.5"> &nbsp 分~ &nbsp</el-col>
<el-col :span="3">
<el-input v-model="item.rangeMax" @change="updateMax(index)" :disabled="projectStatus == 3 || projectStatus == 4 || projectStatus == 5 || projectStatus == 6"></el-input>
</el-col>
</el-form-item>
</div>
<el-form-item v-show="formExam.certificateType == 1" label="发放证书">
<el-select
v-model="formComponent.certificate"
placeholder="请选择证书"
style="width: 350px"
:disabled="projectStatus == 3 || projectStatus == 4 || projectStatus == 5 || projectStatus == 6"
>
<el-option
v-for="item in optionsCertificate"
:key="item.value"
:label="item.label"
:value="item.value"
></el-option>
</el-select>
</el-form-item> </el-form-item>
</el-form> </el-form>
</div> </div>
...@@ -802,6 +878,27 @@ export default { ...@@ -802,6 +878,27 @@ export default {
projectStatus: "", projectStatus: "",
status4Flag: "", status4Flag: "",
showStorage: false, showStorage: false,
//考试数据
formExam: {
certificateType: 1,
exam: [{
examCount: 1,
rangeMin: '',
rangeMax: '',
certificateId: '',
certificateName: '',
}]
},
certificateTypeList: [
{
label: '根据平均分发证书',
value: 2,
},
{
label: '所有组件通过即发放',
value: 1,
}
],
//校验工具 数据 //校验工具 数据
rulesComponent: { rulesComponent: {
component: [ component: [
...@@ -975,6 +1072,21 @@ export default { ...@@ -975,6 +1072,21 @@ export default {
this.formComponent.certificate = this.formComponent.certificate =
editData.certificateData[0].relevanceId; editData.certificateData[0].relevanceId;
} }
if (editData.certificateRule.length > 0) {
this.formComponent.configure = 1;
}
//初始化考试平均分配置数据
this.formExam.certificateType = editData.projectData.certificateType;
this.formExam.exam = editData.certificateRule;
if(this.formExam.exam.length == 0) {
this.formExam.exam = [{
examCount: 1,
rangeMin: '',
rangeMax: '',
certificateId: '',
certificateName: '',
}]
}
}, },
//编辑管理 //编辑管理
editManager(data) { editManager(data) {
...@@ -1148,11 +1260,39 @@ export default { ...@@ -1148,11 +1260,39 @@ export default {
componentDraft(type) { componentDraft(type) {
let param = { let param = {
componentIds: this.formComponent.component, componentIds: this.formComponent.component,
certificateId: this.formComponent.certificate, // certificateId: this.formComponent.certificate,
certificateId: [],
projectId: this.projectId, projectId: this.projectId,
type: type, type: type,
status: this.projectStatus status: this.projectStatus,
certificateType: this.formExam.certificateType,
getCertificateRule: [],
}; };
if(this.formComponent.configure == 1) {
// 2.多证书有规
if(this.formExam.certificateType == 2) {
let ruleData = vm.formExam.exam;
for(let o=0;o<ruleData.length;o++) {
if(ruleData[o].certificateId != '' && ruleData[o].certificateId != null) {
param.certificateId[o] = ruleData[o].certificateId;
}
param.getCertificateRule[o] = {
certificateId: ruleData[o].certificateId,
certificateName: ruleData[o].certificateName,
examCount: ruleData[o].examCount,
portalProjectId: this.projectId,
rangeMax: ruleData[o].rangeMax,
rangeMin: ruleData[o].rangeMin,
}
}
}
// 1.单证书无规则
else {
if(this.formComponent.certificate != '' && this.formComponent.certificate != null) {
param.certificateId[0] = this.formComponent.certificate;
}
}
}
vm.POST("portal/portalInfo/componentDraft", param).then(res => { vm.POST("portal/portalInfo/componentDraft", param).then(res => {
console.log(res); console.log(res);
vm.$message({ vm.$message({
...@@ -1275,11 +1415,6 @@ export default { ...@@ -1275,11 +1415,6 @@ export default {
} else if (this.active == 2) { } else if (this.active == 2) {
//暂存步骤3 //暂存步骤3
this.componentDraft(1); this.componentDraft(1);
// let formName = "formComponent";
// let completeState = this.submitForm(formName);
// if (completeState === true) {
// this.componentDraft(1);
// }
} }
}, },
//点击完成 //点击完成
...@@ -1292,7 +1427,8 @@ export default { ...@@ -1292,7 +1427,8 @@ export default {
} }
let formName = "formComponent"; let formName = "formComponent";
let completeState = this.submitForm(formName); let completeState = this.submitForm(formName);
if (completeState === true) { let certificateState = this.checkCertificate();
if (completeState === true && certificateState === true) {
this.componentDraft(2); this.componentDraft(2);
} }
}, },
...@@ -2945,6 +3081,182 @@ export default { ...@@ -2945,6 +3081,182 @@ export default {
this.formComponent.component[j] = this.tagsComponent[j].value; this.formComponent.component[j] = this.tagsComponent[j].value;
} }
} }
},
addCertificate() {
let obj = {
examCount: 1,
rangeMin: '',
rangeMax: '',
certificateId: '',
certificateName: '',
};
vm.formExam.exam.push(obj);
},
reduceCertificate(index) {
// console.log(index);
if(vm.formExam.exam.length > 1) {
vm.formExam.exam.splice(index,1);
} else {
vm.$message('至少配置一个证书');
}
},
//考试门数更新校验
updateCount(index) {
if(vm.formExam.exam[index].examCount) {
vm.formExam.exam[index].examCount = parseInt(vm.formExam.exam[index].examCount);
if(!Number.isInteger(vm.formExam.exam[index].examCount)){
vm.formExam.exam[index].examCount = '';
}
if(vm.formExam.exam[index].examCount <= 0) {
vm.formExam.exam[index].examCount = '';
}
if(vm.formExam.exam[index].examCount != '') {
for(let i=0;i<vm.formExam.exam.length;i++) {
vm.formExam.exam[i].examCount = vm.formExam.exam[index].examCount;
}
}
}
},
//区间控制在0~100
baseCheck(index) {
if(vm.formExam.exam[index].rangeMin != '') {
vm.formExam.exam[index].rangeMin = parseInt(vm.formExam.exam[index].rangeMin);
if(vm.formExam.exam[index].rangeMin > 100) {
vm.formExam.exam[index].rangeMin = 100;
}
if(vm.formExam.exam[index].rangeMin < 0) {
vm.formExam.exam[index].rangeMin = 0;
}
}
if(vm.formExam.exam[index].rangeMax != '') {
vm.formExam.exam[index].rangeMax = parseInt(vm.formExam.exam[index].rangeMax);
if(vm.formExam.exam[index].rangeMax > 100) {
vm.formExam.exam[index].rangeMax = 100;
}
if(vm.formExam.exam[index].rangeMax < 0) {
vm.formExam.exam[index].rangeMax = 0;
}
}
},
//区间不能有交集
withoutUnion(index,type) {
let examList = vm.formExam.exam;
let nowMin = vm.formExam.exam[index].rangeMin;
let nowMax = vm.formExam.exam[index].rangeMax;
console.log('nowMin',nowMin,'nowMax',nowMax);
if(nowMin!=='' && nowMax!=='') {
for(let i=0;i<examList.length;i++) {
if(index !== i && examList[i].rangeMin!=='' && examList[i].rangeMax!=='') {
let overlapStatus = operationData.isOverlap(examList[i].rangeMin,examList[i].rangeMax,nowMin,nowMax);
if(overlapStatus === true) {//区间有交集
vm.$message('设置分数区间不能重合');
vm.formExam.exam[index].rangeMin = '';
vm.formExam.exam[index].rangeMax = '';
// console.log('重合制空',vm.formExam.exam[index])
}
}
}
}
},
updateMin(index) {
vm.baseCheck(index);
if(!Number.isInteger(vm.formExam.exam[index].rangeMin)){
vm.formExam.exam[index].rangeMin = '';
return;
}
// console.log('更新 nowMin',vm.formExam.exam[index].rangeMin,'nowMax',vm.formExam.exam[index].rangeMax);
if(vm.formExam.exam[index].rangeMin == '' || vm.formExam.exam[index].rangeMax == '') {
return;
}
if(vm.formExam.exam[index].rangeMin > vm.formExam.exam[index].rangeMax) {
vm.formExam.exam[index].rangeMin = vm.formExam.exam[index].rangeMax;
}
vm.withoutUnion(index,'min')
},
updateMax(index) {
vm.baseCheck(index);
if(!Number.isInteger(vm.formExam.exam[index].rangeMax)){
// console.log('只能整数');
vm.formExam.exam[index].rangeMax = '';
return;
}
if(vm.formExam.exam[index].rangeMin == '' || vm.formExam.exam[index].rangeMax == '') {
return;
}
if(vm.formExam.exam[index].rangeMin > vm.formExam.exam[index].rangeMax) {
vm.formExam.exam[index].rangeMax = vm.formExam.exam[index].rangeMin;
}
vm.withoutUnion(index,'max')
},
updateCertificate(index) {
// console.log('optionsCertificate',vm.optionsCertificate,'index',index,'item',vm.formExam.exam[index])
for(let i=0;i<vm.optionsCertificate.length;i++) {
if(vm.optionsCertificate[i].value == vm.formExam.exam[index].certificateId) {
vm.formExam.exam[index].certificateName = vm.optionsCertificate[i].label;
break;
}
}
},
//更新项目成绩评定条件
updateCertificateType() {
console.log('更新certificateType',vm.formExam.certificateType)
if(vm.formExam.certificateType == 2) {
vm.formExam.exam = [{
examCount: 1,
rangeMin: '',
rangeMax: '',
certificateId: '',
certificateName: '',
}];
} else if(vm.formExam.certificateType == 1) {
vm.formComponent.certificate = '';
}
},
//校验考试通过平均分配置
checkCertificate () {
//空判断
if(vm.formExam.certificateType == 2) {
let checkIdList = [];
for(let i=0;i<vm.formExam.exam.length;i++) {
checkIdList[i] = vm.formExam.exam[i].certificateId;
if(vm.formExam.exam[i].certificateId == ''){
vm.$message('证书不能为空');
return false;
}
if(vm.formExam.exam[i].examCount == ''){
vm.$message('考试门数不能为空');
return false;
}
if(vm.formExam.exam[i].rangeMin == '' || vm.formExam.exam[i].rangeMax == ''){
vm.$message('分数不能为空');
return false;
}
}
// 判断证书不能重复
checkIdList = checkIdList.sort();
for(let j=0;j<checkIdList.length-1;j++) {
if (checkIdList[j] == checkIdList[j+1]) {
vm.$message('证书不能重复选择');
return false;
}
}
// 考试门数必须相同
for(let i=0;i<vm.formExam.exam.length-1;i++) {
if (vm.formExam.exam[i].examCount != vm.formExam.exam[i+1].examCount) {
vm.$message('考试门数必须相同');
return false;
}
}
} else if(vm.formExam.certificateType == 1) {
//组件通过即发放 证书必填
if(vm.formComponent.configure == 1 && vm.formExam.certificateType == 1) {
if(vm.formComponent.certificate == '') {
vm.$message('证书不能为空!');
return false;
}
}
}
return true;
} }
} }
}; };
...@@ -3162,6 +3474,9 @@ export default { ...@@ -3162,6 +3474,9 @@ export default {
.third-step { .third-step {
margin: 30px 0 0px 30px; margin: 30px 0 0px 30px;
padding-bottom: 30px; padding-bottom: 30px;
.achievement {
margin-top: 60px;
}
} }
} }
</style> </style>
\ No newline at end of file
<template> <template>
<div class="create-component-wrap"> <div class="create-component-wrap">
<bread-crumb <bread-crumb
:curmbFirst="curmbFirst" :curmbFirst="curmbFirst"
:curmbSecond="curmbSecond" :curmbSecond="curmbSecond"
:curmbThird="curmbThird" :curmbThird="curmbThird"
:jumPathThird="jumPathThird"> :jumPathThird="jumPathThird">
</bread-crumb> </bread-crumb>
...@@ -17,8 +17,8 @@ ...@@ -17,8 +17,8 @@
<div class="btn-container"> <div class="btn-container">
<el-button v-if="stepNum == 1 && (componentStatus == 1 || !componentStatus)" @click="storageAndNext(1)" type="default" size="small">暂存</el-button> <el-button v-if="stepNum == 1 && (componentStatus == 1 || !componentStatus)" @click="storageAndNext(1)" type="default" size="small">暂存</el-button>
<el-button v-if="stepNum == 1" @click="storageAndNext(2)" type="primary" size="small" style="margin-left:0;">下一步</el-button> <el-button v-if="stepNum == 1" @click="storageAndNext(2)" type="primary" size="small" style="margin-left:0;">下一步</el-button>
<el-button v-if="stepNum == 2 && (componentStatus == 1 || !componentStatus)" :disabled="conditionSelect" @click="finishConponent(1)" type="default" size="small">暂存</el-button> <el-button v-if="stepNum == 2 && (componentStatus == 1 || !componentStatus)" :disabled="newconditionSelect" @click="finishConponent(1)" type="default" size="small">暂存</el-button>
<el-button v-if="stepNum == 2" @click="finishConponent(2)" :disabled="conditionSelect" type="primary" size="small" style="margin-left:0;">完成</el-button> <el-button v-if="stepNum == 2" @click="finishConponent(2)" :disabled="newconditionSelect" type="primary" size="small" style="margin-left:0;">完成</el-button>
</div> </div>
</div> </div>
<div class="first-step" v-if="stepNum == 1"> <div class="first-step" v-if="stepNum == 1">
...@@ -79,13 +79,13 @@ ...@@ -79,13 +79,13 @@
</el-col> </el-col>
</el-row> </el-row>
<el-form-item v-if="hasCertificate" label="组件完成(%)" prop="certificateCondition"> <el-form-item v-if="hasCertificate" label="组件完成(%)" prop="certificateCondition">
<el-input-number <el-input-number
v-model="portalComponent.certificateCondition" v-model="portalComponent.certificateCondition"
controls-position="right" controls-position="right"
@change="handleChange" @change="handleChange"
:disabled="componentStatus == 3 || componentStatus == 4" :disabled="componentStatus == 3 || componentStatus == 4"
:step="10" :step="10"
:min="10" :min="10"
:max="100"> :max="100">
</el-input-number> </el-input-number>
</el-form-item> </el-form-item>
...@@ -104,28 +104,36 @@ ...@@ -104,28 +104,36 @@
<el-row> <el-row>
<el-col :span="10"> <el-col :span="10">
<el-form-item label="模块名称" prop="name"> <el-form-item label="模块名称" prop="name">
<el-input v-model="item.name" @blur="moduleNameValidate(index)" :disabled="conditionSelect || idType == 2 || item.moduleType == 2 || (item.id != '' && item.openFlag == 2)" size="small" placeholder="请选择模块名称" style="width:288px;"></el-input> <el-input v-model="item.name" @blur="moduleNameValidate(index)" :disabled="fieldDisabled(item)" size="small" placeholder="请选择模块名称" style="width:288px;"></el-input>
</el-form-item> </el-form-item>
</el-col> </el-col>
<el-col :span="10" v-if="idType == 1"> <el-col :span="8" v-if="idType == 1">
<el-form-item label="是否对外开放" prop="openFlag"> <el-form-item label="是否对外开放" prop="openFlag">
<el-radio-group v-model="item.openFlag" @change="selectIsOpen(index)" :disabled="conditionSelect || item.moduleType == 2 || (item.id != '' && item.openFlag == 2)"> <el-radio-group v-model="item.openFlag" @change="selectIsOpen(index)" :disabled="fieldDisabled(item) || item.openDisabled">
<el-radio :label="2"></el-radio> <el-radio :label="2"></el-radio>
<el-radio :label="1"></el-radio> <el-radio :label="1"></el-radio>
</el-radio-group> </el-radio-group>
</el-form-item> </el-form-item>
</el-col> </el-col>
<el-col :span="6" v-if="idType == 1">
<el-form-item label="是否启用" prop="status">
<el-radio-group v-model="item.status" @change="selectIsOpenStatus(index)" :disabled="fieldDisabled(item)">
<el-radio :label="2"></el-radio>
<el-radio :label="1"></el-radio>
</el-radio-group>
</el-form-item>
</el-col>
</el-row> </el-row>
</el-form> </el-form>
<div class="template-btn" v-if="idType == 1"> <div class="template-btn" v-if="idType == 1">
<span class="word-size">添加一个模板</span> <span class="word-size">添加一个模板</span>
<el-button <el-button
:disabled="conditionSelect || item.moduleType == 2 || (item.id != '' && item.openFlag == 2)" :disabled="fieldDisabled(item)"
v-for="(_item,_index) in templateDataList" v-for="(_item,_index) in templateDataList"
:key="_index" :key="_index"
type="primary" type="primary"
size="small" size="small"
@click="addTemplate(_item,index)" @click="addTemplate(_item,index)"
style="margin-right:0px;">{{_item.name}}</el-button> style="margin-right:0px;">{{_item.name}}</el-button>
</div> </div>
<div v-for="(item1,index1) in item.templetModelList" :key="index1"> <div v-for="(item1,index1) in item.templetModelList" :key="index1">
...@@ -134,7 +142,7 @@ ...@@ -134,7 +142,7 @@
<div class="template-content-div"> <div class="template-content-div">
<div class="title"> <div class="title">
{{item1.name}} {{item1.name}}
<span v-if="conditionAnd && item.moduleType == 1 && (item.id == '' || (item.id != '' && item.openFlag == 1)) && idType == 1"> <span v-if="newfieldDisabled(item)">
变更顺序: 变更顺序:
<i class="el-icon-caret-bottom" @click="sortUp(index,index1)" style="font-size:17px;"></i> <i class="el-icon-caret-bottom" @click="sortUp(index,index1)" style="font-size:17px;"></i>
<i class="el-icon-caret-top" @click="sortDown(index,index1)" style="font-size:17px;"></i> <i class="el-icon-caret-top" @click="sortDown(index,index1)" style="font-size:17px;"></i>
...@@ -150,15 +158,15 @@ ...@@ -150,15 +158,15 @@
<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-input v-model="item3.content1" :disabled="conditionSelect || item.moduleType == 2 || (item.id != '' && item.openFlag == 2) || idType == 2" size="small" maxlength='30' placeholder="请输入考试名称" style="width:288px;"></el-input> <el-input v-model="item3.content1" :disabled="fieldDisabled(item)" size="small" maxlength='30' placeholder="请输入考试名称" style="width:288px;"></el-input>
<span v-if="conditionAnd && item2.numFlag == 2 && index3 == 0 && item.moduleType == 1 && idType == 1 && (item.id == '' || (item.id != '' && item.openFlag == 1))"><i class="el-icon-circle-plus" @click="addMatterCourse(index,index1,index2)" style="color:#449284;"></i></span> <span v-if="newfieldDisabled(item) && item2.numFlag == 2 && index3 == 0 "><i class="el-icon-circle-plus" @click="addMatterCourse(index,index1,index2)" style="color:#449284;"></i></span>
<span v-if="conditionAnd && item2.numFlag == 2 && index3 > 0 && item.moduleType == 1 && idType == 1 && (item.id == '' || (item.id != '' && item.openFlag == 1))"><i class="el-icon-delete" @click="deleteMatterCourse(index,index1,index2,index3)" style="color:red;"></i></span> <span v-if="newfieldDisabled(item) && item2.numFlag == 2 && index3 > 0 "><i class="el-icon-delete" @click="deleteMatterCourse(index,index1,index2,index3)" style="color:red;"></i></span>
</el-form-item> </el-form-item>
</el-col> </el-col>
<el-col :span="10" 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 v-model="item3.content2" @focus="examIDfocus(index,index1,index2,index3)" @change="changeExamID" :disabled="conditionSelect || item.moduleType == 2 || idType == 2 || (item.id != '' && item.openFlag == 2)" size="small" placeholder="请选择考试ID" style="width:288px;"> <el-select v-model="item3.content2" @focus="examIDfocus(index,index1,index2,index3)" @change="changeExamID" :disabled="fieldDisabled(item)" size="small" placeholder="请选择考试ID" style="width:288px;">
<el-option <el-option
v-for="(itemTest,indexTest) in testIdSelect" v-for="(itemTest,indexTest) in testIdSelect"
:key="indexTest" :key="indexTest"
...@@ -173,7 +181,7 @@ ...@@ -173,7 +181,7 @@
<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-radio-group v-model="item3.certificateFlag" :disabled="conditionSelect || item.moduleType == 2 || idType == 2 || (item.id != '' && item.openFlag == 2)"> <el-radio-group v-model="item3.certificateFlag" :disabled="fieldDisabled(item)">
<el-radio :label="2"></el-radio> <el-radio :label="2"></el-radio>
<el-radio :label="1"></el-radio> <el-radio :label="1"></el-radio>
</el-radio-group> </el-radio-group>
...@@ -182,7 +190,7 @@ ...@@ -182,7 +190,7 @@
<el-col :span="10" v-if="item3.certificateFlag == 2" class="item-icon"> <el-col :span="10" v-if="item3.certificateFlag == 2" class="item-icon">
<span class="require">*</span> <span class="require">*</span>
<el-form-item label="选择证书"> <el-form-item label="选择证书">
<el-select v-model="item3.content4" :disabled="conditionSelect || item.moduleType == 2 || idType == 2 || (item.id != '' && item.openFlag == 2)" size="small" placeholder="请选择证书" style="width:288px;"> <el-select v-model="item3.content4" :disabled="fieldDisabled(item)" size="small" placeholder="请选择证书" style="width:288px;">
<el-option <el-option
v-for="(itemCertificate,indexCertificate) in certificateIdSelect" v-for="(itemCertificate,indexCertificate) in certificateIdSelect"
:key="indexCertificate" :key="indexCertificate"
...@@ -202,15 +210,15 @@ ...@@ -202,15 +210,15 @@
<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-input v-model="item3.content1" :disabled="conditionSelect || item.moduleType == 2 || idType == 2 || (item.id != '' && item.openFlag == 2)" size="small" maxlength='30' placeholder="请输入课程名称" style="width:288px;"></el-input> <el-input v-model="item3.content1" :disabled="fieldDisabled(item)" size="small" maxlength='30' placeholder="请输入课程名称" style="width:288px;"></el-input>
<span v-if="conditionAnd && item2.numFlag == 2 && index3 == 0 && item.moduleType == 1 && idType == 1 && (item.id == '' || (item.id != '' && item.openFlag == 1))"><i class="el-icon-circle-plus" @click="addMatterCourse(index,index1,index2)" style="color:#449284;"></i></span> <span v-if="newfieldDisabled(item) && item2.numFlag == 2 && index3 == 0"><i class="el-icon-circle-plus" @click="addMatterCourse(index,index1,index2)" style="color:#449284;"></i></span>
<span v-if="conditionAnd && item2.numFlag == 2 && index3 > 0 && item.moduleType == 1 && idType == 1 && (item.id == '' || (item.id != '' && item.openFlag == 1))"><i class="el-icon-delete" @click="deleteMatterCourse(index,index1,index2,index3)" style="color:red;"></i></span> <span v-if="newfieldDisabled(item) && item2.numFlag == 2 && index3 > 0"><i class="el-icon-delete" @click="deleteMatterCourse(index,index1,index2,index3)" style="color:red;"></i></span>
</el-form-item> </el-form-item>
</el-col> </el-col>
<el-col :span="10" 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 v-model="item3.content2" @focus="courseIDfocus(index,index1,index2,index3)" @change="changeCourseID" :disabled="conditionSelect || item.moduleType == 2 || idType == 2 || (item.id != '' && item.openFlag == 2)" size="small" placeholder="请选择课程ID" style="width:288px;"> <el-select v-model="item3.content2" @focus="courseIDfocus(index,index1,index2,index3)" @change="changeCourseID" :disabled="fieldDisabled(item)" size="small" placeholder="请选择课程ID" style="width:288px;">
<el-option <el-option
v-for="(itemCourse,indexCourse) in courseIdSelect" v-for="(itemCourse,indexCourse) in courseIdSelect"
:key="indexCourse" :key="indexCourse"
...@@ -365,6 +373,7 @@ export default { ...@@ -365,6 +373,7 @@ export default {
componentStatus: '', componentStatus: '',
resultFlag: '', resultFlag: '',
conditionSelect: false, conditionSelect: false,
newconditionSelect: false,
conditionAnd: true, conditionAnd: true,
isStorage: false, isStorage: false,
dialogTitle: '选择模板', dialogTitle: '选择模板',
...@@ -442,6 +451,9 @@ export default { ...@@ -442,6 +451,9 @@ export default {
], ],
"openFlag": [ "openFlag": [
{ required: true, message: '请选择是否对外开放', trigger: 'blur' } { required: true, message: '请选择是否对外开放', trigger: 'blur' }
],
"stauts": [
{ required: true, message: '请选择是否启用', trigger: 'blur' }
] ]
} }
} }
...@@ -460,13 +472,18 @@ export default { ...@@ -460,13 +472,18 @@ export default {
vm.getCertificateList() // 获取证书列表 vm.getCertificateList() // 获取证书列表
vm.componentBasicInfo() // 根据ID查询组件基本信息 vm.componentBasicInfo() // 根据ID查询组件基本信息
vm.conditionSelect = vm.resultFlag == 2 || vm.componentStatus == 3 || vm.componentStatus == 4 vm.conditionSelect = vm.resultFlag == 2 || vm.componentStatus == 3 || vm.componentStatus == 4
// vm.conditionSelect = vm.resultFlag == 2 || vm.componentStatus == 4
vm.newconditionSelect = vm.componentStatus == 4
if(vm.componentStatus && vm.resultFlag) { if(vm.componentStatus && vm.resultFlag) {
vm.conditionAnd = vm.resultFlag == 1 && vm.componentStatus != 3 && vm.componentStatus != 4 //vm.conditionAnd = vm.resultFlag == 1 && vm.componentStatus != 3 && vm.componentStatus != 4
vm.conditionAnd = vm.componentStatus != 4
} }
}, },
// 挂载到Dom完成时 // 挂载到Dom完成时
mounted: function() { mounted: function() {
commonUtil.resizeHeight() commonUtil.resizeHeight()
console.log('idType==>',vm.idType)
}, },
methods: { methods: {
// 根据ID查询组件基本信息 // 根据ID查询组件基本信息
...@@ -635,7 +652,7 @@ export default { ...@@ -635,7 +652,7 @@ export default {
image.onload = function() { image.onload = function() {
let _this = this let _this = this
if(_this.width != 750 || _this.height != 420) { if(_this.width != 750 || _this.height != 420) {
vm.$message.info('图片不符合规范,请根据规范上传图片') vm.$message.info('图片不符合规范,请根据规范上传图片')
}else { }else {
openLoading(vm) openLoading(vm)
doUpload(vm,file, getFilePath(file,null), 'preview4', 'progress1', 1).then(function (path) { doUpload(vm,file, getFilePath(file,null), 'preview4', 'progress1', 1).then(function (path) {
...@@ -718,11 +735,42 @@ export default { ...@@ -718,11 +735,42 @@ export default {
vm.GET('portal/portalComponent/ModuleList',{componentId: vm.componentId}).then((res) => { vm.GET('portal/portalComponent/ModuleList',{componentId: vm.componentId}).then((res) => {
if( res.code == '000000') { if( res.code == '000000') {
vm.componentList.moduleModelList = res.data.moduleModelList vm.componentList.moduleModelList = res.data.moduleModelList
vm.setOpenStatusFromData(vm.componentList.moduleModelList)
}else { }else {
vm.$message.info(res.message) vm.$message.info(res.message)
} }
}) })
}, },
// 从接口数据的status判断启用状态
setOpenStatusFromData(list){
// 1模块未启用 2模块已启用
for(let i=0;i<list.length;i++){
if(list[i].status == 2){
vm.componentList.moduleModelList[i].statusFlag = true;
}else{
vm.componentList.moduleModelList[i].statusFlag = false;
}
}
},
fieldDisabled(item){
// return vm.conditionSelect || item.moduleType == 2 || (item.id != '' && item.openFlag == 2) || vm.idType == 2 || item.statusFlag
return vm.newconditionSelect || item.moduleType == 2 || vm.idType == 2 || (vm.componentStatus != 1 && vm.componentStatus != 2 && item.statusFlag);
},
newfieldDisabled(item) {
//conditionAnd && item.moduleType == 1 && (item.id == '' || (item.id != '' && item.status == 1)) && idType == 1
return vm.conditionAnd && ((vm.componentStatus == 1 || vm.componentStatus == 2) || ((vm.componentStatus != 1 || vm.componentStatus != 2) && !item.statusFlag)) && item.moduleType == 1 && vm.idType == 1
},
// 选择是否启用状态
selectIsOpenStatus(index) {
const status = vm.componentList.moduleModelList[index].status;
if(status == 1){
vm.componentList.moduleModelList[index].openFlag = 1;
vm.componentList.moduleModelList[index].openDisabled = true;
}else{
vm.componentList.moduleModelList[index].openDisabled = false;
}
vm.$forceUpdate();
},
// 模块是否对外开放 // 模块是否对外开放
selectIsOpen(index) { selectIsOpen(index) {
for(let i = 0; i < vm.componentList.moduleModelList.length; i++) { for(let i = 0; i < vm.componentList.moduleModelList.length; i++) {
...@@ -740,6 +788,12 @@ export default { ...@@ -740,6 +788,12 @@ export default {
break break
} }
} }
// const openFlag = vm.componentList.moduleModelList[index].openFlag;
// if(openFlag == 2){
//// vm.componentList.moduleModelList[index].openFlag = 1;
// vm.componentList.moduleModelList[index].statusFlag = true;
// }
// vm.$forceUpdate();
}, },
// 删除tab // 删除tab
removeTab(targetName) { removeTab(targetName) {
...@@ -751,7 +805,7 @@ export default { ...@@ -751,7 +805,7 @@ export default {
cancelButtonText: '取消', cancelButtonText: '取消',
type: 'warning' type: 'warning'
}).then(() => { }).then(() => {
if(vm.componentList.moduleModelList[i].id != '' && vm.componentList.moduleModelList[i].moduleType == 1) { if(vm.componentList.moduleModelList[i].id != '' && vm.componentList.moduleModelList[i].moduleType == 1) {
vm.GET('portal/portalComponent/deletePortalModuleById',{id:vm.componentList.moduleModelList[i].id}).then((res) => { vm.GET('portal/portalComponent/deletePortalModuleById',{id:vm.componentList.moduleModelList[i].id}).then((res) => {
if( res.code == '000000') { if( res.code == '000000') {
vm.$message.info('成功删除模块!') vm.$message.info('成功删除模块!')
...@@ -770,7 +824,7 @@ export default { ...@@ -770,7 +824,7 @@ export default {
}) })
}) })
}else { }else {
if(vm.componentList.moduleModelList[i].id) { if(vm.componentList.moduleModelList[i].id) {
vm.GET('portal/portalComponent/deletePortalModuleById',{id:vm.componentList.moduleModelList[i].id}).then((res) => { vm.GET('portal/portalComponent/deletePortalModuleById',{id:vm.componentList.moduleModelList[i].id}).then((res) => {
if( res.code == '000000') { if( res.code == '000000') {
vm.$message.info('成功删除模块!') vm.$message.info('成功删除模块!')
...@@ -794,8 +848,10 @@ export default { ...@@ -794,8 +848,10 @@ export default {
name: '', name: '',
openFlag: 1, // 1不开放 2开放 openFlag: 1, // 1不开放 2开放
moduleType: 1, // 2为从预设模块中添加 moduleType: 1, // 2为从预设模块中添加
status: 1, // 1 不启用 2启用
templetModelList: [] templetModelList: []
}) });
vm.componentList.moduleModelList[(vm.componentList.moduleModelList.length - 1)].openDisabled = true;
}, },
// 添加模板 // 添加模板
addTemplate(item,index) { addTemplate(item,index) {
...@@ -844,7 +900,7 @@ export default { ...@@ -844,7 +900,7 @@ export default {
content1: '', content1: '',
content2: '' content2: ''
}] }]
}) })
} }
} }
vm.templetIndex ++ vm.templetIndex ++
...@@ -978,11 +1034,10 @@ export default { ...@@ -978,11 +1034,10 @@ export default {
vm.$message.info("请输入模块名称") vm.$message.info("请输入模块名称")
return return
} }
if(isEmptyList(vm.componentList.moduleModelList[i].templetModelList)) { if(isEmptyList(vm.componentList.moduleModelList[i].templetModelList) && vm.componentList.moduleModelList[i].status == 2 ) {
vm.$message.info("模块内容不能为空") vm.$message.info("模块内容不能为空")
return return
} }
for(let j = 0; j < vm.componentList.moduleModelList[i].templetModelList.length; j++) { for(let j = 0; j < vm.componentList.moduleModelList[i].templetModelList.length; j++) {
for(let k = 0; k < vm.componentList.moduleModelList[i].templetModelList[j].partModelList.length; k++) { for(let k = 0; k < vm.componentList.moduleModelList[i].templetModelList[j].partModelList.length; k++) {
// 考试 // 考试
...@@ -997,7 +1052,6 @@ export default { ...@@ -997,7 +1052,6 @@ export default {
return return
} }
} }
} }
} }
} }
...@@ -1026,27 +1080,25 @@ export default { ...@@ -1026,27 +1080,25 @@ export default {
vm.componentList.moduleModelList[i].templetModelList[j].partModelList[k].partContentModelList[0].content3 = vm.certificateIdSelect[q].name vm.componentList.moduleModelList[i].templetModelList[j].partModelList[k].partContentModelList[0].content3 = vm.certificateIdSelect[q].name
} }
} }
} }
} }
} }
} }
} }
} }
} }
vm.$nextTick(() => { vm.$nextTick(() => {
for(let i=0;i<vm.componentList.moduleModelList.length;i++) { for(let i=0;i<vm.componentList.moduleModelList.length;i++) {
if(!vm.componentList.moduleModelList[i].name) { if(!vm.componentList.moduleModelList[i].name) {
return return
}else {
vm.POST('portal/portalComponent/insertOrUpdatePortalModule',{model: vm.componentList.moduleModelList,status: flag}).then((res) => {
if( res.code == '000000') {
vm.enableComponent(req, flag)
}
})
} }
} }
console.log(vm.componentList.moduleModelList)
vm.POST('portal/portalComponent/insertOrUpdatePortalModule',{model: vm.componentList.moduleModelList,status: flag}).then((res) => {
if( res.code == '000000') {
vm.enableComponent(req, flag)
}
})
}) })
}, },
// 启用 // 启用
...@@ -1297,7 +1349,7 @@ export default { ...@@ -1297,7 +1349,7 @@ export default {
color: #999; color: #999;
padding: 0px 0 15px; padding: 0px 0 15px;
} }
} }
.module-form { .module-form {
.el-input__inner { .el-input__inner {
......
<template> <template>
<div class="item-component-wrap"> <div class="item-component-wrap">
<bread-crumb <bread-crumb
:curmbFirst="curmbFirst" :curmbFirst="curmbFirst"
:curmbSecond="curmbSecond"> :curmbSecond="curmbSecond">
</bread-crumb> </bread-crumb>
<div class="component-content screenSet" id="screenSet"> <div class="component-content screenSet" id="screenSet">
...@@ -34,8 +34,8 @@ ...@@ -34,8 +34,8 @@
<el-row :gutter="10" class="row create-button" style="margin-right:0;"> <el-row :gutter="10" class="row create-button" style="margin-right:0;">
<el-button type="primary" size="small" :disabled="idType == 2 && masterAdministratorFlag == 'false'" @click="createComponent">新建项目组件</el-button> <el-button type="primary" size="small" :disabled="idType == 2 && masterAdministratorFlag == 'false'" @click="createComponent">新建项目组件</el-button>
</el-row> </el-row>
<el-table <el-table
:data="tableData" :data="tableData"
style="width: 100%"> 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="name" label="组件名称" min-width="200" align="center"></el-table-column> <el-table-column prop="name" label="组件名称" min-width="200" align="center"></el-table-column>
...@@ -129,10 +129,10 @@ export default { ...@@ -129,10 +129,10 @@ export default {
"introduce": [ "introduce": [
{ required: true, message: '请输入组件简介', trigger: 'blur' }, { required: true, message: '请输入组件简介', trigger: 'blur' },
], ],
} }
} }
}, },
computed: { computed: {
...mapGetters([ ...mapGetters([
...@@ -143,9 +143,9 @@ export default { ...@@ -143,9 +143,9 @@ export default {
}, },
created() { created() {
vm = this vm = this
vm.search()
vm.idType = localStorage.getItem('storageIdType') vm.idType = localStorage.getItem('storageIdType')
vm.masterAdministratorFlag = localStorage.getItem('storageMaster') vm.masterAdministratorFlag = localStorage.getItem('storageMaster')
vm.search()
}, },
// 挂载到Dom完成时 // 挂载到Dom完成时
mounted: function() { mounted: function() {
......
...@@ -65,7 +65,6 @@ ...@@ -65,7 +65,6 @@
title: '数据总览', title: '数据总览',
icon: 'el-icon-menu', icon: 'el-icon-menu',
index: 'home', index: 'home',
},{ },{
title: '教培项目', title: '教培项目',
icon: 'el-icon-message', icon: 'el-icon-message',
...@@ -161,7 +160,6 @@ ...@@ -161,7 +160,6 @@
} }
}, },
methods: { methods: {
setFollowSide(){ setFollowSide(){
const followSider = { const followSider = {
title: '随访管理', title: '随访管理',
...@@ -192,11 +190,9 @@ ...@@ -192,11 +190,9 @@
utils.checkAuthFunc().then(res=>{ utils.checkAuthFunc().then(res=>{
console.log(res) console.log(res)
if(res==3){ if(res==3){
}else{ }else{
return return
} }
let env = process.env.BUILD_ENV; let env = process.env.BUILD_ENV;
let src = ''; let src = '';
if( (env == 'development') || (env == 'dev') ){ // 本地开发环境 || jenkins dev if( (env == 'development') || (env == 'dev') ){ // 本地开发环境 || jenkins dev
...@@ -211,11 +207,8 @@ ...@@ -211,11 +207,8 @@
location.href = src; location.href = src;
// let newTab=window.open('about:blank'); // let newTab=window.open('about:blank');
// newTab.location = src; // newTab.location = src;
}) })
} }
}, },
} }
} }
...@@ -280,5 +273,3 @@ ...@@ -280,5 +273,3 @@
} }
} }
</style> </style>
<template>
<div class="course-analysis-wrap">
<div v-for="(item , index) in cardData" :key="index" class="">
<el-card class="box-card">
<div slot="header" class="title">
<span class="weight">{{ item.title }}</span>
</div>
<div class="box-content">
<span class="weight">{{ item.num }} </span> {{ item.unit }}
</div>
</el-card>
</div>
<el-table
:data="tableData"
class="course-table">
<el-table-column prop="name" label="课程名" align="center">
</el-table-column>
<el-table-column prop="courseTime" label="课程时长" align="center">
</el-table-column>
<el-table-column prop="personTime" label="人均学习时长" align="center">
</el-table-column>
<el-table-column prop="joinNum" label="参与培训人数" align="center">
</el-table-column>
<el-table-column prop="completeNum" label="完成培训人数" align="center">
</el-table-column>
<el-table-column fixed="right" label="操作" min-width="50" align="center">
<template slot-scope="scope">
<el-button
@click="checkName(scope.row)"
type="primary"
size="small"
>查看名单</el-button>
</template>
</el-table-column>
</el-table>
<div class="pagination">
<el-pagination
background
@size-change="handleSizeChange"
@current-change="handleCurrentChange"
:current-page="formInline.pageNo"
:page-sizes="[10, 30, 50, 100]"
:page-size="formInline.pageSize"
layout="total, sizes, prev, pager, next, jumper"
:total="totalRows"
></el-pagination>
</div>
</div>
</template>
<script>
import { create } from "domain";
import { openLoading, closeLoading } from "../../utils/utils";
let vm = null;
export default {
props: {
formInline: {
type: Object
},
activeName: {
type: String
}
},
data() {
return {
cardData: [],
tableData: [],
totalRows: 0,
}
},
created() {
vm = this;
this.getCardData();
this.search();
},
mounted: function() {
this.$on('search',()=>{
console.log(this.formInline);
this.getCardData();
this.search();
})
},
methods: {
getCardData() {
this.cardData = [
{
title: '项目所有课程数',
num: 9,
unit: '门课程',
},{
title: '项目所有课程总时长',
num: 500,
unit: '分钟',
},{
title: '项目人均学习时长',
num: 265,
unit: '分钟',
}
];
},
search() {
this.tableData = [{
id: 1,
name: '科学诊治高血压',
courseTime: '120分钟',
personTime: '90分钟',
joinNum: '9892',
completeNum: '5992',
},{
id: 2,
name: '科学诊心脏病',
courseTime: '120分钟',
personTime: '90分钟',
joinNum: '9892',
completeNum: '5992',
}];
},
checkName(data) {
this.$router.push("course-training");
},
handleSizeChange(val) {
console.log(`每页 ${val} 条`);
this.formInline.pageSize = val;
},
handleCurrentChange(val) {
console.log(`当前页: ${val}`);
this.formInline.pageNo = val;
this.search();
},
},
}
</script>
<style lang="scss">
.course-analysis-wrap {
background: #fff;
padding: 10px;
.weight {
font-weight: bold;
}
.title:after {
clear: both
}
.box-card {
width: 240px;
margin-right: 30px;
float: left;
.box-content {
text-align: center;
height: 40px;
}
}
.course-table {
top: 20px;
}
}
</style>
\ No newline at end of file
<template>
<div class="course-training-wrap">
<bread-crumb :curmbFirst="curmbFirst" :curmbSecond="curmbSecond"></bread-crumb>
<div class="component-content screenSet" id="screenSet">
<p class="course-p">地区:{{ region }}</p>
<p class="course-p">选择机构:{{ organization }}</p>
<div class="course-search">
<el-input placeholder="查询姓名" v-model="formData.name" class="input-with-select">
<el-button class="course-button" type="primary" slot="append" @click="search">查询</el-button>
</el-input>
</div>
<el-table
:data="tableData"
class="course-table">
<el-table-column prop="name" label="姓名" align="center">
</el-table-column>
<el-table-column prop="sex" label="性别" align="center">
</el-table-column>
<el-table-column prop="age" label="年龄" align="center">
</el-table-column>
<el-table-column prop="professional" label="职称" align="center">
</el-table-column>
<el-table-column prop="post" label="职务" align="center">
</el-table-column>
<el-table-column prop="organization" label="机构" align="center">
</el-table-column>
<el-table-column prop="region" label="地区" align="center">
</el-table-column>
<el-table-column prop="join" label="是否参与培训" align="center">
<template slot-scope="scope">
<span>{{ scope.row.join | joinTraining }}</span>
</template>
</el-table-column>
<el-table-column prop="complete" label="是否完成培训" align="center">
<template slot-scope="scope">
<span>{{ scope.row.complete | joinTraining }}</span>
</template>
</el-table-column>
<el-table-column prop="date" label="完成培训日期" align="center">
</el-table-column>
</el-table>
<div class="pagination">
<el-pagination
background
@size-change="handleSizeChange"
@current-change="handleCurrentChange"
:current-page="formData.pageNo"
:page-sizes="[10, 30, 50, 100]"
:page-size="formData.pageSize"
layout="total, sizes, prev, pager, next, jumper"
:total="totalRows"
></el-pagination>
</div>
</div>
</div>
</template>
<script>
import BreadCrumb from "../../components/breadcrumb.vue";
import { create } from "domain";
import { mapGetters } from "vuex";
import { openLoading, closeLoading } from "../../utils/utils";
import * as commonUtil from "../../utils/utils";
let vm = null;
export default {
components: {
BreadCrumb
},
props: {
formInline: {
type: Object
}
},
data() {
return {
curmbFirst: "学情报告",
curmbSecond: "项目管理",
formData: {
name: '',
pageNo: 1,
pageSize: 10,
},
region: '浙江省/杭州市/西湖区',
organization: '杭州市中心医院',
tableData: [],
totalRows: 0,
};
},
// computed: {
// ...mapGetters([
// "_token",
// ])
// },
created() {
vm = this;
// console.log("formInline:", this.formInline);
this.search();
},
mounted: function() {
commonUtil.resizeHeight();
},
methods: {
search() {
console.log(this.formData.name);
this.tableData = [{
name: '张三',
sex: '男',
age: '30',
professional: '主任医师',
post: '医生',
organization: '上海复旦大学附属华山医院',
region: '上海静安区',
join: '1',
complete: '1',
date: '2019-10-11',
}];
},
handleSizeChange(val) {
console.log(`每页 ${val} 条`);
this.formData.pageSize = val;
},
handleCurrentChange(val) {
console.log(`当前页: ${val}`);
this.formData.pageNo = val;
this.search();
},
}
};
</script>
<style lang="scss">
.course-training-wrap {
.component-content {
background: #fff;
padding: 10px;
.header-title {
padding: 10px 12px;
font-size: 12px;
color: #449284;
border-bottom: 1px solid #efefef;
}
.course-p {
margin: 30px 0 20px 30px;
font-size: 13px;
}
.course-search {
margin: 35px auto;
width: 800px;
}
.course-button {
color: #fff;
}
}
}
</style>
\ No newline at end of file
<template>
<div class="crowd-analysis-wrap">
<el-radio-group class="crowd-radio" v-model="radio" size="small" @change="updateRadio">
<el-radio-button label="1">全部用户</el-radio-button>
<el-radio-button label="2">参与项目</el-radio-button>
<el-radio-button label="3">通过项目</el-radio-button>
</el-radio-group>
<div class="chart">
<div class="item" id="education" ref="education"></div>
<div class="item item-right" id="job" ref="job"></div>
<div class="item">
<div class="title">用户性别分布</div>
<div class="sex">
<div class="sex-item" v-for="(item , index) in sexData" :key="index">
<img class="sex-img" v-bind:src="item.src">
<p class="sex-type">{{ item.type }}</p>
<p></p>
<p class="sex-num">{{ item.num }}</p>
</div>
</div>
</div>
<div class="item item-right" id="age" ref="age"></div>
</div>
</div>
</template>
<script>
import BreadCrumb from "../../components/breadcrumb.vue";
import { create } from "domain";
import { mapGetters } from "vuex";
import { openLoading, closeLoading } from "../../utils/utils";
import * as commonUtil from "../../utils/utils";
import * as operationData from "../../utils/operation";
import echarts from "echarts";
import { setTimeout } from "timers";
let vm = null;
export default {
components: {
BreadCrumb
},
props: {
formInline: {
type: Object
},
activeName: {
type: String
}
},
data() {
return {
radio: 1,
updateCrowd: false,
sexData: []
};
},
created() {
vm = this;
this.$nextTick(function() {
this.search();
});
},
mounted: function() {
commonUtil.resizeHeight();
//父组件传值
this.$on("search", () => {
this.updateCrowd = true;
this.search();
});
this.$on("init", () => {
this.$nextTick(function() {
this.search();
});
});
if (this.activeName == "second") {
this.updateResize();
}
},
methods: {
search() {
if (this.activeName == "second") {
this.getEducationData();
this.getJobData();
this.getSexData();
this.getAgeData();
}
},
updateResize() {
this.$nextTick(function() {
let chartEducation = echarts.init(document.getElementById("education"));
let chartJob = echarts.init(document.getElementById("job"));
let chartAge = echarts.init(document.getElementById("age"));
window.onresize = function() {
chartEducation.resize();
chartJob.resize();
chartAge.resize();
};
});
},
updateRadio(value) {
console.log(value);
this.search();
},
//用户学历分布
getEducationData() {
let data = [22, 50, 350, 80, 95];
if (this.updateCrowd == true) {
data = [33, 90, 100, 22, 75];
}
this.educationDivision(data);
},
//用户职务分布
getJobData() {
let data = [27, 70, 65, 50];
this.jobDivision(data);
},
//用户性别分布
getSexData() {
this.sexData = [
{
src: require("../../assets/image/man.png"),
type: "男性",
num: 21715
},
{
src: require("../../assets/image/weman.png"),
type: "女性",
num: 19715
},
{
src: require("../../assets/image/question.png"),
type: "未完善信息",
num: 1715
}
];
},
//用户年龄分布
getAgeData() {
let data = [1000, 25000, 15000, 8000, 7000, 500];
this.ageDivision(data);
},
educationDivision(data) {
let myChart = echarts.init(this.$refs.education);
let legendData = ["博士", "硕士", "本科", "大专", "大专以下"];
let colorData = ["#FF9F7F", "#FFDB5C", "#E062AE", "#37A2DA", "#67E0E3"];
let seriesData = [
{ value: 22, name: "博士" },
{ value: 50, name: "硕士" },
{ value: 350, name: "本科" },
{ value: 80, name: "大专" },
{ value: 95, name: "大专以下" }
];
for (let i = 0; i < data.length; i++) {
seriesData[i].value = data[i];
}
let option = operationData.getPicOption(
"用户学历分布",
legendData,
colorData,
seriesData
);
myChart.setOption(option);
},
jobDivision(data) {
let myChart = echarts.init(this.$refs.job);
let legendData = ["医生", "护士", "医护人员", "其他"];
let colorData = ["#FF9F7F", "#37A2DA", "#67E0E3", "#FFDB5C"];
let seriesData = [
{ value: 270, name: "医生" },
{ value: 70, name: "护士" },
{ value: 65, name: "医护人员" },
{ value: 50, name: "其他" }
];
for (let i = 0; i < data.length; i++) {
seriesData[i].value = data[i];
}
let option = operationData.getPicOption(
"用户职务分布",
legendData,
colorData,
seriesData
);
myChart.setOption(option);
},
ageDivision(data) {
let myChart = echarts.init(this.$refs.age);
let xAxisData = [
"16-30",
"30-40",
"40-50",
"50-60",
"60以上",
"未完善信息"
];
let seriesData = data;
let option = operationData.getBarOption(xAxisData, seriesData);
myChart.setOption(option);
}
}
};
</script>
<style lang="scss">
.crowd-analysis-wrap {
background: #fff;
padding: 10px;
.header-title {
padding: 10px 12px;
font-size: 12px;
color: #449284;
border-bottom: 1px solid #efefef;
}
.crowd-radio {
position: relative;
left: 50%;
margin-left: -119px;
.is-active {
.el-radio-button__inner {
// background: #fff;
// color: #409EFF;
}
}
}
.chart {
position: relative;
margin: 20px auto 0 auto;
width: 100%;
overflow: auto;
.item {
position: relative;
float: left;
margin-top: 20px;
padding: 0;
width: 48%;
// height: 20vw;
height: 350px;
border: 1px solid #dedede;
.title {
position: relative;
margin: 10px auto;
text-align: center;
font-weight: bold;
}
.sex {
position: relative;
top: 0;
left: 0;
.sex-item {
float: left;
height: 350px;
width: 33.3%;
.sex-img {
margin: 0 auto;
position: relative;
left: 10%;
width: 80%;
}
.sex-type {
text-align: center;
}
.sex-num {
margin-top: 40px;
font-size: 30px;
font-weight: bold;
text-align: center;
}
}
}
}
.item-right {
float: right;
}
}
}
</style>
\ No newline at end of file
<template>
<div class="data-alignment">
<div class="alignment-header">
<el-row>
<el-col :span="18">
<div class="title">数据调整</div>
</el-col>
<el-col :span="3">
<el-button class="add-button" size="small" type="primary">保存修改</el-button>
</el-col>
<el-col :span="3">
<el-button class="add-button" size="small" type="primary">取消</el-button>
</el-col>
</el-row>
</div>
<div class="form">
<el-row :gutter="30" class="row" type="flex" style="margin-top: 10px;">
<el-form ref="serchForm" :model="formInline" label-width="100px" style="width:100%;">
<el-col :span="6">
<el-form-item label="参与项目状态:">
<el-select
v-model="formInline.pregStatus"
size="small"
style="width: 100%;"
placeholder="请选择项目状态"
>
<el-option
v-for="(item,index) in preStaSelect"
:key="index"
:label="item.label"
:value="item.value"
></el-option>
</el-select>
</el-form-item>
</el-col>
<el-col :span="6">
<el-form-item label="统计状态:">
<el-select
v-model="formInline.mathStatus"
size="small"
style="width: 100%;"
placeholder="请选择统计状态"
>
<el-option
v-for="(item,index) in mathStaSelect"
:key="index"
:label="item.label"
:value="item.value"
></el-option>
</el-select>
</el-form-item>
</el-col>
</el-form>
</el-row>
</div>
<div class="data-main">
<el-row class="select" type="flex" justify="end">
<el-col :span="3">
<div class="title">已选中{{multipleSelection.length}}条数据</div>
</el-col>
<el-col :span="3">
<el-button class="add-button" size="small" @click="includeMath">全部归入统计</el-button>
</el-col>
<el-col :span="3">
<el-button class="add-button" size="small" @click="removeMath">全部移出统计</el-button>
</el-col>
</el-row>
<el-table
border
center
ref="multipleTable"
:data="mathDate"
tooltip-effect="dark"
style="width: 100%"
@selection-change="handleSelectionChange"
>
<el-table-column type="selection" width="55"></el-table-column>
<el-table-column prop="name" label="姓名" min-width="80"></el-table-column>
<el-table-column prop="joinStatus" label="项目参与状态" width="120"></el-table-column>
<el-table-column prop="progress" label="所属机构" min-width="120" show-overflow-tooltip></el-table-column>
<el-table-column prop="desk" label="科室" show-overflow-tooltip></el-table-column>
<el-table-column prop="rank" label="级别" show-overflow-tooltip></el-table-column>
<el-table-column prop="province" label="省/直辖市" show-overflow-tooltip></el-table-column>
<el-table-column prop="city" label="市" show-overflow-tooltip></el-table-column>
<el-table-column prop="district" label="区/县" show-overflow-tooltip></el-table-column>
<el-table-column prop="address" label="乡镇/街道" show-overflow-tooltip></el-table-column>
<el-table-column fixed="right" label="操作" min-width="180">
<template slot-scope="scope">
<el-radio v-model="scope.row.radio" label="1" @change="handleClick(scope.row)">归入统计</el-radio>
<el-radio v-model="scope.row.radio" label="2" @change="handleClick(scope.row)">移除统计</el-radio>
</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>
<!-- 分页 -->
<div class="pagination">
<el-pagination
background
@size-change="handleSizeChange"
@current-change="handleCurrentChange"
:current-page="pageNo"
:page-sizes="[15, 30, 50, 100, 200, 500, 700, 1000, 1500, 2000]"
:page-size="pageSize"
layout="total, sizes, prev, pager, next, jumper"
:total="totalRows"
></el-pagination>
</div>
</div>
</template>
<script>
let vm
export default {
data() {
return {
formInline: {
pregStatus: "",
mathStatus: ""
},
preStaSelect: [
//项目状态
{
label: "未参与项目",
value: "1"
},
{
label: "参与项目",
value: "2"
},
{
label: "完成项目",
value: "3"
}
],
mathStaSelect: [
//项目状态
{
label: "归入统计",
value: "1"
},
{
label: "移除统计",
value: "2"
}
],
mathDate: [
{
name: "张医生",
joinStatus: "完成项目",
progress: "谈西社区卫生服务站",
desk: "全科",
rank: "一甲",
province: "河北省",
city: "石家庄市",
district: "长安区",
address: "建北街道",
radio: '1'
}
],
multipleSelection: [], //被选中的行
totalRows: 0, //数据总数
pageNo: 1, //当前是第几页
pageSize: 20 //页面总数
};
},
created() {
vm = this
},
methods: {
// 将选中行放入数组
handleSelectionChange(val) {
this.multipleSelection = val
console.log(this.multipleSelection)
},
handleClick(row) {
console.log(row);
},
// 更改数据显示数量
handleSizeChange(val) {
console.log(`每页 ${val} 条`);
},
// 换页
handleCurrentChange(val) {
console.log(`当前页: ${val}`);
},
// 全部统计
includeMath() {
if (!this.multipleSelection) {
return;
}
this.multipleSelection.forEach(el => {
el.radio = '1'
})
},
// 全部不统计
removeMath() {
if (!this.multipleSelection) {
return;
}
this.multipleSelection.forEach(el => {
el.radio = '2'
})
}
}
};
</script>
<style lang='scss' rel='stylesheet/scss'>
.data-alignment {
background: #fff;
.alignment-header {
padding: 20px;
margin: 0 30px;
border-bottom: 1px solid #000;
}
.form {
padding: 30px;
}
.data-main {
padding: 0 40px;
.select {
margin-bottom: 30px;
}
}
}
</style>
<template>
<div class="examination-analysis">
<div class="box">
<el-card class="box-card" v-for="(item , index) in cardData" :key="index">
<div slot="header" class="title">
<span class="weight">{{ item.title }}</span>
</div>
<div class="box-content">
<span class="weight">{{ item.num }}</span>
{{ item.unit }}
</div>
</el-card>
</div>
<div class="table">
<el-table :data="tableData" style="width: 100%" border>
<el-table-column prop="name" label="考试名" min-width="200" align="center"></el-table-column>
<el-table-column prop="joinNum" label="参与考试人数" min-width="100" align="center"></el-table-column>
<el-table-column prop="passNum" label="通过考试人数" min-width="80" align="center"></el-table-column>
<el-table-column prop="goodNum" label="成绩优秀人数" min-width="80" align="center"></el-table-column>
<el-table-column prop="startNum" label="成绩合格人数" min-width="80" align="center"></el-table-column>
<el-table-column label="操作" fixed="right" align="center" min-width="200">
<template slot-scope="scope">
<el-button type="text" size="small" @click="go(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>
<!-- 分页 -->
<div class="pagination">
<el-pagination
background
@size-change="handleSizeChange"
@current-change="handleCurrentChange"
:current-page="searchParam.pageNo"
:page-sizes="[15, 30, 50, 100, 200, 500, 700, 1000, 1500, 2000]"
:page-size="searchParam.pageSize"
layout="total, sizes, prev, pager, next, jumper"
:total="totalRows"
></el-pagination>
</div>
</div>
</template>
<script>
import { log } from 'util';
import { openLoading, closeLoading } from "../../utils/utils";
import * as commonUtil from "../../utils/utils";
let vm
export default {
data() {
return {
tableData: [
{
name: "asd",
joinNum: 123123,
passNum: 123,
goodNum: 12,
startNum: 111
}
],
cardData: [
{
title: "项目所有考试数",
num: 9,
unit: "门考试"
},
{
title: "项目所有考题数",
num: 120,
unit: "道题"
}
],
totalRows: 0, //数据总数
searchParam: {
pageNo: 1, //当前是第几页
pageSize: 20, //页面总数
}
};
},
created() {
vm = this
},
// 挂载到Dom完成时
mounted: function() {
commonUtil.resizeHeight();
},
methods: {
// 搜索列表
search(flag) {
if(flag) vm.searchParam.pageNo = 1
openLoading(vm);
let params = {};
vm.GET(url, params).then(res => {
closeLoading(vm);
if (res.code == "000000") {
} else {
vm.$message.info(res.message);
}
});
},
// 跳转查看名单页面
go(row) {
vm.$router.push('/name-list')
},
// 更改数据显示数量
handleSizeChange(val) {
console.log(`每页 ${val} 条`)
vm.searchParam.pageSize = val
vm.search()
},
// 换页
handleCurrentChange(val) {
console.log(`当前页: ${val}`)
vm.searchParam.pageNo = value
vm.search()
}
}
};
</script>
<style lang='scss' rel='stylesheet/scss'>
.examination-analysis {
background: #fff;
.box {
overflow: hidden;
}
.table {
margin-top: 30px;
}
}
</style>
<template>
<div class="course-analysis-wrap">
<bread-crumb :curmbFirst="curmbFirst" :curmbSecond="curmbSecond"></bread-crumb>
<div class="component-content screenSet" id="screenSet">
<el-row :gutter="30" class="row" type="flex" style="margin-top: 10px;">
<el-form ref="formInline" :model="formInline" label-width="75px" style="width:100%;">
<el-col :span="5">
<el-form-item label="选择地区:">
<el-cascader
:options="optionsRegion"
v-model="formInline.region"
@change="handleChange"
></el-cascader>
</el-form-item>
</el-col>
<el-col :span="6">
<el-form-item label="选择日期:">
<el-date-picker
v-model="formInline.date"
size="small"
type="daterange"
placeholder="请选择开始时间"
range-separator="~"
value-format="yyyy-MM-dd 00:00:00"
></el-date-picker>
</el-form-item>
</el-col>
<el-col :span="8" style="padding:0;text-align:right;padding-right:15px;">
<el-button type="default" size="small" @click="reset">重置</el-button>
<el-button type="primary" size="small" @click="search" style="margin-left:0;">查询</el-button>
</el-col>
</el-form>
</el-row>
<el-row>
<el-col :span="5">
<el-form ref="formInline" :model="formInline" label-width="75px" style="width:100%;">
<el-form-item label="选择机构:">
<el-select
size="small"
v-model="formInline.organization"
placeholder="请选择发布状态"
@change="changeOrganization"
>
<el-option
v-for="item in organizationList"
:key="item.value"
:label="item.label"
:value="item.value"
></el-option>
</el-select>
</el-form-item>
</el-form>
</el-col>
</el-row>
<div class="choose">{{ chooseOrganization }}</div>
<div class="button-group">
<el-button type="default" size="small" @click="exportExcel">导出Excel</el-button>
<el-button type="default" size="small" @click="changeDate" v-if="activeName=='first'">数据调整</el-button>
<el-button type="default" size="small" @click="update" v-else>修改范围</el-button>
<el-button type="primary" size="small" @click="release">发布报告</el-button>
</div>
<el-tabs v-model="activeName" @tab-click="handleClick">
<el-tab-pane label="参与情况" name="first">
<part-in></part-in>
</el-tab-pane>
<el-tab-pane label="人群分析" name="second">
<crowd-analysis ref="childCrowd" :formInline="formInline" :activeName="activeName">
</crowd-analysis>
</el-tab-pane>
<el-tab-pane label="课程分析" name="third">
<course-analysis ref="childCourse" :formInline="formInline" :activeName="activeName">
</course-analysis>
</el-tab-pane>
<el-tab-pane label="考试分析" name="fourth">
<examination-analysisfrom></examination-analysisfrom>
</el-tab-pane>
<el-tab-pane label="学习效果分析" name="fifth" lazy>
<learning-effect></learning-effect>
</el-tab-pane>
</el-tabs>
</div>
</div>
</template>
<script>
import BreadCrumb from "../../components/breadcrumb.vue";
import CourseAnalysis from "./course-analysis.vue";
import CrowdAnalysis from "./crowd-analysis.vue";
import PartIn from './part-in.vue';
import ExaminationAnalysisfrom from './examination-analysis.vue';
import LearningEffect from './learning-effect.vue';
import { create } from "domain";
import { mapGetters } from "vuex";
import { openLoading, closeLoading } from "../../utils/utils";
import * as commonUtil from "../../utils/utils";
import * as operationData from "../../utils/operation";
import { log } from 'util';
let vm = null;
export default {
components: {
BreadCrumb,
CourseAnalysis,
CrowdAnalysis,
PartIn,
ExaminationAnalysisfrom,
LearningEffect
},
data() {
return {
curmbFirst: "学情报告",
curmbSecond: "项目列表",
organizationList: [
{
label: "西湖区第二人民医院",
value: "1"
},
{
label: "杭州市中医院",
value: "2"
}
],
chooseOrganization: "",
optionsRegion: [],
formInline: {
region: [],
date: "",
organization: "",
pageNo: 1,
pageSize: 10
},
activeName: "first"
};
},
computed: {
...mapGetters([
"_token"
// "idType",
// "masterAdministratorFlag"
])
},
created() {
vm = this;
this.getRegionOption();
},
mounted: function() {
commonUtil.resizeHeight();
},
methods: {
handleClick(tab, event) {
//console.log(tab, event);
console.log('activeName',this.activeName);
if(tab.name == "second") {
this.$refs.childCrowd.$emit("init");
}
},
handleChange(value) {
console.log(value);
},
changeOrganization(value) {
for (let i = 0; i < this.organizationList.length; i++) {
if (value == this.organizationList[i].value) {
this.chooseOrganization = this.organizationList[i].label;
}
}
},
getRegionOption() {
this.optionsRegion = operationData.getRegionOption();
},
search() {
//console.log(this.formInline,this.activeName);
if (this.activeName == "first") {
} else if (this.activeName == "second") {
this.$refs.childCrowd.$emit("search");
} else if (this.activeName == "third") {
this.$refs.childCourse.$emit("search");
} else if (this.activeName == "fourth") {
} else if (this.activeName == "fifth") {
}
},
reset() {},
exportExcel() {
console.log('excel');
},
update() {},
release() {},
changeDate() {
this.$router.push('/data-alignment')
}
}
};
</script>
<style lang="scss">
.course-analysis-wrap {
.component-content {
background: #fff;
padding: 10px;
.header-title {
padding: 10px 12px;
font-size: 12px;
color: #449284;
border-bottom: 1px solid #efefef;
}
.button-group {
// position: absolute;
// right: 100px;
float: right;
margin-right: 20px;
}
.choose {
font-size: 12px;
margin-bottom: 20px;
}
.el-tabs__item.is-active {
color: #409eff;
}
.el-tabs__header {
width: 81%;
}
}
}
</style>
\ No newline at end of file
<template>
<div class="learning-effect">
<div class="learning" ref="learning"></div>
<div class="education" ref="education"></div>
</div>
</template>
<script>
import { openLoading, closeLoading } from "../../utils/utils";
import * as commonUtil from "../../utils/utils";
const echarts = require("echarts");
export default {
data() {
return {};
},
mounted() {
commonUtil.resizeHeight();
this.initEcharts();
},
methods: {
// 初始化图表
initEcharts() {
openLoading(this);
let trainChart = echarts.init(this.$refs["learning"]);
let educationChart = echarts.init(this.$refs["education"]);
let trainPara = {
color: ["#FF9999", "#66CCFF"],
text: '培训前后知识点掌握情况变化',
xAxisData: [
"转诊与随访",
"转诊与随访",
"周三",
"治疗原则及降压目标",
"周五",
"治疗原则及降压目标",
"周日"
],
seriesBeforeDate: [20, 32, 31, 34, 39, 33, 32],
seriesAfterDate: [86, 10, 96, 10, 16, 16, 15]
}
let educationPara = {
color: ["#33FFFF", "#FF9999"],
text: '不同学历培训前后正确率对比',
xAxisData: [
"转诊与随访",
"转诊与随访",
"周三",
"治疗原则及降压目标",
"周五",
"治疗原则及降压目标",
"周日"
],
seriesBeforeDate: [20, 32, 31, 34, 39, 33, 32],
seriesAfterDate: [86, 10, 96, 10, 16, 16, 15]
};
// 显示图表。
trainChart.setOption(this.echartOptions(trainPara));
educationChart.setOption(this.echartOptions(educationPara));
closeLoading(this)
},
// 图表的参数
echartOptions(parameter) {
let option = {
color: parameter.color,
title: {
text: parameter.text,
x: "center",
textStyle: {
//主标题文本样式
fontSize: 16,
fontWeight: "bolder",
color: "#333"
}
},
tooltip: {
trigger: "axis",
axisPointer: {
type: "shadow"
}
},
legend: {
data: ["培训前正确率", "培训后正确率"],
right: 0,
top: 20
},
grid: {
left: "3%",
right: "4%",
bottom: "3%",
containLabel: true
},
xAxis: [
{
type: "category",
data: parameter.xAxisData,
axisLabel: {
//坐标轴刻度标签的相关设置。
interval: 0,
rotate: "45"
}
}
],
yAxis: [
{
name: "比率(%)",
type: "value",
axisLabel: {
show: true,
interval: "auto",
formatter: "{value} %"
},
show: true,
axisLine: {
// 轴线
show: false
}
}
],
series: [
{
name: "培训前正确率",
type: "bar",
barGap: "20%",
barMaxWidth: "50",
itemStyle: {
normal: {
label: {
show: true,
position: "top",
formatter: "{c}%"
}
}
},
data: parameter.seriesBeforeDate
},
{
name: "培训后正确率",
type: "bar",
barGap: "20%",
barMaxWidth: "50",
itemStyle: {
normal: {
label: {
show: true,
position: "top",
formatter: "{c}%" //这是关键,在需要的地方加上就行了
}
}
},
data: parameter.seriesAfterDate
}
]
};
return option;
}
}
};
</script>
<style lang='scss' rel='stylesheet/scss'>
.learning-effect {
width: 100%;
.learning,
.education {
margin-top: 40px;
min-width: 400px;
height: 400px;
background: #fff;
}
}
</style>
<template>
<div class="name-list">
<el-card class="where">
<p>地区: {{params.address}}</p>
<p>选择机构: {{params.pregress}}</p>
<el-row :gutter="20" class="input-box">
<el-col :span="12" :offset="6">
<el-input placeholder="查询姓名" v-model="name" class="input-search">
<el-button slot="append" class="search-btn" type="primary">查询</el-button>
</el-input>
</el-col>
</el-row>
</el-card>
<el-card>
<el-table :data="joinData" style="width: 100%">
<el-table-column prop="name" label="姓名" min-width="80" align="center"></el-table-column>
<el-table-column prop="sex" label="性别" min-width="100" align="center"></el-table-column>
<el-table-column prop="age" label="年龄" min-width="80" align="center"></el-table-column>
<el-table-column prop="title" label="职称" min-width="80" align="center"></el-table-column>
<el-table-column prop="duty" label="职务" min-width="80" align="center"></el-table-column>
<el-table-column prop="pregress" label="机构" min-width="200" align="center"></el-table-column>
<el-table-column prop="region" label="地区" min-width="80" align="center"></el-table-column>
<el-table-column prop="join" label="是否参与考试" min-width="80" align="center"></el-table-column>
<el-table-column prop="pass" label="是否通过考试" min-width="80" align="center"></el-table-column>
<el-table-column prop="paddTime" label="通过考试日期" min-width="80" align="center"></el-table-column>
<el-table-column prop="level" label="考试成绩等级" min-width="80" align="center"></el-table-column>
<div slot="empty">
<div class="table-empty">
<img src="../../assets/image/no-content1.png">
<p>没有查询到相关结果</p>
</div>
</div>
</el-table>
</el-card>
<!-- 分页 -->
<div class="pagination">
<el-pagination
background
@size-change="handleSizeChange"
@current-change="handleCurrentChange"
:current-page="searchParam.pageNo"
:page-sizes="[15, 30, 50, 100, 200, 500, 700, 1000, 1500, 2000]"
:page-size="searchParam.pageSize"
layout="total, sizes, prev, pager, next, jumper"
:total="totalRows"
></el-pagination>
</div>
</div>
</template>
<script>
export default {
data() {
return {
params: {
address: "浙江省/杭州市/西湖区",
pregress: "杭州市中医院、杭州市第七人民医院"
},
name: "",
joinData: [{
name: 'asd',
sex: '男',
age: 30,
title: '主任医师',
duty: '医生',
pregress: '上海市复旦大学附属华山医院',
region: '上海市徐汇区',
join: '是',
pass: '是',
paddTime: '2019-10-10',
level: '合格'
}],
totalRows: 0, //数据总数
searchParam: {
pageNo: 1, //当前是第几页
pageSize: 20 //页面总数
}
};
},
methods: {
// 搜索列表
search(flag) {
if(flag) vm.searchParam.pageNo = 1
openLoading(vm);
let params = {};
vm.GET(url, params).then(res => {
closeLoading(vm);
if (res.code == "000000") {
} else {
vm.$message.info(res.message);
}
});
},
// 重置搜索信息
resetMessage() {
this.selectProgress = {
status: "",
name: ""
};
vm.search();
},
// 更改数据显示数量
handleSizeChange(val) {
console.log(`每页 ${val} 条`);
vm.searchParam.pageSize = val
vm.search()
},
// 换页
handleCurrentChange(val) {
console.log(`当前页: ${val}`)
vm.searchParam.pageNo = value
vm.search()
},
}
};
</script>
<style lang='scss' rel='stylesheet/scss'>
.name-list {
.where {
p {
line-height: 40px;
}
.input-box {
margin-top: 40px;
.search-btn {
color: #fff;
border: none;
}
}
}
}
</style>
<template>
<div class="part-in">
<el-card>
<el-table :data="reportDetail" style="width: 100%">
<el-table-column prop="coverOrganizationNum" label="项目覆盖机构数" align="center"></el-table-column>
<el-table-column prop="coverPeopleNum" label="项目覆盖人数" align="center"></el-table-column>
<el-table-column prop="joinPeopleNum" label="项目参与人数" align="center"></el-table-column>
<el-table-column prop="finishPeopleNum" label="项目完成人数" align="center"></el-table-column>
<el-table-column prop="goodPeopleNum" label="成绩优秀人数" align="center"></el-table-column>
<el-table-column prop="standardPeopleNum" label="成绩合格人数" align="center"></el-table-column>
<div slot="empty">
<div class="table-empty">
<img src="../../assets/image/no-content1.png">
<p>没有查询到相关结果</p>
</div>
</div>
</el-table>
</el-card>
<div class="charts" ref="chartsBox" v-show="isShowEcharts"></div>
<el-card class="finish-table" v-show="!isShowEcharts">
<el-table :data="finishDetail" style="width: 100%" border>
<el-table-column prop="name" label="姓名" align="center"></el-table-column>
<el-table-column prop="desk" label="科室" align="center"></el-table-column>
<el-table-column prop="join" label="是否参与项目" align="center"></el-table-column>
<el-table-column prop="finish" label="是否完成项目" align="center"></el-table-column>
<el-table-column prop="endTime" label="完成项目日期" align="center"></el-table-column>
</el-table>
</el-card>
</div>
</template>
<script>
import { openLoading, closeLoading } from "../../utils/utils"
const echarts = require("echarts")
let vm;
export default {
data() {
return {
reportDetail: [
{
// 报告详情数据
coverOrganizationNum:2,
coverPeopleNum: 0,
joinPeopleNum: 0,
finishPeopleNum: 0,
goodPeopleNum: 0,
standardPeopleNum: 0
}
],
// 图表数据
chartOption: {
xAxisData: ["周一", "周二", "周三", "周一", "周二", "周三"],
seriesPass: [120, 132, 101, 120, 132, 101],
seriesJoin: [220, 182, 191, 220, 182, 191]
},
// 只有一个机构时显示人员完成情况
finishDetail:[{
name: '',
desk: '',
join: '是',
finish: '是',
endTime: '12-12-12'
}],
};
},
computed: {
isShowEcharts() {
return vm.reportDetail[0].coverOrganizationNum > 1
}
},
created() {
vm = this;
},
mounted() {
vm.initEcharts();
},
methods: {
// 初始化图表
initEcharts() {
openLoading(vm);
let myChart = echarts.init(vm.$refs["chartsBox"])
myChart.setOption(vm.initEchartOption(vm.chartOption))
closeLoading(vm)
},
// 图表参数
initEchartOption(params) {
// 图表相关的数据
let option = {
color: ['#1E90FF','#32CD32'],
title: {
text: "排行榜",
x: "left",
textStyle: {
//主标题文本样式{"fontSize": 18,"fontWeight": "bolder","color": "#333"}
fontSize: 20,
fontStyle: "normal",
fontWeight: "normal",
color: "#000"
}
},
tooltip: {
trigger: "axis",
axisPointer: {
// 坐标轴指示器,坐标轴触发有效
type: "shadow" // 默认为直线,可选为:'line' | 'shadow'
}
},
legend: {
data: ["完成人数", "参与人数"],
bottom: 0
},
grid: {
left: "3%",
right: "4%",
bottom: "10%",
containLabel: true
},
xAxis: [
{
type: "category",
data: params.xAxisData
}
],
yAxis: [
{
type: "value"
}
],
series: [
{
name: "完成人数",
type: "bar",
stack: "人数",
barMaxWidth: "80",
data: params.seriesPass
},
{
name: "参与人数",
type: "bar",
stack: "人数",
barMaxWidth: "80",
data: params.seriesJoin
}
]
}
return option
}
}
};
</script>
<style lang='scss' rel='stylesheet/scss'>
.part-in {
.charts {
border-radius: 4px;
border: 1px solid #ebeef5;
background-color: #fff;
overflow: hidden;
color: #303133;
-webkit-transition: 0.3s;
transition: 0.3s;
box-shadow: 0 2px 12px 0 rgba(0, 0, 0, 0.1);
height: 600px;
background: #fff;
margin-top: 50px;
padding: 20px;
}
.finish-table {
margin-top: 30px;
background: #fff;
}
}
</style>
<template>
<div class="item-list">
<bread-crumb :curmbFirst="curmbFirst" :curmbSecond="curmbSecond"></bread-crumb>
<div class="itemlist-content screenSet" id="screenSet">
<el-row :gutter="30" class="row" type="flex" style="margin-top: 10px;">
<el-form ref="serchForm" :model="selectProgress" label-width="75px" style="width:100%;">
<el-col :span="6">
<el-form-item label="项目状态:">
<el-select
v-model="selectProgress.status"
size="small"
style="width: 100%;"
placeholder="请选择项目状态"
>
<el-option
v-for="(item,index) in statusSelect"
:key="index"
:label="item.label"
:value="item.value"
></el-option>
</el-select>
</el-form-item>
</el-col>
<el-col :span="6">
<el-form-item>
<el-input v-model="selectProgress.name" size="small" placeholder="请输入项目名称"></el-input>
</el-form-item>
</el-col>
<el-col :span="12" style="padding:0;text-align:right;padding-right:15px;">
<el-button type="default" size="small" @click="resetMessage" style="margin-left:0;">重置</el-button>
<el-button type="primary" size="small" @click="search(1)">查询</el-button>
</el-col>
</el-form>
</el-row>
<el-table :data="tableData" style="width: 100%">
<el-table-column prop="name" label="项目名称" min-width="200" align="center"></el-table-column>
<el-table-column prop="status" label="项目状态" min-width="100" align="center"></el-table-column>
<el-table-column prop="startTime" label="开始时间" min-width="80" align="center"></el-table-column>
<el-table-column prop="endTime" label="结束时间" min-width="80" align="center"></el-table-column>
<el-table-column label="操作" fixed="right" align="center" min-width="200">
<template slot-scope="scope">
<el-button type="text" size="small" @click="go(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>
<!-- 分页 -->
<div class="pagination">
<el-pagination
background
@size-change="handleSizeChange"
@current-change="handleCurrentChange"
:current-page="searchParam.pageNo"
:page-sizes="[15, 30, 50, 100, 200, 500, 700, 1000, 1500, 2000]"
:page-size="searchParam.pageSize"
layout="total, sizes, prev, pager, next, jumper"
:total="totalRows"
></el-pagination>
</div>
</div>
</template>
<script>
import { mapGetters } from "vuex";
import { openLoading, closeLoading } from "../../utils/utils";
import * as commonUtil from "../../utils/utils";
import BreadCrumb from "../../components/breadcrumb.vue";
let vm = null;
export default {
data() {
return {
curmbFirst: "学情报告",
curmbSecond: "项目列表",
selectProgress: {
//搜索信息
status: "",
name: ""
},
statusSelect: [
//项目状态
{
label: "进行中",
value: "1"
},
{
label: "已结束",
value: "2"
}
],
tableData: [
// table数据
{
name: "one",
status: "进行中",
startTime: "12-12-12",
endTime: "23-23-23"
}
],
totalRows: 0, //数据总数
searchParam: {
pageNo: 1, //当前是第几页
pageSize: 20 //页面总数
}
};
},
components: {
BreadCrumb
},
created() {
vm = this;
},
// 挂载到Dom完成时
mounted: function() {
commonUtil.resizeHeight();
},
methods: {
// 搜索列表
search(flag) {
if(flag) vm.searchParam.pageNo = 1
openLoading(vm)
let params = {}
vm.GET(url, params).then(res => {
closeLoading(vm);
if (res.code == "000000") {
} else {
vm.$message.info(res.message)
}
})
},
// 重置搜索信息
resetMessage() {
this.selectProgress = {
status: "",
name: ""
};
vm.search()
},
// 更改数据显示数量
handleSizeChange(val) {
console.log(`每页 ${val} 条`)
vm.searchParam.pageSize = val
vm.search()
},
// 换页
handleCurrentChange(val) {
console.log(`当前页: ${val}`)
vm.searchParam.pageNo = value
vm.search()
},
//跳转到报告详情页
go(row) {
vm.$router.push({path:"/item-list",params: row})
}
}
};
</script>
<style lang="scss">
.item-list {
.itemlist-content {
padding: 10px;
background: #fff;
}
}
</style>
\ No newline at end of file
...@@ -127,7 +127,7 @@ ...@@ -127,7 +127,7 @@
'changeToken', 'changeToken',
]), ]),
checkPhone(val) { checkPhone(val) {
if(!(/^1[345678]\d{9}$/.test(val))) { if(!(/^1[3456789]\d{9}$/.test(val))) {
return false; return false;
} else { } else {
return true; return true;
......
Markdown 格式
0% or
您添加了 0 到此讨论。请谨慎行事。
先完成此消息的编辑!
想要评论请 注册