Sfoglia il codice sorgente

已处理&未处理的数据库

Alex 9 mesi fa
parent
commit
959f8d78aa

+ 2 - 2
src/views/recycle/bookTypes/index.vue

@@ -11,7 +11,7 @@
     >
       <template #toolbar>
         <el-radio-group @change="handleStatusChange" v-model="bookTag">
-          <el-radio-button label="全部" value="0" />
+          <el-radio-button label="全部" value="-1" />
           <el-radio-button label="教材库" value="1" />
           <el-radio-button label="社科库" value="2" />
         </el-radio-group>
@@ -62,7 +62,7 @@
   const { proxy } = getCurrentInstance();
   defineOptions({ name: 'recycleBooklist' });
 
-  const bookTag = ref('0');
+  const bookTag = ref('-1');
   function handleStatusChange(value) {
     pageRef.value.reload({ bookTag: value });
   }

+ 66 - 0
src/views/recycle/pending/components/deal-log.vue

@@ -0,0 +1,66 @@
+<!-- 处理日志弹窗 -->
+<template>
+  <ele-modal
+    :width="700"
+    v-model="visible"
+    title="处理日志"
+    @open="handleOpen"
+    :body-style="{ padding: '0' }"
+  >
+    <common-table
+      ref="pageRef"
+      :pageConfig="pageConfig"
+      :columns="columns"
+      :tools="false"
+      :immediate="false"
+    >
+    </common-table>
+    <template #footer>
+      <el-button @click="handleCancel">关闭</el-button>
+    </template>
+  </ele-modal>
+</template>
+
+<script setup>
+  import { ref, reactive } from 'vue';
+  import request from '@/utils/request';
+  import CommonTable from '@/components/CommonPage/CommonTable.vue';
+
+  const pageRef = ref(null);
+  /** 弹窗是否打开 */
+  const visible = defineModel({ type: Boolean });
+  /** 当前记录ID */
+  const currentId = ref(null);
+
+  /** 关闭弹窗 */
+  const handleCancel = () => {
+    visible.value = false;
+  };
+
+  /** 弹窗打开事件 */
+  const handleOpen = (id) => {
+    if (id) {
+      currentId.value = id;
+      visible.value = true;
+      pageConfig.value.pageUrl = `/book/bookNoData/book/bookNoData/getDisposeLog/${id}`;
+      pageRef.value?.reload();
+    }
+  };
+
+  /** 表格列配置 */
+  const columns = ref([
+    { label: '处理方式', prop: 'disposeType', align: 'center' },
+    { label: '处理人', prop: 'disposeName', align: 'center' },
+    { label: '处理时间', prop: 'createTime', align: 'center', width: 180 }
+  ]);
+
+  const pageConfig = ref({
+    pageUrl: '',
+    fileName: '处理日志',
+    cacheKey: 'deal-log'
+  });
+
+  defineExpose({
+    handleOpen
+  });
+</script>

+ 6 - 5
src/views/recycle/pending/components/page-search.vue

@@ -19,15 +19,16 @@
 
   const formItems = reactive([
     { type: 'input', label: 'ISBN', prop: 'isbn' },
-    { type: 'select', label: '状态', prop: 'author' },
-    { type: 'input', label: '处理人', prop: 'publisher' },
-    { type: 'select', label: '处理标记', prop: 'author' }
+    { type: 'dictSelect', label: '状态', prop: 'status', props: { code: 'dispose_status' } },
+    { type: 'input', label: '处理人', prop: 'disposeName' },
+    { type: 'select', label: '处理标记', prop: 'disposeFlag' }
   ]);
 
   const initKeys = reactive({
-    bookName: '',
     isbn: '',
-    author: ''
+    status: '',
+    disposeName: '',
+    disposeFlag: ''
   });
 
   const searchRef = ref(null);

+ 100 - 28
src/views/recycle/pending/index.vue

@@ -13,7 +13,7 @@
           type="success"
           plain
           v-permission="'recycle:pending:oneDetection'"
-          @click="handleOptBooklist()"
+          @click="handleOneDetection()"
         >
           一键检测
         </el-button>
@@ -29,12 +29,38 @@
           type="warning"
           plain
           v-permission="'recycle:pending:clear'"
-          @click="handleOptBlacklist()"
+          @click="handleClear()"
         >
           清空
         </el-button>
       </template>
 
+      <template #checkStatus="{ row }">
+        <dict-data
+          code="is_common_yes"
+          type="tag"
+          :model-value="row.checkStatus"
+        />
+      </template>
+
+      <template #status="{ row }">
+        <dict-data
+          code="dispose_status"
+          type="text"
+          :model-value="row.status"
+        />
+      </template>
+
+      <template #dealMark="{ row }">
+        <el-tooltip :content="row.exportTimes" v-if="row.exportTimes">
+          <el-tag type="success">导</el-tag>
+        </el-tooltip>
+        <el-tooltip :content="row.crawlerTimes" v-if="row.crawlerTimes">
+          <el-tag type="danger" style="margin-left: 10px">爬</el-tag>
+        </el-tooltip>
+        <span v-if="!row.exportTimes && !row.crawlerTimes">-</span>
+      </template>
+
       <template #action="{ row }">
         <el-button
           type="primary"
@@ -48,7 +74,7 @@
           type="danger"
           link
           v-permission="'recycle:pending:deal'"
-          @click="handleDelete(row)"
+          @click="handleDeal(row)"
         >
           [去处理]
         </el-button>
@@ -56,7 +82,7 @@
           type="success"
           link
           v-permission="'recycle:pending:detection'"
-          @click="handleDelete(row)"
+          @click="handleDetectionById(row)"
         >
           [检测]
         </el-button>
@@ -64,12 +90,15 @@
           type="warning"
           link
           v-permission="'recycle:pending:dealLog'"
-          @click="handleModifyType(row)"
+          @click="handleDealLog(row)"
         >
           [处理日志]
         </el-button>
       </template>
     </common-table>
+
+    <books-edit ref="editRef"></books-edit>
+    <deal-log ref="dealLogRef"></deal-log>
   </ele-page>
 </template>
 
@@ -77,28 +106,32 @@
   import { ref, reactive } from 'vue';
   import CommonTable from '@/components/CommonPage/CommonTable.vue';
   import pageSearch from './components/page-search.vue';
-  import { useDictData } from '@/utils/use-dict-data';
-
-  defineOptions({ name: 'pending' });
-  const [useStatusDicts, bookTagDicts] = useDictData([
-    'use_status',
-    'book_tag_ku'
-  ]);
+  import booksEdit from '@/views/data/books/components/books-edit.vue';
+  import dealLog from './components/deal-log.vue';
+  import request from '@/utils/request';
 
-  const useStatus = ref('0');
-  function handleStatusChange(value) {
-    pageRef.value.reload({ useStatus: value });
-  }
+  defineOptions({ name: 'pendingDetection' });
 
   /** 表格列配置 */
   const columns = ref([
-    { label: 'ID', prop: 'id', width: 120 },
-    { label: 'ISBN', prop: 'isbn' },
-    { label: '处理标记', prop: 'discount' },
-    { label: '创建时间', prop: 'price' },
-    { label: '是否检测', prop: 'maxRecycledAmount' },
-    { label: '处理人', prop: 'remainingRecycledAmount' },
-    { label: '状态', prop: 'alertNum' },
+    { label: 'ID', prop: 'id', width: 120, align: 'center' },
+    { label: 'ISBN', prop: 'isbn', align: 'center' },
+    { label: '扫描次数', prop: 'scanTimes', align: 'center' },
+    { label: '处理标记', prop: 'dealMark', slot: 'dealMark', align: 'center' },
+    { label: '创建时间', prop: 'createTime', align: 'center' },
+    {
+      label: '是否检测',
+      prop: 'checkStatus',
+      slot: 'checkStatus',
+      align: 'center'
+    },
+    {
+      label: '处理人',
+      prop: 'disposeName',
+      align: 'center',
+      formatter: (row) => row.disposeName || '-'
+    },
+    { label: '状态', prop: 'status', slot: 'status', align: 'center' },
     {
       columnKey: 'action',
       label: '操作',
@@ -112,9 +145,9 @@
   const pageRef = ref(null);
 
   const pageConfig = reactive({
-    pageUrl: '/book/bookInfo/list',
-    exportUrl: '/book/bookInfo/export',
-    fileName: '待处理ISBN',
+    pageUrl: '/book/bookNoData/unDispose/pagelist',
+    exportUrl: '/book/bookNoData/unDispose/export',
+    fileName: '待处理数据库',
     cacheKey: 'pendingTable'
   });
 
@@ -125,16 +158,55 @@
 
   //导出excel
   function handleExportExcel() {
-    pageRef.value?.exportData('待处理ISBN');
+    pageRef.value?.exportData('待处理数据库');
+  }
+
+  //一键检测
+  function handleOneDetection() {
+    pageRef.value?.messageBoxConfirm({
+      message: '确定要执行一键检测吗?',
+      fetch: () => request.post('/book/bookNoData/unDispose/check')
+    });
+  }
+
+  //去处理
+  function handleDeal(row) {
+    editRef.value?.handleOpen(row);
   }
 
   //删除
   function handleDelete(row) {
     pageRef.value?.messageBoxConfirm({
       message: '确定删除吗?',
-      fetch: () => request.get('/common/exportrecord/deleteRecord?id=' + row.id)
+      fetch: () => request.post('/book/bookNoData/deleteById', { id: row.id })
     });
   }
+
   //修改类型
   function handleModifyType(row) {}
+
+  //清空
+  function handleClear() {
+    let selections = pageRef.value?.getSelections();
+    pageRef.value?.operatBatch({
+      title: '确定要执行清空吗?',
+      method: 'post',
+      url: '/book/bookNoData/unDispose/clear',
+      data: { ids: selections.map((item) => item.id) }
+    });
+  }
+
+  //根据ID检测
+  function handleDetectionById(row) {
+    pageRef.value?.messageBoxConfirm({
+      message: '确定要检测该条记录吗?',
+      fetch: () => request.post(`/book/bookNoData/unDispose/checkId/${row.id}`)
+    });
+  }
+
+  //处理日志
+  const dealLogRef = ref(null);
+  function handleDealLog(row) {
+    dealLogRef.value?.handleOpen(row.id);
+  }
 </script>

+ 45 - 0
src/views/recycle/processed/components/page-search.vue

@@ -0,0 +1,45 @@
+<!-- 搜索表单 -->
+<template>
+  <ele-card :body-style="{ paddingBottom: '8px' }">
+    <ProSearch
+      :items="formItems"
+      ref="searchRef"
+      @search="search"
+      :initKeys="initKeys"
+    ></ProSearch>
+  </ele-card>
+</template>
+
+<script setup>
+  import { reactive, ref, defineEmits } from 'vue';
+  import ProSearch from '@/components/CommonPage/ProSearch2.vue';
+
+  let { proxy } = getCurrentInstance();
+  const emit = defineEmits(['search']);
+
+  const formItems = reactive([
+    { type: 'input', label: 'ISBN', prop: 'isbn' },
+    { type: 'input', label: '处理人', prop: 'disposeName' },
+    {
+      type: 'dictSelect',
+      label: '分类',
+      prop: 'bookTag',
+      props: { code: 'book_tag_ku' }
+    },
+    { type: 'select', label: '处理标记', prop: 'disposeFlag' }
+  ]);
+
+  const initKeys = reactive({
+    isbn: '',
+    bookTag: '',
+    disposeName: '',
+    disposeFlag: ''
+  });
+
+  const searchRef = ref(null);
+  /** 搜索 */
+  const search = (data) => {
+    let params = JSON.parse(JSON.stringify(data));
+    emit('search', params);
+  };
+</script>

+ 96 - 37
src/views/recycle/processed/index.vue

@@ -12,40 +12,71 @@
         <el-button
           type="success"
           plain
-          v-permission="'recycle:processed:oneDetection'"
-          @click="handleOptBooklist()"
+          v-permission="'recycle:pending:exprot'"
+          @click="handleExportExcel()"
         >
-          一键检测
+          导出Excel
         </el-button>
         <el-button
-          type="success"
+          type="warning"
           plain
-          v-permission="'recycle:processed:exprot'"
-          @click="handleExportExcel()"
+          v-permission="'recycle:pending:clear'"
+          @click="handleClear()"
         >
-          导出Excel
+          清空
         </el-button>
       </template>
 
+      <template #checkStatus="{ row }">
+        <dict-data
+          code="is_common_yes"
+          type="tag"
+          :model-value="row.checkStatus"
+        />
+      </template>
+
+      <template #bookTag="{ row }">
+        <dict-data
+          v-if="row.bookTag"
+          code="book_tag_ku"
+          type="text"
+          :model-value="row.bookTag"
+        />
+        <span v-else>未分配</span>
+      </template>
+
+      <template #dealMark="{ row }">
+        <el-tooltip :content="row.exportTimes" v-if="row.exportTimes">
+          <el-tag type="success">导</el-tag>
+        </el-tooltip>
+        <el-tooltip :content="row.crawlerTimes" v-if="row.crawlerTimes">
+          <el-tag type="danger" style="margin-left: 10px">爬</el-tag>
+        </el-tooltip>
+        <span v-if="!row.exportTimes && !row.crawlerTimes">-</span>
+      </template>
+
       <template #action="{ row }">
         <el-button
           type="primary"
           link
-          v-permission="'recycle:processed:delete'"
-          @click="handleDelete(row)"
+          v-permission="'recycle:pending:delete'"
+          @click="handleEdit(row)"
         >
-          [删除]
+          [编辑]
         </el-button>
         <el-button
           type="warning"
           link
-          v-permission="'recycle:processed:dealLog'"
-          @click="handleModifyType(row)"
+          v-permission="'recycle:pending:dealLog'"
+          @click="handleDealLog(row)"
         >
           [处理日志]
         </el-button>
       </template>
     </common-table>
+
+    <books-edit ref="editRef"></books-edit>
+    <deal-log ref="dealLogRef"></deal-log>
   </ele-page>
 </template>
 
@@ -53,32 +84,40 @@
   import { ref, reactive } from 'vue';
   import CommonTable from '@/components/CommonPage/CommonTable.vue';
   import pageSearch from '@/views/recycle/pending/components/page-search.vue';
-  import { useDictData } from '@/utils/use-dict-data';
+  import booksEdit from '@/views/data/books/components/books-edit.vue';
+  import dealLog from '@/views/recycle/pending/components/deal-log.vue';
+  import request from '@/utils/request';
 
   defineOptions({ name: 'processed' });
-  const [useStatusDicts, bookTagDicts] = useDictData([
-    'use_status',
-    'book_tag_ku'
-  ]);
-
-  const useStatus = ref('0');
-  function handleStatusChange(value) {
-    pageRef.value.reload({ useStatus: value });
-  }
 
   /** 表格列配置 */
   const columns = ref([
-    { label: 'ID', prop: 'id', width: 120 },
-    { label: 'ISBN', prop: 'isbn' },
-    { label: '处理标记', prop: 'discount' },
-    { label: '创建时间', prop: 'price' },
-    { label: '是否检测', prop: 'maxRecycledAmount' },
-    { label: '处理人', prop: 'remainingRecycledAmount' },
-    { label: '状态', prop: 'alertNum' },
+    { label: 'ID', prop: 'id', width: 120, align: 'center' },
+    { label: 'ISBN', prop: 'isbn', align: 'center' },
+    { label: '处理标记', prop: 'dealMark', slot: 'dealMark', align: 'center' },
+    { label: '创建时间', prop: 'createTime', align: 'center' },
+    {
+      label: '是否检测',
+      prop: 'checkStatus',
+      slot: 'checkStatus',
+      align: 'center'
+    },
+    {
+      label: '处理人',
+      prop: 'disposeName',
+      align: 'center',
+      formatter: (row) => row.disposeName || '-'
+    },
+    {
+      label: '分类',
+      prop: 'bookTag',
+      align: 'center',
+      slot: 'bookTag'
+    },
     {
       columnKey: 'action',
       label: '操作',
-      width: 160,
+      width: 200,
       slot: 'action',
       fixed: 'right'
     }
@@ -88,9 +127,9 @@
   const pageRef = ref(null);
 
   const pageConfig = reactive({
-    pageUrl: '/book/bookInfo/list',
-    exportUrl: '/book/bookInfo/export',
-    fileName: '已处理ISBN',
+    pageUrl: '/book/bookNoData/disposed/pagelist',
+    exportUrl: '/book/bookNoData/disposed/export',
+    fileName: '已处理数据库',
     cacheKey: 'processedTable'
   });
 
@@ -101,16 +140,36 @@
 
   //导出excel
   function handleExportExcel() {
-    pageRef.value?.exportData('已处理ISBN');
+    pageRef.value?.exportData('已处理数据库');
   }
 
   //删除
   function handleDelete(row) {
     pageRef.value?.messageBoxConfirm({
       message: '确定删除吗?',
-      fetch: () => request.get('/common/exportrecord/deleteRecord?id=' + row.id)
+      fetch: () => request.post('/book/bookNoData/deleteById', { id: row.id })
     });
   }
-  //修改类型
-  function handleModifyType(row) {}
+
+  //清空
+  function handleClear() {
+    let selections = pageRef.value?.getSelections();
+    pageRef.value?.operatBatch({
+      title: '确定要执行清空吗?',
+      method: 'post',
+      url: '/book/bookNoData/disposed/clear',
+      data: { ids: selections.map((item) => item.id) }
+    });
+  }
+
+  //编辑
+  function handleEdit(row) {
+    editRef.value?.handleOpen(row);
+  }
+
+  //处理日志
+  const dealLogRef = ref(null);
+  function handleDealLog(row) {
+    dealLogRef.value?.handleOpen(row.id);
+  }
 </script>