Files
education/frontend/node_modules/.cache/vue-loader/aebc640da0342ab11ec289bd3e93673b.json
T

1 line
46 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\\vue-loader\\lib\\index.js??vue-loader-options!C:\\Users\\Admin\\Desktop\\education\\frontend\\src\\views\\teachOffice\\shiftSemester\\index.vue?vue&type=script&lang=js","dependencies":[{"path":"C:\\Users\\Admin\\Desktop\\education\\frontend\\src\\views\\teachOffice\\shiftSemester\\index.vue","mtime":1787648748789},{"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:Ly8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KDQppbXBvcnQgQ2xhc3NTZW1lc3RlckRldGFpbERpYWxvZyBmcm9tICcuL0NsYXNzU2VtZXN0ZXJEZXRhaWxEaWFsb2cudnVlJw0KaW1wb3J0IENsYXNzQ2FsZW5kYXJEaWFsb2cgZnJvbSAnLi9DbGFzc0NhbGVuZGFyRGlhbG9nLnZ1ZScNCmltcG9ydCB7IGxpc3RTZW1lc3RlciwgYWxsU2VtZXN0ZXIsIGFkZFNlbWVzdGVyLCB1cGRhdGVTZW1lc3RlciwgZGVsU2VtZXN0ZXIsIGJhdGNoRGVsZXRlU2VtZXN0ZXIsIGJhdGNoVXBkYXRlRGF0ZVJhbmdlLCBiYXRjaFVwZGF0ZUp4cndiaCwgYmF0Y2hBZGRGcm9tRWxlY3RpdmUgfSBmcm9tICdAL2FwaS9zdHVkZW50UmVjb3Jkcy9zZW1lc3RlcicNCmltcG9ydCB7IGxpc3RBbGxTZW1lc3RlciB9IGZyb20gJ0AvYXBpL3RlYWNoQnVzaW5lc3Mvc2VtZXN0ZXInDQppbXBvcnQgeyBsaXN0VGVhY2hpbmdUYXNrIH0gZnJvbSAnQC9hcGkvdGVhY2hCdXNpbmVzcy90ZWFjaGluZ1Rhc2snDQoNCmV4cG9ydCBkZWZhdWx0IHsNCiAgbmFtZTogJ1NoaWZ0U2VtZXN0ZXInLA0KICBjb21wb25lbnRzOiB7DQogICAgQ2xhc3NTZW1lc3RlckRldGFpbERpYWxvZywNCiAgICBDbGFzc0NhbGVuZGFyRGlhbG9nDQogIH0sDQogIGRhdGEoKSB7DQogICAgcmV0dXJuIHsNCiAgICAgIGxvYWRpbmc6IGZhbHNlLA0KICAgICAgc2F2aW5nOiBmYWxzZSwNCg0KICAgICAgLy8gPT09PT09PT09PT09PT09PT09PT0g5p+l6K+i5p2h5Lu2ID09PT09PT09PT09PT09PT09PT09DQogICAgICBzZWFyY2hGb3JtOiB7IHh5ZGJoOiAnJyB9LA0KICAgICAgZmlsdGVyWWVhcjogdW5kZWZpbmVkLA0KICAgICAgeWVhckZpbHRlck9wdGlvbnM6IFtdLA0KDQogICAgICAvLyA9PT09PT09PT09PT09PT09PT09PSDliJfooajkuI7liIbpobUgPT09PT09PT09PT09PT09PT09PT0NCiAgICAgIHRhYmxlRGF0YTogW10sDQogICAgICBzZWxlY3Rpb246IFtdLA0KICAgICAgY3VycmVudFJvdzogbnVsbCwNCiAgICAgIHBhZ2VOdW06IDEsDQogICAgICBwYWdlU2l6ZTogMTAsDQogICAgICB0b3RhbDogMCwNCg0KICAgICAgLy8gPT09PT09PT09PT09PT09PT09PT0g5LiL5ouJ5pWw5o2uID09PT09PT09PT09PT09PT09PT09DQogICAgICAvKiog5bm05bqm5LiL5ouJ77yI5p2l6IeqIC9zZW1lc3Rlci9hbGzvvIkgKi8NCiAgICAgIHllYXJPcHRpb25zOiBbXSwNCiAgICAgIC8qKiDmlZnlrabku7vliqHkuIvmi4nvvIh7IGJoLCByd21jIH3vvIkgKi8NCiAgICAgIHRhc2tPcHRpb25zOiBbXSwNCiAgICAgIC8qKiDlhajpg6jnj63mrKHlrabmnJ/vvIjnlKjkuo7nj63ljoblpI3liLbnm67moIfpgInmi6nvvIkgKi8NCiAgICAgIHNlbWVzdGVyT3B0aW9uczogW10sDQoNCiAgICAgIC8vID09PT09PT09PT09PT09PT09PT09IOePreasoeWtpuacn+aWsOWini/nvJbovpEgPT09PT09PT09PT09PT09PT09PT0NCiAgICAgIGRldGFpbFZpc2libGU6IGZhbHNlLA0KICAgICAgZGV0YWlsTW9kZTogJ2FkZCcsDQogICAgICBkZXRhaWxTZW1lc3RlcjogbnVsbCwNCiAgICAgIGRldGFpbFRlYW1JbmZvOiBudWxsLA0KDQogICAgICAvLyA9PT09PT09PT09PT09PT09PT09PSDnj63ljobnrqHnkIYgPT09PT09PT09PT09PT09PT09PT0NCiAgICAgIGNhbGVuZGFyVmlzaWJsZTogZmFsc2UsDQogICAgICBjYWxlbmRhclNlbWVzdGVyOiBudWxsLA0KDQogICAgICAvLyA9PT09PT09PT09PT09PT09PT09PSDmibnph4/liJvlu7rnj63mrKHlrabmnJ8gPT09PT09PT09PT09PT09PT09PT0NCiAgICAgIGJhdGNoQWRkVmlzaWJsZTogZmFsc2UsDQogICAgICBiYXRjaEFkZEZvcm06IHsgbmQ6IHVuZGVmaW5lZCwgeHFkYzogJycsIHN0YXJ0VGltZTogJycsIGVuZFRpbWU6ICcnIH0sDQogICAgICBiYXRjaEFkZFJ1bGVzOiB7DQogICAgICAgIG5kOiBbeyByZXF1aXJlZDogdHJ1ZSwgbWVzc2FnZTogJ+ivt+mAieaLqeW5tOW6picsIHRyaWdnZXI6ICdjaGFuZ2UnIH1dLA0KICAgICAgICB4cWRjOiBbeyByZXF1aXJlZDogdHJ1ZSwgbWVzc2FnZTogJ+ivt+mAieaLqeWtpuacnycsIHRyaWdnZXI6ICdjaGFuZ2UnIH1dLA0KICAgICAgICBzdGFydFRpbWU6IFt7IHJlcXVpcmVkOiB0cnVlLCBtZXNzYWdlOiAn6K+36YCJ5oup5byA5aeL5pel5pyfJywgdHJpZ2dlcjogJ2NoYW5nZScgfV0sDQogICAgICAgIGVuZFRpbWU6IFt7IHJlcXVpcmVkOiB0cnVlLCBtZXNzYWdlOiAn6K+36YCJ5oup57uT5p2f5pel5pyfJywgdHJpZ2dlcjogJ2NoYW5nZScgfV0NCiAgICAgIH0sDQoNCiAgICAgIC8vID09PT09PT09PT09PT09PT09PT09IOW/q+mAn+iuvuWumuWtpuacn+aXpeacnyA9PT09PT09PT09PT09PT09PT09PQ0KICAgICAgZGF0ZVJhbmdlVmlzaWJsZTogZmFsc2UsDQogICAgICBkYXRlUmFuZ2VGb3JtOiB7IGt4cnE6ICcnLCBqc3JxOiAnJyB9LA0KICAgICAgZGF0ZVJhbmdlUnVsZXM6IHsNCiAgICAgICAga3hycTogW3sgcmVxdWlyZWQ6IHRydWUsIG1lc3NhZ2U6ICfor7fpgInmi6nlvIDlrabml6XmnJ8nLCB0cmlnZ2VyOiAnY2hhbmdlJyB9XSwNCiAgICAgICAganNycTogW3sgcmVxdWlyZWQ6IHRydWUsIG1lc3NhZ2U6ICfor7fpgInmi6nnu5PmnZ/ml6XmnJ8nLCB0cmlnZ2VyOiAnY2hhbmdlJyB9XQ0KICAgICAgfSwNCg0KICAgICAgLy8gPT09PT09PT09PT09PT09PT09PT0g5om56YeP6K6+572u5pWZ5a2m5Lu75YqhID09PT09PT09PT09PT09PT09PT09DQogICAgICBqeHJ3VmlzaWJsZTogZmFsc2UsDQogICAgICBqeHJ3Rm9ybTogeyBqeHJ3Ymg6IHVuZGVmaW5lZCB9LA0KICAgICAganhyd1J1bGVzOiB7DQogICAgICAgIGp4cndiaDogW3sgcmVxdWlyZWQ6IHRydWUsIG1lc3NhZ2U6ICfor7fpgInmi6nmlZnlrabku7vliqEnLCB0cmlnZ2VyOiAnY2hhbmdlJyB9XQ0KICAgICAgfQ0KICAgIH0NCiAgfSwNCiAgY29tcHV0ZWQ6IHsNCiAgICAvKiog5pys5Zyw5oyJ5bm05bqm6L+H5ruk77yI5ZCO56uvIC9zZW1lc3Rlci9saXN0IOS7heaUr+aMgSB4eWRiaCDmqKHns4rnrZvpgInvvIkgKi8NCiAgICBkaXNwbGF5RGF0YSgpIHsNCiAgICAgIGlmICghdGhpcy5maWx0ZXJZZWFyKSByZXR1cm4gdGhpcy50YWJsZURhdGENCiAgICAgIHJldHVybiB0aGlzLnRhYmxlRGF0YS5maWx0ZXIoaXRlbSA9PiBTdHJpbmcoaXRlbS5uZCkgPT09IFN0cmluZyh0aGlzLmZpbHRlclllYXIpKQ0KICAgIH0NCiAgfSwNCiAgbW91bnRlZCgpIHsNCiAgICB0aGlzLmxvYWRZZWFyT3B0aW9ucygpDQogICAgdGhpcy5sb2FkVGFza09wdGlvbnMoKQ0KICAgIHRoaXMubG9hZFNlbWVzdGVyT3B0aW9ucygpDQogICAgdGhpcy5sb2FkTGlzdCgpDQogIH0sDQogIG1ldGhvZHM6IHsNCiAgICAvKiA9PT09PT09PT09PT09PT09PT09PSDmoLzlvI/ljJYgPT09PT09PT09PT09PT09PT09PT0gKi8NCiAgICBmbXREYXRlKHZhbCkgew0KICAgICAgaWYgKCF2YWwpIHJldHVybiAnLScNCiAgICAgIHJldHVybiBTdHJpbmcodmFsKS5zbGljZSgwLCAxMCkNCiAgICB9LA0KICAgIHhxZGNMYWJlbCh2YWwpIHsNCiAgICAgIGlmICh2YWwgPT09IDEgfHwgdmFsID09PSAnMScpIHJldHVybiAn56ysMeWtpuacnycNCiAgICAgIGlmICh2YWwgPT09IDIgfHwgdmFsID09PSAnMicpIHJldHVybiAn56ysMuWtpuacnycNCiAgICAgIGlmICh2YWwgPT09IDMgfHwgdmFsID09PSAnMycpIHJldHVybiAn56ysM+WtpuacnycNCiAgICAgIHJldHVybiB2YWwgIT09IHVuZGVmaW5lZCAmJiB2YWwgIT09IG51bGwgJiYgdmFsICE9PSAnJyA/IGDnrKwke3ZhbH3lrabmnJ9gIDogJy0nDQogICAgfSwNCiAgICAvKiog5pWZ5a2m5Lu75Yqh57yW5Y+3IOKGkiDlkI3np7AgKi8NCiAgICB0YXNrTmFtZShiaCkgew0KICAgICAgaWYgKCFiaCkgcmV0dXJuICctJw0KICAgICAgY29uc3Qgb3B0ID0gdGhpcy50YXNrT3B0aW9ucy5maW5kKG8gPT4gby5iaCA9PT0gYmgpDQogICAgICByZXR1cm4gb3B0ID8gb3B0LnJ3bWMgOiBiaA0KICAgIH0sDQogICAgY2xlYW5QYXlsb2FkKG9iaikgew0KICAgICAgY29uc3QgcGF5bG9hZCA9IHt9DQogICAgICBPYmplY3Qua2V5cyhvYmopLmZvckVhY2goa2V5ID0+IHsNCiAgICAgICAgY29uc3QgdmFsdWUgPSBvYmpba2V5XQ0KICAgICAgICBpZiAodmFsdWUgIT09ICcnICYmIHZhbHVlICE9PSBudWxsICYmIHZhbHVlICE9PSB1bmRlZmluZWQpIHsNCiAgICAgICAgICBwYXlsb2FkW2tleV0gPSB2YWx1ZQ0KICAgICAgICB9DQogICAgICB9KQ0KICAgICAgcmV0dXJuIHBheWxvYWQNCiAgICB9LA0KDQogICAgLyogPT09PT09PT09PT09PT09PT09PT0g5LiL5ouJ5pWw5o2u5Yqg6L29ID09PT09PT09PT09PT09PT09PT09ICovDQogICAgbG9hZFllYXJPcHRpb25zKCkgew0KICAgICAgbGlzdEFsbFNlbWVzdGVyKCkudGhlbihyZXMgPT4gew0KICAgICAgICBjb25zdCBsaXN0ID0gKHJlcyAmJiByZXMuZGF0YSkgfHwgW10NCiAgICAgICAgY29uc3QgeWVhcnMgPSBsaXN0Lm1hcCh4ID0+IHgubmQpLmZpbHRlcih2ID0+IHYgIT09IHVuZGVmaW5lZCAmJiB2ICE9PSBudWxsICYmIHYgIT09ICcnKQ0KICAgICAgICB0aGlzLnllYXJPcHRpb25zID0gWy4uLm5ldyBTZXQoeWVhcnMpXS5zb3J0KChhLCBiKSA9PiBOdW1iZXIoYSkgLSBOdW1iZXIoYikpDQogICAgICB9KS5jYXRjaCgoKSA9PiB7DQogICAgICAgIHRoaXMueWVhck9wdGlvbnMgPSBbXQ0KICAgICAgfSkNCiAgICB9LA0KICAgIGxvYWRUYXNrT3B0aW9ucygpIHsNCiAgICAgIGxpc3RUZWFjaGluZ1Rhc2soeyBwYWdlTnVtOiAxLCBwYWdlU2l6ZTogMTAwMCB9KS50aGVuKHJlcyA9PiB7DQogICAgICAgIGNvbnN0IGxpc3QgPSAocmVzICYmIHJlcy5kYXRhICYmIHJlcy5kYXRhLnJlY29yZHMpIHx8IFtdDQogICAgICAgIHRoaXMudGFza09wdGlvbnMgPSBsaXN0LmZpbHRlcihvID0+IG8uYmgpDQogICAgICB9KS5jYXRjaCgoKSA9PiB7DQogICAgICAgIHRoaXMudGFza09wdGlvbnMgPSBbXQ0KICAgICAgfSkNCiAgICB9LA0KICAgIGxvYWRTZW1lc3Rlck9wdGlvbnMoKSB7DQogICAgICBhbGxTZW1lc3RlcigpLnRoZW4ocmVzID0+IHsNCiAgICAgICAgdGhpcy5zZW1lc3Rlck9wdGlvbnMgPSAocmVzICYmIHJlcy5kYXRhKSB8fCBbXQ0KICAgICAgfSkuY2F0Y2goKCkgPT4gew0KICAgICAgICB0aGlzLnNlbWVzdGVyT3B0aW9ucyA9IFtdDQogICAgICB9KQ0KICAgIH0sDQoNCiAgICAvKiA9PT09PT09PT09PT09PT09PT09PSDliJfooajliqDovb0gPT09PT09PT09PT09PT09PT09PT0gKi8NCiAgICBsb2FkTGlzdCgpIHsNCiAgICAgIHRoaXMubG9hZGluZyA9IHRydWUNCiAgICAgIGNvbnN0IHF1ZXJ5ID0gdGhpcy5jbGVhblBheWxvYWQoew0KICAgICAgICBwYWdlTnVtOiB0aGlzLnBhZ2VOdW0sDQogICAgICAgIHBhZ2VTaXplOiB0aGlzLnBhZ2VTaXplLA0KICAgICAgICB4eWRiaDogdGhpcy5zZWFyY2hGb3JtLnh5ZGJoDQogICAgICB9KQ0KICAgICAgbGlzdFNlbWVzdGVyKHF1ZXJ5KS50aGVuKHJlcyA9PiB7DQogICAgICAgIGNvbnN0IGRhdGEgPSAocmVzICYmIHJlcy5kYXRhKSB8fCB7fQ0KICAgICAgICB0aGlzLnRhYmxlRGF0YSA9IGRhdGEucmVjb3JkcyB8fCBbXQ0KICAgICAgICB0aGlzLnRvdGFsID0gZGF0YS50b3RhbCB8fCAwDQogICAgICAgIHRoaXMuYnVpbGRZZWFyRmlsdGVyT3B0aW9ucygpDQogICAgICAgIHRoaXMubG9hZGluZyA9IGZhbHNlDQogICAgICB9KS5jYXRjaCgoKSA9PiB7DQogICAgICAgIHRoaXMudGFibGVEYXRhID0gW10NCiAgICAgICAgdGhpcy50b3RhbCA9IDANCiAgICAgICAgdGhpcy5sb2FkaW5nID0gZmFsc2UNCiAgICAgIH0pDQogICAgfSwNCiAgICAvKiog5pys5Zyw5bm05bqm6L+H5ruk5LiL5ouJ77yI5LuO5b2T5YmN5pWw5o2u5Yqo5oCB55Sf5oiQ77yM6YG/5YWN56Gs57yW56CB77yJICovDQogICAgYnVpbGRZZWFyRmlsdGVyT3B0aW9ucygpIHsNCiAgICAgIGNvbnN0IHllYXJzID0gdGhpcy50YWJsZURhdGEubWFwKHIgPT4gci5uZCkuZmlsdGVyKHYgPT4gdiAhPT0gdW5kZWZpbmVkICYmIHYgIT09IG51bGwgJiYgdiAhPT0gJycpDQogICAgICB0aGlzLnllYXJGaWx0ZXJPcHRpb25zID0gWy4uLm5ldyBTZXQoeWVhcnMpXS5zb3J0KChhLCBiKSA9PiBOdW1iZXIoYSkgLSBOdW1iZXIoYikpDQogICAgfSwNCiAgICBoYW5kbGVZZWFyQ2hhbmdlKCkgew0KICAgICAgdGhpcy4kbmV4dFRpY2soKCkgPT4gew0KICAgICAgICBpZiAodGhpcy4kcmVmcy50YWJsZVJlZikgdGhpcy4kcmVmcy50YWJsZVJlZi5zZXRDdXJyZW50Um93KG51bGwpDQogICAgICAgIHRoaXMuY3VycmVudFJvdyA9IG51bGwNCiAgICAgIH0pDQogICAgfSwNCiAgICBoYW5kbGVTaXplQ2hhbmdlKHNpemUpIHsNCiAgICAgIHRoaXMucGFnZVNpemUgPSBzaXplDQogICAgICB0aGlzLmxvYWRMaXN0KCkNCiAgICB9LA0KICAgIGhhbmRsZVBhZ2VDaGFuZ2UocGFnZSkgew0KICAgICAgdGhpcy5wYWdlTnVtID0gcGFnZQ0KICAgICAgdGhpcy5sb2FkTGlzdCgpDQogICAgfSwNCiAgICBoYW5kbGVTZWxlY3Rpb25DaGFuZ2Uocm93cykgew0KICAgICAgdGhpcy5zZWxlY3Rpb24gPSByb3dzDQogICAgfSwNCiAgICBoYW5kbGVDdXJyZW50Q2hhbmdlKHJvdykgew0KICAgICAgdGhpcy5jdXJyZW50Um93ID0gcm93DQogICAgfSwNCg0KICAgIC8qID09PT09PT09PT09PT09PT09PT09IOafpeivoiAvIOmHjee9riA9PT09PT09PT09PT09PT09PT09PSAqLw0KICAgIGhhbmRsZVF1ZXJ5KCkgew0KICAgICAgdGhpcy5wYWdlTnVtID0gMQ0KICAgICAgdGhpcy5sb2FkTGlzdCgpDQogICAgfSwNCiAgICBoYW5kbGVSZXNldCgpIHsNCiAgICAgIHRoaXMuc2VhcmNoRm9ybS54eWRiaCA9ICcnDQogICAgICB0aGlzLmZpbHRlclllYXIgPSB1bmRlZmluZWQNCiAgICAgIHRoaXMucGFnZU51bSA9IDENCiAgICAgIHRoaXMubG9hZExpc3QoKQ0KICAgIH0sDQoNCiAgICAvKiA9PT09PT09PT09PT09PT09PT09PSDmlrDlop4gLyDnvJbovpEgPT09PT09PT09PT09PT09PT09PT0gKi8NCiAgICBoYW5kbGVBZGQoKSB7DQogICAgICB0aGlzLmRldGFpbE1vZGUgPSAnYWRkJw0KICAgICAgdGhpcy5kZXRhaWxTZW1lc3RlciA9IG51bGwNCiAgICAgIHRoaXMuZGV0YWlsVGVhbUluZm8gPSBudWxsDQogICAgICB0aGlzLmRldGFpbFZpc2libGUgPSB0cnVlDQogICAgfSwNCiAgICBoYW5kbGVFZGl0KHJvdykgew0KICAgICAgY29uc3QgdGFyZ2V0ID0gcm93IHx8IHRoaXMuY3VycmVudFJvdw0KICAgICAgaWYgKCF0YXJnZXQpIHsNCiAgICAgICAgdGhpcy4kbWVzc2FnZS53YXJuaW5nKCfor7flhYjpgInmi6nkuIDmnaHnj63mrKHlrabmnJ/kv6Hmga8nKQ0KICAgICAgICByZXR1cm4NCiAgICAgIH0NCiAgICAgIHRoaXMuZGV0YWlsTW9kZSA9ICdlZGl0Jw0KICAgICAgdGhpcy5kZXRhaWxTZW1lc3RlciA9IHRhcmdldA0KICAgICAgdGhpcy5kZXRhaWxUZWFtSW5mbyA9IG51bGwNCiAgICAgIHRoaXMuZGV0YWlsVmlzaWJsZSA9IHRydWUNCiAgICB9LA0KICAgIGhhbmRsZURldGFpbFN1Ym1pdChwYXlsb2FkKSB7DQogICAgICB0aGlzLnNhdmluZyA9IHRydWUNCiAgICAgIGNvbnN0IHJlcSA9IHRoaXMuZGV0YWlsTW9kZSA9PT0gJ2VkaXQnDQogICAgICAgID8gdXBkYXRlU2VtZXN0ZXIocGF5bG9hZCkNCiAgICAgICAgOiBhZGRTZW1lc3RlcihwYXlsb2FkKQ0KICAgICAgcmVxLnRoZW4oKCkgPT4gew0KICAgICAgICB0aGlzLnNhdmluZyA9IGZhbHNlDQogICAgICAgIHRoaXMuZGV0YWlsVmlzaWJsZSA9IGZhbHNlDQogICAgICAgIHRoaXMuJG1lc3NhZ2Uuc3VjY2Vzcyh0aGlzLmRldGFpbE1vZGUgPT09ICdlZGl0JyA/ICfnj63mrKHlrabmnJ/lt7Lmm7TmlrAnIDogJ+ePreasoeWtpuacn+W3suaWsOWinicpDQogICAgICAgIHRoaXMubG9hZExpc3QoKQ0KICAgICAgICB0aGlzLmxvYWRTZW1lc3Rlck9wdGlvbnMoKQ0KICAgICAgfSkuY2F0Y2goKCkgPT4gew0KICAgICAgICB0aGlzLnNhdmluZyA9IGZhbHNlDQogICAgICB9KQ0KICAgIH0sDQoNCiAgICAvKiA9PT09PT09PT09PT09PT09PT09PSDliKDpmaQgPT09PT09PT09PT09PT09PT09PT0gKi8NCiAgICBoYW5kbGVEZWxldGUoKSB7DQogICAgICBpZiAoIXRoaXMuc2VsZWN0aW9uLmxlbmd0aCkgew0KICAgICAgICB0aGlzLiRtZXNzYWdlLndhcm5pbmcoJ+ivt+WFiOWLvumAieimgeWIoOmZpOeahOePreasoeWtpuacnycpDQogICAgICAgIHJldHVybg0KICAgICAgfQ0KICAgICAgdGhpcy4kY29uZmlybShg56Gu5a6a5Yig6Zmk6YCJ5Lit55qEICR7dGhpcy5zZWxlY3Rpb24ubGVuZ3RofSDmnaHnj63mrKHlrabmnJ/lkJfvvJ/liKDpmaTlkI7lhbbkuIvnj63ljoborrDlvZXlsIbkuIDlubbliKDpmaTjgIJgLCAn5o+Q56S6Jywgew0KICAgICAgICBjb25maXJtQnV0dG9uVGV4dDogJ+ehruWumicsDQogICAgICAgIGNhbmNlbEJ1dHRvblRleHQ6ICflj5bmtognLA0KICAgICAgICB0eXBlOiAnd2FybmluZycNCiAgICAgIH0pLnRoZW4oKCkgPT4gew0KICAgICAgICBjb25zdCBiaExpc3QgPSB0aGlzLnNlbGVjdGlvbi5tYXAociA9PiByLmJoKQ0KICAgICAgICBiYXRjaERlbGV0ZVNlbWVzdGVyKGJoTGlzdCkudGhlbigoKSA9PiB7DQogICAgICAgICAgdGhpcy4kbWVzc2FnZS5zdWNjZXNzKCflt7LliKDpmaQnKQ0KICAgICAgICAgIHRoaXMubG9hZExpc3QoKQ0KICAgICAgICAgIHRoaXMubG9hZFNlbWVzdGVyT3B0aW9ucygpDQogICAgICAgIH0pDQogICAgICB9KS5jYXRjaCgoKSA9PiB7fSkNCiAgICB9LA0KICAgIGhhbmRsZURlbGV0ZVJvdyhyb3cpIHsNCiAgICAgIHRoaXMuJGNvbmZpcm0oYOehruWumuWIoOmZpOePreasoeWtpuacn+OAjCR7cm93Lnh5ZGJoIHx8IHJvdy5iaH3jgI3lkJfvvJ/liKDpmaTlkI7lhbbkuIvnj63ljoborrDlvZXlsIbkuIDlubbliKDpmaTjgIJgLCAn5o+Q56S6Jywgew0KICAgICAgICBjb25maXJtQnV0dG9uVGV4dDogJ+ehruWumicsDQogICAgICAgIGNhbmNlbEJ1dHRvblRleHQ6ICflj5bmtognLA0KICAgICAgICB0eXBlOiAnd2FybmluZycNCiAgICAgIH0pLnRoZW4oKCkgPT4gew0KICAgICAgICBkZWxTZW1lc3Rlcihyb3cuYmgpLnRoZW4oKCkgPT4gew0KICAgICAgICAgIHRoaXMuJG1lc3NhZ2Uuc3VjY2Vzcygn5bey5Yig6ZmkJykNCiAgICAgICAgICB0aGlzLmxvYWRMaXN0KCkNCiAgICAgICAgICB0aGlzLmxvYWRTZW1lc3Rlck9wdGlvbnMoKQ0KICAgICAgICB9KQ0KICAgICAgfSkuY2F0Y2goKCkgPT4ge30pDQogICAgfSwNCg0KICAgIC8qID09PT09PT09PT09PT09PT09PT09IOe8lui+keePreWOhiA9PT09PT09PT09PT09PT09PT09PSAqLw0KICAgIGhhbmRsZUVkaXRDYWxlbmRhcihyb3cpIHsNCiAgICAgIGNvbnN0IHRhcmdldCA9IHJvdyB8fCB0aGlzLmN1cnJlbnRSb3cNCiAgICAgIGlmICghdGFyZ2V0KSB7DQogICAgICAgIHRoaXMuJG1lc3NhZ2Uud2FybmluZygn6K+35YWI5Zyo5YiX6KGo5Lit6YCJ5oup5LiA5p2h54+t5qyh5a2m5pyf5L+h5oGvJykNCiAgICAgICAgcmV0dXJuDQogICAgICB9DQogICAgICB0aGlzLmNhbGVuZGFyU2VtZXN0ZXIgPSB0YXJnZXQNCiAgICAgIHRoaXMuY2FsZW5kYXJWaXNpYmxlID0gdHJ1ZQ0KICAgIH0sDQoNCiAgICAvKiA9PT09PT09PT09PT09PT09PT09PSDmibnph4/liJvlu7rnj63mrKHlrabmnJ8gPT09PT09PT09PT09PT09PT09PT0gKi8NCiAgICBoYW5kbGVCYXRjaEFkZCgpIHsNCiAgICAgIHRoaXMuYmF0Y2hBZGRGb3JtID0geyBuZDogdGhpcy55ZWFyT3B0aW9uc1swXSB8fCB1bmRlZmluZWQsIHhxZGM6ICcnLCBzdGFydFRpbWU6ICcnLCBlbmRUaW1lOiAnJyB9DQogICAgICB0aGlzLmJhdGNoQWRkVmlzaWJsZSA9IHRydWUNCiAgICAgIHRoaXMuJG5leHRUaWNrKCgpID0+IHsNCiAgICAgICAgaWYgKHRoaXMuJHJlZnMuYmF0Y2hBZGRGb3JtUmVmKSB0aGlzLiRyZWZzLmJhdGNoQWRkRm9ybVJlZi5jbGVhclZhbGlkYXRlKCkNCiAgICAgIH0pDQogICAgfSwNCiAgICBoYW5kbGVCYXRjaEFkZFN1Ym1pdCgpIHsNCiAgICAgIHRoaXMuJHJlZnMuYmF0Y2hBZGRGb3JtUmVmLnZhbGlkYXRlKHZhbGlkID0+IHsNCiAgICAgICAgaWYgKCF2YWxpZCkgcmV0dXJuDQogICAgICAgIGNvbnN0IGYgPSB0aGlzLmJhdGNoQWRkRm9ybQ0KICAgICAgICB0aGlzLnNhdmluZyA9IHRydWUNCiAgICAgICAgYmF0Y2hBZGRGcm9tRWxlY3RpdmUoew0KICAgICAgICAgIG5kOiBmLm5kLA0KICAgICAgICAgIHhxZGM6IGYueHFkYywNCiAgICAgICAgICBzdGFydFRpbWU6IGYuc3RhcnRUaW1lLA0KICAgICAgICAgIGVuZFRpbWU6IGYuZW5kVGltZQ0KICAgICAgICB9KS50aGVuKHJlcyA9PiB7DQogICAgICAgICAgdGhpcy5zYXZpbmcgPSBmYWxzZQ0KICAgICAgICAgIHRoaXMuYmF0Y2hBZGRWaXNpYmxlID0gZmFsc2UNCiAgICAgICAgICBjb25zdCBjb3VudCA9IChyZXMgJiYgcmVzLmRhdGEpIHx8IDANCiAgICAgICAgICB0aGlzLiRtZXNzYWdlLnN1Y2Nlc3MoYOW3suWIm+W7uiAke2NvdW50fSDkuKrnj63mrKHlrabmnJ9gKQ0KICAgICAgICAgIHRoaXMubG9hZExpc3QoKQ0KICAgICAgICAgIHRoaXMubG9hZFNlbWVzdGVyT3B0aW9ucygpDQogICAgICAgIH0pLmNhdGNoKCgpID0+IHsNCiAgICAgICAgICB0aGlzLnNhdmluZyA9IGZhbHNlDQogICAgICAgIH0pDQogICAgICB9KQ0KICAgIH0sDQoNCiAgICAvKiA9PT09PT09PT09PT09PT09PT09PSDlv6vpgJ/orr7lrprlrabmnJ/ml6XmnJ8gPT09PT09PT09PT09PT09PT09PT0gKi8NCiAgICBoYW5kbGVRdWlja1NldERhdGVzKCkgew0KICAgICAgaWYgKCF0aGlzLnNlbGVjdGlvbi5sZW5ndGgpIHsNCiAgICAgICAgdGhpcy4kbWVzc2FnZS53YXJuaW5nKCfor7flhYjli77pgInopoHorr7lrprml6XmnJ/nmoTnj63mrKHlrabmnJ8nKQ0KICAgICAgICByZXR1cm4NCiAgICAgIH0NCiAgICAgIHRoaXMuZGF0ZVJhbmdlRm9ybSA9IHsga3hycTogJycsIGpzcnE6ICcnIH0NCiAgICAgIHRoaXMuZGF0ZVJhbmdlVmlzaWJsZSA9IHRydWUNCiAgICAgIHRoaXMuJG5leHRUaWNrKCgpID0+IHsNCiAgICAgICAgaWYgKHRoaXMuJHJlZnMuZGF0ZVJhbmdlRm9ybVJlZikgdGhpcy4kcmVmcy5kYXRlUmFuZ2VGb3JtUmVmLmNsZWFyVmFsaWRhdGUoKQ0KICAgICAgfSkNCiAgICB9LA0KICAgIGhhbmRsZURhdGVSYW5nZVN1Ym1pdCgpIHsNCiAgICAgIHRoaXMuJHJlZnMuZGF0ZVJhbmdlRm9ybVJlZi52YWxpZGF0ZSh2YWxpZCA9PiB7DQogICAgICAgIGlmICghdmFsaWQpIHJldHVybg0KICAgICAgICBjb25zdCBmID0gdGhpcy5kYXRlUmFuZ2VGb3JtDQogICAgICAgIHRoaXMuc2F2aW5nID0gdHJ1ZQ0KICAgICAgICBiYXRjaFVwZGF0ZURhdGVSYW5nZSh7DQogICAgICAgICAgYmhMaXN0OiB0aGlzLnNlbGVjdGlvbi5tYXAociA9PiByLmJoKSwNCiAgICAgICAgICB4cWtzc2o6IGYua3hycSwNCiAgICAgICAgICB4cWpzc2o6IGYuanNycQ0KICAgICAgICB9KS50aGVuKHJlcyA9PiB7DQogICAgICAgICAgdGhpcy5zYXZpbmcgPSBmYWxzZQ0KICAgICAgICAgIHRoaXMuZGF0ZVJhbmdlVmlzaWJsZSA9IGZhbHNlDQogICAgICAgICAgY29uc3QgY291bnQgPSAocmVzICYmIHJlcy5kYXRhKSB8fCAwDQogICAgICAgICAgdGhpcy4kbWVzc2FnZS5zdWNjZXNzKGDlt7Lmm7TmlrAgJHtjb3VudH0g5p2h54+t5qyh5a2m5pyf55qE5pel5pyfYCkNCiAgICAgICAgICB0aGlzLmxvYWRMaXN0KCkNCiAgICAgICAgfSkuY2F0Y2goKCkgPT4gew0KICAgICAgICAgIHRoaXMuc2F2aW5nID0gZmFsc2UNCiAgICAgICAgfSkNCiAgICAgIH0pDQogICAgfSwNCg0KICAgIC8qID09PT09PT09PT09PT09PT09PT09IOaJuemHj+iuvue9ruaVmeWtpuS7u+WKoSA9PT09PT09PT09PT09PT09PT09PSAqLw0KICAgIGhhbmRsZVNldEp4cncoKSB7DQogICAgICBpZiAoIXRoaXMuc2VsZWN0aW9uLmxlbmd0aCkgew0KICAgICAgICB0aGlzLiRtZXNzYWdlLndhcm5pbmcoJ+ivt+WFiOWLvumAieimgeiuvue9ruaVmeWtpuS7u+WKoeeahOePreasoeWtpuacnycpDQogICAgICAgIHJldHVybg0KICAgICAgfQ0KICAgICAgdGhpcy5qeHJ3Rm9ybSA9IHsganhyd2JoOiB1bmRlZmluZWQgfQ0KICAgICAgdGhpcy5qeHJ3VmlzaWJsZSA9IHRydWUNCiAgICAgIHRoaXMuJG5leHRUaWNrKCgpID0+IHsNCiAgICAgICAgaWYgKHRoaXMuJHJlZnMuanhyd0Zvcm1SZWYpIHRoaXMuJHJlZnMuanhyd0Zvcm1SZWYuY2xlYXJWYWxpZGF0ZSgpDQogICAgICB9KQ0KICAgIH0sDQogICAgaGFuZGxlSnhyd1N1Ym1pdCgpIHsNCiAgICAgIHRoaXMuJHJlZnMuanhyd0Zvcm1SZWYudmFsaWRhdGUodmFsaWQgPT4gew0KICAgICAgICBpZiAoIXZhbGlkKSByZXR1cm4NCiAgICAgICAgdGhpcy5zYXZpbmcgPSB0cnVlDQogICAgICAgIGJhdGNoVXBkYXRlSnhyd2JoKHsNCiAgICAgICAgICBiaExpc3Q6IHRoaXMuc2VsZWN0aW9uLm1hcChyID0+IHIuYmgpLA0KICAgICAgICAgIGp4cndiaDogdGhpcy5qeHJ3Rm9ybS5qeHJ3YmgNCiAgICAgICAgfSkudGhlbihyZXMgPT4gew0KICAgICAgICAgIHRoaXMuc2F2aW5nID0gZmFsc2UNCiAgICAgICAgICB0aGlzLmp4cndWaXNpYmxlID0gZmFsc2UNCiAgICAgICAgICBjb25zdCBjb3VudCA9IChyZXMgJiYgcmVzLmRhdGEpIHx8IDANCiAgICAgICAgICB0aGlzLiRtZXNzYWdlLnN1Y2Nlc3MoYOW3suabtOaWsCAke2NvdW50fSDmnaHnj63mrKHlrabmnJ/nmoTmlZnlrabku7vliqFgKQ0KICAgICAgICAgIHRoaXMubG9hZExpc3QoKQ0KICAgICAgICB9KS5jYXRjaCgoKSA9PiB7DQogICAgICAgICAgdGhpcy5zYXZpbmcgPSBmYWxzZQ0KICAgICAgICB9KQ0KICAgICAgfSkNCiAgICB9DQogIH0NCn0NCg=="},{"version":3,"sources":["index.vue"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAyNA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA","file":"index.vue","sourceRoot":"src/views/teachOffice/shiftSemester","sourcesContent":["<template>\r\n <div class=\"app-container shift-semester-page\">\r\n <!-- ==================== 页面标题 ==================== -->\r\n <div class=\"page-title\">班次学期信息管理</div>\r\n\r\n <!-- ==================== 1. 查询条件区域 ==================== -->\r\n <el-card shadow=\"never\" class=\"search-card\">\r\n <el-form :inline=\"true\" :model=\"searchForm\" class=\"search-form\">\r\n <el-form-item label=\"班次编号\">\r\n <el-input\r\n v-model=\"searchForm.xydbh\"\r\n placeholder=\"请输入班次编号(模糊)\"\r\n clearable\r\n style=\"width: 220px\"\r\n @keyup.enter.native=\"handleQuery\"\r\n />\r\n </el-form-item>\r\n <el-form-item label=\"年度\">\r\n <el-select v-model=\"filterYear\" placeholder=\"全部年度\" clearable style=\"width: 140px\" @change=\"handleYearChange\">\r\n <el-option v-for=\"y in yearFilterOptions\" :key=\"y\" :label=\"`${y}年`\" :value=\"y\" />\r\n </el-select>\r\n </el-form-item>\r\n <el-form-item>\r\n <el-button type=\"primary\" icon=\"el-icon-search\" @click=\"handleQuery\">查询</el-button>\r\n <el-button icon=\"el-icon-refresh\" @click=\"handleReset\">重置</el-button>\r\n </el-form-item>\r\n </el-form>\r\n </el-card>\r\n\r\n <!-- ==================== 2. 工具栏按钮区 ==================== -->\r\n <div class=\"list-toolbar\">\r\n <div class=\"left-group\">\r\n <el-button type=\"primary\" icon=\"el-icon-plus\" @click=\"handleBatchAdd\">批量创建班次学期</el-button>\r\n <el-button type=\"primary\" plain icon=\"el-icon-document-add\" @click=\"handleAdd\">新增</el-button>\r\n <el-button type=\"primary\" plain icon=\"el-icon-edit\" :disabled=\"!currentRow\" @click=\"handleEdit\">编辑</el-button>\r\n <el-button type=\"danger\" plain icon=\"el-icon-delete\" :disabled=\"!selection.length\" @click=\"handleDelete\">删除所选</el-button>\r\n <el-button type=\"primary\" plain icon=\"el-icon-date\" :disabled=\"!selection.length\" @click=\"handleQuickSetDates\">快速设定学期日期</el-button>\r\n <el-button type=\"primary\" plain icon=\"el-icon-notebook-2\" :disabled=\"!selection.length\" @click=\"handleSetJxrw\">批量设置教学任务</el-button>\r\n </div>\r\n <div class=\"right-group\">\r\n <el-button type=\"success\" plain icon=\"el-icon-calendar\" :disabled=\"!currentRow\" @click=\"handleEditCalendar\">编辑班历</el-button>\r\n </div>\r\n </div>\r\n\r\n <!-- ==================== 3. 班次学期信息列表 ==================== -->\r\n <el-card shadow=\"never\" class=\"table-card\">\r\n <el-table\r\n ref=\"tableRef\"\r\n v-loading=\"loading\"\r\n :data=\"displayData\"\r\n border\r\n stripe\r\n highlight-current-row\r\n size=\"small\"\r\n max-height=\"480\"\r\n class=\"class-table\"\r\n @selection-change=\"handleSelectionChange\"\r\n @current-change=\"handleCurrentChange\"\r\n >\r\n <template slot=\"empty\">\r\n <span>无数据!</span>\r\n </template>\r\n <el-table-column type=\"selection\" width=\"44\" align=\"center\" />\r\n <el-table-column type=\"index\" label=\"序号\" width=\"55\" align=\"center\" />\r\n <el-table-column prop=\"xydbh\" label=\"班次编号\" min-width=\"150\" align=\"center\" show-overflow-tooltip />\r\n <el-table-column prop=\"nd\" label=\"年度\" width=\"80\" align=\"center\" show-overflow-tooltip />\r\n <el-table-column label=\"学期第次\" width=\"90\" align=\"center\">\r\n <template slot-scope=\"{ row }\">{{ xqdcLabel(row.xqdc) }}</template>\r\n </el-table-column>\r\n <el-table-column prop=\"kxrq\" label=\"开学日期\" width=\"110\" align=\"center\" :formatter=\"fmtDate\" />\r\n <el-table-column prop=\"jsrq\" label=\"结束日期\" width=\"110\" align=\"center\" :formatter=\"fmtDate\" />\r\n <el-table-column prop=\"zyjsbh\" label=\"专用教室\" width=\"100\" align=\"center\" show-overflow-tooltip />\r\n <el-table-column label=\"教学任务\" min-width=\"160\" align=\"center\" show-overflow-tooltip>\r\n <template slot-scope=\"{ row }\">{{ taskName(row.jxrwbh) }}</template>\r\n </el-table-column>\r\n <el-table-column label=\"开放教员排课\" width=\"110\" align=\"center\">\r\n <template slot-scope=\"{ row }\">\r\n <el-tag v-if=\"Number(row.kfjypk) === 1\" type=\"success\" size=\"small\">开放</el-tag>\r\n <el-tag v-else type=\"info\" size=\"small\">关闭</el-tag>\r\n </template>\r\n </el-table-column>\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=\"200\" 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\" @click=\"handleEditCalendar(row)\">班历</el-button>\r\n <el-button type=\"text\" size=\"small\" class=\"text-danger\" @click=\"handleDeleteRow(row)\">删除</el-button>\r\n </template>\r\n </el-table-column>\r\n </el-table>\r\n\r\n <el-pagination\r\n class=\"list-pagination\"\r\n :current-page=\"pageNum\"\r\n :page-size=\"pageSize\"\r\n :page-sizes=\"[10, 20, 50, 100]\"\r\n :total=\"total\"\r\n layout=\"total, sizes, prev, pager, next, jumper\"\r\n @size-change=\"handleSizeChange\"\r\n @current-change=\"handlePageChange\"\r\n />\r\n </el-card>\r\n\r\n <!-- ==================== 班次学期新增/编辑弹窗 ==================== -->\r\n <ClassSemesterDetailDialog\r\n :visible=\"detailVisible\"\r\n :mode=\"detailMode\"\r\n :semester=\"detailSemester\"\r\n :team-info=\"detailTeamInfo\"\r\n :year-options=\"yearOptions\"\r\n :task-options=\"taskOptions\"\r\n @update:visible=\"val => detailVisible = val\"\r\n @submit=\"handleDetailSubmit\"\r\n />\r\n\r\n <!-- ==================== 班历管理弹窗 ==================== -->\r\n <ClassCalendarDialog\r\n :visible=\"calendarVisible\"\r\n :semester=\"calendarSemester\"\r\n :semester-options=\"semesterOptions\"\r\n @update:visible=\"val => calendarVisible = val\"\r\n />\r\n\r\n <!-- ==================== 批量创建班次学期弹窗 ==================== -->\r\n <el-dialog\r\n :visible=\"batchAddVisible\"\r\n title=\"批量创建班次学期\"\r\n width=\"520px\"\r\n :close-on-click-modal=\"false\"\r\n @update:visible=\"val => batchAddVisible = val\"\r\n >\r\n <el-form ref=\"batchAddFormRef\" :model=\"batchAddForm\" :rules=\"batchAddRules\" label-width=\"100px\">\r\n <el-form-item label=\"年度\" prop=\"nd\">\r\n <el-select v-model=\"batchAddForm.nd\" placeholder=\"请选择年度\" style=\"width: 100%\">\r\n <el-option v-for=\"y in yearOptions\" :key=\"y\" :label=\"`${y}年`\" :value=\"y\" />\r\n </el-select>\r\n </el-form-item>\r\n <el-form-item label=\"学期\" prop=\"xqdc\">\r\n <el-select v-model=\"batchAddForm.xqdc\" placeholder=\"请选择学期\" style=\"width: 100%\">\r\n <el-option label=\"春季学期\" value=\"春季学期\" />\r\n <el-option label=\"夏季学期\" value=\"夏季学期\" />\r\n <el-option label=\"秋季学期\" value=\"秋季学期\" />\r\n </el-select>\r\n </el-form-item>\r\n <el-form-item label=\"开始日期\" prop=\"startTime\">\r\n <el-date-picker v-model=\"batchAddForm.startTime\" type=\"date\" value-format=\"yyyy-MM-dd\" placeholder=\"请选择开始日期\" style=\"width: 100%\" />\r\n </el-form-item>\r\n <el-form-item label=\"结束日期\" prop=\"endTime\">\r\n <el-date-picker v-model=\"batchAddForm.endTime\" type=\"date\" value-format=\"yyyy-MM-dd\" placeholder=\"请选择结束日期\" style=\"width: 100%\" />\r\n </el-form-item>\r\n </el-form>\r\n <div slot=\"footer\">\r\n <el-button @click=\"batchAddVisible = false\">取消</el-button>\r\n <el-button type=\"primary\" :loading=\"saving\" @click=\"handleBatchAddSubmit\">确定</el-button>\r\n </div>\r\n </el-dialog>\r\n\r\n <!-- ==================== 快速设定学期日期弹窗 ==================== -->\r\n <el-dialog\r\n :visible=\"dateRangeVisible\"\r\n title=\"快速设定学期日期\"\r\n width=\"480px\"\r\n :close-on-click-modal=\"false\"\r\n @update:visible=\"val => dateRangeVisible = val\"\r\n >\r\n <el-alert\r\n type=\"info\"\r\n :closable=\"false\"\r\n show-icon\r\n :title=\"`将对选中的 ${selection.length} 条班次学期统一设定开学/结束日期`\"\r\n style=\"margin-bottom: 16px\"\r\n />\r\n <el-form ref=\"dateRangeFormRef\" :model=\"dateRangeForm\" :rules=\"dateRangeRules\" label-width=\"100px\">\r\n <el-form-item label=\"开学日期\" prop=\"kxrq\">\r\n <el-date-picker v-model=\"dateRangeForm.kxrq\" type=\"date\" value-format=\"yyyy-MM-dd\" placeholder=\"请选择开学日期\" style=\"width: 100%\" />\r\n </el-form-item>\r\n <el-form-item label=\"结束日期\" prop=\"jsrq\">\r\n <el-date-picker v-model=\"dateRangeForm.jsrq\" type=\"date\" value-format=\"yyyy-MM-dd\" placeholder=\"请选择结束日期\" style=\"width: 100%\" />\r\n </el-form-item>\r\n </el-form>\r\n <div slot=\"footer\">\r\n <el-button @click=\"dateRangeVisible = false\">取消</el-button>\r\n <el-button type=\"primary\" :loading=\"saving\" @click=\"handleDateRangeSubmit\">确定</el-button>\r\n </div>\r\n </el-dialog>\r\n\r\n <!-- ==================== 批量设置教学任务弹窗 ==================== -->\r\n <el-dialog\r\n :visible=\"jxrwVisible\"\r\n title=\"批量设置教学任务\"\r\n width=\"480px\"\r\n :close-on-click-modal=\"false\"\r\n @update:visible=\"val => jxrwVisible = val\"\r\n >\r\n <el-alert\r\n type=\"info\"\r\n :closable=\"false\"\r\n show-icon\r\n :title=\"`将对选中的 ${selection.length} 条班次学期统一设置教学任务`\"\r\n style=\"margin-bottom: 16px\"\r\n />\r\n <el-form ref=\"jxrwFormRef\" :model=\"jxrwForm\" :rules=\"jxrwRules\" label-width=\"100px\">\r\n <el-form-item label=\"教学任务\" prop=\"jxrwbh\">\r\n <el-select v-model=\"jxrwForm.jxrwbh\" placeholder=\"请选择教学任务\" filterable style=\"width: 100%\">\r\n <el-option v-for=\"opt in taskOptions\" :key=\"opt.bh\" :label=\"opt.rwmc\" :value=\"opt.bh\" />\r\n </el-select>\r\n </el-form-item>\r\n </el-form>\r\n <div slot=\"footer\">\r\n <el-button @click=\"jxrwVisible = false\">取消</el-button>\r\n <el-button type=\"primary\" :loading=\"saving\" @click=\"handleJxrwSubmit\">确定</el-button>\r\n </div>\r\n </el-dialog>\r\n </div>\r\n</template>\r\n\r\n<script>\r\nimport ClassSemesterDetailDialog from './ClassSemesterDetailDialog.vue'\r\nimport ClassCalendarDialog from './ClassCalendarDialog.vue'\r\nimport { listSemester, allSemester, addSemester, updateSemester, delSemester, batchDeleteSemester, batchUpdateDateRange, batchUpdateJxrwbh, batchAddFromElective } from '@/api/studentRecords/semester'\r\nimport { listAllSemester } from '@/api/teachBusiness/semester'\r\nimport { listTeachingTask } from '@/api/teachBusiness/teachingTask'\r\n\r\nexport default {\r\n name: 'ShiftSemester',\r\n components: {\r\n ClassSemesterDetailDialog,\r\n ClassCalendarDialog\r\n },\r\n data() {\r\n return {\r\n loading: false,\r\n saving: false,\r\n\r\n // ==================== 查询条件 ====================\r\n searchForm: { xydbh: '' },\r\n filterYear: undefined,\r\n yearFilterOptions: [],\r\n\r\n // ==================== 列表与分页 ====================\r\n tableData: [],\r\n selection: [],\r\n currentRow: null,\r\n pageNum: 1,\r\n pageSize: 10,\r\n total: 0,\r\n\r\n // ==================== 下拉数据 ====================\r\n /** 年度下拉(来自 /semester/all) */\r\n yearOptions: [],\r\n /** 教学任务下拉({ bh, rwmc }) */\r\n taskOptions: [],\r\n /** 全部班次学期(用于班历复制目标选择) */\r\n semesterOptions: [],\r\n\r\n // ==================== 班次学期新增/编辑 ====================\r\n detailVisible: false,\r\n detailMode: 'add',\r\n detailSemester: null,\r\n detailTeamInfo: null,\r\n\r\n // ==================== 班历管理 ====================\r\n calendarVisible: false,\r\n calendarSemester: null,\r\n\r\n // ==================== 批量创建班次学期 ====================\r\n batchAddVisible: false,\r\n batchAddForm: { nd: undefined, xqdc: '', startTime: '', endTime: '' },\r\n batchAddRules: {\r\n nd: [{ required: true, message: '请选择年度', trigger: 'change' }],\r\n xqdc: [{ required: true, message: '请选择学期', trigger: 'change' }],\r\n startTime: [{ required: true, message: '请选择开始日期', trigger: 'change' }],\r\n endTime: [{ required: true, message: '请选择结束日期', trigger: 'change' }]\r\n },\r\n\r\n // ==================== 快速设定学期日期 ====================\r\n dateRangeVisible: false,\r\n dateRangeForm: { kxrq: '', jsrq: '' },\r\n dateRangeRules: {\r\n kxrq: [{ required: true, message: '请选择开学日期', trigger: 'change' }],\r\n jsrq: [{ required: true, message: '请选择结束日期', trigger: 'change' }]\r\n },\r\n\r\n // ==================== 批量设置教学任务 ====================\r\n jxrwVisible: false,\r\n jxrwForm: { jxrwbh: undefined },\r\n jxrwRules: {\r\n jxrwbh: [{ required: true, message: '请选择教学任务', trigger: 'change' }]\r\n }\r\n }\r\n },\r\n computed: {\r\n /** 本地按年度过滤(后端 /semester/list 仅支持 xydbh 模糊筛选) */\r\n displayData() {\r\n if (!this.filterYear) return this.tableData\r\n return this.tableData.filter(item => String(item.nd) === String(this.filterYear))\r\n }\r\n },\r\n mounted() {\r\n this.loadYearOptions()\r\n this.loadTaskOptions()\r\n this.loadSemesterOptions()\r\n this.loadList()\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 /** 教学任务编号 → 名称 */\r\n taskName(bh) {\r\n if (!bh) return '-'\r\n const opt = this.taskOptions.find(o => o.bh === bh)\r\n return opt ? opt.rwmc : bh\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 loadYearOptions() {\r\n listAllSemester().then(res => {\r\n const list = (res && res.data) || []\r\n const years = list.map(x => x.nd).filter(v => v !== undefined && v !== null && v !== '')\r\n this.yearOptions = [...new Set(years)].sort((a, b) => Number(a) - Number(b))\r\n }).catch(() => {\r\n this.yearOptions = []\r\n })\r\n },\r\n loadTaskOptions() {\r\n listTeachingTask({ pageNum: 1, pageSize: 1000 }).then(res => {\r\n const list = (res && res.data && res.data.records) || []\r\n this.taskOptions = list.filter(o => o.bh)\r\n }).catch(() => {\r\n this.taskOptions = []\r\n })\r\n },\r\n loadSemesterOptions() {\r\n allSemester().then(res => {\r\n this.semesterOptions = (res && res.data) || []\r\n }).catch(() => {\r\n this.semesterOptions = []\r\n })\r\n },\r\n\r\n /* ==================== 列表加载 ==================== */\r\n loadList() {\r\n this.loading = true\r\n const query = this.cleanPayload({\r\n pageNum: this.pageNum,\r\n pageSize: this.pageSize,\r\n xydbh: this.searchForm.xydbh\r\n })\r\n listSemester(query).then(res => {\r\n const data = (res && res.data) || {}\r\n this.tableData = data.records || []\r\n this.total = data.total || 0\r\n this.buildYearFilterOptions()\r\n this.loading = false\r\n }).catch(() => {\r\n this.tableData = []\r\n this.total = 0\r\n this.loading = false\r\n })\r\n },\r\n /** 本地年度过滤下拉(从当前数据动态生成,避免硬编码) */\r\n buildYearFilterOptions() {\r\n const years = this.tableData.map(r => r.nd).filter(v => v !== undefined && v !== null && v !== '')\r\n this.yearFilterOptions = [...new Set(years)].sort((a, b) => Number(a) - Number(b))\r\n },\r\n handleYearChange() {\r\n this.$nextTick(() => {\r\n if (this.$refs.tableRef) this.$refs.tableRef.setCurrentRow(null)\r\n this.currentRow = null\r\n })\r\n },\r\n handleSizeChange(size) {\r\n this.pageSize = size\r\n this.loadList()\r\n },\r\n handlePageChange(page) {\r\n this.pageNum = page\r\n this.loadList()\r\n },\r\n handleSelectionChange(rows) {\r\n this.selection = rows\r\n },\r\n handleCurrentChange(row) {\r\n this.currentRow = row\r\n },\r\n\r\n /* ==================== 查询 / 重置 ==================== */\r\n handleQuery() {\r\n this.pageNum = 1\r\n this.loadList()\r\n },\r\n handleReset() {\r\n this.searchForm.xydbh = ''\r\n this.filterYear = undefined\r\n this.pageNum = 1\r\n this.loadList()\r\n },\r\n\r\n /* ==================== 新增 / 编辑 ==================== */\r\n handleAdd() {\r\n this.detailMode = 'add'\r\n this.detailSemester = null\r\n this.detailTeamInfo = null\r\n this.detailVisible = true\r\n },\r\n handleEdit(row) {\r\n const target = row || this.currentRow\r\n if (!target) {\r\n this.$message.warning('请先选择一条班次学期信息')\r\n return\r\n }\r\n this.detailMode = 'edit'\r\n this.detailSemester = target\r\n this.detailTeamInfo = null\r\n this.detailVisible = true\r\n },\r\n handleDetailSubmit(payload) {\r\n this.saving = true\r\n const req = this.detailMode === 'edit'\r\n ? updateSemester(payload)\r\n : addSemester(payload)\r\n req.then(() => {\r\n this.saving = false\r\n this.detailVisible = false\r\n this.$message.success(this.detailMode === 'edit' ? '班次学期已更新' : '班次学期已新增')\r\n this.loadList()\r\n this.loadSemesterOptions()\r\n }).catch(() => {\r\n this.saving = false\r\n })\r\n },\r\n\r\n /* ==================== 删除 ==================== */\r\n handleDelete() {\r\n if (!this.selection.length) {\r\n this.$message.warning('请先勾选要删除的班次学期')\r\n return\r\n }\r\n this.$confirm(`确定删除选中的 ${this.selection.length} 条班次学期吗?删除后其下班历记录将一并删除。`, '提示', {\r\n confirmButtonText: '确定',\r\n cancelButtonText: '取消',\r\n type: 'warning'\r\n }).then(() => {\r\n const bhList = this.selection.map(r => r.bh)\r\n batchDeleteSemester(bhList).then(() => {\r\n this.$message.success('已删除')\r\n this.loadList()\r\n this.loadSemesterOptions()\r\n })\r\n }).catch(() => {})\r\n },\r\n handleDeleteRow(row) {\r\n this.$confirm(`确定删除班次学期「${row.xydbh || row.bh}」吗?删除后其下班历记录将一并删除。`, '提示', {\r\n confirmButtonText: '确定',\r\n cancelButtonText: '取消',\r\n type: 'warning'\r\n }).then(() => {\r\n delSemester(row.bh).then(() => {\r\n this.$message.success('已删除')\r\n this.loadList()\r\n this.loadSemesterOptions()\r\n })\r\n }).catch(() => {})\r\n },\r\n\r\n /* ==================== 编辑班历 ==================== */\r\n handleEditCalendar(row) {\r\n const target = row || this.currentRow\r\n if (!target) {\r\n this.$message.warning('请先在列表中选择一条班次学期信息')\r\n return\r\n }\r\n this.calendarSemester = target\r\n this.calendarVisible = true\r\n },\r\n\r\n /* ==================== 批量创建班次学期 ==================== */\r\n handleBatchAdd() {\r\n this.batchAddForm = { nd: this.yearOptions[0] || undefined, xqdc: '', startTime: '', endTime: '' }\r\n this.batchAddVisible = true\r\n this.$nextTick(() => {\r\n if (this.$refs.batchAddFormRef) this.$refs.batchAddFormRef.clearValidate()\r\n })\r\n },\r\n handleBatchAddSubmit() {\r\n this.$refs.batchAddFormRef.validate(valid => {\r\n if (!valid) return\r\n const f = this.batchAddForm\r\n this.saving = true\r\n batchAddFromElective({\r\n nd: f.nd,\r\n xqdc: f.xqdc,\r\n startTime: f.startTime,\r\n endTime: f.endTime\r\n }).then(res => {\r\n this.saving = false\r\n this.batchAddVisible = false\r\n const count = (res && res.data) || 0\r\n this.$message.success(`已创建 ${count} 个班次学期`)\r\n this.loadList()\r\n this.loadSemesterOptions()\r\n }).catch(() => {\r\n this.saving = false\r\n })\r\n })\r\n },\r\n\r\n /* ==================== 快速设定学期日期 ==================== */\r\n handleQuickSetDates() {\r\n if (!this.selection.length) {\r\n this.$message.warning('请先勾选要设定日期的班次学期')\r\n return\r\n }\r\n this.dateRangeForm = { kxrq: '', jsrq: '' }\r\n this.dateRangeVisible = true\r\n this.$nextTick(() => {\r\n if (this.$refs.dateRangeFormRef) this.$refs.dateRangeFormRef.clearValidate()\r\n })\r\n },\r\n handleDateRangeSubmit() {\r\n this.$refs.dateRangeFormRef.validate(valid => {\r\n if (!valid) return\r\n const f = this.dateRangeForm\r\n this.saving = true\r\n batchUpdateDateRange({\r\n bhList: this.selection.map(r => r.bh),\r\n xqkssj: f.kxrq,\r\n xqjssj: f.jsrq\r\n }).then(res => {\r\n this.saving = false\r\n this.dateRangeVisible = false\r\n const count = (res && res.data) || 0\r\n this.$message.success(`已更新 ${count} 条班次学期的日期`)\r\n this.loadList()\r\n }).catch(() => {\r\n this.saving = false\r\n })\r\n })\r\n },\r\n\r\n /* ==================== 批量设置教学任务 ==================== */\r\n handleSetJxrw() {\r\n if (!this.selection.length) {\r\n this.$message.warning('请先勾选要设置教学任务的班次学期')\r\n return\r\n }\r\n this.jxrwForm = { jxrwbh: undefined }\r\n this.jxrwVisible = true\r\n this.$nextTick(() => {\r\n if (this.$refs.jxrwFormRef) this.$refs.jxrwFormRef.clearValidate()\r\n })\r\n },\r\n handleJxrwSubmit() {\r\n this.$refs.jxrwFormRef.validate(valid => {\r\n if (!valid) return\r\n this.saving = true\r\n batchUpdateJxrwbh({\r\n bhList: this.selection.map(r => r.bh),\r\n jxrwbh: this.jxrwForm.jxrwbh\r\n }).then(res => {\r\n this.saving = false\r\n this.jxrwVisible = false\r\n const count = (res && res.data) || 0\r\n this.$message.success(`已更新 ${count} 条班次学期的教学任务`)\r\n this.loadList()\r\n }).catch(() => {\r\n this.saving = false\r\n })\r\n })\r\n }\r\n }\r\n}\r\n</script>\r\n\r\n<style scoped lang=\"scss\">\r\n.app-container {\r\n padding: 20px;\r\n}\r\n\r\n.shift-semester-page {\r\n // ========== 页面标题 ==========\r\n .page-title {\r\n font-size: 16px;\r\n font-weight: 600;\r\n color: #303133;\r\n margin-bottom: 12px;\r\n padding-left: 10px;\r\n border-left: 4px solid var(--edu-green-primary);\r\n }\r\n\r\n // ========== 1. 查询条件区域 ==========\r\n .search-card {\r\n margin-bottom: 16px;\r\n }\r\n\r\n // ========== 2. 工具栏按钮区 ==========\r\n .list-toolbar {\r\n display: flex;\r\n align-items: center;\r\n justify-content: space-between;\r\n flex-wrap: wrap;\r\n gap: 12px;\r\n margin-bottom: 16px;\r\n\r\n .left-group,\r\n .right-group {\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-card {\r\n .class-table {\r\n width: 100%;\r\n }\r\n\r\n .text-danger {\r\n color: #f56c6c;\r\n }\r\n\r\n .list-pagination {\r\n margin-top: 12px;\r\n text-align: right;\r\n }\r\n }\r\n}\r\n</style>\r\n"]}]}