index.vue 4.9 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166
  1. <template>
  2. <div id="index">
  3. <el-row>
  4. <el-col :span="24" class="main">
  5. <el-col :span="24" class="top">
  6. <el-popover placement="bottom" width="370" trigger="click" style="margin-right:10px">
  7. <template #reference>
  8. <el-button type="primary" size="mini">导入</el-button>
  9. </template>
  10. <el-upload
  11. class="upload-demo"
  12. drag
  13. action="/files/platform/patent_import/upload"
  14. multiple
  15. :on-success="uSuccess"
  16. :on-error="uError"
  17. :before-upload="uBefore"
  18. :show-file-list="false"
  19. >
  20. <i class="el-icon-upload"></i>
  21. <div class="el-upload__text">将文件拖到此处,或<em>点击上传</em></div>
  22. </el-upload>
  23. </el-popover>
  24. <el-button type="primary" size="mini" @click="getTemplate">下载导入模板</el-button>
  25. <el-button type="primary" size="mini" @click="toExport">导出</el-button>
  26. <el-button type="primary" size="mini" @click="toResult">查看导出结果</el-button>
  27. <el-button type="primary" size="mini" @click="add">添加</el-button>
  28. </el-col>
  29. <el-col :span="24" class="down">
  30. <data-table :fields="fields" :opera="opera" :data="list" :total="total" @query="search" @edit="toEdit" @delete="toDelete"></data-table>
  31. </el-col>
  32. </el-col>
  33. </el-row>
  34. <el-dialog :visible.sync="dialog" title="错误记录">
  35. <el-table border stripe :data="errorList">
  36. <el-table-column align="center" label="错误记录">
  37. <template v-slot="{ row }">{{ row }}</template>
  38. </el-table-column>
  39. </el-table>
  40. </el-dialog>
  41. </div>
  42. </template>
  43. <script>
  44. import dataTable from '@common/src/components/frame/filter-page-table.vue';
  45. import { mapState, createNamespacedHelpers } from 'vuex';
  46. const { mapActions: patent } = createNamespacedHelpers('patent');
  47. export default {
  48. metaInfo() {
  49. return { title: this.$route.meta.title };
  50. },
  51. name: 'index',
  52. props: {},
  53. components: { dataTable },
  54. data: function() {
  55. return {
  56. opera: [
  57. {
  58. label: '编辑',
  59. method: 'edit',
  60. },
  61. {
  62. label: '删除',
  63. method: 'delete',
  64. },
  65. ],
  66. fields: [
  67. { label: '申请号', prop: 'create_number', filter: 'input' },
  68. { label: '公开(公告)号', prop: 'success_number', filter: 'input' },
  69. { label: '标题', prop: 'name', filter: 'input' },
  70. { label: '发明人', prop: 'inventor', filter: 'input' },
  71. { label: '专利有效性', prop: 'term' },
  72. { label: '专利类型', prop: 'type' },
  73. ],
  74. list: [],
  75. total: 0,
  76. dialog: false,
  77. errorList: [],
  78. };
  79. },
  80. async created() {
  81. await this.search();
  82. },
  83. methods: {
  84. ...patent(['query', 'fetch', 'create', 'update', 'delete', 'import', 'export']),
  85. async search({ skip = 0, limit = 10, ...info } = {}) {
  86. let res = await this.query({ skip, limit, ...info });
  87. if (this.$checkRes(res)) {
  88. this.$set(this, `list`, res.data);
  89. this.$set(this, `total`, res.total);
  90. }
  91. },
  92. // 修改
  93. toEdit({ data }) {
  94. this.$router.push({ path: '/patent/detail', query: { id: data.id } });
  95. },
  96. // 删除
  97. async toDelete({ data }) {
  98. let res = await this.delete(data.id);
  99. if (this.$checkRes(res)) {
  100. this.$message({
  101. message: '信息删除成功',
  102. type: 'success',
  103. });
  104. this.search();
  105. }
  106. },
  107. // 添加数据
  108. add() {
  109. this.$router.push({ path: '/patent/detail' });
  110. },
  111. // 导出
  112. async toExport() {
  113. const res = await this.export();
  114. this.$checkRes(res, '正在导出,详情请点击"查看导出结果"进行查看', res.errmsg || '导出失败');
  115. },
  116. // 查看导出结果
  117. async toResult() {
  118. this.$router.push({ path: '/patent/result' });
  119. },
  120. // 导入
  121. async toImport(uri) {
  122. const res = await this.import({ uri });
  123. const { data } = res;
  124. if (data) {
  125. this.$message.error('导入失败');
  126. this.$set(this, 'errorList', data);
  127. this.dialog = true;
  128. } else {
  129. this.$message.success('导入成功');
  130. }
  131. },
  132. // 上传成功
  133. uSuccess(response, file, fileList) {
  134. const { uri } = response;
  135. this.$checkRes(response, '上传成功!正在导入,请稍后...');
  136. this.toImport(uri);
  137. },
  138. // 上传失败
  139. uError(err, file, fileList) {
  140. this.$message.error('上传失败');
  141. },
  142. // 正在上传
  143. uBefore() {
  144. this.$message('正在上传');
  145. },
  146. // 下载模板
  147. getTemplate() {
  148. window.open('./数据模板.xlsx');
  149. },
  150. },
  151. computed: {
  152. ...mapState(['user']),
  153. },
  154. watch: {},
  155. };
  156. </script>
  157. <style lang="less" scoped>
  158. .main {
  159. .top {
  160. text-align: right;
  161. margin: 0 0 10px 0;
  162. }
  163. }
  164. </style>