-- 项目名称校验

This commit is contained in:
yuping
2022-12-10 21:00:42 +08:00
parent 0a8e7c3651
commit f74c68fc25
6 changed files with 1031 additions and 814 deletions

View File

@@ -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) =>

View 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>

View File

@@ -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();

View File

@@ -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;
}

View File

@@ -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);
});

View File

@@ -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();