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

1 line
47 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\\PeidangEditDialog.vue?vue&type=script&lang=js","dependencies":[{"path":"C:\\Users\\Admin\\Desktop\\education\\frontend\\src\\views\\teachOffice\\shiftSemester\\PeidangEditDialog.vue","mtime":1787473496107},{"path":"C:\\Users\\Admin\\Desktop\\education\\frontend\\babel.config.js","mtime":1787309162881},{"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:InVzZSBzdHJpY3QiOwoKdmFyIF9pbnRlcm9wUmVxdWlyZURlZmF1bHQgPSByZXF1aXJlKCJDOi9Vc2Vycy9BZG1pbi9EZXNrdG9wL2VkdWNhdGlvbi9mcm9udGVuZC9ub2RlX21vZHVsZXMvQGJhYmVsL3J1bnRpbWUvaGVscGVycy9pbnRlcm9wUmVxdWlyZURlZmF1bHQuanMiKS5kZWZhdWx0OwpPYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgIl9fZXNNb2R1bGUiLCB7CiAgdmFsdWU6IHRydWUKfSk7CmV4cG9ydHMuZGVmYXVsdCA9IHZvaWQgMDsKdmFyIF90b0NvbnN1bWFibGVBcnJheTIgPSBfaW50ZXJvcFJlcXVpcmVEZWZhdWx0KHJlcXVpcmUoIkM6L1VzZXJzL0FkbWluL0Rlc2t0b3AvZWR1Y2F0aW9uL2Zyb250ZW5kL25vZGVfbW9kdWxlcy9AYmFiZWwvcnVudGltZS9oZWxwZXJzL3RvQ29uc3VtYWJsZUFycmF5LmpzIikpOwpyZXF1aXJlKCJjb3JlLWpzL21vZHVsZXMvZXMuYXJyYXkuZmluZC5qcyIpOwpyZXF1aXJlKCJjb3JlLWpzL21vZHVsZXMvZXMuYXJyYXkuaW5jbHVkZXMuanMiKTsKcmVxdWlyZSgiY29yZS1qcy9tb2R1bGVzL2VzLmFycmF5LnB1c2guanMiKTsKcmVxdWlyZSgiY29yZS1qcy9tb2R1bGVzL2VzLmFycmF5LnJlZHVjZS5qcyIpOwpyZXF1aXJlKCJjb3JlLWpzL21vZHVsZXMvZXMuYXJyYXkuc29ydC5qcyIpOwpyZXF1aXJlKCJjb3JlLWpzL21vZHVsZXMvZXMub2JqZWN0LmtleXMuanMiKTsKcmVxdWlyZSgiY29yZS1qcy9tb2R1bGVzL2VzLm9iamVjdC50by1zdHJpbmcuanMiKTsKcmVxdWlyZSgiY29yZS1qcy9tb2R1bGVzL2VzLnN0cmluZy5pbmNsdWRlcy5qcyIpOwpyZXF1aXJlKCJjb3JlLWpzL21vZHVsZXMvZXNuZXh0Lml0ZXJhdG9yLmNvbnN0cnVjdG9yLmpzIik7CnJlcXVpcmUoImNvcmUtanMvbW9kdWxlcy9lc25leHQuaXRlcmF0b3IuZmluZC5qcyIpOwpyZXF1aXJlKCJjb3JlLWpzL21vZHVsZXMvZXNuZXh0Lml0ZXJhdG9yLmZvci1lYWNoLmpzIik7CnJlcXVpcmUoImNvcmUtanMvbW9kdWxlcy9lc25leHQuaXRlcmF0b3IucmVkdWNlLmpzIik7CnJlcXVpcmUoImNvcmUtanMvbW9kdWxlcy9lc25leHQuaXRlcmF0b3Iuc29tZS5qcyIpOwpyZXF1aXJlKCJjb3JlLWpzL21vZHVsZXMvd2ViLmRvbS1jb2xsZWN0aW9ucy5mb3ItZWFjaC5qcyIpOwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwp2YXIgX2RlZmF1bHQgPSBleHBvcnRzLmRlZmF1bHQgPSB7CiAgbmFtZTogJ1BlaWRhbmdFZGl0RGlhbG9nJywKICBwcm9wczogewogICAgdmlzaWJsZTogewogICAgICB0eXBlOiBCb29sZWFuLAogICAgICBkZWZhdWx0OiBmYWxzZQogICAgfSwKICAgIC8qKiDlrablubTlrabmnJ/lkI3np7AgKi8KICAgIHNlbWVzdGVyTmFtZTogewogICAgICB0eXBlOiBTdHJpbmcsCiAgICAgIGRlZmF1bHQ6ICcyMDE3LTIwMTjlrablubTnrKzkuIDlrabmnJ8nCiAgICB9LAogICAgLyoqIOePreasoeagh+etvu+8iOWmgiDmlZnlrabkupTns7syMDE257qn5LiT5LiaMDExM+ePreasoTA0MTfvvIkgKi8KICAgIGNsYXNzTGFiZWw6IHsKICAgICAgdHlwZTogU3RyaW5nLAogICAgICBkZWZhdWx0OiAn5pWZ5a2m5LqU57O7MjAxNue6p+S4k+S4mjAxMTPnj63mrKEwNDE3JwogICAgfQogIH0sCiAgZGF0YTogZnVuY3Rpb24gZGF0YSgpIHsKICAgIHJldHVybiB7CiAgICAgIC8vID09PT09PT09PT09PT09PT09PT09IOaXtumXtOi9tOWPguaVsCA9PT09PT09PT09PT09PT09PT09PQogICAgICAvKiog6K+l54+t5qyh5byA5a2m6LW35aeL5ZGo5qyhICovCiAgICAgIHN0YXJ0V2VlazogOCwKICAgICAgLyoqIOivpeePreasoeWtpuacn+e7k+adn+WRqOasoSAqLwogICAgICBlbmRXZWVrOiAzMiwKICAgICAgLyoqIOivpeePreasoeavj+WRqOWPr+WuieaOkueahOato+ivvuWtpuaXtuaXtuaVsO+8iOWOu+mZpOS4jeiDveaOkuivvuWtpuaXtu+8iSAqLwogICAgICB3ZWVrbHlDYXBhY2l0eTogNDAsCiAgICAgIC8qKiDmnIjliLvluqbvvJrmr48gNCDlkajkuLrkuIDmnIjvvIg4LTExIOesrDHmnIjvvIwxMi0xNSDnrKwy5pyILi4u77yJ77yM6Jma57q/5YiG6ZqUICovCiAgICAgIG1vbnRoQnJlYWtzOiBbMTIsIDE2LCAyMCwgMjQsIDI4LCAzMl0sCiAgICAgIC8vID09PT09PT09PT09PT09PT09PT09IOmFjeaho+ivvueoi+aVsOaNriA9PT09PT09PT09PT09PT09PT09PQogICAgICBjb3Vyc2VzOiBbCiAgICAgIC8vIC0tLS0g6Z2e6L+e5o6S6K++77yI5oyJ5ZGo5a2m5pe25a6J5o6S77yM6JOd6Imy77yM5q+P6Zeo54us56uL5LiA57uE77yJIC0tLS0KICAgICAgewogICAgICAgIGlkOiAncDEnLAogICAgICAgIG5hbWU6ICfor77nqIvnp5Hnm64wMDEnLAogICAgICAgIHNob3J0OiAn5pS/5rK7JywKICAgICAgICBwbGFuU3RhcnQ6IDgsCiAgICAgICAgYWN0dWFsU3RhcnQ6IDgsCiAgICAgICAgZW5kV2VlazogMjMsCiAgICAgICAgY29udGludW91czogZmFsc2UsCiAgICAgICAgcHJpb3JpdHk6IDEsCiAgICAgICAgd2Vla2x5SG91cnM6IDQsCiAgICAgICAgaG91cnM6IDYwLAogICAgICAgIHNjaGVkdWxlVGltZTogdHJ1ZSwKICAgICAgICBncm91cDogJ+e7hDEnCiAgICAgIH0sIHsKICAgICAgICBpZDogJ3AyJywKICAgICAgICBuYW1lOiAn6K++56iL56eR55uuMDAyJywKICAgICAgICBzaG9ydDogJ+WGm+S6iycsCiAgICAgICAgcGxhblN0YXJ0OiA4LAogICAgICAgIGFjdHVhbFN0YXJ0OiA4LAogICAgICAgIGVuZFdlZWs6IDIwLAogICAgICAgIGNvbnRpbnVvdXM6IGZhbHNlLAogICAgICAgIHByaW9yaXR5OiAyLAogICAgICAgIHdlZWtseUhvdXJzOiA0LAogICAgICAgIGhvdXJzOiA0OCwKICAgICAgICBzY2hlZHVsZVRpbWU6IHRydWUsCiAgICAgICAgZ3JvdXA6ICfnu4QyJwogICAgICB9LCB7CiAgICAgICAgaWQ6ICdwMycsCiAgICAgICAgbmFtZTogJ+ivvueoi+enkeebrjAwMycsCiAgICAgICAgc2hvcnQ6ICfmiJjmnK8nLAogICAgICAgIHBsYW5TdGFydDogOCwKICAgICAgICBhY3R1YWxTdGFydDogMTAsCiAgICAgICAgZW5kV2VlazogMjEsCiAgICAgICAgY29udGludW91czogZmFsc2UsCiAgICAgICAgcHJpb3JpdHk6IDMsCiAgICAgICAgd2Vla2x5SG91cnM6IDQsCiAgICAgICAgaG91cnM6IDQ0LAogICAgICAgIHNjaGVkdWxlVGltZTogdHJ1ZSwKICAgICAgICBncm91cDogJ+e7hDMnCiAgICAgIH0sIHsKICAgICAgICBpZDogJ3A0JywKICAgICAgICBuYW1lOiAn6K++56iL56eR55uuMDA0JywKICAgICAgICBzaG9ydDogJ+aMh+aMpScsCiAgICAgICAgcGxhblN0YXJ0OiA4LAogICAgICAgIGFjdHVhbFN0YXJ0OiAxMiwKICAgICAgICBlbmRXZWVrOiAyMiwKICAgICAgICBjb250aW51b3VzOiBmYWxzZSwKICAgICAgICBwcmlvcml0eTogNCwKICAgICAgICB3ZWVrbHlIb3VyczogNCwKICAgICAgICBob3VyczogNDAsCiAgICAgICAgc2NoZWR1bGVUaW1lOiB0cnVlLAogICAgICAgIGdyb3VwOiAn57uENCcKICAgICAgfSwKICAgICAgLy8gLS0tLSDov57mjpLor77vvIjljZXnp5Hni6zov5vvvIznuqLoibLvvIzlhbHkuLrkuIDnu4TvvIkgLS0tLQogICAgICB7CiAgICAgICAgaWQ6ICdwNScsCiAgICAgICAgbmFtZTogJ+ivvueoi+enkeebrjAwNScsCiAgICAgICAgc2hvcnQ6ICfnu7zlkIjmvJTnu4MnLAogICAgICAgIHBsYW5TdGFydDogOCwKICAgICAgICBhY3R1YWxTdGFydDogOCwKICAgICAgICBlbmRXZWVrOiAxMywKICAgICAgICBjb250aW51b3VzOiB0cnVlLAogICAgICAgIHByaW9yaXR5OiA1LAogICAgICAgIHdlZWtseUhvdXJzOiAyMCwKICAgICAgICBob3VyczogMTAwLAogICAgICAgIHNjaGVkdWxlVGltZTogdHJ1ZSwKICAgICAgICBncm91cDogJ+i/nuaOkue7hCcKICAgICAgfSwgewogICAgICAgIGlkOiAncDYnLAogICAgICAgIG5hbWU6ICfor77nqIvnp5Hnm64wMDYnLAogICAgICAgIHNob3J0OiAn6YeO6JCl5ouJ57uDJywKICAgICAgICBwbGFuU3RhcnQ6IDE0LAogICAgICAgIGFjdHVhbFN0YXJ0OiAxNCwKICAgICAgICBlbmRXZWVrOiAxNiwKICAgICAgICBjb250aW51b3VzOiB0cnVlLAogICAgICAgIHByaW9yaXR5OiA2LAogICAgICAgIHdlZWtseUhvdXJzOiAyNCwKICAgICAgICBob3VyczogNDgsCiAgICAgICAgc2NoZWR1bGVUaW1lOiB0cnVlLAogICAgICAgIGdyb3VwOiAn6L+e5o6S57uEJwogICAgICB9XSwKICAgICAgLy8gPT09PT09PT09PT09PT09PT09PT0g6KGo5qC86YCJ5Lit5LiO5bGe5oCn6K6+572uID09PT09PT09PT09PT09PT09PT09CiAgICAgIGN1cnJlbnRDb3Vyc2U6IG51bGwsCiAgICAgIHByb3BGb3JtOiB7CiAgICAgICAgd2Vla2x5SG91cnM6IDQsCiAgICAgICAgc3RhcnRXZWVrOiA4LAogICAgICAgIGVuZFdlZWs6IDE2LAogICAgICAgIGNvbnRpbnVvdXM6IGZhbHNlLAogICAgICAgIHByaW9yaXR5OiAxLAogICAgICAgIGdyb3VwOiAnJwogICAgICB9CiAgICB9OwogIH0sCiAgY29tcHV0ZWQ6IHsKICAgIGRpYWxvZ1Zpc2libGU6IHsKICAgICAgZ2V0OiBmdW5jdGlvbiBnZXQoKSB7CiAgICAgICAgcmV0dXJuIHRoaXMudmlzaWJsZTsKICAgICAgfSwKICAgICAgc2V0OiBmdW5jdGlvbiBzZXQodmFsKSB7CiAgICAgICAgdGhpcy4kZW1pdCgndXBkYXRlOnZpc2libGUnLCB2YWwpOwogICAgICB9CiAgICB9LAogICAgLyoqIOWRqOW6j+WIl++8mjggfiAzMiAqL3dlZWtzOiBmdW5jdGlvbiB3ZWVrcygpIHsKICAgICAgdmFyIGFyciA9IFtdOwogICAgICBmb3IgKHZhciB3ID0gdGhpcy5zdGFydFdlZWs7IHcgPD0gdGhpcy5lbmRXZWVrOyB3KyspIGFyci5wdXNoKHcpOwogICAgICByZXR1cm4gYXJyOwogICAgfSwKICAgIC8qKiDmnIjku73kv6Hmga/vvJrmr4/mnIjljIXlkKvnmoTlkajmrKHkuI7lj6/lronmjpLmraPor77lrabml7YgKi9tb250aHM6IGZ1bmN0aW9uIG1vbnRocygpIHsKICAgICAgdmFyIGxpc3QgPSBbXTsKICAgICAgdmFyIG1ObyA9IDE7CiAgICAgIHZhciBjdXIgPSB0aGlzLnN0YXJ0V2VlazsKICAgICAgd2hpbGUgKGN1ciA8PSB0aGlzLmVuZFdlZWspIHsKICAgICAgICB2YXIgbmV4dCA9IHRoaXMubW9udGhCcmVha3MuZmluZChmdW5jdGlvbiAoYikgewogICAgICAgICAgcmV0dXJuIGIgPiBjdXI7CiAgICAgICAgfSk7CiAgICAgICAgdmFyIG1FbmQgPSBNYXRoLm1pbigobmV4dCA9PT0gdW5kZWZpbmVkID8gdGhpcy5lbmRXZWVrICsgMSA6IG5leHQpIC0gMSwgdGhpcy5lbmRXZWVrKTsKICAgICAgICBsaXN0LnB1c2goewogICAgICAgICAgbm86IG1ObywKICAgICAgICAgIHN0YXJ0OiBjdXIsCiAgICAgICAgICBlbmQ6IG1FbmQsCiAgICAgICAgICB0b3RhbDogKG1FbmQgLSBjdXIgKyAxKSAqIHRoaXMud2Vla2x5Q2FwYWNpdHkKICAgICAgICB9KTsKICAgICAgICBjdXIgPSBtRW5kICsgMTsKICAgICAgICBtTm8rKzsKICAgICAgfQogICAgICByZXR1cm4gbGlzdDsKICAgIH0sCiAgICAvKiog5bqV6YOo5q+P5pyI5rGH5oC76KGM5pWw5o2u77yad2VlayAtPiDor6XmnIjkv6Hmga/vvIjku4XmnIjpppbmoLzlsZXnpLrmloflrZfvvIkgKi9ib3R0b21DZWxsczogZnVuY3Rpb24gYm90dG9tQ2VsbHMoKSB7CiAgICAgIHZhciBfdGhpcyA9IHRoaXM7CiAgICAgIHZhciBtYXAgPSB7fTsKICAgICAgdGhpcy53ZWVrcy5mb3JFYWNoKGZ1bmN0aW9uICh3KSB7CiAgICAgICAgdmFyIG0gPSBfdGhpcy5tb250aHMuZmluZChmdW5jdGlvbiAoaXRlbSkgewogICAgICAgICAgcmV0dXJuIHcgPj0gaXRlbS5zdGFydCAmJiB3IDw9IGl0ZW0uZW5kOwogICAgICAgIH0pOwogICAgICAgIGlmICghbSkgcmV0dXJuOwogICAgICAgIG1hcFt3XSA9IHsKICAgICAgICAgIG5vOiBtLm5vLAogICAgICAgICAgdG90YWw6IG0udG90YWwsCiAgICAgICAgICBzY2hlZHVsZWQ6IF90aGlzLm1vbnRobHlTY2hlZHVsZWQodyksCiAgICAgICAgICByZW1haW5pbmc6IG0udG90YWwgLSBfdGhpcy5tb250aGx5U2NoZWR1bGVkKHcpCiAgICAgICAgfTsKICAgICAgfSk7CiAgICAgIHJldHVybiBtYXA7CiAgICB9LAogICAgLyoqIOihqOagvOWxleekuumhuuW6j++8mumdnui/nuaOkuivvuWcqOWJje+8jOi/nuaOkuivvuWcqOWQju+8m+e7hOWGheaMieWunumZhei1t+Wni+WRqOOAgeS8mOWFiOW6j+aVsOaOkuW6jyAqL2Rpc3BsYXlDb3Vyc2VzOiBmdW5jdGlvbiBkaXNwbGF5Q291cnNlcygpIHsKICAgICAgcmV0dXJuICgwLCBfdG9Db25zdW1hYmxlQXJyYXkyLmRlZmF1bHQpKHRoaXMuY291cnNlcykuc29ydChmdW5jdGlvbiAoYSwgYikgewogICAgICAgIGlmIChhLmNvbnRpbnVvdXMgIT09IGIuY29udGludW91cykgcmV0dXJuIGEuY29udGludW91cyA/IDEgOiAtMTsKICAgICAgICBpZiAoYS5hY3R1YWxTdGFydCAhPT0gYi5hY3R1YWxTdGFydCkgcmV0dXJuIGEuYWN0dWFsU3RhcnQgLSBiLmFjdHVhbFN0YXJ0OwogICAgICAgIHJldHVybiBhLnByaW9yaXR5IC0gYi5wcmlvcml0eTsKICAgICAgfSk7CiAgICB9CiAgfSwKICB3YXRjaDogewogICAgdmlzaWJsZTogZnVuY3Rpb24gdmlzaWJsZSh2YWwpIHsKICAgICAgdmFyIF90aGlzMiA9IHRoaXM7CiAgICAgIGlmICghdmFsKSByZXR1cm47CiAgICAgIHRoaXMuJG5leHRUaWNrKGZ1bmN0aW9uICgpIHsKICAgICAgICBpZiAoX3RoaXMyLiRyZWZzLnRhYmxlUmVmKSB7CiAgICAgICAgICBfdGhpczIuJHJlZnMudGFibGVSZWYuc2V0Q3VycmVudFJvdyhfdGhpczIuZGlzcGxheUNvdXJzZXNbMF0pOwogICAgICAgIH0KICAgICAgICBfdGhpczIuY3VycmVudENvdXJzZSA9IF90aGlzMi5kaXNwbGF5Q291cnNlc1swXSB8fCBudWxsOwogICAgICAgIF90aGlzMi5zeW5jUHJvcEZvcm0oKTsKICAgICAgfSk7CiAgICB9CiAgfSwKICBtZXRob2RzOiB7CiAgICAvKiog5piv5ZCm5Li65pyI6L6555WM5YiX77yI5bem5L6n55S76Jma57q/77yJICovaXNNb250aEJvdW5kYXJ5OiBmdW5jdGlvbiBpc01vbnRoQm91bmRhcnkod2VlaykgewogICAgICByZXR1cm4gdGhpcy5tb250aEJyZWFrcy5pbmNsdWRlcyh3ZWVrKTsKICAgIH0sCiAgICAvKiog5piv5ZCm5Li65p+Q5pyI55qE57uT5p2f5ZGo77yI5LuF5pyI57uT5p2f5YiX5bGV56S65paH5a2X77yJICovaXNNb250aEVuZFdlZWs6IGZ1bmN0aW9uIGlzTW9udGhFbmRXZWVrKHdlZWspIHsKICAgICAgcmV0dXJuIHRoaXMubW9udGhzLnNvbWUoZnVuY3Rpb24gKG0pIHsKICAgICAgICByZXR1cm4gbS5lbmQgPT09IHdlZWs7CiAgICAgIH0pOwogICAgfSwKICAgIC8qKiDmn5DlkajmiYDmnInor77nqIvlt7LlronmjpLlrabml7bkuYvlkowgKi9tb250aGx5U2NoZWR1bGVkOiBmdW5jdGlvbiBtb250aGx5U2NoZWR1bGVkKHdlZWspIHsKICAgICAgdmFyIF90aGlzMyA9IHRoaXM7CiAgICAgIHJldHVybiB0aGlzLmNvdXJzZXMucmVkdWNlKGZ1bmN0aW9uIChzdW0sIGMpIHsKICAgICAgICB2YXIgbWFwID0gX3RoaXMzLmNvdXJzZVdlZWtIb3VycyhjKTsKICAgICAgICByZXR1cm4gc3VtICsgKG1hcFt3ZWVrXSAhPT0gdW5kZWZpbmVkID8gbWFwW3dlZWtdIDogMCk7CiAgICAgIH0sIDApOwogICAgfSwKICAgIC8qKiDmr4/pl6jor77nqIvmjInlkajliIbluIPnmoTlronmjpLlrabml7YgKi9jb3Vyc2VXZWVrSG91cnM6IGZ1bmN0aW9uIGNvdXJzZVdlZWtIb3Vycyhjb3Vyc2UpIHsKICAgICAgdmFyIG1hcCA9IHt9OwogICAgICB2YXIgcmVtYWluaW5nID0gY291cnNlLmhvdXJzOwogICAgICB2YXIgdyA9IGNvdXJzZS5hY3R1YWxTdGFydDsKICAgICAgd2hpbGUgKHJlbWFpbmluZyA+IDAgJiYgdyA8PSBjb3Vyc2UuZW5kV2VlaykgewogICAgICAgIHZhciBoID0gTWF0aC5taW4oY291cnNlLndlZWtseUhvdXJzLCByZW1haW5pbmcpOwogICAgICAgIG1hcFt3XSA9IGg7CiAgICAgICAgcmVtYWluaW5nIC09IGg7CiAgICAgICAgdysrOwogICAgICB9CiAgICAgIHJldHVybiBtYXA7CiAgICB9LAogICAgLyoqIOivvueoi+iuoeeul+WxnuaAp++8muW3suaOkuWtpuaXtiAvIOacquaOkuWtpuaXtiAqL2NvdXJzZVN0YXRzOiBmdW5jdGlvbiBjb3Vyc2VTdGF0cyhjb3Vyc2UpIHsKICAgICAgdmFyIG1hcCA9IHRoaXMuY291cnNlV2Vla0hvdXJzKGNvdXJzZSk7CiAgICAgIHZhciBzY2hlZHVsZWQgPSBPYmplY3Qua2V5cyhtYXApLnJlZHVjZShmdW5jdGlvbiAoc3VtLCBrKSB7CiAgICAgICAgcmV0dXJuIHN1bSArIG1hcFtrXTsKICAgICAgfSwgMCk7CiAgICAgIHJldHVybiB7CiAgICAgICAgc2NoZWR1bGVkOiBzY2hlZHVsZWQsCiAgICAgICAgcmVtYWluaW5nOiBNYXRoLm1heCgwLCBjb3Vyc2UuaG91cnMgLSBzY2hlZHVsZWQpCiAgICAgIH07CiAgICB9LAogICAgaGFuZGxlQ3VycmVudENoYW5nZTogZnVuY3Rpb24gaGFuZGxlQ3VycmVudENoYW5nZShyb3cpIHsKICAgICAgdGhpcy5jdXJyZW50Q291cnNlID0gcm93OwogICAgICB0aGlzLnN5bmNQcm9wRm9ybSgpOwogICAgfSwKICAgIC8qKiDlsZ7mgKforr7nva7ooajljZXlkIzmraXvvIjlj7PkvqfvvIkgKi9zeW5jUHJvcEZvcm06IGZ1bmN0aW9uIHN5bmNQcm9wRm9ybSgpIHsKICAgICAgaWYgKCF0aGlzLmN1cnJlbnRDb3Vyc2UpIHJldHVybjsKICAgICAgdGhpcy5wcm9wRm9ybS53ZWVrbHlIb3VycyA9IHRoaXMuY3VycmVudENvdXJzZS53ZWVrbHlIb3VyczsKICAgICAgdGhpcy5wcm9wRm9ybS5zdGFydFdlZWsgPSB0aGlzLmN1cnJlbnRDb3Vyc2UuYWN0dWFsU3RhcnQ7CiAgICAgIHRoaXMucHJvcEZvcm0uZW5kV2VlayA9IHRoaXMuY3VycmVudENvdXJzZS5lbmRXZWVrOwogICAgICB0aGlzLnByb3BGb3JtLmNvbnRpbnVvdXMgPSB0aGlzLmN1cnJlbnRDb3Vyc2UuY29udGludW91czsKICAgICAgdGhpcy5wcm9wRm9ybS5wcmlvcml0eSA9IHRoaXMuY3VycmVudENvdXJzZS5wcmlvcml0eTsKICAgICAgdGhpcy5wcm9wRm9ybS5ncm91cCA9IHRoaXMuY3VycmVudENvdXJzZS5ncm91cDsKICAgIH0sCiAgICAvKiog5bGe5oCn6K6+572u5L+d5a2Y77ya5bqU55So5omA6YCJ6K++56iL55qE6YWN5qGj5bGe5oCnICovaGFuZGxlQXBwbHlQcm9wOiBmdW5jdGlvbiBoYW5kbGVBcHBseVByb3AoKSB7CiAgICAgIGlmICghdGhpcy5jdXJyZW50Q291cnNlKSB7CiAgICAgICAgdGhpcy4kbWVzc2FnZS53YXJuaW5nKCfor7flhYjlnKjooajmoLzkuK3pgInmi6nkuIDpl6jor77nqIsnKTsKICAgICAgICByZXR1cm47CiAgICAgIH0KICAgICAgdmFyIHJvdyA9IHRoaXMuY3VycmVudENvdXJzZTsKICAgICAgcm93LndlZWtseUhvdXJzID0gdGhpcy5wcm9wRm9ybS53ZWVrbHlIb3VyczsKICAgICAgcm93LmFjdHVhbFN0YXJ0ID0gdGhpcy5wcm9wRm9ybS5zdGFydFdlZWs7CiAgICAgIHJvdy5lbmRXZWVrID0gdGhpcy5wcm9wRm9ybS5lbmRXZWVrOwogICAgICByb3cuY29udGludW91cyA9IHRoaXMucHJvcEZvcm0uY29udGludW91czsKICAgICAgcm93LnByaW9yaXR5ID0gdGhpcy5wcm9wRm9ybS5wcmlvcml0eTsKICAgICAgcm93Lmdyb3VwID0gdGhpcy5wcm9wRm9ybS5ncm91cDsKICAgICAgdGhpcy4kbWVzc2FnZS5zdWNjZXNzKCfphY3moaPlsZ7mgKflt7LlupTnlKjvvIjliY3nq6/mvJTnpLrvvIknKTsKICAgIH0sCiAgICAvKiog5LyY5YWI5bqP5pWw5LiK56e777ya5LyY5YWI5bqP5pWw5YePIDEgKi9oYW5kbGVQcmlvcml0eVVwOiBmdW5jdGlvbiBoYW5kbGVQcmlvcml0eVVwKCkgewogICAgICBpZiAoIXRoaXMuY3VycmVudENvdXJzZSkgewogICAgICAgIHRoaXMuJG1lc3NhZ2Uud2FybmluZygn6K+35YWI5Zyo6KGo5qC85Lit6YCJ5oup5LiA6Zeo6K++56iLJyk7CiAgICAgICAgcmV0dXJuOwogICAgICB9CiAgICAgIGlmICh0aGlzLmN1cnJlbnRDb3Vyc2UucHJpb3JpdHkgPD0gMSkgewogICAgICAgIHRoaXMuJG1lc3NhZ2UuaW5mbygn5bey5piv5pyA6auY5LyY5YWI5bqP5pWwJyk7CiAgICAgICAgcmV0dXJuOwogICAgICB9CiAgICAgIHRoaXMuY3VycmVudENvdXJzZS5wcmlvcml0eSAtPSAxOwogICAgICB0aGlzLnN5bmNQcm9wRm9ybSgpOwogICAgfSwKICAgIC8qKiDkvJjlhYjluo/mlbDkuIvnp7vvvJrkvJjlhYjluo/mlbDliqAgMSAqL2hhbmRsZVByaW9yaXR5RG93bjogZnVuY3Rpb24gaGFuZGxlUHJpb3JpdHlEb3duKCkgewogICAgICBpZiAoIXRoaXMuY3VycmVudENvdXJzZSkgewogICAgICAgIHRoaXMuJG1lc3NhZ2Uud2FybmluZygn6K+35YWI5Zyo6KGo5qC85Lit6YCJ5oup5LiA6Zeo6K++56iLJyk7CiAgICAgICAgcmV0dXJuOwogICAgICB9CiAgICAgIHRoaXMuY3VycmVudENvdXJzZS5wcmlvcml0eSArPSAxOwogICAgICB0aGlzLnN5bmNQcm9wRm9ybSgpOwogICAgfSwKICAgIC8vID09PT09PT09PT09PT09PT09PT09IOW6lemDqOaTjeS9nCA9PT09PT09PT09PT09PT09PT09PQogICAgaGFuZGxlQ29uZmlybTogZnVuY3Rpb24gaGFuZGxlQ29uZmlybSgpIHsKICAgICAgdGhpcy4kZW1pdCgnY29uZmlybScpOwogICAgICB0aGlzLmRpYWxvZ1Zpc2libGUgPSBmYWxzZTsKICAgIH0KICB9Cn07"},{"version":3,"names":["name","props","visible","type","Boolean","default","semesterName","String","classLabel","data","startWeek","endWeek","weeklyCapacity","monthBreaks","courses","id","short","planStart","actualStart","continuous","priority","weeklyHours","hours","scheduleTime","group","currentCourse","propForm","computed","dialogVisible","get","set","val","$emit","weeks","arr","w","push","months","list","mNo","cur","next","find","b","mEnd","Math","min","undefined","no","start","end","total","bottomCells","_this","map","forEach","m","item","scheduled","monthlyScheduled","remaining","displayCourses","_toConsumableArray2","sort","a","watch","_this2","$nextTick","$refs","tableRef","setCurrentRow","syncPropForm","methods","isMonthBoundary","week","includes","isMonthEndWeek","some","_this3","reduce","sum","c","courseWeekHours","course","h","courseStats","Object","keys","k","max","handleCurrentChange","row","handleApplyProp","$message","warning","success","handlePriorityUp","info","handlePriorityDown","handleConfirm"],"sources":["src/views/teachOffice/shiftSemester/PeidangEditDialog.vue"],"sourcesContent":["<template>\r\n <el-dialog\r\n :visible=\"dialogVisible\"\r\n :show-close=\"false\"\r\n width=\"96%\"\r\n top=\"3vh\"\r\n :close-on-click-modal=\"false\"\r\n :close-on-press-escape=\"false\"\r\n class=\"peidang-dialog\"\r\n @update:visible=\"val => dialogVisible = val\"\r\n >\r\n <!-- ==================== 自定义标题栏 ==================== -->\r\n <div slot=\"header\">\r\n <div class=\"peidang-titlebar\">\r\n <i class=\"el-icon-reading title-icon\"></i>\r\n <span class=\"title-text\">\r\n 班次学期配档——{{ semesterName }}——{{ classLabel }}\r\n </span>\r\n </div>\r\n </div>\r\n\r\n <div class=\"peidang-body\">\r\n <!-- ==================== 上半部分:左右分栏 ==================== -->\r\n <div class=\"upper\">\r\n <!-- 左侧 75%:配档课程编组管理表格 -->\r\n <div class=\"table-area\">\r\n <el-table\r\n ref=\"tableRef\"\r\n :data=\"displayCourses\"\r\n border\r\n stripe\r\n highlight-current-row\r\n size=\"small\"\r\n max-height=\"240\"\r\n class=\"peidang-table\"\r\n @current-change=\"handleCurrentChange\"\r\n >\r\n <el-table-column prop=\"name\" label=\"科目名称\" width=\"100\" align=\"left\" header-align=\"center\" show-overflow-tooltip />\r\n <el-table-column prop=\"short\" label=\"简称\" width=\"60\" align=\"center\" show-overflow-tooltip />\r\n <el-table-column prop=\"planStart\" label=\"计划起始周\" width=\"60\" align=\"center\" show-overflow-tooltip />\r\n <el-table-column prop=\"actualStart\" label=\"实际起始周\" width=\"60\" align=\"center\" show-overflow-tooltip />\r\n <el-table-column prop=\"endWeek\" label=\"结束周\" width=\"60\" align=\"center\" show-overflow-tooltip />\r\n <el-table-column label=\"连排课\" width=\"50\" align=\"center\">\r\n <template slot-scope=\"{ row }\">\r\n <el-checkbox :value=\"row.continuous\" />\r\n </template>\r\n </el-table-column>\r\n <el-table-column prop=\"priority\" label=\"优先序数\" width=\"50\" align=\"center\" show-overflow-tooltip />\r\n <el-table-column prop=\"weeklyHours\" label=\"周学时\" width=\"50\" align=\"center\" show-overflow-tooltip />\r\n <el-table-column prop=\"hours\" label=\"学时\" width=\"50\" align=\"center\" show-overflow-tooltip />\r\n <el-table-column label=\"正课时间\" width=\"60\" align=\"center\">\r\n <template slot-scope=\"{ row }\">\r\n <el-checkbox :value=\"row.scheduleTime\" />\r\n </template>\r\n </el-table-column>\r\n <el-table-column label=\"已排学时\" width=\"50\" align=\"center\">\r\n <template slot-scope=\"{ row }\">{{ courseStats(row).scheduled }}</template>\r\n </el-table-column>\r\n <el-table-column label=\"未排学时\" width=\"50\" align=\"center\">\r\n <template slot-scope=\"{ row }\">{{ courseStats(row).remaining }}</template>\r\n </el-table-column>\r\n <el-table-column label=\"总班次任务数\" width=\"70\" align=\"center\">\r\n <template slot-scope=\"{ row }\">{{ row.continuous ? 1 : 1 }}</template>\r\n </el-table-column>\r\n <el-table-column label=\"配档编组任务数\" width=\"80\" align=\"center\">\r\n <template slot-scope=\"{ row }\">{{ row.continuous ? 2 : 1 }}</template>\r\n </el-table-column>\r\n </el-table>\r\n </div>\r\n\r\n <!-- 右侧 25%:配档课程属性设置区 + 优先序数上下移动 -->\r\n <div class=\"prop-area\">\r\n <div class=\"prop-title\">配档课程属性</div>\r\n <el-form label-width=\"72px\" size=\"small\" class=\"prop-form\">\r\n <el-form-item label=\"周学时\">\r\n <el-input-number v-model=\"propForm.weeklyHours\" :min=\"1\" :max=\"40\" controls-position=\"right\" style=\"width: 100%\" />\r\n </el-form-item>\r\n <el-form-item label=\"起始周次\">\r\n <el-input-number v-model=\"propForm.startWeek\" :min=\"startWeek\" :max=\"endWeek\" controls-position=\"right\" style=\"width: 100%\" />\r\n </el-form-item>\r\n <el-form-item label=\"结束周次\">\r\n <el-input-number v-model=\"propForm.endWeek\" :min=\"startWeek\" :max=\"endWeek\" controls-position=\"right\" style=\"width: 100%\" />\r\n </el-form-item>\r\n <el-form-item label=\"连排课\">\r\n <el-checkbox v-model=\"propForm.continuous\">单科独进</el-checkbox>\r\n </el-form-item>\r\n <el-form-item label=\"优先序数\">\r\n <div class=\"priority-field\">\r\n <el-input-number v-model=\"propForm.priority\" :min=\"1\" controls-position=\"right\" style=\"width: 100%\" />\r\n <el-button type=\"primary\" plain icon=\"el-icon-arrow-up\" @click=\"handlePriorityUp\" />\r\n <el-button type=\"primary\" plain icon=\"el-icon-arrow-down\" @click=\"handlePriorityDown\" />\r\n </div>\r\n </el-form-item>\r\n <el-form-item label=\"配档编组\">\r\n <el-input v-model=\"propForm.group\" />\r\n </el-form-item>\r\n </el-form>\r\n <el-button type=\"primary\" class=\"apply-btn\" @click=\"handleApplyProp\">应用属性</el-button>\r\n </div>\r\n </div>\r\n\r\n <!-- ==================== 下半部分:配档显示区域(甘特图) ==================== -->\r\n <div class=\"gantt-area\">\r\n <div class=\"gantt-head\">\r\n <div class=\"gantt-label-col\">\r\n <div class=\"gantt-label\">课程 / 周次</div>\r\n </div>\r\n <div class=\"gantt-body\">\r\n <!-- 行1:周次刻度(红色竖线为周刻度) -->\r\n <div class=\"gantt-row\">\r\n <div\r\n v-for=\"w in weeks\"\r\n :key=\"w\"\r\n class=\"gantt-cell week-cell\"\r\n :class=\"{ 'month-boundary': isMonthBoundary(w) }\"\r\n >{{ w }}</div>\r\n </div>\r\n <!-- 行2:本周可安排正课学时 -->\r\n <div class=\"gantt-row info-row\">\r\n <div\r\n v-for=\"w in weeks\"\r\n :key=\"w\"\r\n class=\"gantt-cell\"\r\n :class=\"{ 'month-boundary': isMonthBoundary(w) }\"\r\n >可排{{ weeklyCapacity }}</div>\r\n </div>\r\n <!-- 行3:已安排学时 / 剩余学时 -->\r\n <div class=\"gantt-row info-row\">\r\n <div\r\n v-for=\"w in weeks\"\r\n :key=\"w\"\r\n class=\"gantt-cell\"\r\n :class=\"{ 'month-boundary': isMonthBoundary(w) }\"\r\n >\r\n <span class=\"sch\">已{{ monthlyScheduled(w) }}</span>\r\n <span class=\"rem\">余{{ Math.max(0, weeklyCapacity - monthlyScheduled(w)) }}</span>\r\n </div>\r\n </div>\r\n </div>\r\n </div>\r\n\r\n <!-- 课程甘特条 -->\r\n <div class=\"gantt-courses\">\r\n <div v-for=\"course in displayCourses\" :key=\"course.id\" class=\"gantt-course\">\r\n <div class=\"gantt-label-col\">\r\n <div class=\"course-tag\" :class=\"course.continuous ? 'tag-continuous' : 'tag-normal'\">\r\n <span class=\"course-name\">{{ course.name }}{{ course.short }}</span>\r\n <span class=\"course-hours\">\r\n 已排{{ courseStats(course).scheduled }}\r\n <template v-if=\"courseStats(course).remaining > 0\">+{{ courseStats(course).remaining }}</template>\r\n </span>\r\n </div>\r\n </div>\r\n <div class=\"gantt-body\">\r\n <div class=\"gantt-row bar-row\">\r\n <div\r\n v-for=\"w in weeks\"\r\n :key=\"w\"\r\n class=\"gantt-cell bar-cell\"\r\n :class=\"{\r\n 'month-boundary': isMonthBoundary(w),\r\n 'bar-active': w >= course.actualStart && w <= course.endWeek,\r\n 'bar-continuous': course.continuous,\r\n 'bar-normal': !course.continuous\r\n }\"\r\n >\r\n <span v-if=\"w >= course.actualStart && w <= course.endWeek\" class=\"bar-hours\">\r\n {{ courseWeekHours(course)[w] || '' }}\r\n </span>\r\n </div>\r\n </div>\r\n </div>\r\n </div>\r\n </div>\r\n\r\n <!-- 底部:本月可安排正课总学时(月刻度) -->\r\n <div class=\"gantt-foot\">\r\n <div class=\"gantt-label-col\">\r\n <div class=\"gantt-label\">本月正课总学时</div>\r\n </div>\r\n <div class=\"gantt-body\">\r\n <div class=\"gantt-row\">\r\n <div\r\n v-for=\"w in weeks\"\r\n :key=\"w\"\r\n class=\"gantt-cell month-cell\"\r\n :class=\"{ 'month-boundary': isMonthBoundary(w) }\"\r\n >\r\n <span v-if=\"bottomCells[w] && isMonthEndWeek(w)\" class=\"month-total\">\r\n 第{{ bottomCells[w].no }}月:可排{{ bottomCells[w].total }}(已排{{ bottomCells[w].scheduled }} + 余{{ bottomCells[w].remaining }}\r\n </span>\r\n </div>\r\n </div>\r\n </div>\r\n </div>\r\n </div>\r\n </div>\r\n\r\n <!-- ==================== 底部操作 ==================== -->\r\n <div slot=\"footer\">\r\n <div class=\"peidang-footer\">\r\n <el-button @click=\"dialogVisible = false\">取消</el-button>\r\n <el-button type=\"primary\" @click=\"handleConfirm\">确定</el-button>\r\n </div>\r\n </div>\r\n </el-dialog>\r\n</template>\r\n\r\n<script>\r\nexport default {\r\n name: 'PeidangEditDialog',\r\n props: {\r\n visible: { type: Boolean, default: false },\r\n /** 学年学期名称 */\r\n semesterName: { type: String, default: '2017-2018学年第一学期' },\r\n /** 班次标签(如 教学五系2016级专业0113班次0417 */\r\n classLabel: { type: String, default: '教学五系2016级专业0113班次0417' }\r\n },\r\n data() {\r\n return {\r\n // ==================== 时间轴参数 ====================\r\n /** 该班次开学起始周次 */\r\n startWeek: 8,\r\n /** 该班次学期结束周次 */\r\n endWeek: 32,\r\n /** 该班次每周可安排的正课学时时数(去除不能排课学时) */\r\n weeklyCapacity: 40,\r\n /** 月刻度:每 4 周为一月(8-11 第1月,12-15 第2月...),虚线分隔 */\r\n monthBreaks: [12, 16, 20, 24, 28, 32],\r\n\r\n // ==================== 配档课程数据 ====================\r\n courses: [\r\n // ---- 非连排课(按周学时安排,蓝色,每门独立一组) ----\r\n { id: 'p1', name: '课程科目001', short: '政治', planStart: 8, actualStart: 8, endWeek: 23, continuous: false, priority: 1, weeklyHours: 4, hours: 60, scheduleTime: true, group: '组1' },\r\n { id: 'p2', name: '课程科目002', short: '军事', planStart: 8, actualStart: 8, endWeek: 20, continuous: false, priority: 2, weeklyHours: 4, hours: 48, scheduleTime: true, group: '组2' },\r\n { id: 'p3', name: '课程科目003', short: '战术', planStart: 8, actualStart: 10, endWeek: 21, continuous: false, priority: 3, weeklyHours: 4, hours: 44, scheduleTime: true, group: '组3' },\r\n { id: 'p4', name: '课程科目004', short: '指挥', planStart: 8, actualStart: 12, endWeek: 22, continuous: false, priority: 4, weeklyHours: 4, hours: 40, scheduleTime: true, group: '组4' },\r\n // ---- 连排课(单科独进,红色,共为一组) ----\r\n { id: 'p5', name: '课程科目005', short: '综合演练', planStart: 8, actualStart: 8, endWeek: 13, continuous: true, priority: 5, weeklyHours: 20, hours: 100, scheduleTime: true, group: '连排组' },\r\n { id: 'p6', name: '课程科目006', short: '野营拉练', planStart: 14, actualStart: 14, endWeek: 16, continuous: true, priority: 6, weeklyHours: 24, hours: 48, scheduleTime: true, group: '连排组' }\r\n ],\r\n\r\n // ==================== 表格选中与属性设置 ====================\r\n currentCourse: null,\r\n propForm: {\r\n weeklyHours: 4,\r\n startWeek: 8,\r\n endWeek: 16,\r\n continuous: false,\r\n priority: 1,\r\n group: ''\r\n }\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 /** 周序列:8 ~ 32 */\r\n weeks() {\r\n const arr = []\r\n for (let w = this.startWeek; w <= this.endWeek; w++) arr.push(w)\r\n return arr\r\n },\r\n /** 月份信息:每月包含的周次与可安排正课学时 */\r\n months() {\r\n const list = []\r\n let mNo = 1\r\n let cur = this.startWeek\r\n while (cur <= this.endWeek) {\r\n const next = this.monthBreaks.find((b) => b > cur)\r\n const mEnd = Math.min((next === undefined ? this.endWeek + 1 : next) - 1, this.endWeek)\r\n list.push({ no: mNo, start: cur, end: mEnd, total: (mEnd - cur + 1) * this.weeklyCapacity })\r\n cur = mEnd + 1\r\n mNo++\r\n }\r\n return list\r\n },\r\n /** 底部每月汇总行数据:week -> 该月信息(仅月首格展示文字) */\r\n bottomCells() {\r\n const map = {}\r\n this.weeks.forEach((w) => {\r\n const m = this.months.find((item) => w >= item.start && w <= item.end)\r\n if (!m) return\r\n map[w] = {\r\n no: m.no,\r\n total: m.total,\r\n scheduled: this.monthlyScheduled(w),\r\n remaining: m.total - this.monthlyScheduled(w)\r\n }\r\n })\r\n return map\r\n },\r\n /** 表格展示顺序:非连排课在前,连排课在后;组内按实际起始周、优先序数排序 */\r\n displayCourses() {\r\n return [...this.courses].sort((a, b) => {\r\n if (a.continuous !== b.continuous) return a.continuous ? 1 : -1\r\n if (a.actualStart !== b.actualStart) return a.actualStart - b.actualStart\r\n return a.priority - b.priority\r\n })\r\n }\r\n },\r\n watch: {\r\n visible(val) {\r\n if (!val) return\r\n this.$nextTick(() => {\r\n if (this.$refs.tableRef) {\r\n this.$refs.tableRef.setCurrentRow(this.displayCourses[0])\r\n }\r\n this.currentCourse = this.displayCourses[0] || null\r\n this.syncPropForm()\r\n })\r\n }\r\n },\r\n methods: {\r\n /** 是否为月边界列(左侧画虚线) */\r\n isMonthBoundary(week) {\r\n return this.monthBreaks.includes(week)\r\n },\r\n /** 是否为某月的结束周(仅月结束列展示文字) */\r\n isMonthEndWeek(week) {\r\n return this.months.some((m) => m.end === week)\r\n },\r\n\r\n /** 某周所有课程已安排学时之和 */\r\n monthlyScheduled(week) {\r\n return this.courses.reduce((sum, c) => {\r\n const map = this.courseWeekHours(c)\r\n return sum + (map[week] !== undefined ? map[week] : 0)\r\n }, 0)\r\n },\r\n\r\n /** 每门课程按周分布的安排学时 */\r\n courseWeekHours(course) {\r\n const map = {}\r\n let remaining = course.hours\r\n let w = course.actualStart\r\n while (remaining > 0 && w <= course.endWeek) {\r\n const h = Math.min(course.weeklyHours, remaining)\r\n map[w] = h\r\n remaining -= h\r\n w++\r\n }\r\n return map\r\n },\r\n\r\n /** 课程计算属性:已排学时 / 未排学时 */\r\n courseStats(course) {\r\n const map = this.courseWeekHours(course)\r\n const scheduled = Object.keys(map).reduce((sum, k) => sum + map[k], 0)\r\n return { scheduled, remaining: Math.max(0, course.hours - scheduled) }\r\n },\r\n\r\n handleCurrentChange(row) {\r\n this.currentCourse = row\r\n this.syncPropForm()\r\n },\r\n\r\n /** 属性设置表单同步(右侧) */\r\n syncPropForm() {\r\n if (!this.currentCourse) return\r\n this.propForm.weeklyHours = this.currentCourse.weeklyHours\r\n this.propForm.startWeek = this.currentCourse.actualStart\r\n this.propForm.endWeek = this.currentCourse.endWeek\r\n this.propForm.continuous = this.currentCourse.continuous\r\n this.propForm.priority = this.currentCourse.priority\r\n this.propForm.group = this.currentCourse.group\r\n },\r\n\r\n /** 属性设置保存:应用所选课程的配档属性 */\r\n handleApplyProp() {\r\n if (!this.currentCourse) {\r\n this.$message.warning('请先在表格中选择一门课程')\r\n return\r\n }\r\n const row = this.currentCourse\r\n row.weeklyHours = this.propForm.weeklyHours\r\n row.actualStart = this.propForm.startWeek\r\n row.endWeek = this.propForm.endWeek\r\n row.continuous = this.propForm.continuous\r\n row.priority = this.propForm.priority\r\n row.group = this.propForm.group\r\n this.$message.success('配档属性已应用(前端演示)')\r\n },\r\n\r\n /** 优先序数上移:优先序数减 1 */\r\n handlePriorityUp() {\r\n if (!this.currentCourse) {\r\n this.$message.warning('请先在表格中选择一门课程')\r\n return\r\n }\r\n if (this.currentCourse.priority <= 1) {\r\n this.$message.info('已是最高优先序数')\r\n return\r\n }\r\n this.currentCourse.priority -= 1\r\n this.syncPropForm()\r\n },\r\n\r\n /** 优先序数下移:优先序数加 1 */\r\n handlePriorityDown() {\r\n if (!this.currentCourse) {\r\n this.$message.warning('请先在表格中选择一门课程')\r\n return\r\n }\r\n this.currentCourse.priority += 1\r\n this.syncPropForm()\r\n },\r\n\r\n // ==================== 底部操作 ====================\r\n handleConfirm() {\r\n this.$emit('confirm')\r\n this.dialogVisible = false\r\n }\r\n }\r\n}\r\n</script>\r\n\r\n<style scoped lang=\"scss\">\r\n.peidang-dialog {\r\n // ========== 自定义标题栏 ==========\r\n ::v-deep .el-dialog__header {\r\n margin: 0;\r\n padding: 0;\r\n }\r\n\r\n .peidang-titlebar {\r\n display: flex;\r\n align-items: center;\r\n gap: 8px;\r\n height: 40px;\r\n padding: 0 14px;\r\n background: linear-gradient(90deg, #0a246a 0%, #a6caf0 100%);\r\n color: #fff;\r\n\r\n .title-icon {\r\n font-size: 18px;\r\n color: #fff;\r\n }\r\n\r\n .title-text {\r\n font-size: 14px;\r\n font-weight: 600;\r\n color: #fff;\r\n letter-spacing: 0.5px;\r\n }\r\n }\r\n\r\n ::v-deep .el-dialog__body {\r\n padding: 12px;\r\n }\r\n\r\n ::v-deep .el-dialog__footer {\r\n padding: 8px 12px;\r\n border-top: 1px solid #ebeef5;\r\n }\r\n\r\n .peidang-footer {\r\n display: flex;\r\n justify-content: flex-end;\r\n gap: 8px;\r\n }\r\n}\r\n\r\n.peidang-body {\r\n display: flex;\r\n flex-direction: column;\r\n gap: 10px;\r\n\r\n // ========== 上半部分:左右分栏 ==========\r\n .upper {\r\n display: flex;\r\n gap: 10px;\r\n\r\n // 左侧 75%:表格\r\n .table-area {\r\n flex: 3;\r\n min-width: 0;\r\n border: 1px solid #ebeef5;\r\n border-radius: 4px;\r\n padding: 6px;\r\n overflow: hidden;\r\n\r\n .peidang-table {\r\n width: 100%;\r\n }\r\n }\r\n\r\n // 右侧 25%:属性设置\r\n .prop-area {\r\n flex: 1;\r\n min-width: 240px;\r\n border: 1px solid #ebeef5;\r\n border-radius: 4px;\r\n padding: 10px 12px;\r\n\r\n .prop-title {\r\n font-size: 14px;\r\n font-weight: 600;\r\n color: #303133;\r\n margin-bottom: 8px;\r\n padding-bottom: 6px;\r\n border-bottom: 1px solid #ebeef5;\r\n }\r\n\r\n .prop-form {\r\n .priority-field {\r\n display: flex;\r\n align-items: center;\r\n gap: 4px;\r\n width: 100%;\r\n\r\n .el-button {\r\n flex-shrink: 0;\r\n margin-left: 0;\r\n }\r\n }\r\n }\r\n\r\n .apply-btn {\r\n width: 100%;\r\n margin-top: 4px;\r\n }\r\n }\r\n }\r\n\r\n // ========== 下半部分:配档显示区域 ==========\r\n .gantt-area {\r\n border: 1px solid #ebeef5;\r\n border-radius: 4px;\r\n padding: 8px;\r\n overflow: auto;\r\n max-height: 320px;\r\n\r\n .gantt-head,\r\n .gantt-course,\r\n .gantt-foot {\r\n display: flex;\r\n align-items: stretch;\r\n min-width: 860px;\r\n }\r\n\r\n .gantt-label-col {\r\n flex-shrink: 0;\r\n width: 210px;\r\n display: flex;\r\n align-items: center;\r\n\r\n .gantt-label {\r\n font-size: 12px;\r\n color: #606266;\r\n font-weight: 600;\r\n white-space: nowrap;\r\n }\r\n }\r\n\r\n .gantt-body {\r\n flex: 1;\r\n display: flex;\r\n flex-direction: column;\r\n }\r\n\r\n .gantt-row {\r\n display: flex;\r\n\r\n .gantt-cell {\r\n flex: 1;\r\n min-width: 34px;\r\n height: 24px;\r\n line-height: 24px;\r\n text-align: center;\r\n font-size: 11px;\r\n color: #303133;\r\n border-right: 1px solid #ebeef5;\r\n border-bottom: 1px solid #ebeef5;\r\n overflow: hidden;\r\n white-space: nowrap;\r\n text-overflow: ellipsis;\r\n }\r\n\r\n // 周刻度:顶部红色竖线\r\n .week-cell {\r\n font-weight: 600;\r\n color: #f56c6c;\r\n border-top: 2px solid #f56c6c;\r\n background: #fff5f5;\r\n }\r\n\r\n .info-row .gantt-cell {\r\n height: 20px;\r\n line-height: 20px;\r\n\r\n .sch {\r\n color: #1e6fff;\r\n }\r\n\r\n .rem {\r\n color: #e6a23c;\r\n margin-left: 2px;\r\n }\r\n }\r\n\r\n // 月刻度虚线\r\n .month-boundary {\r\n border-left: 1px dashed #909399;\r\n }\r\n\r\n // 课程条\r\n .bar-cell {\r\n height: 26px;\r\n position: relative;\r\n\r\n .bar-hours {\r\n font-size: 11px;\r\n font-weight: 600;\r\n }\r\n\r\n &.bar-active {\r\n &.bar-normal {\r\n background: #409eff;\r\n color: #fff;\r\n\r\n .bar-hours {\r\n color: #fff;\r\n }\r\n }\r\n\r\n &.bar-continuous {\r\n background: #f56c6c;\r\n color: #fff;\r\n\r\n .bar-hours {\r\n color: #fff;\r\n }\r\n }\r\n }\r\n }\r\n\r\n .month-cell {\r\n height: 22px;\r\n line-height: 22px;\r\n\r\n .month-total {\r\n font-size: 11px;\r\n color: #606266;\r\n font-weight: 600;\r\n background: #f4f4f5;\r\n border: 1px solid #dcdfe6;\r\n border-radius: 2px;\r\n padding: 0 4px;\r\n white-space: nowrap;\r\n }\r\n }\r\n }\r\n\r\n .gantt-course {\r\n .gantt-label-col {\r\n align-items: center;\r\n\r\n .course-tag {\r\n display: flex;\r\n flex-direction: column;\r\n justify-content: center;\r\n gap: 1px;\r\n padding: 2px 6px;\r\n border-radius: 3px;\r\n font-size: 11px;\r\n\r\n &.tag-normal {\r\n background: #ecf5ff;\r\n border: 1px solid #a0cfff;\r\n color: #337ecc;\r\n }\r\n\r\n &.tag-continuous {\r\n background: #fef0f0;\r\n border: 1px solid #fbc4c4;\r\n color: #d63031;\r\n }\r\n\r\n .course-name {\r\n font-weight: 600;\r\n white-space: nowrap;\r\n }\r\n\r\n .course-hours {\r\n font-size: 10px;\r\n white-space: nowrap;\r\n }\r\n }\r\n }\r\n }\r\n\r\n .gantt-foot {\r\n .gantt-label-col {\r\n align-items: center;\r\n }\r\n }\r\n }\r\n}\r\n</style>\r\n"],"mappings":"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","ignoreList":[]}]}