123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182 |
- <template>
- <div>
- <el-dialog
- class="select-dimension-dialog page-dialog"
- :visible.sync="modalIsShow"
- title="选择知识点"
- top="10px"
- width="600px"
- :close-on-click-modal="false"
- :close-on-press-escape="false"
- append-to-body
- @opened="visibleChange"
- >
- <div class="box-justify mb-2">
- <div></div>
- <el-button type="success" @click="toImport">导入课程知识点</el-button>
- </div>
- <div class="part-box part-box-pad mb-0">
- <el-tree
- ref="treeRef"
- :data="treeData"
- show-checkbox
- check-on-click-node
- check-strictly
- :expand-on-click-node="false"
- node-key="id"
- default-expand-all
- :props="defaultProps"
- >
- </el-tree>
- </div>
- <div slot="footer">
- <el-button type="primary" @click="submit">确认</el-button>
- <el-button @click="cancel">取消</el-button>
- </div>
- </el-dialog>
- <!-- ImportFile -->
- <import-file
- ref="ImportFile"
- title="导入课程知识点"
- :upload-url="uploadUrl"
- :upload-data="{
- teachCourseId: course.teachCourseId,
- }"
- :format="['xls', 'xlsx']"
- :download-handle="() => downloadTemplate('courseProperty')"
- :download-filename="dfilename"
- :auto-upload="false"
- @upload-success="dimensionUploaded"
- ></import-file>
- </div>
- </template>
- <script>
- import { courseDimensionTree } from "../../api";
- import ImportFile from "@/components/ImportFile.vue";
- import templateDownload from "@/mixins/templateDownload";
- export default {
- name: "select-dimension-dialog",
- components: { ImportFile },
- mixins: [templateDownload],
- props: {
- selectedData: {
- type: Array,
- default() {
- return [];
- },
- },
- disabledData: {
- type: Array,
- default() {
- return [];
- },
- },
- course: {
- type: Object,
- default() {
- return {
- teachCourseId: "",
- };
- },
- },
- },
- data() {
- return {
- modalIsShow: false,
- treeData: [],
- defaultProps: {
- children: "children",
- label: "name",
- },
- // import
- uploadUrl: "/api/admin/teach/course_target/dimension_import",
- dfilename: "课程知识点导入模板.xlsx",
- };
- },
- watch: {
- "course.teachCourseId": {
- immediate: true,
- handler(val, oldVal) {
- if (val !== oldVal) {
- this.getTree();
- }
- },
- },
- },
- methods: {
- async dimensionUploaded() {
- const data = await courseDimensionTree({
- teachCourseId: this.course.teachCourseId,
- });
- this.treeData = data || [];
- // 已存在课程目标的情况,强制关闭弹窗
- if (this.disabledData.length) {
- this.modalIsShow = false;
- this.$emit("enforce-close");
- return;
- }
- this.$nextTick(() => {
- this.$refs.treeRef.setCheckedKeys([]);
- });
- },
- async getTree() {
- if (!this.course.teachCourseId) return;
- const data = await courseDimensionTree({
- teachCourseId: this.course.teachCourseId,
- });
- this.treeData = data || [];
- this.updateDisableNode();
- },
- updateDisableNode() {
- const mdTree = (list) => {
- list.forEach((item) => {
- item.disabled = this.disabledData.includes(item.id);
- if (item.children && item.children.length) mdTree(item.children);
- });
- };
- mdTree(this.treeData);
- },
- toImport() {
- this.$refs.ImportFile.open();
- },
- visibleChange() {
- this.updateDisableNode();
- this.$refs.treeRef.setCheckedKeys(this.selectedData);
- },
- cancel() {
- this.modalIsShow = false;
- },
- open() {
- this.modalIsShow = true;
- },
- submit() {
- const selectedNodes = this.$refs.treeRef.getCheckedNodes();
- console.log(selectedNodes);
- if (!selectedNodes.length) {
- this.$message.error("请选择知识点");
- return;
- }
- this.$emit(
- "confirm",
- selectedNodes.map((item) => {
- return {
- id: item.id,
- name: item.name,
- code: item.code,
- };
- })
- );
- this.cancel();
- },
- },
- };
- </script>
|