mirror of
https://codeup.aliyun.com/67762337eccfc218f6110e0e/vue/fe-manage.git
synced 2025-12-11 03:46:45 +08:00
-- 项目名称校验
This commit is contained in:
@@ -131,6 +131,7 @@ export const addStudentCourse = (obj) => http.post("/admin/offcourse/addStudent"
|
||||
// 获取组织结构树
|
||||
export const orgtree = () => http.get("/org/tree");
|
||||
export const saveStu = obj => http.post("/admin/student/addStudent", obj);
|
||||
export const validateName = obj => http.post("/admin/validate/validateName", obj);
|
||||
|
||||
//获取积分列表
|
||||
export const noticeList = (projectId) =>
|
||||
|
||||
58
src/components/project/NameInput.vue
Normal file
58
src/components/project/NameInput.vue
Normal file
@@ -0,0 +1,58 @@
|
||||
<template>
|
||||
<a-input
|
||||
v-model:value="modelV"
|
||||
placeholder="请输入项目名称"
|
||||
:show-count="showCount"
|
||||
:maxlength="maxlength"
|
||||
@blur="validateProName"
|
||||
/>
|
||||
<div style="color:red;font-size: 10px" v-if="value && !validate">名称重复,请重新输入</div>
|
||||
</template>
|
||||
<script setup>
|
||||
import {defineProps, defineEmits, watch, ref} from "vue";
|
||||
import {validateName} from "@/api/index1";
|
||||
|
||||
const props = defineProps({
|
||||
value: {
|
||||
type: String,
|
||||
},
|
||||
validate: {
|
||||
type: Boolean,
|
||||
default: true
|
||||
},
|
||||
type: {
|
||||
type: Number,
|
||||
default: 1
|
||||
},
|
||||
maxlength: {
|
||||
type: Number,
|
||||
default: 30
|
||||
},
|
||||
showCount: {
|
||||
type: Boolean,
|
||||
default: false
|
||||
}
|
||||
})
|
||||
|
||||
const emit = defineEmits({})
|
||||
|
||||
const modelV = ref()
|
||||
|
||||
watch(() => props.value, () => {
|
||||
if (props.value !== modelV.value) {
|
||||
modelV.value = props.value
|
||||
}
|
||||
})
|
||||
|
||||
watch(modelV, () => {
|
||||
emit('update:value', modelV.value)
|
||||
})
|
||||
|
||||
function validateProName() {
|
||||
console.log(props.value)
|
||||
props.value && validateName({name: props.value, type: props.type}).then(res => {
|
||||
emit('update:validate', res.data.data !== 1)
|
||||
})
|
||||
}
|
||||
|
||||
</script>
|
||||
@@ -132,16 +132,17 @@
|
||||
</div>
|
||||
<span style="margin-right: 3px">课程名称:</span>
|
||||
</div>
|
||||
<div class="b_input">
|
||||
<a-input
|
||||
v-model:value="xzinputV1"
|
||||
maxlength="20"
|
||||
style="width: 440px; height: 40px; border-radius: 8px"
|
||||
placeholder="请输入课程名称"
|
||||
/>
|
||||
<div class="inp_num">
|
||||
<span style="color: #c7cbd2">{{ xzinputV1.length }}/20</span>
|
||||
</div>
|
||||
<div class="in b_input">
|
||||
<NameInput placeholder="请输入课程名称" v-model:value="xzinputV1" v-model:validate="validate" :maxlength="20" show-count :type="2"></NameInput>
|
||||
<!-- <a-input-->
|
||||
<!-- v-model:value="xzinputV1"-->
|
||||
<!-- maxlength="20"-->
|
||||
<!-- style="width: 440px; height: 40px; border-radius: 8px"-->
|
||||
<!-- placeholder="请输入课程名称"-->
|
||||
<!-- />-->
|
||||
<!-- <div class="inp_num">-->
|
||||
<!-- <span style="color: #c7cbd2">{{ xzinputV1.length }}/20</span>-->
|
||||
<!-- </div>-->
|
||||
</div>
|
||||
</div>
|
||||
<div class="b_sub">
|
||||
@@ -336,14 +337,15 @@
|
||||
<span style="margin-right: 14px">课程名称</span>
|
||||
</div>
|
||||
<div class="item_inp">
|
||||
<div class="i1_input">
|
||||
<a-input
|
||||
aria-readonly="true"
|
||||
v-model:value="qdms_inputV1"
|
||||
maxlength="90"
|
||||
style="width: 440px; height: 40px; border-radius: 8px"
|
||||
placeholder="请输入课程名称"
|
||||
/>
|
||||
<div class="in i1_input">
|
||||
<!-- <a-input-->
|
||||
<!-- aria-readonly="true"-->
|
||||
<!-- v-model:value="qdms_inputV1"-->
|
||||
<!-- maxlength="90"-->
|
||||
<!-- style="width: 440px; height: 40px; border-radius: 8px"-->
|
||||
<!-- placeholder="请输入课程名称"-->
|
||||
<!-- />-->
|
||||
<NameInput placeholder="请输入课程名称" v-model:value="qdms_inputV1" v-model:validate="validate" :maxlength="20" show-count :type="2"></NameInput>
|
||||
<div class="inp_num">
|
||||
<span style="color: #c7cbd2">
|
||||
{{ qdms_inputV1.length }}/90
|
||||
@@ -2752,6 +2754,7 @@ import { useRouter, useRoute } from "vue-router";
|
||||
import addOnlineCourse from "../../components/Modals/addOnlineCourse.vue";
|
||||
|
||||
import ProjOwnerShip from "../../components/drawers/ProjectOwn";
|
||||
import NameInput from "../../components/project/NameInput";
|
||||
import ProjPowerList from "../../components/drawers/ProjPowerList";
|
||||
import ProjCheckShip from "../../components/drawers/ProjCheckPower";
|
||||
import AssessmentList from "../../components/drawers/AssessmentList.vue";
|
||||
@@ -3305,6 +3308,7 @@ export default defineComponent({
|
||||
ProjPowerList,
|
||||
ProjCheckShip,
|
||||
AssessmentList,
|
||||
NameInput,
|
||||
// VNodes: (_, {attrs}) => {
|
||||
// return attrs.vnodes;
|
||||
// },
|
||||
@@ -3535,6 +3539,7 @@ export default defineComponent({
|
||||
|
||||
imageUrl: "",
|
||||
imgList: [],
|
||||
validate:true,
|
||||
|
||||
pageSize2: 10,
|
||||
currentPage2: 0,
|
||||
@@ -4481,6 +4486,10 @@ export default defineComponent({
|
||||
message.destroy();
|
||||
return message.warning("请输入必填项");
|
||||
}
|
||||
if (!state.validate) {
|
||||
message.destroy();
|
||||
return message.warning("路径图名称重复");
|
||||
}
|
||||
console.log(
|
||||
"state.bs_hs && state.valueE1 == 2",
|
||||
state.bs_hs,
|
||||
@@ -4594,7 +4603,10 @@ export default defineComponent({
|
||||
} else {
|
||||
state.addLoading = true;
|
||||
}
|
||||
|
||||
if (!state.validate) {
|
||||
message.destroy();
|
||||
return message.warning("路径图名称重复");
|
||||
}
|
||||
edit(postData).then((res) => {
|
||||
if (res.data.code === 200) {
|
||||
getTableDate();
|
||||
|
||||
@@ -67,15 +67,15 @@
|
||||
<div class="datanull" v-if="tableDataTotal === 0">
|
||||
<div class="nodata_box">
|
||||
<div class="left">
|
||||
<img src="../../assets/images/taskpage/left1.png" />
|
||||
<img src="../../assets/images/taskpage/left1.png"/>
|
||||
</div>
|
||||
<div class="center">
|
||||
<img src="../../assets/images/leveladd/picture.png" />
|
||||
<img src="../../assets/images/leveladd/picture.png"/>
|
||||
</div>
|
||||
<div class="text1">无数据</div>
|
||||
<div class="text2">请添加路径</div>
|
||||
<div class="right">
|
||||
<img src="../../assets/images/leveladd/right.png" />
|
||||
<img src="../../assets/images/leveladd/right.png"/>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
@@ -125,7 +125,7 @@
|
||||
>
|
||||
<div class="out">
|
||||
<div class="top">
|
||||
<img class="topimg" src="../../assets/images/courseManage/add1.png" />
|
||||
<img class="topimg" src="../../assets/images/courseManage/add1.png"/>
|
||||
<div class="topc">创建路径</div>
|
||||
<div @click="handleOut" style="margin-left: 500px; cursor: pointer">
|
||||
<img
|
||||
@@ -144,13 +144,15 @@
|
||||
</div>
|
||||
<div class="inname">路径图名称</div>
|
||||
<div class="in">
|
||||
<a-input
|
||||
v-model:value="pathName"
|
||||
maxlength="20"
|
||||
style="border-radius: 4px"
|
||||
placeholder="请输入学习路径名称"
|
||||
/>
|
||||
<div class="showcount">{{ pathName.length }}/20</div>
|
||||
<!-- <a-input-->
|
||||
<!-- v-model:value="pathName"-->
|
||||
<!-- maxlength="20"-->
|
||||
<!-- style="border-radius: 4px"-->
|
||||
<!-- placeholder="请输入学习路径名称"-->
|
||||
<!-- />-->
|
||||
<!-- <div class="showcount">{{ pathName.length }}/20</div>-->
|
||||
<NameInput placeholder="请输入路径名称" v-model:value="pathName" v-model:validate="validate"
|
||||
:maxlength="20" show-count :type="3"></NameInput>
|
||||
</div>
|
||||
</div>
|
||||
<div class="name" style="margin-left: 27px">
|
||||
@@ -208,14 +210,14 @@
|
||||
v-if="imgData.length > 5"
|
||||
class="learnBgItem learnBgMore"
|
||||
>
|
||||
查看更多 <img src="../../assets/images/projectadd/go.png" />
|
||||
查看更多 <img src="../../assets/images/projectadd/go.png"/>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
<div class="info">
|
||||
<div class="inname">路径说明</div>
|
||||
<div class="in">
|
||||
<a-textarea v-model:value="pathIntro" maxlength="150" />
|
||||
<a-textarea v-model:value="pathIntro" maxlength="150"/>
|
||||
<div class="showcount">{{ pathIntro.length }}/150</div>
|
||||
</div>
|
||||
</div>
|
||||
@@ -228,7 +230,7 @@
|
||||
class="aeLoading"
|
||||
:style="{ display: lpLoading ? 'flex' : 'none' }"
|
||||
>
|
||||
<a-spin :spinning="lpLoading" tip="添加中..." />
|
||||
<a-spin :spinning="lpLoading" tip="添加中..."/>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
@@ -244,7 +246,7 @@
|
||||
>
|
||||
<div class="out">
|
||||
<div class="top">
|
||||
<img class="topimg" src="../../assets/images/courseManage/add1.png" />
|
||||
<img class="topimg" src="../../assets/images/courseManage/add1.png"/>
|
||||
<div class="topc">编辑路径</div>
|
||||
<div @click="handleOut1" style="margin-left: 500px; cursor: pointer">
|
||||
<img
|
||||
@@ -263,13 +265,15 @@
|
||||
</div>
|
||||
<div class="inname">路径图名称</div>
|
||||
<div class="in">
|
||||
<a-input
|
||||
v-model:value="pathName"
|
||||
maxlength="20"
|
||||
style="border-radius: 4px"
|
||||
placeholder="请输入学习路径名称"
|
||||
/>
|
||||
<div class="showcount">{{ pathName.length }}/20</div>
|
||||
<!-- <a-input-->
|
||||
<!-- v-model:value="pathName"-->
|
||||
<!-- maxlength="20"-->
|
||||
<!-- style="border-radius: 4px"-->
|
||||
<!-- placeholder="请输入学习路径名称"-->
|
||||
<!-- />-->
|
||||
<!-- <div class="showcount">{{ pathName.length }}/20</div>-->
|
||||
<NameInput placeholder="请输入路径名称" v-model:value="pathName" v-model:validate="validate"
|
||||
:maxlength="20" show-count :type="3"></NameInput>
|
||||
</div>
|
||||
</div>
|
||||
<div class="name" style="margin-left: 27px">
|
||||
@@ -329,14 +333,14 @@
|
||||
v-if="imgData.length > 5"
|
||||
class="learnBgItem learnBgMore"
|
||||
>
|
||||
查看更多 <img src="../../assets/images/projectadd/go.png" />
|
||||
查看更多 <img src="../../assets/images/projectadd/go.png"/>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
<div class="info">
|
||||
<div class="inname">路径说明</div>
|
||||
<div class="in">
|
||||
<a-textarea v-model:value="pathIntro" maxlength="150" />
|
||||
<a-textarea v-model:value="pathIntro" maxlength="150"/>
|
||||
<div class="showcount">{{ pathIntro.length }}/150</div>
|
||||
</div>
|
||||
</div>
|
||||
@@ -421,7 +425,7 @@
|
||||
</div>
|
||||
<!-- 加载动画 -->
|
||||
<div class="aeLoading" :style="{ display: pubLoading ? 'flex' : 'none' }">
|
||||
<a-spin :spinning="pubLoading" />
|
||||
<a-spin :spinning="pubLoading"/>
|
||||
</div>
|
||||
</a-modal>
|
||||
<!-- 复制路径弹窗 -->
|
||||
@@ -663,8 +667,8 @@
|
||||
</div>
|
||||
</template>
|
||||
<script>
|
||||
import { reactive, toRefs, onMounted, watch, computed } from "vue";
|
||||
import { useRouter } from "vue-router";
|
||||
import {reactive, toRefs, onMounted, watch, computed} from "vue";
|
||||
import {useRouter} from "vue-router";
|
||||
// import OwnerShip from "../../components/drawers/Ownership";
|
||||
// import PowerList from "../../components/drawers/PowerList";
|
||||
// import QueryRight from "../../components/drawers/QueryRight";
|
||||
@@ -673,15 +677,17 @@ import ProjPowerList from "../../components/drawers/ProjPowerList";
|
||||
import ProjCheckShip from "../../components/drawers/ProjCheckPower";
|
||||
// import ManageRight from "../../components/drawers/ManageRight";
|
||||
import * as api from "../../api/index1";
|
||||
import { message } from "ant-design-vue";
|
||||
import {message} from "ant-design-vue";
|
||||
import {
|
||||
commonData,
|
||||
changeOwnership,
|
||||
// setCookie
|
||||
} from "../../api/method";
|
||||
import { storage } from "../../api/storage";
|
||||
import { useStore } from "vuex";
|
||||
import {storage} from "../../api/storage";
|
||||
import {useStore} from "vuex";
|
||||
import OrgClass from "@/components/project/OrgClass";
|
||||
import NameInput from "@/components/project/NameInput";
|
||||
|
||||
export default {
|
||||
name: "learningPath",
|
||||
components: {
|
||||
@@ -691,6 +697,7 @@ export default {
|
||||
// ManageRight,
|
||||
ProjOwnerShip,
|
||||
OrgClass,
|
||||
NameInput,
|
||||
ProjPowerList,
|
||||
ProjCheckShip,
|
||||
},
|
||||
@@ -704,6 +711,7 @@ export default {
|
||||
number: null,
|
||||
selectTime: null,
|
||||
sh: false,
|
||||
validate: true,
|
||||
tableData: [
|
||||
// {
|
||||
// key: 1,
|
||||
@@ -1147,7 +1155,7 @@ export default {
|
||||
width: 200,
|
||||
align: "center",
|
||||
fixed: "right",
|
||||
scopedSlots: { customRender: "action" }, //引入的插槽
|
||||
scopedSlots: {customRender: "action"}, //引入的插槽
|
||||
customRender: (text) => {
|
||||
// console.log(text);
|
||||
return (
|
||||
@@ -1448,6 +1456,11 @@ export default {
|
||||
message.destroy();
|
||||
return message.warning("请选择背景图");
|
||||
}
|
||||
if (!state.validate) {
|
||||
message.destroy();
|
||||
message.warning("路径图名称重复");
|
||||
return
|
||||
}
|
||||
state.lpLoading = true;
|
||||
let obj = {
|
||||
name: state.pathName,
|
||||
@@ -1488,7 +1501,7 @@ export default {
|
||||
});
|
||||
//添加归属权 [id: '966735050643083264', name: '丁舟航']
|
||||
let selectPeopleArr = [
|
||||
{ id: res.data.data.createId, name: res.data.data.createName },
|
||||
{id: res.data.data.createId, name: res.data.data.createName},
|
||||
];
|
||||
changeOwnership(
|
||||
"learnPath",
|
||||
@@ -1612,6 +1625,10 @@ export default {
|
||||
message.destroy();
|
||||
return message.warning("请选择背景图");
|
||||
}
|
||||
if (!state.validate) {
|
||||
message.destroy();
|
||||
return message.warning("路径图名称重复");
|
||||
}
|
||||
// state.pathName = detail.name;
|
||||
// state.pathBg = detail.picUrl;
|
||||
// state.pathBgId = "";
|
||||
@@ -1833,17 +1850,21 @@ export default {
|
||||
display: block;
|
||||
clear: both;
|
||||
}
|
||||
|
||||
.CreatePath {
|
||||
.ant-modal {
|
||||
width: 680px !important;
|
||||
height: 528px !important;
|
||||
|
||||
.ant-modal-content {
|
||||
width: 680px !important;
|
||||
height: 528px !important;
|
||||
|
||||
.ant-modal-body {
|
||||
width: 680px !important;
|
||||
height: 528px !important;
|
||||
padding: 0 !important;
|
||||
|
||||
.out {
|
||||
display: block;
|
||||
position: absolute;
|
||||
@@ -1856,6 +1877,7 @@ export default {
|
||||
left: 50%;
|
||||
top: 50%;
|
||||
transform: translate(-50%, -50%);
|
||||
|
||||
.top {
|
||||
width: 100%;
|
||||
height: 68px;
|
||||
@@ -1866,18 +1888,21 @@ export default {
|
||||
);
|
||||
display: flex;
|
||||
align-items: center;
|
||||
|
||||
.topimg {
|
||||
width: 18px;
|
||||
height: 18px;
|
||||
margin-left: 27px;
|
||||
margin-top: -2px;
|
||||
}
|
||||
|
||||
.topc {
|
||||
color: #000000;
|
||||
font-size: 16px;
|
||||
margin-left: 8px;
|
||||
}
|
||||
}
|
||||
|
||||
.mid {
|
||||
width: 100%;
|
||||
height: 100%;
|
||||
@@ -1891,6 +1916,7 @@ export default {
|
||||
// color: #ff4e4e;
|
||||
margin-left: -5px;
|
||||
}
|
||||
|
||||
.name {
|
||||
width: 78%;
|
||||
// background-color: lightcoral;
|
||||
@@ -1905,16 +1931,19 @@ export default {
|
||||
font-size: 14px;
|
||||
margin-left: 7px;
|
||||
}
|
||||
|
||||
.in {
|
||||
margin-left: 14px;
|
||||
width: 81%;
|
||||
position: relative;
|
||||
|
||||
.ant-input {
|
||||
border-radius: 5px;
|
||||
// height: 120%;
|
||||
width: 100%;
|
||||
height: 40px;
|
||||
}
|
||||
|
||||
.showcount {
|
||||
position: absolute;
|
||||
right: 10px;
|
||||
@@ -1923,6 +1952,7 @@ export default {
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
.bac {
|
||||
width: 78%;
|
||||
// background-color: lightcoral;
|
||||
@@ -1933,12 +1963,14 @@ export default {
|
||||
margin-top: 18px;
|
||||
color: #ff4e4e;
|
||||
}
|
||||
|
||||
.inname {
|
||||
color: #6f6f6f;
|
||||
font-size: 14px;
|
||||
margin-left: 7px;
|
||||
margin-top: 15px;
|
||||
}
|
||||
|
||||
.in {
|
||||
margin-left: 14px;
|
||||
width: 81%;
|
||||
@@ -1953,11 +1985,13 @@ export default {
|
||||
cursor: pointer;
|
||||
}
|
||||
}
|
||||
|
||||
.learnBg {
|
||||
display: flex;
|
||||
flex-wrap: wrap;
|
||||
min-height: 110px;
|
||||
max-height: 300px;
|
||||
|
||||
.learnBgItem {
|
||||
border-radius: 8px;
|
||||
width: 136px;
|
||||
@@ -1967,6 +2001,7 @@ export default {
|
||||
margin-bottom: 20px;
|
||||
margin-right: 6px;
|
||||
}
|
||||
|
||||
.learnBgMore {
|
||||
display: flex;
|
||||
align-items: center;
|
||||
@@ -1980,6 +2015,7 @@ export default {
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
.info {
|
||||
width: 78%;
|
||||
// background-color: lightcoral;
|
||||
@@ -1995,10 +2031,12 @@ export default {
|
||||
margin-left: 26px;
|
||||
margin-top: 15px;
|
||||
}
|
||||
|
||||
.in {
|
||||
margin-left: 14px;
|
||||
width: 81%;
|
||||
position: relative;
|
||||
|
||||
.ant-input {
|
||||
border-radius: 5px;
|
||||
// height: 120%;
|
||||
@@ -2006,6 +2044,7 @@ export default {
|
||||
height: 130px;
|
||||
resize: none;
|
||||
}
|
||||
|
||||
.showcount {
|
||||
position: absolute;
|
||||
right: 10px;
|
||||
@@ -2014,12 +2053,14 @@ export default {
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
.btn {
|
||||
width: 33%;
|
||||
margin-top: 30px;
|
||||
display: flex;
|
||||
justify-content: space-between;
|
||||
margin-bottom: 30px;
|
||||
|
||||
.samtn {
|
||||
width: 100px;
|
||||
height: 40px;
|
||||
@@ -2028,10 +2069,12 @@ export default {
|
||||
border-radius: 8px;
|
||||
cursor: pointer;
|
||||
}
|
||||
|
||||
.btn1 {
|
||||
background-color: #fff;
|
||||
color: #4ea6ff;
|
||||
}
|
||||
|
||||
.btn2 {
|
||||
background-color: #4ea6ff;
|
||||
color: #fff;
|
||||
@@ -2043,20 +2086,25 @@ export default {
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
.learnBgMoreModal {
|
||||
.ant-modal {
|
||||
width: 680px !important;
|
||||
height: 528px !important;
|
||||
|
||||
.ant-modal-content {
|
||||
width: 680px !important;
|
||||
height: 528px !important;
|
||||
|
||||
.ant-modal-body {
|
||||
width: 680px !important;
|
||||
height: 528px !important;
|
||||
padding: 0 !important;
|
||||
|
||||
.main {
|
||||
display: flex;
|
||||
flex-direction: column;
|
||||
|
||||
.top {
|
||||
padding-left: 51px;
|
||||
padding-right: 51px;
|
||||
@@ -2065,6 +2113,7 @@ export default {
|
||||
align-items: center;
|
||||
justify-content: space-between;
|
||||
cursor: pointer;
|
||||
|
||||
.topc {
|
||||
font-size: 16px;
|
||||
font-weight: bold;
|
||||
@@ -2072,6 +2121,7 @@ export default {
|
||||
line-height: 36px;
|
||||
}
|
||||
}
|
||||
|
||||
.imagesBox {
|
||||
display: flex;
|
||||
// justify-content: space-between;
|
||||
@@ -2081,6 +2131,7 @@ export default {
|
||||
margin-top: 20px;
|
||||
height: 350px;
|
||||
overflow-y: auto;
|
||||
|
||||
.learnBgItem {
|
||||
border-radius: 8px;
|
||||
width: 136px;
|
||||
@@ -2091,6 +2142,7 @@ export default {
|
||||
margin-right: 10px;
|
||||
}
|
||||
}
|
||||
|
||||
.btn {
|
||||
width: 100%;
|
||||
position: absolute;
|
||||
@@ -2098,6 +2150,7 @@ export default {
|
||||
margin-top: 30px;
|
||||
display: flex;
|
||||
justify-content: center;
|
||||
|
||||
.samtn {
|
||||
width: 100px;
|
||||
height: 40px;
|
||||
@@ -2106,10 +2159,12 @@ export default {
|
||||
border-radius: 8px;
|
||||
cursor: pointer;
|
||||
}
|
||||
|
||||
.btn1 {
|
||||
background-color: #fff;
|
||||
color: #4ea6ff;
|
||||
}
|
||||
|
||||
.btn2 {
|
||||
background-color: #4ea6ff;
|
||||
color: #fff;
|
||||
@@ -2121,16 +2176,19 @@ export default {
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
.pub {
|
||||
.ant-modal {
|
||||
.ant-modal-body {
|
||||
padding: 0;
|
||||
|
||||
.modalHeader {
|
||||
background: linear-gradient(
|
||||
rgba(78, 166, 255, 0.2) 0%,
|
||||
rgba(78, 166, 255, 0) 100%
|
||||
);
|
||||
}
|
||||
|
||||
.modalMain {
|
||||
.projectname {
|
||||
color: rgba(79, 81, 86, 1);
|
||||
@@ -2139,23 +2197,28 @@ export default {
|
||||
margin-left: 62px;
|
||||
font-weight: 500;
|
||||
}
|
||||
|
||||
.projecttime {
|
||||
margin-left: 221px;
|
||||
|
||||
.timeti {
|
||||
color: rgba(153, 155, 163, 1);
|
||||
font-size: 14px;
|
||||
line-height: 36px;
|
||||
}
|
||||
|
||||
.timeme {
|
||||
color: rgba(79, 81, 86, 1);
|
||||
font-size: 14px;
|
||||
line-height: 36px;
|
||||
}
|
||||
}
|
||||
|
||||
.projectbox {
|
||||
margin-top: 26px;
|
||||
display: flex;
|
||||
justify-content: center;
|
||||
|
||||
.promessage {
|
||||
width: 280px;
|
||||
height: 110px;
|
||||
@@ -2166,6 +2229,7 @@ export default {
|
||||
);
|
||||
border-radius: 10px;
|
||||
margin-right: 7px;
|
||||
|
||||
.messageme {
|
||||
color: rgba(255, 182, 78, 1);
|
||||
font-size: 14px;
|
||||
@@ -2173,12 +2237,14 @@ export default {
|
||||
margin-top: 17px;
|
||||
margin-left: 30px;
|
||||
}
|
||||
|
||||
.messagege {
|
||||
color: rgba(153, 155, 163, 1);
|
||||
font-size: 14px;
|
||||
margin-left: 30px;
|
||||
}
|
||||
}
|
||||
|
||||
.stumessage {
|
||||
width: 280px;
|
||||
height: 110px;
|
||||
@@ -2188,6 +2254,7 @@ export default {
|
||||
rgba(240, 248, 254, 1)
|
||||
);
|
||||
border-radius: 10px;
|
||||
|
||||
.messageme1 {
|
||||
color: rgba(78, 166, 255, 1);
|
||||
font-size: 14px;
|
||||
@@ -2195,6 +2262,7 @@ export default {
|
||||
margin-top: 17px;
|
||||
margin-left: 30px;
|
||||
}
|
||||
|
||||
.messagege1 {
|
||||
color: rgba(153, 155, 163, 1);
|
||||
font-size: 14px;
|
||||
@@ -2202,26 +2270,32 @@ export default {
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
.send {
|
||||
margin-top: 30px;
|
||||
margin-left: 61px;
|
||||
|
||||
.sendtext {
|
||||
margin-left: 11px;
|
||||
color: rgba(109, 117, 132, 1);
|
||||
font-size: 14px;
|
||||
}
|
||||
}
|
||||
|
||||
.ckb {
|
||||
margin-top: 20px;
|
||||
margin-left: 62px;
|
||||
|
||||
.sendpeo {
|
||||
color: rgba(109, 117, 132, 1);
|
||||
font-size: 14px;
|
||||
}
|
||||
|
||||
.ant-checkbox-inner {
|
||||
border-radius: 4px;
|
||||
}
|
||||
}
|
||||
|
||||
.pubtn {
|
||||
display: flex;
|
||||
justify-content: center;
|
||||
@@ -2240,6 +2314,7 @@ export default {
|
||||
align-items: center;
|
||||
background: rgba(255, 255, 255, 1);
|
||||
}
|
||||
|
||||
.pubtn2 {
|
||||
width: 100px;
|
||||
height: 40px;
|
||||
@@ -2257,17 +2332,21 @@ export default {
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
.CopyModal {
|
||||
.ant-modal {
|
||||
width: 424px !important;
|
||||
height: 258px !important;
|
||||
|
||||
.ant-modal-content {
|
||||
width: 424px !important;
|
||||
height: 258px !important;
|
||||
|
||||
.ant-modal-body {
|
||||
width: 424px !important;
|
||||
height: 258px !important;
|
||||
padding: 0 !important;
|
||||
|
||||
.delete {
|
||||
z-index: 999;
|
||||
width: 424px;
|
||||
@@ -2288,15 +2367,18 @@ export default {
|
||||
rgba(78, 166, 255, 0) 100%
|
||||
);
|
||||
}
|
||||
|
||||
.del_main {
|
||||
width: 100%;
|
||||
position: relative;
|
||||
|
||||
.header {
|
||||
display: flex;
|
||||
align-items: center;
|
||||
padding-top: 20px;
|
||||
padding-left: 26px;
|
||||
font-size: 16px;
|
||||
|
||||
.icon {
|
||||
width: 16px;
|
||||
height: 16px;
|
||||
@@ -2304,6 +2386,7 @@ export default {
|
||||
background-image: url(@/assets/images/taskpage/gan.png);
|
||||
background-size: 100% 100%;
|
||||
}
|
||||
|
||||
.close_exit {
|
||||
position: absolute;
|
||||
right: 42px;
|
||||
@@ -2314,6 +2397,7 @@ export default {
|
||||
background-size: 100% 100%;
|
||||
}
|
||||
}
|
||||
|
||||
.body {
|
||||
width: 100%;
|
||||
margin: 34px auto 56px auto;
|
||||
@@ -2323,6 +2407,7 @@ export default {
|
||||
flex-direction: column;
|
||||
// background-color: red;
|
||||
position: relative;
|
||||
|
||||
.back {
|
||||
position: absolute;
|
||||
top: 30px;
|
||||
@@ -2331,10 +2416,12 @@ export default {
|
||||
color: #666666;
|
||||
}
|
||||
}
|
||||
|
||||
.del_btnbox {
|
||||
display: flex;
|
||||
margin: 30px auto;
|
||||
justify-content: center;
|
||||
|
||||
.del_btn {
|
||||
width: 100px;
|
||||
height: 40px;
|
||||
@@ -2346,17 +2433,20 @@ export default {
|
||||
|
||||
flex-shrink: 0;
|
||||
cursor: pointer;
|
||||
|
||||
.btnText {
|
||||
font-size: 14px;
|
||||
font-weight: 400;
|
||||
line-height: 40px;
|
||||
}
|
||||
}
|
||||
|
||||
.btn1 {
|
||||
border: 1px solid rgba(64, 158, 255, 1);
|
||||
color: #4ea6ff;
|
||||
margin-right: 14px;
|
||||
}
|
||||
|
||||
.btn2 {
|
||||
background-color: #4ea6ff;
|
||||
color: #ffffff;
|
||||
@@ -2368,6 +2458,7 @@ export default {
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
.learningPath {
|
||||
width: 100%;
|
||||
// height: 100%;
|
||||
@@ -2382,22 +2473,26 @@ export default {
|
||||
//background: red;
|
||||
justify-content: center;
|
||||
align-items: center;
|
||||
|
||||
.nodata_box {
|
||||
width: 412px;
|
||||
height: 212px;
|
||||
position: relative;
|
||||
background: linear-gradient(180deg, #fef3dd, #fffaf0);
|
||||
border-radius: 10px;
|
||||
|
||||
.left {
|
||||
position: absolute;
|
||||
top: 18px;
|
||||
left: 0;
|
||||
}
|
||||
|
||||
.center {
|
||||
position: absolute;
|
||||
top: 32px;
|
||||
left: 170px;
|
||||
}
|
||||
|
||||
.text1 {
|
||||
position: absolute;
|
||||
top: 128px;
|
||||
@@ -2406,6 +2501,7 @@ export default {
|
||||
color: #ffb64e;
|
||||
font-weight: 500;
|
||||
}
|
||||
|
||||
.text2 {
|
||||
position: absolute;
|
||||
bottom: 32px;
|
||||
@@ -2414,6 +2510,7 @@ export default {
|
||||
color: #878b92;
|
||||
font-weight: 500;
|
||||
}
|
||||
|
||||
.right {
|
||||
position: absolute;
|
||||
bottom: 18px;
|
||||
@@ -2421,6 +2518,7 @@ export default {
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
.filter {
|
||||
margin-left: 35px;
|
||||
margin-right: 35px;
|
||||
@@ -2428,34 +2526,42 @@ export default {
|
||||
display: flex;
|
||||
justify-content: space-between;
|
||||
flex-wrap: wrap;
|
||||
|
||||
.filterItems {
|
||||
display: flex;
|
||||
flex-wrap: wrap;
|
||||
|
||||
.pathnameInp {
|
||||
margin-right: 20px;
|
||||
margin-bottom: 20px;
|
||||
}
|
||||
|
||||
.select {
|
||||
margin-right: 20px;
|
||||
margin-bottom: 20px;
|
||||
}
|
||||
|
||||
.addTimeBox {
|
||||
position: relative;
|
||||
display: flex;
|
||||
align-items: center;
|
||||
|
||||
.addTime {
|
||||
position: absolute;
|
||||
z-index: 10;
|
||||
margin-left: 10px;
|
||||
color: rgba(0, 0, 0, 0.4);
|
||||
}
|
||||
|
||||
.ant-picker {
|
||||
padding-left: 85px;
|
||||
}
|
||||
|
||||
.ant-picker-range .ant-picker-active-bar {
|
||||
margin-left: 85px;
|
||||
}
|
||||
}
|
||||
|
||||
.btn {
|
||||
padding: 0px 26px 0px 26px;
|
||||
height: 38px;
|
||||
@@ -2468,9 +2574,11 @@ export default {
|
||||
margin-right: 14px;
|
||||
flex-shrink: 0;
|
||||
cursor: pointer;
|
||||
|
||||
.search {
|
||||
background-size: 100%;
|
||||
}
|
||||
|
||||
.btnText {
|
||||
font-size: 14px;
|
||||
font-weight: 400;
|
||||
@@ -2479,6 +2587,7 @@ export default {
|
||||
margin-left: 5px;
|
||||
}
|
||||
}
|
||||
|
||||
.btnn {
|
||||
padding: 0px 26px 0px 26px;
|
||||
height: 38px;
|
||||
@@ -2491,9 +2600,11 @@ export default {
|
||||
margin-right: 14px;
|
||||
flex-shrink: 0;
|
||||
cursor: pointer;
|
||||
|
||||
.search {
|
||||
background-size: 100%;
|
||||
}
|
||||
|
||||
.btnText {
|
||||
font-size: 14px;
|
||||
font-weight: 400;
|
||||
@@ -2502,6 +2613,7 @@ export default {
|
||||
margin-left: 5px;
|
||||
}
|
||||
}
|
||||
|
||||
.btn1 {
|
||||
.search {
|
||||
width: 15px;
|
||||
@@ -2509,6 +2621,7 @@ export default {
|
||||
background-image: url("../../assets/images/courseManage/search0.png");
|
||||
}
|
||||
}
|
||||
|
||||
.btn2 {
|
||||
.search {
|
||||
width: 16px;
|
||||
@@ -2516,25 +2629,32 @@ export default {
|
||||
background-image: url("../../assets/images/courseManage/reset1.png");
|
||||
}
|
||||
}
|
||||
|
||||
.btn1:hover {
|
||||
background: rgba(64, 158, 255, 0.76);
|
||||
|
||||
.search {
|
||||
background-image: url("../../assets/images/courseManage/search0.png");
|
||||
}
|
||||
|
||||
.btnText {
|
||||
color: #ffffff;
|
||||
}
|
||||
}
|
||||
|
||||
.btn1:active {
|
||||
background: #0982ff;
|
||||
}
|
||||
|
||||
.btn2:hover {
|
||||
background: rgba(64, 158, 255, 0.1);
|
||||
}
|
||||
|
||||
.btn2:active {
|
||||
background: rgba(64, 158, 255, 0.2);
|
||||
}
|
||||
}
|
||||
|
||||
.btns {
|
||||
display: flex;
|
||||
// flex-wrap: wrap;
|
||||
@@ -2550,9 +2670,11 @@ export default {
|
||||
margin-right: 14px;
|
||||
flex-shrink: 0;
|
||||
cursor: pointer;
|
||||
|
||||
.search {
|
||||
background-size: 100%;
|
||||
}
|
||||
|
||||
.btnText {
|
||||
font-size: 14px;
|
||||
font-weight: 400;
|
||||
@@ -2561,28 +2683,35 @@ export default {
|
||||
margin-left: 5px;
|
||||
}
|
||||
}
|
||||
|
||||
.btn3 {
|
||||
margin-right: 0px;
|
||||
|
||||
.search {
|
||||
width: 17px;
|
||||
height: 18px;
|
||||
background-image: url("../../assets/images/courseManage/add0.png");
|
||||
}
|
||||
}
|
||||
|
||||
.btn3:hover {
|
||||
background: rgba(64, 158, 255, 0.76);
|
||||
|
||||
.search {
|
||||
background-image: url("../../assets/images/courseManage/add0.png");
|
||||
}
|
||||
|
||||
.btnText {
|
||||
color: #ffffff;
|
||||
}
|
||||
}
|
||||
|
||||
.btn3:active {
|
||||
background: #0982ff;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
.tableBox {
|
||||
// margin: 20px 38px 30px;
|
||||
margin: 10px 35px 0px 35px;
|
||||
@@ -2597,8 +2726,10 @@ export default {
|
||||
background: #f6f9fd;
|
||||
}
|
||||
}
|
||||
|
||||
.tableBox {
|
||||
padding-bottom: 20px;
|
||||
|
||||
.pa {
|
||||
// position: absolute;
|
||||
// bottom: 20px;
|
||||
@@ -2613,13 +2744,16 @@ export default {
|
||||
// bottom: -40px;
|
||||
}
|
||||
}
|
||||
|
||||
.operation {
|
||||
display: flex;
|
||||
justify-content: right;
|
||||
|
||||
.nSelect {
|
||||
.fb {
|
||||
display: flex;
|
||||
white-space: nowrap;
|
||||
|
||||
.jc {
|
||||
color: #4ea6ff;
|
||||
font-size: 14px;
|
||||
@@ -2629,12 +2763,14 @@ export default {
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
.tableSelect {
|
||||
// margin-right: 20px;
|
||||
display: flex;
|
||||
align-items: center;
|
||||
justify-content: right;
|
||||
white-space: nowrap;
|
||||
|
||||
.g1 {
|
||||
color: #4ea6ff;
|
||||
font-size: 14px;
|
||||
@@ -2650,6 +2786,7 @@ export default {
|
||||
.opa {
|
||||
display: flex;
|
||||
justify-content: right;
|
||||
|
||||
.opacation {
|
||||
font-size: 14px;
|
||||
font-weight: 400;
|
||||
@@ -2659,12 +2796,15 @@ export default {
|
||||
.activecls {
|
||||
display: inline-block;
|
||||
}
|
||||
|
||||
.errorCls {
|
||||
display: none;
|
||||
}
|
||||
|
||||
.more {
|
||||
position: relative;
|
||||
height: 100%;
|
||||
|
||||
.moreArrow {
|
||||
width: 13px;
|
||||
height: 7px;
|
||||
@@ -2674,6 +2814,7 @@ export default {
|
||||
margin: 2px;
|
||||
margin-left: 7px;
|
||||
}
|
||||
|
||||
.moreItems {
|
||||
width: 80px;
|
||||
height: 70px;
|
||||
@@ -2688,9 +2829,11 @@ export default {
|
||||
z-index: 999;
|
||||
}
|
||||
}
|
||||
|
||||
.more:hover .moreArrow {
|
||||
background-image: url("../../assets/images/navtop/up.png");
|
||||
}
|
||||
|
||||
.more:hover .moreItems {
|
||||
display: block;
|
||||
}
|
||||
|
||||
@@ -39,13 +39,7 @@
|
||||
<div class="inname">项目名称</div>
|
||||
</div>
|
||||
<div class="in">
|
||||
<a-input
|
||||
v-model:value="projectInfo.name"
|
||||
placeholder="请输入项目名称"
|
||||
show-count
|
||||
:maxlength="30"
|
||||
:disabled="viewDetail ? true : false"
|
||||
/>
|
||||
<NameInput placeholder="请输入项目名称" v-model:value="projectInfo.name" v-model:validate="projectInfo.validate" :maxlength="30" show-count></NameInput>
|
||||
</div>
|
||||
</div>
|
||||
<div class="name flex-top">
|
||||
@@ -250,25 +244,27 @@
|
||||
type="primary"
|
||||
class="btn1"
|
||||
style="margin-left: 20px"
|
||||
>确定</a-button
|
||||
>确定
|
||||
</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 {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 NameInput from "@/components/project/NameInput";
|
||||
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",
|
||||
@@ -277,6 +273,7 @@ export default {
|
||||
ProjectLevel,
|
||||
// ProjectClass,
|
||||
TrainClass,
|
||||
NameInput,
|
||||
OrgClass,
|
||||
},
|
||||
setup() {
|
||||
@@ -422,19 +419,24 @@ export default {
|
||||
if (!validate(state.projectInfo, errorMsgs)) {
|
||||
return;
|
||||
}
|
||||
if (!state.projectInfo.validate) {
|
||||
message.destroy();
|
||||
message.warning('项目名称重复,请修改名称!');
|
||||
return;
|
||||
}
|
||||
state.projectInfo.type = 3;
|
||||
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 },
|
||||
{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);
|
||||
});
|
||||
|
||||
@@ -179,13 +179,7 @@
|
||||
</div>
|
||||
<div class="inname">项目名称:</div>
|
||||
<div class="in">
|
||||
<a-input
|
||||
v-model:value="projectInfo.name"
|
||||
show-count
|
||||
:maxlength="30"
|
||||
placeholder="请输入项目名称"
|
||||
style="border-radius: 8px"
|
||||
/>
|
||||
<NameInput placeholder="请输入项目名称" v-model:value="projectInfo.name" v-model:validate="projectInfo.validate" :maxlength="30" show-count></NameInput>
|
||||
</div>
|
||||
</div>
|
||||
<div class="name">
|
||||
@@ -828,6 +822,7 @@ import OrgClass from "@/components/project/OrgClass";
|
||||
import dayjs from "dayjs";
|
||||
import * as moment from "moment";
|
||||
import { changeOwnership } from "@/api/method";
|
||||
import NameInput from "@/components/project/NameInput";
|
||||
|
||||
export default {
|
||||
name: "projectManage",
|
||||
@@ -835,6 +830,7 @@ export default {
|
||||
ProjOwnerShip,
|
||||
ProjPowerList,
|
||||
ProjCheckShip,
|
||||
NameInput,
|
||||
ProjectManager,
|
||||
// ProjectClass,
|
||||
OrgClass,
|
||||
@@ -965,6 +961,11 @@ export default {
|
||||
if (!validate(state.projectInfo, errorMsgs)) {
|
||||
return;
|
||||
}
|
||||
if (!state.projectInfo.validate) {
|
||||
message.destroy();
|
||||
message.warning('项目名称重复,请修改名称!');
|
||||
return;
|
||||
}
|
||||
api.createProject(state.projectInfo).then((res) => {
|
||||
state.doublepro = false;
|
||||
message.destroy();
|
||||
|
||||
Reference in New Issue
Block a user