feat:合并

This commit is contained in:
lixg
2022-12-10 15:55:09 +08:00
6 changed files with 218 additions and 223 deletions

View File

@@ -24,7 +24,7 @@
<div class="file_img"></div>
<div class="file_detail">
<div class="file_name">
<span style="color: #6f6f6fwidth:200px;display:block;overflow:hidden;white-space:nowrap;text-overflow:ellipsis;">
<span style="color: #6f6f6f;width:200px;display:block;overflow:hidden;white-space:nowrap;text-overflow:ellipsis;">
{{ item.name.indexOf('-')!==-1?item.name.slice(0,item.name.indexOf('-')) + item.name.slice(item.name.indexOf('.')) :item.name }}
</span>
</div>

View File

@@ -8,7 +8,6 @@
v-model:value="managerArray"
:placeholder="placeholder"
:filterOption="false"
style="width: 440px;"
:options="isOpen?options:selectOptions"
allowClear
showSearch
@@ -20,6 +19,7 @@
@change="change"
@blur="blur"
:show-arrow="false"
style="width: 100%"
>
<template v-if="loading" #notFoundContent>
<a-spin size="small"/>

View File

@@ -192,10 +192,11 @@
<a-radio-group v-model:value="valueE1">
<div class="bc_box">
<div class="bc_boxl">
<div class="ol_checkbox">
<div class="ol_checkbox" @click="expectOnline">
<a-radio
v-model:checked="checked"
:value="1"
disabled="true"
@click="bs_hShow"
>
线上
@@ -1815,7 +1816,7 @@
style="width: 440px; height: 40px; border-radius: 8px"
placeholder="请输入详细地点"
/>
<div class="inp_num">
<div class="inp_num" style="right:164px;">
<span style="color: #c7cbd2">{{ xjkkinputV2.length }}/50</span>
</div>
</div>
@@ -4286,6 +4287,11 @@ export default defineComponent({
state.valueE1 = "";
}
};
// 弹框提示敬请期待
const expectOnline = () => {
message.destroy()
message.success("功能正在开发中,敬请期待。")
}
//新建面授课
const createft = () => {
if (!state.xzinputV1) {
@@ -5402,6 +5408,7 @@ export default defineComponent({
of_exit,
hideShow,
bs_hShow,
expectOnline,
createft,
ft_exit,
ft_exit_1,
@@ -5847,7 +5854,8 @@ export default defineComponent({
.createschooltime {
z-index: 999;
width: 679px;
width: 879px;
height: 740px;
background: #ffffff;
box-shadow: 0px 1px 35px 0px rgba(118, 136, 166, 0.21);
position: absolute;
@@ -5867,7 +5875,7 @@ export default defineComponent({
.cst_main {
width: 100%;
max-height: 600px;
max-height: 700px;
overflow-y: auto;
position: relative;

View File

@@ -114,7 +114,18 @@
<span style="margin-right: 14px">封面图</span>
</div>
<div class="item_inp">
<a-select
<div style="width:440px;height:70px;display: flex;justify-content: flex-start;align-items: center;">
<img
v-for="(item, index) in optionsUrl"
:key="index"
class="choiceoptionurl"
:style="item.value==feng_mian_1?'border:3px solid rgb(78, 166, 255);':''"
:src="item.value"
:alt="item.label"
@click="choicePic(item.value)"
/>
</div>
<!-- <a-select
:getPopupContainer="
(triggerNode) => {
return triggerNode.parentNode || document.body;
@@ -127,11 +138,12 @@
:options="optionsUrl"
allowClear
showSearch
/>
/> -->
<img
class="i_upload_img"
v-if="feng_mian_1"
:src="feng_mian_1"
style="width:220px;height:120px;border-radius: 8px;"
alt="avatar"
/>
<div class="i_bottom">
@@ -168,26 +180,6 @@
</div>
</div>
</div>
<div class="mbl_items">
<div class="item_nam">
<span style="margin-right: 14px">课程价值</span>
</div>
<div class="item_inp">
<div class="i1_input">
<a-input
v-model:value="qdms_inputV3"
maxlength="200"
style="width: 440px; height: 40px; border-radius: 8px"
placeholder="请输入课程价值"
/>
<div class="inp_num">
<span style="color: #c7cbd2">
{{ qdms_inputV3.length }}/200
</span>
</div>
</div>
</div>
</div>
<div class="mbl_items">
<div class="item_nam">
<div class="asterisk_icon">
@@ -217,6 +209,26 @@
</div>
</div>
</div>
<div class="mbl_items">
<div class="item_nam" style="margin-bottom:110px;">
<span style="margin-right: 14px">课程价值</span>
</div>
<div class="item_inp">
<div class="i1_input">
<a-textarea
v-model:value="qdms_inputV3"
maxlength="200"
style="width: 440px; height: 140px; border-radius: 8px"
placeholder="请输入课程价值"
/>
<div class="inp_num" style="top:110px;">
<span style="color: #c7cbd2;">
{{ qdms_inputV3.length }}/200
</span>
</div>
</div>
</div>
</div>
<div class="mbl_items">
<div class="item_nam">
<span style="margin-right: 14px">场景</span>
@@ -248,7 +260,7 @@
<a-input
v-model:value="tags_val_single"
style="width: 440px; height: 40px; border-radius: 8px"
placeholder="请输入按回车键创建成功"
placeholder="请输入内容标签按回车键添加内容标签,可添加多个内容标签。"
@pressEnter="handleTagChange"
/>
<div class="tag-content">
@@ -266,7 +278,7 @@
</div>
<div class="mb_right">
<div class="mbl_items">
<div class="item_nam">
<div class="item_nam" style="margin-top:5px;">
<div class="asterisk_icon">
<img
src="@/assets/images/coursewareManage/asterisk.png"
@@ -510,6 +522,11 @@ export default defineComponent({
});
// 富文本 eeeeeeeeeeeeee
// 点击图片选择图片
const choicePic = (value) => {
state.feng_mian_1 = value;
}
//获取分类、场景、封面图、-----------字典配置-------------------------------
const optionsUrl = ref([]);
const options2 = ref([]);
@@ -749,6 +766,7 @@ export default defineComponent({
toolbarConfig,
editorConfig,
handleCreated,
choicePic
};
},
});
@@ -1151,5 +1169,12 @@ export default defineComponent({
.statusJuJue {
margin-bottom: 20px;
}
.choiceoptionurl {
width:60px;
height:60px;
margin-right: 10px;
border-radius: 8px;
}
}
</style>

View File

@@ -3,13 +3,13 @@
<div class="projectAdd">
<div class="header">
<span class="title"
>{{ projectInfo.parentId ? "编辑" : "创建" }}项目</span
>{{ projectInfo.parentId ? "编辑" : "创建" }}项目</span
>
<div
@click="backPage"
style="cursor: pointer"
to="/projectmanage"
class="goback"
@click="backPage"
style="cursor: pointer"
to="/projectmanage"
class="goback"
>
<span class="return"></span><span class="returntext">返回</span>
</div>
@@ -19,8 +19,8 @@
<div class="name" v-if="projectInfo.parentName">
<div class="namebox">
<img
class="nameimg"
src="../../assets/images/basicinfo/asterisk.png"
class="nameimg"
src="../../assets/images/basicinfo/asterisk.png"
/>
<div class="inname">项目归属</div>
</div>
@@ -33,182 +33,117 @@
<div class="name">
<div class="namebox">
<img
class="nameimg"
src="../../assets/images/basicinfo/asterisk.png"
class="nameimg"
src="../../assets/images/basicinfo/asterisk.png"
/>
<div class="inname">项目名称</div>
</div>
<div class="in">
<a-input
v-model:value="projectInfo.name"
placeholder="请输入项目名称"
show-count
:maxlength="30"
:disabled="viewDetail ? true : false"
v-model:value="projectInfo.name"
placeholder="请输入项目名称"
show-count
:maxlength="30"
:disabled="viewDetail ? true : false"
/>
</div>
</div>
<div class="name">
<div class="namebox">
<img
class="nameimg"
src="../../assets/images/basicinfo/asterisk.png"
/>
<div class="inname">分类</div>
</div>
<div class="in select">
<ProjectClass v-model:value="projectInfo.category"></ProjectClass>
</div>
</div>
<div class="name flex-top">
<div class="namebox" style="margin-top: 10px">
<img
class="nameimg"
src="../../assets/images/basicinfo/asterisk.png"
class="nameimg"
src="../../assets/images/basicinfo/asterisk.png"
/>
<div class="inname">封面图</div>
</div>
<div class="in select" style="flex: 1">
<a-select
:getPopupContainer="
(triggerNode) => {
return triggerNode.parentNode || document.body;
}
"
v-model:value="picUrlName"
dropdownClassName="dropdown-style"
style="width: 440px"
placeholder="请选择"
:options="projectPic"
@change="handleChangeSelect"
allowClear
></a-select>
<img
style="
<div class="in select" style="flex: 1; display: flex">
<div
:class="`box ${projectInfo.picUrl === src ? 'active' : ''}`"
style="
width: 100px;
height: 100px;
margin-top: 20px;
border-radius: 8px;
border-radius: 5px;
cursor: pointer;
position: relative;
overflow: hidden;
"
v-if="projectInfo.picUrl"
:src="projectInfo.picUrl"
v-for="(src, index) in projectPic"
:key="index"
@click="() => (projectInfo.picUrl = src.value)"
>
<img
style="
width: 100px;
height: 100px;
margin-bottom: 4px;
margin-right: 4px;
"
:src="src.value"
alt="avatar"
/>
<div class="i_bottom">
<span style="color: #999ba3">
高宽比为16:9 (:800*450) png或jpg图片
</span>
/>
</div>
</div>
</div>
<div class="name">
<div class="namebox">
<img
class="nameimg"
src="../../assets/images/basicinfo/asterisk.png"
class="nameimg"
src="../../assets/images/basicinfo/asterisk.png"
/>
<div class="inname">项目时间</div>
</div>
<div class="in">
<a-range-picker
show-time
separator="至"
:placeholder="[' 开始时间', ' 结束时间']"
v-model:value="projectInfo.rangeTime"
style="width: 100%; height: 40px; border-radius: 5px"
valueFormat="YYYY-MM-DD HH:mm:ss"
@change="timeChange"
:disabled="viewDetail ? true : false"
show-time
separator="至"
:placeholder="[' 开始时间', ' 结束时间']"
v-model:value="projectInfo.rangeTime"
style="width: 100%; height: 40px; border-radius: 5px"
valueFormat="YYYY-MM-DD HH:mm:ss"
@change="timeChange"
:disabled="viewDetail ? true : false"
/>
</div>
</div>
<div class="name">
<div class="namebox">
<img
class="nameimg"
src="../../assets/images/basicinfo/asterisk.png"
class="nameimg"
src="../../assets/images/basicinfo/asterisk.png"
/>
<div class="inname">项目经理</div>
</div>
<div class="in">
<ProjectManager
v-model:value="projectInfo.managerId"
v-model:name="projectInfo.manager"
@onChange="managerChange"
mode="multiple"
v-model:value="projectInfo.managerId"
v-model:name="projectInfo.manager"
@onChange="managerChange"
mode="multiple"
></ProjectManager>
</div>
</div>
<div class="name">
<div class="namebox">
<img
class="nameimg"
src="../../assets/images/basicinfo/asterisk.png"
class="nameimg"
src="../../assets/images/basicinfo/asterisk.png"
/>
<div class="inname">资源归属</div>
</div>
<div class="in select">
<OrgClass
v-model:value="projectInfo.sourceBelongId"
v-model:name="projectInfo.sourceBelongName"
v-model:value="projectInfo.sourceBelongId"
v-model:name="projectInfo.sourceBelongName"
></OrgClass>
</div>
</div>
<div class="name name2">
<div class="namebox">
<div class="inname" style="margin-top: 13px">项目说明</div>
</div>
<div class="in">
<a-textarea
v-model:value="projectInfo.remark"
style="height: 80px"
placeholder="请输入说明"
show-count
:maxlength="200"
:disabled="viewDetail ? true : false"
/>
</div>
</div>
<div class="name name2">
<div class="namebox">
<div class="inname">同步学习记录</div>
</div>
<div class="in">
<a-checkbox
v-model:checked="courseSyncFlag"
:disabled="viewDetail ? true : false"
><span
style="
width: 100%;
color: rgba(109, 117, 132, 1);
font-size: 14px;
"
>同步课程学习记录如学员在课程库中拥有课程的学习记录自动免修该课程</span
></a-checkbox
>
<!-- <a-switch
v-model:checked="projectInfo.courseSyncFlag"
:checkedValue="1"
:unCheckedValue="0"
:disabled="viewDetail ? true : false"
><span
style="
width: 100%;
color: rgba(109, 117, 132, 1);
font-size: 14px;
"
>同步课程学习记录如学员在课程库中拥有课程的学习记录自动免修该课程</span
></a-switch
> -->
</div>
</div>
<div class="name">
<div class="namebox">
<img
class="nameimg"
src="../../assets/images/basicinfo/asterisk.png"
class="nameimg"
src="../../assets/images/basicinfo/asterisk.png"
/>
<div class="inname">项目级别</div>
</div>
@@ -219,8 +154,8 @@
<div class="name">
<div class="namebox">
<img
class="nameimg"
src="../../assets/images/basicinfo/asterisk.png"
class="nameimg"
src="../../assets/images/basicinfo/asterisk.png"
/>
<div class="inname">培训分类</div>
</div>
@@ -230,51 +165,75 @@
</div>
<div class="name">
<div class="namebox">
<!-- <img-->
<!-- class="nameimg"-->
<!-- src="../../assets/images/basicinfo/asterisk.png"-->
<!-- />-->
<img
class="nameimg"
src="../../assets/images/basicinfo/asterisk.png"
class="nameimg"
src="../../assets/images/basicinfo/asterisk.png"
/>
<div class="inname">是否BOEU实施</div>
</div>
<div class="in">
<!-- <a-switch
v-model:checked="projectInfo.boeFlag"
:checkedValue="1"
:unCheckedValue="0"
:disabled="viewDetail ? true : false"
></a-switch> -->
<a-radio-group
v-model:value="projectInfo.boeFlag"
:disabled="viewDetail ? true : false"
v-model:value="projectInfo.boeFlag"
:disabled="viewDetail ? true : false"
>
<a-radio :style="radioStyle" :value="1"></a-radio>
<a-radio :style="radioStyle" :value="0"></a-radio>
</a-radio-group>
</div>
</div>
<div class="name name2">
<div class="namebox">
<div class="inname">同步学习记录</div>
</div>
<div class="in">
<a-checkbox
v-model:checked="courseSyncFlag"
:disabled="viewDetail ? true : false"
><span
style="
width: 100%;
color: rgba(109, 117, 132, 1);
font-size: 14px;
"
>同步课程学习记录如学员在课程库中拥有课程的学习记录自动免修该课程</span
></a-checkbox
>
</div>
</div>
<div class="name name2">
<div class="namebox">
<div class="inname" style="margin-top: 13px">项目说明</div>
</div>
<div class="in">
<a-textarea
v-model:value="projectInfo.remark"
style="height: 80px"
placeholder="请输入说明"
show-count
:maxlength="200"
:disabled="viewDetail ? true : false"
/>
</div>
</div>
</div>
<div class="template">
<div class="name">
<div class="inname" style="width: 50px">模版</div>
<div class="in select" style="margin-left: 2px">
<a-select
:getPopupContainer="
:getPopupContainer="
(triggerNode) => {
return triggerNode.parentNode || document.body;
}
"
v-model:value="classifySelect5"
placeholder="请选择模版"
:size="size"
style="width: 100%"
:options="classifyList5"
@change="classificationChange5"
@popupScroll="templateScroll"
:fieldNames="{
v-model:value="classifySelect5"
placeholder="请选择模版"
:size="size"
style="width: 100%"
:options="classifyList5"
@change="classificationChange5"
@popupScroll="templateScroll"
:fieldNames="{
label: 'name',
value: 'projectTemplateId',
}"
@@ -286,34 +245,34 @@
</div>
<div class="footer">
<div class="btn">
<a-button v-on:click="createProject" type="primary" class="btn1"
>确定
</a-button>
<a-button @click="backPage" class="btn2">取消</a-button>
<a-button v-on:click="createProject" type="primary" class="btn1"
>确定</a-button
>
</div>
</div>
</div>
</template>
<script>
import {onMounted, reactive, toRefs, watch} from "vue";
import {message} from "ant-design-vue";
import {useRoute, useRouter} from "vue-router";
import { onMounted, reactive, toRefs, watch } from "vue";
import { message } from "ant-design-vue";
import { useRoute, useRouter } from "vue-router";
import * as api from "../../api/index";
import {useStore} from "vuex";
import ProjectClass from "@/components/project/ProjectClass";
import { useStore } from "vuex";
// import ProjectClass from "@/components/project/ProjectClass";
import TrainClass from "@/components/project/TrainClass";
import OrgClass from "@/components/project/OrgClass";
import ProjectManager from "@/components/project/ProjectManagerNew";
import ProjectLevel from "@/components/project/ProjectLevel";
import {changeOwnership, scrollLoad} from "@/api/method";
import {storage} from "../../api/storage";
import { changeOwnership, scrollLoad } from "@/api/method";
import { storage } from "../../api/storage";
export default {
name: "projectAdd",
components: {
ProjectManager,
ProjectLevel,
ProjectClass,
// ProjectClass,
TrainClass,
OrgClass,
},
@@ -369,32 +328,32 @@ export default {
return;
}
api
.getProjectDetail({projectId: routers.query.projectId})
.then((res) => {
state.projectInfo = res.data.data.projectInfo;
.getProjectDetail({ projectId: routers.query.projectId })
.then((res) => {
state.projectInfo = res.data.data.projectInfo;
console.log(res);
let picurl = res.data.data.projectInfo.picUrl;
let dates = store.state.projectPic.map((e) => ({
value: e.dictValue,
label: e.dictName,
}));
console.log(dates, picurl);
for (let i = 0; i < dates.length; i++) {
if (dates[i].value == picurl) {
state.picUrlName = dates[i].label;
}
console.log(res);
let picurl = res.data.data.projectInfo.picUrl;
let dates = store.state.projectPic.map((e) => ({
value: e.dictValue,
label: e.dictName,
}));
console.log(dates, picurl);
for (let i = 0; i < dates.length; i++) {
if (dates[i].value == picurl) {
state.picUrlName = dates[i].label;
}
}
state.projectInfo.rangeTime = [
state.projectInfo.beginTime,
state.projectInfo.endTime,
];
state.projectInfo.parentName = routers.query.parentName;
state.courseSyncFlag = state.projectInfo.courseSyncFlag
? true
: false;
});
state.projectInfo.rangeTime = [
state.projectInfo.beginTime,
state.projectInfo.endTime,
];
state.projectInfo.parentName = routers.query.parentName;
state.courseSyncFlag = state.projectInfo.courseSyncFlag
? true
: false;
});
}
const backPage = () => {
@@ -480,23 +439,25 @@ export default {
state.projectInfo.courseSyncFlag = state.courseSyncFlag ? 1 : 0;
api.createProject(state.projectInfo).then((res) => {
state.projectInfo.projectId ||
changeOwnership("project", res.data.data.projectId, [
{id: res.data.data.createId, name: res.data.data.createName},
]);
changeOwnership("project", res.data.data.projectId, [
{ id: res.data.data.createId, name: res.data.data.createName },
]);
message.destroy();
message.success(state.projectInfo.projectId ? "编辑成功" : "创建成功");
// router.back();
router.push({
path: "/taskpage",
query: {projectId: res.data.data.projectId},
query: { projectId: res.data.data.projectId },
});
storage.set("projectId", res.data.data.projectId);
});
};
function managerChange(e, l, d) {
!state.projectInfo.sourceBelongId && (state.projectInfo.sourceBelongId = d)
!state.projectInfo.sourceBelongId && (state.projectInfo.sourceBelongName = d)
!state.projectInfo.sourceBelongId &&
(state.projectInfo.sourceBelongId = d);
!state.projectInfo.sourceBelongId &&
(state.projectInfo.sourceBelongName = d);
}
return {
@@ -569,7 +530,7 @@ export default {
}
.active {
border: 1px solid rgba(78, 166, 255, 1);
border: 2px solid rgba(78, 166, 255, 1);
}
.content {

View File

@@ -1304,7 +1304,7 @@ export default {
title: "项目名称",
dataIndex: "name",
key: "name",
width: 280,
width: 480,
// align: "center",
ellipsis: true,
// scopedSlots: { customRender: "action" }, //引入的插槽
@@ -1316,8 +1316,9 @@ export default {
{
title: "项目经理",
dataIndex: "manager",
ellipsis: true,
key: "manager",
width: 100,
width: 300,
align: "center",
},
{
@@ -1394,7 +1395,7 @@ export default {
dataIndex: "operation",
key: "operation",
width: 300,
align: "center",
align: "right",
fixed: "right",
customRender: (value) => {
// console.log("value", value.record.type, value.record.status);