Files
fe-manage/src/components/drawers/AddHomework.vue
2022-11-02 20:23:32 +08:00

440 lines
12 KiB
Vue
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
<template>
<a-drawer
:visible="addhomeworkVisible"
class="drawerStyle addhomeworkDrawer"
width="80%"
placement="right"
@after-visible-change="afterVisibleChange"
>
<div class="drawerMain">
<div class="header">
<div class="headerTitle">{{workId ? '编辑':'添加' }}作业</div>
<img
style="width: 29px; height: 29px; cursor: pointer"
src="../../assets/images/basicinfo/close.png"
@click="closeDrawer"
/>
</div>
<a-form
ref="formRef"
name="custom-validation"
:model="formState"
:rules="rules"
v-bind="layout"
@finish="handleFinish"
@validate="handleValidate"
@finishFailed="handleFinishFailed"
>
<div class="contentMain">
<div class="main_left">
<div class="main_item">
<div class="btnbox">
<a-form-item has-feedback label="作业名称" name="workName">
<a-input v-model:value="formState.workName"
style="width: 424px; height: 32px;margin-left: 35px;"
placeholder="请输入作业名称"
autocomplete="off" />
</a-form-item>
</div>
</div>
<div class="main_item2">
<a-form-item has-feedback label="作业要求" name="workRequirement">
<a-textarea
v-model:value="formState.workRequirement"
placeholder="请输入作业要求"
autocomplete="off"
allow-clear
style="margin-left: 35px"
maxlength="150"
/>
</a-form-item>
</div>
<div class="main_item">
<div class="btnbox">
<a-form-item has-feedback label="提交时间" name="choosedTime">
<a-range-picker
style="width: 424px;margin-left: 35px;"
v-model:value="formState.choosedTime"
format="YYYY-MM-DD"
:placeholder="[' 开始时间', ' 结束时间']"
/>
</a-form-item>
</div>
</div>
<div class="main_item">
<div class="signbox">
<div class="sign">
<img
src="@/assets/images/coursewareManage/enclosure.png"
alt=""
/>
</div>
<span style="margin-right: 3px">附件</span>
</div>
<div class="btnbox">
<a-upload
v-model:file-list="fileList"
name="file"
action="/api/file/upload"
@change="handleChange"
>
<button class="xkbtn" type="button">上传附件</button>
</a-upload>
</div>
</div>
<div class="main_item" style="margin-top:-25px;">
<div class="signbox">
</div>
<div class="btnbox">
<span style="color:#999999;">支持pdf.ppt.pptx.doc.docx.xls.xlsx.jpeg.png.gif.zip</span>
</div>
</div>
</div>
</div>
<div class="main_btns">
<a-button class="btn1" @click="closeDrawer">取消</a-button>
<a-button class="btn2" html-type="submit">确定</a-button>
</div>
</a-form>
</div>
</a-drawer>
</template>
<script>
import { reactive, ref } from "vue";
import {message} from"ant-design-vue";
import { createWorkTask, queryWorkDetailById, updateWorkTaskUsing} from "@/api/indexWork";
import dayjs from 'dayjs';
const rowSelection = ref({
checkStrictly: false,
onChange: (selectedRowKeys, selectedRows) => {
console.log(
`selectedRowKeys: ${selectedRowKeys}`,
"selectedRows: ",
selectedRows
);
},
onSelect: (record, selected, selectedRows) => {
console.log(record, selected, selectedRows);
},
onSelectAll: (selected, selectedRows, changeRows) => {
console.log(selected, selectedRows, changeRows);
},
});
export default {
name: "AddHomework",
// components: {
// },
props: {
addhomeworkVisible: {
type: Boolean,
default: false,
},
workId: {
type: Number,
default: 0,
}
},
setup(props, ctx) {
const formState = reactive({
workName: '',
workRequirement: '',
choosedTime: '',
});
const formRef = ref();
let checkWorkName = async (_rule, value) => {
if (!value) {
return Promise.reject('请输入作业名称');
}
};
let checkWorkRequirement = async (_rule, value) => {
if (!value) {
return Promise.reject('请输入作业要求');
}
};
let checkTime = async (_rule, value) => {
if (!value.length) {
return Promise.reject('请选择时间');
}
};
const rules = {
workName: [{
required: true,
validator: checkWorkName,
trigger: 'change',
}],
workRequirement: [{
required: true,
validator: checkWorkRequirement,
trigger: 'change',
}],
choosedTime: [{
required: true,
validator: checkTime,
trigger: 'change',
}],
};
// const layout = {
// labelCol: {
// span: 4,
// },
// wrapperCol: {
// span: 14,
// },
// };
const handleFinish = values => {
console.log(values);
updateWork(props.workId)
};
const handleFinishFailed = errors => {
console.log(errors);
// message.error("handleFinishFailed");
};
const resetForm = () => {
formRef.value.resetFields();
};
const handleValidate = (...args) => {
console.log(args);
};
const handleChange = info => {
if (info.file.status !== 'uploading') {
console.log(info.file, info.fileList);
}
if (info.file.status === 'done') {
message.success(`${info.file.name} 文件上传成功`);
} else if (info.file.status === 'error') {
message.error(`${info.file.name} 文件上传失败.`);
}
};
const fileList = ref([]);
const closeDrawer = () => {
resetForm();
fileList.value = [];
formState.choosedTime = '';
ctx.emit("update:addhomeworkVisible", false);
};
const afterVisibleChange = (bool) => {
if(props.addhomeworkVisible && props.workId){
queryWork({workId: props.workId})
}
console.log("state", bool);
};
const queryWork = (data) => {
queryWorkDetailById(data).then((res) => {
console.log(dayjs(res.data.data.submitStartTime).format("YYYY-MM-DD"));
formState.workName = res.data.data.workName;
formState.workRequirement = res.data.data.workRequirement;
formState.choosedTime=[dayjs(res.data.data.submitStartTime,"YYYY-MM-DD"),dayjs(res.data.data.submitEndTime,"YYYY-MM-DD")]
console.log(res);
}).catch(() => {
message.error(`查询失败`)
})
};
const updateWork = (id) => {
let obj = {
"createTime": "",
"createUser": 0,
"submitEndTime": dayjs(formState.choosedTime[1]).format("YYYY-MM-DD"),
"submitStartTime": dayjs(formState.choosedTime[0]).format("YYYY-MM-DD"),
"updateTime": "",
"updateUser": 0,
"workEnclosureAddress": "",
"workFlag": "",
"workId": id || 0,
"workName": formState.workName,
"workRequirement": formState.workRequirement,
"workTag": ""
}
if(id) {
updateWorkTaskUsing(obj).then((res) => {
console.log(res);
message.success(`编辑成功`)
closeDrawer();
}).catch((err) => {
message.error(`编辑失败${err}`)
})
} else {
createWorkTask(obj).then((res)=>{
message.success(`添加成功${res}`)
closeDrawer();
}).catch((err)=>{
message.error(`添加失败${err}`)
})
}
};
return {
afterVisibleChange,
closeDrawer,
rowSelection,
handleChange,
fileList,
formState,
handleFinish,
handleFinishFailed,
resetForm,
handleValidate,
formRef,
// layout,
rules,
queryWork,
updateWork,
};
},
};
</script>
<style lang="scss">
.ant-table-striped :deep(.table-striped) td {
background-color: #fafafa !important;
}
.addhomeworkDrawer {
.drawerMain {
.header {
height: 73px;
border-bottom: 1px solid #e8e8e8;
display: flex;
justify-content: space-between;
align-items: center;
flex-shrink: 0;
.headerTitle {
font-size: 18px;
font-weight: 600;
color: #333333;
line-height: 25px;
margin-left: 24px;
}
}
.contentMain {
display: flex;
justify-content: space-between;
.main_left {
padding-right: 30px;
flex: 1;
border-right: 1px solid #e8e8e8;
.main_item {
display: flex;
align-items: center;
margin-bottom: 32px;
.signbox {
width: 120px;
display: flex;
justify-content: end;
align-items: center;
.sign {
margin-right: 5px;
}
}
.btnbox {
display: flex;
flex: 1;
align-items: center;
.xkbtn {
cursor: pointer;
width: 130px;
height: 40px;
background: #388be1;
border-radius: 8px;
border: 0;
margin-right: 8px;
color: #fff;
}
}
}
.main_item2 {
display: flex;
align-items: flex-start;
margin-bottom: 32px;
.signbox {
width: 120px;
display: flex;
justify-content: end;
align-items: center;
.sign {
margin-right: 5px;
}
}
.kqszbox {
.qdqtbox {
margin-left: 56px;
}
.setbox {
display: flex;
flex-wrap: wrap;
margin-top: 10px;
margin-bottom: 24px;
.timerbox {
margin-top: 6px;
margin-right: 32px;
display: flex;
align-items: center;
flex-wrap: nowrap;
}
}
}
.btnbox2 {
display: flex;
flex-direction: column;
justify-content: flex-start;
.xkbtn {
cursor: pointer;
width: 130px;
height: 40px;
background: #388be1;
border-radius: 8px;
border: 0;
margin-right: 16px 8px 32px 0;
color: #fff;
margin-top: 16px;
margin-bottom: 60px;
}
}
}
}
}
.main_btns {
position: absolute;
height: 72px;
width: 100%;
bottom: 0;
left: 0;
display: flex;
align-items: center;
justify-content: center;
box-shadow: 0px 1px 35px 0px rgba(118, 136, 166, 0.16);
.btn1 {
width: 100px;
height: 40px;
border: 1px solid #4ea6ff;
border-radius: 8px;
color: #4ea6ff;
background-color: #fff;
cursor: pointer;
}
.btn2 {
cursor: pointer;
width: 100px;
height: 40px;
background: #4ea6ff;
border-radius: 8px;
border: 0;
margin-left: 15px;
color: #fff;
}
}
}
}
</style>