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

1 line
36 KiB
JSON

{"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\\syllabus\\index.vue?vue&type=script&lang=js","dependencies":[{"path":"C:\\Users\\Admin\\Desktop\\education\\frontend\\src\\views\\teachBusiness\\syllabus\\index.vue","mtime":1787643791760},{"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:Ly8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KDQppbXBvcnQgew0KICBhZGRTeWxsYWJ1cywNCiAgZGVsZXRlU3lsbGFidXMsDQogIGJhdGNoRGVsZXRlU3lsbGFidXMsDQogIHVwZGF0ZVN5bGxhYnVzLA0KICBsaXN0U3lsbGFidXMsDQogIGxpc3RTeWxsYWJ1c0J5WnlkaEFuZFR5DQp9IGZyb20gJ0AvYXBpL3RlYWNoQnVzaW5lc3Mvc3lsbGFidXMnDQppbXBvcnQgeyBsaXN0TWFqb3IgfSBmcm9tICdAL2FwaS9zdWJqZWN0TWFqb3IvbWFqb3InDQppbXBvcnQgeyBsaXN0S2IgfSBmcm9tICdAL2FwaS90ZWFjaE9mZmljZS9rYicNCmltcG9ydCB7IGxpc3RPZmZpY2UgfSBmcm9tICdAL2FwaS90ZWFjaE9mZmljZS9vZmZpY2UnDQppbXBvcnQgeyBnZXREaWN0cyB9IGZyb20gJ0AvYXBpL3N5c3RlbS9kaWN0L2RhdGEnDQoNCmNvbnN0IFJFRkVSRU5DRV9EQVRBX1BBR0VfU0laRSA9IDEwMDAwDQpjb25zdCBDT1VSU0VfVFlQRV9ESUNUX0NPREUgPSAnY291cnNlX3R5cGUnDQoNCmV4cG9ydCBkZWZhdWx0IHsNCiAgbmFtZTogJ1N5bGxhYnVzSW5kZXgnLA0KICBkYXRhKCkgew0KICAgIHJldHVybiB7DQogICAgICBsb2FkaW5nOiBmYWxzZSwNCiAgICAgIHNlYXJjaEZvcm06IHsNCiAgICAgICAgenlkaDogJycsDQogICAgICAgIHR5OiAnJw0KICAgICAgfSwNCiAgICAgIHRhYmxlRGF0YTogW10sDQogICAgICB0b3RhbDogMCwNCiAgICAgIHBhZ2VOdW06IDEsDQogICAgICBwYWdlU2l6ZTogMjAsDQogICAgICBzZWxlY3Rpb246IFtdLA0KICAgICAgcmVmZXJlbmNlRGF0YUxvYWRpbmc6IGZhbHNlLA0KICAgICAgbWFqb3JPcHRpb25zOiBbXSwNCiAgICAgIHN1YmplY3RPcHRpb25zOiBbXSwNCiAgICAgIGNvdXJzZVR5cGVPcHRpb25zOiBbXSwNCiAgICAgIG9mZmljZU9wdGlvbnM6IFtdLA0KICAgICAgZGlhbG9nOiB7DQogICAgICAgIHZpc2libGU6IGZhbHNlLA0KICAgICAgICB0aXRsZTogJycsDQogICAgICAgIHN1Ym1pdHRpbmc6IGZhbHNlLA0KICAgICAgICBmb3JtOiB0aGlzLmNyZWF0ZUVtcHR5Rm9ybSgpDQogICAgICB9LA0KICAgICAgcnVsZXM6IHsNCiAgICAgICAgenlkaDogW3sgcmVxdWlyZWQ6IHRydWUsIG1lc3NhZ2U6ICfor7fpgInmi6nkuJPkuJonLCB0cmlnZ2VyOiAnY2hhbmdlJyB9XSwNCiAgICAgICAga2JoOiBbeyByZXF1aXJlZDogdHJ1ZSwgbWVzc2FnZTogJ+ivt+mAieaLqeivvueoiycsIHRyaWdnZXI6ICdjaGFuZ2UnIH1dLA0KICAgICAgICB4cWRjOiBbeyByZXF1aXJlZDogdHJ1ZSwgbWVzc2FnZTogJ+ivt+i+k+WFpeWtpuacn+esrOasoScsIHRyaWdnZXI6ICdibHVyJyB9XSwNCiAgICAgICAga2x4OiBbeyByZXF1aXJlZDogdHJ1ZSwgbWVzc2FnZTogJ+ivt+mAieaLqeivvuexu+WeiycsIHRyaWdnZXI6ICdjaGFuZ2UnIH1dLA0KICAgICAgICB4czogW3sgcmVxdWlyZWQ6IHRydWUsIG1lc3NhZ2U6ICfor7fovpPlhaXlrabml7YnLCB0cmlnZ2VyOiAnYmx1cicgfV0sDQogICAgICAgIHR5OiBbeyByZXF1aXJlZDogdHJ1ZSwgbWVzc2FnZTogJ+ivt+mAieaLqeWBnOeUqOagh+ivhicsIHRyaWdnZXI6ICdjaGFuZ2UnIH1dDQogICAgICB9DQogICAgfQ0KICB9LA0KICBjb21wdXRlZDogew0KICAgIHBhZ2VkRGF0YSgpIHsNCiAgICAgIGNvbnN0IHN0YXJ0ID0gKHRoaXMucGFnZU51bSAtIDEpICogdGhpcy5wYWdlU2l6ZQ0KICAgICAgcmV0dXJuIHRoaXMudGFibGVEYXRhLnNsaWNlKHN0YXJ0LCBzdGFydCArIHRoaXMucGFnZVNpemUpDQogICAgfQ0KICB9LA0KICBjcmVhdGVkKCkgew0KICAgIHRoaXMuZmV0Y2hMaXN0KCkNCiAgICB0aGlzLmxvYWRSZWZlcmVuY2VEYXRhKCkNCiAgfSwNCiAgbWV0aG9kczogew0KICAgIGxvYWRSZWZlcmVuY2VEYXRhKCkgew0KICAgICAgdGhpcy5yZWZlcmVuY2VEYXRhTG9hZGluZyA9IHRydWUNCiAgICAgIGNvbnN0IHF1ZXJ5ID0geyBwYWdlTnVtOiAxLCBwYWdlU2l6ZTogUkVGRVJFTkNFX0RBVEFfUEFHRV9TSVpFIH0NCiAgICAgIGNvbnN0IHJlcXVlc3RzID0gWw0KICAgICAgICBsaXN0TWFqb3IocXVlcnkpLA0KICAgICAgICBsaXN0S2IocXVlcnkpLA0KICAgICAgICBsaXN0T2ZmaWNlKHF1ZXJ5KSwNCiAgICAgICAgZ2V0RGljdHMoQ09VUlNFX1RZUEVfRElDVF9DT0RFKQ0KICAgICAgXS5tYXAocmVxdWVzdCA9PiB7DQogICAgICAgIHJldHVybiByZXF1ZXN0DQogICAgICAgICAgLnRoZW4ocmVzcG9uc2UgPT4gdGhpcy5nZXRSZXNwb25zZVJlY29yZHMocmVzcG9uc2UpKQ0KICAgICAgICAgIC5jYXRjaCgoKSA9PiBbXSkNCiAgICAgIH0pDQoNCiAgICAgIFByb21pc2UuYWxsKHJlcXVlc3RzKS50aGVuKChbbWFqb3JzLCBzdWJqZWN0cywgb2ZmaWNlcywgY291cnNlVHlwZXNdKSA9PiB7DQogICAgICAgIHRoaXMubWFqb3JPcHRpb25zID0gdGhpcy5nZXRVbmlxdWVPcHRpb25zKG1ham9ycywgJ3p5ZGgnLCAnenltYycpDQogICAgICAgIHRoaXMuc3ViamVjdE9wdGlvbnMgPSB0aGlzLmdldFVuaXF1ZU9wdGlvbnMoc3ViamVjdHMsICdrYmgnLCAna21jJykNCiAgICAgICAgdGhpcy5vZmZpY2VPcHRpb25zID0gdGhpcy5nZXRVbmlxdWVPcHRpb25zKG9mZmljZXMsICdqeXNkaCcsICdqeXNtYycpDQogICAgICAgIHRoaXMuY291cnNlVHlwZU9wdGlvbnMgPSB0aGlzLmdldFVuaXF1ZU9wdGlvbnMoY291cnNlVHlwZXMsICdkaWN0VmFsdWUnLCAnZGljdExhYmVsJykNCiAgICAgIH0pLmZpbmFsbHkoKCkgPT4gew0KICAgICAgICB0aGlzLnJlZmVyZW5jZURhdGFMb2FkaW5nID0gZmFsc2UNCiAgICAgIH0pDQogICAgfSwNCiAgICBnZXRSZXNwb25zZVJlY29yZHMocmVzcG9uc2UpIHsNCiAgICAgIGNvbnN0IGRhdGEgPSByZXNwb25zZS5kYXRhIHx8IHt9DQoNCiAgICAgIHJldHVybiBBcnJheS5pc0FycmF5KGRhdGEpID8gZGF0YSA6IGRhdGEucmVjb3JkcyB8fCBbXQ0KICAgIH0sDQogICAgZ2V0VW5pcXVlT3B0aW9ucyhpdGVtcywgdmFsdWVLZXksIGxhYmVsS2V5KSB7DQogICAgICBjb25zdCB2YWx1ZXMgPSBuZXcgU2V0KCkNCg0KICAgICAgcmV0dXJuIGl0ZW1zLmZpbHRlcihpdGVtID0+IHsNCiAgICAgICAgY29uc3QgdmFsdWUgPSBpdGVtW3ZhbHVlS2V5XQ0KICAgICAgICBjb25zdCBsYWJlbCA9IGl0ZW1bbGFiZWxLZXldDQogICAgICAgIGlmICghdmFsdWUgfHwgIWxhYmVsIHx8IHZhbHVlcy5oYXModmFsdWUpKSB7DQogICAgICAgICAgcmV0dXJuIGZhbHNlDQogICAgICAgIH0NCiAgICAgICAgdmFsdWVzLmFkZCh2YWx1ZSkNCg0KICAgICAgICByZXR1cm4gdHJ1ZQ0KICAgICAgfSkNCiAgICB9LA0KICAgIC8qIC0tLS0tLS0tLS0g5YiX6KGo5Yqg6L29IC0tLS0tLS0tLS0gKi8NCiAgICBmZXRjaExpc3QoKSB7DQogICAgICB0aGlzLmxvYWRpbmcgPSB0cnVlDQogICAgICBjb25zdCB7IHp5ZGgsIHR5IH0gPSB0aGlzLnNlYXJjaEZvcm0NCiAgICAgIC8vIOS4k+S4muS7o+WPt+S4juWBnOeUqOagh+ivhuWQjOaXtue7meWHuuaXtui1sOWQjuerryAvbGlzdEJ5WnlkaEFuZFR577yb5ZCm5YiZ5p+l5YWo6YOo5ZCO5pys5Zyw6L+H5rukDQogICAgICBjb25zdCB1c2VBcGlRdWVyeSA9IHp5ZGggJiYgdHkgIT09ICcnICYmIHR5ICE9PSBudWxsICYmIHR5ICE9PSB1bmRlZmluZWQNCiAgICAgIGNvbnN0IHJlcSA9IHVzZUFwaVF1ZXJ5DQogICAgICAgID8gbGlzdFN5bGxhYnVzQnlaeWRoQW5kVHkoenlkaCwgdHkpDQogICAgICAgIDogbGlzdFN5bGxhYnVzKCkNCiAgICAgIHJlcS50aGVuKHJlc3BvbnNlID0+IHsNCiAgICAgICAgbGV0IGxpc3QgPSByZXNwb25zZS5kYXRhIHx8IFtdDQogICAgICAgIGlmICghdXNlQXBpUXVlcnkpIHsNCiAgICAgICAgICBpZiAoenlkaCkgbGlzdCA9IGxpc3QuZmlsdGVyKGkgPT4gaS56eWRoICYmIGkuenlkaC5pbmRleE9mKHp5ZGgpICE9PSAtMSkNCiAgICAgICAgICBpZiAodHkgIT09ICcnICYmIHR5ICE9PSBudWxsICYmIHR5ICE9PSB1bmRlZmluZWQpIHsNCiAgICAgICAgICAgIGxpc3QgPSBsaXN0LmZpbHRlcihpID0+IE51bWJlcihpLnR5KSA9PT0gTnVtYmVyKHR5KSkNCiAgICAgICAgICB9DQogICAgICAgIH0NCiAgICAgICAgdGhpcy50YWJsZURhdGEgPSBsaXN0DQogICAgICAgIHRoaXMudG90YWwgPSBsaXN0Lmxlbmd0aA0KICAgICAgICB0aGlzLnBhZ2VOdW0gPSAxDQogICAgICB9KS5jYXRjaCgoKSA9PiB7DQogICAgICAgIHRoaXMudGFibGVEYXRhID0gW10NCiAgICAgICAgdGhpcy50b3RhbCA9IDANCiAgICAgIH0pLmZpbmFsbHkoKCkgPT4gew0KICAgICAgICB0aGlzLmxvYWRpbmcgPSBmYWxzZQ0KICAgICAgfSkNCiAgICB9LA0KICAgIGhhbmRsZVF1ZXJ5KCkgew0KICAgICAgdGhpcy5mZXRjaExpc3QoKQ0KICAgIH0sDQogICAgaGFuZGxlUmVzZXQoKSB7DQogICAgICB0aGlzLnNlYXJjaEZvcm0gPSB7IHp5ZGg6ICcnLCB0eTogJycgfQ0KICAgICAgdGhpcy5mZXRjaExpc3QoKQ0KICAgIH0sDQogICAgaGFuZGxlU2VsZWN0aW9uQ2hhbmdlKHZhbCkgew0KICAgICAgdGhpcy5zZWxlY3Rpb24gPSB2YWwNCiAgICB9LA0KDQogICAgLyogLS0tLS0tLS0tLSDmlrDlop4gLyDnvJbovpEgLS0tLS0tLS0tLSAqLw0KICAgIGhhbmRsZUFkZCgpIHsNCiAgICAgIHRoaXMuZGlhbG9nLnRpdGxlID0gJ+aWsOWinuaVmeWtpuWkp+e6sicNCiAgICAgIHRoaXMuZGlhbG9nLmZvcm0gPSB0aGlzLmNyZWF0ZUVtcHR5Rm9ybSgpDQogICAgICB0aGlzLmRpYWxvZy52aXNpYmxlID0gdHJ1ZQ0KICAgICAgdGhpcy4kbmV4dFRpY2soKCkgPT4gew0KICAgICAgICBpZiAodGhpcy4kcmVmcy5zeWxsYWJ1c0Zvcm0pIHRoaXMuJHJlZnMuc3lsbGFidXNGb3JtLmNsZWFyVmFsaWRhdGUoKQ0KICAgICAgfSkNCiAgICB9LA0KICAgIGhhbmRsZUVkaXQocm93KSB7DQogICAgICB0aGlzLmRpYWxvZy50aXRsZSA9ICfnvJbovpHmlZnlrablpKfnurInDQogICAgICB0aGlzLmRpYWxvZy5mb3JtID0gT2JqZWN0LmFzc2lnbih7fSwgdGhpcy5jcmVhdGVFbXB0eUZvcm0oKSwgcm93KQ0KICAgICAgdGhpcy5kaWFsb2cudmlzaWJsZSA9IHRydWUNCiAgICAgIHRoaXMuJG5leHRUaWNrKCgpID0+IHsNCiAgICAgICAgaWYgKHRoaXMuJHJlZnMuc3lsbGFidXNGb3JtKSB0aGlzLiRyZWZzLnN5bGxhYnVzRm9ybS5jbGVhclZhbGlkYXRlKCkNCiAgICAgIH0pDQogICAgfSwNCiAgICBzdWJtaXREaWFsb2coKSB7DQogICAgICB0aGlzLiRyZWZzLnN5bGxhYnVzRm9ybS52YWxpZGF0ZSh2YWxpZCA9PiB7DQogICAgICAgIGlmICghdmFsaWQpIHJldHVybg0KICAgICAgICB0aGlzLmRpYWxvZy5zdWJtaXR0aW5nID0gdHJ1ZQ0KICAgICAgICBjb25zdCBwYXlsb2FkID0gdGhpcy5jbGVhblBheWxvYWQodGhpcy5kaWFsb2cuZm9ybSkNCiAgICAgICAgY29uc3QgaXNFZGl0ID0gISFwYXlsb2FkLmJoDQogICAgICAgIGNvbnN0IHJlcSA9IGlzRWRpdCA/IHVwZGF0ZVN5bGxhYnVzKHBheWxvYWQpIDogYWRkU3lsbGFidXMocGF5bG9hZCkNCiAgICAgICAgcmVxLnRoZW4oKCkgPT4gew0KICAgICAgICAgIHRoaXMuJG1lc3NhZ2Uuc3VjY2Vzcyhpc0VkaXQgPyAn5L+u5pS55oiQ5YqfJyA6ICfmlrDlop7miJDlip8nKQ0KICAgICAgICAgIHRoaXMuZGlhbG9nLnZpc2libGUgPSBmYWxzZQ0KICAgICAgICAgIHRoaXMuZmV0Y2hMaXN0KCkNCiAgICAgICAgfSkuZmluYWxseSgoKSA9PiB7DQogICAgICAgICAgdGhpcy5kaWFsb2cuc3VibWl0dGluZyA9IGZhbHNlDQogICAgICAgIH0pDQogICAgICB9KQ0KICAgIH0sDQoNCiAgICAvKiAtLS0tLS0tLS0tIOWIoOmZpCAvIOaJuemHj+WIoOmZpCAtLS0tLS0tLS0tICovDQogICAgaGFuZGxlRGVsZXRlKHJvdykgew0KICAgICAgdGhpcy4kY29uZmlybSgn5Yig6Zmk5ZCO6K+l5p2h6K6w5b2V5bCG572u5Li644CM5YGc55So44CN77yM5piv5ZCm57un57ut77yfJywgJ+aPkOekuicsIHsNCiAgICAgICAgY29uZmlybUJ1dHRvblRleHQ6ICfnoa7lrponLA0KICAgICAgICBjYW5jZWxCdXR0b25UZXh0OiAn5Y+W5raIJywNCiAgICAgICAgdHlwZTogJ3dhcm5pbmcnDQogICAgICB9KS50aGVuKCgpID0+IHsNCiAgICAgICAgcmV0dXJuIGRlbGV0ZVN5bGxhYnVzKHJvdy5iaCkNCiAgICAgIH0pLnRoZW4oKCkgPT4gew0KICAgICAgICB0aGlzLiRtZXNzYWdlLnN1Y2Nlc3MoJ+WIoOmZpOaIkOWKnycpDQogICAgICAgIHRoaXMuZmV0Y2hMaXN0KCkNCiAgICAgIH0pLmNhdGNoKCgpID0+IHt9KQ0KICAgIH0sDQogICAgaGFuZGxlQmF0Y2hEZWxldGUoKSB7DQogICAgICBpZiAoIXRoaXMuc2VsZWN0aW9uLmxlbmd0aCkgew0KICAgICAgICB0aGlzLiRtZXNzYWdlLndhcm5pbmcoJ+ivt+WFiOWLvumAieimgeWIoOmZpOeahOiusOW9lScpDQogICAgICAgIHJldHVybg0KICAgICAgfQ0KICAgICAgY29uc3QgYmhMaXN0ID0gdGhpcy5zZWxlY3Rpb24ubWFwKHJvdyA9PiByb3cuYmgpDQogICAgICB0aGlzLiRjb25maXJtKCfnoa7lrprliKDpmaTmiYDpgIkgJyArIGJoTGlzdC5sZW5ndGggKyAnIOadoeiusOW9leWQl++8n++8iOWwhue9ruS4uuOAjOWBnOeUqOOAje+8iScsICfmj5DnpLonLCB7DQogICAgICAgIGNvbmZpcm1CdXR0b25UZXh0OiAn56Gu5a6aJywNCiAgICAgICAgY2FuY2VsQnV0dG9uVGV4dDogJ+WPlua2iCcsDQogICAgICAgIHR5cGU6ICd3YXJuaW5nJw0KICAgICAgfSkudGhlbigoKSA9PiB7DQogICAgICAgIHJldHVybiBiYXRjaERlbGV0ZVN5bGxhYnVzKGJoTGlzdCkNCiAgICAgIH0pLnRoZW4oKCkgPT4gew0KICAgICAgICB0aGlzLiRtZXNzYWdlLnN1Y2Nlc3MoJ+aJuemHj+WIoOmZpOaIkOWKnycpDQogICAgICAgIHRoaXMuZmV0Y2hMaXN0KCkNCiAgICAgIH0pLmNhdGNoKCgpID0+IHt9KQ0KICAgIH0sDQoNCiAgICAvKiAtLS0tLS0tLS0tIOS4i+i9ve+8iOaXoOWQjuerr+aOpeWPo++8iSAtLS0tLS0tLS0tICovDQogICAgaGFuZGxlRG93bmxvYWQoKSB7DQogICAgICB0aGlzLiRtZXNzYWdlLndhcm5pbmcoJ+WQjuerr+aaguacquaPkOS+m+ivpeaOpeWPoycpDQogICAgfSwNCg0KICAgIC8qIC0tLS0tLS0tLS0g5YiG6aG1IC0tLS0tLS0tLS0gKi8NCiAgICBoYW5kbGVTaXplQ2hhbmdlKHNpemUpIHsNCiAgICAgIHRoaXMucGFnZVNpemUgPSBzaXplDQogICAgICB0aGlzLnBhZ2VOdW0gPSAxDQogICAgfSwNCiAgICBoYW5kbGVQYWdlQ2hhbmdlKHBhZ2UpIHsNCiAgICAgIHRoaXMucGFnZU51bSA9IHBhZ2UNCiAgICB9LA0KDQogICAgLyogLS0tLS0tLS0tLSDlt6XlhbcgLS0tLS0tLS0tLSAqLw0KICAgIGNyZWF0ZUVtcHR5Rm9ybSgpIHsNCiAgICAgIHJldHVybiB7DQogICAgICAgIGJoOiAnJywNCiAgICAgICAgenlkaDogJycsDQogICAgICAgIGtiaDogJycsDQogICAgICAgIHhxZGM6IDEsDQogICAgICAgIGtseDogJycsDQogICAgICAgIHhzOiAwLA0KICAgICAgICB0eTogMCwNCiAgICAgICAgamM6ICcnLA0KICAgICAgICB4ZjogbnVsbCwNCiAgICAgICAga2NkdzogJycsDQogICAgICAgIGtza3M6IDAsDQogICAgICAgIG1rOiAnJywNCiAgICAgICAgY2pmejogJycsDQogICAgICAgIGJqcnh5cGpmOiAwLA0KICAgICAgICBsbHhzOiAwLA0KICAgICAgICBzanhzOiAwLA0KICAgICAgICB6a3M6IDAsDQogICAgICAgIGtza3NieHM6IDAsDQogICAgICAgIGRna2M6IDAsDQogICAgICAgIGp5c2RoOiAnJw0KICAgICAgfQ0KICAgIH0sDQogICAgLyoqIOenu+mZpOepuuWAvO+8iCcnL251bGwvdW5kZWZpbmVk77yJ77yM5L+d55WZIDAg562J5pyJ5pWI5YC8ICovDQogICAgY2xlYW5QYXlsb2FkKG9iaikgew0KICAgICAgY29uc3QgcGF5bG9hZCA9IHt9DQogICAgICBPYmplY3Qua2V5cyhvYmopLmZvckVhY2goa2V5ID0+IHsNCiAgICAgICAgY29uc3QgdmFsdWUgPSBvYmpba2V5XQ0KICAgICAgICBpZiAodmFsdWUgIT09ICcnICYmIHZhbHVlICE9PSBudWxsICYmIHZhbHVlICE9PSB1bmRlZmluZWQpIHsNCiAgICAgICAgICBwYXlsb2FkW2tleV0gPSB2YWx1ZQ0KICAgICAgICB9DQogICAgICB9KQ0KICAgICAgcmV0dXJuIHBheWxvYWQNCiAgICB9LA0KICAgIGZtdFllc05vKHZhbCkgew0KICAgICAgcmV0dXJuIE51bWJlcih2YWwpID09PSAxID8gJ+aYrycgOiAn5ZCmJw0KICAgIH0sDQogICAgZm10RGF0ZVRpbWUodmFsKSB7DQogICAgICByZXR1cm4gKHZhbCB8fCAnJykuc3Vic3RyaW5nKDAsIDE2KSB8fCAnLScNCiAgICB9DQogIH0NCn0NCg=="},{"version":3,"sources":["index.vue"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAmRA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;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;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;;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;;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;;AAEA;AACA;AACA;AACA;;AAEA;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","file":"index.vue","sourceRoot":"src/views/teachBusiness/syllabus","sourcesContent":["<template>\r\n <div class=\"app-container syllabus-page\">\r\n <!-- 查询条件 -->\r\n <el-card shadow=\"never\" class=\"search-card\">\r\n <el-form :model=\"searchForm\" label-width=\"100px\" class=\"search-form\" @submit.native.prevent>\r\n <el-row :gutter=\"32\">\r\n <el-col :xs=\"24\" :md=\"8\">\r\n <el-form-item label=\"专业代号\">\r\n <el-input v-model=\"searchForm.zydh\" placeholder=\"请输入专业代号\" clearable />\r\n </el-form-item>\r\n </el-col>\r\n <el-col :xs=\"24\" :md=\"8\">\r\n <el-form-item label=\"停用标识\">\r\n <el-select v-model=\"searchForm.ty\" placeholder=\"全部\" clearable class=\"w-full\">\r\n <el-option :value=\"0\" label=\"正常\" />\r\n <el-option :value=\"1\" label=\"停用\" />\r\n </el-select>\r\n </el-form-item>\r\n </el-col>\r\n <el-col :xs=\"24\" :md=\"8\">\r\n <div class=\"search-actions\">\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 </div>\r\n </el-col>\r\n </el-row>\r\n </el-form>\r\n </el-card>\r\n\r\n <!-- 数据列表 -->\r\n <el-card shadow=\"never\" class=\"table-card\">\r\n <div class=\"list-header\">\r\n <div class=\"list-title\">教学大纲列表</div>\r\n <div class=\"list-actions\">\r\n <el-button type=\"primary\" icon=\"el-icon-plus\" @click=\"handleAdd\">新增</el-button>\r\n <el-button\r\n type=\"danger\"\r\n plain\r\n icon=\"el-icon-delete\"\r\n :disabled=\"!selection.length\"\r\n @click=\"handleBatchDelete\"\r\n >删除所选</el-button>\r\n <el-button icon=\"el-icon-download\" @click=\"handleDownload\">下载</el-button>\r\n </div>\r\n </div>\r\n <el-table v-loading=\"loading\" :data=\"pagedData\" border stripe highlight-current-row\r\n @selection-change=\"handleSelectionChange\">\r\n <el-table-column type=\"selection\" width=\"50\" align=\"center\" />\r\n <el-table-column prop=\"bh\" label=\"编号\" width=\"170\" show-overflow-tooltip align=\"center\" />\r\n <el-table-column prop=\"zydh\" label=\"专业代号\" width=\"150\" align=\"center\" />\r\n <el-table-column prop=\"kbh\" label=\"课编号\" width=\"110\" show-overflow-tooltip align=\"center\" />\r\n <el-table-column prop=\"jc\" label=\"简称\" width=\"100\" show-overflow-tooltip align=\"center\" />\r\n <el-table-column prop=\"klx\" label=\"课类型\" width=\"80\" align=\"center\" />\r\n <el-table-column prop=\"xqdc\" label=\"学期第次\" width=\"80\" align=\"center\" />\r\n <el-table-column prop=\"xs\" label=\"学时\" width=\"70\" align=\"center\" />\r\n <el-table-column prop=\"xf\" label=\"学分\" width=\"70\" align=\"center\" />\r\n <el-table-column prop=\"llxs\" label=\"理论学时\" width=\"80\" align=\"center\" />\r\n <el-table-column prop=\"sjxs\" label=\"实践学时\" width=\"80\" align=\"center\" />\r\n <el-table-column prop=\"zks\" label=\"周课时\" width=\"70\" align=\"center\" />\r\n <el-table-column prop=\"ksks\" label=\"考试课时\" width=\"80\" align=\"center\" />\r\n <el-table-column label=\"大纲课程\" width=\"90\" align=\"center\">\r\n <template slot-scope=\"scope\">{{ fmtYesNo(scope.row.dgkc) }}</template>\r\n </el-table-column>\r\n <el-table-column label=\"停用\" width=\"80\" align=\"center\">\r\n <template slot-scope=\"scope\">\r\n <el-tag :type=\"Number(scope.row.ty) === 1 ? 'danger' : 'success'\" size=\"mini\">\r\n {{ Number(scope.row.ty) === 1 ? '停用' : '正常' }}\r\n </el-tag>\r\n </template>\r\n </el-table-column>\r\n <el-table-column label=\"启用时间\" width=\"150\" align=\"center\">\r\n <template slot-scope=\"scope\">{{ fmtDateTime(scope.row.qysj) }}</template>\r\n </el-table-column>\r\n <el-table-column label=\"停用时间\" width=\"150\" align=\"center\">\r\n <template slot-scope=\"scope\">{{ fmtDateTime(scope.row.tysj) }}</template>\r\n </el-table-column>\r\n <el-table-column label=\"操作\" width=\"160\" align=\"center\" fixed=\"right\">\r\n <template slot-scope=\"scope\">\r\n <el-button type=\"text\" size=\"mini\" icon=\"el-icon-edit\" @click=\"handleEdit(scope.row)\">编辑</el-button>\r\n <el-button type=\"text\" size=\"mini\" icon=\"el-icon-delete\" class=\"danger-text-btn\" @click=\"handleDelete(scope.row)\">删除</el-button>\r\n </template>\r\n </el-table-column>\r\n </el-table>\r\n <el-pagination\r\n class=\"pagination\"\r\n background\r\n layout=\"total, sizes, prev, pager, next\"\r\n :current-page=\"pageNum\"\r\n :page-size=\"pageSize\"\r\n :total=\"total\"\r\n :page-sizes=\"[10, 20, 50, 100]\"\r\n @size-change=\"handleSizeChange\"\r\n @current-change=\"handlePageChange\"\r\n />\r\n </el-card>\r\n\r\n <!-- 新增/编辑弹窗 -->\r\n <el-dialog :title=\"dialog.title\" :visible.sync=\"dialog.visible\" width=\"720px\" append-to-body\r\n :close-on-click-modal=\"false\">\r\n <el-form ref=\"syllabusForm\" :model=\"dialog.form\" :rules=\"rules\" label-width=\"130px\">\r\n <el-row :gutter=\"20\">\r\n <el-col :span=\"12\">\r\n <el-form-item label=\"专业\" prop=\"zydh\">\r\n <el-select\r\n v-model=\"dialog.form.zydh\"\r\n filterable\r\n clearable\r\n placeholder=\"请选择专业\"\r\n class=\"w-full\"\r\n :loading=\"referenceDataLoading\"\r\n >\r\n <el-option\r\n v-for=\"item in majorOptions\"\r\n :key=\"item.zydh\"\r\n :label=\"item.zymc\"\r\n :value=\"item.zydh\"\r\n />\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=\"kbh\">\r\n <el-select\r\n v-model=\"dialog.form.kbh\"\r\n filterable\r\n clearable\r\n placeholder=\"请选择课程\"\r\n class=\"w-full\"\r\n :loading=\"referenceDataLoading\"\r\n >\r\n <el-option\r\n v-for=\"item in subjectOptions\"\r\n :key=\"item.kbh\"\r\n :label=\"item.kmc\"\r\n :value=\"item.kbh\"\r\n />\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=\"xqdc\">\r\n <el-input-number v-model=\"dialog.form.xqdc\" :min=\"1\" :max=\"20\" controls-position=\"right\" class=\"w-full\" />\r\n </el-form-item>\r\n </el-col>\r\n <el-col :span=\"12\">\r\n <el-form-item label=\"课类型\" prop=\"klx\">\r\n <el-select\r\n v-model=\"dialog.form.klx\"\r\n filterable\r\n clearable\r\n placeholder=\"请选择课类型\"\r\n class=\"w-full\"\r\n :loading=\"referenceDataLoading\"\r\n >\r\n <el-option\r\n v-for=\"item in courseTypeOptions\"\r\n :key=\"item.dictValue\"\r\n :label=\"item.dictLabel\"\r\n :value=\"item.dictValue\"\r\n />\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=\"xs\">\r\n <el-input-number v-model=\"dialog.form.xs\" :min=\"0\" controls-position=\"right\" class=\"w-full\" />\r\n </el-form-item>\r\n </el-col>\r\n <el-col :span=\"12\">\r\n <el-form-item label=\"停用\" prop=\"ty\">\r\n <el-radio-group v-model=\"dialog.form.ty\">\r\n <el-radio :label=\"0\">否</el-radio>\r\n <el-radio :label=\"1\">是</el-radio>\r\n </el-radio-group>\r\n </el-form-item>\r\n </el-col>\r\n <el-col :span=\"12\">\r\n <el-form-item label=\"简称\">\r\n <el-input v-model=\"dialog.form.jc\" placeholder=\"请输入课程简称\" />\r\n </el-form-item>\r\n </el-col>\r\n <el-col :span=\"12\">\r\n <el-form-item label=\"学分\">\r\n <el-input-number v-model=\"dialog.form.xf\" :min=\"0\" :step=\"0.5\" :precision=\"1\" controls-position=\"right\" class=\"w-full\" />\r\n </el-form-item>\r\n </el-col>\r\n <el-col :span=\"12\">\r\n <el-form-item label=\"课程定位\">\r\n <el-input v-model=\"dialog.form.kcdw\" placeholder=\"请输入课程定位\" />\r\n </el-form-item>\r\n </el-col>\r\n <el-col :span=\"12\">\r\n <el-form-item label=\"模块\">\r\n <el-input v-model=\"dialog.form.mk\" placeholder=\"请输入模块\" />\r\n </el-form-item>\r\n </el-col>\r\n <el-col :span=\"12\">\r\n <el-form-item label=\"成绩分制\">\r\n <el-input v-model=\"dialog.form.cjfz\" placeholder=\"请输入成绩分制\" />\r\n </el-form-item>\r\n </el-col>\r\n <el-col :span=\"12\">\r\n <el-form-item label=\"教研室\">\r\n <el-select\r\n v-model=\"dialog.form.jysdh\"\r\n filterable\r\n clearable\r\n placeholder=\"请选择教研室\"\r\n class=\"w-full\"\r\n :loading=\"referenceDataLoading\"\r\n >\r\n <el-option\r\n v-for=\"item in officeOptions\"\r\n :key=\"item.jysdh\"\r\n :label=\"item.jysmc\"\r\n :value=\"item.jysdh\"\r\n />\r\n </el-select>\r\n </el-form-item>\r\n </el-col>\r\n <el-col :span=\"12\">\r\n <el-form-item label=\"考试课时\">\r\n <el-input-number v-model=\"dialog.form.ksks\" :min=\"0\" controls-position=\"right\" class=\"w-full\" />\r\n </el-form-item>\r\n </el-col>\r\n <el-col :span=\"12\">\r\n <el-form-item label=\"理论学时\">\r\n <el-input-number v-model=\"dialog.form.llxs\" :min=\"0\" controls-position=\"right\" class=\"w-full\" />\r\n </el-form-item>\r\n </el-col>\r\n <el-col :span=\"12\">\r\n <el-form-item label=\"实践学时\">\r\n <el-input-number v-model=\"dialog.form.sjxs\" :min=\"0\" controls-position=\"right\" class=\"w-full\" />\r\n </el-form-item>\r\n </el-col>\r\n <el-col :span=\"12\">\r\n <el-form-item label=\"周课时\">\r\n <el-input-number v-model=\"dialog.form.zks\" :min=\"0\" controls-position=\"right\" class=\"w-full\" />\r\n </el-form-item>\r\n </el-col>\r\n <el-col :span=\"12\">\r\n <el-form-item label=\"不计入平均分\">\r\n <el-radio-group v-model=\"dialog.form.bjrxypjf\">\r\n <el-radio :label=\"0\">否</el-radio>\r\n <el-radio :label=\"1\">是</el-radio>\r\n </el-radio-group>\r\n </el-form-item>\r\n </el-col>\r\n <el-col :span=\"12\">\r\n <el-form-item label=\"考试课时不显示\">\r\n <el-radio-group v-model=\"dialog.form.ksksbxs\">\r\n <el-radio :label=\"0\">否</el-radio>\r\n <el-radio :label=\"1\">是</el-radio>\r\n </el-radio-group>\r\n </el-form-item>\r\n </el-col>\r\n <el-col :span=\"12\">\r\n <el-form-item label=\"大纲课程\">\r\n <el-radio-group v-model=\"dialog.form.dgkc\">\r\n <el-radio :label=\"0\">否</el-radio>\r\n <el-radio :label=\"1\">是</el-radio>\r\n </el-radio-group>\r\n </el-form-item>\r\n </el-col>\r\n </el-row>\r\n </el-form>\r\n <div slot=\"footer\" class=\"dialog-footer\">\r\n <el-button @click=\"dialog.visible = false\">取 消</el-button>\r\n <el-button type=\"primary\" :loading=\"dialog.submitting\" @click=\"submitDialog\">确 定</el-button>\r\n </div>\r\n </el-dialog>\r\n </div>\r\n</template>\r\n\r\n<script>\r\nimport {\r\n addSyllabus,\r\n deleteSyllabus,\r\n batchDeleteSyllabus,\r\n updateSyllabus,\r\n listSyllabus,\r\n listSyllabusByZydhAndTy\r\n} from '@/api/teachBusiness/syllabus'\r\nimport { listMajor } from '@/api/subjectMajor/major'\r\nimport { listKb } from '@/api/teachOffice/kb'\r\nimport { listOffice } from '@/api/teachOffice/office'\r\nimport { getDicts } from '@/api/system/dict/data'\r\n\r\nconst REFERENCE_DATA_PAGE_SIZE = 10000\r\nconst COURSE_TYPE_DICT_CODE = 'course_type'\r\n\r\nexport default {\r\n name: 'SyllabusIndex',\r\n data() {\r\n return {\r\n loading: false,\r\n searchForm: {\r\n zydh: '',\r\n ty: ''\r\n },\r\n tableData: [],\r\n total: 0,\r\n pageNum: 1,\r\n pageSize: 20,\r\n selection: [],\r\n referenceDataLoading: false,\r\n majorOptions: [],\r\n subjectOptions: [],\r\n courseTypeOptions: [],\r\n officeOptions: [],\r\n dialog: {\r\n visible: false,\r\n title: '',\r\n submitting: false,\r\n form: this.createEmptyForm()\r\n },\r\n rules: {\r\n zydh: [{ required: true, message: '请选择专业', trigger: 'change' }],\r\n kbh: [{ required: true, message: '请选择课程', trigger: 'change' }],\r\n xqdc: [{ required: true, message: '请输入学期第次', trigger: 'blur' }],\r\n klx: [{ required: true, message: '请选择课类型', trigger: 'change' }],\r\n xs: [{ required: true, message: '请输入学时', trigger: 'blur' }],\r\n ty: [{ required: true, message: '请选择停用标识', trigger: 'change' }]\r\n }\r\n }\r\n },\r\n computed: {\r\n pagedData() {\r\n const start = (this.pageNum - 1) * this.pageSize\r\n return this.tableData.slice(start, start + this.pageSize)\r\n }\r\n },\r\n created() {\r\n this.fetchList()\r\n this.loadReferenceData()\r\n },\r\n methods: {\r\n loadReferenceData() {\r\n this.referenceDataLoading = true\r\n const query = { pageNum: 1, pageSize: REFERENCE_DATA_PAGE_SIZE }\r\n const requests = [\r\n listMajor(query),\r\n listKb(query),\r\n listOffice(query),\r\n getDicts(COURSE_TYPE_DICT_CODE)\r\n ].map(request => {\r\n return request\r\n .then(response => this.getResponseRecords(response))\r\n .catch(() => [])\r\n })\r\n\r\n Promise.all(requests).then(([majors, subjects, offices, courseTypes]) => {\r\n this.majorOptions = this.getUniqueOptions(majors, 'zydh', 'zymc')\r\n this.subjectOptions = this.getUniqueOptions(subjects, 'kbh', 'kmc')\r\n this.officeOptions = this.getUniqueOptions(offices, 'jysdh', 'jysmc')\r\n this.courseTypeOptions = this.getUniqueOptions(courseTypes, 'dictValue', 'dictLabel')\r\n }).finally(() => {\r\n this.referenceDataLoading = false\r\n })\r\n },\r\n getResponseRecords(response) {\r\n const data = response.data || {}\r\n\r\n return Array.isArray(data) ? data : data.records || []\r\n },\r\n getUniqueOptions(items, valueKey, labelKey) {\r\n const values = new Set()\r\n\r\n return items.filter(item => {\r\n const value = item[valueKey]\r\n const label = item[labelKey]\r\n if (!value || !label || values.has(value)) {\r\n return false\r\n }\r\n values.add(value)\r\n\r\n return true\r\n })\r\n },\r\n /* ---------- 列表加载 ---------- */\r\n fetchList() {\r\n this.loading = true\r\n const { zydh, ty } = this.searchForm\r\n // 专业代号与停用标识同时给出时走后端 /listByZydhAndTy;否则查全部后本地过滤\r\n const useApiQuery = zydh && ty !== '' && ty !== null && ty !== undefined\r\n const req = useApiQuery\r\n ? listSyllabusByZydhAndTy(zydh, ty)\r\n : listSyllabus()\r\n req.then(response => {\r\n let list = response.data || []\r\n if (!useApiQuery) {\r\n if (zydh) list = list.filter(i => i.zydh && i.zydh.indexOf(zydh) !== -1)\r\n if (ty !== '' && ty !== null && ty !== undefined) {\r\n list = list.filter(i => Number(i.ty) === Number(ty))\r\n }\r\n }\r\n this.tableData = list\r\n this.total = list.length\r\n this.pageNum = 1\r\n }).catch(() => {\r\n this.tableData = []\r\n this.total = 0\r\n }).finally(() => {\r\n this.loading = false\r\n })\r\n },\r\n handleQuery() {\r\n this.fetchList()\r\n },\r\n handleReset() {\r\n this.searchForm = { zydh: '', ty: '' }\r\n this.fetchList()\r\n },\r\n handleSelectionChange(val) {\r\n this.selection = val\r\n },\r\n\r\n /* ---------- 新增 / 编辑 ---------- */\r\n handleAdd() {\r\n this.dialog.title = '新增教学大纲'\r\n this.dialog.form = this.createEmptyForm()\r\n this.dialog.visible = true\r\n this.$nextTick(() => {\r\n if (this.$refs.syllabusForm) this.$refs.syllabusForm.clearValidate()\r\n })\r\n },\r\n handleEdit(row) {\r\n this.dialog.title = '编辑教学大纲'\r\n this.dialog.form = Object.assign({}, this.createEmptyForm(), row)\r\n this.dialog.visible = true\r\n this.$nextTick(() => {\r\n if (this.$refs.syllabusForm) this.$refs.syllabusForm.clearValidate()\r\n })\r\n },\r\n submitDialog() {\r\n this.$refs.syllabusForm.validate(valid => {\r\n if (!valid) return\r\n this.dialog.submitting = true\r\n const payload = this.cleanPayload(this.dialog.form)\r\n const isEdit = !!payload.bh\r\n const req = isEdit ? updateSyllabus(payload) : addSyllabus(payload)\r\n req.then(() => {\r\n this.$message.success(isEdit ? '修改成功' : '新增成功')\r\n this.dialog.visible = false\r\n this.fetchList()\r\n }).finally(() => {\r\n this.dialog.submitting = false\r\n })\r\n })\r\n },\r\n\r\n /* ---------- 删除 / 批量删除 ---------- */\r\n handleDelete(row) {\r\n this.$confirm('删除后该条记录将置为「停用」,是否继续?', '提示', {\r\n confirmButtonText: '确定',\r\n cancelButtonText: '取消',\r\n type: 'warning'\r\n }).then(() => {\r\n return deleteSyllabus(row.bh)\r\n }).then(() => {\r\n this.$message.success('删除成功')\r\n this.fetchList()\r\n }).catch(() => {})\r\n },\r\n handleBatchDelete() {\r\n if (!this.selection.length) {\r\n this.$message.warning('请先勾选要删除的记录')\r\n return\r\n }\r\n const bhList = this.selection.map(row => row.bh)\r\n this.$confirm('确定删除所选 ' + bhList.length + ' 条记录吗?(将置为「停用」)', '提示', {\r\n confirmButtonText: '确定',\r\n cancelButtonText: '取消',\r\n type: 'warning'\r\n }).then(() => {\r\n return batchDeleteSyllabus(bhList)\r\n }).then(() => {\r\n this.$message.success('批量删除成功')\r\n this.fetchList()\r\n }).catch(() => {})\r\n },\r\n\r\n /* ---------- 下载(无后端接口) ---------- */\r\n handleDownload() {\r\n this.$message.warning('后端暂未提供该接口')\r\n },\r\n\r\n /* ---------- 分页 ---------- */\r\n handleSizeChange(size) {\r\n this.pageSize = size\r\n this.pageNum = 1\r\n },\r\n handlePageChange(page) {\r\n this.pageNum = page\r\n },\r\n\r\n /* ---------- 工具 ---------- */\r\n createEmptyForm() {\r\n return {\r\n bh: '',\r\n zydh: '',\r\n kbh: '',\r\n xqdc: 1,\r\n klx: '',\r\n xs: 0,\r\n ty: 0,\r\n jc: '',\r\n xf: null,\r\n kcdw: '',\r\n ksks: 0,\r\n mk: '',\r\n cjfz: '',\r\n bjrxypjf: 0,\r\n llxs: 0,\r\n sjxs: 0,\r\n zks: 0,\r\n ksksbxs: 0,\r\n dgkc: 0,\r\n jysdh: ''\r\n }\r\n },\r\n /** 移除空值(''/null/undefined),保留 0 等有效值 */\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 fmtYesNo(val) {\r\n return Number(val) === 1 ? '是' : '否'\r\n },\r\n fmtDateTime(val) {\r\n return (val || '').substring(0, 16) || '-'\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.syllabus-page {\r\n .search-card {\r\n margin-bottom: 16px;\r\n\r\n .search-form {\r\n .w-full {\r\n width: 100%;\r\n }\r\n\r\n .search-actions {\r\n padding-top: 4px;\r\n }\r\n }\r\n }\r\n\r\n .table-card {\r\n .list-header {\r\n display: flex;\r\n align-items: center;\r\n justify-content: space-between;\r\n margin-bottom: 16px;\r\n\r\n .list-title {\r\n font-size: 16px;\r\n font-weight: 600;\r\n color: #303133;\r\n }\r\n }\r\n\r\n .pagination {\r\n margin-top: 16px;\r\n text-align: right;\r\n }\r\n }\r\n}\r\n\r\n.danger-text-btn {\r\n color: #f56c6c;\r\n\r\n &:hover {\r\n color: #f78989;\r\n }\r\n}\r\n</style>\r\n"]}]}