{"remainingRequest":"D:\\源码\\vue-element-admin-master\\node_modules\\babel-loader\\lib\\index.js!D:\\源码\\vue-element-admin-master\\node_modules\\cache-loader\\dist\\cjs.js??ref--0-0!D:\\源码\\vue-element-admin-master\\node_modules\\vue-loader\\lib\\index.js??vue-loader-options!D:\\源码\\vue-element-admin-master\\src\\layout\\components\\TagsView\\index.vue?vue&type=script&lang=js&","dependencies":[{"path":"D:\\源码\\vue-element-admin-master\\src\\layout\\components\\TagsView\\index.vue","mtime":1649647926000},{"path":"D:\\源码\\vue-element-admin-master\\babel.config.js","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:aW1wb3J0IF9jcmVhdGVGb3JPZkl0ZXJhdG9ySGVscGVyIGZyb20gIkQ6L1x1NkU5MFx1NzgwMS92dWUtZWxlbWVudC1hZG1pbi1tYXN0ZXIvbm9kZV9tb2R1bGVzL0BiYWJlbC9ydW50aW1lL2hlbHBlcnMvZXNtL2NyZWF0ZUZvck9mSXRlcmF0b3JIZWxwZXIuanMiOwppbXBvcnQgX3RvQ29uc3VtYWJsZUFycmF5IGZyb20gIkQ6L1x1NkU5MFx1NzgwMS92dWUtZWxlbWVudC1hZG1pbi1tYXN0ZXIvbm9kZV9tb2R1bGVzL0BiYWJlbC9ydW50aW1lL2hlbHBlcnMvZXNtL3RvQ29uc3VtYWJsZUFycmF5LmpzIjsKaW1wb3J0IF9vYmplY3RTcHJlYWQgZnJvbSAiRDovXHU2RTkwXHU3ODAxL3Z1ZS1lbGVtZW50LWFkbWluLW1hc3Rlci9ub2RlX21vZHVsZXMvQGJhYmVsL3J1bnRpbWUvaGVscGVycy9lc20vb2JqZWN0U3ByZWFkMi5qcyI7CmltcG9ydCAiY29yZS1qcy9tb2R1bGVzL2VzLm9iamVjdC50by1zdHJpbmcuanMiOwppbXBvcnQgImNvcmUtanMvbW9kdWxlcy93ZWIuZG9tLWNvbGxlY3Rpb25zLmZvci1lYWNoLmpzIjsKaW1wb3J0ICJjb3JlLWpzL21vZHVsZXMvZXMuZnVuY3Rpb24ubmFtZS5qcyI7CmltcG9ydCAiY29yZS1qcy9tb2R1bGVzL2VzLmFycmF5LmNvbmNhdC5qcyI7CmltcG9ydCAiY29yZS1qcy9tb2R1bGVzL2VzLnJlZ2V4cC5leGVjLmpzIjsKaW1wb3J0ICJjb3JlLWpzL21vZHVsZXMvZXMuc3RyaW5nLnJlcGxhY2UuanMiOwppbXBvcnQgImNvcmUtanMvbW9kdWxlcy9lcy5hcnJheS5zbGljZS5qcyI7Ci8vCi8vCi8vCi8vCi8vCi8vCi8vCi8vCi8vCi8vCi8vCi8vCi8vCi8vCi8vCi8vCi8vCi8vCi8vCi8vCi8vCi8vCi8vCi8vCi8vCi8vCi8vCmltcG9ydCBTY3JvbGxQYW5lIGZyb20gJy4vU2Nyb2xsUGFuZSc7CmltcG9ydCBwYXRoIGZyb20gJ3BhdGgnOwpleHBvcnQgZGVmYXVsdCB7CiAgY29tcG9uZW50czogewogICAgU2Nyb2xsUGFuZTogU2Nyb2xsUGFuZQogIH0sCiAgZGF0YTogZnVuY3Rpb24gZGF0YSgpIHsKICAgIHJldHVybiB7CiAgICAgIHZpc2libGU6IGZhbHNlLAogICAgICB0b3A6IDAsCiAgICAgIGxlZnQ6IDAsCiAgICAgIHNlbGVjdGVkVGFnOiB7fSwKICAgICAgYWZmaXhUYWdzOiBbXQogICAgfTsKICB9LAogIGNvbXB1dGVkOiB7CiAgICB2aXNpdGVkVmlld3M6IGZ1bmN0aW9uIHZpc2l0ZWRWaWV3cygpIHsKICAgICAgcmV0dXJuIHRoaXMuJHN0b3JlLnN0YXRlLnRhZ3NWaWV3LnZpc2l0ZWRWaWV3czsKICAgIH0sCiAgICByb3V0ZXM6IGZ1bmN0aW9uIHJvdXRlcygpIHsKICAgICAgcmV0dXJuIHRoaXMuJHN0b3JlLnN0YXRlLnBlcm1pc3Npb24ucm91dGVzOwogICAgfQogIH0sCiAgd2F0Y2g6IHsKICAgICRyb3V0ZTogZnVuY3Rpb24gJHJvdXRlKCkgewogICAgICB0aGlzLmFkZFRhZ3MoKTsKICAgICAgdGhpcy5tb3ZlVG9DdXJyZW50VGFnKCk7CiAgICB9LAogICAgdmlzaWJsZTogZnVuY3Rpb24gdmlzaWJsZSh2YWx1ZSkgewogICAgICBpZiAodmFsdWUpIHsKICAgICAgICBkb2N1bWVudC5ib2R5LmFkZEV2ZW50TGlzdGVuZXIoJ2NsaWNrJywgdGhpcy5jbG9zZU1lbnUpOwogICAgICB9IGVsc2UgewogICAgICAgIGRvY3VtZW50LmJvZHkucmVtb3ZlRXZlbnRMaXN0ZW5lcignY2xpY2snLCB0aGlzLmNsb3NlTWVudSk7CiAgICAgIH0KICAgIH0KICB9LAogIG1vdW50ZWQ6IGZ1bmN0aW9uIG1vdW50ZWQoKSB7CiAgICB0aGlzLmluaXRUYWdzKCk7CiAgICB0aGlzLmFkZFRhZ3MoKTsKICB9LAogIG1ldGhvZHM6IHsKICAgIGlzQWN0aXZlOiBmdW5jdGlvbiBpc0FjdGl2ZShyb3V0ZSkgewogICAgICByZXR1cm4gcm91dGUucGF0aCA9PT0gdGhpcy4kcm91dGUucGF0aDsKICAgIH0sCiAgICBpc0FmZml4OiBmdW5jdGlvbiBpc0FmZml4KHRhZykgewogICAgICByZXR1cm4gdGFnLm1ldGEgJiYgdGFnLm1ldGEuYWZmaXg7CiAgICB9LAogICAgZmlsdGVyQWZmaXhUYWdzOiBmdW5jdGlvbiBmaWx0ZXJBZmZpeFRhZ3Mocm91dGVzKSB7CiAgICAgIHZhciBfdGhpcyA9IHRoaXM7CgogICAgICB2YXIgYmFzZVBhdGggPSBhcmd1bWVudHMubGVuZ3RoID4gMSAmJiBhcmd1bWVudHNbMV0gIT09IHVuZGVmaW5lZCA/IGFyZ3VtZW50c1sxXSA6ICcvJzsKICAgICAgdmFyIHRhZ3MgPSBbXTsKICAgICAgcm91dGVzLmZvckVhY2goZnVuY3Rpb24gKHJvdXRlKSB7CiAgICAgICAgaWYgKHJvdXRlLm1ldGEgJiYgcm91dGUubWV0YS5hZmZpeCkgewogICAgICAgICAgdmFyIHRhZ1BhdGggPSBwYXRoLnJlc29sdmUoYmFzZVBhdGgsIHJvdXRlLnBhdGgpOwogICAgICAgICAgdGFncy5wdXNoKHsKICAgICAgICAgICAgZnVsbFBhdGg6IHRhZ1BhdGgsCiAgICAgICAgICAgIHBhdGg6IHRhZ1BhdGgsCiAgICAgICAgICAgIG5hbWU6IHJvdXRlLm5hbWUsCiAgICAgICAgICAgIG1ldGE6IF9vYmplY3RTcHJlYWQoe30sIHJvdXRlLm1ldGEpCiAgICAgICAgICB9KTsKICAgICAgICB9CgogICAgICAgIGlmIChyb3V0ZS5jaGlsZHJlbikgewogICAgICAgICAgdmFyIHRlbXBUYWdzID0gX3RoaXMuZmlsdGVyQWZmaXhUYWdzKHJvdXRlLmNoaWxkcmVuLCByb3V0ZS5wYXRoKTsKCiAgICAgICAgICBpZiAodGVtcFRhZ3MubGVuZ3RoID49IDEpIHsKICAgICAgICAgICAgdGFncyA9IFtdLmNvbmNhdChfdG9Db25zdW1hYmxlQXJyYXkodGFncyksIF90b0NvbnN1bWFibGVBcnJheSh0ZW1wVGFncykpOwogICAgICAgICAgfQogICAgICAgIH0KICAgICAgfSk7CiAgICAgIHJldHVybiB0YWdzOwogICAgfSwKICAgIGluaXRUYWdzOiBmdW5jdGlvbiBpbml0VGFncygpIHsKICAgICAgdmFyIGFmZml4VGFncyA9IHRoaXMuYWZmaXhUYWdzID0gdGhpcy5maWx0ZXJBZmZpeFRhZ3ModGhpcy5yb3V0ZXMpOwoKICAgICAgdmFyIF9pdGVyYXRvciA9IF9jcmVhdGVGb3JPZkl0ZXJhdG9ySGVscGVyKGFmZml4VGFncyksCiAgICAgICAgICBfc3RlcDsKCiAgICAgIHRyeSB7CiAgICAgICAgZm9yIChfaXRlcmF0b3IucygpOyAhKF9zdGVwID0gX2l0ZXJhdG9yLm4oKSkuZG9uZTspIHsKICAgICAgICAgIHZhciB0YWcgPSBfc3RlcC52YWx1ZTsKCiAgICAgICAgICAvLyBNdXN0IGhhdmUgdGFnIG5hbWUKICAgICAgICAgIGlmICh0YWcubmFtZSkgewogICAgICAgICAgICB0aGlzLiRzdG9yZS5kaXNwYXRjaCgndGFnc1ZpZXcvYWRkVmlzaXRlZFZpZXcnLCB0YWcpOwogICAgICAgICAgfQogICAgICAgIH0KICAgICAgfSBjYXRjaCAoZXJyKSB7CiAgICAgICAgX2l0ZXJhdG9yLmUoZXJyKTsKICAgICAgfSBmaW5hbGx5IHsKICAgICAgICBfaXRlcmF0b3IuZigpOwogICAgICB9CiAgICB9LAogICAgYWRkVGFnczogZnVuY3Rpb24gYWRkVGFncygpIHsKICAgICAgdmFyIG5hbWUgPSB0aGlzLiRyb3V0ZS5uYW1lOwoKICAgICAgaWYgKG5hbWUpIHsKICAgICAgICB0aGlzLiRzdG9yZS5kaXNwYXRjaCgndGFnc1ZpZXcvYWRkVmlldycsIHRoaXMuJHJvdXRlKTsKICAgICAgfQoKICAgICAgcmV0dXJuIGZhbHNlOwogICAgfSwKICAgIG1vdmVUb0N1cnJlbnRUYWc6IGZ1bmN0aW9uIG1vdmVUb0N1cnJlbnRUYWcoKSB7CiAgICAgIHZhciBfdGhpczIgPSB0aGlzOwoKICAgICAgdmFyIHRhZ3MgPSB0aGlzLiRyZWZzLnRhZzsKICAgICAgdGhpcy4kbmV4dFRpY2soZnVuY3Rpb24gKCkgewogICAgICAgIHZhciBfaXRlcmF0b3IyID0gX2NyZWF0ZUZvck9mSXRlcmF0b3JIZWxwZXIodGFncyksCiAgICAgICAgICAgIF9zdGVwMjsKCiAgICAgICAgdHJ5IHsKICAgICAgICAgIGZvciAoX2l0ZXJhdG9yMi5zKCk7ICEoX3N0ZXAyID0gX2l0ZXJhdG9yMi5uKCkpLmRvbmU7KSB7CiAgICAgICAgICAgIHZhciB0YWcgPSBfc3RlcDIudmFsdWU7CgogICAgICAgICAgICBpZiAodGFnLnRvLnBhdGggPT09IF90aGlzMi4kcm91dGUucGF0aCkgewogICAgICAgICAgICAgIF90aGlzMi4kcmVmcy5zY3JvbGxQYW5lLm1vdmVUb1RhcmdldCh0YWcpOyAvLyB3aGVuIHF1ZXJ5IGlzIGRpZmZlcmVudCB0aGVuIHVwZGF0ZQoKCiAgICAgICAgICAgICAgaWYgKHRhZy50by5mdWxsUGF0aCAhPT0gX3RoaXMyLiRyb3V0ZS5mdWxsUGF0aCkgewogICAgICAgICAgICAgICAgX3RoaXMyLiRzdG9yZS5kaXNwYXRjaCgndGFnc1ZpZXcvdXBkYXRlVmlzaXRlZFZpZXcnLCBfdGhpczIuJHJvdXRlKTsKICAgICAgICAgICAgICB9CgogICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICB9CiAgICAgICAgICB9CiAgICAgICAgfSBjYXRjaCAoZXJyKSB7CiAgICAgICAgICBfaXRlcmF0b3IyLmUoZXJyKTsKICAgICAgICB9IGZpbmFsbHkgewogICAgICAgICAgX2l0ZXJhdG9yMi5mKCk7CiAgICAgICAgfQogICAgICB9KTsKICAgIH0sCiAgICByZWZyZXNoU2VsZWN0ZWRUYWc6IGZ1bmN0aW9uIHJlZnJlc2hTZWxlY3RlZFRhZyh2aWV3KSB7CiAgICAgIHZhciBfdGhpczMgPSB0aGlzOwoKICAgICAgdGhpcy4kc3RvcmUuZGlzcGF0Y2goJ3RhZ3NWaWV3L2RlbENhY2hlZFZpZXcnLCB2aWV3KS50aGVuKGZ1bmN0aW9uICgpIHsKICAgICAgICB2YXIgZnVsbFBhdGggPSB2aWV3LmZ1bGxQYXRoOwoKICAgICAgICBfdGhpczMuJG5leHRUaWNrKGZ1bmN0aW9uICgpIHsKICAgICAgICAgIF90aGlzMy4kcm91dGVyLnJlcGxhY2UoewogICAgICAgICAgICBwYXRoOiAnL3JlZGlyZWN0JyArIGZ1bGxQYXRoCiAgICAgICAgICB9KTsKICAgICAgICB9KTsKICAgICAgfSk7CiAgICB9LAogICAgY2xvc2VTZWxlY3RlZFRhZzogZnVuY3Rpb24gY2xvc2VTZWxlY3RlZFRhZyh2aWV3KSB7CiAgICAgIHZhciBfdGhpczQgPSB0aGlzOwoKICAgICAgdGhpcy4kc3RvcmUuZGlzcGF0Y2goJ3RhZ3NWaWV3L2RlbFZpZXcnLCB2aWV3KS50aGVuKGZ1bmN0aW9uIChfcmVmKSB7CiAgICAgICAgdmFyIHZpc2l0ZWRWaWV3cyA9IF9yZWYudmlzaXRlZFZpZXdzOwoKICAgICAgICBpZiAoX3RoaXM0LmlzQWN0aXZlKHZpZXcpKSB7CiAgICAgICAgICBfdGhpczQudG9MYXN0Vmlldyh2aXNpdGVkVmlld3MsIHZpZXcpOwogICAgICAgIH0KICAgICAgfSk7CiAgICB9LAogICAgY2xvc2VPdGhlcnNUYWdzOiBmdW5jdGlvbiBjbG9zZU90aGVyc1RhZ3MoKSB7CiAgICAgIHZhciBfdGhpczUgPSB0aGlzOwoKICAgICAgdGhpcy4kcm91dGVyLnB1c2godGhpcy5zZWxlY3RlZFRhZyk7CiAgICAgIHRoaXMuJHN0b3JlLmRpc3BhdGNoKCd0YWdzVmlldy9kZWxPdGhlcnNWaWV3cycsIHRoaXMuc2VsZWN0ZWRUYWcpLnRoZW4oZnVuY3Rpb24gKCkgewogICAgICAgIF90aGlzNS5tb3ZlVG9DdXJyZW50VGFnKCk7CiAgICAgIH0pOwogICAgfSwKICAgIGNsb3NlQWxsVGFnczogZnVuY3Rpb24gY2xvc2VBbGxUYWdzKHZpZXcpIHsKICAgICAgdmFyIF90aGlzNiA9IHRoaXM7CgogICAgICB0aGlzLiRzdG9yZS5kaXNwYXRjaCgndGFnc1ZpZXcvZGVsQWxsVmlld3MnKS50aGVuKGZ1bmN0aW9uIChfcmVmMikgewogICAgICAgIHZhciB2aXNpdGVkVmlld3MgPSBfcmVmMi52aXNpdGVkVmlld3M7CgogICAgICAgIGlmIChfdGhpczYuYWZmaXhUYWdzLnNvbWUoZnVuY3Rpb24gKHRhZykgewogICAgICAgICAgcmV0dXJuIHRhZy5wYXRoID09PSB2aWV3LnBhdGg7CiAgICAgICAgfSkpIHsKICAgICAgICAgIHJldHVybjsKICAgICAgICB9CgogICAgICAgIF90aGlzNi50b0xhc3RWaWV3KHZpc2l0ZWRWaWV3cywgdmlldyk7CiAgICAgIH0pOwogICAgfSwKICAgIHRvTGFzdFZpZXc6IGZ1bmN0aW9uIHRvTGFzdFZpZXcodmlzaXRlZFZpZXdzLCB2aWV3KSB7CiAgICAgIHZhciBsYXRlc3RWaWV3ID0gdmlzaXRlZFZpZXdzLnNsaWNlKC0xKVswXTsKCiAgICAgIGlmIChsYXRlc3RWaWV3KSB7CiAgICAgICAgdGhpcy4kcm91dGVyLnB1c2gobGF0ZXN0Vmlldy5mdWxsUGF0aCk7CiAgICAgIH0gZWxzZSB7CiAgICAgICAgLy8gbm93IHRoZSBkZWZhdWx0IGlzIHRvIHJlZGlyZWN0IHRvIHRoZSBob21lIHBhZ2UgaWYgdGhlcmUgaXMgbm8gdGFncy12aWV3LAogICAgICAgIC8vIHlvdSBjYW4gYWRqdXN0IGl0IGFjY29yZGluZyB0byB5b3VyIG5lZWRzLgogICAgICAgIGlmICh2aWV3Lm5hbWUgPT09ICdEYXNoYm9hcmQnKSB7CiAgICAgICAgICAvLyB0byByZWxvYWQgaG9tZSBwYWdlCiAgICAgICAgICB0aGlzLiRyb3V0ZXIucmVwbGFjZSh7CiAgICAgICAgICAgIHBhdGg6ICcvcmVkaXJlY3QnICsgdmlldy5mdWxsUGF0aAogICAgICAgICAgfSk7CiAgICAgICAgfSBlbHNlIHsKICAgICAgICAgIHRoaXMuJHJvdXRlci5wdXNoKCcvJyk7CiAgICAgICAgfQogICAgICB9CiAgICB9LAogICAgb3Blbk1lbnU6IGZ1bmN0aW9uIG9wZW5NZW51KHRhZywgZSkgewogICAgICB2YXIgbWVudU1pbldpZHRoID0gMTA1OwogICAgICB2YXIgb2Zmc2V0TGVmdCA9IHRoaXMuJGVsLmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpLmxlZnQ7IC8vIGNvbnRhaW5lciBtYXJnaW4gbGVmdAoKICAgICAgdmFyIG9mZnNldFdpZHRoID0gdGhpcy4kZWwub2Zmc2V0V2lkdGg7IC8vIGNvbnRhaW5lciB3aWR0aAoKICAgICAgdmFyIG1heExlZnQgPSBvZmZzZXRXaWR0aCAtIG1lbnVNaW5XaWR0aDsgLy8gbGVmdCBib3VuZGFyeQoKICAgICAgdmFyIGxlZnQgPSBlLmNsaWVudFggLSBvZmZzZXRMZWZ0ICsgMTU7IC8vIDE1OiBtYXJnaW4gcmlnaHQKCiAgICAgIGlmIChsZWZ0ID4gbWF4TGVmdCkgewogICAgICAgIHRoaXMubGVmdCA9IG1heExlZnQ7CiAgICAgIH0gZWxzZSB7CiAgICAgICAgdGhpcy5sZWZ0ID0gbGVmdDsKICAgICAgfQoKICAgICAgdGhpcy50b3AgPSBlLmNsaWVudFk7CiAgICAgIHRoaXMudmlzaWJsZSA9IHRydWU7CiAgICAgIHRoaXMuc2VsZWN0ZWRUYWcgPSB0YWc7CiAgICB9LAogICAgY2xvc2VNZW51OiBmdW5jdGlvbiBjbG9zZU1lbnUoKSB7CiAgICAgIHRoaXMudmlzaWJsZSA9IGZhbHNlOwogICAgfSwKICAgIGhhbmRsZVNjcm9sbDogZnVuY3Rpb24gaGFuZGxlU2Nyb2xsKCkgewogICAgICB0aGlzLmNsb3NlTWVudSgpOwogICAgfQogIH0KfTs="},{"version":3,"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AA4BA;AACA;AAEA;EACAA;IAAAC;EAAA,CADA;EAEAC,IAFA,kBAEA;IACA;MACAC,cADA;MAEAC,MAFA;MAGAC,OAHA;MAIAC,eAJA;MAKAC;IALA;EAOA,CAVA;EAWAC;IACAC,YADA,0BACA;MACA;IACA,CAHA;IAIAC,MAJA,oBAIA;MACA;IACA;EANA,CAXA;EAmBAC;IACAC,MADA,oBACA;MACA;MACA;IACA,CAJA;IAKAT,OALA,mBAKAU,KALA,EAKA;MACA;QACAC;MACA,CAFA,MAEA;QACAA;MACA;IACA;EAXA,CAnBA;EAgCAC,OAhCA,qBAgCA;IACA;IACA;EACA,CAnCA;EAoCAC;IACAC,QADA,oBACAC,KADA,EACA;MACA;IACA,CAHA;IAIAC,OAJA,mBAIAC,GAJA,EAIA;MACA;IACA,CANA;IAOAC,eAPA,2BAOAX,MAPA,EAOA;MAAA;;MAAA;MACA;MACAA;QACA;UACA;UACAY;YACAC,iBADA;YAEAC,aAFA;YAGAC,gBAHA;YAIAC;UAJA;QAMA;;QACA;UACA;;UACA;YACAJ;UACA;QACA;MACA,CAhBA;MAiBA;IACA,CA3BA;IA4BAK,QA5BA,sBA4BA;MACA;;MADA,2CAEApB,SAFA;MAAA;;MAAA;QAEA;UAAA;;UACA;UACA;YACA;UACA;QACA;MAPA;QAAA;MAAA;QAAA;MAAA;IAQA,CApCA;IAqCAqB,OArCA,qBAqCA;MACA;;MACA;QACA;MACA;;MACA;IACA,CA3CA;IA4CAC,gBA5CA,8BA4CA;MAAA;;MACA;MACA;QAAA,4CACAP,IADA;QAAA;;QAAA;UACA;YAAA;;YACA;cACA,0CADA,CAEA;;;cACA;gBACA;cACA;;cACA;YACA;UACA;QAVA;UAAA;QAAA;UAAA;QAAA;MAWA,CAXA;IAYA,CA1DA;IA2DAQ,kBA3DA,8BA2DAC,IA3DA,EA2DA;MAAA;;MACA;QACA;;QACA;UACA;YACAP;UADA;QAGA,CAJA;MAKA,CAPA;IAQA,CApEA;IAqEAQ,gBArEA,4BAqEAD,IArEA,EAqEA;MAAA;;MACA;QAAA;;QACA;UACA;QACA;MACA,CAJA;IAKA,CA3EA;IA4EAE,eA5EA,6BA4EA;MAAA;;MACA;MACA;QACA;MACA,CAFA;IAGA,CAjFA;IAkFAC,YAlFA,wBAkFAH,IAlFA,EAkFA;MAAA;;MACA;QAAA;;QACA;UAAA;QAAA;UACA;QACA;;QACA;MACA,CALA;IAMA,CAzFA;IA0FAI,UA1FA,sBA0FA1B,YA1FA,EA0FAsB,IA1FA,EA0FA;MACA;;MACA;QACA;MACA,CAFA,MAEA;QACA;QACA;QACA;UACA;UACA;YAAAP;UAAA;QACA,CAHA,MAGA;UACA;QACA;MACA;IACA,CAxGA;IAyGAY,QAzGA,oBAyGAhB,GAzGA,EAyGAiB,CAzGA,EAyGA;MACA;MACA,uDAFA,CAEA;;MACA,uCAHA,CAGA;;MACA,yCAJA,CAIA;;MACA,uCALA,CAKA;;MAEA;QACA;MACA,CAFA,MAEA;QACA;MACA;;MAEA;MACA;MACA;IACA,CAzHA;IA0HAC,SA1HA,uBA0HA;MACA;IACA,CA5HA;IA6HAC,YA7HA,0BA6HA;MACA;IACA;EA/HA;AApCA","names":["components","ScrollPane","data","visible","top","left","selectedTag","affixTags","computed","visitedViews","routes","watch","$route","value","document","mounted","methods","isActive","route","isAffix","tag","filterAffixTags","tags","fullPath","path","name","meta","initTags","addTags","moveToCurrentTag","refreshSelectedTag","view","closeSelectedTag","closeOthersTags","closeAllTags","toLastView","openMenu","e","closeMenu","handleScroll"],"sourceRoot":"src/layout/components/TagsView","sources":["index.vue"],"sourcesContent":["<template>\n <div id=\"tags-view-container\" class=\"tags-view-container\">\n <scroll-pane ref=\"scrollPane\" class=\"tags-view-wrapper\" @scroll=\"handleScroll\">\n <router-link\n v-for=\"tag in visitedViews\"\n ref=\"tag\"\n :key=\"tag.path\"\n :class=\"isActive(tag)?'active':''\"\n :to=\"{ path: tag.path, query: tag.query, fullPath: tag.fullPath }\"\n tag=\"span\"\n class=\"tags-view-item\"\n @click.middle.native=\"!isAffix(tag)?closeSelectedTag(tag):''\"\n @contextmenu.prevent.native=\"openMenu(tag,$event)\"\n >\n {{ tag.title }}\n <span v-if=\"!isAffix(tag)\" class=\"el-icon-close\" @click.prevent.stop=\"closeSelectedTag(tag)\" />\n </router-link>\n </scroll-pane>\n <ul v-show=\"visible\" :style=\"{left:left+'px',top:top+'px'}\" class=\"contextmenu\">\n <li @click=\"refreshSelectedTag(selectedTag)\">Refresh</li>\n <li v-if=\"!isAffix(selectedTag)\" @click=\"closeSelectedTag(selectedTag)\">Close</li>\n <li @click=\"closeOthersTags\">Close Others</li>\n <li @click=\"closeAllTags(selectedTag)\">Close All</li>\n </ul>\n </div>\n</template>\n\n<script>\nimport ScrollPane from './ScrollPane'\nimport path from 'path'\n\nexport default {\n components: { ScrollPane },\n data() {\n return {\n visible: false,\n top: 0,\n left: 0,\n selectedTag: {},\n affixTags: []\n }\n },\n computed: {\n visitedViews() {\n return this.$store.state.tagsView.visitedViews\n },\n routes() {\n return this.$store.state.permission.routes\n }\n },\n watch: {\n $route() {\n this.addTags()\n this.moveToCurrentTag()\n },\n visible(value) {\n if (value) {\n document.body.addEventListener('click', this.closeMenu)\n } else {\n document.body.removeEventListener('click', this.closeMenu)\n }\n }\n },\n mounted() {\n this.initTags()\n this.addTags()\n },\n methods: {\n isActive(route) {\n return route.path === this.$route.path\n },\n isAffix(tag) {\n return tag.meta && tag.meta.affix\n },\n filterAffixTags(routes, basePath = '/') {\n let tags = []\n routes.forEach(route => {\n if (route.meta && route.meta.affix) {\n const tagPath = path.resolve(basePath, route.path)\n tags.push({\n fullPath: tagPath,\n path: tagPath,\n name: route.name,\n meta: { ...route.meta }\n })\n }\n if (route.children) {\n const tempTags = this.filterAffixTags(route.children, route.path)\n if (tempTags.length >= 1) {\n tags = [...tags, ...tempTags]\n }\n }\n })\n return tags\n },\n initTags() {\n const affixTags = this.affixTags = this.filterAffixTags(this.routes)\n for (const tag of affixTags) {\n // Must have tag name\n if (tag.name) {\n this.$store.dispatch('tagsView/addVisitedView', tag)\n }\n }\n },\n addTags() {\n const { name } = this.$route\n if (name) {\n this.$store.dispatch('tagsView/addView', this.$route)\n }\n return false\n },\n moveToCurrentTag() {\n const tags = this.$refs.tag\n this.$nextTick(() => {\n for (const tag of tags) {\n if (tag.to.path === this.$route.path) {\n this.$refs.scrollPane.moveToTarget(tag)\n // when query is different then update\n if (tag.to.fullPath !== this.$route.fullPath) {\n this.$store.dispatch('tagsView/updateVisitedView', this.$route)\n }\n break\n }\n }\n })\n },\n refreshSelectedTag(view) {\n this.$store.dispatch('tagsView/delCachedView', view).then(() => {\n const { fullPath } = view\n this.$nextTick(() => {\n this.$router.replace({\n path: '/redirect' + fullPath\n })\n })\n })\n },\n closeSelectedTag(view) {\n this.$store.dispatch('tagsView/delView', view).then(({ visitedViews }) => {\n if (this.isActive(view)) {\n this.toLastView(visitedViews, view)\n }\n })\n },\n closeOthersTags() {\n this.$router.push(this.selectedTag)\n this.$store.dispatch('tagsView/delOthersViews', this.selectedTag).then(() => {\n this.moveToCurrentTag()\n })\n },\n closeAllTags(view) {\n this.$store.dispatch('tagsView/delAllViews').then(({ visitedViews }) => {\n if (this.affixTags.some(tag => tag.path === view.path)) {\n return\n }\n this.toLastView(visitedViews, view)\n })\n },\n toLastView(visitedViews, view) {\n const latestView = visitedViews.slice(-1)[0]\n if (latestView) {\n this.$router.push(latestView.fullPath)\n } else {\n // now the default is to redirect to the home page if there is no tags-view,\n // you can adjust it according to your needs.\n if (view.name === 'Dashboard') {\n // to reload home page\n this.$router.replace({ path: '/redirect' + view.fullPath })\n } else {\n this.$router.push('/')\n }\n }\n },\n openMenu(tag, e) {\n const menuMinWidth = 105\n const offsetLeft = this.$el.getBoundingClientRect().left // container margin left\n const offsetWidth = this.$el.offsetWidth // container width\n const maxLeft = offsetWidth - menuMinWidth // left boundary\n const left = e.clientX - offsetLeft + 15 // 15: margin right\n\n if (left > maxLeft) {\n this.left = maxLeft\n } else {\n this.left = left\n }\n\n this.top = e.clientY\n this.visible = true\n this.selectedTag = tag\n },\n closeMenu() {\n this.visible = false\n },\n handleScroll() {\n this.closeMenu()\n }\n }\n}\n</script>\n\n<style lang=\"scss\" scoped>\n.tags-view-container {\n height: 34px;\n width: 100%;\n background: #fff;\n border-bottom: 1px solid #d8dce5;\n box-shadow: 0 1px 3px 0 rgba(0, 0, 0, .12), 0 0 3px 0 rgba(0, 0, 0, .04);\n .tags-view-wrapper {\n .tags-view-item {\n display: inline-block;\n position: relative;\n cursor: pointer;\n height: 26px;\n line-height: 26px;\n border: 1px solid #d8dce5;\n color: #495060;\n background: #fff;\n padding: 0 8px;\n font-size: 12px;\n margin-left: 5px;\n margin-top: 4px;\n &:first-of-type {\n margin-left: 15px;\n }\n &:last-of-type {\n margin-right: 15px;\n }\n &.active {\n background-color: #42b983;\n color: #fff;\n border-color: #42b983;\n &::before {\n content: '';\n background: #fff;\n display: inline-block;\n width: 8px;\n height: 8px;\n border-radius: 50%;\n position: relative;\n margin-right: 2px;\n }\n }\n }\n }\n .contextmenu {\n margin: 0;\n background: #fff;\n z-index: 3000;\n position: absolute;\n list-style-type: none;\n padding: 5px 0;\n border-radius: 4px;\n font-size: 12px;\n font-weight: 400;\n color: #333;\n box-shadow: 2px 2px 3px 0 rgba(0, 0, 0, .3);\n li {\n margin: 0;\n padding: 7px 16px;\n cursor: pointer;\n &:hover {\n background: #eee;\n }\n }\n }\n}\n</style>\n\n<style lang=\"scss\">\n//reset element css of el-icon-close\n.tags-view-wrapper {\n .tags-view-item {\n .el-icon-close {\n width: 16px;\n height: 16px;\n vertical-align: 2px;\n border-radius: 50%;\n text-align: center;\n transition: all .3s cubic-bezier(.645, .045, .355, 1);\n transform-origin: 100% 50%;\n &:before {\n transform: scale(.6);\n display: inline-block;\n vertical-align: -3px;\n }\n &:hover {\n background-color: #b4bccc;\n color: #fff;\n }\n }\n }\n}\n</style>\n"]}]}
|