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

1 line
41 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\\teachBusiness\\semester\\index.vue?vue&type=script&lang=js","dependencies":[{"path":"C:\\Users\\Admin\\Desktop\\education\\frontend\\src\\views\\teachBusiness\\semester\\index.vue","mtime":1787641826318},{"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:Ly8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KDQppbXBvcnQgeyBsaXN0U2VtZXN0ZXIsIGdldFNlbWVzdGVyLCBhZGRTZW1lc3RlciwgdXBkYXRlU2VtZXN0ZXIsIGRlbFNlbWVzdGVyIH0gZnJvbSAiQC9hcGkvdGVhY2hCdXNpbmVzcy9zZW1lc3RlciINCg0KZXhwb3J0IGRlZmF1bHQgew0KICBuYW1lOiAiU2VtZXN0ZXIiLA0KICBkYXRhKCkgew0KICAgIHJldHVybiB7DQogICAgICAvLyDpga7nvanlsYINCiAgICAgIGxvYWRpbmc6IHRydWUsDQogICAgICAvLyDooajmoLzpq5jluqYNCiAgICAgIHRhYmxlSGVpZ2h0OiB3aW5kb3cuaW5uZXJIZWlnaHQgLSAyODAsDQogICAgICAvLyDmgLvmnaHmlbANCiAgICAgIHRvdGFsOiAwLA0KICAgICAgLy8g5a2m5pyf5YiX6KGo5pWw5o2uDQogICAgICBzZW1lc3Rlckxpc3Q6IFtdLA0KICAgICAgLy8g6YCJ5Lit55qE5a2m5pyf5pWw57uEDQogICAgICBpZHM6IFtdLA0KICAgICAgLy8g5b2T5YmN54K55Ye76YCJ5Lit55qE5a2m5pyfDQogICAgICBjdXJyZW50U2VtZXN0ZXI6IG51bGwsDQogICAgICAvLyDpnZ7ljZXkuKrnpoHnlKgNCiAgICAgIHNpbmdsZTogdHJ1ZSwNCiAgICAgIC8vIOmdnuWkmuS4quemgeeUqA0KICAgICAgbXVsdGlwbGU6IHRydWUsDQogICAgICAvLyDlvLnlh7rlsYLmoIfpopgNCiAgICAgIHRpdGxlOiAiIiwNCiAgICAgIC8vIOaYr+WQpuaYvuekuuW8ueWHuuWxgg0KICAgICAgb3BlbjogZmFsc2UsDQogICAgICAvLyDmmK/lkKbmlrDlop4NCiAgICAgIGlzQWRkOiB0cnVlLA0KICAgICAgLy8g5a2m5bm06YCJ6aG577yI5b2T5YmN5bm05Lu9IMKxIDEwIOW5tO+8iQ0KICAgICAgeWVhck9wdGlvbnM6IFtdLA0KICAgICAgLy8g5a2m5pyf6YCJ6aG577yaMDEg5pil5a2j44CBMDIg5aSP5a2j44CBMDMg56eL5a2jDQogICAgICBzZW1lc3Rlck9wdGlvbnM6IFsNCiAgICAgICAgeyB2YWx1ZTogJzAxJywgbGFiZWw6ICfmmKXlraPlrabmnJ8nIH0sDQogICAgICAgIHsgdmFsdWU6ICcwMicsIGxhYmVsOiAn5aSP5a2j5a2m5pyfJyB9LA0KICAgICAgICB7IHZhbHVlOiAnMDMnLCBsYWJlbDogJ+eni+Wto+WtpuacnycgfQ0KICAgICAgXSwNCiAgICAgIC8vIOivvuaXtuezu+aVsOaWueahiOmAiemhue+8iOW8leeUqOWfuuehgOaVsOaNruihqO+8jOaaguS7pemdmeaAgeWNoOS9je+8iQ0KICAgICAgY29lZmZpY2llbnRPcHRpb25zOiBbDQogICAgICAgIHsgdmFsdWU6ICcxJywgbGFiZWw6ICfmoIflh4bns7vmlbDmlrnmoYgnIH0sDQogICAgICAgIHsgdmFsdWU6ICcyJywgbGFiZWw6ICfnu7zlkIjns7vmlbDmlrnmoYgnIH0sDQogICAgICAgIHsgdmFsdWU6ICczJywgbGFiZWw6ICflrp7orq3ns7vmlbDmlrnmoYgnIH0NCiAgICAgIF0sDQogICAgICAvLyDmn6Xor6Llj4LmlbANCiAgICAgIHF1ZXJ5UGFyYW1zOiB7DQogICAgICAgIHBhZ2VOdW06IDEsDQogICAgICAgIHBhZ2VTaXplOiAxMA0KICAgICAgfSwNCiAgICAgIC8vIOihqOWNleWPguaVsA0KICAgICAgZm9ybToge30sDQogICAgICAvLyDooajljZXmoKHpqowNCiAgICAgIHJ1bGVzOiB7DQogICAgICAgIHhuOiBbDQogICAgICAgICAgeyByZXF1aXJlZDogdHJ1ZSwgbWVzc2FnZTogIuivt+mAieaLqeW5tOS7vSIsIHRyaWdnZXI6ICJjaGFuZ2UiIH0NCiAgICAgICAgXSwNCiAgICAgICAgeHE6IFsNCiAgICAgICAgICB7IHJlcXVpcmVkOiB0cnVlLCBtZXNzYWdlOiAi6K+36YCJ5oup5a2m5pyf57G75Z6LIiwgdHJpZ2dlcjogImNoYW5nZSIgfQ0KICAgICAgICBdLA0KICAgICAgICBreHJxOiBbDQogICAgICAgICAgeyByZXF1aXJlZDogdHJ1ZSwgbWVzc2FnZTogIuivt+mAieaLqeW8gOWtpuaXpeacnyIsIHRyaWdnZXI6ICJjaGFuZ2UiIH0NCiAgICAgICAgXSwNCiAgICAgICAganNycTogWw0KICAgICAgICAgIHsgcmVxdWlyZWQ6IHRydWUsIG1lc3NhZ2U6ICLor7fpgInmi6nnu5PmnZ/ml6XmnJ8iLCB0cmlnZ2VyOiAiY2hhbmdlIiB9DQogICAgICAgIF0NCiAgICAgIH0NCiAgICB9DQogIH0sDQogIGNyZWF0ZWQoKSB7DQogICAgdGhpcy5pbml0WWVhck9wdGlvbnMoKQ0KICAgIHRoaXMuZ2V0TGlzdCgpDQogICAgLy8g6aG25qCP5YiH5o2i5b2T5YmN5a2m5pyf5ZCO77yM6Ieq5Yqo5Yi35paw5pys6aG15pWw5o2uDQogICAgdGhpcy4kcm9vdC4kb24oJ3NlbWVzdGVyLWN1cnJlbnQtY2hhbmdlZCcsIHRoaXMuaGFuZGxlQ3VycmVudENoYW5nZWQpDQogIH0sDQogIGJlZm9yZURlc3Ryb3koKSB7DQogICAgdGhpcy4kcm9vdC4kb2ZmKCdzZW1lc3Rlci1jdXJyZW50LWNoYW5nZWQnLCB0aGlzLmhhbmRsZUN1cnJlbnRDaGFuZ2VkKQ0KICB9LA0KICBtZXRob2RzOiB7DQogICAgLyoqIOmhtuagj+WIh+aNouW9k+WJjeWtpuacn+WQjuiHquWKqOWIt+aWsCAqLw0KICAgIGhhbmRsZUN1cnJlbnRDaGFuZ2VkKCkgew0KICAgICAgdGhpcy5nZXRMaXN0KCkNCiAgICB9LA0KICAgIC8qKiDliJ3lp4vljJblrablubTpgInpobkgKi8NCiAgICBpbml0WWVhck9wdGlvbnMoKSB7DQogICAgICBjb25zdCBjdXJyZW50ID0gbmV3IERhdGUoKS5nZXRGdWxsWWVhcigpDQogICAgICBjb25zdCBsaXN0ID0gW10NCiAgICAgIGZvciAobGV0IGkgPSBjdXJyZW50IC0gMTA7IGkgPD0gY3VycmVudCArIDEwOyBpKyspIHsNCiAgICAgICAgbGlzdC5wdXNoKGkpDQogICAgICB9DQogICAgICB0aGlzLnllYXJPcHRpb25zID0gbGlzdA0KICAgIH0sDQogICAgLyoqIOWtpuW5tCvlrabmnJ8gLT4g5a2m5pyf5Luj5Y+377yI5aaCIDIwMjYgKyAwMSA9IDIwMjYwMe+8iSAqLw0KICAgIGJ1aWxkTmQoeG4sIHhxKSB7DQogICAgICBpZiAoeG4gPT09IHVuZGVmaW5lZCB8fCB4biA9PT0gbnVsbCB8fCB4biA9PT0gJycgfHwgIXhxKSByZXR1cm4gJycNCiAgICAgIHJldHVybiBTdHJpbmcoeG4pICsgU3RyaW5nKHhxKQ0KICAgIH0sDQogICAgLyoqIOWtpuacn+S7o+WPtyAtPiDlrabmnJ/lkI3np7DvvIjlpoIgMjAyNjAxIC0+IDIwMjblubTmmKXlraPlrabmnJ/vvIkgKi8NCiAgICBnZXRTZW1lc3Rlck5hbWUobmQpIHsNCiAgICAgIGlmICghbmQpIHJldHVybiAnJw0KICAgICAgY29uc3QgcyA9IFN0cmluZyhuZCkNCiAgICAgIGNvbnN0IHhuID0gcy5zbGljZSgwLCA0KQ0KICAgICAgY29uc3QgeHEgPSBzLnNsaWNlKDQpDQogICAgICBjb25zdCBtYXAgPSB7ICcwMSc6ICfmmKXlraPlrabmnJ8nLCAnMDInOiAn5aSP5a2j5a2m5pyfJywgJzAzJzogJ+eni+Wto+WtpuacnycgfQ0KICAgICAgcmV0dXJuIHhuICsgJ+W5tCcgKyAobWFwW3hxXSB8fCAn56ysJyArIHhxICsgJ+WtpuacnycpDQogICAgfSwNCiAgICAvKiog5a2m5pyf5Luj5Y+3IC0+IHt4biwgeHF9ICovDQogICAgcGFyc2VOZChuZCkgew0KICAgICAgaWYgKCFuZCkgcmV0dXJuIHsgeG46IHVuZGVmaW5lZCwgeHE6IHVuZGVmaW5lZCB9DQogICAgICBjb25zdCBzID0gU3RyaW5nKG5kKQ0KICAgICAgcmV0dXJuIHsgeG46IHMuc2xpY2UoMCwgNCksIHhxOiBzLnNsaWNlKDQpIH0NCiAgICB9LA0KICAgIC8qKiDmlrDlop7ml7bmoKHpqozlrabmnJ/lkI3np7DvvIjlubTku70r5a2m5pyf57G75Z6L5ou85o6l77yJ5piv5ZCm5bey5a2Y5Zyo5LqO6KGo5qC8ICovDQogICAgaXNTZW1lc3Rlck5hbWVEdXBsaWNhdGVkKCkgew0KICAgICAgaWYgKCF0aGlzLmlzQWRkKSByZXR1cm4gZmFsc2UNCiAgICAgIGNvbnN0IG5kID0gdGhpcy5idWlsZE5kKHRoaXMuZm9ybS54biwgdGhpcy5mb3JtLnhxKQ0KICAgICAgaWYgKCFuZCkgcmV0dXJuIGZhbHNlDQogICAgICByZXR1cm4gdGhpcy5zZW1lc3Rlckxpc3Quc29tZShpdGVtID0+IFN0cmluZyhpdGVtLm5kKSA9PT0gU3RyaW5nKG5kKSkNCiAgICB9LA0KICAgIC8qKiDlubTku70v5a2m5pyf57G75Z6L5YiH5o2i5pe25a6e5pe25Yi35paw6aG26YOo6YeN5aSN5o+Q56S6ICovDQogICAgY2hlY2tTZW1lc3Rlck5hbWVVbmlxdWUoKSB7DQogICAgICB0aGlzLiRmb3JjZVVwZGF0ZSgpDQogICAgfSwNCiAgICAvKiog6K++5pe257O75pWw5pa55qGI57yW5Y+3IC0+IOWQjeensCAqLw0KICAgIGdldENvZWZmaWNpZW50TGFiZWwodmFsdWUpIHsNCiAgICAgIGlmICghdmFsdWUgJiYgdmFsdWUgIT09IDApIHJldHVybiAnLScNCiAgICAgIGNvbnN0IGZvdW5kID0gdGhpcy5jb2VmZmljaWVudE9wdGlvbnMuZmluZChvID0+IFN0cmluZyhvLnZhbHVlKSA9PT0gU3RyaW5nKHZhbHVlKSkNCiAgICAgIHJldHVybiBmb3VuZCA/IGZvdW5kLmxhYmVsIDogdmFsdWUNCiAgICB9LA0KICAgIC8qKiDmoLzlvI/ljJblkI7nq68gTG9jYWxEYXRlVGltZe+8iDIwMjYtMDItMjNUMDA6MDA6MDAgLT4gMjAyNi0wMi0yM++8iSAqLw0KICAgIGZvcm1hdERhdGUodmFsdWUpIHsNCiAgICAgIGlmICghdmFsdWUpIHJldHVybiAnJw0KICAgICAgcmV0dXJuIFN0cmluZyh2YWx1ZSkuc2xpY2UoMCwgMTApDQogICAgfSwNCiAgICAvKiog5p+l6K+i5a2m5pyf5YiX6KGoICovDQogICAgZ2V0TGlzdCgpIHsNCiAgICAgIHRoaXMubG9hZGluZyA9IHRydWUNCiAgICAgIGxpc3RTZW1lc3Rlcih0aGlzLnF1ZXJ5UGFyYW1zKS50aGVuKHJlc3BvbnNlID0+IHsNCiAgICAgICAgY29uc3QgZGF0YSA9IHJlc3BvbnNlLmRhdGEgfHwge30NCiAgICAgICAgdGhpcy5zZW1lc3Rlckxpc3QgPSBkYXRhLnJlY29yZHMgfHwgW10NCiAgICAgICAgdGhpcy50b3RhbCA9IGRhdGEudG90YWwgfHwgMA0KICAgICAgICB0aGlzLmxvYWRpbmcgPSBmYWxzZQ0KICAgICAgfSkuY2F0Y2goKCkgPT4gew0KICAgICAgICB0aGlzLnNlbWVzdGVyTGlzdCA9IFtdDQogICAgICAgIHRoaXMudG90YWwgPSAwDQogICAgICAgIHRoaXMubG9hZGluZyA9IGZhbHNlDQogICAgICB9KQ0KICAgIH0sDQogICAgLyoqIOWkmumAieWPmOWMliAqLw0KICAgIGhhbmRsZVNlbGVjdGlvbkNoYW5nZShzZWxlY3Rpb24pIHsNCiAgICAgIHRoaXMuaWRzID0gc2VsZWN0aW9uLm1hcChpdGVtID0+IGl0ZW0ubmQpDQogICAgICB0aGlzLnNpbmdsZSA9IHNlbGVjdGlvbi5sZW5ndGggIT09IDENCiAgICAgIHRoaXMubXVsdGlwbGUgPSAhc2VsZWN0aW9uLmxlbmd0aA0KICAgIH0sDQogICAgLyoqIOWNleWHu+ihjOmAieS4reWPmOWMlu+8muiusOW9leW9k+WJjemAieS4reeahOWtpuacn++8jOeUqOS6juWQr+eUqOOAjOe8lui+keagoeWOhuOAjSAqLw0KICAgIGhhbmRsZUN1cnJlbnRDaGFuZ2UoY3VycmVudFJvdykgew0KICAgICAgdGhpcy5jdXJyZW50U2VtZXN0ZXIgPSBjdXJyZW50Um93IHx8IG51bGwNCiAgICB9LA0KICAgIC8qKiDnu4Too4Xmj5DkuqTmlbDmja4gKi8NCiAgICBidWlsZFBheWxvYWQoZm9ybSkgew0KICAgICAgY29uc3QgbG9ja1ZhbHVlID0gZm9ybS5sb2NrVmFsdWUgIT09IHVuZGVmaW5lZCAmJiBmb3JtLmxvY2tWYWx1ZSAhPT0gbnVsbCA/IGZvcm0ubG9ja1ZhbHVlIDogJycNCiAgICAgIHJldHVybiB7DQogICAgICAgIGRlbEZsYWc6IDAsDQogICAgICAgIG5kOiB0aGlzLmJ1aWxkTmQoZm9ybS54biwgZm9ybS54cSksDQogICAgICAgIGRxeHE6ICEhZm9ybS5kcXhxLA0KICAgICAgICBreHJxOiBmb3JtLmt4cnEgPyBmb3JtLmt4cnEgKyAnVDAwOjAwOjAwJyA6IG51bGwsDQogICAgICAgIGpzcnE6IGZvcm0uanNycSA/IGZvcm0uanNycSArICdUMDA6MDA6MDAnIDogbnVsbCwNCiAgICAgICAgdGtic3A6ICEhZm9ybS50a2JzcCwNCiAgICAgICAganp0azogISFmb3JtLmp6dGssDQogICAgICAgIHpqY2pkamc6ICEhZm9ybS56amNqZGpnLA0KICAgICAgICBqd2xkc2h0azogISFmb3JtLmp3bGRzaHRrLA0KICAgICAgICBrc3hzZmFiaDogZm9ybS5rc3hzZmFiaCB8fCBudWxsLA0KICAgICAgICBzZHpzOiBmb3JtLnNkenMsDQogICAgICAgIHNkamxkdzogbG9ja1ZhbHVlID09PSAnJyA/ICcnIDogbG9ja1ZhbHVlICsgZm9ybS5sb2NrVW5pdCwNCiAgICAgICAgeGg6IGZvcm0ueGgsDQogICAgICAgIGpzb256ZDogInsnMSc6MX0iLA0KICAgICAgICBrc3Rqc2o6IG51bGwNCiAgICAgIH0NCiAgICB9LA0KICAgIC8qKiDmlrDlop7mjInpkq4gKi8NCiAgICBoYW5kbGVBZGQoKSB7DQogICAgICB0aGlzLnJlc2V0KCkNCiAgICAgIHRoaXMuaXNBZGQgPSB0cnVlDQogICAgICB0aGlzLm9wZW4gPSB0cnVlDQogICAgICB0aGlzLnRpdGxlID0gIuWtpuacn+S/oeaBryAtIOaWsOWiniINCiAgICB9LA0KICAgIC8qKiDnvJbovpHmjInpkq4gKi8NCiAgICBoYW5kbGVVcGRhdGUocm93KSB7DQogICAgICBjb25zdCBzZW1lc3RlcklkID0gcm93ICYmIHJvdy5uZCA/IHJvdy5uZCA6IHRoaXMuaWRzWzBdDQogICAgICBpZiAoIXNlbWVzdGVySWQpIHJldHVybg0KICAgICAgdGhpcy5yZXNldCgpDQogICAgICB0aGlzLmlzQWRkID0gZmFsc2UNCiAgICAgIGdldFNlbWVzdGVyKHNlbWVzdGVySWQpLnRoZW4ocmVzcG9uc2UgPT4gew0KICAgICAgICBjb25zdCBkYXRhID0gcmVzcG9uc2UuZGF0YSB8fCB7fQ0KICAgICAgICBjb25zdCB7IHhuLCB4cSB9ID0gdGhpcy5wYXJzZU5kKGRhdGEubmQpDQogICAgICAgIC8vIOino+aekOmUgeWumuaXtumVv++8iOWmgiAiMuWRqCIgLyAiMeaciCIgLyAiMSLvvIkNCiAgICAgICAgbGV0IGxvY2tWYWx1ZSA9IGRhdGEuc2RqbGR3DQogICAgICAgIGxldCBsb2NrVW5pdCA9ICflkagnDQogICAgICAgIGlmIChsb2NrVmFsdWUpIHsNCiAgICAgICAgICBjb25zdCBzID0gU3RyaW5nKGxvY2tWYWx1ZSkNCiAgICAgICAgICBpZiAocy5lbmRzV2l0aCgn5ZGoJykpIHsgbG9ja1ZhbHVlID0gcy5zbGljZSgwLCAtMSk7IGxvY2tVbml0ID0gJ+WRqCcgfQ0KICAgICAgICAgIGVsc2UgaWYgKHMuZW5kc1dpdGgoJ+aciCcpKSB7IGxvY2tWYWx1ZSA9IHMuc2xpY2UoMCwgLTEpOyBsb2NrVW5pdCA9ICfmnIgnIH0NCiAgICAgICAgfQ0KICAgICAgICB0aGlzLmZvcm0gPSB7DQogICAgICAgICAgeG46IHhuLA0KICAgICAgICAgIHhxOiB4cSwNCiAgICAgICAgICBkcXhxOiAhIWRhdGEuZHF4cSwNCiAgICAgICAgICBqenRrOiAhIWRhdGEuanp0aywNCiAgICAgICAgICB0a2JzcDogISFkYXRhLnRrYnNwLA0KICAgICAgICAgIHpqY2pkamc6ICEhZGF0YS56amNqZGpnLA0KICAgICAgICAgIGp3bGRzaHRrOiAhIWRhdGEuandsZHNodGssDQogICAgICAgICAga3N4c2ZhYmg6IGRhdGEua3N4c2ZhYmgsDQogICAgICAgICAga3hycTogdGhpcy5mb3JtYXREYXRlKGRhdGEua3hycSksDQogICAgICAgICAganNycTogdGhpcy5mb3JtYXREYXRlKGRhdGEuanNycSksDQogICAgICAgICAgc2R6czogZGF0YS5zZHpzLA0KICAgICAgICAgIGxvY2tWYWx1ZTogbG9ja1ZhbHVlLA0KICAgICAgICAgIGxvY2tVbml0OiBsb2NrVW5pdCwNCiAgICAgICAgICB4aDogZGF0YS54aA0KICAgICAgICB9DQogICAgICAgIHRoaXMub3BlbiA9IHRydWUNCiAgICAgICAgdGhpcy50aXRsZSA9ICLlrabmnJ/kv6Hmga8gLSDnvJbovpEiDQogICAgICB9KS5jYXRjaCgoKSA9PiB7IH0pDQogICAgfSwNCiAgICAvKiog57yW6L6R5qCh5Y6G5oyJ6ZKu77ya5a+55b2T5YmN6YCJ5Lit55qE5a2m5pyf57yW6L6R5qCh5Y6GICovDQogICAgaGFuZGxlRWRpdENhbGVuZGFyKCkgew0KICAgICAgY29uc3Qgcm93ID0gdGhpcy5jdXJyZW50U2VtZXN0ZXINCiAgICAgIGlmICghcm93IHx8ICFyb3cubmQpIHJldHVybg0KICAgICAgdGhpcy4kcm91dGVyLnB1c2goew0KICAgICAgICBwYXRoOiAnL3RlYWNoQnVzaW5lc3Mvc2VtZXN0ZXIvc2VtZXN0ZXJDYWxlbmRhcicsDQogICAgICAgIHF1ZXJ5OiB7IG5kOiByb3cubmQsIG5hbWU6IHRoaXMuZ2V0U2VtZXN0ZXJOYW1lKHJvdy5uZCkgfQ0KICAgICAgfSkNCiAgICB9LA0KICAgIC8qKiDliKDpmaTmjInpkq4gKi8NCiAgICBoYW5kbGVEZWxldGUocm93KSB7DQogICAgICBjb25zdCBzZW1lc3RlcklkcyA9IHJvdyAmJiByb3cubmQgPyBbcm93Lm5kXSA6IHRoaXMuaWRzDQogICAgICBpZiAoIXNlbWVzdGVySWRzLmxlbmd0aCkgcmV0dXJuDQogICAgICBjb25zdCBuYW1lcyA9IHNlbWVzdGVySWRzLm1hcChuZCA9PiB0aGlzLmdldFNlbWVzdGVyTmFtZShuZCkpLmpvaW4oJ+OAgScpDQogICAgICB0aGlzLiRtb2RhbC5jb25maXJtKCfnoa7orqTliKDpmaTlrabmnJ/jgJAnICsgbmFtZXMgKyAn44CR5ZCX77yfJykudGhlbigoKSA9PiB7DQogICAgICAgIC8vIOaJuemHj+WIoOmZpO+8mumAkOS4quiwg+eUqA0KICAgICAgICBjb25zdCBkZWxMaXN0ID0gc2VtZXN0ZXJJZHMubWFwKG5kID0+IGRlbFNlbWVzdGVyKG5kKSkNCiAgICAgICAgcmV0dXJuIFByb21pc2UuYWxsKGRlbExpc3QpDQogICAgICB9KS50aGVuKCgpID0+IHsNCiAgICAgICAgdGhpcy5nZXRMaXN0KCkNCiAgICAgICAgdGhpcy4kbW9kYWwubXNnU3VjY2Vzcygi5Yig6Zmk5oiQ5YqfIikNCiAgICAgIH0pLmNhdGNoKCgpID0+IHsgfSkNCiAgICB9LA0KICAgIC8qKiDmj5DkuqTooajljZUgKi8NCiAgICBzdWJtaXRGb3JtKCkgew0KICAgICAgaWYgKHRoaXMuaXNTZW1lc3Rlck5hbWVEdXBsaWNhdGVkKCkpIHsNCiAgICAgICAgdGhpcy4kbW9kYWwubXNnV2FybmluZygi6K+l5a2m5pyf5bey5a2Y5Zyo77yM5LiN6IO96YeN5aSN5re75YqgIikNCiAgICAgICAgcmV0dXJuDQogICAgICB9DQogICAgICB0aGlzLiRyZWZzWyJmb3JtIl0udmFsaWRhdGUodmFsaWQgPT4gew0KICAgICAgICBpZiAodmFsaWQpIHsNCiAgICAgICAgICBjb25zdCBwYXlsb2FkID0gdGhpcy5idWlsZFBheWxvYWQodGhpcy5mb3JtKQ0KICAgICAgICAgIGNvbnN0IHNlbGZOZCA9IHBheWxvYWQubmQNCiAgICAgICAgICAvLyDlvZPliY3lrabmnJ/lhajlsYDlj6rog73mnInkuIDkuKrvvJroi6XmnKzmrKHorr7kuLrlvZPliY3vvIzlhYjmiorlhbbku5YgZHF4cT10cnVlIOeahOWPlua2iA0KICAgICAgICAgIGNvbnN0IGNhbmNlbE90aGVycyA9IHBheWxvYWQuZHF4cQ0KICAgICAgICAgICAgPyB0aGlzLmNhbmNlbE90aGVyQ3VycmVudChzZWxmTmQpDQogICAgICAgICAgICA6IFByb21pc2UucmVzb2x2ZSgpDQogICAgICAgICAgY2FuY2VsT3RoZXJzLnRoZW4oKCkgPT4gew0KICAgICAgICAgICAgaWYgKHRoaXMuaXNBZGQpIHsNCiAgICAgICAgICAgICAgcmV0dXJuIGFkZFNlbWVzdGVyKHBheWxvYWQpDQogICAgICAgICAgICB9DQogICAgICAgICAgICByZXR1cm4gdXBkYXRlU2VtZXN0ZXIocGF5bG9hZCkNCiAgICAgICAgICB9KS50aGVuKCgpID0+IHsNCiAgICAgICAgICAgIHRoaXMuJG1vZGFsLm1zZ1N1Y2Nlc3ModGhpcy5pc0FkZCA/ICLmlrDlop7miJDlip8iIDogIuS/ruaUueaIkOWKnyIpDQogICAgICAgICAgICB0aGlzLm9wZW4gPSBmYWxzZQ0KICAgICAgICAgICAgdGhpcy5nZXRMaXN0KCkNCiAgICAgICAgICB9KS5jYXRjaCgoKSA9PiB7IH0pDQogICAgICAgIH0NCiAgICAgIH0pDQogICAgfSwNCiAgICAvKiog5Y+W5raI5YW25a6D4oCc5b2T5YmN5a2m5pyf4oCd77yM5L+d6K+B5YWo5bGA5ZSv5LiAICovDQogICAgY2FuY2VsT3RoZXJDdXJyZW50KHNlbGZOZCkgew0KICAgICAgcmV0dXJuIGxpc3RTZW1lc3Rlcih7IHBhZ2VOdW06IDEsIHBhZ2VTaXplOiAxMDAgfSkudGhlbihyZXNwb25zZSA9PiB7DQogICAgICAgIGNvbnN0IGRhdGEgPSByZXNwb25zZS5kYXRhIHx8IHt9DQogICAgICAgIGNvbnN0IGxpc3QgPSBkYXRhLnJlY29yZHMgfHwgW10NCiAgICAgICAgY29uc3Qgb3RoZXJzID0gbGlzdC5maWx0ZXIoaSA9PiBpLmRxeHEgJiYgU3RyaW5nKGkubmQpICE9PSBTdHJpbmcoc2VsZk5kKSkNCiAgICAgICAgaWYgKCFvdGhlcnMubGVuZ3RoKSByZXR1cm4gUHJvbWlzZS5yZXNvbHZlKCkNCiAgICAgICAgcmV0dXJuIFByb21pc2UuYWxsKG90aGVycy5tYXAobyA9PiB1cGRhdGVTZW1lc3Rlcih7IC4uLm8sIGRxeHE6IGZhbHNlIH0pKSkNCiAgICAgIH0pDQogICAgfSwNCiAgICAvKiog6YeN572u6KGo5Y2VICovDQogICAgcmVzZXQoKSB7DQogICAgICB0aGlzLmZvcm0gPSB7DQogICAgICAgIHhuOiB1bmRlZmluZWQsDQogICAgICAgIHhxOiB1bmRlZmluZWQsDQogICAgICAgIGRxeHE6IGZhbHNlLA0KICAgICAgICBqenRrOiBmYWxzZSwNCiAgICAgICAgdGtic3A6IGZhbHNlLA0KICAgICAgICB6amNqZGpnOiBmYWxzZSwNCiAgICAgICAgandsZHNodGs6IGZhbHNlLA0KICAgICAgICBrc3hzZmFiaDogdW5kZWZpbmVkLA0KICAgICAgICBreHJxOiB1bmRlZmluZWQsDQogICAgICAgIGpzcnE6IHVuZGVmaW5lZCwNCiAgICAgICAgc2R6czogMjAsDQogICAgICAgIGxvY2tWYWx1ZTogMSwNCiAgICAgICAgbG9ja1VuaXQ6ICflkagnLA0KICAgICAgICB4aDogMQ0KICAgICAgfQ0KICAgICAgdGhpcy5yZXNldEZvcm0oImZvcm0iKQ0KICAgIH0sDQogICAgLyoqIOWPlua2iOaMiemSriAqLw0KICAgIGNhbmNlbCgpIHsNCiAgICAgIHRoaXMub3BlbiA9IGZhbHNlDQogICAgICB0aGlzLnJlc2V0KCkNCiAgICB9DQogIH0NCn0NCg=="},{"version":3,"sources":["index.vue"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AA0MA;;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;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;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;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;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;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;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA","file":"index.vue","sourceRoot":"src/views/teachBusiness/semester","sourcesContent":["<template>\r\n <div class=\"app-container teach-semester\">\r\n <!-- 工具栏 -->\r\n <el-row :gutter=\"10\" class=\"mb8\">\r\n <el-col :span=\"1.5\">\r\n <el-button type=\"primary\" plain icon=\"el-icon-plus\" size=\"mini\" @click=\"handleAdd\">新添</el-button>\r\n </el-col>\r\n <el-col :span=\"1.8\">\r\n <el-button type=\"success\" plain icon=\"el-icon-date\" size=\"mini\" :disabled=\"!currentSemester\"\r\n @click=\"handleEditCalendar\">\r\n 编辑校历\r\n </el-button>\r\n </el-col>\r\n <el-col :span=\"1.5\">\r\n <el-button type=\"danger\" plain icon=\"el-icon-delete\" size=\"mini\" :disabled=\"multiple\" @click=\"handleDelete\">\r\n 批量删除\r\n </el-button>\r\n </el-col>\r\n </el-row>\r\n\r\n <!-- 数据表格 -->\r\n <el-table v-loading=\"loading\" :data=\"semesterList\" border :height=\"tableHeight\" highlight-current-row\r\n @current-change=\"handleCurrentChange\" @selection-change=\"handleSelectionChange\">\r\n <el-table-column type=\"selection\" align=\"center\" width=\"50\" />\r\n <el-table-column label=\"学期名称\" align=\"center\" width=\"250\">\r\n <template slot-scope=\"scope\">\r\n <span>{{ getSemesterName(scope.row.nd) }}</span>\r\n </template>\r\n </el-table-column>\r\n <el-table-column label=\"当前\" align=\"center\" width=\"100\">\r\n <template slot-scope=\"scope\">\r\n <el-tag v-if=\"scope.row.dqxq\" type=\"success\" size=\"mini\">当前</el-tag>\r\n <span v-else>-</span>\r\n </template>\r\n </el-table-column>\r\n <el-table-column label=\"开学日期\" align=\"center\" prop=\"kxrq\" width=\"160\">\r\n <template slot-scope=\"scope\">\r\n <span>{{ formatDate(scope.row.kxrq) }}</span>\r\n </template>\r\n </el-table-column>\r\n <el-table-column label=\"结束日期\" align=\"center\" prop=\"jsrq\" width=\"160\">\r\n <template slot-scope=\"scope\">\r\n <span>{{ formatDate(scope.row.jsrq) }}</span>\r\n </template>\r\n </el-table-column>\r\n <el-table-column label=\"周数\" align=\"center\" prop=\"sdzs\" width=\"100\" />\r\n <el-table-column label=\"调课不审批\" align=\"center\" width=\"120\">\r\n <template slot-scope=\"scope\">\r\n <el-tag :type=\"scope.row.tkbsp ? 'primary' : 'info'\" size=\"mini\">{{ scope.row.tkbsp ? '是' : '否' }}</el-tag>\r\n </template>\r\n </el-table-column>\r\n <el-table-column label=\"禁止调课\" align=\"center\" width=\"120\">\r\n <template slot-scope=\"scope\">\r\n <el-tag :type=\"scope.row.jztk ? 'danger' : 'info'\" size=\"mini\">{{ scope.row.jztk ? '是' : '否' }}</el-tag>\r\n </template>\r\n </el-table-column>\r\n <el-table-column label=\"终结成绩定及格\" align=\"center\" width=\"160\">\r\n <template slot-scope=\"scope\">\r\n <el-tag :type=\"scope.row.zjcjdjg ? 'primary' : 'info'\" size=\"mini\">{{ scope.row.zjcjdjg ? '是' : '否'\r\n }}</el-tag>\r\n </template>\r\n </el-table-column>\r\n <el-table-column label=\"课时系数方案\" align=\"center\" width=\"160\">\r\n <template slot-scope=\"scope\">\r\n <span>{{ getCoefficientLabel(scope.row.ksxsfabh) }}</span>\r\n </template>\r\n </el-table-column>\r\n <el-table-column label=\"锁定时长\" align=\"center\" width=\"100\">\r\n <template slot-scope=\"scope\">\r\n <span>{{ scope.row.sdjldw || '-' }}</span>\r\n </template>\r\n </el-table-column>\r\n <el-table-column label=\"操作\" align=\"center\" fixed=\"right\" class-name=\"table-action-column\">\r\n <template slot-scope=\"scope\">\r\n <el-button type=\"text\" size=\"mini\" icon=\"el-icon-edit\" @click=\"handleUpdate(scope.row)\">编辑</el-button>\r\n <el-button type=\"text\" size=\"mini\" icon=\"el-icon-delete\" class=\"text-danger\"\r\n @click=\"handleDelete(scope.row)\">删除</el-button>\r\n </template>\r\n </el-table-column>\r\n </el-table>\r\n\r\n <pagination v-show=\"total > 0\" :total=\"total\" :page.sync=\"queryParams.pageNum\" :limit.sync=\"queryParams.pageSize\"\r\n @pagination=\"getList\" />\r\n\r\n <!-- 学期信息弹窗 -->\r\n <el-dialog :title=\"title\" :visible.sync=\"open\" width=\"900px\" append-to-body class=\"semester-dialog\">\r\n <el-alert v-if=\"isSemesterNameDuplicated()\" class=\"semester-dup-alert\" type=\"warning\" show-icon\r\n title=\"该学期已存在,不能重复添加\" :closable=\"false\" />\r\n <el-form ref=\"form\" class=\"semester-dialog-form\" :model=\"form\" :rules=\"rules\" label-width=\"96px\"\r\n label-position=\"right\">\r\n <el-row :gutter=\"20\" class=\"semester-dialog-body\">\r\n <!-- 左侧表单区 -->\r\n <el-col :span=\"15\" class=\"semester-form-col\">\r\n <el-form-item label=\"学期名称\">\r\n <el-input :value=\"getSemesterName(buildNd(form.xn, form.xq))\" readonly placeholder=\"请在下方选择年份和学期类型\"\r\n prefix-icon=\"el-icon-office-building\" />\r\n </el-form-item>\r\n <el-row :gutter=\"14\">\r\n <el-col :span=\"12\">\r\n <el-form-item label=\"年份\" prop=\"xn\">\r\n <el-select v-model=\"form.xn\" placeholder=\"请选择年份\" :disabled=\"!isAdd\" style=\"width: 100%\"\r\n @change=\"checkSemesterNameUnique\">\r\n <el-option v-for=\"item in yearOptions\" :key=\"item\" :label=\"item + '年'\" :value=\"item\" />\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=\"学期类型\" prop=\"xq\">\r\n <el-select v-model=\"form.xq\" placeholder=\"请选择学期类型\" :disabled=\"!isAdd\" style=\"width: 100%\"\r\n @change=\"checkSemesterNameUnique\">\r\n <el-option v-for=\"item in semesterOptions\" :key=\"item.value\" :label=\"item.label\"\r\n :value=\"item.value\" />\r\n </el-select>\r\n </el-form-item>\r\n </el-col>\r\n </el-row>\r\n <el-row :gutter=\"14\">\r\n <el-col :span=\"12\">\r\n <el-form-item label=\"开学日期\" prop=\"kxrq\">\r\n <el-date-picker v-model=\"form.kxrq\" type=\"date\" placeholder=\"开学日期\" value-format=\"yyyy-MM-dd\"\r\n style=\"width: 100%\" />\r\n </el-form-item>\r\n </el-col>\r\n <el-col :span=\"12\">\r\n <el-form-item label=\"结束日期\" prop=\"jsrq\">\r\n <el-date-picker v-model=\"form.jsrq\" type=\"date\" placeholder=\"结束日期\" value-format=\"yyyy-MM-dd\"\r\n style=\"width: 100%\" />\r\n </el-form-item>\r\n </el-col>\r\n </el-row>\r\n <el-row :gutter=\"14\">\r\n <el-col :span=\"12\">\r\n <el-form-item label=\"学期周数\" prop=\"sdzs\">\r\n <el-input-number v-model=\"form.sdzs\" :min=\"1\" :max=\"60\" controls-position=\"right\"\r\n style=\"width: 100%\" />\r\n </el-form-item>\r\n </el-col>\r\n <el-col :span=\"12\">\r\n <el-form-item label=\"课时系数方案\" prop=\"ksxsfabh\">\r\n <el-select v-model=\"form.ksxsfabh\" placeholder=\"请选择\" clearable style=\"width: 100%\">\r\n <el-option v-for=\"item in coefficientOptions\" :key=\"item.value\" :label=\"item.label\"\r\n :value=\"item.value\" />\r\n </el-select>\r\n </el-form-item>\r\n </el-col>\r\n </el-row>\r\n <el-form-item label=\"锁定时长\">\r\n <div class=\"lock-group\">\r\n <el-input-number v-model=\"form.lockValue\" :min=\"0\" :max=\"99\" controls-position=\"right\"\r\n style=\"width: 120px\" />\r\n <el-radio-group v-model=\"form.lockUnit\" class=\"lock-unit\" style=\"margin-left: 28px\">\r\n <el-radio label=\"周\">周</el-radio>\r\n <el-radio label=\"月\">月</el-radio>\r\n </el-radio-group>\r\n </div>\r\n </el-form-item>\r\n <div class=\"form-tip\">以当前周星期四中午12点为界限,锁定【锁定周数】周的教学实施计划,被锁定的教学实施计划不允许教员自行调整。</div>\r\n </el-col>\r\n\r\n <!-- 右侧业务开关区 -->\r\n <el-col :span=\"9\" class=\"semester-switch-col\">\r\n <div class=\"switch-panel-title\">业务开关</div>\r\n <div class=\"switch-panel\">\r\n <div class=\"switch-item\">\r\n <el-checkbox v-model=\"form.dqxq\">当前学期</el-checkbox>\r\n <div class=\"switch-tip\">设定当前学期后,系统启动时会自动将该学期设置为默认学期。</div>\r\n </div>\r\n\r\n <div class=\"switch-item\">\r\n <el-checkbox v-model=\"form.jztk\">禁止调课</el-checkbox>\r\n <div class=\"switch-tip\">设定【禁止调课】后,教学信息系统中就无法对课程信息进行调整。</div>\r\n </div>\r\n\r\n <div class=\"switch-item\">\r\n <el-checkbox v-model=\"form.tkbsp\">调课不审批</el-checkbox>\r\n <div class=\"switch-tip\">\r\n 设定【调课不审批】后,在教学信息系统中调课时,如果只是更改教员,或更改授课地点,调课申请会立即生效。而对于改变授课地点,调课申请会立即生效。而对于改变授课时间、增加或减少授课教员的调课申请依然不受该设置影响,依然需要逐级审批后才能生效。\r\n </div>\r\n </div>\r\n\r\n <div class=\"switch-item\">\r\n <el-checkbox v-model=\"form.zjcjdjg\">终结成绩定及格</el-checkbox>\r\n <div class=\"switch-tip\">设定【终结成绩定及格】后,学员终结性成绩不及格的,最终成绩即为不及格。</div>\r\n </div>\r\n\r\n <div class=\"switch-item\">\r\n <el-checkbox v-model=\"form.jwldshtk\">教务机关审核教学计划调整</el-checkbox>\r\n <div class=\"switch-tip\">勾选:教务机关需要从行政入口对每个教学计划调整申请进行审批,同时再由管理员身份教务参谋进行最后的把关;不勾选:仅由管理员身份教务参谋进行最后的把关。</div>\r\n </div>\r\n </div>\r\n </el-col>\r\n </el-row>\r\n </el-form>\r\n <div slot=\"footer\" class=\"dialog-footer\">\r\n <el-button type=\"primary\" @click=\"submitForm\">确 定</el-button>\r\n <el-button @click=\"cancel\">取 消</el-button>\r\n </div>\r\n </el-dialog>\r\n </div>\r\n</template>\r\n\r\n<script>\r\nimport { listSemester, getSemester, addSemester, updateSemester, delSemester } from \"@/api/teachBusiness/semester\"\r\n\r\nexport default {\r\n name: \"Semester\",\r\n data() {\r\n return {\r\n // 遮罩层\r\n loading: true,\r\n // 表格高度\r\n tableHeight: window.innerHeight - 280,\r\n // 总条数\r\n total: 0,\r\n // 学期列表数据\r\n semesterList: [],\r\n // 选中的学期数组\r\n ids: [],\r\n // 当前点击选中的学期\r\n currentSemester: null,\r\n // 非单个禁用\r\n single: true,\r\n // 非多个禁用\r\n multiple: true,\r\n // 弹出层标题\r\n title: \"\",\r\n // 是否显示弹出层\r\n open: false,\r\n // 是否新增\r\n isAdd: true,\r\n // 学年选项(当前年份 ± 10 年)\r\n yearOptions: [],\r\n // 学期选项:01 春季、02 夏季、03 秋季\r\n semesterOptions: [\r\n { value: '01', label: '春季学期' },\r\n { value: '02', label: '夏季学期' },\r\n { value: '03', label: '秋季学期' }\r\n ],\r\n // 课时系数方案选项(引用基础数据表,暂以静态占位)\r\n coefficientOptions: [\r\n { value: '1', label: '标准系数方案' },\r\n { value: '2', label: '综合系数方案' },\r\n { value: '3', label: '实训系数方案' }\r\n ],\r\n // 查询参数\r\n queryParams: {\r\n pageNum: 1,\r\n pageSize: 10\r\n },\r\n // 表单参数\r\n form: {},\r\n // 表单校验\r\n rules: {\r\n xn: [\r\n { required: true, message: \"请选择年份\", trigger: \"change\" }\r\n ],\r\n xq: [\r\n { required: true, message: \"请选择学期类型\", trigger: \"change\" }\r\n ],\r\n kxrq: [\r\n { required: true, message: \"请选择开学日期\", trigger: \"change\" }\r\n ],\r\n jsrq: [\r\n { required: true, message: \"请选择结束日期\", trigger: \"change\" }\r\n ]\r\n }\r\n }\r\n },\r\n created() {\r\n this.initYearOptions()\r\n this.getList()\r\n // 顶栏切换当前学期后,自动刷新本页数据\r\n this.$root.$on('semester-current-changed', this.handleCurrentChanged)\r\n },\r\n beforeDestroy() {\r\n this.$root.$off('semester-current-changed', this.handleCurrentChanged)\r\n },\r\n methods: {\r\n /** 顶栏切换当前学期后自动刷新 */\r\n handleCurrentChanged() {\r\n this.getList()\r\n },\r\n /** 初始化学年选项 */\r\n initYearOptions() {\r\n const current = new Date().getFullYear()\r\n const list = []\r\n for (let i = current - 10; i <= current + 10; i++) {\r\n list.push(i)\r\n }\r\n this.yearOptions = list\r\n },\r\n /** 学年+学期 -> 学期代号(如 2026 + 01 = 202601) */\r\n buildNd(xn, xq) {\r\n if (xn === undefined || xn === null || xn === '' || !xq) return ''\r\n return String(xn) + String(xq)\r\n },\r\n /** 学期代号 -> 学期名称(如 202601 -> 2026年春季学期) */\r\n getSemesterName(nd) {\r\n if (!nd) return ''\r\n const s = String(nd)\r\n const xn = s.slice(0, 4)\r\n const xq = s.slice(4)\r\n const map = { '01': '春季学期', '02': '夏季学期', '03': '秋季学期' }\r\n return xn + '年' + (map[xq] || '第' + xq + '学期')\r\n },\r\n /** 学期代号 -> {xn, xq} */\r\n parseNd(nd) {\r\n if (!nd) return { xn: undefined, xq: undefined }\r\n const s = String(nd)\r\n return { xn: s.slice(0, 4), xq: s.slice(4) }\r\n },\r\n /** 新增时校验学期名称(年份+学期类型拼接)是否已存在于表格 */\r\n isSemesterNameDuplicated() {\r\n if (!this.isAdd) return false\r\n const nd = this.buildNd(this.form.xn, this.form.xq)\r\n if (!nd) return false\r\n return this.semesterList.some(item => String(item.nd) === String(nd))\r\n },\r\n /** 年份/学期类型切换时实时刷新顶部重复提示 */\r\n checkSemesterNameUnique() {\r\n this.$forceUpdate()\r\n },\r\n /** 课时系数方案编号 -> 名称 */\r\n getCoefficientLabel(value) {\r\n if (!value && value !== 0) return '-'\r\n const found = this.coefficientOptions.find(o => String(o.value) === String(value))\r\n return found ? found.label : value\r\n },\r\n /** 格式化后端 LocalDateTime(2026-02-23T00:00:00 -> 2026-02-23) */\r\n formatDate(value) {\r\n if (!value) return ''\r\n return String(value).slice(0, 10)\r\n },\r\n /** 查询学期列表 */\r\n getList() {\r\n this.loading = true\r\n listSemester(this.queryParams).then(response => {\r\n const data = response.data || {}\r\n this.semesterList = data.records || []\r\n this.total = data.total || 0\r\n this.loading = false\r\n }).catch(() => {\r\n this.semesterList = []\r\n this.total = 0\r\n this.loading = false\r\n })\r\n },\r\n /** 多选变化 */\r\n handleSelectionChange(selection) {\r\n this.ids = selection.map(item => item.nd)\r\n this.single = selection.length !== 1\r\n this.multiple = !selection.length\r\n },\r\n /** 单击行选中变化:记录当前选中的学期,用于启用「编辑校历」 */\r\n handleCurrentChange(currentRow) {\r\n this.currentSemester = currentRow || null\r\n },\r\n /** 组装提交数据 */\r\n buildPayload(form) {\r\n const lockValue = form.lockValue !== undefined && form.lockValue !== null ? form.lockValue : ''\r\n return {\r\n delFlag: 0,\r\n nd: this.buildNd(form.xn, form.xq),\r\n dqxq: !!form.dqxq,\r\n kxrq: form.kxrq ? form.kxrq + 'T00:00:00' : null,\r\n jsrq: form.jsrq ? form.jsrq + 'T00:00:00' : null,\r\n tkbsp: !!form.tkbsp,\r\n jztk: !!form.jztk,\r\n zjcjdjg: !!form.zjcjdjg,\r\n jwldshtk: !!form.jwldshtk,\r\n ksxsfabh: form.ksxsfabh || null,\r\n sdzs: form.sdzs,\r\n sdjldw: lockValue === '' ? '' : lockValue + form.lockUnit,\r\n xh: form.xh,\r\n jsonzd: \"{'1':1}\",\r\n kstjsj: null\r\n }\r\n },\r\n /** 新增按钮 */\r\n handleAdd() {\r\n this.reset()\r\n this.isAdd = true\r\n this.open = true\r\n this.title = \"学期信息 - 新增\"\r\n },\r\n /** 编辑按钮 */\r\n handleUpdate(row) {\r\n const semesterId = row && row.nd ? row.nd : this.ids[0]\r\n if (!semesterId) return\r\n this.reset()\r\n this.isAdd = false\r\n getSemester(semesterId).then(response => {\r\n const data = response.data || {}\r\n const { xn, xq } = this.parseNd(data.nd)\r\n // 解析锁定时长(如 \"2周\" / \"1月\" / \"1\")\r\n let lockValue = data.sdjldw\r\n let lockUnit = '周'\r\n if (lockValue) {\r\n const s = String(lockValue)\r\n if (s.endsWith('周')) { lockValue = s.slice(0, -1); lockUnit = '周' }\r\n else if (s.endsWith('月')) { lockValue = s.slice(0, -1); lockUnit = '月' }\r\n }\r\n this.form = {\r\n xn: xn,\r\n xq: xq,\r\n dqxq: !!data.dqxq,\r\n jztk: !!data.jztk,\r\n tkbsp: !!data.tkbsp,\r\n zjcjdjg: !!data.zjcjdjg,\r\n jwldshtk: !!data.jwldshtk,\r\n ksxsfabh: data.ksxsfabh,\r\n kxrq: this.formatDate(data.kxrq),\r\n jsrq: this.formatDate(data.jsrq),\r\n sdzs: data.sdzs,\r\n lockValue: lockValue,\r\n lockUnit: lockUnit,\r\n xh: data.xh\r\n }\r\n this.open = true\r\n this.title = \"学期信息 - 编辑\"\r\n }).catch(() => { })\r\n },\r\n /** 编辑校历按钮:对当前选中的学期编辑校历 */\r\n handleEditCalendar() {\r\n const row = this.currentSemester\r\n if (!row || !row.nd) return\r\n this.$router.push({\r\n path: '/teachBusiness/semester/semesterCalendar',\r\n query: { nd: row.nd, name: this.getSemesterName(row.nd) }\r\n })\r\n },\r\n /** 删除按钮 */\r\n handleDelete(row) {\r\n const semesterIds = row && row.nd ? [row.nd] : this.ids\r\n if (!semesterIds.length) return\r\n const names = semesterIds.map(nd => this.getSemesterName(nd)).join('、')\r\n this.$modal.confirm('确认删除学期【' + names + '】吗?').then(() => {\r\n // 批量删除:逐个调用\r\n const delList = semesterIds.map(nd => delSemester(nd))\r\n return Promise.all(delList)\r\n }).then(() => {\r\n this.getList()\r\n this.$modal.msgSuccess(\"删除成功\")\r\n }).catch(() => { })\r\n },\r\n /** 提交表单 */\r\n submitForm() {\r\n if (this.isSemesterNameDuplicated()) {\r\n this.$modal.msgWarning(\"该学期已存在,不能重复添加\")\r\n return\r\n }\r\n this.$refs[\"form\"].validate(valid => {\r\n if (valid) {\r\n const payload = this.buildPayload(this.form)\r\n const selfNd = payload.nd\r\n // 当前学期全局只能有一个:若本次设为当前,先把其他 dqxq=true 的取消\r\n const cancelOthers = payload.dqxq\r\n ? this.cancelOtherCurrent(selfNd)\r\n : Promise.resolve()\r\n cancelOthers.then(() => {\r\n if (this.isAdd) {\r\n return addSemester(payload)\r\n }\r\n return updateSemester(payload)\r\n }).then(() => {\r\n this.$modal.msgSuccess(this.isAdd ? \"新增成功\" : \"修改成功\")\r\n this.open = false\r\n this.getList()\r\n }).catch(() => { })\r\n }\r\n })\r\n },\r\n /** 取消其它“当前学期”,保证全局唯一 */\r\n cancelOtherCurrent(selfNd) {\r\n return listSemester({ pageNum: 1, pageSize: 100 }).then(response => {\r\n const data = response.data || {}\r\n const list = data.records || []\r\n const others = list.filter(i => i.dqxq && String(i.nd) !== String(selfNd))\r\n if (!others.length) return Promise.resolve()\r\n return Promise.all(others.map(o => updateSemester({ ...o, dqxq: false })))\r\n })\r\n },\r\n /** 重置表单 */\r\n reset() {\r\n this.form = {\r\n xn: undefined,\r\n xq: undefined,\r\n dqxq: false,\r\n jztk: false,\r\n tkbsp: false,\r\n zjcjdjg: false,\r\n jwldshtk: false,\r\n ksxsfabh: undefined,\r\n kxrq: undefined,\r\n jsrq: undefined,\r\n sdzs: 20,\r\n lockValue: 1,\r\n lockUnit: '周',\r\n xh: 1\r\n }\r\n this.resetForm(\"form\")\r\n },\r\n /** 取消按钮 */\r\n cancel() {\r\n this.open = false\r\n this.reset()\r\n }\r\n }\r\n}\r\n</script>\r\n\r\n<style scoped lang=\"scss\">\r\n.teach-semester {\r\n .mb8 {\r\n margin-bottom: 8px;\r\n }\r\n\r\n /* 弹窗内表单:防止 label 文字换行、字段拥挤换行 */\r\n ::v-deep .el-dialog__body {\r\n padding-top: 16px;\r\n padding-bottom: 16px;\r\n }\r\n\r\n /* 对话框整体两栏布局 */\r\n .semester-dialog-body {\r\n display: block;\r\n }\r\n\r\n /* 顶部学期重复提示与表单间距 */\r\n .semester-dup-alert {\r\n margin-bottom: 16px;\r\n }\r\n\r\n .semester-form-col {\r\n padding-right: 4px;\r\n }\r\n\r\n .semester-switch-col {\r\n padding-left: 24px;\r\n border-left: 1px solid #ebeef5;\r\n }\r\n\r\n .semester-dialog-form {\r\n ::v-deep .el-form-item {\r\n margin-bottom: 18px;\r\n }\r\n\r\n ::v-deep .el-form-item__label {\r\n white-space: nowrap;\r\n line-height: 32px;\r\n padding-right: 10px;\r\n color: #606266;\r\n }\r\n\r\n ::v-deep .el-form-item__content {\r\n line-height: 32px;\r\n }\r\n\r\n .el-input,\r\n .el-select,\r\n .el-date-editor {\r\n width: 100%;\r\n }\r\n }\r\n\r\n .form-tip {\r\n font-size: 12px;\r\n color: #909399;\r\n line-height: 1.5;\r\n margin-top: 4px;\r\n white-space: normal;\r\n padding-left: 2px;\r\n }\r\n\r\n .lock-group {\r\n display: flex;\r\n align-items: center;\r\n }\r\n\r\n .switch-panel-title {\r\n font-size: 14px;\r\n font-weight: 600;\r\n color: #303133;\r\n margin-bottom: 14px;\r\n padding-left: 2px;\r\n }\r\n\r\n .switch-panel {\r\n display: flex;\r\n flex-direction: column;\r\n gap: 12px;\r\n }\r\n\r\n .switch-item {\r\n padding: 11px 13px;\r\n background: #fafafa;\r\n border: 1px solid #ebeef5;\r\n border-radius: 6px;\r\n transition: border-color 0.2s, background 0.2s;\r\n\r\n &:hover {\r\n border-color: var(--edu-green-primary);\r\n background: #fff;\r\n }\r\n\r\n .el-checkbox {\r\n height: 26px;\r\n font-weight: 600;\r\n color: #303133;\r\n }\r\n\r\n .switch-tip {\r\n font-size: 12px;\r\n line-height: 1.6;\r\n color: #909399;\r\n text-align: justify;\r\n margin: 2px 0 0 2px;\r\n }\r\n }\r\n}\r\n</style>\r\n"]}]}