1 line
22 KiB
JSON
1 line
22 KiB
JSON
{"remainingRequest":"/Users/shuguang/Desktop/毕设/CodeMaster/CodeMaster/node_modules/vue-loader/lib/index.js??vue-loader-options!/Users/shuguang/Desktop/毕设/CodeMaster/CodeMaster/src/views/communtiy/Article.vue?vue&type=script&lang=js","dependencies":[{"path":"/Users/shuguang/Desktop/毕设/CodeMaster/CodeMaster/src/views/communtiy/Article.vue","mtime":1742646402776},{"path":"/Users/shuguang/Desktop/毕设/CodeMaster/CodeMaster/node_modules/cache-loader/dist/cjs.js","mtime":1743264595665},{"path":"/Users/shuguang/Desktop/毕设/CodeMaster/CodeMaster/node_modules/babel-loader/lib/index.js","mtime":1743264596348},{"path":"/Users/shuguang/Desktop/毕设/CodeMaster/CodeMaster/node_modules/cache-loader/dist/cjs.js","mtime":1743264595665},{"path":"/Users/shuguang/Desktop/毕设/CodeMaster/CodeMaster/node_modules/vue-loader/lib/index.js","mtime":1743264596512}],"contextDependencies":[],"result":[{"type":"Buffer","data":"base64:CmltcG9ydCBUYWdTZWxlY3QgZnJvbSAnLi4vLi4vY29tcG9uZW50cy9UYWdTZWxlY3QnOwppbXBvcnQgU3RhbmRhcmRGb3JtUm93IGZyb20gJy4uLy4uL2NvbXBvbmVudHMvU3RhbmRhcmRGb3JtUm93JzsKaW1wb3J0IEFydGljbGVMaXN0Q29udGVudCBmcm9tICcuLi8uLi9jb21wb25lbnRzL0FydGljbGVMaXN0Q29udGVudCc7CmltcG9ydCBJY29uVGV4dCBmcm9tICcuL2NvbXBvbmVudHMvSWNvblRleHQnOwpjb25zdCBUYWdTZWxlY3RPcHRpb24gPSBUYWdTZWxlY3QuT3B0aW9uOwpleHBvcnQgZGVmYXVsdCB7CiAgY29tcG9uZW50czogewogICAgVGFnU2VsZWN0LAogICAgVGFnU2VsZWN0T3B0aW9uLAogICAgU3RhbmRhcmRGb3JtUm93LAogICAgQXJ0aWNsZUxpc3RDb250ZW50LAogICAgSWNvblRleHQsCiAgfSwKICBkYXRhKCkgewogICAgcmV0dXJuIHsKCQkJdXNlckRhdGE6W10sCgkJCWltYWdlVXJsUmVnZXg6LyhodHRwW3NdPzpcL1wvW14oXHN8IildK1wuKHBuZ3xqcGd8anBlZ3xnaWZ8d2VicCkpL2dpLAoJCQljdXJyZW50OiAxLAoJCQlwYWdlU2l6ZTogOCwKICAgICAgbG9hZGluZzogdHJ1ZSwKICAgICAgbG9hZGluZ01vcmU6IGZhbHNlLAogICAgICBkYXRhOiBbXSwKCQkJb3JpZ2luYWxVc2VyczogW10sCgkJCXRvdGFsOiAwLAogICAgICBmb3JtOiB0aGlzLiRmb3JtLmNyZWF0ZUZvcm0odGhpcyksCiAgICB9OwogIH0sCiAgbW91bnRlZCgpIHsKCQl0aGlzLmdldFVzZXIoKSAKCQl0aGlzLiR3YXRjaCgoKSA9PiBbdGhpcy5wYWdlU2l6ZSwgdGhpcy5jdXJyZW50XSwgdGhpcy5nZXRMaXN0LCB7IGltbWVkaWF0ZTogdHJ1ZSB9KTsKICB9LGZpbHRlcnM6IHsKICAgIGZvcm1hdFRpbWU6IGZ1bmN0aW9uKHZhbHVlKSB7CiAgICAgICAgLy8g5Zyo6L+Z6YeM57yW5YaZ5pe26Ze05qC85byP5YyW6YC76L6R77yM5L6L5aaC77yaCiAgICAgICAgY29uc3QgcGFyc2VkVGltZSA9IG5ldyBEYXRlKHZhbHVlKTsKICAgICAgICBjb25zdCB5ZWFyID0gcGFyc2VkVGltZS5nZXRGdWxsWWVhcigpOwogICAgICAgIGNvbnN0IG1vbnRoID0gU3RyaW5nKHBhcnNlZFRpbWUuZ2V0TW9udGgoKSArIDEpLnBhZFN0YXJ0KDIsICcwJyk7CiAgICAgICAgY29uc3QgZGF5ID0gU3RyaW5nKHBhcnNlZFRpbWUuZ2V0RGF0ZSgpKS5wYWRTdGFydCgyLCAnMCcpOwogICAgICAgIHJldHVybiBgJHt5ZWFyfS0ke21vbnRofS0ke2RheX1gOwogICAgfQp9LApjb21wdXRlZDp7CglzZWFyY2hPcHRpb25zKCkgewogICAgICByZXR1cm4gY3JlYXRlU2VhcmNoT3B0aW9ucy5jYWxsKHRoaXMpOwogICAgfSwKCQlwYWdpbmF0aW9uKCkgewogICAgICByZXR1cm4gewogICAgICAgIGN1cnJlbnQ6IHRoaXMuY3VycmVudCwKICAgICAgICBwYWdlU2l6ZTogdGhpcy5wYWdlU2l6ZSwKICAgICAgICB0b3RhbDogdGhpcy50b3RhbCwKICAgICAgICBzaG93U2l6ZUNoYW5nZXI6IHRydWUsCiAgICAgICAgcGFnZVNpemVPcHRpb25zOiBbJzgnLCAnOScsICcxMCcsICcyMCddLAogICAgICAgIHNob3dRdWlja0p1bXBlcjogdHJ1ZSwKICAgICAgICBzaG93VG90YWw6IHRvdGFsID0+IGBUb3RhbCAke3RvdGFsfSBpdGVtc2AsCiAgICAgICAgb25DaGFuZ2U6IHRoaXMuY2hhbmdlUGFnZSwKICAgICAgICBvblNob3dTaXplQ2hhbmdlOiB0aGlzLmNoYW5nZVBhZ2UKICAgICAgfTsKICAgIH0sCn0sCiAgbWV0aG9kczogeyBleHRyYWN0SW1hZ2VVcmwoY29udGVudCkgewogICAgICAvLyDlrprkuYnljLnphY3lm77niYdVUkznmoTmraPliJnooajovr7lvI8KICAgICAgY29uc3QgaW1hZ2VVcmxSZWdleCA9IC8oaHR0cFtzXT86XC9cL1teKFxzfCIpXStcLihwbmd8anBnfGpwZWd8Z2lmfHdlYnApKS9naTsKICAgICAgLy8g5L2/55So5q2j5YiZ6KGo6L6+5byP5Yy56YWN5YaF5a655Lit55qE5Zu+54mHVVJMCiAgICAgIGNvbnN0IG1hdGNoZXMgPSBjb250ZW50Lm1hdGNoKGltYWdlVXJsUmVnZXgpOwogICAgICAvLyDlpoLmnpzmib7liLDljLnphY3pobnvvIzov5Tlm57nrKzkuIDlvKDlm77niYfnmoRVUkwKICAgICAgaWYgKG1hdGNoZXMgJiYgbWF0Y2hlcy5sZW5ndGggPiAwKSB7CiAgICAgICAgcmV0dXJuIG1hdGNoZXNbMF07CiAgICAgIH0KCQkJLy8g6YG/5YWN5rWP6KeI5Zmo57yT5a2YCgkJCWNvbnN0IHJhbmRvbVNlZWQgPSBNYXRoLmZsb29yKE1hdGgucmFuZG9tKCkgKiAxMDAwMCk7ICAvLyDnlJ/miJDkuIDkuKow5YiwOTk5OeS5i+mXtOeahOmaj+acuuaVsAogICAgICAvLyDlpoLmnpzmsqHmnInmib7liLDljLnphY3nmoTlm77niYfvvIzlj6/ku6Xkvb/nlKjpmo/mnLrlm77niYcKICAgICAgcmV0dXJuICdodHRwczovL2FwaS43NTg1Lm5ldC5jbi9iaW5nL2FwaS5waHA/cmFuZD0xPycrcmFuZG9tU2VlZDsKICAgIH0sCgkJYXN5bmMgZ2V0SW1hZ2UoYXJ0aWNsZUlkKSB7CiAgdHJ5IHsKICAgIGNvbnN0IHJlcyA9IGF3YWl0IHRoaXMuJGFwaS5BbGxBcnRpY2xlKCk7CiAgICBsZXQgY29udGVudCA9IHJlcy5kYXRhLmZpbHRlcihpdGVtID0+IGl0ZW0uYXJ0aWNsZUlkID09PSBhcnRpY2xlSWQpOwoKICAgIGlmIChjb250ZW50Lmxlbmd0aCA9PT0gMCkgewogICAgICBjb25zb2xlLmxvZygi5pyq5om+5Yiw5a+55bqU5paH56ug5YaF5a65Iik7CiAgICAgIHJldHVybiBudWxsOyAvLyDov5Tlm57nqbrlgLzvvIzooajnpLrmnKrmib7liLDlsIHpnaLlm77niYcKICAgIH0KCiAgICBjb25zdCBpbWFnZVVybFJlZ2V4ID0gLyhodHRwW3NdPzpcL1wvW14oXHN8IildK1wuKHBuZ3xqcGd8anBlZ3xnaWZ8d2VicCkpL2dpOwogICAgY29uc3QgaW1hZ2VzID0gY29udGVudFswXS5hcnRpY2xlQ29udGVudC5tYXRjaChpbWFnZVVybFJlZ2V4KTsKCiAgICBpZiAoaW1hZ2VzICYmIGltYWdlcy5sZW5ndGggPiAwKSB7CiAgICAgIGNvbnNvbGUubG9nKCLmib7liLDlsIHpnaLlm77niYfpk77mjqU6IiwgaW1hZ2VzWzBdKTsKICAgICAgcmV0dXJuIGltYWdlc1swXTsgLy8g6L+U5Zue56ys5LiA5byg5Yy56YWN5Yiw55qE5Zu+54mH6ZO+5o6lCiAgICB9IGVsc2UgewogICAgICBjb25zb2xlLmxvZygi5pyq5om+5Yiw5Zu+54mH6ZO+5o6lIik7CiAgICAgIHJldHVybiBudWxsOyAvLyDov5Tlm57nqbrlgLzvvIzooajnpLrmnKrmib7liLDlsIHpnaLlm77niYcKICAgIH0KICB9IGNhdGNoIChlcnJvcikgewogICAgY29uc29sZS5lcnJvcigi6I635Y+W5paH56ug5YaF5a655aSx6LSlOiIsIGVycm9yKTsKICAgIHJldHVybiBudWxsOyAvLyDov5Tlm57nqbrlgLzvvIzooajnpLrmnKrmib7liLDlsIHpnaLlm77niYcKICB9Cn0sCgkJLy8g5pCc57SiCiAgICBzZWFyY2goKSB7CiAgICAgIHRoaXMuY3VycmVudCA9IDE7CiAgICAgIHRoaXMuZ2V0TGlzdCgpOwogICAgfSwKCQkvLyDliIbpobXliIfmjaIKCQljaGFuZ2VQYWdlKGN1cnJlbnQsIHBhZ2VTaXplKSB7CiAgICAgIHRoaXMuY3VycmVudCA9IGN1cnJlbnQ7CiAgICAgIHRoaXMucGFnZVNpemUgPSBwYWdlU2l6ZTsKICAgICAgdGhpcy5nZXRMaXN0KCk7CiAgICB9LAogICAgaGFuZGxlQ2hhbmdlKHZhbHVlKSB7CiAgICAgIGNvbnNvbGUubG9nKGBzZWxlY3RlZCAke3ZhbHVlfWApOwogICAgfSwKCQlnZXRVc2VyKCkgewogICAgICB0aGlzLiRhcGkuQWxsVXNlcigpLnRoZW4ocmVzID0+IHsKICAgICAgY29uc3QgdXNlcnMgPSByZXMuZGF0YTsKICAgIGNvbnN0IHVzZXJNYXAgPSB7fTsKICAgIHVzZXJzLmZvckVhY2godXNlciA9PiB7CiAgICAgIHVzZXJNYXBbdXNlci51c2VySWRdID0gdXNlci51c2VyTmFtZTsKICAgIH0pOwogICAgdGhpcy51c2VyRGF0YSA9IHVzZXJNYXA7CgkJY29uc29sZS5sb2codGhpcy51c2VyRGF0YSkKICB9KS5jYXRjaChlcnJvciA9PiB7CiAgICBjb25zb2xlLmVycm9yKGVycm9yKTsKICB9KTsKfSwKICAgIGFzeW5jIGdldExpc3QoKSB7CiAgdHJ5IHsKICAgIC8vIOW8gOWni+WKoOi9ve+8jOaYvuekuuWKoOi9veaMh+ekuuWZqAogICAgdGhpcy5sb2FkaW5nID0gdHJ1ZTsKCQl0aGlzLnF1ZXJ5ID0gdGhpcy4kcmVmcy5zZWFyY2hGb3JtLmdldFJlc3VsdCgpOwogICAgLy8g5L2/55SoIGF3YWl0IOebtOaOpeetieW+heW8guatpeaTjeS9nOeahOe7k+aenAogICAgY29uc3QgcmVzID0gYXdhaXQgdGhpcy4kYXBpLkFsbEFydGljbGUoKTsKICAgIC8vIOaJk+WNsOWTjeW6lOe7k+aenAoJCXRoaXMub3JpZ2luYWxVc2VycyA9IHJlcy5kYXRhCgkJdGhpcy5maWx0ZXJVc2VycygpOyAvLyDosIPnlKjov4fmu6TnlKjmiLfmlrnms5UKICAgIGNvbnNvbGUubG9nKCdyZXMnLCByZXMuZGF0YSk7CiAgICAvLyDkvb/nlKjlk43lupTnu5Pmnpzmm7TmlrDmlbDmja4KCQl0aGlzLnRvdGFsID0gcmVzLmRhdGEubGVuZ3RoOwogIH0gY2F0Y2ggKGVycm9yKSB7CiAgICAvLyDlpITnkIblj6/og73lh7rnjrDnmoTplJnor68KICAgIGNvbnNvbGUuZXJyb3IoIuiOt+WPluaWh+eroOWIl+ihqOWksei0pToiLCBlcnJvcik7CiAgfSBmaW5hbGx5IHsKICAgIC8vIOaXoOiuuuaIkOWKn+i/mOaYr+Wksei0pe+8jOacgOWQjumDveS8muaJp+ihjO+8jOmakOiXj+WKoOi9veaMh+ekuuWZqAogICAgdGhpcy5sb2FkaW5nID0gZmFsc2U7CiAgfQp9LAovLyDmkJzntKIJCQpmaWx0ZXJVc2VycygpIHsKICAJCWxldCBmaWx0ZXJlZFVzZXJzID0gdGhpcy5vcmlnaW5hbFVzZXJzLnNsaWNlKCk7IC8vIOWkjeWItuWOn+Wni+eUqOaIt+aVsOaNrgoJCQljb25zb2xlLmxvZyh0aGlzLnF1ZXJ5KQogIAlpZiAodGhpcy5xdWVyeS5hcnRpY2xlVGl0bGUpIHsKICAgIGZpbHRlcmVkVXNlcnMgPSBmaWx0ZXJlZFVzZXJzLmZpbHRlcih1c2VyID0+IHVzZXIuYXJ0aWNsZVRpdGxlLmluY2x1ZGVzKHRoaXMucXVlcnkuYXJ0aWNsZVRpdGxlKSk7CiAgCX0KCiAgaWYgKHRoaXMucXVlcnkudXNlck5hbWUpIHsKICAgIGZpbHRlcmVkVXNlcnMgPSBmaWx0ZXJlZFVzZXJzLmZpbHRlcih1c2VyID0+IHVzZXIudXNlcklkLmluY2x1ZGVzKHRoaXMucXVlcnkudXNlck5hbWUpKTsKICB9CglpZiAodGhpcy5xdWVyeS5hcnRpY2xlQ29udGVudCkgewogICAgZmlsdGVyZWRVc2VycyA9IGZpbHRlcmVkVXNlcnMuZmlsdGVyKHVzZXIgPT4gdXNlci5hcnRpY2xlQ29udGVudC5pbmNsdWRlcyh0aGlzLnF1ZXJ5LmFydGljbGVDb250ZW50KSk7CiAgfQogIGNvbnN0IHN0YXJ0ID0gKHRoaXMuY3VycmVudCAtIDEpICogdGhpcy5wYWdlU2l6ZTsKICBjb25zdCBlbmQgPSBzdGFydCArIHRoaXMucGFnZVNpemU7CiAgdGhpcy5kYXRhID0gZmlsdGVyZWRVc2Vycy5zbGljZShzdGFydCwgZW5kKTsKfSwKICB9LAp9OwovLyDliJvlu7rmkJzntKLpgInpobkKZnVuY3Rpb24gY3JlYXRlU2VhcmNoT3B0aW9ucygpIHsKICByZXR1cm4gWwogICAgewogICAgICBsYWJlbDogJ+agh+mimCcsCiAgICAgIGtleTogJ2FydGljbGVUaXRsZScsCiAgICAgIGRlZmF1bHQ6ICcnLAogICAgICBjb21wb25lbnQ6ICdpbnB1dCcsCiAgICB9LAogICAgewogICAgICBsYWJlbDogJ+S9nOiAhScsCiAgICAgIGtleTogJ3VzZXJOYW1lJywKICAgICAgZGVmYXVsdDogJycsCiAgICAgIGNvbXBvbmVudDogJ2lucHV0JywKICAgIH0sCgkJewogICAgICBsYWJlbDogJ+WGheWuuScsCiAgICAgIGtleTogJ2FydGljbGVDb250ZW50JywKICAgICAgZGVmYXVsdDogJycsCiAgICAgIGNvbXBvbmVudDogJ2lucHV0JywKICAgIH0sCiAgICB7CiAgICAgIGxhYmVsOiAn5pe26Ze0JywKICAgICAga2V5OiAncHVibGlzaFRpbWUnLAogICAgICBkZWZhdWx0OiAoKSA9PiBbXSwKICAgICAgbWFwcGVyOiAoeyBwdWJsaXNoVGltZSB9KSA9PiBwdWJsaXNoVGltZS5qb2luKCd+JyksCiAgICAgIGNvbXBvbmVudDogJ3JhbmdlLXBpY2tlcicsCiAgICB9LAogICAgCiAgXTsKfQo="},{"version":3,"sources":["Article.vue"],"names":[],"mappings":";AAyEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;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;;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;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;;AAEA;AACA","file":"Article.vue","sourceRoot":"src/views/communtiy","sourcesContent":["<template>\n <!-- 主容器 -->\n <div>\n\t\t<!-- 搜索表单 -->\n <SearchForm\n ref=\"searchForm\"\n :loading=\"loading\"\n :options=\"searchOptions\"\n @search=\"search\"\n @reset=\"search\"\n />\n <!-- 标签选择器 -->\n <a-card :bordered=\"false\" class=\"ant-pro-components-tag-select\" style=\"margin-bottom:-82px\"> \n <a-form :form=\"form\" layout=\"inline\">\n <!-- 类目选择 -->\n <standard-form-row title=\"所属类目\" block style=\"padding-bottom: 11px;\">\n <a-form-item>\n <!-- 标签选择器组件 -->\n <tag-select>\n \t\t\t\t\t<!-- 类目选项 -->\n\t\t\t\t\t\t<!-- 全部选项 -->\n \t\t\t\t\t<tag-select-option value=\"全部\" @click.native=\"getList\"><h3><a-icon type=\"audit\" />全部</h3></tag-select-option>\n \t\t\t\t<tag-select-option value=\"公告\" @click.native=\"search('公告')\"><h3><a-icon type=\"audit\" />公告</h3></tag-select-option>\n \t\t\t\t<tag-select-option value=\"交流\" @click.native=\"search('交流')\"><h3><a-icon type=\"audit\" />交流</h3></tag-select-option>\n \t\t\t\t<tag-select-option value=\"讨论\" @click.native=\"search('讨论')\"><h3><a-icon type=\"audit\" />讨论</h3></tag-select-option>\n </tag-select>\n </a-form-item>\n </standard-form-row>\n </a-form>\n </a-card>\n <!-- 文章列表 -->\n <a-card style=\"margin-top: 24px;\" :bordered=\"false\">\n <a-list\n size=\"large\"\n rowKey=\"id\"\n :loading=\"loading\"\n itemLayout=\"vertical\"\n :dataSource=\"data\"\n\t\t\t\t:pagination=\"pagination\"\n\t\t\t\t@change=\"changePage\"\n >\n\t\t\t<div class=\"side-brick\">\t\t\t\n\t\t\t\t<ul class=\"brick-box\">\n\t\t\t\t\t<li class=\"brick-list\" v-for=\"item in data\">\n\t\t\t\t\t\t<router-link :to=\"'/pages?id=' + item.articleId\">\n\t\t\t\t <a class=\"item-box-retina\">\n\t\t\t\t\t <figure class=\"item-box-img\">\n\t\t\t\t\t\t\t<!-- 文章图片 -->\n\t\t\t\t\t\t\t<!-- 调用extractImageUrl方法并传递文章内容 -->\n\t\t\t\t\t\t\t<img class=\"lazy\" :src=\"extractImageUrl(item.articleContent)\" alt=\"Article Cover\">\n\t\t\t\t\t\t\t<!-- <img class=\"lazy\" :src=\"item.articleContent.match(imageUrlRegex)\" > -->\n\t\t\t\t\t\t\t<!-- 文章标题 -->\n\t\t\t\t\t\t\t<h3>{{item.articleTitle}}</h3>\n\t\t\t\t\t\t</figure>\n\t\t\t\t\t\t<!-- 文章内容 -->\n\t\t\t\t\t <p class=\"item-user-info\" v-html=\"item.articleContent\"></p>\n\t\t\t\t\t <p class=\"item-user-author\">\n\t\t\t\t\t\t <img src=\"/logo.png\" :alt=\"userData[item.userId]\">\n\t\t\t\t\t\t\t\t<!-- 文章作者 -->\n\t\t\t\t\t\t <span class=\"comment-username\">{{userData[item.userId]}}<span class=\"autlv aut-5 vs-level\">V</span></span>\n\t\t\t\t\t\t <span class=\"comment-tip\"><i class=\"icon font-time\"></i>{{item.publishTime | formatTime}}</span>\n\t\t\t\t\t </p>\n\t\t\t\t </a>\n\t\t\t\t\t</router-link>\n\t\t\t </li>\t\t\t\n\t\t</ul>\t\n\t</div>\n </a-list>\n </a-card>\n </div>\n</template>\n\n<script>\nimport TagSelect from '../../components/TagSelect';\nimport StandardFormRow from '../../components/StandardFormRow';\nimport ArticleListContent from '../../components/ArticleListContent';\nimport IconText from './components/IconText';\nconst TagSelectOption = TagSelect.Option;\nexport default {\n components: {\n TagSelect,\n TagSelectOption,\n StandardFormRow,\n ArticleListContent,\n IconText,\n },\n data() {\n return {\n\t\t\tuserData:[],\n\t\t\timageUrlRegex:/(http[s]?:\\/\\/[^(\\s|\")]+\\.(png|jpg|jpeg|gif|webp))/gi,\n\t\t\tcurrent: 1,\n\t\t\tpageSize: 8,\n loading: true,\n loadingMore: false,\n data: [],\n\t\t\toriginalUsers: [],\n\t\t\ttotal: 0,\n form: this.$form.createForm(this),\n };\n },\n mounted() {\n\t\tthis.getUser() \n\t\tthis.$watch(() => [this.pageSize, this.current], this.getList, { immediate: true });\n },filters: {\n formatTime: function(value) {\n // 在这里编写时间格式化逻辑,例如:\n const parsedTime = new Date(value);\n const year = parsedTime.getFullYear();\n const month = String(parsedTime.getMonth() + 1).padStart(2, '0');\n const day = String(parsedTime.getDate()).padStart(2, '0');\n return `${year}-${month}-${day}`;\n }\n},\ncomputed:{\n\tsearchOptions() {\n return createSearchOptions.call(this);\n },\n\t\tpagination() {\n return {\n current: this.current,\n pageSize: this.pageSize,\n total: this.total,\n showSizeChanger: true,\n pageSizeOptions: ['8', '9', '10', '20'],\n showQuickJumper: true,\n showTotal: total => `Total ${total} items`,\n onChange: this.changePage,\n onShowSizeChange: this.changePage\n };\n },\n},\n methods: { extractImageUrl(content) {\n // 定义匹配图片URL的正则表达式\n const imageUrlRegex = /(http[s]?:\\/\\/[^(\\s|\")]+\\.(png|jpg|jpeg|gif|webp))/gi;\n // 使用正则表达式匹配内容中的图片URL\n const matches = content.match(imageUrlRegex);\n // 如果找到匹配项,返回第一张图片的URL\n if (matches && matches.length > 0) {\n return matches[0];\n }\n\t\t\t// 避免浏览器缓存\n\t\t\tconst randomSeed = Math.floor(Math.random() * 10000); // 生成一个0到9999之间的随机数\n // 如果没有找到匹配的图片,可以使用随机图片\n return 'https://api.7585.net.cn/bing/api.php?rand=1?'+randomSeed;\n },\n\t\tasync getImage(articleId) {\n try {\n const res = await this.$api.AllArticle();\n let content = res.data.filter(item => item.articleId === articleId);\n\n if (content.length === 0) {\n console.log(\"未找到对应文章内容\");\n return null; // 返回空值,表示未找到封面图片\n }\n\n const imageUrlRegex = /(http[s]?:\\/\\/[^(\\s|\")]+\\.(png|jpg|jpeg|gif|webp))/gi;\n const images = content[0].articleContent.match(imageUrlRegex);\n\n if (images && images.length > 0) {\n console.log(\"找到封面图片链接:\", images[0]);\n return images[0]; // 返回第一张匹配到的图片链接\n } else {\n console.log(\"未找到图片链接\");\n return null; // 返回空值,表示未找到封面图片\n }\n } catch (error) {\n console.error(\"获取文章内容失败:\", error);\n return null; // 返回空值,表示未找到封面图片\n }\n},\n\t\t// 搜索\n search() {\n this.current = 1;\n this.getList();\n },\n\t\t// 分页切换\n\t\tchangePage(current, pageSize) {\n this.current = current;\n this.pageSize = pageSize;\n this.getList();\n },\n handleChange(value) {\n console.log(`selected ${value}`);\n },\n\t\tgetUser() {\n this.$api.AllUser().then(res => {\n const users = res.data;\n const userMap = {};\n users.forEach(user => {\n userMap[user.userId] = user.userName;\n });\n this.userData = userMap;\n\t\tconsole.log(this.userData)\n }).catch(error => {\n console.error(error);\n });\n},\n async getList() {\n try {\n // 开始加载,显示加载指示器\n this.loading = true;\n\t\tthis.query = this.$refs.searchForm.getResult();\n // 使用 await 直接等待异步操作的结果\n const res = await this.$api.AllArticle();\n // 打印响应结果\n\t\tthis.originalUsers = res.data\n\t\tthis.filterUsers(); // 调用过滤用户方法\n console.log('res', res.data);\n // 使用响应结果更新数据\n\t\tthis.total = res.data.length;\n } catch (error) {\n // 处理可能出现的错误\n console.error(\"获取文章列表失败:\", error);\n } finally {\n // 无论成功还是失败,最后都会执行,隐藏加载指示器\n this.loading = false;\n }\n},\n// 搜索\t\t\nfilterUsers() {\n \t\tlet filteredUsers = this.originalUsers.slice(); // 复制原始用户数据\n\t\t\tconsole.log(this.query)\n \tif (this.query.articleTitle) {\n filteredUsers = filteredUsers.filter(user => user.articleTitle.includes(this.query.articleTitle));\n \t}\n\n if (this.query.userName) {\n filteredUsers = filteredUsers.filter(user => user.userId.includes(this.query.userName));\n }\n\tif (this.query.articleContent) {\n filteredUsers = filteredUsers.filter(user => user.articleContent.includes(this.query.articleContent));\n }\n const start = (this.current - 1) * this.pageSize;\n const end = start + this.pageSize;\n this.data = filteredUsers.slice(start, end);\n},\n },\n};\n// 创建搜索选项\nfunction createSearchOptions() {\n return [\n {\n label: '标题',\n key: 'articleTitle',\n default: '',\n component: 'input',\n },\n {\n label: '作者',\n key: 'userName',\n default: '',\n component: 'input',\n },\n\t\t{\n label: '内容',\n key: 'articleContent',\n default: '',\n component: 'input',\n },\n {\n label: '时间',\n key: 'publishTime',\n default: () => [],\n mapper: ({ publishTime }) => publishTime.join('~'),\n component: 'range-picker',\n },\n \n ];\n}\n</script>\n\n<style lang=\"less\" scoped>\n.ant-pro-components-tag-select {\n :deep(.ant-pro-tag-select .ant-tag) {\n margin-right: 24px;\n padding: 0 8px;\n font-size: 14px;\n }\n}\n.ant-pro-components-tag-select .ant-tag-checkable-checked {\n color: black; /* 设置为你喜欢的颜色 */\n}\n.list-articles-trigger {\n margin-left: 12px;\n}\n.box-show, .post-list {\n position: relative;\n background: rgba(192, 111, 111, 0.95);\n border: 1px solid rgba(221, 221, 221, 0.28);\n padding: 0 20px;\n border-radius: 18px;\n margin-bottom: 20px;\n -webkit-box-shadow: 0px 0px 10px -2px rgba(158,158,158,0.2);\n box-shadow: 0px 0px 10px -2px rgba(158,158,158,0.2);\n}article, input, textarea, b, ul, li, i, button, a, .swiper-button-next, .swiper-button-prev {\n -moz-transition: ease-in-out 0.3s;\n -webkit-transition: ease-in-out 0.3s;\n -o-transition: ease-in-out 0.3s;\n -ms-transition: ease-in-out 0.3s;\n transition: ease-in-out 0.3s;\n}article, aside, details, figcaption, figure, footer, header, hgroup, main, menu, nav, section, summary {\n display: block;\n}html, body, div, span, object, iframe, h1, h2, h3, h4, h5, h6, p, blockquote, pre, abbr, address, cite, code, del, dfn, em, img, ins, kbd, q, samp, small, strong, sub, sup, var, b, i, dl, dt, dd, ol, ul, li, fieldset, form, label, legend, table, caption, tbody, tfoot, thead, tr, th, td, article, aside, canvas, details, figcaption, figure, footer, header, hgroup, menu, nav, section, summary, time, mark, audio, video {\n margin: 0;\n padding: 0;\n outline: 0;\n border: 0;\n background: transparent;\n vertical-align: baseline;\n font-size: 100%;\n}article {\n display: block;\n unicode-bidi: isolate;\n}body {\n color: #666;\n font-family: \"Microsoft Yahei\", Helvetica, Arial, sans-serif;\n font-size: 14px;\n line-height: 1.42857143;\n background-color: #f5f5f5;\n background-repeat: no-repeat;\n background-attachment: fixed;\n background-position: top center;\n}\n.side-title-wrap {\n margin-top: 15px;\n padding-bottom: 15px;\n display: block;\n white-space: nowrap;\n text-overflow: ellipsis;\n overflow: hidden;\n position: relative;\n border-bottom: 1px solid #ddd;\n}.side-title-wrap h3.widget-title {\n font-size: 16px;\n color: #333;\n margin-right: 16px;\n display: inline-block;\n vertical-align: bottom;\n padding-left: 10px;\n margin-left: 0px;\n border-left: 4px solid #3690cf;\n font-weight: 400;\n}.side-title-wrap span, .side-title-wrap span.suburl a {\n font-size: 12px;\n color: #999;\n}.brick-box {\n margin-right: -2%;\n margin-top: 20px;\n overflow: hidden;\n}li.brick-list {\n float: left;\n position: relative;\n width: 23%;\n margin-right: 2%;\n margin-bottom: 15px;\n border-radius: 4px;\n overflow: hidden;\n transition: all .3s ease;\n}figure.item-box-img {\n height: 190px;\n position: relative;\n overflow: hidden;\n}p.item-user-info {\n height: 44px;\n margin-top: 10px;\n line-height: 1.6;\n display: -webkit-box;\n -webkit-box-orient: vertical;\n -webkit-line-clamp: 2;\n overflow: hidden;\n white-space: normal;\n}p.item-user-author {\n overflow: hidden;\n line-height: 32px;\n margin-top: 10px;\n padding-top: 10px;\n position: relative;\n}\n.side-brick {\n margin-top: 20px;\n overflow: hidden;\n background: rgba(255, 255, 255, 0.68);\n border: 1px solid rgba(221, 221, 221, 0.28);\n padding: 0 20px;\n border-radius: 18px;\n margin-bottom: 20px;\n -webkit-box-shadow: 0px 0px 10px -2px rgba(158,158,158,0.2);\n box-shadow: 0px 0px 10px -2px rgba(158,158,158,0.2);\n}\n</style>\n"]}]} |