index.vue 3.1 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107
  1. <template>
  2. <div id="index">
  3. <data-table :fields="fields" :opera="opera" :data="list" :total="total" @query="search" @view="toView">
  4. <template #btn>
  5. <el-popover placement="bottom" width="370" trigger="click" style="margin-right: 10px">
  6. <template #reference>
  7. <el-button type="primary" size="mini">导入</el-button>
  8. </template>
  9. <el-upload
  10. class="upload-demo"
  11. drag
  12. action="/files/platform/patent_cms_import/upload"
  13. multiple
  14. :on-success="uSuccess"
  15. :on-error="uError"
  16. :before-upload="uBefore"
  17. :show-file-list="false"
  18. >
  19. <i class="el-icon-upload"></i>
  20. <div class="el-upload__text">将文件拖到此处,或<em>点击上传</em></div>
  21. </el-upload>
  22. </el-popover>
  23. </template>
  24. </data-table>
  25. <el-dialog title="错误记录" center :visible.sync="dialog" :destroy-on-close="true">
  26. <el-table border stripe :data="errorList">
  27. <el-table-column align="center" label="错误记录">
  28. <template v-slot="{ row }">{{ row }}</template>
  29. </el-table-column>
  30. </el-table>
  31. </el-dialog>
  32. </div>
  33. </template>
  34. <script>
  35. import { mapState, createNamespacedHelpers } from 'vuex';
  36. const { mapActions: disclosure } = createNamespacedHelpers('disclosure');
  37. export default {
  38. name: 'index',
  39. props: {},
  40. components: {},
  41. data: function () {
  42. return {
  43. list: [],
  44. total: 0,
  45. fields: [
  46. { label: '专利名称', model: 'name', filter: true },
  47. { label: '申请人', model: 'apply_name' },
  48. { label: '申请类型', model: 'type' },
  49. { label: '技术联系人', model: 'contact' },
  50. { label: '联系人电话', model: 'phone' },
  51. { label: '联系人邮箱', model: 'email' },
  52. ],
  53. opera: [{ label: '查看', method: 'view' }],
  54. dialog: false,
  55. errorList: [],
  56. };
  57. },
  58. created() {},
  59. methods: {
  60. ...disclosure(['import']),
  61. async search({ skip = 0, limit = 10, ...info } = {}) {
  62. console.log('in function:');
  63. },
  64. toView({ data }) {
  65. // TODO查看
  66. },
  67. // 导入
  68. async toImport(uri) {
  69. const res = await this.import({ uri });
  70. const { data } = res;
  71. if (data) {
  72. this.$message.error('导入失败');
  73. this.$set(this, 'errorList', data);
  74. this.dialog = true;
  75. } else {
  76. this.$message.success('导入成功');
  77. }
  78. },
  79. // 上传成功
  80. uSuccess(response, file, fileList) {
  81. const { uri } = response;
  82. this.$checkRes(response, '上传成功!正在导入,请稍后...');
  83. this.toImport(uri);
  84. },
  85. // 上传失败
  86. uError(err, file, fileList) {
  87. this.$message.error('上传失败');
  88. },
  89. // 正在上传
  90. uBefore() {
  91. this.$message('正在上传');
  92. },
  93. },
  94. computed: {
  95. ...mapState(['user']),
  96. pageTitle() {
  97. return `${this.$route.meta.title}`;
  98. },
  99. },
  100. metaInfo() {
  101. return { title: this.$route.meta.title };
  102. },
  103. };
  104. </script>
  105. <style lang="less" scoped></style>