CASCI.vue 14 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473
  1. <style lang="scss" scoped>
  2. </style>
  3. <template>
  4. <section>
  5. <p>CASCI数据统计</p>
  6. <div class="content">
  7. <div class="filter">
  8. <el-form
  9. size="small"
  10. label-width="70px"
  11. :inline="true"
  12. label-position="left"
  13. >
  14. <el-form-item label="">
  15. <el-input
  16. clearable
  17. placeholder="请输入期刊名称"
  18. v-model="form.name"
  19. @clear="getData"
  20. ></el-input>
  21. </el-form-item>
  22. <el-form-item>
  23. <el-radio-group v-model="form.date">
  24. <el-radio-button label="day">日报</el-radio-button>
  25. <el-radio-button label="week">周报</el-radio-button>
  26. <el-radio-button label="month">月报</el-radio-button>
  27. </el-radio-group>
  28. </el-form-item>
  29. <el-form-item v-if="form.date == 'day'">
  30. <el-date-picker
  31. v-model="form.day_value"
  32. type="date"
  33. value-format="yyyy-MM-dd"
  34. :picker-options="pickerOptions"
  35. >
  36. </el-date-picker>
  37. </el-form-item>
  38. <el-form-item v-if="form.date == 'week'">
  39. <el-select style="width:220px" v-model="form.week_value" placeholder="选择周">
  40. <el-option
  41. v-for="item in weeks"
  42. :key="item"
  43. :label="item"
  44. :value="item">
  45. </el-option>
  46. </el-select>
  47. </el-form-item>
  48. <el-form-item v-if="form.date == 'month'">
  49. <el-date-picker style="width:220px"
  50. v-model="form.month_value"
  51. type="month"
  52. value-format="yyyy-MM"
  53. placeholder="选择月"
  54. >
  55. </el-date-picker>
  56. </el-form-item>
  57. <el-form-item>
  58. <el-button type="primary" @click="search">搜索</el-button>
  59. </el-form-item>
  60. <el-form-item style="float: right">
  61. <el-button
  62. @click="download"
  63. plain
  64. icon="el-icon-download"
  65. type="primary"
  66. >导出</el-button
  67. >
  68. </el-form-item>
  69. </el-form>
  70. </div>
  71. <el-table
  72. class="table"
  73. :data="list"
  74. height="57vh"
  75. border
  76. v-loading="loading"
  77. default-expand-all
  78. row-key="id"
  79. style="width: 100%"
  80. @sort-change="changeTableSort"
  81. >
  82. <el-table-column prop="rank" width="80" label="排名"> </el-table-column>
  83. <el-table-column prop="journal_img" label="期刊封面" width="120">
  84. <template slot-scope="scope">
  85. <img
  86. :src="scope.row.journal_img"
  87. alt=""
  88. width="80"
  89. style="margin: 5px"
  90. />
  91. </template>
  92. </el-table-column>
  93. <el-table-column prop="journal_name" label="期刊名称">
  94. </el-table-column>
  95. <el-table-column
  96. prop="article_count"
  97. label="统计资源数量(总)"
  98. sortable="custom"
  99. >
  100. </el-table-column>
  101. <el-table-column
  102. prop="article_count_mp"
  103. label="统计资源数量(公众号)"
  104. sortable="custom"
  105. >
  106. </el-table-column>
  107. <el-table-column
  108. prop="article_count_xcx"
  109. label="统计资源数量(小程序)"
  110. sortable="custom"
  111. >
  112. </el-table-column>
  113. <el-table-column
  114. prop="read_num"
  115. label="总阅读量(次))"
  116. sortable="custom"
  117. >
  118. </el-table-column>
  119. <el-table-column
  120. prop="read_num_mp"
  121. label="公众号阅读量(次)"
  122. sortable="custom"
  123. >
  124. </el-table-column>
  125. <el-table-column
  126. prop="read_num_xcx"
  127. label="小程序阅读量(次)"
  128. sortable="custom"
  129. >
  130. </el-table-column>
  131. <el-table-column
  132. prop="zhuanfa_num"
  133. label="总转发量量(次)"
  134. sortable="custom"
  135. >
  136. </el-table-column>
  137. <el-table-column
  138. prop="zhuanfa_num_mp"
  139. label="公众号转发量(次)"
  140. sortable="custom"
  141. >
  142. </el-table-column>
  143. <el-table-column
  144. prop="zhuanfa_num_xcx"
  145. label="小程序转发量(次)"
  146. sortable="custom"
  147. >
  148. </el-table-column>
  149. <el-table-column
  150. prop="casci"
  151. label="CASCI"
  152. sortable="custom"
  153. fixed="right"
  154. >
  155. </el-table-column>
  156. <el-table-column
  157. prop="zip"
  158. width="150"
  159. align="center"
  160. label="操作"
  161. fixed="right"
  162. >
  163. <template slot-scope="scope">
  164. <el-button type="text" @click="showCASCI(scope.row)"
  165. >查看</el-button
  166. >
  167. </template>
  168. </el-table-column>
  169. </el-table>
  170. <Page
  171. ref="pageButton"
  172. :current="form.page"
  173. :page_size="form.page_size"
  174. :total="total"
  175. @pageChange="gopage"
  176. />
  177. <!--二维码上传-->
  178. <el-dialog
  179. class="fu-dialog"
  180. :title="dialogTitle"
  181. :close-on-click-modal="false"
  182. :visible.sync="dialogVisible"
  183. >
  184. <el-form
  185. size="small"
  186. class="preview"
  187. :inline="false"
  188. label-width="100px"
  189. :model="form1"
  190. ref="form1"
  191. >
  192. <el-form-item label="上传二维码:" prop="img">
  193. <el-upload
  194. class="avatar-uploader"
  195. action="/api/admin/uploadfile"
  196. :show-file-list="false"
  197. :on-success="handleAvatarSuccess"
  198. >
  199. <img v-if="form1.qrcode" :src="form1.qrcode" class="avatar" />
  200. <i v-else class="el-icon-plus avatar-uploader-icon"></i>
  201. </el-upload>
  202. <p v-if="form1.qrcode" class="del" @click="delImg">删除</p>
  203. <!-- <span style="font-size: 12px; color: #999999"
  204. >建议图片尺寸为:210*160</span
  205. > -->
  206. </el-form-item>
  207. </el-form>
  208. <span slot="footer" class="dialog-footer">
  209. <el-button
  210. size="small"
  211. type="normal"
  212. @click="(dialogVisible = false), (form1 = {})"
  213. >取消</el-button
  214. >
  215. <el-button size="small" type="primary" @click="save">确 定</el-button>
  216. </span>
  217. </el-dialog>
  218. <el-dialog
  219. class="fu-dialog"
  220. title="导入期刊"
  221. width="400px"
  222. :close-on-click-modal="false"
  223. :visible.sync="dialogVisible1"
  224. >
  225. <el-upload
  226. class="upload-demo"
  227. action="/api/admin/uploadfile"
  228. :show-file-list="false"
  229. :on-success="handleAvatarSuccess1"
  230. >
  231. <el-button size="small" type="primary">点击上传</el-button>
  232. <div slot="tip" class="el-upload__tip">
  233. 只能上传.xls/.xlsx文件,且不超过500M
  234. </div>
  235. </el-upload>
  236. <div>{{ file }}</div>
  237. <span slot="footer" class="dialog-footer">
  238. <el-button size="small" type="normal" @click="dialogVisible1 = false"
  239. >取消</el-button
  240. >
  241. <el-button size="small" type="primary" @click="upload"
  242. >确 定</el-button
  243. >
  244. </span>
  245. </el-dialog>
  246. </div>
  247. </section>
  248. </template>
  249. <script>
  250. import Page from "../../components/Page";
  251. export default {
  252. components: {
  253. Page,
  254. },
  255. data() {
  256. return {
  257. // edit:0,
  258. form: {
  259. name: "",
  260. page: 1,
  261. page_size: 20,
  262. date: "day",
  263. day_value: '',
  264. week_value: '',
  265. month_value: '',
  266. },
  267. total: 1,
  268. list: [{ name: "2333" }],
  269. loading: false,
  270. input: "",
  271. dialogVisible: false,
  272. dialogTitle: "",
  273. dialogVisible1: false,
  274. form1: { qrcode: "" },
  275. file: "",
  276. pickerOptions: {
  277. disabledDate: (time) => {
  278. return time.getTime() > new Date() - 1000 * 60 * 60 * 24;
  279. },
  280. },
  281. order_by: "casci",
  282. order: "descending",
  283. weeks:[]
  284. };
  285. },
  286. methods: {
  287. changeTableSort(e) {
  288. let parm = { order_by: e.prop, order: e.order };
  289. this.order_by = e.prop;
  290. this.order = e.order;
  291. this.getData();
  292. },
  293. delImg() {
  294. this.$set(this.form1, "qrcode", null);
  295. this.$forceUpdate();
  296. },
  297. save() {
  298. this.$refs["form1"].validate((valid) => {
  299. if (valid) {
  300. let parm = this.form1;
  301. let id = this.form1.id;
  302. this.$api.updateJournal(parm).then((res) => {
  303. if (res.data.code == 0) {
  304. this.$message({
  305. type: "success",
  306. message: "上传成功!",
  307. });
  308. this.dialogVisible = false;
  309. this.getData();
  310. } else {
  311. this.$message.error("上传失败!");
  312. }
  313. });
  314. }
  315. });
  316. },
  317. upload() {
  318. this.$api.upJournalData({ file: this.file }).then((res) => {
  319. this.dialogVisible1 = false;
  320. this.getData();
  321. this.$message({
  322. message: "上传成功",
  323. type: "success",
  324. });
  325. });
  326. },
  327. download() {
  328. var parm = { ...this.form };
  329. parm.timerange = parm.timerange.join(",");
  330. parm.order_by = this.order_by;
  331. parm.order = this.order;
  332. this.$api.downloadCASCI(parm).then((res) => {
  333. var elink = document.createElement("a");
  334. let blob = new Blob([res.data], {
  335. type: "application/vnd.ms-excel,charset=UTF-8",
  336. });
  337. let objUrl = URL.createObjectURL(blob);
  338. let file_name = decodeURIComponent(
  339. res.headers["content-disposition"].split("=")[1]
  340. );
  341. console.log(file_name);
  342. elink.download = file_name;
  343. elink.style.display = "none";
  344. elink.href = objUrl;
  345. document.body.appendChild(elink);
  346. elink.click();
  347. document.body.removeChild(elink);
  348. });
  349. },
  350. showQrcode(row) {
  351. // this.form1.journal_id = row.id;
  352. this.form1.id = row.id;
  353. this.form1.qrcode = row.qrcode;
  354. this.dialogVisible = true;
  355. },
  356. showCASCI(row) {
  357. this.$router.push({
  358. path: "/journal/casci/detail",
  359. query: { id: row.journal_id },
  360. });
  361. },
  362. //封面
  363. handleAvatarSuccess(res, file) {
  364. // this.form1.qrcode=file.response.data
  365. this.$set(this.form1, "qrcode", file.response.data);
  366. },
  367. handleAvatarSuccess1(res, file) {
  368. this.file = file.response.data;
  369. },
  370. gopage(size) {
  371. if (size) {
  372. this.form.page_size = size;
  373. }
  374. this.form.page = this.$refs.pageButton.page;
  375. this.getData();
  376. },
  377. edit(row) {
  378. this.$router.push({
  379. path: "/journal/journal/add",
  380. query: { id: row.id },
  381. });
  382. },
  383. add() {
  384. this.$router.push({ path: "/journal/journal/add" });
  385. },
  386. detail(id) {
  387. this.$router.push({
  388. path: "/company/detail",
  389. query: { id: id, page: this.form.page, page_size: this.form.page_size },
  390. });
  391. },
  392. search() {
  393. this.getData()
  394. },
  395. getData() {
  396. var parm = { ...this.form };
  397. parm.order_by = this.order_by;
  398. parm.order = this.order;
  399. parm.week_value=parm.week_value.replace(' 至 ',',')
  400. this.loading = true;
  401. this.$api.getCASCIList(parm).then((res) => {
  402. this.list = res.data.data.list;
  403. this.total = res.data.data.total;
  404. this.loading = false;
  405. });
  406. },
  407. del(id) {
  408. this.$confirm("确定删除吗?关联数据都会被删除!", "提示", {
  409. type: "warning",
  410. }).then(() => {
  411. this.$api.delJournal({ id: id }).then((res) => {
  412. this.$message({
  413. message: "删除成功",
  414. type: "success",
  415. });
  416. this.getData();
  417. });
  418. });
  419. },
  420. getTimer() {
  421. let time = new Date() // 获取当前时间
  422. let nowTime = time.getTime()
  423. let day = time.getDay()
  424. let oneDayTime = 24 * 60 * 60 * 1000; // 一周的时间
  425. let MondayTime = nowTime - (day - 1) * oneDayTime; //显示当前周一
  426. let SundayTime = nowTime + (7 - day) * oneDayTime; //显示当前周日
  427. let setlist = [] // 初始化一个空数组 准备装食物--你好骚啊
  428. for (let i = 0; i < 365*3; i++) {
  429. // 这块我不知道怎么回事一直会有重复的push进去,后面做了去重,可以放心食用,当然也可以优化一下
  430. setlist.push(this.setTime(MondayTime) + ' 至 ' + this.setTime(SundayTime)) // this.setTime()在下面 放心食用
  431. // 重点 push完,赶紧让它获取上一周的时间 oneDayTime上面有写
  432. time = new Date(time - oneDayTime)
  433. nowTime = time.getTime()
  434. day = time.getDay()
  435. MondayTime = nowTime - (day - 1) * oneDayTime; //显示当前周一
  436. SundayTime = nowTime + (7 - day) * oneDayTime; //显示当前周日
  437. }
  438. let list = [...new Set(setlist)] // 简单去重一下
  439. list.shift()
  440. this.weeks=list
  441. this.form.week_value=list[0]
  442. },
  443. setTime(time) {
  444. // 将time时间戳 先格式化一下
  445. let date = new Date(time)
  446. let yy = date.getFullYear()
  447. let m = date.getMonth() + 1
  448. let day = date.getDate()
  449. let str = yy + '-' + (m < 10 ? '0' + m : m) + '-' + (day < 10 ? '0' + day : day)
  450. return str
  451. }
  452. },
  453. created() {
  454. var y = new Date().getFullYear() ,m=(new Date().getMonth() + 1) ,d=new Date().getDate();
  455. m = m > 9 ? m : '0' + m;
  456. d = d > 9 ? d : '0' + d;
  457. this.form.day_value=y+'-'+m+'-'+d;
  458. this.form.month_value=y+'-'+m;
  459. this.getTimer()
  460. this.getData();
  461. // console.log(this.$date.getCurrWeek(new Date()));
  462. },
  463. beforeRouteEnter(to, from, next) {
  464. next((vm) => {
  465. if (from.path.indexOf("add") >= 0) {
  466. vm.getData();
  467. }
  468. });
  469. },
  470. };
  471. </script>