Files
education/frontend/node_modules/.cache/babel-loader/f5738bf7ca41e82c31566a9de808b78a.json
T

1 line
59 KiB
JSON
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
{"remainingRequest":"C:\\Users\\Admin\\Desktop\\education\\frontend\\node_modules\\babel-loader\\lib\\index.js!C:\\Users\\Admin\\Desktop\\education\\frontend\\node_modules\\cache-loader\\dist\\cjs.js??ref--0-0!C:\\Users\\Admin\\Desktop\\education\\frontend\\node_modules\\vue-loader\\lib\\index.js??vue-loader-options!C:\\Users\\Admin\\Desktop\\education\\frontend\\src\\views\\teachOffice\\shiftSemester\\ClassCalendarDialog.vue?vue&type=script&lang=js","dependencies":[{"path":"C:\\Users\\Admin\\Desktop\\education\\frontend\\src\\views\\teachOffice\\shiftSemester\\ClassCalendarDialog.vue","mtime":1787649343833},{"path":"C:\\Users\\Admin\\Desktop\\education\\frontend\\babel.config.js","mtime":1787567871334},{"path":"C:\\Users\\Admin\\Desktop\\education\\frontend\\node_modules\\cache-loader\\dist\\cjs.js","mtime":1787309791955},{"path":"C:\\Users\\Admin\\Desktop\\education\\frontend\\node_modules\\babel-loader\\lib\\index.js","mtime":1787309793142},{"path":"C:\\Users\\Admin\\Desktop\\education\\frontend\\node_modules\\cache-loader\\dist\\cjs.js","mtime":1787309791955},{"path":"C:\\Users\\Admin\\Desktop\\education\\frontend\\node_modules\\vue-loader\\lib\\index.js","mtime":1787309793790}],"contextDependencies":[],"result":[{"type":"Buffer","data":"base64:InVzZSBzdHJpY3QiOwoKdmFyIF9pbnRlcm9wUmVxdWlyZURlZmF1bHQgPSByZXF1aXJlKCJDOi9Vc2Vycy9BZG1pbi9EZXNrdG9wL2VkdWNhdGlvbi9mcm9udGVuZC9ub2RlX21vZHVsZXMvQGJhYmVsL3J1bnRpbWUvaGVscGVycy9pbnRlcm9wUmVxdWlyZURlZmF1bHQuanMiKS5kZWZhdWx0OwpPYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgIl9fZXNNb2R1bGUiLCB7CiAgdmFsdWU6IHRydWUKfSk7CmV4cG9ydHMuZGVmYXVsdCA9IHZvaWQgMDsKdmFyIF9vYmplY3RTcHJlYWQyID0gX2ludGVyb3BSZXF1aXJlRGVmYXVsdChyZXF1aXJlKCJDOi9Vc2Vycy9BZG1pbi9EZXNrdG9wL2VkdWNhdGlvbi9mcm9udGVuZC9ub2RlX21vZHVsZXMvQGJhYmVsL3J1bnRpbWUvaGVscGVycy9vYmplY3RTcHJlYWQyLmpzIikpOwpyZXF1aXJlKCJjb3JlLWpzL21vZHVsZXMvZXMuYXJyYXkuY29uY2F0LmpzIik7CnJlcXVpcmUoImNvcmUtanMvbW9kdWxlcy9lcy5hcnJheS5tYXAuanMiKTsKcmVxdWlyZSgiY29yZS1qcy9tb2R1bGVzL2VzLmFycmF5LnJlZHVjZS5qcyIpOwpyZXF1aXJlKCJjb3JlLWpzL21vZHVsZXMvZXMuYXJyYXkuc2xpY2UuanMiKTsKcmVxdWlyZSgiY29yZS1qcy9tb2R1bGVzL2VzLm51bWJlci5jb25zdHJ1Y3Rvci5qcyIpOwpyZXF1aXJlKCJjb3JlLWpzL21vZHVsZXMvZXMub2JqZWN0LmtleXMuanMiKTsKcmVxdWlyZSgiY29yZS1qcy9tb2R1bGVzL2VzLm9iamVjdC50by1zdHJpbmcuanMiKTsKcmVxdWlyZSgiY29yZS1qcy9tb2R1bGVzL2VzbmV4dC5pdGVyYXRvci5jb25zdHJ1Y3Rvci5qcyIpOwpyZXF1aXJlKCJjb3JlLWpzL21vZHVsZXMvZXNuZXh0Lml0ZXJhdG9yLmZvci1lYWNoLmpzIik7CnJlcXVpcmUoImNvcmUtanMvbW9kdWxlcy9lc25leHQuaXRlcmF0b3IubWFwLmpzIik7CnJlcXVpcmUoImNvcmUtanMvbW9kdWxlcy9lc25leHQuaXRlcmF0b3IucmVkdWNlLmpzIik7CnJlcXVpcmUoImNvcmUtanMvbW9kdWxlcy93ZWIuZG9tLWNvbGxlY3Rpb25zLmZvci1lYWNoLmpzIik7CnZhciBfQ2xhc3NUZWFtU2VsZWN0RGlhbG9nID0gX2ludGVyb3BSZXF1aXJlRGVmYXVsdChyZXF1aXJlKCIuL0NsYXNzVGVhbVNlbGVjdERpYWxvZy52dWUiKSk7CnZhciBfY2xhc3NDYWxlbmRhciA9IHJlcXVpcmUoIkAvYXBpL3N0dWRlbnRSZWNvcmRzL2NsYXNzQ2FsZW5kYXIiKTsKLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KdmFyIF9kZWZhdWx0MiA9IGV4cG9ydHMuZGVmYXVsdCA9IHsKICBuYW1lOiAnQ2xhc3NDYWxlbmRhckRpYWxvZycsCiAgY29tcG9uZW50czogewogICAgQ2xhc3NUZWFtU2VsZWN0RGlhbG9nOiBfQ2xhc3NUZWFtU2VsZWN0RGlhbG9nLmRlZmF1bHQKICB9LAogIHByb3BzOiB7CiAgICB2aXNpYmxlOiB7CiAgICAgIHR5cGU6IEJvb2xlYW4sCiAgICAgIGRlZmF1bHQ6IGZhbHNlCiAgICB9LAogICAgLyoqIOmAieS4reeahOePreasoeWtpuacn+iusOW9le+8iOWQqyBiaC94eWRiaC94cWRjL25kL3h5ZG1jL2t4cnEvanNyce+8iSAqLwogICAgc2VtZXN0ZXI6IHsKICAgICAgdHlwZTogT2JqZWN0LAogICAgICBkZWZhdWx0OiBudWxsCiAgICB9LAogICAgLyoqIOWPr+mAieeahOebruagh+ePreasoeWtpuacn+WIl+ihqO+8iOW3suWQq+ePreasoeWQjeensOeahOWujOaVtOWIl+ihqO+8iSAqLwogICAgc2VtZXN0ZXJPcHRpb25zOiB7CiAgICAgIHR5cGU6IEFycmF5LAogICAgICBkZWZhdWx0OiBmdW5jdGlvbiBfZGVmYXVsdCgpIHsKICAgICAgICByZXR1cm4gW107CiAgICAgIH0KICAgIH0KICB9LAogIGRhdGE6IGZ1bmN0aW9uIGRhdGEoKSB7CiAgICByZXR1cm4gewogICAgICBsb2FkaW5nOiBmYWxzZSwKICAgICAgc2F2aW5nOiBmYWxzZSwKICAgICAgcmVjb3JkczogW10sCiAgICAgIHNlbGVjdGlvbjogW10sCiAgICAgIC8vID09PT09PT09PT09PT09PT09PT09IOaWsOWini/nvJbovpEgPT09PT09PT09PT09PT09PT09PT0KICAgICAgZWRpdFZpc2libGU6IGZhbHNlLAogICAgICBlZGl0TW9kZTogJ2FkZCcsCiAgICAgIGVkaXRGb3JtOiB0aGlzLmNyZWF0ZUVtcHR5RWRpdEZvcm0oKSwKICAgICAgZWRpdFJ1bGVzOiB7CiAgICAgICAgamM6IFt7CiAgICAgICAgICByZXF1aXJlZDogdHJ1ZSwKICAgICAgICAgIG1lc3NhZ2U6ICfor7fovpPlhaXor77nqIvnroDnp7AnLAogICAgICAgICAgdHJpZ2dlcjogJ2JsdXInCiAgICAgICAgfV0KICAgICAgfSwKICAgICAgLy8gPT09PT09PT09PT09PT09PT09PT0g5aSN5Yi25Yiw5YW25a6D54+t5qyhID09PT09PT09PT09PT09PT09PT09CiAgICAgIHRlYW1TZWxlY3RWaXNpYmxlOiBmYWxzZSwKICAgICAgYXBwbHlNb2RlOiAncmVnaW9uJywKICAgICAgY29weU5vdGU6ICcnCiAgICB9OwogIH0sCiAgY29tcHV0ZWQ6IHsKICAgIGRpYWxvZ1Zpc2libGU6IHsKICAgICAgZ2V0OiBmdW5jdGlvbiBnZXQoKSB7CiAgICAgICAgcmV0dXJuIHRoaXMudmlzaWJsZTsKICAgICAgfSwKICAgICAgc2V0OiBmdW5jdGlvbiBzZXQodmFsKSB7CiAgICAgICAgdGhpcy4kZW1pdCgndXBkYXRlOnZpc2libGUnLCB2YWwpOwogICAgICB9CiAgICB9LAogICAgc2FmZVNlbWVzdGVyOiBmdW5jdGlvbiBzYWZlU2VtZXN0ZXIoKSB7CiAgICAgIHJldHVybiB0aGlzLnNlbWVzdGVyIHx8IHt9OwogICAgfSwKICAgIGNsYXNzTmFtZTogZnVuY3Rpb24gY2xhc3NOYW1lKCkgewogICAgICB2YXIgcyA9IHRoaXMuc2FmZVNlbWVzdGVyOwogICAgICByZXR1cm4gcy54eWRtYyB8fCBzLnh5ZGJoIHx8ICcnOwogICAgfSwKICAgIHNlbWVzdGVyVGl0bGU6IGZ1bmN0aW9uIHNlbWVzdGVyVGl0bGUoKSB7CiAgICAgIHZhciBzID0gdGhpcy5zYWZlU2VtZXN0ZXI7CiAgICAgIHZhciBuZCA9IHMubmQgIT09IHVuZGVmaW5lZCAmJiBzLm5kICE9PSBudWxsICYmIHMubmQgIT09ICcnID8gIiIuY29uY2F0KHMubmQsICJcdTVFNzQiKSA6ICcnOwogICAgICB2YXIgeHEgPSB0aGlzLnhxZGNMYWJlbChzLnhxZGMpOwogICAgICByZXR1cm4gIiIuY29uY2F0KG5kKS5jb25jYXQoeHEpOwogICAgfSwKICAgIHNlbWVzdGVyV2Vla3M6IGZ1bmN0aW9uIHNlbWVzdGVyV2Vla3MoKSB7CiAgICAgIHZhciBzID0gdGhpcy5zYWZlU2VtZXN0ZXI7CiAgICAgIGlmICghcy5reHJxIHx8ICFzLmpzcnEpIHJldHVybiAnLSc7CiAgICAgIHZhciBzdGFydCA9IG5ldyBEYXRlKFN0cmluZyhzLmt4cnEpLnNsaWNlKDAsIDEwKSk7CiAgICAgIHZhciBlbmQgPSBuZXcgRGF0ZShTdHJpbmcocy5qc3JxKS5zbGljZSgwLCAxMCkpOwogICAgICB2YXIgZGlmZiA9IE1hdGgucm91bmQoKGVuZCAtIHN0YXJ0KSAvICgxMDAwICogNjAgKiA2MCAqIDI0KSkgKyAxOwogICAgICByZXR1cm4gZGlmZiA+IDAgPyBNYXRoLmNlaWwoZGlmZiAvIDcpIDogJy0nOwogICAgfSwKICAgIC8qKiDnj63ljobnu5/orqHvvJror77nqIvmlbAgLyDmgLvlrabml7YgLyDmgLvlrabliIYgKi9zdW1tYXJ5OiBmdW5jdGlvbiBzdW1tYXJ5KCkgewogICAgICB2YXIgdG90YWxYcyA9IHRoaXMucmVjb3Jkcy5yZWR1Y2UoZnVuY3Rpb24gKHN1bSwgcikgewogICAgICAgIHJldHVybiBzdW0gKyAoTnVtYmVyKHIueHMpIHx8IDApOwogICAgICB9LCAwKTsKICAgICAgdmFyIHRvdGFsWGYgPSB0aGlzLnJlY29yZHMucmVkdWNlKGZ1bmN0aW9uIChzdW0sIHIpIHsKICAgICAgICByZXR1cm4gc3VtICsgKE51bWJlcihyLnhmKSB8fCAwKTsKICAgICAgfSwgMCk7CiAgICAgIHJldHVybiB7CiAgICAgICAgdG90YWxYczogdG90YWxYcywKICAgICAgICB0b3RhbFhmOiB0b3RhbFhmCiAgICAgIH07CiAgICB9LAogICAgZWRpdFRpdGxlOiBmdW5jdGlvbiBlZGl0VGl0bGUoKSB7CiAgICAgIHJldHVybiB0aGlzLmVkaXRNb2RlID09PSAnZWRpdCcgPyAn57yW6L6R54+t5Y6G6K6w5b2VJyA6ICfmlrDlop7nj63ljoborrDlvZUnOwogICAgfQogIH0sCiAgd2F0Y2g6IHsKICAgIHZpc2libGU6IGZ1bmN0aW9uIHZpc2libGUodmFsKSB7CiAgICAgIGlmICh2YWwpIHsKICAgICAgICB0aGlzLmxvYWREYXRhKCk7CiAgICAgIH0KICAgIH0KICB9LAogIG1ldGhvZHM6IHsKICAgIC8qIC0tLS0tLS0tLS0g5qC85byP5YyWIC0tLS0tLS0tLS0gKi9mbXREYXRlOiBmdW5jdGlvbiBmbXREYXRlKHZhbCkgewogICAgICBpZiAoIXZhbCkgcmV0dXJuICctJzsKICAgICAgcmV0dXJuIFN0cmluZyh2YWwpLnNsaWNlKDAsIDEwKTsKICAgIH0sCiAgICB4cWRjTGFiZWw6IGZ1bmN0aW9uIHhxZGNMYWJlbCh2YWwpIHsKICAgICAgaWYgKHZhbCA9PT0gMSB8fCB2YWwgPT09ICcxJykgcmV0dXJuICfnrKwx5a2m5pyfJzsKICAgICAgaWYgKHZhbCA9PT0gMiB8fCB2YWwgPT09ICcyJykgcmV0dXJuICfnrKwy5a2m5pyfJzsKICAgICAgaWYgKHZhbCA9PT0gMyB8fCB2YWwgPT09ICczJykgcmV0dXJuICfnrKwz5a2m5pyfJzsKICAgICAgcmV0dXJuIHZhbCAhPT0gdW5kZWZpbmVkICYmIHZhbCAhPT0gbnVsbCAmJiB2YWwgIT09ICcnID8gIlx1N0IyQyIuY29uY2F0KHZhbCwgIlx1NUI2Nlx1NjcxRiIpIDogJy0nOwogICAgfSwKICAgIGNsZWFuUGF5bG9hZDogZnVuY3Rpb24gY2xlYW5QYXlsb2FkKG9iaikgewogICAgICB2YXIgcGF5bG9hZCA9IHt9OwogICAgICBPYmplY3Qua2V5cyhvYmopLmZvckVhY2goZnVuY3Rpb24gKGtleSkgewogICAgICAgIHZhciB2YWx1ZSA9IG9ialtrZXldOwogICAgICAgIGlmICh2YWx1ZSAhPT0gJycgJiYgdmFsdWUgIT09IG51bGwgJiYgdmFsdWUgIT09IHVuZGVmaW5lZCkgewogICAgICAgICAgcGF5bG9hZFtrZXldID0gdmFsdWU7CiAgICAgICAgfQogICAgICB9KTsKICAgICAgcmV0dXJuIHBheWxvYWQ7CiAgICB9LAogICAgLyogLS0tLS0tLS0tLSDliJfooajliqDovb0gLS0tLS0tLS0tLSAqL2xvYWREYXRhOiBmdW5jdGlvbiBsb2FkRGF0YSgpIHsKICAgICAgdmFyIF90aGlzID0gdGhpczsKICAgICAgdmFyIHMgPSB0aGlzLnNlbWVzdGVyIHx8IHt9OwogICAgICBpZiAoIXMuYmgpIHJldHVybjsKICAgICAgdGhpcy5sb2FkaW5nID0gdHJ1ZTsKICAgICAgKDAsIF9jbGFzc0NhbGVuZGFyLmxpc3RDbGFzc0NhbGVuZGFyKShzLmJoKS50aGVuKGZ1bmN0aW9uIChyZXMpIHsKICAgICAgICBfdGhpcy5yZWNvcmRzID0gcmVzICYmIHJlcy5kYXRhIHx8IFtdOwogICAgICAgIF90aGlzLmxvYWRpbmcgPSBmYWxzZTsKICAgICAgfSkuY2F0Y2goZnVuY3Rpb24gKCkgewogICAgICAgIF90aGlzLnJlY29yZHMgPSBbXTsKICAgICAgICBfdGhpcy5sb2FkaW5nID0gZmFsc2U7CiAgICAgIH0pOwogICAgfSwKICAgIGhhbmRsZVNlbGVjdGlvbkNoYW5nZTogZnVuY3Rpb24gaGFuZGxlU2VsZWN0aW9uQ2hhbmdlKHJvd3MpIHsKICAgICAgdGhpcy5zZWxlY3Rpb24gPSByb3dzOwogICAgfSwKICAgIC8qIC0tLS0tLS0tLS0g5paw5aKeIC8g57yW6L6RIC0tLS0tLS0tLS0gKi9jcmVhdGVFbXB0eUVkaXRGb3JtOiBmdW5jdGlvbiBjcmVhdGVFbXB0eUVkaXRGb3JtKCkgewogICAgICB2YXIgcyA9IHRoaXMuc2VtZXN0ZXIgfHwge307CiAgICAgIHJldHVybiB7CiAgICAgICAgYmg6ICcnLAogICAgICAgIG5kOiBzLm5kLAogICAgICAgIHh5ZGJoOiBzLnh5ZGJoIHx8ICcnLAogICAgICAgIHhxZGM6IHMueHFkYywKICAgICAgICB4eWR4cWJoOiBzLmJoIHx8ICcnLAogICAgICAgIGpjOiAnJywKICAgICAgICBrYmg6ICcnLAogICAgICAgIGtseDogJycsCiAgICAgICAga2N4aDogdW5kZWZpbmVkLAogICAgICAgIGpoa2N4aDogdW5kZWZpbmVkLAogICAgICAgIHhoYnM6IHVuZGVmaW5lZCwKICAgICAgICBqeWJoOiAnJywKICAgICAgICBqc2JoOiAnJywKICAgICAgICByczogdW5kZWZpbmVkLAogICAgICAgIHprczogdW5kZWZpbmVkLAogICAgICAgIHhzOiB1bmRlZmluZWQsCiAgICAgICAgbGx4czogdW5kZWZpbmVkLAogICAgICAgIHNqeHM6IHVuZGVmaW5lZCwKICAgICAgICB4ZjogdW5kZWZpbmVkLAogICAgICAgIGtza3M6IHVuZGVmaW5lZCwKICAgICAgICBrc2JoOiAnJywKICAgICAgICBrc2RkOiAnJywKICAgICAgICBjamZ6OiAnJywKICAgICAgICBianJ4eXBqZjogdW5kZWZpbmVkLAogICAgICAgIGtza3NieHM6IHVuZGVmaW5lZCwKICAgICAgICBqeXNkaDogJycsCiAgICAgICAganlzamhqeWJoOiAnJywKICAgICAgICBqeXNqaGJ6OiAnJywKICAgICAgICBwZHhoOiB1bmRlZmluZWQsCiAgICAgICAgcGRxc3o6IHVuZGVmaW5lZCwKICAgICAgICBwZGF6OiB1bmRlZmluZWQsCiAgICAgICAgcGR6emtzajogdW5kZWZpbmVkLAogICAgICAgIHBkYno6IHVuZGVmaW5lZCwKICAgICAgICBwZHRieWt4eGJ6OiB1bmRlZmluZWQsCiAgICAgICAgcGRxeXpkeXhzOiB1bmRlZmluZWQsCiAgICAgICAgcGR6ZHl4c2Zic2o6ICcnLAogICAgICAgIGJ6MjogdW5kZWZpbmVkLAogICAgICAgIGJ6OiAnJwogICAgICB9OwogICAgfSwKICAgIGhhbmRsZUFkZDogZnVuY3Rpb24gaGFuZGxlQWRkKCkgewogICAgICB2YXIgX3RoaXMyID0gdGhpczsKICAgICAgdGhpcy5lZGl0TW9kZSA9ICdhZGQnOwogICAgICB0aGlzLmVkaXRGb3JtID0gdGhpcy5jcmVhdGVFbXB0eUVkaXRGb3JtKCk7CiAgICAgIHRoaXMuZWRpdFZpc2libGUgPSB0cnVlOwogICAgICB0aGlzLiRuZXh0VGljayhmdW5jdGlvbiAoKSB7CiAgICAgICAgaWYgKF90aGlzMi4kcmVmcy5lZGl0Rm9ybVJlZikgX3RoaXMyLiRyZWZzLmVkaXRGb3JtUmVmLmNsZWFyVmFsaWRhdGUoKTsKICAgICAgfSk7CiAgICB9LAogICAgaGFuZGxlRWRpdDogZnVuY3Rpb24gaGFuZGxlRWRpdChyb3cpIHsKICAgICAgdmFyIF90aGlzMyA9IHRoaXM7CiAgICAgIHRoaXMuZWRpdE1vZGUgPSAnZWRpdCc7CiAgICAgIHZhciBzID0gdGhpcy5zZW1lc3RlciB8fCB7fTsKICAgICAgdmFyIGZvcm0gPSB0aGlzLmNyZWF0ZUVtcHR5RWRpdEZvcm0oKTsKICAgICAgT2JqZWN0LmtleXMoZm9ybSkuZm9yRWFjaChmdW5jdGlvbiAoa2V5KSB7CiAgICAgICAgaWYgKHJvd1trZXldICE9PSB1bmRlZmluZWQgJiYgcm93W2tleV0gIT09IG51bGwpIGZvcm1ba2V5XSA9IHJvd1trZXldOwogICAgICB9KTsKICAgICAgZm9ybS54eWR4cWJoID0gcy5iaCB8fCByb3cueHlkeHFiaDsKICAgICAgdGhpcy5lZGl0Rm9ybSA9IGZvcm07CiAgICAgIHRoaXMuZWRpdFZpc2libGUgPSB0cnVlOwogICAgICB0aGlzLiRuZXh0VGljayhmdW5jdGlvbiAoKSB7CiAgICAgICAgaWYgKF90aGlzMy4kcmVmcy5lZGl0Rm9ybVJlZikgX3RoaXMzLiRyZWZzLmVkaXRGb3JtUmVmLmNsZWFyVmFsaWRhdGUoKTsKICAgICAgfSk7CiAgICB9LAogICAgaGFuZGxlRWRpdFN1Ym1pdDogZnVuY3Rpb24gaGFuZGxlRWRpdFN1Ym1pdCgpIHsKICAgICAgdmFyIF90aGlzNCA9IHRoaXM7CiAgICAgIHRoaXMuJHJlZnMuZWRpdEZvcm1SZWYudmFsaWRhdGUoZnVuY3Rpb24gKHZhbGlkKSB7CiAgICAgICAgaWYgKCF2YWxpZCkgcmV0dXJuOwogICAgICAgIHZhciBwYXlsb2FkID0gX3RoaXM0LmNsZWFuUGF5bG9hZCgoMCwgX29iamVjdFNwcmVhZDIuZGVmYXVsdCkoe30sIF90aGlzNC5lZGl0Rm9ybSkpOwogICAgICAgIHZhciByZXEgPSBfdGhpczQuZWRpdE1vZGUgPT09ICdlZGl0JyA/ICgwLCBfY2xhc3NDYWxlbmRhci51cGRhdGVDbGFzc0NhbGVuZGFyKShwYXlsb2FkKSA6ICgwLCBfY2xhc3NDYWxlbmRhci5hZGRUZWFtVGFzaykocGF5bG9hZCk7CiAgICAgICAgX3RoaXM0LnNhdmluZyA9IHRydWU7CiAgICAgICAgcmVxLnRoZW4oZnVuY3Rpb24gKCkgewogICAgICAgICAgX3RoaXM0LnNhdmluZyA9IGZhbHNlOwogICAgICAgICAgX3RoaXM0LmVkaXRWaXNpYmxlID0gZmFsc2U7CiAgICAgICAgICBfdGhpczQuJG1lc3NhZ2Uuc3VjY2VzcyhfdGhpczQuZWRpdE1vZGUgPT09ICdlZGl0JyA/ICfnj63ljoborrDlvZXlt7Lmm7TmlrAnIDogJ+ePreWOhuiusOW9leW3suaWsOWinicpOwogICAgICAgICAgX3RoaXM0LmxvYWREYXRhKCk7CiAgICAgICAgfSkuY2F0Y2goZnVuY3Rpb24gKCkgewogICAgICAgICAgX3RoaXM0LnNhdmluZyA9IGZhbHNlOwogICAgICAgIH0pOwogICAgICB9KTsKICAgIH0sCiAgICAvKiAtLS0tLS0tLS0tIOWIoOmZpCAtLS0tLS0tLS0tICovaGFuZGxlRGVsZXRlOiBmdW5jdGlvbiBoYW5kbGVEZWxldGUocm93KSB7CiAgICAgIHZhciBfdGhpczUgPSB0aGlzOwogICAgICB0aGlzLiRjb25maXJtKCJcdTc4NkVcdTVCOUFcdTUyMjBcdTk2NjRcdThCRTVcdTczRURcdTUzODZcdThCQjBcdTVGNTVcdUZGMDgiLmNvbmNhdChyb3cuamMgfHwgcm93LmJoLCAiXHVGRjA5XHU1NDE3XHVGRjFGIiksICfmj5DnpLonLCB7CiAgICAgICAgY29uZmlybUJ1dHRvblRleHQ6ICfnoa7lrponLAogICAgICAgIGNhbmNlbEJ1dHRvblRleHQ6ICflj5bmtognLAogICAgICAgIHR5cGU6ICd3YXJuaW5nJwogICAgICB9KS50aGVuKGZ1bmN0aW9uICgpIHsKICAgICAgICAoMCwgX2NsYXNzQ2FsZW5kYXIuZGVsVGVhbVRhc2spKHJvdy5iaCkudGhlbihmdW5jdGlvbiAoKSB7CiAgICAgICAgICBfdGhpczUuJG1lc3NhZ2Uuc3VjY2Vzcygn5bey5Yig6ZmkJyk7CiAgICAgICAgICBfdGhpczUubG9hZERhdGEoKTsKICAgICAgICB9KTsKICAgICAgfSkuY2F0Y2goZnVuY3Rpb24gKCkge30pOwogICAgfSwKICAgIC8qIC0tLS0tLS0tLS0g6Ieq5Yqo55Sf5oiQ5b+F5L+u6K++56iLIC0tLS0tLS0tLS0gKi9oYW5kbGVBdXRvR2VuZXJhdGU6IGZ1bmN0aW9uIGhhbmRsZUF1dG9HZW5lcmF0ZSgpIHsKICAgICAgdmFyIF90aGlzNiA9IHRoaXM7CiAgICAgIHZhciBzID0gdGhpcy5zZW1lc3RlciB8fCB7fTsKICAgICAgaWYgKCFzLnh5ZGJoIHx8ICFzLnhxZGMpIHsKICAgICAgICB0aGlzLiRtZXNzYWdlLndhcm5pbmcoJ+W9k+WJjeePreasoeWtpuacn+e8uuWwkeWtpuWRmOmYn+e8luWPt+aIluWtpuacn+esrOasoe+8jOaXoOazleiHquWKqOeUn+aIkCcpOwogICAgICAgIHJldHVybjsKICAgICAgfQogICAgICB0aGlzLiRjb25maXJtKCflsIbmjInkuJPkuJrmlZnlraborqHliJLoh6rliqjnlJ/miJDor6Xnj63mrKHnmoTlv4Xkv67or77nqIvvvIjlt7LlrZjlnKjnmoTor77nqIvkuI3kvJrph43lpI3mt7vliqDvvInvvIzmmK/lkKbnu6fnu63vvJ8nLCAn5o+Q56S6JywgewogICAgICAgIGNvbmZpcm1CdXR0b25UZXh0OiAn56Gu5a6aJywKICAgICAgICBjYW5jZWxCdXR0b25UZXh0OiAn5Y+W5raIJywKICAgICAgICB0eXBlOiAnd2FybmluZycKICAgICAgfSkudGhlbihmdW5jdGlvbiAoKSB7CiAgICAgICAgKDAsIF9jbGFzc0NhbGVuZGFyLmF1dG9HZW5lcmF0ZVJlcXVpcmVkQ291cnNlcykocy54eWRiaCwgcy54cWRjKS50aGVuKGZ1bmN0aW9uIChyZXMpIHsKICAgICAgICAgIHZhciBjb3VudCA9IHJlcyAmJiByZXMuZGF0YSB8fCAwOwogICAgICAgICAgX3RoaXM2LiRtZXNzYWdlLnN1Y2Nlc3MoIlx1NURGMlx1ODFFQVx1NTJBOFx1NzUxRlx1NjIxMCAiLmNvbmNhdChjb3VudCwgIiBcdTk1RThcdTVGQzVcdTRGRUVcdThCRkVcdTdBMEIiKSk7CiAgICAgICAgICBfdGhpczYubG9hZERhdGEoKTsKICAgICAgICB9KTsKICAgICAgfSkuY2F0Y2goZnVuY3Rpb24gKCkge30pOwogICAgfSwKICAgIC8qIC0tLS0tLS0tLS0g6aKE6K6+5ZCI54+tIC8g5ouG54+tIC0tLS0tLS0tLS0gKi9oYW5kbGVQcmVzZXRNZXJnZTogZnVuY3Rpb24gaGFuZGxlUHJlc2V0TWVyZ2UoKSB7CiAgICAgIHZhciBfdGhpczcgPSB0aGlzOwogICAgICB2YXIgYmhzID0gdGhpcy5zZWxlY3Rpb24ubWFwKGZ1bmN0aW9uIChyKSB7CiAgICAgICAgcmV0dXJuIHIuYmg7CiAgICAgIH0pOwogICAgICBpZiAoIWJocy5sZW5ndGgpIHsKICAgICAgICB0aGlzLiRtZXNzYWdlLndhcm5pbmcoJ+ivt+WFiOWLvumAieimgeWQiOePreeahOePreWOhuiusOW9lScpOwogICAgICAgIHJldHVybjsKICAgICAgfQogICAgICB0aGlzLiRjb25maXJtKCJcdTVDMDZcdTYzMDlcdTVFNzRcdTVFQTZcdTRFM0FcdTkwMDlcdTRFMkRcdTc2ODQgIi5jb25jYXQoYmhzLmxlbmd0aCwgIiBcdTY3NjFcdThCQjBcdTVGNTVcdThCQkVcdTdGNkVcdTdFREZcdTRFMDBcdTc2ODRcdThCRkVcdTZCMjFcdTVFOEZcdTUzRjdcdUZGMENcdTY2MkZcdTU0MjZcdTdFRTdcdTdFRURcdUZGMUYiKSwgJ+aPkOekuicsIHsKICAgICAgICBjb25maXJtQnV0dG9uVGV4dDogJ+ehruWumicsCiAgICAgICAgY2FuY2VsQnV0dG9uVGV4dDogJ+WPlua2iCcsCiAgICAgICAgdHlwZTogJ3dhcm5pbmcnCiAgICAgIH0pLnRoZW4oZnVuY3Rpb24gKCkgewogICAgICAgICgwLCBfY2xhc3NDYWxlbmRhci5iYXRjaFByZXNldE1lcmdlKShiaHMpLnRoZW4oZnVuY3Rpb24gKHJlcykgewogICAgICAgICAgdmFyIGNvdW50ID0gcmVzICYmIHJlcy5kYXRhIHx8IDA7CiAgICAgICAgICBfdGhpczcuJG1lc3NhZ2Uuc3VjY2VzcygiXHU1REYyXHU1QjhDXHU2MjEwICIuY29uY2F0KGNvdW50LCAiIFx1Njc2MVx1OEJCMFx1NUY1NVx1NzY4NFx1OTg4NFx1OEJCRVx1NTQwOFx1NzNFRCIpKTsKICAgICAgICAgIF90aGlzNy5sb2FkRGF0YSgpOwogICAgICAgIH0pOwogICAgICB9KS5jYXRjaChmdW5jdGlvbiAoKSB7fSk7CiAgICB9LAogICAgaGFuZGxlUHJlc2V0U3BsaXQ6IGZ1bmN0aW9uIGhhbmRsZVByZXNldFNwbGl0KCkgewogICAgICB2YXIgX3RoaXM4ID0gdGhpczsKICAgICAgdmFyIGJocyA9IHRoaXMuc2VsZWN0aW9uLm1hcChmdW5jdGlvbiAocikgewogICAgICAgIHJldHVybiByLmJoOwogICAgICB9KTsKICAgICAgaWYgKCFiaHMubGVuZ3RoKSB7CiAgICAgICAgdGhpcy4kbWVzc2FnZS53YXJuaW5nKCfor7flhYjli77pgInopoHmi4bnj63nmoTnj63ljoborrDlvZUnKTsKICAgICAgICByZXR1cm47CiAgICAgIH0KICAgICAgdGhpcy4kY29uZmlybSgiXHU1QzA2XHU2RTA1XHU3QTdBXHU5MDA5XHU0RTJEXHU3Njg0ICIuY29uY2F0KGJocy5sZW5ndGgsICIgXHU2NzYxXHU4QkIwXHU1RjU1XHU3Njg0XHU4QkZFXHU2QjIxXHU1RThGXHU1M0Y3XHVGRjBDXHU2NjJGXHU1NDI2XHU3RUU3XHU3RUVEXHVGRjFGIiksICfmj5DnpLonLCB7CiAgICAgICAgY29uZmlybUJ1dHRvblRleHQ6ICfnoa7lrponLAogICAgICAgIGNhbmNlbEJ1dHRvblRleHQ6ICflj5bmtognLAogICAgICAgIHR5cGU6ICd3YXJuaW5nJwogICAgICB9KS50aGVuKGZ1bmN0aW9uICgpIHsKICAgICAgICAoMCwgX2NsYXNzQ2FsZW5kYXIuYmF0Y2hQcmVzZXRTcGxpdCkoYmhzKS50aGVuKGZ1bmN0aW9uIChyZXMpIHsKICAgICAgICAgIHZhciBjb3VudCA9IHJlcyAmJiByZXMuZGF0YSB8fCAwOwogICAgICAgICAgX3RoaXM4LiRtZXNzYWdlLnN1Y2Nlc3MoIlx1NURGMlx1NUI4Q1x1NjIxMCAiLmNvbmNhdChjb3VudCwgIiBcdTY3NjFcdThCQjBcdTVGNTVcdTc2ODRcdTk4ODRcdThCQkVcdTYyQzZcdTczRUQiKSk7CiAgICAgICAgICBfdGhpczgubG9hZERhdGEoKTsKICAgICAgICB9KTsKICAgICAgfSkuY2F0Y2goZnVuY3Rpb24gKCkge30pOwogICAgfSwKICAgIC8qIC0tLS0tLS0tLS0g5bqU55So5LqO5YW25a6D54+t5qyhIC0tLS0tLS0tLS0gKi9oYW5kbGVBcHBseVJlZ2lvbjogZnVuY3Rpb24gaGFuZGxlQXBwbHlSZWdpb24oKSB7CiAgICAgIHZhciBiaHMgPSB0aGlzLnNlbGVjdGlvbi5tYXAoZnVuY3Rpb24gKHIpIHsKICAgICAgICByZXR1cm4gci5iaDsKICAgICAgfSk7CiAgICAgIGlmICghYmhzLmxlbmd0aCkgewogICAgICAgIHRoaXMuJG1lc3NhZ2Uud2FybmluZygn6K+35YWI5Yu+6YCJ6KaB5bqU55So55qE54+t5Y6G6K6w5b2V77yI6YCJ5a6a5Yy65Z+f77yJJyk7CiAgICAgICAgcmV0dXJuOwogICAgICB9CiAgICAgIHRoaXMuYXBwbHlNb2RlID0gJ3JlZ2lvbic7CiAgICAgIHRoaXMuY29weU5vdGUgPSAiXHU1QzA2XHU5MDA5XHU0RTJEXHU3Njg0ICIuY29uY2F0KGJocy5sZW5ndGgsICIgXHU2NzYxXHU3M0VEXHU1Mzg2XHU4QkIwXHU1RjU1XHU1OTBEXHU1MjM2XHU1MjMwXHU2MjQwXHU5MDA5XHU3M0VEXHU2QjIxIik7CiAgICAgIHRoaXMudGVhbVNlbGVjdFZpc2libGUgPSB0cnVlOwogICAgfSwKICAgIGhhbmRsZUFwcGx5V2hvbGU6IGZ1bmN0aW9uIGhhbmRsZUFwcGx5V2hvbGUoKSB7CiAgICAgIHRoaXMuYXBwbHlNb2RlID0gJ3dob2xlJzsKICAgICAgdGhpcy5jb3B5Tm90ZSA9ICflsIbmlbTkuKrnj63ljoblpI3liLbliLDmiYDpgInnj63mrKEnOwogICAgICB0aGlzLnRlYW1TZWxlY3RWaXNpYmxlID0gdHJ1ZTsKICAgIH0sCiAgICBoYW5kbGVUZWFtQ29uZmlybTogZnVuY3Rpb24gaGFuZGxlVGVhbUNvbmZpcm0odGFyZ2V0cykgewogICAgICB2YXIgX3RoaXM5ID0gdGhpczsKICAgICAgaWYgKCF0YXJnZXRzIHx8ICF0YXJnZXRzLmxlbmd0aCkgcmV0dXJuOwogICAgICB2YXIgdGFyZ2V0QmhMaXN0ID0gdGFyZ2V0cy5tYXAoZnVuY3Rpb24gKHQpIHsKICAgICAgICByZXR1cm4gdC5iaDsKICAgICAgfSk7CiAgICAgIGlmICh0aGlzLmFwcGx5TW9kZSA9PT0gJ3dob2xlJykgewogICAgICAgICgwLCBfY2xhc3NDYWxlbmRhci5iYXRjaENvcHlDYWxlbmRhckJ5U2VtZXN0ZXIpKHsKICAgICAgICAgIHNvdXJjZVh5ZHhxYmg6IHRoaXMuc2VtZXN0ZXIuYmgsCiAgICAgICAgICB0YXJnZXRCaExpc3Q6IHRhcmdldEJoTGlzdAogICAgICAgIH0pLnRoZW4oZnVuY3Rpb24gKHJlcykgewogICAgICAgICAgdmFyIGRhdGEgPSByZXMgJiYgcmVzLmRhdGEgfHwge307CiAgICAgICAgICBfdGhpczkuJG1lc3NhZ2Uuc3VjY2VzcygiXHU1REYyXHU1OTBEXHU1MjM2XHU2NTc0XHU0RTJBXHU3M0VEXHU1Mzg2XHVGRjBDXHU1MTcxXHU2NUIwXHU1ODlFICIuY29uY2F0KGRhdGEuY291bnQgfHwgMCwgIiBcdTY3NjFcdThCQjBcdTVGNTUiKSk7CiAgICAgICAgICBfdGhpczkubG9hZERhdGEoKTsKICAgICAgICB9KTsKICAgICAgfSBlbHNlIHsKICAgICAgICAoMCwgX2NsYXNzQ2FsZW5kYXIuYmF0Y2hDb3B5Q2FsZW5kYXIpKHsKICAgICAgICAgIHNvdXJjZUJoTGlzdDogdGhpcy5zZWxlY3Rpb24ubWFwKGZ1bmN0aW9uIChyKSB7CiAgICAgICAgICAgIHJldHVybiByLmJoOwogICAgICAgICAgfSksCiAgICAgICAgICB0YXJnZXRCaExpc3Q6IHRhcmdldEJoTGlzdAogICAgICAgIH0pLnRoZW4oZnVuY3Rpb24gKHJlcykgewogICAgICAgICAgdmFyIGRhdGEgPSByZXMgJiYgcmVzLmRhdGEgfHwge307CiAgICAgICAgICBfdGhpczkuJG1lc3NhZ2Uuc3VjY2VzcygiXHU1REYyXHU1OTBEXHU1MjM2XHU5MDA5XHU1QjlBXHU1MzNBXHU1N0RGXHVGRjBDXHU1MTcxXHU2NUIwXHU1ODlFICIuY29uY2F0KGRhdGEuY291bnQgfHwgMCwgIiBcdTY3NjFcdThCQjBcdTVGNTUiKSk7CiAgICAgICAgICBfdGhpczkubG9hZERhdGEoKTsKICAgICAgICB9KTsKICAgICAgfQogICAgfSwKICAgIC8qIC0tLS0tLS0tLS0g5Yi35pawIC0tLS0tLS0tLS0gKi9oYW5kbGVSZWZyZXNoOiBmdW5jdGlvbiBoYW5kbGVSZWZyZXNoKCkgewogICAgICB0aGlzLmxvYWREYXRhKCk7CiAgICAgIHRoaXMuJG1lc3NhZ2Uuc3VjY2Vzcygn5bey5Yi35paw54+t5Y6GJyk7CiAgICB9CiAgfQp9Ow=="},{"version":3,"names":["_ClassTeamSelectDialog","_interopRequireDefault","require","_classCalendar","name","components","ClassTeamSelectDialog","props","visible","type","Boolean","default","semester","Object","semesterOptions","Array","data","loading","saving","records","selection","editVisible","editMode","editForm","createEmptyEditForm","editRules","jc","required","message","trigger","teamSelectVisible","applyMode","copyNote","computed","dialogVisible","get","set","val","$emit","safeSemester","className","s","xydmc","xydbh","semesterTitle","nd","undefined","concat","xq","xqdcLabel","xqdc","semesterWeeks","kxrq","jsrq","start","Date","String","slice","end","diff","Math","round","ceil","summary","totalXs","reduce","sum","r","Number","xs","totalXf","xf","editTitle","watch","loadData","methods","fmtDate","cleanPayload","obj","payload","keys","forEach","key","value","_this","bh","listClassCalendar","then","res","catch","handleSelectionChange","rows","xydxqbh","kbh","klx","kcxh","jhkcxh","xhbs","jybh","jsbh","rs","zks","llxs","sjxs","ksks","ksbh","ksdd","cjfz","bjrxypjf","ksksbxs","jysdh","jysjhjybh","jysjhbz","pdxh","pdqsz","pdaz","pdzzksj","pdbz","pdtbykxxbz","pdqyzdyxs","pdzdyxsfbsj","bz2","bz","handleAdd","_this2","$nextTick","$refs","editFormRef","clearValidate","handleEdit","row","_this3","form","handleEditSubmit","_this4","validate","valid","_objectSpread2","req","updateClassCalendar","addTeamTask","$message","success","handleDelete","_this5","$confirm","confirmButtonText","cancelButtonText","delTeamTask","handleAutoGenerate","_this6","warning","autoGenerateRequiredCourses","count","handlePresetMerge","_this7","bhs","map","length","batchPresetMerge","handlePresetSplit","_this8","batchPresetSplit","handleApplyRegion","handleApplyWhole","handleTeamConfirm","targets","_this9","targetBhList","t","batchCopyCalendarBySemester","sourceXydxqbh","batchCopyCalendar","sourceBhList","handleRefresh"],"sources":["src/views/teachOffice/shiftSemester/ClassCalendarDialog.vue"],"sourcesContent":["<template>\r\n <el-dialog\r\n :visible=\"dialogVisible\"\r\n :title=\"`班历管理——${semesterTitle}`\"\r\n width=\"1200px\"\r\n top=\"6vh\"\r\n :close-on-click-modal=\"false\"\r\n class=\"class-calendar-dialog\"\r\n @update:visible=\"val => dialogVisible = val\"\r\n >\r\n <div v-loading=\"loading\" class=\"class-calendar\">\r\n <!-- ==================== 1. 学期与班次信息 ==================== -->\r\n <div class=\"info-panel\">\r\n <div class=\"info-title-row\">\r\n <span class=\"semester-name\">{{ semesterTitle }}</span>\r\n <span class=\"class-name\">{{ className }}</span>\r\n </div>\r\n <div class=\"date-range-row\">\r\n <div class=\"range-item\">学期日期:{{ fmtDate(safeSemester.kxrq) }} 至 {{ fmtDate(safeSemester.jsrq) }},共 {{ semesterWeeks }} 周</div>\r\n <div class=\"range-item\">班历记录:{{ records.length }} 条,总学时 {{ summary.totalXs }},总学分 {{ summary.totalXf }}</div>\r\n </div>\r\n </div>\r\n\r\n <!-- ==================== 2. 操作按钮区域 ==================== -->\r\n <div class=\"settings-panel\">\r\n <div class=\"action-buttons-row\">\r\n <el-button type=\"primary\" size=\"small\" icon=\"el-icon-plus\" @click=\"handleAdd\">新增记录</el-button>\r\n <el-button size=\"small\" @click=\"handleAutoGenerate\">自动生成必修课程</el-button>\r\n <el-button size=\"small\" @click=\"handlePresetMerge\">预设合班</el-button>\r\n <el-button size=\"small\" @click=\"handlePresetSplit\">预设拆班</el-button>\r\n <el-button size=\"small\" @click=\"handleApplyRegion\">选定区域应用于其它班次</el-button>\r\n <el-button size=\"small\" @click=\"handleApplyWhole\">整个班历应用于其它班次</el-button>\r\n <el-button size=\"small\" icon=\"el-icon-refresh\" @click=\"handleRefresh\">刷新</el-button>\r\n </div>\r\n </div>\r\n\r\n <!-- ==================== 3. 班历记录表格 ==================== -->\r\n <div class=\"table-area\">\r\n <el-table\r\n ref=\"tableRef\"\r\n :data=\"records\"\r\n border\r\n stripe\r\n size=\"small\"\r\n max-height=\"480\"\r\n class=\"calendar-table\"\r\n @selection-change=\"handleSelectionChange\"\r\n >\r\n <el-table-column type=\"selection\" width=\"40\" align=\"center\" />\r\n <el-table-column type=\"index\" label=\"序号\" width=\"55\" align=\"center\" />\r\n <el-table-column prop=\"kcxh\" label=\"课次序号\" width=\"80\" align=\"center\" show-overflow-tooltip />\r\n <el-table-column prop=\"jhkcxh\" label=\"计划课次\" width=\"80\" align=\"center\" show-overflow-tooltip />\r\n <el-table-column prop=\"jc\" label=\"简称\" width=\"100\" align=\"center\" show-overflow-tooltip />\r\n <el-table-column prop=\"kbh\" label=\"课编号\" width=\"120\" align=\"center\" show-overflow-tooltip />\r\n <el-table-column prop=\"klx\" label=\"课类型\" width=\"80\" align=\"center\" show-overflow-tooltip />\r\n <el-table-column prop=\"jybh\" label=\"教员编号\" width=\"100\" align=\"center\" show-overflow-tooltip />\r\n <el-table-column prop=\"jsbh\" label=\"教室编号\" width=\"100\" align=\"center\" show-overflow-tooltip />\r\n <el-table-column prop=\"zks\" label=\"周课时\" width=\"70\" align=\"center\" show-overflow-tooltip />\r\n <el-table-column prop=\"xs\" label=\"学时\" width=\"60\" align=\"center\" show-overflow-tooltip />\r\n <el-table-column prop=\"llxs\" label=\"理论学时\" width=\"80\" align=\"center\" show-overflow-tooltip />\r\n <el-table-column prop=\"sjxs\" label=\"实践学时\" width=\"80\" align=\"center\" show-overflow-tooltip />\r\n <el-table-column prop=\"xf\" label=\"学分\" width=\"60\" align=\"center\" show-overflow-tooltip />\r\n <el-table-column prop=\"rs\" label=\"人数\" width=\"60\" align=\"center\" show-overflow-tooltip />\r\n <el-table-column prop=\"ksbh\" label=\"考试编号\" width=\"100\" align=\"center\" show-overflow-tooltip />\r\n <el-table-column prop=\"ksdd\" label=\"考试地点\" width=\"110\" align=\"center\" show-overflow-tooltip />\r\n <el-table-column prop=\"bz\" label=\"备注\" min-width=\"120\" align=\"left\" header-align=\"center\" show-overflow-tooltip />\r\n <el-table-column label=\"操作\" width=\"120\" align=\"center\" fixed=\"right\">\r\n <template slot-scope=\"{ row }\">\r\n <el-button type=\"text\" size=\"small\" @click=\"handleEdit(row)\">编辑</el-button>\r\n <el-button type=\"text\" size=\"small\" class=\"text-danger\" @click=\"handleDelete(row)\">删除</el-button>\r\n </template>\r\n </el-table-column>\r\n </el-table>\r\n <div class=\"select-tip\">\r\n 提示:勾选多条记录后可进行 预设合班 / 预设拆班 / 选定区域应用于其它班次 操作;删除为物理删除,请谨慎操作。\r\n </div>\r\n </div>\r\n </div>\r\n\r\n <div slot=\"footer\">\r\n <el-button @click=\"dialogVisible = false\">关闭</el-button>\r\n </div>\r\n\r\n <!-- ==================== 班历记录新增/编辑弹窗 ==================== -->\r\n <el-dialog\r\n :visible=\"editVisible\"\r\n :title=\"editTitle\"\r\n width=\"760px\"\r\n :close-on-click-modal=\"false\"\r\n append-to-body\r\n @update:visible=\"val => editVisible = val\"\r\n >\r\n <el-form ref=\"editFormRef\" :model=\"editForm\" :rules=\"editRules\" label-width=\"120px\" size=\"small\" class=\"edit-form\">\r\n <div class=\"form-section-title\">基本信息</div>\r\n <el-row :gutter=\"16\">\r\n <el-col :span=\"12\">\r\n <el-form-item label=\"简称\" prop=\"jc\">\r\n <el-input v-model=\"editForm.jc\" placeholder=\"课程简称\" clearable />\r\n </el-form-item>\r\n </el-col>\r\n <el-col :span=\"12\">\r\n <el-form-item label=\"课编号\">\r\n <el-input v-model=\"editForm.kbh\" placeholder=\"课程编号\" clearable />\r\n </el-form-item>\r\n </el-col>\r\n </el-row>\r\n <el-row :gutter=\"16\">\r\n <el-col :span=\"12\">\r\n <el-form-item label=\"课类型\">\r\n <el-input v-model=\"editForm.klx\" placeholder=\"如 必修/选修/实践\" clearable />\r\n </el-form-item>\r\n </el-col>\r\n <el-col :span=\"12\">\r\n <el-form-item label=\"课次序号\">\r\n <el-input-number v-model=\"editForm.kcxh\" :min=\"1\" controls-position=\"right\" style=\"width: 100%\" />\r\n </el-form-item>\r\n </el-col>\r\n </el-row>\r\n <el-row :gutter=\"16\">\r\n <el-col :span=\"12\">\r\n <el-form-item label=\"计划课次序号\">\r\n <el-input-number v-model=\"editForm.jhkcxh\" :min=\"1\" controls-position=\"right\" style=\"width: 100%\" />\r\n </el-form-item>\r\n </el-col>\r\n <el-col :span=\"12\">\r\n <el-form-item label=\"序号标识\">\r\n <el-input-number v-model=\"editForm.xhbs\" :min=\"1\" controls-position=\"right\" style=\"width: 100%\" />\r\n </el-form-item>\r\n </el-col>\r\n </el-row>\r\n <el-row :gutter=\"16\">\r\n <el-col :span=\"12\">\r\n <el-form-item label=\"教员编号\">\r\n <el-input v-model=\"editForm.jybh\" placeholder=\"教员编号\" clearable />\r\n </el-form-item>\r\n </el-col>\r\n <el-col :span=\"12\">\r\n <el-form-item label=\"教室编号\">\r\n <el-input v-model=\"editForm.jsbh\" placeholder=\"教室编号\" clearable />\r\n </el-form-item>\r\n </el-col>\r\n </el-row>\r\n <el-row :gutter=\"16\">\r\n <el-col :span=\"12\">\r\n <el-form-item label=\"人数\">\r\n <el-input-number v-model=\"editForm.rs\" :min=\"1\" controls-position=\"right\" style=\"width: 100%\" />\r\n </el-form-item>\r\n </el-col>\r\n <el-col :span=\"12\">\r\n <el-form-item label=\"周课时\">\r\n <el-input-number v-model=\"editForm.zks\" :min=\"1\" controls-position=\"right\" style=\"width: 100%\" />\r\n </el-form-item>\r\n </el-col>\r\n </el-row>\r\n <div class=\"form-section-title\">学时学分</div>\r\n <el-row :gutter=\"16\">\r\n <el-col :span=\"12\">\r\n <el-form-item label=\"学时\">\r\n <el-input-number v-model=\"editForm.xs\" :min=\"1\" controls-position=\"right\" style=\"width: 100%\" />\r\n </el-form-item>\r\n </el-col>\r\n <el-col :span=\"12\">\r\n <el-form-item label=\"理论学时\">\r\n <el-input-number v-model=\"editForm.llxs\" :min=\"0\" controls-position=\"right\" style=\"width: 100%\" />\r\n </el-form-item>\r\n </el-col>\r\n </el-row>\r\n <el-row :gutter=\"16\">\r\n <el-col :span=\"12\">\r\n <el-form-item label=\"实践学时\">\r\n <el-input-number v-model=\"editForm.sjxs\" :min=\"0\" controls-position=\"right\" style=\"width: 100%\" />\r\n </el-form-item>\r\n </el-col>\r\n <el-col :span=\"12\">\r\n <el-form-item label=\"学分\">\r\n <el-input-number v-model=\"editForm.xf\" :min=\"0\" :precision=\"1\" :step=\"0.5\" controls-position=\"right\" style=\"width: 100%\" />\r\n </el-form-item>\r\n </el-col>\r\n </el-row>\r\n <div class=\"form-section-title\">考试信息</div>\r\n <el-row :gutter=\"16\">\r\n <el-col :span=\"12\">\r\n <el-form-item label=\"考试课时\">\r\n <el-input-number v-model=\"editForm.ksks\" :min=\"0\" controls-position=\"right\" style=\"width: 100%\" />\r\n </el-form-item>\r\n </el-col>\r\n <el-col :span=\"12\">\r\n <el-form-item label=\"考试编号\">\r\n <el-input v-model=\"editForm.ksbh\" placeholder=\"考试编号\" clearable />\r\n </el-form-item>\r\n </el-col>\r\n </el-row>\r\n <el-row :gutter=\"16\">\r\n <el-col :span=\"12\">\r\n <el-form-item label=\"考试地点\">\r\n <el-input v-model=\"editForm.ksdd\" placeholder=\"考试地点\" clearable />\r\n </el-form-item>\r\n </el-col>\r\n <el-col :span=\"12\">\r\n <el-form-item label=\"成绩分制\">\r\n <el-input v-model=\"editForm.cjfz\" placeholder=\"如 百分制/等级制\" clearable />\r\n </el-form-item>\r\n </el-col>\r\n </el-row>\r\n <el-row :gutter=\"16\">\r\n <el-col :span=\"12\">\r\n <el-form-item label=\"不计入平均分\">\r\n <el-select v-model=\"editForm.bjrxypjf\" clearable style=\"width: 100%\">\r\n <el-option label=\"是\" :value=\"1\" />\r\n <el-option label=\"否\" :value=\"0\" />\r\n </el-select>\r\n </el-form-item>\r\n </el-col>\r\n <el-col :span=\"12\">\r\n <el-form-item label=\"考试课时不显示\">\r\n <el-select v-model=\"editForm.ksksbxs\" clearable style=\"width: 100%\">\r\n <el-option label=\"是\" :value=\"1\" />\r\n <el-option label=\"否\" :value=\"0\" />\r\n </el-select>\r\n </el-form-item>\r\n </el-col>\r\n </el-row>\r\n <div class=\"form-section-title\">教研室计划</div>\r\n <el-row :gutter=\"16\">\r\n <el-col :span=\"12\">\r\n <el-form-item label=\"教研室代号\">\r\n <el-input v-model=\"editForm.jysdh\" placeholder=\"教研室代号\" clearable />\r\n </el-form-item>\r\n </el-col>\r\n <el-col :span=\"12\">\r\n <el-form-item label=\"计划教员编号\">\r\n <el-input v-model=\"editForm.jysjhjybh\" placeholder=\"教研室计划教员编号\" clearable />\r\n </el-form-item>\r\n </el-col>\r\n </el-row>\r\n <el-form-item label=\"计划备注\">\r\n <el-input v-model=\"editForm.jysjhbz\" type=\"textarea\" :rows=\"2\" placeholder=\"教研室计划备注\" clearable />\r\n </el-form-item>\r\n <div class=\"form-section-title\">配档设置</div>\r\n <el-row :gutter=\"16\">\r\n <el-col :span=\"12\">\r\n <el-form-item label=\"配档序号\">\r\n <el-input-number v-model=\"editForm.pdxh\" :min=\"1\" controls-position=\"right\" style=\"width: 100%\" />\r\n </el-form-item>\r\n </el-col>\r\n <el-col :span=\"12\">\r\n <el-form-item label=\"配档起始周\">\r\n <el-input-number v-model=\"editForm.pdqsz\" :min=\"1\" controls-position=\"right\" style=\"width: 100%\" />\r\n </el-form-item>\r\n </el-col>\r\n </el-row>\r\n <el-row :gutter=\"16\">\r\n <el-col :span=\"12\">\r\n <el-form-item label=\"配档按周\">\r\n <el-input-number v-model=\"editForm.pdaz\" :min=\"1\" controls-position=\"right\" style=\"width: 100%\" />\r\n </el-form-item>\r\n </el-col>\r\n <el-col :span=\"12\">\r\n <el-form-item label=\"占正课时间\">\r\n <el-input-number v-model=\"editForm.pdzzksj\" :min=\"0\" controls-position=\"right\" style=\"width: 100%\" />\r\n </el-form-item>\r\n </el-col>\r\n </el-row>\r\n <el-row :gutter=\"16\">\r\n <el-col :span=\"12\">\r\n <el-form-item label=\"配档编组\">\r\n <el-input-number v-model=\"editForm.pdbz\" :min=\"1\" controls-position=\"right\" style=\"width: 100%\" />\r\n </el-form-item>\r\n </el-col>\r\n <el-col :span=\"12\">\r\n <el-form-item label=\"同班异课选修编组\">\r\n <el-select v-model=\"editForm.pdtbykxxbz\" clearable style=\"width: 100%\">\r\n <el-option label=\"是\" :value=\"1\" />\r\n <el-option label=\"否\" :value=\"0\" />\r\n </el-select>\r\n </el-form-item>\r\n </el-col>\r\n </el-row>\r\n <el-row :gutter=\"16\">\r\n <el-col :span=\"12\">\r\n <el-form-item label=\"启用自定义学时\">\r\n <el-select v-model=\"editForm.pdqyzdyxs\" clearable style=\"width: 100%\">\r\n <el-option label=\"是\" :value=\"1\" />\r\n <el-option label=\"否\" :value=\"0\" />\r\n </el-select>\r\n </el-form-item>\r\n </el-col>\r\n <el-col :span=\"12\">\r\n <el-form-item label=\"编组\">\r\n <el-input-number v-model=\"editForm.bz2\" :min=\"0\" controls-position=\"right\" style=\"width: 100%\" />\r\n </el-form-item>\r\n </el-col>\r\n </el-row>\r\n <el-form-item label=\"自定义学时分布\">\r\n <el-input v-model=\"editForm.pdzdyxsfbsj\" type=\"textarea\" :rows=\"2\" placeholder=\"配档自定义学时分布数据\" clearable />\r\n </el-form-item>\r\n <el-form-item label=\"备注\">\r\n <el-input v-model=\"editForm.bz\" type=\"textarea\" :rows=\"2\" placeholder=\"备注\" clearable />\r\n </el-form-item>\r\n </el-form>\r\n <div slot=\"footer\">\r\n <el-button size=\"small\" @click=\"editVisible = false\">取消</el-button>\r\n <el-button size=\"small\" type=\"primary\" :loading=\"saving\" @click=\"handleEditSubmit\">确定</el-button>\r\n </div>\r\n </el-dialog>\r\n\r\n <!-- ==================== 目标班次学期选取弹窗 ==================== -->\r\n <ClassTeamSelectDialog\r\n :visible=\"teamSelectVisible\"\r\n :semester-list=\"semesterOptions\"\r\n :exclude-bh=\"semester.bh\"\r\n :exclude-note=\"copyNote\"\r\n @update:visible=\"val => teamSelectVisible = val\"\r\n @confirm=\"handleTeamConfirm\"\r\n />\r\n </el-dialog>\r\n</template>\r\n\r\n<script>\r\nimport ClassTeamSelectDialog from './ClassTeamSelectDialog.vue'\r\nimport {\r\n listClassCalendar,\r\n updateClassCalendar,\r\n batchCopyCalendar,\r\n batchCopyCalendarBySemester,\r\n addTeamTask,\r\n delTeamTask,\r\n batchPresetMerge,\r\n batchPresetSplit,\r\n autoGenerateRequiredCourses\r\n} from '@/api/studentRecords/classCalendar'\r\n\r\nexport default {\r\n name: 'ClassCalendarDialog',\r\n components: { ClassTeamSelectDialog },\r\n props: {\r\n visible: { type: Boolean, default: false },\r\n /** 选中的班次学期记录(含 bh/xydbh/xqdc/nd/xydmc/kxrq/jsrq) */\r\n semester: { type: Object, default: null },\r\n /** 可选的目标班次学期列表(已含班次名称的完整列表) */\r\n semesterOptions: { type: Array, default: () => [] }\r\n },\r\n data() {\r\n return {\r\n loading: false,\r\n saving: false,\r\n records: [],\r\n selection: [],\r\n\r\n // ==================== 新增/编辑 ====================\r\n editVisible: false,\r\n editMode: 'add',\r\n editForm: this.createEmptyEditForm(),\r\n editRules: {\r\n jc: [{ required: true, message: '请输入课程简称', trigger: 'blur' }]\r\n },\r\n\r\n // ==================== 复制到其它班次 ====================\r\n teamSelectVisible: false,\r\n applyMode: 'region',\r\n copyNote: ''\r\n }\r\n },\r\n computed: {\r\n dialogVisible: {\r\n get() {\r\n return this.visible\r\n },\r\n set(val) {\r\n this.$emit('update:visible', val)\r\n }\r\n },\r\n safeSemester() {\r\n return this.semester || {}\r\n },\r\n className() {\r\n const s = this.safeSemester\r\n return s.xydmc || s.xydbh || ''\r\n },\r\n semesterTitle() {\r\n const s = this.safeSemester\r\n const nd = s.nd !== undefined && s.nd !== null && s.nd !== '' ? `${s.nd}年` : ''\r\n const xq = this.xqdcLabel(s.xqdc)\r\n return `${nd}${xq}`\r\n },\r\n semesterWeeks() {\r\n const s = this.safeSemester\r\n if (!s.kxrq || !s.jsrq) return '-'\r\n const start = new Date(String(s.kxrq).slice(0, 10))\r\n const end = new Date(String(s.jsrq).slice(0, 10))\r\n const diff = Math.round((end - start) / (1000 * 60 * 60 * 24)) + 1\r\n return diff > 0 ? Math.ceil(diff / 7) : '-'\r\n },\r\n /** 班历统计:课程数 / 总学时 / 总学分 */\r\n summary() {\r\n const totalXs = this.records.reduce((sum, r) => sum + (Number(r.xs) || 0), 0)\r\n const totalXf = this.records.reduce((sum, r) => sum + (Number(r.xf) || 0), 0)\r\n return { totalXs, totalXf }\r\n },\r\n editTitle() {\r\n return this.editMode === 'edit' ? '编辑班历记录' : '新增班历记录'\r\n }\r\n },\r\n watch: {\r\n visible(val) {\r\n if (val) {\r\n this.loadData()\r\n }\r\n }\r\n },\r\n methods: {\r\n /* ---------- 格式化 ---------- */\r\n fmtDate(val) {\r\n if (!val) return '-'\r\n return String(val).slice(0, 10)\r\n },\r\n xqdcLabel(val) {\r\n if (val === 1 || val === '1') return '第1学期'\r\n if (val === 2 || val === '2') return '第2学期'\r\n if (val === 3 || val === '3') return '第3学期'\r\n return val !== undefined && val !== null && val !== '' ? `第${val}学期` : '-'\r\n },\r\n cleanPayload(obj) {\r\n const payload = {}\r\n Object.keys(obj).forEach(key => {\r\n const value = obj[key]\r\n if (value !== '' && value !== null && value !== undefined) {\r\n payload[key] = value\r\n }\r\n })\r\n return payload\r\n },\r\n\r\n /* ---------- 列表加载 ---------- */\r\n loadData() {\r\n const s = this.semester || {}\r\n if (!s.bh) return\r\n this.loading = true\r\n listClassCalendar(s.bh).then(res => {\r\n this.records = (res && res.data) || []\r\n this.loading = false\r\n }).catch(() => {\r\n this.records = []\r\n this.loading = false\r\n })\r\n },\r\n\r\n handleSelectionChange(rows) {\r\n this.selection = rows\r\n },\r\n\r\n /* ---------- 新增 / 编辑 ---------- */\r\n createEmptyEditForm() {\r\n const s = this.semester || {}\r\n return {\r\n bh: '',\r\n nd: s.nd,\r\n xydbh: s.xydbh || '',\r\n xqdc: s.xqdc,\r\n xydxqbh: s.bh || '',\r\n jc: '',\r\n kbh: '',\r\n klx: '',\r\n kcxh: undefined,\r\n jhkcxh: undefined,\r\n xhbs: undefined,\r\n jybh: '',\r\n jsbh: '',\r\n rs: undefined,\r\n zks: undefined,\r\n xs: undefined,\r\n llxs: undefined,\r\n sjxs: undefined,\r\n xf: undefined,\r\n ksks: undefined,\r\n ksbh: '',\r\n ksdd: '',\r\n cjfz: '',\r\n bjrxypjf: undefined,\r\n ksksbxs: undefined,\r\n jysdh: '',\r\n jysjhjybh: '',\r\n jysjhbz: '',\r\n pdxh: undefined,\r\n pdqsz: undefined,\r\n pdaz: undefined,\r\n pdzzksj: undefined,\r\n pdbz: undefined,\r\n pdtbykxxbz: undefined,\r\n pdqyzdyxs: undefined,\r\n pdzdyxsfbsj: '',\r\n bz2: undefined,\r\n bz: ''\r\n }\r\n },\r\n\r\n handleAdd() {\r\n this.editMode = 'add'\r\n this.editForm = this.createEmptyEditForm()\r\n this.editVisible = true\r\n this.$nextTick(() => {\r\n if (this.$refs.editFormRef) this.$refs.editFormRef.clearValidate()\r\n })\r\n },\r\n\r\n handleEdit(row) {\r\n this.editMode = 'edit'\r\n const s = this.semester || {}\r\n const form = this.createEmptyEditForm()\r\n Object.keys(form).forEach(key => {\r\n if (row[key] !== undefined && row[key] !== null) form[key] = row[key]\r\n })\r\n form.xydxqbh = s.bh || row.xydxqbh\r\n this.editForm = form\r\n this.editVisible = true\r\n this.$nextTick(() => {\r\n if (this.$refs.editFormRef) this.$refs.editFormRef.clearValidate()\r\n })\r\n },\r\n\r\n handleEditSubmit() {\r\n this.$refs.editFormRef.validate(valid => {\r\n if (!valid) return\r\n const payload = this.cleanPayload({ ...this.editForm })\r\n const req = this.editMode === 'edit'\r\n ? updateClassCalendar(payload)\r\n : addTeamTask(payload)\r\n this.saving = true\r\n req.then(() => {\r\n this.saving = false\r\n this.editVisible = false\r\n this.$message.success(this.editMode === 'edit' ? '班历记录已更新' : '班历记录已新增')\r\n this.loadData()\r\n }).catch(() => {\r\n this.saving = false\r\n })\r\n })\r\n },\r\n\r\n /* ---------- 删除 ---------- */\r\n handleDelete(row) {\r\n this.$confirm(`确定删除该班历记录(${row.jc || row.bh})吗?`, '提示', {\r\n confirmButtonText: '确定',\r\n cancelButtonText: '取消',\r\n type: 'warning'\r\n }).then(() => {\r\n delTeamTask(row.bh).then(() => {\r\n this.$message.success('已删除')\r\n this.loadData()\r\n })\r\n }).catch(() => {})\r\n },\r\n\r\n /* ---------- 自动生成必修课程 ---------- */\r\n handleAutoGenerate() {\r\n const s = this.semester || {}\r\n if (!s.xydbh || !s.xqdc) {\r\n this.$message.warning('当前班次学期缺少学员队编号或学期第次,无法自动生成')\r\n return\r\n }\r\n this.$confirm('将按专业教学计划自动生成该班次的必修课程(已存在的课程不会重复添加),是否继续?', '提示', {\r\n confirmButtonText: '确定',\r\n cancelButtonText: '取消',\r\n type: 'warning'\r\n }).then(() => {\r\n autoGenerateRequiredCourses(s.xydbh, s.xqdc).then(res => {\r\n const count = (res && res.data) || 0\r\n this.$message.success(`已自动生成 ${count} 门必修课程`)\r\n this.loadData()\r\n })\r\n }).catch(() => {})\r\n },\r\n\r\n /* ---------- 预设合班 / 拆班 ---------- */\r\n handlePresetMerge() {\r\n const bhs = this.selection.map(r => r.bh)\r\n if (!bhs.length) {\r\n this.$message.warning('请先勾选要合班的班历记录')\r\n return\r\n }\r\n this.$confirm(`将按年度为选中的 ${bhs.length} 条记录设置统一的课次序号,是否继续?`, '提示', {\r\n confirmButtonText: '确定',\r\n cancelButtonText: '取消',\r\n type: 'warning'\r\n }).then(() => {\r\n batchPresetMerge(bhs).then(res => {\r\n const count = (res && res.data) || 0\r\n this.$message.success(`已完成 ${count} 条记录的预设合班`)\r\n this.loadData()\r\n })\r\n }).catch(() => {})\r\n },\r\n\r\n handlePresetSplit() {\r\n const bhs = this.selection.map(r => r.bh)\r\n if (!bhs.length) {\r\n this.$message.warning('请先勾选要拆班的班历记录')\r\n return\r\n }\r\n this.$confirm(`将清空选中的 ${bhs.length} 条记录的课次序号,是否继续?`, '提示', {\r\n confirmButtonText: '确定',\r\n cancelButtonText: '取消',\r\n type: 'warning'\r\n }).then(() => {\r\n batchPresetSplit(bhs).then(res => {\r\n const count = (res && res.data) || 0\r\n this.$message.success(`已完成 ${count} 条记录的预设拆班`)\r\n this.loadData()\r\n })\r\n }).catch(() => {})\r\n },\r\n\r\n /* ---------- 应用于其它班次 ---------- */\r\n handleApplyRegion() {\r\n const bhs = this.selection.map(r => r.bh)\r\n if (!bhs.length) {\r\n this.$message.warning('请先勾选要应用的班历记录(选定区域)')\r\n return\r\n }\r\n this.applyMode = 'region'\r\n this.copyNote = `将选中的 ${bhs.length} 条班历记录复制到所选班次`\r\n this.teamSelectVisible = true\r\n },\r\n\r\n handleApplyWhole() {\r\n this.applyMode = 'whole'\r\n this.copyNote = '将整个班历复制到所选班次'\r\n this.teamSelectVisible = true\r\n },\r\n\r\n handleTeamConfirm(targets) {\r\n if (!targets || !targets.length) return\r\n const targetBhList = targets.map(t => t.bh)\r\n if (this.applyMode === 'whole') {\r\n batchCopyCalendarBySemester({\r\n sourceXydxqbh: this.semester.bh,\r\n targetBhList: targetBhList\r\n }).then(res => {\r\n const data = (res && res.data) || {}\r\n this.$message.success(`已复制整个班历,共新增 ${data.count || 0} 条记录`)\r\n this.loadData()\r\n })\r\n } else {\r\n batchCopyCalendar({\r\n sourceBhList: this.selection.map(r => r.bh),\r\n targetBhList: targetBhList\r\n }).then(res => {\r\n const data = (res && res.data) || {}\r\n this.$message.success(`已复制选定区域,共新增 ${data.count || 0} 条记录`)\r\n this.loadData()\r\n })\r\n }\r\n },\r\n\r\n /* ---------- 刷新 ---------- */\r\n handleRefresh() {\r\n this.loadData()\r\n this.$message.success('已刷新班历')\r\n }\r\n }\r\n}\r\n</script>\r\n\r\n<style scoped lang=\"scss\">\r\n.class-calendar {\r\n // ========== 1. 学期与班次信息 ==========\r\n .info-panel {\r\n background: #fff;\r\n border: 1px solid #ebeef5;\r\n border-radius: 4px;\r\n padding: 12px 20px;\r\n margin-bottom: 12px;\r\n\r\n .info-title-row {\r\n display: flex;\r\n align-items: baseline;\r\n gap: 20px;\r\n margin-bottom: 8px;\r\n\r\n .semester-name,\r\n .class-name {\r\n font-size: 20px;\r\n font-weight: 700;\r\n color: #1e6fff;\r\n }\r\n }\r\n\r\n .date-range-row {\r\n display: flex;\r\n flex-direction: column;\r\n gap: 4px;\r\n\r\n .range-item {\r\n font-size: 13px;\r\n font-weight: 600;\r\n color: #1e6fff;\r\n }\r\n }\r\n }\r\n\r\n // ========== 2. 操作按钮区域 ==========\r\n .settings-panel {\r\n background: #fff;\r\n border: 1px solid #ebeef5;\r\n border-radius: 4px;\r\n padding: 12px 20px;\r\n margin-bottom: 12px;\r\n\r\n .action-buttons-row {\r\n display: flex;\r\n align-items: center;\r\n flex-wrap: wrap;\r\n gap: 8px;\r\n }\r\n }\r\n\r\n // ========== 3. 表格区域 ==========\r\n .table-area {\r\n background: #fff;\r\n border: 1px solid #ebeef5;\r\n border-radius: 4px;\r\n overflow: hidden;\r\n\r\n .select-tip {\r\n padding: 6px 12px;\r\n font-size: 12px;\r\n color: #909399;\r\n border-top: 1px solid #ebeef5;\r\n background: #fafafa;\r\n }\r\n }\r\n\r\n .text-danger {\r\n color: #f56c6c;\r\n }\r\n}\r\n\r\n// ========== 弹窗内表单分区标题 ==========\r\n.edit-form {\r\n .form-section-title {\r\n font-size: 13px;\r\n font-weight: 600;\r\n color: #303133;\r\n margin: 6px 0 10px;\r\n padding: 6px 10px;\r\n background: #f0f7ff;\r\n border-left: 3px solid #1e6fff;\r\n }\r\n}\r\n\r\n</style>\r\n"],"mappings":"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","ignoreList":[]}]}