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

1 line
48 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\\subjectMajor\\major\\index.vue?vue&type=script&lang=js","dependencies":[{"path":"C:\\Users\\Admin\\Desktop\\education\\frontend\\src\\views\\subjectMajor\\major\\index.vue","mtime":1787648648721},{"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:Ly8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KDQppbXBvcnQgew0KICBsaXN0TWFqb3IsDQogIGdldE1ham9yLA0KICBhZGRNYWpvciwNCiAgdXBkYXRlTWFqb3IsDQogIGRlbE1ham9yLA0KICBkb3dubG9hZE1ham9yVGVtcGxhdGUNCn0gZnJvbSAiQC9hcGkvc3ViamVjdE1ham9yL21ham9yIg0KDQpleHBvcnQgZGVmYXVsdCB7DQogIG5hbWU6ICJNYWpvciIsDQogIGRhdGEoKSB7DQogICAgcmV0dXJuIHsNCiAgICAgIC8vID09PT09PT09PT09PT09PT09PT09IOafpeivouadoeS7tiA9PT09PT09PT09PT09PT09PT09PQ0KICAgICAgc2VhcmNoRm9ybTogew0KICAgICAgICB6eW1jOiAnJywNCiAgICAgICAgenlmeDogJycsDQogICAgICAgIHp5ZG06ICcnLA0KICAgICAgICB4bno6ICcnLA0KICAgICAgICBweGx4OiAnJywNCiAgICAgICAgcHhseDI6ICcnLA0KICAgICAgICBweGNjOiAnJywNCiAgICAgICAgeGt6eXh4YnNoOiAnJywNCiAgICAgICAgdHk6ICcnDQogICAgICB9LA0KDQogICAgICAvLyA9PT09PT09PT09PT09PT09PT09PSDliJfooajmlbDmja4gPT09PT09PT09PT09PT09PT09PT0NCiAgICAgIGxvYWRpbmc6IGZhbHNlLA0KICAgICAgdGFibGVEYXRhOiBbXSwNCiAgICAgIHRvdGFsOiAwLA0KICAgICAgcGFnZU51bTogMSwNCiAgICAgIHBhZ2VTaXplOiAyMCwNCg0KICAgICAgLy8gPT09PT09PT09PT09PT09PT09PT0g5paw5aKeL+e8lui+kSA9PT09PT09PT09PT09PT09PT09PQ0KICAgICAgZm9ybURpYWxvZ1Zpc2libGU6IGZhbHNlLA0KICAgICAgZm9ybVRpdGxlOiAn5paw5aKe5LiT5LiaJywNCiAgICAgIGlzQWRkOiB0cnVlLA0KICAgICAgZm9ybVNhdmluZzogZmFsc2UsDQogICAgICBmb3JtOiB0aGlzLmNyZWF0ZUVtcHR5Rm9ybSgpLA0KICAgICAgZm9ybVJ1bGVzOiB7DQogICAgICAgIHp5ZGg6IFt7IHJlcXVpcmVkOiB0cnVlLCBtZXNzYWdlOiAi5LiT5Lia5Luj5Y+35LiN6IO95Li656m6IiwgdHJpZ2dlcjogImJsdXIiIH1dLA0KICAgICAgICB6eW1jOiBbeyByZXF1aXJlZDogdHJ1ZSwgbWVzc2FnZTogIuS4k+S4muWQjeensOS4jeiDveS4uuepuiIsIHRyaWdnZXI6ICJibHVyIiB9XSwNCiAgICAgICAgenlmeDogW3sgcmVxdWlyZWQ6IHRydWUsIG1lc3NhZ2U6ICLkuJPkuJrmlrnlkJHkuI3og73kuLrnqboiLCB0cmlnZ2VyOiAiYmx1ciIgfV0sDQogICAgICAgIHp5ZG06IFt7IHJlcXVpcmVkOiB0cnVlLCBtZXNzYWdlOiAi5LiT5Lia5Luj56CB5LiN6IO95Li656m6IiwgdHJpZ2dlcjogImJsdXIiIH1dLA0KICAgICAgICB6eWJiOiBbeyByZXF1aXJlZDogdHJ1ZSwgbWVzc2FnZTogIuS4k+S4mueJiOacrOS4jeiDveS4uuepuiIsIHRyaWdnZXI6ICJibHVyIiB9XSwNCiAgICAgICAgeG56OiBbeyByZXF1aXJlZDogdHJ1ZSwgbWVzc2FnZTogIuWtpuW5tOWItuS4jeiDveS4uuepuiIsIHRyaWdnZXI6ICJibHVyIiB9XSwNCiAgICAgICAgeHFzOiBbeyByZXF1aXJlZDogdHJ1ZSwgbWVzc2FnZTogIuWtpuacn+aVsOS4jeiDveS4uuepuiIsIHRyaWdnZXI6ICJjaGFuZ2UiIH1dLA0KICAgICAgICB6eWJzaDogW3sgcmVxdWlyZWQ6IHRydWUsIG1lc3NhZ2U6ICLkuJPkuJrmoIfor4blj7fkuI3og73kuLrnqboiLCB0cmlnZ2VyOiAiYmx1ciIgfV0sDQogICAgICAgIHB4Y2M6IFt7IHJlcXVpcmVkOiB0cnVlLCBtZXNzYWdlOiAi5Z+56K6t5bGC5qyh5LiN6IO95Li656m6IiwgdHJpZ2dlcjogImJsdXIiIH1dLA0KICAgICAgICBweGx4OiBbeyByZXF1aXJlZDogdHJ1ZSwgbWVzc2FnZTogIuWfueiureexu+Wei+S4jeiDveS4uuepuiIsIHRyaWdnZXI6ICJibHVyIiB9XSwNCiAgICAgICAgcHhseDI6IFt7IHJlcXVpcmVkOiB0cnVlLCBtZXNzYWdlOiAi5Z+56K6t57G75Z6LMuS4jeiDveS4uuepuiIsIHRyaWdnZXI6ICJibHVyIiB9XSwNCiAgICAgICAgeHlsYjogW3sgcmVxdWlyZWQ6IHRydWUsIG1lc3NhZ2U6ICLlrablkZjnsbvliKvkuI3og73kuLrnqboiLCB0cmlnZ2VyOiAiYmx1ciIgfV0sDQogICAgICAgIHpkeWZsOiBbeyByZXF1aXJlZDogdHJ1ZSwgbWVzc2FnZTogIuiHquWumuS5ieWIhuexu+S4jeiDveS4uuepuiIsIHRyaWdnZXI6ICJibHVyIiB9XSwNCiAgICAgICAgemd6eTogW3sgcmVxdWlyZWQ6IHRydWUsIG1lc3NhZ2U6ICLkuLvlubLkuJPkuJrkuI3og73kuLrnqboiLCB0cmlnZ2VyOiAiY2hhbmdlIiB9XSwNCiAgICAgICAgamNsYjogW3sgcmVxdWlyZWQ6IHRydWUsIG1lc3NhZ2U6ICLoioLmrKHnsbvliKvkuI3og73kuLrnqboiLCB0cmlnZ2VyOiAiYmx1ciIgfV0sDQogICAgICAgIHh0bXM6IFt7IHJlcXVpcmVkOiB0cnVlLCBtZXNzYWdlOiAi57O757uf5qih5byP5LiN6IO95Li656m6IiwgdHJpZ2dlcjogImJsdXIiIH1dDQogICAgICB9LA0KDQogICAgICAvLyA9PT09PT09PT09PT09PT09PT09PSDor6bmg4UgPT09PT09PT09PT09PT09PT09PT0NCiAgICAgIHZpZXdEaWFsb2dWaXNpYmxlOiBmYWxzZSwNCiAgICAgIHZpZXdMb2FkaW5nOiBmYWxzZSwNCiAgICAgIHZpZXdGb3JtOiB7fQ0KICAgIH0NCiAgfSwNCiAgY3JlYXRlZCgpIHsNCiAgICB0aGlzLmZldGNoTGlzdCgpDQogIH0sDQogIG1ldGhvZHM6IHsNCiAgICAvKiog6KGo5qC85bqP5Y+377yI6Leo6aG16L+e57ut77yJICovDQogICAgZm10WGgoaW5kZXgpIHsNCiAgICAgIHJldHVybiAodGhpcy5wYWdlTnVtIC0gMSkgKiB0aGlzLnBhZ2VTaXplICsgaW5kZXggKyAxDQogICAgfSwNCg0KICAgIC8qKiDliJvlu7rnqbrooajljZUgKi8NCiAgICBjcmVhdGVFbXB0eUZvcm0oKSB7DQogICAgICByZXR1cm4gew0KICAgICAgICB6eWRoOiAnJywNCiAgICAgICAgenltYzogJycsDQogICAgICAgIHp5Zng6ICcnLA0KICAgICAgICB4bno6ICcnLA0KICAgICAgICB4cXM6IHVuZGVmaW5lZCwNCiAgICAgICAgenliejogJycsDQogICAgICAgIHp5Z2Y6ICcnLA0KICAgICAgICB6eWRtOiAnJywNCiAgICAgICAgenliYjogJycsDQogICAgICAgIHR5OiAwLA0KICAgICAgICBxeXNqOiBudWxsLA0KICAgICAgICB0eXNqOiBudWxsLA0KICAgICAgICBqeGdsamdiaDogJycsDQogICAgICAgIHB4Y2M6ICcnLA0KICAgICAgICBweGx4OiAnJywNCiAgICAgICAgeGt6eXh4YnNoOiAnJywNCiAgICAgICAgcHhseDI6ICcnLA0KICAgICAgICB4eWxiOiAnJywNCiAgICAgICAgemR5Zmw6ICcnLA0KICAgICAgICB6eWJzaDogJycsDQogICAgICAgIHhoYnM6IHVuZGVmaW5lZCwNCiAgICAgICAgamM6ICcnLA0KICAgICAgICBqY2xiOiAnJywNCiAgICAgICAgeHRtczogJycsDQogICAgICAgIGpzb256ZDogJycsDQogICAgICAgIHpnenk6ICcnLA0KICAgICAgICBnZm1jOiAnJywNCiAgICAgICAganhkZ2JoOiAnJywNCiAgICAgICAgcnBiaDogJycsDQogICAgICAgIHB5bWI6ICcnDQogICAgICB9DQogICAgfSwNCg0KICAgIC8vID09PT09PT09PT09PT09PT09PT09IOafpeivouWIl+ihqCA9PT09PT09PT09PT09PT09PT09PQ0KICAgIGZldGNoTGlzdCgpIHsNCiAgICAgIHRoaXMubG9hZGluZyA9IHRydWUNCiAgICAgIGNvbnN0IHBhcmFtcyA9IHsNCiAgICAgICAgcGFnZU51bTogdGhpcy5wYWdlTnVtLA0KICAgICAgICBwYWdlU2l6ZTogdGhpcy5wYWdlU2l6ZQ0KICAgICAgfQ0KICAgICAgLy8g54q25oCB77yaMCDlkK/nlKggLyAxIOWBnOeUqO+8iOmAieS4reaXtuaJjeS8oO+8iQ0KICAgICAgaWYgKHRoaXMuc2VhcmNoRm9ybS50eSAhPT0gJycgJiYgdGhpcy5zZWFyY2hGb3JtLnR5ICE9PSBudWxsICYmIHRoaXMuc2VhcmNoRm9ybS50eSAhPT0gdW5kZWZpbmVkKSB7DQogICAgICAgIHBhcmFtcy50eSA9IHRoaXMuc2VhcmNoRm9ybS50eQ0KICAgICAgfQ0KICAgICAgLy8g5YW25L2Z5paH5pys5p2h5Lu26Z2e56m65pe25omN5LygDQogICAgICA7Wyd6eW1jJywgJ3p5ZngnLCAnenlkbScsICd4bnonLCAncHhseCcsICdweGx4MicsICdweGNjJywgJ3hrenl4eGJzaCddLmZvckVhY2goa2V5ID0+IHsNCiAgICAgICAgaWYgKHRoaXMuc2VhcmNoRm9ybVtrZXldICE9PSAnJyAmJiB0aGlzLnNlYXJjaEZvcm1ba2V5XSAhPT0gbnVsbCAmJiB0aGlzLnNlYXJjaEZvcm1ba2V5XSAhPT0gdW5kZWZpbmVkKSB7DQogICAgICAgICAgcGFyYW1zW2tleV0gPSB0aGlzLnNlYXJjaEZvcm1ba2V5XS50cmltKCkNCiAgICAgICAgfQ0KICAgICAgfSkNCiAgICAgIGxpc3RNYWpvcihwYXJhbXMpLnRoZW4ocmVzcG9uc2UgPT4gew0KICAgICAgICBjb25zdCBkYXRhID0gcmVzcG9uc2UuZGF0YSB8fCB7fQ0KICAgICAgICB0aGlzLnRhYmxlRGF0YSA9IGRhdGEucmVjb3JkcyB8fCBbXQ0KICAgICAgICB0aGlzLnRvdGFsID0gZGF0YS50b3RhbCB8fCAwDQogICAgICAgIHRoaXMubG9hZGluZyA9IGZhbHNlDQogICAgICB9KS5jYXRjaCgoKSA9PiB7DQogICAgICAgIHRoaXMudGFibGVEYXRhID0gW10NCiAgICAgICAgdGhpcy50b3RhbCA9IDANCiAgICAgICAgdGhpcy5sb2FkaW5nID0gZmFsc2UNCiAgICAgIH0pDQogICAgfSwNCg0KICAgIGhhbmRsZVNlYXJjaCgpIHsNCiAgICAgIHRoaXMucGFnZU51bSA9IDENCiAgICAgIHRoaXMuZmV0Y2hMaXN0KCkNCiAgICB9LA0KDQogICAgaGFuZGxlUmVzZXQoKSB7DQogICAgICB0aGlzLnNlYXJjaEZvcm0gPSB7DQogICAgICAgIHp5bWM6ICcnLA0KICAgICAgICB6eWZ4OiAnJywNCiAgICAgICAgenlkbTogJycsDQogICAgICAgIHhuejogJycsDQogICAgICAgIHB4bHg6ICcnLA0KICAgICAgICBweGx4MjogJycsDQogICAgICAgIHB4Y2M6ICcnLA0KICAgICAgICB4a3p5eHhic2g6ICcnLA0KICAgICAgICB0eTogJycNCiAgICAgIH0NCiAgICAgIHRoaXMucGFnZU51bSA9IDENCiAgICAgIHRoaXMuZmV0Y2hMaXN0KCkNCiAgICB9LA0KDQogICAgaGFuZGxlUGFnZUNoYW5nZShjdXJyZW50KSB7DQogICAgICB0aGlzLnBhZ2VOdW0gPSBjdXJyZW50DQogICAgICB0aGlzLmZldGNoTGlzdCgpDQogICAgfSwNCg0KICAgIGhhbmRsZVNpemVDaGFuZ2Uoc2l6ZSkgew0KICAgICAgdGhpcy5wYWdlU2l6ZSA9IHNpemUNCiAgICAgIHRoaXMucGFnZU51bSA9IDENCiAgICAgIHRoaXMuZmV0Y2hMaXN0KCkNCiAgICB9LA0KDQogICAgLy8gPT09PT09PT09PT09PT09PT09PT0g5paw5aKeL+e8lui+kSA9PT09PT09PT09PT09PT09PT09PQ0KICAgIGhhbmRsZUFkZCgpIHsNCiAgICAgIHRoaXMuaXNBZGQgPSB0cnVlDQogICAgICB0aGlzLmZvcm1UaXRsZSA9ICfmlrDlop7kuJPkuJonDQogICAgICB0aGlzLmZvcm0gPSB0aGlzLmNyZWF0ZUVtcHR5Rm9ybSgpDQogICAgICB0aGlzLmZvcm1EaWFsb2dWaXNpYmxlID0gdHJ1ZQ0KICAgICAgdGhpcy4kbmV4dFRpY2soKCkgPT4gew0KICAgICAgICB0aGlzLiRyZWZzLmZvcm1SZWYgJiYgdGhpcy4kcmVmcy5mb3JtUmVmLmNsZWFyVmFsaWRhdGUoKQ0KICAgICAgfSkNCiAgICB9LA0KDQogICAgaGFuZGxlRWRpdChyb3cpIHsNCiAgICAgIHRoaXMuaXNBZGQgPSBmYWxzZQ0KICAgICAgdGhpcy5mb3JtVGl0bGUgPSAn57yW6L6R5LiT5LiaJw0KICAgICAgdGhpcy5mb3JtID0gdGhpcy5jcmVhdGVFbXB0eUZvcm0oKQ0KICAgICAgdGhpcy5mb3JtRGlhbG9nVmlzaWJsZSA9IHRydWUNCiAgICAgIHRoaXMuJG5leHRUaWNrKCgpID0+IHsNCiAgICAgICAgdGhpcy4kcmVmcy5mb3JtUmVmICYmIHRoaXMuJHJlZnMuZm9ybVJlZi5jbGVhclZhbGlkYXRlKCkNCiAgICAgIH0pDQogICAgICBnZXRNYWpvcihyb3cuenlkaCkudGhlbihyZXNwb25zZSA9PiB7DQogICAgICAgIGNvbnN0IGRhdGEgPSByZXNwb25zZS5kYXRhIHx8IHt9DQogICAgICAgIHRoaXMuZm9ybSA9IHsNCiAgICAgICAgICB6eWRoOiBkYXRhLnp5ZGgsDQogICAgICAgICAgenltYzogZGF0YS56eW1jLA0KICAgICAgICAgIHp5Zng6IGRhdGEuenlmeCwNCiAgICAgICAgICB4bno6IGRhdGEueG56LA0KICAgICAgICAgIHhxczogZGF0YS54cXMgIT09IG51bGwgJiYgZGF0YS54cXMgIT09IHVuZGVmaW5lZCA/IGRhdGEueHFzIDogdW5kZWZpbmVkLA0KICAgICAgICAgIHp5Yno6IGRhdGEuenlieiwNCiAgICAgICAgICB6eWdmOiBkYXRhLnp5Z2YsDQogICAgICAgICAgenlkbTogZGF0YS56eWRtLA0KICAgICAgICAgIHp5YmI6IGRhdGEuenliYiwNCiAgICAgICAgICB0eTogZGF0YS50eSA9PT0gMSB8fCBkYXRhLnR5ID09PSB0cnVlID8gMSA6IDAsDQogICAgICAgICAgcXlzajogZGF0YS5xeXNqLA0KICAgICAgICAgIHR5c2o6IGRhdGEudHlzaiwNCiAgICAgICAgICBqeGdsamdiaDogZGF0YS5qeGdsamdiaCwNCiAgICAgICAgICBweGNjOiBkYXRhLnB4Y2MsDQogICAgICAgICAgcHhseDogZGF0YS5weGx4LA0KICAgICAgICAgIHhrenl4eGJzaDogZGF0YS54a3p5eHhic2gsDQogICAgICAgICAgcHhseDI6IGRhdGEucHhseDIsDQogICAgICAgICAgeHlsYjogZGF0YS54eWxiLA0KICAgICAgICAgIHpkeWZsOiBkYXRhLnpkeWZsLA0KICAgICAgICAgIHp5YnNoOiBkYXRhLnp5YnNoLA0KICAgICAgICAgIHhoYnM6IGRhdGEueGhicywNCiAgICAgICAgICBqYzogZGF0YS5qYywNCiAgICAgICAgICBqY2xiOiBkYXRhLmpjbGIsDQogICAgICAgICAgeHRtczogZGF0YS54dG1zLA0KICAgICAgICAgIGpzb256ZDogZGF0YS5qc29uemQsDQogICAgICAgICAgemd6eTogZGF0YS56Z3p5LA0KICAgICAgICAgIGdmbWM6IGRhdGEuZ2ZtYywNCiAgICAgICAgICBqeGRnYmg6IGRhdGEuanhkZ2JoLA0KICAgICAgICAgIHJwYmg6IGRhdGEucnBiaCwNCiAgICAgICAgICBweW1iOiBkYXRhLnB5bWINCiAgICAgICAgfQ0KICAgICAgfSkuY2F0Y2goKCkgPT4ge30pDQogICAgfSwNCg0KICAgIGhhbmRsZUZvcm1TdWJtaXQoKSB7DQogICAgICB0aGlzLiRyZWZzLmZvcm1SZWYudmFsaWRhdGUodmFsaWQgPT4gew0KICAgICAgICBpZiAoIXZhbGlkKSByZXR1cm4NCiAgICAgICAgdGhpcy5mb3JtU2F2aW5nID0gdHJ1ZQ0KICAgICAgICBjb25zdCBwYXlsb2FkID0geyAuLi50aGlzLmZvcm0gfQ0KICAgICAgICBjb25zdCByZXF1ZXN0ID0gdGhpcy5pc0FkZCA/IGFkZE1ham9yKHBheWxvYWQpIDogdXBkYXRlTWFqb3IocGF5bG9hZCkNCiAgICAgICAgcmVxdWVzdC50aGVuKCgpID0+IHsNCiAgICAgICAgICB0aGlzLiRtZXNzYWdlLnN1Y2Nlc3ModGhpcy5pc0FkZCA/ICfmlrDlop7miJDlip8nIDogJ+S/ruaUueaIkOWKnycpDQogICAgICAgICAgdGhpcy5mb3JtRGlhbG9nVmlzaWJsZSA9IGZhbHNlDQogICAgICAgICAgdGhpcy5mZXRjaExpc3QoKQ0KICAgICAgICB9KS5jYXRjaCgoKSA9PiB7DQogICAgICAgIH0pLmZpbmFsbHkoKCkgPT4gew0KICAgICAgICAgIHRoaXMuZm9ybVNhdmluZyA9IGZhbHNlDQogICAgICAgIH0pDQogICAgICB9KQ0KICAgIH0sDQoNCiAgICAvLyA9PT09PT09PT09PT09PT09PT09PSDlgZznlKgv5ZCv55So5YiH5o2iID09PT09PT09PT09PT09PT09PT09DQogICAgaGFuZGxlVG9nZ2xlRGlzYWJsZShyb3csIHZhbCkgew0KICAgICAgY29uc3QgaXNEaXNhYmxlID0gdmFsID09PSAxIHx8IHZhbCA9PT0gdHJ1ZQ0KICAgICAgY29uc3QgcHJldlR5ID0gaXNEaXNhYmxlID8gMCA6IDENCiAgICAgIGNvbnN0IGFjdGlvbk5hbWUgPSBpc0Rpc2FibGUgPyAn5YGc55SoJyA6ICflkK/nlKgnDQogICAgICB0aGlzLiRjb25maXJtKGDnoa7lrpropoEke2FjdGlvbk5hbWV944CMJHtyb3cuenltYyB8fCByb3cuenlkaCB8fCAn6K+l5LiT5LiaJ33jgI3lkJfvvJ9gLCAn57O757uf5o+Q56S6Jywgew0KICAgICAgICBjb25maXJtQnV0dG9uVGV4dDogJ+ehruWumicsDQogICAgICAgIGNhbmNlbEJ1dHRvblRleHQ6ICflj5bmtognLA0KICAgICAgICB0eXBlOiAnd2FybmluZycNCiAgICAgIH0pLnRoZW4oKCkgPT4gew0KICAgICAgICByZXR1cm4gdXBkYXRlTWFqb3IoeyAuLi5yb3csIHR5OiBpc0Rpc2FibGUgPyAxIDogMCB9KQ0KICAgICAgfSkudGhlbigoKSA9PiB7DQogICAgICAgIHRoaXMuJG1lc3NhZ2Uuc3VjY2VzcyhhY3Rpb25OYW1lICsgJ+aIkOWKnycpDQogICAgICAgIHRoaXMuZmV0Y2hMaXN0KCkNCiAgICAgIH0pLmNhdGNoKCgpID0+IHsNCiAgICAgICAgLy8g5Y+W5raI5oiW5o6l5Y+j5aSx6LSl5pe25Zue5rua5byA5YWz54q25oCB5bm25Yi35pawDQogICAgICAgIHJvdy50eSA9IHByZXZUeQ0KICAgICAgICB0aGlzLmZldGNoTGlzdCgpDQogICAgICB9KQ0KICAgIH0sDQoNCiAgICAvLyA9PT09PT09PT09PT09PT09PT09PSDliKDpmaQgPT09PT09PT09PT09PT09PT09PT0NCiAgICBoYW5kbGVEZWxldGUocm93KSB7DQogICAgICB0aGlzLiRjb25maXJtKGDnoa7lrpropoHliKDpmaTjgIwke3Jvdy56eW1jIHx8IHJvdy56eWRoIHx8ICfor6XkuJPkuJonfeOAjeWQl++8n2AsICfns7vnu5/mj5DnpLonLCB7DQogICAgICAgIGNvbmZpcm1CdXR0b25UZXh0OiAn56Gu5a6aJywNCiAgICAgICAgY2FuY2VsQnV0dG9uVGV4dDogJ+WPlua2iCcsDQogICAgICAgIHR5cGU6ICd3YXJuaW5nJw0KICAgICAgfSkudGhlbigoKSA9PiB7DQogICAgICAgIHJldHVybiBkZWxNYWpvcihyb3cuenlkaCkNCiAgICAgIH0pLnRoZW4oKCkgPT4gew0KICAgICAgICB0aGlzLiRtZXNzYWdlLnN1Y2Nlc3MoJ+WIoOmZpOaIkOWKnycpDQogICAgICAgIHRoaXMuZmV0Y2hMaXN0KCkNCiAgICAgIH0pLmNhdGNoKCgpID0+IHt9KQ0KICAgIH0sDQoNCiAgICAvLyA9PT09PT09PT09PT09PT09PT09PSDkuIvovb3mqKHmnb8gPT09PT09PT09PT09PT09PT09PT0NCiAgICBoYW5kbGVEb3dubG9hZFRlbXBsYXRlKCkgew0KICAgICAgZG93bmxvYWRNYWpvclRlbXBsYXRlKCkudGhlbihyZXMgPT4gew0KICAgICAgICBjb25zdCBibG9iID0gbmV3IEJsb2IoW3Jlc10sIHsgdHlwZTogJ2FwcGxpY2F0aW9uL3ZuZC5tcy1leGNlbDtjaGFyc2V0PXV0Zi04JyB9KQ0KICAgICAgICBjb25zdCBsaW5rID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnYScpDQogICAgICAgIGxpbmsuaHJlZiA9IFVSTC5jcmVhdGVPYmplY3RVUkwoYmxvYikNCiAgICAgICAgbGluay5kb3dubG9hZCA9ICfkurrmiY3ln7nlhbvmlrnmoYjor77nqIvmlbDmja7mlofku7bmqKHmnb8ueGxzJw0KICAgICAgICBsaW5rLmNsaWNrKCkNCiAgICAgICAgVVJMLnJldm9rZU9iamVjdFVSTChsaW5rLmhyZWYpDQogICAgICAgIHRoaXMuJG1lc3NhZ2Uuc3VjY2Vzcygn5qih5p2/5LiL6L295oiQ5YqfJykNCiAgICAgIH0pLmNhdGNoKCgpID0+IHt9KQ0KICAgIH0sDQoNCiAgICAvLyA9PT09PT09PT09PT09PT09PT09PSDor6bmg4UgPT09PT09PT09PT09PT09PT09PT0NCiAgICBoYW5kbGVWaWV3KHJvdykgew0KICAgICAgdGhpcy52aWV3RGlhbG9nVmlzaWJsZSA9IHRydWUNCiAgICAgIHRoaXMudmlld0xvYWRpbmcgPSB0cnVlDQogICAgICB0aGlzLnZpZXdGb3JtID0ge30NCiAgICAgIGdldE1ham9yKHJvdy56eWRoKS50aGVuKHJlc3BvbnNlID0+IHsNCiAgICAgICAgdGhpcy52aWV3Rm9ybSA9IHJlc3BvbnNlLmRhdGEgfHwge30NCiAgICAgICAgdGhpcy52aWV3TG9hZGluZyA9IGZhbHNlDQogICAgICB9KS5jYXRjaCgoKSA9PiB7DQogICAgICAgIHRoaXMudmlld0xvYWRpbmcgPSBmYWxzZQ0KICAgICAgfSkNCiAgICB9DQogIH0NCn0NCg=="},{"version":3,"sources":["index.vue"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AA0VA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;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;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;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;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;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;;AAEA;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;;AAEA;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","file":"index.vue","sourceRoot":"src/views/subjectMajor/major","sourcesContent":["<template>\r\n <div class=\"app-container major-page\">\r\n <!-- ==================== 1. 查询条件 ==================== -->\r\n <el-card shadow=\"never\" class=\"search-card\">\r\n <el-form ref=\"searchFormRef\" :model=\"searchForm\" label-width=\"140px\" class=\"search-form\">\r\n <el-row :gutter=\"24\">\r\n <el-col :xs=\"24\" :sm=\"12\" :md=\"12\" :lg=\"8\" :xl=\"8\">\r\n <el-form-item label=\"专业名称\">\r\n <el-input v-model=\"searchForm.zymc\" placeholder=\"请输入专业名称\" clearable @keyup.enter.native=\"handleSearch\" />\r\n </el-form-item>\r\n </el-col>\r\n <el-col :xs=\"24\" :sm=\"12\" :md=\"12\" :lg=\"8\" :xl=\"8\">\r\n <el-form-item label=\"专业方向\">\r\n <el-input v-model=\"searchForm.zyfx\" placeholder=\"请输入专业方向\" clearable @keyup.enter.native=\"handleSearch\" />\r\n </el-form-item>\r\n </el-col>\r\n <el-col :xs=\"24\" :sm=\"12\" :md=\"12\" :lg=\"8\" :xl=\"8\">\r\n <el-form-item label=\"专业代码\">\r\n <el-input v-model=\"searchForm.zydm\" placeholder=\"请输入专业代码\" clearable @keyup.enter.native=\"handleSearch\" />\r\n </el-form-item>\r\n </el-col>\r\n <el-col :xs=\"24\" :sm=\"12\" :md=\"12\" :lg=\"8\" :xl=\"8\">\r\n <el-form-item label=\"学年制\">\r\n <el-input v-model=\"searchForm.xnz\" placeholder=\"请输入学年制\" clearable @keyup.enter.native=\"handleSearch\" />\r\n </el-form-item>\r\n </el-col>\r\n <el-col :xs=\"24\" :sm=\"12\" :md=\"12\" :lg=\"8\" :xl=\"8\">\r\n <el-form-item label=\"培训类型\">\r\n <el-input v-model=\"searchForm.pxlx\" placeholder=\"请输入培训类型\" clearable @keyup.enter.native=\"handleSearch\" />\r\n </el-form-item>\r\n </el-col>\r\n <el-col :xs=\"24\" :sm=\"12\" :md=\"12\" :lg=\"8\" :xl=\"8\">\r\n <el-form-item label=\"培训类型2\">\r\n <el-input v-model=\"searchForm.pxlx2\" placeholder=\"请输入培训类型2\" clearable @keyup.enter.native=\"handleSearch\" />\r\n </el-form-item>\r\n </el-col>\r\n <el-col :xs=\"24\" :sm=\"12\" :md=\"12\" :lg=\"8\" :xl=\"8\">\r\n <el-form-item label=\"培训层次\">\r\n <el-input v-model=\"searchForm.pxcc\" placeholder=\"请输入培训层次\" clearable @keyup.enter.native=\"handleSearch\" />\r\n </el-form-item>\r\n </el-col>\r\n <el-col :xs=\"24\" :sm=\"12\" :md=\"12\" :lg=\"8\" :xl=\"8\">\r\n <el-form-item label=\"学科专业信息标识号\">\r\n <el-input v-model=\"searchForm.xkzyxxbsh\" placeholder=\"请输入学科专业信息标识号\" clearable @keyup.enter.native=\"handleSearch\" />\r\n </el-form-item>\r\n </el-col>\r\n <el-col :xs=\"24\" :sm=\"12\" :md=\"12\" :lg=\"8\" :xl=\"8\">\r\n <el-form-item label=\"状态\">\r\n <el-select v-model=\"searchForm.ty\" placeholder=\"请选择状态\" clearable style=\"width: 100%\">\r\n <el-option label=\"启用\" :value=\"0\" />\r\n <el-option label=\"停用\" :value=\"1\" />\r\n </el-select>\r\n </el-form-item>\r\n </el-col>\r\n </el-row>\r\n <el-row class=\"search-actions-row\">\r\n <el-col :span=\"24\" class=\"search-actions\">\r\n <el-button type=\"primary\" icon=\"el-icon-search\" @click=\"handleSearch\">查询</el-button>\r\n <el-button icon=\"el-icon-refresh\" @click=\"handleReset\">重置</el-button>\r\n </el-col>\r\n </el-row>\r\n </el-form>\r\n </el-card>\r\n\r\n <!-- ==================== 2. 列表 ==================== -->\r\n <el-card shadow=\"never\" class=\"table-card\">\r\n <div class=\"table-header\">\r\n <span class=\"table-title\">专业列表:</span>\r\n <div class=\"table-actions\">\r\n <el-button type=\"primary\" icon=\"el-icon-download\" @click=\"handleDownloadTemplate\">下载模板</el-button>\r\n <el-button type=\"primary\" icon=\"el-icon-plus\" @click=\"handleAdd\">新增专业</el-button>\r\n </div>\r\n </div>\r\n <el-table v-loading=\"loading\" :data=\"tableData\" stripe border highlight-current-row>\r\n <el-table-column label=\"序号\" width=\"60\" align=\"center\">\r\n <template slot-scope=\"scope\">{{ fmtXh(scope.$index) }}</template>\r\n </el-table-column>\r\n <el-table-column prop=\"zydh\" label=\"专业代号\" width=\"120\" show-overflow-tooltip />\r\n <el-table-column prop=\"zymc\" label=\"专业名称\" min-width=\"140\" show-overflow-tooltip />\r\n <el-table-column prop=\"zyfx\" label=\"专业方向\" min-width=\"120\" show-overflow-tooltip />\r\n <el-table-column prop=\"zydm\" label=\"专业代码\" width=\"110\" show-overflow-tooltip />\r\n <el-table-column prop=\"xnz\" label=\"学年制\" width=\"80\" align=\"center\" />\r\n <el-table-column prop=\"xqs\" label=\"学期数\" width=\"80\" align=\"center\" />\r\n <el-table-column prop=\"pxcc\" label=\"培训层次\" width=\"100\" align=\"center\" />\r\n <el-table-column prop=\"pxlx\" label=\"培训类型\" width=\"100\" align=\"center\" />\r\n <el-table-column prop=\"pxlx2\" label=\"培训类型2\" width=\"100\" align=\"center\" />\r\n <el-table-column prop=\"xylb\" label=\"学员类别\" width=\"100\" align=\"center\" />\r\n <el-table-column label=\"停用\" width=\"80\" align=\"center\">\r\n <template slot-scope=\"scope\">\r\n <el-tag\r\n :type=\"scope.row.ty === 1 || scope.row.ty === true ? 'danger' : 'success'\"\r\n class=\"ty-tag\"\r\n @click.native=\"handleToggleDisable(scope.row, scope.row.ty === 1 || scope.row.ty === true ? 0 : 1)\"\r\n >\r\n {{ scope.row.ty === 1 || scope.row.ty === true ? '是' : '否' }}\r\n </el-tag>\r\n </template>\r\n </el-table-column>\r\n <el-table-column label=\"操作\" width=\"180\" align=\"center\" fixed=\"right\">\r\n <template slot-scope=\"scope\">\r\n <el-button type=\"text\" size=\"small\" icon=\"el-icon-view\" @click=\"handleView(scope.row)\">详情</el-button>\r\n <el-button type=\"text\" size=\"small\" icon=\"el-icon-edit\" @click=\"handleEdit(scope.row)\">编辑</el-button>\r\n <el-button type=\"text\" size=\"small\" icon=\"el-icon-delete\" class=\"text-danger\" @click=\"handleDelete(scope.row)\">删除</el-button>\r\n </template>\r\n </el-table-column>\r\n </el-table>\r\n\r\n <el-pagination\r\n :current-page=\"pageNum\"\r\n :page-size=\"pageSize\"\r\n :total=\"total\"\r\n :page-sizes=\"[10, 20, 50, 100]\"\r\n layout=\"total, sizes, prev, pager, next, jumper\"\r\n class=\"pagination-wrapper\"\r\n @current-change=\"handlePageChange\"\r\n @size-change=\"handleSizeChange\"\r\n />\r\n </el-card>\r\n\r\n <!-- ==================== 3. 新增/编辑专业对话框 ==================== -->\r\n <el-dialog\r\n :title=\"formTitle\"\r\n :visible.sync=\"formDialogVisible\"\r\n width=\"900px\"\r\n :close-on-click-modal=\"false\"\r\n >\r\n <el-form ref=\"formRef\" :model=\"form\" :rules=\"formRules\" label-width=\"130px\" class=\"form-dialog-form\">\r\n <el-divider content-position=\"left\">基本信息</el-divider>\r\n <el-row :gutter=\"16\">\r\n <el-col :span=\"12\">\r\n <el-form-item label=\"专业代号\" prop=\"zydh\">\r\n <el-input v-model=\"form.zydh\" :disabled=\"!isAdd\" placeholder=\"请输入专业代号\" />\r\n </el-form-item>\r\n </el-col>\r\n <el-col :span=\"12\">\r\n <el-form-item label=\"专业名称\" prop=\"zymc\">\r\n <el-input v-model=\"form.zymc\" placeholder=\"请输入专业名称\" />\r\n </el-form-item>\r\n </el-col>\r\n <el-col :span=\"12\">\r\n <el-form-item label=\"专业方向\" prop=\"zyfx\">\r\n <el-input v-model=\"form.zyfx\" placeholder=\"请输入专业方向\" />\r\n </el-form-item>\r\n </el-col>\r\n <el-col :span=\"12\">\r\n <el-form-item label=\"专业代码\" prop=\"zydm\">\r\n <el-input v-model=\"form.zydm\" placeholder=\"请输入专业代码\" />\r\n </el-form-item>\r\n </el-col>\r\n <el-col :span=\"12\">\r\n <el-form-item label=\"专业版本\" prop=\"zybb\">\r\n <el-input v-model=\"form.zybb\" placeholder=\"请输入专业版本\" />\r\n </el-form-item>\r\n </el-col>\r\n <el-col :span=\"12\">\r\n <el-form-item label=\"学年制\" prop=\"xnz\">\r\n <el-input v-model=\"form.xnz\" placeholder=\"请输入学年制\" />\r\n </el-form-item>\r\n </el-col>\r\n <el-col :span=\"12\">\r\n <el-form-item label=\"学期数\" prop=\"xqs\">\r\n <el-input-number v-model=\"form.xqs\" :min=\"0\" :max=\"999\" controls-position=\"right\" style=\"width: 100%\" placeholder=\"请输入学期数\" />\r\n </el-form-item>\r\n </el-col>\r\n <el-col :span=\"12\">\r\n <el-form-item label=\"专业标识号\" prop=\"zybsh\">\r\n <el-input v-model=\"form.zybsh\" placeholder=\"请输入专业标识号\" />\r\n </el-form-item>\r\n </el-col>\r\n <el-col :span=\"12\">\r\n <el-form-item label=\"学科专业信息标识号\" prop=\"xkzyxxbsh\">\r\n <el-input v-model=\"form.xkzyxxbsh\" 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=\"form.jxgljgbh\" 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=\"form.gfmc\" 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=\"form.jc\" placeholder=\"请输入简称\" />\r\n </el-form-item>\r\n </el-col>\r\n </el-row>\r\n\r\n <el-divider content-position=\"left\">培训信息</el-divider>\r\n <el-row :gutter=\"16\">\r\n <el-col :span=\"12\">\r\n <el-form-item label=\"培训层次\" prop=\"pxcc\">\r\n <el-input v-model=\"form.pxcc\" placeholder=\"请输入培训层次\" />\r\n </el-form-item>\r\n </el-col>\r\n <el-col :span=\"12\">\r\n <el-form-item label=\"培训类型\" prop=\"pxlx\">\r\n <el-input v-model=\"form.pxlx\" placeholder=\"请输入培训类型\" />\r\n </el-form-item>\r\n </el-col>\r\n <el-col :span=\"12\">\r\n <el-form-item label=\"培训类型2\" prop=\"pxlx2\">\r\n <el-input v-model=\"form.pxlx2\" placeholder=\"请输入培训类型2\" />\r\n </el-form-item>\r\n </el-col>\r\n <el-col :span=\"12\">\r\n <el-form-item label=\"学员类别\" prop=\"xylb\">\r\n <el-input v-model=\"form.xylb\" placeholder=\"请输入学员类别\" />\r\n </el-form-item>\r\n </el-col>\r\n <el-col :span=\"12\">\r\n <el-form-item label=\"主干专业\" prop=\"zgzy\">\r\n <el-select v-model=\"form.zgzy\" placeholder=\"请选择\" clearable style=\"width: 100%\">\r\n <el-option label=\"是\" value=\"是\" />\r\n <el-option label=\"否\" value=\"否\" />\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=\"zdyfl\">\r\n <el-input v-model=\"form.zdyfl\" placeholder=\"请输入自定义分类\" />\r\n </el-form-item>\r\n </el-col>\r\n <el-col :span=\"12\">\r\n <el-form-item label=\"节次类别\" prop=\"jclb\">\r\n <el-input v-model=\"form.jclb\" placeholder=\"请输入节次类别\" />\r\n </el-form-item>\r\n </el-col>\r\n <el-col :span=\"12\">\r\n <el-form-item label=\"系统模式\" prop=\"xtms\">\r\n <el-input v-model=\"form.xtms\" placeholder=\"请输入系统模式\" />\r\n </el-form-item>\r\n </el-col>\r\n </el-row>\r\n\r\n <el-divider content-position=\"left\">其他信息</el-divider>\r\n <el-row :gutter=\"16\">\r\n <el-col :span=\"12\">\r\n <el-form-item label=\"教学大纲编号\">\r\n <el-input v-model=\"form.jxdgbh\" 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=\"form.rpbh\" 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=\"form.xhbs\" :min=\"0\" controls-position=\"right\" style=\"width: 100%\" placeholder=\"请输入序号标识\" />\r\n </el-form-item>\r\n </el-col>\r\n <el-col :span=\"12\">\r\n <el-form-item label=\"JSON字段\">\r\n <el-input v-model=\"form.jsonzd\" placeholder=\"请输入JSON字段\" />\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-switch v-model=\"form.ty\" :active-value=\"1\" :inactive-value=\"0\" active-text=\"是\" inactive-text=\"否\" />\r\n </el-form-item>\r\n </el-col>\r\n <el-col :span=\"12\">\r\n <el-form-item label=\"启用时间\">\r\n <el-date-picker v-model=\"form.qysj\" type=\"datetime\" placeholder=\"请选择启用时间\" value-format=\"yyyy-MM-dd HH:mm:ss\" style=\"width: 100%\" />\r\n </el-form-item>\r\n </el-col>\r\n <el-col :span=\"12\">\r\n <el-form-item label=\"停用时间\">\r\n <el-date-picker v-model=\"form.tysj\" type=\"datetime\" placeholder=\"请选择停用时间\" value-format=\"yyyy-MM-dd HH:mm:ss\" style=\"width: 100%\" />\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=\"form.pymb\" placeholder=\"请输入培养目标\" />\r\n </el-form-item>\r\n </el-col>\r\n <el-col :span=\"24\">\r\n <el-form-item label=\"专业备注\">\r\n <el-input v-model=\"form.zybz\" type=\"textarea\" :rows=\"3\" placeholder=\"请输入专业备注\" />\r\n </el-form-item>\r\n </el-col>\r\n <el-col :span=\"24\">\r\n <el-form-item label=\"专业规范\">\r\n <el-input v-model=\"form.zygf\" type=\"textarea\" :rows=\"3\" placeholder=\"请输入专业规范\" />\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=\"formDialogVisible = false\">取 消</el-button>\r\n <el-button type=\"primary\" :loading=\"formSaving\" @click=\"handleFormSubmit\">确 定</el-button>\r\n </div>\r\n </el-dialog>\r\n\r\n <!-- ==================== 4. 详情对话框 ==================== -->\r\n <el-dialog title=\"专业详情\" :visible.sync=\"viewDialogVisible\" width=\"700px\" :close-on-click-modal=\"false\">\r\n <div v-loading=\"viewLoading\" class=\"detail-body\">\r\n <el-descriptions :column=\"2\" border>\r\n <el-descriptions-item label=\"专业代号\">{{ viewForm.zydh || '-' }}</el-descriptions-item>\r\n <el-descriptions-item label=\"专业名称\">{{ viewForm.zymc || '-' }}</el-descriptions-item>\r\n <el-descriptions-item label=\"专业方向\">{{ viewForm.zyfx || '-' }}</el-descriptions-item>\r\n <el-descriptions-item label=\"专业代码\">{{ viewForm.zydm || '-' }}</el-descriptions-item>\r\n <el-descriptions-item label=\"专业版本\">{{ viewForm.zybb || '-' }}</el-descriptions-item>\r\n <el-descriptions-item label=\"专业标识号\">{{ viewForm.zybsh || '-' }}</el-descriptions-item>\r\n <el-descriptions-item label=\"学年制\">{{ viewForm.xnz || '-' }}</el-descriptions-item>\r\n <el-descriptions-item label=\"学期数\">{{ viewForm.xqs || '-' }}</el-descriptions-item>\r\n <el-descriptions-item label=\"培训层次\">{{ viewForm.pxcc || '-' }}</el-descriptions-item>\r\n <el-descriptions-item label=\"培训类型\">{{ viewForm.pxlx || '-' }}</el-descriptions-item>\r\n <el-descriptions-item label=\"培训类型2\">{{ viewForm.pxlx2 || '-' }}</el-descriptions-item>\r\n <el-descriptions-item label=\"学员类别\">{{ viewForm.xylb || '-' }}</el-descriptions-item>\r\n <el-descriptions-item label=\"主干专业\">{{ viewForm.zgzy || '-' }}</el-descriptions-item>\r\n <el-descriptions-item label=\"自定义分类\">{{ viewForm.zdyfl || '-' }}</el-descriptions-item>\r\n <el-descriptions-item label=\"教学管理机构编号\">{{ viewForm.jxgljgbh || '-' }}</el-descriptions-item>\r\n <el-descriptions-item label=\"学科专业信息标识号\">{{ viewForm.xkzyxxbsh || '-' }}</el-descriptions-item>\r\n <el-descriptions-item label=\"简称\">{{ viewForm.jc || '-' }}</el-descriptions-item>\r\n <el-descriptions-item label=\"规范名称\">{{ viewForm.gfmc || '-' }}</el-descriptions-item>\r\n <el-descriptions-item label=\"节次类别\">{{ viewForm.jclb || '-' }}</el-descriptions-item>\r\n <el-descriptions-item label=\"系统模式\">{{ viewForm.xtms || '-' }}</el-descriptions-item>\r\n <el-descriptions-item label=\"序号标识\">{{ viewForm.xhbs || '-' }}</el-descriptions-item>\r\n <el-descriptions-item label=\"教学大纲编号\">{{ viewForm.jxdgbh || '-' }}</el-descriptions-item>\r\n <el-descriptions-item label=\"人培编号\">{{ viewForm.rpbh || '-' }}</el-descriptions-item>\r\n <el-descriptions-item label=\"启用时间\">{{ viewForm.qysj || '-' }}</el-descriptions-item>\r\n <el-descriptions-item label=\"停用时间\">{{ viewForm.tysj || '-' }}</el-descriptions-item>\r\n <el-descriptions-item label=\"停用\">\r\n <el-tag :type=\"viewForm.ty === 1 || viewForm.ty === true ? 'danger' : 'success'\" size=\"mini\">\r\n {{ viewForm.ty === 1 || viewForm.ty === true ? '是' : '否' }}\r\n </el-tag>\r\n </el-descriptions-item>\r\n <el-descriptions-item label=\"JSON字段\">{{ viewForm.jsonzd || '-' }}</el-descriptions-item>\r\n <el-descriptions-item label=\"培养目标\" :span=\"2\">{{ viewForm.pymb || '-' }}</el-descriptions-item>\r\n <el-descriptions-item label=\"专业备注\" :span=\"2\">{{ viewForm.zybz || '-' }}</el-descriptions-item>\r\n <el-descriptions-item label=\"专业规范\" :span=\"2\">{{ viewForm.zygf || '-' }}</el-descriptions-item>\r\n </el-descriptions>\r\n </div>\r\n <div slot=\"footer\" class=\"dialog-footer\">\r\n <el-button @click=\"viewDialogVisible = false\">关 闭</el-button>\r\n </div>\r\n </el-dialog>\r\n </div>\r\n</template>\r\n\r\n<script>\r\nimport {\r\n listMajor,\r\n getMajor,\r\n addMajor,\r\n updateMajor,\r\n delMajor,\r\n downloadMajorTemplate\r\n} from \"@/api/subjectMajor/major\"\r\n\r\nexport default {\r\n name: \"Major\",\r\n data() {\r\n return {\r\n // ==================== 查询条件 ====================\r\n searchForm: {\r\n zymc: '',\r\n zyfx: '',\r\n zydm: '',\r\n xnz: '',\r\n pxlx: '',\r\n pxlx2: '',\r\n pxcc: '',\r\n xkzyxxbsh: '',\r\n ty: ''\r\n },\r\n\r\n // ==================== 列表数据 ====================\r\n loading: false,\r\n tableData: [],\r\n total: 0,\r\n pageNum: 1,\r\n pageSize: 20,\r\n\r\n // ==================== 新增/编辑 ====================\r\n formDialogVisible: false,\r\n formTitle: '新增专业',\r\n isAdd: true,\r\n formSaving: false,\r\n form: this.createEmptyForm(),\r\n formRules: {\r\n zydh: [{ required: true, message: \"专业代号不能为空\", trigger: \"blur\" }],\r\n zymc: [{ required: true, message: \"专业名称不能为空\", trigger: \"blur\" }],\r\n zyfx: [{ required: true, message: \"专业方向不能为空\", trigger: \"blur\" }],\r\n zydm: [{ required: true, message: \"专业代码不能为空\", trigger: \"blur\" }],\r\n zybb: [{ required: true, message: \"专业版本不能为空\", trigger: \"blur\" }],\r\n xnz: [{ required: true, message: \"学年制不能为空\", trigger: \"blur\" }],\r\n xqs: [{ required: true, message: \"学期数不能为空\", trigger: \"change\" }],\r\n zybsh: [{ required: true, message: \"专业标识号不能为空\", trigger: \"blur\" }],\r\n pxcc: [{ required: true, message: \"培训层次不能为空\", trigger: \"blur\" }],\r\n pxlx: [{ required: true, message: \"培训类型不能为空\", trigger: \"blur\" }],\r\n pxlx2: [{ required: true, message: \"培训类型2不能为空\", trigger: \"blur\" }],\r\n xylb: [{ required: true, message: \"学员类别不能为空\", trigger: \"blur\" }],\r\n zdyfl: [{ required: true, message: \"自定义分类不能为空\", trigger: \"blur\" }],\r\n zgzy: [{ required: true, message: \"主干专业不能为空\", trigger: \"change\" }],\r\n jclb: [{ required: true, message: \"节次类别不能为空\", trigger: \"blur\" }],\r\n xtms: [{ required: true, message: \"系统模式不能为空\", trigger: \"blur\" }]\r\n },\r\n\r\n // ==================== 详情 ====================\r\n viewDialogVisible: false,\r\n viewLoading: false,\r\n viewForm: {}\r\n }\r\n },\r\n created() {\r\n this.fetchList()\r\n },\r\n methods: {\r\n /** 表格序号(跨页连续) */\r\n fmtXh(index) {\r\n return (this.pageNum - 1) * this.pageSize + index + 1\r\n },\r\n\r\n /** 创建空表单 */\r\n createEmptyForm() {\r\n return {\r\n zydh: '',\r\n zymc: '',\r\n zyfx: '',\r\n xnz: '',\r\n xqs: undefined,\r\n zybz: '',\r\n zygf: '',\r\n zydm: '',\r\n zybb: '',\r\n ty: 0,\r\n qysj: null,\r\n tysj: null,\r\n jxgljgbh: '',\r\n pxcc: '',\r\n pxlx: '',\r\n xkzyxxbsh: '',\r\n pxlx2: '',\r\n xylb: '',\r\n zdyfl: '',\r\n zybsh: '',\r\n xhbs: undefined,\r\n jc: '',\r\n jclb: '',\r\n xtms: '',\r\n jsonzd: '',\r\n zgzy: '',\r\n gfmc: '',\r\n jxdgbh: '',\r\n rpbh: '',\r\n pymb: ''\r\n }\r\n },\r\n\r\n // ==================== 查询列表 ====================\r\n fetchList() {\r\n this.loading = true\r\n const params = {\r\n pageNum: this.pageNum,\r\n pageSize: this.pageSize\r\n }\r\n // 状态:0 启用 / 1 停用(选中时才传)\r\n if (this.searchForm.ty !== '' && this.searchForm.ty !== null && this.searchForm.ty !== undefined) {\r\n params.ty = this.searchForm.ty\r\n }\r\n // 其余文本条件非空时才传\r\n ;['zymc', 'zyfx', 'zydm', 'xnz', 'pxlx', 'pxlx2', 'pxcc', 'xkzyxxbsh'].forEach(key => {\r\n if (this.searchForm[key] !== '' && this.searchForm[key] !== null && this.searchForm[key] !== undefined) {\r\n params[key] = this.searchForm[key].trim()\r\n }\r\n })\r\n listMajor(params).then(response => {\r\n const data = response.data || {}\r\n this.tableData = data.records || []\r\n this.total = data.total || 0\r\n this.loading = false\r\n }).catch(() => {\r\n this.tableData = []\r\n this.total = 0\r\n this.loading = false\r\n })\r\n },\r\n\r\n handleSearch() {\r\n this.pageNum = 1\r\n this.fetchList()\r\n },\r\n\r\n handleReset() {\r\n this.searchForm = {\r\n zymc: '',\r\n zyfx: '',\r\n zydm: '',\r\n xnz: '',\r\n pxlx: '',\r\n pxlx2: '',\r\n pxcc: '',\r\n xkzyxxbsh: '',\r\n ty: ''\r\n }\r\n this.pageNum = 1\r\n this.fetchList()\r\n },\r\n\r\n handlePageChange(current) {\r\n this.pageNum = current\r\n this.fetchList()\r\n },\r\n\r\n handleSizeChange(size) {\r\n this.pageSize = size\r\n this.pageNum = 1\r\n this.fetchList()\r\n },\r\n\r\n // ==================== 新增/编辑 ====================\r\n handleAdd() {\r\n this.isAdd = true\r\n this.formTitle = '新增专业'\r\n this.form = this.createEmptyForm()\r\n this.formDialogVisible = true\r\n this.$nextTick(() => {\r\n this.$refs.formRef && this.$refs.formRef.clearValidate()\r\n })\r\n },\r\n\r\n handleEdit(row) {\r\n this.isAdd = false\r\n this.formTitle = '编辑专业'\r\n this.form = this.createEmptyForm()\r\n this.formDialogVisible = true\r\n this.$nextTick(() => {\r\n this.$refs.formRef && this.$refs.formRef.clearValidate()\r\n })\r\n getMajor(row.zydh).then(response => {\r\n const data = response.data || {}\r\n this.form = {\r\n zydh: data.zydh,\r\n zymc: data.zymc,\r\n zyfx: data.zyfx,\r\n xnz: data.xnz,\r\n xqs: data.xqs !== null && data.xqs !== undefined ? data.xqs : undefined,\r\n zybz: data.zybz,\r\n zygf: data.zygf,\r\n zydm: data.zydm,\r\n zybb: data.zybb,\r\n ty: data.ty === 1 || data.ty === true ? 1 : 0,\r\n qysj: data.qysj,\r\n tysj: data.tysj,\r\n jxgljgbh: data.jxgljgbh,\r\n pxcc: data.pxcc,\r\n pxlx: data.pxlx,\r\n xkzyxxbsh: data.xkzyxxbsh,\r\n pxlx2: data.pxlx2,\r\n xylb: data.xylb,\r\n zdyfl: data.zdyfl,\r\n zybsh: data.zybsh,\r\n xhbs: data.xhbs,\r\n jc: data.jc,\r\n jclb: data.jclb,\r\n xtms: data.xtms,\r\n jsonzd: data.jsonzd,\r\n zgzy: data.zgzy,\r\n gfmc: data.gfmc,\r\n jxdgbh: data.jxdgbh,\r\n rpbh: data.rpbh,\r\n pymb: data.pymb\r\n }\r\n }).catch(() => {})\r\n },\r\n\r\n handleFormSubmit() {\r\n this.$refs.formRef.validate(valid => {\r\n if (!valid) return\r\n this.formSaving = true\r\n const payload = { ...this.form }\r\n const request = this.isAdd ? addMajor(payload) : updateMajor(payload)\r\n request.then(() => {\r\n this.$message.success(this.isAdd ? '新增成功' : '修改成功')\r\n this.formDialogVisible = false\r\n this.fetchList()\r\n }).catch(() => {\r\n }).finally(() => {\r\n this.formSaving = false\r\n })\r\n })\r\n },\r\n\r\n // ==================== 停用/启用切换 ====================\r\n handleToggleDisable(row, val) {\r\n const isDisable = val === 1 || val === true\r\n const prevTy = isDisable ? 0 : 1\r\n const actionName = isDisable ? '停用' : '启用'\r\n this.$confirm(`确定要${actionName}「${row.zymc || row.zydh || '该专业'}」吗?`, '系统提示', {\r\n confirmButtonText: '确定',\r\n cancelButtonText: '取消',\r\n type: 'warning'\r\n }).then(() => {\r\n return updateMajor({ ...row, ty: isDisable ? 1 : 0 })\r\n }).then(() => {\r\n this.$message.success(actionName + '成功')\r\n this.fetchList()\r\n }).catch(() => {\r\n // 取消或接口失败时回滚开关状态并刷新\r\n row.ty = prevTy\r\n this.fetchList()\r\n })\r\n },\r\n\r\n // ==================== 删除 ====================\r\n handleDelete(row) {\r\n this.$confirm(`确定要删除「${row.zymc || row.zydh || '该专业'}」吗?`, '系统提示', {\r\n confirmButtonText: '确定',\r\n cancelButtonText: '取消',\r\n type: 'warning'\r\n }).then(() => {\r\n return delMajor(row.zydh)\r\n }).then(() => {\r\n this.$message.success('删除成功')\r\n this.fetchList()\r\n }).catch(() => {})\r\n },\r\n\r\n // ==================== 下载模板 ====================\r\n handleDownloadTemplate() {\r\n downloadMajorTemplate().then(res => {\r\n const blob = new Blob([res], { type: 'application/vnd.ms-excel;charset=utf-8' })\r\n const link = document.createElement('a')\r\n link.href = URL.createObjectURL(blob)\r\n link.download = '人才培养方案课程数据文件模板.xls'\r\n link.click()\r\n URL.revokeObjectURL(link.href)\r\n this.$message.success('模板下载成功')\r\n }).catch(() => {})\r\n },\r\n\r\n // ==================== 详情 ====================\r\n handleView(row) {\r\n this.viewDialogVisible = true\r\n this.viewLoading = true\r\n this.viewForm = {}\r\n getMajor(row.zydh).then(response => {\r\n this.viewForm = response.data || {}\r\n this.viewLoading = false\r\n }).catch(() => {\r\n this.viewLoading = false\r\n })\r\n }\r\n }\r\n}\r\n</script>\r\n\r\n<style scoped lang=\"scss\">\r\n.major-page {\r\n .search-card {\r\n margin-bottom: 16px;\r\n }\r\n\r\n .search-form {\r\n ::v-deep .el-form-item {\r\n margin-bottom: 18px;\r\n }\r\n\r\n .search-actions-row {\r\n margin-top: 2px;\r\n border-top: 1px dashed #ebeef5;\r\n padding-top: 14px;\r\n }\r\n\r\n .search-actions {\r\n display: flex;\r\n align-items: center;\r\n justify-content: flex-end;\r\n gap: 12px;\r\n }\r\n }\r\n\r\n .table-card {\r\n .table-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 .table-title {\r\n font-size: 16px;\r\n font-weight: 600;\r\n color: #303133;\r\n }\r\n\r\n .table-actions {\r\n display: flex;\r\n align-items: center;\r\n gap: 10px;\r\n }\r\n }\r\n\r\n .pagination-wrapper {\r\n display: flex;\r\n justify-content: flex-end;\r\n margin-top: 16px;\r\n }\r\n }\r\n\r\n .form-dialog-form {\r\n max-height: 62vh;\r\n overflow-y: auto;\r\n padding-right: 6px;\r\n\r\n ::v-deep .el-divider--horizontal {\r\n margin: 4px 0 16px;\r\n }\r\n }\r\n\r\n .text-danger {\r\n color: #f56c6c;\r\n padding: 0;\r\n }\r\n\r\n .ty-tag {\r\n cursor: pointer;\r\n user-select: none;\r\n }\r\n}\r\n</style>\r\n"]}]}