vue-element-admin/node_modules/.cache/vue-loader/ffcaf8cbb59c469fd52dd4b9dae76aa9.json
2025-08-06 00:44:43 +08:00

1 line
25 KiB
JSON

{"remainingRequest":"/Users/kang/Gitea/vue-element-admin/node_modules/vue-loader/lib/index.js??vue-loader-options!/Users/kang/Gitea/vue-element-admin/src/views/table/complex-table.vue?vue&type=script&lang=js","dependencies":[{"path":"/Users/kang/Gitea/vue-element-admin/src/views/table/complex-table.vue","mtime":1754409279874},{"path":"/Users/kang/Gitea/vue-element-admin/node_modules/cache-loader/dist/cjs.js","mtime":1754409278035},{"path":"/Users/kang/Gitea/vue-element-admin/node_modules/babel-loader/lib/index.js","mtime":1754409277911},{"path":"/Users/kang/Gitea/vue-element-admin/node_modules/cache-loader/dist/cjs.js","mtime":1754409278035},{"path":"/Users/kang/Gitea/vue-element-admin/node_modules/vue-loader/lib/index.js","mtime":1754409279720}],"contextDependencies":[],"result":[{"type":"Buffer","data":"base64:Ly8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KCmltcG9ydCB7IGZldGNoTGlzdCwgZmV0Y2hQdiwgY3JlYXRlQXJ0aWNsZSwgdXBkYXRlQXJ0aWNsZSB9IGZyb20gJ0AvYXBpL2FydGljbGUnCmltcG9ydCB3YXZlcyBmcm9tICdAL2RpcmVjdGl2ZS93YXZlcycgLy8gd2F2ZXMgZGlyZWN0aXZlCmltcG9ydCB7IHBhcnNlVGltZSB9IGZyb20gJ0AvdXRpbHMnCmltcG9ydCBQYWdpbmF0aW9uIGZyb20gJ0AvY29tcG9uZW50cy9QYWdpbmF0aW9uJyAvLyBzZWNvbmRhcnkgcGFja2FnZSBiYXNlZCBvbiBlbC1wYWdpbmF0aW9uCgpjb25zdCBjYWxlbmRhclR5cGVPcHRpb25zID0gWwogIHsga2V5OiAnQ04nLCBkaXNwbGF5X25hbWU6ICdDaGluYScgfSwKICB7IGtleTogJ1VTJywgZGlzcGxheV9uYW1lOiAnVVNBJyB9LAogIHsga2V5OiAnSlAnLCBkaXNwbGF5X25hbWU6ICdKYXBhbicgfSwKICB7IGtleTogJ0VVJywgZGlzcGxheV9uYW1lOiAnRXVyb3pvbmUnIH0KXQoKLy8gYXJyIHRvIG9iaiwgc3VjaCBhcyB7IENOIDogIkNoaW5hIiwgVVMgOiAiVVNBIiB9CmNvbnN0IGNhbGVuZGFyVHlwZUtleVZhbHVlID0gY2FsZW5kYXJUeXBlT3B0aW9ucy5yZWR1Y2UoKGFjYywgY3VyKSA9PiB7CiAgYWNjW2N1ci5rZXldID0gY3VyLmRpc3BsYXlfbmFtZQogIHJldHVybiBhY2MKfSwge30pCgpleHBvcnQgZGVmYXVsdCB7CiAgbmFtZTogJ0NvbXBsZXhUYWJsZScsCiAgY29tcG9uZW50czogeyBQYWdpbmF0aW9uIH0sCiAgZGlyZWN0aXZlczogeyB3YXZlcyB9LAogIGZpbHRlcnM6IHsKICAgIHN0YXR1c0ZpbHRlcihzdGF0dXMpIHsKICAgICAgY29uc3Qgc3RhdHVzTWFwID0gewogICAgICAgIHB1Ymxpc2hlZDogJ3N1Y2Nlc3MnLAogICAgICAgIGRyYWZ0OiAnaW5mbycsCiAgICAgICAgZGVsZXRlZDogJ2RhbmdlcicKICAgICAgfQogICAgICByZXR1cm4gc3RhdHVzTWFwW3N0YXR1c10KICAgIH0sCiAgICB0eXBlRmlsdGVyKHR5cGUpIHsKICAgICAgcmV0dXJuIGNhbGVuZGFyVHlwZUtleVZhbHVlW3R5cGVdCiAgICB9CiAgfSwKICBkYXRhKCkgewogICAgcmV0dXJuIHsKICAgICAgdGFibGVLZXk6IDAsCiAgICAgIGxpc3Q6IG51bGwsCiAgICAgIHRvdGFsOiAwLAogICAgICBsaXN0TG9hZGluZzogdHJ1ZSwKICAgICAgbGlzdFF1ZXJ5OiB7CiAgICAgICAgcGFnZTogMSwKICAgICAgICBsaW1pdDogMjAsCiAgICAgICAgaW1wb3J0YW5jZTogdW5kZWZpbmVkLAogICAgICAgIHRpdGxlOiB1bmRlZmluZWQsCiAgICAgICAgdHlwZTogdW5kZWZpbmVkLAogICAgICAgIHNvcnQ6ICcraWQnCiAgICAgIH0sCiAgICAgIGltcG9ydGFuY2VPcHRpb25zOiBbMSwgMiwgM10sCiAgICAgIGNhbGVuZGFyVHlwZU9wdGlvbnMsCiAgICAgIHNvcnRPcHRpb25zOiBbeyBsYWJlbDogJ0lEIEFzY2VuZGluZycsIGtleTogJytpZCcgfSwgeyBsYWJlbDogJ0lEIERlc2NlbmRpbmcnLCBrZXk6ICctaWQnIH1dLAogICAgICBzdGF0dXNPcHRpb25zOiBbJ3B1Ymxpc2hlZCcsICdkcmFmdCcsICdkZWxldGVkJ10sCiAgICAgIHNob3dSZXZpZXdlcjogZmFsc2UsCiAgICAgIHRlbXA6IHsKICAgICAgICBpZDogdW5kZWZpbmVkLAogICAgICAgIGltcG9ydGFuY2U6IDEsCiAgICAgICAgcmVtYXJrOiAnJywKICAgICAgICB0aW1lc3RhbXA6IG5ldyBEYXRlKCksCiAgICAgICAgdGl0bGU6ICcnLAogICAgICAgIHR5cGU6ICcnLAogICAgICAgIHN0YXR1czogJ3B1Ymxpc2hlZCcKICAgICAgfSwKICAgICAgZGlhbG9nRm9ybVZpc2libGU6IGZhbHNlLAogICAgICBkaWFsb2dTdGF0dXM6ICcnLAogICAgICB0ZXh0TWFwOiB7CiAgICAgICAgdXBkYXRlOiAnRWRpdCcsCiAgICAgICAgY3JlYXRlOiAnQ3JlYXRlJwogICAgICB9LAogICAgICBkaWFsb2dQdlZpc2libGU6IGZhbHNlLAogICAgICBwdkRhdGE6IFtdLAogICAgICBydWxlczogewogICAgICAgIHR5cGU6IFt7IHJlcXVpcmVkOiB0cnVlLCBtZXNzYWdlOiAndHlwZSBpcyByZXF1aXJlZCcsIHRyaWdnZXI6ICdjaGFuZ2UnIH1dLAogICAgICAgIHRpbWVzdGFtcDogW3sgdHlwZTogJ2RhdGUnLCByZXF1aXJlZDogdHJ1ZSwgbWVzc2FnZTogJ3RpbWVzdGFtcCBpcyByZXF1aXJlZCcsIHRyaWdnZXI6ICdjaGFuZ2UnIH1dLAogICAgICAgIHRpdGxlOiBbeyByZXF1aXJlZDogdHJ1ZSwgbWVzc2FnZTogJ3RpdGxlIGlzIHJlcXVpcmVkJywgdHJpZ2dlcjogJ2JsdXInIH1dCiAgICAgIH0sCiAgICAgIGRvd25sb2FkTG9hZGluZzogZmFsc2UKICAgIH0KICB9LAogIGNyZWF0ZWQoKSB7CiAgICB0aGlzLmdldExpc3QoKQogIH0sCiAgbWV0aG9kczogewogICAgZ2V0TGlzdCgpIHsKICAgICAgdGhpcy5saXN0TG9hZGluZyA9IHRydWUKICAgICAgZmV0Y2hMaXN0KHRoaXMubGlzdFF1ZXJ5KS50aGVuKHJlc3BvbnNlID0+IHsKICAgICAgICB0aGlzLmxpc3QgPSByZXNwb25zZS5kYXRhLml0ZW1zCiAgICAgICAgdGhpcy50b3RhbCA9IHJlc3BvbnNlLmRhdGEudG90YWwKCiAgICAgICAgLy8gSnVzdCB0byBzaW11bGF0ZSB0aGUgdGltZSBvZiB0aGUgcmVxdWVzdAogICAgICAgIHNldFRpbWVvdXQoKCkgPT4gewogICAgICAgICAgdGhpcy5saXN0TG9hZGluZyA9IGZhbHNlCiAgICAgICAgfSwgMS41ICogMTAwMCkKICAgICAgfSkKICAgIH0sCiAgICBoYW5kbGVGaWx0ZXIoKSB7CiAgICAgIHRoaXMubGlzdFF1ZXJ5LnBhZ2UgPSAxCiAgICAgIHRoaXMuZ2V0TGlzdCgpCiAgICB9LAogICAgaGFuZGxlTW9kaWZ5U3RhdHVzKHJvdywgc3RhdHVzKSB7CiAgICAgIHRoaXMuJG1lc3NhZ2UoewogICAgICAgIG1lc3NhZ2U6ICfmk43kvZzmiJDlip8nLAogICAgICAgIHR5cGU6ICdzdWNjZXNzJwogICAgICB9KQogICAgICByb3cuc3RhdHVzID0gc3RhdHVzCiAgICB9LAogICAgc29ydENoYW5nZShkYXRhKSB7CiAgICAgIGNvbnN0IHsgcHJvcCwgb3JkZXIgfSA9IGRhdGEKICAgICAgaWYgKHByb3AgPT09ICdpZCcpIHsKICAgICAgICB0aGlzLnNvcnRCeUlEKG9yZGVyKQogICAgICB9CiAgICB9LAogICAgc29ydEJ5SUQob3JkZXIpIHsKICAgICAgaWYgKG9yZGVyID09PSAnYXNjZW5kaW5nJykgewogICAgICAgIHRoaXMubGlzdFF1ZXJ5LnNvcnQgPSAnK2lkJwogICAgICB9IGVsc2UgewogICAgICAgIHRoaXMubGlzdFF1ZXJ5LnNvcnQgPSAnLWlkJwogICAgICB9CiAgICAgIHRoaXMuaGFuZGxlRmlsdGVyKCkKICAgIH0sCiAgICByZXNldFRlbXAoKSB7CiAgICAgIHRoaXMudGVtcCA9IHsKICAgICAgICBpZDogdW5kZWZpbmVkLAogICAgICAgIGltcG9ydGFuY2U6IDEsCiAgICAgICAgcmVtYXJrOiAnJywKICAgICAgICB0aW1lc3RhbXA6IG5ldyBEYXRlKCksCiAgICAgICAgdGl0bGU6ICcnLAogICAgICAgIHN0YXR1czogJ3B1Ymxpc2hlZCcsCiAgICAgICAgdHlwZTogJycKICAgICAgfQogICAgfSwKICAgIGhhbmRsZUNyZWF0ZSgpIHsKICAgICAgdGhpcy5yZXNldFRlbXAoKQogICAgICB0aGlzLmRpYWxvZ1N0YXR1cyA9ICdjcmVhdGUnCiAgICAgIHRoaXMuZGlhbG9nRm9ybVZpc2libGUgPSB0cnVlCiAgICAgIHRoaXMuJG5leHRUaWNrKCgpID0+IHsKICAgICAgICB0aGlzLiRyZWZzWydkYXRhRm9ybSddLmNsZWFyVmFsaWRhdGUoKQogICAgICB9KQogICAgfSwKICAgIGNyZWF0ZURhdGEoKSB7CiAgICAgIHRoaXMuJHJlZnNbJ2RhdGFGb3JtJ10udmFsaWRhdGUoKHZhbGlkKSA9PiB7CiAgICAgICAgaWYgKHZhbGlkKSB7CiAgICAgICAgICB0aGlzLnRlbXAuaWQgPSBwYXJzZUludChNYXRoLnJhbmRvbSgpICogMTAwKSArIDEwMjQgLy8gbW9jayBhIGlkCiAgICAgICAgICB0aGlzLnRlbXAuYXV0aG9yID0gJ3Z1ZS1lbGVtZW50LWFkbWluJwogICAgICAgICAgY3JlYXRlQXJ0aWNsZSh0aGlzLnRlbXApLnRoZW4oKCkgPT4gewogICAgICAgICAgICB0aGlzLmxpc3QudW5zaGlmdCh0aGlzLnRlbXApCiAgICAgICAgICAgIHRoaXMuZGlhbG9nRm9ybVZpc2libGUgPSBmYWxzZQogICAgICAgICAgICB0aGlzLiRub3RpZnkoewogICAgICAgICAgICAgIHRpdGxlOiAn5oiQ5YqfJywKICAgICAgICAgICAgICBtZXNzYWdlOiAn5Yib5bu65oiQ5YqfJywKICAgICAgICAgICAgICB0eXBlOiAnc3VjY2VzcycsCiAgICAgICAgICAgICAgZHVyYXRpb246IDIwMDAKICAgICAgICAgICAgfSkKICAgICAgICAgIH0pCiAgICAgICAgfQogICAgICB9KQogICAgfSwKICAgIGhhbmRsZVVwZGF0ZShyb3cpIHsKICAgICAgdGhpcy50ZW1wID0gT2JqZWN0LmFzc2lnbih7fSwgcm93KSAvLyBjb3B5IG9iagogICAgICB0aGlzLnRlbXAudGltZXN0YW1wID0gbmV3IERhdGUodGhpcy50ZW1wLnRpbWVzdGFtcCkKICAgICAgdGhpcy5kaWFsb2dTdGF0dXMgPSAndXBkYXRlJwogICAgICB0aGlzLmRpYWxvZ0Zvcm1WaXNpYmxlID0gdHJ1ZQogICAgICB0aGlzLiRuZXh0VGljaygoKSA9PiB7CiAgICAgICAgdGhpcy4kcmVmc1snZGF0YUZvcm0nXS5jbGVhclZhbGlkYXRlKCkKICAgICAgfSkKICAgIH0sCiAgICB1cGRhdGVEYXRhKCkgewogICAgICB0aGlzLiRyZWZzWydkYXRhRm9ybSddLnZhbGlkYXRlKCh2YWxpZCkgPT4gewogICAgICAgIGlmICh2YWxpZCkgewogICAgICAgICAgY29uc3QgdGVtcERhdGEgPSBPYmplY3QuYXNzaWduKHt9LCB0aGlzLnRlbXApCiAgICAgICAgICB0ZW1wRGF0YS50aW1lc3RhbXAgPSArbmV3IERhdGUodGVtcERhdGEudGltZXN0YW1wKSAvLyBjaGFuZ2UgVGh1IE5vdiAzMCAyMDE3IDE2OjQxOjA1IEdNVCswODAwIChDU1QpIHRvIDE1MTIwMzEzMTE0NjQKICAgICAgICAgIHVwZGF0ZUFydGljbGUodGVtcERhdGEpLnRoZW4oKCkgPT4gewogICAgICAgICAgICBjb25zdCBpbmRleCA9IHRoaXMubGlzdC5maW5kSW5kZXgodiA9PiB2LmlkID09PSB0aGlzLnRlbXAuaWQpCiAgICAgICAgICAgIHRoaXMubGlzdC5zcGxpY2UoaW5kZXgsIDEsIHRoaXMudGVtcCkKICAgICAgICAgICAgdGhpcy5kaWFsb2dGb3JtVmlzaWJsZSA9IGZhbHNlCiAgICAgICAgICAgIHRoaXMuJG5vdGlmeSh7CiAgICAgICAgICAgICAgdGl0bGU6ICfmiJDlip8nLAogICAgICAgICAgICAgIG1lc3NhZ2U6ICfmm7TmlrDmiJDlip8nLAogICAgICAgICAgICAgIHR5cGU6ICdzdWNjZXNzJywKICAgICAgICAgICAgICBkdXJhdGlvbjogMjAwMAogICAgICAgICAgICB9KQogICAgICAgICAgfSkKICAgICAgICB9CiAgICAgIH0pCiAgICB9LAogICAgaGFuZGxlRGVsZXRlKHJvdywgaW5kZXgpIHsKICAgICAgdGhpcy4kbm90aWZ5KHsKICAgICAgICB0aXRsZTogJ+aIkOWKnycsCiAgICAgICAgbWVzc2FnZTogJ+WIoOmZpOaIkOWKnycsCiAgICAgICAgdHlwZTogJ3N1Y2Nlc3MnLAogICAgICAgIGR1cmF0aW9uOiAyMDAwCiAgICAgIH0pCiAgICAgIHRoaXMubGlzdC5zcGxpY2UoaW5kZXgsIDEpCiAgICB9LAogICAgaGFuZGxlRmV0Y2hQdihwdikgewogICAgICBmZXRjaFB2KHB2KS50aGVuKHJlc3BvbnNlID0+IHsKICAgICAgICB0aGlzLnB2RGF0YSA9IHJlc3BvbnNlLmRhdGEucHZEYXRhCiAgICAgICAgdGhpcy5kaWFsb2dQdlZpc2libGUgPSB0cnVlCiAgICAgIH0pCiAgICB9LAogICAgaGFuZGxlRG93bmxvYWQoKSB7CiAgICAgIHRoaXMuZG93bmxvYWRMb2FkaW5nID0gdHJ1ZQogICAgICBpbXBvcnQoJ0AvdmVuZG9yL0V4cG9ydDJFeGNlbCcpLnRoZW4oZXhjZWwgPT4gewogICAgICAgIGNvbnN0IHRIZWFkZXIgPSBbJ3RpbWVzdGFtcCcsICd0aXRsZScsICd0eXBlJywgJ2ltcG9ydGFuY2UnLCAnc3RhdHVzJ10KICAgICAgICBjb25zdCBmaWx0ZXJWYWwgPSBbJ3RpbWVzdGFtcCcsICd0aXRsZScsICd0eXBlJywgJ2ltcG9ydGFuY2UnLCAnc3RhdHVzJ10KICAgICAgICBjb25zdCBkYXRhID0gdGhpcy5mb3JtYXRKc29uKGZpbHRlclZhbCkKICAgICAgICBleGNlbC5leHBvcnRfanNvbl90b19leGNlbCh7CiAgICAgICAgICBoZWFkZXI6IHRIZWFkZXIsCiAgICAgICAgICBkYXRhLAogICAgICAgICAgZmlsZW5hbWU6ICd0YWJsZS1saXN0JwogICAgICAgIH0pCiAgICAgICAgdGhpcy5kb3dubG9hZExvYWRpbmcgPSBmYWxzZQogICAgICB9KQogICAgfSwKICAgIGZvcm1hdEpzb24oZmlsdGVyVmFsKSB7CiAgICAgIHJldHVybiB0aGlzLmxpc3QubWFwKHYgPT4gZmlsdGVyVmFsLm1hcChqID0+IHsKICAgICAgICBpZiAoaiA9PT0gJ3RpbWVzdGFtcCcpIHsKICAgICAgICAgIHJldHVybiBwYXJzZVRpbWUodltqXSkKICAgICAgICB9IGVsc2UgewogICAgICAgICAgcmV0dXJuIHZbal0KICAgICAgICB9CiAgICAgIH0pKQogICAgfSwKICAgIGdldFNvcnRDbGFzczogZnVuY3Rpb24oa2V5KSB7CiAgICAgIGNvbnN0IHNvcnQgPSB0aGlzLmxpc3RRdWVyeS5zb3J0CiAgICAgIHJldHVybiBzb3J0ID09PSBgKyR7a2V5fWAgPyAnYXNjZW5kaW5nJyA6ICdkZXNjZW5kaW5nJwogICAgfQogIH0KfQo="},{"version":3,"sources":["complex-table.vue"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAqJA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA","file":"complex-table.vue","sourceRoot":"src/views/table","sourcesContent":["<template>\n <div class=\"app-container\">\n <div class=\"filter-container\">\n <el-input v-model=\"listQuery.title\" :placeholder=\"$t('table.title')\" style=\"width: 200px;\" class=\"filter-item\" @keyup.enter.native=\"handleFilter\" />\n <el-select v-model=\"listQuery.importance\" :placeholder=\"$t('table.importance')\" clearable style=\"width: 90px\" class=\"filter-item\">\n <el-option v-for=\"item in importanceOptions\" :key=\"item\" :label=\"item\" :value=\"item\" />\n </el-select>\n <el-select v-model=\"listQuery.type\" :placeholder=\"$t('table.type')\" clearable class=\"filter-item\" style=\"width: 130px\">\n <el-option v-for=\"item in calendarTypeOptions\" :key=\"item.key\" :label=\"item.display_name+'('+item.key+')'\" :value=\"item.key\" />\n </el-select>\n <el-select v-model=\"listQuery.sort\" style=\"width: 140px\" class=\"filter-item\" @change=\"handleFilter\">\n <el-option v-for=\"item in sortOptions\" :key=\"item.key\" :label=\"item.label\" :value=\"item.key\" />\n </el-select>\n <el-button v-waves class=\"filter-item\" type=\"primary\" icon=\"el-icon-search\" @click=\"handleFilter\">\n {{ $t('table.search') }}\n </el-button>\n <el-button class=\"filter-item\" style=\"margin-left: 10px;\" type=\"primary\" icon=\"el-icon-edit\" @click=\"handleCreate\">\n {{ $t('table.add') }}\n </el-button>\n <el-button v-waves :loading=\"downloadLoading\" class=\"filter-item\" type=\"primary\" icon=\"el-icon-download\" @click=\"handleDownload\">\n {{ $t('table.export') }}\n </el-button>\n <el-checkbox v-model=\"showReviewer\" class=\"filter-item\" style=\"margin-left:15px;\" @change=\"tableKey=tableKey+1\">\n {{ $t('table.reviewer') }}\n </el-checkbox>\n </div>\n\n <el-table\n :key=\"tableKey\"\n v-loading=\"listLoading\"\n :data=\"list\"\n border\n fit\n highlight-current-row\n style=\"width: 100%;\"\n @sort-change=\"sortChange\"\n >\n <el-table-column :label=\"$t('table.id')\" prop=\"id\" sortable=\"custom\" align=\"center\" width=\"80\" :class-name=\"getSortClass('id')\">\n <template slot-scope=\"{row}\">\n <span>{{ row.id }}</span>\n </template>\n </el-table-column>\n <el-table-column :label=\"$t('table.date')\" width=\"150px\" align=\"center\">\n <template slot-scope=\"{row}\">\n <span>{{ row.timestamp | parseTime('{y}-{m}-{d} {h}:{i}') }}</span>\n </template>\n </el-table-column>\n <el-table-column :label=\"$t('table.title')\" min-width=\"150px\">\n <template slot-scope=\"{row}\">\n <span class=\"link-type\" @click=\"handleUpdate(row)\">{{ row.title }}</span>\n <el-tag>{{ row.type | typeFilter }}</el-tag>\n </template>\n </el-table-column>\n <el-table-column :label=\"$t('table.author')\" width=\"110px\" align=\"center\">\n <template slot-scope=\"{row}\">\n <span>{{ row.author }}</span>\n </template>\n </el-table-column>\n <el-table-column v-if=\"showReviewer\" :label=\"$t('table.reviewer')\" width=\"110px\" align=\"center\">\n <template slot-scope=\"{row}\">\n <span style=\"color:red;\">{{ row.reviewer }}</span>\n </template>\n </el-table-column>\n <el-table-column :label=\"$t('table.importance')\" width=\"80px\">\n <template slot-scope=\"{row}\">\n <svg-icon v-for=\"n in +row.importance\" :key=\"n\" icon-class=\"star\" class=\"meta-item__icon\" />\n </template>\n </el-table-column>\n <el-table-column :label=\"$t('table.readings')\" align=\"center\" width=\"95\">\n <template slot-scope=\"{row}\">\n <span v-if=\"row.pageviews\" class=\"link-type\" @click=\"handleFetchPv(row.pageviews)\">{{ row.pageviews }}</span>\n <span v-else>0</span>\n </template>\n </el-table-column>\n <el-table-column :label=\"$t('table.status')\" class-name=\"status-col\" width=\"100\">\n <template slot-scope=\"{row}\">\n <el-tag :type=\"row.status | statusFilter\">\n {{ row.status }}\n </el-tag>\n </template>\n </el-table-column>\n <el-table-column :label=\"$t('table.actions')\" align=\"center\" width=\"230\" class-name=\"small-padding fixed-width\">\n <template slot-scope=\"{row,$index}\">\n <el-button type=\"primary\" size=\"mini\" @click=\"handleUpdate(row)\">\n {{ $t('table.edit') }}\n </el-button>\n <el-button v-if=\"row.status!='published'\" size=\"mini\" type=\"success\" @click=\"handleModifyStatus(row,'published')\">\n {{ $t('table.publish') }}\n </el-button>\n <el-button v-if=\"row.status!='draft'\" size=\"mini\" @click=\"handleModifyStatus(row,'draft')\">\n {{ $t('table.draft') }}\n </el-button>\n <el-button v-if=\"row.status!='deleted'\" size=\"mini\" type=\"danger\" @click=\"handleDelete(row,$index)\">\n {{ $t('table.delete') }}\n </el-button>\n </template>\n </el-table-column>\n </el-table>\n\n <pagination v-show=\"total>0\" :total=\"total\" :page.sync=\"listQuery.page\" :limit.sync=\"listQuery.limit\" @pagination=\"getList\" />\n\n <el-dialog :title=\"textMap[dialogStatus]\" :visible.sync=\"dialogFormVisible\">\n <el-form ref=\"dataForm\" :rules=\"rules\" :model=\"temp\" label-position=\"left\" label-width=\"70px\" style=\"width: 400px; margin-left:50px;\">\n <el-form-item :label=\"$t('table.type')\" prop=\"type\">\n <el-select v-model=\"temp.type\" class=\"filter-item\" placeholder=\"Please select\">\n <el-option v-for=\"item in calendarTypeOptions\" :key=\"item.key\" :label=\"item.display_name\" :value=\"item.key\" />\n </el-select>\n </el-form-item>\n <el-form-item :label=\"$t('table.date')\" prop=\"timestamp\">\n <el-date-picker v-model=\"temp.timestamp\" type=\"datetime\" placeholder=\"Please pick a date\" />\n </el-form-item>\n <el-form-item :label=\"$t('table.title')\" prop=\"title\">\n <el-input v-model=\"temp.title\" />\n </el-form-item>\n <el-form-item :label=\"$t('table.status')\">\n <el-select v-model=\"temp.status\" class=\"filter-item\" placeholder=\"Please select\">\n <el-option v-for=\"item in statusOptions\" :key=\"item\" :label=\"item\" :value=\"item\" />\n </el-select>\n </el-form-item>\n <el-form-item :label=\"$t('table.importance')\">\n <el-rate v-model=\"temp.importance\" :colors=\"['#99A9BF', '#F7BA2A', '#FF9900']\" :max=\"3\" style=\"margin-top:8px;\" />\n </el-form-item>\n <el-form-item :label=\"$t('table.remark')\">\n <el-input v-model=\"temp.remark\" :autosize=\"{ minRows: 2, maxRows: 4}\" type=\"textarea\" placeholder=\"Please input\" />\n </el-form-item>\n </el-form>\n <div slot=\"footer\" class=\"dialog-footer\">\n <el-button @click=\"dialogFormVisible = false\">\n {{ $t('table.cancel') }}\n </el-button>\n <el-button type=\"primary\" @click=\"dialogStatus==='create'?createData():updateData()\">\n {{ $t('table.confirm') }}\n </el-button>\n </div>\n </el-dialog>\n\n <el-dialog :visible.sync=\"dialogPvVisible\" title=\"Reading statistics\">\n <el-table :data=\"pvData\" border fit highlight-current-row style=\"width: 100%\">\n <el-table-column prop=\"key\" label=\"Channel\" />\n <el-table-column prop=\"pv\" label=\"Pv\" />\n </el-table>\n <span slot=\"footer\" class=\"dialog-footer\">\n <el-button type=\"primary\" @click=\"dialogPvVisible = false\">{{ $t('table.confirm') }}</el-button>\n </span>\n </el-dialog>\n </div>\n</template>\n\n<script>\nimport { fetchList, fetchPv, createArticle, updateArticle } from '@/api/article'\nimport waves from '@/directive/waves' // waves directive\nimport { parseTime } from '@/utils'\nimport Pagination from '@/components/Pagination' // secondary package based on el-pagination\n\nconst calendarTypeOptions = [\n { key: 'CN', display_name: 'China' },\n { key: 'US', display_name: 'USA' },\n { key: 'JP', display_name: 'Japan' },\n { key: 'EU', display_name: 'Eurozone' }\n]\n\n// arr to obj, such as { CN : \"China\", US : \"USA\" }\nconst calendarTypeKeyValue = calendarTypeOptions.reduce((acc, cur) => {\n acc[cur.key] = cur.display_name\n return acc\n}, {})\n\nexport default {\n name: 'ComplexTable',\n components: { Pagination },\n directives: { waves },\n filters: {\n statusFilter(status) {\n const statusMap = {\n published: 'success',\n draft: 'info',\n deleted: 'danger'\n }\n return statusMap[status]\n },\n typeFilter(type) {\n return calendarTypeKeyValue[type]\n }\n },\n data() {\n return {\n tableKey: 0,\n list: null,\n total: 0,\n listLoading: true,\n listQuery: {\n page: 1,\n limit: 20,\n importance: undefined,\n title: undefined,\n type: undefined,\n sort: '+id'\n },\n importanceOptions: [1, 2, 3],\n calendarTypeOptions,\n sortOptions: [{ label: 'ID Ascending', key: '+id' }, { label: 'ID Descending', key: '-id' }],\n statusOptions: ['published', 'draft', 'deleted'],\n showReviewer: false,\n temp: {\n id: undefined,\n importance: 1,\n remark: '',\n timestamp: new Date(),\n title: '',\n type: '',\n status: 'published'\n },\n dialogFormVisible: false,\n dialogStatus: '',\n textMap: {\n update: 'Edit',\n create: 'Create'\n },\n dialogPvVisible: false,\n pvData: [],\n rules: {\n type: [{ required: true, message: 'type is required', trigger: 'change' }],\n timestamp: [{ type: 'date', required: true, message: 'timestamp is required', trigger: 'change' }],\n title: [{ required: true, message: 'title is required', trigger: 'blur' }]\n },\n downloadLoading: false\n }\n },\n created() {\n this.getList()\n },\n methods: {\n getList() {\n this.listLoading = true\n fetchList(this.listQuery).then(response => {\n this.list = response.data.items\n this.total = response.data.total\n\n // Just to simulate the time of the request\n setTimeout(() => {\n this.listLoading = false\n }, 1.5 * 1000)\n })\n },\n handleFilter() {\n this.listQuery.page = 1\n this.getList()\n },\n handleModifyStatus(row, status) {\n this.$message({\n message: '操作成功',\n type: 'success'\n })\n row.status = status\n },\n sortChange(data) {\n const { prop, order } = data\n if (prop === 'id') {\n this.sortByID(order)\n }\n },\n sortByID(order) {\n if (order === 'ascending') {\n this.listQuery.sort = '+id'\n } else {\n this.listQuery.sort = '-id'\n }\n this.handleFilter()\n },\n resetTemp() {\n this.temp = {\n id: undefined,\n importance: 1,\n remark: '',\n timestamp: new Date(),\n title: '',\n status: 'published',\n type: ''\n }\n },\n handleCreate() {\n this.resetTemp()\n this.dialogStatus = 'create'\n this.dialogFormVisible = true\n this.$nextTick(() => {\n this.$refs['dataForm'].clearValidate()\n })\n },\n createData() {\n this.$refs['dataForm'].validate((valid) => {\n if (valid) {\n this.temp.id = parseInt(Math.random() * 100) + 1024 // mock a id\n this.temp.author = 'vue-element-admin'\n createArticle(this.temp).then(() => {\n this.list.unshift(this.temp)\n this.dialogFormVisible = false\n this.$notify({\n title: '成功',\n message: '创建成功',\n type: 'success',\n duration: 2000\n })\n })\n }\n })\n },\n handleUpdate(row) {\n this.temp = Object.assign({}, row) // copy obj\n this.temp.timestamp = new Date(this.temp.timestamp)\n this.dialogStatus = 'update'\n this.dialogFormVisible = true\n this.$nextTick(() => {\n this.$refs['dataForm'].clearValidate()\n })\n },\n updateData() {\n this.$refs['dataForm'].validate((valid) => {\n if (valid) {\n const tempData = Object.assign({}, this.temp)\n tempData.timestamp = +new Date(tempData.timestamp) // change Thu Nov 30 2017 16:41:05 GMT+0800 (CST) to 1512031311464\n updateArticle(tempData).then(() => {\n const index = this.list.findIndex(v => v.id === this.temp.id)\n this.list.splice(index, 1, this.temp)\n this.dialogFormVisible = false\n this.$notify({\n title: '成功',\n message: '更新成功',\n type: 'success',\n duration: 2000\n })\n })\n }\n })\n },\n handleDelete(row, index) {\n this.$notify({\n title: '成功',\n message: '删除成功',\n type: 'success',\n duration: 2000\n })\n this.list.splice(index, 1)\n },\n handleFetchPv(pv) {\n fetchPv(pv).then(response => {\n this.pvData = response.data.pvData\n this.dialogPvVisible = true\n })\n },\n handleDownload() {\n this.downloadLoading = true\n import('@/vendor/Export2Excel').then(excel => {\n const tHeader = ['timestamp', 'title', 'type', 'importance', 'status']\n const filterVal = ['timestamp', 'title', 'type', 'importance', 'status']\n const data = this.formatJson(filterVal)\n excel.export_json_to_excel({\n header: tHeader,\n data,\n filename: 'table-list'\n })\n this.downloadLoading = false\n })\n },\n formatJson(filterVal) {\n return this.list.map(v => filterVal.map(j => {\n if (j === 'timestamp') {\n return parseTime(v[j])\n } else {\n return v[j]\n }\n }))\n },\n getSortClass: function(key) {\n const sort = this.listQuery.sort\n return sort === `+${key}` ? 'ascending' : 'descending'\n }\n }\n}\n</script>\n"]}]}