Files
education/frontend/node_modules/.cache/babel-loader/a1303a788c57e7d7677dba41575615d8.json
T

1 line
125 KiB
JSON
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
{"remainingRequest":"C:\\Users\\Admin\\Desktop\\education\\frontend\\node_modules\\babel-loader\\lib\\index.js!C:\\Users\\Admin\\Desktop\\education\\frontend\\node_modules\\cache-loader\\dist\\cjs.js??ref--0-0!C:\\Users\\Admin\\Desktop\\education\\frontend\\node_modules\\vue-loader\\lib\\index.js??vue-loader-options!C:\\Users\\Admin\\Desktop\\education\\frontend\\src\\views\\textbook\\index.vue?vue&type=script&lang=js","dependencies":[{"path":"C:\\Users\\Admin\\Desktop\\education\\frontend\\src\\views\\textbook\\index.vue","mtime":1787640892029},{"path":"C:\\Users\\Admin\\Desktop\\education\\frontend\\babel.config.js","mtime":1787567871334},{"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:InVzZSBzdHJpY3QiOwoKdmFyIF9pbnRlcm9wUmVxdWlyZURlZmF1bHQgPSByZXF1aXJlKCJDOi9Vc2Vycy9BZG1pbi9EZXNrdG9wL2VkdWNhdGlvbi9mcm9udGVuZC9ub2RlX21vZHVsZXMvQGJhYmVsL3J1bnRpbWUvaGVscGVycy9pbnRlcm9wUmVxdWlyZURlZmF1bHQuanMiKS5kZWZhdWx0OwpPYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgIl9fZXNNb2R1bGUiLCB7CiAgdmFsdWU6IHRydWUKfSk7CmV4cG9ydHMuZGVmYXVsdCA9IHZvaWQgMDsKdmFyIF9vYmplY3RTcHJlYWQyID0gX2ludGVyb3BSZXF1aXJlRGVmYXVsdChyZXF1aXJlKCJDOi9Vc2Vycy9BZG1pbi9EZXNrdG9wL2VkdWNhdGlvbi9mcm9udGVuZC9ub2RlX21vZHVsZXMvQGJhYmVsL3J1bnRpbWUvaGVscGVycy9vYmplY3RTcHJlYWQyLmpzIikpOwpyZXF1aXJlKCJjb3JlLWpzL21vZHVsZXMvZXMuYXJyYXkuc2xpY2UuanMiKTsKcmVxdWlyZSgiY29yZS1qcy9tb2R1bGVzL2VzLmZ1bmN0aW9uLm5hbWUuanMiKTsKcmVxdWlyZSgiY29yZS1qcy9tb2R1bGVzL2VzLm51bWJlci5jb25zdHJ1Y3Rvci5qcyIpOwpyZXF1aXJlKCJjb3JlLWpzL21vZHVsZXMvZXMub2JqZWN0LmtleXMuanMiKTsKcmVxdWlyZSgiY29yZS1qcy9tb2R1bGVzL2VzLm9iamVjdC50by1zdHJpbmcuanMiKTsKcmVxdWlyZSgiY29yZS1qcy9tb2R1bGVzL2VzLnJlZ2V4cC5leGVjLmpzIik7CnJlcXVpcmUoImNvcmUtanMvbW9kdWxlcy9lcy5zdHJpbmcucmVwbGFjZS5qcyIpOwpyZXF1aXJlKCJjb3JlLWpzL21vZHVsZXMvZXMuc3RyaW5nLnRyaW0uanMiKTsKcmVxdWlyZSgiY29yZS1qcy9tb2R1bGVzL2VzbmV4dC5pdGVyYXRvci5jb25zdHJ1Y3Rvci5qcyIpOwpyZXF1aXJlKCJjb3JlLWpzL21vZHVsZXMvZXNuZXh0Lml0ZXJhdG9yLmZvci1lYWNoLmpzIik7CnJlcXVpcmUoImNvcmUtanMvbW9kdWxlcy93ZWIuZG9tLWNvbGxlY3Rpb25zLmZvci1lYWNoLmpzIik7CnZhciBfZmlsZVNhdmVyID0gcmVxdWlyZSgiZmlsZS1zYXZlciIpOwp2YXIgX3RlYWNoaW5nTWF0ZXJpYWwgPSByZXF1aXJlKCJAL2FwaS90ZXh0Ym9vay90ZWFjaGluZ01hdGVyaWFsIik7CnZhciBfdGVhY2hpbmdTdG9jayA9IHJlcXVpcmUoIkAvYXBpL3RleHRib29rL3RlYWNoaW5nU3RvY2siKTsKLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KdmFyIF9kZWZhdWx0ID0gZXhwb3J0cy5kZWZhdWx0ID0gewogIG5hbWU6ICdUZXh0Ym9va0luZGV4JywKICBkYXRhOiBmdW5jdGlvbiBkYXRhKCkgewogICAgcmV0dXJuIHsKICAgICAgYWN0aXZlVGFiOiAnaW5mbycsCiAgICAgIC8vID09PT09PT09PT09PT09PT09PT09IOafpeivouihqOWNle+8iOS7heWQjuerryBNYXBwZXIg5pSv5oyB55qE5a2X5q6177yJID09PT09PT09PT09PT09PT09PT09CiAgICAgIHNlYXJjaEZvcm06IHsKICAgICAgICBiaDogJycsCiAgICAgICAgbWM6ICcnLAogICAgICAgIHp6OiAnJywKICAgICAgICBjYnM6ICcnLAogICAgICAgIGlzYm46ICcnLAogICAgICAgIGpjZmw6ICcnLAogICAgICAgIGpjbHg6ICcnLAogICAgICAgIHR5VHlwZTogJycKICAgICAgfSwKICAgICAgLy8gPT09PT09PT09PT09PT09PT09PT0g5LiL5ouJ6YCJ6aG5ID09PT09PT09PT09PT09PT09PT09CiAgICAgIGpjZmxPcHRpb25zOiBbJ+WfuuacrOaVmeadkCcsICfovoXliqnmlZnmnZAnLCAn5Y+C6ICD6LWE5paZJ10sCiAgICAgIGpjbHhPcHRpb25zOiBbJ+WbveWutuinhOWIkicsICflhpvpmJ/op4TliJInLCAn6Zmi5qCh6Ieq57yWJ10sCiAgICAgIGpjYnhseE9wdGlvbnM6IFsn6Ieq57yWJywgJ+mAieeUqCddLAogICAgICBqY3pkbHhPcHRpb25zOiBbJ+S4gOiIrOaVmeadkCcsICfph43ngrnmlZnmnZAnLCAn6KeE5YiS5pWZ5p2QJ10sCiAgICAgIGpjbHlPcHRpb25zOiBbJ+aVmeeglOS/nemanOS4reW/g+Wklui0rScsICfoh6rotK0nLCAn5LiK57qn6YWN5Y+RJ10sCiAgICAgIGpjY2NPcHRpb25zOiBbJ+aXoCcsICfmnKznp5EnLCAn56CU56m255SfJ10sCiAgICAgIGNiZnNPcHRpb25zOiBbJ+WFrOW8gOWHuueJiCcsICflhoXpg6jlh7rniYgnXSwKICAgICAgamNtak9wdGlvbnM6IFsn5YWs5byAJywgJ+WGhemDqCcsICfnp5jlr4YnXSwKICAgICAgamxkd09wdGlvbnM6IFsn5pysJywgJ+WGjCddLAogICAgICAvLyA9PT09PT09PT09PT09PT09PT09PSDooajmoLzmlbDmja4gPT09PT09PT09PT09PT09PT09PT0KICAgICAgbG9hZGluZzogZmFsc2UsCiAgICAgIHRhYmxlRGF0YTogW10sCiAgICAgIHBhZ2VOdW06IDEsCiAgICAgIHBhZ2VTaXplOiAyMCwKICAgICAgdG90YWw6IDAsCiAgICAgIC8vID09PT09PT09PT09PT09PT09PT09IOaWsOW7uuaVmeadkCA9PT09PT09PT09PT09PT09PT09PQogICAgICBhZGREaWFsb2dWaXNpYmxlOiBmYWxzZSwKICAgICAgYWRkU2F2aW5nOiBmYWxzZSwKICAgICAgYWRkRm9ybTogdGhpcy5jcmVhdGVFbXB0eUZvcm0oKSwKICAgICAgLy8gPT09PT09PT09PT09PT09PT09PT0g57yW6L6R5pWZ5p2QID09PT09PT09PT09PT09PT09PT09CiAgICAgIGVkaXREaWFsb2dWaXNpYmxlOiBmYWxzZSwKICAgICAgZWRpdExvYWRpbmc6IGZhbHNlLAogICAgICBlZGl0U2F2aW5nOiBmYWxzZSwKICAgICAgZWRpdEZvcm06IHRoaXMuY3JlYXRlRW1wdHlGb3JtKCksCiAgICAgIC8vID09PT09PT09PT09PT09PT09PT09IOihqOWNleagoemqjCA9PT09PT09PT09PT09PT09PT09PQogICAgICBmb3JtUnVsZXM6IHsKICAgICAgICBtYzogW3sKICAgICAgICAgIHJlcXVpcmVkOiB0cnVlLAogICAgICAgICAgbWVzc2FnZTogJ+ivt+i+k+WFpeaVmeadkOWQjeensCcsCiAgICAgICAgICB0cmlnZ2VyOiAnYmx1cicKICAgICAgICB9XSwKICAgICAgICBqY2J4bHg6IFt7CiAgICAgICAgICByZXF1aXJlZDogdHJ1ZSwKICAgICAgICAgIG1lc3NhZ2U6ICfor7fpgInmi6nnvJblhpnnsbvlnosnLAogICAgICAgICAgdHJpZ2dlcjogJ2NoYW5nZScKICAgICAgICB9XQogICAgICB9LAogICAgICAvLyA9PT09PT09PT09PT09PT09PT09PSDlr7zlhaUgPT09PT09PT09PT09PT09PT09PT0KICAgICAgc2VsZWN0ZWRGaWxlOiBudWxsLAogICAgICAvLyA9PT09PT09PT09PT09PT09PT09PSDmlZnmnZDlupPlrZjljZXvvIhKQ0tDRO+8iSA9PT09PT09PT09PT09PT09PT09PQogICAgICBzdG9ja1NlYXJjaEZvcm06IHsKICAgICAgICBiaDogJycsCiAgICAgICAgbWM6ICcnLAogICAgICAgIGxiOiAnJywKICAgICAgICB6YjogJycsCiAgICAgICAgenQ6ICcnCiAgICAgIH0sCiAgICAgIHN0b2NrTG9hZGluZzogZmFsc2UsCiAgICAgIHN0b2NrVGFibGVEYXRhOiBbXSwKICAgICAgc3RvY2tQYWdlTnVtOiAxLAogICAgICBzdG9ja1BhZ2VTaXplOiAyMCwKICAgICAgc3RvY2tUb3RhbDogMCwKICAgICAgc3RvY2tGb3JtRGlhbG9nVmlzaWJsZTogZmFsc2UsCiAgICAgIHN0b2NrRm9ybUxvYWRpbmc6IGZhbHNlLAogICAgICBzdG9ja1NhdmluZzogZmFsc2UsCiAgICAgIGlzU3RvY2tBZGQ6IHRydWUsCiAgICAgIHN0b2NrRm9ybTogdGhpcy5jcmVhdGVFbXB0eVN0b2NrRm9ybSgpLAogICAgICBzdG9ja0Zvcm1SdWxlczogewogICAgICAgIG1jOiBbewogICAgICAgICAgcmVxdWlyZWQ6IHRydWUsCiAgICAgICAgICBtZXNzYWdlOiAn6K+36L6T5YWl5ZCN56ewJywKICAgICAgICAgIHRyaWdnZXI6ICdibHVyJwogICAgICAgIH1dCiAgICAgIH0sCiAgICAgIHN0b2NrRGV0YWlsRGlhbG9nVmlzaWJsZTogZmFsc2UsCiAgICAgIHN0b2NrRGV0YWlsRGF0YToge30sCiAgICAgIC8vID09PT09PT09PT09PT09PT09PT09IOaVmeadkOW6k+WtmOaYjue7humhue+8iEpDS0NNWFjvvIkgPT09PT09PT09PT09PT09PT09PT0KICAgICAgZGV0YWlsU2VhcmNoRm9ybTogewogICAgICAgIGJoOiAnJywKICAgICAgICBqY2tjZGJiaDogJycsCiAgICAgICAgamN4eGJoOiAnJywKICAgICAgICBod2J3VHlwZTogJycKICAgICAgfSwKICAgICAgZGV0YWlsTG9hZGluZzogZmFsc2UsCiAgICAgIGRldGFpbFRhYmxlRGF0YTogW10sCiAgICAgIGRldGFpbFBhZ2VOdW06IDEsCiAgICAgIGRldGFpbFBhZ2VTaXplOiAyMCwKICAgICAgZGV0YWlsVG90YWw6IDAsCiAgICAgIGRldGFpbEZvcm1EaWFsb2dWaXNpYmxlOiBmYWxzZSwKICAgICAgZGV0YWlsRm9ybUxvYWRpbmc6IGZhbHNlLAogICAgICBkZXRhaWxTYXZpbmc6IGZhbHNlLAogICAgICBpc0RldGFpbEFkZDogdHJ1ZSwKICAgICAgZGV0YWlsRm9ybTogdGhpcy5jcmVhdGVFbXB0eURldGFpbEZvcm0oKSwKICAgICAgZGV0YWlsRm9ybVJ1bGVzOiB7CiAgICAgICAgamNrY2RiYmg6IFt7CiAgICAgICAgICByZXF1aXJlZDogdHJ1ZSwKICAgICAgICAgIG1lc3NhZ2U6ICfor7fovpPlhaXlupPlrZjljZXnvJblj7cnLAogICAgICAgICAgdHJpZ2dlcjogJ2JsdXInCiAgICAgICAgfV0sCiAgICAgICAgamN4eGJoOiBbewogICAgICAgICAgcmVxdWlyZWQ6IHRydWUsCiAgICAgICAgICBtZXNzYWdlOiAn6K+36L6T5YWl5pWZ5p2Q5L+h5oGv57yW5Y+3JywKICAgICAgICAgIHRyaWdnZXI6ICdibHVyJwogICAgICAgIH1dLAogICAgICAgIHNsOiBbewogICAgICAgICAgcmVxdWlyZWQ6IHRydWUsCiAgICAgICAgICBtZXNzYWdlOiAn6K+36L6T5YWl5pWw6YePJywKICAgICAgICAgIHRyaWdnZXI6ICdjaGFuZ2UnCiAgICAgICAgfV0KICAgICAgfSwKICAgICAgZGV0YWlsVmlld0RpYWxvZ1Zpc2libGU6IGZhbHNlLAogICAgICBkZXRhaWxWaWV3RGF0YToge30KICAgIH07CiAgfSwKICBjb21wdXRlZDogewogICAgZmlsZU5hbWU6IGZ1bmN0aW9uIGZpbGVOYW1lKCkgewogICAgICByZXR1cm4gdGhpcy5zZWxlY3RlZEZpbGUgJiYgdGhpcy5zZWxlY3RlZEZpbGUubmFtZSB8fCAn5pyq6YCJ5oup5Lu75L2V5paH5Lu2JzsKICAgIH0KICB9LAogIG1vdW50ZWQ6IGZ1bmN0aW9uIG1vdW50ZWQoKSB7CiAgICB0aGlzLmZldGNoTGlzdCgpOwogIH0sCiAgbWV0aG9kczogewogICAgLyoqIOihqOagvOaXpeacn+agvOW8j+WMliAqL2Zvcm1hdERhdGU6IGZ1bmN0aW9uIGZvcm1hdERhdGUocm93LCBjb2x1bW4sIGNlbGxWYWx1ZSkgewogICAgICByZXR1cm4gY2VsbFZhbHVlID8gU3RyaW5nKGNlbGxWYWx1ZSkuc2xpY2UoMCwgMTApIDogJyc7CiAgICB9LAogICAgLyoqIOe7n+S4gOagvOW8j+WMluWQjuerryBMb2NhbERhdGVUaW1l77yI5Y676ZmkIFTjgIHmiKrmlq3liLDnp5LvvIkgKi9mbXREYXRlVGltZTogZnVuY3Rpb24gZm10RGF0ZVRpbWUodmFsKSB7CiAgICAgIGlmICh2YWwgPT09IG51bGwgfHwgdmFsID09PSB1bmRlZmluZWQgfHwgdmFsID09PSAnJykgcmV0dXJuICcnOwogICAgICByZXR1cm4gU3RyaW5nKHZhbCkucmVwbGFjZSgnVCcsICcgJykuc2xpY2UoMCwgMTkpOwogICAgfSwKICAgIC8qKiDnqbrlgLzmmL7npLrkuLogJy0n77yIVnVlIDIg5qih5p2/6KGo6L6+5byP5LiN5pSv5oyBID8/IOi/kOeul+espu+8iSAqL2ZtdFZhbDogZnVuY3Rpb24gZm10VmFsKHZhbCkgewogICAgICByZXR1cm4gdmFsID09PSBudWxsIHx8IHZhbCA9PT0gdW5kZWZpbmVkIHx8IHZhbCA9PT0gJycgPyAnLScgOiB2YWw7CiAgICB9LAogICAgLyoqIOWIm+W7uuepuueZveaVmeadkOihqOWNlSAqL2NyZWF0ZUVtcHR5Rm9ybTogZnVuY3Rpb24gY3JlYXRlRW1wdHlGb3JtKCkgewogICAgICByZXR1cm4gewogICAgICAgIG1jOiAnJywKICAgICAgICB6ejogJycsCiAgICAgICAgY2JzOiAnJywKICAgICAgICBpc2JuOiAnJywKICAgICAgICBjYnJxOiAnJywKICAgICAgICBqY2ZsOiAnJywKICAgICAgICBqY2x4OiAnJywKICAgICAgICBqY2J4bHg6ICcnLAogICAgICAgIGpjemRseDogJycsCiAgICAgICAgamNseTogJycsCiAgICAgICAgamNjYzogJycsCiAgICAgICAgYmM6ICcnLAogICAgICAgIGtiOiAnJywKICAgICAgICBkajogbnVsbCwKICAgICAgICBqbGR3OiAn5pysJywKICAgICAgICB6cmp5amx4ZmY6ICcnLAogICAgICAgIGpjZG06ICcnLAogICAgICAgIGNiZnM6ICcnLAogICAgICAgIGpjbWo6ICcnLAogICAgICAgIGJ4ZHc6ICcnLAogICAgICAgIGJ6OiAnJywKICAgICAgICB4Y3k6IGZhbHNlLAogICAgICAgIHR5OiBmYWxzZQogICAgICB9OwogICAgfSwKICAgIC8qKiDliJvlu7rnqbrnmb3lupPlrZjljZXooajljZUgKi9jcmVhdGVFbXB0eVN0b2NrRm9ybTogZnVuY3Rpb24gY3JlYXRlRW1wdHlTdG9ja0Zvcm0oKSB7CiAgICAgIHJldHVybiB7CiAgICAgICAgbWM6ICcnLAogICAgICAgIHFrc206ICcnLAogICAgICAgIGxiOiAnJywKICAgICAgICB6YjogJycsCiAgICAgICAgY2JibWJoOiAnJywKICAgICAgICBjYnJiaDogJycsCiAgICAgICAgYmd5Ymg6ICcnLAogICAgICAgIHNwcmJoOiAnJywKICAgICAgICB6dDogJycsCiAgICAgICAgYno6ICcnLAogICAgICAgIGpzb256ZDogJycKICAgICAgfTsKICAgIH0sCiAgICAvKiog5Yib5bu656m655m95bqT5a2Y5piO57uG6aG56KGo5Y2VICovY3JlYXRlRW1wdHlEZXRhaWxGb3JtOiBmdW5jdGlvbiBjcmVhdGVFbXB0eURldGFpbEZvcm0oKSB7CiAgICAgIHJldHVybiB7CiAgICAgICAgamNrY2RiYmg6ICcnLAogICAgICAgIGpjeHhiaDogJycsCiAgICAgICAgc2w6IG51bGwsCiAgICAgICAgcXprY214eGJoOiAnJywKICAgICAgICBod2J3OiBmYWxzZSwKICAgICAgICBod2J3c2o6ICcnLAogICAgICAgIGJ6OiAnJywKICAgICAgICBqc29uemQ6ICcnCiAgICAgIH07CiAgICB9LAogICAgLyoqIOenu+mZpOepuuWAvCAqL2NsZWFuUGF5bG9hZDogZnVuY3Rpb24gY2xlYW5QYXlsb2FkKG9iaikgewogICAgICB2YXIgcGF5bG9hZCA9IHt9OwogICAgICBPYmplY3Qua2V5cyhvYmopLmZvckVhY2goZnVuY3Rpb24gKGtleSkgewogICAgICAgIHZhciB2YWx1ZSA9IG9ialtrZXldOwogICAgICAgIGlmICh2YWx1ZSAhPT0gJycgJiYgdmFsdWUgIT09IG51bGwgJiYgdmFsdWUgIT09IHVuZGVmaW5lZCkgewogICAgICAgICAgcGF5bG9hZFtrZXldID0gdmFsdWU7CiAgICAgICAgfQogICAgICB9KTsKICAgICAgcmV0dXJuIHBheWxvYWQ7CiAgICB9LAogICAgLy8gPT09PT09PT09PT09PT09PT09PT0g5YiX6KGo5Yqg6L29ID09PT09PT09PT09PT09PT09PT09CiAgICBidWlsZFF1ZXJ5OiBmdW5jdGlvbiBidWlsZFF1ZXJ5KCkgewogICAgICB2YXIgX3RoaXMgPSB0aGlzOwogICAgICB2YXIgcGFyYW1zID0ge307CiAgICAgIFsnYmgnLCAnbWMnLCAnenonLCAnY2JzJywgJ2lzYm4nLCAnamNmbCcsICdqY2x4J10uZm9yRWFjaChmdW5jdGlvbiAoa2V5KSB7CiAgICAgICAgdmFyIHZhbHVlID0gX3RoaXMuc2VhcmNoRm9ybVtrZXldOwogICAgICAgIGlmICh2YWx1ZSAhPT0gJycgJiYgdmFsdWUgIT09IG51bGwgJiYgdmFsdWUgIT09IHVuZGVmaW5lZCkgewogICAgICAgICAgcGFyYW1zW2tleV0gPSBTdHJpbmcodmFsdWUpLnRyaW0oKTsKICAgICAgICB9CiAgICAgIH0pOwogICAgICBpZiAodGhpcy5zZWFyY2hGb3JtLnR5VHlwZSA9PT0gJzAnKSBwYXJhbXMudHkgPSBmYWxzZTtlbHNlIGlmICh0aGlzLnNlYXJjaEZvcm0udHlUeXBlID09PSAnMScpIHBhcmFtcy50eSA9IHRydWU7CiAgICAgIHJldHVybiBwYXJhbXM7CiAgICB9LAogICAgZmV0Y2hMaXN0OiBmdW5jdGlvbiBmZXRjaExpc3QoKSB7CiAgICAgIHZhciBfdGhpczIgPSB0aGlzOwogICAgICB0aGlzLmxvYWRpbmcgPSB0cnVlOwogICAgICB2YXIgcGFyYW1zID0gKDAsIF9vYmplY3RTcHJlYWQyLmRlZmF1bHQpKHsKICAgICAgICBwYWdlTnVtOiB0aGlzLnBhZ2VOdW0sCiAgICAgICAgcGFnZVNpemU6IHRoaXMucGFnZVNpemUKICAgICAgfSwgdGhpcy5idWlsZFF1ZXJ5KCkpOwogICAgICAoMCwgX3RlYWNoaW5nTWF0ZXJpYWwubGlzdFRlYWNoaW5nTWF0ZXJpYWwpKHBhcmFtcykudGhlbihmdW5jdGlvbiAocmVzcG9uc2UpIHsKICAgICAgICB2YXIgZGF0YSA9IHJlc3BvbnNlLmRhdGEgfHwge307CiAgICAgICAgX3RoaXMyLnRhYmxlRGF0YSA9IGRhdGEucmVjb3JkcyB8fCBbXTsKICAgICAgICBfdGhpczIudG90YWwgPSBkYXRhLnRvdGFsIHx8IDA7CiAgICAgICAgX3RoaXMyLmxvYWRpbmcgPSBmYWxzZTsKICAgICAgfSkuY2F0Y2goZnVuY3Rpb24gKCkgewogICAgICAgIF90aGlzMi50YWJsZURhdGEgPSBbXTsKICAgICAgICBfdGhpczIudG90YWwgPSAwOwogICAgICAgIF90aGlzMi5sb2FkaW5nID0gZmFsc2U7CiAgICAgIH0pOwogICAgfSwKICAgIC8vID09PT09PT09PT09PT09PT09PT09IOafpeivoiAvIOmHjee9riA9PT09PT09PT09PT09PT09PT09PQogICAgaGFuZGxlU2VhcmNoOiBmdW5jdGlvbiBoYW5kbGVTZWFyY2goKSB7CiAgICAgIHRoaXMucGFnZU51bSA9IDE7CiAgICAgIHRoaXMuZmV0Y2hMaXN0KCk7CiAgICB9LAogICAgaGFuZGxlUmVzZXQ6IGZ1bmN0aW9uIGhhbmRsZVJlc2V0KCkgewogICAgICB0aGlzLnNlYXJjaEZvcm0gPSB7CiAgICAgICAgYmg6ICcnLAogICAgICAgIG1jOiAnJywKICAgICAgICB6ejogJycsCiAgICAgICAgY2JzOiAnJywKICAgICAgICBpc2JuOiAnJywKICAgICAgICBqY2ZsOiAnJywKICAgICAgICBqY2x4OiAnJywKICAgICAgICB0eVR5cGU6ICcnCiAgICAgIH07CiAgICAgIHRoaXMucGFnZU51bSA9IDE7CiAgICAgIHRoaXMuZmV0Y2hMaXN0KCk7CiAgICB9LAogICAgaGFuZGxlU2l6ZUNoYW5nZTogZnVuY3Rpb24gaGFuZGxlU2l6ZUNoYW5nZShzaXplKSB7CiAgICAgIHRoaXMucGFnZVNpemUgPSBzaXplOwogICAgICB0aGlzLnBhZ2VOdW0gPSAxOwogICAgICB0aGlzLmZldGNoTGlzdCgpOwogICAgfSwKICAgIGhhbmRsZUN1cnJlbnRDaGFuZ2U6IGZ1bmN0aW9uIGhhbmRsZUN1cnJlbnRDaGFuZ2UocGFnZSkgewogICAgICB0aGlzLnBhZ2VOdW0gPSBwYWdlOwogICAgICB0aGlzLmZldGNoTGlzdCgpOwogICAgfSwKICAgIC8vID09PT09PT09PT09PT09PT09PT09IOaXoOWQjuerr+aOpeWPo+eahOaTjeS9nCA9PT09PT09PT09PT09PT09PT09PQogICAgaGFuZGxlRG93bmxvYWRMaXN0OiBmdW5jdGlvbiBoYW5kbGVEb3dubG9hZExpc3QoKSB7CiAgICAgIHRoaXMuJG1lc3NhZ2UuaW5mbygn5ZCO56uv5pqC5pyq5o+Q5L6b6K+l5o6l5Y+jJyk7CiAgICB9LAogICAgaGFuZGxlRG93bmxvYWRaaXA6IGZ1bmN0aW9uIGhhbmRsZURvd25sb2FkWmlwKCkgewogICAgICB0aGlzLiRtZXNzYWdlLmluZm8oJ+WQjuerr+aaguacquaPkOS+m+ivpeaOpeWPoycpOwogICAgfSwKICAgIC8vID09PT09PT09PT09PT09PT09PT09IOaWsOW7uuaVmeadkCA9PT09PT09PT09PT09PT09PT09PQogICAgaGFuZGxlTmV3OiBmdW5jdGlvbiBoYW5kbGVOZXcoKSB7CiAgICAgIHZhciBfdGhpczMgPSB0aGlzOwogICAgICB0aGlzLmFkZEZvcm0gPSB0aGlzLmNyZWF0ZUVtcHR5Rm9ybSgpOwogICAgICB0aGlzLiRuZXh0VGljayhmdW5jdGlvbiAoKSB7CiAgICAgICAgX3RoaXMzLiRyZWZzLmFkZEZvcm1SZWYgJiYgX3RoaXMzLiRyZWZzLmFkZEZvcm1SZWYuY2xlYXJWYWxpZGF0ZSgpOwogICAgICB9KTsKICAgICAgdGhpcy5hZGREaWFsb2dWaXNpYmxlID0gdHJ1ZTsKICAgIH0sCiAgICBoYW5kbGVBZGRDb25maXJtOiBmdW5jdGlvbiBoYW5kbGVBZGRDb25maXJtKCkgewogICAgICB2YXIgX3RoaXM0ID0gdGhpczsKICAgICAgdGhpcy4kcmVmcy5hZGRGb3JtUmVmLnZhbGlkYXRlKGZ1bmN0aW9uICh2YWxpZCkgewogICAgICAgIGlmICghdmFsaWQpIHJldHVybjsKICAgICAgICBfdGhpczQuYWRkU2F2aW5nID0gdHJ1ZTsKICAgICAgICAoMCwgX3RlYWNoaW5nTWF0ZXJpYWwuYWRkVGVhY2hpbmdNYXRlcmlhbCkoX3RoaXM0LmJ1aWxkUGF5bG9hZChfdGhpczQuYWRkRm9ybSkpLnRoZW4oZnVuY3Rpb24gKCkgewogICAgICAgICAgX3RoaXM0LiRtZXNzYWdlLnN1Y2Nlc3MoJ+aWsOWinuaIkOWKnycpOwogICAgICAgICAgX3RoaXM0LmFkZERpYWxvZ1Zpc2libGUgPSBmYWxzZTsKICAgICAgICAgIF90aGlzNC5mZXRjaExpc3QoKTsKICAgICAgICB9KS5jYXRjaChmdW5jdGlvbiAoKSB7fSkuZmluYWxseShmdW5jdGlvbiAoKSB7CiAgICAgICAgICBfdGhpczQuYWRkU2F2aW5nID0gZmFsc2U7CiAgICAgICAgfSk7CiAgICAgIH0pOwogICAgfSwKICAgIC8vID09PT09PT09PT09PT09PT09PT09IOe8lui+keaVmeadkCA9PT09PT09PT09PT09PT09PT09PQogICAgaGFuZGxlRWRpdDogZnVuY3Rpb24gaGFuZGxlRWRpdChyb3cpIHsKICAgICAgdmFyIF90aGlzNSA9IHRoaXM7CiAgICAgIHRoaXMuZWRpdERpYWxvZ1Zpc2libGUgPSB0cnVlOwogICAgICB0aGlzLmVkaXRMb2FkaW5nID0gdHJ1ZTsKICAgICAgKDAsIF90ZWFjaGluZ01hdGVyaWFsLmdldFRlYWNoaW5nTWF0ZXJpYWxCeUlkKShyb3cuaWQpLnRoZW4oZnVuY3Rpb24gKHJlc3BvbnNlKSB7CiAgICAgICAgdmFyIGRhdGEgPSByZXNwb25zZS5kYXRhIHx8IHt9OwogICAgICAgIHZhciBmb3JtID0gX3RoaXM1LmNyZWF0ZUVtcHR5Rm9ybSgpOwogICAgICAgIE9iamVjdC5rZXlzKGZvcm0pLmZvckVhY2goZnVuY3Rpb24gKGtleSkgewogICAgICAgICAgaWYgKGRhdGFba2V5XSAhPT0gdW5kZWZpbmVkICYmIGRhdGFba2V5XSAhPT0gbnVsbCkgZm9ybVtrZXldID0gZGF0YVtrZXldOwogICAgICAgIH0pOwogICAgICAgIC8vIOaXpeacn+Wtl+auteaIquaWremAgumFjSBkYXRlIOaOp+S7tgogICAgICAgIGlmIChmb3JtLmNicnEpIGZvcm0uY2JycSA9IFN0cmluZyhmb3JtLmNicnEpLnNsaWNlKDAsIDEwKTsKICAgICAgICBmb3JtLmlkID0gZGF0YS5pZDsKICAgICAgICBmb3JtLmJoID0gZGF0YS5iaDsKICAgICAgICBfdGhpczUuZWRpdEZvcm0gPSBmb3JtOwogICAgICAgIF90aGlzNS5lZGl0TG9hZGluZyA9IGZhbHNlOwogICAgICB9KS5jYXRjaChmdW5jdGlvbiAoKSB7CiAgICAgICAgX3RoaXM1LmVkaXREaWFsb2dWaXNpYmxlID0gZmFsc2U7CiAgICAgICAgX3RoaXM1LmVkaXRMb2FkaW5nID0gZmFsc2U7CiAgICAgIH0pOwogICAgfSwKICAgIGhhbmRsZUVkaXRDb25maXJtOiBmdW5jdGlvbiBoYW5kbGVFZGl0Q29uZmlybSgpIHsKICAgICAgdmFyIF90aGlzNiA9IHRoaXM7CiAgICAgIHRoaXMuJHJlZnMuZWRpdEZvcm1SZWYudmFsaWRhdGUoZnVuY3Rpb24gKHZhbGlkKSB7CiAgICAgICAgaWYgKCF2YWxpZCkgcmV0dXJuOwogICAgICAgIHZhciBwYXlsb2FkID0gX3RoaXM2LmJ1aWxkUGF5bG9hZChfdGhpczYuZWRpdEZvcm0pOwogICAgICAgIGlmICghX3RoaXM2LmVkaXRGb3JtLmlkKSB7CiAgICAgICAgICBfdGhpczYuJG1lc3NhZ2Uud2FybmluZygn57y65bCR6K6w5b2VSUTvvIzml6Dms5Xkv53lrZgnKTsKICAgICAgICAgIHJldHVybjsKICAgICAgICB9CiAgICAgICAgcGF5bG9hZC5pZCA9IF90aGlzNi5lZGl0Rm9ybS5pZDsKICAgICAgICBwYXlsb2FkLmJoID0gX3RoaXM2LmVkaXRGb3JtLmJoOwogICAgICAgIF90aGlzNi5lZGl0U2F2aW5nID0gdHJ1ZTsKICAgICAgICAoMCwgX3RlYWNoaW5nTWF0ZXJpYWwudXBkYXRlVGVhY2hpbmdNYXRlcmlhbCkocGF5bG9hZCkudGhlbihmdW5jdGlvbiAoKSB7CiAgICAgICAgICBfdGhpczYuJG1lc3NhZ2Uuc3VjY2Vzcygn5L+d5a2Y5oiQ5YqfJyk7CiAgICAgICAgICBfdGhpczYuZWRpdERpYWxvZ1Zpc2libGUgPSBmYWxzZTsKICAgICAgICAgIF90aGlzNi5mZXRjaExpc3QoKTsKICAgICAgICB9KS5jYXRjaChmdW5jdGlvbiAoKSB7fSkuZmluYWxseShmdW5jdGlvbiAoKSB7CiAgICAgICAgICBfdGhpczYuZWRpdFNhdmluZyA9IGZhbHNlOwogICAgICAgIH0pOwogICAgICB9KTsKICAgIH0sCiAgICAvKiog57uE6KOF5paw5aKeL+e8lui+keivt+axguS9k++8iEpDWFgg5a6e5L2T77yM5LuF5Lyg6Z2e56m65a2X5q6177yJICovYnVpbGRQYXlsb2FkOiBmdW5jdGlvbiBidWlsZFBheWxvYWQoZm9ybSkgewogICAgICB2YXIgcGF5bG9hZCA9IHRoaXMuY2xlYW5QYXlsb2FkKHsKICAgICAgICBtYzogZm9ybS5tYywKICAgICAgICB6ejogZm9ybS56eiwKICAgICAgICBjYnM6IGZvcm0uY2JzLAogICAgICAgIGlzYm46IGZvcm0uaXNibiwKICAgICAgICBqY2ZsOiBmb3JtLmpjZmwsCiAgICAgICAgamNseDogZm9ybS5qY2x4LAogICAgICAgIGpjYnhseDogZm9ybS5qY2J4bHgsCiAgICAgICAgamN6ZGx4OiBmb3JtLmpjemRseCwKICAgICAgICBqY2x5OiBmb3JtLmpjbHksCiAgICAgICAgamNjYzogZm9ybS5qY2NjLAogICAgICAgIGJjOiBmb3JtLmJjLAogICAgICAgIGtiOiBmb3JtLmtiLAogICAgICAgIGpsZHc6IGZvcm0uamxkdywKICAgICAgICB6cmp5amx4ZmY6IGZvcm0uenJqeWpseGZmLAogICAgICAgIGpjZG06IGZvcm0uamNkbSwKICAgICAgICBjYmZzOiBmb3JtLmNiZnMsCiAgICAgICAgamNtajogZm9ybS5qY21qLAogICAgICAgIGJ4ZHc6IGZvcm0uYnhkdywKICAgICAgICBiejogZm9ybS5ieiwKICAgICAgICB4Y3k6ICEhZm9ybS54Y3ksCiAgICAgICAgdHk6ICEhZm9ybS50eQogICAgICB9KTsKICAgICAgLy8g5pel5pyf5a2X5q616L2sIElTT++8iOWQjuerryBjYnJxIOS4uiBMb2NhbERhdGVUaW1l77yJCiAgICAgIGlmIChmb3JtLmNicnEpIHBheWxvYWQuY2JycSA9IGZvcm0uY2JycSArICdUMDA6MDA6MDAnOwogICAgICAvLyDmlbDlgLzlrZfmrrUKICAgICAgaWYgKGZvcm0uZGogIT09ICcnICYmIGZvcm0uZGogIT09IG51bGwgJiYgZm9ybS5kaiAhPT0gdW5kZWZpbmVkKSB7CiAgICAgICAgcGF5bG9hZC5kaiA9IE51bWJlcihmb3JtLmRqKTsKICAgICAgfQogICAgICByZXR1cm4gcGF5bG9hZDsKICAgIH0sCiAgICAvLyA9PT09PT09PT09PT09PT09PT09PSDliKDpmaQgPT09PT09PT09PT09PT09PT09PT0KICAgIGhhbmRsZURlbGV0ZTogZnVuY3Rpb24gaGFuZGxlRGVsZXRlKHJvdykgewogICAgICB2YXIgX3RoaXM3ID0gdGhpczsKICAgICAgaWYgKCFyb3cuaWQpIHsKICAgICAgICB0aGlzLiRtZXNzYWdlLndhcm5pbmcoJ+W9k+WJjeihjOe8uuWwkUlEJyk7CiAgICAgICAgcmV0dXJuOwogICAgICB9CiAgICAgIHRoaXMuJGNvbmZpcm0oIlx1Nzg2RVx1NUI5QVx1ODk4MVx1NTIyMFx1OTY2NFx1NjU1OVx1Njc1MFx1MzAwQyIuY29uY2F0KHJvdy5tYyB8fCByb3cuYmgsICJcdTMwMERcdTU0MTdcdUZGMUYiKSwgJ+ezu+e7n+aPkOekuicsIHsKICAgICAgICBjb25maXJtQnV0dG9uVGV4dDogJ+ehruWumicsCiAgICAgICAgY2FuY2VsQnV0dG9uVGV4dDogJ+WPlua2iCcsCiAgICAgICAgdHlwZTogJ3dhcm5pbmcnCiAgICAgIH0pLnRoZW4oZnVuY3Rpb24gKCkgewogICAgICAgICgwLCBfdGVhY2hpbmdNYXRlcmlhbC5kZWxldGVUZWFjaGluZ01hdGVyaWFsKShyb3cuaWQpLnRoZW4oZnVuY3Rpb24gKCkgewogICAgICAgICAgX3RoaXM3LiRtZXNzYWdlLnN1Y2Nlc3MoJ+WIoOmZpOaIkOWKnycpOwogICAgICAgICAgX3RoaXM3LmZldGNoTGlzdCgpOwogICAgICAgIH0pLmNhdGNoKGZ1bmN0aW9uICgpIHt9KTsKICAgICAgfSkuY2F0Y2goZnVuY3Rpb24gKCkge30pOwogICAgfSwKICAgIC8vID09PT09PT09PT09PT09PT09PT09IOaooeadv+S4i+i9vSAvIOWvvOWFpSA9PT09PT09PT09PT09PT09PT09PQogICAgaGFuZGxlRG93bmxvYWRUZW1wbGF0ZTogZnVuY3Rpb24gaGFuZGxlRG93bmxvYWRUZW1wbGF0ZSgpIHsKICAgICAgdmFyIF90aGlzOCA9IHRoaXM7CiAgICAgICgwLCBfdGVhY2hpbmdNYXRlcmlhbC5kb3dubG9hZFRlYWNoaW5nTWF0ZXJpYWxUZW1wbGF0ZSkoKS50aGVuKGZ1bmN0aW9uIChibG9iKSB7CiAgICAgICAgKDAsIF9maWxlU2F2ZXIuc2F2ZUFzKShibG9iLCAn5pWZ5p2Q566h55CG5a+85YWl5qih5p2/LnhscycpOwogICAgICAgIF90aGlzOC4kbWVzc2FnZS5zdWNjZXNzKCfmqKHmnb/kuIvovb3miJDlip8nKTsKICAgICAgfSkuY2F0Y2goZnVuY3Rpb24gKCkge30pOwogICAgfSwKICAgIGhhbmRsZUNob29zZUZpbGU6IGZ1bmN0aW9uIGhhbmRsZUNob29zZUZpbGUoKSB7CiAgICAgIHRoaXMuJHJlZnMuZmlsZUlucHV0ICYmIHRoaXMuJHJlZnMuZmlsZUlucHV0LmNsaWNrKCk7CiAgICB9LAogICAgaGFuZGxlRmlsZUNoYW5nZTogZnVuY3Rpb24gaGFuZGxlRmlsZUNoYW5nZShlKSB7CiAgICAgIHZhciBpbnB1dCA9IGUudGFyZ2V0OwogICAgICBpZiAoaW5wdXQuZmlsZXMgJiYgaW5wdXQuZmlsZXMubGVuZ3RoID4gMCkgewogICAgICAgIHRoaXMuc2VsZWN0ZWRGaWxlID0gaW5wdXQuZmlsZXNbMF07CiAgICAgIH0KICAgIH0sCiAgICBoYW5kbGVJbXBvcnQ6IGZ1bmN0aW9uIGhhbmRsZUltcG9ydCgpIHsKICAgICAgdmFyIF90aGlzOSA9IHRoaXM7CiAgICAgIGlmICghdGhpcy5zZWxlY3RlZEZpbGUpIHsKICAgICAgICB0aGlzLiRtZXNzYWdlLndhcm5pbmcoJ+ivt+WFiOmAieaLqeaWh+S7ticpOwogICAgICAgIHJldHVybjsKICAgICAgfQogICAgICAoMCwgX3RlYWNoaW5nTWF0ZXJpYWwuaW1wb3J0VGVhY2hpbmdNYXRlcmlhbCkodGhpcy5zZWxlY3RlZEZpbGUpLnRoZW4oZnVuY3Rpb24gKHJlc3BvbnNlKSB7CiAgICAgICAgdmFyIGNvdW50ID0gcmVzcG9uc2UgJiYgcmVzcG9uc2UuZGF0YSB8fCAwOwogICAgICAgIF90aGlzOS4kbWVzc2FnZS5zdWNjZXNzKCJcdTVCRkNcdTUxNjVcdTYyMTBcdTUyOUZcdUZGMENcdTUxNzFcdTVCRkNcdTUxNjUgIi5jb25jYXQoY291bnQsICIgXHU2NzYxIikpOwogICAgICAgIF90aGlzOS5zZWxlY3RlZEZpbGUgPSBudWxsOwogICAgICAgIGlmIChfdGhpczkuJHJlZnMuZmlsZUlucHV0KSBfdGhpczkuJHJlZnMuZmlsZUlucHV0LnZhbHVlID0gJyc7CiAgICAgICAgX3RoaXM5LmZldGNoTGlzdCgpOwogICAgICB9KS5jYXRjaChmdW5jdGlvbiAoKSB7fSk7CiAgICB9LAogICAgLy8gPT09PT09PT09PT09PT09PT09PT0g5pWZ5p2Q5bqT5a2Y5Y2VID09PT09PT09PT09PT09PT09PT09CiAgICBidWlsZFN0b2NrUXVlcnk6IGZ1bmN0aW9uIGJ1aWxkU3RvY2tRdWVyeSgpIHsKICAgICAgdmFyIF90aGlzMCA9IHRoaXM7CiAgICAgIHZhciBwYXJhbXMgPSB7fTsKICAgICAgWydiaCcsICdtYycsICdsYicsICd6YicsICd6dCddLmZvckVhY2goZnVuY3Rpb24gKGtleSkgewogICAgICAgIHZhciB2YWx1ZSA9IF90aGlzMC5zdG9ja1NlYXJjaEZvcm1ba2V5XTsKICAgICAgICBpZiAodmFsdWUgIT09ICcnICYmIHZhbHVlICE9PSBudWxsICYmIHZhbHVlICE9PSB1bmRlZmluZWQpIHsKICAgICAgICAgIHBhcmFtc1trZXldID0gU3RyaW5nKHZhbHVlKS50cmltKCk7CiAgICAgICAgfQogICAgICB9KTsKICAgICAgcmV0dXJuIHBhcmFtczsKICAgIH0sCiAgICBmZXRjaFN0b2NrTGlzdDogZnVuY3Rpb24gZmV0Y2hTdG9ja0xpc3QoKSB7CiAgICAgIHZhciBfdGhpczEgPSB0aGlzOwogICAgICB0aGlzLnN0b2NrTG9hZGluZyA9IHRydWU7CiAgICAgIHZhciBwYXJhbXMgPSAoMCwgX29iamVjdFNwcmVhZDIuZGVmYXVsdCkoewogICAgICAgIHBhZ2VOdW06IHRoaXMuc3RvY2tQYWdlTnVtLAogICAgICAgIHBhZ2VTaXplOiB0aGlzLnN0b2NrUGFnZVNpemUKICAgICAgfSwgdGhpcy5idWlsZFN0b2NrUXVlcnkoKSk7CiAgICAgICgwLCBfdGVhY2hpbmdTdG9jay5saXN0VGVhY2hpbmdTdG9jaykocGFyYW1zKS50aGVuKGZ1bmN0aW9uIChyZXNwb25zZSkgewogICAgICAgIHZhciBkYXRhID0gcmVzcG9uc2UuZGF0YSB8fCB7fTsKICAgICAgICBfdGhpczEuc3RvY2tUYWJsZURhdGEgPSBkYXRhLnJlY29yZHMgfHwgW107CiAgICAgICAgX3RoaXMxLnN0b2NrVG90YWwgPSBkYXRhLnRvdGFsIHx8IDA7CiAgICAgICAgX3RoaXMxLnN0b2NrTG9hZGluZyA9IGZhbHNlOwogICAgICB9KS5jYXRjaChmdW5jdGlvbiAoKSB7CiAgICAgICAgX3RoaXMxLnN0b2NrVGFibGVEYXRhID0gW107CiAgICAgICAgX3RoaXMxLnN0b2NrVG90YWwgPSAwOwogICAgICAgIF90aGlzMS5zdG9ja0xvYWRpbmcgPSBmYWxzZTsKICAgICAgfSk7CiAgICB9LAogICAgaGFuZGxlU3RvY2tTZWFyY2g6IGZ1bmN0aW9uIGhhbmRsZVN0b2NrU2VhcmNoKCkgewogICAgICB0aGlzLnN0b2NrUGFnZU51bSA9IDE7CiAgICAgIHRoaXMuZmV0Y2hTdG9ja0xpc3QoKTsKICAgIH0sCiAgICBoYW5kbGVTdG9ja1Jlc2V0OiBmdW5jdGlvbiBoYW5kbGVTdG9ja1Jlc2V0KCkgewogICAgICB0aGlzLnN0b2NrU2VhcmNoRm9ybSA9IHsKICAgICAgICBiaDogJycsCiAgICAgICAgbWM6ICcnLAogICAgICAgIGxiOiAnJywKICAgICAgICB6YjogJycsCiAgICAgICAgenQ6ICcnCiAgICAgIH07CiAgICAgIHRoaXMuc3RvY2tQYWdlTnVtID0gMTsKICAgICAgdGhpcy5mZXRjaFN0b2NrTGlzdCgpOwogICAgfSwKICAgIGhhbmRsZVN0b2NrU2l6ZUNoYW5nZTogZnVuY3Rpb24gaGFuZGxlU3RvY2tTaXplQ2hhbmdlKHNpemUpIHsKICAgICAgdGhpcy5zdG9ja1BhZ2VTaXplID0gc2l6ZTsKICAgICAgdGhpcy5zdG9ja1BhZ2VOdW0gPSAxOwogICAgICB0aGlzLmZldGNoU3RvY2tMaXN0KCk7CiAgICB9LAogICAgaGFuZGxlU3RvY2tDdXJyZW50Q2hhbmdlOiBmdW5jdGlvbiBoYW5kbGVTdG9ja0N1cnJlbnRDaGFuZ2UocGFnZSkgewogICAgICB0aGlzLnN0b2NrUGFnZU51bSA9IHBhZ2U7CiAgICAgIHRoaXMuZmV0Y2hTdG9ja0xpc3QoKTsKICAgIH0sCiAgICBoYW5kbGVTdG9ja05ldzogZnVuY3Rpb24gaGFuZGxlU3RvY2tOZXcoKSB7CiAgICAgIHZhciBfdGhpczEwID0gdGhpczsKICAgICAgdGhpcy5pc1N0b2NrQWRkID0gdHJ1ZTsKICAgICAgdGhpcy5zdG9ja0Zvcm0gPSB0aGlzLmNyZWF0ZUVtcHR5U3RvY2tGb3JtKCk7CiAgICAgIHRoaXMuJG5leHRUaWNrKGZ1bmN0aW9uICgpIHsKICAgICAgICBfdGhpczEwLiRyZWZzLnN0b2NrRm9ybVJlZiAmJiBfdGhpczEwLiRyZWZzLnN0b2NrRm9ybVJlZi5jbGVhclZhbGlkYXRlKCk7CiAgICAgIH0pOwogICAgICB0aGlzLnN0b2NrRm9ybURpYWxvZ1Zpc2libGUgPSB0cnVlOwogICAgfSwKICAgIGhhbmRsZVN0b2NrRWRpdDogZnVuY3Rpb24gaGFuZGxlU3RvY2tFZGl0KHJvdykgewogICAgICB2YXIgX3RoaXMxMSA9IHRoaXM7CiAgICAgIHRoaXMuaXNTdG9ja0FkZCA9IGZhbHNlOwogICAgICB0aGlzLnN0b2NrRm9ybURpYWxvZ1Zpc2libGUgPSB0cnVlOwogICAgICB0aGlzLnN0b2NrRm9ybUxvYWRpbmcgPSB0cnVlOwogICAgICAoMCwgX3RlYWNoaW5nU3RvY2suZ2V0VGVhY2hpbmdTdG9jaykocm93LmlkKS50aGVuKGZ1bmN0aW9uIChyZXNwb25zZSkgewogICAgICAgIHZhciBkYXRhID0gcmVzcG9uc2UuZGF0YSB8fCB7fTsKICAgICAgICB2YXIgZm9ybSA9IF90aGlzMTEuY3JlYXRlRW1wdHlTdG9ja0Zvcm0oKTsKICAgICAgICBPYmplY3Qua2V5cyhmb3JtKS5mb3JFYWNoKGZ1bmN0aW9uIChrZXkpIHsKICAgICAgICAgIGlmIChkYXRhW2tleV0gIT09IHVuZGVmaW5lZCAmJiBkYXRhW2tleV0gIT09IG51bGwpIGZvcm1ba2V5XSA9IGRhdGFba2V5XTsKICAgICAgICB9KTsKICAgICAgICBmb3JtLmlkID0gZGF0YS5pZDsKICAgICAgICBmb3JtLmJoID0gZGF0YS5iaDsKICAgICAgICBfdGhpczExLnN0b2NrRm9ybSA9IGZvcm07CiAgICAgICAgX3RoaXMxMS5zdG9ja0Zvcm1Mb2FkaW5nID0gZmFsc2U7CiAgICAgIH0pLmNhdGNoKGZ1bmN0aW9uICgpIHsKICAgICAgICBfdGhpczExLnN0b2NrRm9ybURpYWxvZ1Zpc2libGUgPSBmYWxzZTsKICAgICAgICBfdGhpczExLnN0b2NrRm9ybUxvYWRpbmcgPSBmYWxzZTsKICAgICAgfSk7CiAgICB9LAogICAgYnVpbGRTdG9ja1BheWxvYWQ6IGZ1bmN0aW9uIGJ1aWxkU3RvY2tQYXlsb2FkKCkgewogICAgICB2YXIgZiA9IHRoaXMuc3RvY2tGb3JtOwogICAgICB2YXIgcGF5bG9hZCA9IHRoaXMuY2xlYW5QYXlsb2FkKHsKICAgICAgICBtYzogZi5tYywKICAgICAgICBxa3NtOiBmLnFrc20sCiAgICAgICAgbGI6IGYubGIsCiAgICAgICAgemI6IGYuemIsCiAgICAgICAgY2JibWJoOiBmLmNiYm1iaCwKICAgICAgICBjYnJiaDogZi5jYnJiaCwKICAgICAgICBiZ3liaDogZi5iZ3liaCwKICAgICAgICBzcHJiaDogZi5zcHJiaCwKICAgICAgICB6dDogZi56dCwKICAgICAgICBiejogZi5ieiwKICAgICAgICBqc29uemQ6IGYuanNvbnpkCiAgICAgIH0pOwogICAgICByZXR1cm4gcGF5bG9hZDsKICAgIH0sCiAgICBoYW5kbGVTdG9ja0Zvcm1Db25maXJtOiBmdW5jdGlvbiBoYW5kbGVTdG9ja0Zvcm1Db25maXJtKCkgewogICAgICB2YXIgX3RoaXMxMiA9IHRoaXM7CiAgICAgIHRoaXMuJHJlZnMuc3RvY2tGb3JtUmVmLnZhbGlkYXRlKGZ1bmN0aW9uICh2YWxpZCkgewogICAgICAgIGlmICghdmFsaWQpIHJldHVybjsKICAgICAgICB2YXIgcGF5bG9hZCA9IF90aGlzMTIuYnVpbGRTdG9ja1BheWxvYWQoKTsKICAgICAgICBpZiAoIV90aGlzMTIuaXNTdG9ja0FkZCkgewogICAgICAgICAgaWYgKCFfdGhpczEyLnN0b2NrRm9ybS5pZCkgewogICAgICAgICAgICBfdGhpczEyLiRtZXNzYWdlLndhcm5pbmcoJ+e8uuWwkeiusOW9lUlE77yM5peg5rOV5L+d5a2YJyk7CiAgICAgICAgICAgIHJldHVybjsKICAgICAgICAgIH0KICAgICAgICAgIHBheWxvYWQuaWQgPSBfdGhpczEyLnN0b2NrRm9ybS5pZDsKICAgICAgICAgIHBheWxvYWQuYmggPSBfdGhpczEyLnN0b2NrRm9ybS5iaDsKICAgICAgICB9CiAgICAgICAgX3RoaXMxMi5zdG9ja1NhdmluZyA9IHRydWU7CiAgICAgICAgdmFyIHJlcXVlc3QgPSBfdGhpczEyLmlzU3RvY2tBZGQgPyAoMCwgX3RlYWNoaW5nU3RvY2suYWRkVGVhY2hpbmdTdG9jaykocGF5bG9hZCkgOiAoMCwgX3RlYWNoaW5nU3RvY2sudXBkYXRlVGVhY2hpbmdTdG9jaykocGF5bG9hZCk7CiAgICAgICAgcmVxdWVzdC50aGVuKGZ1bmN0aW9uICgpIHsKICAgICAgICAgIF90aGlzMTIuJG1lc3NhZ2Uuc3VjY2VzcyhfdGhpczEyLmlzU3RvY2tBZGQgPyAn5paw5aKe5oiQ5YqfJyA6ICfkv67mlLnmiJDlip8nKTsKICAgICAgICAgIF90aGlzMTIuc3RvY2tGb3JtRGlhbG9nVmlzaWJsZSA9IGZhbHNlOwogICAgICAgICAgX3RoaXMxMi5mZXRjaFN0b2NrTGlzdCgpOwogICAgICAgIH0pLmNhdGNoKGZ1bmN0aW9uICgpIHt9KS5maW5hbGx5KGZ1bmN0aW9uICgpIHsKICAgICAgICAgIF90aGlzMTIuc3RvY2tTYXZpbmcgPSBmYWxzZTsKICAgICAgICB9KTsKICAgICAgfSk7CiAgICB9LAogICAgaGFuZGxlU3RvY2tEZXRhaWw6IGZ1bmN0aW9uIGhhbmRsZVN0b2NrRGV0YWlsKHJvdykgewogICAgICB0aGlzLnN0b2NrRGV0YWlsRGF0YSA9IHJvdzsKICAgICAgdGhpcy5zdG9ja0RldGFpbERpYWxvZ1Zpc2libGUgPSB0cnVlOwogICAgfSwKICAgIGhhbmRsZVN0b2NrRGVsZXRlOiBmdW5jdGlvbiBoYW5kbGVTdG9ja0RlbGV0ZShyb3cpIHsKICAgICAgdmFyIF90aGlzMTMgPSB0aGlzOwogICAgICBpZiAoIXJvdy5pZCkgewogICAgICAgIHRoaXMuJG1lc3NhZ2Uud2FybmluZygn5b2T5YmN6KGM57y65bCRSUQnKTsKICAgICAgICByZXR1cm47CiAgICAgIH0KICAgICAgdGhpcy4kY29uZmlybSgiXHU3ODZFXHU1QjlBXHU4OTgxXHU1MjIwXHU5NjY0XHU1RTkzXHU1QjU4XHU1MzU1XHUzMDBDIi5jb25jYXQocm93Lm1jIHx8IHJvdy5iaCwgIlx1MzAwRFx1NTQxN1x1RkYxRiIpLCAn57O757uf5o+Q56S6JywgewogICAgICAgIGNvbmZpcm1CdXR0b25UZXh0OiAn56Gu5a6aJywKICAgICAgICBjYW5jZWxCdXR0b25UZXh0OiAn5Y+W5raIJywKICAgICAgICB0eXBlOiAnd2FybmluZycKICAgICAgfSkudGhlbihmdW5jdGlvbiAoKSB7CiAgICAgICAgKDAsIF90ZWFjaGluZ1N0b2NrLmRlbGV0ZVRlYWNoaW5nU3RvY2spKHJvdy5pZCkudGhlbihmdW5jdGlvbiAoKSB7CiAgICAgICAgICBfdGhpczEzLiRtZXNzYWdlLnN1Y2Nlc3MoJ+WIoOmZpOaIkOWKnycpOwogICAgICAgICAgX3RoaXMxMy5mZXRjaFN0b2NrTGlzdCgpOwogICAgICAgIH0pLmNhdGNoKGZ1bmN0aW9uICgpIHt9KTsKICAgICAgfSkuY2F0Y2goZnVuY3Rpb24gKCkge30pOwogICAgfSwKICAgIC8vID09PT09PT09PT09PT09PT09PT09IOaVmeadkOW6k+WtmOaYjue7humhuSA9PT09PT09PT09PT09PT09PT09PQogICAgYnVpbGREZXRhaWxRdWVyeTogZnVuY3Rpb24gYnVpbGREZXRhaWxRdWVyeSgpIHsKICAgICAgdmFyIF90aGlzMTQgPSB0aGlzOwogICAgICB2YXIgcGFyYW1zID0ge307CiAgICAgIFsnYmgnLCAnamNrY2RiYmgnLCAnamN4eGJoJ10uZm9yRWFjaChmdW5jdGlvbiAoa2V5KSB7CiAgICAgICAgdmFyIHZhbHVlID0gX3RoaXMxNC5kZXRhaWxTZWFyY2hGb3JtW2tleV07CiAgICAgICAgaWYgKHZhbHVlICE9PSAnJyAmJiB2YWx1ZSAhPT0gbnVsbCAmJiB2YWx1ZSAhPT0gdW5kZWZpbmVkKSB7CiAgICAgICAgICBwYXJhbXNba2V5XSA9IFN0cmluZyh2YWx1ZSkudHJpbSgpOwogICAgICAgIH0KICAgICAgfSk7CiAgICAgIGlmICh0aGlzLmRldGFpbFNlYXJjaEZvcm0uaHdid1R5cGUgPT09ICcwJykgcGFyYW1zLmh3YncgPSBmYWxzZTtlbHNlIGlmICh0aGlzLmRldGFpbFNlYXJjaEZvcm0uaHdid1R5cGUgPT09ICcxJykgcGFyYW1zLmh3YncgPSB0cnVlOwogICAgICByZXR1cm4gcGFyYW1zOwogICAgfSwKICAgIGZldGNoRGV0YWlsTGlzdDogZnVuY3Rpb24gZmV0Y2hEZXRhaWxMaXN0KCkgewogICAgICB2YXIgX3RoaXMxNSA9IHRoaXM7CiAgICAgIHRoaXMuZGV0YWlsTG9hZGluZyA9IHRydWU7CiAgICAgIHZhciBwYXJhbXMgPSAoMCwgX29iamVjdFNwcmVhZDIuZGVmYXVsdCkoewogICAgICAgIHBhZ2VOdW06IHRoaXMuZGV0YWlsUGFnZU51bSwKICAgICAgICBwYWdlU2l6ZTogdGhpcy5kZXRhaWxQYWdlU2l6ZQogICAgICB9LCB0aGlzLmJ1aWxkRGV0YWlsUXVlcnkoKSk7CiAgICAgICgwLCBfdGVhY2hpbmdTdG9jay5saXN0VGVhY2hpbmdTdG9ja0RldGFpbCkocGFyYW1zKS50aGVuKGZ1bmN0aW9uIChyZXNwb25zZSkgewogICAgICAgIHZhciBkYXRhID0gcmVzcG9uc2UuZGF0YSB8fCB7fTsKICAgICAgICBfdGhpczE1LmRldGFpbFRhYmxlRGF0YSA9IGRhdGEucmVjb3JkcyB8fCBbXTsKICAgICAgICBfdGhpczE1LmRldGFpbFRvdGFsID0gZGF0YS50b3RhbCB8fCAwOwogICAgICAgIF90aGlzMTUuZGV0YWlsTG9hZGluZyA9IGZhbHNlOwogICAgICB9KS5jYXRjaChmdW5jdGlvbiAoKSB7CiAgICAgICAgX3RoaXMxNS5kZXRhaWxUYWJsZURhdGEgPSBbXTsKICAgICAgICBfdGhpczE1LmRldGFpbFRvdGFsID0gMDsKICAgICAgICBfdGhpczE1LmRldGFpbExvYWRpbmcgPSBmYWxzZTsKICAgICAgfSk7CiAgICB9LAogICAgaGFuZGxlRGV0YWlsU2VhcmNoOiBmdW5jdGlvbiBoYW5kbGVEZXRhaWxTZWFyY2goKSB7CiAgICAgIHRoaXMuZGV0YWlsUGFnZU51bSA9IDE7CiAgICAgIHRoaXMuZmV0Y2hEZXRhaWxMaXN0KCk7CiAgICB9LAogICAgaGFuZGxlRGV0YWlsUmVzZXQ6IGZ1bmN0aW9uIGhhbmRsZURldGFpbFJlc2V0KCkgewogICAgICB0aGlzLmRldGFpbFNlYXJjaEZvcm0gPSB7CiAgICAgICAgYmg6ICcnLAogICAgICAgIGpja2NkYmJoOiAnJywKICAgICAgICBqY3h4Ymg6ICcnLAogICAgICAgIGh3YndUeXBlOiAnJwogICAgICB9OwogICAgICB0aGlzLmRldGFpbFBhZ2VOdW0gPSAxOwogICAgICB0aGlzLmZldGNoRGV0YWlsTGlzdCgpOwogICAgfSwKICAgIGhhbmRsZURldGFpbFNpemVDaGFuZ2U6IGZ1bmN0aW9uIGhhbmRsZURldGFpbFNpemVDaGFuZ2Uoc2l6ZSkgewogICAgICB0aGlzLmRldGFpbFBhZ2VTaXplID0gc2l6ZTsKICAgICAgdGhpcy5kZXRhaWxQYWdlTnVtID0gMTsKICAgICAgdGhpcy5mZXRjaERldGFpbExpc3QoKTsKICAgIH0sCiAgICBoYW5kbGVEZXRhaWxDdXJyZW50Q2hhbmdlOiBmdW5jdGlvbiBoYW5kbGVEZXRhaWxDdXJyZW50Q2hhbmdlKHBhZ2UpIHsKICAgICAgdGhpcy5kZXRhaWxQYWdlTnVtID0gcGFnZTsKICAgICAgdGhpcy5mZXRjaERldGFpbExpc3QoKTsKICAgIH0sCiAgICBoYW5kbGVEZXRhaWxOZXc6IGZ1bmN0aW9uIGhhbmRsZURldGFpbE5ldygpIHsKICAgICAgdmFyIF90aGlzMTYgPSB0aGlzOwogICAgICB0aGlzLmlzRGV0YWlsQWRkID0gdHJ1ZTsKICAgICAgdGhpcy5kZXRhaWxGb3JtID0gdGhpcy5jcmVhdGVFbXB0eURldGFpbEZvcm0oKTsKICAgICAgdGhpcy4kbmV4dFRpY2soZnVuY3Rpb24gKCkgewogICAgICAgIF90aGlzMTYuJHJlZnMuZGV0YWlsRm9ybVJlZiAmJiBfdGhpczE2LiRyZWZzLmRldGFpbEZvcm1SZWYuY2xlYXJWYWxpZGF0ZSgpOwogICAgICB9KTsKICAgICAgdGhpcy5kZXRhaWxGb3JtRGlhbG9nVmlzaWJsZSA9IHRydWU7CiAgICB9LAogICAgaGFuZGxlRGV0YWlsRWRpdDogZnVuY3Rpb24gaGFuZGxlRGV0YWlsRWRpdChyb3cpIHsKICAgICAgdmFyIF90aGlzMTcgPSB0aGlzOwogICAgICB0aGlzLmlzRGV0YWlsQWRkID0gZmFsc2U7CiAgICAgIHRoaXMuZGV0YWlsRm9ybURpYWxvZ1Zpc2libGUgPSB0cnVlOwogICAgICB0aGlzLmRldGFpbEZvcm1Mb2FkaW5nID0gdHJ1ZTsKICAgICAgKDAsIF90ZWFjaGluZ1N0b2NrLmdldFRlYWNoaW5nU3RvY2tEZXRhaWwpKHJvdy5pZCkudGhlbihmdW5jdGlvbiAocmVzcG9uc2UpIHsKICAgICAgICB2YXIgZGF0YSA9IHJlc3BvbnNlLmRhdGEgfHwge307CiAgICAgICAgdmFyIGZvcm0gPSBfdGhpczE3LmNyZWF0ZUVtcHR5RGV0YWlsRm9ybSgpOwogICAgICAgIE9iamVjdC5rZXlzKGZvcm0pLmZvckVhY2goZnVuY3Rpb24gKGtleSkgewogICAgICAgICAgaWYgKGRhdGFba2V5XSAhPT0gdW5kZWZpbmVkICYmIGRhdGFba2V5XSAhPT0gbnVsbCkgZm9ybVtrZXldID0gZGF0YVtrZXldOwogICAgICAgIH0pOwogICAgICAgIGlmIChmb3JtLmh3YndzaikgZm9ybS5od2J3c2ogPSBTdHJpbmcoZm9ybS5od2J3c2opLnJlcGxhY2UoJ1QnLCAnICcpLnNsaWNlKDAsIDE5KTsKICAgICAgICBmb3JtLmlkID0gZGF0YS5pZDsKICAgICAgICBmb3JtLmJoID0gZGF0YS5iaDsKICAgICAgICBfdGhpczE3LmRldGFpbEZvcm0gPSBmb3JtOwogICAgICAgIF90aGlzMTcuZGV0YWlsRm9ybUxvYWRpbmcgPSBmYWxzZTsKICAgICAgfSkuY2F0Y2goZnVuY3Rpb24gKCkgewogICAgICAgIF90aGlzMTcuZGV0YWlsRm9ybURpYWxvZ1Zpc2libGUgPSBmYWxzZTsKICAgICAgICBfdGhpczE3LmRldGFpbEZvcm1Mb2FkaW5nID0gZmFsc2U7CiAgICAgIH0pOwogICAgfSwKICAgIGJ1aWxkRGV0YWlsUGF5bG9hZDogZnVuY3Rpb24gYnVpbGREZXRhaWxQYXlsb2FkKCkgewogICAgICB2YXIgZiA9IHRoaXMuZGV0YWlsRm9ybTsKICAgICAgdmFyIHBheWxvYWQgPSB0aGlzLmNsZWFuUGF5bG9hZCh7CiAgICAgICAgamNrY2RiYmg6IGYuamNrY2RiYmgsCiAgICAgICAgamN4eGJoOiBmLmpjeHhiaCwKICAgICAgICBxemtjbXh4Ymg6IGYucXprY214eGJoLAogICAgICAgIGh3Ync6ICEhZi5od2J3LAogICAgICAgIGJ6OiBmLmJ6LAogICAgICAgIGpzb256ZDogZi5qc29uemQKICAgICAgfSk7CiAgICAgIGlmIChmLnNsICE9PSAnJyAmJiBmLnNsICE9PSBudWxsICYmIGYuc2wgIT09IHVuZGVmaW5lZCkgewogICAgICAgIHBheWxvYWQuc2wgPSBOdW1iZXIoZi5zbCk7CiAgICAgIH0KICAgICAgLy8g6L+Y5Zue5a6M5q+V5pe26Ze05Li6IExvY2FsRGF0ZVRpbWXvvIzovawgSVNPCiAgICAgIGlmIChmLmh3YndzaikgcGF5bG9hZC5od2J3c2ogPSBmLmh3Yndzai5yZXBsYWNlKCcgJywgJ1QnKTsKICAgICAgcmV0dXJuIHBheWxvYWQ7CiAgICB9LAogICAgaGFuZGxlRGV0YWlsRm9ybUNvbmZpcm06IGZ1bmN0aW9uIGhhbmRsZURldGFpbEZvcm1Db25maXJtKCkgewogICAgICB2YXIgX3RoaXMxOCA9IHRoaXM7CiAgICAgIHRoaXMuJHJlZnMuZGV0YWlsRm9ybVJlZi52YWxpZGF0ZShmdW5jdGlvbiAodmFsaWQpIHsKICAgICAgICBpZiAoIXZhbGlkKSByZXR1cm47CiAgICAgICAgdmFyIHBheWxvYWQgPSBfdGhpczE4LmJ1aWxkRGV0YWlsUGF5bG9hZCgpOwogICAgICAgIGlmICghX3RoaXMxOC5pc0RldGFpbEFkZCkgewogICAgICAgICAgaWYgKCFfdGhpczE4LmRldGFpbEZvcm0uaWQpIHsKICAgICAgICAgICAgX3RoaXMxOC4kbWVzc2FnZS53YXJuaW5nKCfnvLrlsJHorrDlvZVJRO+8jOaXoOazleS/neWtmCcpOwogICAgICAgICAgICByZXR1cm47CiAgICAgICAgICB9CiAgICAgICAgICBwYXlsb2FkLmlkID0gX3RoaXMxOC5kZXRhaWxGb3JtLmlkOwogICAgICAgICAgcGF5bG9hZC5iaCA9IF90aGlzMTguZGV0YWlsRm9ybS5iaDsKICAgICAgICB9CiAgICAgICAgX3RoaXMxOC5kZXRhaWxTYXZpbmcgPSB0cnVlOwogICAgICAgIHZhciByZXF1ZXN0ID0gX3RoaXMxOC5pc0RldGFpbEFkZCA/ICgwLCBfdGVhY2hpbmdTdG9jay5hZGRUZWFjaGluZ1N0b2NrRGV0YWlsKShwYXlsb2FkKSA6ICgwLCBfdGVhY2hpbmdTdG9jay51cGRhdGVUZWFjaGluZ1N0b2NrRGV0YWlsKShwYXlsb2FkKTsKICAgICAgICByZXF1ZXN0LnRoZW4oZnVuY3Rpb24gKCkgewogICAgICAgICAgX3RoaXMxOC4kbWVzc2FnZS5zdWNjZXNzKF90aGlzMTguaXNEZXRhaWxBZGQgPyAn5paw5aKe5oiQ5YqfJyA6ICfkv67mlLnmiJDlip8nKTsKICAgICAgICAgIF90aGlzMTguZGV0YWlsRm9ybURpYWxvZ1Zpc2libGUgPSBmYWxzZTsKICAgICAgICAgIF90aGlzMTguZmV0Y2hEZXRhaWxMaXN0KCk7CiAgICAgICAgfSkuY2F0Y2goZnVuY3Rpb24gKCkge30pLmZpbmFsbHkoZnVuY3Rpb24gKCkgewogICAgICAgICAgX3RoaXMxOC5kZXRhaWxTYXZpbmcgPSBmYWxzZTsKICAgICAgICB9KTsKICAgICAgfSk7CiAgICB9LAogICAgaGFuZGxlRGV0YWlsVmlldzogZnVuY3Rpb24gaGFuZGxlRGV0YWlsVmlldyhyb3cpIHsKICAgICAgdGhpcy5kZXRhaWxWaWV3RGF0YSA9IHJvdzsKICAgICAgdGhpcy5kZXRhaWxWaWV3RGlhbG9nVmlzaWJsZSA9IHRydWU7CiAgICB9LAogICAgaGFuZGxlRGV0YWlsRGVsZXRlOiBmdW5jdGlvbiBoYW5kbGVEZXRhaWxEZWxldGUocm93KSB7CiAgICAgIHZhciBfdGhpczE5ID0gdGhpczsKICAgICAgaWYgKCFyb3cuaWQpIHsKICAgICAgICB0aGlzLiRtZXNzYWdlLndhcm5pbmcoJ+W9k+WJjeihjOe8uuWwkUlEJyk7CiAgICAgICAgcmV0dXJuOwogICAgICB9CiAgICAgIHRoaXMuJGNvbmZpcm0oIlx1Nzg2RVx1NUI5QVx1ODk4MVx1NTIyMFx1OTY2NFx1NUU5M1x1NUI1OFx1NjYwRVx1N0VDNlx1OTg3OVx1MzAwQyIuY29uY2F0KHJvdy5iaCwgIlx1MzAwRFx1NTQxN1x1RkYxRiIpLCAn57O757uf5o+Q56S6JywgewogICAgICAgIGNvbmZpcm1CdXR0b25UZXh0OiAn56Gu5a6aJywKICAgICAgICBjYW5jZWxCdXR0b25UZXh0OiAn5Y+W5raIJywKICAgICAgICB0eXBlOiAnd2FybmluZycKICAgICAgfSkudGhlbihmdW5jdGlvbiAoKSB7CiAgICAgICAgKDAsIF90ZWFjaGluZ1N0b2NrLmRlbGV0ZVRlYWNoaW5nU3RvY2tEZXRhaWwpKHJvdy5pZCkudGhlbihmdW5jdGlvbiAoKSB7CiAgICAgICAgICBfdGhpczE5LiRtZXNzYWdlLnN1Y2Nlc3MoJ+WIoOmZpOaIkOWKnycpOwogICAgICAgICAgX3RoaXMxOS5mZXRjaERldGFpbExpc3QoKTsKICAgICAgICB9KS5jYXRjaChmdW5jdGlvbiAoKSB7fSk7CiAgICAgIH0pLmNhdGNoKGZ1bmN0aW9uICgpIHt9KTsKICAgIH0KICB9Cn07"},{"version":3,"names":["_fileSaver","require","_teachingMaterial","_teachingStock","name","data","activeTab","searchForm","bh","mc","zz","cbs","isbn","jcfl","jclx","tyType","jcflOptions","jclxOptions","jcbxlxOptions","jczdlxOptions","jclyOptions","jcccOptions","cbfsOptions","jcmjOptions","jldwOptions","loading","tableData","pageNum","pageSize","total","addDialogVisible","addSaving","addForm","createEmptyForm","editDialogVisible","editLoading","editSaving","editForm","formRules","required","message","trigger","jcbxlx","selectedFile","stockSearchForm","lb","zb","zt","stockLoading","stockTableData","stockPageNum","stockPageSize","stockTotal","stockFormDialogVisible","stockFormLoading","stockSaving","isStockAdd","stockForm","createEmptyStockForm","stockFormRules","stockDetailDialogVisible","stockDetailData","detailSearchForm","jckcdbbh","jcxxbh","hwbwType","detailLoading","detailTableData","detailPageNum","detailPageSize","detailTotal","detailFormDialogVisible","detailFormLoading","detailSaving","isDetailAdd","detailForm","createEmptyDetailForm","detailFormRules","sl","detailViewDialogVisible","detailViewData","computed","fileName","mounted","fetchList","methods","formatDate","row","column","cellValue","String","slice","fmtDateTime","val","undefined","replace","fmtVal","cbrq","jczdlx","jcly","jccc","bc","kb","dj","jldw","zrjyjlxff","jcdm","cbfs","jcmj","bxdw","bz","xcy","ty","qksm","cbbmbh","cbrbh","bgybh","sprbh","jsonzd","qzkcmxxbh","hwbw","hwbwsj","cleanPayload","obj","payload","Object","keys","forEach","key","value","buildQuery","_this","params","trim","_this2","_objectSpread2","default","listTeachingMaterial","then","response","records","catch","handleSearch","handleReset","handleSizeChange","size","handleCurrentChange","page","handleDownloadList","$message","info","handleDownloadZip","handleNew","_this3","$nextTick","$refs","addFormRef","clearValidate","handleAddConfirm","_this4","validate","valid","addTeachingMaterial","buildPayload","success","finally","handleEdit","_this5","getTeachingMaterialById","id","form","handleEditConfirm","_this6","editFormRef","warning","updateTeachingMaterial","Number","handleDelete","_this7","$confirm","concat","confirmButtonText","cancelButtonText","type","deleteTeachingMaterial","handleDownloadTemplate","_this8","downloadTeachingMaterialTemplate","blob","saveAs","handleChooseFile","fileInput","click","handleFileChange","e","input","target","files","length","handleImport","_this9","importTeachingMaterial","count","buildStockQuery","_this0","fetchStockList","_this1","listTeachingStock","handleStockSearch","handleStockReset","handleStockSizeChange","handleStockCurrentChange","handleStockNew","_this10","stockFormRef","handleStockEdit","_this11","getTeachingStock","buildStockPayload","f","handleStockFormConfirm","_this12","request","addTeachingStock","updateTeachingStock","handleStockDetail","handleStockDelete","_this13","deleteTeachingStock","buildDetailQuery","_this14","fetchDetailList","_this15","listTeachingStockDetail","handleDetailSearch","handleDetailReset","handleDetailSizeChange","handleDetailCurrentChange","handleDetailNew","_this16","detailFormRef","handleDetailEdit","_this17","getTeachingStockDetail","buildDetailPayload","handleDetailFormConfirm","_this18","addTeachingStockDetail","updateTeachingStockDetail","handleDetailView","handleDetailDelete","_this19","deleteTeachingStockDetail"],"sources":["src/views/textbook/index.vue"],"sourcesContent":["<template>\r\n <div class=\"app-container textbook-page\">\r\n <el-tabs v-model=\"activeTab\" type=\"border-card\" class=\"textbook-tabs\">\r\n <!-- 教材信息 -->\r\n <el-tab-pane label=\"教材信息\" name=\"info\">\r\n <!-- 查询条件 -->\r\n <el-card shadow=\"never\" class=\"search-card\">\r\n <el-form :model=\"searchForm\" label-width=\"90px\" class=\"search-form\">\r\n <el-row :gutter=\"0\">\r\n <el-col :span=\"6\">\r\n <el-form-item label=\"编号\">\r\n <el-input v-model=\"searchForm.bh\" placeholder=\"请输入编号\" clearable />\r\n </el-form-item>\r\n </el-col>\r\n <el-col :span=\"6\">\r\n <el-form-item label=\"教材名称\">\r\n <el-input v-model=\"searchForm.mc\" placeholder=\"请输入教材名称\" clearable />\r\n </el-form-item>\r\n </el-col>\r\n <el-col :span=\"6\">\r\n <el-form-item label=\"作者\">\r\n <el-input v-model=\"searchForm.zz\" placeholder=\"请输入作者\" clearable />\r\n </el-form-item>\r\n </el-col>\r\n <el-col :span=\"6\">\r\n <el-form-item label=\"出版社\">\r\n <el-input v-model=\"searchForm.cbs\" placeholder=\"请输入出版社\" clearable />\r\n </el-form-item>\r\n </el-col>\r\n <el-col :span=\"6\">\r\n <el-form-item label=\"ISBN\">\r\n <el-input v-model=\"searchForm.isbn\" placeholder=\"请输入ISBN\" clearable />\r\n </el-form-item>\r\n </el-col>\r\n <el-col :span=\"6\">\r\n <el-form-item label=\"教材分类\">\r\n <el-select v-model=\"searchForm.jcfl\" placeholder=\"全部\" clearable class=\"w-full\">\r\n <el-option v-for=\"item in jcflOptions\" :key=\"item\" :label=\"item\" :value=\"item\" />\r\n </el-select>\r\n </el-form-item>\r\n </el-col>\r\n <el-col :span=\"6\">\r\n <el-form-item label=\"教材类型\">\r\n <el-select v-model=\"searchForm.jclx\" placeholder=\"全部\" clearable class=\"w-full\">\r\n <el-option v-for=\"item in jclxOptions\" :key=\"item\" :label=\"item\" :value=\"item\" />\r\n </el-select>\r\n </el-form-item>\r\n </el-col>\r\n <el-col :span=\"6\">\r\n <el-form-item label=\"停用\">\r\n <el-select v-model=\"searchForm.tyType\" class=\"w-full\">\r\n <el-option label=\"全部\" value=\"\" />\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-form>\r\n <div 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 </div>\r\n </el-card>\r\n\r\n <!-- 教材信息列表 -->\r\n <div class=\"list-title\">教材信息列表:</div>\r\n <div class=\"list-toolbar\">\r\n <div class=\"left-group\">\r\n <el-button type=\"primary\" icon=\"el-icon-plus\" @click=\"handleNew\">新建教材信息</el-button>\r\n <el-button icon=\"el-icon-download\" @click=\"handleDownloadList\">下载教材列表</el-button>\r\n <el-button icon=\"el-icon-folder-opened\" @click=\"handleDownloadZip\">所选文件资料打包ZIP下载</el-button>\r\n </div>\r\n <div class=\"right-group\">\r\n <el-button icon=\"el-icon-download\" @click=\"handleDownloadTemplate\">【教材数据文件模板】下载</el-button>\r\n <div class=\"file-input\">\r\n <input ref=\"fileInput\" type=\"file\" accept=\".xls,.xlsx\" style=\"display: none\" @change=\"handleFileChange\" />\r\n <el-button icon=\"el-icon-folder-opened\" @click=\"handleChooseFile\">选择文件</el-button>\r\n <span class=\"file-name\">{{ fileName }}</span>\r\n <el-button type=\"primary\" icon=\"el-icon-upload2\" @click=\"handleImport\">上传数据</el-button>\r\n </div>\r\n </div>\r\n </div>\r\n\r\n <el-card shadow=\"never\" class=\"table-card\">\r\n <el-table v-loading=\"loading\" :data=\"tableData\" stripe border highlight-current-row>\r\n <el-table-column type=\"index\" label=\"序号\" width=\"60\" align=\"center\" />\r\n <el-table-column prop=\"mc\" label=\"教材名称\" min-width=\"150\" show-overflow-tooltip />\r\n <el-table-column prop=\"zz\" label=\"作者\" min-width=\"120\" show-overflow-tooltip />\r\n <el-table-column prop=\"cbs\" label=\"出版社\" min-width=\"130\" show-overflow-tooltip />\r\n <el-table-column prop=\"cbrq\" label=\"出版日期\" min-width=\"100\" align=\"center\" :formatter=\"formatDate\" />\r\n <el-table-column prop=\"isbn\" label=\"ISBN\" min-width=\"140\" show-overflow-tooltip />\r\n <el-table-column prop=\"jclx\" label=\"教材类型\" min-width=\"100\" align=\"center\" />\r\n <el-table-column prop=\"jcfl\" label=\"教材分类\" min-width=\"100\" align=\"center\" />\r\n <el-table-column prop=\"jcbxlx\" label=\"编写类型\" min-width=\"100\" align=\"center\" />\r\n <el-table-column prop=\"jcly\" label=\"教材来源\" min-width=\"130\" align=\"center\" />\r\n <el-table-column label=\"停用\" min-width=\"80\" align=\"center\">\r\n <template slot-scope=\"{ row }\">\r\n <el-tag :type=\"row.ty ? 'danger' : 'success'\" size=\"small\">{{ row.ty ? '是' : '否' }}</el-tag>\r\n </template>\r\n </el-table-column>\r\n <el-table-column label=\"操作\" width=\"140\" align=\"center\" fixed=\"right\">\r\n <template slot-scope=\"{ row }\">\r\n <el-button type=\"text\" size=\"small\" icon=\"el-icon-edit\" @click=\"handleEdit(row)\">编辑</el-button>\r\n <el-button type=\"text\" size=\"small\" class=\"danger-text\" @click=\"handleDelete(row)\">删除</el-button>\r\n </template>\r\n </el-table-column>\r\n </el-table>\r\n <el-empty v-if=\"!loading && tableData.length === 0\" description=\"暂无教材数据\" :image-size=\"60\" />\r\n <div class=\"pagination-wrap\">\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 background\r\n @size-change=\"handleSizeChange\"\r\n @current-change=\"handleCurrentChange\"\r\n />\r\n </div>\r\n </el-card>\r\n </el-tab-pane>\r\n\r\n <!-- 教材库存单 -->\r\n <el-tab-pane label=\"教材库存单\" name=\"stock\">\r\n <el-card shadow=\"never\" class=\"search-card\">\r\n <el-form :model=\"stockSearchForm\" label-width=\"90px\" class=\"search-form\">\r\n <el-row :gutter=\"0\">\r\n <el-col :span=\"6\">\r\n <el-form-item label=\"编号\"><el-input v-model=\"stockSearchForm.bh\" placeholder=\"请输入编号\" clearable /></el-form-item>\r\n </el-col>\r\n <el-col :span=\"6\">\r\n <el-form-item label=\"名称\"><el-input v-model=\"stockSearchForm.mc\" placeholder=\"请输入名称\" clearable /></el-form-item>\r\n </el-col>\r\n <el-col :span=\"6\">\r\n <el-form-item label=\"类别\"><el-input v-model=\"stockSearchForm.lb\" placeholder=\"请输入类别\" clearable /></el-form-item>\r\n </el-col>\r\n <el-col :span=\"6\">\r\n <el-form-item label=\"字别\"><el-input v-model=\"stockSearchForm.zb\" placeholder=\"请输入字别\" clearable /></el-form-item>\r\n </el-col>\r\n <el-col :span=\"6\">\r\n <el-form-item label=\"状态\"><el-input v-model=\"stockSearchForm.zt\" placeholder=\"请输入状态\" clearable /></el-form-item>\r\n </el-col>\r\n </el-row>\r\n </el-form>\r\n <div class=\"search-actions\">\r\n <el-button type=\"primary\" icon=\"el-icon-search\" @click=\"handleStockSearch\">查询</el-button>\r\n <el-button icon=\"el-icon-refresh\" @click=\"handleStockReset\">重置</el-button>\r\n </div>\r\n </el-card>\r\n\r\n <div class=\"list-title\">教材库存单列表:</div>\r\n <div class=\"list-toolbar\">\r\n <div class=\"left-group\">\r\n <el-button type=\"primary\" icon=\"el-icon-plus\" @click=\"handleStockNew\">新增库存单</el-button>\r\n </div>\r\n </div>\r\n\r\n <el-card shadow=\"never\" class=\"table-card\">\r\n <el-table v-loading=\"stockLoading\" :data=\"stockTableData\" stripe border highlight-current-row>\r\n <el-table-column type=\"index\" label=\"序号\" width=\"60\" align=\"center\" />\r\n <el-table-column prop=\"mc\" label=\"名称\" min-width=\"130\" show-overflow-tooltip />\r\n <el-table-column prop=\"qksm\" label=\"情况说明\" min-width=\"130\" show-overflow-tooltip />\r\n <el-table-column prop=\"lb\" label=\"类别\" min-width=\"90\" align=\"center\" />\r\n <el-table-column prop=\"zb\" label=\"字别\" min-width=\"90\" align=\"center\" />\r\n <el-table-column prop=\"cbbmbh\" label=\"承办部门编号\" min-width=\"110\" show-overflow-tooltip />\r\n <el-table-column prop=\"cbrbh\" label=\"承办人编号\" min-width=\"100\" align=\"center\" />\r\n <el-table-column prop=\"bgybh\" label=\"保管员编号\" min-width=\"100\" align=\"center\" />\r\n <el-table-column prop=\"sprbh\" label=\"审批人编号\" min-width=\"100\" align=\"center\" />\r\n <el-table-column prop=\"zt\" label=\"状态\" min-width=\"90\" align=\"center\" />\r\n <el-table-column label=\"创建时间\" min-width=\"150\" align=\"center\">\r\n <template slot-scope=\"{ row }\">{{ fmtDateTime(row.cjsj) || '-' }}</template>\r\n </el-table-column>\r\n <el-table-column label=\"修改时间\" min-width=\"150\" align=\"center\">\r\n <template slot-scope=\"{ row }\">{{ fmtDateTime(row.xgsj) || '-' }}</template>\r\n </el-table-column>\r\n <el-table-column label=\"操作\" width=\"150\" align=\"center\" fixed=\"right\">\r\n <template slot-scope=\"{ row }\">\r\n <el-button type=\"text\" size=\"small\" icon=\"el-icon-view\" @click=\"handleStockDetail(row)\">详情</el-button>\r\n <el-button type=\"text\" size=\"small\" icon=\"el-icon-edit\" @click=\"handleStockEdit(row)\">编辑</el-button>\r\n <el-button type=\"text\" size=\"small\" class=\"danger-text\" @click=\"handleStockDelete(row)\">删除</el-button>\r\n </template>\r\n </el-table-column>\r\n </el-table>\r\n <el-empty v-if=\"!stockLoading && stockTableData.length === 0\" description=\"暂无库存单数据\" :image-size=\"60\" />\r\n <div class=\"pagination-wrap\">\r\n <el-pagination\r\n :current-page=\"stockPageNum\"\r\n :page-size=\"stockPageSize\"\r\n :total=\"stockTotal\"\r\n :page-sizes=\"[10, 20, 50, 100]\"\r\n layout=\"total, sizes, prev, pager, next, jumper\"\r\n background\r\n @size-change=\"handleStockSizeChange\"\r\n @current-change=\"handleStockCurrentChange\"\r\n />\r\n </div>\r\n </el-card>\r\n </el-tab-pane>\r\n\r\n <!-- 教材库存明细项 -->\r\n <el-tab-pane label=\"教材库存明细项\" name=\"detail\">\r\n <el-card shadow=\"never\" class=\"search-card\">\r\n <el-form :model=\"detailSearchForm\" label-width=\"110px\" class=\"search-form\">\r\n <el-row :gutter=\"0\">\r\n <el-col :span=\"6\">\r\n <el-form-item label=\"编号\"><el-input v-model=\"detailSearchForm.bh\" placeholder=\"请输入编号\" clearable /></el-form-item>\r\n </el-col>\r\n <el-col :span=\"6\">\r\n <el-form-item label=\"库存单编号\"><el-input v-model=\"detailSearchForm.jckcdbbh\" placeholder=\"请输入库存单编号\" clearable /></el-form-item>\r\n </el-col>\r\n <el-col :span=\"6\">\r\n <el-form-item label=\"教材信息编号\"><el-input v-model=\"detailSearchForm.jcxxbh\" placeholder=\"请输入教材信息编号\" clearable /></el-form-item>\r\n </el-col>\r\n <el-col :span=\"6\">\r\n <el-form-item label=\"还回完毕\">\r\n <el-select v-model=\"detailSearchForm.hwbwType\" class=\"w-full\">\r\n <el-option label=\"全部\" value=\"\" />\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-form>\r\n <div class=\"search-actions\">\r\n <el-button type=\"primary\" icon=\"el-icon-search\" @click=\"handleDetailSearch\">查询</el-button>\r\n <el-button icon=\"el-icon-refresh\" @click=\"handleDetailReset\">重置</el-button>\r\n </div>\r\n </el-card>\r\n\r\n <div class=\"list-title\">教材库存明细项列表:</div>\r\n <div class=\"list-toolbar\">\r\n <div class=\"left-group\">\r\n <el-button type=\"primary\" icon=\"el-icon-plus\" @click=\"handleDetailNew\">新增库存明细项</el-button>\r\n </div>\r\n </div>\r\n\r\n <el-card shadow=\"never\" class=\"table-card\">\r\n <el-table v-loading=\"detailLoading\" :data=\"detailTableData\" stripe border highlight-current-row>\r\n <el-table-column type=\"index\" label=\"序号\" width=\"60\" align=\"center\" />\r\n <el-table-column prop=\"jckcdbbh\" label=\"库存单编号\" min-width=\"100\" align=\"center\" />\r\n <el-table-column prop=\"jcxxbh\" label=\"教材信息编号\" min-width=\"110\" align=\"center\" />\r\n <el-table-column prop=\"sl\" label=\"数量\" min-width=\"80\" align=\"center\" />\r\n <el-table-column prop=\"qzkcmxxbh\" label=\"前置库存明细项编号\" min-width=\"130\" show-overflow-tooltip />\r\n <el-table-column label=\"还回完毕\" min-width=\"90\" align=\"center\">\r\n <template slot-scope=\"{ row }\">\r\n <el-tag :type=\"row.hwbw ? 'success' : 'info'\" size=\"small\">{{ row.hwbw ? '是' : '否' }}</el-tag>\r\n </template>\r\n </el-table-column>\r\n <el-table-column label=\"还回完毕时间\" min-width=\"150\" align=\"center\">\r\n <template slot-scope=\"{ row }\">{{ fmtDateTime(row.hwbwsj) || '-' }}</template>\r\n </el-table-column>\r\n <el-table-column prop=\"bz\" label=\"备注\" min-width=\"120\" show-overflow-tooltip />\r\n <el-table-column label=\"操作\" width=\"150\" align=\"center\" fixed=\"right\">\r\n <template slot-scope=\"{ row }\">\r\n <el-button type=\"text\" size=\"small\" icon=\"el-icon-view\" @click=\"handleDetailView(row)\">详情</el-button>\r\n <el-button type=\"text\" size=\"small\" icon=\"el-icon-edit\" @click=\"handleDetailEdit(row)\">编辑</el-button>\r\n <el-button type=\"text\" size=\"small\" class=\"danger-text\" @click=\"handleDetailDelete(row)\">删除</el-button>\r\n </template>\r\n </el-table-column>\r\n </el-table>\r\n <el-empty v-if=\"!detailLoading && detailTableData.length === 0\" description=\"暂无库存明细项数据\" :image-size=\"60\" />\r\n <div class=\"pagination-wrap\">\r\n <el-pagination\r\n :current-page=\"detailPageNum\"\r\n :page-size=\"detailPageSize\"\r\n :total=\"detailTotal\"\r\n :page-sizes=\"[10, 20, 50, 100]\"\r\n layout=\"total, sizes, prev, pager, next, jumper\"\r\n background\r\n @size-change=\"handleDetailSizeChange\"\r\n @current-change=\"handleDetailCurrentChange\"\r\n />\r\n </div>\r\n </el-card>\r\n </el-tab-pane>\r\n </el-tabs>\r\n\r\n <!-- 新建教材对话框 -->\r\n <el-dialog\r\n :visible=\"addDialogVisible\"\r\n title=\"新建教材\"\r\n width=\"780px\"\r\n :close-on-click-modal=\"false\"\r\n @update:visible=\"val => addDialogVisible = val\"\r\n >\r\n <el-form ref=\"addFormRef\" :model=\"addForm\" :rules=\"formRules\" label-width=\"140px\" class=\"add-form\">\r\n <el-row :gutter=\"16\">\r\n <el-col :span=\"12\">\r\n <el-form-item label=\"教材名称\" prop=\"mc\"><el-input v-model=\"addForm.mc\" placeholder=\"请输入\" /></el-form-item>\r\n </el-col>\r\n <el-col :span=\"12\">\r\n <el-form-item label=\"编写类型\" prop=\"jcbxlx\">\r\n <el-select v-model=\"addForm.jcbxlx\" placeholder=\"请选择\" style=\"width:100%\">\r\n <el-option v-for=\"item in jcbxlxOptions\" :key=\"item\" :label=\"item\" :value=\"item\" />\r\n </el-select>\r\n </el-form-item>\r\n </el-col>\r\n </el-row>\r\n <el-row :gutter=\"16\">\r\n <el-col :span=\"12\">\r\n <el-form-item label=\"作者\"><el-input v-model=\"addForm.zz\" placeholder=\"请输入\" /></el-form-item>\r\n </el-col>\r\n <el-col :span=\"12\">\r\n <el-form-item label=\"出版社\"><el-input v-model=\"addForm.cbs\" placeholder=\"请输入\" /></el-form-item>\r\n </el-col>\r\n </el-row>\r\n <el-row :gutter=\"16\">\r\n <el-col :span=\"12\">\r\n <el-form-item label=\"ISBN\"><el-input v-model=\"addForm.isbn\" placeholder=\"请输入\" /></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=\"addForm.cbrq\" type=\"date\" value-format=\"yyyy-MM-dd\" placeholder=\"选择\" style=\"width:100%\" />\r\n </el-form-item>\r\n </el-col>\r\n </el-row>\r\n <el-row :gutter=\"16\">\r\n <el-col :span=\"12\">\r\n <el-form-item label=\"教材分类\">\r\n <el-select v-model=\"addForm.jcfl\" placeholder=\"请选择\" clearable style=\"width:100%\">\r\n <el-option v-for=\"item in jcflOptions\" :key=\"item\" :label=\"item\" :value=\"item\" />\r\n </el-select>\r\n </el-form-item>\r\n </el-col>\r\n <el-col :span=\"12\">\r\n <el-form-item label=\"教材类型\">\r\n <el-select v-model=\"addForm.jclx\" placeholder=\"请选择\" clearable style=\"width:100%\">\r\n <el-option v-for=\"item in jclxOptions\" :key=\"item\" :label=\"item\" :value=\"item\" />\r\n </el-select>\r\n </el-form-item>\r\n </el-col>\r\n </el-row>\r\n <el-row :gutter=\"16\">\r\n <el-col :span=\"12\">\r\n <el-form-item label=\"重点类型\">\r\n <el-select v-model=\"addForm.jczdlx\" placeholder=\"请选择\" clearable style=\"width:100%\">\r\n <el-option v-for=\"item in jczdlxOptions\" :key=\"item\" :label=\"item\" :value=\"item\" />\r\n </el-select>\r\n </el-form-item>\r\n </el-col>\r\n <el-col :span=\"12\">\r\n <el-form-item label=\"教材来源\">\r\n <el-select v-model=\"addForm.jcly\" placeholder=\"请选择\" clearable style=\"width:100%\">\r\n <el-option v-for=\"item in jclyOptions\" :key=\"item\" :label=\"item\" :value=\"item\" />\r\n </el-select>\r\n </el-form-item>\r\n </el-col>\r\n </el-row>\r\n <el-row :gutter=\"16\">\r\n <el-col :span=\"12\">\r\n <el-form-item label=\"教材层次\">\r\n <el-select v-model=\"addForm.jccc\" placeholder=\"请选择\" clearable style=\"width:100%\">\r\n <el-option v-for=\"item in jcccOptions\" :key=\"item\" :label=\"item\" :value=\"item\" />\r\n </el-select>\r\n </el-form-item>\r\n </el-col>\r\n <el-col :span=\"12\">\r\n <el-form-item label=\"出版方式\">\r\n <el-select v-model=\"addForm.cbfs\" placeholder=\"请选择\" clearable style=\"width:100%\">\r\n <el-option v-for=\"item in cbfsOptions\" :key=\"item\" :label=\"item\" :value=\"item\" />\r\n </el-select>\r\n </el-form-item>\r\n </el-col>\r\n </el-row>\r\n <el-row :gutter=\"16\">\r\n <el-col :span=\"12\">\r\n <el-form-item label=\"版次\"><el-input v-model=\"addForm.bc\" placeholder=\"请输入\" /></el-form-item>\r\n </el-col>\r\n <el-col :span=\"12\">\r\n <el-form-item label=\"开本\"><el-input v-model=\"addForm.kb\" placeholder=\"请输入\" /></el-form-item>\r\n </el-col>\r\n </el-row>\r\n <el-row :gutter=\"16\">\r\n <el-col :span=\"12\">\r\n <el-form-item label=\"单价\"><el-input-number v-model=\"addForm.dj\" :min=\"0\" :precision=\"2\" style=\"width:100%\" /></el-form-item>\r\n </el-col>\r\n <el-col :span=\"12\">\r\n <el-form-item label=\"计量单位\">\r\n <el-select v-model=\"addForm.jldw\" placeholder=\"请选择\" clearable style=\"width:100%\">\r\n <el-option v-for=\"item in jldwOptions\" :key=\"item\" :label=\"item\" :value=\"item\" />\r\n </el-select>\r\n </el-form-item>\r\n </el-col>\r\n </el-row>\r\n <el-row :gutter=\"16\">\r\n <el-col :span=\"12\">\r\n <el-form-item label=\"责任教员联系方式\"><el-input v-model=\"addForm.zrjyjlxff\" placeholder=\"请输入\" /></el-form-item>\r\n </el-col>\r\n <el-col :span=\"12\">\r\n <el-form-item label=\"教材代码\"><el-input v-model=\"addForm.jcdm\" placeholder=\"请输入\" /></el-form-item>\r\n </el-col>\r\n </el-row>\r\n <el-row :gutter=\"16\">\r\n <el-col :span=\"12\">\r\n <el-form-item label=\"教材密级\">\r\n <el-select v-model=\"addForm.jcmj\" placeholder=\"请选择\" clearable style=\"width:100%\">\r\n <el-option v-for=\"item in jcmjOptions\" :key=\"item\" :label=\"item\" :value=\"item\" />\r\n </el-select>\r\n </el-form-item>\r\n </el-col>\r\n <el-col :span=\"12\">\r\n <el-form-item label=\"编写单位\"><el-input v-model=\"addForm.bxdw\" placeholder=\"请输入\" /></el-form-item>\r\n </el-col>\r\n </el-row>\r\n <el-row :gutter=\"16\">\r\n <el-col :span=\"12\">\r\n <el-form-item label=\"备注\"><el-input v-model=\"addForm.bz\" placeholder=\"请输入\" /></el-form-item>\r\n </el-col>\r\n <el-col :span=\"12\">\r\n <el-form-item label=\"属性\">\r\n <el-checkbox v-model=\"addForm.xcy\">需彩印</el-checkbox>\r\n <el-checkbox v-model=\"addForm.ty\" class=\"margin-left-10\">停用</el-checkbox>\r\n </el-form-item>\r\n </el-col>\r\n </el-row>\r\n </el-form>\r\n <div slot=\"footer\">\r\n <el-button @click=\"addDialogVisible = false\">取消</el-button>\r\n <el-button type=\"primary\" :loading=\"addSaving\" @click=\"handleAddConfirm\">确定</el-button>\r\n </div>\r\n </el-dialog>\r\n\r\n <!-- 编辑教材对话框 -->\r\n <el-dialog\r\n :visible=\"editDialogVisible\"\r\n title=\"编辑教材\"\r\n width=\"780px\"\r\n :close-on-click-modal=\"false\"\r\n @update:visible=\"val => editDialogVisible = val\"\r\n >\r\n <div v-loading=\"editLoading\">\r\n <el-form ref=\"editFormRef\" :model=\"editForm\" :rules=\"formRules\" label-width=\"140px\" class=\"add-form\">\r\n <el-row :gutter=\"16\">\r\n <el-col :span=\"12\">\r\n <el-form-item label=\"编号\"><el-input v-model=\"editForm.bh\" disabled /></el-form-item>\r\n </el-col>\r\n <el-col :span=\"12\">\r\n <el-form-item label=\"教材名称\" prop=\"mc\"><el-input v-model=\"editForm.mc\" placeholder=\"请输入\" /></el-form-item>\r\n </el-col>\r\n </el-row>\r\n <el-row :gutter=\"16\">\r\n <el-col :span=\"12\">\r\n <el-form-item label=\"编写类型\" prop=\"jcbxlx\">\r\n <el-select v-model=\"editForm.jcbxlx\" placeholder=\"请选择\" style=\"width:100%\">\r\n <el-option v-for=\"item in jcbxlxOptions\" :key=\"item\" :label=\"item\" :value=\"item\" />\r\n </el-select>\r\n </el-form-item>\r\n </el-col>\r\n <el-col :span=\"12\">\r\n <el-form-item label=\"作者\"><el-input v-model=\"editForm.zz\" placeholder=\"请输入\" /></el-form-item>\r\n </el-col>\r\n </el-row>\r\n <el-row :gutter=\"16\">\r\n <el-col :span=\"12\">\r\n <el-form-item label=\"出版社\"><el-input v-model=\"editForm.cbs\" placeholder=\"请输入\" /></el-form-item>\r\n </el-col>\r\n <el-col :span=\"12\">\r\n <el-form-item label=\"ISBN\"><el-input v-model=\"editForm.isbn\" placeholder=\"请输入\" /></el-form-item>\r\n </el-col>\r\n </el-row>\r\n <el-row :gutter=\"16\">\r\n <el-col :span=\"12\">\r\n <el-form-item label=\"出版日期\">\r\n <el-date-picker v-model=\"editForm.cbrq\" type=\"date\" value-format=\"yyyy-MM-dd\" placeholder=\"选择\" 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-select v-model=\"editForm.jcfl\" placeholder=\"请选择\" clearable style=\"width:100%\">\r\n <el-option v-for=\"item in jcflOptions\" :key=\"item\" :label=\"item\" :value=\"item\" />\r\n </el-select>\r\n </el-form-item>\r\n </el-col>\r\n </el-row>\r\n <el-row :gutter=\"16\">\r\n <el-col :span=\"12\">\r\n <el-form-item label=\"教材类型\">\r\n <el-select v-model=\"editForm.jclx\" placeholder=\"请选择\" clearable style=\"width:100%\">\r\n <el-option v-for=\"item in jclxOptions\" :key=\"item\" :label=\"item\" :value=\"item\" />\r\n </el-select>\r\n </el-form-item>\r\n </el-col>\r\n <el-col :span=\"12\">\r\n <el-form-item label=\"重点类型\">\r\n <el-select v-model=\"editForm.jczdlx\" placeholder=\"请选择\" clearable style=\"width:100%\">\r\n <el-option v-for=\"item in jczdlxOptions\" :key=\"item\" :label=\"item\" :value=\"item\" />\r\n </el-select>\r\n </el-form-item>\r\n </el-col>\r\n </el-row>\r\n <el-row :gutter=\"16\">\r\n <el-col :span=\"12\">\r\n <el-form-item label=\"教材来源\">\r\n <el-select v-model=\"editForm.jcly\" placeholder=\"请选择\" clearable style=\"width:100%\">\r\n <el-option v-for=\"item in jclyOptions\" :key=\"item\" :label=\"item\" :value=\"item\" />\r\n </el-select>\r\n </el-form-item>\r\n </el-col>\r\n <el-col :span=\"12\">\r\n <el-form-item label=\"教材层次\">\r\n <el-select v-model=\"editForm.jccc\" placeholder=\"请选择\" clearable style=\"width:100%\">\r\n <el-option v-for=\"item in jcccOptions\" :key=\"item\" :label=\"item\" :value=\"item\" />\r\n </el-select>\r\n </el-form-item>\r\n </el-col>\r\n </el-row>\r\n <el-row :gutter=\"16\">\r\n <el-col :span=\"12\">\r\n <el-form-item label=\"出版方式\">\r\n <el-select v-model=\"editForm.cbfs\" placeholder=\"请选择\" clearable style=\"width:100%\">\r\n <el-option v-for=\"item in cbfsOptions\" :key=\"item\" :label=\"item\" :value=\"item\" />\r\n </el-select>\r\n </el-form-item>\r\n </el-col>\r\n <el-col :span=\"12\">\r\n <el-form-item label=\"版次\"><el-input v-model=\"editForm.bc\" placeholder=\"请输入\" /></el-form-item>\r\n </el-col>\r\n </el-row>\r\n <el-row :gutter=\"16\">\r\n <el-col :span=\"12\">\r\n <el-form-item label=\"开本\"><el-input v-model=\"editForm.kb\" placeholder=\"请输入\" /></el-form-item>\r\n </el-col>\r\n <el-col :span=\"12\">\r\n <el-form-item label=\"单价\"><el-input-number v-model=\"editForm.dj\" :min=\"0\" :precision=\"2\" style=\"width:100%\" /></el-form-item>\r\n </el-col>\r\n </el-row>\r\n <el-row :gutter=\"16\">\r\n <el-col :span=\"12\">\r\n <el-form-item label=\"计量单位\">\r\n <el-select v-model=\"editForm.jldw\" placeholder=\"请选择\" clearable style=\"width:100%\">\r\n <el-option v-for=\"item in jldwOptions\" :key=\"item\" :label=\"item\" :value=\"item\" />\r\n </el-select>\r\n </el-form-item>\r\n </el-col>\r\n <el-col :span=\"12\">\r\n <el-form-item label=\"责任教员联系方式\"><el-input v-model=\"editForm.zrjyjlxff\" placeholder=\"请输入\" /></el-form-item>\r\n </el-col>\r\n </el-row>\r\n <el-row :gutter=\"16\">\r\n <el-col :span=\"12\">\r\n <el-form-item label=\"教材代码\"><el-input v-model=\"editForm.jcdm\" placeholder=\"请输入\" /></el-form-item>\r\n </el-col>\r\n <el-col :span=\"12\">\r\n <el-form-item label=\"教材密级\">\r\n <el-select v-model=\"editForm.jcmj\" placeholder=\"请选择\" clearable style=\"width:100%\">\r\n <el-option v-for=\"item in jcmjOptions\" :key=\"item\" :label=\"item\" :value=\"item\" />\r\n </el-select>\r\n </el-form-item>\r\n </el-col>\r\n </el-row>\r\n <el-row :gutter=\"16\">\r\n <el-col :span=\"12\">\r\n <el-form-item label=\"编写单位\"><el-input v-model=\"editForm.bxdw\" placeholder=\"请输入\" /></el-form-item>\r\n </el-col>\r\n <el-col :span=\"12\">\r\n <el-form-item label=\"备注\"><el-input v-model=\"editForm.bz\" placeholder=\"请输入\" /></el-form-item>\r\n </el-col>\r\n </el-row>\r\n <el-row :gutter=\"16\">\r\n <el-col :span=\"12\">\r\n <el-form-item label=\"属性\">\r\n <el-checkbox v-model=\"editForm.xcy\">需彩印</el-checkbox>\r\n <el-checkbox v-model=\"editForm.ty\" class=\"margin-left-10\">停用</el-checkbox>\r\n </el-form-item>\r\n </el-col>\r\n </el-row>\r\n </el-form>\r\n </div>\r\n <div slot=\"footer\">\r\n <el-button @click=\"editDialogVisible = false\">取消</el-button>\r\n <el-button type=\"primary\" :loading=\"editSaving\" @click=\"handleEditConfirm\">保存</el-button>\r\n </div>\r\n </el-dialog>\r\n\r\n <!-- 库存单新增/编辑对话框 -->\r\n <el-dialog\r\n :visible=\"stockFormDialogVisible\"\r\n :title=\"isStockAdd ? '新增库存单' : '编辑库存单'\"\r\n width=\"640px\"\r\n :close-on-click-modal=\"false\"\r\n @update:visible=\"val => stockFormDialogVisible = val\"\r\n >\r\n <div v-loading=\"stockFormLoading\">\r\n <el-form ref=\"stockFormRef\" :model=\"stockForm\" :rules=\"stockFormRules\" label-width=\"120px\" class=\"add-form\">\r\n <el-row :gutter=\"16\">\r\n <el-col :span=\"12\">\r\n <el-form-item label=\"编号\" v-if=\"!isStockAdd\"><el-input v-model=\"stockForm.bh\" disabled /></el-form-item>\r\n </el-col>\r\n <el-col :span=\"12\">\r\n <el-form-item label=\"名称\" prop=\"mc\"><el-input v-model=\"stockForm.mc\" placeholder=\"请输入\" /></el-form-item>\r\n </el-col>\r\n </el-row>\r\n <el-row :gutter=\"16\">\r\n <el-col :span=\"12\">\r\n <el-form-item label=\"类别\"><el-input v-model=\"stockForm.lb\" placeholder=\"请输入\" /></el-form-item>\r\n </el-col>\r\n <el-col :span=\"12\">\r\n <el-form-item label=\"字别\"><el-input v-model=\"stockForm.zb\" placeholder=\"请输入\" /></el-form-item>\r\n </el-col>\r\n </el-row>\r\n <el-row :gutter=\"16\">\r\n <el-col :span=\"12\">\r\n <el-form-item label=\"承办部门编号\"><el-input v-model=\"stockForm.cbbmbh\" placeholder=\"请输入\" /></el-form-item>\r\n </el-col>\r\n <el-col :span=\"12\">\r\n <el-form-item label=\"承办人编号\"><el-input v-model=\"stockForm.cbrbh\" placeholder=\"请输入\" /></el-form-item>\r\n </el-col>\r\n </el-row>\r\n <el-row :gutter=\"16\">\r\n <el-col :span=\"12\">\r\n <el-form-item label=\"保管员编号\"><el-input v-model=\"stockForm.bgybh\" placeholder=\"请输入\" /></el-form-item>\r\n </el-col>\r\n <el-col :span=\"12\">\r\n <el-form-item label=\"审批人编号\"><el-input v-model=\"stockForm.sprbh\" placeholder=\"请输入\" /></el-form-item>\r\n </el-col>\r\n </el-row>\r\n <el-row :gutter=\"16\">\r\n <el-col :span=\"12\">\r\n <el-form-item label=\"状态\"><el-input v-model=\"stockForm.zt\" placeholder=\"请输入\" /></el-form-item>\r\n </el-col>\r\n <el-col :span=\"12\">\r\n <el-form-item label=\"情况说明\"><el-input v-model=\"stockForm.qksm\" placeholder=\"请输入\" /></el-form-item>\r\n </el-col>\r\n </el-row>\r\n <el-row :gutter=\"16\">\r\n <el-col :span=\"24\">\r\n <el-form-item label=\"备注\"><el-input v-model=\"stockForm.bz\" type=\"textarea\" :rows=\"2\" placeholder=\"请输入\" /></el-form-item>\r\n </el-col>\r\n </el-row>\r\n <el-row :gutter=\"16\">\r\n <el-col :span=\"24\">\r\n <el-form-item label=\"JSONZD\"><el-input v-model=\"stockForm.jsonzd\" placeholder=\"请输入\" /></el-form-item>\r\n </el-col>\r\n </el-row>\r\n </el-form>\r\n </div>\r\n <div slot=\"footer\">\r\n <el-button @click=\"stockFormDialogVisible = false\">取消</el-button>\r\n <el-button type=\"primary\" :loading=\"stockSaving\" @click=\"handleStockFormConfirm\">确定</el-button>\r\n </div>\r\n </el-dialog>\r\n\r\n <!-- 库存单详情对话框 -->\r\n <el-dialog\r\n :visible=\"stockDetailDialogVisible\"\r\n title=\"库存单详情\"\r\n width=\"640px\"\r\n :close-on-click-modal=\"false\"\r\n @update:visible=\"val => stockDetailDialogVisible = val\"\r\n >\r\n <el-descriptions :column=\"2\" border size=\"medium\">\r\n <el-descriptions-item label=\"编号\">{{ stockDetailData.bh || '-' }}</el-descriptions-item>\r\n <el-descriptions-item label=\"名称\">{{ stockDetailData.mc || '-' }}</el-descriptions-item>\r\n <el-descriptions-item label=\"类别\">{{ stockDetailData.lb || '-' }}</el-descriptions-item>\r\n <el-descriptions-item label=\"字别\">{{ stockDetailData.zb || '-' }}</el-descriptions-item>\r\n <el-descriptions-item label=\"情况说明\" :span=\"2\">{{ stockDetailData.qksm || '-' }}</el-descriptions-item>\r\n <el-descriptions-item label=\"承办部门编号\">{{ stockDetailData.cbbmbh || '-' }}</el-descriptions-item>\r\n <el-descriptions-item label=\"承办人编号\">{{ stockDetailData.cbrbh || '-' }}</el-descriptions-item>\r\n <el-descriptions-item label=\"保管员编号\">{{ stockDetailData.bgybh || '-' }}</el-descriptions-item>\r\n <el-descriptions-item label=\"审批人编号\">{{ stockDetailData.sprbh || '-' }}</el-descriptions-item>\r\n <el-descriptions-item label=\"状态\">{{ stockDetailData.zt || '-' }}</el-descriptions-item>\r\n <el-descriptions-item label=\"备注\">{{ stockDetailData.bz || '-' }}</el-descriptions-item>\r\n <el-descriptions-item label=\"JSONZD\">{{ stockDetailData.jsonzd || '-' }}</el-descriptions-item>\r\n <el-descriptions-item label=\"创建时间\">{{ fmtDateTime(stockDetailData.cjsj) || '-' }}</el-descriptions-item>\r\n <el-descriptions-item label=\"修改时间\">{{ fmtDateTime(stockDetailData.xgsj) || '-' }}</el-descriptions-item>\r\n <el-descriptions-item label=\"提交时间\">{{ fmtDateTime(stockDetailData.tjsj) || '-' }}</el-descriptions-item>\r\n <el-descriptions-item label=\"审批时间\">{{ fmtDateTime(stockDetailData.spsj) || '-' }}</el-descriptions-item>\r\n <el-descriptions-item label=\"执行时间\">{{ fmtDateTime(stockDetailData.zxsj) || '-' }}</el-descriptions-item>\r\n <el-descriptions-item label=\"结束时间\">{{ fmtDateTime(stockDetailData.jssj) || '-' }}</el-descriptions-item>\r\n <el-descriptions-item label=\"退回意见\">{{ stockDetailData.thyj || '-' }}</el-descriptions-item>\r\n <el-descriptions-item label=\"退回时间\">{{ fmtDateTime(stockDetailData.thsj) || '-' }}</el-descriptions-item>\r\n </el-descriptions>\r\n <div slot=\"footer\">\r\n <el-button @click=\"stockDetailDialogVisible = false\">关闭</el-button>\r\n </div>\r\n </el-dialog>\r\n\r\n <!-- 库存明细项新增/编辑对话框 -->\r\n <el-dialog\r\n :visible=\"detailFormDialogVisible\"\r\n :title=\"isDetailAdd ? '新增库存明细项' : '编辑库存明细项'\"\r\n width=\"640px\"\r\n :close-on-click-modal=\"false\"\r\n @update:visible=\"val => detailFormDialogVisible = val\"\r\n >\r\n <div v-loading=\"detailFormLoading\">\r\n <el-form ref=\"detailFormRef\" :model=\"detailForm\" :rules=\"detailFormRules\" label-width=\"140px\" class=\"add-form\">\r\n <el-row :gutter=\"16\">\r\n <el-col :span=\"12\">\r\n <el-form-item label=\"编号\" v-if=\"!isDetailAdd\"><el-input v-model=\"detailForm.bh\" disabled /></el-form-item>\r\n </el-col>\r\n <el-col :span=\"12\">\r\n <el-form-item label=\"库存单编号\" prop=\"jckcdbbh\"><el-input v-model=\"detailForm.jckcdbbh\" placeholder=\"请输入\" /></el-form-item>\r\n </el-col>\r\n </el-row>\r\n <el-row :gutter=\"16\">\r\n <el-col :span=\"12\">\r\n <el-form-item label=\"教材信息编号\" prop=\"jcxxbh\"><el-input v-model=\"detailForm.jcxxbh\" placeholder=\"请输入\" /></el-form-item>\r\n </el-col>\r\n <el-col :span=\"12\">\r\n <el-form-item label=\"数量\" prop=\"sl\"><el-input-number v-model=\"detailForm.sl\" :min=\"0\" :precision=\"0\" style=\"width:100%\" /></el-form-item>\r\n </el-col>\r\n </el-row>\r\n <el-row :gutter=\"16\">\r\n <el-col :span=\"12\">\r\n <el-form-item label=\"前置库存明细项编号\"><el-input v-model=\"detailForm.qzkcmxxbh\" placeholder=\"请输入\" /></el-form-item>\r\n </el-col>\r\n <el-col :span=\"12\">\r\n <el-form-item label=\"还回完毕\">\r\n <el-switch v-model=\"detailForm.hwbw\" active-text=\"是\" inactive-text=\"否\" />\r\n </el-form-item>\r\n </el-col>\r\n </el-row>\r\n <el-row :gutter=\"16\">\r\n <el-col :span=\"12\">\r\n <el-form-item label=\"还回完毕时间\">\r\n <el-date-picker v-model=\"detailForm.hwbwsj\" type=\"datetime\" value-format=\"yyyy-MM-dd HH:mm:ss\" placeholder=\"选择\" style=\"width:100%\" />\r\n </el-form-item>\r\n </el-col>\r\n </el-row>\r\n <el-row :gutter=\"16\">\r\n <el-col :span=\"24\">\r\n <el-form-item label=\"备注\"><el-input v-model=\"detailForm.bz\" type=\"textarea\" :rows=\"2\" placeholder=\"请输入\" /></el-form-item>\r\n </el-col>\r\n </el-row>\r\n <el-row :gutter=\"16\">\r\n <el-col :span=\"24\">\r\n <el-form-item label=\"JSONZD\"><el-input v-model=\"detailForm.jsonzd\" placeholder=\"请输入\" /></el-form-item>\r\n </el-col>\r\n </el-row>\r\n </el-form>\r\n </div>\r\n <div slot=\"footer\">\r\n <el-button @click=\"detailFormDialogVisible = false\">取消</el-button>\r\n <el-button type=\"primary\" :loading=\"detailSaving\" @click=\"handleDetailFormConfirm\">确定</el-button>\r\n </div>\r\n </el-dialog>\r\n\r\n <!-- 库存明细项详情对话框 -->\r\n <el-dialog\r\n :visible=\"detailViewDialogVisible\"\r\n title=\"库存明细项详情\"\r\n width=\"640px\"\r\n :close-on-click-modal=\"false\"\r\n @update:visible=\"val => detailViewDialogVisible = val\"\r\n >\r\n <el-descriptions :column=\"2\" border size=\"medium\">\r\n <el-descriptions-item label=\"编号\">{{ detailViewData.bh || '-' }}</el-descriptions-item>\r\n <el-descriptions-item label=\"库存单编号\">{{ detailViewData.jckcdbbh || '-' }}</el-descriptions-item>\r\n <el-descriptions-item label=\"教材信息编号\">{{ detailViewData.jcxxbh || '-' }}</el-descriptions-item>\r\n <el-descriptions-item label=\"数量\">{{ fmtVal(detailViewData.sl) }}</el-descriptions-item>\r\n <el-descriptions-item label=\"前置库存明细项编号\" :span=\"2\">{{ detailViewData.qzkcmxxbh || '-' }}</el-descriptions-item>\r\n <el-descriptions-item label=\"还回完毕\">\r\n <el-tag :type=\"detailViewData.hwbw ? 'success' : 'info'\" size=\"small\">{{ detailViewData.hwbw ? '是' : '否' }}</el-tag>\r\n </el-descriptions-item>\r\n <el-descriptions-item label=\"还回完毕时间\">{{ fmtDateTime(detailViewData.hwbwsj) || '-' }}</el-descriptions-item>\r\n <el-descriptions-item label=\"备注\">{{ detailViewData.bz || '-' }}</el-descriptions-item>\r\n <el-descriptions-item label=\"JSONZD\">{{ detailViewData.jsonzd || '-' }}</el-descriptions-item>\r\n <el-descriptions-item label=\"快照_事务后库存数量\">{{ fmtVal(detailViewData.kzswHkcsl) }}</el-descriptions-item>\r\n <el-descriptions-item label=\"快照_事务后借出数量\">{{ fmtVal(detailViewData.kzswHjcsl) }}</el-descriptions-item>\r\n <el-descriptions-item label=\"快照_事务前库存数量\">{{ fmtVal(detailViewData.kzswQkcsl) }}</el-descriptions-item>\r\n <el-descriptions-item label=\"快照_事务前借出数量\">{{ fmtVal(detailViewData.kzswQjcsl) }}</el-descriptions-item>\r\n <el-descriptions-item label=\"创建时间\">{{ fmtDateTime(detailViewData.createTime) || '-' }}</el-descriptions-item>\r\n <el-descriptions-item label=\"更新时间\">{{ fmtDateTime(detailViewData.updateTime) || '-' }}</el-descriptions-item>\r\n </el-descriptions>\r\n <div slot=\"footer\">\r\n <el-button @click=\"detailViewDialogVisible = false\">关闭</el-button>\r\n </div>\r\n </el-dialog>\r\n </div>\r\n</template>\r\n\r\n<script>\r\nimport { saveAs } from 'file-saver'\r\nimport {\r\n listTeachingMaterial,\r\n getTeachingMaterialById,\r\n addTeachingMaterial,\r\n updateTeachingMaterial,\r\n deleteTeachingMaterial,\r\n downloadTeachingMaterialTemplate,\r\n importTeachingMaterial\r\n} from '@/api/textbook/teachingMaterial'\r\nimport {\r\n listTeachingStock,\r\n getTeachingStock,\r\n addTeachingStock,\r\n updateTeachingStock,\r\n deleteTeachingStock,\r\n listTeachingStockDetail,\r\n getTeachingStockDetail,\r\n addTeachingStockDetail,\r\n updateTeachingStockDetail,\r\n deleteTeachingStockDetail\r\n} from '@/api/textbook/teachingStock'\r\n\r\nexport default {\r\n name: 'TextbookIndex',\r\n data() {\r\n return {\r\n activeTab: 'info',\r\n\r\n // ==================== 查询表单(仅后端 Mapper 支持的字段) ====================\r\n searchForm: {\r\n bh: '', mc: '', zz: '', cbs: '', isbn: '',\r\n jcfl: '', jclx: '', tyType: ''\r\n },\r\n\r\n // ==================== 下拉选项 ====================\r\n jcflOptions: ['基本教材', '辅助教材', '参考资料'],\r\n jclxOptions: ['国家规划', '军队规划', '院校自编'],\r\n jcbxlxOptions: ['自编', '选用'],\r\n jczdlxOptions: ['一般教材', '重点教材', '规划教材'],\r\n jclyOptions: ['教研保障中心外购', '自购', '上级配发'],\r\n jcccOptions: ['无', '本科', '研究生'],\r\n cbfsOptions: ['公开出版', '内部出版'],\r\n jcmjOptions: ['公开', '内部', '秘密'],\r\n jldwOptions: ['本', '册'],\r\n\r\n // ==================== 表格数据 ====================\r\n loading: false,\r\n tableData: [],\r\n pageNum: 1,\r\n pageSize: 20,\r\n total: 0,\r\n\r\n // ==================== 新建教材 ====================\r\n addDialogVisible: false,\r\n addSaving: false,\r\n addForm: this.createEmptyForm(),\r\n\r\n // ==================== 编辑教材 ====================\r\n editDialogVisible: false,\r\n editLoading: false,\r\n editSaving: false,\r\n editForm: this.createEmptyForm(),\r\n\r\n // ==================== 表单校验 ====================\r\n formRules: {\r\n mc: [{ required: true, message: '请输入教材名称', trigger: 'blur' }],\r\n jcbxlx: [{ required: true, message: '请选择编写类型', trigger: 'change' }]\r\n },\r\n\r\n // ==================== 导入 ====================\r\n selectedFile: null,\r\n\r\n // ==================== 教材库存单(JCKCD ====================\r\n stockSearchForm: { bh: '', mc: '', lb: '', zb: '', zt: '' },\r\n stockLoading: false,\r\n stockTableData: [],\r\n stockPageNum: 1,\r\n stockPageSize: 20,\r\n stockTotal: 0,\r\n stockFormDialogVisible: false,\r\n stockFormLoading: false,\r\n stockSaving: false,\r\n isStockAdd: true,\r\n stockForm: this.createEmptyStockForm(),\r\n stockFormRules: {\r\n mc: [{ required: true, message: '请输入名称', trigger: 'blur' }]\r\n },\r\n stockDetailDialogVisible: false,\r\n stockDetailData: {},\r\n\r\n // ==================== 教材库存明细项(JCKCMXX ====================\r\n detailSearchForm: { bh: '', jckcdbbh: '', jcxxbh: '', hwbwType: '' },\r\n detailLoading: false,\r\n detailTableData: [],\r\n detailPageNum: 1,\r\n detailPageSize: 20,\r\n detailTotal: 0,\r\n detailFormDialogVisible: false,\r\n detailFormLoading: false,\r\n detailSaving: false,\r\n isDetailAdd: true,\r\n detailForm: this.createEmptyDetailForm(),\r\n detailFormRules: {\r\n jckcdbbh: [{ required: true, message: '请输入库存单编号', trigger: 'blur' }],\r\n jcxxbh: [{ required: true, message: '请输入教材信息编号', trigger: 'blur' }],\r\n sl: [{ required: true, message: '请输入数量', trigger: 'change' }]\r\n },\r\n detailViewDialogVisible: false,\r\n detailViewData: {}\r\n }\r\n },\r\n computed: {\r\n fileName() {\r\n return (this.selectedFile && this.selectedFile.name) || '未选择任何文件'\r\n }\r\n },\r\n mounted() {\r\n this.fetchList()\r\n },\r\n methods: {\r\n /** 表格日期格式化 */\r\n formatDate(row, column, cellValue) {\r\n return cellValue ? String(cellValue).slice(0, 10) : ''\r\n },\r\n\r\n /** 统一格式化后端 LocalDateTime(去除 T、截断到秒) */\r\n fmtDateTime(val) {\r\n if (val === null || val === undefined || val === '') return ''\r\n return String(val).replace('T', ' ').slice(0, 19)\r\n },\r\n\r\n /** 空值显示为 '-'Vue 2 模板表达式不支持 ?? 运算符) */\r\n fmtVal(val) {\r\n return (val === null || val === undefined || val === '') ? '-' : val\r\n },\r\n\r\n /** 创建空白教材表单 */\r\n createEmptyForm() {\r\n return {\r\n mc: '', zz: '', cbs: '', isbn: '', cbrq: '', jcfl: '', jclx: '',\r\n jcbxlx: '', jczdlx: '', jcly: '', jccc: '', bc: '', kb: '', dj: null,\r\n jldw: '本', zrjyjlxff: '', jcdm: '', cbfs: '', jcmj: '', bxdw: '',\r\n bz: '', xcy: false, ty: false\r\n }\r\n },\r\n\r\n /** 创建空白库存单表单 */\r\n createEmptyStockForm() {\r\n return {\r\n mc: '', qksm: '', lb: '', zb: '', cbbmbh: '', cbrbh: '',\r\n bgybh: '', sprbh: '', zt: '', bz: '', jsonzd: ''\r\n }\r\n },\r\n\r\n /** 创建空白库存明细项表单 */\r\n createEmptyDetailForm() {\r\n return {\r\n jckcdbbh: '', jcxxbh: '', sl: null, qzkcmxxbh: '',\r\n hwbw: false, hwbwsj: '', bz: '', jsonzd: ''\r\n }\r\n },\r\n\r\n /** 移除空值 */\r\n cleanPayload(obj) {\r\n const payload = {}\r\n Object.keys(obj).forEach(key => {\r\n const value = obj[key]\r\n if (value !== '' && value !== null && value !== undefined) {\r\n payload[key] = value\r\n }\r\n })\r\n return payload\r\n },\r\n\r\n // ==================== 列表加载 ====================\r\n buildQuery() {\r\n const params = {}\r\n ;['bh', 'mc', 'zz', 'cbs', 'isbn', 'jcfl', 'jclx'].forEach(key => {\r\n const value = this.searchForm[key]\r\n if (value !== '' && value !== null && value !== undefined) {\r\n params[key] = String(value).trim()\r\n }\r\n })\r\n if (this.searchForm.tyType === '0') params.ty = false\r\n else if (this.searchForm.tyType === '1') params.ty = true\r\n return params\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 ...this.buildQuery()\r\n }\r\n listTeachingMaterial(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 // ==================== 查询 / 重置 ====================\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 bh: '', mc: '', zz: '', cbs: '', isbn: '',\r\n jcfl: '', jclx: '', tyType: ''\r\n }\r\n this.pageNum = 1\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 handleCurrentChange(page) {\r\n this.pageNum = page\r\n this.fetchList()\r\n },\r\n\r\n // ==================== 无后端接口的操作 ====================\r\n handleDownloadList() {\r\n this.$message.info('后端暂未提供该接口')\r\n },\r\n\r\n handleDownloadZip() {\r\n this.$message.info('后端暂未提供该接口')\r\n },\r\n\r\n // ==================== 新建教材 ====================\r\n handleNew() {\r\n this.addForm = this.createEmptyForm()\r\n this.$nextTick(() => {\r\n this.$refs.addFormRef && this.$refs.addFormRef.clearValidate()\r\n })\r\n this.addDialogVisible = true\r\n },\r\n\r\n handleAddConfirm() {\r\n this.$refs.addFormRef.validate(valid => {\r\n if (!valid) return\r\n this.addSaving = true\r\n addTeachingMaterial(this.buildPayload(this.addForm)).then(() => {\r\n this.$message.success('新增成功')\r\n this.addDialogVisible = false\r\n this.fetchList()\r\n }).catch(() => {\r\n }).finally(() => {\r\n this.addSaving = false\r\n })\r\n })\r\n },\r\n\r\n // ==================== 编辑教材 ====================\r\n handleEdit(row) {\r\n this.editDialogVisible = true\r\n this.editLoading = true\r\n getTeachingMaterialById(row.id).then(response => {\r\n const data = response.data || {}\r\n const form = this.createEmptyForm()\r\n Object.keys(form).forEach(key => {\r\n if (data[key] !== undefined && data[key] !== null) form[key] = data[key]\r\n })\r\n // 日期字段截断适配 date 控件\r\n if (form.cbrq) form.cbrq = String(form.cbrq).slice(0, 10)\r\n form.id = data.id\r\n form.bh = data.bh\r\n this.editForm = form\r\n this.editLoading = false\r\n }).catch(() => {\r\n this.editDialogVisible = false\r\n this.editLoading = false\r\n })\r\n },\r\n\r\n handleEditConfirm() {\r\n this.$refs.editFormRef.validate(valid => {\r\n if (!valid) return\r\n const payload = this.buildPayload(this.editForm)\r\n if (!this.editForm.id) {\r\n this.$message.warning('缺少记录ID,无法保存')\r\n return\r\n }\r\n payload.id = this.editForm.id\r\n payload.bh = this.editForm.bh\r\n this.editSaving = true\r\n updateTeachingMaterial(payload).then(() => {\r\n this.$message.success('保存成功')\r\n this.editDialogVisible = false\r\n this.fetchList()\r\n }).catch(() => {\r\n }).finally(() => {\r\n this.editSaving = false\r\n })\r\n })\r\n },\r\n\r\n /** 组装新增/编辑请求体(JCXX 实体,仅传非空字段) */\r\n buildPayload(form) {\r\n const payload = this.cleanPayload({\r\n mc: form.mc,\r\n zz: form.zz,\r\n cbs: form.cbs,\r\n isbn: form.isbn,\r\n jcfl: form.jcfl,\r\n jclx: form.jclx,\r\n jcbxlx: form.jcbxlx,\r\n jczdlx: form.jczdlx,\r\n jcly: form.jcly,\r\n jccc: form.jccc,\r\n bc: form.bc,\r\n kb: form.kb,\r\n jldw: form.jldw,\r\n zrjyjlxff: form.zrjyjlxff,\r\n jcdm: form.jcdm,\r\n cbfs: form.cbfs,\r\n jcmj: form.jcmj,\r\n bxdw: form.bxdw,\r\n bz: form.bz,\r\n xcy: !!form.xcy,\r\n ty: !!form.ty\r\n })\r\n // 日期字段转 ISO(后端 cbrq 为 LocalDateTime\r\n if (form.cbrq) payload.cbrq = form.cbrq + 'T00:00:00'\r\n // 数值字段\r\n if (form.dj !== '' && form.dj !== null && form.dj !== undefined) {\r\n payload.dj = Number(form.dj)\r\n }\r\n return payload\r\n },\r\n\r\n // ==================== 删除 ====================\r\n handleDelete(row) {\r\n if (!row.id) {\r\n this.$message.warning('当前行缺少ID')\r\n return\r\n }\r\n this.$confirm(`确定要删除教材「${row.mc || row.bh}」吗?`, '系统提示', {\r\n confirmButtonText: '确定',\r\n cancelButtonText: '取消',\r\n type: 'warning'\r\n }).then(() => {\r\n deleteTeachingMaterial(row.id).then(() => {\r\n this.$message.success('删除成功')\r\n this.fetchList()\r\n }).catch(() => {})\r\n }).catch(() => {})\r\n },\r\n\r\n // ==================== 模板下载 / 导入 ====================\r\n handleDownloadTemplate() {\r\n downloadTeachingMaterialTemplate().then(blob => {\r\n saveAs(blob, '教材管理导入模板.xls')\r\n this.$message.success('模板下载成功')\r\n }).catch(() => {})\r\n },\r\n\r\n handleChooseFile() {\r\n this.$refs.fileInput && this.$refs.fileInput.click()\r\n },\r\n\r\n handleFileChange(e) {\r\n const input = e.target\r\n if (input.files && input.files.length > 0) {\r\n this.selectedFile = input.files[0]\r\n }\r\n },\r\n\r\n handleImport() {\r\n if (!this.selectedFile) {\r\n this.$message.warning('请先选择文件')\r\n return\r\n }\r\n importTeachingMaterial(this.selectedFile).then(response => {\r\n const count = (response && response.data) || 0\r\n this.$message.success(`导入成功,共导入 ${count} 条`)\r\n this.selectedFile = null\r\n if (this.$refs.fileInput) this.$refs.fileInput.value = ''\r\n this.fetchList()\r\n }).catch(() => {})\r\n },\r\n\r\n // ==================== 教材库存单 ====================\r\n buildStockQuery() {\r\n const params = {}\r\n ;['bh', 'mc', 'lb', 'zb', 'zt'].forEach(key => {\r\n const value = this.stockSearchForm[key]\r\n if (value !== '' && value !== null && value !== undefined) {\r\n params[key] = String(value).trim()\r\n }\r\n })\r\n return params\r\n },\r\n\r\n fetchStockList() {\r\n this.stockLoading = true\r\n const params = {\r\n pageNum: this.stockPageNum,\r\n pageSize: this.stockPageSize,\r\n ...this.buildStockQuery()\r\n }\r\n listTeachingStock(params).then(response => {\r\n const data = response.data || {}\r\n this.stockTableData = data.records || []\r\n this.stockTotal = data.total || 0\r\n this.stockLoading = false\r\n }).catch(() => {\r\n this.stockTableData = []\r\n this.stockTotal = 0\r\n this.stockLoading = false\r\n })\r\n },\r\n\r\n handleStockSearch() {\r\n this.stockPageNum = 1\r\n this.fetchStockList()\r\n },\r\n\r\n handleStockReset() {\r\n this.stockSearchForm = { bh: '', mc: '', lb: '', zb: '', zt: '' }\r\n this.stockPageNum = 1\r\n this.fetchStockList()\r\n },\r\n\r\n handleStockSizeChange(size) {\r\n this.stockPageSize = size\r\n this.stockPageNum = 1\r\n this.fetchStockList()\r\n },\r\n handleStockCurrentChange(page) {\r\n this.stockPageNum = page\r\n this.fetchStockList()\r\n },\r\n\r\n handleStockNew() {\r\n this.isStockAdd = true\r\n this.stockForm = this.createEmptyStockForm()\r\n this.$nextTick(() => {\r\n this.$refs.stockFormRef && this.$refs.stockFormRef.clearValidate()\r\n })\r\n this.stockFormDialogVisible = true\r\n },\r\n\r\n handleStockEdit(row) {\r\n this.isStockAdd = false\r\n this.stockFormDialogVisible = true\r\n this.stockFormLoading = true\r\n getTeachingStock(row.id).then(response => {\r\n const data = response.data || {}\r\n const form = this.createEmptyStockForm()\r\n Object.keys(form).forEach(key => {\r\n if (data[key] !== undefined && data[key] !== null) form[key] = data[key]\r\n })\r\n form.id = data.id\r\n form.bh = data.bh\r\n this.stockForm = form\r\n this.stockFormLoading = false\r\n }).catch(() => {\r\n this.stockFormDialogVisible = false\r\n this.stockFormLoading = false\r\n })\r\n },\r\n\r\n buildStockPayload() {\r\n const f = this.stockForm\r\n const payload = this.cleanPayload({\r\n mc: f.mc,\r\n qksm: f.qksm,\r\n lb: f.lb,\r\n zb: f.zb,\r\n cbbmbh: f.cbbmbh,\r\n cbrbh: f.cbrbh,\r\n bgybh: f.bgybh,\r\n sprbh: f.sprbh,\r\n zt: f.zt,\r\n bz: f.bz,\r\n jsonzd: f.jsonzd\r\n })\r\n return payload\r\n },\r\n\r\n handleStockFormConfirm() {\r\n this.$refs.stockFormRef.validate(valid => {\r\n if (!valid) return\r\n const payload = this.buildStockPayload()\r\n if (!this.isStockAdd) {\r\n if (!this.stockForm.id) {\r\n this.$message.warning('缺少记录ID,无法保存')\r\n return\r\n }\r\n payload.id = this.stockForm.id\r\n payload.bh = this.stockForm.bh\r\n }\r\n this.stockSaving = true\r\n const request = this.isStockAdd ? addTeachingStock(payload) : updateTeachingStock(payload)\r\n request.then(() => {\r\n this.$message.success(this.isStockAdd ? '新增成功' : '修改成功')\r\n this.stockFormDialogVisible = false\r\n this.fetchStockList()\r\n }).catch(() => {\r\n }).finally(() => {\r\n this.stockSaving = false\r\n })\r\n })\r\n },\r\n\r\n handleStockDetail(row) {\r\n this.stockDetailData = row\r\n this.stockDetailDialogVisible = true\r\n },\r\n\r\n handleStockDelete(row) {\r\n if (!row.id) {\r\n this.$message.warning('当前行缺少ID')\r\n return\r\n }\r\n this.$confirm(`确定要删除库存单「${row.mc || row.bh}」吗?`, '系统提示', {\r\n confirmButtonText: '确定',\r\n cancelButtonText: '取消',\r\n type: 'warning'\r\n }).then(() => {\r\n deleteTeachingStock(row.id).then(() => {\r\n this.$message.success('删除成功')\r\n this.fetchStockList()\r\n }).catch(() => {})\r\n }).catch(() => {})\r\n },\r\n\r\n // ==================== 教材库存明细项 ====================\r\n buildDetailQuery() {\r\n const params = {}\r\n ;['bh', 'jckcdbbh', 'jcxxbh'].forEach(key => {\r\n const value = this.detailSearchForm[key]\r\n if (value !== '' && value !== null && value !== undefined) {\r\n params[key] = String(value).trim()\r\n }\r\n })\r\n if (this.detailSearchForm.hwbwType === '0') params.hwbw = false\r\n else if (this.detailSearchForm.hwbwType === '1') params.hwbw = true\r\n return params\r\n },\r\n\r\n fetchDetailList() {\r\n this.detailLoading = true\r\n const params = {\r\n pageNum: this.detailPageNum,\r\n pageSize: this.detailPageSize,\r\n ...this.buildDetailQuery()\r\n }\r\n listTeachingStockDetail(params).then(response => {\r\n const data = response.data || {}\r\n this.detailTableData = data.records || []\r\n this.detailTotal = data.total || 0\r\n this.detailLoading = false\r\n }).catch(() => {\r\n this.detailTableData = []\r\n this.detailTotal = 0\r\n this.detailLoading = false\r\n })\r\n },\r\n\r\n handleDetailSearch() {\r\n this.detailPageNum = 1\r\n this.fetchDetailList()\r\n },\r\n\r\n handleDetailReset() {\r\n this.detailSearchForm = { bh: '', jckcdbbh: '', jcxxbh: '', hwbwType: '' }\r\n this.detailPageNum = 1\r\n this.fetchDetailList()\r\n },\r\n\r\n handleDetailSizeChange(size) {\r\n this.detailPageSize = size\r\n this.detailPageNum = 1\r\n this.fetchDetailList()\r\n },\r\n handleDetailCurrentChange(page) {\r\n this.detailPageNum = page\r\n this.fetchDetailList()\r\n },\r\n\r\n handleDetailNew() {\r\n this.isDetailAdd = true\r\n this.detailForm = this.createEmptyDetailForm()\r\n this.$nextTick(() => {\r\n this.$refs.detailFormRef && this.$refs.detailFormRef.clearValidate()\r\n })\r\n this.detailFormDialogVisible = true\r\n },\r\n\r\n handleDetailEdit(row) {\r\n this.isDetailAdd = false\r\n this.detailFormDialogVisible = true\r\n this.detailFormLoading = true\r\n getTeachingStockDetail(row.id).then(response => {\r\n const data = response.data || {}\r\n const form = this.createEmptyDetailForm()\r\n Object.keys(form).forEach(key => {\r\n if (data[key] !== undefined && data[key] !== null) form[key] = data[key]\r\n })\r\n if (form.hwbwsj) form.hwbwsj = String(form.hwbwsj).replace('T', ' ').slice(0, 19)\r\n form.id = data.id\r\n form.bh = data.bh\r\n this.detailForm = form\r\n this.detailFormLoading = false\r\n }).catch(() => {\r\n this.detailFormDialogVisible = false\r\n this.detailFormLoading = false\r\n })\r\n },\r\n\r\n buildDetailPayload() {\r\n const f = this.detailForm\r\n const payload = this.cleanPayload({\r\n jckcdbbh: f.jckcdbbh,\r\n jcxxbh: f.jcxxbh,\r\n qzkcmxxbh: f.qzkcmxxbh,\r\n hwbw: !!f.hwbw,\r\n bz: f.bz,\r\n jsonzd: f.jsonzd\r\n })\r\n if (f.sl !== '' && f.sl !== null && f.sl !== undefined) {\r\n payload.sl = Number(f.sl)\r\n }\r\n // 还回完毕时间为 LocalDateTime,转 ISO\r\n if (f.hwbwsj) payload.hwbwsj = f.hwbwsj.replace(' ', 'T')\r\n return payload\r\n },\r\n\r\n handleDetailFormConfirm() {\r\n this.$refs.detailFormRef.validate(valid => {\r\n if (!valid) return\r\n const payload = this.buildDetailPayload()\r\n if (!this.isDetailAdd) {\r\n if (!this.detailForm.id) {\r\n this.$message.warning('缺少记录ID,无法保存')\r\n return\r\n }\r\n payload.id = this.detailForm.id\r\n payload.bh = this.detailForm.bh\r\n }\r\n this.detailSaving = true\r\n const request = this.isDetailAdd ? addTeachingStockDetail(payload) : updateTeachingStockDetail(payload)\r\n request.then(() => {\r\n this.$message.success(this.isDetailAdd ? '新增成功' : '修改成功')\r\n this.detailFormDialogVisible = false\r\n this.fetchDetailList()\r\n }).catch(() => {\r\n }).finally(() => {\r\n this.detailSaving = false\r\n })\r\n })\r\n },\r\n\r\n handleDetailView(row) {\r\n this.detailViewData = row\r\n this.detailViewDialogVisible = true\r\n },\r\n\r\n handleDetailDelete(row) {\r\n if (!row.id) {\r\n this.$message.warning('当前行缺少ID')\r\n return\r\n }\r\n this.$confirm(`确定要删除库存明细项「${row.bh}」吗?`, '系统提示', {\r\n confirmButtonText: '确定',\r\n cancelButtonText: '取消',\r\n type: 'warning'\r\n }).then(() => {\r\n deleteTeachingStockDetail(row.id).then(() => {\r\n this.$message.success('删除成功')\r\n this.fetchDetailList()\r\n }).catch(() => {})\r\n }).catch(() => {})\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.textbook-tabs {\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 .el-form-item {\r\n margin-bottom: 0;\r\n padding: 10px 12px;\r\n }\r\n }\r\n\r\n .search-actions {\r\n display: flex;\r\n justify-content: flex-end;\r\n padding: 12px;\r\n border-top: 1px solid #ebeef5;\r\n }\r\n }\r\n\r\n .list-title {\r\n font-size: 16px;\r\n font-weight: 600;\r\n color: #303133;\r\n margin-bottom: 12px;\r\n }\r\n\r\n .list-toolbar {\r\n display: flex;\r\n align-items: center;\r\n justify-content: space-between;\r\n gap: 12px;\r\n flex-wrap: wrap;\r\n margin-bottom: 16px;\r\n\r\n .left-group,\r\n .right-group {\r\n display: flex;\r\n align-items: center;\r\n gap: 12px;\r\n flex-wrap: wrap;\r\n }\r\n\r\n .file-input {\r\n display: flex;\r\n align-items: center;\r\n gap: 8px;\r\n\r\n .file-name {\r\n font-size: 14px;\r\n color: #606266;\r\n min-width: 120px;\r\n }\r\n }\r\n }\r\n\r\n .table-card {\r\n margin-bottom: 16px;\r\n\r\n ::v-deep(.el-table) {\r\n width: 100%;\r\n }\r\n\r\n .pagination-wrap {\r\n display: flex;\r\n justify-content: flex-end;\r\n margin-top: 16px;\r\n }\r\n }\r\n\r\n .margin-left-10 {\r\n margin-left: 10px;\r\n }\r\n\r\n // 表格操作按钮文字颜色\r\n .danger-text {\r\n color: #f56c6c;\r\n padding: 0;\r\n }\r\n}\r\n</style>\r\n"],"mappings":"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","ignoreList":[]}]}