{"remainingRequest":"D:\\源码\\vue-element-admin-master\\node_modules\\vue-loader\\lib\\index.js??vue-loader-options!D:\\源码\\vue-element-admin-master\\src\\views\\table\\complex-table.vue?vue&type=script&lang=js&","dependencies":[{"path":"D:\\源码\\vue-element-admin-master\\src\\views\\table\\complex-table.vue","mtime":1649647926000},{"path":"D:\\源码\\vue-element-admin-master\\node_modules\\cache-loader\\dist\\cjs.js","mtime":499162500000},{"path":"D:\\源码\\vue-element-admin-master\\node_modules\\babel-loader\\lib\\index.js","mtime":315532800000},{"path":"D:\\源码\\vue-element-admin-master\\node_modules\\cache-loader\\dist\\cjs.js","mtime":499162500000},{"path":"D:\\源码\\vue-element-admin-master\\node_modules\\vue-loader\\lib\\index.js","mtime":499162500000}],"contextDependencies":[],"result":[{"type":"Buffer","data":"base64:Ly8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KCmltcG9ydCB7IGZldGNoTGlzdCwgZmV0Y2hQdiwgY3JlYXRlQXJ0aWNsZSwgdXBkYXRlQXJ0aWNsZSB9IGZyb20gJ0AvYXBpL2FydGljbGUnCmltcG9ydCB3YXZlcyBmcm9tICdAL2RpcmVjdGl2ZS93YXZlcycgLy8gd2F2ZXMgZGlyZWN0aXZlCmltcG9ydCB7IHBhcnNlVGltZSB9IGZyb20gJ0AvdXRpbHMnCmltcG9ydCBQYWdpbmF0aW9uIGZyb20gJ0AvY29tcG9uZW50cy9QYWdpbmF0aW9uJyAvLyBzZWNvbmRhcnkgcGFja2FnZSBiYXNlZCBvbiBlbC1wYWdpbmF0aW9uCgpjb25zdCBjYWxlbmRhclR5cGVPcHRpb25zID0gWwogIHsga2V5OiAnQ04nLCBkaXNwbGF5X25hbWU6ICdDaGluYScgfSwKICB7IGtleTogJ1VTJywgZGlzcGxheV9uYW1lOiAnVVNBJyB9LAogIHsga2V5OiAnSlAnLCBkaXNwbGF5X25hbWU6ICdKYXBhbicgfSwKICB7IGtleTogJ0VVJywgZGlzcGxheV9uYW1lOiAnRXVyb3pvbmUnIH0KXQoKLy8gYXJyIHRvIG9iaiwgc3VjaCBhcyB7IENOIDogIkNoaW5hIiwgVVMgOiAiVVNBIiB9CmNvbnN0IGNhbGVuZGFyVHlwZUtleVZhbHVlID0gY2FsZW5kYXJUeXBlT3B0aW9ucy5yZWR1Y2UoKGFjYywgY3VyKSA9PiB7CiAgYWNjW2N1ci5rZXldID0gY3VyLmRpc3BsYXlfbmFtZQogIHJldHVybiBhY2MKfSwge30pCgpleHBvcnQgZGVmYXVsdCB7CiAgbmFtZTogJ0NvbXBsZXhUYWJsZScsCiAgY29tcG9uZW50czogeyBQYWdpbmF0aW9uIH0sCiAgZGlyZWN0aXZlczogeyB3YXZlcyB9LAogIGZpbHRlcnM6IHsKICAgIHN0YXR1c0ZpbHRlcihzdGF0dXMpIHsKICAgICAgY29uc3Qgc3RhdHVzTWFwID0gewogICAgICAgIHB1Ymxpc2hlZDogJ3N1Y2Nlc3MnLAogICAgICAgIGRyYWZ0OiAnaW5mbycsCiAgICAgICAgZGVsZXRlZDogJ2RhbmdlcicKICAgICAgfQogICAgICByZXR1cm4gc3RhdHVzTWFwW3N0YXR1c10KICAgIH0sCiAgICB0eXBlRmlsdGVyKHR5cGUpIHsKICAgICAgcmV0dXJuIGNhbGVuZGFyVHlwZUtleVZhbHVlW3R5cGVdCiAgICB9CiAgfSwKICBkYXRhKCkgewogICAgcmV0dXJuIHsKICAgICAgdGFibGVLZXk6IDAsCiAgICAgIGxpc3Q6IG51bGwsCiAgICAgIHRvdGFsOiAwLAogICAgICBsaXN0TG9hZGluZzogdHJ1ZSwKICAgICAgbGlzdFF1ZXJ5OiB7CiAgICAgICAgcGFnZTogMSwKICAgICAgICBsaW1pdDogMjAsCiAgICAgICAgaW1wb3J0YW5jZTogdW5kZWZpbmVkLAogICAgICAgIHRpdGxlOiB1bmRlZmluZWQsCiAgICAgICAgdHlwZTogdW5kZWZpbmVkLAogICAgICAgIHNvcnQ6ICcraWQnCiAgICAgIH0sCiAgICAgIGltcG9ydGFuY2VPcHRpb25zOiBbMSwgMiwgM10sCiAgICAgIGNhbGVuZGFyVHlwZU9wdGlvbnMsCiAgICAgIHNvcnRPcHRpb25zOiBbeyBsYWJlbDogJ0lEIEFzY2VuZGluZycsIGtleTogJytpZCcgfSwgeyBsYWJlbDogJ0lEIERlc2NlbmRpbmcnLCBrZXk6ICctaWQnIH1dLAogICAgICBzdGF0dXNPcHRpb25zOiBbJ3B1Ymxpc2hlZCcsICdkcmFmdCcsICdkZWxldGVkJ10sCiAgICAgIHNob3dSZXZpZXdlcjogZmFsc2UsCiAgICAgIHRlbXA6IHsKICAgICAgICBpZDogdW5kZWZpbmVkLAogICAgICAgIGltcG9ydGFuY2U6IDEsCiAgICAgICAgcmVtYXJrOiAnJywKICAgICAgICB0aW1lc3RhbXA6IG5ldyBEYXRlKCksCiAgICAgICAgdGl0bGU6ICcnLAogICAgICAgIHR5cGU6ICcnLAogICAgICAgIHN0YXR1czogJ3B1Ymxpc2hlZCcKICAgICAgfSwKICAgICAgZGlhbG9nRm9ybVZpc2libGU6IGZhbHNlLAogICAgICBkaWFsb2dTdGF0dXM6ICcnLAogICAgICB0ZXh0TWFwOiB7CiAgICAgICAgdXBkYXRlOiAnRWRpdCcsCiAgICAgICAgY3JlYXRlOiAnQ3JlYXRlJwogICAgICB9LAogICAgICBkaWFsb2dQdlZpc2libGU6IGZhbHNlLAogICAgICBwdkRhdGE6IFtdLAogICAgICBydWxlczogewogICAgICAgIHR5cGU6IFt7IHJlcXVpcmVkOiB0cnVlLCBtZXNzYWdlOiAndHlwZSBpcyByZXF1aXJlZCcsIHRyaWdnZXI6ICdjaGFuZ2UnIH1dLAogICAgICAgIHRpbWVzdGFtcDogW3sgdHlwZTogJ2RhdGUnLCByZXF1aXJlZDogdHJ1ZSwgbWVzc2FnZTogJ3RpbWVzdGFtcCBpcyByZXF1aXJlZCcsIHRyaWdnZXI6ICdjaGFuZ2UnIH1dLAogICAgICAgIHRpdGxlOiBbeyByZXF1aXJlZDogdHJ1ZSwgbWVzc2FnZTogJ3RpdGxlIGlzIHJlcXVpcmVkJywgdHJpZ2dlcjogJ2JsdXInIH1dCiAgICAgIH0sCiAgICAgIGRvd25sb2FkTG9hZGluZzogZmFsc2UKICAgIH0KICB9LAogIGNyZWF0ZWQoKSB7CiAgICB0aGlzLmdldExpc3QoKQogIH0sCiAgbWV0aG9kczogewogICAgZ2V0TGlzdCgpIHsKICAgICAgdGhpcy5saXN0TG9hZGluZyA9IHRydWUKICAgICAgZmV0Y2hMaXN0KHRoaXMubGlzdFF1ZXJ5KS50aGVuKHJlc3BvbnNlID0+IHsKICAgICAgICB0aGlzLmxpc3QgPSByZXNwb25zZS5kYXRhLml0ZW1zCiAgICAgICAgdGhpcy50b3RhbCA9IHJlc3BvbnNlLmRhdGEudG90YWwKCiAgICAgICAgLy8gSnVzdCB0byBzaW11bGF0ZSB0aGUgdGltZSBvZiB0aGUgcmVxdWVzdAogICAgICAgIHNldFRpbWVvdXQoKCkgPT4gewogICAgICAgICAgdGhpcy5saXN0TG9hZGluZyA9IGZhbHNlCiAgICAgICAgfSwgMS41ICogMTAwMCkKICAgICAgfSkKICAgIH0sCiAgICBoYW5kbGVGaWx0ZXIoKSB7CiAgICAgIHRoaXMubGlzdFF1ZXJ5LnBhZ2UgPSAxCiAgICAgIHRoaXMuZ2V0TGlzdCgpCiAgICB9LAogICAgaGFuZGxlTW9kaWZ5U3RhdHVzKHJvdywgc3RhdHVzKSB7CiAgICAgIHRoaXMuJG1lc3NhZ2UoewogICAgICAgIG1lc3NhZ2U6ICfmk43kvZxTdWNjZXNzJywKICAgICAgICB0eXBlOiAnc3VjY2VzcycKICAgICAgfSkKICAgICAgcm93LnN0YXR1cyA9IHN0YXR1cwogICAgfSwKICAgIHNvcnRDaGFuZ2UoZGF0YSkgewogICAgICBjb25zdCB7IHByb3AsIG9yZGVyIH0gPSBkYXRhCiAgICAgIGlmIChwcm9wID09PSAnaWQnKSB7CiAgICAgICAgdGhpcy5zb3J0QnlJRChvcmRlcikKICAgICAgfQogICAgfSwKICAgIHNvcnRCeUlEKG9yZGVyKSB7CiAgICAgIGlmIChvcmRlciA9PT0gJ2FzY2VuZGluZycpIHsKICAgICAgICB0aGlzLmxpc3RRdWVyeS5zb3J0ID0gJytpZCcKICAgICAgfSBlbHNlIHsKICAgICAgICB0aGlzLmxpc3RRdWVyeS5zb3J0ID0gJy1pZCcKICAgICAgfQogICAgICB0aGlzLmhhbmRsZUZpbHRlcigpCiAgICB9LAogICAgcmVzZXRUZW1wKCkgewogICAgICB0aGlzLnRlbXAgPSB7CiAgICAgICAgaWQ6IHVuZGVmaW5lZCwKICAgICAgICBpbXBvcnRhbmNlOiAxLAogICAgICAgIHJlbWFyazogJycsCiAgICAgICAgdGltZXN0YW1wOiBuZXcgRGF0ZSgpLAogICAgICAgIHRpdGxlOiAnJywKICAgICAgICBzdGF0dXM6ICdwdWJsaXNoZWQnLAogICAgICAgIHR5cGU6ICcnCiAgICAgIH0KICAgIH0sCiAgICBoYW5kbGVDcmVhdGUoKSB7CiAgICAgIHRoaXMucmVzZXRUZW1wKCkKICAgICAgdGhpcy5kaWFsb2dTdGF0dXMgPSAnY3JlYXRlJwogICAgICB0aGlzLmRpYWxvZ0Zvcm1WaXNpYmxlID0gdHJ1ZQogICAgICB0aGlzLiRuZXh0VGljaygoKSA9PiB7CiAgICAgICAgdGhpcy4kcmVmc1snZGF0YUZvcm0nXS5jbGVhclZhbGlkYXRlKCkKICAgICAgfSkKICAgIH0sCiAgICBjcmVhdGVEYXRhKCkgewogICAgICB0aGlzLiRyZWZzWydkYXRhRm9ybSddLnZhbGlkYXRlKCh2YWxpZCkgPT4gewogICAgICAgIGlmICh2YWxpZCkgewogICAgICAgICAgdGhpcy50ZW1wLmlkID0gcGFyc2VJbnQoTWF0aC5yYW5kb20oKSAqIDEwMCkgKyAxMDI0IC8vIG1vY2sgYSBpZAogICAgICAgICAgdGhpcy50ZW1wLmF1dGhvciA9ICd2dWUtZWxlbWVudC1hZG1pbicKICAgICAgICAgIGNyZWF0ZUFydGljbGUodGhpcy50ZW1wKS50aGVuKCgpID0+IHsKICAgICAgICAgICAgdGhpcy5saXN0LnVuc2hpZnQodGhpcy50ZW1wKQogICAgICAgICAgICB0aGlzLmRpYWxvZ0Zvcm1WaXNpYmxlID0gZmFsc2UKICAgICAgICAgICAgdGhpcy4kbm90aWZ5KHsKICAgICAgICAgICAgICB0aXRsZTogJ1N1Y2Nlc3MnLAogICAgICAgICAgICAgIG1lc3NhZ2U6ICdDcmVhdGVkIFN1Y2Nlc3NmdWxseScsCiAgICAgICAgICAgICAgdHlwZTogJ3N1Y2Nlc3MnLAogICAgICAgICAgICAgIGR1cmF0aW9uOiAyMDAwCiAgICAgICAgICAgIH0pCiAgICAgICAgICB9KQogICAgICAgIH0KICAgICAgfSkKICAgIH0sCiAgICBoYW5kbGVVcGRhdGUocm93KSB7CiAgICAgIHRoaXMudGVtcCA9IE9iamVjdC5hc3NpZ24oe30sIHJvdykgLy8gY29weSBvYmoKICAgICAgdGhpcy50ZW1wLnRpbWVzdGFtcCA9IG5ldyBEYXRlKHRoaXMudGVtcC50aW1lc3RhbXApCiAgICAgIHRoaXMuZGlhbG9nU3RhdHVzID0gJ3VwZGF0ZScKICAgICAgdGhpcy5kaWFsb2dGb3JtVmlzaWJsZSA9IHRydWUKICAgICAgdGhpcy4kbmV4dFRpY2soKCkgPT4gewogICAgICAgIHRoaXMuJHJlZnNbJ2RhdGFGb3JtJ10uY2xlYXJWYWxpZGF0ZSgpCiAgICAgIH0pCiAgICB9LAogICAgdXBkYXRlRGF0YSgpIHsKICAgICAgdGhpcy4kcmVmc1snZGF0YUZvcm0nXS52YWxpZGF0ZSgodmFsaWQpID0+IHsKICAgICAgICBpZiAodmFsaWQpIHsKICAgICAgICAgIGNvbnN0IHRlbXBEYXRhID0gT2JqZWN0LmFzc2lnbih7fSwgdGhpcy50ZW1wKQogICAgICAgICAgdGVtcERhdGEudGltZXN0YW1wID0gK25ldyBEYXRlKHRlbXBEYXRhLnRpbWVzdGFtcCkgLy8gY2hhbmdlIFRodSBOb3YgMzAgMjAxNyAxNjo0MTowNSBHTVQrMDgwMCAoQ1NUKSB0byAxNTEyMDMxMzExNDY0CiAgICAgICAgICB1cGRhdGVBcnRpY2xlKHRlbXBEYXRhKS50aGVuKCgpID0+IHsKICAgICAgICAgICAgY29uc3QgaW5kZXggPSB0aGlzLmxpc3QuZmluZEluZGV4KHYgPT4gdi5pZCA9PT0gdGhpcy50ZW1wLmlkKQogICAgICAgICAgICB0aGlzLmxpc3Quc3BsaWNlKGluZGV4LCAxLCB0aGlzLnRlbXApCiAgICAgICAgICAgIHRoaXMuZGlhbG9nRm9ybVZpc2libGUgPSBmYWxzZQogICAgICAgICAgICB0aGlzLiRub3RpZnkoewogICAgICAgICAgICAgIHRpdGxlOiAnU3VjY2VzcycsCiAgICAgICAgICAgICAgbWVzc2FnZTogJ1VwZGF0ZSBTdWNjZXNzZnVsbHknLAogICAgICAgICAgICAgIHR5cGU6ICdzdWNjZXNzJywKICAgICAgICAgICAgICBkdXJhdGlvbjogMjAwMAogICAgICAgICAgICB9KQogICAgICAgICAgfSkKICAgICAgICB9CiAgICAgIH0pCiAgICB9LAogICAgaGFuZGxlRGVsZXRlKHJvdywgaW5kZXgpIHsKICAgICAgdGhpcy4kbm90aWZ5KHsKICAgICAgICB0aXRsZTogJ1N1Y2Nlc3MnLAogICAgICAgIG1lc3NhZ2U6ICdEZWxldGUgU3VjY2Vzc2Z1bGx5JywKICAgICAgICB0eXBlOiAnc3VjY2VzcycsCiAgICAgICAgZHVyYXRpb246IDIwMDAKICAgICAgfSkKICAgICAgdGhpcy5saXN0LnNwbGljZShpbmRleCwgMSkKICAgIH0sCiAgICBoYW5kbGVGZXRjaFB2KHB2KSB7CiAgICAgIGZldGNoUHYocHYpLnRoZW4ocmVzcG9uc2UgPT4gewogICAgICAgIHRoaXMucHZEYXRhID0gcmVzcG9uc2UuZGF0YS5wdkRhdGEKICAgICAgICB0aGlzLmRpYWxvZ1B2VmlzaWJsZSA9IHRydWUKICAgICAgfSkKICAgIH0sCiAgICBoYW5kbGVEb3dubG9hZCgpIHsKICAgICAgdGhpcy5kb3dubG9hZExvYWRpbmcgPSB0cnVlCiAgICAgIGltcG9ydCgnQC92ZW5kb3IvRXhwb3J0MkV4Y2VsJykudGhlbihleGNlbCA9PiB7CiAgICAgICAgY29uc3QgdEhlYWRlciA9IFsndGltZXN0YW1wJywgJ3RpdGxlJywgJ3R5cGUnLCAnaW1wb3J0YW5jZScsICdzdGF0dXMnXQogICAgICAgIGNvbnN0IGZpbHRlclZhbCA9IFsndGltZXN0YW1wJywgJ3RpdGxlJywgJ3R5cGUnLCAnaW1wb3J0YW5jZScsICdzdGF0dXMnXQogICAgICAgIGNvbnN0IGRhdGEgPSB0aGlzLmZvcm1hdEpzb24oZmlsdGVyVmFsKQogICAgICAgIGV4Y2VsLmV4cG9ydF9qc29uX3RvX2V4Y2VsKHsKICAgICAgICAgIGhlYWRlcjogdEhlYWRlciwKICAgICAgICAgIGRhdGEsCiAgICAgICAgICBmaWxlbmFtZTogJ3RhYmxlLWxpc3QnCiAgICAgICAgfSkKICAgICAgICB0aGlzLmRvd25sb2FkTG9hZGluZyA9IGZhbHNlCiAgICAgIH0pCiAgICB9LAogICAgZm9ybWF0SnNvbihmaWx0ZXJWYWwpIHsKICAgICAgcmV0dXJuIHRoaXMubGlzdC5tYXAodiA9PiBmaWx0ZXJWYWwubWFwKGogPT4gewogICAgICAgIGlmIChqID09PSAndGltZXN0YW1wJykgewogICAgICAgICAgcmV0dXJuIHBhcnNlVGltZSh2W2pdKQogICAgICAgIH0gZWxzZSB7CiAgICAgICAgICByZXR1cm4gdltqXQogICAgICAgIH0KICAgICAgfSkpCiAgICB9LAogICAgZ2V0U29ydENsYXNzOiBmdW5jdGlvbihrZXkpIHsKICAgICAgY29uc3Qgc29ydCA9IHRoaXMubGlzdFF1ZXJ5LnNvcnQKICAgICAgcmV0dXJuIHNvcnQgPT09IGArJHtrZXl9YCA/ICdhc2NlbmRpbmcnIDogJ2Rlc2NlbmRpbmcnCiAgICB9CiAgfQp9Cg=="},{"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=\"Title\" style=\"width: 200px;\" class=\"filter-item\" @keyup.enter.native=\"handleFilter\" />\n <el-select v-model=\"listQuery.importance\" placeholder=\"Imp\" 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=\"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 Search\n </el-button>\n <el-button class=\"filter-item\" style=\"margin-left: 10px;\" type=\"primary\" icon=\"el-icon-edit\" @click=\"handleCreate\">\n Add\n </el-button>\n <el-button v-waves :loading=\"downloadLoading\" class=\"filter-item\" type=\"primary\" icon=\"el-icon-download\" @click=\"handleDownload\">\n Export\n </el-button>\n <el-checkbox v-model=\"showReviewer\" class=\"filter-item\" style=\"margin-left:15px;\" @change=\"tableKey=tableKey+1\">\n 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=\"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=\"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=\"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=\"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=\"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=\"Imp\" 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=\"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=\"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=\"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 Edit\n </el-button>\n <el-button v-if=\"row.status!='published'\" size=\"mini\" type=\"success\" @click=\"handleModifyStatus(row,'published')\">\n Publish\n </el-button>\n <el-button v-if=\"row.status!='draft'\" size=\"mini\" @click=\"handleModifyStatus(row,'draft')\">\n Draft\n </el-button>\n <el-button v-if=\"row.status!='deleted'\" size=\"mini\" type=\"danger\" @click=\"handleDelete(row,$index)\">\n 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=\"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=\"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=\"Title\" prop=\"title\">\n <el-input v-model=\"temp.title\" />\n </el-form-item>\n <el-form-item label=\"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=\"Imp\">\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=\"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 Cancel\n </el-button>\n <el-button type=\"primary\" @click=\"dialogStatus==='create'?createData():updateData()\">\n 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\">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: '操作Success',\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: 'Success',\n message: 'Created Successfully',\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: 'Success',\n message: 'Update Successfully',\n type: 'success',\n duration: 2000\n })\n })\n }\n })\n },\n handleDelete(row, index) {\n this.$notify({\n title: 'Success',\n message: 'Delete Successfully',\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"]}]}
|