执行过npm install命令的vue-element-admin源码
康凯
2022-05-20 aa4c235a8ca67ea8b731f90c951a465e92c0a865
1
{"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\\views\\example\\components\\ArticleDetail.vue?vue&type=script&lang=js&","dependencies":[{"path":"D:\\源码\\vue-element-admin-master\\src\\views\\example\\components\\ArticleDetail.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:aW1wb3J0ICJjb3JlLWpzL21vZHVsZXMvZXMuYXJyYXkubWFwLmpzIjsKaW1wb3J0ICJjb3JlLWpzL21vZHVsZXMvZXMuZnVuY3Rpb24ubmFtZS5qcyI7Ci8vCi8vCi8vCi8vCi8vCi8vCi8vCi8vCi8vCi8vCi8vCi8vCi8vCi8vCi8vCi8vCi8vCi8vCi8vCi8vCi8vCi8vCi8vCi8vCi8vCi8vCi8vCi8vCi8vCi8vCi8vCi8vCi8vCi8vCi8vCi8vCi8vCi8vCi8vCi8vCi8vCi8vCi8vCi8vCi8vCi8vCi8vCi8vCi8vCi8vCi8vCi8vCi8vCi8vCi8vCi8vCi8vCi8vCi8vCi8vCi8vCi8vCi8vCi8vCi8vCi8vCi8vCi8vCi8vCi8vCi8vCi8vCi8vCi8vCi8vCi8vCi8vCmltcG9ydCBUaW55bWNlIGZyb20gJ0AvY29tcG9uZW50cy9UaW55bWNlJzsKaW1wb3J0IFVwbG9hZCBmcm9tICdAL2NvbXBvbmVudHMvVXBsb2FkL1NpbmdsZUltYWdlMyc7CmltcG9ydCBNRGlucHV0IGZyb20gJ0AvY29tcG9uZW50cy9NRGlucHV0JzsKaW1wb3J0IFN0aWNreSBmcm9tICdAL2NvbXBvbmVudHMvU3RpY2t5JzsgLy8g57KY5oCnaGVhZGVy57uE5Lu2CgppbXBvcnQgeyB2YWxpZFVSTCB9IGZyb20gJ0AvdXRpbHMvdmFsaWRhdGUnOwppbXBvcnQgeyBmZXRjaEFydGljbGUgfSBmcm9tICdAL2FwaS9hcnRpY2xlJzsKaW1wb3J0IHsgc2VhcmNoVXNlciB9IGZyb20gJ0AvYXBpL3JlbW90ZS1zZWFyY2gnOwppbXBvcnQgV2FybmluZyBmcm9tICcuL1dhcm5pbmcnOwppbXBvcnQgeyBDb21tZW50RHJvcGRvd24sIFBsYXRmb3JtRHJvcGRvd24sIFNvdXJjZVVybERyb3Bkb3duIH0gZnJvbSAnLi9Ecm9wZG93bic7CnZhciBkZWZhdWx0Rm9ybSA9IHsKICBzdGF0dXM6ICdkcmFmdCcsCiAgdGl0bGU6ICcnLAogIC8vIOaWh+eroOmimOebrgogIGNvbnRlbnQ6ICcnLAogIC8vIOaWh+eroOWGheWuuQogIGNvbnRlbnRfc2hvcnQ6ICcnLAogIC8vIOaWh+eroOaRmOimgQogIHNvdXJjZV91cmk6ICcnLAogIC8vIOaWh+eroOWklumTvgogIGltYWdlX3VyaTogJycsCiAgLy8g5paH56ug5Zu+54mHCiAgZGlzcGxheV90aW1lOiB1bmRlZmluZWQsCiAgLy8g5YmN5Y+w5bGV56S65pe26Ze0CiAgaWQ6IHVuZGVmaW5lZCwKICBwbGF0Zm9ybXM6IFsnYS1wbGF0Zm9ybSddLAogIGNvbW1lbnRfZGlzYWJsZWQ6IGZhbHNlLAogIGltcG9ydGFuY2U6IDAKfTsKZXhwb3J0IGRlZmF1bHQgewogIG5hbWU6ICdBcnRpY2xlRGV0YWlsJywKICBjb21wb25lbnRzOiB7CiAgICBUaW55bWNlOiBUaW55bWNlLAogICAgTURpbnB1dDogTURpbnB1dCwKICAgIFVwbG9hZDogVXBsb2FkLAogICAgU3RpY2t5OiBTdGlja3ksCiAgICBXYXJuaW5nOiBXYXJuaW5nLAogICAgQ29tbWVudERyb3Bkb3duOiBDb21tZW50RHJvcGRvd24sCiAgICBQbGF0Zm9ybURyb3Bkb3duOiBQbGF0Zm9ybURyb3Bkb3duLAogICAgU291cmNlVXJsRHJvcGRvd246IFNvdXJjZVVybERyb3Bkb3duCiAgfSwKICBwcm9wczogewogICAgaXNFZGl0OiB7CiAgICAgIHR5cGU6IEJvb2xlYW4sCiAgICAgIGRlZmF1bHQ6IGZhbHNlCiAgICB9CiAgfSwKICBkYXRhOiBmdW5jdGlvbiBkYXRhKCkgewogICAgdmFyIF90aGlzID0gdGhpczsKCiAgICB2YXIgdmFsaWRhdGVSZXF1aXJlID0gZnVuY3Rpb24gdmFsaWRhdGVSZXF1aXJlKHJ1bGUsIHZhbHVlLCBjYWxsYmFjaykgewogICAgICBpZiAodmFsdWUgPT09ICcnKSB7CiAgICAgICAgX3RoaXMuJG1lc3NhZ2UoewogICAgICAgICAgbWVzc2FnZTogcnVsZS5maWVsZCArICfkuLrlv4XkvKDpobknLAogICAgICAgICAgdHlwZTogJ2Vycm9yJwogICAgICAgIH0pOwoKICAgICAgICBjYWxsYmFjayhuZXcgRXJyb3IocnVsZS5maWVsZCArICfkuLrlv4XkvKDpobknKSk7CiAgICAgIH0gZWxzZSB7CiAgICAgICAgY2FsbGJhY2soKTsKICAgICAgfQogICAgfTsKCiAgICB2YXIgdmFsaWRhdGVTb3VyY2VVcmkgPSBmdW5jdGlvbiB2YWxpZGF0ZVNvdXJjZVVyaShydWxlLCB2YWx1ZSwgY2FsbGJhY2spIHsKICAgICAgaWYgKHZhbHVlKSB7CiAgICAgICAgaWYgKHZhbGlkVVJMKHZhbHVlKSkgewogICAgICAgICAgY2FsbGJhY2soKTsKICAgICAgICB9IGVsc2UgewogICAgICAgICAgX3RoaXMuJG1lc3NhZ2UoewogICAgICAgICAgICBtZXNzYWdlOiAn5aSW6ZO+dXJs5aGr5YaZ5LiN5q2j56GuJywKICAgICAgICAgICAgdHlwZTogJ2Vycm9yJwogICAgICAgICAgfSk7CgogICAgICAgICAgY2FsbGJhY2sobmV3IEVycm9yKCflpJbpk751cmzloavlhpnkuI3mraPnoa4nKSk7CiAgICAgICAgfQogICAgICB9IGVsc2UgewogICAgICAgIGNhbGxiYWNrKCk7CiAgICAgIH0KICAgIH07CgogICAgcmV0dXJuIHsKICAgICAgcG9zdEZvcm06IE9iamVjdC5hc3NpZ24oe30sIGRlZmF1bHRGb3JtKSwKICAgICAgbG9hZGluZzogZmFsc2UsCiAgICAgIHVzZXJMaXN0T3B0aW9uczogW10sCiAgICAgIHJ1bGVzOiB7CiAgICAgICAgaW1hZ2VfdXJpOiBbewogICAgICAgICAgdmFsaWRhdG9yOiB2YWxpZGF0ZVJlcXVpcmUKICAgICAgICB9XSwKICAgICAgICB0aXRsZTogW3sKICAgICAgICAgIHZhbGlkYXRvcjogdmFsaWRhdGVSZXF1aXJlCiAgICAgICAgfV0sCiAgICAgICAgY29udGVudDogW3sKICAgICAgICAgIHZhbGlkYXRvcjogdmFsaWRhdGVSZXF1aXJlCiAgICAgICAgfV0sCiAgICAgICAgc291cmNlX3VyaTogW3sKICAgICAgICAgIHZhbGlkYXRvcjogdmFsaWRhdGVTb3VyY2VVcmksCiAgICAgICAgICB0cmlnZ2VyOiAnYmx1cicKICAgICAgICB9XQogICAgICB9LAogICAgICB0ZW1wUm91dGU6IHt9CiAgICB9OwogIH0sCiAgY29tcHV0ZWQ6IHsKICAgIGNvbnRlbnRTaG9ydExlbmd0aDogZnVuY3Rpb24gY29udGVudFNob3J0TGVuZ3RoKCkgewogICAgICByZXR1cm4gdGhpcy5wb3N0Rm9ybS5jb250ZW50X3Nob3J0Lmxlbmd0aDsKICAgIH0sCiAgICBkaXNwbGF5VGltZTogewogICAgICAvLyBzZXQgYW5kIGdldCBpcyB1c2VmdWwgd2hlbiB0aGUgZGF0YQogICAgICAvLyByZXR1cm5lZCBieSB0aGUgYmFjayBlbmQgYXBpIGlzIGRpZmZlcmVudCBmcm9tIHRoZSBmcm9udCBlbmQKICAgICAgLy8gYmFjayBlbmQgcmV0dXJuID0+ICIyMDEzLTA2LTI1IDA2OjU5OjI1IgogICAgICAvLyBmcm9udCBlbmQgbmVlZCB0aW1lc3RhbXAgPT4gMTM3MjExNDc2NTAwMAogICAgICBnZXQ6IGZ1bmN0aW9uIGdldCgpIHsKICAgICAgICByZXR1cm4gK25ldyBEYXRlKHRoaXMucG9zdEZvcm0uZGlzcGxheV90aW1lKTsKICAgICAgfSwKICAgICAgc2V0OiBmdW5jdGlvbiBzZXQodmFsKSB7CiAgICAgICAgdGhpcy5wb3N0Rm9ybS5kaXNwbGF5X3RpbWUgPSBuZXcgRGF0ZSh2YWwpOwogICAgICB9CiAgICB9CiAgfSwKICBjcmVhdGVkOiBmdW5jdGlvbiBjcmVhdGVkKCkgewogICAgaWYgKHRoaXMuaXNFZGl0KSB7CiAgICAgIHZhciBpZCA9IHRoaXMuJHJvdXRlLnBhcmFtcyAmJiB0aGlzLiRyb3V0ZS5wYXJhbXMuaWQ7CiAgICAgIHRoaXMuZmV0Y2hEYXRhKGlkKTsKICAgIH0gLy8gV2h5IG5lZWQgdG8gbWFrZSBhIGNvcHkgb2YgdGhpcy4kcm91dGUgaGVyZT8KICAgIC8vIEJlY2F1c2UgaWYgeW91IGVudGVyIHRoaXMgcGFnZSBhbmQgcXVpY2tseSBzd2l0Y2ggdGFnLCBtYXkgYmUgaW4gdGhlIGV4ZWN1dGlvbiBvZiB0aGUgc2V0VGFnc1ZpZXdUaXRsZSBmdW5jdGlvbiwgdGhpcy4kcm91dGUgaXMgbm8gbG9uZ2VyIHBvaW50aW5nIHRvIHRoZSBjdXJyZW50IHBhZ2UKICAgIC8vIGh0dHBzOi8vZ2l0aHViLmNvbS9QYW5KaWFDaGVuL3Z1ZS1lbGVtZW50LWFkbWluL2lzc3Vlcy8xMjIxCgoKICAgIHRoaXMudGVtcFJvdXRlID0gT2JqZWN0LmFzc2lnbih7fSwgdGhpcy4kcm91dGUpOwogIH0sCiAgbWV0aG9kczogewogICAgZmV0Y2hEYXRhOiBmdW5jdGlvbiBmZXRjaERhdGEoaWQpIHsKICAgICAgdmFyIF90aGlzMiA9IHRoaXM7CgogICAgICBmZXRjaEFydGljbGUoaWQpLnRoZW4oZnVuY3Rpb24gKHJlc3BvbnNlKSB7CiAgICAgICAgX3RoaXMyLnBvc3RGb3JtID0gcmVzcG9uc2UuZGF0YTsgLy8ganVzdCBmb3IgdGVzdAoKICAgICAgICBfdGhpczIucG9zdEZvcm0udGl0bGUgKz0gIiAgIEFydGljbGUgSWQ6Ii5jb25jYXQoX3RoaXMyLnBvc3RGb3JtLmlkKTsKICAgICAgICBfdGhpczIucG9zdEZvcm0uY29udGVudF9zaG9ydCArPSAiICAgQXJ0aWNsZSBJZDoiLmNvbmNhdChfdGhpczIucG9zdEZvcm0uaWQpOyAvLyBzZXQgdGFnc3ZpZXcgdGl0bGUKCiAgICAgICAgX3RoaXMyLnNldFRhZ3NWaWV3VGl0bGUoKTsgLy8gc2V0IHBhZ2UgdGl0bGUKCgogICAgICAgIF90aGlzMi5zZXRQYWdlVGl0bGUoKTsKICAgICAgfSkuY2F0Y2goZnVuY3Rpb24gKGVycikgewogICAgICAgIGNvbnNvbGUubG9nKGVycik7CiAgICAgIH0pOwogICAgfSwKICAgIHNldFRhZ3NWaWV3VGl0bGU6IGZ1bmN0aW9uIHNldFRhZ3NWaWV3VGl0bGUoKSB7CiAgICAgIHZhciB0aXRsZSA9ICdFZGl0IEFydGljbGUnOwogICAgICB2YXIgcm91dGUgPSBPYmplY3QuYXNzaWduKHt9LCB0aGlzLnRlbXBSb3V0ZSwgewogICAgICAgIHRpdGxlOiAiIi5jb25jYXQodGl0bGUsICItIikuY29uY2F0KHRoaXMucG9zdEZvcm0uaWQpCiAgICAgIH0pOwogICAgICB0aGlzLiRzdG9yZS5kaXNwYXRjaCgndGFnc1ZpZXcvdXBkYXRlVmlzaXRlZFZpZXcnLCByb3V0ZSk7CiAgICB9LAogICAgc2V0UGFnZVRpdGxlOiBmdW5jdGlvbiBzZXRQYWdlVGl0bGUoKSB7CiAgICAgIHZhciB0aXRsZSA9ICdFZGl0IEFydGljbGUnOwogICAgICBkb2N1bWVudC50aXRsZSA9ICIiLmNvbmNhdCh0aXRsZSwgIiAtICIpLmNvbmNhdCh0aGlzLnBvc3RGb3JtLmlkKTsKICAgIH0sCiAgICBzdWJtaXRGb3JtOiBmdW5jdGlvbiBzdWJtaXRGb3JtKCkgewogICAgICB2YXIgX3RoaXMzID0gdGhpczsKCiAgICAgIGNvbnNvbGUubG9nKHRoaXMucG9zdEZvcm0pOwogICAgICB0aGlzLiRyZWZzLnBvc3RGb3JtLnZhbGlkYXRlKGZ1bmN0aW9uICh2YWxpZCkgewogICAgICAgIGlmICh2YWxpZCkgewogICAgICAgICAgX3RoaXMzLmxvYWRpbmcgPSB0cnVlOwoKICAgICAgICAgIF90aGlzMy4kbm90aWZ5KHsKICAgICAgICAgICAgdGl0bGU6ICfmiJDlip8nLAogICAgICAgICAgICBtZXNzYWdlOiAn5Y+R5biD5paH56ug5oiQ5YqfJywKICAgICAgICAgICAgdHlwZTogJ3N1Y2Nlc3MnLAogICAgICAgICAgICBkdXJhdGlvbjogMjAwMAogICAgICAgICAgfSk7CgogICAgICAgICAgX3RoaXMzLnBvc3RGb3JtLnN0YXR1cyA9ICdwdWJsaXNoZWQnOwogICAgICAgICAgX3RoaXMzLmxvYWRpbmcgPSBmYWxzZTsKICAgICAgICB9IGVsc2UgewogICAgICAgICAgY29uc29sZS5sb2coJ2Vycm9yIHN1Ym1pdCEhJyk7CiAgICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgICAgfQogICAgICB9KTsKICAgIH0sCiAgICBkcmFmdEZvcm06IGZ1bmN0aW9uIGRyYWZ0Rm9ybSgpIHsKICAgICAgaWYgKHRoaXMucG9zdEZvcm0uY29udGVudC5sZW5ndGggPT09IDAgfHwgdGhpcy5wb3N0Rm9ybS50aXRsZS5sZW5ndGggPT09IDApIHsKICAgICAgICB0aGlzLiRtZXNzYWdlKHsKICAgICAgICAgIG1lc3NhZ2U6ICfor7floavlhpnlv4XopoHnmoTmoIfpopjlkozlhoXlrrknLAogICAgICAgICAgdHlwZTogJ3dhcm5pbmcnCiAgICAgICAgfSk7CiAgICAgICAgcmV0dXJuOwogICAgICB9CgogICAgICB0aGlzLiRtZXNzYWdlKHsKICAgICAgICBtZXNzYWdlOiAn5L+d5a2Y5oiQ5YqfJywKICAgICAgICB0eXBlOiAnc3VjY2VzcycsCiAgICAgICAgc2hvd0Nsb3NlOiB0cnVlLAogICAgICAgIGR1cmF0aW9uOiAxMDAwCiAgICAgIH0pOwogICAgICB0aGlzLnBvc3RGb3JtLnN0YXR1cyA9ICdkcmFmdCc7CiAgICB9LAogICAgZ2V0UmVtb3RlVXNlckxpc3Q6IGZ1bmN0aW9uIGdldFJlbW90ZVVzZXJMaXN0KHF1ZXJ5KSB7CiAgICAgIHZhciBfdGhpczQgPSB0aGlzOwoKICAgICAgc2VhcmNoVXNlcihxdWVyeSkudGhlbihmdW5jdGlvbiAocmVzcG9uc2UpIHsKICAgICAgICBpZiAoIXJlc3BvbnNlLmRhdGEuaXRlbXMpIHJldHVybjsKICAgICAgICBfdGhpczQudXNlckxpc3RPcHRpb25zID0gcmVzcG9uc2UuZGF0YS5pdGVtcy5tYXAoZnVuY3Rpb24gKHYpIHsKICAgICAgICAgIHJldHVybiB2Lm5hbWU7CiAgICAgICAgfSk7CiAgICAgIH0pOwogICAgfQogIH0KfTs="},{"version":3,"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AA8EA;AACA;AACA;AACA,yC,CAAA;;AACA;AACA;AACA;AACA;AACA;AAEA;EACAA,eADA;EAEAC,SAFA;EAEA;EACAC,WAHA;EAGA;EACAC,iBAJA;EAIA;EACAC,cALA;EAKA;EACAC,aANA;EAMA;EACAC,uBAPA;EAOA;EACAC,aARA;EASAC,yBATA;EAUAC,uBAVA;EAWAC;AAXA;AAcA;EACAC,qBADA;EAEAC;IAAAC;IAAAC;IAAAC;IAAAC;IAAAC;IAAAC;IAAAC;IAAAC;EAAA,CAFA;EAGAC;IACAC;MACAC,aADA;MAEAC;IAFA;EADA,CAHA;EASAC,IATA,kBASA;IAAA;;IACA;MACA;QACA;UACAC,4BADA;UAEAH;QAFA;;QAIAI;MACA,CANA,MAMA;QACAA;MACA;IACA,CAVA;;IAWA;MACA;QACA;UACAA;QACA,CAFA,MAEA;UACA;YACAD,qBADA;YAEAH;UAFA;;UAIAI;QACA;MACA,CAVA,MAUA;QACAA;MACA;IACA,CAdA;;IAeA;MACAC,wCADA;MAEAC,cAFA;MAGAC,mBAHA;MAIAC;QACA1B;UAAA2B;QAAA,EADA;QAEA/B;UAAA+B;QAAA,EAFA;QAGA9B;UAAA8B;QAAA,EAHA;QAIA5B;UAAA4B;UAAAC;QAAA;MAJA,CAJA;MAUAC;IAVA;EAYA,CAhDA;EAiDAC;IACAC,kBADA,gCACA;MACA;IACA,CAHA;IAIAC;MACA;MACA;MACA;MACA;MACAC,GALA,iBAKA;QACA;MACA,CAPA;MAQAC,GARA,eAQAC,GARA,EAQA;QACA;MACA;IAVA;EAJA,CAjDA;EAkEAC,OAlEA,qBAkEA;IACA;MACA;MACA;IACA,CAJA,CAMA;IACA;IACA;;;IACA;EACA,CA5EA;EA6EAC;IACAC,SADA,qBACApC,EADA,EACA;MAAA;;MACAqC;QACA,gCADA,CAGA;;QACA;QACA,6EALA,CAOA;;QACA,0BARA,CAUA;;;QACA;MACA,CAZA,EAYAC,KAZA,CAYA;QACAC;MACA,CAdA;IAeA,CAjBA;IAkBAC,gBAlBA,8BAkBA;MACA;MACA;QAAA9C;MAAA;MACA;IACA,CAtBA;IAuBA+C,YAvBA,0BAuBA;MACA;MACAC;IACA,CA1BA;IA2BAC,UA3BA,wBA2BA;MAAA;;MACAJ;MACA;QACA;UACA;;UACA;YACA7C,WADA;YAEAyB,iBAFA;YAGAH,eAHA;YAIA4B;UAJA;;UAMA;UACA;QACA,CAVA,MAUA;UACAL;UACA;QACA;MACA,CAfA;IAgBA,CA7CA;IA8CAM,SA9CA,uBA8CA;MACA;QACA;UACA1B,sBADA;UAEAH;QAFA;QAIA;MACA;;MACA;QACAG,eADA;QAEAH,eAFA;QAGA8B,eAHA;QAIAF;MAJA;MAMA;IACA,CA7DA;IA8DAG,iBA9DA,6BA8DAC,KA9DA,EA8DA;MAAA;;MACAC;QACA;QACA;UAAA;QAAA;MACA,CAHA;IAIA;EAnEA;AA7EA","names":["status","title","content","content_short","source_uri","image_uri","display_time","id","platforms","comment_disabled","importance","name","components","Tinymce","MDinput","Upload","Sticky","Warning","CommentDropdown","PlatformDropdown","SourceUrlDropdown","props","isEdit","type","default","data","message","callback","postForm","loading","userListOptions","rules","validator","trigger","tempRoute","computed","contentShortLength","displayTime","get","set","val","created","methods","fetchData","fetchArticle","catch","console","setTagsViewTitle","setPageTitle","document","submitForm","duration","draftForm","showClose","getRemoteUserList","query","searchUser"],"sourceRoot":"src/views/example/components","sources":["ArticleDetail.vue"],"sourcesContent":["<template>\n  <div class=\"createPost-container\">\n    <el-form ref=\"postForm\" :model=\"postForm\" :rules=\"rules\" class=\"form-container\">\n\n      <sticky :z-index=\"10\" :class-name=\"'sub-navbar '+postForm.status\">\n        <CommentDropdown v-model=\"postForm.comment_disabled\" />\n        <PlatformDropdown v-model=\"postForm.platforms\" />\n        <SourceUrlDropdown v-model=\"postForm.source_uri\" />\n        <el-button v-loading=\"loading\" style=\"margin-left: 10px;\" type=\"success\" @click=\"submitForm\">\n          Publish\n        </el-button>\n        <el-button v-loading=\"loading\" type=\"warning\" @click=\"draftForm\">\n          Draft\n        </el-button>\n      </sticky>\n\n      <div class=\"createPost-main-container\">\n        <el-row>\n          <Warning />\n\n          <el-col :span=\"24\">\n            <el-form-item style=\"margin-bottom: 40px;\" prop=\"title\">\n              <MDinput v-model=\"postForm.title\" :maxlength=\"100\" name=\"name\" required>\n                Title\n              </MDinput>\n            </el-form-item>\n\n            <div class=\"postInfo-container\">\n              <el-row>\n                <el-col :span=\"8\">\n                  <el-form-item label-width=\"60px\" label=\"Author:\" class=\"postInfo-container-item\">\n                    <el-select v-model=\"postForm.author\" :remote-method=\"getRemoteUserList\" filterable default-first-option remote placeholder=\"Search user\">\n                      <el-option v-for=\"(item,index) in userListOptions\" :key=\"item+index\" :label=\"item\" :value=\"item\" />\n                    </el-select>\n                  </el-form-item>\n                </el-col>\n\n                <el-col :span=\"10\">\n                  <el-form-item label-width=\"120px\" label=\"Publish Time:\" class=\"postInfo-container-item\">\n                    <el-date-picker v-model=\"displayTime\" type=\"datetime\" format=\"yyyy-MM-dd HH:mm:ss\" placeholder=\"Select date and time\" />\n                  </el-form-item>\n                </el-col>\n\n                <el-col :span=\"6\">\n                  <el-form-item label-width=\"90px\" label=\"Importance:\" class=\"postInfo-container-item\">\n                    <el-rate\n                      v-model=\"postForm.importance\"\n                      :max=\"3\"\n                      :colors=\"['#99A9BF', '#F7BA2A', '#FF9900']\"\n                      :low-threshold=\"1\"\n                      :high-threshold=\"3\"\n                      style=\"display:inline-block\"\n                    />\n                  </el-form-item>\n                </el-col>\n              </el-row>\n            </div>\n          </el-col>\n        </el-row>\n\n        <el-form-item style=\"margin-bottom: 40px;\" label-width=\"70px\" label=\"Summary:\">\n          <el-input v-model=\"postForm.content_short\" :rows=\"1\" type=\"textarea\" class=\"article-textarea\" autosize placeholder=\"Please enter the content\" />\n          <span v-show=\"contentShortLength\" class=\"word-counter\">{{ contentShortLength }}words</span>\n        </el-form-item>\n\n        <el-form-item prop=\"content\" style=\"margin-bottom: 30px;\">\n          <Tinymce ref=\"editor\" v-model=\"postForm.content\" :height=\"400\" />\n        </el-form-item>\n\n        <el-form-item prop=\"image_uri\" style=\"margin-bottom: 30px;\">\n          <Upload v-model=\"postForm.image_uri\" />\n        </el-form-item>\n      </div>\n    </el-form>\n  </div>\n</template>\n\n<script>\nimport Tinymce from '@/components/Tinymce'\nimport Upload from '@/components/Upload/SingleImage3'\nimport MDinput from '@/components/MDinput'\nimport Sticky from '@/components/Sticky' // 粘性header组件\nimport { validURL } from '@/utils/validate'\nimport { fetchArticle } from '@/api/article'\nimport { searchUser } from '@/api/remote-search'\nimport Warning from './Warning'\nimport { CommentDropdown, PlatformDropdown, SourceUrlDropdown } from './Dropdown'\n\nconst defaultForm = {\n  status: 'draft',\n  title: '', // 文章题目\n  content: '', // 文章内容\n  content_short: '', // 文章摘要\n  source_uri: '', // 文章外链\n  image_uri: '', // 文章图片\n  display_time: undefined, // 前台展示时间\n  id: undefined,\n  platforms: ['a-platform'],\n  comment_disabled: false,\n  importance: 0\n}\n\nexport default {\n  name: 'ArticleDetail',\n  components: { Tinymce, MDinput, Upload, Sticky, Warning, CommentDropdown, PlatformDropdown, SourceUrlDropdown },\n  props: {\n    isEdit: {\n      type: Boolean,\n      default: false\n    }\n  },\n  data() {\n    const validateRequire = (rule, value, callback) => {\n      if (value === '') {\n        this.$message({\n          message: rule.field + '为必传项',\n          type: 'error'\n        })\n        callback(new Error(rule.field + '为必传项'))\n      } else {\n        callback()\n      }\n    }\n    const validateSourceUri = (rule, value, callback) => {\n      if (value) {\n        if (validURL(value)) {\n          callback()\n        } else {\n          this.$message({\n            message: '外链url填写不正确',\n            type: 'error'\n          })\n          callback(new Error('外链url填写不正确'))\n        }\n      } else {\n        callback()\n      }\n    }\n    return {\n      postForm: Object.assign({}, defaultForm),\n      loading: false,\n      userListOptions: [],\n      rules: {\n        image_uri: [{ validator: validateRequire }],\n        title: [{ validator: validateRequire }],\n        content: [{ validator: validateRequire }],\n        source_uri: [{ validator: validateSourceUri, trigger: 'blur' }]\n      },\n      tempRoute: {}\n    }\n  },\n  computed: {\n    contentShortLength() {\n      return this.postForm.content_short.length\n    },\n    displayTime: {\n      // set and get is useful when the data\n      // returned by the back end api is different from the front end\n      // back end return => \"2013-06-25 06:59:25\"\n      // front end need timestamp => 1372114765000\n      get() {\n        return (+new Date(this.postForm.display_time))\n      },\n      set(val) {\n        this.postForm.display_time = new Date(val)\n      }\n    }\n  },\n  created() {\n    if (this.isEdit) {\n      const id = this.$route.params && this.$route.params.id\n      this.fetchData(id)\n    }\n\n    // Why need to make a copy of this.$route here?\n    // Because if you enter this page and quickly switch tag, may be in the execution of the setTagsViewTitle function, this.$route is no longer pointing to the current page\n    // https://github.com/PanJiaChen/vue-element-admin/issues/1221\n    this.tempRoute = Object.assign({}, this.$route)\n  },\n  methods: {\n    fetchData(id) {\n      fetchArticle(id).then(response => {\n        this.postForm = response.data\n\n        // just for test\n        this.postForm.title += `   Article Id:${this.postForm.id}`\n        this.postForm.content_short += `   Article Id:${this.postForm.id}`\n\n        // set tagsview title\n        this.setTagsViewTitle()\n\n        // set page title\n        this.setPageTitle()\n      }).catch(err => {\n        console.log(err)\n      })\n    },\n    setTagsViewTitle() {\n      const title = 'Edit Article'\n      const route = Object.assign({}, this.tempRoute, { title: `${title}-${this.postForm.id}` })\n      this.$store.dispatch('tagsView/updateVisitedView', route)\n    },\n    setPageTitle() {\n      const title = 'Edit Article'\n      document.title = `${title} - ${this.postForm.id}`\n    },\n    submitForm() {\n      console.log(this.postForm)\n      this.$refs.postForm.validate(valid => {\n        if (valid) {\n          this.loading = true\n          this.$notify({\n            title: '成功',\n            message: '发布文章成功',\n            type: 'success',\n            duration: 2000\n          })\n          this.postForm.status = 'published'\n          this.loading = false\n        } else {\n          console.log('error submit!!')\n          return false\n        }\n      })\n    },\n    draftForm() {\n      if (this.postForm.content.length === 0 || this.postForm.title.length === 0) {\n        this.$message({\n          message: '请填写必要的标题和内容',\n          type: 'warning'\n        })\n        return\n      }\n      this.$message({\n        message: '保存成功',\n        type: 'success',\n        showClose: true,\n        duration: 1000\n      })\n      this.postForm.status = 'draft'\n    },\n    getRemoteUserList(query) {\n      searchUser(query).then(response => {\n        if (!response.data.items) return\n        this.userListOptions = response.data.items.map(v => v.name)\n      })\n    }\n  }\n}\n</script>\n\n<style lang=\"scss\" scoped>\n@import \"~@/styles/mixin.scss\";\n\n.createPost-container {\n  position: relative;\n\n  .createPost-main-container {\n    padding: 40px 45px 20px 50px;\n\n    .postInfo-container {\n      position: relative;\n      @include clearfix;\n      margin-bottom: 10px;\n\n      .postInfo-container-item {\n        float: left;\n      }\n    }\n  }\n\n  .word-counter {\n    width: 40px;\n    position: absolute;\n    right: 10px;\n    top: 0px;\n  }\n}\n\n.article-textarea ::v-deep {\n  textarea {\n    padding-right: 40px;\n    resize: none;\n    border: none;\n    border-radius: 0px;\n    border-bottom: 1px solid #bfcbd9;\n  }\n}\n</style>\n"]}]}