执行过npm install命令的vue-element-admin源码
康凯
2022-05-20 aa4c235a8ca67ea8b731f90c951a465e92c0a865
1
{"remainingRequest":"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\\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:Ly8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KCmltcG9ydCBUaW55bWNlIGZyb20gJ0AvY29tcG9uZW50cy9UaW55bWNlJwppbXBvcnQgVXBsb2FkIGZyb20gJ0AvY29tcG9uZW50cy9VcGxvYWQvU2luZ2xlSW1hZ2UzJwppbXBvcnQgTURpbnB1dCBmcm9tICdAL2NvbXBvbmVudHMvTURpbnB1dCcKaW1wb3J0IFN0aWNreSBmcm9tICdAL2NvbXBvbmVudHMvU3RpY2t5JyAvLyDnspjmgKdoZWFkZXLnu4Tku7YKaW1wb3J0IHsgdmFsaWRVUkwgfSBmcm9tICdAL3V0aWxzL3ZhbGlkYXRlJwppbXBvcnQgeyBmZXRjaEFydGljbGUgfSBmcm9tICdAL2FwaS9hcnRpY2xlJwppbXBvcnQgeyBzZWFyY2hVc2VyIH0gZnJvbSAnQC9hcGkvcmVtb3RlLXNlYXJjaCcKaW1wb3J0IFdhcm5pbmcgZnJvbSAnLi9XYXJuaW5nJwppbXBvcnQgeyBDb21tZW50RHJvcGRvd24sIFBsYXRmb3JtRHJvcGRvd24sIFNvdXJjZVVybERyb3Bkb3duIH0gZnJvbSAnLi9Ecm9wZG93bicKCmNvbnN0IGRlZmF1bHRGb3JtID0gewogIHN0YXR1czogJ2RyYWZ0JywKICB0aXRsZTogJycsIC8vIOaWh+eroOmimOebrgogIGNvbnRlbnQ6ICcnLCAvLyDmlofnq6DlhoXlrrkKICBjb250ZW50X3Nob3J0OiAnJywgLy8g5paH56ug5pGY6KaBCiAgc291cmNlX3VyaTogJycsIC8vIOaWh+eroOWklumTvgogIGltYWdlX3VyaTogJycsIC8vIOaWh+eroOWbvueJhwogIGRpc3BsYXlfdGltZTogdW5kZWZpbmVkLCAvLyDliY3lj7DlsZXnpLrml7bpl7QKICBpZDogdW5kZWZpbmVkLAogIHBsYXRmb3JtczogWydhLXBsYXRmb3JtJ10sCiAgY29tbWVudF9kaXNhYmxlZDogZmFsc2UsCiAgaW1wb3J0YW5jZTogMAp9CgpleHBvcnQgZGVmYXVsdCB7CiAgbmFtZTogJ0FydGljbGVEZXRhaWwnLAogIGNvbXBvbmVudHM6IHsgVGlueW1jZSwgTURpbnB1dCwgVXBsb2FkLCBTdGlja3ksIFdhcm5pbmcsIENvbW1lbnREcm9wZG93biwgUGxhdGZvcm1Ecm9wZG93biwgU291cmNlVXJsRHJvcGRvd24gfSwKICBwcm9wczogewogICAgaXNFZGl0OiB7CiAgICAgIHR5cGU6IEJvb2xlYW4sCiAgICAgIGRlZmF1bHQ6IGZhbHNlCiAgICB9CiAgfSwKICBkYXRhKCkgewogICAgY29uc3QgdmFsaWRhdGVSZXF1aXJlID0gKHJ1bGUsIHZhbHVlLCBjYWxsYmFjaykgPT4gewogICAgICBpZiAodmFsdWUgPT09ICcnKSB7CiAgICAgICAgdGhpcy4kbWVzc2FnZSh7CiAgICAgICAgICBtZXNzYWdlOiBydWxlLmZpZWxkICsgJ+S4uuW/heS8oOmhuScsCiAgICAgICAgICB0eXBlOiAnZXJyb3InCiAgICAgICAgfSkKICAgICAgICBjYWxsYmFjayhuZXcgRXJyb3IocnVsZS5maWVsZCArICfkuLrlv4XkvKDpobknKSkKICAgICAgfSBlbHNlIHsKICAgICAgICBjYWxsYmFjaygpCiAgICAgIH0KICAgIH0KICAgIGNvbnN0IHZhbGlkYXRlU291cmNlVXJpID0gKHJ1bGUsIHZhbHVlLCBjYWxsYmFjaykgPT4gewogICAgICBpZiAodmFsdWUpIHsKICAgICAgICBpZiAodmFsaWRVUkwodmFsdWUpKSB7CiAgICAgICAgICBjYWxsYmFjaygpCiAgICAgICAgfSBlbHNlIHsKICAgICAgICAgIHRoaXMuJG1lc3NhZ2UoewogICAgICAgICAgICBtZXNzYWdlOiAn5aSW6ZO+dXJs5aGr5YaZ5LiN5q2j56GuJywKICAgICAgICAgICAgdHlwZTogJ2Vycm9yJwogICAgICAgICAgfSkKICAgICAgICAgIGNhbGxiYWNrKG5ldyBFcnJvcign5aSW6ZO+dXJs5aGr5YaZ5LiN5q2j56GuJykpCiAgICAgICAgfQogICAgICB9IGVsc2UgewogICAgICAgIGNhbGxiYWNrKCkKICAgICAgfQogICAgfQogICAgcmV0dXJuIHsKICAgICAgcG9zdEZvcm06IE9iamVjdC5hc3NpZ24oe30sIGRlZmF1bHRGb3JtKSwKICAgICAgbG9hZGluZzogZmFsc2UsCiAgICAgIHVzZXJMaXN0T3B0aW9uczogW10sCiAgICAgIHJ1bGVzOiB7CiAgICAgICAgaW1hZ2VfdXJpOiBbeyB2YWxpZGF0b3I6IHZhbGlkYXRlUmVxdWlyZSB9XSwKICAgICAgICB0aXRsZTogW3sgdmFsaWRhdG9yOiB2YWxpZGF0ZVJlcXVpcmUgfV0sCiAgICAgICAgY29udGVudDogW3sgdmFsaWRhdG9yOiB2YWxpZGF0ZVJlcXVpcmUgfV0sCiAgICAgICAgc291cmNlX3VyaTogW3sgdmFsaWRhdG9yOiB2YWxpZGF0ZVNvdXJjZVVyaSwgdHJpZ2dlcjogJ2JsdXInIH1dCiAgICAgIH0sCiAgICAgIHRlbXBSb3V0ZToge30KICAgIH0KICB9LAogIGNvbXB1dGVkOiB7CiAgICBjb250ZW50U2hvcnRMZW5ndGgoKSB7CiAgICAgIHJldHVybiB0aGlzLnBvc3RGb3JtLmNvbnRlbnRfc2hvcnQubGVuZ3RoCiAgICB9LAogICAgZGlzcGxheVRpbWU6IHsKICAgICAgLy8gc2V0IGFuZCBnZXQgaXMgdXNlZnVsIHdoZW4gdGhlIGRhdGEKICAgICAgLy8gcmV0dXJuZWQgYnkgdGhlIGJhY2sgZW5kIGFwaSBpcyBkaWZmZXJlbnQgZnJvbSB0aGUgZnJvbnQgZW5kCiAgICAgIC8vIGJhY2sgZW5kIHJldHVybiA9PiAiMjAxMy0wNi0yNSAwNjo1OToyNSIKICAgICAgLy8gZnJvbnQgZW5kIG5lZWQgdGltZXN0YW1wID0+IDEzNzIxMTQ3NjUwMDAKICAgICAgZ2V0KCkgewogICAgICAgIHJldHVybiAoK25ldyBEYXRlKHRoaXMucG9zdEZvcm0uZGlzcGxheV90aW1lKSkKICAgICAgfSwKICAgICAgc2V0KHZhbCkgewogICAgICAgIHRoaXMucG9zdEZvcm0uZGlzcGxheV90aW1lID0gbmV3IERhdGUodmFsKQogICAgICB9CiAgICB9CiAgfSwKICBjcmVhdGVkKCkgewogICAgaWYgKHRoaXMuaXNFZGl0KSB7CiAgICAgIGNvbnN0IGlkID0gdGhpcy4kcm91dGUucGFyYW1zICYmIHRoaXMuJHJvdXRlLnBhcmFtcy5pZAogICAgICB0aGlzLmZldGNoRGF0YShpZCkKICAgIH0KCiAgICAvLyBXaHkgbmVlZCB0byBtYWtlIGEgY29weSBvZiB0aGlzLiRyb3V0ZSBoZXJlPwogICAgLy8gQmVjYXVzZSBpZiB5b3UgZW50ZXIgdGhpcyBwYWdlIGFuZCBxdWlja2x5IHN3aXRjaCB0YWcsIG1heSBiZSBpbiB0aGUgZXhlY3V0aW9uIG9mIHRoZSBzZXRUYWdzVmlld1RpdGxlIGZ1bmN0aW9uLCB0aGlzLiRyb3V0ZSBpcyBubyBsb25nZXIgcG9pbnRpbmcgdG8gdGhlIGN1cnJlbnQgcGFnZQogICAgLy8gaHR0cHM6Ly9naXRodWIuY29tL1BhbkppYUNoZW4vdnVlLWVsZW1lbnQtYWRtaW4vaXNzdWVzLzEyMjEKICAgIHRoaXMudGVtcFJvdXRlID0gT2JqZWN0LmFzc2lnbih7fSwgdGhpcy4kcm91dGUpCiAgfSwKICBtZXRob2RzOiB7CiAgICBmZXRjaERhdGEoaWQpIHsKICAgICAgZmV0Y2hBcnRpY2xlKGlkKS50aGVuKHJlc3BvbnNlID0+IHsKICAgICAgICB0aGlzLnBvc3RGb3JtID0gcmVzcG9uc2UuZGF0YQoKICAgICAgICAvLyBqdXN0IGZvciB0ZXN0CiAgICAgICAgdGhpcy5wb3N0Rm9ybS50aXRsZSArPSBgICAgQXJ0aWNsZSBJZDoke3RoaXMucG9zdEZvcm0uaWR9YAogICAgICAgIHRoaXMucG9zdEZvcm0uY29udGVudF9zaG9ydCArPSBgICAgQXJ0aWNsZSBJZDoke3RoaXMucG9zdEZvcm0uaWR9YAoKICAgICAgICAvLyBzZXQgdGFnc3ZpZXcgdGl0bGUKICAgICAgICB0aGlzLnNldFRhZ3NWaWV3VGl0bGUoKQoKICAgICAgICAvLyBzZXQgcGFnZSB0aXRsZQogICAgICAgIHRoaXMuc2V0UGFnZVRpdGxlKCkKICAgICAgfSkuY2F0Y2goZXJyID0+IHsKICAgICAgICBjb25zb2xlLmxvZyhlcnIpCiAgICAgIH0pCiAgICB9LAogICAgc2V0VGFnc1ZpZXdUaXRsZSgpIHsKICAgICAgY29uc3QgdGl0bGUgPSAnRWRpdCBBcnRpY2xlJwogICAgICBjb25zdCByb3V0ZSA9IE9iamVjdC5hc3NpZ24oe30sIHRoaXMudGVtcFJvdXRlLCB7IHRpdGxlOiBgJHt0aXRsZX0tJHt0aGlzLnBvc3RGb3JtLmlkfWAgfSkKICAgICAgdGhpcy4kc3RvcmUuZGlzcGF0Y2goJ3RhZ3NWaWV3L3VwZGF0ZVZpc2l0ZWRWaWV3Jywgcm91dGUpCiAgICB9LAogICAgc2V0UGFnZVRpdGxlKCkgewogICAgICBjb25zdCB0aXRsZSA9ICdFZGl0IEFydGljbGUnCiAgICAgIGRvY3VtZW50LnRpdGxlID0gYCR7dGl0bGV9IC0gJHt0aGlzLnBvc3RGb3JtLmlkfWAKICAgIH0sCiAgICBzdWJtaXRGb3JtKCkgewogICAgICBjb25zb2xlLmxvZyh0aGlzLnBvc3RGb3JtKQogICAgICB0aGlzLiRyZWZzLnBvc3RGb3JtLnZhbGlkYXRlKHZhbGlkID0+IHsKICAgICAgICBpZiAodmFsaWQpIHsKICAgICAgICAgIHRoaXMubG9hZGluZyA9IHRydWUKICAgICAgICAgIHRoaXMuJG5vdGlmeSh7CiAgICAgICAgICAgIHRpdGxlOiAn5oiQ5YqfJywKICAgICAgICAgICAgbWVzc2FnZTogJ+WPkeW4g+aWh+eroOaIkOWKnycsCiAgICAgICAgICAgIHR5cGU6ICdzdWNjZXNzJywKICAgICAgICAgICAgZHVyYXRpb246IDIwMDAKICAgICAgICAgIH0pCiAgICAgICAgICB0aGlzLnBvc3RGb3JtLnN0YXR1cyA9ICdwdWJsaXNoZWQnCiAgICAgICAgICB0aGlzLmxvYWRpbmcgPSBmYWxzZQogICAgICAgIH0gZWxzZSB7CiAgICAgICAgICBjb25zb2xlLmxvZygnZXJyb3Igc3VibWl0ISEnKQogICAgICAgICAgcmV0dXJuIGZhbHNlCiAgICAgICAgfQogICAgICB9KQogICAgfSwKICAgIGRyYWZ0Rm9ybSgpIHsKICAgICAgaWYgKHRoaXMucG9zdEZvcm0uY29udGVudC5sZW5ndGggPT09IDAgfHwgdGhpcy5wb3N0Rm9ybS50aXRsZS5sZW5ndGggPT09IDApIHsKICAgICAgICB0aGlzLiRtZXNzYWdlKHsKICAgICAgICAgIG1lc3NhZ2U6ICfor7floavlhpnlv4XopoHnmoTmoIfpopjlkozlhoXlrrknLAogICAgICAgICAgdHlwZTogJ3dhcm5pbmcnCiAgICAgICAgfSkKICAgICAgICByZXR1cm4KICAgICAgfQogICAgICB0aGlzLiRtZXNzYWdlKHsKICAgICAgICBtZXNzYWdlOiAn5L+d5a2Y5oiQ5YqfJywKICAgICAgICB0eXBlOiAnc3VjY2VzcycsCiAgICAgICAgc2hvd0Nsb3NlOiB0cnVlLAogICAgICAgIGR1cmF0aW9uOiAxMDAwCiAgICAgIH0pCiAgICAgIHRoaXMucG9zdEZvcm0uc3RhdHVzID0gJ2RyYWZ0JwogICAgfSwKICAgIGdldFJlbW90ZVVzZXJMaXN0KHF1ZXJ5KSB7CiAgICAgIHNlYXJjaFVzZXIocXVlcnkpLnRoZW4ocmVzcG9uc2UgPT4gewogICAgICAgIGlmICghcmVzcG9uc2UuZGF0YS5pdGVtcykgcmV0dXJuCiAgICAgICAgdGhpcy51c2VyTGlzdE9wdGlvbnMgPSByZXNwb25zZS5kYXRhLml0ZW1zLm1hcCh2ID0+IHYubmFtZSkKICAgICAgfSkKICAgIH0KICB9Cn0K"},{"version":3,"sources":["ArticleDetail.vue"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AA8EA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;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;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;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","file":"ArticleDetail.vue","sourceRoot":"src/views/example/components","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"]}]}