forked from liweijie/education
1 line
38 KiB
JSON
1 line
38 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\\teachOffice\\shiftSemester\\PeidangEditDialog.vue?vue&type=script&lang=js","dependencies":[{"path":"C:\\Users\\Admin\\Desktop\\education\\frontend\\src\\views\\teachOffice\\shiftSemester\\PeidangEditDialog.vue","mtime":1787473496107},{"path":"C:\\Users\\Admin\\Desktop\\education\\frontend\\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:Ly8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KDQpleHBvcnQgZGVmYXVsdCB7DQogIG5hbWU6ICdQZWlkYW5nRWRpdERpYWxvZycsDQogIHByb3BzOiB7DQogICAgdmlzaWJsZTogeyB0eXBlOiBCb29sZWFuLCBkZWZhdWx0OiBmYWxzZSB9LA0KICAgIC8qKiDlrablubTlrabmnJ/lkI3np7AgKi8NCiAgICBzZW1lc3Rlck5hbWU6IHsgdHlwZTogU3RyaW5nLCBkZWZhdWx0OiAnMjAxNy0yMDE45a2m5bm056ys5LiA5a2m5pyfJyB9LA0KICAgIC8qKiDnj63mrKHmoIfnrb7vvIjlpoIg5pWZ5a2m5LqU57O7MjAxNue6p+S4k+S4mjAxMTPnj63mrKEwNDE377yJICovDQogICAgY2xhc3NMYWJlbDogeyB0eXBlOiBTdHJpbmcsIGRlZmF1bHQ6ICfmlZnlrabkupTns7syMDE257qn5LiT5LiaMDExM+ePreasoTA0MTcnIH0NCiAgfSwNCiAgZGF0YSgpIHsNCiAgICByZXR1cm4gew0KICAgICAgLy8gPT09PT09PT09PT09PT09PT09PT0g5pe26Ze06L205Y+C5pWwID09PT09PT09PT09PT09PT09PT09DQogICAgICAvKiog6K+l54+t5qyh5byA5a2m6LW35aeL5ZGo5qyhICovDQogICAgICBzdGFydFdlZWs6IDgsDQogICAgICAvKiog6K+l54+t5qyh5a2m5pyf57uT5p2f5ZGo5qyhICovDQogICAgICBlbmRXZWVrOiAzMiwNCiAgICAgIC8qKiDor6Xnj63mrKHmr4/lkajlj6/lronmjpLnmoTmraPor77lrabml7bml7bmlbDvvIjljrvpmaTkuI3og73mjpLor77lrabml7bvvIkgKi8NCiAgICAgIHdlZWtseUNhcGFjaXR5OiA0MCwNCiAgICAgIC8qKiDmnIjliLvluqbvvJrmr48gNCDlkajkuLrkuIDmnIjvvIg4LTExIOesrDHmnIjvvIwxMi0xNSDnrKwy5pyILi4u77yJ77yM6Jma57q/5YiG6ZqUICovDQogICAgICBtb250aEJyZWFrczogWzEyLCAxNiwgMjAsIDI0LCAyOCwgMzJdLA0KDQogICAgICAvLyA9PT09PT09PT09PT09PT09PT09PSDphY3moaPor77nqIvmlbDmja4gPT09PT09PT09PT09PT09PT09PT0NCiAgICAgIGNvdXJzZXM6IFsNCiAgICAgICAgLy8gLS0tLSDpnZ7ov57mjpLor77vvIjmjInlkajlrabml7blronmjpLvvIzok53oibLvvIzmr4/pl6jni6znq4vkuIDnu4TvvIkgLS0tLQ0KICAgICAgICB7IGlkOiAncDEnLCBuYW1lOiAn6K++56iL56eR55uuMDAxJywgc2hvcnQ6ICfmlL/msrsnLCBwbGFuU3RhcnQ6IDgsIGFjdHVhbFN0YXJ0OiA4LCBlbmRXZWVrOiAyMywgY29udGludW91czogZmFsc2UsIHByaW9yaXR5OiAxLCB3ZWVrbHlIb3VyczogNCwgaG91cnM6IDYwLCBzY2hlZHVsZVRpbWU6IHRydWUsIGdyb3VwOiAn57uEMScgfSwNCiAgICAgICAgeyBpZDogJ3AyJywgbmFtZTogJ+ivvueoi+enkeebrjAwMicsIHNob3J0OiAn5Yab5LqLJywgcGxhblN0YXJ0OiA4LCBhY3R1YWxTdGFydDogOCwgZW5kV2VlazogMjAsIGNvbnRpbnVvdXM6IGZhbHNlLCBwcmlvcml0eTogMiwgd2Vla2x5SG91cnM6IDQsIGhvdXJzOiA0OCwgc2NoZWR1bGVUaW1lOiB0cnVlLCBncm91cDogJ+e7hDInIH0sDQogICAgICAgIHsgaWQ6ICdwMycsIG5hbWU6ICfor77nqIvnp5Hnm64wMDMnLCBzaG9ydDogJ+aImOacrycsIHBsYW5TdGFydDogOCwgYWN0dWFsU3RhcnQ6IDEwLCBlbmRXZWVrOiAyMSwgY29udGludW91czogZmFsc2UsIHByaW9yaXR5OiAzLCB3ZWVrbHlIb3VyczogNCwgaG91cnM6IDQ0LCBzY2hlZHVsZVRpbWU6IHRydWUsIGdyb3VwOiAn57uEMycgfSwNCiAgICAgICAgeyBpZDogJ3A0JywgbmFtZTogJ+ivvueoi+enkeebrjAwNCcsIHNob3J0OiAn5oyH5oylJywgcGxhblN0YXJ0OiA4LCBhY3R1YWxTdGFydDogMTIsIGVuZFdlZWs6IDIyLCBjb250aW51b3VzOiBmYWxzZSwgcHJpb3JpdHk6IDQsIHdlZWtseUhvdXJzOiA0LCBob3VyczogNDAsIHNjaGVkdWxlVGltZTogdHJ1ZSwgZ3JvdXA6ICfnu4Q0JyB9LA0KICAgICAgICAvLyAtLS0tIOi/nuaOkuivvu+8iOWNleenkeeLrOi/m++8jOe6ouiJsu+8jOWFseS4uuS4gOe7hO+8iSAtLS0tDQogICAgICAgIHsgaWQ6ICdwNScsIG5hbWU6ICfor77nqIvnp5Hnm64wMDUnLCBzaG9ydDogJ+e7vOWQiOa8lOe7gycsIHBsYW5TdGFydDogOCwgYWN0dWFsU3RhcnQ6IDgsIGVuZFdlZWs6IDEzLCBjb250aW51b3VzOiB0cnVlLCBwcmlvcml0eTogNSwgd2Vla2x5SG91cnM6IDIwLCBob3VyczogMTAwLCBzY2hlZHVsZVRpbWU6IHRydWUsIGdyb3VwOiAn6L+e5o6S57uEJyB9LA0KICAgICAgICB7IGlkOiAncDYnLCBuYW1lOiAn6K++56iL56eR55uuMDA2Jywgc2hvcnQ6ICfph47okKXmi4nnu4MnLCBwbGFuU3RhcnQ6IDE0LCBhY3R1YWxTdGFydDogMTQsIGVuZFdlZWs6IDE2LCBjb250aW51b3VzOiB0cnVlLCBwcmlvcml0eTogNiwgd2Vla2x5SG91cnM6IDI0LCBob3VyczogNDgsIHNjaGVkdWxlVGltZTogdHJ1ZSwgZ3JvdXA6ICfov57mjpLnu4QnIH0NCiAgICAgIF0sDQoNCiAgICAgIC8vID09PT09PT09PT09PT09PT09PT09IOihqOagvOmAieS4reS4juWxnuaAp+iuvue9riA9PT09PT09PT09PT09PT09PT09PQ0KICAgICAgY3VycmVudENvdXJzZTogbnVsbCwNCiAgICAgIHByb3BGb3JtOiB7DQogICAgICAgIHdlZWtseUhvdXJzOiA0LA0KICAgICAgICBzdGFydFdlZWs6IDgsDQogICAgICAgIGVuZFdlZWs6IDE2LA0KICAgICAgICBjb250aW51b3VzOiBmYWxzZSwNCiAgICAgICAgcHJpb3JpdHk6IDEsDQogICAgICAgIGdyb3VwOiAnJw0KICAgICAgfQ0KICAgIH0NCiAgfSwNCiAgY29tcHV0ZWQ6IHsNCiAgICBkaWFsb2dWaXNpYmxlOiB7DQogICAgICBnZXQoKSB7DQogICAgICAgIHJldHVybiB0aGlzLnZpc2libGUNCiAgICAgIH0sDQogICAgICBzZXQodmFsKSB7DQogICAgICAgIHRoaXMuJGVtaXQoJ3VwZGF0ZTp2aXNpYmxlJywgdmFsKQ0KICAgICAgfQ0KICAgIH0sDQogICAgLyoqIOWRqOW6j+WIl++8mjggfiAzMiAqLw0KICAgIHdlZWtzKCkgew0KICAgICAgY29uc3QgYXJyID0gW10NCiAgICAgIGZvciAobGV0IHcgPSB0aGlzLnN0YXJ0V2VlazsgdyA8PSB0aGlzLmVuZFdlZWs7IHcrKykgYXJyLnB1c2godykNCiAgICAgIHJldHVybiBhcnINCiAgICB9LA0KICAgIC8qKiDmnIjku73kv6Hmga/vvJrmr4/mnIjljIXlkKvnmoTlkajmrKHkuI7lj6/lronmjpLmraPor77lrabml7YgKi8NCiAgICBtb250aHMoKSB7DQogICAgICBjb25zdCBsaXN0ID0gW10NCiAgICAgIGxldCBtTm8gPSAxDQogICAgICBsZXQgY3VyID0gdGhpcy5zdGFydFdlZWsNCiAgICAgIHdoaWxlIChjdXIgPD0gdGhpcy5lbmRXZWVrKSB7DQogICAgICAgIGNvbnN0IG5leHQgPSB0aGlzLm1vbnRoQnJlYWtzLmZpbmQoKGIpID0+IGIgPiBjdXIpDQogICAgICAgIGNvbnN0IG1FbmQgPSBNYXRoLm1pbigobmV4dCA9PT0gdW5kZWZpbmVkID8gdGhpcy5lbmRXZWVrICsgMSA6IG5leHQpIC0gMSwgdGhpcy5lbmRXZWVrKQ0KICAgICAgICBsaXN0LnB1c2goeyBubzogbU5vLCBzdGFydDogY3VyLCBlbmQ6IG1FbmQsIHRvdGFsOiAobUVuZCAtIGN1ciArIDEpICogdGhpcy53ZWVrbHlDYXBhY2l0eSB9KQ0KICAgICAgICBjdXIgPSBtRW5kICsgMQ0KICAgICAgICBtTm8rKw0KICAgICAgfQ0KICAgICAgcmV0dXJuIGxpc3QNCiAgICB9LA0KICAgIC8qKiDlupXpg6jmr4/mnIjmsYfmgLvooYzmlbDmja7vvJp3ZWVrIC0+IOivpeaciOS/oeaBr++8iOS7heaciOmmluagvOWxleekuuaWh+Wtl++8iSAqLw0KICAgIGJvdHRvbUNlbGxzKCkgew0KICAgICAgY29uc3QgbWFwID0ge30NCiAgICAgIHRoaXMud2Vla3MuZm9yRWFjaCgodykgPT4gew0KICAgICAgICBjb25zdCBtID0gdGhpcy5tb250aHMuZmluZCgoaXRlbSkgPT4gdyA+PSBpdGVtLnN0YXJ0ICYmIHcgPD0gaXRlbS5lbmQpDQogICAgICAgIGlmICghbSkgcmV0dXJuDQogICAgICAgIG1hcFt3XSA9IHsNCiAgICAgICAgICBubzogbS5ubywNCiAgICAgICAgICB0b3RhbDogbS50b3RhbCwNCiAgICAgICAgICBzY2hlZHVsZWQ6IHRoaXMubW9udGhseVNjaGVkdWxlZCh3KSwNCiAgICAgICAgICByZW1haW5pbmc6IG0udG90YWwgLSB0aGlzLm1vbnRobHlTY2hlZHVsZWQodykNCiAgICAgICAgfQ0KICAgICAgfSkNCiAgICAgIHJldHVybiBtYXANCiAgICB9LA0KICAgIC8qKiDooajmoLzlsZXnpLrpobrluo/vvJrpnZ7ov57mjpLor77lnKjliY3vvIzov57mjpLor77lnKjlkI7vvJvnu4TlhoXmjInlrp7pmYXotbflp4vlkajjgIHkvJjlhYjluo/mlbDmjpLluo8gKi8NCiAgICBkaXNwbGF5Q291cnNlcygpIHsNCiAgICAgIHJldHVybiBbLi4udGhpcy5jb3Vyc2VzXS5zb3J0KChhLCBiKSA9PiB7DQogICAgICAgIGlmIChhLmNvbnRpbnVvdXMgIT09IGIuY29udGludW91cykgcmV0dXJuIGEuY29udGludW91cyA/IDEgOiAtMQ0KICAgICAgICBpZiAoYS5hY3R1YWxTdGFydCAhPT0gYi5hY3R1YWxTdGFydCkgcmV0dXJuIGEuYWN0dWFsU3RhcnQgLSBiLmFjdHVhbFN0YXJ0DQogICAgICAgIHJldHVybiBhLnByaW9yaXR5IC0gYi5wcmlvcml0eQ0KICAgICAgfSkNCiAgICB9DQogIH0sDQogIHdhdGNoOiB7DQogICAgdmlzaWJsZSh2YWwpIHsNCiAgICAgIGlmICghdmFsKSByZXR1cm4NCiAgICAgIHRoaXMuJG5leHRUaWNrKCgpID0+IHsNCiAgICAgICAgaWYgKHRoaXMuJHJlZnMudGFibGVSZWYpIHsNCiAgICAgICAgICB0aGlzLiRyZWZzLnRhYmxlUmVmLnNldEN1cnJlbnRSb3codGhpcy5kaXNwbGF5Q291cnNlc1swXSkNCiAgICAgICAgfQ0KICAgICAgICB0aGlzLmN1cnJlbnRDb3Vyc2UgPSB0aGlzLmRpc3BsYXlDb3Vyc2VzWzBdIHx8IG51bGwNCiAgICAgICAgdGhpcy5zeW5jUHJvcEZvcm0oKQ0KICAgICAgfSkNCiAgICB9DQogIH0sDQogIG1ldGhvZHM6IHsNCiAgICAvKiog5piv5ZCm5Li65pyI6L6555WM5YiX77yI5bem5L6n55S76Jma57q/77yJICovDQogICAgaXNNb250aEJvdW5kYXJ5KHdlZWspIHsNCiAgICAgIHJldHVybiB0aGlzLm1vbnRoQnJlYWtzLmluY2x1ZGVzKHdlZWspDQogICAgfSwNCiAgICAvKiog5piv5ZCm5Li65p+Q5pyI55qE57uT5p2f5ZGo77yI5LuF5pyI57uT5p2f5YiX5bGV56S65paH5a2X77yJICovDQogICAgaXNNb250aEVuZFdlZWsod2Vlaykgew0KICAgICAgcmV0dXJuIHRoaXMubW9udGhzLnNvbWUoKG0pID0+IG0uZW5kID09PSB3ZWVrKQ0KICAgIH0sDQoNCiAgICAvKiog5p+Q5ZGo5omA5pyJ6K++56iL5bey5a6J5o6S5a2m5pe25LmL5ZKMICovDQogICAgbW9udGhseVNjaGVkdWxlZCh3ZWVrKSB7DQogICAgICByZXR1cm4gdGhpcy5jb3Vyc2VzLnJlZHVjZSgoc3VtLCBjKSA9PiB7DQogICAgICAgIGNvbnN0IG1hcCA9IHRoaXMuY291cnNlV2Vla0hvdXJzKGMpDQogICAgICAgIHJldHVybiBzdW0gKyAobWFwW3dlZWtdICE9PSB1bmRlZmluZWQgPyBtYXBbd2Vla10gOiAwKQ0KICAgICAgfSwgMCkNCiAgICB9LA0KDQogICAgLyoqIOavj+mXqOivvueoi+aMieWRqOWIhuW4g+eahOWuieaOkuWtpuaXtiAqLw0KICAgIGNvdXJzZVdlZWtIb3Vycyhjb3Vyc2UpIHsNCiAgICAgIGNvbnN0IG1hcCA9IHt9DQogICAgICBsZXQgcmVtYWluaW5nID0gY291cnNlLmhvdXJzDQogICAgICBsZXQgdyA9IGNvdXJzZS5hY3R1YWxTdGFydA0KICAgICAgd2hpbGUgKHJlbWFpbmluZyA+IDAgJiYgdyA8PSBjb3Vyc2UuZW5kV2Vlaykgew0KICAgICAgICBjb25zdCBoID0gTWF0aC5taW4oY291cnNlLndlZWtseUhvdXJzLCByZW1haW5pbmcpDQogICAgICAgIG1hcFt3XSA9IGgNCiAgICAgICAgcmVtYWluaW5nIC09IGgNCiAgICAgICAgdysrDQogICAgICB9DQogICAgICByZXR1cm4gbWFwDQogICAgfSwNCg0KICAgIC8qKiDor77nqIvorqHnrpflsZ7mgKfvvJrlt7LmjpLlrabml7YgLyDmnKrmjpLlrabml7YgKi8NCiAgICBjb3Vyc2VTdGF0cyhjb3Vyc2UpIHsNCiAgICAgIGNvbnN0IG1hcCA9IHRoaXMuY291cnNlV2Vla0hvdXJzKGNvdXJzZSkNCiAgICAgIGNvbnN0IHNjaGVkdWxlZCA9IE9iamVjdC5rZXlzKG1hcCkucmVkdWNlKChzdW0sIGspID0+IHN1bSArIG1hcFtrXSwgMCkNCiAgICAgIHJldHVybiB7IHNjaGVkdWxlZCwgcmVtYWluaW5nOiBNYXRoLm1heCgwLCBjb3Vyc2UuaG91cnMgLSBzY2hlZHVsZWQpIH0NCiAgICB9LA0KDQogICAgaGFuZGxlQ3VycmVudENoYW5nZShyb3cpIHsNCiAgICAgIHRoaXMuY3VycmVudENvdXJzZSA9IHJvdw0KICAgICAgdGhpcy5zeW5jUHJvcEZvcm0oKQ0KICAgIH0sDQoNCiAgICAvKiog5bGe5oCn6K6+572u6KGo5Y2V5ZCM5q2l77yI5Y+z5L6n77yJICovDQogICAgc3luY1Byb3BGb3JtKCkgew0KICAgICAgaWYgKCF0aGlzLmN1cnJlbnRDb3Vyc2UpIHJldHVybg0KICAgICAgdGhpcy5wcm9wRm9ybS53ZWVrbHlIb3VycyA9IHRoaXMuY3VycmVudENvdXJzZS53ZWVrbHlIb3Vycw0KICAgICAgdGhpcy5wcm9wRm9ybS5zdGFydFdlZWsgPSB0aGlzLmN1cnJlbnRDb3Vyc2UuYWN0dWFsU3RhcnQNCiAgICAgIHRoaXMucHJvcEZvcm0uZW5kV2VlayA9IHRoaXMuY3VycmVudENvdXJzZS5lbmRXZWVrDQogICAgICB0aGlzLnByb3BGb3JtLmNvbnRpbnVvdXMgPSB0aGlzLmN1cnJlbnRDb3Vyc2UuY29udGludW91cw0KICAgICAgdGhpcy5wcm9wRm9ybS5wcmlvcml0eSA9IHRoaXMuY3VycmVudENvdXJzZS5wcmlvcml0eQ0KICAgICAgdGhpcy5wcm9wRm9ybS5ncm91cCA9IHRoaXMuY3VycmVudENvdXJzZS5ncm91cA0KICAgIH0sDQoNCiAgICAvKiog5bGe5oCn6K6+572u5L+d5a2Y77ya5bqU55So5omA6YCJ6K++56iL55qE6YWN5qGj5bGe5oCnICovDQogICAgaGFuZGxlQXBwbHlQcm9wKCkgew0KICAgICAgaWYgKCF0aGlzLmN1cnJlbnRDb3Vyc2UpIHsNCiAgICAgICAgdGhpcy4kbWVzc2FnZS53YXJuaW5nKCfor7flhYjlnKjooajmoLzkuK3pgInmi6nkuIDpl6jor77nqIsnKQ0KICAgICAgICByZXR1cm4NCiAgICAgIH0NCiAgICAgIGNvbnN0IHJvdyA9IHRoaXMuY3VycmVudENvdXJzZQ0KICAgICAgcm93LndlZWtseUhvdXJzID0gdGhpcy5wcm9wRm9ybS53ZWVrbHlIb3Vycw0KICAgICAgcm93LmFjdHVhbFN0YXJ0ID0gdGhpcy5wcm9wRm9ybS5zdGFydFdlZWsNCiAgICAgIHJvdy5lbmRXZWVrID0gdGhpcy5wcm9wRm9ybS5lbmRXZWVrDQogICAgICByb3cuY29udGludW91cyA9IHRoaXMucHJvcEZvcm0uY29udGludW91cw0KICAgICAgcm93LnByaW9yaXR5ID0gdGhpcy5wcm9wRm9ybS5wcmlvcml0eQ0KICAgICAgcm93Lmdyb3VwID0gdGhpcy5wcm9wRm9ybS5ncm91cA0KICAgICAgdGhpcy4kbWVzc2FnZS5zdWNjZXNzKCfphY3moaPlsZ7mgKflt7LlupTnlKjvvIjliY3nq6/mvJTnpLrvvIknKQ0KICAgIH0sDQoNCiAgICAvKiog5LyY5YWI5bqP5pWw5LiK56e777ya5LyY5YWI5bqP5pWw5YePIDEgKi8NCiAgICBoYW5kbGVQcmlvcml0eVVwKCkgew0KICAgICAgaWYgKCF0aGlzLmN1cnJlbnRDb3Vyc2UpIHsNCiAgICAgICAgdGhpcy4kbWVzc2FnZS53YXJuaW5nKCfor7flhYjlnKjooajmoLzkuK3pgInmi6nkuIDpl6jor77nqIsnKQ0KICAgICAgICByZXR1cm4NCiAgICAgIH0NCiAgICAgIGlmICh0aGlzLmN1cnJlbnRDb3Vyc2UucHJpb3JpdHkgPD0gMSkgew0KICAgICAgICB0aGlzLiRtZXNzYWdlLmluZm8oJ+W3suaYr+acgOmrmOS8mOWFiOW6j+aVsCcpDQogICAgICAgIHJldHVybg0KICAgICAgfQ0KICAgICAgdGhpcy5jdXJyZW50Q291cnNlLnByaW9yaXR5IC09IDENCiAgICAgIHRoaXMuc3luY1Byb3BGb3JtKCkNCiAgICB9LA0KDQogICAgLyoqIOS8mOWFiOW6j+aVsOS4i+enu++8muS8mOWFiOW6j+aVsOWKoCAxICovDQogICAgaGFuZGxlUHJpb3JpdHlEb3duKCkgew0KICAgICAgaWYgKCF0aGlzLmN1cnJlbnRDb3Vyc2UpIHsNCiAgICAgICAgdGhpcy4kbWVzc2FnZS53YXJuaW5nKCfor7flhYjlnKjooajmoLzkuK3pgInmi6nkuIDpl6jor77nqIsnKQ0KICAgICAgICByZXR1cm4NCiAgICAgIH0NCiAgICAgIHRoaXMuY3VycmVudENvdXJzZS5wcmlvcml0eSArPSAxDQogICAgICB0aGlzLnN5bmNQcm9wRm9ybSgpDQogICAgfSwNCg0KICAgIC8vID09PT09PT09PT09PT09PT09PT09IOW6lemDqOaTjeS9nCA9PT09PT09PT09PT09PT09PT09PQ0KICAgIGhhbmRsZUNvbmZpcm0oKSB7DQogICAgICB0aGlzLiRlbWl0KCdjb25maXJtJykNCiAgICAgIHRoaXMuZGlhbG9nVmlzaWJsZSA9IGZhbHNlDQogICAgfQ0KICB9DQp9DQo="},{"version":3,"sources":["PeidangEditDialog.vue"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAiNA;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;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;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;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;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;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA","file":"PeidangEditDialog.vue","sourceRoot":"src/views/teachOffice/shiftSemester","sourcesContent":["<template>\r\n <el-dialog\r\n :visible=\"dialogVisible\"\r\n :show-close=\"false\"\r\n width=\"96%\"\r\n top=\"3vh\"\r\n :close-on-click-modal=\"false\"\r\n :close-on-press-escape=\"false\"\r\n class=\"peidang-dialog\"\r\n @update:visible=\"val => dialogVisible = val\"\r\n >\r\n <!-- ==================== 自定义标题栏 ==================== -->\r\n <div slot=\"header\">\r\n <div class=\"peidang-titlebar\">\r\n <i class=\"el-icon-reading title-icon\"></i>\r\n <span class=\"title-text\">\r\n 班次学期配档——{{ semesterName }}——{{ classLabel }}\r\n </span>\r\n </div>\r\n </div>\r\n\r\n <div class=\"peidang-body\">\r\n <!-- ==================== 上半部分:左右分栏 ==================== -->\r\n <div class=\"upper\">\r\n <!-- 左侧 75%:配档课程编组管理表格 -->\r\n <div class=\"table-area\">\r\n <el-table\r\n ref=\"tableRef\"\r\n :data=\"displayCourses\"\r\n border\r\n stripe\r\n highlight-current-row\r\n size=\"small\"\r\n max-height=\"240\"\r\n class=\"peidang-table\"\r\n @current-change=\"handleCurrentChange\"\r\n >\r\n <el-table-column prop=\"name\" label=\"科目名称\" width=\"100\" align=\"left\" header-align=\"center\" show-overflow-tooltip />\r\n <el-table-column prop=\"short\" label=\"简称\" width=\"60\" align=\"center\" show-overflow-tooltip />\r\n <el-table-column prop=\"planStart\" label=\"计划起始周\" width=\"60\" align=\"center\" show-overflow-tooltip />\r\n <el-table-column prop=\"actualStart\" label=\"实际起始周\" width=\"60\" align=\"center\" show-overflow-tooltip />\r\n <el-table-column prop=\"endWeek\" label=\"结束周\" width=\"60\" align=\"center\" show-overflow-tooltip />\r\n <el-table-column label=\"连排课\" width=\"50\" align=\"center\">\r\n <template slot-scope=\"{ row }\">\r\n <el-checkbox :value=\"row.continuous\" />\r\n </template>\r\n </el-table-column>\r\n <el-table-column prop=\"priority\" label=\"优先序数\" width=\"50\" align=\"center\" show-overflow-tooltip />\r\n <el-table-column prop=\"weeklyHours\" label=\"周学时\" width=\"50\" align=\"center\" show-overflow-tooltip />\r\n <el-table-column prop=\"hours\" label=\"学时\" width=\"50\" align=\"center\" show-overflow-tooltip />\r\n <el-table-column label=\"正课时间\" width=\"60\" align=\"center\">\r\n <template slot-scope=\"{ row }\">\r\n <el-checkbox :value=\"row.scheduleTime\" />\r\n </template>\r\n </el-table-column>\r\n <el-table-column label=\"已排学时\" width=\"50\" align=\"center\">\r\n <template slot-scope=\"{ row }\">{{ courseStats(row).scheduled }}</template>\r\n </el-table-column>\r\n <el-table-column label=\"未排学时\" width=\"50\" align=\"center\">\r\n <template slot-scope=\"{ row }\">{{ courseStats(row).remaining }}</template>\r\n </el-table-column>\r\n <el-table-column label=\"总班次任务数\" width=\"70\" align=\"center\">\r\n <template slot-scope=\"{ row }\">{{ row.continuous ? 1 : 1 }}</template>\r\n </el-table-column>\r\n <el-table-column label=\"配档编组任务数\" width=\"80\" align=\"center\">\r\n <template slot-scope=\"{ row }\">{{ row.continuous ? 2 : 1 }}</template>\r\n </el-table-column>\r\n </el-table>\r\n </div>\r\n\r\n <!-- 右侧 25%:配档课程属性设置区 + 优先序数上下移动 -->\r\n <div class=\"prop-area\">\r\n <div class=\"prop-title\">配档课程属性</div>\r\n <el-form label-width=\"72px\" size=\"small\" class=\"prop-form\">\r\n <el-form-item label=\"周学时\">\r\n <el-input-number v-model=\"propForm.weeklyHours\" :min=\"1\" :max=\"40\" controls-position=\"right\" style=\"width: 100%\" />\r\n </el-form-item>\r\n <el-form-item label=\"起始周次\">\r\n <el-input-number v-model=\"propForm.startWeek\" :min=\"startWeek\" :max=\"endWeek\" controls-position=\"right\" style=\"width: 100%\" />\r\n </el-form-item>\r\n <el-form-item label=\"结束周次\">\r\n <el-input-number v-model=\"propForm.endWeek\" :min=\"startWeek\" :max=\"endWeek\" controls-position=\"right\" style=\"width: 100%\" />\r\n </el-form-item>\r\n <el-form-item label=\"连排课\">\r\n <el-checkbox v-model=\"propForm.continuous\">单科独进</el-checkbox>\r\n </el-form-item>\r\n <el-form-item label=\"优先序数\">\r\n <div class=\"priority-field\">\r\n <el-input-number v-model=\"propForm.priority\" :min=\"1\" controls-position=\"right\" style=\"width: 100%\" />\r\n <el-button type=\"primary\" plain icon=\"el-icon-arrow-up\" @click=\"handlePriorityUp\" />\r\n <el-button type=\"primary\" plain icon=\"el-icon-arrow-down\" @click=\"handlePriorityDown\" />\r\n </div>\r\n </el-form-item>\r\n <el-form-item label=\"配档编组\">\r\n <el-input v-model=\"propForm.group\" />\r\n </el-form-item>\r\n </el-form>\r\n <el-button type=\"primary\" class=\"apply-btn\" @click=\"handleApplyProp\">应用属性</el-button>\r\n </div>\r\n </div>\r\n\r\n <!-- ==================== 下半部分:配档显示区域(甘特图) ==================== -->\r\n <div class=\"gantt-area\">\r\n <div class=\"gantt-head\">\r\n <div class=\"gantt-label-col\">\r\n <div class=\"gantt-label\">课程 / 周次</div>\r\n </div>\r\n <div class=\"gantt-body\">\r\n <!-- 行1:周次刻度(红色竖线为周刻度) -->\r\n <div class=\"gantt-row\">\r\n <div\r\n v-for=\"w in weeks\"\r\n :key=\"w\"\r\n class=\"gantt-cell week-cell\"\r\n :class=\"{ 'month-boundary': isMonthBoundary(w) }\"\r\n >{{ w }}</div>\r\n </div>\r\n <!-- 行2:本周可安排正课学时 -->\r\n <div class=\"gantt-row info-row\">\r\n <div\r\n v-for=\"w in weeks\"\r\n :key=\"w\"\r\n class=\"gantt-cell\"\r\n :class=\"{ 'month-boundary': isMonthBoundary(w) }\"\r\n >可排{{ weeklyCapacity }}</div>\r\n </div>\r\n <!-- 行3:已安排学时 / 剩余学时 -->\r\n <div class=\"gantt-row info-row\">\r\n <div\r\n v-for=\"w in weeks\"\r\n :key=\"w\"\r\n class=\"gantt-cell\"\r\n :class=\"{ 'month-boundary': isMonthBoundary(w) }\"\r\n >\r\n <span class=\"sch\">已{{ monthlyScheduled(w) }}</span>\r\n <span class=\"rem\">余{{ Math.max(0, weeklyCapacity - monthlyScheduled(w)) }}</span>\r\n </div>\r\n </div>\r\n </div>\r\n </div>\r\n\r\n <!-- 课程甘特条 -->\r\n <div class=\"gantt-courses\">\r\n <div v-for=\"course in displayCourses\" :key=\"course.id\" class=\"gantt-course\">\r\n <div class=\"gantt-label-col\">\r\n <div class=\"course-tag\" :class=\"course.continuous ? 'tag-continuous' : 'tag-normal'\">\r\n <span class=\"course-name\">{{ course.name }}({{ course.short }})</span>\r\n <span class=\"course-hours\">\r\n 已排{{ courseStats(course).scheduled }}\r\n <template v-if=\"courseStats(course).remaining > 0\">+{{ courseStats(course).remaining }}</template>\r\n </span>\r\n </div>\r\n </div>\r\n <div class=\"gantt-body\">\r\n <div class=\"gantt-row bar-row\">\r\n <div\r\n v-for=\"w in weeks\"\r\n :key=\"w\"\r\n class=\"gantt-cell bar-cell\"\r\n :class=\"{\r\n 'month-boundary': isMonthBoundary(w),\r\n 'bar-active': w >= course.actualStart && w <= course.endWeek,\r\n 'bar-continuous': course.continuous,\r\n 'bar-normal': !course.continuous\r\n }\"\r\n >\r\n <span v-if=\"w >= course.actualStart && w <= course.endWeek\" class=\"bar-hours\">\r\n {{ courseWeekHours(course)[w] || '' }}\r\n </span>\r\n </div>\r\n </div>\r\n </div>\r\n </div>\r\n </div>\r\n\r\n <!-- 底部:本月可安排正课总学时(月刻度) -->\r\n <div class=\"gantt-foot\">\r\n <div class=\"gantt-label-col\">\r\n <div class=\"gantt-label\">本月正课总学时</div>\r\n </div>\r\n <div class=\"gantt-body\">\r\n <div class=\"gantt-row\">\r\n <div\r\n v-for=\"w in weeks\"\r\n :key=\"w\"\r\n class=\"gantt-cell month-cell\"\r\n :class=\"{ 'month-boundary': isMonthBoundary(w) }\"\r\n >\r\n <span v-if=\"bottomCells[w] && isMonthEndWeek(w)\" class=\"month-total\">\r\n 第{{ bottomCells[w].no }}月:可排{{ bottomCells[w].total }}(已排{{ bottomCells[w].scheduled }} + 余{{ bottomCells[w].remaining }})\r\n </span>\r\n </div>\r\n </div>\r\n </div>\r\n </div>\r\n </div>\r\n </div>\r\n\r\n <!-- ==================== 底部操作 ==================== -->\r\n <div slot=\"footer\">\r\n <div class=\"peidang-footer\">\r\n <el-button @click=\"dialogVisible = false\">取消</el-button>\r\n <el-button type=\"primary\" @click=\"handleConfirm\">确定</el-button>\r\n </div>\r\n </div>\r\n </el-dialog>\r\n</template>\r\n\r\n<script>\r\nexport default {\r\n name: 'PeidangEditDialog',\r\n props: {\r\n visible: { type: Boolean, default: false },\r\n /** 学年学期名称 */\r\n semesterName: { type: String, default: '2017-2018学年第一学期' },\r\n /** 班次标签(如 教学五系2016级专业0113班次0417) */\r\n classLabel: { type: String, default: '教学五系2016级专业0113班次0417' }\r\n },\r\n data() {\r\n return {\r\n // ==================== 时间轴参数 ====================\r\n /** 该班次开学起始周次 */\r\n startWeek: 8,\r\n /** 该班次学期结束周次 */\r\n endWeek: 32,\r\n /** 该班次每周可安排的正课学时时数(去除不能排课学时) */\r\n weeklyCapacity: 40,\r\n /** 月刻度:每 4 周为一月(8-11 第1月,12-15 第2月...),虚线分隔 */\r\n monthBreaks: [12, 16, 20, 24, 28, 32],\r\n\r\n // ==================== 配档课程数据 ====================\r\n courses: [\r\n // ---- 非连排课(按周学时安排,蓝色,每门独立一组) ----\r\n { id: 'p1', name: '课程科目001', short: '政治', planStart: 8, actualStart: 8, endWeek: 23, continuous: false, priority: 1, weeklyHours: 4, hours: 60, scheduleTime: true, group: '组1' },\r\n { id: 'p2', name: '课程科目002', short: '军事', planStart: 8, actualStart: 8, endWeek: 20, continuous: false, priority: 2, weeklyHours: 4, hours: 48, scheduleTime: true, group: '组2' },\r\n { id: 'p3', name: '课程科目003', short: '战术', planStart: 8, actualStart: 10, endWeek: 21, continuous: false, priority: 3, weeklyHours: 4, hours: 44, scheduleTime: true, group: '组3' },\r\n { id: 'p4', name: '课程科目004', short: '指挥', planStart: 8, actualStart: 12, endWeek: 22, continuous: false, priority: 4, weeklyHours: 4, hours: 40, scheduleTime: true, group: '组4' },\r\n // ---- 连排课(单科独进,红色,共为一组) ----\r\n { id: 'p5', name: '课程科目005', short: '综合演练', planStart: 8, actualStart: 8, endWeek: 13, continuous: true, priority: 5, weeklyHours: 20, hours: 100, scheduleTime: true, group: '连排组' },\r\n { id: 'p6', name: '课程科目006', short: '野营拉练', planStart: 14, actualStart: 14, endWeek: 16, continuous: true, priority: 6, weeklyHours: 24, hours: 48, scheduleTime: true, group: '连排组' }\r\n ],\r\n\r\n // ==================== 表格选中与属性设置 ====================\r\n currentCourse: null,\r\n propForm: {\r\n weeklyHours: 4,\r\n startWeek: 8,\r\n endWeek: 16,\r\n continuous: false,\r\n priority: 1,\r\n group: ''\r\n }\r\n }\r\n },\r\n computed: {\r\n dialogVisible: {\r\n get() {\r\n return this.visible\r\n },\r\n set(val) {\r\n this.$emit('update:visible', val)\r\n }\r\n },\r\n /** 周序列:8 ~ 32 */\r\n weeks() {\r\n const arr = []\r\n for (let w = this.startWeek; w <= this.endWeek; w++) arr.push(w)\r\n return arr\r\n },\r\n /** 月份信息:每月包含的周次与可安排正课学时 */\r\n months() {\r\n const list = []\r\n let mNo = 1\r\n let cur = this.startWeek\r\n while (cur <= this.endWeek) {\r\n const next = this.monthBreaks.find((b) => b > cur)\r\n const mEnd = Math.min((next === undefined ? this.endWeek + 1 : next) - 1, this.endWeek)\r\n list.push({ no: mNo, start: cur, end: mEnd, total: (mEnd - cur + 1) * this.weeklyCapacity })\r\n cur = mEnd + 1\r\n mNo++\r\n }\r\n return list\r\n },\r\n /** 底部每月汇总行数据:week -> 该月信息(仅月首格展示文字) */\r\n bottomCells() {\r\n const map = {}\r\n this.weeks.forEach((w) => {\r\n const m = this.months.find((item) => w >= item.start && w <= item.end)\r\n if (!m) return\r\n map[w] = {\r\n no: m.no,\r\n total: m.total,\r\n scheduled: this.monthlyScheduled(w),\r\n remaining: m.total - this.monthlyScheduled(w)\r\n }\r\n })\r\n return map\r\n },\r\n /** 表格展示顺序:非连排课在前,连排课在后;组内按实际起始周、优先序数排序 */\r\n displayCourses() {\r\n return [...this.courses].sort((a, b) => {\r\n if (a.continuous !== b.continuous) return a.continuous ? 1 : -1\r\n if (a.actualStart !== b.actualStart) return a.actualStart - b.actualStart\r\n return a.priority - b.priority\r\n })\r\n }\r\n },\r\n watch: {\r\n visible(val) {\r\n if (!val) return\r\n this.$nextTick(() => {\r\n if (this.$refs.tableRef) {\r\n this.$refs.tableRef.setCurrentRow(this.displayCourses[0])\r\n }\r\n this.currentCourse = this.displayCourses[0] || null\r\n this.syncPropForm()\r\n })\r\n }\r\n },\r\n methods: {\r\n /** 是否为月边界列(左侧画虚线) */\r\n isMonthBoundary(week) {\r\n return this.monthBreaks.includes(week)\r\n },\r\n /** 是否为某月的结束周(仅月结束列展示文字) */\r\n isMonthEndWeek(week) {\r\n return this.months.some((m) => m.end === week)\r\n },\r\n\r\n /** 某周所有课程已安排学时之和 */\r\n monthlyScheduled(week) {\r\n return this.courses.reduce((sum, c) => {\r\n const map = this.courseWeekHours(c)\r\n return sum + (map[week] !== undefined ? map[week] : 0)\r\n }, 0)\r\n },\r\n\r\n /** 每门课程按周分布的安排学时 */\r\n courseWeekHours(course) {\r\n const map = {}\r\n let remaining = course.hours\r\n let w = course.actualStart\r\n while (remaining > 0 && w <= course.endWeek) {\r\n const h = Math.min(course.weeklyHours, remaining)\r\n map[w] = h\r\n remaining -= h\r\n w++\r\n }\r\n return map\r\n },\r\n\r\n /** 课程计算属性:已排学时 / 未排学时 */\r\n courseStats(course) {\r\n const map = this.courseWeekHours(course)\r\n const scheduled = Object.keys(map).reduce((sum, k) => sum + map[k], 0)\r\n return { scheduled, remaining: Math.max(0, course.hours - scheduled) }\r\n },\r\n\r\n handleCurrentChange(row) {\r\n this.currentCourse = row\r\n this.syncPropForm()\r\n },\r\n\r\n /** 属性设置表单同步(右侧) */\r\n syncPropForm() {\r\n if (!this.currentCourse) return\r\n this.propForm.weeklyHours = this.currentCourse.weeklyHours\r\n this.propForm.startWeek = this.currentCourse.actualStart\r\n this.propForm.endWeek = this.currentCourse.endWeek\r\n this.propForm.continuous = this.currentCourse.continuous\r\n this.propForm.priority = this.currentCourse.priority\r\n this.propForm.group = this.currentCourse.group\r\n },\r\n\r\n /** 属性设置保存:应用所选课程的配档属性 */\r\n handleApplyProp() {\r\n if (!this.currentCourse) {\r\n this.$message.warning('请先在表格中选择一门课程')\r\n return\r\n }\r\n const row = this.currentCourse\r\n row.weeklyHours = this.propForm.weeklyHours\r\n row.actualStart = this.propForm.startWeek\r\n row.endWeek = this.propForm.endWeek\r\n row.continuous = this.propForm.continuous\r\n row.priority = this.propForm.priority\r\n row.group = this.propForm.group\r\n this.$message.success('配档属性已应用(前端演示)')\r\n },\r\n\r\n /** 优先序数上移:优先序数减 1 */\r\n handlePriorityUp() {\r\n if (!this.currentCourse) {\r\n this.$message.warning('请先在表格中选择一门课程')\r\n return\r\n }\r\n if (this.currentCourse.priority <= 1) {\r\n this.$message.info('已是最高优先序数')\r\n return\r\n }\r\n this.currentCourse.priority -= 1\r\n this.syncPropForm()\r\n },\r\n\r\n /** 优先序数下移:优先序数加 1 */\r\n handlePriorityDown() {\r\n if (!this.currentCourse) {\r\n this.$message.warning('请先在表格中选择一门课程')\r\n return\r\n }\r\n this.currentCourse.priority += 1\r\n this.syncPropForm()\r\n },\r\n\r\n // ==================== 底部操作 ====================\r\n handleConfirm() {\r\n this.$emit('confirm')\r\n this.dialogVisible = false\r\n }\r\n }\r\n}\r\n</script>\r\n\r\n<style scoped lang=\"scss\">\r\n.peidang-dialog {\r\n // ========== 自定义标题栏 ==========\r\n ::v-deep .el-dialog__header {\r\n margin: 0;\r\n padding: 0;\r\n }\r\n\r\n .peidang-titlebar {\r\n display: flex;\r\n align-items: center;\r\n gap: 8px;\r\n height: 40px;\r\n padding: 0 14px;\r\n background: linear-gradient(90deg, #0a246a 0%, #a6caf0 100%);\r\n color: #fff;\r\n\r\n .title-icon {\r\n font-size: 18px;\r\n color: #fff;\r\n }\r\n\r\n .title-text {\r\n font-size: 14px;\r\n font-weight: 600;\r\n color: #fff;\r\n letter-spacing: 0.5px;\r\n }\r\n }\r\n\r\n ::v-deep .el-dialog__body {\r\n padding: 12px;\r\n }\r\n\r\n ::v-deep .el-dialog__footer {\r\n padding: 8px 12px;\r\n border-top: 1px solid #ebeef5;\r\n }\r\n\r\n .peidang-footer {\r\n display: flex;\r\n justify-content: flex-end;\r\n gap: 8px;\r\n }\r\n}\r\n\r\n.peidang-body {\r\n display: flex;\r\n flex-direction: column;\r\n gap: 10px;\r\n\r\n // ========== 上半部分:左右分栏 ==========\r\n .upper {\r\n display: flex;\r\n gap: 10px;\r\n\r\n // 左侧 75%:表格\r\n .table-area {\r\n flex: 3;\r\n min-width: 0;\r\n border: 1px solid #ebeef5;\r\n border-radius: 4px;\r\n padding: 6px;\r\n overflow: hidden;\r\n\r\n .peidang-table {\r\n width: 100%;\r\n }\r\n }\r\n\r\n // 右侧 25%:属性设置\r\n .prop-area {\r\n flex: 1;\r\n min-width: 240px;\r\n border: 1px solid #ebeef5;\r\n border-radius: 4px;\r\n padding: 10px 12px;\r\n\r\n .prop-title {\r\n font-size: 14px;\r\n font-weight: 600;\r\n color: #303133;\r\n margin-bottom: 8px;\r\n padding-bottom: 6px;\r\n border-bottom: 1px solid #ebeef5;\r\n }\r\n\r\n .prop-form {\r\n .priority-field {\r\n display: flex;\r\n align-items: center;\r\n gap: 4px;\r\n width: 100%;\r\n\r\n .el-button {\r\n flex-shrink: 0;\r\n margin-left: 0;\r\n }\r\n }\r\n }\r\n\r\n .apply-btn {\r\n width: 100%;\r\n margin-top: 4px;\r\n }\r\n }\r\n }\r\n\r\n // ========== 下半部分:配档显示区域 ==========\r\n .gantt-area {\r\n border: 1px solid #ebeef5;\r\n border-radius: 4px;\r\n padding: 8px;\r\n overflow: auto;\r\n max-height: 320px;\r\n\r\n .gantt-head,\r\n .gantt-course,\r\n .gantt-foot {\r\n display: flex;\r\n align-items: stretch;\r\n min-width: 860px;\r\n }\r\n\r\n .gantt-label-col {\r\n flex-shrink: 0;\r\n width: 210px;\r\n display: flex;\r\n align-items: center;\r\n\r\n .gantt-label {\r\n font-size: 12px;\r\n color: #606266;\r\n font-weight: 600;\r\n white-space: nowrap;\r\n }\r\n }\r\n\r\n .gantt-body {\r\n flex: 1;\r\n display: flex;\r\n flex-direction: column;\r\n }\r\n\r\n .gantt-row {\r\n display: flex;\r\n\r\n .gantt-cell {\r\n flex: 1;\r\n min-width: 34px;\r\n height: 24px;\r\n line-height: 24px;\r\n text-align: center;\r\n font-size: 11px;\r\n color: #303133;\r\n border-right: 1px solid #ebeef5;\r\n border-bottom: 1px solid #ebeef5;\r\n overflow: hidden;\r\n white-space: nowrap;\r\n text-overflow: ellipsis;\r\n }\r\n\r\n // 周刻度:顶部红色竖线\r\n .week-cell {\r\n font-weight: 600;\r\n color: #f56c6c;\r\n border-top: 2px solid #f56c6c;\r\n background: #fff5f5;\r\n }\r\n\r\n .info-row .gantt-cell {\r\n height: 20px;\r\n line-height: 20px;\r\n\r\n .sch {\r\n color: #1e6fff;\r\n }\r\n\r\n .rem {\r\n color: #e6a23c;\r\n margin-left: 2px;\r\n }\r\n }\r\n\r\n // 月刻度虚线\r\n .month-boundary {\r\n border-left: 1px dashed #909399;\r\n }\r\n\r\n // 课程条\r\n .bar-cell {\r\n height: 26px;\r\n position: relative;\r\n\r\n .bar-hours {\r\n font-size: 11px;\r\n font-weight: 600;\r\n }\r\n\r\n &.bar-active {\r\n &.bar-normal {\r\n background: #409eff;\r\n color: #fff;\r\n\r\n .bar-hours {\r\n color: #fff;\r\n }\r\n }\r\n\r\n &.bar-continuous {\r\n background: #f56c6c;\r\n color: #fff;\r\n\r\n .bar-hours {\r\n color: #fff;\r\n }\r\n }\r\n }\r\n }\r\n\r\n .month-cell {\r\n height: 22px;\r\n line-height: 22px;\r\n\r\n .month-total {\r\n font-size: 11px;\r\n color: #606266;\r\n font-weight: 600;\r\n background: #f4f4f5;\r\n border: 1px solid #dcdfe6;\r\n border-radius: 2px;\r\n padding: 0 4px;\r\n white-space: nowrap;\r\n }\r\n }\r\n }\r\n\r\n .gantt-course {\r\n .gantt-label-col {\r\n align-items: center;\r\n\r\n .course-tag {\r\n display: flex;\r\n flex-direction: column;\r\n justify-content: center;\r\n gap: 1px;\r\n padding: 2px 6px;\r\n border-radius: 3px;\r\n font-size: 11px;\r\n\r\n &.tag-normal {\r\n background: #ecf5ff;\r\n border: 1px solid #a0cfff;\r\n color: #337ecc;\r\n }\r\n\r\n &.tag-continuous {\r\n background: #fef0f0;\r\n border: 1px solid #fbc4c4;\r\n color: #d63031;\r\n }\r\n\r\n .course-name {\r\n font-weight: 600;\r\n white-space: nowrap;\r\n }\r\n\r\n .course-hours {\r\n font-size: 10px;\r\n white-space: nowrap;\r\n }\r\n }\r\n }\r\n }\r\n\r\n .gantt-foot {\r\n .gantt-label-col {\r\n align-items: center;\r\n }\r\n }\r\n }\r\n}\r\n</style>\r\n"]}]} |