This commit is contained in:
zhangsir
2024-02-05 17:53:43 +08:00
parent e8891b4dee
commit 490d7edbfd
8 changed files with 193 additions and 66 deletions

99
package-lock.json generated
View File

@@ -10,7 +10,7 @@
"dependencies": { "dependencies": {
"@wangeditor/editor": "^5.1.23", "@wangeditor/editor": "^5.1.23",
"@wangeditor/editor-for-vue": "^5.1.12", "@wangeditor/editor-for-vue": "^5.1.12",
"ant-design-vue": "^3.2.12", "ant-design-vue": "^4.1.2",
"axios": "^1.1.3", "axios": "^1.1.3",
"babel-eslint": "^10.1.0", "babel-eslint": "^10.1.0",
"core-js": "^3.8.3", "core-js": "^3.8.3",
@@ -83,14 +83,14 @@
} }
}, },
"node_modules/@ant-design/icons-svg": { "node_modules/@ant-design/icons-svg": {
"version": "4.2.1", "version": "4.4.2",
"resolved": "https://registry.npmmirror.com/@ant-design/icons-svg/-/icons-svg-4.2.1.tgz", "resolved": "https://registry.npmmirror.com/@ant-design/icons-svg/-/icons-svg-4.4.2.tgz",
"integrity": "sha512-EB0iwlKDGpG93hW8f85CTJTs4SvMX7tt5ceupvhALp1IF44SeUFOMhKUOYqpsoYWQKAOuTRDMqn75rEaKDp0Xw==" "integrity": "sha512-vHbT+zJEVzllwP+CM+ul7reTEfBR0vgxFe7+lREAsAA7YGsYpboiq2sQNeQeRvh09GfQgs/GyFEvZpJ9cLXpXA=="
}, },
"node_modules/@ant-design/icons-vue": { "node_modules/@ant-design/icons-vue": {
"version": "6.1.0", "version": "7.0.1",
"resolved": "https://registry.npmmirror.com/@ant-design/icons-vue/-/icons-vue-6.1.0.tgz", "resolved": "https://registry.npmmirror.com/@ant-design/icons-vue/-/icons-vue-7.0.1.tgz",
"integrity": "sha512-EX6bYm56V+ZrKN7+3MT/ubDkvJ5rK/O2t380WFRflDcVFgsvl3NLH7Wxeau6R8DbrO5jWR6DSTC3B6gYFp77AA==", "integrity": "sha512-eCqY2unfZK6Fe02AwFlDHLfoyEFreP6rBwAZMIJ1LugmfMiVgwWDYlp1YsRugaPtICYOabV1iWxXdP12u9U43Q==",
"dependencies": { "dependencies": {
"@ant-design/colors": "^6.0.0", "@ant-design/colors": "^6.0.0",
"@ant-design/icons-svg": "^4.2.1" "@ant-design/icons-svg": "^4.2.1"
@@ -1870,6 +1870,16 @@
"vue": "^3.2.0" "vue": "^3.2.0"
} }
}, },
"node_modules/@emotion/hash": {
"version": "0.9.1",
"resolved": "https://registry.npmmirror.com/@emotion/hash/-/hash-0.9.1.tgz",
"integrity": "sha512-gJB6HLm5rYwSLI6PQa+X1t5CFGrv1J1TWG+sOyMCeKz2ojaj6Fnl/rZEspogG+cvqbt4AE/2eIyD2QfLKTBNlQ=="
},
"node_modules/@emotion/unitless": {
"version": "0.8.1",
"resolved": "https://registry.npmmirror.com/@emotion/unitless/-/unitless-0.8.1.tgz",
"integrity": "sha512-KOEGMu6dmJZtpadb476IsZBclKvILjopjUii3V+7MnXIQCYh8W3NgNcgwo21n9LXZX6EDIKvqfjYxXebDwxKmQ=="
},
"node_modules/@eslint/eslintrc": { "node_modules/@eslint/eslintrc": {
"version": "0.4.3", "version": "0.4.3",
"resolved": "https://registry.npmmirror.com/@eslint/eslintrc/-/eslintrc-0.4.3.tgz", "resolved": "https://registry.npmmirror.com/@eslint/eslintrc/-/eslintrc-0.4.3.tgz",
@@ -3798,17 +3808,20 @@
} }
}, },
"node_modules/ant-design-vue": { "node_modules/ant-design-vue": {
"version": "3.2.20", "version": "4.1.2",
"resolved": "https://registry.npmmirror.com/ant-design-vue/-/ant-design-vue-3.2.20.tgz", "resolved": "https://registry.npmmirror.com/ant-design-vue/-/ant-design-vue-4.1.2.tgz",
"integrity": "sha512-YWpMfGaGoRastIXEYfCoJiaRiDHk4chqtYhlKQM5GqPt6NfvrM1Vg2e60yHtjxlZjed91wCMm0rAmyUr7Hwzdg==", "integrity": "sha512-ynFkDJLlHgumeK6Hr1UZ7PvQNZ1uBcri/pmejBdS3kRqHeA5VRsxneYDwa8YxA+uYB5YfT2jpYsSHsiMiCjRGg==",
"dependencies": { "dependencies": {
"@ant-design/colors": "^6.0.0", "@ant-design/colors": "^6.0.0",
"@ant-design/icons-vue": "^6.1.0", "@ant-design/icons-vue": "^7.0.0",
"@babel/runtime": "^7.10.5", "@babel/runtime": "^7.10.5",
"@ctrl/tinycolor": "^3.4.0", "@ctrl/tinycolor": "^3.5.0",
"@emotion/hash": "^0.9.0",
"@emotion/unitless": "^0.8.0",
"@simonwep/pickr": "~1.8.0", "@simonwep/pickr": "~1.8.0",
"array-tree-filter": "^2.1.0", "array-tree-filter": "^2.1.0",
"async-validator": "^4.0.0", "async-validator": "^4.0.0",
"csstype": "^3.1.1",
"dayjs": "^1.10.5", "dayjs": "^1.10.5",
"dom-align": "^1.12.1", "dom-align": "^1.12.1",
"dom-scroll-into-view": "^2.0.0", "dom-scroll-into-view": "^2.0.0",
@@ -3817,6 +3830,8 @@
"resize-observer-polyfill": "^1.5.1", "resize-observer-polyfill": "^1.5.1",
"scroll-into-view-if-needed": "^2.2.25", "scroll-into-view-if-needed": "^2.2.25",
"shallow-equal": "^1.0.0", "shallow-equal": "^1.0.0",
"stylis": "^4.1.3",
"throttle-debounce": "^5.0.0",
"vue-types": "^3.0.0", "vue-types": "^3.0.0",
"warning": "^4.0.0" "warning": "^4.0.0"
}, },
@@ -10925,6 +10940,11 @@
"postcss": "^8.2.15" "postcss": "^8.2.15"
} }
}, },
"node_modules/stylis": {
"version": "4.3.1",
"resolved": "https://registry.npmmirror.com/stylis/-/stylis-4.3.1.tgz",
"integrity": "sha512-EQepAV+wMsIaGVGX1RECzgrcqRRU/0sYOHkeLsZ3fzHaHXZy4DaOOX0vOlGQdlsjkh3mFHAIlVimpwAs4dslyQ=="
},
"node_modules/supports-color": { "node_modules/supports-color": {
"version": "5.5.0", "version": "5.5.0",
"resolved": "https://registry.npmmirror.com/supports-color/-/supports-color-5.5.0.tgz", "resolved": "https://registry.npmmirror.com/supports-color/-/supports-color-5.5.0.tgz",
@@ -11184,6 +11204,14 @@
"node": ">= 10.13.0" "node": ">= 10.13.0"
} }
}, },
"node_modules/throttle-debounce": {
"version": "5.0.0",
"resolved": "https://registry.npmmirror.com/throttle-debounce/-/throttle-debounce-5.0.0.tgz",
"integrity": "sha512-2iQTSgkkc1Zyk0MeVrt/3BvuOXYPl/R8Z0U2xxo9rjwNciaHDG3R+Lm6dh4EeUci49DanvBnuqI6jshoQQRGEg==",
"engines": {
"node": ">=12.22"
}
},
"node_modules/thunky": { "node_modules/thunky": {
"version": "1.1.0", "version": "1.1.0",
"resolved": "https://registry.npmmirror.com/thunky/-/thunky-1.1.0.tgz", "resolved": "https://registry.npmmirror.com/thunky/-/thunky-1.1.0.tgz",
@@ -12570,14 +12598,14 @@
} }
}, },
"@ant-design/icons-svg": { "@ant-design/icons-svg": {
"version": "4.2.1", "version": "4.4.2",
"resolved": "https://registry.npmmirror.com/@ant-design/icons-svg/-/icons-svg-4.2.1.tgz", "resolved": "https://registry.npmmirror.com/@ant-design/icons-svg/-/icons-svg-4.4.2.tgz",
"integrity": "sha512-EB0iwlKDGpG93hW8f85CTJTs4SvMX7tt5ceupvhALp1IF44SeUFOMhKUOYqpsoYWQKAOuTRDMqn75rEaKDp0Xw==" "integrity": "sha512-vHbT+zJEVzllwP+CM+ul7reTEfBR0vgxFe7+lREAsAA7YGsYpboiq2sQNeQeRvh09GfQgs/GyFEvZpJ9cLXpXA=="
}, },
"@ant-design/icons-vue": { "@ant-design/icons-vue": {
"version": "6.1.0", "version": "7.0.1",
"resolved": "https://registry.npmmirror.com/@ant-design/icons-vue/-/icons-vue-6.1.0.tgz", "resolved": "https://registry.npmmirror.com/@ant-design/icons-vue/-/icons-vue-7.0.1.tgz",
"integrity": "sha512-EX6bYm56V+ZrKN7+3MT/ubDkvJ5rK/O2t380WFRflDcVFgsvl3NLH7Wxeau6R8DbrO5jWR6DSTC3B6gYFp77AA==", "integrity": "sha512-eCqY2unfZK6Fe02AwFlDHLfoyEFreP6rBwAZMIJ1LugmfMiVgwWDYlp1YsRugaPtICYOabV1iWxXdP12u9U43Q==",
"requires": { "requires": {
"@ant-design/colors": "^6.0.0", "@ant-design/colors": "^6.0.0",
"@ant-design/icons-svg": "^4.2.1" "@ant-design/icons-svg": "^4.2.1"
@@ -13800,6 +13828,16 @@
"integrity": "sha512-PSBn3elNoanENc1vnCfh+3WA9fimRC7n+fWkf3rE5jvv+aBohNHABC/KAR5KWPecxWxDTVT1ERpRbOMRcOV/vA==", "integrity": "sha512-PSBn3elNoanENc1vnCfh+3WA9fimRC7n+fWkf3rE5jvv+aBohNHABC/KAR5KWPecxWxDTVT1ERpRbOMRcOV/vA==",
"requires": {} "requires": {}
}, },
"@emotion/hash": {
"version": "0.9.1",
"resolved": "https://registry.npmmirror.com/@emotion/hash/-/hash-0.9.1.tgz",
"integrity": "sha512-gJB6HLm5rYwSLI6PQa+X1t5CFGrv1J1TWG+sOyMCeKz2ojaj6Fnl/rZEspogG+cvqbt4AE/2eIyD2QfLKTBNlQ=="
},
"@emotion/unitless": {
"version": "0.8.1",
"resolved": "https://registry.npmmirror.com/@emotion/unitless/-/unitless-0.8.1.tgz",
"integrity": "sha512-KOEGMu6dmJZtpadb476IsZBclKvILjopjUii3V+7MnXIQCYh8W3NgNcgwo21n9LXZX6EDIKvqfjYxXebDwxKmQ=="
},
"@eslint/eslintrc": { "@eslint/eslintrc": {
"version": "0.4.3", "version": "0.4.3",
"resolved": "https://registry.npmmirror.com/@eslint/eslintrc/-/eslintrc-0.4.3.tgz", "resolved": "https://registry.npmmirror.com/@eslint/eslintrc/-/eslintrc-0.4.3.tgz",
@@ -15394,17 +15432,20 @@
} }
}, },
"ant-design-vue": { "ant-design-vue": {
"version": "3.2.20", "version": "4.1.2",
"resolved": "https://registry.npmmirror.com/ant-design-vue/-/ant-design-vue-3.2.20.tgz", "resolved": "https://registry.npmmirror.com/ant-design-vue/-/ant-design-vue-4.1.2.tgz",
"integrity": "sha512-YWpMfGaGoRastIXEYfCoJiaRiDHk4chqtYhlKQM5GqPt6NfvrM1Vg2e60yHtjxlZjed91wCMm0rAmyUr7Hwzdg==", "integrity": "sha512-ynFkDJLlHgumeK6Hr1UZ7PvQNZ1uBcri/pmejBdS3kRqHeA5VRsxneYDwa8YxA+uYB5YfT2jpYsSHsiMiCjRGg==",
"requires": { "requires": {
"@ant-design/colors": "^6.0.0", "@ant-design/colors": "^6.0.0",
"@ant-design/icons-vue": "^6.1.0", "@ant-design/icons-vue": "^7.0.0",
"@babel/runtime": "^7.10.5", "@babel/runtime": "^7.10.5",
"@ctrl/tinycolor": "^3.4.0", "@ctrl/tinycolor": "^3.5.0",
"@emotion/hash": "^0.9.0",
"@emotion/unitless": "^0.8.0",
"@simonwep/pickr": "~1.8.0", "@simonwep/pickr": "~1.8.0",
"array-tree-filter": "^2.1.0", "array-tree-filter": "^2.1.0",
"async-validator": "^4.0.0", "async-validator": "^4.0.0",
"csstype": "^3.1.1",
"dayjs": "^1.10.5", "dayjs": "^1.10.5",
"dom-align": "^1.12.1", "dom-align": "^1.12.1",
"dom-scroll-into-view": "^2.0.0", "dom-scroll-into-view": "^2.0.0",
@@ -15413,6 +15454,8 @@
"resize-observer-polyfill": "^1.5.1", "resize-observer-polyfill": "^1.5.1",
"scroll-into-view-if-needed": "^2.2.25", "scroll-into-view-if-needed": "^2.2.25",
"shallow-equal": "^1.0.0", "shallow-equal": "^1.0.0",
"stylis": "^4.1.3",
"throttle-debounce": "^5.0.0",
"vue-types": "^3.0.0", "vue-types": "^3.0.0",
"warning": "^4.0.0" "warning": "^4.0.0"
} }
@@ -21092,6 +21135,11 @@
"postcss-selector-parser": "^6.0.4" "postcss-selector-parser": "^6.0.4"
} }
}, },
"stylis": {
"version": "4.3.1",
"resolved": "https://registry.npmmirror.com/stylis/-/stylis-4.3.1.tgz",
"integrity": "sha512-EQepAV+wMsIaGVGX1RECzgrcqRRU/0sYOHkeLsZ3fzHaHXZy4DaOOX0vOlGQdlsjkh3mFHAIlVimpwAs4dslyQ=="
},
"supports-color": { "supports-color": {
"version": "5.5.0", "version": "5.5.0",
"resolved": "https://registry.npmmirror.com/supports-color/-/supports-color-5.5.0.tgz", "resolved": "https://registry.npmmirror.com/supports-color/-/supports-color-5.5.0.tgz",
@@ -21296,6 +21344,11 @@
} }
} }
}, },
"throttle-debounce": {
"version": "5.0.0",
"resolved": "https://registry.npmmirror.com/throttle-debounce/-/throttle-debounce-5.0.0.tgz",
"integrity": "sha512-2iQTSgkkc1Zyk0MeVrt/3BvuOXYPl/R8Z0U2xxo9rjwNciaHDG3R+Lm6dh4EeUci49DanvBnuqI6jshoQQRGEg=="
},
"thunky": { "thunky": {
"version": "1.1.0", "version": "1.1.0",
"resolved": "https://registry.npmmirror.com/thunky/-/thunky-1.1.0.tgz", "resolved": "https://registry.npmmirror.com/thunky/-/thunky-1.1.0.tgz",

View File

@@ -14,7 +14,7 @@
"dependencies": { "dependencies": {
"@wangeditor/editor": "^5.1.23", "@wangeditor/editor": "^5.1.23",
"@wangeditor/editor-for-vue": "^5.1.12", "@wangeditor/editor-for-vue": "^5.1.12",
"ant-design-vue": "^3.2.12", "ant-design-vue": "^4.1.2",
"axios": "^1.1.3", "axios": "^1.1.3",
"babel-eslint": "^10.1.0", "babel-eslint": "^10.1.0",
"core-js": "^3.8.3", "core-js": "^3.8.3",

View File

@@ -111,6 +111,7 @@ export default {
line-height: 36px; line-height: 36px;
cursor: pointer; cursor: pointer;
flex-shrink: 0; flex-shrink: 0;
text-decoration: none;
} }
.close { .close {

View File

@@ -2,8 +2,8 @@
<a-drawer <a-drawer
:visible="openCourseVisible" :visible="openCourseVisible"
class="drawerStyle addonlineDrawer" class="drawerStyle addonlineDrawer"
:width="1000" :width="1300"
title="开课" :closable="false"
placement="right"> placement="right">
<div class="drawerMain"> <div class="drawerMain">
<div class="header"> <div class="header">
@@ -148,6 +148,8 @@
@blur="onBlurStart" @blur="onBlurStart"
@focus="onFocusStart" @focus="onFocusStart"
@select="onDateSelect" @select="onDateSelect"
:open="openStart"
@ok="onOkStart"
/> />
<span style="margin: 0 10px;"></span> <span style="margin: 0 10px;"></span>
@@ -164,6 +166,8 @@
@focus="onFocusEnd" @focus="onFocusEnd"
@blur="onBlurEnd" @blur="onBlurEnd"
@select="onDateEnd" @select="onDateEnd"
:open="openEnd"
@ok="onOkEnd"
/> />
</div> </div>
</div> </div>
@@ -304,7 +308,7 @@
:check-value="1" :check-value="1"
:un-check-value="0" :un-check-value="0"
@change="toggleCheckboxes('projectSignFlag')"> @change="toggleCheckboxes('projectSignFlag')">
<span style="color: #6d7584">允许项目内人员临时到场参加(不在本场次培训的人员可以临时签到参加)</span> <span style="color: #6d7584">允许项目内人员临时到场参加(不在本场次培训的人员可以临时签到评估)</span>
</CheckBox> </CheckBox>
<CheckBox v-model="formData.outSignFlag" <CheckBox v-model="formData.outSignFlag"
:check-value="1" :check-value="1"
@@ -412,7 +416,7 @@
</a-drawer> </a-drawer>
</template> </template>
<script setup lang="jsx"> <script setup lang="jsx">
import {defineProps, ref, nextTick, computed} from "vue"; import {defineProps, ref, nextTick, computed,defineEmits } from "vue";
import {Form, message} from "ant-design-vue"; import {Form, message} from "ant-design-vue";
import FJUpload from "@/components/common/FJUpload"; import FJUpload from "@/components/common/FJUpload";
import CheckBox from "@/components/common/CheckBox"; import CheckBox from "@/components/common/CheckBox";
@@ -422,7 +426,7 @@ import AddHomework from "@/components/drawers/CommonHomework.vue";
import AddTest from "@/components/drawers/CommonTest.vue"; import AddTest from "@/components/drawers/CommonTest.vue";
import NameInput from "@/components/project/NameInput"; import NameInput from "@/components/project/NameInput";
import AssessmentList from "@/components/drawers/AssessmentList.vue"; import AssessmentList from "@/components/drawers/AssessmentList.vue";
import {COURSE_PLAN_EDIT, COURSE_PLAN_PAGE, DEL_PLAN, EXAM_DETAIL, WORK_DETAIL,PROJECT_DETAIL_MODIFY} from "@/api/apis"; import {COURSE_PLAN_EDIT, COURSE_PLAN_PAGE, DEL_PLAN, EXAM_DETAIL, WORK_DETAIL,PROJECT_DETAIL_MODIFY,PROJECT_RELEASE} from "@/api/apis";
import dayjs from "dayjs"; import dayjs from "dayjs";
import BaseTable from "@/components/common/BaseTable"; import BaseTable from "@/components/common/BaseTable";
import {request,useRowsPageNoInit} from "@/api/request"; import {request,useRowsPageNoInit} from "@/api/request";
@@ -646,18 +650,23 @@ function timeChange(timeStr) {
// formData.value.duration = durationText.value // formData.value.duration = durationText.value
// formData.value.duration || (formData.value.duration = dayjs(timeStr[1]).diff(dayjs(timeStr[0]),'minute')) // formData.value.duration || (formData.value.duration = dayjs(timeStr[1]).diff(dayjs(timeStr[0]),'minute'))
} }
function onDateSelect(date) { function onDateSelect(date) {
const month = String(date.$M+1).padStart(2, '0') const month = String(date.$M+1).padStart(2, '0')
const day = String(date.$D).padStart(2, '0') const day = String(date.$D).padStart(2, '0')
const hour = String(date.$D).padStart(2, '0') const hour = String(date.$D).padStart(2, '0')
const minute = String(date.$D).padStart(2, '0') const minute = String(date.$D).padStart(2, '0')
dateTime.value[0]=date.$y+'-'+month+'-'+day+' '+hour+':'+minute dateTime.value[0]=date.$y+'-'+month+'-'+day+' '+hour+':'+minute
} }
function onBlurStart(){ const openStart = ref(false)
const onOkStart = ()=>{
console.log(dateTime.value[0],'111') openStart.value = false
}
function onBlurStart(e){
dateTime.value[0]=e.target.value
openStart.value = false
} }
function onFocusStart(){ function onFocusStart(){
openStart.value = true
if(!dateTime.value[0]){ if(!dateTime.value[0]){
let now=new Date() let now=new Date()
let start=new Date(now.setFullYear(now.getFullYear(), now.getMonth(), now.getDate(), 0, 0)) let start=new Date(now.setFullYear(now.getFullYear(), now.getMonth(), now.getDate(), 0, 0))
@@ -670,6 +679,14 @@ function onFocusStart(){
function timeChangeEnd(timeStr){ function timeChangeEnd(timeStr){
formData.value.endTime = timeStr; formData.value.endTime = timeStr;
} }
const openEnd = ref(false)
const onOkEnd = ()=>{
openEnd.value = false
}
function onBlurEnd(e){
dateTime.value[1]=e.target.value
openEnd.value = false
}
function onDateEnd(date) { function onDateEnd(date) {
const month = String(date.$M+1).padStart(2, '0') const month = String(date.$M+1).padStart(2, '0')
const day = String(date.$D).padStart(2, '0') const day = String(date.$D).padStart(2, '0')
@@ -678,6 +695,7 @@ function onDateEnd(date) {
dateTime.value[1]=date.$y+'-'+month+'-'+day+' '+hour+':'+minute dateTime.value[1]=date.$y+'-'+month+'-'+day+' '+hour+':'+minute
} }
function onFocusEnd(){ function onFocusEnd(){
openEnd.value = true
if(!dateTime.value[1]){ if(!dateTime.value[1]){
let now=new Date() let now=new Date()
let start=new Date() let start=new Date()
@@ -712,12 +730,17 @@ const closeDrawer = () => {
}; };
const route = useRoute(); const route = useRoute();
const projectInfo = ref({}); const projectInfo = ref({});
const emit = defineEmits(['call-parent-method']);
const confirm = async()=>{ const confirm = async()=>{
closeDrawer(); closeDrawer();
await api.getDraftTask({projectId: route.query.projectId}).then((res) => { await api.getDraftTask({projectId: route.query.projectId}).then((res) => {
projectInfo.value = res.data.data projectInfo.value = res.data.data
}); });
request(PROJECT_DETAIL_MODIFY, { ...projectInfo.value }); request(PROJECT_DETAIL_MODIFY, { ...projectInfo.value });
//projectInfo.value.projectInfo.status=3
//request(PROJECT_RELEASE, {projectId: route.query.projectId})
emit('call-parent-method');
} }
const createNewCourse = () => { const createNewCourse = () => {
@@ -763,6 +786,7 @@ const del = (id,record) => {
}; };
async function coursePlanConfirm() { async function coursePlanConfirm() {
if(!dateTime.value[0]){ if(!dateTime.value[0]){
message.info('开始时间未填写') message.info('开始时间未填写')
return return

View File

@@ -115,14 +115,13 @@
:infoType="type" :infoType="type"
@finash="submitCall" @finash="submitCall"
> >
<a-button class="cus-btn" style="background: #4ea6ff; color: #fff"> <div :class="{ 'notClick': courseSelectRows.length > 0 }" class="btn btn1">
<template #icon><img style="margin-right: 10px" src="../../../assets/images/courseManage/add0.png"/> <div class="img3"></div>
</template> <div class="wz">添加学员</div>
添加学员 </div>
</a-button>
</CommonStudent> </CommonStudent>
<CommonImport @change="change" title="导入学员" :template-url="stuTemplateUrl" :data="{ targetId: offcoursePlanId, type:3 }" :url="`/admin/student/importStudent`" name="uploadFile"> <CommonImport @change="change" title="导入学员" :template-url="stuTemplateUrl" :data="{ targetId: offcoursePlanId, type:3 }" :url="`/admin/student/importStudent`" name="uploadFile">
<div class="btn btn1" style="margin-right: 20px;margin-left: 20px"> <div :class="{ 'notClick': courseSelectRows.length > 0 }" class="btn btn1" style="margin-right: 20px;margin-left: 20px">
<div class="img1"></div> <div class="img1"></div>
<div class="wz">导入学员</div> <div class="wz">导入学员</div>
</div> </div>
@@ -292,7 +291,7 @@ const columns = ref([
ellipsis: true, ellipsis: true,
className: "h", className: "h",
customRender: (text) => customRender: (text) =>
<span>{text.record.signStatus ? "签到" : text.record.leaveStatus ? "请假" : inAttendanceTime.value ? "-" : "缺勤"}</span> <span>{text.record.signStatus ? "签到" : text.record.leaveStatus ? "请假" : inAttendanceTime.value ? "未签到" : "缺勤"}</span>
}, },
{ {
title: "签到状态", title: "签到状态",
@@ -303,7 +302,7 @@ const columns = ref([
ellipsis: true, ellipsis: true,
className: "h", className: "h",
customRender: (text) => customRender: (text) =>
<span>{(text.record.signStatus || text.record.leaveStatus) ? "正常" : inAttendanceTime.value ? "-" : "异常"}</span> <span>{(text.record.signStatus || text.record.leaveStatus) ? "正常" : inAttendanceTime.value ? "未签到" : "异常"}</span>
}, },
{ {
title: "考勤情况", title: "考勤情况",
@@ -483,12 +482,12 @@ const change = (e) => {
.notClick{ .notClick{
// cursor: pointer; // cursor: pointer;
// pointer-events: none; // pointer-events: none;
// width: 100px; width: 100px;
// height: 40px; height: 40px;
// border: 1px solid #3b3c3c !important; border: 1px solid #d7d7d7 !important;
// border-radius: 8px; border-radius: 8px;
// color: #fff !important; color: #fff !important;
// background-color: #3b3c3c !important; background-color: #d7d7d7 !important;
} }
.me { .me {
@@ -735,6 +734,13 @@ const change = (e) => {
background-size: 100% 100%; background-size: 100% 100%;
margin-right: 7px; margin-right: 7px;
} }
.img3 {
width: 15px;
height: 17px;
background-image: url(../../../assets/images/courseManage/add0.png);
background-size: 100% 100%;
margin-right: 7px;
}
} }
.btn1 { .btn1 {
@@ -780,6 +786,13 @@ const change = (e) => {
background-size: 100% 100%; background-size: 100% 100%;
margin-right: 7px; margin-right: 7px;
} }
.img3 {
width: 19px;
height: 19px;
background-image: url(../../../assets/images/courseManage/add0.png);
background-size: 100% 100%;
margin-right: 7px;
}
} }
.btn1 { .btn1 {

View File

@@ -15,7 +15,7 @@ import 'element-plus/dist/index.css'
// import zhCn from 'element-plus/es/locale/lang/zh-cn' // import zhCn from 'element-plus/es/locale/lang/zh-cn'
import "@/assets/scss/common.scss" import "@/assets/scss/common.scss"
import Antd from 'ant-design-vue'; import Antd from 'ant-design-vue';
import 'ant-design-vue/dist/antd.css'; import 'ant-design-vue/dist/reset.css';
import {request} from "@/api/request"; import {request} from "@/api/request";
import {USER_INFO, USER_PERMISSION, VALIDATE_TOKEN} from "@/api/apis"; import {USER_INFO, USER_PERMISSION, VALIDATE_TOKEN} from "@/api/apis";
import * as api1 from "@/api/index1"; import * as api1 from "@/api/index1";

View File

@@ -965,6 +965,8 @@
@blur="onBlurStart" @blur="onBlurStart"
@focus="onFocusStart" @focus="onFocusStart"
@select="onDateSelect" @select="onDateSelect"
:open="openStart"
@ok="onOkStart"
/> />
<span style="margin: 0 10px;">至</span> <span style="margin: 0 10px;">至</span>
<a-date-picker <a-date-picker
@@ -979,6 +981,8 @@
@focus="onFocusEnd" @focus="onFocusEnd"
@blur="onBlurEnd" @blur="onBlurEnd"
@select="onDateEnd" @select="onDateEnd"
:open="openEnd"
@ok="onOkEnd"
/> />
</div> </div>
</div> </div>
@@ -2898,11 +2902,16 @@ export default defineComponent({
const minute = String(date.$D).padStart(2, '0') const minute = String(date.$D).padStart(2, '0')
state.xjkkinputV3[0]=date.$y+'-'+month+'-'+day+' '+hour+':'+minute state.xjkkinputV3[0]=date.$y+'-'+month+'-'+day+' '+hour+':'+minute
} }
function onBlurStart(){ const openStart = ref(false)
onFocusStart() const onOkStart = ()=>{
console.log(state.xjkkinputV3[0],'dateTime') openStart.value = false
}
function onBlurStart(e){
state.xjkkinputV3[0]=e.target.value
openStart.value = false
} }
function onFocusStart(){ function onFocusStart(){
openStart.value = true
if(!state.xjkkinputV3[0]){ if(!state.xjkkinputV3[0]){
let now=new Date() let now=new Date()
let start=new Date(now.setFullYear(now.getFullYear(), now.getMonth(), now.getDate(), 0, 0)) let start=new Date(now.setFullYear(now.getFullYear(), now.getMonth(), now.getDate(), 0, 0))
@@ -2922,7 +2931,16 @@ function onDateEnd(date) {
const minute = String(date.$D).padStart(2, '0') const minute = String(date.$D).padStart(2, '0')
state.xjkkinputV3[1]=date.$y+'-'+month+'-'+day+' '+hour+':'+minute state.xjkkinputV3[1]=date.$y+'-'+month+'-'+day+' '+hour+':'+minute
} }
const openEnd = ref(false)
const onOkEnd = ()=>{
openEnd.value = false
}
function onBlurEnd(e){
state.xjkkinputV3[1]=e.target.value
openEnd.value = false
}
function onFocusEnd(){ function onFocusEnd(){
openEnd.value = true
if(!state.xjkkinputV3[1]){ if(!state.xjkkinputV3[1]){
let now=new Date() let now=new Date()
let start=new Date() let start=new Date()
@@ -5216,11 +5234,16 @@ function onFocusEnd(){
editBeginClass, editBeginClass,
onDateSelect, onDateSelect,
onOkStart,
openStart,
onBlurStart, onBlurStart,
onFocusStart, onFocusStart,
// timeChangeEnd, // timeChangeEnd,
onDateEnd, onDateEnd,
openEnd,
onOkEnd,
onFocusEnd, onFocusEnd,
onBlurEnd,
inputWeightChange, inputWeightChange,
totalWeightSum, totalWeightSum,
inputAdd, inputAdd,

View File

@@ -637,13 +637,14 @@
</a-menu> </a-menu>
</template> </template>
</a-dropdown> </a-dropdown>
</div> <div v-if="item.assessmentIds.filter(id => id !== null).length==1&&item.type == 2">
<div class="operations_dropdown" v-if="item.assessmentIds.filter(id => id !== null).length==1&&item.type == 2">
<a class="ant-dropdown-link" @click="qrcodeAssement(item)"> <a class="ant-dropdown-link" @click="qrcodeAssement(item)">
评估二维码 评估二维码
<DownOutlined /> <DownOutlined />
</a> </a>
</div> </div>
</div>
<div class="operations_dropdown" v-if="item.assessmentIds.length!=1"> <div class="operations_dropdown" v-if="item.assessmentIds.length!=1">
<a-dropdown :getPopupContainer='(triggerNode) => triggerNode.parentNode' v-if="item.type == 2" :trigger="['click']" v-model:visible="visibleEwm[item.id]"> <a-dropdown :getPopupContainer='(triggerNode) => triggerNode.parentNode' v-if="item.type == 2" :trigger="['click']" v-model:visible="visibleEwm[item.id]">
<a class="ant-dropdown-link" @click="qrcodeVisible(item)"> <a class="ant-dropdown-link" @click="qrcodeVisible(item)">
@@ -2342,7 +2343,7 @@
/> />
<!-- 换组弹窗 --> <!-- 换组弹窗 -->
<!-- 面授课开课弹框 --> <!-- 面授课开课弹框 -->
<AddOpenCourse ref="coursePlanRef" :type="1"/> <AddOpenCourse @call-parent-method="getTaskListAll" ref="coursePlanRef" :type="1"/>
</div> </div>
</template> </template>
<script lang="jsx"> <script lang="jsx">
@@ -2403,6 +2404,8 @@ import ChangeGroupModal from "@/components/student/ChangeGroupModal.vue";
import { checkPer,fixDoublePer } from "@/utils/utils"; import { checkPer,fixDoublePer } from "@/utils/utils";
import ImpoterGroupLeader from "@/components/drawers/project/ImpoterGroupLeader.vue"; import ImpoterGroupLeader from "@/components/drawers/project/ImpoterGroupLeader.vue";
import qrCode from "@/utils/qrCode"; import qrCode from "@/utils/qrCode";
import {request} from "@/api/request";
import { PROJECT_RELEASE} from "@/api/apis";
export default { export default {
name: "taskPage", name: "taskPage",
components: { components: {
@@ -3198,6 +3201,14 @@ export default {
return store.state.orgtreeList ? store.state.orgtreeList : []; return store.state.orgtreeList ? store.state.orgtreeList : [];
}); });
//任务大纲渲染 //任务大纲渲染
const getTaskListAll = () =>{
// request(PROJECT_RELEASE, {projectId: route.query.projectId})
getTaskList();
getTaskInfo();
getGroup();
getOverview();
reget();
}
const getTaskList = () => { const getTaskList = () => {
let objtl = { let objtl = {
projectId: state.projectId, projectId: state.projectId,
@@ -5137,6 +5148,7 @@ export default {
showCodeModal, showCodeModal,
tabsChange, tabsChange,
getTaskList, getTaskList,
getTaskListAll,
rankTimeChange, rankTimeChange,
getbillboard, getbillboard,
rankSearch, rankSearch,
@@ -5227,7 +5239,8 @@ export default {
handleMenuClickpg, handleMenuClickpg,
coursePlanRef, coursePlanRef,
openCourse, openCourse,
exportScore exportScore,
@@ -6657,7 +6670,7 @@ export default {
flex-shrink: 0; flex-shrink: 0;
margin-right: 24px; margin-right: 24px;
display: flex; display: flex;
flex-wrap: wrap; // flex-wrap: wrap;
align-items: center; align-items: center;
padding: 25px 0px; padding: 25px 0px;
margin-left: 22px; margin-left: 22px;
@@ -6735,7 +6748,7 @@ export default {
} }
.progress { .progress {
width: 168px; width: 60px;
margin-left: 10px; margin-left: 10px;
margin-right: 50px; margin-right: 50px;
flex-grow: 1; flex-grow: 1;
@@ -6743,9 +6756,9 @@ export default {
cursor: pointer; cursor: pointer;
width: 16px; width: 16px;
height: 18px; height: 18px;
background-image: url(@/assets/images/coursewareManage/export1.png); background-image: url(@/assets/images/coursewareManage/export.png);
background-size: 100% 100%; background-size: 100% 100%;
background-color: #4ea6ff; // background-color: #4ea6ff;
margin-left: 7px; margin-left: 7px;
} }
.progresstext { .progresstext {