Commit 314ff401 authored by 罗超's avatar 罗超

Merge branch 'master' of http://gitlab.oytour.com/luochao/confucius

# Conflicts:
#	src/App.vue
parents 2f92d143 dc6f1ec0
import request from '../../utils/request'
/**
* 获取OKR周期配置信息
* @param {JSON参数} data
*/
export function GetOKRPeriodConfigInfo(data) {
return request({
url: '/OKRPeriod/GetOKRPeriodConfigInfo',
method: 'post',
data
})
}
/**
* 保存OKR周期配置
* @param {JSON参数} data
*/
export function SetOKRPeriodConfigInfo(data) {
return request({
url: '/OKRPeriod/SetOKRPeriodConfigInfo',
method: 'post',
data
})
}
/**
* 获取规则分页列表
* @param {JSON参数} data
*/
export function GetOKRRulePageList(data) {
return request({
url: '/OKRPeriod/GetOKRRulePageList',
method: 'post',
data
})
}
/**
* 启用禁用删除规则状态
* @param {JSON参数} data
*/
export function SetOKRRuleState(data) {
return request({
url: '/OKRPeriod/SetOKRRuleState',
method: 'post',
data
})
}
/**
* 设置规则信息
* @param {JSON参数} data
*/
export function SetOKRRuleInfo(data) {
return request({
url: '/OKRPeriod/SetOKRRuleInfo',
method: 'post',
data
})
}
/**
* 获取规则枚举
* @param {JSON参数} data
*/
export function GetRuleTypeEnumList(data) {
return request({
url: '/OKRPeriod/GetRuleTypeEnumList',
method: 'post',
data
})
}
/**
* 获取OKR提醒列表
* @param {JSON参数} data
*/
export function GetOKRRemindList(data) {
return request({
url: '/OKRPeriod/GetOKRRemindList',
method: 'post',
data
})
}
/**
* 修改okr提醒启用
* @param {JSON参数} data
*/
export function SetOKRRemindEnable(data) {
return request({
url: '/OKRPeriod/SetOKRRemindEnable',
method: 'post',
data
})
}
/**
* 设置okr提醒
* @param {JSON参数} data
*/
export function SetOKRRemindInfo(data) {
return request({
url: '/OKRPeriod/SetOKRRemindInfo',
method: 'post',
data
})
}
/**
* 获取okr分数规则列表
* @param {JSON参数} data
*/
export function GetOKRScoreConfigPageList(data) {
return request({
url: '/OKRPeriod/GetOKRScoreConfigPageList',
method: 'post',
data
})
}
/**
* 设置分数规则
* @param {JSON参数} data
*/
export function SetOKRScoreConfigInfo(data) {
return request({
url: '/OKRPeriod/SetOKRScoreConfigInfo',
method: 'post',
data
})
}
/**
* 设置分数规则状态
* @param {JSON参数} data
*/
export function SetOKRScoreConfigState(data) {
return request({
url: '/OKRPeriod/SetOKRScoreConfigState',
method: 'post',
data
})
}
......@@ -228,3 +228,16 @@ export function RemoveQuestionBank(data) {
data
})
}
/**
* 批量设置问题考级程度
* @param {*} data
*/
export function saveBatchQuestionLevel(data) {
return request({
url: '/Question/SetBatchQuestionLevel',
method: 'post',
data
})
}
<style>
.el-dialog__wrapper{
.app-attachment .el-dialog__wrapper{
z-index:99999!important;
}
.cloud_Table{
......@@ -140,13 +140,14 @@
dialogVisible: false,
title: "",
activeName: "first",
fileDataList: [{
IsCheck: false,
FileName: "测试文件",
FileUrl: "http://192.168.1.214:8130/EduSystem/Test/Upload/assistIcon/20201228032704905.jpg",
FileSize: "100",
CreateTimeStr: "2021-01-04"
}],
fileDataList:[],
// fileDataList: [{
// IsCheck: false,
// FileName: "测试文件",
// FileUrl: "http://192.168.1.214:8130/EduSystem/Test/Upload/assistIcon/20201228032704905.jpg",
// FileSize: "100",
// CreateTimeStr: "2021-01-04"
// }],
chooseFileArray: []
};
},
......
......@@ -240,12 +240,6 @@
<q-select filled stack-label option-value="TId" option-label="TeacherName"
v-model="addMsg.TeacherId" ref="Teacher_Id" :options="TeacherList" label="关联教师"
:dense="false" class="col-6 q-pb-lg" emit-value map-options />
<!-- <div class="calenderClassDate">
<div>上课时间:{{item.ClassDateStr}}</div>
<div>
<i class="iconfont icon-zhuanhuan1"></i><span style="color:#2961fe;cursor:pointer;" @click="isShowCanlder=true;">变更时间</span>
</div>
</div> -->
<q-input filled v-model="addMsg.ClassDate" class="col-6 q-pb-lg" mask="date" label="上课时间">
<template v-slot:append>
<q-icon name="event" class="cursor-pointer">
......@@ -400,12 +394,12 @@
TeacherList: [], //老师下拉数据
addMsg: {
ClassPlanId: 0,
ClassId: 1,
ClassId: 0,
ClassDate: "",
ClassDateStr: "",
ClassRoomId: 1,
ClassRoomId: 0,
RoomName: "",
TeacherId: 1,
TeacherId: 0,
TeacherName: "",
UserIcon: "",
PlanTimeList: [{
......@@ -434,7 +428,10 @@
}
},
created() {
if(this.setingObj&&this.setingObj.ClassId)
{
this.addMsg.ClassId=this.setingObj.ClassId;
}
},
mounted() {
this.initData();
......
......@@ -50,7 +50,7 @@
//初始化表单
initObj() {
GetClassLessPlanList({}).then(res => {
console.log(res, '数据来了');
if (res.Code == 1) {
this.tableData = res.Data;
this.tableData.forEach(x => {
......@@ -60,7 +60,6 @@
})
},
singleElection(row) {
console.log(row, 'row');
this.templateSelection = this.tableData.indexOf(row);
this.checkedRow = row;
},
......
<style>
.el-select-dropdown {
z-index: 9999 !important;
}
.w280 {
width: 280px !important;
}
.el-tooltip__popper {
z-index: 9999 !important;
}
.w80 {
width: 80px !important;
}
</style>
<template>
<q-dialog v-model="persistent" maximized full-height seamless position="right" @hide="closeProcess">
<q-card style="margin-top:61px;width:500px" class="no-border-radius classinfo_Dialog">
<div class="baseSetForm_Dialog">
<div class="cycle_Title">周期设置</div>
<div class="Period-alert">
<i class="iconfont icon-tishi" style="color:#3370ff;margin-right:8px;"></i>
<span>本年度仅剩余 1 次修改机会。修改周期后,之前生效的周期将会保留</span>
</div>
<div class="Okr_Length">OKR 周期长度<span class="FormItem-asterisk">*</span></div>
<div style="width:130px;margin-top:10px;">
<el-radio-group v-model="addMsg.PeriodMonth" @change="getMonth(addMsg.PeriodMonth)">
<el-radio :label="1">1 个月</el-radio>
<el-radio :label="2">2 个月</el-radio>
<el-radio :label="3">3 个月(季度)</el-radio>
<el-radio :label="4">4 个月</el-radio>
<el-radio :label="6">半年</el-radio>
</el-radio-group>
</div>
<div class="Okr_Length">新生效周期
<span class="FormItem-asterisk">*</span>
<el-tooltip content="当前周期设置后的首个生效周期" placement="top" effect="light">
<i class="iconfont icon-tishi" style="margin-left:5px;"></i>
</el-tooltip>
</div>
<el-select v-model="ckedTime" class="baseDropdown w280" size="small" style="margin-top:10px;"
@change="getCycle(ckedTime)" placeholder="请选择">
<el-option v-for="item in timeList" :key="item.value" :label="item.label" :value="item.value">
</el-option>
</el-select>
<div class="Okr_Length" style="margin-top:20px;">新周期出现时间
<span class="FormItem-asterisk">*</span>
<el-tooltip content="提前 30 天展示下周期的 OKR 填写入口" placement="top" effect="light">
<i class="iconfont icon-tishi" style="margin-left:5px;"></i>
</el-tooltip>
</div>
<div style="display:flex;align-items:center;margin-top:20px;">
<span>上个周期结束前</span>
<el-input type="text" v-model="addMsg.BeforeNum" class="w80" style="margin:0 20px;" @keyup.native="checkInteger(addMsg,'BeforeNum')" size="small"></el-input>
<el-select v-model="addMsg.BeforeType" class="baseDropdown w80" size="small" placeholder="请选择">
<el-option label="天" :value="1"></el-option>
<el-option label="月" :value="2"></el-option>
</el-select>
</div>
<div class="Okr_Length" style="margin:20px 0;">
<div style="color:#1f2329">年度 OKR</div>
<div style="color:#646a73;margin-top:5px;">开启年度周期,对 OKR 进行长期规划</div>
</div>
<el-switch v-model="addMsg.YearOKR" :active-value="1" :inactive-value="2">
</el-switch>
<div class="Okr_Length" style="margin:20px 0;">
<div style="color:#1f2329">主管审核</div>
</div>
<el-switch v-model="addMsg.DirectorAudit" :active-value="1" :inactive-value="2">
</el-switch>
</div>
<div class="process_Btn_List">
<div class="processBtn_Cancel" @click="closeProcess">关闭</div>
<div class="processBtn_Save" @click="setBaseInfo">确定</div>
</div>
</q-card>
<div class="dialog-out-close" @click="closeProcess"
style="height:40px !important;border-top-left-radius: 4px !important;border-bottom-left-radius: 4px !important;">
<q-icon name="iconfont icon-jujue1" size="26px" />
</div>
</q-dialog>
</template>
<script>
import {
SetOKRPeriodConfigInfo
} from '../../api/okr/index';
export default {
props: {
saveObj: {
type: Object,
default: null
}
},
data() {
return {
persistent: true,
addMsg: {
Id: 0,
PeriodMonth: 1, //月份
StartDate: '', //开始时间
EndDate: '', // 结束时间
BeforeNum: '', // 新周期出现时间
BeforeType: 1, //类型 1天 2月
YearOKR: 1, //年度是否开启 1是 2否
DirectorAudit: 1 //主管审核 1开启 2不开启
},
ckedTime: '', //选中的日期
timeList: []
}
},
mounted() {
this.addMsg.Id = this.saveObj.Id;
this.addMsg.PeriodMonth = this.saveObj.PeriodMonth;
this.addMsg.StartDate = this.saveObj.StartDate;
this.addMsg.EndDate = this.saveObj.EndDate;
this.addMsg.BeforeNum = this.saveObj.BeforeNum;
this.addMsg.BeforeType = this.saveObj.BeforeType;
this.addMsg.YearOKR = this.saveObj.YearOKR;
this.addMsg.DirectorAudit = this.saveObj.DirectorAudit;
this.getMonth(this.addMsg.PeriodMonth);
},
created(){
this.$nextTick(() => {
var newEndDate = '';
var newStartDate = '';
if(this.addMsg.StartDate){
let StartTime = this.addMsg.StartDate.split('年');
let month = StartTime[1].split('月')[0];
if(parseInt(month)<10){
month = month.split('0')[1]
}
newStartDate = StartTime[0]+'年'+month+'月'
}
if(this.addMsg.EndDate){
let EndTime = this.addMsg.EndDate.split('年');
let month = EndTime[1].split('月')[0];
if(parseInt(month)<10){
month = month.split('0')[1]
}
newEndDate = EndTime[0]+'年'+month+'月'
}
this.timeList.forEach(x=>{
if(newStartDate===x.StartDate&&newEndDate===x.EndDate){
this.ckedTime=x.value;
}
})
});
},
methods: {
getMonth(num) {
var date = new Date;
var year = date.getFullYear();
var month = date.getMonth() + 1;
var StartDate = '';
var EndDate = '';
this.ckedTime = '';
this.timeList = [];
for (let i = 1; i <= 12; i++) {
let currentDate = year + '-' + i;
currentDate = new Date(currentDate);
// 月份减去一
let lastDate = currentDate.setMonth(currentDate.getMonth() - num); // 输出日期格式为毫秒形式1551398400000
lastDate = new Date(lastDate);
let lastYear = lastDate.getFullYear();
let lastMonth = lastDate.getMonth() + 2;
if (lastMonth > 12) {
lastMonth = 1;
lastYear = lastYear + 1;
}
if (num == 1) {
lastDate = lastYear + ' ' + '年' + ' ' + lastMonth + ' ' + '月';
StartDate = lastYear + '年' + lastMonth + '月';
EndDate = lastYear + '年' + lastMonth + '月';
} else {
if (lastYear == year) {
lastDate = lastYear + ' ' + '年' + ' ' + lastMonth + ' ' + '-' + ' ' + i + ' ' + '月'
StartDate = lastYear + '年' + lastMonth + '月';
EndDate = lastYear + '年' + i + '月';
} else {
lastDate = lastYear + ' ' + '年' + ' ' + lastMonth + ' ' + '月' + ' ' + '-' + ' ' + year + ' ' + '年' + ' ' +
i + ' ' + '月'
StartDate = lastYear + '年' + lastMonth + '月';
EndDate = year + '年' + i + '月';
}
}
let obj = {
value: lastDate,
label: lastDate,
StartDate: StartDate,
EndDate: EndDate
}
this.timeList.push(obj);
}
},
getCycle(value) {
this.timeList.forEach(x => {
if (x.value == value) {
this.addMsg.StartDate = x.StartDate;
this.addMsg.EndDate = x.EndDate;
}
})
},
//关闭流程设置
closeProcess() {
this.persistent = false;
this.$emit('close');
},
//保存数据
setBaseInfo() {
if(this.ckedTime==''){
this.$q.notify({
type: 'negative',
position: "top",
message: `请选择新生效周期`
})
return;
}
if(this.addMsg.BeforeNum==''){
this.$q.notify({
type: 'negative',
position: "top",
message: `请填写上个周期结束天数`
})
return;
}
SetOKRPeriodConfigInfo(this.addMsg).then(res => {
if (res.Code == 1) {
this.$emit('success');
this.closeProcess();
}
})
}
}
}
</script>
<style>
.baseSetForm .Period-rules {
display: flex;
margin-bottom: 24px;
padding-left: 20px;
}
.baseSetForm .Period_Spreate {
flex: 1;
min-width: 200px;
margin-right: 32px;
}
.baseSetForm .Period-rule-title {
color: #646a73;
margin-bottom: 4px;
display: flex;
align-items: center;
}
.baseSetForm .Period-info-icon {
margin-left: 8px;
color: #8f959e;
line-height: 1;
vertical-align: top;
}
.process_Btn_List {
display: flex;
justify-content: flex-end;
padding: 20px;
}
.processBtn_Cancel {
width: 90px;
height: 35px;
border: 1px solid #A1AAB2;
color: #000000;
background-color: #fff;
text-align: center;
line-height: 35px;
border-radius: 5px;
cursor: pointer;
margin-right: 20px;
}
.processBtn_Save {
width: 90px;
height: 35px;
background-color: #2961FE;
color: #FFF;
text-align: center;
line-height: 35px;
border-radius: 5px;
cursor: pointer;
}
.baseSetForm_Dialog {
margin: 20px;
}
.cycle_Title {
font-size: 20px;
font-weight: 500;
color: #1f2329;
}
.Period-alert {
padding: 9px 16px;
border-radius: 4px;
background-color: #f0f4ff;
line-height: 22px;
color: #1f2329;
display: flex;
align-items: center;
margin-top: 20px;
margin-bottom: 12px;
font-size: 13px;
}
.Okr_Length {
font-weight: 500;
color: #1f2329;
}
.FormItem-asterisk {
position: relative;
top: 3px;
margin-left: 3px;
color: #f54a45;
line-height: 1;
}
.baseSetForm_Dialog .el-radio {
display: block;
margin-bottom: 15px;
}
</style>
<template>
<div class="baseSetForm">
<div style="text-align:right;">
<q-btn color="accent" size="sm" class="q-mr-md" @click="isShowBaseSet=true" label="修改基础配置" />
</div>
<div class="Period-rules">
<div class="Period_Spreate">
<div class="Period-rule-title">周期长度</div>
<div>{{getPerodMonth(baseObj.PeriodMonth)}}</div>
</div>
<div class="Period_Spreate">
<div class="Period-rule-title">
新生效周期
<span class="Period-info-icon">
<el-tooltip content="当前周期设置后的首个生效周期" placement="top" effect="light">
<i class="iconfont icon-tishi"></i>
</el-tooltip>
</span>
</div>
<div>{{baseObj.StartDate}} - {{baseObj.EndDate}}</div>
</div>
</div>
<div class="Period-rules">
<div class="Period_Spreate">
<div class="Period-rule-title">新周期出现时间</div>
<div>上个周期结束前 {{baseObj.BeforeNum}} {{baseObj.BeforeType==1?'天':'月'}}</div>
</div>
<div class="Period_Spreate">
<div class="Period-rule-title">
年度 OKR
</div>
<div>
{{baseObj.YearOKR==1?'已开启':'未开启'}}
</div>
</div>
</div>
<div class="Period-rules">
<div class="Period_Spreate">
<div class="Period-rule-title">
主管审核
</div>
<div>
{{baseObj.DirectorAudit==1?'已开启':'未开启'}}
</div>
</div>
</div>
<basecycle-form v-if="isShowBaseSet" :save-obj="baseObj" @close="closeProcessForm" @success="refreshPage">
</basecycle-form>
</div>
</template>
<script>
import {
GetOKRPeriodConfigInfo
} from '../../api/okr/index';
import basecycleForm from '../../components/okr/basecycle-form';
export default {
meta: {
title: ""
},
components: {
basecycleForm
},
data() {
return {
isShowBaseSet: false,
baseObj: {}
}
},
mounted() {
this.getList();
},
methods: {
//获取okr配置信息
getList() {
GetOKRPeriodConfigInfo({}).then(res => {
if (res.Code == 1) {
this.baseObj = res.Data;
}
})
},
//返回组装数据
getPerodMonth(num) {
let str = ''
switch (num) {
case 1:
str = 1 + ' ' + '个月'
break;
case 2:
str = 2 + ' ' + '个月'
break;
case 3:
str = 3 + ' ' + '个月'+' '+'(季度)'
break;
case 4:
str = 4 + ' ' + '个月'
break;
case 6:
str = '半年'
break;
default:
}
return str;
},
//关闭流程设置
closeProcessForm() {
this.isShowBaseSet = false;
},
refreshPage() {
this.getList();
},
}
}
</script>
This diff is collapsed.
<style>
.remindOne {
border: 1px solid rgba(187, 191, 196, .3);
border-radius: 4px;
margin-bottom: 12px;
padding: 20px 24px 8px;
}
.Notifititle {
position: relative;
font-size: 16px;
line-height: 24px;
font-weight: 500;
color: #1f2329;
padding-left: 10px;
margin-bottom: 4px;
}
.Notifititle::before {
position: absolute;
left: 0;
top: 4px;
height: 16px;
width: 0;
content: "";
border-left: 2px solid #3370ff;
}
.Notificat-item {
padding: 16px 0;
border-bottom: 1px solid rgba(187, 191, 196, .2);
display: -ms-flexbox;
display: flex;
-ms-flex-align: center;
align-items: center;
}
.Notificat_Inner {
font-size: 14px;
line-height: 22px;
color: #1f2329;
margin-bottom: 2px;
}
.Notify_innerTwo {
font-size: 12px;
line-height: 18px;
color: #8f959e;
}
.Notify_Edit {
cursor: pointer;
color: #3370ff;
}
</style>
<template>
<div>
<div class="page-content">
<div class="remindOne">
<div class="Notifititle">提醒全体成员</div>
<div>
<div class="Notificat-item">
<div style="flex:1">
<div class="Notificat_Inner">填写 OKR(仅未填写的)</div>
<div class="Notify_innerTwo" v-if="dataList&&dataList.length>0">
提醒时间:周期开始后第 {{dataList[0].Days}} 个工作日 {{dataList[0].Time}}
<span class="Notify_Edit" @click="updateTime(dataList[0])">修改</span>
</div>
</div>
<div>
<template v-if="dataList&&dataList.length>0">
<q-toggle size="md" color="primary" @input="getEnable(1)" v-model="dataList[0].Enable" :false-value="2" :true-value="1" />
</template>
</div>
</div>
<div class="Notificat-item" style="border:0;">
<div style="flex:1">
<div class="Notificat_Inner">给 OKR 打分(仅未打分的)</div>
<div class="Notify_innerTwo" v-if="dataList&&dataList.length>0">
提醒时间:周期结束前第 {{dataList[1].Days}} 个工作日 {{dataList[1].Time}}
<span class="Notify_Edit" @click="updateTime(dataList[1])">修改</span>
</div>
</div>
<div>
<template v-if="dataList&&dataList.length>0">
<q-toggle size="md" color="primary" @input="getEnable(2)" v-model="dataList[1].Enable" :false-value="2" :true-value="1" />
</template>
</div>
</div>
</div>
</div>
<div class="remindOne">
<div class="Notifititle">提醒管理者</div>
<div>
<div class="Notificat-item">
<div style="flex:1">
<div class="Notificat_Inner">查看下级 OKR 填写情况(仅有下级未填写的)</div>
<div class="Notify_innerTwo" v-if="dataList&&dataList.length>0">
提醒时间:周期开始后第 {{dataList[2].Days}} 个工作日 {{dataList[2].Time}}
<span class="Notify_Edit" @click="updateTime(dataList[2])">修改</span>
</div>
</div>
<div>
<template v-if="dataList&&dataList.length>0">
<q-toggle size="md" color="primary" @input="getEnable(3)" v-model="dataList[2].Enable" :false-value="2" :true-value="1" />
</template>
</div>
</div>
<div class="Notificat-item" style="border:0;">
<div style="flex:1">
<div class="Notificat_Inner">查看下级 OKR 打分情况(仅有下级未打分的)</div>
<div class="Notify_innerTwo" v-if="dataList&&dataList.length>0">
提醒时间:周期结束前第 {{dataList[3].Days}} 个工作日 {{dataList[3].Time}}
<span class="Notify_Edit" @click="updateTime(dataList[3])">修改</span>
</div>
</div>
<div>
<template v-if="dataList&&dataList.length>0">
<q-toggle size="md" color="primary" @input="getEnable(4)" v-model="dataList[3].Enable" :false-value="2" :true-value="1" />
</template>
</div>
</div>
</div>
</div>
<remindtime-form v-if="isShowsetForm" @close="closeruleset" :save-obj="setObj" @success="refreshRule">
</remindtime-form>
</div>
</div>
</template>
<script>
import {
GetOKRRemindList,
SetOKRRemindEnable
} from '../../api/okr/index';
import remindtimeForm from '../../components/okr/remindtime-form';
export default {
meta: {
title: "提醒设置"
},
components: {
remindtimeForm
},
data() {
return {
dataList: [],
isShowsetForm:false,
setObj:{}
}
},
created() {},
mounted() {
this.getList();
},
methods: {
//获取数据
getList() {
GetOKRRemindList({}).then(res => {
if (res.Code == 1) {
this.dataList = res.Data;
}
})
},
//点击切换
getEnable(type){
let msg = {
Type:type
}
SetOKRRemindEnable(msg).then(res => {
if (res.Code == 1) {
this.getList();
this.$q.notify({
icon: 'iconfont icon-chenggong',
color: 'accent',
timeout: 2000,
message: '修改成功!',
position: 'top'
})
}
})
},
//关闭弹窗
closeruleset(){
this.isShowsetForm=false;
},
//修改成功回调
refreshRule(){
this.getList();
},
//修改
updateTime(obj){
this.setObj=obj;
this.isShowsetForm=true;
}
}
}
</script>
<style>
.w400 {
width: 400px !important;
}
/* .el-select-dropdown__item{
min-width: 400px;
} */
.el-picker-panel{
z-index: 9999!important;
}
</style>
<template>
<q-dialog v-model="persistent" persistent content-class="bg-grey-1" transition-show="scale" transition-hide="scale">
<q-card style="max-width:600px;width:600px;" class="remind_Dialog">
<q-card-section>
<div class="text-h6">修改提醒时间</div>
</q-card-section>
<q-card-section class="q-pt-none scroll" style="max-height: 70vh">
<div class="row wrap">
<div class="col-12">
周期结束前第
<q-select class="q-pb-lg" style="width:400px;display:inline-block;" multiple filled stack-label use-input
use-chips option-value="Id" option-label="Name" v-model="daysOne" ref="ManagerId" :options="optionList"
:dense="false" emit-value map-options>
<template v-slot:no-option>
<q-item>
<q-item-section class="text-grey">
未找到相关数据
</q-item-section>
</q-item>
</template>
</q-select>
个工作日
</div>
</div>
<div class="row wrap">
<div class="col-12" style="margin-bottom:50px;">
<span style="margin:0 5px 0 55px;">时间</span>
<el-time-select v-model="msg.Time" class="w400" :picker-options="{
start: '00:00',
step: '00:15',
end: '23:59'
}" placeholder="选择时间">
</el-time-select>
</div>
</div>
</q-card-section>
<q-card-actions align="right" class="bg-white">
<q-btn label="取消" flat color="grey-10" style="font-weight:400 !important" @click="closeRuleForm" />
<q-btn label="保存" color="accent q-px-md" style="font-weight:400 !important" @click="saveRule" />
</q-card-actions>
</q-card>
</q-dialog>
</template>
<script>
import {
SetOKRRemindInfo
} from '../../api/okr/index'
export default {
props: {
saveObj: {
type: Object,
default: null,
}
},
data() {
return {
persistent: true,
msg: {
Id: 0,
Days: '',
Time: '',
Type: 1
},
optionList: [{
Id: 1,
Name: 1
}, {
Id: 2,
Name: 2
}, {
Id: 3,
Name: 3
}, {
Id: 4,
Name: 4
}, {
Id: 5,
Name: 5
}, {
Id: 6,
Name: 6
}, {
Id: 7,
Name: 7
}, {
Id: 8,
Name: 8
}, {
Id: 9,
Name: 9
}, {
Id: 10,
Name: 10
}, {
Id: 11,
Name: 11
}, {
Id: 12,
Name: 12
}, {
Id: 13,
Name: 13
}, {
Id: 14,
Name: 14
}, {
Id: 15,
Name: 15
}, {
Id: 16,
Name: 16
}, {
Id: 17,
Name: 17
}, {
Id: 18,
Name: 18
}, {
Id: 19,
Name: 19
}, {
Id: 20,
Name: 20
}],
daysOne: [],
}
},
computed: {},
mounted() {
console.log(this.saveObj,'saveObj');
this.msg.Id = this.saveObj.Id;
this.daysOne = this.saveObj.Days.split(',');
this.msg.Time = this.saveObj.Time;
this.msg.Type = this.saveObj.Type;
},
methods: {
//取消
closeRuleForm() {
this.$emit('close');
this.persistent = false
},
//保存信息
saveRule() {
if(this.daysOne&&this.daysOne.length>0){
this.msg.Days= this.daysOne.join(',');
}
SetOKRRemindInfo(this.msg).then(res => {
if (res.Code == 1) {
this.$emit('success');
this.closeRuleForm();
}
})
},
},
}
</script>
<template>
<div class="page-body">
<div class="page-search row items-center">
<div class="col row wrap q-mr-lg q-col-gutter-md">
<div class="col-3">
<q-input @change="research" clearable standout="bg-primary text-white" v-model="msg.RuleName" label="规则名称"
@clear="research" maxlength="20" />
</div>
</div>
</div>
<div class="page-content">
<q-table :pagination="msg" :loading="loading" no-data-label="暂无相关数据" flat class="sticky-column-table"
separator="none" :data="dataList" :columns="columns" row-key="name">
<template v-slot:top="props">
<div class="col-2 q-table__title">OKR规则模板</div>
<q-space />
<div class="page-option">
<q-btn color="accent" size="sm" class="q-mr-md" icon="add" @click="addModule(null)" label="新增模板" />
</div>
</template>
<template v-slot:bottom>
<q-pagination class="full-width justify-end" v-model="msg.PageIndex" color="primary" :max="pageCount"
:input="true" @input="changePage" />
</template>
<template v-slot:body-cell-optioned="props">
<q-td :props="props" style="width:200px;">
<q-btn flat size="xs" icon="edit" color="red" v-if="props.row.Enable==1" style="font-weight:400"
@click="getStart(props.row,2)" label="停用" />
<q-btn flat size="xs" icon="edit" color="secondary" v-if="props.row.Enable==2" style="font-weight:400"
@click="getStart(props.row,1)" label="启用" />
<q-btn flat size="xs" icon="edit" color="negative" style="font-weight:400" @click="delOkrModule(props.row)"
label="删除" />
<q-btn flat size="xs" icon="edit" color="accent" style="font-weight:400" @click="addModule(props.row)"
label="编辑" />
</q-btn>
</q-td>
</template>
</q-table>
<ruleseteditForm v-if="isShowsetForm" @close="closeruleset" :save-obj="ruleObj" @success="refreshRule">
</ruleseteditForm>
</div>
</div>
</template>
<script>
import {
GetOKRRulePageList,
SetOKRRuleState
} from '../../api/okr/index';
import ruleseteditForm from '../../components/okr/rulesetedit-form';
export default {
meta: {
title: "规则设置"
},
components: {
ruleseteditForm
},
data() {
return {
pageCount: 0,
msg: {
PageIndex: 1,
PageSize: 12,
rowsPerPage: 12,
RuleName: '', //规则名称
Enable: 0 //是否启用 1是 2否 0不限
},
loading: false,
isShowsetForm: false,
ruleObj: {}, //传入参数
columns: [{
name: 'RuleName',
label: '规则名称',
field: 'RuleName',
align: 'left'
},
{
name: 'DataBase',
label: '关联库',
field: 'DataBase',
align: 'left',
},
{
name: 'Table',
label: '关联表',
field: 'Table',
align: 'left',
},
{
name: 'Field',
label: '关键字段',
field: 'Field',
align: 'left'
},
{
name: 'Way',
label: '计算方式',
field: 'Way',
align: 'left'
},
{
name: 'Identity',
label: '身份字段',
field: 'Identity',
align: 'left'
},
{
name: 'Time',
label: '操作时间字段',
field: 'Time',
align: 'left'
},
{
name: 'Remark',
label: '规则备注',
field: 'Remark',
align: 'left'
},
{
name: 'optioned',
label: '操作',
field: 'QuestionId'
}
],
dataList: [],
}
},
created() {},
mounted() {
this.getList();
},
methods: {
changePage(val) {
this.msg.PageIndex = val;
this.getList();
},
//输入框改变
research() {
this.getList();
},
//获取数据
getList() {
GetOKRRulePageList(this.msg).then(res => {
if (res.Code == 1) {
this.dataList = res.Data.PageData;
this.pageCount = res.Data.PageCount;
}
})
},
//关闭弹窗
closeruleset() {
this.isShowsetForm = false;
},
//刷新列表
refreshRule() {
this.getList();
},
//1启用 2禁用 3删除
getStart(item, type) {
let msg = {
RuleId: item.Id,
Type: type
}
SetOKRRuleState(msg).then(res => {
if (res.Code == 1) {
this.getList();
}
})
},
//删除模板
delOkrModule(item) {
this.$q.dialog({
title: '提示信息',
message: '是否确定删除?',
cancel: true,
persistent: true,
ok: "确定",
cancel: "取消",
}).onOk(() => {
let msg = {
RuleId: item.Id,
Type: 3
}
SetOKRRuleState(msg).then(res => {
if (res.Code == 1) {
this.getList();
}
})
}).onCancel(() => {
});
},
//新增模板吧
addModule(obj) {
if (obj) {
this.ruleObj = obj
} else {
this.ruleObj = null
}
this.isShowsetForm = true
}
}
}
</script>
<style lang="sass">
@import url('~assets/css/table.sass')
</style>
<template>
<q-dialog v-model="persistent" persistent content-class="bg-grey-1" transition-show="scale" transition-hide="scale">
<q-card style="width: 800px;max-width:800px;">
<q-card-section>
<div class="text-h6">{{(saveObj&&saveObj.Id>0)?"修改OKR规则模板":"新增OKR规则模板"}}</div>
</q-card-section>
<q-card-section class="q-pt-none scroll" style="max-height: 70vh">
<div class="row wrap">
<div class="col-6">
<q-input filled stack-label maxlength="20" :dense="false" v-model="msg.RuleName" ref="RuleName"
class="col-6 q-pr-lg q-pb-lg" label="规则名称" :rules="[val => !!val || '请填写规则名称']" />
</div>
<div class="col-6">
<q-input filled stack-label maxlength="20" :dense="false" v-model="msg.DataBase" ref="DataBase"
class="col-6 q-pb-lg" label="关联数据库" :rules="[val => !!val || '请填写关联数据库']" />
</div>
</div>
<div class="row wrap">
<div class="col-6">
<q-input filled stack-label maxlength="20" :dense="false" v-model="msg.Table" ref="Table"
class="col-6 q-pr-lg q-pb-lg" label="关联表" :rules="[val => !!val || '请填写关联表']" />
</div>
<div class="col-6">
<q-input filled stack-label maxlength="20" :dense="false" v-model="msg.Field" ref="Field"
class="col-6 q-pb-lg" label="关联字段" :rules="[val => !!val || '请填写关联字段']"/>
</div>
</div>
<div class="row wrap">
<div class="col-6">
<q-input filled stack-label maxlength="20" :dense="false" v-model="msg.Identity" ref="Identity"
class="col-6 q-pr-lg q-pb-lg" label="身份字段" :rules="[val => !!val || '请填身份字段']" />
</div>
<div class="col-6">
<q-select filled stack-label option-value="Id" option-label="Name" v-model="msg.Way" ref="Way"
:options="EnumList" label="关机数据计算方式" :dense="false" :rules="[val => !!val || '请选择关机数据计算方式']" class="col-6 q-pb-lg" emit-value map-options />
</div>
</div>
<div class="row wrap">
<div class="col-6">
<q-input filled stack-label maxlength="20" :dense="false" v-model="msg.Time" ref="Time"
class="col-6 q-pr-lg q-pb-lg" label="操作周期字段" :rules="[val => !!val || '请填写操作周期字段']" />
</div>
<div class="col-6">
<q-input filled stack-label maxlength="20" :dense="false" v-model="msg.State" ref="State"
class="col-6 q-pb-lg" label="状态字段" :rules="[val => !!val || '请输入状态字段']" />
</div>
</div>
<div class="row wrap">
<div class="col-12">
<q-input filled stack-label maxlength="20" :dense="false" v-model="msg.Remark" ref="Remark"
class="col-6 q-pb-lg" label="规则备注" />
</div>
</div>
<div class="row wrap">
<div class="col-6">
<q-toggle size="md" label="是否启用" color="primary" :false-value="2" :true-value="1" v-model="msg.Enable" />
</div>
</div>
</q-card-section>
<q-card-actions align="right" class="bg-white">
<q-btn label="取消" flat color="grey-10" style="font-weight:400 !important" @click="closeRuleForm" />
<q-btn label="保存" color="accent q-px-md" style="font-weight:400 !important" @click="saveRule" />
</q-card-actions>
</q-card>
</q-dialog>
</template>
<script>
import {
SetOKRRuleInfo,
GetRuleTypeEnumList
} from '../../api/okr/index'
export default {
props: {
saveObj: {
type: Object,
default: null
}
},
data() {
return {
msg: {
Id: 0,
RuleName: "", //规则名称
DataBase: '', //数据库
Table: '', //表名
Field: '', //统计字段
Way: '', //方式
State: '', //状态字段
Identity: '', //身份字段
Time: '', //操作时间
Remark: '', //备注
Enable: 1, //是否启用
},
persistent: true,
EnumList: [], //枚举数据
}
},
computed: {},
created() {},
mounted() {
if (this.saveObj && this.saveObj.Id > 0) {
this.msg.Id = this.saveObj.Id;
this.msg.RuleName = this.saveObj.RuleName;
this.msg.DataBase = this.saveObj.DataBase;
this.msg.Table = this.saveObj.Table;
this.msg.Field = this.saveObj.Field;
this.msg.Way = this.saveObj.Way;
this.msg.State = this.saveObj.State;
this.msg.Identity = this.saveObj.Identity;
this.msg.Time = this.saveObj.Time;
this.msg.Remark = this.saveObj.Remark;
this.msg.Enable = this.saveObj.Enable;
}
this.getRuleTypeEnumList();
},
methods: {
//保存信息
saveRule() {
this.$refs.RuleName.validate();
this.$refs.DataBase.validate();
this.$refs.Table.validate();
this.$refs.Field.validate();
this.$refs.State.validate();
this.$refs.Identity.validate();
this.$refs.Time.validate();
this.$refs.Way.validate();
if (!this.$refs.RuleName.hasError &&
!this.$refs.DataBase.hasError &&
!this.$refs.Table.hasError &&
!this.$refs.Field.hasError &&
!this.$refs.State.hasError &&
!this.$refs.Identity.hasError &&
!this.$refs.Time.hasError&&
!this.$refs.Way.hasError) {
SetOKRRuleInfo(this.msg).then(res => {
if (res.Code == 1) {
this.$emit('success');
this.closeRuleForm();
}
})
}
},
//获取规则方式枚举
getRuleTypeEnumList() {
GetRuleTypeEnumList({}).then(res => {
if (res.Code == 1) {
this.EnumList = res.Data;
}
})
},
//关闭窗口
closeRuleForm() {
this.$emit('close');
this.persistent = false
}
},
}
</script>
<style>
.scoreSetForm .scoreRemind {
display: flex;
justify-content: space-between;
align-items: center;
}
.scoreSetForm .scoreTitle {
color: #F72E52;
font-size: 12px;
}
.scoreSetForm .rule_list {
width: 100%;
height: auto;
}
.scoreSetForm .score_Top {
height: 30px;
background-color: #EEEEEF;
font-size: 12px;
padding: 5px 20px;
}
.scoreSetForm .score_Tname {
color: #2D2D2D;
font-weight: bold;
}
.scoreSetForm .score_IconList span {
display: inline-block;
margin-right: 20px;
color: #2961FE;
cursor: pointer;
}
.scoreSetForm .score_IconList span i {
margin-right: 5px;
}
.scoreSetForm .score_IconList span:last-child {
margin-right: 0;
}
.scoreSetForm .rule_InnerList {
min-height: 60px;
padding: 0 20px;
border-bottom: 1px solid #F4F4F4;
}
.scoreSetForm .rule_Item {
display: inline-block;
margin: 10px 30px 10px 0;
}
.scoreSetForm .rule_comback {
width: 60px;
height: 20px;
background-color: #EEEEEF;
color: #2D2D2D;
text-align: center;
line-height: 20px;
margin-top: 5px;
font-size: 12px;
}
.scoreSetForm .score_Num {
display: inline-block;
position: relative;
top: -26px;
}
.scoreSetForm .isDefaultColor{
color:#A1AAB2!important;
}
</style>
<template>
<div class="scoreSetForm">
<div class="scoreRemind" style="margin-bottom:20px;">
<div class="scoreTitle">
<i class="iconfont icon-tishi" style="position:relative;top:1px;"></i>
系统按照OKR规则默认采用0-1(0.1,0.2,0.3.....)的分数制度,若采用新的分数制度,必须满足0-1规则。否则,无法保存规则信息
</div>
<div>
<q-btn color="accent" size="sm" class="q-mr-md" icon="add" label="新增分数规则" @click="addScoreRull(null)" />
</div>
</div>
<div class="rule_list" v-for="(item,index) in dataList" :key="index">
<div class="scoreRemind score_Top">
<div class="score_Tname">{{item.Name}}</div>
<div class="score_IconList">
<span @click="setDefault(item)" v-if="item.IsDefault==2" class="isDefaultColor"><i class="iconfont icon-dagou"></i>默认</span>
<span @click="setDefault(item)" v-else><i class="iconfont icon-dagou"></i>默认</span>
<span @click="addScoreRull(item)"><i class="iconfont icon-edit"></i>编辑</span>
<span @click="delRuleList(item)"><i class="iconfont icon-shanchu"></i>删除</span>
</div>
</div>
<div class="rule_InnerList">
<div class="rule_Item" v-for="(subItem,subIndex) in item.DetailList" :key="subIndex">
<div class="score_Num" :style="{'color':subItem.Color}">分数{{subIndex+1}}</div>
<div style="display:inline-block;">
<div :style="{'color':subItem.Color}">{{subItem.Name}}</div>
<div class="rule_comback">{{subItem.ScoreMin}}-{{subItem.ScoreMax}}</div>
</div>
</div>
</div>
</div>
<scoreset-form v-if="isShowScoreSet" :save-obj="scoreObj" @close="closeScoreForm" @success="refreshPage">
</scoreset-form>
</div>
</template>
<script>
import {
GetOKRScoreConfigPageList,
SetOKRScoreConfigState,
} from '../../api/okr/index';
import scoresetForm from '../../components/okr/scoreset-form';
export default {
meta: {
title: ""
},
components: {
scoresetForm
},
data() {
return {
msg: {
PageIndex: 1,
PageSize: 12,
Name: ''
},
isShowScoreSet: false,
scoreObj: {},
dataList: [],
}
},
mounted() {
this.getList();
},
methods: {
//获取okr配置信息
getList() {
GetOKRScoreConfigPageList(this.msg).then(res => {
if (res.Code == 1) {
this.dataList = res.Data.PageData;
}
})
},
//新增分数规则
addScoreRull(obj) {
if (obj) {
this.scoreObj = obj;
} else {
this.scoreObj = null;
}
this.isShowScoreSet = true;
},
//关闭流程设置
closeScoreForm() {
this.isShowScoreSet = false;
},
refreshPage() {
this.getList();
},
//删除分数规则
delRuleList(item) {
this.$q.dialog({
title: '提示信息',
message: '是否确定删除?',
cancel: true,
persistent: true,
ok: "确定",
cancel: "取消",
}).onOk(() => {
let msg = {
ScoreId: item.Id,
Type: 2
}
SetOKRScoreConfigState(msg).then(res => {
if (res.Code == 1) {
this.getList();
}
})
}).onCancel(() => {
});
},
//设为默认
setDefault(item) {
let msg = {
ScoreId: item.Id,
Type: 1
}
SetOKRScoreConfigState(msg).then(res => {
if (res.Code == 1) {
this.getList();
}
})
}
}
}
</script>
<style>
.scoresetForm .scoreForm_List {
width: 100%;
min-height: 80px;
background-color: #F7F7F7;
padding: 15px;
}
.scoresetForm .score_MyNum {
margin-bottom: 10px;
display: flex;
justify-content: space-between;
align-items: center;
}
.scoresetForm .addScoreBtn {
width: 100%;
height: 40px;
border: 1px dashed #2961FE;
text-align: center;
line-height: 40px;
margin-top: 20px;
color: #2961FE;
cursor: pointer;
}
.scoresetForm .scoreIlist:hover {
color: red;
}
.scoresetForm .scoreContent {
max-height: 450px;
}
</style>
<template>
<q-dialog v-model="persistent" persistent content-class="bg-grey-1" transition-show="scale" transition-hide="scale">
<q-card style="width: 700px;max-width:700px;" class="scoresetForm">
<q-card-section>
<div class="text-h6">{{(saveObj&&saveObj.Id>0)?"修改分数规则":"新增分数规则"}}</div>
</q-card-section>
<q-card-section class="q-pt-none scroll" style="max-height: 70vh">
<div class="row wrap scoreContent">
<div class="col-12">
<q-input filled stack-label maxlength="20" :dense="false" v-model="msg.Name" ref="Name"
class="col-12 q-pb-lg" label="规则名称" :rules="[val => !!val || '请填写规则名称']" />
</div>
<div class="col-12">
<div class="scoreForm_List" v-for="(item,index) in msg.DetailList" :key="index" style="margin-bottom:10px;">
<div class="score_MyNum">
<div>分数{{index+1}}</div>
<div style="cursor:pointer;">
<i class="iconfont icon-shanchu scoreIlist" @click="delDeailList(index)"></i>
</div>
</div>
<div>
<el-input style="width:300px;display:inline-block;" v-model="item.Name" placeholder="分数名称"></el-input>
<el-input style="width:90px;display:inline-block;margin-left:20px;"
@keyup.native="checkPrice(item,'ScoreMin')" v-model="item.ScoreMin" placeholder="最小分数"></el-input>
<el-input style="width:90px;display:inline-block;margin-left:20px;"
@keyup.native="checkPrice(item,'ScoreMax')" v-model="item.ScoreMax" placeholder="最大分数"></el-input>
<el-select :ref="'colorSelect'+index" placeholder="" v-model="item.Color"
style="width: 70px;display:inline-block;margin-left:20px;" @change="handleChange(item.Color,index)">
<el-option v-for="item in colorList" :key="item" label=" " :value="item"
v-html="'<div style=background-color:'+ item+';width:' +'25px'+';height:'+'25px'+';border-radius:'+'50%'+'></div>'">
</el-option>
</el-select>
</div>
</div>
</div>
<div class="addScoreBtn" @click="addScoreList()">+新增分数</div>
</div>
</q-card-section>
<q-card-actions align="right" class="bg-white">
<q-btn label="取消" flat color="grey-10" style="font-weight:400 !important" @click="closeScoreForm" />
<q-btn label="保存" color="accent q-px-md" style="font-weight:400 !important" @click="saveScore" />
</q-card-actions>
</q-card>
</q-dialog>
</template>
<script>
import {
SetOKRScoreConfigInfo
} from '../../api/okr/index'
export default {
props: {
saveObj: {
type: Object,
default: null
}
},
data() {
return {
msg: {
Id: 0,
Name: '', //规则名称
DetailList: [{
Name: '', //分数名称
ScoreMin: '', //最小分数
ScoreMax: '', //最大分数
Color: '' //颜色
}],
},
myColor: '',
colorList: ["#F72E52", "#FA9595", "#ED3AC5", "#F28C1D", "#8175FB", "#FEB528", "#2961FE", "#3FC4FF", "#51BDA5",
"#08D220"
],
persistent: true
}
},
computed: {},
created() {
// if (this.color && this.color.length > 0) {
// this.myColor = this.color;
// this.setSelectColor(this.color)
// }
},
mounted() {
if (this.saveObj && this.saveObj.Id > 0) {
this.msg.Id = this.saveObj.Id;
this.msg.Name = this.saveObj.Name;
this.msg.DetailList = this.saveObj.DetailList;
this.msg.DetailList.forEach((x, index) => {
this.setSelectColor(x.Color, index);
})
}
},
methods: {
//设置颜色选择框中颜色
setSelectColor(color, index) {
let str = `colorSelect${index}`;
this.$nextTick(() => {
let dom = this.$refs[str][0];
if (dom) {
dom = dom.$el.children[0];
let inputDom = dom.querySelectorAll(".el-input__inner");
let icon = dom.querySelectorAll(".el-input__icon");
inputDom[0].style["background-color"] = color;
icon[0].style["color"] = "black";
}
})
},
//关闭天窗
closeScoreForm() {
this.$emit('close');
this.persistent = false;
},
handleChange(val, index) {
this.setSelectColor(val, index);
//触发update事件更新父组件绑定值
this.$emit('update', val);
},
//保存
saveScore() {
for (let i = 0; i < this.msg.DetailList.length; i++) {
if (this.msg.DetailList[i].Name == '') {
this.$q.notify({
type: 'negative',
position: "top",
message: `请填写第${i+1}分数名称`
})
return;
}
if (this.msg.DetailList[i].ScoreMin == '') {
this.$q.notify({
type: 'negative',
position: "top",
message: `请填写第${i+1}最小分数`
})
return;
}
if (this.msg.DetailList[i].ScoreMax == '') {
this.$q.notify({
type: 'negative',
position: "top",
message: `请填写第${i+1}最大分数`
})
return;
}
}
SetOKRScoreConfigInfo(this.msg).then(res => {
if (res.Code == 1) {
this.$emit('success');
this.closeScoreForm();
}
})
},
//新增分数
addScoreList() {
let obj = {
Name: '', //分数名称
ScoreMin: '', //最小分数
ScoreMax: '', //最大分数
Color: '' //颜色
}
this.msg.DetailList.push(obj);
},
//删除分数
delDeailList(index) {
this.msg.DetailList.splice(index, 1);
}
},
}
</script>
......@@ -5,8 +5,11 @@
<div class="text-h6">{{(questionBankObj&&questionBankObj.BankId>0)?"修改题库":"创建题库"}}</div>
</q-card-section>
<q-card-section class="q-pt-none scroll" style="max-height: 70vh">
<q-input filled stack-label :dense="false" class="col-6 q-pb-lg" ref="BankName" v-model="msg.BankName" label="请输入题库名称"
maxlength="20" :rules="[val => !!val || '请输入题库名称']" />
<q-input filled stack-label :dense="false" class="col-6 q-pb-lg" ref="BankNo" v-model="msg.BankNo"
label="请输入题库序号" maxlength="20" :rules="[val => !!val || '请输入题库序号']" />
<q-input filled stack-label :dense="false" class="col-6 q-pb-lg" ref="BankName" v-model="msg.BankName"
label="请输入题库名称" maxlength="20" :rules="[val => !!val || '请输入题库名称']" />
</q-card-section>
<q-card-actions align="right" class="bg-white">
<q-btn label="取消" flat color="grey-10" style="font-weight:400 !important" @click="closeQuestionForm" />
......@@ -25,7 +28,7 @@
props: {
questionBankObj: {
type: Object,
default:null
default: null
}
},
components: {
......@@ -35,6 +38,7 @@
return {
msg: {
BankId: 0,
BankNo: "", //题库序号
BankName: '', //题库名称
},
persistent: true
......@@ -43,7 +47,7 @@
computed: {},
created() {},
mounted() {
this.initQuestionBank();
this.initQuestionBank();
},
methods: {
initQuestionBank() {
......@@ -53,20 +57,22 @@
}).then(res => {
if (res.Code == 1) {
this.msg.BankId = res.Data.BankId;
this.msg.BankNo = res.Data.BankNo;
this.msg.BankName = res.Data.BankName;
}
})
} else {
this.msg.BankId = 0;
this.msg.BankNo = "";
this.msg.BankName = "";
}
},
//创建
saveQuestion() {
this.$refs.BankName.validate()
if(!this.$refs.BankName.hasError){
if (!this.$refs.BankName.hasError) {
SetQuestionBank(this.msg).then(res => {
if (res.Code==1) {
if (res.Code == 1) {
this.$emit('success');
this.closeQuestionForm();
}
......
......@@ -54,7 +54,25 @@
<q-space />
<div class="page-option">
<q-btn color="accent" size="sm" class="q-mr-md" icon="add" label="新增题目" @click="EditQuestion(null)" />
<!-- <q-btn color="accent" size="sm" class="q-mr-md" icon="add" label="批量设置考级程度" @click="SetBatchLevelType" /> -->
<q-btn color="accent" size="sm" class="q-mr-md" icon="add" label="批量设置" title="批量设置考级程度"
@click="isShowEdit=true">
<q-popup-proxy>
<q-banner v-if="isShowEdit">
<div class="calenderDialog">
<div style="margin:10px 0 15px 0;">设置考级程度</div>
<q-select standout="bg-primary text-white" option-value="Id" option-label="Name"
v-model="levelTypeMsg.LevelType" :options="questionLevalTypeList" emit-value map-options
label="考级程度" />
<q-card-actions align="right" class="bg-white">
<q-btn label="取消" flat color="grey-10" @click="isShowEdit=false"
style="font-weight:400 !important" />
<q-btn label="确认" color="accent q-px-md" style="font-weight:400 !important"
@click="SetBatchLevelType()" />
</q-card-actions>
</div>
</q-banner>
</q-popup-proxy>
</q-btn>
<q-btn-dropdown color="accent" label="批量导入" size="sm" class="q-mr-md" style="margin-left:5px;">
<q-list>
<q-item clickable v-close-popup>
......@@ -113,7 +131,9 @@
queryDifficultyType,
queryQuestionCategory,
setQuestionSort,
CopyQuestion
CopyQuestion,
queryQuestionLevelType,
saveBatchQuestionLevel
} from '../../api/question/question';
import questionForm from '../question/question-form';
import questionUpload from '../question/question-upload';
......@@ -210,6 +230,11 @@
isShowImportUpload: false, //是否显示导入模板
questionCategoryList: [], //问题分类
selectedQuestion: [], //选中的数组
isShowEdit: false, //是否显示弹窗
questionLevalTypeList: [], //问题考级程度列表
levelTypeMsg: {
LevelType: 0,
}
}
},
created() {
......@@ -222,11 +247,24 @@
this.getQuestionType();
this.getDifficultyType();
this.getQuestionCategory();
this.getQuestionLevelType();
},
mounted() {
this.getQuestionList();
},
methods: {
//获取问题考级程度
getQuestionLevelType() {
queryQuestionLevelType().then(res => {
var tempData = res.Data;
var obj = {
Name: '请选择',
Id: 0
}
tempData.unshift(obj);
this.questionLevalTypeList = tempData;
})
},
//获取问题大类
getQuestionCategory() {
queryQuestionCategory().then(res => {
......@@ -261,9 +299,29 @@
},
//批量设置考级程度
SetBatchLevelType() {
console.log("selectedQuestion", this.selectedQuestion);
if (this.selectedQuestion && this.selectedQuestion.length > 0) {
var levelMsg = {
LevelType: this.levelTypeMsg.LevelType,
questionIds: [],
};
this.selectedQuestion.forEach(item => {
levelMsg.questionIds.push(item.QuestionId)
})
saveBatchQuestionLevel(levelMsg).then(res => {
if (res.Code == 1) {
this.$q.notify({
icon: 'iconfont icon-chenggong',
color: 'accent',
timeout: 2000,
message: '设置成功!',
position: 'top'
})
this.getQuestionList();
this.isShowEdit = false;
this.selectedQuestion = [];
this.levelTypeMsg.LevelType = 0;
}
})
} else {
this.$q.notify({
icon: 'iconfont icon-chenggong',
......
......@@ -33,12 +33,12 @@
<span style="width:10%">{{item.Age}}</span>
<span style="width:20%">{{item.Mobile}}</span>
<span style="width:20%">
<template v-if="item.ClassHours">已学:{{item.ClassHours}}课时</template>
<template v-if="item.ClassHours">已学:{{item.ClassHours}}课时 </template>
</span>
<span style="width:10%">{{item.GuestStateStr}}</span>
<span style="width:20%;" class="guest_Status">
<span v-if="item.GuestState==1" @click="clickItem(item,1)">申请</span>
<span style="margin-left:10px;" v-if="item.AuditStatus==3" @click="clickItem(item,2)">重新申请</span>
<span style="margin-left:10px;" v-if="item.GuestState==4" @click="clickItem(item,2)">重新申请</span>
<span style="margin-left:10px;" v-if="chooseItem&&chooseItem.Id==item.Id" @click="cancelApply">取消申请</span>
</span>
</div>
......
......@@ -292,7 +292,6 @@
methods:{
getList() {
getClassLessPlan(this.msg).then(res => {
console.log(res, '数据来了');
if (res.Code == 1) {
this.data = res.Data
}
......
......@@ -18,8 +18,8 @@
<div class="page-search row items-center">
<div class="col row wrap q-mr-lg q-col-gutter-md">
<div class="col-3">
<q-input @change="research" clearable standout="bg-primary text-white" v-model="msg.BankName"
label="输入关键字查找" @clear="research" maxlength="20" />
<q-input @change="research" clearable standout="bg-primary text-white" v-model="msg.BankName" label="输入关键字查找"
@clear="research" maxlength="20" />
</div>
</div>
</div>
......@@ -30,8 +30,7 @@
<div class="col-2 q-table__title">题库列表</div>
<q-space />
<div class="page-option">
<q-btn color="accent" size="sm" class="q-mr-md" icon="add" @click="EditQuestion(null)"
label="创建新题库" />
<q-btn color="accent" size="sm" class="q-mr-md" icon="add" @click="EditQuestion(null)" label="创建新题库" />
</div>
</template>
<template v-slot:body-cell-BankId="props">
......@@ -56,15 +55,18 @@
</template>
<template v-slot:body-cell-optioned="props">
<q-td :props="props" style="width:200px;">
<q-btn flat size="xs" icon="edit" color="accent" style="font-weight:400" @click="EditQuestion(props.row)" label="编辑" />
<q-btn flat size="xs" icon="edit" color="accent" style="font-weight:400" @click="EditQuestion(props.row)"
label="编辑" />
<q-btn flat size="xs" icon="edit" color="accent" style="font-weight:400" @click="goQuestionList(props.row)"
label="管理题目" />
<q-btn flat size="xs" icon="edit" color="negative" style="font-weight:400" @click="deleteQuestionBank(props.row)" label="删除" />
<q-btn flat size="xs" icon="edit" color="negative" style="font-weight:400"
@click="deleteQuestionBank(props.row)" label="删除" />
</q-btn>
</q-td>
</template>
</q-table>
<questionbank-form v-if="isShowQuestionBankForm" :questionBankObj="questionBankObj" @close="closeQuestionBank" @success="refreshQuestion">
<questionbank-form v-if="isShowQuestionBankForm" :questionBankObj="questionBankObj" @close="closeQuestionBank"
@success="refreshQuestion">
</questionbank-form>
</div>
</div>
......@@ -93,20 +95,25 @@
},
loading: false,
isShowQuestionBankForm: false,
questionBankObj:null, //传入参数
questionBankObj: null, //传入参数
columns: [{
name: 'BankId',
label: '号',
field: 'BankId',
name: 'RowNum',
label: '号',
field: 'RowNum',
align: 'left'
},
{
name: 'BankNo',
label: '题库序号',
field: 'BankNo',
align: 'left',
},
{
name: 'BankName',
label: '题库名称',
field: 'BankName',
align: 'left',
},
{
name: 'CreateByName',
label: '创建人',
......@@ -159,13 +166,13 @@
this.getQuestionBankPage();
},
//编辑题库
EditQuestion(obj){
if(obj){
EditQuestion(obj) {
if (obj) {
this.questionBankObj = obj
}else{
} else {
this.questionBankObj = null
}
this.isShowQuestionBankForm=true
this.isShowQuestionBankForm = true
},
//删除问题
deleteQuestionBank(item) {
......
......@@ -108,9 +108,15 @@
label: '类型',
align: 'left'
},
{
name:'DeductionHour',
label:'基础课时',
field:'DeductionHour',
align:'left'
},
{
name: 'CourseHour',
label: '课时',
label: '带班课时',
field: 'CourseHour',
align: 'left'
},
......@@ -138,6 +144,14 @@
field: 'TeacherName',
align: 'left'
},
{
name: 'DeductionHour',
field: 'DeductionHour',
required: true,
label: '基础课时',
align: 'left',
},
{
name: 'CourseHour',
field: 'CourseHour',
......
......@@ -42,6 +42,7 @@
}
._addChuNa_tit{color: gray;margin-bottom: 10px;}
._addChuNa_tit span{ color:#333333}
</style>
<template>
<div class='flexOne page_CompanyAccDetail'>
......
......@@ -63,7 +63,6 @@
font-size: 12px;
color: #c94052;
}
</style>
<template>
<div class='flexOne page_CompanyAccDetail'>
......
<style>
</style>
<template>
<div class="page-body">
<q-tabs style="margin-bottom:20px;" v-model="tabCheck" @input="tabChange()" narrow-indicator dense align="left"
class="text-primary">
<q-tab :ripple="false" name="first" label="规则设置" />
<q-tab :ripple="false" name="second" label="基础设置" />
<q-tab :ripple="false" name="third" label="提醒设置" />
<q-tab :ripple="false" name="fourth" label="分数规则" />
</q-tabs>
<ruleset-form v-if="tabCheck=='first'"></ruleset-form>
<baseset-form v-if="tabCheck=='second'"></baseset-form>
<remind-form v-if="tabCheck=='third'"></remind-form>
<score-form v-if="tabCheck=='fourth'"></score-form>
</div>
</template>
<script>
import rulesetForm from '../../components/okr/ruleset-form';
import basesetForm from '../../components/okr/baseset-form';
import remindForm from '../../components/okr/remind-form';
import scoreForm from '../../components/okr/score-form';
export default {
meta: {
title: "OKR设置"
},
components: {
rulesetForm,
basesetForm,
remindForm,
scoreForm
},
data() {
return {
tabCheck: 'first',
}
},
mounted() {
},
methods: {
tabChange() {
},
}
}
</script>
<style lang="sass">
@import url('~assets/css/table.sass')
</style>
......@@ -92,6 +92,11 @@ const routes = [{
component: () =>
import("pages/system/processSet.vue")
},
{
path: "/system/okrmanage", //OKR设置
component: () =>
import("pages/system/okrmanage.vue")
},
{
path: "/course/catagory", //课程分类
component: () =>
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment