feat:合并

This commit is contained in:
songwc
2022-11-01 15:37:51 +08:00
4 changed files with 373 additions and 230 deletions

View File

@@ -64,7 +64,6 @@
style="width: 424px" style="width: 424px"
v-model:value="time" v-model:value="time"
format="YYYY-MM-DD HH:mm:ss" format="YYYY-MM-DD HH:mm:ss"
@change="onChange"
:placeholder="[' 开始时间', ' 结束时间']" :placeholder="[' 开始时间', ' 结束时间']"
/> />
</div> </div>
@@ -76,7 +75,7 @@
<div class="textarea"> <div class="textarea">
<a-upload <a-upload
v-model:file-list="fileList" v-model:file-list="fileList"
name="avatar" name="file"
list-type="picture-card" list-type="picture-card"
class="avatar-uploader" class="avatar-uploader"
:show-upload-list="false" :show-upload-list="false"
@@ -107,29 +106,8 @@ import { reactive, toRefs, ref } from "vue";
import { useRouter } from "vue-router"; import { useRouter } from "vue-router";
import * as api from "../../api/indexEval"; import * as api from "../../api/indexEval";
import { message } from "ant-design-vue"; import { message } from "ant-design-vue";
// import { toDate } from "../../api/method"; import { toDate } from "../../api/method";
const router = useRouter(); const router = useRouter();
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);
},
});
function getBase64(img, callback) {
const reader = new FileReader();
reader.addEventListener('load', () => callback(reader.result));
reader.readAsDataURL(img);
}
export default { export default {
name: "AddEval", name: "AddEval",
// components: { // components: {
@@ -145,82 +123,116 @@ export default {
inputV1: "", inputV1: "",
inputV2: "", inputV2: "",
time: undefined, time: undefined,
endTime: undefined, endTimes : "",
startTime: undefined, startTimes: "",
picUrl: "",
tableData: [],
deletePathId: null, //删除路径id
editPathId: null, //修改路径id
currentPage: 1, //当前页
tableDataTotal: -1, //学习路径列表总数
pageSize: 10, //每页10条数据
}); });
const closeDrawer = () => { const closeDrawer = () => {
ctx.emit("update:addevalVisible", false); ctx.emit("update:addevalVisible", false);
state.inputV1 = ""; state.inputV1 = "";
state.inputV2 = ""; state.inputV2 = "";
state.time = undefined;
}; };
const afterVisibleChange = (bool) => { const afterVisibleChange = (bool) => {
console.log("state", bool); console.log("state", bool);
}; };
const onChange = () => {
state.endTime = state.time[0].$d.toString;
state.startTime = state.time[1].$d.toString;
}
//上传组件 //上传组件
function getBase64(img, callback) {
const reader = new FileReader();
reader.addEventListener('load', () => callback(reader.result));
reader.readAsDataURL(img);
}
const fileList = ref([]); const fileList = ref([]);
const loading = ref(false); const loading = ref(false);
const imageUrl = ref(''); const imageUrl = ref('');
const handleChange = info => { const handleChange = (info) => {
if (info.file.status === 'uploading') { if (info.file.status === 'uploading') {
loading.value = true; loading.value = true;
return; return;
} }
if (info.file.status === 'done') {
if (info.file.status === 'done') { console.log('上传图片返回的信息 %o', info)
// Get this url from response in real world. state.picUrl = info.file.response.data;
getBase64(info.file.originFileObj, base64Url => { // Get this url from response in real world.
imageUrl.value = base64Url; getBase64(info.file.originFileObj, (base64Url) => {
imageUrl.value = base64Url;
loading.value = false; loading.value = false;
}); });
} }
if (info.file.status === 'error') {
loading.value = false;
message.error('upload error');
}
};
if (info.file.status === 'error') { const beforeUpload = (file) => {
loading.value = false; const isJpgOrPng = file.type === 'image/jpeg' || file.type === 'image/png';
message.error('upload error'); if (!isJpgOrPng) {
} message.error('You can only upload JPG file!');
} }
const beforeUpload = file => { const isLt2M = file.size / 1024 / 1024 < 1;
const isJpgOrPng = file.type === 'image/jpeg' || file.type === 'image/png'; if (!isLt2M) {
message.error('Image must smaller than 1MB!');
}
return isJpgOrPng && isLt2M;
};
if (!isJpgOrPng) { // const getTableDate = (tableData) => {
message.error('You can only upload JPG file!'); // let data = tableData;
} // let array = [];
// data.map((value, index) => {
// let obj = {
// id: value.routerId,
// number: (state.currentPage - 1) * state.pageSize + index + 1,
// manager: value.name ? value.name : "-",
// state:
// value.status === 0
// ? "草稿"
// : value.status === 1
// ? "已发布"
// : value.status === -1
// ? "已停用"
// : "-",
// creater: value.createName ? value.createName : "-",
// pubtime: value.publishTime
// ? toDate(value.publishTime, "Y-M-D h:m:s")
// : "-",
// cretime: value.createTime
// ? toDate(value.createTime, "Y-M-D h:m:s")
// : "-",
// remark: value.remark ? value.remark : "-",
// };
// array.push(obj);
// });
// state.tableData = array;
// };
const isLt2M = file.size / 1024 / 1024 < 2;
if (!isLt2M) {
message.error('Image must smaller than 2MB!');
}
return isJpgOrPng && isLt2M;
}
// const fileUp = () => {
// let obj = {
// file
// }
// }
//创建测评信息 //创建测评信息
const createEvalText = () => { const createEvalText = () => {
if (!state.inputV1) return message.info("请输入测评名称"); if (!state.inputV1) return message.info("请输入测评名称");
console.log(state.time); if ( state.time != undefined) {
console.log(state.time[0]); state.endTimes = toDate(new Date(state.time[0].$d).getTime() / 1000, "Y-M-D")
console.log(state.time[0].$d.toString); state.startTimes = toDate(new Date(state.time[1].$d).getTime() / 1000, "Y-M-D")
console.log(state.time[1].$d.toString); }
let obj = { let obj = {
evaluationName: state.inputV1, evaluationName: state.inputV1,
createTime: "", createTime: "",
createUser: 0, createUser: 0,
evaluationEndTime: state.endTime, evaluationEndTime: state.endTimes,
evaluationFlag: "", evaluationFlag: "",
evaluationId: "", evaluationId: "",
evaluationPictureAddress: "", evaluationPictureAddress: state.picUrl,
evaluationStartTime: state.startTime, evaluationStartTime: state.startTimes,
evaluationTag: "", evaluationTag: "",
evaluationTypeId: 0, evaluationTypeId: 0,
evaluationTypeName: "", evaluationTypeName: "",
@@ -233,7 +245,6 @@ export default {
setTimeout(() => { setTimeout(() => {
console.log("创建成功", res); console.log("创建成功", res);
message.success("创建成功"); message.success("创建成功");
console.log(obj);
// state.createLoading = false; // state.createLoading = false;
router.push("/leveladd"); router.push("/leveladd");
// getLearnPath(); // getLearnPath();
@@ -245,13 +256,103 @@ export default {
}); });
}; };
// //获取学习路径列表
// const getEvalPath = () => {
// let obj = {
// pageNo: state.currentPage,
// pageSize: state.pageSize,
// };
// api
// .queryEvaluationDetailById(obj)
// .then((res) => {
// if (res.status === 200) {
// console.log("获取任务列表数据", res.data.data);
// let arr = res.data.data.rows;
// if (
// arr.length === 0 &&
// res.data.data.total > 0 &&
// state.currentPage > 1
// ) {
// state.currentPage = state.currentPage - 1;
// getEvalPath();
// }
// getTableDate(arr);
// state.tableDataTotal = Number(res.data.data.total);
// }
// })
// .catch((err) => {
// console.log("获取学习路径失败", err);
// });
// };
// //翻页 需要去pa里绑定 @change="changePagination"
// const changePagination = (page) => {
// state.currentPage = page;
// getEvalPath();
// // console.log("翻页", page, pageSize);
// };
// //删除评估
// const deleteEvalPath = () => {
// let obj = {
// routerId: state.deletePathId,
// type: -2,
// };
// api
// .deleteEvaluationById(obj)
// .then((res) => {
// console.log("删除成功", res);
// message.success("删除成功");
// // state.deleteModal = false;
// getEvalPath();
// })
// .catch((err) => {
// console.log("删除失败", err);
// });
// };
// //编辑评估
// const editEvalPath = () => {
// if (!state.pathName) return message.info("请输入路径图名称");
// // if (!state.organizationSelectName) return message.info("请选择归属组织");
// // state.createLoading = true;
// let obj = {
// routerId: state.editPathId,
// name: state.pathName,
// picUrl: "",
// remark: state.pathIntro,
// status: 0,
// };
// api
// .updateEvaluation(obj)
// .then((res) => {
// setTimeout(() => {
// console.log("修改成功", res);
// message.success("修改成功");
// // state.createLoading = false;
// // state.currentPage = 1;
// // state.out1 = false;
// // router.push("/leveladd");
// getEvalPath();
// }, 1000);
// })
// .catch((err) => {
// console.log("修改失败", err);
// // state.createLoading = false;
// });
// };
// onMounted(() => {
// // console.log("执行");
// getEvalPath();
// });
return { return {
...toRefs(state), ...toRefs(state),
afterVisibleChange, afterVisibleChange,
closeDrawer, closeDrawer,
rowSelection, //增删改查
createEvalText, createEvalText,
onChange, // getEvalPath,
// changePagination,
// deleteEvalPath,
// editEvalPath,
//上传组件 //上传组件
fileList, fileList,
loading, loading,

View File

@@ -2,7 +2,7 @@
<a-drawer <a-drawer
:visible="addinvistVisible" :visible="addinvistVisible"
class="drawerStyle addinvistDrawer" class="drawerStyle addinvistDrawer"
width="80%" width="70%"
title="添加评估" title="添加评估"
placement="right" placement="right"
@after-visible-change="afterVisibleChange" @after-visible-change="afterVisibleChange"
@@ -19,68 +19,50 @@
<div class="contentMain"> <div class="contentMain">
<div class="main_left"> <div class="main_left">
<div class="main_item"> <div class="main_item">
<div class="signbox"> <div class="fi_input">
<div class="sign">
<img
src="@/assets/images/coursewareManage/asterisk.png"
alt=""
/>
</div>
<span style="margin-right: 3px">测评名称</span>
</div>
<div class="btnbox">
<a-input <a-input
v-model:value="inputV1" v-model:value="inputV1"
style="width: 424px; height: 32px" style="width: 424px; height: 40px"
placeholder="请输入评名称" placeholder="请输入评名称"
maxlength="20" maxlength="20"
/> />
</div> </div>
</div> <div class="btns">
<div class="main_item"> <div class="search"></div>
<div class="signbox"> <div class="btnText">搜索</div>
<div class="sign">
<img
src="@/assets/images/coursewareManage/asterisk.png"
alt=""
/>
</div>
<span style="margin-right: 3px">选择考试</span>
</div> </div>
<div class="btnbox"> <div class="btnsn">
<a-select <div class="search"></div>
dropdownClassName="dropdown-style" <div class="btnText">重置</div>
style="width: 424px"
placeholder="请输入考试名称"
:options="options1"
allowClear
showSearch
/>
</div>
</div>
<div class="main_item">
<div class="signbox">
<span style="margin-right: 3px">有效期</span>
</div>
<div class="btnbox">
<a-range-picker
style="width: 424px"
:placeholder="[' 开始时间', ' 结束时间']"
/>
</div> </div>
</div> </div>
<div class="main_item2"> <div class="main_item2">
<div class="signbox"> <a-table
<span style="margin-right: 3px">活动说明</span> style="border: 1px solid #f2f6fe"
</div> :columns="tableDataFunc()"
<div class="textarea"> :data-source="tableData"
<a-textarea :loading="tableDataTotal === -1 ? true : false"
v-model:value="textV1" expandRowByClick="true"
placeholder="请输入评估说明" @expand="expandTable"
allow-clear :pagination="false"
maxlength="150" :row-selection="{
/> columnWidth: 30,
</div> selectedRowKeys: selectedRowKeys,
onChange: onSelectChange,
}"
/>
<div class="pa">
<a-pagination
showSizeChanger="true"
showQuickJumper="true"
hideOnSinglePage="true"
:pageSize="pageSize"
:current="currentPage"
:total="tableDataTotal"
class="pagination"
/>
</div>
</div> </div>
</div> </div>
</div> </div>
@@ -92,33 +74,11 @@
</a-drawer> </a-drawer>
</template> </template>
<script> <script>
import { reactive, toRefs, ref } from "vue"; import { reactive, toRefs} from "vue";
import { useRouter } from "vue-router"; import { useRouter } from "vue-router";
import * as api from "../../api/indexInvist"; import * as api from "../../api/indexInvist";
import { message } from "ant-design-vue"; import { message } from "ant-design-vue";
const router = useRouter(); const router = useRouter();
const options1 = ref([
{
value: "value1",
label: "请选择状态",
},
]);
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 { export default {
name: "AddInvist", name: "AddInvist",
// components: { // components: {
@@ -132,26 +92,103 @@ export default {
setup(props, ctx) { setup(props, ctx) {
const state = reactive({ const state = reactive({
inputV1: "", inputV1: "",
textV1: "", time: undefined,
tableData: [
{
key: 1,
name: "评估",
num: "2",
creator: "管理员",
time: "2022-07-21 14:30:25",
},
{
key: 2,
name: "评估",
num: "8",
creator: "管理员",
time: "2022-07-21 14:30:25",
},
{
key: 3,
name: "评估",
num: "5",
creator: "管理员",
time: "2022-07-21 14:30:25",
},
{
key: 4,
name: "评估",
num: "20",
creator: "管理员",
time: "2022-07-21 14:30:25",
},
],
}); });
const closeDrawer = () => { const closeDrawer = () => {
ctx.emit("update:addinvistVisible", false); ctx.emit("update:addinvistVisible", false);
state.inputV1 = ""; state.inputV1 = "";
state.textV1 = "";
}; };
const afterVisibleChange = (bool) => { const afterVisibleChange = (bool) => {
console.log("state", bool); console.log("state", bool);
}; };
const tableDataFunc = () => {
const columns = [
{
title: "名称",
dataIndex: "name",
// width: "30%",
key: "name",
width: '150px',
align: "left",
className: "classify",
scopedSlots: { customRender: "action" }, //引入的插槽
customRender: (text) => {
// console.log(text.record.checked1);
return (
<div class="racona">
<span> {text.record.name}</span>
{/**
<div class="img"></div>
<a-checkbox class="ch" checked={text.record.checkedd}>
{text.record.lei}
</a-checkbox>
*/}
</div>
);
},
},
{
title: "题数",
dataIndex: "num",
key: "num",
width: '80px',
align: "center",
},
{
title: "创建人",
dataIndex: "creator",
key: "creator",
width: '150px',
align: "center",
},
{
title: "创建时间",
dataIndex: "time",
key: "time",
width: '200px',
align: "center",
},
];
return columns;
};
//创建评估信息 //创建评估信息
const createInvist = () => { const createInvist = () => {
if (!state.inputV1) return message.info("请输入测评名称");
// if (!state.inputV2) return message.info("请选择测评");
// if (!state.organizationSelectName) return message.info("请选择归属组织");
// state.createLoading = true;
let obj = { let obj = {
appraiseName: state.inputV1, appraiseName: state.inputV1,
appraiseEndTime: "", appraiseEndTime: "",
appraiseExplain: state.textV1, appraiseExplain: "",
appraiseFlag: "", appraiseFlag: "",
appraiseId: 0, appraiseId: 0,
appraiseStartTime: "", appraiseStartTime: "",
@@ -183,8 +220,7 @@ export default {
...toRefs(state), ...toRefs(state),
afterVisibleChange, afterVisibleChange,
closeDrawer, closeDrawer,
rowSelection, tableDataFunc,
options1,
createInvist, createInvist,
}; };
}, },
@@ -215,84 +251,74 @@ export default {
justify-content: space-between; justify-content: space-between;
.main_left { .main_left {
padding-right: 30px; padding-right: 30px;
flex: 1;
border-right: 1px solid #e8e8e8;
.main_item { .main_item {
display: flex; display: flex;
align-items: center; align-items: center;
margin-bottom: 32px; margin-bottom: 32px;
.signbox { .fi_input{
width: 120px; margin-right: 20px;
}
.btns{
margin-right: 20px;
padding: 0px 26px 0px 26px;
height: 38px;
background: #409eff;
border-radius: 8px;
//border: 1px solid rgba(64, 158, 255, 1);
display: flex; display: flex;
justify-content: end;
align-items: center; align-items: center;
.sign { justify-content: center;
margin-right: 5px; margin-right: 14px;
flex-shrink: 0;
cursor: pointer;
.search {
width: 15px;
height: 17px;
background-image: url("../../assets/images/courseManage/search0.png");
background-size: 100% 100%;
}
.btnText {
font-size: 14px;
font-weight: 400;
color: #ffffff;
line-height: 36px;
margin-left: 5px;
} }
} }
.btnbox { .btnsn {
padding: 0px 26px 0px 26px;
height: 38px;
background: #ffffff;
border-radius: 8px;
border: 1px solid rgba(64, 158, 255, 1);
display: flex; display: flex;
flex: 1;
align-items: center; align-items: center;
.xkbtn { justify-content: center;
cursor: pointer; margin-right: 14px;
width: 130px; flex-shrink: 0;
height: 40px; cursor: pointer;
background: #388be1; .search {
border-radius: 8px; width: 16px;
border: 0; height: 18px;
margin-right: 8px; background-image: url("../../assets/images/courseManage/reset1.png");
color: #fff; background-size: 100% 100%;
}
.btnText {
font-size: 14px;
font-weight: 400;
color: #409eff;
line-height: 36px;
margin-left: 5px;
} }
} }
} }
.main_item2 { .main_item2 {
display: flex; .pa {
align-items: flex-start; width: 100%;
margin-bottom: 32px; margin:15px auto;
.signbox {
width: 120px;
display: flex; display: flex;
justify-content: end; justify-content: center;
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;
}
} }
} }
} }

View File

@@ -271,7 +271,8 @@
style="width: 17px; height: 18px; margin-right: 8px" style="width: 17px; height: 18px; margin-right: 8px"
src="../../assets/images/basicinfo/add.png" src="../../assets/images/basicinfo/add.png"
/> />
<span class="headerLeftText">新建面授课</span> <span v-if="ft_eidt" class="headerLeftText">编辑面授课</span>
<span v-else class="headerLeftText">新建面授课</span>
</div> </div>
<div style="margin-right: 57px; cursor: pointer"> <div style="margin-right: 57px; cursor: pointer">
<img <img
@@ -1022,7 +1023,8 @@
<div class="cst_main"> <div class="cst_main">
<div class="cstm_header"> <div class="cstm_header">
<div class="add_icon"></div> <div class="add_icon"></div>
<span>新建开课</span> <span v-if="kk_eidt" >编辑开课</span>
<span v-else >新建开课</span>
<div class="close_exit" @click="cstm_exit"></div> <div class="close_exit" @click="cstm_exit"></div>
</div> </div>
<div class="cstm_title"> <div class="cstm_title">
@@ -2247,6 +2249,7 @@ export default defineComponent({
valueE1: "", valueE1: "",
valueE2: "", valueE2: "",
//确定面授 //确定面授
ft_eidt:false,
qdms_inputV1: "", qdms_inputV1: "",
qdms_inputV2: "", qdms_inputV2: "",
qdms_inputV3: "", qdms_inputV3: "",
@@ -2259,6 +2262,7 @@ export default defineComponent({
gl_inputV1: "", gl_inputV1: "",
gl_inputV2: "", gl_inputV2: "",
//开课 //开课
kk_eidt: false,
kkinputV1: "", kkinputV1: "",
kkinputV2: "", kkinputV2: "",
//新建开课 //新建开课
@@ -2483,7 +2487,13 @@ export default defineComponent({
</div> </div>
</div> </div>
<div class="ops2"> <div class="ops2">
<div class="jc" style={{ width: "30px" }}> <div class="jc" style={{ width: "30px" }}
onClick={() => {
state.ft_hs = true;
state.ft_eidt = true;
}
}
>
编辑 编辑
</div> </div>
</div> </div>
@@ -2701,7 +2711,11 @@ export default defineComponent({
> >
签到 签到
</div> </div>
<div class="jc">编辑</div> <div class="jc"
onClick={() => {
state.cstm_hs = true;
state.kk_eidt = true;
}}>编辑</div>
<div <div
class="jc" class="jc"
onClick={() => { onClick={() => {
@@ -2944,6 +2958,7 @@ export default defineComponent({
}; };
const ft_exit = () => { const ft_exit = () => {
state.ft_hs = false; state.ft_hs = false;
state.ft_eidt = false;
state.hideshow = true; state.hideshow = true;
}; };
const om_exit = () => { const om_exit = () => {
@@ -2964,6 +2979,7 @@ export default defineComponent({
}; };
const cstm_exit = () => { const cstm_exit = () => {
state.cstm_hs = false; state.cstm_hs = false;
state.kk_eidt = false;
state.xjkkradioV1 = ""; state.xjkkradioV1 = "";
state.xjkkradioV2 = ""; state.xjkkradioV2 = "";
state.xjkkinputV1 = ""; state.xjkkinputV1 = "";

View File

@@ -1376,8 +1376,8 @@ export default {
.in { .in {
margin-left: 14px; margin-left: 14px;
flex: 1; flex: 1;
.ant-radio-wrapper { // .ant-radio-wrapper {
} // }
.ant-input-affix-wrapper { .ant-input-affix-wrapper {
width: 384px; width: 384px;
border-radius: 8px; border-radius: 8px;