Commit dcc471b9 authored by 罗超's avatar 罗超

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

parents 0581545d 2e25892d
import request from '../../utils/request'
/**
* 获取日语培训列表
*
*/
export function queryDutyFrequencyBySchoolIds(data) {
return request({
url: '/Duty/GetDutyFrequencyBySchoolIds',
method: 'post',
data
})
}
//获取排班计划列表数据
export function GetDutyPlanPage(data) {
return request({
url: '/DutyPlan/GetDutyPlanPage',
method: 'post',
data
})
}
//保存排课计划
export function SaveDutyPlan(data) {
return request({
url: '/DutyPlan/SaveDutyPlan',
method: 'post',
data
})
}
//获取排班计划信息
export function queryDutyPlanInfo(data) {
return request({
url: '/DutyPlan/GetDutyPlan',
method: 'post',
data
})
}
<template>
<q-dialog v-model="persistent" content-class="bg-grey-1" persistent transition-show="scale" transition-hide="scale">
<q-card style="width: 800px;max-width:900px;">
<q-card-section>
<div class="text-h6">{{objOption.Id==0?'新增排班计划':'修改排班计划'}}</div>
</q-card-section>
<q-card-section class="q-pt-none scroll" style="max-height: 70vh">
<div class="row wrap">
<q-input filled v-model="objOption.Date" class="col-6 q-pr-lg q-pb-lg" mask="date" label="日期">
<template v-slot:append>
<q-icon name="event" class="cursor-pointer">
<q-popup-proxy ref="qDateProxy1" transition-show="scale" transition-hide="scale">
<q-date v-model="objOption.Date" @input="() => $refs.qDateProxy1.hide()" />
</q-popup-proxy>
</q-icon>
</template>
</q-input>
<q-select filled stack-label option-value="SId" option-label="SName" v-model="objOption.School_Id"
ref="School_Id" :options="schoolList" label="所属校区" :dense="false" class="col-6 q-pb-lg" emit-value
map-options :rules="[val => !!val || '请选择所属校区']" @input="getDutyFrequencyList()" />
</div>
<div class="row wrap" style="margin:20px 0;">
<div class="col-6">
新增排班
<q-btn style="margin-left:30px;" size="10px" @click="addScheduPlan()" round color="primary"
icon="iconfont icon-img_haha" />
</div>
</div>
<div class="row wrap" v-for="(item,index) in objOption.PlanDetails" :key="index">
<div class="col-6">
<q-select filled stack-label option-value="Id" option-label="Name" v-model="item.Shift" :options="batchList"
label="班次" class="col-6 q-pr-lg q-pb-lg" emit-value map-options>
<template v-slot:option="{ itemProps, itemEvents, opt, selected, toggleOption }">
<q-item v-bind="itemProps" v-on="itemEvents">
<q-item-section>
<q-item-label>{{opt.Name}}{{opt.StartTime}}-{{opt.EndTime}}</q-item-label>
</q-item-section>
</q-item>
</template>
</q-select>
</div>
<div class="col-6" style="position:relative;">
<q-select filled stack-label option-value="Id" option-label="EmployeeName" v-model="item.DutyMan"
:options="EmployeeList" label="值班人员" class="col-6 q-pr-lg q-pb-lg" emit-value map-options />
<q-btn style="position:absolute;right:-5px;top:20px;" size="6px" @click="delStepPlan(index)" round
color="red" icon="iconfont icon-guanbi1" />
</div>
</div>
</q-card-section>
<q-separator />
<q-card-actions align="right" class="bg-white">
<q-btn label="取消" flat color="grey-10" style="font-weight:400 !important" @click="closeSaveForm" />
<q-btn label="立即提交" color="accent q-px-md" style="font-weight:400 !important" @click="savePlan" />
</q-card-actions>
</q-card>
</q-dialog>
</template>
<script>
import {
getSchoolDropdown
} from '../../api/school/index'
import {
queryDutyFrequencyBySchoolIds,
SaveDutyPlan,
queryDutyPlanInfo
} from '../../api/scheduling/schedu'
import {
queryEmployee //员工列表
} from '../../api/users/user'
export default {
components: {},
props: {
saveObj: {
type: Object,
default: null
}
},
data() {
return {
persistent: true,
objOption: {
Id: 0,
Date: '', //值班时间
School_Id: '', //校区
PlanDetails: [] //班次列表
},
optionTitle: "",
schoolList: [],
batchList: [], //班次列表
EmployeeList: [], //员工数据
}
},
created() {
this.getSchool();
this.Employee();
},
mounted() {
this.initObj()
},
methods: {
initObj() {
if (this.saveObj && this.saveObj.Id > 0) {
queryDutyPlanInfo({
Id: this.saveObj.Id
}).then(res => {
if (res.Code == 1) {
var tempData = res.Data;
this.objOption.Id = tempData.Id;
this.objOption.Date = tempData.Date;
this.objOption.School_Id = tempData.School_Id;
if (tempData.PlanDetails && tempData.PlanDetails.length > 0) {
this.objOption.PlanDetails = tempData.PlanDetails;
}
this.getDutyFrequencyList();
}
});
} else {
this.objOption.Id = 0;
this.objOption.Date = '';
this.objOption.School_Id = '';
this.objOption.PlanDetails = [];
}
},
//获取校区
getSchool() {
getSchoolDropdown({}).then(res => {
this.schoolList = res.Data;
this.$forceUpdate();
})
},
closeSaveForm() {
this.$emit('close')
this.persistent = false
},
//保存排班
savePlan() {
SaveDutyPlan(this.objOption).then(res => {
if (res.Code == 1) {
this.$q.notify({
icon: 'iconfont icon-chenggong',
color: 'accent',
timeout: 2000,
message: '数据保存成功!',
position: 'top'
})
this.$emit("success")
this.closeSaveForm()
} else {
this.$q.notify({
icon: 'iconfont icon-chenggong',
color: 'accent',
timeout: 2000,
message: res.Message,
position: 'top'
})
}
})
},
//点击新增排班计划
addScheduPlan() {
let obj = {
Id: 0,
PlanId: 0,
Shift: 0,
DutyMan: 0
}
this.objOption.PlanDetails.push(obj);
},
//删除
delStepPlan(index) {
this.objOption.PlanDetails.splice(index, 1);
},
//获取班次信息
getDutyFrequencyList() {
queryDutyFrequencyBySchoolIds({
SchoolIds: this.objOption.School_Id
}).then(res => {
if (res.Code == 1) {
this.batchList = res.Data;
}
console.log("batchList", this.batchList);
})
},
//获取员工列表
Employee() {
var qMsg = {
EmployeeName: ''
}
queryEmployee(qMsg).then(res => {
if (res.Code == 1) {
this.EmployeeList = res.Data;
}
})
},
},
}
</script>
<style>
</style>
......@@ -34,6 +34,8 @@
</q-btn>
<q-btn @click="changeMenu(2)" v-if="AccountType==2 || ispower==true" flat :color="chosenMenu==2?'primary':'blue-grey-14'" :class="[chosenMenu==2?'text-weight-bold':'']" label="备课管理">
</q-btn>
<q-btn flat @click="changeMenu(3)" label="我的排班计划"></q-btn>
</div>
<div v-if="chosenMenu==1" class="flex col" style="flex: 1">
<okr v-if="okrMenu==1"></okr>
......@@ -42,6 +44,9 @@
<div v-if="chosenMenu==2" class="col" style="height: 750px;overflow: auto">
<teachplan></teachplan>
</div>
<div v-if="chosenMenu==3" style="height: 750px;overflow: auto">
<mySchedule></mySchedule>
</div>
<!-- zk新增公告弹窗 -->
<notice-form v-if="isShowNotice" @fathergoBefore="fathergoBefore" @fathergoAfter="fathergoAfter" :seting-obj="noticeObj" @close="closeNoticeForm">
</notice-form>
......@@ -59,12 +64,15 @@
import okr from './okr/index'
import alignView from './okr/okr-align-view'
import noticeForm from '../components/course/notice-form'
import mySchedule from './scheduling/mySchedule'
export default {
components:{
teachplan,
okr,
alignView,
noticeForm
noticeForm,
mySchedule
},
name: 'PageIndex',
data(){
......
......@@ -183,7 +183,8 @@
</div>
</div>
</div>
<q-btn color="accent" size="sm" class="q-mr-md marginl-15 margint-15" label="提交" @click="saveOrderInfo()" :loading="Dloading" v-if="AccountType==false&&data.IsEditSummary<=0"/>
<q-btn color="accent" size="sm" class="q-mr-md marginl-15 margint-15" label="提交" @click="saveOrderInfo()" :loading="Dloading"
v-if="(AccountType==false&&data.IsEditSummary<=0)&&isUpData"/>
</div>
......@@ -288,7 +289,8 @@
},
Score:0,
nowDate:'', //现在时间
isCanEdit:false
isCanEdit:false,
isUpData:true
}
},
created(){
......@@ -331,12 +333,15 @@
if (res.Code == 1) {
this.data = res.Data;
this.plmsg.TeacherId = res.Data.UpdateBy;
var beginTimes =this.nowDate.replace(/-/g,"/");
var endTimes =this.data.ClassEndTime.replace(/-/g,"/");
var beginTimes =this.nowDate.replace(/-/g,"/"); //当前
var endTimes =this.data.ClassEndTime.replace(/-/g,"/"); //结束
var a =(Date.parse(endTimes)-Date.parse(beginTimes))/3600/1000;
if(a<0){
this.isCanEdit=true; //可以编辑
}
if(a>0){
this.isUpData=false;
}
}
})
},
......
<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="resetSearch" clearable standout="bg-primary text-white" v-model="msg.RoomName" label="教室名称"
@clear="resetSearch" maxlength="30" />
</div>
</div> -->
</div>
<div class="page-content">
<q-table :pagination="msg" :loading="loading" no-data-label="暂无相关数据" flat
class="sticky-column-table" separator="none" title="我的排班计划" :data="dataList"
:columns="columns" row-key="name">
<!-- <template v-slot:top="props">
<div class="col-2 q-table__title">教室信息</div>
<q-space />
<div class="page-option">
<q-btn color="accent" size="sm" icon="add" label="新增教室" @click="EditClassRoom(null)" />
</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">
<div>
<q-btn flat size="xs" icon="edit" color="accent" style="font-weight:400" label="开始值班"
@click="StartSchedule(props.row)" />
</div>
</q-td>
</template>
</q-table>
</div>
</div>
</template>
<script>
// import {
// queryClassRoomPage,
// } from '../../api/school/index'
export default {
meta: {
title: "我的排班计划"
},
components: {
},
data() {
return {
currentUrl: "",
columns: [{
name: 'RoomName',
label: '日期',
align: 'left',
field: 'RoomName',
},
{
name: 'SchoolName',
label: '校区',
field: 'SchoolName',
align: 'left'
},
{
name: 'StatusStr',
label: '时间(班次)',
align: 'left',
field: 'StatusStr'
},
{
name: 'UpdateByName',
label: '任务清单',
align: 'left',
field: 'UpdateByName'
},
{
name: 'UpdateTimeStr',
label: '接班对象',
align: 'left',
field: 'UpdateTimeStr'
},
{
name: 'UpdateTimeStr',
label: '交班对象',
align: 'left',
field: 'UpdateTimeStr'
},
{
name: 'UpdateTimeStr',
label: '排班人',
align: 'left',
field: 'UpdateTimeStr'
},
{
name: 'optioned',
label: '操作',
field: 'RoomId'
}
],
dataList: [],
loading: true,
msg: {
pageIndex: 1,
pageSize: 12,
rowsPerPage: 12,
RoomName: "",
School_Id: 0, //校区编号
Status: '-1', //状态
},
pageCount: 0,
}
},
created() {
//this.getSchool();
},
mounted() {
},
methods: {
//获取校区列表
getSchool() {
getSchoolDropdown({}).then(res => {
if (res.Code == 1) {
}
})
},
//分页改变
changePage(val) {
this.msg.pageIndex = val;
this.getClassRoomPage();
},
//开始值班
StartSchedule(){
}
},
}
</script>
<style lang="sass">
@import url('~assets/css/table.sass')
</style>
<template>
<div>
123
</div>
</template>
\ No newline at end of file
<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="resetSearch" clearable standout="bg-primary text-white" v-model="msg.RoomName" label="教室名称"
@clear="resetSearch" maxlength="30" />
</div>
</div> -->
</div>
<div class="page-content">
<q-table :pagination="msg" :loading="loading" no-data-label="暂无相关数据" flat class="sticky-column-table"
separator="none" title="排班计划" :data="dataList" :columns="columns" row-key="name">
<template v-slot:top="props">
<div class="col-2 q-table__title">排班计划</div>
<q-space />
<div class="page-option">
<q-btn color="accent" size="sm" icon="add" label="新增排班计划" @click="EditSchedu(null)" />
</div>
</template>
<template v-slot:body="props">
<q-tr :props="props">
<template v-for="col in props.cols">
<q-td v-if="col.name=='PlanDate'">
{{col.value}}
</q-td>
<q-td v-if="col.name=='SchoolName'">
{{col.value}}
</q-td>
<q-td v-if="col.name == 'PlanDetails'" style="padding-right:0px">
<div v-for="item in col.value">
<div class="border-bottom" style="padding-left: 16px;padding-right: 16px">
{{item.ShiftName}}
</div>
</div>
</q-td>
<q-td v-if="col.name == 'StartTime'" style="padding-right:0px">
<div v-for="item in col.value">
<div class="border-bottom" style="padding-left: 16px;padding-right: 16px">
{{item.StartTime}} - {{item.EndTime}}
</div>
</div>
</q-td>
<q-td v-if="col.name == 'DutyManName'" style="padding-right:0px">
<div v-for="item in col.value">
<div class="border-bottom" style="padding-left: 16px;padding-right: 16px">
{{item.DutyManName}}
</div>
</div>
</q-td>
<q-td v-if="col.name == 'PlanId'" style="padding-right:0px">
<div v-for="item in col.value">
<div class="border-bottom" style="padding-left: 16px;padding-right: 16px">
{{getStatus(props,item)}}
</div>
</div>
</q-td>
<q-td v-else-if="col.name == 'Id'" style="width:200px;">
<q-btn flat size="xs" icon="edit" style="font-weight:400;" color="edit" class="q-mr-xs" label="修改"
 @click="EditSchedu(props.row)"   />
<q-btn flat size="xs" icon="delete" style="font-weight:400;" color="negative" class="q-mr-xs" label="删除"
 @click="" />
<q-btn flat size="xs" icon="iconfont icon-View" style="font-weight:400;" class="q-mr-xs" label="查看"  @click=""   />
</q-td>
</template>
</q-tr>
</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>
</q-table>
<schedul-form v-if="isShowSchedu" :save-obj="scheduOption" @close="closeScheduForm" @success="refreshPage">
</schedul-form>
</div>
</div>
</template>
<script>
import {
GetDutyPlanPage,
} from '../../api/scheduling/schedu'
import schedulForm from '../../components/schedul/schedul-form'
export default {
meta: {
title: "排班计划"
},
components: {
schedulForm
},
data() {
return {
columns: [{
name: 'PlanDate',
label: '日期',
align: 'left',
field: 'PlanDate',
},
{
name: 'SchoolName',
label: '校区',
field: 'SchoolName',
align: 'left'
},
{
name: 'PlanDetails',
label: '班次',
align: 'left',
field: 'ShiftName',
field: row => row.PlanDetails
},
{
name: 'StartTime',
label: '值班时间',
align: 'left',
field: 'StartTime',
field: row => row.PlanDetails
},
{
name: 'DutyManName',
label: '值班人员',
align: 'left',
field: 'DutyManName',
field: row => row.PlanDetails
},
{
name: 'PlanId',
label: '状态',
align: 'left',
field: 'PlanId',
field: row => row.PlanDetails
},
{
name: 'Id',
label: '操作',
field: 'Id'
}
],
dataList: [],
loading: false,
msg: {
pageIndex: 1,
pageSize: 12,
rowsPerPage: 12,
},
isShowSchedu: false,
scheduOption: null,
pageCount: 0,
}
},
created() {
this.getList();
},
mounted() {},
methods: {
//获取校区列表
getList() {
GetDutyPlanPage(this.msg).then(res => {
if (res.Code == 1) {
console.log(res, '列表数据');
this.dataList = res.Data.PageData;
}
})
},
//分页改变
changePage(val) {
this.msg.pageIndex = val;
this.getClassRoomPage();
},
//新增修改值班计划
EditSchedu(obj) {
if (obj) {
this.scheduOption = obj;
} else {
this.scheduOption = null;
}
this.isShowSchedu = true;
},
//关闭新增修改弹窗
closeScheduForm() {
this.isShowSchedu = false;
},
//刷新页面
refreshPage() {
// if (!this.classRoomOption) {
// this.msg.pageIndex = 1;
// this.msg.RoomName = "";
// this.msg.School_Id = 0;
// }
// this.getClassRoomPage()
},
getStatus(props,obj){
console.log(props,'props');
console.log(obj,'objjjj');
}
},
}
</script>
<style scoped>
.border-bottom {
border-bottom: 1px dashed #EEE;
padding-bottom: 5px;
margin-bottom: 5px;
}
</style>
<style lang="sass">
@import url('~assets/css/table.sass')
</style>
......@@ -667,11 +667,21 @@ const routes = [{
component: () =>
import("pages/studyAbroad/studyProAudit.vue")
},
{
path: "/scheduling/schedulingPlan", //排班计划
component: () =>
import("pages/scheduling/schedulingPlan.vue")
},
{
path: "/scheduling/schedulDetail", //我的工作计划排班详情
component: () =>
import("pages/scheduling/schedulDetail.vue")
},
{
path: "/test", //API测试
component: () =>
import("pages/test.vue")
},
}
]
},
// Always leave this as last one,
......
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